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>
45 lines
2.5 KiB
Markdown
45 lines
2.5 KiB
Markdown
# P8-012 Scratchpad — Gateway /agent, /provider, /mission, /prdy, /tools Commands
|
|
|
|
## Objective
|
|
|
|
Add gateway-executed commands: `/agent`, `/provider`, `/mission`, `/prdy`, `/tools`.
|
|
Key feature: `/provider login` OAuth flow with Valkey poll token.
|
|
|
|
## Plan
|
|
|
|
1. Read all relevant files (done)
|
|
2. Update `command-registry.service.ts` — add 5 new command registrations
|
|
3. Update `commands.module.ts` — wire Redis injection for executor
|
|
4. Update `command-executor.service.ts` — add 5 new command handlers + Redis injection
|
|
5. Write spec file for new commands
|
|
6. Run quality gates (typecheck, lint, format:check, test)
|
|
7. Commit and push
|
|
|
|
## Key Decisions
|
|
|
|
- Redis pattern: same as GCModule — use `REDIS` token injected from a QueueHandle factory
|
|
- `CommandDef` type fields: `scope: 'core'|'agent'|'skill'|'plugin'|'admin'`, `args?: CommandArgDef[]`, `execution: 'local'|'socket'|'rest'|'hybrid'`
|
|
- No `category` or `usage` fields — instruction spec was wrong on that
|
|
- `SlashCommandResultPayload.conversationId` is typed as `string` (not `string | undefined`) per the type
|
|
- Provider commands are `scope: 'agent'` since they relate to agent configuration
|
|
- Redis injection: add a `COMMANDS_REDIS` token in commands module, inject via factory pattern same as GCModule
|
|
|
|
## Progress
|
|
|
|
- [ ] command-registry.service.ts updated
|
|
- [ ] commands.module.ts updated (add Redis provider)
|
|
- [ ] command-executor.service.ts updated (add Redis injection + handlers)
|
|
- [ ] spec file written
|
|
- [ ] quality gates pass
|
|
- [ ] commit + push + PR
|
|
|
|
## Risks
|
|
|
|
- `conversationId` typing: `SlashCommandResultPayload.conversationId` is `string`, but some handler calls pass `undefined`. Need to check if it's optional.
|
|
|
|
After reviewing types: `conversationId: string` in `SlashCommandResultPayload` — not optional. Must pass empty string or actual ID. Looking at existing code: `message: 'Start a new conversation...'` returns `{ command, conversationId, ... }` where conversationId comes from payload which is always a string per `SlashCommandPayload`. For provider commands that don't have a conversationId, pass empty string `''` or the payload's conversationId.
|
|
|
|
Actually looking at the spec more carefully: `handleProvider` returns `conversationId: undefined`. But the type says `string`. This would be a TypeScript error. I'll use `''` as a fallback or adjust. Let me re-examine...
|
|
|
|
The `SlashCommandResultPayload` interface says `conversationId: string` — not optional. But the spec says `conversationId: undefined`. I'll use `payload.conversationId` (passing it through) since it comes from the payload.
|