claude-cac 1.5.0 → 1.5.1-beta.1

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 +51 -6
  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.1"
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,40 @@ 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 — nothing to do
1410
+ if [[ -f "$CAC_DIR/relay.pid" ]]; then
1411
+ _rpid=$(tr -d '[:space:]' < "$CAC_DIR/relay.pid")
1412
+ kill -0 "$_rpid" 2>/dev/null && continue
1413
+ fi
1414
+ # relay dead — restart on same port with same proxy
1415
+ _rport=$(tr -d '[:space:]' < "$CAC_DIR/relay.port" 2>/dev/null || true)
1416
+ _rproxy=$(tr -d '[:space:]' < "$CAC_DIR/relay.proxy" 2>/dev/null || true)
1417
+ [[ -n "$_rport" ]] && [[ -n "$_rproxy" ]] || exit 0
1418
+ node "$CAC_DIR/relay.js" "$_rport" "$_rproxy" "$CAC_DIR/relay.pid" </dev/null >>"$CAC_DIR/relay.log" 2>&1 &
1419
+ done
1420
+ ) &
1421
+ _new_wpid=$!
1422
+ echo "$_new_wpid" > "$_relay_watchdog_file"
1423
+ disown "$_new_wpid"
1424
+ fi
1425
+
1392
1426
  # override proxy to point to local relay
1393
1427
  if [[ -f "$_relay_port_file" ]]; then
1394
1428
  _rport=$(tr -d '[:space:]' < "$_relay_port_file")
@@ -1628,7 +1662,7 @@ _env_cmd_create() {
1628
1662
  esac
1629
1663
  done
1630
1664
 
1631
- [[ -n "$name" ]] || _die "usage: cac env create <name> [-p <proxy>] [-c <version>]"
1665
+ [[ -n "$name" ]] || _die "usage: cac env create <name> [-p <proxy>] [-c <version>] [--telemetry <mode>] [--persona <preset>]"
1632
1666
  [[ "$name" =~ ^[a-zA-Z0-9_-]+$ ]] || _die "invalid name '$name' (use alphanumeric, dash, underscore)"
1633
1667
 
1634
1668
  local env_dir="$ENVS_DIR/$name"
@@ -1920,7 +1954,9 @@ _env_cmd_set() {
1920
1954
  echo " $(_green "set") [name] proxy --remove Remove proxy"
1921
1955
  echo " $(_green "set") [name] version <ver|latest> Change Claude version"
1922
1956
  echo " $(_green "set") [name] telemetry <stealth|paranoid|transparent>"
1957
+ echo " Telemetry blocking: stealth (1p_events only), paranoid (max), transparent (none)"
1923
1958
  echo " $(_green "set") [name] persona <macos-vscode|macos-cursor|macos-iterm|linux-desktop|--remove>"
1959
+ echo " Terminal preset: inject desktop env vars, hide Docker signals (for containers)"
1924
1960
  echo
1925
1961
  echo " $(_dim "If name is omitted, uses the current active environment.")"
1926
1962
  echo
@@ -2021,10 +2057,10 @@ cmd_env() {
2021
2057
  echo
2022
2058
  echo " $(_bold "cac env") — environment management"
2023
2059
  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"
2060
+ echo " $(_green "create") <name> [-p proxy] [-c ver] [--telemetry mode] [--persona preset]"
2061
+ echo " Create isolated environment (auto-activates)"
2062
+ echo " $(_green "set") [name] <key> <value> Modify environment"
2063
+ echo " proxy, version, telemetry, or persona"
2028
2064
  echo " $(_green "ls") List all environments"
2029
2065
  echo " $(_green "rm") <name> Remove an environment"
2030
2066
  echo " $(_green "check") Verify current environment"
@@ -2102,6 +2138,15 @@ _relay_stop() {
2102
2138
  fi
2103
2139
  rm -f "$CAC_DIR/relay.port" "$CAC_DIR/relay.proxy"
2104
2140
 
2141
+ # stop watchdog (relay.proxy already removed above, watchdog will self-exit within 5s;
2142
+ # kill it immediately for clean teardown)
2143
+ local wd_file="$CAC_DIR/relay.watchdog.pid"
2144
+ if [[ -f "$wd_file" ]]; then
2145
+ local wd_pid; wd_pid=$(tr -d '[:space:]' < "$wd_file")
2146
+ [[ -n "$wd_pid" ]] && kill "$wd_pid" 2>/dev/null || true
2147
+ rm -f "$wd_file"
2148
+ fi
2149
+
2105
2150
  # cleanup route
2106
2151
  _relay_remove_route 2>/dev/null || true
2107
2152
  }
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.1",
4
4
  "description": "Isolate, protect, and manage your Claude Code — versions, environments, identity, and proxy.",
5
5
  "bin": {
6
6
  "cac": "cac"