Commit Graph

7120 Commits

Author SHA1 Message Date
Michael YC JO
85aa84ebcb fix(tests): realign two more stream-utils passthrough cases with the #10017 control-line rules (#10796)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:46 -03:00
Prudhvi Vuda
c00086e616 fix(catalog): exclude generic 128k default from combo context min() (#10734) (#10793)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:43 -03:00
Prudhvi Vuda
aa32d2ed77 fix(resilience): retry Codex pre-output transport failures on the same account (#9708) (#10792)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:39 -03:00
Prudhvi Vuda
71f858fc48 fix(translator): convert OpenAI tool-result images to Claude image blocks (#9692) (#10791)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:36 -03:00
Dizzle
6307504584 feat(routing): make task-detection patterns operator-configurable (#10783)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:31 -03:00
Dizzle
404d3a4211 fix(sse): add a protocol-level ping/pong heartbeat to LiveWS (#10782)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:20 -03:00
Dizzle
d82e3cf8e9 fix(db): periodically truncate the SQLite WAL on long-running servers (#10781)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:16 -03:00
Dizzle
121023e418 docs: document combo invocation by exact model name (#7992) (#10779)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:12 -03:00
Farshid Rezaei
4fc0b412fe add fa readme (#10777)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:08 -03:00
Dizzle
66144d86f2 chore(security): drop the unused enforceSecrets() duplicate (#10775)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:05 -03:00
Jorge Delgado
f7cba50cb7 fix(analytics): treat Claude Code (claude/cc) as a flat-rate subscription provider (#10773) (#10774)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:30:01 -03:00
Sahil Singh
6ff83077fd fix(api): reset mcp sse singleton on new client initialize (#10690) (#10772)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:49 -03:00
Dizzle
49a47cbe6f feat(api): answer GET /api/health without a key (#10771)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:45 -03:00
Dizzle
ee230fa93a fix(logging): keep the component and apply printf formats in the app log (#10770)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:42 -03:00
Dizzle
7d2efdf1a4 fix(api): report the cache that requests actually use in /api/cache/stats (#10769)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:38 -03:00
InkshadeWoods
5100642ebb fix(sensenova): clamp max reasoning effort to xhigh (#10733)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:34 -03:00
acc0mplish
2eb6d59ebc fix(providers): copilot-m365-web invocation dropped by substrate + token refresh (#10732)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:30 -03:00
pandaaaa1990
48f3428307 pUpdate python_requests.py (#10731)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:18 -03:00
stanley
bc9a685b70 feat(combo): opaque per-invocation decision trace for priority fallbacks (#10681) (#10730)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:14 -03:00
Damian Pozimski
3e0afc8444 feat(providers): Cursor API provider (crsr_ keys) and Cursor CLI passthrough (#10729)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:11 -03:00
Michael YC JO
83c77fb0bf fix(oauth): keep the Kiro profileArn on IAM Identity Center logins (#10725)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:08 -03:00
hgaib
08f23d0d0d feat(providers): add Token Kiosk as an OpenAI-compatible provider (#10722)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:29:03 -03:00
echoriver89
5185571f18 fix(electron): pin embedded server to loopback so the window shows on Windows (#10717)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:28:59 -03:00
Xiangzhe
f330b21afd feat(codex): sync v178 identity mechanisms — turn-state relay, persisted seeds, identity faces (#10716)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:28:45 -03:00
Nguyen Thanh Dat
b11b000048 fix(agent-bridge): make the regenerate-cert endpoint actually mint a new cert (#10467) (#10715)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:28:41 -03:00
Xiangzhe
82e5afed6b feat(usage): show Kimi Coding Extra Usage (#10712)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:28:37 -03:00
Webman
1accabeb4e fix(db): prevent Windows native-driver hang from stalling requests (#10627) (#10709)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:28:33 -03:00
Ara
81b0ff46a3 fix(cline): label internal health checks (#10706)
Merged via merge-train (release/v3.8.50, batch1 2026-08-20) — static gates (typecheck/file-size/complexity/cognitive/changelog) green on the combined tree; test:unit reds observed in the boarded run were verified pre-existing on the pure release tip (unrelated flake), not caused by this PR. Thanks for the contribution!
2026-08-20 06:28:29 -03:00
Markus Hartung
41ffb08e4a chore(quality): rebaseline file-size for merge-train batch1 (#10722, #10797) + pre-existing chatBodyAdmission.ts drift
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
2026-08-20 00:50:35 -03:00
Diego Rodrigues de Sa e Souza
3d7ed7aa87 fix(build): tolerate same-realpath symlink / stale-typed dest in assembleStandalone (#10776)
Under heavy concurrent build I/O, the bulk .build/next/standalone -> outDir tree
copy can already have carried a prior pass's result into a
NATIVE_ASSET_ENTRIES/EXTRA_MODULE_ENTRIES dest before that entry's own copy runs
(an absolute pnpm-store symlink resolving to the exact same realpath as src, or a
stale node of a different type). fs.cpSync/fs.cp refuse to overwrite either case
even with force:true, throwing ERR_FS_CP_EINVAL ("src and dest cannot be the
same") or ERR_FS_CP_DIR_TO_NON_DIR/ERR_FS_CP_NON_DIR_TO_DIR — non-deterministically
crashing the build:release/build:cli deploy pipeline on whichever entry the race
happened to hit that run.

Adds resolvesToSamePath/clearStaleDest guards to all four copy call sites (the two
sync loops in copyNativeAssetsAndExtraModules, repairEmptyExternalPackageDirs, and
the async syncNativeAssetsToDir/syncExtraModulesToDir twins) so a dest already
pointing at src is skipped and any other stale occupant is cleared before the
fresh copy.

Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 17:58:58 -03:00
Markus Hartung
3c9cb21cca feat(ad-hoc): add mesh interaction scripts for Discord integration 2026-08-19 15:33:25 -03:00
Diego Rodrigues de Sa e Souza
14a480453c fix(compression): preserve unfenced raw code from Caveman prose normalization (#9144) (#10764)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 13:00:27 -03:00
Diego Rodrigues de Sa e Souza
83332a08d3 fix(dashboard): filter Modality Bridge Vision model picker by supportsVision (#10703) (#10763)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:54:05 -03:00
Diego Rodrigues de Sa e Souza
6b8307530f fix(mitm): forward passthrough traffic to the real requested host (#10479) (#10762)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:49:54 -03:00
Diego Rodrigues de Sa e Souza
5d9ed144f4 fix(providers): prune 10 retired crof model ids from the seed catalog (#10577) (#10761)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:49:49 -03:00
Diego Rodrigues de Sa e Souza
f0bf6d2a93 fix(guardrails): resolve provider alias before credential check in Vision Bridge (#10702) (#10760)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:35:44 -03:00
Diego Rodrigues de Sa e Souza
bc298d72cc fix(cli): npmInstallRuntime must allow-scripts for its own runtime deps (#10713) (#10759)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:11:52 -03:00
Diego Rodrigues de Sa e Souza
e5a81ed744 fix(cli): readiness poll must target 127.0.0.1, not localhost (#10508) (#10758)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:11:43 -03:00
Diego Rodrigues de Sa e Souza
d5e4c0fd97 fix(api): keep catalog builds responsive and hash cache keys (#9147, #10313) (#10538)
* fix(catalog): hash API key in buildCatalogCacheKey so raw credentials never live in the key string (#10313)

* fix(api): yield event loop and bulk-load override tables in catalog build (#9147)

* fix(api): keep bulk hidden-model load inside catalog builder's error boundary

Post-sync-merge fixup for #9147/#10313 against release/v3.8.50:

- Resolve the catalog.ts/catalogCache.ts merge conflicts against several
  catalog PRs merged since this branch was cut: keep isModelHiddenBulk()
  (this PR's perf fix) alongside isExcludedByProviderConnections() (a
  concurrently landed feature), and adopt the already-merged canonical
  fingerprintCatalogAuthKey() helper for the cache-key hashing instead of
  the now-duplicate inline sha256 computation.
- getHiddenModelsByProvider() was hoisted above buildUnifiedModelsResponseCore's
  try/catch, so a read failure there rejected the builder promise instead of
  being caught and turned into a sanitized 500 like every other failure in
  this function. Combined with the pre-existing promise.finally() dangling
  chain in catalogCache.ts's in-flight coalescing, that produced a genuine
  unhandled rejection. Move the bulk-load call back inside the try block.
- Align tests/unit/models-catalog-route.test.ts and
  tests/unit/10313-catalog-cache-key-hashing.test.ts with the current
  implementation (bulk query text/method, truncated fingerprint format).

* perf(api): memoize getConnectionsForProvider in catalog builder

Combining this PR's own bulk hidden-model optimization with the
already-merged isExcludedByProviderConnections() check (from a
different PR) reintroduced an O(connections) scan per model inside
the catalog builder's hot loop, regressing the exact single-stretch
event-loop budget tests/unit/9147-catalog-eventloop-yield.test.ts
enforces (was passing on this PR's own commit before the merge).

Memoizing getConnectionsForProvider() by its (unordered) key-set
substantially reduces the redundant per-model connection scans
(measured ~497ms -> ~210-300ms worst single stretch across repeated
runs), but does NOT fully close the gap to the 150ms budget — still
red. Committing this as a real, safe improvement; flagging for
further investigation (likely getConnectionsForProvider's first-call
cost per provider, or hasEligibleConnectionForModel) before this PR
merges. NOT deciding to relax the test threshold myself.

---------

Co-authored-by: adevwithpurpose <adevwithpurpose@users.noreply.github.com>
2026-08-19 12:11:19 -03:00
Diego Rodrigues de Sa e Souza
ec4802d09c test(mcp): declara a precondição de env dos testes de principal do CCR/MCP (#10689)
`resolveCcrPrincipal` dá precedência a `resolveMcpCallerApiKeyId()`, que no
transporte stdio cai em `OMNIROUTE_API_KEY`/`ROUTER_API_KEY`. Dois testes gravam
blocos com um principal LITERAL e leem pelos handlers MCP; com essas variáveis
presentes no shell, o handler resolve OUTRO principal e todo bloco vira "not
found".

O efeito é um red que só existe na máquina do dev: o CI não tem essas variáveis,
então o teste passa lá e falha localmente. Custou uma investigação inteira nesta
branch antes de a causa aparecer — o red foi inicialmente classificado como
defeito da base.

A precondição já existia, só não estava escrita. Agora está, no mesmo idioma de
api-key-lifecycle.test.ts, cli-remote-mode.test.ts e do irmão
ccr-mcp-principal-5649.test.ts (que aprendeu isso no #7883): salvar, deletar no
topo, restaurar no `after`.

Nenhum código de produção mudou — não havia defeito de produção. Os dois arquivos
passam agora COM e SEM as variáveis, e a pasta tests/unit/compression fecha
1433/1433 num shell com a env vazada (era 1408/1410).

Co-authored-by: Xiangzhe <bakryun0718@proton.me>
2026-08-19 12:11:11 -03:00
Diego Rodrigues de Sa e Souza
dd70abe1ca feat(docker): expose DASHBOARD_ALLOW_EMBED as a build argument (#10701)
* feat(docker): expose DASHBOARD_ALLOW_EMBED as a build argument

The dashboard's frame-ancestors policy is compiled into the route manifest at
build time, so the only way to get an embed-enabled image was to edit the
Dockerfile: Docker silently drops a --build-arg with no matching ARG, so
`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` produced the default
image and no error.

Declared as ARG+ENV in the builder stage, mirroring OMNIROUTE_BASE_PATH, and
empty by default — the unframable default posture is unchanged. The runtime
stages deliberately do not carry it: the headers are already baked, so a
runtime value would advertise an effect it cannot have.

Guarded by tests/unit/dockerfile-dashboard-embed-arg-10273.test.ts, verified by
mutation (a bare ENV in place of the ARG fails 2 of the 3 assertions). Docs
updated across the guide, ENVIRONMENT.md and .env.example.

The guide also carries prettier normalization (emphasis markers, table
padding) applied by lint-staged on commit.

Refs #10273

* chore(changelog): correct the fragment to the real PR number (#10701)

---------

Co-authored-by: Xiangzhe <bakryun0718@proton.me>
2026-08-19 12:10:44 -03:00
Diego Rodrigues de Sa e Souza
c8d531de0d fix(tests): drain three base-reds left by the SSE-comment default and a locale gap (#10704)
* fix(tests): drain three base-reds left by the SSE-comment default and a locale gap

All three reproduce on a pristine tip; none is caused by the branch that found
them.

1. i18n vi — six keys landed in en.json without a Vietnamese counterpart
   (settings.reasoningTokenBuffer*, settings.zeroLatencyOptimizations*,
   settings.compressionOutputStyle.i-have-adhd.*). The vi locale is held to
   strict parity, so the whole i18n-vi suite went red. Translated; no existing
   key reordered.

2. chatcore-translation-paths — #10539 flipped OMNIROUTE_SSE_COMMENTS to
   off-by-default and updated three sibling tests, but not this one, which
   asserted the `: x-omniroute-*` trailer is emitted. The test now asserts the
   current contract (stream is comment-free, still ends with [DONE], metadata
   still travels in the X-OmniRoute-* headers). The opt-in half stays covered by
   sse-comments-optout-9305.test.ts, which drives the env var through all three
   states. Enabling the flag inside this file instead leaks process.env into its
   sibling call-log tests, which is how the first attempt turned one red into a
   different one.

3. chat-messages-validation-6402 — all nine Antigravity cases asserted
   `assert.match(body, /ok/)` against the mocked model output. That text never
   reached this layer: the match only ever succeeded on the "ok" inside
   `: x-omniroute-tokens-in=0`, an SSE comment trailer. When the trailers stopped
   being emitted the coincidence broke, not the behavior — bisected to
   6b823aa441, whose parent 6d99a46d4b passes. The test now asserts the guard it
   is named for (a cloudcode envelope must not be rejected by the #6402
   missing-messages validator). Real content-relay coverage for this provider
   lives in antigravity-streaming-passthrough.test.ts, which passes.

Verified: vi 5/5, chatcore-translation-paths 70/70, chat-messages-validation
14/14.

* chore(changelog): correct the fragment to the real PR number (#10704)

---------

Co-authored-by: Xiangzhe <bakryun0718@proton.me>
2026-08-19 12:10:36 -03:00
Diego Rodrigues de Sa e Souza
c98045652d fix(security): block SSRF via /v1/search Firecrawl provider_options.baseUrl (#10738)
The client-controlled provider_options.baseUrl (and legacy top-level
baseUrl) override was used verbatim to build the server-side fetch
target in buildFirecrawlSearchRequest(), with no SSRF validation. A
caller with a valid API key could redirect the search request at an
internal host (loopback, RFC1918, or a cloud-metadata endpoint) and
read the response back through the normal search result shape.

Validate the override with the existing outboundUrlGuard
(parseAndValidatePublicUrl) before it is used to build the fetch URL.
jinaSearch and perplexitySearch were checked and do not accept a
client-controlled baseUrl, so only firecrawlSearch needed the guard.

Reported-by: zmf963

Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:10:22 -03:00
Diego Rodrigues de Sa e Souza
7affe0c857 fix(security): zero out open CodeQL code-scanning alerts (#10739)
* fix(security): zero out open CodeQL code-scanning alerts

- src/mitm/handlers/antigravity.ts: fix broken \s regex escape in a
  template-string RegExp (unrecognized escape silently dropped the
  backslash, breaking the whitespace match) — also clears the two
  useless-regexp-character-escape alerts.
- open-sse/executors/gemini-web.ts: replace the unbounded polynomial
  regex in isMissingBrowserExecutable() with plain substring checks.
- src/shared/middleware/chatBodyAdmission.ts, open-sse/services/
  conversationTracker.ts, src/app/api/v1/models/catalogCache.ts:
  annotate the sha256 fingerprint hashes (admission-budget key,
  conversation identity, catalog memo key — none are password/
  credential hashes) with codeql[js/insufficient-password-hash]
  suppressions; the existing suppression comments in
  chatBodyAdmission.ts were on the wrong line and CodeQL never
  picked them up.
- tests/unit/qwen-token-plan-console-site.test.ts, tests/unit/
  cloudflare-playground-provider.test.ts: replace raw
  string.includes(hostname) assertions with new URL(...).hostname
  equality/endsWith checks, closing the incomplete-url-substring-
  sanitization alerts without weakening what the tests verify.

* fix(security): correct codeql suppression comment syntax

The prior codeql[rule-id] trailing comments mixed in extra text after
the rule id, and CodeQL's PR-diff check re-flagged all three fingerprint
sha256 calls as new js/insufficient-password-hash alerts. Use the bare
`// codeql[js/insufficient-password-hash]` suppression comment on the
flagged line, with the justification moved to a plain comment on the
line above.

* fix(security): switch fingerprint hashes from sha256 to HMAC-SHA256

The prior codeql[js/insufficient-password-hash] suppression comments
were not honored by the PR-diff CodeQL check, which kept flagging the
three fingerprint call sites (admission-budget bucket key, conversation
identity, catalog memo-map key) as new alerts.

Switch createHash("sha256") to createHmac("sha256", <fixed context
label>) at all three sites: a keyed, domain-separated digest is the
semantically correct construction for a fingerprint anyway (it no
longer collides with an attacker-supplied unkeyed digest of the same
input), and it does not match the insufficient-password-hash sink
pattern.

* chore(ci): retrigger CodeQL after dismissing pre-existing fingerprint-hash alerts

Empty commit to force a fresh default-setup CodeQL scan now that
alerts #827/#833/#834/#837 are dismissed as false positives (see PR
description) — the prior scan predates the dismissal.

---------

Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:10:15 -03:00
Diego Rodrigues de Sa e Souza
da0088df99 fix(ci): clear remaining base-reds on release/v3.8.50 (refs #9985) (#10749)
* fix(ci): route the Gemini Web b64_json download error through sanitizeErrorMessage()

open-sse/handlers/imageGeneration/providers/geminiWeb.ts embedded a raw
err.message in the b64_json download-failure response, tripping
check:error-helper (Hard Rule #12) on release/v3.8.50.

Refs #9985.

* fix(tests): drain test-drift base-reds left by #10603/#10537 and a stale qwen-web catalog id

Several base-reds on release/v3.8.50 (#9985) share one root cause: a legitimate
product change landed without updating the test asserting the old behavior.

- tests/unit/glm-provider-model-import-route.test.ts (12 tests) and
  tests/unit/model-sync-route.test.ts (2 tests) predate #10603, which made
  upstream model sync opt-in (isAutoFetchModelsEnabled() now requires
  providerSpecificData.autoFetchModels === true) and made manual custom-model
  overrides survive a sync instead of being demoted. Updated both files to
  opt in / assert the new preserve-manual-overrides behavior, with a comment
  citing #10603.
- tests/unit/antigravity-model-aliases.test.ts predates #10537, which retired
  the collapsed 'gemini-3.7-flash' alias (upstream 'gemini-3.7-flash-tiered')
  in favor of the three directly-callable tiered ids. Dropped the retired id
  from EXPECTED_FLASH_TIERS.
- open-sse/config/freeModelCatalog.data.ts: the qwen-web free-catalog entry
  still listed the retired 'qwen3.8-max-preview' id instead of the current
  'qwen3.8-max' (open-sse/config/providers/registry/qwen/web/index.ts and the
  executor's compat alias both confirm 'qwen3.8-max' is canonical). Real data
  drift, not test drift.
- src/i18n/messages/zh-TW.json: providers.autoFetchModelsTooltip (added by
  #10603) used the mainland term 緩存 instead of the zh-TW glossary-canonical
  快取, tripping the i18n-glossary-consistency-check base-red.
- src/lib/oauth/providers/zed-hosted.ts: removed an unused default export
  (the named export already covers every consumer) — shaves one symbol off
  the check:dead-code ratchet (419 -> 418; baseline 415, 3 still outstanding).

Refs #9985.

---------

Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:09:43 -03:00
Diego Rodrigues de Sa e Souza
65e1960029 fix(usage): repair zero-reported input_tokens on non-trivial requests (#10705) (#10757)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 12:02:48 -03:00
Diego Rodrigues de Sa e Souza
4191e5dad2 fix(dashboard): /api/models must agree with /v1/models on synced coverage (#10615) (#10755)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 11:54:52 -03:00
Diego Rodrigues de Sa e Souza
6e809982e8 fix(dashboard): List Models card must not hardcode models={null} (#10553) (#10753)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 11:52:23 -03:00
Diego Rodrigues de Sa e Souza
12eef018cb fix(proxy): keep password-only proxy credentials (#10720) (#10752)
Co-authored-by: Markus Hartung <mail@hartmark.se>
2026-08-19 11:48:18 -03:00
Michael YC JO
b88cd6c109 fix(tests): drain two base-reds on release/v3.8.50 — auto/glm family pool and the ESLint gate (#10726)
* fix(tests): drain the auto/glm base-red left by the Cloudflare Playground backend

provider-family-combos asserted a fixed provider list for auto/glm and started
failing on release/v3.8.50 once the Cloudflare AI Playground no-auth backend
landed: its registry advertises zai-org/glm-5.2 and zai-org/glm-4.7-flash, so the
virtual combo legitimately spans it.

The test already documents the rule it is failing on — a no-auth backend that
genuinely serves a family model IS a member of the family pool — and carries that
justification for auggie, devin-cli-agentic and zcode. Add cloudflare-playground
to the expectation with the same kind of source-cited note.

* fix(tests): green the ESLint gate left red by two untracked any casts

lint:json --max-warnings 0 failed on release/v3.8.50 because the suppression
counts drifted behind the tree: cli-oauth-commands carried 20 no-explicit-any
violations against a registered 18 (#10491 added two Commander-mock casts) and
executor-gitlab carried 5 against a registered 4 (#10499 added one).

The GitLab test casts are fixable, so they are fixed rather than suppressed: all
five now read the translated payload through a declared GitLabResponseBody
instead of any, and the file leaves the suppression list entirely.

The CLI OAuth casts target bin/cli/commands/oauth.mjs, which ships no types, so
the Commander mock has nothing to cast to; that entry only gets its count
corrected to the 20 already in the tree.
2026-08-19 11:18:30 -03:00