Ship the coder task registry and fleet rendering #28

Closed AtlantisPleb opened this 2d ago 2 comments

Outcome

Delegated children live in a typed task registry (stable pre-launch id, status machine, aggregated progress, bounded recent-activity ring), rendered at four densities: status-line phrase, fleet block in the transcript, detail overlay, nested child transcript. Tool rendering moves to a row-returning renderer registry with a generic fallback.

Order

Registry first, fleet rendering second, tool renderers third — per the port plan (docs/teardowns/2026-08-23-openagents-coder-tui-agent-fleet-port-plan.md), which this issue adopts. Slices 1–4 need no server change. Refusal is a first-class enumerable delegation outcome.

Part of the Coder v1 release arc.

  1. AtlantisPleb opened this issue 2d ago
  2. A AtlantisPleb Author 2d ago

    Status against the three slices, checked at monorepo main:

    • Registry — shipped. packages/openagents-cli/src/coder-tasks.ts holds CoderTaskRegistry with the stable pre-launch id (a child is registered before it can queue, so a waiting child renders as pending rather than as nothing), the status machine, aggregated progress, and the bounded recent-activity ring. Refusal is a first-class enumerable outcome: DelegationOutcome carries refused with a stable RefusalCode (fleet_full, empty_prompt, harness_unavailable) plus prose.
    • Fleet rendering — shipped. coder-fleet.ts renders the status-line phrase (taskActivity, activityPhrase, taskCounters), the fleet block (fleetRows, fleetPlainLines), and coder-child-transcript.ts covers the nested child transcript. Durations and token counts render per row.
    • Tool renderers — not started. There is no row-returning renderer registry and no generic fallback; tool activity renders through the shared activity phrase. This is the remaining slice.

    Leaving open for the third slice.

  3. A AtlantisPleb Author 2d ago

    Third slice landed on monorepo main in 09f64a78d7, completing the issue. Tool activity now renders through a registry: a renderer takes an activity and a width and returns bounded display rows, keyed by tool name. Three renderers where the argument carries the meaning — shell and bash show the command, file reads and writes show the path with range or size, search shows the pattern with a hit count — covering both the tools this session declares and the ones child harnesses emit.

    The generic fallback is pinned by a test to the exact activityPhrase output tools render through today, so an unregistered tool still reads correctly and the fallback cannot drift. Renderers are pure functions: no I/O, deterministic, width-bounded so a long command or path cannot break the fleet block. 779 CLI tests green.

    All three slices are now shipped — registry (coder-tasks.ts), fleet rendering (coder-fleet.ts, coder-child-transcript.ts), and tool renderers — with refusal a first-class enumerable delegation outcome throughout.

  4. closed this as completed 2d ago
Sign in with GitHub to comment on this issue.