fix: Prevent agents page from scrolling — lock layout to viewport

Body: height 100vh + overflow hidden instead of min-height 100vh,
so the browser never shows a scrollbar on html/body.
AppLayout: h-screen flex column with shrink-0 header and flex-1
min-h-0 overflow-auto main. Pages like initiatives scroll within
main; agents page uses h-full with internal panel scrollers.
This commit is contained in:
Lukas May
2026-02-10 15:34:12 +01:00
parent 142f67c131
commit 3ff1f485f1
6 changed files with 82 additions and 46 deletions

View File

@@ -143,15 +143,27 @@ Agents can communicate with each other via the `conversations` table, coordinate
### Prompt Integration
`INTER_AGENT_COMMUNICATION` constant in `prompts/shared.ts` is appended to all 5 agent mode prompts. It instructs agents to:
1. Start `cw listen --agent-id <ID> &` as a background process at session start
2. Handle incoming questions by answering via `cw answer` and restarting the listener
3. Ask questions to peers via `cw ask --from <ID> --agent-id|--phase-id|--task-id`
4. Kill the listener before writing `signal.json`
1. Set up a background listener via temp-file redirect: `cw listen > $CW_LISTEN_FILE &`
2. Periodically check the temp file for incoming questions between work steps
3. Answer via `cw answer`, clear the file, restart the listener
4. Ask questions to peers via `cw ask --from <ID> --agent-id|--task-id|--phase-id`
5. Kill the listener and clean up the temp file before writing `signal.json`
### Agent Identity
`manifest.json` now includes `agentId` and `agentName` fields. The manager passes these from the DB record after agent creation.
### CLI Commands
- `cw listen`: Polls `getPendingConversations`, prints first pending as JSON, exits
- `cw ask`: Creates conversation, polls `getConversation` until answered, prints answer
- `cw answer`: Calls `answerConversation`, prints confirmation JSON
**`cw listen --agent-id <id> [--timeout <ms>] [--poll-interval <ms>]`**
- Polls `getPendingConversations`, prints first pending as JSON, exits with code 0
- `--timeout`: max wait in ms (default 0=forever)
- `--poll-interval`: polling frequency in ms (default 2000)
- Output: `{ conversationId, fromAgentId, question, phaseId?, taskId? }`
**`cw ask <question> --from <agentId> --agent-id|--task-id|--phase-id <target> [--timeout <ms>] [--poll-interval <ms>]`**
- Creates conversation, polls `getConversation` until answered, prints answer text to stdout
- Target resolution: `--agent-id` (direct), `--task-id` (find agent running task), `--phase-id` (find agent in phase)
- `--timeout` / `--poll-interval`: same defaults as listen
**`cw answer <answer> --conversation-id <id>`**
- Calls `answerConversation`, prints `{ conversationId, status: "answered" }`