feat: post-review backlog hardening (cancel/parser/stall/history/9502)
Five independent items from the post-review backlog. F1: Stop on an external agent task now aborts the running child via a per-task AbortController registry reachable from the cancel route, and finalizes the assistant message as cancelled (fixing two latent bugs — catch blocks left the message streaming, and warm success-paths wrote complete on an aborted turn); warm pools/worktrees are preserved and the native path is unchanged. F2/F3: prune the tool-call parser to its two load-bearing exports (unexport eight zero-caller symbols, add a gate test for the <invoke>-as-text fallback) and route placeholder-rejection logging through pino. F6: a 90s per-chunk stall-timeout wraps native inference's fullStream via AbortSignal.any so a hung stream finalizes the message instead of hanging — no retry (a pure classifyStreamError helper is added). F7: a read-only view_session_history MCP tool (newest-N, chronological). F9: retire the unused apps/coder/web :9502 fallback SPA, keeping every API/WS/health/MCP route. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -124,6 +124,12 @@ export const MessageCompleteFrame = z.object({
|
||||
// status:'complete' transition) is dropped.
|
||||
model: z.string().nullable().optional(),
|
||||
metadata: OpaqueObject.nullable().optional(),
|
||||
// F1 (D-8): the terminal status of the assistant message. Absent on the native
|
||||
// BooChat path (reducer defaults to 'complete'); the BooCoder dispatcher stamps
|
||||
// it 'cancelled' on a user Stop / stall and 'failed' on a thrown error so the
|
||||
// web reducer can render a muted "Stopped" / failed state without a new frame
|
||||
// type. Optional → fail-closed publishFrame must keep, not strip, it.
|
||||
status: z.enum(['complete', 'cancelled', 'failed']).optional(),
|
||||
});
|
||||
|
||||
export const UsageFrame = z.object({
|
||||
|
||||
Reference in New Issue
Block a user