@seanyao/roll 2026.421.3 → 2026.421.4

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 CHANGED
@@ -70,7 +70,6 @@ Unified behavioral conventions for Claude Code / Gemini CLI / Cursor / Codex —
70
70
  | `roll hook install` | Optional: global git hook for AI client auto-detection |
71
71
  | `roll reset` | Force-rebuild local cache from repo source, then re-sync |
72
72
  | `roll status` | Show sync state, skill links, and detected AI tools |
73
- | `roll clean` | Remove legacy `~/.wukong/` or `~/.cybernetix/` remnants |
74
73
 
75
74
  ### Typical Flow
76
75
 
package/bin/roll CHANGED
@@ -4,7 +4,7 @@ set -euo pipefail
4
4
  # Roll — AI Agent Convention Manager
5
5
  # Single source of truth for how all AI coding agents behave.
6
6
 
7
- VERSION="2026.421.3"
7
+ VERSION="2026.421.4"
8
8
  ROLL_HOME="${ROLL_HOME:-${HOME}/.roll}"
9
9
  ROLL_CONFIG="${ROLL_HOME}/config.yaml"
10
10
  ROLL_GLOBAL="${ROLL_HOME}/conventions/global"
@@ -250,8 +250,8 @@ YAML
250
250
  # ─── Internal: create or repair per-skill symlinks (non-destructive) ─────────
251
251
  _link_skills() {
252
252
  local force="${1:-false}"
253
- local wk_skills_real pkg_skills_real
254
- wk_skills_real="$(canonical_dir "$ROLL_HOME/skills" 2>/dev/null || true)"
253
+ local roll_skills_real pkg_skills_real
254
+ roll_skills_real="$(canonical_dir "$ROLL_HOME/skills" 2>/dev/null || true)"
255
255
  pkg_skills_real="$(canonical_dir "$ROLL_PKG_DIR/skills" 2>/dev/null || true)"
256
256
 
257
257
  while IFS= read -r entry; do
@@ -279,17 +279,15 @@ _link_skills() {
279
279
  continue
280
280
  fi
281
281
 
282
- # Handle legacy whole-dir symlink
282
+ # Handle whole-dir symlink (legacy or user-created)
283
283
  if [[ -L "$skills_dir" ]]; then
284
284
  local skills_target
285
285
  skills_target="$(readlink "$skills_dir")"
286
- if [[ -n "$skills_real" && "$skills_real" == "$wk_skills_real" ]]; then
287
- continue # Whole-dir symlink to WK skills — still functional
286
+ if [[ -n "$skills_real" && "$skills_real" == "$roll_skills_real" ]]; then
287
+ continue # Whole-dir symlink to ~/.roll/skills — still functional
288
288
  fi
289
- # Dangling or legacy whole-dir symlink — remove and recreate as per-skill links
290
- if [[ -z "$skills_real" ]] || \
291
- [[ "$skills_target" == *"cybernetix"* ]] || \
292
- [[ "$skills_target" == *"wukong"* ]]; then
289
+ # Dangling whole-dir symlink — remove and recreate as per-skill links
290
+ if [[ -z "$skills_real" ]]; then
293
291
  info "Removing legacy symlink ~/${ai_name}/skills -> ${skills_target/#$HOME/~} 正在移除遗留软链接 ~/${ai_name}/skills -> ${skills_target/#$HOME/~}"
294
292
  rm "$skills_dir"
295
293
  else
@@ -1028,104 +1026,6 @@ cmd_update() {
1028
1026
  cmd_sync
1029
1027
  }
1030
1028
 
1031
- # ═══════════════════════════════════════════════════════════════════════════════
1032
- # COMMAND: clean
1033
- # Remove legacy ~/.cybernetix/ and ~/.wukong/ remnants after migration
1034
- # ═══════════════════════════════════════════════════════════════════════════════
1035
- cmd_clean() {
1036
- local found=false
1037
-
1038
- echo -e "${BOLD}Roll Legacy Cleanup 清理旧版遗留文件${NC}"
1039
- echo ""
1040
-
1041
- # Detect what exists
1042
- for legacy_dir in "$HOME/.cybernetix" "$HOME/.wukong"; do
1043
- [[ -d "$legacy_dir" ]] && found=true
1044
- done
1045
- for legacy_bin in "$HOME/.local/bin/cybernetix" "$HOME/.local/bin/wukong"; do
1046
- { [[ -L "$legacy_bin" ]] || [[ -f "$legacy_bin" ]]; } && found=true
1047
- done
1048
- # Old skill symlinks
1049
- local ai_dirs=("$HOME/.claude" "$HOME/.gemini" "$HOME/.kimi" "$HOME/.codex" "$HOME/.cursor")
1050
- for ai_dir in "${ai_dirs[@]}"; do
1051
- local skills_dir="$ai_dir/skills"
1052
- [[ -d "$skills_dir" ]] || continue
1053
- if find "$skills_dir" -maxdepth 1 -type l \( -name "wk-*" -o -name "cnx-*" \) 2>/dev/null | grep -q .; then
1054
- found=true
1055
- fi
1056
- done
1057
-
1058
- if [[ "$found" == "false" ]]; then
1059
- ok "Nothing to clean — no legacy files found. 未发现遗留文件。"
1060
- return
1061
- fi
1062
-
1063
- # Show what will be removed
1064
- info "Found legacy items to remove: 发现以下遗留文件:"
1065
- echo ""
1066
- for d in "$HOME/.cybernetix" "$HOME/.wukong"; do
1067
- [[ -d "$d" ]] && echo -e " ${RED}✕${NC} ${d/#$HOME/~}/"
1068
- done
1069
- for b in "$HOME/.local/bin/cybernetix" "$HOME/.local/bin/wukong"; do
1070
- { [[ -L "$b" ]] || [[ -f "$b" ]]; } && echo -e " ${RED}✕${NC} ${b/#$HOME/~}"
1071
- done
1072
- for ai_dir in "${ai_dirs[@]}"; do
1073
- local skills_dir="$ai_dir/skills"
1074
- [[ -d "$skills_dir" ]] || continue
1075
- local old_links
1076
- old_links=$(find "$skills_dir" -maxdepth 1 -type l \( -name "wk-*" -o -name "cnx-*" \) 2>/dev/null || true)
1077
- if [[ -n "$old_links" ]]; then
1078
- local count
1079
- count=$(echo "$old_links" | wc -l | tr -d ' ')
1080
- echo -e " ${RED}✕${NC} ${skills_dir/#$HOME/~}/ ($count legacy symlinks)"
1081
- fi
1082
- done
1083
-
1084
- echo ""
1085
- echo -n " Remove all of the above? [y/N] "
1086
- read -r answer
1087
- [[ "$answer" =~ ^[Yy]$ ]] || { info "Aborted. 已取消。"; return; }
1088
-
1089
- echo ""
1090
- local removed=0
1091
-
1092
- # Remove legacy home dirs
1093
- for d in "$HOME/.cybernetix" "$HOME/.wukong"; do
1094
- if [[ -d "$d" ]]; then
1095
- rm -rf "$d"
1096
- ok "Removed: ${d/#$HOME/~} 已删除: ${d/#$HOME/~}"
1097
- removed=$((removed + 1))
1098
- fi
1099
- done
1100
-
1101
- # Remove legacy binaries
1102
- for b in "$HOME/.local/bin/cybernetix" "$HOME/.local/bin/wukong"; do
1103
- if [[ -L "$b" ]] || [[ -f "$b" ]]; then
1104
- rm -f "$b"
1105
- ok "Removed: ${b/#$HOME/~} 已删除: ${b/#$HOME/~}"
1106
- removed=$((removed + 1))
1107
- fi
1108
- done
1109
-
1110
- # Remove legacy skill symlinks
1111
- for ai_dir in "${ai_dirs[@]}"; do
1112
- local skills_dir="$ai_dir/skills"
1113
- [[ -d "$skills_dir" ]] || continue
1114
- local old_links
1115
- old_links=$(find "$skills_dir" -maxdepth 1 -type l \( -name "wk-*" -o -name "cnx-*" \) 2>/dev/null || true)
1116
- if [[ -n "$old_links" ]]; then
1117
- while IFS= read -r link; do rm -f "$link"; done <<< "$old_links"
1118
- local count
1119
- count=$(echo "$old_links" | wc -l | tr -d ' ')
1120
- ok "Removed $count legacy symlinks from ${skills_dir/#$HOME/~} 已删除 $count 个遗留软链接"
1121
- removed=$((removed + count))
1122
- fi
1123
- done
1124
-
1125
- echo ""
1126
- ok "Cleaned $removed legacy items. 已清理 $removed 个遗留文件。"
1127
- }
1128
-
1129
1029
  # ═══════════════════════════════════════════════════════════════════════════════
1130
1030
  # COMMAND: status
1131
1031
  # Show current state of conventions
@@ -1308,7 +1208,6 @@ usage() {
1308
1208
  echo " hook [install|remove] [Optional] Manage global git hook 管理全局 git hook"
1309
1209
  echo " status [Diagnostic] Show current state 显示当前状态"
1310
1210
  echo " reset [Recovery] Force-rebuild from package source 强制从包源重建"
1311
- echo " clean [Legacy] Remove ~/.wukong/ ~/.cybernetix/ remnants 清理遗留文件"
1312
1211
  echo ""
1313
1212
  echo "Examples / 示例:"
1314
1213
  echo " roll setup # New machine: first-time install 新机器:首次安装"
@@ -1328,7 +1227,6 @@ main() {
1328
1227
  hook) cmd_hook "$@" ;;
1329
1228
  update) cmd_update "$@" ;;
1330
1229
  reset) cmd_reset "$@" ;;
1331
- clean) cmd_clean "$@" ;;
1332
1230
  status) cmd_status "$@" ;;
1333
1231
  version|--version|-v) echo "roll v${VERSION}" ;;
1334
1232
  help|--help|-h|"") usage ;;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seanyao/roll",
3
- "version": "2026.421.3",
3
+ "version": "2026.421.4",
4
4
  "description": "Roll — Roll out features with AI agents",
5
5
  "scripts": {
6
6
  "test": "find tests/unit tests/integration -name '*.bats' | sort | xargs ./tests/helpers/bats-core/bin/bats"
@@ -196,7 +196,7 @@ After the report is complete, use this skill's included `scripts/md_to_pdf.py` t
196
196
  2. **Install dependencies** (if not installed): `pip install weasyprint markdown --break-system-packages`
197
197
  3. **Run the conversion script**:
198
198
  ```bash
199
- python [skill_directory]/scripts/md_to_pdf.py input.md output.pdf --title "Subject Name" --author "wukong"
199
+ python [skill_directory]/scripts/md_to_pdf.py input.md output.pdf --title "Subject Name" --author "roll"
200
200
  ```
201
201
  4. The script automatically generates an intermediate HTML file (for debugging) and the final PDF
202
202
 
@@ -1,84 +0,0 @@
1
- ---
2
- hidden: true
3
- name: roll-probe
4
- description: Node discovery and health check for Roll environment. Find machines on LAN by name, check node health, verify OpenClaw Gateway status. Use when user asks to find a machine, check node status, diagnose gateway issues, or verify node connectivity.
5
- ---
6
-
7
- # Roll Probe
8
-
9
- **Node discovery and health check tool** - for node management and status diagnosis in Roll environments.
10
-
11
- ## Capabilities
12
-
13
- 1. **Node Discovery** - Discover machines on LAN
14
- - Discover SSH services via Bonjour/mDNS
15
- - Resolve `.local` hostnames
16
- - Supports aliases: orin, seanclaw, apeclaw
17
-
18
- 2. **Node Health Check** - Check node health
19
- - OpenClaw Gateway process status
20
- - Port listening check
21
- - Health endpoint verification
22
- - Log viewing
23
-
24
- ## Usage
25
-
26
- ```bash
27
- # Discover machines
28
- $roll-checker find <machine-name>
29
-
30
- # Check node health
31
- $roll-checker health <hostname>
32
-
33
- # Full diagnosis
34
- $roll-checker diagnose <machine-name>
35
- ```
36
-
37
- ## Node Discovery
38
-
39
- Uses Bonjour `_ssh._tcp` service discovery:
40
-
41
- ```bash
42
- # Browse all SSH services
43
- dns-sd -B _ssh._tcp local
44
-
45
- # Resolve a specific service
46
- dns-sd -L "Sean's Claw Machine" _ssh._tcp local
47
- dns-sd -G v4v6 Seans-Claw-Machine.local
48
- ```
49
-
50
- **Known aliases**:
51
- - `orin` / `nv-orin` → nv-orin.local
52
- - `seanclaw` → Seans-Claw-Machine.local
53
- - `apeclaw` → Ape's Claw Machine
54
-
55
- ## Health Check
56
-
57
- Check procedure for Orin/OpenClaw hosts:
58
-
59
- ```bash
60
- # 1. Identity verification
61
- ssh -o BatchMode=yes -o ConnectTimeout=10 nvidia@nv-orin.local 'hostname && whoami'
62
-
63
- # 2. Process check
64
- ps -ef | grep -i "openclaw\|gateway" | grep -v grep
65
-
66
- # 3. Port check
67
- ss -ltnp | grep -E "18789|18791|18792"
68
-
69
- # 4. Health endpoint
70
- for p in 18789 18791 18792; do
71
- curl -fsS http://127.0.0.1:$p/health || true
72
- done
73
- ```
74
-
75
- ## Dynamic Host Resolution
76
-
77
- Priority order:
78
- 1. `nvidia@nv-orin.local` (Bonjour hostname)
79
- 2. Current `.local` hostname (via discovery)
80
- 3. Current IP (via discovery)
81
-
82
- ## References
83
-
84
- - `scripts/find_ssh_machine.py` - SSH machine discovery script