Skip to content

ORCH

v1.0.24 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

agent-orchestration ai-agents claude-code cli-tool multi-agent orchestrator
+1 more
typescript

Summary

AI summary

Updates Bug Fixes, Refactoring, and Performance across a mixed release.

Changes in this release

Security Medium

Error event payloads now use canonical {message, raw} shape and are classified via classifyAdapterError.

Error event payloads now use canonical {message, raw} shape and are classified via classifyAdapterError.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: high

Feature Medium

Canonical AgentEvent.data contract documented per-type data shapes for output, tool_call, command, file_change, error, and done events.

Canonical AgentEvent.data contract documented per-type data shapes for output, tool_call, command, file_change, error, and done events.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: high

Performance Medium

`firstLineTrunc` fast path short-circuits for single-line input, skipping unnecessary splits and allocations.

`firstLineTrunc` fast path short-circuits for single-line input, skipping unnecessary splits and allocations.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: low

Performance Medium

`summarizeToolResult` now reuses a single split of content instead of performing two separate splits.

`summarizeToolResult` now reuses a single split of content instead of performing two separate splits.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: low

Bugfix Medium

Pi adapter aggregates per-character text_delta updates into a single canonical output event on text_end.

Pi adapter aggregates per-character text_delta updates into a single canonical output event on text_end.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: high

Bugfix Medium

Pi adapter drops unknown RPC event types at the adapter boundary instead of rendering them as placeholders.

Pi adapter drops unknown RPC event types at the adapter boundary instead of rendering them as placeholders.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: high

Bugfix Medium

Pi adapter now drops intermediate tool_execution_update events to maintain uniform canonical contract.

Pi adapter now drops intermediate tool_execution_update events to maintain uniform canonical contract.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: high

Bugfix Medium

Pi adapter resets finalText buffer after text_end to prevent unbounded growth across turns.

Pi adapter resets finalText buffer after text_end to prevent unbounded growth across turns.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: high

Refactor Medium

`extractToolResultText` delegates to `extractTextFromContent`, consolidating duplicated walk-and-join logic for pi tool results and messages.

`extractToolResultText` delegates to `extractTextFromContent`, consolidating duplicated walk-and-join logic for pi tool results and messages.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: low

Refactor Medium

`firstLineTrunc` helper extracted into App.tsx, replacing multiple scattered implementations across canonical shape branches.

`firstLineTrunc` helper extracted into App.tsx, replacing multiple scattered implementations across canonical shape branches.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: low

Refactor Medium

Summary icons aligned with MSG_ICONS for consistency; error glyph changed from ✗ to ✕ and path glyph uses MSG_ICONS.file.

Summary icons aligned with MSG_ICONS for consistency; error glyph changed from ✗ to ✕ and path glyph uses MSG_ICONS.file.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: low

Other Medium

Pi adapter contract tests updated to assert aggregation of text_delta updates into one output event on text_end.

Pi adapter contract tests updated to assert aggregation of text_delta updates into one output event on text_end.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: low

Other Medium

New test drops tool_execution_update progress events (noise) locks in noise-drop behavior.

New test drops tool_execution_update progress events (noise) locks in noise-drop behavior.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: low

Other Medium

`pi-adapter.e2e.test.ts` exercises aggregation of text_delta updates through the Orchestrator end-to-end.

`pi-adapter.e2e.test.ts` exercises aggregation of text_delta updates through the Orchestrator end-to-end.

Source: granite4.1:8b-q6_K@2026-05-19

Confidence: low

Full changelog

New Features

  • Canonical AgentEvent.data contract — documented per-type data shapes in src/infrastructure/adapters/interface.ts. Each adapter now has a single target shape for output ({text}), tool_call ({name,input}), command ({command,result}), file_change ({paths}), error ({message}) and done ({result}). Downstream consumers (TUI, orch logs, serve daemon) can render events without knowing adapter internals. Legacy adapters (claude/cursor/codex) still emit their native shapes during the migration window — the TUI renderer is defensive.

Bug Fixes

  • Pi adapter: per-character text_delta flood — pi RPC emits one text_delta per LLM stream chunk (often per-character). The adapter was forwarding each as its own output event, drowning the activity feed with character-level fragments. Now deltas aggregate into adapter-local state and the assembled text is flushed once on text_end as a single canonical output event.
  • Pi adapter: [agent_start] / [turn_start] placeholders in logs — unknown pi RPC event types fell through a default case that emitted them as raw output events. The TUI renderer then displayed them as [type_name] placeholders. Unknown types are now dropped at the adapter boundary; adding a new known type is the right way to surface a new event.
  • Pi adapter: tool_execution_update noise — pi emits one of these per chunk of streaming tool output (e.g. live bash stdout). No other adapter surfaces intermediate tool progress in its event stream. These are now dropped to keep the canonical contract uniform.
  • Pi adapter: finalText buffer never reset after text_endstate.finalText was set to the assembled text after text_end but never cleared. A follow-up assistant turn in the same pi session would build on top of the previous message, double-emitting text and growing the buffer unboundedly across turns. Buffer now resets to '' after each text_end.
  • Pi adapter: API error inside agent_end.messages[] ignored (partial) — error event payloads now use canonical {message, raw} shape and are classified via classifyAdapterError. (Surfacing pi's errorMessage field nested inside the assistant message remains a follow-up.)

Performance

  • firstLineTrunc fast path — single-line input (the common case for agent events) short-circuits to a single slice(0, n), skipping split('\n') + find + closure allocation. The slow path uses /\S/.test(l) instead of l.trim().length > 0 to avoid allocating a trimmed copy just to test non-empty.
  • summarizeToolResult single split — was splitting content twice (once for lines.length, once for find); now reuses one array.

Refactoring

  • extractToolResultText delegates to extractTextFromContent — pi tool results ({content: [{type:'text', text}, …]}) and pi message content ({content: [{text}, …]}) differ only by the outer content wrap. Collapsed 16 lines of duplicated walk-and-join logic to a single line that unwraps and delegates.
  • firstLineTrunc helper extracted in App.tsx — replaces five copies of s.split('\n')[0]?.slice(0, N) ?? s.slice(0, N) (including a dead ?? fallback and incorrect handling of leading blank lines) across the new canonical-shape branches in formatAgentOutput.
  • Summary icons aligned with MSG_ICONS — error glyph in canonical branch corrected from (U+2717) to MSG_ICONS.error (, U+2715); path glyph uses MSG_ICONS.file for consistency.

Tests

  • Pi adapter contract tests updatedaggregates text_delta updates and emits one canonical output on text_end replaces the old per-delta assertion. New test drops tool_execution_update progress events (noise) locks in the noise-drop behavior.
  • pi-adapter.e2e.test.ts — feeds text_delta + text_delta + text_end sequence to exercise the aggregation path end-to-end through the Orchestrator.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track ORCH

Get notified when new releases ship.

Sign up free

About ORCH

CLI orchestrator that manages Claude Code, Codex, and Cursor as a typed task queue with state machine (todo→in_progress→review→done), auto-retry, inter-agent messaging, and TUI dashboard.

All releases →

Related context

Beta — feedback welcome: [email protected]