- Add event handlers to DroneSession (thinking, response, toolCall, workOrderComplete) - Implement routing logic to forward events to CodeSession - Add chat session index to SocketService for reverse lookup - Add workOrderComplete to ServerToClientEvents interface - Update CodeSession to register chat session and set current turn on drone - Add unit tests for DroneSession (12 tests, all passing)
9.3 KiB
9.3 KiB
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
DroneStatusenum, 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.tsto convert DB model → runtime config - Status: ✅ Complete
1.3 Fix ToolCallMessage Signature
- File:
packages/api/src/messages/drone.ts:26-30 - Issue: Missing
callIdparameter required byIChatToolCall - Action: Add
callId: stringas 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 usesthinkingTokenCount - Action: Standardize on
thinkingTokenCountin 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
callIdfield - 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
ChatTurndocument with statusProcessing - Build work order from
ChatSession,Project,IAiProvider, prompt - Find target drone's
DroneSession - Emit
processWorkOrderto drone - Update
ChatTurnwith drone acknowledgment
- Create
- Missing: Track
selectedDrone,chatSession,projectinCodeSession - 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.tsgadget-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) ✅ COMPLETE
3.1 Add DroneSession Event Handlers
- File:
gadget-code/src/lib/drone-session.ts:21-23 - Action: Register handlers for:
thinkingresponsetoolCallworkOrderComplete
- Status: ✅ Complete
3.2 Implement Routing Logic
- File:
gadget-code/src/lib/drone-session.ts - Action: Implement handlers that:
- Find corresponding
CodeSessionbychatSessionId - Forward event to IDE socket
- Update
ChatTurndocument with new data
- Find corresponding
- Status: ✅ Complete
3.3 Add getCodeSessionByChatSessionId() to SocketService
- File:
gadget-code/src/services/socket.ts - Action: Maintain reverse index:
chatSessionId → CodeSession - Status: ✅ Complete
3.4 Add workOrderComplete to ServerToClientEvents
- File:
packages/api/src/messages/socket.ts - Status: ✅ Complete
3.5 Unit Tests for DroneSession
- File:
gadget-code/tests/drone-session.test.ts - Tests: 12 tests covering event routing
- Status: ✅ Complete (all passing)
Phase 4: Emit Events from AWL
4.1 Pass Socket into AgentService.process()
- File:
gadget-drone/src/gadget-drone.ts:229 - Action: Pass
this.socketreference toAgentService.process() - Status: ⬜ Pending
4.2 Add Event Emissions to AWL Loop
- File:
gadget-drone/src/services/agent.ts:70-98 - Action: Emit streaming events:
thinkingwhen reasoning content arrivesresponsewhen text content streamstoolCallafter each tool executionworkOrderCompletewhen 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
- Emit
- Status: ⬜ Pending
Phase 5: Workspace Persistence (Crash Recovery)
5.1 Create .gadget/ Directory Structure
- File:
gadget-drone/src/gadget-drone.ts - Action: Create
WorkspaceServiceto 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.tsgadget-drone/src/services/platform.ts
- Action: Add
workspaceId: stringto 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(emitrequestCrashRecovery)gadget-code/src/lib/drone-session.ts(handlecrashRecoveryResponse)
- 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.Busybefore 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 ChatTurnDroneSessionroutes events to IDESocketServicetracks sessions correctly
- Status: ⬜ Pending
7.2 Drone Message Handler Tests
- Location:
gadget-drone/tests/message-handlers.test.ts - Tests:
onRequestSessionLockvalidates registrationonProcessWorkOrderaccepts 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,toolCallevents - Tool calls are executed and responses captured
workOrderCompleteemitted on finish
- AWL loop emits
- 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
- Workspace validation creates
- Status: ⬜ Pending
7.5 Type Mapper Tests
- Location:
gadget-drone/tests/type-mappers.test.ts - Tests:
IAiProviderDB → runtime conversionToolCallMessage→IChatToolCallconversion
- Status: ⬜ Pending
Phase 8: Documentation Cleanup
8.1 Remove Bull Queue References
- Files:
gadget-drone/docs/agentic-workflow-loop.mdgadget-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.mdgadget-drone/docs/agentic-workflow-loop.md
- Action: Delete interface definitions, reference
@gadget/apionly - 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