Files
oh-my-pi/packages
roboomp cdfc1cce3e fix(ai): routed codex responses arg deltas by item_id
The Codex Responses stream runtime tracked a singleton
`currentItem`/`currentBlock`. With more than one tool call open
concurrently every `response.function_call_arguments.delta` was
appended to whichever item was added most recently, and the next
`response.output_item.done` for the earlier call overwrote the
sibling's stored arguments. On the agent loop's `task` tool this
surfaced as `tasks: Invalid input: expected array, received undefined`.

Open items are now tracked in a `Map<string, CodexOpenItem>` keyed by
`item.id`, each entry carrying its own `block` and `contentIndex`.
`response.function_call_arguments.{delta,done}`,
`response.custom_tool_call_input.{delta,done}`, and
`response.output_item.done` route through `openItemForEvent` and
operate on the matching entry's block; the legacy singleton-current
fallback only kicks in when an event omits `item_id`. A delta whose
keyed item already closed is dropped instead of leaking into a
sibling, and `toolcall_delta` / `toolcall_end` stream events emit the
right `contentIndex` for each call. Recovery sites converge on a new
`resetCodexStreamAccumulators` helper that clears the open-items map
in lockstep with `currentItem`/`currentBlock`/`nativeOutputItems`.

Regression test (`packages/ai/test/openai-codex-stream.test.ts`)
interleaves two function-call argument streams plus a stale
post-close delta and asserts per-call argument integrity and
per-call stream `contentIndex`.

Fixes #2619
2026-06-15 05:55:24 +00:00
..
2026-06-15 04:36:40 +02:00
2026-06-15 04:36:40 +02:00
2026-06-15 04:36:40 +02:00
2026-06-15 04:36:40 +02:00
2026-06-15 04:36:40 +02:00
2026-06-15 04:36:40 +02:00
2026-06-15 04:36:40 +02:00
2026-06-15 04:36:40 +02:00
2026-06-15 04:36:40 +02:00