Commit Graph
4756 Commits
Author SHA1 Message Date
Tam Nhu Tran 5f9db033e7 chore: merge origin/dev into issue #1688
# Conflicts:
#	docs/reports/hardening-inventory.json
#	docs/reports/hardening-inventory.md
2026-08-08 22:29:46 -04:00
github-actions[bot] 184b7b9eb6 chore(release): 8.8.1-dev.21 2026-08-09 02:23:39 +00:00
Kai (Tam Nhu) Tran eb4ea02479 Merge pull request #1693 from kaitranntt/kai/fix/1686-openrouter-fetch
fix(proxy): stabilize upstream fetch transport
2026-08-08 22:19:16 -04:00
Tam Nhu Tran 0ddeb09955 chore(dev): merge v8.8.1-dev.20 for issue 1686 2026-08-08 22:09:27 -04:00
github-actions[bot] e9a3d2f7ac chore(release): 8.8.1-dev.20 2026-08-09 02:02:51 +00:00
Kai (Tam Nhu) Tran 560e288cf4 Merge pull request #1692 from kaitranntt/kai/fix/1685-resume-continuity
fix(auth): preserve explicit resume session continuity
2026-08-08 21:58:33 -04:00
Tam Nhu Tran ce8ad269f0 chore(merge): sync dev release v8.8.1-dev.19 2026-08-08 21:48:56 -04:00
github-actions[bot] 19204d01b0 chore(release): 8.8.1-dev.19 2026-08-09 01:42:06 +00:00
Kai (Tam Nhu) Tran b465557fd8 Merge pull request #1691 from poomsc/feat/bar-port-flag
feat(bar): support --port for ccs bar with sticky port persistence
2026-08-08 21:37:54 -04:00
Tam Nhu Tran 4d5449a493 Merge remote-tracking branch 'origin/dev' into kai/review/pr-1691
# Conflicts:
#	docs/reports/hardening-inventory.json
#	docs/reports/hardening-inventory.md
2026-08-08 21:31:32 -04:00
github-actions[bot] 82780ae506 chore(release): 8.8.1-dev.18 2026-08-09 01:25:09 +00:00
Kai (Tam Nhu) Tran 273d9b5e99 Merge pull request #1690 from poomsc/fix/bar-native-profile-reauth
fix(bar): stop false re-auth on non-default native subscription profiles
2026-08-08 21:20:58 -04:00
Tam Nhu Tran 1a80717f99 fix(bar): harden lifecycle process handling 2026-08-08 21:17:51 -04:00
Tam Nhu Tran 6841025bb4 feat(auth): share canonical Claude memory
Refs #1688
2026-08-08 21:17:32 -04:00
Tam Nhu Tran 3e38208b37 docs(readme): clarify supported proxy runtimes
Refs #1686
2026-08-08 21:17:24 -04:00
Tam Nhu Tran d8210cf011 fix(proxy): stabilize upstream fetch transport
Refs #1686
2026-08-08 21:17:13 -04:00
Tam Nhu Tran 379008383e chore(reports): refresh hardening inventory
Refs #1685
2026-08-08 21:17:12 -04:00
Tam Nhu Tran 6721d47502 fix(auth): preserve explicit resume session continuity
Refs #1685
2026-08-08 21:17:01 -04:00
Tam Nhu Tran 59eec74f40 chore: merge released dev into PR #1690 2026-08-08 21:14:50 -04:00
Tam Nhu Tran da2de60015 fix(bar): bound native credential and quota waits 2026-08-08 21:12:28 -04:00
github-actions[bot] 3e7f27fe9a chore(release): 8.8.1-dev.17 2026-08-09 01:07:37 +00:00
Kai (Tam Nhu) Tran d2f8939568 Merge pull request #1687 from yosnap/fix/coalesce-duplicate-system-messages
fix(proxy): hoist duplicate system messages before coalescing
2026-08-08 21:03:31 -04:00
Tam Nhu Tran c621241a2e test(proxy): harden system message ordering
Cover supported late-system and tool-result ordering invariants.

Refs #1687
2026-08-08 20:59:37 -04:00
poomscandClaude Fable 5 d27b53f235 fix(bar): keep sticky port across ccs bar stop via launch.json fallback
`ccs bar stop` deletes bar.json, so a bar.json-only sticky port is lost on
every stop/start cycle: the next launch reverted to 3000 and the probe could
no longer find a server still running on the previously chosen port.
resolveBarPort now falls back to the --port recorded in launch.json (written
by launch, not deleted by stop), which restores both the sticky port and
probe discovery after a stop.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-08 14:50:18 +07:00
poomscandClaude Fable 5 833473c5f6 fix(bar): treat cached quota rows as stale once their reset passes
A cached row whose next_reset has passed describes the previous quota
window — the quota snapped back at the boundary, so serving it for the rest
of the 10-min TTL shows wrong percentages and an already-elapsed reset time
in the bar. Both the per-profile TTL short-circuit and the rotating-slot
eligibility now mark such rows stale. Guarded by cachedAt < resetAt so a
post-reset payload that still reports a past reset cannot refetch-loop.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-08 14:43:52 +07:00
poomscandClaude Fable 5 a5a5b742e4 fix(bar): stop false re-auth on non-default native subscription profiles
Fixes the two collector-side root causes of #1601:

1. Claude per-profile credential reads were file-only, but on macOS Claude
   Code stores the OAuth token for an isolated CLAUDE_CONFIG_DIR in a
   per-directory Keychain item ("Claude Code-credentials-<sha256(dir)[0..8]>").
   The .credentials.json file never exists, so every isolated profile was
   parked with needsReauth:true forever. The reader now falls back to that
   Keychain item (file-first, same security-CLI read the shipped global
   fallback already performs; TTL-gated so it is not on every /summary).

2. Non-default profiles were cache-only forever, so they could never leave
   the parked state even with valid credentials. getNativeAccountRows now
   gives each surface ONE rotating live slot: the stalest eligible
   non-default profile is refreshed per pass, skipping profiles inside
   breaker/reauth cooldowns. Every account converges to real quota within a
   few polls while the per-pass upstream budget stays constant (<= 2 calls
   per surface regardless of profile count). Codex named profiles with valid
   auth but sparse payloads now yield an active quota-less row instead of a
   false needsReauth row.

Non-default rows keep paused:true (dimmed) even when freshly refreshed so
only the default renders active and rows do not flicker between polls.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-08 14:18:00 +07:00
poomscandClaude Fable 5 34608ce291 feat(bar): support --port for ccs bar with sticky port persistence
ccs bar always forced the dashboard onto port 3000 (first free of a
hardcoded candidate list), which collides with other local dev servers, and
bar.json was rewritten to 3000 on every launch.

- `ccs bar [launch] --port N` runs the server on exactly N: reuses a live
  server already on N, moves a running server from another port (SIGTERM via
  server.pid, wait for exit), errors clearly when N is busy or the value is
  invalid.
- The chosen port is persisted into launch.json args, so the Swift app
  self-starts the server on the same port.
- Without --port, launch and serve now try the port recorded in bar.json
  first (sticky), so the server keeps coming back on the port the user last
  chose instead of reverting to 3000.
- Bare flags (`ccs bar --port N`) route to the launch subcommand; --port is
  documented in `ccs bar --help`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-08 14:09:58 +07:00
sn4p.dev b720231077 fix(proxy): hoist duplicate system messages before coalescing
Claude Code sends the system prompt as the top-level `system` field and,
separately, sends skill/plugin listings as `role: "system"` entries inside
`messages` (#1459 made the transformer accept those). `transform()`
unconditionally prepends the top-level field, so once both are present the
OpenAI-compat payload ends up with two `system` messages that are not
adjacent. `coalesceMessages` only merges consecutive same-role messages and
explicitly skips `system`, so it cannot fix this.

Strict OpenAI-compatible backends (LiteLLM among them) reject that shape with:
  400 A 'system' message can only appear at index 0 of the messages array.

Add `hoistSystemMessages`, run before `coalesceMessages`, which extracts every
`system` message in encounter order and reinserts a single merged one at
index 0. Content-preserving, no behavior change when at most one system
message is present.
2026-08-06 11:28:18 +02:00
github-actions[bot] 7fb56d62e1 chore(release): 8.8.1-dev.16 2026-08-03 00:28:51 +00:00
Kai (Tam Nhu) Tran eaac5beecb Merge pull request #1682 from nmelo/fix/adopt-diverged-settings
Preserve diverged CCS settings and plugin registry files during reconciliation.
2026-08-02 20:24:32 -04:00
Tam Nhu Tran b022d362dd chore(hardening): refresh filesystem inventory 2026-08-02 20:21:19 -04:00
Tam Nhu Tran 7ae617f0ee fix(shared-manager): preserve diverged files safely 2026-08-02 20:21:09 -04:00
Nelson Melo fa6b27f159 fix(shared-manager): adopt diverged plugin registry files in linkInstancePlugins
The same atomic-rename divergence occurs in the plugins subtree: a
plugin install inside a session rewrites plugins/installed_plugins.json,
replacing the instance-level symlink with a regular file. The per-launch
relink then discarded it, so the plugin was effectively uninstalled on
every relaunch while settings.json still marked it enabled — sessions
then fail with 'Unknown skill: <plugin>:<skill>'.

Move adoptDivergedFileContent to fs-helpers (avoids a circular import)
and apply it to file-type plugin entries before re-linking.
2026-07-31 13:40:23 -04:00
Nelson Melo 481f013ec2 fix(shared-manager): adopt diverged settings.json content before re-linking
Claude Code saves settings.json atomically (temp file + rename), which
replaces the managed shared symlink with a regular file holding the
user's latest changes (see #57). The launch-time relink then deleted
that file without reading it, silently reverting plugin enables and any
other in-session settings change on every profile relaunch.

Adopt the diverged file's content into the canonical ~/.claude file
(with a .bak-ccs-adopt backup) before restoring the symlink, at both
the shared-level and instance-level reconciliation points.

Fixes #1681
2026-07-31 12:14:29 -04:00
github-actions[bot] f532f46c9f chore(release): 8.8.1-dev.15 2026-07-31 14:43:08 +00:00
Kai (Tam Nhu) Tran 0845094c8a Merge pull request #1680 from kaitranntt/kai/chore/ai-review-luna-xhigh
ci(review): configure explicit reasoning effort
2026-07-31 10:38:46 -04:00
Tam Nhu Tran 26c1393c16 ci(review): configure explicit reasoning effort 2026-07-31 10:32:32 -04:00
github-actions[bot] 9f1055c7f1 chore(release): 8.8.1-dev.14 2026-07-29 18:44:34 +00:00
Kai (Tam Nhu) Tran 6e8dd9c721 Merge pull request #1679 from kaitranntt/kai/fix/1660-gemini-auth
fix(cliproxy): probe Gemini OAuth support
2026-07-29 14:40:13 -04:00
Tam Nhu Tran 8d7446e3ff chore(hardening): refresh Gemini auth inventory 2026-07-29 14:24:20 -04:00
Tam Nhu Tran c4fc5e8985 test(cliproxy): cover Gemini OAuth capabilities 2026-07-29 14:24:13 -04:00
Tam Nhu Tran 19c6c3f457 fix(cliproxy): probe Gemini OAuth support 2026-07-29 14:24:12 -04:00
github-actions[bot] af2cb4b9b3 chore(release): 8.8.1-dev.13 2026-07-29 18:23:11 +00:00
Kai (Tam Nhu) Tran bd90056f9b Merge pull request #1678 from kaitranntt/kai/feat/1662-codex-fast-alias
feat(cliproxy): preserve scoped routing rules
2026-07-29 14:18:51 -04:00
Tam Nhu Tran 32c8c7b767 chore(hardening): refresh routing inventory 2026-07-29 14:02:52 -04:00
Tam Nhu Tran 2ce3bfca26 test(cliproxy): cover routing rule preservation 2026-07-29 14:02:40 -04:00
Tam Nhu Tran 9fb2016f90 feat(cliproxy): persist scoped routing rules 2026-07-29 14:02:40 -04:00
github-actions[bot] a77ee1b91a chore(release): 8.8.1-dev.12 2026-07-29 18:01:20 +00:00
Kai (Tam Nhu) Tran 6d754eff36 Merge pull request #1677 from kaitranntt/kai/feat/1651-context-window
feat(cliproxy): expose model context windows
2026-07-29 13:57:05 -04:00
github-actions[bot] d212a3136d chore(release): 8.8.1-dev.11 2026-07-29 17:49:21 +00:00