Skip to content

fix(ai): preserve Gemini tool finish semantics - #40546

Merged
rekram1-node merged 1 commit into
v2from
gemini-tool-finish
Aug 5, 2026
Merged

fix(ai): preserve Gemini tool finish semantics#40546
rekram1-node merged 1 commit into
v2from
gemini-tool-finish

Conversation

@opencode-agent

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

Copy link
Copy Markdown
Contributor

Summary

  • normalize a Gemini response with parsed client tool calls as tool-calls even when the terminal event omits finishReason
  • keep the provider-native raw reason absent instead of inventing one
  • preserve existing precedence for explicit token, safety, and invalid-output finish reasons

Why

Gemini tool calls are content parts, while terminal metadata may arrive without a finishReason. Usage metadata still completes the stream in that shape. Previously the parser emitted a valid local tool-call but reported the unified finish reason as unknown. The parsed pending work is stronger evidence: callers still need to execute the tool and return its result.

Tests

  • bun test test/provider/gemini.test.ts
  • bun typecheck

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

@rekram1-node
rekram1-node merged commit ad9a95f into v2 Aug 5, 2026
9 of 10 checks passed
@rekram1-node
rekram1-node deleted the gemini-tool-finish branch August 5, 2026 01:29
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