All checks were successful
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com> Co-committed-by: Jason Woltje <jason@diversecanvas.com>
73 lines
2.5 KiB
Markdown
73 lines
2.5 KiB
Markdown
# 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
|