Handler-moduser (internal/external/paused), chat-ID, scripts, start/stopp-prosedyrer, feilsøking. Alt en ny sesjon trenger for å starte polling uten forkunnskaper. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
120 lines
3.5 KiB
Markdown
120 lines
3.5 KiB
Markdown
# Claude Code polling — chat-integrasjon
|
|
|
|
## Oversikt
|
|
|
|
Claude Code (denne terminalen) kan svare på meldinger i
|
|
Synops-chatten ved å polle for deferred jobber. Maskinrommet
|
|
ruter meldinger basert på `handler_mode` i `agent_identities`.
|
|
|
|
## Forutsetninger
|
|
|
|
- Claude Code kjører i tmux-sesjon på serveren
|
|
- Maskinrommet kjører (`systemctl status maskinrommet`)
|
|
- PostgreSQL kjører (Docker)
|
|
|
|
## Handler-moduser
|
|
|
|
Sett med:
|
|
```sql
|
|
UPDATE agent_identities SET handler_mode = '<modus>' WHERE agent_key = 'claude-main';
|
|
```
|
|
|
|
| Modus | Oppførsel |
|
|
|-------|-----------|
|
|
| `internal` | Maskinrommet kjører synops-respond (eksternt API). Standard. |
|
|
| `external` | Jobb deferred → Claude Code poller og svarer. |
|
|
| `paused` | Maskinrommet svarer "AI utilgjengelig". Ingen AI-kall. |
|
|
|
|
## Claude Code chat
|
|
|
|
- **Chat-ID:** `abe2edfd-986b-45ba-8c2e-4461a8a7e480`
|
|
- **Tittel:** "Claude Code"
|
|
- **Deltakere:** Vegard + Claude Code agent
|
|
- **URL:** `https://ws.synops.no/chat/abe2edfd-986b-45ba-8c2e-4461a8a7e480`
|
|
|
|
## Starte polling
|
|
|
|
### 1. Sett handler_mode til external
|
|
|
|
```bash
|
|
docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
|
|
UPDATE agent_identities SET handler_mode = 'external', is_active = true
|
|
WHERE agent_key = 'claude-main';
|
|
"
|
|
```
|
|
|
|
### 2. Start polling i Claude Code
|
|
|
|
Si til Claude Code:
|
|
|
|
> Start vaktmester-polling. Sjekk for deferred jobber hvert minutt.
|
|
> Poll med: `/home/vegard/synops/scripts/vaktmester-poll.sh`
|
|
> Svar med: `/home/vegard/synops/scripts/chat-reply.sh <chat-id> "<svar>"`
|
|
> Marker ferdig: `/home/vegard/synops/scripts/vaktmester-complete.sh <job-id>`
|
|
> Chat-ID: abe2edfd-986b-45ba-8c2e-4461a8a7e480
|
|
|
|
Eller bruk `/loop 1m vaktmester-poll` for automatisk polling.
|
|
|
|
### 3. Flyten
|
|
|
|
```
|
|
Bruker skriver i chat
|
|
→ Maskinrommet: create_node + agent_respond jobb
|
|
→ Handler: handler_mode=external → status='deferred'
|
|
→ Claude Code poller: finner deferred jobb
|
|
→ Leser melding fra payload
|
|
→ Behandler (svarer, utfører kommandoer, etc.)
|
|
→ Skriver svar: scripts/chat-reply.sh
|
|
→ Markerer done: scripts/vaktmester-complete.sh
|
|
```
|
|
|
|
## Stoppe polling
|
|
|
|
### Tilbake til eksternt API
|
|
```bash
|
|
docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
|
|
UPDATE agent_identities SET handler_mode = 'internal'
|
|
WHERE agent_key = 'claude-main';
|
|
"
|
|
```
|
|
|
|
### Pause (ingen AI)
|
|
```bash
|
|
docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
|
|
UPDATE agent_identities SET handler_mode = 'paused'
|
|
WHERE agent_key = 'claude-main';
|
|
"
|
|
```
|
|
|
|
## Scripts
|
|
|
|
| Script | Funksjon |
|
|
|--------|----------|
|
|
| `scripts/vaktmester-poll.sh` | Returner JSON med eldste deferred jobb, eller "none" |
|
|
| `scripts/chat-reply.sh <chat-id> "<melding>"` | Skriv melding som Claude Code med access-propagering |
|
|
| `scripts/vaktmester-complete.sh <job-id>` | Marker jobb som completed |
|
|
|
|
## Feilsøking
|
|
|
|
**Jobber forblir deferred for lenge:**
|
|
```bash
|
|
# Sjekk deferred jobber
|
|
docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
|
|
SELECT id, created_at FROM job_queue WHERE status = 'deferred' ORDER BY created_at;
|
|
"
|
|
```
|
|
|
|
**Bytt tilbake til internal hvis Claude Code er nede:**
|
|
```bash
|
|
docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
|
|
UPDATE agent_identities SET handler_mode = 'internal' WHERE agent_key = 'claude-main';
|
|
UPDATE job_queue SET status = 'pending' WHERE status = 'deferred' AND job_type = 'agent_respond';
|
|
"
|
|
```
|
|
|
|
**Sjekk handler_mode:**
|
|
```bash
|
|
docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
|
|
SELECT agent_key, handler_mode, is_active FROM agent_identities;
|
|
"
|
|
```
|