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.
- package/README.md +4 -4
- package/cac +67 -8
- 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]` | 创建环境(自动激活,`--
|
|
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, `--
|
|
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.
|
|
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] [--
|
|
2025
|
-
echo "
|
|
2026
|
-
echo " $(_green "set") [name]
|
|
2027
|
-
echo "
|
|
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 "
|
|
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)
|
|
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 ;;
|