Files
stack/docs/scratchpads/p8-010-command-registry.md
Jason Woltje a4bb563779
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
feat(gateway): CommandRegistryService + CommandExecutorService (P8-010) (#178)
Co-authored-by: Jason Woltje <jason@diversecanvas.com>
Co-committed-by: Jason Woltje <jason@diversecanvas.com>
2026-03-16 02:10:31 +00:00

2.5 KiB

P8-010 Scratchpad — Gateway Phase 2: CommandRegistryService + CommandExecutorService

Objective

Implement gateway-side command registry system:

  • CommandRegistryService — owns canonical command manifest, broadcasts on connect
  • CommandExecutorService — routes command:execute socket events
  • CommandsModule — NestJS wiring
  • Wire into ChatGateway and AppModule
  • Register core commands
  • Tests for CommandRegistryService

Key Findings from Codebase

CommandDef shape (from packages/types/src/commands/index.ts)

  • scope: 'core' | 'agent' | 'skill' | 'plugin' | 'admin' (NOT category)
  • args?: CommandArgDef[] — array of arg defs, each with name, type, optional, values?, description?
  • No aliases required (it's listed but optional-ish... wait, it IS in the interface)
  • aliases: string[] — IS present

SlashCommandResultPayload requires conversationId

  • The task spec shows { command, success, error } without conversationId but actual type requires it
  • Must include conversationId in all return values

CommandManifest has skills: SkillCommandDef[]

  • Must include skills array in manifest

userId extraction in ChatGateway

  • client.data.user holds the user object (set in handleConnection)
  • client.data.user.id or similar for userId

AgentModule not imported in ChatModule

  • ChatGateway imports AgentService via DI
  • ChatModule doesn't declare imports — AgentModule must be global or imported

Worktree branch

  • Branch: feat/p8-010-command-registry
  • Working in: /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-ac85b3b2

Plan

  1. Create apps/gateway/src/commands/command-registry.service.ts
  2. Create apps/gateway/src/commands/command-executor.service.ts
  3. Create apps/gateway/src/commands/commands.module.ts
  4. Modify apps/gateway/src/app.module.ts — add CommandsModule
  5. Modify apps/gateway/src/chat/chat.module.ts — import CommandsModule
  6. Modify apps/gateway/src/chat/chat.gateway.ts — inject services, add handler, emit manifest
  7. Create apps/gateway/src/commands/command-registry.service.spec.ts

Progress

  • Create CommandRegistryService
  • Create CommandExecutorService
  • Create CommandsModule
  • Update AppModule
  • Update ChatModule
  • Update ChatGateway
  • Write tests
  • Run quality gates
  • Commit + push + PR

Risks

  • CommandDef args shape mismatch from task spec — must use actual type
  • SlashCommandResultPayload.conversationId is required — handle missing conversationId