v2.0.3: CLI client + human inbox + cost tracking + Boomerang new_task

Phase 7 of v2.0. BooCoder gains a terminal-driven UX and subagent
isolation primitive.

CLI (src/cli.ts): standalone entry point for terminal use.
- boocode run "task" [--agent x] [--model y] — create + stream output
- boocode ls [--state x] — formatted task table
- boocode attach <id> — WS stream of running task
- boocode send <id> "msg" — follow-up message to task session
Connects to BOOCODER_URL (default http://100.114.205.53:9502).

Human inbox (routes/inbox.ts): GET /api/inbox (failed/blocked tasks),
POST /api/inbox/:id/retry (reset to pending for re-dispatch).

Cost tracking: dispatcher aggregates tokens_used from all messages in
the task's session after completion, stores in tasks.cost_tokens.
GET /api/stats/costs?group_by=project|agent|day for aggregation.

Boomerang subagent isolation (3 new tools):
- new_task: creates child task with parent_task_id linkage, runs in
  fresh isolated session. Orchestrator sees only output_summary.
- list_tasks: query child tasks of current parent
- check_task_status: read task state + output_summary

The orchestrator pattern: an agent with tools: [new_task, list_tasks,
check_task_status] can ONLY dispatch — can't read files or MCP. This
is the Roo Code Boomerang Tasks capability-restriction principle.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-25 04:25:18 +00:00
parent f53c6d6cb9
commit 47abbb6e3c
11 changed files with 545 additions and 7 deletions

6
pnpm-lock.yaml generated
View File

@@ -69,6 +69,9 @@ importers:
postgres:
specifier: ^3.4.4
version: 3.4.9
ws:
specifier: ^8.18.0
version: 8.20.1
zod:
specifier: ^3.23.8
version: 3.25.76
@@ -76,6 +79,9 @@ importers:
'@types/node':
specifier: ^20.14.10
version: 20.19.41
'@types/ws':
specifier: ^8.5.10
version: 8.18.1
tsx:
specifier: ^4.16.2
version: 4.22.0