decolua
a6a41dfb3c
Merge remote-tracking branch 'upstream/master'
...
# Conflicts:
# .gitignore
# open-sse/handlers/chatCore.js
2026-07-16 11:59:46 +07:00
decolua
a077ee85bd
gitignore
2026-07-16 11:16:57 +07:00
decolua
eceac9d7ae
gitignore
2026-07-15 16:40:41 +07:00
decolua
9845a1702f
# v0.5.30 (2026-07-10)
...
## Features
- **Perplexity**: add Agent API provider (#2492 )
- **Grok CLI**: add Grok CLI / Grok Build provider with OAuth device-code flow (#2502 )
- **Featherless**: add OpenAI-compatible provider presets
- **SearXNG**: configure endpoint via SEARXNG_URL env (#2499 )
- **Providers**: add max thinking level for gpt-5.6-sol (#2500 )
- **Headroom**: add extras detection and install UI (#2403 )
- **Headroom**: activate/uninstall extras + fix interpreter detection
- **PXPipe**: PXPIPE token saver — multimodal prompt compression (#2465 )
- **Proxy-Pools**: auto-rotate strategy for no-auth providers (#2409 )
## Fixes
- **Cloudflare-AI**: support accountId in bulk key import (#2449 )
- **DB**: backup on schema change, MCP child cleanup, codex models, usage providers OOM
- **Codex**: avoid bare-email OAuth dedup (#2477 )
- **CLI**: allow staged app bundle builds (#2479 )
- **Headroom**: compress Kiro conversation state (#2488 )
- **Gemini-CLI**: raise output floor for thinking and add validated toolConfig (#2486 )
- **GitHub**: label Copilot profiles by account identity (#2498 )
- **OpenAI-to-Claude**: unwrap bare {function:{…}} tools without parent type (#2473 )
- **Translator**: clamp thinking effort max->xhigh for OpenAI format (#2466 )
- **RTK/find**: detect and group Windows backslash-style find output (#2448 )
- **Codex**: handle fast tier and capacity SSE (#2452 )
- **Volcengine-ark**: clamp Kimi max_tokens to 32768 endpoint cap
- **Antigravity**: align provider fingerprint with IDE Desktop 2.1.1 (#2389 )
- **Pricing**: update Claude/Codex model rates and add new models
## Improvements
- **i18n(zh-CN)**: complete Chinese translations for all UI strings (#2436 )
- **API**: caching for tunnel and version status endpoints
- **Perf**: faster dev startup and lighter bundle
2026-07-10 18:12:07 +07:00
decolua and Cursor
a625ea9fd8
refactor(log): unify request lifecycle logging with session-colored tags
...
Collapse scattered per-request console lines (request/routing/auth/pending/
usage/stream-usage/stream) into 3 correlated lines: request, transform,
done. Add stable per-session color tag so concurrent request lines are
easy to follow, surface thinking intent, always-on full error logging
for debug, re-enable warn level, and uppercase keyword labels. Also fix
usage overview cards wrapping (5 cards -> grid-cols-5).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-10 18:01:20 +07:00
decolua
b61c50cbb7
# v0.5.29 (2026-07-10)
...
## Features
- **Perplexity**: add Agent API provider (#2492 )
- **Grok CLI**: add Grok CLI / Grok Build provider with OAuth device-code flow (#2502 )
- **Featherless**: add OpenAI-compatible provider presets
- **SearXNG**: configure endpoint via SEARXNG_URL env (#2499 )
- **Providers**: add max thinking level for gpt-5.6-sol (#2500 )
- **Headroom**: add extras detection and install UI (#2403 )
- **Headroom**: activate/uninstall extras + fix interpreter detection
- **PXPipe**: PXPIPE token saver — multimodal prompt compression (#2465 )
- **Proxy-Pools**: auto-rotate strategy for no-auth providers (#2409 )
## Fixes
- **Cloudflare-AI**: support accountId in bulk key import (#2449 )
- **DB**: backup on schema change, MCP child cleanup, codex models, usage providers OOM
- **Codex**: avoid bare-email OAuth dedup (#2477 )
- **CLI**: allow staged app bundle builds (#2479 )
- **Headroom**: compress Kiro conversation state (#2488 )
- **Gemini-CLI**: raise output floor for thinking and add validated toolConfig (#2486 )
- **GitHub**: label Copilot profiles by account identity (#2498 )
- **OpenAI-to-Claude**: unwrap bare {function:{…}} tools without parent type (#2473 )
- **Translator**: clamp thinking effort max->xhigh for OpenAI format (#2466 )
- **RTK/find**: detect and group Windows backslash-style find output (#2448 )
- **Codex**: handle fast tier and capacity SSE (#2452 )
- **Volcengine-ark**: clamp Kimi max_tokens to 32768 endpoint cap
- **Antigravity**: align provider fingerprint with IDE Desktop 2.1.1 (#2389 )
- **Pricing**: update Claude/Codex model rates and add new models
## Improvements
- **i18n(zh-CN)**: complete Chinese translations for all UI strings (#2436 )
- **API**: caching for tunnel and version status endpoints
- **Perf**: faster dev startup and lighter bundle
2026-07-10 17:51:48 +07:00
decolua
baafc74c1f
Bump version
2026-07-10 17:48:53 +07:00
decolua
bb314118f2
Bump version
2026-07-10 17:38:40 +07:00
decolua
2d515c8abc
# v0.5.28 (2026-07-10)
...
## Features
- **Perplexity**: add Agent API provider (#2492 )
- **Grok CLI**: add Grok CLI / Grok Build provider with OAuth device-code flow (#2502 )
- **Featherless**: add OpenAI-compatible provider presets
- **SearXNG**: configure endpoint via SEARXNG_URL env (#2499 )
- **Providers**: add max thinking level for gpt-5.6-sol (#2500 )
- **Headroom**: add extras detection and install UI (#2403 )
- **Headroom**: activate/uninstall extras + fix interpreter detection
- **PXPipe**: PXPIPE token saver — multimodal prompt compression (#2465 )
- **Proxy-Pools**: auto-rotate strategy for no-auth providers (#2409 )
## Fixes
- **Cloudflare-AI**: support accountId in bulk key import (#2449 )
- **DB**: backup on schema change, MCP child cleanup, codex models, usage providers OOM
- **Codex**: avoid bare-email OAuth dedup (#2477 )
- **CLI**: allow staged app bundle builds (#2479 )
- **Headroom**: compress Kiro conversation state (#2488 )
- **Gemini-CLI**: raise output floor for thinking and add validated toolConfig (#2486 )
- **GitHub**: label Copilot profiles by account identity (#2498 )
- **OpenAI-to-Claude**: unwrap bare {function:{…}} tools without parent type (#2473 )
- **Translator**: clamp thinking effort max->xhigh for OpenAI format (#2466 )
- **RTK/find**: detect and group Windows backslash-style find output (#2448 )
- **Codex**: handle fast tier and capacity SSE (#2452 )
- **Volcengine-ark**: clamp Kimi max_tokens to 32768 endpoint cap
- **Antigravity**: align provider fingerprint with IDE Desktop 2.1.1 (#2389 )
- **Pricing**: update Claude/Codex model rates and add new models
## Improvements
- **i18n(zh-CN)**: complete Chinese translations for all UI strings (#2436 )
- **API**: caching for tunnel and version status endpoints
- **Perf**: faster dev startup and lighter bundle
2026-07-10 17:36:21 +07:00
decolua
74d5fedf79
feat(headroom): activate/uninstall extras + fix interpreter detection
...
- find interpreter next to headroom binary so extras/version read correctly
- add on/off toggle to activate [code]/[ml] via proxy restart
- add uninstall action + live install log progress + ~1GB confirm modal
2026-07-10 17:32:45 +07:00
decolua and Cursor
90df008f0c
chore(release): v0.5.25
...
Update CHANGELOG, bump version, trim usage overview cards.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-10 16:04:37 +07:00
decolua and Cursor
d2599ebf17
fix(pricing): update Claude/Codex model rates and add new models
...
Add claude-fable-5, gpt-5.6 family; correct gpt-5/5.1/5.2/5.3-codex rates to official pricing.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-10 16:02:18 +07:00
decolua and Cursor
b25e10160d
fix: DB backup on schema change, MCP child cleanup, codex models, usage providers OOM
...
- Backup DB only on real SCHEMA_VERSION change, not every app version bump
- Kill idle MCP stdio bridge children to prevent orphan process leaks
- Add getDistinctProviders to avoid loading every row JSON blob (OOM fix)
- Update codex model list (gpt-5.6 sol/terra/luna, drop 5.3 codex variants)
- Reorder Claude default models (fable first)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-10 13:08:58 +07:00
decolua and Cursor
0270f6ea70
perf: faster dev startup and lighter bundle
...
- Switch dev default to Turbopack (5-14x faster compile); keep webpack as dev:webpack
- Tailwind v4 source() base so JIT scans identically under both bundlers
- Lazy-load @xyflow/react via next/dynamic to keep it out of the shared bundle
- optimizePackageImports for heavy barrel imports (xyflow, dnd-kit, material-symbols, marked)
- Replace blind setTimeout waits with TCP health-check (waitServerReady)
- Run checkForUpdate in parallel instead of blocking server spawn
- Background MITM/tunnel/cloudflared kills off the critical path
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-10 13:08:02 +07:00
decolua
a4c5fa4e14
refactor(api): implement caching for tunnel and version status endpoints
2026-07-09 15:08:30 +07:00
decolua
b10b807063
# v0.5.20 (2026-07-07)
...
## Features
- **Thinking**: per-model thinking level picker on provider page — appends `(level)` suffix to copied model names for forced reasoning effort across all formats (openai, claude, gemini, deepseek, kimi, qwen, zai, minimax, hunyuan, step)
- **RTK**: add JS-native git-log filter (#2423 )
- **Caveman**: add targeted upstream-aligned style rules (#2424 )
- **i18n**: add Farsi (fa) language support (#2385 )
## Fixes
- **Thinking**: strip `(level)` suffix from upstream `body.model` so providers no longer reject requests
- **Translator**: preserve developer instructions in openai-responses conversion (#2434 )
- **count_tokens**: count structured Anthropic blocks (#2419 )
- **Volcengine-ark**: clamp GLM-5 max_tokens to model output ceiling (#2428 )
- **Kimi**: normalize reasoning_effort to backend enum (#2427 )
- **Claude**: reconcile max_tokens vs thinking budget and lift per-model ceiling (#2381 )
- **Kiro**: deliver system prompt natively, add Opus 4.5/4.7/4.8, tolerate dash version ids (#2366 )
- **Headroom**: proxy dashboard through app (#2372 )
- **MITM**: recover from stale lock file on server start
2026-07-07 16:29:11 +07:00
decolua and Cursor
bf7da67859
docs(readme): swap in Vietnamese tutorial video; chore(pricing): minor update
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-07 11:44:30 +07:00
decolua and Cursor
da0149de97
fix(mitm): recover from stale lock file on server start
...
Detect dead PID in lock file and reclaim it instead of failing, and drop unused fs dependency.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-07 11:44:20 +07:00
decolua
7f436e2792
# v0.5.18 (2026-07-03)
...
## Features
- **Usage**: track cached tokens + correct input/output/cache cost (#2209 ) — hodtien
- **Codex**: show reset credit expiry details (#2290 ) — Rafli Ahmad Zulfikar
- **NVIDIA**: add new models and capabilities — decolua
- **ClinePass**: add provider support — sternelee
## Fixes
- **Usage**: dedupe streaming request-details log entries — Qin Li
- **Claude**: drop foreign thinking signatures in passthrough — decolua
- Prevent non-SSE stream pipe crash and cross-IdP account overwrites (#2244 ) — KunN-21
- **Kiro**: route IdC auth to regional CodeWhisperer surface (#2297 ) — Volodymyr Saakian
- **Kiro**: add Claude Sonnet 5 model support (#2264 ) — Edison42
- **Xiaomi-tokenplan**: region selector, key validation, multi-connection (#2251 ) — MiQieR
- **Translator**: strict Anthropic content block compliance (#2225 ) — Sahrul Ramadhan Hardiansyah
- **Kimchi**: strip reasoning_content echo to bound multi-turn input tokens — KunN-21
- **Kimchi**: bump User-Agent to kimchi/0.1.40 (#2256 ) — Ansh7473
- **Codebuddy-cn**: strip empty tool_calls arrays to preserve reasoning — zmf
- **Antigravity**: preserve Claude tool delta index (#2223 ) — Sutarto Jordan Chrisfivo
- **MITM**: generate root CA on server startup (#2228 ) — Sutarto Jordan Chrisfivo
2026-07-03 15:37:17 +07:00
decolua and Cursor
cd557a2552
fix(claude): drop foreign thinking signatures in passthrough
...
Combo mixes models, so non-Claude thinking signatures leak into
conversation history. Native passthrough forwarded them verbatim and
Anthropic rejected the request. Validate signatures and drop invalid
thinking blocks, re-inserting a placeholder when tool_use requires one.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-03 15:06:19 +07:00
decolua
ced51ed62f
feat(nvidia): add new models and capabilities for NVIDIA provider
...
- Updated capabilities for NVIDIA models to enforce OpenAI-compatible reasoning formats.
- Added new models: MiniMax M3, GLM 5.2, DeepSeek V4 Pro, DeepSeek V4 Flash, Kimi K2.6, and Nemotron 3 Ultra to the NVIDIA registry.
This enhances the provider's functionality and aligns with OpenAI standards.
2026-07-03 12:15:58 +07:00
decolua
0b3c794075
# v0.5.15 (2026-06-29)
...
## Features
- Add Kimchi OAuth provider — Nant361
- Refine Qwen vision/video + thinking model patterns — decolua
- Opt-in Codex auto-ping quota keep-alive — Emirhan
## Fixes
- **Responses**: handle response.done terminal events (#2142 ) — rifuki
- **Headroom**: skip unsafe responses tool history (#2132 ) — Sutarto Jordan Chrisfivo
- **Translator**: map mid-conversation system message to user (claude→openai) — decolua
- **Gemini**: normalize contents to prevent 400 invalid_argument (#2192 ) — warelik
- **Gemini**: backfill thoughtSignature + suppress stream done sentinel — WARELIK
- **Alicode**: preserve cache_control for DashScope providers (#2069 ) — Rex
- **Antigravity**: strip deprecated/readOnly/writeOnly from tool schemas — iletai, Yudhistira-Official
- **CodeBuddy CN**: show bonus packs as one-time, not monthly-replenishing — whale9820
- **Kiro**: strip leaked <thinking> tags from content stream (#2158 ) — hamsa0x7
- **Tray**: make Windows context menu DPI-aware — Emirhan
- **Kilocode**: expose full gateway catalog in combo model picker — jellylarper
- **OpenCode**: fix Go GLM — decolua
2026-06-29 16:23:33 +07:00
decolua and Cursor
749c2e3f9c
fix(translator): map mid-conversation system message to user in claude-to-openai
...
Claude Code chèn role:system cuối messages[], trước đây bị map thành assistant
khiến hội thoại không kết thúc bằng user → provider OpenAI-compat (LiteLLM)
dịch ngược Anthropic trả 400 "assistant message prefill". Map system -> user
và wrap <system-reminder> để giữ ngữ nghĩa instruction.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-29 15:53:26 +07:00
decolua and Cursor
7fa2e7f029
feat(capabilities): refine Qwen vision/video and thinking model patterns
...
Add qwen omni (audio/video input), qwen3.5/3.6/3.7 (native vision/video),
and mark qwen coder & max as text-only reasoning models.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-29 15:51:56 +07:00
decolua
526235872a
Fix OpenCode Go GLM
2026-06-29 15:00:03 +07:00
decolua
cce47dd809
# v0.5.12 (2026-06-26)
...
## Features
- Add token-saver dashboard page — decolua
- Add bulk delete for provider connections — teddytkz
- Resolve GitHub Copilot model catalog from upstream — caiqinzhou
- Add Venice AI provider — Brokenc0de
- Add Kiro external_idp import for Microsoft SSO (CLIProxyAPI) — Stevanus Pangau
- Overhaul Blackbox provider catalog + WebUI test support — suryacagur
## Fixes
- Provider thinking compatibility (DeepSeek/Gemini) — Mink Nguyen
- Stop double-counting streaming usage at source — decolua
- Usage logging dedupe to reduce stats churn — Mink Nguyen
- Prevent non-JSON SSE lines / duplicate [DONE] from breaking clients (PR #2046 ) — qianze
- Resolve Gemini TTS models from catalog — nguyenha935
- Support Kiro IDC (organization) token import — quanturbo
- Preserve forced streaming for JSON clients (#2031 ) — Joseph Yaksich
- Preserve Responses text format (Codex) — tenglong
- Support Gemini native TTS generateContent endpoint — nguyenha935
- Add missing zh-CN endpoint key label (i18n) — weimaozhen
- CodeBuddy: only send reasoning params when client requests reasoning (#2071 ) — Rex
- Show custom provider models in combo picker — Sapto
- Docker: add docker-compose.yml with headroom enabled by default — nitsuahlabs
- Clarify token diagnostics vs provider billing (headroom, #1998 ) — Sutarto Jordan Chrisfivo
- Translate openai-responses input through OpenAI for compression (#1998 ) — Ankit
- Kiro: report 1M context window for claude-opus-4.8 — EdisonPVE
- Avoid stale redirects after auth changes (#2100 ) — Emirhan
- Mark Claude Opus 4.7 (dashed id) as 1M context — Brokenc0de
- Preserve reasoning effort through Codex translations — ntdung6868
- Token-saver: full width card layout — decolua
- Antigravity: retry transient upstream failures — Sutarto Jordan Chrisfivo
- Param-support: handle strip rules without match/drop (#1960 ) — Joseph Yaksich
- Translator: resolve custom provider prefix in debug endpoint (#1083 ) — hamsa0x7
2026-06-26 18:05:07 +07:00
decolua and Cursor
2deacf69b1
fix(token-saver): full width card layout
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-26 17:16:27 +07:00
decolua and Cursor
8ac631d615
fix(ssrf): block IPv6-mapped IPv4 addresses (GHSA-hj98-rc6w-m8cw)
...
isBlockedIpv6() did not normalize ::ffff:<ipv4>, allowing the SSRF
filter to be bypassed. Extract and validate via isBlockedIpv4().
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-26 12:14:30 +07:00
decolua and Cursor
f46811c75e
fix(gemini): validate native model id to block path traversal
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-26 11:01:24 +07:00
decolua and Cursor
ec096d2add
fix(usage): stop double-counting streaming usage at source
...
logUsage now only logs to console; DB write removed. Streaming usage is
recorded once via saveUsageStats (onStreamComplete), eliminating duplicate
usageHistory rows that inflated dashboard totals.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-26 10:22:10 +07:00
decolua and Cursor
cb65a45e1f
feat: add token-saver dashboard page
...
- extract token saver into its own route /dashboard/token-saver
- slim down EndpointPageClient
- add token-saver nav to Header and Sidebar
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-26 10:12:25 +07:00
decolua
0c47c891e7
# v0.5.8 (2026-06-21)
...
## Features
- **Antigravity**: native image generation support (image models tagged kind:image, hiển thị trong media-providers UI)
- **CodeBuddy CN**: API key auth + credit quota tracker
- **CodeBuddy CN**: short model prefix alias "cbcn"
## Fixes
- **MiniMax-M3**: enable vision capability
- **Headroom**: support Docker sidecar proxy
- **Antigravity**: image executor fixes
- **mimo-free**: Chrome User-Agent rotation to bypass anti-abuse gate
- **cloudflare-ai**: flatten content-part arrays to string to avoid oneOf 400 (#1926 )
- **Translator**: normalize tools to Anthropic-native shape for non-Anthropic providers
- **CLI**: handle Next.js 16 nested standalone output path (#1940 )
- **Codex**: preserve custom tools during request normalization
- **next.config**: add new route for responses endpoint to API
2026-06-21 18:04:50 +07:00
decolua
34876762af
# v0.5.8 (2026-06-21)
...
## Features
- **Antigravity**: native image generation support (image models tagged kind:image, hiển thị trong media-providers UI)
- **CodeBuddy CN**: API key auth + credit quota tracker
- **CodeBuddy CN**: short model prefix alias "cbcn"
## Fixes
- **MiniMax-M3**: enable vision capability
- **Headroom**: support Docker sidecar proxy
- **Antigravity**: image executor fixes
- **mimo-free**: Chrome User-Agent rotation to bypass anti-abuse gate
- **cloudflare-ai**: flatten content-part arrays to string to avoid oneOf 400 (#1926 )
- **Translator**: normalize tools to Anthropic-native shape for non-Anthropic providers
- **CLI**: handle Next.js 16 nested standalone output path (#1940 )
- **Codex**: preserve custom tools during request normalization
- **next.config**: add new route for responses endpoint to API
2026-06-21 18:03:45 +07:00
decolua
d9b9a192ef
Fix AG
2026-06-21 18:01:33 +07:00
decolua and Cursor
d4ecad24d3
fix(antigravity): add kind:image to image models so they show in media-providers UI
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-21 17:59:51 +07:00
decolua and Cursor
096491d8d7
chore: bump version to 0.5.7
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-21 17:45:23 +07:00
decolua and Cursor
f6f7b14faa
docs: update CHANGELOG for v0.5.7
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-21 17:33:10 +07:00
decolua
3e12bc27d2
fix(next.config): add new route for responses endpoint to API
2026-06-21 16:57:29 +07:00
decolua and Cursor
36153fedbd
fix(mimo-free): add Chrome User-Agent rotation to bypass anti-abuse gate
...
Fixes #1933 — upstream returns 403 "Illegal access" on the chat endpoint
when requests lack a browser-like User-Agent. Mirror OmniRoute mimocode
executor: rotate across 3 Chrome UA strings on both bootstrap and chat.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-21 16:51:47 +07:00
decolua and Cursor
7baf293ccb
fix(cloudflare-ai): flatten content-part arrays to string to avoid oneOf 400 ( #1926 )
...
Workers AI rejects OpenAI content-part array shape; flatten text parts
to a plain string per message before sending.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-21 16:46:21 +07:00
decolua and Cursor
45240c19e5
fix(translator): normalize tools to Anthropic-native shape for non-Anthropic providers
...
Strip `type` field and fold `function.{name,description,parameters}` into
top-level {name, description, input_schema} before forwarding to Claude-format
endpoints. MiniMax (and other Anthropic-compatible providers) reject tools
carrying a `type` field with error code 2013 ("invalid tool type").
Refs #1939
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-21 16:26:17 +07:00
decolua
13abe7f7f6
Fix AG
2026-06-21 15:58:38 +07:00
decolua
401d93bd5c
fix(claude haiku): update handling of unsupported adaptive thinking and output_config.effort
2026-06-20 16:29:15 +07:00
decolua
9cdb8173d7
ChangeLog
2026-06-20 16:13:14 +07:00
decolua
637dd7ae66
feat(ponytail): introduce "Ponytail" feature for minimalistic code generation
2026-06-20 15:08:11 +07:00
decolua
25e8723ad1
enhance API key management UI and improve watcher configuration.
2026-06-20 11:19:03 +07:00
decolua
090886ced9
feat(validate): implement SSRF guard for remote requests and protect sensitive settings
2026-06-20 10:41:47 +07:00
decolua and Cursor
b55cf36d2e
feat(headroom): add proxy lifecycle management + dashboard UI
...
Build on the optional Headroom Token Saver from Carmelo Campos
(PR: feat: add optional Headroom token saver). Add managed start/stop
of the local headroom proxy from the dashboard, install detection,
status probing, and a simplified Token Saver UI.
- detect headroom CLI + python>=3.10, probe proxy /health
- spawn/stop proxy as a detached, pid-tracked process
- /api/headroom/{status,start,stop} routes, gated local-only in dashboardGuard
- one-click Start/Stop Headroom modal, no manual config needed
- claude<->openai shape conversion for /v1/compress via 9router translators
Thanks to Carmelo Campos (@carmelogunsroses) for the original Headroom integration.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-20 10:09:50 +07:00
decolua and Cursor
126aa244c5
fix(kiro): validate region to prevent SSRF (GHSA-6mwv-4mrm-5p3m)
...
Reject non-AWS region values before interpolating them into upstream
URLs and stop reflecting upstream response bodies to the client.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-19 15:09:18 +07:00
decolua
f2a7ae2030
# v0.5.4 (2026-06-18)
...
## Fixes
- **Kiro**: honor thinking effort budgets
- **AG/Kiro/Xiaomi**: provider fixes
- **Combo/Fusion**: flatten tool history in panel calls to prevent 503
- **LLM selector**: show custom vision models in selector and model list
- **Image**: prevent compatible nodes from shadowing provider aliases
2026-06-18 17:46:46 +07:00
decolua
7354c5e5f4
# v0.5.3 (2026-06-18)
...
## Fixes
- **Kiro**: honor thinking effort budgets
- **AG/Kiro/Xiaomi**: provider fixes
- **Combo/Fusion**: flatten tool history in panel calls to prevent 503
- **LLM selector**: show custom vision models in selector and model list
- **Image**: prevent compatible nodes from shadowing provider aliases
2026-06-18 17:36:08 +07:00
decolua
3f9382dee4
Fix AG, Kiro, Xiaomi Provider
2026-06-18 14:58:00 +07:00
decolua
5da508af3c
# v0.5.2 (2026-06-17)
...
## Features
- **Combo Fusion strategy** — fans the prompt out to all member models in parallel, then a configurable judge model synthesizes one final answer (quorum-grace, anonymized sources, graceful degradation)
- **Per-combo strategy selector** — pick `fallback` / `round-robin` / `fusion` / `capacity` per combo (replaces the old round-robin toggle), with a judge picker for fusion
- **Capacity auto-switch** — reorders models per request so images/PDFs route to capable models first
- **Kiro headless API-key auth** (`ksk_`) + direct `claude↔kiro` route that avoids the lossy OpenAI two-hop pivot
- **Claude auto-ping** — warms the 5h quota window right after reset so a fresh window starts immediately (per-connection toggle)
## Fixes
- **Claude 429**: stop hammering the OAuth usage endpoint — cache resetAt, throttle quota refresh to 3 min, cool down after a 429 (chat unaffected)
- **Usage logs always empty**: missing `await` on `getAdapter()` in `getRecentLogs` made `/api/usage/logs` & `/api/usage/request-logs` return nothing
- **Executors**: strip params unsupported by the provider/model (drops deprecated `temperature` for claude-opus-4 → Anthropic 400)
- **Translator**: derive deterministic tool_call ids for gemini/antigravity → OpenAI so function call/response pair correctly (fixes tool-pairing 400s)
- **Antigravity**: strip `optional` from tool schemas before sending to Gemini
- **Claude-to-OpenAI**: handle OpenAI-format responses in the non-streaming path (e.g. xiaomi-tokenplan)
- **Usage views**: show edited connection names consistently across Providers & Quota Tracker
- **Security**: hardened reverse-proxy local-access trust
- **Security**: SSRF hardening on web fetch
## Internal
- Large **open-sse / translator refactor** (~40 commits): unified provider/model registry (LiteLLM-style `models[]` + `kind` field, 100 co-located registry files), single-sourced media/OAuth/refresh/token URLs, registry-based dispatch for usage & token-refresh, DRY translator concerns (buildUsage, encodeDataUri, finishReasonMap, chunkBuilder, reasoningDelta…), ESM-safe registry init, large-file splits, dead-code removal, and golden/no-regression test gates
2026-06-17 11:57:17 +07:00
decolua and Cursor
79df34cad7
fix: giảm spam 429 từ Claude OAuth usage endpoint
...
- claudeAutoPing: cache resetAt in-mem, bỏ qua poll usage cho tới gần reset
- ProviderLimits: throttle auto-refresh Claude 3 phút, nút bấm tay vẫn refresh ngay
- claude.js: 429 ở OAuth usage → cooldown 3 phút, fallback legacy (không ảnh hưởng chat)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-17 11:42:20 +07:00
decolua and Cursor
da667836cc
fix(security): don't trust loopback socket as local when request arrives via reverse proxy
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-17 11:12:24 +07:00
decolua
2a619655b8
update maskKey function to enhance key visibility handling
2026-06-17 11:03:24 +07:00
decolua and Cursor
c7d07448c5
fix(image): pin DNS-resolved IP to prevent SSRF via DNS rebinding (GHSA-cmhj-wh2f-9cgx)
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-17 11:02:04 +07:00
decolua
37bfcc3719
open-sse agents.md
2026-06-17 10:11:39 +07:00
decolua and Cursor
740093d852
feat: Claude auto-ping to warm 5h window after reset
...
Auto-sends a minimal request right after each Claude OAuth connection's 5h quota window resets, so a fresh window starts immediately without waiting. Per-connection toggle on providers and quota dashboards.
- claudeAutoPing scheduler (server-side, 60s tick) hooked into initializeApp
- per-connection enable map in settings.claudeAutoPing.connections
- toggle + tooltip in ConnectionRow and ProviderLimits (Claude OAuth only)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-17 09:31:46 +07:00
decolua
d03f9fb823
Enhance configuration and model capabilities
2026-06-16 23:32:28 +07:00
decolua
b282f05549
Refactor
2026-06-15 18:18:04 +07:00
decolua and Cursor
8ab5af0052
test(real): add capability survey (vision/audio) over all DB creds
...
Probes every chat model of every active provider with an image/audio content
block and classifies the outcome against declared capabilities. Surfaces models
where non-vision/non-audio models 400 on modality input (auto-strip candidates)
and where capability data is stale. Survey-only: logs a grouped table, never
fails on capability outcomes (cred/account noise filtered via status + message).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-15 12:08:05 +07:00
decolua and Cursor
aba4c45da6
fix(translator): ESM-safe registry + tool-id pairing + responses max_tokens; add real-creds tests
...
- translator/index.js: replace require() with static side-effect imports (ESM-safe),
lazy-init registry maps to survive circular import order
- openai-responses->openai: map max_output_tokens -> max_tokens (avoid leaking field upstream)
- gemini/antigravity -> openai: derive deterministic tool_call id from name so
functionCall/functionResponse pair correctly (fixes provider tool-pairing 400s)
- add offline unit tests (finish-reason, usage, session-manager, ollama malformed args, const guard)
- add real-creds integration tests (provider-cases + all-formats matrix: 6 inbound formats x 4 scenarios)
Includes co-located provider registry refactor (pricing/capabilities/media providers) and sessionManager updates.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-15 11:38:43 +07:00
decolua and Cursor
24a2d19bd7
refactor(app): RISKY pass R1-R3 — config-driven modal, cursor frame dedup, chunk helper
...
R1: merge AddOpenAICompatibleModal + AddAnthropicCompatibleModal → AddCompatibleModal (variant config-driven, ~180 dup removed, preserves per-variant useEffect behavior)
R3: extract readCursorFrame() helper — dedup protobuf frame header/decompress loop (JSON+SSE transforms, byte-identical)
R2: add chatChunkSse() helper, wire 7 cursor SSE scaffolds (byte-identical, cursor golden pass)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-14 21:54:35 +07:00
decolua and Cursor
fbf973f2e7
refactor(app): DRY pass — split large files, extract shared utils
...
S1: delete page.new.js (1724L abandoned) + remove dead getAntigravityProjectId
S2: split large files by natural seams
- usage.js → usage/{github,google,claude,codex,kiro,minimax,misc,shared}.js
- media-providers page → components/{Embedding,Tts,Generic,Stt}ExampleCard.js
- EndpointPageClient → endpointConstants.js + endpointPing.js + components/
- tokenRefresh.js → tokenRefresh/{dedup,providers}.js
- ProviderLimits/index.js: 16 pure fn + 9 constants → utils.js
- oauth/providers.js: 7 pure helpers → providerHelpers.js
S3: shared utils
- getModelKind(m, fallback) → shared/constants/models.js (replaces 20× m.kind||m.type)
- getStatusVariant → shared/utils/connectionStatus.js (dedup ConnectionRow/ConnectionsCard)
- sseChunk → open-sse/utils/sse.js (dedup grok-web/perplexity-web)
- fetchWithTimeout → usage/shared.js (replace 4× AbortController pattern in google.js)
fix: enableObservability2 field name in requestDetailsRepo
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-14 19:31:09 +07:00
decolua and Cursor
d3f61aac2f
refactor(open-sse): translator DRY + schema enums, bug fixes, dead code cleanup
...
- Bug B1-B7: media UI m.kind||m.type, serviceKinds, gemini mediaPriority, schema kind, models/info lookup by kind
- Dead code D1-D6: safeParseJSON, drop PROVIDER_ENDPOINTS, orphan fetcher, GITHUB_CONFIG derive, getProviderConfig internal, legacy kiro file
- Translator concerns: toOpenAIUsage, toOpenAIFinish (gemini/kiro/ollama + fix kiro tool finish), thinking effort maps
- Reorg helpers/ → concerns/ (logic) + formats/ (per-format) + schema/ (pure enums: roles/blocks/finishReasons/defaults)
- Wire ~280 hardcoded role/block/finish/default literals to schema enums across 20+ files
- collapseTextParts + extractTextContent dedup
- Normalize translator fn names to openaiToXRequest / xToOpenAIResponse
- Golden tests lock behavior; 0 regression (byte-for-byte providers/alias, 26=26 known fails)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-14 18:49:38 +07:00
decolua and Cursor
c5c9061eac
fix: m.type → m.kind||m.type in remaining consumers (ModelSelectModal, providers page, route)
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-14 16:21:20 +07:00
decolua and Cursor
dd1e0f9bcc
refactor(registry): B2 migrate to LiteLLM-style schema — unified models[] with kind field
...
- 71 registry files: flat `media.*Config.models` → `models[]` with `kind` field
- `media` wrapper removed → serviceKinds, *Config fields promoted top-level
- `type` field renamed to `kind` (llm/image/tts/stt/embedding/embedding/video/music)
- providers/index.js: PROVIDER_MEDIA now built from flat top-level media fields
- shared/constants/providers.js: buildProviderEntry reads flat top-level media fields
- route /v1/models: modelKind() uses kind||type; removed subConfig merge block
- models/info route: removed sub-config fallback lookup (all models in PROVIDER_MODELS)
- ttsProviders/index.js: synthesizeViaConfig reads tts models from PROVIDER_MODELS
- test-models route, helpers.js, validate route: kind||type compat
- Baselines: PROVIDERS 62/62 ✅ , Alias 90/90 ✅
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-14 14:32:59 +07:00
decolua and Cursor
e53ce79abb
refactor(open-sse): B1 consolidate media endpoint URLs into registry
...
- image/embed/tts/search base URLs derive from media.*Config.baseUrl /
searchViaChat.endpoint (single source); handlers read PROVIDER_MEDIA.
- ~18 hardcoded endpoints moved: bfl/fal/stability/runway/hf/gemini/
cloudflare/recraft/sdwebui/comfyui/nanobanana image, voyage embed,
gemini/openrouter tts, chatSearch endpoints.
- Byte-identical: PROVIDERS 62 + alias 90 baselines, image buildUrl outputs.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-14 13:58:12 +07:00
decolua and Cursor
bb9e9aa91f
refactor(open-sse): registry consolidation + DRY media/oauth/adhoc cleanup
...
- Single-source registry: oauth clientId/tokenUrl, usage URLs, image/embed
configs, search defaultModel, codex fixedPort, google token url derive.
- Remove 29 unused OmniRoute providers (registry 100→71); media intact.
- De-adhoc: codex literals → registry format/oauth flags; reasoningInject,
image/embed openrouter headers + xai bodyFields config-driven.
- Add REGISTRY_TEMPLATE.js + expand PROVIDER_DEFAULTS/schema JSDoc.
- Baselines updated; PROVIDERS 62 + alias 90 byte-for-byte, golden snapshots.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-14 13:15:48 +07:00
decolua and Cursor
9105dd0e25
refactor(open-sse): #11 — dedupe client-facing SSE_HEADERS_CORS
...
Gom block SSE headers + CORS lặp ở streamingHandler + responsesHandler
vào sseConstants.SSE_HEADERS_CORS. Codex format-routing giữ nguyên
(logic-driven theo kim chỉ nam DATA/LOGIC docs 07).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 22:06:59 +07:00
decolua and Cursor
4da1d6dad4
refactor(open-sse): D1c — forceStream hardcode → PROVIDERS schema ( #5 )
...
chatCore providerRequiresStreaming: switch provider-name →
PROVIDERS[provider].forceStream. Thêm forceStream:true vào registry
openai/codex/commandcode. verify-providers allowlist added-fields
(forceStream/urlSuffix verified bằng golden + runtime test riêng).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 22:05:01 +07:00
decolua and Cursor
ad2a3e5de3
refactor(open-sse): D1a/D1b — URL quirks → schema urlSuffix + clean debug logs
...
buildUrl: switch provider-name → config-driven. ?beta=true thành
urlSuffix per registry (claude/glm/kimi/minimax/minimax-cn/kimi-coding);
gemini path dùng format==="gemini"; accountId substitution giữ generic.
Xóa console.log('[DEBUG]') trong refreshCline.
Golden url-header 142 pass (byte-for-byte URL).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 22:00:57 +07:00
decolua and Cursor
72ce515709
refactor(open-sse): dedupe Google OAuth client credentials ( #4 )
...
clientId/clientSecret của antigravity + gemini bị lặp 3 nơi
(registry, usage.js, src/lib/oauth). Gom vào shared.js
(ANTIGRAVITY_OAUTH_CLIENT, GOOGLE_OAUTH_CLIENT), các file spread vào.
Byte-for-byte: PROVIDERS/alias/oauth-url equal, golden 142 pass.
Thêm test guard nội dung + alias resolution.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:53:14 +07:00
decolua and Cursor
d4b95380b1
refactor(open-sse): usage.js dispatcher switch → USAGE_HANDLERS registry
...
Gộp switch 13 nhánh getUsageForProvider thành 1 registry object
(provider → handler), mỗi handler giữ nguyên signature/args qua ctx.
Behavior giữ nguyên (ollama vẫn chỉ nhận accessToken như cũ).
Thêm tests/unit/usage-dispatch.test.js guard dispatch.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:46:13 +07:00
decolua and Cursor
6ee4555821
refactor(open-sse): DRY SSE primitives into utils/sseConstants.js
...
Gom SSE_DONE + SSE_HEADERS + SSE_HEADERS_NO_BUFFER vào 1 file không
phụ thuộc (tránh kéo usageDb vào executor). Áp cho kiro, cursor, qoder,
github, commandcode, perplexity-web, grok-web. Byte-for-byte verified
(headers/DONE giữ nguyên; biến thể no-buffer dùng const riêng).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:42:59 +07:00
decolua and Cursor
0a8d92a6ba
refactor(open-sse): #8 unify token refresh dispatch — 2 switch → 1 registry
...
- REFRESH_HANDLERS map (provider → handler) replaces two parallel switch blocks
- getAccessToken keeps gemini→Google + null default; refreshTokenByProvider keeps
generic refreshAccessToken default (gemini intentionally not special-cased)
- Add token-refresh-dispatch.test.js guarding null-guards + defaults
- Existing xai/codex refresh tests still pass
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:32:52 +07:00
decolua and Cursor
633b66dcb6
refactor(translator): P4 concern #5 buildUsage — apply to kiro/ollama/commandcode
...
- Replace 3 inline {prompt,completion,total} usage objects with buildUsage()
- Preserves ?? vs total fallback semantics (commandcode)
- Golden tests pass, identical output
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:27:22 +07:00
decolua and Cursor
252bf56a9f
refactor(translator): P4 concern #2 encodeDataUri — dedupe base64 data-uri building
...
- imageHelper.encodeDataUri(mime, base64) replaces 5 inline `data:${m};base64,${d}` templates
- Applied to gemini/claude/antigravity request + gemini response translators
- Golden tests pass, identical output
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:23:32 +07:00
decolua and Cursor
4cc667253a
refactor(translator): P4 concern #6 finishReasonMap — switch-by-format, default common
...
- concerns/finishReasonMap.js: toOpenAIFinish/fromOpenAIFinish, switch special formats, default passthrough
- Replace 3 inline switch maps (claude→oai, oai→claude, commandcode→oai)
- Golden translator tests pass, behavior identical
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:20:22 +07:00
decolua and Cursor
d2b0960bf7
refactor(open-sse): P3§7 model defaults schema — centralize type/quotaFamily/strip/targetFormat
...
- Add providers/models/schema.js (MODEL_DEFAULTS + field resolvers)
- Accessors getModelTargetFormat/QuotaFamily/Strip use shared default resolvers
- getModelType keeps null contract unchanged; behavior verified equal
- No catalog forced into registry (models stay self-contained per docs decision)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:13:37 +07:00
decolua and Cursor
5a042840fd
refactor(open-sse): P3 provider registry — split into providers/registry/{id}.js
...
- 100 registry files: transport + models co-located per provider (Mongoose-style)
- providers/shared.js: shared Claude headers + OS/arch helpers (deduped)
- providers/models/helpers.js: withCodexReviewModels (kept dynamic)
- providers/index.js builds PROVIDERS + PROVIDER_MODELS = old API (content byte-for-byte)
- config/providers.js + providerModels.js → barrel re-export, keep accessors + runtime helpers
- Verified: PROVIDERS/MODELS/OAuth/alias byte-for-byte, golden translator tests pass, 0 new regression
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 21:08:37 +07:00
decolua and Cursor
7134dd71db
refactor(open-sse): P2 alias single-source — derive OAuth alias→id from OAUTH_ALIASES
...
- Export OAUTH_ALIASES as canonical id→alias source
- model.js derives 16 OAuth alias→id pairs instead of hardcoding (mmf kept out to preserve behavior)
- Add verify-alias.mjs byte-for-byte guard (133 tokens), all equal
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 20:48:11 +07:00
decolua and Cursor
1432ac61d7
fix(open-sse): remove dead duplicate opencode provider entry
...
Two `opencode` keys existed; the first (localhost:4096) was silently overridden
by the later one (opencode.ai, noAuth). Drop the dead entry. Resolved PROVIDERS
output unchanged (verified byte-for-byte).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 20:41:41 +07:00
decolua and Cursor
bb597cbced
refactor(open-sse): source mimo-free/opencode base URL from PROVIDERS
...
CHAT_URL and opencode buildUrl base now read from PROVIDERS instead of repeating
the literal. Values identical; providers byte-for-byte + gate clean.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 20:40:43 +07:00
decolua and Cursor
64182c0484
refactor(open-sse): merge beta-url case + single-source refresh URLs (D)
...
buildUrl: fold kimi-coding into the shared ?beta=true case. refreshCline/
refreshKimiCoding now read URL (and kimi-coding clientId) from PROVIDERS instead
of hardcoded strings. Extend verify-oauth-urls with refresh/clientId snapshot;
URLs byte-for-byte equal, golden + gate clean.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 20:33:38 +07:00
decolua and Cursor
22f6c42738
refactor(open-sse): single-source OAuth token URLs via PROVIDERS (C2)
...
OAUTH_ENDPOINTS.{openai,anthropic,iflow}.token now reference PROVIDERS.*.tokenUrl
(values identical) so each backend token URL is declared once. qwen left as-is
(its appConstants/PROVIDERS values intentionally differ). Add verify-oauth-urls
script; URLs byte-for-byte equal, gate clean.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 20:22:36 +07:00
decolua and Cursor
6597b81e5e
refactor(open-sse): add reasoningDelta helper, dedup thinking deltas (B4)
...
Centralize the reasoning_content delta shape (optional assistant role) used by
claude/gemini/kiro/codex/commandcode response translators. Keeps the cross-format
convention consistent for future translators. Output byte-for-byte identical;
golden + gate clean. Ollama left as-is (mutates existing delta object).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 18:21:46 +07:00
decolua and Cursor
997860aa1f
refactor(open-sse): dedup fallback tool_call id helper (B3)
...
Add fallbackToolCallId() and apply to kiro/ollama/openai-responses response
translators (identical id shape). Leave commandcode (different order) and
request-side gemini/antigravity (random suffix) untouched. Golden + gate clean.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 18:12:40 +07:00
decolua and Cursor
f4c39042a0
refactor(open-sse): dedup format default in PROVIDERS via resolver (C1)
...
Wrap PROVIDERS in defineProviders() that appends format:"openai" when omitted,
removing 72 repeated `format:"openai"` lines. Output stays byte-for-byte
identical (verified by tests/__baseline__/verify-providers.mjs deep-equal
against snapshot). No runtime fields added; consumers unchanged.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 17:57:51 +07:00
decolua and Cursor
3a26d5fb40
refactor(open-sse): remove dead buildProviderUrl/Headers path (A1)
...
These translate-path builders had no runtime consumers: the translator route
uses executor.buildUrl/buildHeaders, and the barrel re-exports were unused.
Removing them eliminates the parallel URL/header build path (single source of
truth = executors). Drop their private helpers and the now-unused clineAuth
import. Golden executor snapshots + gate: no regression.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 17:34:39 +07:00
decolua and Cursor
cc1f4f6c53
test(open-sse): golden lock provider.js translate-path (A1-prep)
...
Snapshot buildProviderUrl/buildProviderHeaders/getTargetFormat for all providers
before merging the translate-path with executor URL/header builders.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 17:19:56 +07:00
decolua and Cursor
39278e9613
refactor(open-sse): extract buildUsage helper, dedup token-details (B2)
...
Add helpers/usageHelper.js for conditional prompt/completion token details.
Apply to gemini/codex/claude response translators; keep each provider's token
math intact. No behavior change; golden + gate: no regression.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 17:18:15 +07:00
decolua and Cursor
34ea763d80
refactor(open-sse): add provider/model schema skeleton (C-prep)
...
New unwired modules providers/schema.js + models/schema.js with PROVIDER_DEFAULTS,
ENDPOINT_DEFAULTS, resolveProvider, MODEL_DEFAULTS, resolveModel (3-tier merge).
Foundation for upcoming registry tasks; no runtime wiring yet.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 17:05:42 +07:00
decolua and Cursor
17202f7111
refactor(open-sse): extract chunkBuilder, dedup chat.completion.chunk (B1)
...
Add helpers/chunkBuilder.js; apply to claude/gemini/kiro/ollama/commandcode/
openai-responses response translators. Caller supplies id/created/model so each
keeps exact id-generation + usage semantics. Extend golden response stream to
openai-responses (codex). No behavior change; gate: no regression.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 17:05:42 +07:00
decolua and Cursor
0e34358e74
test(open-sse): extend golden response stream to kiro/ollama (T0.5)
...
Lock chunk/usage/tool/thinking/finish behavior for kiro + ollama before
chunkBuilder refactor. Sanitize volatile stream/tool ids.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 16:47:25 +07:00
decolua and Cursor
b87cf0c96a
refactor(open-sse): extract safeParseJSON util, dedup tryParseJSON (B5)
...
Consolidate two tryParseJSON variants into helpers/jsonUtil.js with explicit
fallback param. Preserve exact per-call semantics: openai-to-claude passthrough
(fallback=str), geminiHelper null. geminiHelper keeps tryParseJSON re-export.
No behavior change; gate: no regression.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 16:45:10 +07:00
decolua and Cursor
87fe069e9e
refactor(open-sse): remove reverse coupling open-sse -> src (E2)
...
Move clineAuth into open-sse/shared (src re-exports back). Add standalone
open-sse/shared/machineId for codex session hashing (no @/lib/dataDir).
sttCore receives sttConfig via param instead of importing AI_PROVIDERS.
No behavior change; gate: no regression (26 known-fails unchanged).
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 16:35:07 +07:00
decolua and Cursor
8f0a9ff9d4
test(open-sse): add P0 golden tests (url/header, response stream, request body)
...
Lock current behavior before refactor: buildUrl/buildHeaders per default-executor
provider, translateResponse streaming (claude/gemini), translateRequest body
(openai->claude/gemini/kiro). Sanitize volatile fields (tokens, kimi device-id,
kiro conversationId, timestamps) for stable snapshots.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 16:22:00 +07:00
decolua and Cursor
9532ec804e
chore(refactor): snapshot test baseline + no-regression gate truoc refactor open-sse
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 16:13:40 +07:00