Commit Graph

4713 Commits

Author SHA1 Message Date
Diego Rodrigues de Sa e Souza
cbc161bfc3 fix(providers): route OpenAI responses-only models to /v1/responses (#5842) (#5901)
* fix(providers): route OpenAI responses-only models to /v1/responses (#5842)

* docs(changelog): restore #5842 bullet after merge auto-resolve ate it

* docs(changelog): keep #5842 bullet additive over release tip
2026-07-02 06:44:39 -03:00
KooshaPari
fa2f9e21a8 fix(image): keep bare gpt-5.5 codex mapping in image resolver (#5902)
* fix: preserve codex bare image model over combo shadowing

* docs(changelog): credit #5902 codex bare image alias fix

* docs(changelog): restore #5902 bullet after merge auto-resolve

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diegosouza.pw@gmail.com>
2026-07-02 06:14:45 -03:00
Diego Rodrigues de Sa e Souza
27586fd28d fix(ci): re-green release/v3.8.43 fast-gates — db-rules stale allowlist + 4 more base-reds (#5798) (#5896)
* fix(db): remove stale modelContextOverrides allowlist entry from check:db-rules (#5798)

* fix(ci): clear release/v3.8.43 fast-gates base-reds (env-docs, ADR refs, mutation-cov, ratchets) (#5798)

* fix(sse): type-safe resolveBaseUrl/resolveEffectiveKey coercions in BaseExecutor (typecheck:core base-red, #5798)

* chore(quality): freeze base.ts at post-typecheck-fix size (#5798)

* fix(docs): add required MDX frontmatter to ROUTER_BACKENDS ADR (build base-red, #5798)
2026-07-02 05:48:57 -03:00
Diego Rodrigues de Sa e Souza
0d3875a98d docs(architecture): Router Backends & Embedded Services ADR (#5603) (#5891)
* routing: add router backend registry

* docs(architecture): add Router Backends & Embedded Services ADR (#5603)

Document the two orthogonal axes that #5603 asked to clarify: an engine's
lifecycle (in-process / supervised / external / disabled) vs the relay routing
backend selection (ts / bifrost / auto). Anchors the ADR on the typed
`src/domain/routing/routerBackends.ts` registry as the single source of truth,
and captures the /api/services/* status-code contract (409/200/404/403/500 +
the LOCAL_ONLY loopback guard) so dashboard errors are interpretable.

Stacked on the router-backend-registry work so it documents a real contract.

* docs(architecture): reduce ADR PR to docs-only — registry lands via #5868; describe adoption as tracked, not current

* docs(changelog): add 3.8.43 bullet for the Router Backends ADR (#5891)

---------

Co-authored-by: KooshaPari <kooshapari@gmail.com>
2026-07-02 03:32:33 -03:00
KooshaPari
66fe66d781 test(autoCombo): stabilize model fitness source expectation (#5890)
* test(autoCombo): make fitness source test stable against model caps

* chore(ci): retrigger checks for PR 5890

* docs(changelog): add 3.8.43 bullet for the autoCombo fitness-source test stabilization (#5890)

---------

Co-authored-by: kooshapari <kooshapari@users.noreply.github.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <diegosouza.pw@gmail.com>
2026-07-02 03:28:39 -03:00
Diego Rodrigues de Sa e Souza
6a92985662 fix(providers): restore codex inference for unprefixed gpt-5.5 on codex-only setups (#5887) (#5895) 2026-07-02 03:14:44 -03:00
Diego Rodrigues de Sa e Souza
8d2c06f568 fix(api): strip upstream x-middleware-* headers from proxied responses (#5849) (#5893) 2026-07-02 02:55:32 -03:00
Diego Rodrigues de Sa e Souza
55e638c312 fix(dashboard): pre-fill Modal Validation Model Id with the server probe model (#5446) (#5892) 2026-07-02 02:54:32 -03:00
Diego Rodrigues de Sa e Souza
fc0aadebf3 docs: use pnpm --allow-build flag instead of unsupported approve-builds -g (#5554) (#5884) 2026-07-02 02:47:30 -03:00
Diego Rodrigues de Sa e Souza
53fb1bef4a fix(dashboard): gate Token Expired badge on terminal testStatus, not raw token expiry (#5836) (#5883) 2026-07-02 02:47:04 -03:00
Diego Rodrigues de Sa e Souza
9dceb6289b fix(db): honor autoBackupEnabled setting for pre-write backups (#5871) (#5888) 2026-07-02 02:46:36 -03:00
Diego Rodrigues de Sa e Souza
211e05ad41 fix(providers): include custom compatible providers in auto/ routing (#5873) (#5886) 2026-07-02 02:46:01 -03:00
Diego Rodrigues de Sa e Souza
2b9abebef8 fix(middleware): run operator hook code in hardened vm sandbox instead of new Function (#5872) (#5885) 2026-07-02 02:45:32 -03:00
Diego Rodrigues de Sa e Souza
a8f9231029 fix(mcp): forwarded caller auth wins over OMNIROUTE_API_KEY env fallback (#5819) (#5882) 2026-07-02 02:44:38 -03:00
Diego Rodrigues de Sa e Souza
16aeb08765 fix(dashboard): Modal — two-field auth (Token ID + Token Secret) (#5446) (#5881)
* fix(dashboard): add Modal Token ID + Token Secret fields (#5446)

Modal authenticates with a Token ID (ak-…) + Token Secret (as-…) pair sent as
`Authorization: Bearer <TOKEN_ID>:<TOKEN_SECRET>`. The add-connection form only
exposed a single API-key field, so users could not enter both credentials.

Add a dedicated two-field form for the `modal` provider: the existing field is
relabeled "Token ID" and a new "Token Secret" field is rendered below it. Both
are combined into the single encrypted `apiKey` value via a new pure helper
`combineModalCredential(id, secret)` → `id:secret`, so the generic bearer
executor path emits `Bearer <id:secret>` with no registry/executor/DB changes.
An empty secret returns the id verbatim, preserving the ability to paste a
pre-combined `id:secret` into the single field. The field hint points to
https://modal.com/settings → API Tokens.

Registry (baseUrl/executor), DB schema, and the request-time header path are
untouched — Modal remains bring-your-own-deploy.

Tests: tests/unit/modal-credential-combine.test.ts (5, TDD).

* docs(changelog): add v3.8.43 bullet for Modal two-field auth (#5446)
2026-07-02 02:40:30 -03:00
Diego Rodrigues de Sa e Souza
4339cce3b0 chore(ci): pass sonar.projectVersion to SonarQube scan so the new-code baseline advances per release (#5880) 2026-07-02 02:39:09 -03:00
Shiva Vinodkumar
60a450562f Add .editorconfig to improve repository standards (#5879) 2026-07-02 02:38:54 -03:00
Diego Rodrigues de Sa e Souza
425324ad5c feat: add NEXT_PUBLIC_LIVE_WS_PUBLIC_URL for custom domain WebSocket support (#5878)
* docs: add ai_features scope to GitLab Duo OAuth env setup instructions

* docs: add LIVE_WS_ALLOWED_HOSTS env var to example config for LAN/Tailscale setups

* feat: add web socket public URL for reverse proxy/Cloudflare Tunnel WebSocket setups

* fix(dashboard): resolve live WS public URL at runtime via handshake with scheme validation

- Read NEXT_PUBLIC_LIVE_WS_PUBLIC_URL lazily in /api/v1/ws (function, not
  module-level const) so runtime env changes are honored in prebuilt images.
- Only echo/consume publicUrl when it is a ws:// or wss:// URL (server and
  client guards); anything else is rejected to null.
- useLiveDashboard now fetches /api/v1/ws?handshake=1 before connecting and
  prefers: explicit wsUrl > build-time env > handshake publicUrl > default.
- Align GitLab Duo scopes line in .env.example with GITLAB_DUO_CONFIG.scope.
- Extend tests: lazy env read + scheme validation cases.
- CHANGELOG entry for 3.8.43.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

---------

Co-authored-by: Septianata Rizky Pratama <ian.rizkypratama@gmail.com>
2026-07-02 01:16:51 -03:00
Diego Rodrigues de Sa e Souza
5be3d81544 fix(github): keep Copilot access-token sessions active (#5875)
* fix(github): keep Copilot access-token sessions active

GitHub Copilot device-flow accounts may have a GitHub access token and short-lived Copilot token without a refresh token. The proactive health check was treating that as terminal no_refresh_token and marking the connection expired minutes after login. Keep those sessions active, clear stale no_refresh_token state, and refresh the Copilot sub-token when needed.\n\nTests:\n- npx eslint src/lib/tokenHealthCheck.ts tests/unit/token-health-no-refresh-token-expired-5326.test.ts\n- DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/token-health-no-refresh-token-expired-5326.test.ts tests/unit/token-health-check.test.ts tests/unit/token-health-check-circuit-breaker.test.ts tests/unit/token-refresh-service.test.ts tests/unit/token-refresh-route-service.test.ts tests/unit/executor-github.test.ts\n- npm run typecheck:core\n- npm run build

(cherry picked from commit 68095d4796)

* docs(changelog): credit Copilot token-health fix extraction from #5863

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

---------

Co-authored-by: Wital <wital@example.com>
2026-07-02 00:38:03 -03:00
Diego Rodrigues de Sa e Souza
a205cb7f5e feat(usage): report usage command quotas as percentages + honor observed provider quota resets (#5874)
* feat: report usage command quotas as percentages

Convert @@om-usage and the HTTP usage endpoint to report personal API key quotas as remaining percentages while keeping USD amounts out of the command output. Scale provider quota remaining percentages by the configured quota cutoff so the protected reserve reads as 0% left. Restore provider USD cost drilldown in the quota dashboard.\n\nAlso sync the 3.8.43 i18n changelog mirrors so the docs-sync pre-commit gate remains green.\n\nTests: DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/internal-usage-command.test.ts; DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/api-key-usage-limits.test.ts; DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/provider-window-costs.test.ts; DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/api-manager-usage-command.test.ts tests/unit/apikeys-usage-command.test.ts; npx eslint <changed files>; npm run typecheck:core; npm run build; npm run check:migration-numbering; npm run check:docs-sync; docker build --target runner-base

(cherry picked from commit f66abd2028)

* fix: honor observed provider quota resets

Detect same-resetAt quota resets when provider usage drops back to the reset floor, and prefer that observed snapshot over stale recorded weekly events for provider USD windows and API-key USD quotas.\n\nTests: npx eslint changed files\nTests: npm run typecheck:core\nTests: DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/lib/quota-reset-events.test.ts tests/unit/provider-window-costs.test.ts tests/unit/api-key-usage-limits.test.ts\nTests: npm run build\nTests: docker build --target runner-base --build-arg OMNIROUTE_BUILD_MEMORY_MB=4096 -t omniroute:quota-reset-window-20260702002300 .

(cherry picked from commit 39c12a6f17)

* docs(changelog): credit usage quota percentages extraction from #5863

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

---------

Co-authored-by: Wital <wital@example.com>
2026-07-02 00:36:57 -03:00
Randi
595349a59a fix(chat): preserve JSON default when stream is omitted (#5866)
* fix(chat): preserve JSON default when stream is omitted

* chore(chat): type route record guard

* fix(api): gate early SSE keepalive on explicit stream intent, keep body untouched

Remove the stream:false body normalization so the legacy streaming
default (resolveStreamFlag) and the per-key streamDefaultMode json
opt-in keep deciding the response framing; the keepalive wrapper is
only applied when stream:true is explicit or Accept forces SSE.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

---------

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-02 00:32:38 -03:00
Diego Rodrigues de Sa e Souza
429a4ad2f7 chore(docs): scope release-freeze to /generate-release only (Hard Rule #21) (#5839)
A freeze is authorized ONLY inside /generate-release (raised Phase 0a,
lifted Phase 12c). No campaign/session/agent may open a release-freeze
mid-development; if one is ever unavoidable outside the release flow it
must be requested from the operator in chat first with an explicit
"estou criando um freeze" alert. Also codifies: never lift an active
captain freeze to unblock campaign merges (it auto-lifts at 12c).
2026-07-02 00:25:40 -03:00
Diego Rodrigues de Sa e Souza
02e73c5440 refactor(oauth): remove dead legacy OAuth service classes (#5838)
The src/lib/oauth/services/ service-class hierarchy is superseded — the live OAuth
flow runs through src/lib/oauth/providers.ts + providers/. The old per-provider
'class *Service extends OAuthService' implementations and their barrel had zero
production or test references. Removed oauth/openai/github/claude/codex/antigravity/
qwen/qoder + the index barrel (-1559 LOC). Kept kiro.ts, cursor.ts, codexImport.ts
(routes import them directly by path, never via the deleted barrel).

Proven safe by typecheck:core staying green (a live reference would fail the build)
+ a filesystem guard test pinning the removal. Salvage of closed PR #5039.
gaps v3.8.42 - T10 (5.7).
2026-07-02 00:25:19 -03:00
Nguyen Minh
f6100d67c7 [codex] Protect long-running agent goal streams (#5772)
Integrated into release/v3.8.43
2026-07-01 22:07:13 -03:00
Denis Kotsyuba
6d02e0572e fix(sse): strip zero-width markers from streamed responses (parity with non-streaming) (#5857)
Integrated into release/v3.8.43
2026-07-01 22:05:01 -03:00
WITALO ROCHA
cfb2db8261 fix: restore om-usage HTTP endpoint (#5859)
Integrated into release/v3.8.43
2026-07-01 22:03:17 -03:00
Nguyen Minh
9358eeada9 [codex] Tune adaptive stream readiness timeouts (#5767)
Integrated into release/v3.8.43
2026-07-01 22:02:51 -03:00
Nguyen Minh
19703cd6ec Harden provider node URL validation (#5760)
Integrated into release/v3.8.43
2026-07-01 22:02:36 -03:00
PizzaV
36167d7bb7 refactor(executors): deduplicate shared utilities and add comprehensive tests (#5720)
Integrated into release/v3.8.43
2026-07-01 22:02:22 -03:00
Markus Hartung
9bd0211da7 extracted CorrelationId observability changes from #5275 (#5834)
Integrated into release/v3.8.43
2026-07-01 22:02:08 -03:00
Isha Tiwari
a98b29e8be Show startup time in ready banner (#5799)
Integrated into release/v3.8.43
2026-07-01 22:01:54 -03:00
Aris
cc260c9459 fix(cli): correct rootDir resolution in doctor.mjs on Windows (#5844) (#5845)
Integrated into release/v3.8.43
2026-07-01 22:01:40 -03:00
Chewji
e5e47eb61c fix(antigravity): 429 hang on credit exhaustion and precise reset time lockout (Cleaned) (#5846)
Integrated into release/v3.8.43
2026-07-01 22:01:26 -03:00
janeza2
057dc3abf3 fix(qwen-web): unblock validator + chat completion (retired endpoint + missing SPA version header) (#5855)
Integrated into release/v3.8.43
2026-07-01 22:01:11 -03:00
janeza2
b708aa7e75 fix(kimi-web): migrate to www.kimi.com Connect-RPC API (kimi.moonshot.cn retired) (#5858)
Integrated into release/v3.8.43
2026-07-01 22:00:57 -03:00
Randi
103a0ee2a2 fix: unify dashboard csrf origin fallback (#5856)
Integrated into release/v3.8.43
2026-07-01 22:00:43 -03:00
Yuan Li
7d7626151b fix(db): preserve healthCheckInterval=0 across create/update (#5822)
Integrated into release/v3.8.43
2026-07-01 22:00:18 -03:00
Diego Rodrigues de Sa e Souza
e38c1ca9fc fix(usage): keep tool definitions visible when request log is truncated (#5829)
Integrated into release/v3.8.43
2026-07-01 21:59:33 -03:00
Diego Rodrigues de Sa e Souza
8bba88cd30 fix(translator): prevent doubled tool args in OpenAI-to-Claude (#5828)
Integrated into release/v3.8.43
2026-07-01 21:58:48 -03:00
Diego Rodrigues de Sa e Souza
08dbf6f58a fix(mitm): clean up privileged hosts entries on exit when possible (#5808)
Integrated into release/v3.8.43
2026-07-01 21:58:01 -03:00
Diego Rodrigues de Sa e Souza
59de75cc45 fix(kiro): stop injecting placeholder user turn on tool-result turns (#5807)
Integrated into release/v3.8.43
2026-07-01 21:57:14 -03:00
Diego Rodrigues de Sa e Souza
ace6479d5f fix(translator): strip orphaned tool results across request formats (#5805)
Integrated into release/v3.8.43
2026-07-01 21:56:25 -03:00
Diego Rodrigues de Sa e Souza
b55a330dc5 fix(oauth): disambiguate OAuth connections on username to prevent cross-IdP overwrites (#5803)
Integrated into release/v3.8.43
2026-07-01 21:55:30 -03:00
Diego Rodrigues de Sa e Souza
e7ae29d607 fix(github): drop trailing assistant prefill for Copilot chat (#5802)
Integrated into release/v3.8.43
2026-07-01 21:54:43 -03:00
Diego Rodrigues de Sa e Souza
3323b5b617 fix(dashboard): guard null modelAliases values in model picker (#5792)
Integrated into release/v3.8.43
2026-07-01 21:53:56 -03:00
Diego Rodrigues de Sa e Souza
4d7f36015a fix(sse): stop reasoning-summary drop + duplicated deltas on claude→codex streaming (#5786) (#5832)
Integrated into release/v3.8.43
2026-07-01 21:52:10 -03:00
Diego Rodrigues de Sa e Souza
2955927b06 fix(db): allowlist modelContextOverrides as intentionally-internal to green release DB-rules gate (#5798) (#5827)
Integrated into release/v3.8.43
2026-07-01 21:51:35 -03:00
Diego Rodrigues de Sa e Souza
dcefed0d99 fix(kiro): bound Claude id dash->dot minor group to protect date-suffixed ids (#5825)
Integrated into release/v3.8.43
2026-07-01 21:51:21 -03:00
Diego Rodrigues de Sa e Souza
eadd7338f6 fix(providers): add claude-sonnet-5 to Kiro model catalog (#5796)
Integrated into release/v3.8.43
2026-07-01 21:50:13 -03:00
Diego Rodrigues de Sa e Souza
12ac520014 fix(cli): rename process title to omniroute (#5791)
Integrated into release/v3.8.43
2026-07-01 21:49:48 -03:00