Commit Graph

1081 Commits

Author SHA1 Message Date
diegosouzapw
18ef28ea77 fix(deepseek): preserve reasoning_content for DeepSeek V4 models (cherry-pick from PR #2231)
Cherry-picks non-overlapping changes from @kang-heewon's PR #2231:
- isDeepSeekV4Model() check in responseSanitizer
- providerRegistry V4 model entries with supportsReasoning
- schemaCoercion model-param for injectEmptyReasoningContentForToolCalls
- reasoningCache request-ID-based stable keys
- translator reasoning-only message replay for DeepSeek
- Comprehensive test coverage (81 tests across 5 providers)

Co-authored-by: kang-heewon <owen@kangheewon.dev>
2026-05-14 09:20:21 -03:00
diegosouzapw
35a55d73f3 Merge PR #2224: fix(claudeHelper): preserve latest assistant thinking blocks verbatim
Fixes Anthropic HTTP 400 errors (~49/h on claude-opus-4-7) by preserving
the latest assistant message's thinking blocks verbatim instead of
rewriting them to redacted_thinking.

Co-authored-by: NomenAK <anton@nomenak.dev>
2026-05-14 09:18:57 -03:00
Anton
52285d8a7a fix(translator): coerce submit_pr_review functionalChanges/findings to arrays (#2242)
Integrated into release/v3.8.0 — surgical streaming translator shim for submit_pr_review functionalChanges/findings array fields.
2026-05-14 08:08:02 -03:00
Dohyun Jung
1b14b5b012 fix(providers/command-code): fix validation request format for Command Code API (#2243)
Integrated into release/v3.8.0 — Command Code validation now sends correct external environment and stream=false.
2026-05-14 08:06:55 -03:00
diegosouzapw
831f64ed38 test: fix post-merge test breakages from #2227 #2233 #2238
- antigravity: AntigravityCredentials.projectId widened to string|null
  to match base ProviderCredentials shape post-#2227 squash merge.
- responses-handler: heartbeat assertion updated for #2233's new
  openai-responses-in-progress shape (was: keepalive comment).
- search-registry: expected count is now 12 (ollama-search +
  zai-search both landed in this release).
2026-05-14 06:19:02 -03:00
Vitalii
0c3d33899d Fix Azure AI Foundry provider connection handling (#2236)
Integrated into release/v3.8.0 with unit tests for Azure-AI /responses routing
2026-05-14 05:53:26 -03:00
Andrew Munsell
0caca472d4 feat(search): add Z.AI Coding Plan Search via MCP protocol (#2238)
Integrated into release/v3.8.0 with Zod schema validation replacing JSON.parse(parsed)
2026-05-14 05:42:22 -03:00
Anton
b9db934e39 fix(sse-heartbeat): shape-aware keepalives keep streams alive through stricter proxies (#2233)
Integrated into release/v3.8.0 with idle timeout default reverted to 600s
2026-05-14 05:23:26 -03:00
diegosouzapw
bf83aa55de feat(antigravity): support custom Google Cloud project ID (#2227)
Co-authored-by: nickwizard <nickwizard@users.noreply.github.com>
2026-05-14 05:11:24 -03:00
diegosouzapw
22f2c033da test(modelSync,antigravity): align with post-merge route behavior
After merging PRs #2221 (ModelSync shared loopback readiness gate + IPv4 force)
and #2219 (Antigravity loadCodeAssist bootstrap + fetchAvailableModels fallback)
into release/v3.8.0, two test suites needed updates to match the new routing:

- tests/unit/model-sync-route.test.ts:
  * resetStorage() now calls __resetLoopbackReadinessForTests() so the
    module-level __loopbackReadyPromise cache does not leak between tests.
  * Every fetch mock now answers the /__readiness_probe__/ URL with 404 so
    the gate opens immediately (any HTTP response satisfies the probe).
  * Self-fetch target URL assertions updated from http://localhost/...
    to http://127.0.0.1:20128/... per PR #2221's IPv4-force.
- tests/unit/provider-models-route.test.ts:
  * The Antigravity discovery-retry test now treats loadCodeAssist calls as
    non-fatal failures so the discovery path is still exercised.
  * The expected discovery URL sequence is updated to the new
    fetchAvailableModels-first order introduced by PR #2219.
2026-05-14 00:40:18 -03:00
Anton
44a04df4f6 fix(rateLimit): never .stop() during runtime reset, evict cache instead (#2218)
Integrated into release/v3.8.0
2026-05-14 00:21:16 -03:00
Anton
253f5e5904 fix(ModelSync): shared loopback readiness gate + IPv4 force (#2221)
Integrated into release/v3.8.0
2026-05-14 00:16:22 -03:00
Anton
e2b4c2b06e fix(antigravity): strip generationConfig.thinkingConfig for Claude models (#2217)
Integrated into release/v3.8.0
2026-05-14 00:15:40 -03:00
Anton
9ae31e7f05 fix(model): local aliases override cross-proxy provider inference (#2223)
Integrated into release/v3.8.0
2026-05-14 00:10:05 -03:00
Anton
bbdcb97a06 fix(antigravity): bootstrap project via loadCodeAssist + fetchAvailableModels fallback (#2219)
Integrated into release/v3.8.0
2026-05-14 00:09:26 -03:00
Anton
29b9f27919 fix(proxyFetch): retry once on undici dispatcher failure before native fallback (#2222)
Integrated into release/v3.8.0
2026-05-14 00:08:35 -03:00
Anton
46df8470a9 fix(requestLogger): exempt tools field from array truncation for full debug visibility (#2234)
Integrated into release/v3.8.0
2026-05-14 00:07:47 -03:00
diegosouzapw
7b97b01fe6 refactor(docs-ui): drop DocsI18n.tsx, unify locale handling via next-intl
The cosmetic DocsI18n.tsx shim duplicated the locale catalog that
already lives in config/i18n.json and consumed it through a separate
client hook (useDocsLocale + a 10-entry hard-coded SECTION_LABELS
map). It only ever translated sidebar section titles — the docs
content itself was always English.

Now the /docs page uses the same `LanguageSelector` component as the
rest of the dashboard, backed by next-intl + config/i18n.json. The
locale cookie set there is consumed by the [slug] page server
component (next commit) to actually serve translated markdown.

Removed:
- src/app/docs/components/DocsI18n.tsx (203 lines)

Updated:
- src/app/docs/layout.tsx — swaps DocsLocaleSwitcher for the shared
  LanguageSelector
- tests/unit/docs-site-overhaul.test.ts — replaces the DocsI18n
  importability assertions with checks that (a) the shared next-intl
  config covers the same locales, (b) the global LanguageSelector
  is the new docs switcher, and (c) the DocsI18n module is gone.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 18:01:53 -03:00
diegosouzapw
eb62ad72f1 fix(test): align auto-update test sync-env path with FASE 1 move
FASE 1 moved scripts/sync-env.mjs to scripts/dev/sync-env.mjs. The implementation
(src/lib/system/autoUpdate.ts) was updated, but two test assertions still referenced
the old path. Updates the regex matchers to the new path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 16:46:20 -03:00
diegosouzapw
afe2a67c76 Merge FASE 3: docs restructure into 8 subfolders
Reorganizes /docs into 8 subfolders (architecture, guides, reference, frameworks,
routing, security, compression, ops). Resolves two conflicts:

- scripts/docs/gen-provider-reference.ts: combined FASE 1's new __dirname-based
  ROOT (two levels up from scripts/docs/) with FASE 3's new output path
  (docs/reference/PROVIDER_REFERENCE.md).
- scripts/check-env-doc-sync.mjs: deleted by FASE 1, modified by FASE 3; FASE 1's
  delete wins (file is at scripts/check/ now). The FASE 3 intent (point to
  docs/reference/ENVIRONMENT.md) was applied to the strict checker at the new path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 16:10:49 -03:00
diegosouzapw
6991024935 Merge FASE 2: env audit
Resolves conflict in scripts/check/check-env-doc-sync.mjs (FASE 1 moved it from scripts/ to scripts/check/, FASE 2 modified it at the old path). Applies FASE 2's strict checker version at the new path, fixes __dirname-based REPO_ROOT to traverse two levels up, and updates the unit test import to the new path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 16:02:44 -03:00
diegosouzapw
c044cfdefb refactor(app): regenerate docs nav + update routes/tests for new subfolder layout
- src/app/docs/lib/docs-auto-generated.ts is regenerated from docs/<sub>/ with
  fileName values like "architecture/ARCHITECTURE.md". The dynamic slug page
  joins these against process.cwd()/docs so resolution still works.
- src/app/api/openapi/spec/route.ts now looks for the spec at
  docs/reference/openapi.yaml first, with the flat-path fallback retained for
  older bundles.
- tests updated: integration-wiring expects docs/reference/{API_REFERENCE.md,
  openapi.yaml}; docs-site-overhaul reflects the new 8-section nav titles
  (Architecture, Guides, Reference, Frameworks, Routing, Security, Compression,
  Ops) and the new section for setup-guide ("Guides").
- open-sse/mcp-server/README.md picks up the rewritten docs/ reference.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 13:13:28 -03:00
diegosouzapw
b43ab4d4c3 test(env): make check-env-doc-sync strict + unit test
Rewrites scripts/check-env-doc-sync.mjs so the default mode is strict
(non-zero exit on drift between code references, .env.example, and
docs/ENVIRONMENT.md). The previous "report-only" behavior is still
available via --lenient for ad-hoc local diagnostics.

Highlights:

- Strict mode fails when any of these three sets is non-empty:
    1. process.env vars referenced in src/, open-sse/, bin/, scripts/,
       electron/main.js, electron/preload.js but missing from
       .env.example.
    2. .env.example vars missing from docs/ENVIRONMENT.md.
    3. docs/ENVIRONMENT.md vars missing from .env.example.
- Allowlists are explicit and curated:
    * `IGNORE_FROM_CODE` — system vars (NODE_ENV, PATH, ...), Next.js
      internals, CI runner injections, doctor placeholders, and aliases
      handled by fallback ordering.
    * `DOC_ONLY_ALLOWLIST` — vars intentionally documented in
      ENVIRONMENT.md but absent from .env.example (Audit section,
      legacy aliases, future-supported hooks, `CHANGEME` default value).
    * `ENV_ONLY_ALLOWLIST` — reserved for future use; currently empty.
- The checker now exposes a programmatic `runEnvDocSync({ envExampleText,
  envDocText, codeVars, ignore, docOnlyAllowlist, envOnlyAllowlist })`
  entry point that other Node tests can import without touching disk.
  Helpers `parseEnvExampleVars` and `parseEnvDocVars` are exported so
  fixtures can validate the regex contract.

Test coverage in tests/unit/check-env-doc-sync.test.ts (13 cases):

- Parses env.example assignments (commented and uncommented), rejects
  prose, and rejects backtick literals that aren't SHOUTY env names.
- Drives runEnvDocSync against in-memory fixtures for every drift
  direction (code-missing-env, env-missing-doc, doc-missing-env) and
  asserts the allowlists / ignore set behave as expected.
- Calls runEnvDocSync() with no overrides to assert the live
  .env.example, docs/ENVIRONMENT.md and source-code references stay in
  sync. This is the same check that runs in pre-commit / CI, so the
  unit-test failure surfaces drift before reviewers do.

.env.example: documents `AWS_REGION` and `AWS_DEFAULT_REGION` so
Bedrock/Kiro/audio-speech callers stay in the contract.

docs/ENVIRONMENT.md: adds rows for AWS_REGION / AWS_DEFAULT_REGION
inside §20 Provider-Specific Settings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 12:11:01 -03:00
OmniRoute Ops
ddf1ba21b3 refactor(claudeHelper): export NON_ANTHROPIC_THINKING_PLACEHOLDER and reuse in tests
Per gemini-code-assist review on #2224: export the placeholder constant from claudeHelper.ts and import it in the unit test rather than duplicating the literal. Keeps test in sync with implementation.
2026-05-13 13:18:27 +00:00
diegosouzapw
f3b944a55a refactor(scripts): organize into build/dev/check/docs/i18n/ad-hoc subfolders
Reorganizes the 29 active scripts under scripts/ into purpose-driven
subfolders:

- scripts/build/    (11) — Build, install, publish, runtime env
- scripts/dev/      (13) — Dev servers, test runners, healthchecks
- scripts/check/    (10) — Lint/validation/coverage checks
- scripts/docs/      (2) — Docs index and provider reference generation
- scripts/i18n/     (+3) — Adds Python translation utilities (check/validate/autotranslate)
- scripts/ad-hoc/    (4) — One-shot maintenance utilities

Updates all references in package.json, electron/package.json,
.husky/pre-commit, .github/workflows/ci.yml, Dockerfile, src/,
tests/, scripts/ internal cross-imports, playwright.config.ts,
and English docs (CODEBASE_DOCUMENTATION, ENVIRONMENT, FEATURES,
RELEASE_CHECKLIST, COVERAGE_PLAN, ELECTRON_GUIDE, I18N, GEMINI).

Also patches scripts/build/pack-artifact-policy.ts so the npm pack
allowlist mirrors the new layout.

Validates with:
- npm run lint            (exit 0 — pre-existing minified-bundle errors only)
- npm run typecheck:core  (exit 0)
- npm run check:docs-all  (exit 0)
- unit tests for moved scripts (57 tests pass)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 10:14:25 -03:00
OmniRoute Ops
6f2b360ce8 fix(claudeHelper): preserve latest assistant thinking blocks verbatim
Derived from squash commit 161cfcf7 (PR #9). The original squash was fat
(316 files) because the source branch was rebased on an old base; this
commit applies only the claudeHelper-relevant files surgically onto deploy.

Computes latestAssistantIndex once before the message loop and skips
the rewrite-to-redacted-thinking transform on the latest assistant
message. Symmetric guard for non-Anthropic Claude-shape providers
preserves plain thinking.thinking text on the latest message.

Co-authored-by: OmniRoute Ops <ops@nomenak.dev>
2026-05-13 13:14:03 +00:00
diegosouzapw
204e15628c chore(release): prepare v3.8.0 docs and coverage ratchet
Refresh the v3.8.0 documentation set across API, setup, Docker,
environment, Fly.io, VM deployment, and troubleshooting guides.

Document the updated budget payload, management-auth requirements,
WebSocket bridge secret, Compose profiles, production deployment
details, and expanded Node support. Also update the OpenAPI catalog,
raise coverage thresholds to match the current baseline, and align
cloud-agent task route typing and schemas with the stricter runtime
behavior.
2026-05-13 03:47:40 -03:00
diegosouzapw
46e5aa5522 refactor(api): consolidate auth routing and provider config handling
Centralize optional API key capability checks so dashboard forms and
provider schemas share the same rules, including keyless Pollinations
support and cloud-agent batch testing mode.

Also align auto-combo config on `routerStrategy`, keep legacy combo
reads compatible, preserve MCP routes as management APIs, narrow
`require-login` public access to readonly/bootstrap flows, and make
cloud-agent CORS reflect the request origin for credentialed requests.
2026-05-13 03:47:40 -03:00
diegosouzapw
c89663d774 fix(auth): require management auth for agent and cooldown APIs
Protect cloud agent task routes and model cooldown management endpoints
with management-session auth and consistent CORS handling.

Also align cloud agent API serialization with the dashboard, reuse the
provider connection schema for CLI key storage, and accept active OAuth
tokens when building virtual auto-combo candidates.
2026-05-13 03:47:40 -03:00
Diego Rodrigues de Sa e Souza
20b35c4d20 security: sanitize error messages in API routes (CodeQL js/stack-trace-exposure)
Integrated into release/v3.8.0
2026-05-12 23:23:07 -03:00
diegosouzapw
da982d31be fix(ci): align resilience and thinking checks 2026-05-12 20:44:23 -03:00
diegosouzapw
a260795327 fix(ci): align cloud code thinking and model catalog tests 2026-05-12 20:28:02 -03:00
Dohyun Jung
fc620514a9 feat(providers): add Command Code provider (#2199)
Integrated into release/v3.8.0 after syncing the contributor branch, removing unrelated workflow/package-lock changes, and validating Command Code provider, auth, validation, and Responses coverage locally.
2026-05-12 19:57:35 -03:00
InkshadeWoods
e6aee3d26c feat: add ModelScope provider-specific 429 handling and retry logic (#2202)
Integrated into release/v3.8.0 after syncing the contributor branch, removing unrelated workflow/docker/package-lock changes, tightening ModelScope 429 classification, and validating policy coverage locally.
2026-05-12 19:57:26 -03:00
nickwizard
061c0c29fe Feat/provider models (#2196)
Integrated into release/v3.8.0 after syncing the contributor branch, removing unrelated workflow/docker/package-lock changes, and validating provider-scoped models coverage locally.
2026-05-12 19:57:15 -03:00
backryun
af7d056f7e chore(providers): improve BazaarLink and Completions.me support (#2177)
Integrated into release/v3.8.0 after syncing the contributor branch, removing unrelated dependency churn, and validating executor/default URL coverage locally.
2026-05-12 19:57:06 -03:00
Anton
a408b30896 fix(cliproxyapi): probe /v1/models for health (CPA 6.x has no /health) (#2189)
Integrated into release/v3.8.0 after syncing the contributor branch and validating tests/unit/cliproxyapi-executor.test.ts locally.
2026-05-12 19:50:07 -03:00
Anton
13f7ebce5a fix(stream): skip [DONE] terminator for Claude SSE clients (#2190)
Integrated into release/v3.8.0 after syncing the contributor branch and validating tests/unit/stream-utils.test.ts locally.
2026-05-12 19:49:59 -03:00
Anton
5c11b57542 fix(claudeHelper): emit data field on redacted_thinking, drop bogus signature (#2191)
Integrated into release/v3.8.0 after syncing the contributor branch and validating tests/unit/translator-claude-helper-thinking.test.ts locally.
2026-05-12 19:49:50 -03:00
Anton
340f68bbee fix(modelSpecs): cap thinking budget for Claude Opus 4.6 / 4.7 / Sonnet 4.6 (#2197)
Integrated into release/v3.8.0 after syncing the contributor branch and validating tests/unit/thinking-budget.test.ts locally.
2026-05-12 19:44:45 -03:00
Anton
b23b624f82 fix(reasoning-cache): include xiaomi-mimo in replay provider/model detection (#2198)
Integrated into release/v3.8.0 after syncing the contributor branch and validating tests/unit/reasoning-cache.test.ts locally.
2026-05-12 19:43:58 -03:00
Anton
607ae5ca5e fix(cliproxyapi): detect Anthropic shape on minimal Capy bodies (#2192)
Integrated into release/v3.8.0 after syncing the contributor branch and validating tests/unit/cliproxyapi-executor.test.ts locally.
2026-05-12 19:43:04 -03:00
diegosouzapw
4f87062f3e fix(tests): update test snapshots and registry for PRs merged into v3.8.0
- providerModels: supportsXHighEffort returns true for unknown providers
  (passthrough) so PR #2162 sanitizeReasoningEffortForProvider no longer
  downgrades xhigh for non-registry custom providers
- providerRegistry(openai): add gpt-4o + gpt-4o-2024-11-20 with explicit
  contextLength so catalog tests can resolve them without synced DB data
- context-manager.test: update GPT-5.5 Codex expected context 1050000→400000
  (PR #2163 capped codex OAuth context at 400K)
- provider-models-config.test: update kiro claude-opus-4.7 contextLength
  undefined→1000000 (PR #2163 added explicit context window)
- oauth-providers-config.test: add windsurf and devin-cli to expected
  provider keys and config map (PR #2168)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 15:05:00 -03:00
Andrew Munsell
ed1554b7a1 feat(search): add Ollama Search as a web search provider (#2176)
Integrated into release/v3.8.0 — adds Ollama Search as a web search provider.
2026-05-11 21:54:34 -03:00
Aleksandr
ff730b372e feat(oauth): complete Windsurf / Devin CLI OAuth + API-token flows (#2168)
Integrated into release/v3.8.0 — complete Windsurf/Devin CLI OAuth + API-token executor flows with unit tests.
2026-05-11 21:49:32 -03:00
Ramel Tecnologia
95944dad92 feat(resilience): expose model cooldown list with manual re-enable (#2146)
Integrated into release/v3.8.0 — adds model cooldowns dashboard card with real-time list and re-enable action. Domain module and unit tests added.
2026-05-11 21:38:26 -03:00
Anton
704f686396 fix(cliproxyapi): Anthropic-shape body routing and gate compatibility (#2165)
Integrated into release/v3.8.0 — three fixes for CliProxyApi: Anthropic-shape body routing to /v1/messages, Capy premium extras strip, and mcp_* tool name rewrite to avoid Anthropic gate. Tests added covering all three categories.
2026-05-11 21:23:59 -03:00
Dohyun Jung
dcb32a6ba0 feat(api): aggregate combo model metadata in catalog (#2166)
Integrated into release/v3.8.0 — adds target-based metadata aggregation for combo entries in /v1/models using least-common-denominator approach (context_length, max_output_tokens, capabilities, modalities).
2026-05-11 21:14:25 -03:00
Anton
e5974c4ae3 feat(responses): degrade background mode to synchronous execution (#2164)
Integrated into release/v3.8.0 — degrades background:true to synchronous execution instead of 400, enabling Capy and similar clients that set background:true by default to work seamlessly.
2026-05-11 21:03:26 -03:00
Anton
25199b20fe fix(executors): sanitize reasoning_effort for non-supporting providers (#2162)
Integrated into release/v3.8.0 — adds sanitizeReasoningEffortForProvider hook to BaseExecutor, fixing xhigh→high downgrade for non-supporting providers and full strip for mistral/devstral and GitHub Claude models.
2026-05-11 21:02:28 -03:00