Skip to content

fix(ai): classify malformed Responses tool calls - #40549

Merged
rekram1-node merged 1 commit into
v2from
responses-tool-error
Aug 5, 2026
Merged

fix(ai): classify malformed Responses tool calls#40549
rekram1-node merged 1 commit into
v2from
responses-tool-error

Conversation

@opencode-agent

@opencode-agent opencode-agent Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

  • distinguish successfully decoded Responses function calls from malformed function input
  • normalize a completed response containing only malformed client-tool input as error instead of tool-calls
  • retain explicit output-limit and content-filter precedence
  • preserve existing tool-calls behavior for valid executable calls

Why

tool-calls tells consumers that executable client work is available. The parser previously set that reason for tool-input-error events even though no canonical tool-call was emitted. This made the unified terminal reason claim there was executable work when parsing had failed.

The malformed call remains represented as tool-input-error, so higher-level runtimes can record the failure and perform a recovery step without overloading the finish reason. If valid and malformed calls coexist, the malformed batch remains error rather than inviting partial execution.

Tests

  • bun test test/provider/openai-responses.test.ts
  • bun typecheck
  • bun x prettier --check packages/ai/src/protocols/open-responses.ts packages/ai/test/provider/openai-responses.test.ts

Requested by: @rekram1-node (Aiden Cline via Slack)

@rekram1-node
rekram1-node merged commit 62e5d73 into v2 Aug 5, 2026
10 checks passed
@rekram1-node
rekram1-node deleted the responses-tool-error branch August 5, 2026 01:40
github-actions Bot pushed a commit to ReStranger/opencode that referenced this pull request Aug 5, 2026
* upstream/v2: (28 commits)
  refactor(app): gate unsupported v2 capabilities (anomalyco#40381)
  fix(app): show active search details (anomalyco#40597)
  refactor(app): migrate supported v2 APIs (anomalyco#40378)
  fix(app): reconcile v2 session projections (anomalyco#40376)
  refactor(app): own rendering contracts (anomalyco#40375)
  fix(core): make xAI OAuth device-only (anomalyco#40538)
  test(app): migrate e2e fixtures to v2 (anomalyco#40374)
  fix(core): report missing shell workdir (anomalyco#40542)
  fix(ai): restore Responses tool input semantics (anomalyco#40553)
  fix(ai): classify malformed Responses tool calls (anomalyco#40549)
  feat(tui): streamline tab navigation shortcuts (anomalyco#40551)
  fix(ai): preserve Gemini tool finish semantics (anomalyco#40546)
  fix: retry empty incomplete streams (anomalyco#40535)
  fix(app): finish tool call ID rename (anomalyco#40539)
  refactor: rename tool call ID fields
  fix(client): wait for live service contenders (anomalyco#40515)
  chore(core): drop unreachable AI SDK provider packages (anomalyco#40504)
  fix(tui): update tab titles immediately (anomalyco#40318)
  fix(tui): show branch beside directory (anomalyco#40500)
  feat(vcs): publish branch updates (anomalyco#40371)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant