Commit Graph
3027 Commits
Author SHA1 Message Date
Mathews-Tom b95155423a Merge remote-tracking branch 'upstream/main' into feat/error-notify 2026-07-06 03:03:47 +05:30
can1357 d806ac5e4c chore: bump version to 16.3.8 2026-07-05 19:43:28 +02:00
can1357 0ca345185c chore: bump version to 16.3.7 2026-07-05 16:58:53 +02:00
can1357 3458b037ae chore: update tests 2026-07-05 16:53:07 +02:00
can1357 fdd7bdef7b feat(ai): improved reasoning block separation and validation
- Mark demoted thinking blocks with a symbol to decouple paragraph separators from the raw text content.
- Update `openai-completions` to conditionally insert a newline only when a demoted thinking block is followed by other content.
- Ensure terminal demoted thinking blocks are trimmed to prevent trailing whitespace that causes rejection by the Anthropic API.
2026-07-05 16:25:12 +02:00
can1357 092b95d473 test(ai): validated parallel tool call argument routing and chunk handling
- Added a test case to ensure brace-prefixed chunks remain with their original sibling tool call.
- Validated that parallel function call arguments are correctly routed to their respective tool call blocks.
2026-07-05 15:57:24 +02:00
can1357 2f7e95d533 feat(ai): implemented json prefix validation for tool call buffering
- Implemented classifyJsonPrefix validation to determine when tool-call JSON chunks are complete.
- Updated delta processing logic to prevent premature chunk advancement by checking if a continuation remains valid or if it forms a distinct sibling call.
2026-07-05 15:57:24 +02:00
can1357 34aea528a3 chore: update changelogs 2026-07-05 14:35:17 +02:00
can1357 9194c97d7f test: drop unrelated stream helper changes 2026-07-05 13:25:25 +02:00
can1357 7be558eda9 Merge PR #4342: fix(extension): refresh editor after extension paste (@roboomp) 2026-07-05 13:25:24 +02:00
can1357 6ab2f75a01 style: formatted merged sources and hardened isEmptyErrorTurn exhaustiveness 2026-07-05 13:13:36 +02:00
can1357 f0c503816e chore: normalized changelog placement after merges 2026-07-05 13:12:41 +02:00
can1357 9901d868e9 fix(ai): drop redacted siblings with discarded Anthropic thinking 2026-07-05 13:11:19 +02:00
can1357 d2efa785eb docs(ai): add changelog for Anthropic thinking replay fix 2026-07-05 13:11:19 +02:00
can1357 4a80a70892 Merge PR #4427: fix(ai): restore the drop guard for undefined thinking signatures (@metaphorics)
# Conflicts:
#	packages/ai/test/anthropic-abandoned-tooluse-replay.test.ts
#	packages/ai/test/anthropic-stream-envelope.test.ts
2026-07-05 13:11:04 +02:00
can1357 476eadfc4e Merge PR #4432: fix(ai): demote prior reasoning to bare prose for all Anthropic-dialect Claude models (@roboomp) 2026-07-05 13:10:27 +02:00
can1357 cf774b0d57 Merge PR #4400: fix(gemini): honor hidden summary requests (@cagedbird043) 2026-07-05 13:10:27 +02:00
can1357 2f67fb3728 Merge PR #4387: fix(fast): enable custom OpenAI-compatible providers (@roboomp) 2026-07-05 13:10:27 +02:00
can1357 ba9e4e38b6 fix(ai): keep split identifierless response deltas together 2026-07-05 13:10:27 +02:00
can1357 905d05903a Merge PR #4417: fix(ai): isolate batched tool call arguments (@roboomp) 2026-07-05 13:10:26 +02:00
can1357 50f0d6ff95 fix(ai): align dump status extraction 2026-07-05 13:10:25 +02:00
can1357 84ffbbfd98 Merge PR #4446: fix(ai): persist provider error response in http-400 dumps (@mattwilkinsonn) 2026-07-05 13:10:25 +02:00
can1357 4d543bba49 chore: normalized changelog placement after merges 2026-07-05 13:04:16 +02:00
can1357 a868a7d2d5 Merge PR #4471: fix(ai): separate Codex orchestration usage (@roboomp) 2026-07-05 13:03:08 +02:00
can1357 bd1bda02d3 Merge PR #4528: fix(ai): allow opaque Codex proxy keys (@roboomp) 2026-07-05 13:03:07 +02:00
can1357 22c602bef4 Merge PR #4531: fix(providers): align openai-responses strict-mode gate with openai-completions (@roboomp) 2026-07-05 13:03:06 +02:00
can1357 d803b6b541 style: formatted evaluator test additions with biome 2026-07-05 12:45:42 +02:00
can1357 da1a90ed84 chore: normalized changelog placement after merges 2026-07-05 12:44:35 +02:00
can1357 ecd18ba0e7 add-quota-exhausted-regression-coverage 2026-07-05 12:44:18 +02:00
can1357 806607c2ba Merge PR #4575: fix(ai): classify quota insufficient gateway errors (@cagedbird043) 2026-07-05 12:44:18 +02:00
can1357 029074a239 fix(ai): preserve native-only responses replay 2026-07-05 12:44:18 +02:00
can1357 7bc4db4d42 Merge PR #4601: fix(ai): drop hidden-empty Responses replay (@roboomp) 2026-07-05 12:44:18 +02:00
can1357 47f49f3feb fix(ai): keep thinking-only Google responses retryable 2026-07-05 12:44:18 +02:00
can1357 ebe0d6f446 Merge PR #4582: fix(ai): prevent empty-response retry loop on non-STOP finishReason in Gemini CLI (@usr-bin-roygbiv) 2026-07-05 12:44:18 +02:00
can1357 9986a59616 Merge PR #4576: fix(cursor): reject empty grepArgs.pattern at exec dispatch (@roboomp) 2026-07-05 12:44:17 +02:00
can1357 6aa16f6fba feat(ai): implemented transient request retries and deadline-aware watchdog
- Enabled transient 408, 429, and 5xx retries by removing manual `maxAttempts` overrides.
- Ensured transport retries respect deadlines by leveraging the first-event watchdog to abort the request `signal`.
- Guaranteed that retry backoff periods are bounded by the caller's request deadline.
- Updated authentication URL for the Wafer registry provider.
2026-07-05 12:03:48 +02:00
can1357 5768615e5d feat(ai): enabled millisecond precision for transport retry delay headers
- Added support for the `retry-after-ms` header in `getRetryAfterMsFromHeaders` to parse millisecond-based retry delays.
- Implemented `parseRetryAfterMsHeader` utility to safely validate and convert header values to milliseconds.
- Updated `extractRetryHint` in `fetch-retry` to prioritize the `retry-after-ms` header during transport response processing.
- Included `x-ratelimit-reset-ms` header support in `extractRetryHint` to better handle rate limit reset timings.
2026-07-05 12:03:48 +02:00
roboomp f1b21d4903 fix(ai): suppressed cold hidden-empty responses fallback
Consulted the assistant provider payload before checking nativeHistory.replay so hidden-empty native turns suppress fallback re-encoding even when the session's native replay is still cold.

Extended the GitHub Copilot regression to cover the cold providerSessionState path.

Fixes #4597
2026-07-05 09:01:23 +00:00
roboomp 06e726dd9c fix(ai): suppressed hidden-empty fallback replay
Dropped signed thinking and empty assistant text fallback items when a native Responses payload is rejected as hidden-empty.

Extended the GitHub Copilot replay regression to cover synthesized empty TextContent and signed thinking fallback blocks.

Fixes #4597
2026-07-05 08:49:44 +00:00
roboomp 57b62fca57 fix(ai): dropped hidden-empty responses replay
Prevented GitHub Copilot OpenAI Responses turns with only hidden reasoning and empty assistant output from replaying native history into later requests.

Added regression coverage for hidden-empty assistant payloads preserving the follow-up user prompt while excluding stale reasoning and empty output_text items.

Fixes #4597
2026-07-05 08:38:28 +00:00
usr_bin_roygbiv 79998766e5 fix(ai): prevent empty-response retry loop on non-STOP finishReason in Gemini CLI 2026-07-04 20:45:31 -05:00
cagedbird043 e70399238b fix(ai): classify quota insufficient errors as usage limits 2026-07-05 07:43:24 +08:00
roboomp cb4ed2f6c0 fix(cursor): reject empty grepArgs.pattern at exec dispatch
Cursor's model sometimes emits grepArgs with pattern="" and a non-empty glob, expecting grep to enumerate matching files. The downstream coding-agent grep tool then rejects it with a bare "Pattern must not be empty", but by then handleExecServerMessage's grepArgs case has already synthesized a persisted toolCall block whose pattern rendered as "?" in the TUI (grepToolRenderer uses `args.pattern || "?"`).

Handle the empty-pattern case at the Cursor exec dispatch instead: an exported pure helper (emptyGrepPatternRejection) returns an actionable, glob-aware error message; the dispatch turns that into a GrepResult.error and skips the synthesis + resolveExecHandler call entirely, so the model sees a specific recovery hint and the persisted assistant message stays clean.

Adds unit tests around the helper covering non-empty patterns, glob-aware rejection, plain rejection, and whitespace-only patterns; existing streaming/exec tests still pass.

Fixes #4574
2026-07-04 23:22:55 +00:00
roboomp b604eb4d13 fix(providers): restored azure provider-id detection on responses strict gate
- Kept the `isAzure` branch on the Responses `supportsStrictMode` field so
  bundled `provider: "azure"` entries with an empty baseUrl (35 bundled
  entries) still resolve strict-mode supported, matching pre-#4527 behavior
  for every built-in Azure deployment.
- Added a regression asserting that a provider-id-only Azure Responses
  model emits `strict: true` on the wire.

Refs #4527
2026-07-04 16:18:49 +00:00
roboomp 9b2eee12a1 fix(providers): resolved responses strict support like completions
- Switched buildOpenAIResponsesCompat to the shared OpenAI strict-mode
  detector so buildModel-resolved Responses models no longer materialize
  DeepSeek/Cerebras/Together-style OpenAI-compatible hosts to unsupported
  while the completions path marks the same backend supported.
- Replaced the corrupted-compat regression with a buildModel-based DeepSeek
  Responses regression that proves author-set strict:false survives through
  the supported sparse-spec route.
- Updated the changelog to describe the resolved-compat path.

Fixes #4527
2026-07-04 16:14:01 +00:00
roboomp 3da9200aec fix(providers): aligned openai-responses strict-mode gate with openai-completions
- Swap the pre-fix truthy `model.compat.supportsStrictMode` gate on
  buildParams() for `!== false`, mirroring the semantic the completions
  builder has been shipping since #4340. A caller-constructed Model that
  hasn't materialized `supportsStrictMode` on its compat now behaves the
  same way on both provider paths: author-set `strict: false` survives to
  the wire, `supportsStrictMode: false` still suppresses it, and the
  strict-schema fallback keeps unifying every wire flag to absent.
- Refresh the payload-emission comment to point at #4527 and describe the
  aligned rule verbatim.
- Regression test: a Responses Model whose compat lacks
  `supportsStrictMode` still emits `strict: false` on an author-opted-out
  tool.

Fixes #4527
2026-07-04 16:06:30 +00:00
roboomp f6ec7a613e fix(ai): allowed opaque codex provider keys
Made Codex account ids optional for openai-codex-responses custom providers, omitting chatgpt-account-id when opaque API keys cannot provide a ChatGPT account claim.

Added SSE and websocket regression coverage for custom Codex proxy API keys.

Fixes #4526
2026-07-04 15:44:49 +00:00
can1357 53e8a8b807 test(ci): fixed event-controller and auth-storage test failures
- Mocked messagePersistenceKey in event-controller-error-banner.test.ts and safe-guarded it in event-controller.ts to prevent TypeError.
- Updated thinking loop retry test expectations to handle new dynamic recoveredErrors structure.
- Updated schema version assertions in auth-storage-email-dedupe.test.ts to v5, preserving v6 for future schema test.
- Simulated scrollback commitment in event-controller-message-start.test.ts by rendering container and committing rows before advancing timers.
2026-07-04 14:21:01 +02:00
can1357 98f6e9f004 chore: bump version to 16.3.6 2026-07-04 14:00:53 +02:00
can1357 6b90d34924 Merge remote-tracking branch 'origin/farm/96461c96/fix-browser-cmux-pending-unhandled-rejection' 2026-07-04 11:27:29 +02:00