Commit graph

123 commits

Author SHA1 Message Date
Mario Zechner
16e142ef7d fix(ai): remove <thinking> tag wrapping, convert to plain text on cross-model handoff
- Remove <thinking> tag generation from google-shared.ts, transorm-messages.ts, openai-completions.ts
- Thinking blocks now convert to plain text when switching models (prevents models mimicking tags)
- Skip empty thinking blocks to avoid API errors
- Keep thinking blocks only when same provider AND same model

fixes #561
2026-01-08 21:19:16 +01:00
Mario Zechner
aa89080ea0 fix(ai): add bridge prompt to override Antigravity behavior with Pi defaults 2026-01-08 20:20:24 +01:00
Mario Zechner
31f155d7db
Merge pull request #571 from ben-vargas/fix-antigravity-patch
fix(ai): align antigravity request payload
2026-01-08 20:00:40 +01:00
Ben Vargas
74476be61d fix(ai): align antigravity request payload 2026-01-08 10:00:44 -07:00
Thomas Mustier
a65da1c14b fix: ESC key not interrupting during Working... state
Three related fixes:

1. google-gemini-cli: Handle abort signal in stream reading loop
   - Add abort event listener to cancel reader immediately when signal fires
   - Fix AbortError detection in retry catch block (fetch throws AbortError,
     not our custom message)
   - Swallow reader.cancel() rejection to avoid unhandled promise

2. agent-session: Fix retry attempt counter showing 0 on cancel
   - abortRetry() was resetting _retryAttempt before the catch block could
     read it for the error message

3. interactive-mode: Restore main escape handler on agent_start
   - When auto-retry starts, onEscape is replaced with retry-specific handler
   - auto_retry_end (which restores it) fires on turn_end, after streaming begins
   - Now restore immediately on agent_start if retry handler is still active

Amended: suppress reader.cancel() rejection on abort.
2026-01-08 12:35:34 +00:00
Thomas Mustier
6052453f4f fix(ai): improve codex stream error details 2026-01-07 22:44:22 +00:00
Zhou Rui
d893ba7f20
fix(ai): clean up openai-codex models and token limits 2026-01-07 23:09:20 +08:00
Mario Zechner
03e3f0d801
Merge pull request #510 from mitsuhiko/annotate-bridge-prompt
Annotate bridge prompt
2026-01-06 23:47:02 +01:00
Ahmed Kamal
e42e9e6305 fix(ai): classify Google thoughtSignature as thinking
Google streaming may emit thoughtSignature without thought=true (including empty-text signature-only parts). Treat non-empty thoughtSignature as thinking to avoid leaking reasoning into normal text and retain signature across streaming deltas. Add unit test coverage.
2026-01-06 20:47:19 +02:00
Armin Ronacher
6a5f04ce1f Add the codex bridge prompt in the html export 2026-01-06 14:21:34 +01:00
Mario Zechner
edb0da9611 feat(ai,agent,coding-agent): add sessionId for provider session-based caching
- Add sessionId to StreamOptions for providers that support session-based caching
- OpenAI Codex provider uses sessionId for prompt_cache_key and routing headers
- Agent class now accepts and forwards sessionId to stream functions
- coding-agent passes session ID from SessionManager and updates on session changes
- Update ai package README with table of contents, OpenAI Codex OAuth docs, and env vars table
- Increase Codex instructions cache TTL from 15 minutes to 24 hours
- Add tests for sessionId forwarding in ai and agent packages
2026-01-06 11:08:42 +01:00
Mario Zechner
858c6bae8a refactor(ai): streamline codex prompt handling 2026-01-06 10:27:51 +01:00
Ahmed Kamal
47402ddaf7
fix(ai): always include reasoning.encrypted_content for codex (#484) 2026-01-06 00:50:58 +01:00
Ben Vargas
02b72b49d5 fix: codex thinking handling 2026-01-05 21:55:47 +01:00
Mario Zechner
bb50738f7e fix(ai): append system prompt to codex bridge message instead of converting to input
Previously the system prompt was converted to an input message in convertMessages,
then stripped out by filterPiSystemPrompts. Now the system prompt is passed directly
to transformRequestBody and appended after CODEX_PI_BRIDGE in the bridge message.
2026-01-05 06:03:07 +01:00
Mario Zechner
9a147559c0 Merge branch 'openai-codex' 2026-01-05 05:33:48 +01:00
Ahmed Kamal
1650041a63 feat(ai): add OpenAI Codex OAuth + responses provider 2026-01-04 21:11:19 +02:00
butelo
36e774282d
fix duplicated thinking tokens in chutes (#443)
Co-authored-by: xes garcia <xes.garcia@deus.ai>
2026-01-04 18:12:09 +01:00
Anton Kuzmenko
3b61d83d29 Fix google-vertex build 2026-01-03 01:11:03 +01:00
Anton Kuzmenko
214e7dae15 Add Vertex AI provider with ADC support
- Implement google-vertex provider in packages/ai
- Support ADC (Application Default Credentials) via @google/generative-ai
- Add Gemini model catalog for Vertex AI
- Update packages/coding-agent to handle google-vertex provider
2026-01-03 01:11:03 +01:00
Mario Zechner
fd35d9188c fix(ai): add retry with server-provided delay for Gemini CLI rate limits, fixes #370 2026-01-02 10:45:59 +01:00
Mario Zechner
ecd240f636 Define own GoogleThinkingLevel type instead of importing from @google/genai
- Add GoogleThinkingLevel type mirroring Google's ThinkingLevel enum
- Update GoogleGeminiCliOptions and GoogleOptions to use our type
- Cast to any when assigning to Google SDK's ThinkingConfig
2025-12-30 22:42:25 +01:00
Anton Kuzmenko
0250b7ac03 Migrate zai provider from Anthropic to OpenAI-compatible API
- Migrate glm-4.5, glm-4.5-air, glm-4.5-flash, glm-4.6, glm-4.7 from anthropic-messages to openai-completions API
- Updated baseUrl from https://api.z.ai/api/anthropic to https://api.z.ai/api/coding/paas/v4
- Added compat setting to disable developer role for zai models
- Filter empty text blocks in openai-completions to avoid zai API validation errors
- Fixed zai provider tests to use OpenAI-style options (reasoningEffort)
2025-12-29 11:54:10 -08:00
Anton Kuzmenko
31cbbd211c fix: update zAI models to use anthropic API and filter empty thinking blocks in messages 2025-12-28 16:31:32 -08:00
Mario Zechner
9f97f0c8da getApiKeyFromEnv -> getEnvApiKey 2025-12-25 02:38:10 +01:00
Mario Zechner
d93cbf8c32 WIP: remove setApiKey, resolveApiKey 2025-12-24 23:34:23 +01:00
Mario Zechner
29379ea0a6 Fix thinking tag leakage by converting unsigned blocks to plain text
Closes #302
2025-12-24 18:15:19 +01:00
Mario Zechner
d5fd685901 Enable more biome lints and fix things 2025-12-21 22:56:20 +01:00
Mario Zechner
329b3a0a36 Merge PR #264: Add Gemini 3 preview models to google-gemini-cli provider 2025-12-21 20:31:19 +01:00
Luke Foster
ee9b498380 Add Gemini 3 preview models to google-gemini-cli provider
- Add gemini-3-pro-preview and gemini-3-flash-preview to Cloud Code Assist
- Handle thinkingLevel config for Gemini 3 (vs thinkingBudget for Gemini 2.x)
- Gemini 3 Pro: LOW/HIGH levels only
- Gemini 3 Flash: all four levels (MINIMAL/LOW/MEDIUM/HIGH)
2025-12-20 22:10:47 -06:00
Mario Zechner
bf51dd4126 Fix Gemini multimodal tool results causing flaky responses
For Gemini 3, images are now nested inside functionResponse.parts per the docs.
For older models, images are sent in a separate user message.

See: https://ai.google.dev/gemini-api/docs/function-calling#multimodal
2025-12-21 02:41:27 +01:00
Mario Zechner
fb1fdb6006 Fix orphaned tool calls by inserting synthetic empty results
When a user interrupts a tool call flow (sends a message without providing
tool results), APIs like OpenAI Responses and Anthropic fail because:
- OpenAI requires tool outputs for function calls
- OpenAI requires reasoning items to have their following items
- Anthropic requires non-empty content for error tool results

Instead of filtering out orphaned tool calls (which breaks thinking signatures),
we now insert synthetic empty tool results with isError: true and content
'No result provided'. This preserves the conversation structure and satisfies
all API requirements.
2025-12-20 21:34:19 +01:00
Mario Zechner
2a0283ecfd Fix token counts in google-gemini-cli.ts for anthropic models. 2025-12-20 21:34:18 +01:00
Mario Zechner
c359023c3f Add Google Gemini CLI and Antigravity OAuth providers
- Add google-gemini-cli provider: free Gemini 2.0/2.5 via Cloud Code Assist
- Add google-antigravity provider: free Gemini 3, Claude, GPT-OSS via sandbox
- Move OAuth infrastructure from coding-agent to ai package
- Fix thinking signature handling for cross-model handoff
- Fix OpenAI message ID length limit (max 64 chars)
- Add GitHub Copilot overflow pattern detection
- Add OAuth provider tests for context overflow and streaming
2025-12-20 21:34:18 +01:00
Nico Bailon
81e820d01a fix: preserve Gemini thought signatures for tool calls 2025-12-20 07:12:37 -08:00
Mario Zechner
b6fe07b618 feat(coding-agent): add Google Cloud Code Assist OAuth flow
- Add OAuth handler with PKCE flow and local callback server
- Automatic project discovery via loadCodeAssist/onboardUser endpoints
- Store credentials with projectId for API calls
- Encode token+projectId as JSON for provider to decode
- Register as 'google-cloud-code-assist' OAuth provider
2025-12-20 10:27:07 +01:00
Mario Zechner
36e17933d5 feat(ai): add Google Cloud Code Assist provider
- Add new API type 'google-cloud-code-assist' for Gemini CLI / Antigravity auth
- Extract shared Google utilities to google-shared.ts
- Implement streaming provider for Cloud Code Assist endpoint
- Add 7 models: gemini-3-pro-high/low, gemini-3-flash, claude-sonnet/opus, gpt-oss

Models use OAuth authentication and have sh cost (uses Google account quota).
OAuth flow will be implemented in coding-agent in a follow-up.
2025-12-20 10:20:30 +01:00
Mario Zechner
0fc6689dfb fix(ai): re-enable SDK retries for Anthropic provider
The SDK default of 2 retries handles transient HTTP failures quickly,
while coding-agent retries handle persistent errors with user feedback.
2025-12-20 09:56:11 +01:00
Cyril
6ff405a976 fix(ai): prevent double API version path in Google provider URL 2025-12-19 20:41:07 +00:00
Mario Zechner
0dbc1065ad Add Copilot-Vision-Request header for image requests
fixes #222
2025-12-19 05:12:40 +01:00
Mario Zechner
575dcb2676 Fix X-Initiator header logic for GitHub Copilot
Check last message role instead of any message in history.
This matches the original correct implementation from PR #200.

fixes #209
2025-12-19 05:08:28 +01:00
Aadish Verma
314ef34ebc
feat: implement thinking for some more copilot models (#234)
Signed-off-by: StarLight842 <mail@aadishv.dev>
2025-12-19 04:42:23 +01:00
Mario Zechner
98e5b4dce9
Merge pull request #221 from theBucky/fix/google-provider-baseurl
fix(ai): pass baseUrl to Google GenAI SDK via httpOptions
2025-12-18 15:40:05 +01:00
theBucky
aac68ba35c fix(ai): pass baseUrl to Google GenAI SDK via httpOptions
Previously, when using 'google-generative-ai' API with a custom baseUrl
in models.json, the baseUrl was ignored and requests always went to the
default Google endpoint.

Now the provider correctly passes model.baseUrl to the SDK's
httpOptions.baseUrl, enabling use of custom endpoints or API proxies.

Fixes #216
2025-12-18 22:03:43 +08:00
Mario Zechner
84018b0707 fix(ai): correct Gemini tool result format and improve type safety
- Fix tool result format for Gemini 3 Flash Preview compatibility
  - Use 'output' key for successful results (not 'result')
  - Use 'error' key for error results (not 'isError')
  - Per Google SDK documentation for FunctionResponse.response

- Improve type safety in google.ts provider
  - Add ImageContent import and use proper type guards
  - Replace 'as any' casts with proper typing
  - Import and use Schema type for tool parameters
  - Add proper typing for index deletion in error handler

- Add comprehensive test for Gemini 3 Flash tool calling
  - Tests successful tool call and result handling
  - Tests error tool result handling
  - Verifies fix for issue #213

Fixes #213
2025-12-18 13:43:39 +00:00
Markus Ylisiurunen
d690310587
Fix Gemini 3 Flash Preview thinking levels (#212)
* use the correct Gemini 3 Flash Preview thinking levels

* fix a build error

* add changelog entry

* regenerate models

* make less assumptions about future models
2025-12-18 13:03:28 +01:00
Mario Zechner
4894fa411c Release v0.23.2
Fixed Claude models via GitHub Copilot re-answering all previous prompts.

fixes #209
2025-12-17 17:56:00 +01:00
Ahmed Kamal
c2dea0ce8b
Add X-Initiator header for GitHub Copilot (#200) 2025-12-16 14:05:22 +01:00
Mario Zechner
fd5134f88c Release v0.22.2 2025-12-15 22:09:14 +01:00
Mario Zechner
a7e3b8625b Release v0.22.1 2025-12-15 21:53:27 +01:00