Commit Graph

3870 Commits

Author SHA1 Message Date
Luis Pater
7bbfeaf8a7 feat(executor): promote reasoning content as summary and sanitize inputs
- Introduce `promoteOpenAIResponsesReasoningTextToSummary` to move `reasoning_text` parts from content to summary when the summary is empty.
- Clear `reasoning.content` to comply with Codex schema constraints (`maxItems: 0`).
- Implement safeguards for handling cleartext reasoning, preserving valid encrypted content, and stripping invalid `encrypted_content`.
- Add comprehensive tests to validate behavior for promoting reasoning texts, preserving existing summaries, and ensuring sanitization rules.

Closes: #5825
v7.3.3
2026-09-15 03:42:08 +08:00
Luis Pater
8c984672a6 feat(translator): handle orphan function outputs as user text in OpenAI and Gemini translators
- Introduce logic to convert orphaned or unpaired `function_call_output` into user text instead of mismatched tool responses.
- Add `buildOpenAIResponsesStandaloneToolOutputTextParts` and `appendStandaloneResponsesToolOutputAsUser` helpers for managing orphaned outputs.
- Update OpenAI, Gemini, and Antigravity translators to ensure unmatched tool outputs are surfaced correctly.
- Add comprehensive test cases for both Gemini and OpenAI translator workflows to validate behavior for orphan function outputs and explicit call IDs.

Closes: #5831
2026-09-15 03:26:12 +08:00
Luis Pater
bef1f65c6c feat(auth): add retry logic for pre-HTTP transport failures and related tests
- Introduce `isTransientTransportError` to identify transient transport errors such as TLS handshake, DNS, and connection resets.
- Extend retry logic to handle these errors without enforcing credential cooldown.
- Add new constants, such as `ErrorCodeTransientTransport`, to categorize and manage these errors.
- Refactor `conductor_selection` to distinguish request-retry round errors.
- Add comprehensive tests covering transport retries, cooldown behavior, and transient error handling.

Closes: #5829
2026-09-15 02:52:53 +08:00
Luis Pater
1fac8cc0c8 feat(executor): strip unsupported id fields from Gemini interactions payload
- Introduce `sanitizeGeminiInteractionsUnsupportedInputIDs` to remove `id` fields from Gemini interactions `input` and `content` items.
- Update execution logic to apply the sanitization process before upstreaming payloads.
- Add tests to ensure payloads are correctly sanitized and validate `call_id` pairing for Gemini interactions.

Closes: #5828
2026-09-15 02:21:45 +08:00
Luis Pater
e3cbe437d0 feat(auth): add tests to ensure async operations don’t block unrelated actions
- Add tests to verify that runtime hooks, auth modifications, and related updates do not block on unrelated operations such as antigravity probes or plugin virtual models.
- Introduce detailed scenarios, e.g., stale disables, batch operations, and conflict handling during concurrent auth updates.
- Refactor locking mechanisms to avoid unnecessary blocking during hooks and model registrations.

Fixed: #5813
Closes: #5773
2026-09-15 01:23:26 +08:00
Luis Pater
748d576731 feat(pluginhost): propagate forced provider and auth ID in host model execution
- Add `ForcedProvider` and `AuthID` fields to `HostModelExecutionRequest` and `ModelExecutionRequest`.
- Pin credentials via `WithPinnedAuthID` and forward forced provider options during model execution and streaming.
- Forward forced provider and auth ID from plugin host callbacks to model execution handlers.

Closes: #5814
2026-09-14 21:59:32 +08:00
Luis Pater
ca929459f9 test(openai): add tests for responses websocket compaction replay and routing
- Verify observed compaction response replay and retention across subsequent turns.
- Test plugin route overrides, provider auth pinning, and home runtime auth handling during compaction.

Closes: #5811
2026-09-14 19:36:46 +08:00
Luis Pater
6ba444557c feat(pluginabi): support HTTP status code propagation in plugin error envelopes
- Add `Error.Error`, `Error.StatusCode`, `NewError`, and `NewErrorEnvelope` helpers in `sdk/pluginabi`.
- Support extracting and forwarding HTTP status codes in Go plugin executor examples and generator script.
- Document plugin executor error handling and client HTTP status mapping conventions.

Closes: #5809
2026-09-14 18:44:04 +08:00
Luis Pater
b8477c7181 fix(pluginhost): keep request and method buffers alive during native call
- Ensure `methodBytes` and `request` are kept alive across dynamic library invocation on Windows to prevent premature garbage collection.

Closes: #5807
2026-09-14 17:32:33 +08:00
sususu98
9b52a49927 Merge pull request #5796 from router-for-me/feat/ai-gateway-discovery
feat(discovery): introduce mDNS/DNS-SD LAN service advertising and CLI discovery
2026-09-14 17:07:32 +08:00
sususu98
c9b3dbef2c Merge pull request #5808 from router-for-me/feat/devin-code-login
feat(devin): support port-free manual code login in no-browser mode and align OAuth URL parameter order
2026-09-14 17:02:45 +08:00
sususu
13af6c002b fix(discovery): tighten scan timeout, flags, and TCP-only types
Load scan filters without full config normalization, honor --timeout
exactly, stop argv pre-scan at --, restart ads when interface indexes
change, and reject UDP DNS-SD service types.
2026-09-14 17:02:44 +08:00
sususu
5f74accd0e fix(devin): share manual paste parsing and surface oauth callback errors
Extract parseDevinManualPaste for headless and loopback login, return
access_denied (and CSRF mismatches) instead of an unrecognized-format
error, collapse authorization URL query construction, and lock the
headless URL shape plus paste edge cases in tests.
2026-09-14 16:54:07 +08:00
sususu
9e847e596e fix(discovery): uniquify instance names without a startup browse
Always advertise CPA-<ID> or <service-name>-<ID> so LAN instance names
are unique from local state instead of probing mDNS at process start.
2026-09-14 16:35:57 +08:00
sususu
2dd2fd6d05 fix(discovery): load default scan config and sanitize hostnames
Empty --config now resolves to the working-directory config.yaml, and
link-local fallback hostnames are restricted to DNS-safe labels before
they are printed.
2026-09-14 15:56:41 +08:00
sususu
7d68705432 fix(discovery): keep JSON scans clean and honor interface filters
Skip plugin bootstrap for legacy --discover/--discover-json so logrus
cannot prefix JSON stdout, and let CLI/config include lists scan
non-default adapters such as docker0.
2026-09-14 15:38:05 +08:00
sususu98
6c5fef915a Merge pull request #5818 from router-for-me/feat/codex-bootstrap-timeout
feat(codex): add optional time ceiling for stream bootstrap buffering
2026-09-14 15:21:05 +08:00
sususu
20ec9b83a1 fix(discovery): close lifecycle and routing gaps 2026-09-14 15:14:49 +08:00
sususu
c3a5e8c006 test(discovery): report temp cleanup failures 2026-09-14 14:29:58 +08:00
sususu
6e307553f4 feat(codex): add optional time ceiling for stream bootstrap buffering
- Add `stream-bootstrap-timeout` configuration (defaulting to 0/unlimited, recommended 20s behind reverse proxies) to bound how long early handshake or trickled events may hold response headers.
- Release stream buffering into normal in-stream delivery once the time budget is exhausted on both SSE and WebSocket executors.
- Deliver post-timeout overload and status-bearing errors in-stream rather than triggering credential failover, preventing latency doubling on long reasoning turns.
- Provide thread-safe mock clock test harness and comprehensive unit tests covering timeout release, unlimited default, disabled ceilings, and post-timeout error delivery.
2026-09-14 14:25:45 +08:00
sususu
d48590a47d feat(models): add gemini-3.5-flash-lite model definition 2026-09-14 13:58:10 +08:00
sususu
f341e07b94 fix(cmd/fetch_antigravity_models): support symlinked auth dir and multi-auth fallback 2026-09-14 13:58:06 +08:00
sususu
f5c19d25bb fix(discovery): bound browse resource usage 2026-09-14 13:08:17 +08:00
sususu98
bb20fa2d5e Merge pull request #5724 from Viggo95/fix/codex-bootstrap-buffer-noncontent-events
fix(codex): keep bootstrap buffer open for events that carry no output
2026-09-14 12:27:00 +08:00
sususu
c1b7c91f2f fix(discovery): honor caller cancellation and reload endpoint 2026-09-14 12:22:22 +08:00
sususu
b9005770e6 fix(discovery): harden advertiser lifecycle and browse limits 2026-09-14 11:58:27 +08:00
Luis Pater
2bcebaa89c fix(claude): repair tool call pairing and handle standalone tool outputs
- Convert standalone or orphan tool outputs without matching tool calls into plain user text.
- Synthesize error tool results for dangling tool calls before user turns or assistant prefill checks.
- Enforce tool results to lead user messages and warn on unmapped items or invariant violations.

Closes: #5805
2026-09-14 11:52:05 +08:00
sususu
f465ebddde test(devin): route status calls to mock server in headless auth tests 2026-09-14 11:26:08 +08:00
Luis Pater
fd3cd15161 docs(readme): remove FastAIToken sponsor
- Remove FastAIToken sponsorship section across README files and delete associated asset.
2026-09-14 11:06:04 +08:00
Luis Pater
c1cb0c5de1 fix(translator): preserve html characters in tool arguments and fix devin sequential tool calls
- Introduce `SetStringWithoutHTMLEscape` to prevent escaping of HTML characters (`<`, `>`, `&`) in tool call arguments and argument deltas across translators.
- Handle sequential tool calls in Devin executor that share the same stream index but have distinct tool call IDs.
2026-09-14 11:04:08 +08:00
sususu
3428110d49 feat(discovery): add LAN gateway discovery
Advertise _ai-gateway._tcp with API-protocol DNS-SD subtypes, refresh
on address changes, uniquify colliding instance names, and filter
discovery to physical LAN interfaces.
2026-09-14 10:54:46 +08:00
sususu
c35db127b0 fix(devin): mock AuthService in headless token test and validate prompt before printing URL 2026-09-14 10:24:01 +08:00
sususu
09807c57ea fix(devin): align OAuth authorization URL parameter order with official CLI binary 2026-09-14 09:59:31 +08:00
sususu
fe2fdde8a8 feat(devin): support port-free manual code login in no-browser mode 2026-09-14 09:56:35 +08:00
Luis Pater
7fa443dc8b Merge pull request #5806 from router-for-me/feat/devin-followups
fix(devin): wire protocol submessage decoding, usage fallbacks, model uniqueness, and APICall body token replacement
v7.3.2
2026-09-14 09:39:49 +08:00
Luis Pater
cca35aee93 fix(devin): use loopback callback endpoint for oauth redirect uri
- Enforce `http://127.0.0.1:<port>/callback` redirect URI to satisfy Devin authorization validation requirements.
- Register `/callback` route while preserving `/devin/callback` handler.
2026-09-14 09:37:35 +08:00
sususu
5f56ce928e fix(devin): trigger dimension group fallback if any usage metric is zero 2026-09-14 09:37:29 +08:00
sususu
4c331bb953 fix(devin): unwrap repeated field 28 groups, merge partial field 7 usage, and harden APICall escaping 2026-09-14 09:32:05 +08:00
sususu
0719520f2a feat(api-call): support $TOKEN$ replacement in request body data 2026-09-14 09:20:03 +08:00
sususu
db0b957c48 fix(devin): reject case-insensitive duplicate model IDs 2026-09-14 09:19:58 +08:00
sususu
0148331072 test(devin): add unit test for devin oauth-model-alias channel routing 2026-09-14 09:19:54 +08:00
sususu
b4749cb204 fix(devin): parse field 8 header submessages, accumulate field 4 prompt tokens, and add field 28 usage fallback 2026-09-14 09:19:51 +08:00
Luis Pater
8c5f6e185f fix(openai): convert responses tool choice to chat completions format
- Normalize responses named and custom tool choices to chat completions function format.
- Resolve namespaced and canonical tool names for tool choice.

Closes: #5794
2026-09-14 08:24:06 +08:00
Supra4E8C
44e62bc8ac feat(devin): implement Devin OAuth flow with callback handling and session management v7.3.1 2026-09-14 01:04:20 +08:00
Luis Pater
7e864ace4d Merge pull request #5797 from router-for-me/feat/cpa-web-search-catalog
feat(models): expose CPA web search capability
2026-09-14 00:59:20 +08:00
Supra4E8C
678da56193 chore(models): sync verified native search capability metadata 2026-09-14 00:04:41 +08:00
Supra4E8C
4311ae8747 feat(models): require explicit per-model native search support 2026-09-14 00:04:41 +08:00
sususu
30b2ac8996 refactor(devin): deduplicate auth credentials extraction, filter sparse tool calls, and optimize model lookup v7.3.0 2026-09-13 23:34:43 +08:00
sususu
9d190f309c feat(devin): integrate global signature detector for cross-provider signature detection 2026-09-13 23:34:43 +08:00
sususu
fb2c1c1afa fix(devin): transport reuse, interleaved stream steps, strings.Builder panic, and updater URL 2026-09-13 23:34:43 +08:00