Commit Graph
1792 Commits
Author SHA1 Message Date
semantic-release-bot 7355360e8c chore(release): 7.18.2 [skip ci]
## [7.18.2](https://github.com/kaitranntt/ccs/compare/v7.18.1...v7.18.2) (2026-01-13)

### Bug Fixes

* **ci:** isolate concurrency groups by comment author ([3163509](https://github.com/kaitranntt/ccs/commit/316350905233d776968f53732974a77997513f24))
* **ci:** isolate concurrency groups by comment author ([#322](https://github.com/kaitranntt/ccs/issues/322)) ([1d33012](https://github.com/kaitranntt/ccs/commit/1d33012b4e5ad02bac63f9b559f64c3efdf26044))
2026-01-13 18:50:44 +00:00
github-actions[bot] c122754dd1 chore(release): 7.18.1-dev.1 [skip ci] 2026-01-13 18:50:17 +00:00
Kai (Tam Nhu) TranandGitHub 1d33012b4e fix(ci): isolate concurrency groups by comment author (#322)
fix(ci): isolate concurrency groups by comment author
2026-01-13 13:49:42 -05:00
kaitranntt 3163509052 fix(ci): isolate concurrency groups by comment author
Previous fix was incomplete - both human /review comments and bot
progress comments were issue_comment events sharing the same
concurrency group.

Now includes comment author in concurrency group:
- Human: ai-review-issue_comment-kaitranntt-320
- Bot: ai-review-issue_comment-ccs-agy-reviewer[bot]-320
- PR/dispatch: ai-review-<event>-system-320

This completely isolates bot activity from human-triggered reviews.
2026-01-13 13:49:20 -05:00
semantic-release-bot a6346dc393 chore(release): 7.18.1 [skip ci]
## [7.18.1](https://github.com/kaitranntt/ccs/compare/v7.18.0...v7.18.1) (2026-01-13)

### Bug Fixes

* **ci:** add explicit instruction to post review as PR comment ([85f6bc0](https://github.com/kaitranntt/ccs/commit/85f6bc07d44f54673163ad4fed6045a37ccabad0))
* **ci:** exclude bot comments from triggering AI review ([ce70617](https://github.com/kaitranntt/ccs/commit/ce70617ee94645399ba05af581240a696ca9cfed))
* **ci:** prevent self-cancelling AI review workflow ([120aca4](https://github.com/kaitranntt/ccs/commit/120aca466d646ee1c770b2712a0d2742d5dd62d6))
* **ci:** prevent self-cancelling AI review workflow ([#321](https://github.com/kaitranntt/ccs/issues/321)) ([fa1899f](https://github.com/kaitranntt/ccs/commit/fa1899f4611d570b2a8bf5e1a5342d5392466263))
* **delegation:** improve profile discovery and CI workflow ([#310](https://github.com/kaitranntt/ccs/issues/310)) ([affdaea](https://github.com/kaitranntt/ccs/commit/affdaead80c3635f49ef562cac81bde8db0cab23))
* **delegation:** only check profiles defined in config.yaml ([0075248](https://github.com/kaitranntt/ccs/commit/0075248273e2d4912c4e277deebd6e668c5b3466))
* **doctor:** use dynamic profile discovery for delegation check ([f88ad8e](https://github.com/kaitranntt/ccs/commit/f88ad8e78198302f68ee0b420075d704ab01d8ff))
* **ui:** improve sidebar navigation for collapsible menu items ([12b68f9](https://github.com/kaitranntt/ccs/commit/12b68f9f136c3529ac976eaec9e8903b43185e89))
* **ui:** improve sidebar navigation for collapsible menu items ([#313](https://github.com/kaitranntt/ccs/issues/313)) ([e2e2ecd](https://github.com/kaitranntt/ccs/commit/e2e2ecda3c1948fb90f9b47b1e31782ef30cc31f))
2026-01-13 18:45:15 +00:00
Kai (Tam Nhu) TranandGitHub fa1899f461 fix(ci): prevent self-cancelling AI review workflow (#321)
fix(ci): prevent self-cancelling AI review workflow
2026-01-13 13:44:08 -05:00
github-actions[bot] 28f3206a20 chore(release): 7.18.0-dev.6 [skip ci] 2026-01-13 18:42:48 +00:00
kaitranntt 120aca466d fix(ci): prevent self-cancelling AI review workflow
Root cause: Bot progress comments triggered issue_comment events,
which created new workflow runs with the same concurrency group,
causing cancel-in-progress to kill the original review.

Fixes:
1. Add event_name to concurrency group (prevents cross-event cancellation)
2. Explicit filter for ccs-agy-reviewer[bot] comments (belt-and-suspenders)

Closes race condition causing 25+ cancelled AI review runs.
2026-01-13 13:41:30 -05:00
kaitranntt 805ff64a7e Merge remote-tracking branch 'origin/main' into dev 2026-01-13 13:40:08 -05:00
kaitranntt 464b410e8b feat(dashboard): add optional login authentication (#319)
Add session-based username/password auth for CCS dashboard:
- Backend: Express session middleware with bcrypt password verification
- Frontend: React AuthContext, login page, protected routes
- Config: dashboard_auth section in config.yaml + env var overrides
- Security: Rate limiting (5 attempts/15min), persistent session secret
- 16 unit tests for auth middleware

Auth disabled by default for backward compatibility.
2026-01-13 13:27:38 -05:00
kaitranntt 22c7d4a20d feat(doctor): add --help flag with comprehensive command documentation
- Add showHelp() with usage, options, checks, examples, exit codes
- Update handleDoctorCommand to accept args array instead of boolean
- Update ccs.ts to pass restArgs to doctor command
- Add doctor to CLAUDE.md Help Location Reference table
2026-01-13 11:43:27 -05:00
Kai (Tam Nhu) TranGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
e2e2ecda3c fix(ui): improve sidebar navigation for collapsible menu items (#313)
* fix(doctor): use dynamic profile discovery for delegation check

Replace hardcoded ['glm', 'kimi'] list with DelegationValidator.getReadyProfiles()
to detect all configured *.settings.json profiles including mm, or1, g7, etc.

* fix(ci): exclude bot comments from triggering AI review

Bot progress comments were triggering new workflow runs,
which cancelled in-progress reviews due to concurrency group.
Added check for github.event.comment.user.type != 'Bot'.

* chore(release): 7.18.0-dev.1 [skip ci]

* fix(delegation): only check profiles defined in config.yaml

Previously getReadyProfiles() scanned all *.settings.json files,
including orphan files (ghcp, kiro) not in config.yaml.

Now reads from config.yaml:
- profiles section (excluding 'default')
- cliproxy.providers section

Fixes doctor showing 11 profiles instead of configured 9.

* chore(release): 7.18.0-dev.3 [skip ci]

* fix(ui): improve sidebar navigation for collapsible menu items

- CLIProxy Plus click now navigates to Overview AND opens submenu
- Parent menu item highlights when any child route is active
- Provides consistent visual hierarchy across all collapsible menus

* chore(release): 7.18.0-dev.4 [skip ci]

* fix(ci): add explicit instruction to post review as PR comment

The AI reviewer was completing the review but not posting it because
the prompt didn't explicitly instruct it to use gh pr comment.

* chore(release): 7.18.0-dev.5 [skip ci]

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-11 15:24:35 -05:00
github-actions[bot] dcc5c5d4ed chore(release): 7.18.0-dev.5 [skip ci] 2026-01-11 20:21:51 +00:00
kaitranntt 85f6bc07d4 fix(ci): add explicit instruction to post review as PR comment
The AI reviewer was completing the review but not posting it because
the prompt didn't explicitly instruct it to use gh pr comment.
2026-01-11 15:20:46 -05:00
github-actions[bot] 8d634fece6 chore(release): 7.18.0-dev.4 [skip ci] 2026-01-11 19:50:56 +00:00
kaitranntt 12b68f9f13 fix(ui): improve sidebar navigation for collapsible menu items
- CLIProxy Plus click now navigates to Overview AND opens submenu
- Parent menu item highlights when any child route is active
- Provides consistent visual hierarchy across all collapsible menus
2026-01-11 14:49:41 -05:00
github-actions[bot] 14f005a742 chore(release): 7.18.0-dev.3 [skip ci] 2026-01-09 06:20:17 +00:00
kaitranntt b7508910b6 chore: merge main into dev (resolve version conflict) 2026-01-09 01:19:09 -05:00
Kai (Tam Nhu) TranGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
affdaead80 fix(delegation): improve profile discovery and CI workflow (#310)
* fix(doctor): use dynamic profile discovery for delegation check

Replace hardcoded ['glm', 'kimi'] list with DelegationValidator.getReadyProfiles()
to detect all configured *.settings.json profiles including mm, or1, g7, etc.

* fix(ci): exclude bot comments from triggering AI review

Bot progress comments were triggering new workflow runs,
which cancelled in-progress reviews due to concurrency group.
Added check for github.event.comment.user.type != 'Bot'.

* chore(release): 7.18.0-dev.1 [skip ci]

* fix(delegation): only check profiles defined in config.yaml

Previously getReadyProfiles() scanned all *.settings.json files,
including orphan files (ghcp, kiro) not in config.yaml.

Now reads from config.yaml:
- profiles section (excluding 'default')
- cliproxy.providers section

Fixes doctor showing 11 profiles instead of configured 9.

* chore(release): 7.18.0-dev.2 [skip ci]

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-09 00:18:30 -06:00
Kai (Tam Nhu) TranandGitHub 1016cc47e2 Merge pull request #309 from kaitranntt/kai/fix/delegation-validator-config-only
fix(delegation): only check profiles defined in config.yaml
2026-01-09 00:17:04 -06:00
kaitranntt 0075248273 fix(delegation): only check profiles defined in config.yaml
Previously getReadyProfiles() scanned all *.settings.json files,
including orphan files (ghcp, kiro) not in config.yaml.

Now reads from config.yaml:
- profiles section (excluding 'default')
- cliproxy.providers section

Fixes doctor showing 11 profiles instead of configured 9.
2026-01-09 01:13:51 -05:00
github-actions[bot] 150b08fa6e chore(release): 7.18.0-dev.1 [skip ci] 2026-01-09 06:08:16 +00:00
Kai (Tam Nhu) TranandGitHub b080280ecc Merge pull request #308 from kaitranntt/kai/fix/delegation-dynamic-profiles
fix(doctor): use dynamic profile discovery for delegation check
2026-01-09 00:07:14 -06:00
kaitranntt ce70617ee9 fix(ci): exclude bot comments from triggering AI review
Bot progress comments were triggering new workflow runs,
which cancelled in-progress reviews due to concurrency group.
Added check for github.event.comment.user.type != 'Bot'.
2026-01-09 01:05:37 -05:00
kaitranntt f88ad8e781 fix(doctor): use dynamic profile discovery for delegation check
Replace hardcoded ['glm', 'kimi'] list with DelegationValidator.getReadyProfiles()
to detect all configured *.settings.json profiles including mm, or1, g7, etc.
2026-01-09 00:18:35 -05:00
kaitranntt c8c1894272 fix(ui): reduce excessive AGY quota API requests
- Match staleTime to refetchInterval (60s) to prevent early refetches

- Disable refetchOnWindowFocus to prevent tab switch triggers

- Disable refetchOnMount to prevent HMR/navigation remount triggers
2026-01-09 00:11:18 -05:00
kaitranntt 7c5f36580a docs(cli): add extended thinking section to help
- W3: explain thinking levels (off/auto/low/medium/high/xhigh)

- W3: document supported providers (agy, gemini)
2026-01-08 16:56:31 -05:00
kaitranntt 35f28a6e77 fix(ui): add provider indicator, retry button, and optimistic locking
- U4: add blue info box showing supported providers

- W1: add inline retry button in error alert

- W4: track lastModified, handle 409 conflict with auto-refresh
2026-01-08 16:56:05 -05:00
kaitranntt ba19e1fcda fix(api): add optimistic locking for thinking config
- W4: return lastModified on GET /api/thinking

- W4: check mtime on PUT, return 409 on conflict
2026-01-08 16:55:45 -05:00
kaitranntt f7cc9f4653 fix(config): improve YAML error messages and thinking validation
- U3: show line/column/snippet for YAML syntax errors

- W2: warn when thinking: true used instead of object
2026-01-08 16:55:31 -05:00
kaitranntt d5652de634 fix(cliproxy): improve thinking flag validation and warnings
- U1: reject --thinking with no value (show usage hint)

- U2: warn when provider doesn't support thinking budget
2026-01-08 16:55:14 -05:00
kaitranntt 3ea549addd fix(ui): add thinking tab to URL sync conditional 2026-01-08 16:26:50 -05:00
kaitranntt b996153e7f fix(ui): add missing useThinkingConfig export to barrel file 2026-01-08 16:24:17 -05:00
kaitranntt 36bcc04133 fix(cliproxy): add case-insensitive model lookup
Normalize model IDs to lowercase for comparison in findModel()
2026-01-08 15:50:05 -05:00
kaitranntt b634f365f3 fix(ui): add fetch timeout and abort controller cleanup
- Add 10s timeout for API requests using AbortController
- Clean up pending requests on unmount to prevent memory leaks
2026-01-08 15:49:40 -05:00
kaitranntt 31b9520d54 fix(api): add override type and provider_overrides validation
- Reject objects/arrays for override field (only string/number)
- Validate provider_overrides keys and values against valid levels
2026-01-08 15:49:26 -05:00
kaitranntt 19e52399fe fix(config): add null guard and document nested paren limitation
- Add optional chaining for tier_defaults to prevent crash
- Document nested parenthesis matching limitation
2026-01-08 15:49:10 -05:00
kaitranntt 3060373797 fix(cli): add --thinking=value format and improve flag handling
- Support --thinking=value in addition to --thinking value
- Warn when multiple --thinking flags detected (uses first)
- Document intentional negative number blocking
2026-01-08 15:48:55 -05:00
kaitranntt 5f8d23c60b fix(cliproxy): add NaN/Infinity and empty string validation
- Add Number.isFinite() check to reject NaN/Infinity budgets
- Add explicit empty string handling before level validation
2026-01-08 15:48:39 -05:00
kaitranntt 3bd3e379fe test(cliproxy): add unit tests for thinking validator
- test budget bounds and constants

- test off/auto/level values handling

- test budget-type and level-type models

- test edge cases and unknown models

Refs #307
2026-01-08 15:20:37 -05:00
kaitranntt 0a95f361a2 feat(ui): add Thinking settings tab to dashboard
- add ThinkingSection with mode selector and tier defaults

- add useThinkingConfig hook for API integration

- add tab navigation for Thinking settings

- add ThinkingConfig types for UI

Refs #307
2026-01-08 15:20:12 -05:00
kaitranntt 9a2598fb61 feat(api): add /api/thinking endpoints for budget config
- GET /api/thinking returns current config

- PUT /api/thinking updates mode/override/tier_defaults

- validate override bounds and level names

Refs #307
2026-01-08 15:19:57 -05:00
kaitranntt 4d361b2ecf feat(cli): add --thinking flag for runtime budget override
- parse --thinking=value from CLI arguments

- pass thinking value to config generator

- update help command with --thinking documentation

Refs #307
2026-01-08 15:19:42 -05:00
kaitranntt 014b5e68b8 feat(cliproxy): inject thinking suffix into model config
- add getEffectiveThinkingValue() to resolve tier defaults

- append (budget) or (level) suffix to model ID

- validate thinking value against model capabilities

- respect mode: auto uses tier defaults, manual uses override

Refs #307
2026-01-08 15:19:15 -05:00
kaitranntt 0c2fd9cf5f feat(config): add ThinkingConfig to unified config
- add ThinkingConfig type with mode/override/tier_defaults

- add getThinkingConfig() and getEffectiveThinkingBudget() helpers

- support auto/off/manual modes with tier-based defaults

Refs #307
2026-01-08 15:19:00 -05:00
kaitranntt ebf7e04b72 feat(cliproxy): add ThinkingSupport to model catalog
- define ThinkingSupport interface (budget/levels/none types)

- add thinking config to agy and gemini models

- add getModelThinkingSupport() and supportsThinking() helpers

Refs #307
2026-01-08 15:18:44 -05:00
kaitranntt 82ef6804bb feat(cliproxy): add thinking budget validator module
- validate user-provided thinking values against model capabilities

- clamp out-of-range budgets, map invalid levels to closest valid

- export constants for budget bounds (MIN=0, MAX=100000)

- support off/auto/level names and numeric budgets

Refs #307
2026-01-08 15:18:29 -05:00
semantic-release-bot f290aae4cb chore(release): 7.18.0 [skip ci]
## [7.18.0](https://github.com/kaitranntt/ccs/compare/v7.17.0...v7.18.0) (2026-01-08)

### Features

* **codex:** inject OpenAI reasoning.effort per tier ([204eea0](https://github.com/kaitranntt/ccs/commit/204eea00ce006fd667ce8c9e71dad397423dae2d))

### Bug Fixes

* **ci:** only auto-review on PR opened, not synchronize ([6f65697](https://github.com/kaitranntt/ccs/commit/6f65697d74772751eb515d76c356f117aaa017d9))
* **cliproxy:** remove stable version cap, only v81-88 are faulty ([0abd021](https://github.com/kaitranntt/ccs/commit/0abd021d256513b88145f88c7a6a2d3a03e0746e))
* **codex-proxy:** security hardening and edge case fixes ([87cfcc5](https://github.com/kaitranntt/ccs/commit/87cfcc5b3cbecfdccaa56c1a02b24fb8b84eb654))

### Styles

* **ci:** enhance ai-review prompt with rich emoji formatting ([6dcc8b2](https://github.com/kaitranntt/ccs/commit/6dcc8b28601cba9067b248c9a6befb3f9c3e1d34))
2026-01-08 16:26:44 +00:00
Kai (Tam Nhu) TranandGitHub 348e9cf637 Merge pull request #305 from kaitranntt/dev
feat(codex): inject OpenAI reasoning.effort per tier
2026-01-08 10:25:40 -06:00
github-actions[bot] af65c832b9 chore(sync): merge main into dev after release [skip ci]
# Conflicts:
#	package.json
2026-01-08 16:20:17 +00:00