Commit Graph

2844 Commits

Author SHA1 Message Date
diegosouzapw
cfc6be6a12 feat(home): remove Providers Overview card; rename API Manager → API Key Manager
- HomePageClient: remove tier coverage card (free/oauth/apikey breakdown)
- i18n: update apiManager label to "API Key Manager" in 13 locales (EN + placeholders)
2026-05-16 00:11:52 -03:00
diegosouzapw
da8218856b refactor(dashboard): reestruturação completa do sidebar — 9 seções, sub-grupos visuais, abas → páginas
- sidebarVisibility: novo tipo SidebarItemGroup para sub-grupos; SidebarSectionDefinition usa children[] (flat items + grupos); getSectionItems() helper; 9 seções (home, omni-proxy, analytics, monitoring, devtools, agentic-features, other-features, configuration, help); 8 sub-grupos (Compression Context, Tools, Integrations, Proxy, Costs Parameters, Audit, Batch); novos itens mitm-proxy e 1proxy
- Sidebar: OmniProxy pinada por default na primeira visita; home sem cabeçalho de seção; sub-grupos renderizados como separadores visuais (não colapsáveis); collapsed mode achata grupos corretamente
- Header: getSectionItems para lookup de hrefs; descrições para mitm-proxy, 1proxy
- Páginas convertidas (tabs → conteúdo direto): analytics, costs, audit, batch, logs, system/proxy
- Páginas com redirect: settings/page → /settings/general; settings/pricing → /costs/pricing
- McpAuditTab extraído para componente compartilhado (elimina duplicação audit/page + audit/mcp/page)
- Novas páginas: system/mitm-proxy e system/1proxy (wrappers das abas existentes)
- i18n: 17 novas chaves em 41 locales (sub-grupos, seções renomeadas, novos itens)
- AppearanceTab: usa getSectionItems para visibilidade do sidebar
2026-05-15 22:48:35 -03:00
diegosouzapw
a5f33017fd feat(dashboard): accordion sidebar + OmniProxy section + pin behavior
- Rename first section from "Routing" to "OmniProxy" with collapsible header
- Accordion behavior: opening a section closes all non-pinned sections
- Pin button (push_pin) on section headers — visible on hover, always visible when pinned
- Pinned sections stay open regardless of accordion toggle
- Both expanded + pinned state persisted to localStorage
- i18n: add omniProxySection key to all 41 locales
2026-05-15 20:26:45 -03:00
diegosouzapw
a045ddca56 feat(dashboard): tabs → pages, collapsible sidebar, narrower width, tooltips
- Sidebar: w-80 → w-[220px], 12 collapsible sections (default: routing open),
  localStorage persistence, auto-expand active section, styled JS tooltip on mini mode
- sidebarVisibility: restructure from 6 to 12 sections, add 22 new item IDs
- Header: add HEADER_DESCRIPTIONS for all 22 new routes
- i18n: add 23 sidebar + 20 header keys to all 41 locale files
- New pages (Proposal A — tabs become dedicated routes):
  /dashboard/mcp, /dashboard/a2a, /dashboard/api-endpoints
  /dashboard/analytics/{evals,search,utilization,combo-health,compression}
  /dashboard/costs/{budget,pricing}
  /dashboard/batch/files
  /dashboard/logs/{proxy,console,activity}
  /dashboard/audit/mcp
  /dashboard/settings/{general,appearance,ai,security,routing,resilience,advanced}
2026-05-15 19:53:02 -03:00
diegosouzapw
93526e3d9c refactor(dashboard): remove remaining redundant padding/max-width across all pages
Complete the width standardization pass — DashboardLayout provides p-4 sm:p-6 lg:p-10
and max-w-7xl mx-auto, so page-level containers must not add their own padding or width
constraints.

- analytics/loading, providers/loading, settings/loading: remove p-6 from loading skeletons
- providers/error, settings/error: remove p-6 from error boundary pages
- endpoint/ApiEndpointsTab: remove p-6 max-w-6xl mx-auto (loading + main return); collapse
  redundant wrapper div in loading state
- endpoint/components/A2ADashboard, MCPDashboard: remove p-6 max-w-7xl mx-auto (both states);
  collapse loading wrapper div to single element
- settings/pricing: remove max-w-6xl mx-auto p-6
- system/proxy: remove max-w-6xl mx-auto
2026-05-15 18:47:58 -03:00
diegosouzapw
b39d0d8861 refactor(dashboard): fix dark theme + two-column layout on agent-skills, standardize page widths
- agent-skills: replace all inline style={{ color: "var(--color-xxx, #fallback)" }} with
  Tailwind semantic classes (text-text-main, text-text-muted, bg-bg-subtle, border-border,
  text-primary, bg-primary/10, bg-emerald-500/10, bg-amber-500/10) — fixes dark mode
- agent-skills: full-width "How to use" card + two-column grid (API Skills | CLI Skills)
  on lg+ screens; remove internal p-6 and max-w-3xl (layout already provides padding/max-w)
- audit, webhooks: remove redundant p-6 + mx-auto max-w-7xl (DashboardLayout already wraps
  content in max-w-7xl with p-4 sm:p-6 lg:p-10)
- memory: remove extra p-6
- agents: remove p-6 + max-w-5xl mx-auto
- cloud-agents: remove p-6 + max-w-6xl mx-auto
- changelog: remove max-w-5xl mx-auto w-full
- health: remove outer p-6 + max-w-6xl mx-auto; strip redundant p-6 from loading/error states
- translator: remove p-4 sm:p-8 (layout provides padding)
- context/caveman, context/rtk, context/combos: remove mx-auto max-w-6xl
2026-05-15 18:31:24 -03:00
diegosouzapw
3975d2c10f feat(dashboard): complete header descriptions for all sidebar pages
- Add header descriptions for 13 remaining pages (agents, cloud-agents, memory,
  skills/omniSkills, agent-skills, translator, playground, search-tools, logs,
  audit, webhooks, health, proxy) across all 41 locale files
- Update HEADER_DESCRIPTIONS map in Header.tsx to cover all 30 sidebar pages
- Remove page-body title block from agent-skills page (cherry-picked from feat/v3.8.0-features)
2026-05-15 17:26:42 -03:00
diegosouzapw
58c2cfccd9 fix(skills): use useCopyToClipboard hook in AgentSkills for HTTP fallback 2026-05-15 17:23:50 -03:00
diegosouzapw
291c1ffaf8 feat(skills): add 5 CLI skills + split AgentSkills / OmniSkills pages
- Add skills/omniroute-cli/SKILL.md — CLI entry point (install, global flags, output formats, env vars)
- Add skills/omniroute-cli-admin/SKILL.md — server lifecycle, setup, doctor, backup, autostart, tunnels
- Add skills/omniroute-cli-providers/SKILL.md — provider connections, keys, OAuth, models, combos, quota
- Add skills/omniroute-cli-cloud/SKILL.md — Codex / Devin / Jules cloud agent task workflow
- Add skills/omniroute-cli-eval/SKILL.md — eval suites, run + watch, scorecard, CI integration
- Update agentSkills.ts: add category field (api | cli), add 5 new CLI skills (18 total)
- Create /dashboard/agent-skills page (AgentSkills) with API + CLI sections and copy-URL buttons
- Remove AI Skills tab from /dashboard/skills (OmniSkills) — now a separate page
- Add agent-skills to sidebar (CLI section) with i18n keys omniSkills + agentSkills
- Update skills/README.md and omniroute/SKILL.md index tables
2026-05-15 17:23:42 -03:00
diegosouzapw
68ca8bf1e9 refactor(dashboard): remove page-body headers, add topology multi-ring, icon+title header
- ProviderTopology: replace single-ring ellipse with multi-ring concentric layout (6 rings)
  - Providers sorted active → error → last-used → rest; compact node design (text-xs, 16px icon)
- Header: derive icon/title from SIDEBAR_SECTIONS auto-mapping, remove breadcrumbs logic
  - Add HEADER_DESCRIPTIONS map for all pages with known descriptions
  - Use sidebar i18n namespace for titles (covers all 42 locales)
- DashboardLayout: remove <Breadcrumbs /> component
- Add header descriptions for 9 new pages (costs, cache, limits, api-manager, batch,
  context-caveman/rtk/combos, changelog) across all 41 locale files
- Remove duplicate page-body title+description from 16 pages: costs, analytics, cache,
  cache/media, context/caveman/rtk/combos, changelog, agents, cloud-agents, skills,
  audit, translator, webhooks, memory, health — preserving action buttons in each
- Rename sidebar "Limits & Quotas" → "Quota Limits" (en.json)
- run-next.mjs: pre-read DATA_DIR from .env before bootstrap (zero-config dev start)
2026-05-15 17:20:48 -03:00
diegosouzapw
e9904f1394 docs(security): note CodeQL custom-sanitizer limitation as dismissal precedent
CodeQL js/stack-trace-exposure does not recognize sanitizers reached
through a custom helper indirection — flagging callsites like
open-sse/utils/error.ts::errorResponse and
open-sse/executors/cursor.ts::buildErrorResponse even though both route
through sanitizeErrorMessage().

Record the dismissal precedent (alerts #224 and #231, May 2026):
- Add a "Known CodeQL limitation" section in
  docs/security/ERROR_SANITIZATION.md
- Extend CLAUDE.md Hard Rule #14 with the precedent

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 14:13:36 -03:00
diegosouzapw
190e273d5b fix(security): rewrite sanitizeErrorMessage path matcher to be linear
The PATH_REGEX introduced in 1a39c31f used a greedy character class
([\w\-./\\]+) that can backtrack quadratically on inputs like
"///////..." — flagged by CodeQL js/polynomial-redos (#232).

Replace it with simple whitespace tokenization + a length-bounded
prefix-check helper. Same observable behaviour (paths replaced with
<path>), but linear time regardless of input shape. Adds a 4096-char
input cap as defence in depth.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 11:16:26 -03:00
diegosouzapw
f56485f3cf fix(security): close remaining CodeQL alerts + document mandatory patterns
Fixes the 4 fixable alerts opened in the recent scan and adds enforceable
guardrails so future development follows the same pattern.

Code fixes:
- src/mitm/cert/install.ts: pass certPath/certName/action via exec()'s env
  option instead of string-interpolating them into the bash script
  (CodeQL js/shell-command-injection-from-environment #225)
- scripts/docs/{gen-provider-reference,add-frontmatter,fix-internal-links}:
  escape backslash before other regex/markdown metacharacters
  (CodeQL js/incomplete-sanitization #227, #228, #229)

Documentation (mandatory patterns):
- docs/security/PUBLIC_CREDS.md — embedding public upstream OAuth/Firebase
  identifiers via resolvePublicCred(); never as string literals
- docs/security/ERROR_SANITIZATION.md — routing every error response through
  sanitizeErrorMessage()/buildErrorBody(); never raw err.stack/err.message
- CLAUDE.md: 4 new Hard Rules (#11-#14) + Security section + scenario notes
- AGENTS.md, CONTRIBUTING.md: cross-reference the two new docs
- SECURITY.md: extended Hard Security Rules with the new mandatory patterns
- docs/README.md: index entries pointing to the two new docs

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 11:13:07 -03:00
diegosouzapw
871f0520bb fix(security): mask public upstream creds + centralize error sanitization
Embed Gemini, Antigravity and Windsurf public OAuth/Firebase identifiers
(extracted from upstream CLI binaries) through a XOR-masked byte sequence
in open-sse/utils/publicCreds.ts instead of source literals, so pattern
scanners (GitHub Secret Scanning, Semgrep) stop raising false positives on
every release. decodePublicCred passes raw values through unchanged for
users who already have plaintext in their .env (no migration needed).

- New utils/publicCreds.ts with decode/encode + tests
- Replace 6 hardcoded Google client_id/secret in oauth.ts + providerRegistry
- Drop literals from .env.example (comment-only documentation)
- Sanitize error messages inside buildErrorBody so every caller (incl.
  createErrorResult) is covered; cursor.ts now reuses the shared helper
- Cover the new helpers with unit tests (publicCreds + error sanitization)

Resolves the open code-scanning js/stack-trace-exposure findings and the
secret-scanning Google API Key alert without breaking existing setups.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 10:38:13 -03:00
Diego Rodrigues de Sa e Souza
c6f5b394f8 Release v3.8.0 (#2111)
Release v3.8.0
2026-05-14 09:46:39 -03:00
diegosouzapw
c49d817a68 docs(changelog): add 18 missing PR entries and fix contributor credits
Deep audit of all 320 commits since v3.7.9 found:
- 18 merged PRs not documented in CHANGELOG (4 features, 10 bug fixes, 1 security, 2 chores, 1 debug improvement)
- 3 contributors entirely missing from credits table (@NomenAK with 12 PRs, @kang-heewon, @one-vs)
- 4 existing contributors with inaccurate PR counts (@oyi77 8→12, @ddarkr 2→3, @andrewmunsell 2→3, @nickwizard 2→3)

New entries added:
- feat: #2135 (1proxy settings), #2227 (antigravity project ID), #2238 (Z.AI Search), #2240 (CLI Suite)
- fix: #2217, #2218, #2219, #2221, #2222, #2223, #2224, #2231, #2233, #2236, #2242, #2243
- security: #2209 (stack trace exposure)
- chore: #2228, #2234

Total contributors updated from 50+ to 55+.
2026-05-14 09:41:28 -03:00
diegosouzapw
678dee2ede Merge PR #2240: feat: CLI Integration Suite for issue #2016
Adds 5 new CLI management commands (config, status, logs, update, provider),
3 API endpoints (/api/cli-tools/{detect,config,apply}), config generators
for 6 tools (Claude, Cline, Codex, Continue, KiloCode, OpenCode), zero-config
auto-routing via auto/ prefix, and @omniroute/opencode-provider npm package.

Fixes: merge conflict in RoutingTab.tsx, help text indentation, README conflicts.
Closes #2016

Co-authored-by: oyi77 <paijo@users.noreply.github.com>
2026-05-14 09:27:18 -03:00
diegosouzapw
da939ca2ba fix: resolve merge conflict in RoutingTab.tsx and fix help text indentation
- Resolve <<<<<<< HEAD conflict in RoutingTab.tsx by keeping the
  HEAD version with aria-disabled and pre-computed titleText
- Fix inconsistent indentation in CLI help text (providers commands
  and CLI Tools section)
2026-05-14 09:25:09 -03:00
diegosouzapw
6c976a6b68 fix(tests): align requiresReasoningReplay xiaomi-mimo tests with object signature
After cherry-picking PR #2231, the function signature changed from
positional (provider, model) to object ({ provider, model }). Fixes the
2 pre-existing tests that still used the old positional style.
2026-05-14 09:22:17 -03:00
kang-heewon
c2bf5c7db5 test(deepseek): fix cache key in translator replay tests to message:0 2026-05-14 09:21:17 -03:00
kang-heewon
4726dea901 fix(deepseek): use consistent messageIndex 0 for non-tool-call reasoning replay 2026-05-14 09:21:12 -03:00
kang-heewon
72dd7c9b49 fix(deepseek): pass requestId context to cache and widen sanitizer regex
- chatCore.ts: pass {requestId:skillRequestId,messageIndex:0} to cacheReasoningFromAssistantMessage
- responseSanitizer.ts: widen isDeepSeekV4Model regex to match all deepseek-v4 variants
2026-05-14 09:21:07 -03:00
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
diegosouzapw
fe9efd2191 chore(electron): align engines.node with root package.json (drop Node 20.x)
The root package.json was updated in 52f3285d to drop Node 20.x support
(http-proxy-middleware 4.x requirement). electron/package.json had no
engines field declared, leaving the desktop build implicitly permissive.

Adds the same constraint (>=22.22.2 <23 || >=24.0.0 <27) to keep the
electron workspace consistent with the root engine policy.

Refs: #2228

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 09:09:18 -03:00
diegosouzapw
52f3285dcd chore!: bump engines.node to drop Node 20.x support (hpm 4.x compat)
http-proxy-middleware 4.x (introduced via #2228) requires Node >=22.15.0.
Updated engines.node to >=22.22.2 <23 || >=24.0.0 <27 (drops 20.x).

BREAKING CHANGE: users on Node 20.x must upgrade to Node 22.22.2+ or 24+.

Refs: #2228

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 08:28:50 -03:00
Anton
ebed308fbb build(deps): regenerate package-lock.json to match package.json (#2228)
Integrated into release/v3.8.0 (http-proxy-middleware bumped to 4.x; engines.node updated in follow-up)
2026-05-14 08:23:33 -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
oyi77
2d601ea459 feat: CLI Integration Suite for issue #2016
- Add tool-detector.ts (6 CLI tools: claude, codex, opencode, cline, kilocode, continue)
- Add config-generator/ factory + 6 generators (JSON + YAML)
- Add doctor/checks.ts for CLI tool health checks
- Add log-streamer.ts for usage log streaming
- Add @omniroute/opencode-provider npm package
- Add 5 CLI commands: config, status, logs, update, provider
- Add 3 API routes: config, detect, apply
- Update bin/omniroute.mjs, bin/cli/index.mjs, package.json
- Update docs: SETUP_GUIDE.md, CLI-TOOLS.md
- All tests pass (4302/4326, 24 pre-existing failures unchanged)
2026-05-14 17:26:30 +07: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
nickwizard
ce746d4f5b Feat/antigravity project (#2227)
Integrated into release/v3.8.0 as bf83aa55 (i18n keys propagated)
2026-05-14 05:23:44 -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
diegosouzapw
30130d6c2c fix(model): narrow ModelAliasValue with typed check before string ops
The local-aliases-precedence path used `typeof aliases[parsed.model] === "string"`
to guard string-only operations, but TypeScript does not narrow the variable
`directTarget` from that index-expression test — the variable retained the union
type ModelAliasValue (string | object), so `indexOf`/`slice` were typed as
property accesses on the object branch and the strict-core typecheck failed.

Refactors to capture `directTarget` first and run `typeof directTarget === "string"`
on the variable, which TS does narrow. No runtime semantics change — local-aliases
tests still pass.
2026-05-14 00:24:08 -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
8c4d726c7b Merge upstream/registry-per-model-specs-refresh: registry per-model specs refresh (gpt-5.5 cap, kimi-coding context)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

# Conflicts:
#	open-sse/config/providerRegistry.ts
#	src/shared/constants/modelSpecs.ts
2026-05-13 22:27:20 -03:00
diegosouzapw
81928cccc5 Merge upstream/cliproxyapi-anthropic-shape-fixes: Anthropic shape + Capy strip + mcp rewrite
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

# Conflicts:
#	open-sse/executors/cliproxyapi.ts
#	tests/unit/cliproxyapi-executor.test.ts
2026-05-13 22:19:02 -03:00
diegosouzapw
14884568a9 Merge upstream/responses-background-degrade: responses background → synchronous degrade
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 22:15:57 -03:00
diegosouzapw
788f8e1794 Merge upstream/executors-sanitize-reasoning-effort: sanitize reasoning_effort for non-supporting providers
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

# Conflicts:
#	tests/unit/base-executor-sanitize-effort.test.ts
2026-05-13 22:15:19 -03:00
diegosouzapw
6a0b19c535 Merge upstream/translator-claude-thinking-placeholder: thinking placeholder for Claude-shape upstreams
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

# Conflicts:
#	open-sse/translator/helpers/claudeHelper.ts
#	tests/unit/translator-claude-helper-thinking.test.ts
2026-05-13 22:13:13 -03:00