# Foundation Cleanup TODO **Date:** April 29, 2026 **Goal:** Correct known issues, standardize APIs, implement message handlers, and prepare solid foundation with unit tests for Chat Session UI implementation. --- ## Phase 1: Fix Type Errors & Interface Conflicts ✅ COMPLETE ### 1.1 Resolve Duplicate `DroneStatus` Enum - **File:** `gadget-drone/src/services/platform.ts` - **Action:** Remove local `DroneStatus` enum, import from `@gadget/api` - **Status:** ✅ Complete ### 1.2 Resolve `IAiProvider` Interface Conflict - **Files:** - `packages/api/src/interfaces/ai-provider.ts` (Mongoose document) - `packages/ai/src/api.ts` (runtime config) - **Action:** Create mapper in `gadget-drone/src/services/ai.ts` to convert DB model → runtime config - **Status:** ✅ Complete ### 1.3 Fix `ToolCallMessage` Signature - **File:** `packages/api/src/messages/drone.ts:26-30` - **Issue:** Missing `callId` parameter required by `IChatToolCall` - **Action:** Add `callId: string` as first parameter - **Status:** ✅ Complete ### 1.4 Fix `ChatTurnStats` Schema Mismatch - **File:** `gadget-code/src/models/chat-turn.ts:70-76` - **Issue:** Schema uses `thinkingTokens`, interface uses `thinkingTokenCount` - **Action:** Standardize on `thinkingTokenCount` in schema - **Status:** ✅ Complete ### 1.5 Fix `ChatToolCallSchema` Missing `callId` - **File:** `gadget-code/src/models/chat-turn.ts:31-36` - **Issue:** Schema doesn't include required `callId` field - **Action:** Add `callId: { type: String, required: true }` to schema - **Status:** ✅ Complete --- ## Phase 2: Implement Prompt Submission Flow ✅ COMPLETE ### 2.1 Implement `CodeSession.onSubmitPrompt()` - **File:** `gadget-code/src/lib/code-session.ts:58-60` - **Action:** - Create `ChatTurn` document with status `Processing` - Build work order from `ChatSession`, `Project`, `IAiProvider`, prompt - Find target drone's `DroneSession` - Emit `processWorkOrder` to drone - Update `ChatTurn` with drone acknowledgment - **Missing:** Track `selectedDrone`, `chatSession`, `project` in `CodeSession` - **Status:** ✅ Complete ### 2.2 Add Drone Selection to `CodeSession` - **File:** `gadget-code/src/lib/code-session.ts` - **Action:** Add properties and methods to track selected drone, chat session, project - **Status:** ✅ Complete ### 2.3 Add `provider` and `selectedModel` to ChatSession - **Files:** - `packages/api/src/interfaces/chat-session.ts` - `gadget-code/src/models/chat-session.ts` - **Status:** ✅ Complete ### 2.4 Unit Tests for CodeSession - **File:** `gadget-code/tests/code-session.test.ts` - **Tests:** 9 tests covering prompt submission flow - **Status:** ✅ Complete (all passing) --- ## Phase 3: Implement Event Routing (Drone→IDE) ### 3.1 Add DroneSession Event Handlers - **File:** `gadget-code/src/lib/drone-session.ts:21-23` - **Action:** Register handlers for: - `thinking` - `response` - `toolCall` - `workOrderComplete` - **Status:** ⬜ Pending ### 3.2 Implement Routing Logic - **File:** `gadget-code/src/lib/drone-session.ts` - **Action:** Implement handlers that: - Find corresponding `CodeSession` by `chatSessionId` - Forward event to IDE socket - Update `ChatTurn` document with new data - **Status:** ⬜ Pending ### 3.3 Add `getCodeSessionByChatSessionId()` to `SocketService` - **File:** `gadget-code/src/services/socket.ts` - **Action:** Maintain reverse index: `chatSessionId → CodeSession` - **Status:** ⬜ Pending --- ## Phase 4: Emit Events from AWL ### 4.1 Pass Socket into `AgentService.process()` - **File:** `gadget-drone/src/gadget-drone.ts:229` - **Action:** Pass `this.socket` reference to `AgentService.process()` - **Status:** ⬜ Pending ### 4.2 Add Event Emissions to AWL Loop - **File:** `gadget-drone/src/services/agent.ts:70-98` - **Action:** Emit streaming events: - `thinking` when reasoning content arrives - `response` when text content streams - `toolCall` after each tool execution - `workOrderComplete` when loop exits - **Status:** ⬜ Pending ### 4.3 Implement Workspace Mode Transitions - **File:** `gadget-drone/src/services/agent.ts` - **Action:** - Emit `requestWorkspaceMode(agent)` before starting AWL - Wait for acknowledgment - Emit `requestWorkspaceMode(idle)` when complete - **Status:** ⬜ Pending --- ## Phase 5: Workspace Persistence (Crash Recovery) ### 5.1 Create `.gadget/` Directory Structure - **File:** `gadget-drone/src/gadget-drone.ts` - **Action:** Create `WorkspaceService` to manage: - `.gadget/workspace.json` (persistent identity) - `.gadget/work-order.json` (active work order cache) - `.gadget/logs/` directory - **Status:** ⬜ Pending ### 5.2 Implement Workspace Validation on Startup - **File:** `gadget-drone/src/gadget-drone.ts:57-93` - **Action:** Add `validateWorkspace()` method called before registration - **Status:** ⬜ Pending ### 5.3 Write Work Order Cache During Processing - **File:** `gadget-drone/src/gadget-drone.ts:209-229` - **Action:** Write cache BEFORE processing, remove AFTER completion - **Status:** ⬜ Pending ### 5.4 Update Drone Registration to Include `workspaceId` - **Files:** - `packages/api/src/interfaces/drone-registration.ts` - `gadget-drone/src/services/platform.ts` - **Action:** Add `workspaceId: string` to registration - **Status:** ⬜ Pending ### 5.5 Add `workspaceId` to `IChatSession` - **File:** `packages/api/src/interfaces/chat-session.ts` - **Action:** Add field for routing retries to correct workspace - **Status:** ⬜ Pending ### 5.6 Implement Crash Recovery Handler - **Files:** - `gadget-drone/src/gadget-drone.ts` (emit `requestCrashRecovery`) - `gadget-code/src/lib/drone-session.ts` (handle `crashRecoveryResponse`) - **Status:** ⬜ Pending --- ## Phase 6: Error Handling & Concurrency ### 6.1 Add Error Propagation from Drone - **File:** `gadget-drone/src/gadget-drone.ts:209-229` - **Action:** Wrap `AgentService.process()` in try/catch, emit error event on failure - **Status:** ⬜ Pending ### 6.2 Add Concurrency Control - **File:** `gadget-drone/src/gadget-drone.ts` - **Action:** Check `DroneStatus.Busy` before accepting work, reject extras - **Status:** ⬜ Pending ### 6.3 Add Timeout & Heartbeat Mechanism - **File:** `gadget-code/src/lib/drone-session.ts` - **Action:** Prevent IDE hangs on drone crash - **Status:** ⬜ Pending --- ## Phase 7: Unit Tests ### 7.1 Socket Message Handler Tests - **Location:** `gadget-code/tests/socket-handlers.test.ts` - **Tests:** - `CodeSession.onSubmitPrompt()` creates ChatTurn - `DroneSession` routes events to IDE - `SocketService` tracks sessions correctly - **Status:** ⬜ Pending ### 7.2 Drone Message Handler Tests - **Location:** `gadget-drone/tests/message-handlers.test.ts` - **Tests:** - `onRequestSessionLock` validates registration - `onProcessWorkOrder` accepts and processes - Workspace mode transitions work correctly - **Status:** ⬜ Pending ### 7.3 Agent Service Tests - **Location:** `gadget-drone/tests/agent-service.test.ts` - **Tests:** - AWL loop emits `thinking`, `response`, `toolCall` events - Tool calls are executed and responses captured - `workOrderComplete` emitted on finish - **Status:** ⬜ Pending ### 7.4 Workspace Persistence Tests - **Location:** `gadget-drone/tests/workspace.test.ts` - **Tests:** - Workspace validation creates `.gadget/` directory - Work order cache written/removed correctly - Crash recovery flow works end-to-end - **Status:** ⬜ Pending ### 7.5 Type Mapper Tests - **Location:** `gadget-drone/tests/type-mappers.test.ts` - **Tests:** - `IAiProvider` DB → runtime conversion - `ToolCallMessage` → `IChatToolCall` conversion - **Status:** ⬜ Pending --- ## Phase 8: Documentation Cleanup ### 8.1 Remove Bull Queue References - **Files:** - `gadget-drone/docs/agentic-workflow-loop.md` - `gadget-drone/AGENTS.md` - **Action:** Remove all Bull queue references, document Socket.IO-only approach - **Status:** ⬜ Pending ### 8.2 Update AWL Interface Documentation - **Files:** - `gadget-code/docs/agentic-workflow-loop.md` - `gadget-drone/docs/agentic-workflow-loop.md` - **Action:** Delete interface definitions, reference `@gadget/api` only - **Status:** ⬜ Pending ### 8.3 Update foundation-todo.md - **Action:** Mark completed items, update as work progresses - **Status:** ⬜ In Progress --- ## Acceptance Criteria By end of this turn: - [ ] All TypeScript compilation errors resolved - [ ] Message handlers implemented for all socket events - [ ] End-to-end prompt submission flow works (IDE→Web→Drone→Web→IDE) - [ ] Streaming events (`thinking`, `response`, `toolCall`) routed correctly - [ ] Workspace persistence implemented for crash recovery - [ ] Unit tests pass for all implemented functionality - [ ] Documentation cleaned up and consistent - [ ] System ready for Chat Session UI implementation --- ## Notes - Remain on feature branch throughout implementation - Commit frequently to git with descriptive messages - Ask for clarification when encountering ambiguous requirements - Follow existing code conventions and patterns - All code must include unit tests - Keep this document up to date as work progresses