claude-cac 1.5.0 → 1.5.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +4 -4
  2. package/cac +67 -8
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -110,10 +110,10 @@ cac ls # = cac env ls
110
110
  | `cac claude ls` | 列出已安装版本 |
111
111
  | `cac claude pin <ver>` | 当前环境绑定版本 |
112
112
  | **环境管理** | |
113
- | `cac env create <name> [-p proxy] [-c ver] [--clone]` | 创建环境(自动激活,`--clone` 继承配置) |
113
+ | `cac env create <name> [-p proxy] [-c ver] [--clone] [--telemetry mode] [--persona preset]` | 创建环境(自动激活,`--telemetry transparent/stealth/paranoid` 控制遥测,`--persona macos-vscode/...` 用于容器) |
114
114
  | `cac env ls` | 列出环境 |
115
115
  | `cac env rm <name>` | 删除环境 |
116
- | `cac env set [name] <key> <value>` | 修改环境(proxy / version) |
116
+ | `cac env set [name] <key> <value>` | 修改环境(proxy / version / telemetry / persona) |
117
117
  | `cac env check [-d]` | 验证当前环境(`-d` 显示详情) |
118
118
  | `cac <name>` | 激活环境 |
119
119
  | **自管理** | |
@@ -293,10 +293,10 @@ Each environment is fully isolated:
293
293
  | `cac claude ls` | List installed versions |
294
294
  | `cac claude pin <ver>` | Pin current env to version |
295
295
  | **Environment management** | |
296
- | `cac env create <name> [-p proxy] [-c ver] [--clone]` | Create environment (auto-activates, `--clone` inherits config) |
296
+ | `cac env create <name> [-p proxy] [-c ver] [--clone] [--telemetry mode] [--persona preset]` | Create environment (auto-activates, `--telemetry transparent/stealth/paranoid` for telemetry control, `--persona macos-vscode/...` for containers) |
297
297
  | `cac env ls` | List environments |
298
298
  | `cac env rm <name>` | Remove environment |
299
- | `cac env set [name] <key> <value>` | Modify environment (proxy / version) |
299
+ | `cac env set [name] <key> <value>` | Modify environment (proxy / version / telemetry / persona) |
300
300
  | `cac env check [-d]` | Verify current environment (`-d` for details) |
301
301
  | `cac <name>` | Activate environment |
302
302
  | **Self-management** | |
package/cac CHANGED
@@ -11,7 +11,7 @@ VERSIONS_DIR="$CAC_DIR/versions"
11
11
  # ── utils: colors, read/write, UUID, proxy parsing ───────────────────────
12
12
 
13
13
  # shellcheck disable=SC2034 # used in build-concatenated cac script
14
- CAC_VERSION="1.5.0"
14
+ CAC_VERSION="1.5.1-beta.2"
15
15
 
16
16
  _read() { [[ -f "$1" ]] && tr -d '[:space:]' < "$1" || echo "${2:-}"; }
17
17
  _die() { printf '%b\n' "$(_red "error:") $*" >&2; exit 1; }
@@ -1389,6 +1389,45 @@ if [[ -n "$PROXY" ]] && [[ -f "$CAC_DIR/relay.js" ]]; then
1389
1389
  echo "$_rport" > "$_relay_port_file"
1390
1390
  fi
1391
1391
 
1392
+ # env-level watchdog singleton: auto-restarts relay if it crashes
1393
+ # - one watchdog per environment, shared across all sessions
1394
+ # - exits automatically when relay is intentionally stopped (relay.proxy removed)
1395
+ _relay_watchdog_file="$CAC_DIR/relay.watchdog.pid"
1396
+ _wd_running=false
1397
+ if [[ -f "$_relay_watchdog_file" ]]; then
1398
+ _wpid=$(tr -d '[:space:]' < "$_relay_watchdog_file")
1399
+ [[ -n "$_wpid" ]] && kill -0 "$_wpid" 2>/dev/null && _wd_running=true
1400
+ fi
1401
+ if [[ "$_wd_running" != "true" ]]; then
1402
+ (
1403
+ trap 'rm -f "$CAC_DIR/relay.watchdog.pid"' EXIT
1404
+ set +e
1405
+ while true; do
1406
+ sleep 5
1407
+ # relay.proxy removed by _relay_stop — intentional stop, exit watchdog
1408
+ [[ -f "$CAC_DIR/relay.proxy" ]] || exit 0
1409
+ # relay alive and port reachable — nothing to do
1410
+ if [[ -f "$CAC_DIR/relay.pid" ]]; then
1411
+ _rpid=$(tr -d '[:space:]' < "$CAC_DIR/relay.pid")
1412
+ if kill -0 "$_rpid" 2>/dev/null; then
1413
+ _rport=$(tr -d '[:space:]' < "$CAC_DIR/relay.port" 2>/dev/null || true)
1414
+ (echo >/dev/tcp/127.0.0.1/"$_rport") 2>/dev/null && continue
1415
+ # process alive but port unresponsive — kill and restart
1416
+ kill "$_rpid" 2>/dev/null || true
1417
+ fi
1418
+ fi
1419
+ # relay dead — restart on same port with same proxy
1420
+ _rport=$(tr -d '[:space:]' < "$CAC_DIR/relay.port" 2>/dev/null || true)
1421
+ _rproxy=$(tr -d '[:space:]' < "$CAC_DIR/relay.proxy" 2>/dev/null || true)
1422
+ [[ -n "$_rport" ]] && [[ -n "$_rproxy" ]] || exit 0
1423
+ node "$CAC_DIR/relay.js" "$_rport" "$_rproxy" "$CAC_DIR/relay.pid" </dev/null >>"$CAC_DIR/relay.log" 2>&1 &
1424
+ done
1425
+ ) &
1426
+ _new_wpid=$!
1427
+ echo "$_new_wpid" > "$_relay_watchdog_file"
1428
+ disown "$_new_wpid"
1429
+ fi
1430
+
1392
1431
  # override proxy to point to local relay
1393
1432
  if [[ -f "$_relay_port_file" ]]; then
1394
1433
  _rport=$(tr -d '[:space:]' < "$_relay_port_file")
@@ -1628,7 +1667,7 @@ _env_cmd_create() {
1628
1667
  esac
1629
1668
  done
1630
1669
 
1631
- [[ -n "$name" ]] || _die "usage: cac env create <name> [-p <proxy>] [-c <version>]"
1670
+ [[ -n "$name" ]] || _die "usage: cac env create <name> [-p <proxy>] [-c <version>] [--telemetry <mode>] [--persona <preset>]"
1632
1671
  [[ "$name" =~ ^[a-zA-Z0-9_-]+$ ]] || _die "invalid name '$name' (use alphanumeric, dash, underscore)"
1633
1672
 
1634
1673
  local env_dir="$ENVS_DIR/$name"
@@ -1920,7 +1959,9 @@ _env_cmd_set() {
1920
1959
  echo " $(_green "set") [name] proxy --remove Remove proxy"
1921
1960
  echo " $(_green "set") [name] version <ver|latest> Change Claude version"
1922
1961
  echo " $(_green "set") [name] telemetry <stealth|paranoid|transparent>"
1962
+ echo " Telemetry blocking: stealth (1p_events only), paranoid (max), transparent (none)"
1923
1963
  echo " $(_green "set") [name] persona <macos-vscode|macos-cursor|macos-iterm|linux-desktop|--remove>"
1964
+ echo " Terminal preset: inject desktop env vars, hide Docker signals (for containers)"
1924
1965
  echo
1925
1966
  echo " $(_dim "If name is omitted, uses the current active environment.")"
1926
1967
  echo
@@ -2008,6 +2049,13 @@ _env_cmd_set() {
2008
2049
  esac
2009
2050
  }
2010
2051
 
2052
+ _env_cmd_stop() {
2053
+ _relay_stop 2>/dev/null || true
2054
+ touch "$CAC_DIR/stopped"
2055
+ echo " $(_green "✓") cac paused — claude will run without any cac injection"
2056
+ echo " $(_dim "resume with:") $(_green "cac <name>")"
2057
+ }
2058
+
2011
2059
  cmd_env() {
2012
2060
  case "${1:-help}" in
2013
2061
  create) _env_cmd_create "${@:2}" ;;
@@ -2015,20 +2063,22 @@ cmd_env() {
2015
2063
  ls|list) _env_cmd_ls ;;
2016
2064
  rm|remove) _env_cmd_rm "${@:2}" ;;
2017
2065
  activate) _env_cmd_activate "${@:2}" ;;
2066
+ stop) _env_cmd_stop ;;
2018
2067
  check) cmd_check "${@:2}" ;;
2019
2068
  deactivate) echo "$(_yellow "warning:") deactivate has been removed — switch with 'cac <name>' or uninstall with 'cac self delete'" >&2 ;;
2020
2069
  help|-h|--help)
2021
2070
  echo
2022
2071
  echo " $(_bold "cac env") — environment management"
2023
2072
  echo
2024
- echo " $(_green "create") <name> [-p proxy] [-c ver] [--clone [source]] [--no-link] [--telemetry mode] [--persona preset]"
2025
- echo " $(_green "set") [name] proxy <url> Set proxy"
2026
- echo " $(_green "set") [name] proxy --remove Remove proxy"
2027
- echo " $(_green "set") [name] version <ver|latest> Change Claude version"
2073
+ echo " $(_green "create") <name> [-p proxy] [-c ver] [--telemetry mode] [--persona preset]"
2074
+ echo " Create isolated environment (auto-activates)"
2075
+ echo " $(_green "set") [name] <key> <value> Modify environment"
2076
+ echo " proxy, version, telemetry, or persona"
2028
2077
  echo " $(_green "ls") List all environments"
2029
2078
  echo " $(_green "rm") <name> Remove an environment"
2030
2079
  echo " $(_green "check") Verify current environment"
2031
- echo " $(_green "cac") <name> Switch environment"
2080
+ echo " $(_green "stop") Pause cac (claude runs natively, no injection)"
2081
+ echo " $(_green "cac") <name> Switch environment (also resumes if stopped)"
2032
2082
  echo
2033
2083
  ;;
2034
2084
  *)
@@ -2102,6 +2152,15 @@ _relay_stop() {
2102
2152
  fi
2103
2153
  rm -f "$CAC_DIR/relay.port" "$CAC_DIR/relay.proxy"
2104
2154
 
2155
+ # stop watchdog (relay.proxy already removed above, watchdog will self-exit within 5s;
2156
+ # kill it immediately for clean teardown)
2157
+ local wd_file="$CAC_DIR/relay.watchdog.pid"
2158
+ if [[ -f "$wd_file" ]]; then
2159
+ local wd_pid; wd_pid=$(tr -d '[:space:]' < "$wd_file")
2160
+ [[ -n "$wd_pid" ]] && kill "$wd_pid" 2>/dev/null || true
2161
+ rm -f "$wd_file"
2162
+ fi
2163
+
2105
2164
  # cleanup route
2106
2165
  _relay_remove_route 2>/dev/null || true
2107
2166
  }
@@ -3464,7 +3523,7 @@ case "$1" in
3464
3523
  add) echo "$(_yellow "warning:") 'cac add' → 'cac env create <name> -p <proxy>'" >&2; exit 1 ;;
3465
3524
  setup) echo "$(_yellow "removed:") 'cac setup' no longer exists — cac auto-initializes on first use" >&2 ;;
3466
3525
  check) echo "$(_yellow "warning:") 'cac check' → 'cac env check'" >&2; cmd_check ;;
3467
- stop) echo "$(_yellow "warning:") 'cac stop' has been removed — switch with 'cac <name>'" >&2 ;;
3526
+ stop) _env_cmd_stop ;;
3468
3527
  resume|-c) echo "$(_yellow "warning:") 'cac resume' removed — use 'cac env activate <name>'" >&2; exit 1 ;;
3469
3528
  relay) echo "$(_yellow "warning:") relay is now automatic (TUN auto-detected)" >&2 ;;
3470
3529
  delete|uninstall) echo "$(_yellow "warning:") 'cac delete' → 'cac self delete'" >&2; cmd_delete ;;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-cac",
3
- "version": "1.5.0",
3
+ "version": "1.5.1-beta.2",
4
4
  "description": "Isolate, protect, and manage your Claude Code — versions, environments, identity, and proxy.",
5
5
  "bin": {
6
6
  "cac": "cac"