New memory.ts module:
- loadBootstrapContext(): AGENT.md + agent.md + per-project context.md + recent.md
- appendRecent(): rolling window (20 entries) of agent activity
- summarizeToolLog(): extracts tool names from log
Router:
- Resolves projectId from chat_id via auth.ok mappings
- Passes projectId to agent for project-specific context loading
- Flushes memory after each message (appends to recent.md)
Agent:
- Accepts projectId option, passes to bootstrap loader
- Bootstrap now loads project-specific memory when available
System messages (task lifecycle) were being forwarded to agent as
new prompts, causing duplicate task creation. Agent also received
its own chat.send broadcasts back and processed them.
- Router streams text deltas via WS (agent.stream.delta)
- Router streams tool calls (agent.stream.tool)
- Auto-reply via WS chat.send (not REST)
- Thinking blocks collected and sent with final message
- WsClientTransport: sendStreamEvent + sendChatMessage with thinking
- Router receives WS transport reference via setWsTransport()
- tasks.ts: assignee_slug -> assignee_id в параметрах
- Обновлены описания и фильтры для использования UUID идентификаторов
- TrackerClient методы остались без изменений (пока)
Removed: auto in_progress, auto in_review, selfAssignedTasks tracking.
Router only forwards events to agent session and posts replies.
Agent decides status changes, task flow, etc. through MCP tools.
- Chat messages use 'chat-{chat_id}' session → conversation history preserved
- Task messages use 'task-{task_id}' session → task context preserved
- Previously every message created a new random session (no memory)