Tam Nhu Tran
ba4fbcf75f
docs(ui): add HeroBar and rail-anchored demos to styleguide
...
The v1.1 design contract names three identity-strip patterns but the
styleguide previously only demoed PageHeader. Future contributors
visiting /_styleguide had no live preview of HeroBar or rail-anchored
identity, leaving the contract under-documented.
Add:
- 1a. HeroBar demo (canonical: home pattern) -- single-row dense hero
with logo + title + version badge + 4 inline stat tiles, dotted
background pattern, anonymized data
- 1b. Rail-anchored identity demo (canonical: cliproxy pattern) -- a
Config 3-pane layout where the left rail carries brand + Quick Setup
CTA + provider list + footer status, with NO top chrome
- 1c. PageHeader demo (existing, retitled with health pattern reference)
All demos use anonymized data (Provider A/B/C, Demo Dashboard, fake
metrics) so screenshots are safe to publish without Privacy mode.
2026-04-25 14:08:42 -04:00
Tam Nhu Tran
d9332907cc
docs(ui): drop redundant home/cliproxy screenshots from phase2 report
...
home and cliproxy were reverted to their original designs; before/after
screenshots would show identical content. Keep only health migration
screenshots and refocus the HTML report on the design-system docs
restructure (three identity-strip patterns).
2026-04-25 14:02:07 -04:00
Tam Nhu Tran
1a2fd848f0
refactor(ui): revert home/cliproxy migrations and restructure design system
...
User feedback caught a Phase 2 mistake: forcing home and cliproxy into
a one-size-fits-all PageShell + PageHeader chrome regressed density on
both pages.
- home: original 1-row hero (logo + title + version + 4 inline stats)
was split into PageHeader + KpiRow, doubling vertical footprint
- cliproxy: original rail-anchored brand was duplicated by a top
PageHeader, stealing ~80px from the 3-pane body
Resolution: revert both pages to dev-branch state, then restructure
ui/docs/design-system.md to extract THREE identity-strip patterns from
the canonical references rather than imposing one:
1. HeroBar (1-row dense) -> home pattern
2. Rail-anchored (no top chrome) -> cliproxy pattern
3. PageHeader (title + description) -> health pattern
Health stays migrated -- the Monitor archetype + PageHeader is a real
improvement there because the gauge + KPI row + group cards don't fit
the HeroBar pattern.
Future page migrations adapt to whichever identity-strip pattern fits
the page's content shape, not the other way around. design-decisions.md
gets a v1.1 revision row capturing the rationale.
2026-04-25 13:34:43 -04:00
Tam Nhu Tran
c59622fabd
fix(ui): restore click-through navigation on home KPI cards
...
PR-Agent caught a regression: pre-migration the four home stats had
onClick handlers navigating to /providers, /cliproxy, /accounts, and
/health. The Phase 2 migration dropped those handlers, removing the
shortcuts for all users.
Add an optional onClick prop to KpiCard. When supplied, the tile
promotes from a static <div> to a <button> with hover lift, keyboard
focus ring, and an accessible aria-label derived from the label.
Wire all four home KPIs back to their original navigation targets.
2026-04-25 13:18:44 -04:00
Tam Nhu Tran
339fcd81e6
docs(ui): add phase 2 visual preview with before/after screenshots
...
Self-contained HTML report at ui/docs/design-system-phase2-preview.html
with embedded base64 before/after screenshots so reviewers can scrub
the cliproxy / home / health migrations side-by-side without leaving
GitHub. Captured via Playwright with Privacy mode on; data anonymized.
2026-04-25 13:13:44 -04:00
Tam Nhu Tran
9a2c09357a
feat(ui): migrate cliproxy page to design system Config archetype
...
Wrap master-detail layout in PageShell + PageHeader + ConfigLayout.
PageHeader carries the brand strip (Zap icon + CLIProxy title +
account-management description) and refresh button. The existing
sidebar (Quick Setup CTA, sectioned providers list, variants list,
ProxyStatusWidget, footer connection summary) becomes ConfigLayout's
left rail; ProviderEditor and EmptyProviderState become the form pane.
Pure layout migration: every sub-flow still mounts correctly --
QuickSetupWizard dialog, AddAccountDialog (URL action=auth deep-link),
AccountSafetyWarningCard for gemini/agy, provider selection persisted
to localStorage and URL deep-link, all bulk pause/resume/solo/delete
mutations untouched. ProviderEditor (which contains the form + raw JSON
internally) remains as a single 'form' slot.
2026-04-25 13:13:14 -04:00
Tam Nhu Tran
5e3e554693
feat(ui): migrate health page to design system Monitor archetype
...
Hero gauge + status copy moved into a MonitorCard variant=terminal,
preserving the ccs doctor / live-ops aesthetic per locked decision #4 .
HealthStatsBar replaced by a 4-column KpiRow with severity tones
(Checks / Passed / Warnings / Errors). Each HealthGroupSection becomes
its own MonitorCard while keeping the existing accordion behavior
intact -- so check expansion, sort-by-severity, and live monitoring
continue to work unchanged.
PageHeader carries the version badge, last-scan relative time,
auto-refresh hint, ccs doctor copy action, and refresh button.
Pure layout + visual hierarchy migration -- no new metrics, no new
features. LOC: 263 -> ~245.
2026-04-25 13:12:41 -04:00
Tam Nhu Tran
3ae5f20dc8
feat(ui): migrate home page to design system Monitor archetype
...
Wrap in PageShell + PageHeader + MonitorLayout. Replace bespoke hero
stat row with KpiRow + 4 KpiCards (profiles, cliproxy, accounts, health
with status-derived tone). AuthMonitor and ErrorLogsMonitor become
MonitorCard children; the 'logs moved' callout becomes a MonitorCard.
Pure layout migration -- behavior preserved (navigation, configuration
warning Alert, hooks unchanged). Hero punch retained via tone-coded KPI
cards. LOC: 208 -> 173.
2026-04-25 13:12:08 -04:00
github-actions[bot]
b868852e63
chore(release): 7.74.0-dev.6 [skip ci]
2026-04-25 16:58:28 +00:00
Kai (Tam Nhu) Tran and GitHub
283f866897
Merge pull request #1088 from kaitranntt/kai/feat/design-system-foundations
...
feat(ui): add design system foundations (PageShell + ConfigLayout + MonitorLayout)
2026-04-25 12:54:57 -04:00
Tam Nhu Tran
6261e150e3
fix(ui): address PR-Agent round 3 review on ConfigLayout duplicate DOM
...
Render exactly one layout at a time -- desktop 3-pane grid OR mobile
tabs -- via a useIsDesktop matchMedia hook gated at the lg breakpoint.
Previously the component rendered BOTH and toggled visibility via
Tailwind 'hidden lg:grid' / 'lg:hidden'. This duplicated FormSection
elements in the DOM, so document.getElementById() in SectionRail's
scroll-spy and click-to-jump would resolve to the (hidden) desktop copy
first on mobile -- making the rail attach to the wrong scroller and
never update the active section.
2026-04-25 12:48:06 -04:00
Tam Nhu Tran
caef89a7aa
fix(ui): address PR-Agent round 2 review feedback
...
MonitorLayout:
- Wrap ScrollArea in an explicit flex-col container with min-h-0. The
previous version relied on the parent (PageShell) being flex-col for
flex-1 to compute a definite height; that's fragile. The wrapper now
establishes its own flex column so the ScrollArea reliably scrolls
whether or not the caller's wrapper is flex.
ConfigLayout (MobileTabs):
- Derive active tab during render with fallback to first available, same
pattern applied to JsonPane in the previous round. Parent toggling
`left` or `json` props could change the available tabs and leave
the controlled Tabs value pointing at a tab id that no longer existed,
rendering an empty pane on mobile until the user manually switched.
2026-04-25 12:43:41 -04:00
Tam Nhu Tran
37de42d463
fix(ui): address PR-Agent review feedback on JsonPane and SectionRail
...
JsonPane:
- Reset active tab when the tabs prop changes. Previously activeTab was
initialized once and never re-synced; a parent swapping the tab set
(e.g. selecting a different entity) could leave us pointing at a stale
id, leaving the pane empty and Copy returning '{}'.
- Force textarea remount on data change in editable mode via key={text}.
Uncontrolled defaultValue retained the prior value when the underlying
config changed, so onBlur could save stale text.
SectionRail:
- Default scroll-spy root to the nearest scrollable ancestor instead of
the page viewport. FormPane wraps its body in a shadcn ScrollArea, so
IntersectionObserver with root:null was watching the wrong scroller and
the active section never updated as the form scrolled.
- observeRoot prop still wins when supplied for explicit overrides.
2026-04-25 12:36:58 -04:00
Tam Nhu Tran
e0d2ab0444
docs(ui): add design system visual preview + screenshots
...
Self-contained HTML report at ui/docs/design-system-preview.html with
embedded base64 screenshots so the PR review and the report itself remain
viewable without external hosting. Companion to the live /_styleguide
route.
Screenshots captured with Privacy mode ON via Playwright; all data
anonymized (Provider A/B/C, fake metrics) -- no real account names,
emails, or OAuth identifiers.
2026-04-25 12:21:33 -04:00
Tam Nhu Tran
64e78f6e69
feat(ui): add design system foundations
...
Introduce two locked page archetypes -- Config (3-pane) and Monitor
(KPI row + 12-col grid) -- wrapped by shared PageShell + PageHeader.
Primitives:
- page-shell/: PageShell, PageHeader, EmptyState, ErrorState
- config-layout/: ConfigLayout, ListPane, SectionRail, FormPane,
FormSection, JsonPane (read-only by default, opt-in editable)
- monitor-layout/: MonitorLayout, KpiRow, KpiCard, MonitorGrid,
MonitorCard (incl. variant="terminal")
Single ConfigLayout component, prop-controlled left rail:
- ListPane for multi-entity (cliproxy, accounts, providers)
- SectionRail for single-entity (codex, copilot, cursor, droid)
with IntersectionObserver scroll-spy
- omit for none
DEV-ONLY /_styleguide route gated by import.meta.env.DEV. Shows every
primitive plus composed Config (multi + single) and Monitor demos using
fully anonymized data (Provider A/B/C, fake metrics).
Phase 1 of dashboard design system unification. Existing pages untouched
this phase -- migrations land in Phase 2+.
Locked decisions in ui/docs/design-decisions.md:
1. In-app /_styleguide over Storybook
2. Archetype name: Monitor (not Dashboard)
3. JsonPane read-only by default
4. Health terminal aesthetic kept as variant
5. i18n per-page namespaces
6. SectionRail uses scroll-spy
2026-04-25 12:16:27 -04:00
github-actions[bot]
ba63758e8c
chore(release): 7.74.0-dev.5 [skip ci]
2026-04-25 16:10:07 +00:00
Kai (Tam Nhu) Tran and GitHub
5dd5878bb4
Merge pull request #1086 from BlackJulySnow/main
...
feat: add extra models support for API profiles
2026-04-25 12:07:01 -04:00
Tam Nhu Tran
bc16c5168c
fix(ui/profiles): latch extraModels touch state for explicit-clear
...
The previous fix used react-hook-form's `dirtyFields.extraModels` to
gate forwarding of the empty value. RHF compares each value to its
`defaultValues` entry, so typing "x" and erasing back to "" reverts
the dirty flag to false — making it impossible to clear a saved
ANTHROPIC_EXTRA_MODELS through the dashboard.
Track a local boolean that latches true on the first onChange and
resets when the dialog closes. The latch survives a "type then
delete" round-trip, so the empty-string delete signal still reaches
the server, while a never-touched field still gets skipped to
preserve the existing saved value.
2026-04-25 12:00:50 -04:00
Tam Nhu Tran
9122f68dd4
fix(ui/profiles): preserve ANTHROPIC_EXTRA_MODELS on untouched edit-dialog save
...
The edit dialog cannot pre-populate `extraModels` from the existing
profile (the Profile type carries no env data), so the field always
opens blank in edit mode. Forwarding that blank value unconditionally
clobbered any saved ANTHROPIC_EXTRA_MODELS, since the PUT route treats
an empty string as a delete signal.
Track react-hook-form's `dirtyFields.extraModels` and only include the
field in the update payload when the user actually touched it. Typing
then clearing still marks the field dirty, so the explicit-clear UX
keeps working.
2026-04-25 11:45:51 -04:00
Tam Nhu Tran
7f14c565df
test: cover --extra-models parsing and CLIProxy sync dedup
2026-04-25 11:30:44 -04:00
Tam Nhu Tran
b1a0d1a175
fix(cliproxy/sync): dedup ANTHROPIC_EXTRA_MODELS entries against primary model
2026-04-25 11:30:33 -04:00
Tam Nhu Tran
a28d544abb
docs(api): document --extra-models flag in ccs api --help
2026-04-25 11:30:22 -04:00
Tam Nhu Tran
f01210fbf2
style: apply prettier formatting to extra-models changes
2026-04-25 11:30:11 -04:00
github-actions[bot]
eba53715e7
chore(release): 7.74.0-dev.4 [skip ci]
2026-04-25 15:28:27 +00:00
Kai (Tam Nhu) Tran and GitHub
a3a4c856e0
Merge pull request #1087 from walker1211/fix/browser-mcp-devtools-targets
...
fix(browser): improve DevTools page creation and screenshot diagnostics
2026-04-25 11:24:57 -04:00
walker1211 and Claude Opus 4.7
785f439e9b
test(image-analysis): 隔离 hook e2e 环境变量
...
避免本机会话的 CCS_IMAGE_ANALYSIS_* 配置污染 e2e 子进程,确保 mock CLIProxy 场景稳定验证。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-04-25 14:46:34 +08:00
walker1211 and Claude Opus 4.7
4c46d6c5ae
fix(browser): 修复 DevTools 页面创建和截图诊断
...
兼容 Chrome DevTools /json/new 的 PUT 方法,过滤不可用的 top-chrome 页面目标,并在截图前对 0x0 viewport 给出明确错误。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-04-25 14:46:18 +08:00
github-actions[bot]
fb5b852b94
chore(release): 7.74.0-dev.3 [skip ci]
2026-04-24 21:05:44 +00:00
Kai (Tam Nhu) Tran and GitHub
e2f91a6ed0
Merge pull request #1085 from kaitranntt/kai/fix/ccsxp-codex-history
...
fix(codex): align ccsxp history with native codex
2026-04-24 17:02:19 -04:00
Tam Nhu Tran
5094c23c43
docs(codex): document ccsxp history root
2026-04-24 15:26:44 -04:00
Tam Nhu Tran
8ffda0268d
fix(codex): align ccsxp history with native codex
2026-04-24 15:24:12 -04:00
B1GGersnow
2915ab0c40
feat: add extra models support for API profiles
...
Add ANTHROPIC_EXTRA_MODELS env var to allow each API profile to
configure additional models alongside the primary ANTHROPIC_MODEL.
These are synced to CLIProxy config.yaml during ccs cliproxy sync.
- profile-mapper.ts: parse ANTHROPIC_EXTRA_MODELS on sync
- profile-writer.ts: write extra models to settings.json
- shared.ts + create-command.ts: --extra-models CLI flag
- profile-routes.ts + route-helpers.ts: REST API support
- profile-dialog.tsx + api-client.ts: frontend input
2026-04-25 03:20:29 +08:00
github-actions[bot]
02dae9c5cf
chore(release): 7.74.0-dev.2 [skip ci]
2026-04-24 14:54:13 +00:00
Kai (Tam Nhu) Tran and GitHub
94429aa659
Merge pull request #1084 from kaitranntt/kai/feat/1081-gpt-5-5
...
feat: add GPT-5.5 support to Codex catalogs
2026-04-24 10:50:49 -04:00
Tam Nhu Tran
4efd61ee34
feat: add gpt-5.5 to codex model catalogs
2026-04-24 10:30:59 -04:00
github-actions[bot]
a6170a967d
chore(release): 7.74.0-dev.1 [skip ci]
2026-04-24 04:37:56 +00:00
Kai (Tam Nhu) Tran and GitHub
303d59b9c8
Merge pull request #1082 from kaitranntt/kai/chore/sync-main-release-7-74-into-dev
...
chore: sync main release into dev
2026-04-24 00:34:48 -04:00
Tam Nhu Tran
2931e1f093
chore: sync main release into dev
...
# Conflicts:
# package.json
2026-04-24 00:30:18 -04:00
semantic-release-bot
8ccf193fd4
chore(release): 7.74.0 [skip ci]
...
## [7.74.0](https://github.com/kaitranntt/ccs/compare/v7.73.1...v7.74.0 ) (2026-04-24)
### Features
* add browser setup flow for Claude attach ([7ad8bbf ](https://github.com/kaitranntt/ccs/commit/7ad8bbf0a1e03b03d85f81c1ca41c317afc0af2b ))
* **browser:** add explicit runtime policy controls ([7d02f55 ](https://github.com/kaitranntt/ccs/commit/7d02f55f9fba3fb81c0d1f1bfeb0183809de4d54 ))
* **browser:** 增加 artifact 持久化与导入导出能力 ([2f167d8 ](https://github.com/kaitranntt/ccs/commit/2f167d8445e294cadb6be8e1190a0d33188f0b22 ))
* **browser:** 增加 orchestration 执行策略增强 ([101396f ](https://github.com/kaitranntt/ccs/commit/101396f728dea649e1cb7e0d02e2a9ac8e66729a ))
* **browser:** 增加 Phase 10A recording 生命周期 ([17a3434 ](https://github.com/kaitranntt/ccs/commit/17a343405629178c1a082132069102b0d8f28e9c ))
* **browser:** 增加 Phase 6B mock response 能力 ([f133deb ](https://github.com/kaitranntt/ccs/commit/f133deb5399367cdadd2901fbb29032d39bb5d36 ))
* **browser:** 增加 richer request matching 能力 ([bd073ac ](https://github.com/kaitranntt/ccs/commit/bd073acf4736c337ee9d1d6ff616c27f124ca292 ))
* **browser:** 增加 sequence 组合块能力 ([0038b06 ](https://github.com/kaitranntt/ccs/commit/0038b063ac2eb98255d09e0755096d94bca70813 ))
* **browser:** 增加跨 page orchestration 能力 ([1833ed3 ](https://github.com/kaitranntt/ccs/commit/1833ed3ad612c290226208e6557eacb282bfd6b2 ))
* **browser:** 增强 assert_query 断言与诊断信息 ([4af9675 ](https://github.com/kaitranntt/ccs/commit/4af967559cd985b0829bbb197edcae1bb264bdc0 ))
* **browser:** 完成 browser MCP 第一阶段能力与配置打通 ([b90eae3 ](https://github.com/kaitranntt/ccs/commit/b90eae38928cce19c246b69f2c530947adc401f4 ))
* **browser:** 完成 browser MCP 第三阶段能力 ([cf2375e ](https://github.com/kaitranntt/ccs/commit/cf2375e169d808964a9c80077a657712630e6d35 ))
* **browser:** 完成 browser MCP 第五阶段页面控制 ([ff0e708 ](https://github.com/kaitranntt/ccs/commit/ff0e7085b815e290d61cff39d8099e61df6a793b ))
* **browser:** 完成 browser MCP 第六阶段 6A 最小拦截闭环 ([a93e0b6 ](https://github.com/kaitranntt/ccs/commit/a93e0b649447610bce3034c92b6e857c7f8d1e8b ))
* **browser:** 完成 browser MCP 第四阶段输入能力 ([e92a2c1 ](https://github.com/kaitranntt/ccs/commit/e92a2c11bfedd8c4d18cf591baa15e9236aacb68 ))
* **browser:** 完成 Phase 10A 录制动作规范化 ([5288387 ](https://github.com/kaitranntt/ccs/commit/5288387151e150b37990e6098d75c957c6d7e0ac ))
* **browser:** 完成 Phase 10B replay 能力 ([9d21e83 ](https://github.com/kaitranntt/ccs/commit/9d21e83d46da314d78189cbb483c0689b090738e ))
* **browser:** 完成 Phase 10C orchestration 能力 ([7785503 ](https://github.com/kaitranntt/ccs/commit/77855035f4d0f6cbd37209b25b11c6cc5360b4cd ))
* **browser:** 完成 Phase 8 文件传输能力 ([492ee5b ](https://github.com/kaitranntt/ccs/commit/492ee5b083520ac3d8e86d1cf26a677a940e5850 ))
* **browser:** 完成 Phase 9 拖拽与指针动作能力 ([844b5f6 ](https://github.com/kaitranntt/ccs/commit/844b5f6c428e2d2db3e301c805790689c4020661 ))
* **cliproxy:** add --json flag to catalog command ([92d76ca ](https://github.com/kaitranntt/ccs/commit/92d76cad89e00ece4bc7a91dd1f28a3b2b22ee54 ))
* **cliproxy:** add 'max' thinking level for Claude Opus 4.7 ([45fe7ab ](https://github.com/kaitranntt/ccs/commit/45fe7ab08666addb0937cc46bc02ceb1fb91588c ))
* **cliproxy:** add Claude Opus 4.7 support ([6105812 ](https://github.com/kaitranntt/ccs/commit/61058123e10de6ed21cadc0d1450b08cd28df6db ))
* **cliproxy:** add thinking config to catalog --json and test false values ([c1d0a4d ](https://github.com/kaitranntt/ccs/commit/c1d0a4d2eb15d69a42498d13b2fa9fbe763451e6 ))
* **cliproxy:** include model metadata in catalog --json output ([6fc2262 ](https://github.com/kaitranntt/ccs/commit/6fc22625ac3917d4066e6ea96df80ad5952a8f85 ))
* **cliproxy:** separate core and plus provider sections ([f6c86b7 ](https://github.com/kaitranntt/ccs/commit/f6c86b79fcbc041e6c2b586f62078739032aab40 ))
* **glmt:** fix sequential tool_use block handling ([a0f9176 ](https://github.com/kaitranntt/ccs/commit/a0f91761ed6c95b229eaca8102d18bd119a0da9b ))
* **proxy:** add adaptive local port selection for OpenAI-compatible profiles ([15751e2 ](https://github.com/kaitranntt/ccs/commit/15751e2db5cc223111f85986add5156ee03631a8 ))
* **proxy:** add HEAD method support for health probe endpoints ([baa58c9 ](https://github.com/kaitranntt/ccs/commit/baa58c9543d6ec65548dcdad7c281ce68b8ea0eb ))
* **proxy:** support profile-scoped local proxy ports ([94bf1fb ](https://github.com/kaitranntt/ccs/commit/94bf1fbfe9b970eb7ce86881e958ddc4880e0d79 ))
### Bug Fixes
* **browser:** default browser tooling to manual opt-in ([6604357 ](https://github.com/kaitranntt/ccs/commit/6604357b2262e06502be49f4678063b887404ce2 ))
* **browser:** harden Browser MCP sessions and artifacts ([7732b20 ](https://github.com/kaitranntt/ccs/commit/7732b2039ab8501669465f524dc27b3037a7c5b7 ))
* **browser:** harden runtime policy edge cases ([039ed63 ](https://github.com/kaitranntt/ccs/commit/039ed63a390da270fa5bb1685239508a21509d5c ))
* **browser:** preserve opt-in browser settings and env isolation ([c24033d ](https://github.com/kaitranntt/ccs/commit/c24033dc6b301c27a0fe2c75d1e4327222b14313 ))
* **browser:** 修复 download 事件的 pageIndex 过滤 ([40c718c ](https://github.com/kaitranntt/ccs/commit/40c718c584428a9dee61a15e172157935a7ad39f ))
* **browser:** 对齐 browser status 输出字段 ([acdb93e ](https://github.com/kaitranntt/ccs/commit/acdb93e1a8733c1c9eac803b04785a8113b1ea26 ))
* **browser:** 对齐 phase11e 与 upstream browser 配置体系 ([d8954e9 ](https://github.com/kaitranntt/ccs/commit/d8954e9453cb6d9d92f84eeb27db79e839d1e9ce ))
* **ci:** address reviewer follow-up findings ([572b184 ](https://github.com/kaitranntt/ccs/commit/572b18422076f03d2d8ccbfce802740148a5fe36 ))
* **ci:** isolate bun cache per job ([08edf1e ](https://github.com/kaitranntt/ccs/commit/08edf1eef4459927ef72b794df0969b33460dd81 ))
* **ci:** keep fast bucket stable for commonjs tests ([6d4dcc1 ](https://github.com/kaitranntt/ccs/commit/6d4dcc1174f4c6382233e12cfa9a211ddde367db ))
* **ci:** keep release workflows on full test coverage ([b314cf3 ](https://github.com/kaitranntt/ccs/commit/b314cf353ed38ea16919ba4fa0029dfc5cf66c0b ))
* **ci:** rely on idempotent dependency sync ([f4f33b0 ](https://github.com/kaitranntt/ccs/commit/f4f33b0b5f10c62d692ff81a9d444898e5db867c ))
* **ci:** stop caching node_modules in GitHub Actions ([1b3ca82 ](https://github.com/kaitranntt/ccs/commit/1b3ca82a8408c25ab3b7911c64483fc87a3bdbb6 ))
* **ci:** tighten slow bucket guardrails ([5af639d ](https://github.com/kaitranntt/ccs/commit/5af639ddf76ba7f84552d7b841c027c235cace1d ))
* **ci:** use PAT token for dev release pushes ([06fffd3 ](https://github.com/kaitranntt/ccs/commit/06fffd302506aff1cc645e41a87175ba5cde5cc1 ))
* **ci:** validate cached ui dependencies ([02747ed ](https://github.com/kaitranntt/ccs/commit/02747edb7266e3e260fd09a15ec28b78340d8c2c ))
* **cliproxy:** address Presto review feedback on Opus 4.7 ([0d09199 ](https://github.com/kaitranntt/ccs/commit/0d09199439d335d948ac1a7e48e00cac5b18be27 )), closes [atrvd/ccs#8 ](https://github.com/atrvd/ccs/issues/8 ) [#2 ](https://github.com/kaitranntt/ccs/issues/2 ) [#3 ](https://github.com/kaitranntt/ccs/issues/3 )
* **cliproxy:** guard against undefined catalog and add issueUrl field ([02c5a5c ](https://github.com/kaitranntt/ccs/commit/02c5a5c7a17d580606b4666362c6a9840a49e1d7 ))
* **cliproxy:** keep provider sections consistent for variants ([254abd5 ](https://github.com/kaitranntt/ccs/commit/254abd504f7e53a4b3b8b22d2ef20f18ae3e1b0a ))
* **cliproxy:** preserve adaptive thinking on opus 4.7 paths ([71deda5 ](https://github.com/kaitranntt/ccs/commit/71deda553ad84defdf9dfcc8b90fb7fc1d5c6833 ))
* **cliproxy:** preserve explicit false values in catalog --json ([f5520de ](https://github.com/kaitranntt/ccs/commit/f5520de42ad76ec9ed22bf36893e68d8fba0af4e ))
* **cliproxy:** quarantine exhausted quota accounts ([478d64a ](https://github.com/kaitranntt/ccs/commit/478d64a50ab7d6aef8507efe92971641ad523b09 ))
* **cliproxy:** route plus backend to maintained fork ([3d22bb0 ](https://github.com/kaitranntt/ccs/commit/3d22bb07f0d551959498c76939ba83dd4ee1d948 ))
* **cliproxy:** scope Opus 4.7 rollout to verified providers ([571538d ](https://github.com/kaitranntt/ccs/commit/571538dc1c3cf08929705f3efde9d944ba48de59 ))
* **cliproxy:** use adaptive thinking for Claude Opus 4.7 ([46920db ](https://github.com/kaitranntt/ccs/commit/46920dbc08a18c4c853547fe1e1ec32981e765de ))
* **husky:** re-exec pre-push under bash for sh compatibility ([dea704c ](https://github.com/kaitranntt/ccs/commit/dea704c57dea8ba9c9538ddea6638fbd4e5c7660 ))
* **image-analysis:** clear runtime env on native-read fallback ([4cf826e ](https://github.com/kaitranntt/ccs/commit/4cf826efa24dff5b173881452219e92a4f341381 ))
* **image-analysis:** clear runtime env on native-read fallback ([63082d4 ](https://github.com/kaitranntt/ccs/commit/63082d4aed903d83e09dc3ac85f630367fe7a32b ))
* keep browser setup config-only ([f36c4a6 ](https://github.com/kaitranntt/ccs/commit/f36c4a6e32c7daf92054707dc4f64eff462aafe5 ))
* preserve codex effort suffixes in dashboard profiles ([e2ca197 ](https://github.com/kaitranntt/ccs/commit/e2ca19739784d7ad864928af32abed314a48899c ))
* preserve supplemental codex effort variants ([3a63cc0 ](https://github.com/kaitranntt/ccs/commit/3a63cc04312b127cbaa31a1a2c2f58c1c3047515 ))
* **proxy:** avoid undefined status port output ([54c3b2d ](https://github.com/kaitranntt/ccs/commit/54c3b2d40b08f699715905b151d085d37c5af789 ))
* **proxy:** clarify shared port fallback and legacy 3456 handling ([d559191 ](https://github.com/kaitranntt/ccs/commit/d5591913efaada396e185fd522b9047476f2840b ))
* **proxy:** disambiguate activate without profile ([630a493 ](https://github.com/kaitranntt/ccs/commit/630a493ccad8e3acac3559947eb5a8b362b7f446 ))
* **proxy:** handle end-of-options parsing ([2a80f7b ](https://github.com/kaitranntt/ccs/commit/2a80f7b1c193b839bcf4af691ae5b84ac6f44fd5 ))
* **proxy:** handle legacy stop and preferred ports ([391bddd ](https://github.com/kaitranntt/ccs/commit/391bdddc2232836f9e49dcfa710c7ad1ffac19b9 ))
* **proxy:** harden stale daemon ownership checks ([1cfed73 ](https://github.com/kaitranntt/ccs/commit/1cfed73ca5bb8d1e8def81aeb63ebe36a074badd ))
* **proxy:** honor subcommand help flags ([dfd070c ](https://github.com/kaitranntt/ccs/commit/dfd070c9c6074424e1ce911c7a004547ce66d05f ))
* **proxy:** ignore legacy singleton session file ([f345cf4 ](https://github.com/kaitranntt/ccs/commit/f345cf441e474e1fecbef95fbff8c95351079721 ))
* **proxy:** parse flag options before profile args ([6928d8b ](https://github.com/kaitranntt/ccs/commit/6928d8bb65cb51ab6b1e1b7095989931c040da80 ))
* **proxy:** persist daemon state after startup ([c0c1198 ](https://github.com/kaitranntt/ccs/commit/c0c119867abfce30a9ddb6b8b9a4365809c897a7 ))
* **proxy:** preserve legacy state and exact ports ([24c2484 ](https://github.com/kaitranntt/ccs/commit/24c24847f7c981cc0654c2cd5a6310edca4609fe ))
* **proxy:** preserve running daemons on restart failure ([db32d15 ](https://github.com/kaitranntt/ccs/commit/db32d15d86316d07f1325443e218a1a642135219 ))
* **proxy:** retain explicit profile names in status ([afcb1ab ](https://github.com/kaitranntt/ccs/commit/afcb1abf9e507155f0978898ac5b9d565ec3af88 ))
* **proxy:** retry candidate ports on bind conflict ([8ad2763 ](https://github.com/kaitranntt/ccs/commit/8ad2763942d92ab665d7a2c742ca94ec969eac32 ))
* **proxy:** retry raced dynamic port binds ([7cf5553 ](https://github.com/kaitranntt/ccs/commit/7cf555356aa1d8b42c7860cc924381d4cc81aecb ))
* **proxy:** update tests for tool_result+text and disconnect handler changes ([b2a4579 ](https://github.com/kaitranntt/ccs/commit/b2a45790989a0a1c72fe1f8b72aff7f3f499b459 ))
* route codex remote https through local proxy chain ([7a9e67e ](https://github.com/kaitranntt/ccs/commit/7a9e67e6dc7de70709b6baaa3a9a1158b27fbd33 ))
* **runtime:** isolate nested Anthropic env across delegation paths ([f78c30a ](https://github.com/kaitranntt/ccs/commit/f78c30ac50cb2351a77b840c483ecb94c6a9ab6d ))
* **runtime:** strip inherited Anthropic routing env selectively ([9ae85b8 ](https://github.com/kaitranntt/ccs/commit/9ae85b82c12c45e73f0819ca33ad5ffd2f3ac323 ))
* **runtime:** strip reintroduced Anthropic routing env ([1fd2fb8 ](https://github.com/kaitranntt/ccs/commit/1fd2fb83fbf08ef9ef9a03fb69d9c6cea5f8eb37 ))
* **settings-profile:** pass selective Anthropic env stripping to Claude launches ([5881a50 ](https://github.com/kaitranntt/ccs/commit/5881a505d9b824aa9c7f8a9fb06d7122a94325d5 ))
* **settings-profile:** preserve non-routing env for Claude launches ([2191f0a ](https://github.com/kaitranntt/ccs/commit/2191f0a6c7ee9121bd28da6b56d58d9f50e119cc ))
* **test:** correct expected error message text ([889d3d8 ](https://github.com/kaitranntt/ccs/commit/889d3d89e9e1d93a55356def036806c2982506d9 ))
* **test:** stabilize proxy integration server ports ([e6ac91b ](https://github.com/kaitranntt/ccs/commit/e6ac91b9c716d21ba2a0493b4023efaa5e126975 ))
* **test:** stabilize suite isolation for dev pushes ([89a32c2 ](https://github.com/kaitranntt/ccs/commit/89a32c2ecd269d0d4b1da4455bac2fa942a5585d ))
* **transformers:** preserve tool ordering across proxy streams ([399f403 ](https://github.com/kaitranntt/ccs/commit/399f403322ad8be4ce23a286872fd19c76efa0f4 ))
* **ui:** surface the max thinking level in settings and help ([b3bc176 ](https://github.com/kaitranntt/ccs/commit/b3bc17639ca632cf456f3c0e983c1bc24e9546bc ))
### Hotfixes
* **cliproxy:** fallback from deleted CLIProxyAPIPlus to original backend ([b8b48a9 ](https://github.com/kaitranntt/ccs/commit/b8b48a99ba8d9e17398886a005c7c64f011ad6f3 )), closes [#1062 ](https://github.com/kaitranntt/ccs/issues/1062 )
* close cliproxy plus fallback gaps ([dd90ea7 ](https://github.com/kaitranntt/ccs/commit/dd90ea7e2fa4dcac6227009caacc1f76711c79b5 ))
* preserve plus fallback state and guard variant updates ([3e7ce17 ](https://github.com/kaitranntt/ccs/commit/3e7ce1743b491a7698b210df05bdc815cc02191b ))
### Documentation
* **browser:** 增补 11A 断言与诊断能力说明 ([26baa01 ](https://github.com/kaitranntt/ccs/commit/26baa019e3c54a0cad6cafab7a6002e04e6b0dbe ))
* **browser:** 增补 11B sequence 能力说明 ([78f3879 ](https://github.com/kaitranntt/ccs/commit/78f3879e19adfc90464fb2aca00a218b5efe55d5 ))
* **browser:** 增补 11C 执行策略能力说明 ([d0e6087 ](https://github.com/kaitranntt/ccs/commit/d0e6087126fdd9b5a0915229a2c6fd5395e9495c ))
* **browser:** 增补 11D 持久化与导入导出说明 ([3c791a4 ](https://github.com/kaitranntt/ccs/commit/3c791a467fba9605da341b10bacda460564d9759 ))
* **browser:** 增补 11E 跨 page orchestration 说明 ([f6ef59e ](https://github.com/kaitranntt/ccs/commit/f6ef59ef96fdce0571e1b6dd0580a5499615fd52 ))
* **browser:** 增补 browser MCP 第七阶段设计 ([a5ef77a ](https://github.com/kaitranntt/ccs/commit/a5ef77a3d8928440d927c84d207477993cae3d6a ))
* **browser:** 增补 browser MCP 第八阶段设计 ([26aa8f4 ](https://github.com/kaitranntt/ccs/commit/26aa8f4c20f4b60390387b40625ee5e5fa130bf6 ))
* **browser:** 增补 browser MCP 第六阶段设计 ([e0b58ee ](https://github.com/kaitranntt/ccs/commit/e0b58ee1621df9aa7fddc9b0fcdaef12ee865a0c ))
* **browser:** 增补 Phase 10A recording 能力说明 ([b477a75 ](https://github.com/kaitranntt/ccs/commit/b477a75d0e110d4611babefcc34aee4a77be5aeb ))
* **browser:** 增补 Phase 10B replay 能力说明 ([2099145 ](https://github.com/kaitranntt/ccs/commit/2099145e2cf0dd530cb144fb296c8e7e66e848c4 ))
* **browser:** 增补 Phase 10C orchestration 能力说明 ([c708bde ](https://github.com/kaitranntt/ccs/commit/c708bde817bc11ab87065e514078b2d2f725db9b ))
* **cliproxy:** clarify catalog --json output format in JSDoc ([f090c32 ](https://github.com/kaitranntt/ccs/commit/f090c32c2f23065dbc1633ab9689124cffe4411d ))
* **cliproxy:** document v18 config bump for Opus 4.7 ([faca421 ](https://github.com/kaitranntt/ccs/commit/faca421705ba7279e3c2ed3a74afca51b88d770c )), closes [atrvd/ccs#8 ](https://github.com/atrvd/ccs/issues/8 ) [#1 ](https://github.com/kaitranntt/ccs/issues/1 )
* **contrib:** align local gate shortcuts ([ddfbcb6 ](https://github.com/kaitranntt/ccs/commit/ddfbcb63f44eb6f379765bf5e44f42189d9012f3 ))
* **contrib:** clarify CI lanes and parity gates ([c9eaae1 ](https://github.com/kaitranntt/ccs/commit/c9eaae17c184a91addc2df85733db3d6339bb720 ))
* **proxy:** document multi-profile proxy lifecycle ([8b27110 ](https://github.com/kaitranntt/ccs/commit/8b2711062eb2076858d414f29af01d046642fa35 ))
* remove maintainer-only runner info from contributor docs ([a3f5aff ](https://github.com/kaitranntt/ccs/commit/a3f5aff45d06c3c200e568d92217a56525ec3dbf ))
* **test-bucket:** document slowTests addition criteria ([eab2b48 ](https://github.com/kaitranntt/ccs/commit/eab2b48f2c9a536453411d9bde2c8c5867f57162 ))
### Performance Improvements
* **test-bucket:** only serialize slow bucket, parallelize fast ([6b5c74a ](https://github.com/kaitranntt/ccs/commit/6b5c74aa4baaac2b43da73250e9e8e30f68aafa5 ))
### Tests
* align browser launch assertions with setup guidance ([341e612 ](https://github.com/kaitranntt/ccs/commit/341e612e48df4f9663cd3bd2e0ecd0403f00327c ))
* **browser:** split Browser MCP hook coverage by domain ([50fa27f ](https://github.com/kaitranntt/ccs/commit/50fa27f0a55b8ff8eeccbe5b19c4d04aa8724605 ))
* **browser:** 扩展 fulfill interception harness ([23eccb2 ](https://github.com/kaitranntt/ccs/commit/23eccb24f3efa285f6eb3894c0d58a3b0f15c987 ))
* **browser:** 扩展 network interception harness ([68b5683 ](https://github.com/kaitranntt/ccs/commit/68b56839db7914887db6a535e5b0ebb9c2beb8a4 ))
* **browser:** 扩展 richer matching interception harness ([ef06564 ](https://github.com/kaitranntt/ccs/commit/ef06564b6063e3837706fd8eae4e6d3f315f7f7d ))
* **browser:** 添加 Phase 6A 失败测试 ([491e9db ](https://github.com/kaitranntt/ccs/commit/491e9db51ebef504ac8580b0002df31888b9ce8d ))
* **browser:** 添加 Phase 6B fulfill 失败测试 ([1fbb53c ](https://github.com/kaitranntt/ccs/commit/1fbb53c4b1355d91b0031f6e5afdec5ec184c14b ))
* **browser:** 添加 Phase 7 richer matching 失败测试 ([cb415b4 ](https://github.com/kaitranntt/ccs/commit/cb415b41275bdade0570ef6c46fcb10004b6485b ))
* **browser:** 补充 Phase 6B 边界覆盖并同步文档 ([447b5c8 ](https://github.com/kaitranntt/ccs/commit/447b5c8bc1b311530bf533fa836218ae40f991e0 ))
* **browser:** 补充 Phase 7 回归覆盖并同步文档 ([126c30a ](https://github.com/kaitranntt/ccs/commit/126c30ac1af20b3ac6088b17e773ab5a43711f16 ))
* **ci:** cover pr workflow coverage ([cf5fc96 ](https://github.com/kaitranntt/ccs/commit/cf5fc96b7d25b55100045f3b3595aa2eb982445b ))
* **ci:** cover push quality workflow ([b9f5783 ](https://github.com/kaitranntt/ccs/commit/b9f5783facddb2decb702e378e558c5faac2fc80 ))
* **ci:** keep split browser MCP suites in slow bucket ([5081231 ](https://github.com/kaitranntt/ccs/commit/508123166774ecbcb76101bbd4aa6209f693b607 ))
* **cliproxy:** add catalog --json tests and clarify flag priority ([c1d462e ](https://github.com/kaitranntt/ccs/commit/c1d462ea41d4086cb6facb808131a51cb85730ff ))
* **cliproxy:** cover Claude Opus 4.7 in Claude provider catalog ([7492688 ](https://github.com/kaitranntt/ccs/commit/7492688effa2ab2dd12094dc4b6d9f7f2e8d909b )), closes [atrvd/ccs#8 ](https://github.com/atrvd/ccs/issues/8 ) [#4 ](https://github.com/kaitranntt/ccs/issues/4 )
* **model-pricing:** add cache pricing coverage for Opus 4.7 ([de0f8b3 ](https://github.com/kaitranntt/ccs/commit/de0f8b32642c2eda34efc8d06317f91ee00957ba )), closes [atrvd/ccs#8 ](https://github.com/atrvd/ccs/issues/8 ) [#6 ](https://github.com/kaitranntt/ccs/issues/6 )
* **model-pricing:** align Opus 4.7 cache coverage ([21ec661 ](https://github.com/kaitranntt/ccs/commit/21ec661106b649c0ff626501a71a461478a63edd ))
* **proxy:** cover multi-profile daemon ports ([8942be3 ](https://github.com/kaitranntt/ccs/commit/8942be3afcff581476aa82161ec7ddce0aaea35c ))
* **proxy:** gate proxy e2e coverage in checks ([69da284 ](https://github.com/kaitranntt/ccs/commit/69da284104dbd5ab0c367ac08fcafeb1cd079770 ))
### CI
* add fast test budget warning ([4c67750 ](https://github.com/kaitranntt/ccs/commit/4c677507d0e568418a79c6c6893f62e2fe560049 ))
* preserve fast test budget summary on failure ([aa4a05e ](https://github.com/kaitranntt/ccs/commit/aa4a05e85922c787cada4dc1111469a1bcfdcfd6 ))
2026-04-24 04:24:34 +00:00
Kai (Tam Nhu) Tran and GitHub
6f815429c5
Merge pull request #1080 from kaitranntt/kai/release/promote-dev-to-main-260424
...
feat: promote dev to stable release
2026-04-24 00:21:07 -04:00
Tam Nhu Tran
af552f8bc8
chore(release): 7.73.1-dev.12
2026-04-24 00:15:12 -04:00
github-actions[bot]
654ce0d2f7
chore(release): 7.73.1-dev.12 [skip ci]
2026-04-24 04:07:19 +00:00
Kai (Tam Nhu) Tran and GitHub
9fbc7cb104
Merge pull request #1078 from kaitranntt/kai/chore/sync-main-into-dev-260424
...
chore: sync main hotfixes into dev
2026-04-24 00:03:59 -04:00
Tam Nhu Tran
7dd9aba810
chore: merge main hotfixes into dev
2026-04-23 23:49:18 -04:00
github-actions[bot]
2fdada9e55
chore(release): 7.73.1-dev.11 [skip ci]
2026-04-24 03:25:00 +00:00
Kai (Tam Nhu) Tran and GitHub
e4c7301a10
Merge pull request #1077 from kaitranntt/kai/fix/1042-codex-remote-proxy-hang
...
fix: route codex remote https through local proxy chain
2026-04-23 23:21:41 -04:00
Tam Nhu Tran
7a9e67e6dc
fix: route codex remote https through local proxy chain
2026-04-23 23:00:59 -04:00
github-actions[bot]
79be722e03
chore(release): 7.73.1-dev.10 [skip ci]
2026-04-24 01:42:55 +00:00
Kai (Tam Nhu) Tran and GitHub
4d13ea1a1d
Merge pull request #1076 from kaitranntt/kai/fix/1065-plus-backend-fork
...
fix(cliproxy): route plus backend to maintained fork
2026-04-23 21:39:07 -04:00
Tam Nhu Tran
3d22bb07f0
fix(cliproxy): route plus backend to maintained fork
2026-04-23 21:25:29 -04:00