gadget/.opencode/plans/foundation-todo.md
2026-04-29 16:09:06 -04:00

8.6 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

1.1 Resolve Duplicate DroneStatus Enum

  • File: gadget-drone/src/services/platform.ts
  • Action: Remove local DroneStatus enum, import from @gadget/api
  • Status: Pending

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: Pending

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: Pending

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: Pending

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: Pending

Phase 2: Implement Prompt Submission Flow

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: Pending

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: Pending

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
    • ToolCallMessageIChatToolCall 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