Files
stack/docs/scratchpads/ms19-chat-terminal-20260225.md
2026-02-26 01:49:40 +00:00

89 lines
3.1 KiB
Markdown

# Mission Scratchpad — MS19 Chat & Terminal System
> Append-only log. NEVER delete entries. NEVER overwrite sections.
> This is the orchestrator's working memory across sessions.
## Original Mission Prompt
```
Plan MS19+, update mission artifacts for Coolify → Portainer transition.
MS18 is complete. Coolify deprecated, Portainer migration in progress with another agent.
```
## Planning Decisions
### 2026-02-25 — Infrastructure Assessment
**Existing chat infrastructure (~95% complete):**
- ChatOverlay.tsx, ConversationSidebar.tsx, ChatInput.tsx, MessageList.tsx
- useChat hook with conversation management and LLM interaction
- Backend LLM controller with SSE streaming support
- Providers: Ollama, Claude, OpenAI
- Chat persistence via Ideas API
**Existing terminal infrastructure (UI-only):**
- TerminalPanel.tsx with tabs, rich output styling, animations
- No backend connection — purely mock UI
**Existing orchestrator infrastructure:**
- Orchestrator service (NestJS, port 3002) with agent spawn/kill/status
- SSE stream at /agents/events for real-time agent status
- Web proxy routes at /api/orchestrator/\*
- Coordinator integration in API for job tracking
**Key pattern reference:**
- Speech gateway (`apps/api/src/speech/speech.gateway.ts`) shows namespace WebSocket pattern with session management
### 2026-02-25 — Architecture Decisions
**Decision: node-pty for terminal backend**
- Standard PTY management for Node.js (used by VS Code)
- Spawns real shell processes (bash/zsh)
- Handles resize, input/output streams
- WebSocket namespace /terminal for communication
**Decision: Terminal sessions in PostgreSQL**
- Consistent with workspace isolation pattern
- Prisma model: TerminalSession (id, workspaceId, name, status, createdAt, closedAt)
- Sessions survive page reload, recover on reconnect
**Decision: SSE for chat streaming (not WebSocket)**
- Backend already has SSE setup in LLM controller
- Only frontend wiring missing (streamChatMessage() is TODO)
- SSE is simpler and sufficient for unidirectional token streaming
**Decision: Orchestrator commands as chat prefixes**
- /spawn, /status, /jobs, /kill parsed in frontend
- Route through existing /api/orchestrator/\* proxy
- Display structured responses inline in chat
### 2026-02-25 — Portainer Migration
**Context:** Coolify has been deprecated and shut down. Infrastructure migration to Portainer is being handled by another agent. All deployment references updated from Coolify to Portainer in PRD and mission manifest.
**Impact on MS19:**
- Deployment target is now Portainer (was Coolify)
- No code changes needed — only infrastructure config
- Smoke testing blocked until Portainer stack is running
## Session Log
### S1 — 2026-02-25
- Read mission state (MS18 complete, all 16 tasks done)
- Explored codebase for MS19 infrastructure (chat, terminal, WebSocket, orchestrator)
- Updated PRD: Coolify → Portainer, added MS18 completion, added MS19 FRs and acceptance criteria
- Created new MISSION-MANIFEST.md for MS19+ mission
- Created TASKS.md with 12-task breakdown (~250K token estimate)
- Created this scratchpad
- Archived MS18 TASKS.md to docs/tasks/MS18-ThemeWidgets-tasks.md