Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
2f517a8
chore(release): open v3.8.37 development cycle
diegosouzapw Jun 25, 2026
138f84b
chore(ci): harden release flow — ratchet decoupling, fast-path drift …
diegosouzapw Jun 25, 2026
d773bf7
fix(auth): only trust forwarding headers from loopback TCP peers (#4689)
diegosouzapw Jun 26, 2026
a2ce88c
fix(codex): treat OAuth 401 as unrecoverable refresh failure (#4686)
diegosouzapw Jun 26, 2026
fd8a52e
fix(translator): preserve reasoning_effort for non-Copilot Responses …
diegosouzapw Jun 26, 2026
33ac3f6
fix(translator): coerce tool descriptions to strings in OpenAI normal…
diegosouzapw Jun 26, 2026
5b1bb72
feat(sse): x-omniroute-strip-reasoning header to drop reasoning_conte…
diegosouzapw Jun 26, 2026
dcf8af0
fix(combo): flatten Anthropic tool messages + tool history to prevent…
diegosouzapw Jun 26, 2026
5f24db1
feat(headroom): proxy lifecycle management + dashboard UI (Docker sid…
diegosouzapw Jun 26, 2026
4aee3c4
feat(cli): multi-model support for Factory Droid CLI (#4682)
diegosouzapw Jun 26, 2026
9f83aa9
fix(providers): require Default Model in compatible-provider API-key …
diegosouzapw Jun 26, 2026
db77db0
fix(dashboard): stop double-masking already-masked API key in list (E…
diegosouzapw Jun 26, 2026
f94da9b
chore(quality): rebaseline file-size for rc17 PR batch drift
diegosouzapw Jun 26, 2026
deb0b76
docs(env): document HEADROOM_URL in .env.example + ENVIRONMENT.md
diegosouzapw Jun 26, 2026
db7b67b
fix(sse): stream writer mock abort() returns a Promise (#4788)
diegosouzapw Jun 26, 2026
cc567af
fix(cli): fall back to default data dir when DATA_DIR is not writable…
diegosouzapw Jun 26, 2026
a520ccc
fix(oauth): verify Cursor installation on Linux before auto-import (#…
diegosouzapw Jun 26, 2026
dbca0e0
fix(sse): track Ollama streaming usage from raw NDJSON chunks (#4754)
diegosouzapw Jun 26, 2026
5403cdb
fix(sse): strip enumDescriptions from antigravity tool schema (#4740)
diegosouzapw Jun 26, 2026
a96df96
fix(sse): include low-level cause details in formatProviderError (#4741)
diegosouzapw Jun 26, 2026
2c8921f
fix(translator): strip x-anthropic-billing-header in claude-to-openai…
diegosouzapw Jun 26, 2026
0d90299
fix(sse): gate Kiro image attachments behind a Claude-capability chec…
diegosouzapw Jun 26, 2026
27133a7
fix(sse): read Antigravity usage from the response.usageMetadata enve…
diegosouzapw Jun 26, 2026
0f30607
fix(api): fall back to existing access token for any OAuth provider o…
diegosouzapw Jun 26, 2026
b72a4d2
fix(cli): verify launchd registration + skip self-SIGTERM in macOS au…
diegosouzapw Jun 26, 2026
ab7c181
fix(executors): anthropic-compatible-* gateways get Bearer alongside …
diegosouzapw Jun 26, 2026
4259b10
fix(sse): json_schema fallback for OpenAI-compatible providers (#4766)
diegosouzapw Jun 26, 2026
b9fdcfc
fix(sse): use workos auth token shape for cline (#4787)
diegosouzapw Jun 26, 2026
549ea42
feat(sse): parse Gemini CLI 429 retryDelay from structured RetryInfo …
diegosouzapw Jun 26, 2026
75f8761
fix(sse): finalize tool_calls finish_reason on early stream end in Op…
diegosouzapw Jun 26, 2026
7edf92a
test(sse): golden-lock provider.ts translate-path across all provider…
diegosouzapw Jun 26, 2026
d5ffdf2
chore(quality): rebaseline file-size for rc17 leva2 PR batch drift
diegosouzapw Jun 26, 2026
ba6f2e0
fix(dashboard): align Engine Combos editor engines with API schema (#…
diegosouzapw Jun 26, 2026
e5d98ed
fix(sse): filter nameless hosted tools when converting Responses API …
diegosouzapw Jun 26, 2026
3c47460
fix(dashboard): keep desktop sidebar visible via explicit CSS class (…
diegosouzapw Jun 26, 2026
1608d70
fix(sse): strip enumDescriptions from Antigravity tool schemas (#4813)
diegosouzapw Jun 26, 2026
0ad8f8b
fix(dashboard): resolve passthrough model aliases by providerId in Mo…
diegosouzapw Jun 26, 2026
ad5dc9f
fix(oauth): allow per-connection refresh lead-time override via provi…
diegosouzapw Jun 26, 2026
7ff7af5
fix(sse): strip X-Stainless-* headers and normalize SDK User-Agent fo…
diegosouzapw Jun 26, 2026
c4e5d58
fix(sse): strip Gemini built-in tools when functionDeclarations prese…
diegosouzapw Jun 26, 2026
91d2912
fix(api): surface a Docker-localhost hint on provider-node validation…
diegosouzapw Jun 26, 2026
12a621c
fix(sse): resolve bare model names to connection defaultModel before …
diegosouzapw Jun 26, 2026
604e004
fix(build): trace-include sql.js sql-wasm.wasm in standalone bundle (…
diegosouzapw Jun 26, 2026
7d2501b
fix(sse): strip Composer <|final|> sentinel markers leaking after Com…
diegosouzapw Jun 26, 2026
74948f0
fix(config): sync full SiliconFlow model list into registry (#4844)
diegosouzapw Jun 26, 2026
9d673e5
fix(sse): close reasoning before message content in Responses stream …
diegosouzapw Jun 26, 2026
7193b5f
fix(sse): reject unsupported Kiro [1m] context suffix (#4816)
diegosouzapw Jun 26, 2026
86e487b
fix(db): validate HuggingFace tokens via whoami-v2 auth probe (#4819)
diegosouzapw Jun 26, 2026
885134b
fix(sse): make anthropic-version default-guard case-insensitive (#4823)
diegosouzapw Jun 26, 2026
6d27a86
fix(sse): sanitize Kiro tool schemas to avoid 400 "Improperly formed …
diegosouzapw Jun 26, 2026
b6917e8
feat(sse): add GPT-4 to the GitHub Copilot provider (#4798)
diegosouzapw Jun 26, 2026
527ee1a
feat(sse): add GPT-4o mini to GitHub Copilot provider (#4797)
diegosouzapw Jun 26, 2026
5a9fba8
feat(api): add MiniMax-M3 pricing row (#4814)
diegosouzapw Jun 26, 2026
f4a9e65
fix(cli): save runtime deps with --save-exact so a sibling install ca…
diegosouzapw Jun 26, 2026
4f8a986
fix(sse): preserve required fields in antigravity tool schemas (#4843)
diegosouzapw Jun 26, 2026
331a7c2
chore(quality): rebaseline file-size for rc17b leva3 PR batch drift
diegosouzapw Jun 26, 2026
0c77f79
fix(sse): strip reasoning blobs from agentic context to prevent O(n^2…
diegosouzapw Jun 26, 2026
ac55b20
fix(sse): unwrap Qoder HTTP 200 SSE error envelope so fallback can tr…
diegosouzapw Jun 26, 2026
8a47bf2
fix(sse): strip temperature for Claude models with extended thinking …
diegosouzapw Jun 26, 2026
41b761b
fix(sse): emit valid concatenable kiro tool_calls.arguments deltas (#…
diegosouzapw Jun 26, 2026
f119062
feat(sse): add toggleable tool-source diagnostics (#4856)
diegosouzapw Jun 26, 2026
d58290d
fix(sse): redact api key from the AUTH debug log in the chat handler …
diegosouzapw Jun 26, 2026
a46caac
fix(sse): forward AI SDK image parts in Responses translator (#4859)
diegosouzapw Jun 26, 2026
b90b52a
fix(sse): resolve custom combos by id and case-insensitive name (#444…
diegosouzapw Jun 26, 2026
c2f7ef6
fix(sse): exclude WS bridge controller-closed error from provider bre…
diegosouzapw Jun 26, 2026
cf3230f
feat(providers): add xAI Grok inbound translators and thinking patche…
diegosouzapw Jun 26, 2026
5c75c95
feat(embeddings): add dimensions override field to embedding combos (…
diegosouzapw Jun 26, 2026
850e617
feat(oauth): Codex bulk-import endpoint — POST /api/oauth/codex/impor…
diegosouzapw Jun 26, 2026
20412f0
fix(antigravity): retry transient upstream failures (#4941)
diegosouzapw Jun 26, 2026
2ddf714
fix(sse): surface malformed HTTP-200 upstream responses (#4942)
diegosouzapw Jun 26, 2026
25bc570
fix(sse): normalize Codex custom tools (apply_patch) to { input: stri…
diegosouzapw Jun 26, 2026
e02ebca
fix(sse): dense, deterministic output ordering in Responses API respo…
diegosouzapw Jun 26, 2026
ddee9a2
feat(sse): auto-promote successful combo model to position #1 (#4852)
diegosouzapw Jun 26, 2026
4a0ee5d
feat(providers): add Pioneer AI (Fastino Labs) provider (#4909)
diegosouzapw Jun 26, 2026
66222e5
add DGrid AI gateway provider (#4931)
ethanclarkeio Jun 26, 2026
542089c
chore(quality): rebaseline file-size for rc17b leva4 PR batch drift
diegosouzapw Jun 26, 2026
2e5a0e0
docs(routing): sync combo strategy docs for Fusion (17 strategies) (#…
diegosouzapw Jun 26, 2026
7490097
fix(oauth): classify /api/oauth/cursor/auto-import as local-only (rou…
diegosouzapw Jun 26, 2026
cb49f09
chore(release): v3.8.37 — 2026-06-26
diegosouzapw Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,12 @@ NEXT_PUBLIC_CLOUD_URL=
#OMNIROUTE_KIE_CALLBACK_URL=
#OMNIROUTE_PUBLIC_URL=

# Headroom token-saver proxy URL. The dashboard lifecycle (api/headroom/*) spawns
# a local headroom-ai CLI on loopback by default; override only to point at an
# external Docker sidecar proxy. Defaults to http://localhost:8787 when unset.
# Used by: src/lib/headroom/detect.ts.
#HEADROOM_URL=http://localhost:8787

# Upstream quota endpoints used by the Usage page. Override only for
# debugging or when routing through a corporate mirror. Used by:
# open-sse/services/usage.ts.
Expand Down
21 changes: 18 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,15 @@ jobs:
name: Quality Ratchet
runs-on: ubuntu-latest
needs: test-coverage
if: ${{ !cancelled() && needs.test-coverage.result == 'success' }}
# Run even when test-coverage was SKIPPED/FAILED (e.g. a single flaky Coverage
# Shard breaks the shard→coverage→ratchet chain). The DETERMINISTIC ratchets
# (eslint / complexity / cognitive-complexity / duplication / codeql) do NOT need
# the coverage artifact and MUST still run so cycle drift is measured on the
# release PR — otherwise a flake silently skips the whole gate (incident: v3.8.36
# release PR #4854, where the drift cascade only surfaced post-merge in #5029).
# The coverage.* metrics degrade gracefully: the download is continue-on-error and
# the ratchet runs with --allow-missing, so absent coverage is skipped, not failed.
if: ${{ !cancelled() }}
# security-events: read lets the CodeQL ratchet read open code-scanning alerts
# via `gh api .../code-scanning/alerts`. contents: read keeps checkout working.
permissions:
Expand All @@ -156,16 +164,23 @@ jobs:
cache: npm
- uses: ./.github/actions/npm-ci-retry
# Coverage mergeada (coverage-summary.json) p/ o ratchet de cobertura.
# continue-on-error: o artifact pode não existir se a job test-coverage foi
# SKIPPED (shard flaky). Nesse caso collect-metrics pula coverage.* (ausente sem
# erro) e o ratchet roda com --allow-missing — as métricas determinísticas
# (eslint/complexity/cognitive) seguem BLOQUEANTES.
- uses: actions/download-artifact@v8
continue-on-error: true
with:
name: coverage-report
path: coverage/
- run: npm run quality:collect
# Catraca: falha se qualquer métrica regredir vs quality-baseline.json (commitado).
# Hoje: contagem de warnings do ESLint. Fase 4 estende com cobertura (lida do
# coverage mergeado). Tamanho de arquivo e duplicação têm gates dedicados.
# --allow-missing: pula métricas do baseline ausentes do collect (coverage.* quando
# o artifact não veio) em vez de falhar — mantém os gates determinísticos ativos.
- name: Ratchet check
run: node scripts/quality/check-quality-ratchet.mjs --summary .artifacts/quality-ratchet.md
run: node scripts/quality/check-quality-ratchet.mjs --allow-missing --summary .artifacts/quality-ratchet.md
# Fase 6A.5: require-tighten — BLOQUEANTE (promovido de advisory no fim do ciclo
# v3.8.27). Falha quando uma métrica MELHOROU sem o baseline ter sido apertado no
# mesmo PR (força capturar ganhos permanentes). As métricas coverage.* carregam
Expand All @@ -174,7 +189,7 @@ jobs:
# mergeada == baseline (ver a nota _require_tighten_flip_blocking em
# config/quality/quality-baseline.json).
- name: Require-tighten (blocking)
run: node scripts/quality/check-quality-ratchet.mjs --require-tighten
run: node scripts/quality/check-quality-ratchet.mjs --allow-missing --require-tighten
# Catraca de duplicação (jscpd@4 sobre src+open-sse). Roda neste job (paralelo)
# para não pesar no caminho crítico do lint.
- name: Duplication ratchet
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,18 @@ jobs:
- run: npm run check:test-discovery
- run: npm run check:test-runner-api
- run: npm run check:any-budget:t11
# Build-scope guard: fails if worktrees/cruft leak into the tsconfig include
# scope (would OOM `next build`). Instant. See incident 2026-06-25 / #5031.
- run: npm run check:build-scope
# Pack-policy (unexpected-files allowlist) WITHOUT a build — catches a stray file
# leaking into the npm tarball (v3.8.36: 6 ops bin/*.sh) per-PR instead of only on
# the release PR's heavy Package Artifact job.
- run: npm run check:pack-policy
# Complexity + cognitive-complexity ratchets on the fast-path (PR→release) so
# cycle drift is rebaselined PER-PR instead of cascading onto the release PR's
# Quality Ratchet (v3.8.36: +30 complexity / +15 cognitive surfaced only post-merge).
- run: npm run check:complexity
- run: npm run check:cognitive-complexity
- name: Typecheck (core)
run: npm run typecheck:core
# TIA: build the impact map at runtime (gitignored, ~21MB) and run only the
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,8 @@ typescript

# Superpowers plans/specs (internal tooling, not project code)
docs/superpowers/
# Superpowers visual-companion brainstorm mockups (ephemeral)
.superpowers/

# TIA test-impact map — generated at runtime in CI (build-test-impact-map.mjs), never committed (~21MB)
config/quality/test-impact-map.json
Expand Down
Loading
Loading