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>
- 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).
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.
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>
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>
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>
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>
- 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>
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>
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.
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>
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.
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.
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.
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.
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.
Integrated into release/v3.8.0 after syncing the contributor branch, removing unrelated dependency churn, and validating executor/default URL coverage locally.
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.
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).
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.
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.