Commit Graph
3603 Commits
Author SHA1 Message Date
Tam Nhu Tran 485fe4ba1c test(cliproxy): assert routing persistence via unified config loader
The previous assertion read the generated CLIProxy config.yaml directly via
getConfigPathForPort(). On the self-hosted CI runner this produced ENOENT even
though applyCliproxyRoutingStrategy returned 'config-only', indicating the
read path and write path diverged in the full test-suite context.

Verify persistence via loadUnifiedConfig() instead — that's the canonical
source mutateUnifiedConfig writes to, independent of regenerateConfig's
file-path resolution.
2026-04-19 15:27:24 -04:00
Tam Nhu Tran e25d791d9b test(websearch): clear CCS_PROFILE_TYPE in SearXNG fallback spawn env
The SearXNG-to-DuckDuckGo fallback test inherited the caller's CCS_PROFILE_TYPE
via `...process.env`, causing the hook to take the 'native_default_profile'
skip path and produce empty stdout. All other subprocess spawns in this file
set CCS_PROFILE_TYPE to NEUTRAL_PROFILE_TYPE; this one was the outlier.

Deterministic locally when CCS_PROFILE_TYPE=default is set in the shell.
2026-04-19 15:21:36 -04:00
Tam Nhu Tran b014b5cb51 chore(ci): parallelize CI matrix + cache, tighten AI-facing quality gate
- ci.yml: 5-job matrix (typecheck/lint/format/build/test), fail-fast off,
  actions/cache on ~/.bun/install/cache + node_modules + ui/node_modules.
  Target wall time ~60-90s vs prior ~3-4min.
- .husky/pre-push: add bun run build:all to feature-branch fast gate so
  UI tsc -b errors are caught pre-push (~18s warm).
- CLAUDE.md (symlinked as AGENTS.md): fix validate drift (maintainability
  is NOT part of validate), add CI-First Protocol mandating gh pr checks
  --watch after every push, replace pre-commit checklist with two-tier
  model (iterative push vs pre-merge).

Branch protection on main/dev must be updated post-merge to require the
new matrix status checks instead of the single legacy "validate" check.
2026-04-19 14:47:18 -04:00
github-actions[bot] 003f55f41a chore(release): 7.72.1-dev.5 [skip ci] 2026-04-19 18:38:03 +00:00
Kai (Tam Nhu) Tran cfe4dc2de0 Merge pull request #1043 from kaitranntt/kai/fix/windows-codex-wrapper-quoting
fix(targets): use cmd.exe for escaped Windows wrapper launches
2026-04-19 14:35:45 -04:00
Tam Nhu Tran ccdd0b6e8e fix(windows): align escaped wrapper shell handling
Use ComSpec-aware shell selection for escaped wrapper launches.

Apply it to the remaining Windows Claude launch paths.

Rewrite the Codex exec regression test to use scoped spies so the full suite stays isolated.
2026-04-19 14:27:27 -04:00
Tam Nhu Tran a945b0b104 fix(targets): use cmd.exe for escaped Windows wrapper launches
Align Windows .cmd/.bat launch behavior with the Codex detector shell contract.

This keeps escaped -c overrides intact through wrapper execution.

Adds regression coverage for the Codex runtime path and the shared Windows shell launch path.
2026-04-19 14:09:12 -04:00
walker1211andClaude Opus 4.7 844b5f6c42 feat(browser): 完成 Phase 9 拖拽与指针动作能力
补齐文件拖拽、元素拖拽与受限 pointer 原语,让 Browser MCP 能覆盖常见上传与页面内拖放交互。
并补足 pageId 路由与回归测试,保持与现有 selected-page 语义一致。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 18:41:18 +08:00
walker1211andClaude Opus 4.7 492ee5b083 feat(browser): 完成 Phase 8 文件传输能力
增加 browser-scoped 下载控制与 page-scoped file input 上传,补齐 Phase 8 文档与回归覆盖,并去掉下载列表的 pageId 假能力以保持语义一致。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 13:46:07 +08:00
github-actions[bot] 9ccac9bf39 chore(release): 7.72.1-dev.4 [skip ci] 2026-04-19 00:46:12 +00:00
Kai (Tam Nhu) Tran 06e339b7be Merge pull request #1041 from kaitranntt/kai/fix/1038-openai-compat-regen
fix(cliproxy): preserve legacy openai-compat connectors on restart
2026-04-18 20:43:52 -04:00
Tam Nhu Tran 00d902b6e6 test(cliproxy): cover legacy connector removal cleanup 2026-04-18 20:39:46 -04:00
github-actions[bot] eeea3e1c99 chore(release): 7.72.1-dev.3 [skip ci] 2026-04-19 00:12:55 +00:00
Kai (Tam Nhu) Tran 72c0dca5d8 Merge pull request #1037 from grndis/main
feat(proxy): enhance Anthropic-to-OpenAI message transformation
2026-04-18 20:10:37 -04:00
Tam Nhu Tran 25193187e0 chore(proxy): remove unused schema sanitizer draft 2026-04-18 20:05:22 -04:00
Tam Nhu Tran 16f81fc8a5 fix(cliproxy): preserve legacy openai-compat connectors on restart 2026-04-18 20:05:05 -04:00
Tam Nhu Tran ebc92194bb fix(proxy): harden Anthropic request transformation semantics
- enforce strict tool_result ordering and pairing against assistant tool_use ids
- reject tool_result image payloads that cannot map to OpenAI tool messages
- preserve raw tool schemas on the /v1/messages proxy path instead of silently tightening them
- forward Anthropic tool_choice semantics and cover adaptive routing plus upstream payload checks
2026-04-18 19:39:13 -04:00
Tam Nhu Tran 22ab58b02e fix(proxy): preserve valid enums during schema normalization 2026-04-18 19:02:55 -04:00
Tam Nhu Tran 32d6bfdda7 fix(proxy): restore strict Anthropic message validation 2026-04-18 19:02:38 -04:00
github-actions[bot] b71e5845d5 chore(release): 7.72.1-dev.2 [skip ci] 2026-04-18 22:56:19 +00:00
Kai (Tam Nhu) Tran f87d09f278 Merge pull request #1040 from kaitranntt/kai/fix/browser-attach-bootstrap
fix(browser): bootstrap managed attach profile setup
2026-04-18 18:53:56 -04:00
Tam Nhu Tran 5e1e8070e8 test(cliproxy): isolate routing strategy service state 2026-04-18 17:28:34 -04:00
github-actions[bot] 374c4975fc chore(release): 7.72.1-dev.1 [skip ci] 2026-04-18 21:20:40 +00:00
NamNH2 210ec33c04 fix(codex): probe Windows cmd wrappers via cmd shell 2026-04-18 17:18:18 -04:00
Tam Nhu Tran b52503300b fix(browser): bootstrap managed attach profile setup 2026-04-18 17:18:14 -04:00
walker1211andClaude Opus 4.7 26aa8f4c20 docs(browser): 增补 browser MCP 第八阶段设计
明确下载控制与最小上传的下一阶段范围,按官方 CDP 边界区分 browser-scoped downloads 与 page-scoped uploads。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 01:43:54 +08:00
walker1211andClaude Opus 4.7 126c30ac1a test(browser): 补充 Phase 7 回归覆盖并同步文档
补齐 richer request matching 的边界与顺序回归覆盖,锁定同优先级规则继续按创建顺序命中,并同步 Phase 7 文档说明。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 01:15:39 +08:00
walker1211andClaude Opus 4.7 bd073acf47 feat(browser): 增加 richer request matching 能力
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 00:43:37 +08:00
walker1211andClaude Opus 4.7 cb415b4127 test(browser): 添加 Phase 7 richer matching 失败测试
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 00:38:12 +08:00
walker1211andClaude Opus 4.7 ef06564b60 test(browser): 扩展 richer matching interception harness
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 00:32:55 +08:00
walker1211andClaude Opus 4.7 a5ef77a3d8 docs(browser): 增补 browser MCP 第七阶段设计
明确 Phase 7 继续沿 network interception 路线推进 richer request matching。
收敛匹配增强的范围、边界、数据模型与测试策略,为后续在独立 phase7 worktree 中实现做准备。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 23:57:21 +08:00
walker1211andClaude Opus 4.7 447b5c8bc1 test(browser): 补充 Phase 6B 边界覆盖并同步文档
补齐 fulfill 参数校验与页面关闭后的状态清理回归测试,确保 mock response 行为在边界条件下可验证。
同步 Browser Automation 文档,明确 Phase 6B 的 fulfill 能力与 session-local 语义。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 23:38:28 +08:00
walker1211andClaude Opus 4.7 f133deb539 feat(browser): 增加 Phase 6B mock response 能力
在现有拦截规则之上补齐 fulfill 动作,支持最小状态码、响应头和文本响应体。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 23:15:04 +08:00
walker1211andClaude Opus 4.7 1fbb53c4b1 test(browser): 添加 Phase 6B fulfill 失败测试
先补 browser_add_intercept_rule 的 fulfill schema、mock response 主路径与基础边界失败测试。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 23:12:35 +08:00
walker1211andClaude Opus 4.7 23eccb24f3 test(browser): 扩展 fulfill interception harness
为 Phase 6B 增加 Fetch.fulfillRequest 记录能力,便于后续 mock response TDD。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 23:09:14 +08:00
walker1211andClaude Opus 4.7 a93e0b6494 feat(browser): 完成 browser MCP 第六阶段 6A 最小拦截闭环
补齐最小 request interception 工具链与会话内状态管理,确保规则绑定具体页面并通过完整验证门禁。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 22:03:17 +08:00
walker1211andClaude Opus 4.7 491e9db51e test(browser): 添加 Phase 6A 失败测试
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 17:01:47 +08:00
walker1211andClaude Opus 4.7 68b56839db test(browser): 扩展 network interception harness
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 16:59:25 +08:00
walker1211andClaude Opus 4.7 e0b58ee162 docs(browser): 增补 browser MCP 第六阶段设计
明确 Phase 6A/6B 的拆分,收敛 network interception 与 mock responses 的最小闭环,
并固化规则绑定、请求摘要与页级拦截会话的设计边界。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 16:51:06 +08:00
walker1211andClaude Opus 4.7 ff0e7085b8 feat(browser): 完成 browser MCP 第五阶段页面控制
补充 selected page 会话状态与页面选择、打开、关闭能力,
并为 browser_get_session_info 增加 selected 标记与最小多标签文档说明。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 16:39:51 +08:00
Grandis SYF 2672e35362 feat(proxy): enhance Anthropic-to-OpenAI message transformation and schema sanitization 2026-04-18 13:49:20 +07:00
walker1211andClaude Opus 4.7 e92a2c11bf feat(browser): 完成 browser MCP 第四阶段输入能力
补齐 browser_click 的精细点击参数,并新增 browser_press_key 与 browser_scroll,继续扩展 browser MCP 的真实交互能力。
同步更新单测与浏览器自动化文档,确保 Phase 4 能力完成并通过验证。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 13:59:15 +08:00
walker1211andClaude Opus 4.7 cf2375e169 feat(browser): 完成 browser MCP 第三阶段能力
补齐 iframe/shadow 作用域查询与页面事件观察能力,并同步测试与文档,确保 Phase 3 以可验证增量独立收口。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 01:55:16 +08:00
walker1211 b90eae3892 feat(browser): 完成 browser MCP 第一阶段能力与配置打通
- 增加 browser_wait_for、browser_eval 及 click/query 扩展能力
- 打通 browser eval_mode 的配置、状态、启动链路与设置界面
- 补充浏览器相关测试隔离、文档和 CI parity 收尾调整
2026-04-18 00:29:43 +08:00
semantic-release-bot eaa37c749e chore(release): 7.72.1 [skip ci]
## [7.72.1](https://github.com/kaitranntt/ccs/compare/v7.72.0...v7.72.1) (2026-04-17)

### Bug Fixes

* **cliproxy:** pin routing config regeneration path ([d3de83e](https://github.com/kaitranntt/ccs/commit/d3de83e157b4d286cc9b684339cccbe501b911a3))

### Hotfixes

* **browser:** avoid aborting launch on missing managed profile ([41bf507](https://github.com/kaitranntt/ccs/commit/41bf5075e0ece90401dfa22fe9ffbed797825387))

### Tests

* **cliproxy:** pin routing strategy test env scope ([bc1606d](https://github.com/kaitranntt/ccs/commit/bc1606da756fdf1552029d3a74add4464caa2377))
2026-04-17 03:43:09 +00:00
Kai (Tam Nhu) Tran d5b4dfde1e Merge pull request #1034 from kaitranntt/kai/hotfix/browser-attach-profile-dir-invalid
hotfix(browser): avoid aborting launch on missing managed profile
2026-04-16 23:40:48 -04:00
Tam Nhu Tran bc1606da75 test(cliproxy): pin routing strategy test env scope 2026-04-16 23:35:08 -04:00
Tam Nhu Tran d3de83e157 fix(cliproxy): pin routing config regeneration path
- capture the resolved local cliproxy config/auth paths before regenerating
  routing strategy config
- thread explicit override paths into regenerateConfig so scoped config writes
  stay deterministic during the full test suite
- add regression coverage for explicit config path overrides
2026-04-16 23:29:10 -04:00
Tam Nhu Tran 41bf5075e0 hotfix(browser): avoid aborting launch on missing managed profile
- skip managed Claude browser attach when the default CCS browser profile
  directory has not been created yet
- keep explicit env override flows failing fast so real misconfiguration still
  surfaces clearly
- add regression coverage for default and settings-profile launches
2026-04-16 22:59:43 -04:00
semantic-release-bot a0183073b3 chore(release): 7.72.0 [skip ci]
## [7.72.0](https://github.com/kaitranntt/ccs/compare/v7.71.0...v7.72.0) (2026-04-17)

### Features

* add missing i18n keys for analytics chart empty states ([d3ef82c](https://github.com/kaitranntt/ccs/commit/d3ef82cd601732522e1b98d4c9a4035a9ab31941))
* **cli:** add browser automation commands ([4e30c9b](https://github.com/kaitranntt/ccs/commit/4e30c9b080a4e240b1fa17c3b0486dafc28224da))
* **cliproxy:** integrate missing provider support ([2d9f8c9](https://github.com/kaitranntt/ccs/commit/2d9f8c96950d2c13522c088063dd84d20c69d51c))
* **cursor:** split legacy bridge from cliproxy provider ([3b5941c](https://github.com/kaitranntt/ccs/commit/3b5941c60bf5578c49785c001f85612cfec8a7e5))
* **proxy:** add openai-compatible local proxy runtime ([074e900](https://github.com/kaitranntt/ccs/commit/074e90055789bd146d96fd3d1ad917f91e602186))
* **proxy:** complete openai routing scope ([17187c4](https://github.com/kaitranntt/ccs/commit/17187c4abd5d62552e137cd783a92e7dbd356e88))
* **settings:** refine browser automation tab ([06f6f54](https://github.com/kaitranntt/ccs/commit/06f6f5485fdae1790ac50eee3f0bdc4905b340b1))

### Bug Fixes

* **accounts:** prefer live codex plan over stale free tags ([0bfdc52](https://github.com/kaitranntt/ccs/commit/0bfdc522d5606119b5051bdabc4b8d59aaeb4891))
* **accounts:** refine codex plan badges ([25aa8bd](https://github.com/kaitranntt/ccs/commit/25aa8bdb16e04f9f81e5b54487716c7cb85728ea))
* **accounts:** show one codex plan badge ([2a3632e](https://github.com/kaitranntt/ccs/commit/2a3632e5a5efa825cdee0e03ffc26410b3c42ee9))
* **accounts:** show one codex plan tag ([25f94bb](https://github.com/kaitranntt/ccs/commit/25f94bb180cb6b50b1ee297942dbc45508184502))
* **accounts:** simplify codex free tier badges ([72ea1fc](https://github.com/kaitranntt/ccs/commit/72ea1fc9d69a8958b045c74eade7beb8cdd7b6bf))
* **browser:** address platform and port review ([8a17410](https://github.com/kaitranntt/ccs/commit/8a17410f9642911d3b74357d6bbfd16aecddad4e))
* **browser:** reset blank attach path to default ([4583ffa](https://github.com/kaitranntt/ccs/commit/4583ffa022909c4456051c6e89be791c18933eab))
* chronological ordering in usage trends chart ([#1008](https://github.com/kaitranntt/ccs/issues/1008)) ([0e8abed](https://github.com/kaitranntt/ccs/commit/0e8abed7982ed6640455b52e61fb658ba8363b2b))
* clarify docker dashboard auth setup guidance ([8edb563](https://github.com/kaitranntt/ccs/commit/8edb56331e5f847f06c72624320874c7c884b334))
* **cli:** document gitlab shortcut flags and harden cursor routing ([4e738ee](https://github.com/kaitranntt/ccs/commit/4e738ee021603e5553eafa1a5e9c61566f6979f5))
* **cli:** narrow cursor cliproxy shortcut routing ([93afdb5](https://github.com/kaitranntt/ccs/commit/93afdb50bf767087839123d1a09bda045fca34c7))
* **cliproxy:** align codex defaults with gpt-5.4 ([80847b4](https://github.com/kaitranntt/ccs/commit/80847b4e6b68eab95e08b0acadbce888799f30b0))
* **cliproxy:** align delegated gemini auth recovery ([6b53df0](https://github.com/kaitranntt/ccs/commit/6b53df0147989dac42a76ca53039fc7a714d495c))
* **cliproxy:** avoid duplicate gemini management retries ([637a591](https://github.com/kaitranntt/ccs/commit/637a591dcaa94843cd1c74e18f713b36bcf2a1f4))
* **cliproxy:** avoid network-bound local startup ([27f1416](https://github.com/kaitranntt/ccs/commit/27f1416181904cc256a8694e6e15189ca673333c))
* **cliproxy:** clear stale auth quota cache ([769b54f](https://github.com/kaitranntt/ccs/commit/769b54fb4f20e2045d1b1af42efa5eb2c920c414))
* **cliproxy:** delegate gemini refresh to upstream ([9dc6374](https://github.com/kaitranntt/ccs/commit/9dc6374851718bb971175a3ebe0ff611d584847d))
* **cliproxy:** fetch Claude OAuth quota from usage endpoint ([9e88082](https://github.com/kaitranntt/ccs/commit/9e880825e744a078fa60fdbf8dd89d267184c9cb))
* **cliproxy:** harden Claude OAuth quota window parsing ([050b41b](https://github.com/kaitranntt/ccs/commit/050b41bb554a90b5938be1e081efc033cb390f3e))
* **codex:** prefer cmd wrappers over powershell on windows ([a94de01](https://github.com/kaitranntt/ccs/commit/a94de010dbb0a3c808e813b5c9ac9ec229f37708))
* **cursor:** deprecate legacy bridge and harden gitlab auth ([87d93b6](https://github.com/kaitranntt/ccs/commit/87d93b651bccb5e085b41925ebfff0c7e0cad82e))
* **cursor:** migrate legacy settings and validate gitlab urls ([58c2c46](https://github.com/kaitranntt/ccs/commit/58c2c46ed73326d9d16f5889326150cd0965022a))
* **gitlab:** sanitize PAT auth failures across cli and web ([7f1c236](https://github.com/kaitranntt/ccs/commit/7f1c23607db9692ffcfa593930f90809f03f3af8))
* **proxy:** detect dashscope compatible-mode profiles ([a6aa576](https://github.com/kaitranntt/ccs/commit/a6aa576d5a6e11d53cdd1d85f22b57a63fbe9b47))
* **proxy:** keep stream guards active through sse piping ([841eeb4](https://github.com/kaitranntt/ccs/commit/841eeb497c274ed38ec2c653ec7c9cd02c1ea0ed))
* **shared-manager:** exclude .staging dirs from marketplace registry sync ([5b262f0](https://github.com/kaitranntt/ccs/commit/5b262f0139cf31331168b2c28304b499c3f23466))
* **shared-manager:** prune transient and malformed marketplace entries ([2293368](https://github.com/kaitranntt/ccs/commit/2293368e31f43f779a865a280513702542dc0870))
* **ui:** align cliproxy provider assets ([1bad3b0](https://github.com/kaitranntt/ccs/commit/1bad3b0305f32b13e78a8a41dba9c63a52449722))

### Documentation

* **proxy:** credit claude-code-router ([b346693](https://github.com/kaitranntt/ccs/commit/b346693c3a70205a3f6cce46e556cd6e1ceaad8b))
* **proxy:** document openai-compatible routing ([7b64852](https://github.com/kaitranntt/ccs/commit/7b6485249530c890d9bf3549221dcbd0f3f6d18f))
* **roadmap:** note private-network startup fix ([3b17bc9](https://github.com/kaitranntt/ccs/commit/3b17bc934a01b93f016e85de4c4a7a162863dcf7))

### Styles

* **ui:** format gitlab auth launch options ([dc94b9c](https://github.com/kaitranntt/ccs/commit/dc94b9c1c938b8d32bc3daf1b0bc6c5bb05b2bf0))

### Code Refactoring

* **accounts:** localize codex identity labels ([cfbc967](https://github.com/kaitranntt/ccs/commit/cfbc9672c3360ed1a5578b1cf715ea58df1b8702))
* **proxy:** internalize sse translation and cleanup handlers ([a340709](https://github.com/kaitranntt/ccs/commit/a3407093d70bef44874cdf26a06436e0d287c1a7))

### Tests

* **ci:** stabilize runner-sensitive isolated tests ([2ba3a0a](https://github.com/kaitranntt/ccs/commit/2ba3a0ab02fc4909681a36cc265e5ff2d1680426))
* **ci:** use runtime-relative isolated child scripts ([2e2ba1c](https://github.com/kaitranntt/ccs/commit/2e2ba1c09b81b5e79b7ec65bbd0979d5ce1a1204))
* **cliproxy:** stabilize routing strategy config scope ([4845b79](https://github.com/kaitranntt/ccs/commit/4845b797de4a1e326e4ebea0109e884319e1bd3e))
* **proxy:** cover proxy lifecycle and routing ([5c66c1f](https://github.com/kaitranntt/ccs/commit/5c66c1f12162306d1039ec2e255ad9894199d1f4))
2026-04-17 02:03:58 +00:00