@ranger1/dx 0.1.43 → 0.1.44

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.
@@ -6,186 +6,229 @@ agent: build
6
6
 
7
7
  ---
8
8
 
9
- ## Step 0: 强制安装 dx CLI
9
+ ## Step 0: Bootstrap(dx + 模板 + pnpm)
10
10
 
11
- **无论当前是否安装,必须执行:**
11
+ 目标:
12
+
13
+ - dx 安装/升级到最新
14
+ - 刷新 `~/.opencode/commands/*`(确保 `opencode_attach.py` 可用)
12
15
 
13
16
  ```bash
14
- pnpm add -g @ranger1/dx@latest && dx initial
15
- ```
17
+ set -euo pipefail
16
18
 
17
- ---
19
+ # 必要前提:node + corepack(用于 pnpm)
20
+ if ! command -v node >/dev/null 2>&1; then
21
+ echo "ERROR: node NOT_FOUND (need Node.js >= 20)"
22
+ echo "macOS: brew install node"
23
+ echo "Debian/Ubuntu: curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs"
24
+ exit 1
25
+ fi
18
26
 
19
- ## Step 1: 并行检测
27
+ if ! command -v pnpm >/dev/null 2>&1; then
28
+ corepack enable >/dev/null 2>&1 || true
29
+ corepack prepare pnpm@latest --activate
30
+ fi
20
31
 
21
- **同时执行以下 5 Bash 调用(真正并行):**
32
+ # 安装/升级 dx 到最新(幂等)
33
+ pnpm add -g @ranger1/dx@latest
22
34
 
23
- ```bash
24
- # 批次 1: CLI 版本检测
25
- echo "=== CLI_VERSIONS ===";
26
- echo "opencode:" && (which opencode && opencode --version 2>/dev/null || echo "NOT_FOUND");
27
- echo "dx:" && (which dx && dx --version 2>/dev/null || echo "NOT_FOUND");
28
- echo "rg:" && (which rg && rg --version 2>/dev/null | head -n 1 || echo "NOT_FOUND");
29
- echo "agent-browser:" && (which agent-browser && agent-browser --version 2>/dev/null || echo "NOT_FOUND");
30
- ```
35
+ # 备份后刷新模板(避免覆盖导致不可回退)
36
+ ts="$(date +%Y%m%d%H%M%S)"
37
+ if [ -d "$HOME/.opencode/commands" ]; then
38
+ cp -a "$HOME/.opencode/commands" "$HOME/.opencode/commands.bak.${ts}" 2>/dev/null || true
39
+ fi
40
+ if [ -d "$HOME/.opencode/agents" ]; then
41
+ cp -a "$HOME/.opencode/agents" "$HOME/.opencode/agents.bak.${ts}" 2>/dev/null || true
42
+ fi
31
43
 
32
- ```bash
33
- # 批次 2: 项目文件检测
34
- echo "=== PROJECT_FILES ===";
35
- echo "AGENTS.md:" && (test -f AGENTS.md && echo "FOUND" || echo "NOT_FOUND");
44
+ dx initial
36
45
  ```
37
46
 
38
- ```bash
39
- # 批次 3: OpenCode 插件检测
40
- # 注意:插件名可能带版本号(如 @1.3.0),使用模糊匹配
41
- echo "=== OPENCODE_PLUGINS ===";
42
- echo "oh-my-opencode:" && (opencode plugin list 2>/dev/null | grep -q 'oh-my-opencode' && echo "INSTALLED" || echo "NOT_INSTALLED");
43
- echo "opencode-openai-codex-auth:" && (opencode plugin list 2>/dev/null | grep -q 'opencode-openai-codex-auth' && echo "INSTALLED" || echo "NOT_INSTALLED");
44
- ```
47
+ ---
45
48
 
46
- ```bash
47
- # 批次 4: attach 配置(统一)
48
- echo "=== OPENCODE_ATTACH ===";
49
- echo "attach:" && (python3 ~/.opencode/commands/opencode_attach.py --dry-run >/dev/null 2>&1 && echo "READY" || echo "NOT_READY");
50
- ```
49
+ ## Step 1: 快速检测(单次 Bash)
51
50
 
52
- ```bash
53
- # 批次 5: Python 检测(python3 + python 软链接)
54
- echo "=== PYTHON ===";
55
- echo "python3:" && (which python3 && python3 --version 2>/dev/null || echo "NOT_FOUND");
56
- echo "python:" && (which python && python --version 2>/dev/null || echo "NOT_FOUND");
57
- ```
58
-
59
- ---
51
+ 目标:一次 Bash 输出完整状态表,减少 tool 调用与 token。
60
52
 
61
- ## Step 2: 输出报告
53
+ ```bash
54
+ set -euo pipefail
55
+
56
+ os="$(uname -s 2>/dev/null || echo unknown)"
57
+ pm="none"
58
+ if command -v brew >/dev/null 2>&1; then pm="brew"; fi
59
+ if command -v apt-get >/dev/null 2>&1; then pm="apt"; fi
60
+
61
+ ver() {
62
+ # usage: ver <bin> <cmd>
63
+ b="$1"; shift
64
+ if command -v "$b" >/dev/null 2>&1; then
65
+ ("$@" 2>/dev/null | head -n 1) || true
66
+ else
67
+ echo "NOT_FOUND"
68
+ fi
69
+ }
70
+
71
+ has_agents="NOT_FOUND"; [ -f AGENTS.md ] && has_agents="FOUND"
72
+
73
+ dx_v="$(ver dx dx --version)"
74
+ opencode_v="$(ver opencode opencode --version)"
75
+ rg_v="$(ver rg rg --version)"
76
+ agent_browser_v="$(ver agent-browser agent-browser --version)"
77
+ py3_v="$(ver python3 python3 --version)"
78
+ py_v="$(ver python python --version)"
79
+
80
+ attach_status="NOT_READY"
81
+ if command -v python3 >/dev/null 2>&1 && [ -f "$HOME/.opencode/commands/opencode_attach.py" ]; then
82
+ python3 "$HOME/.opencode/commands/opencode_attach.py" --dry-run >/dev/null 2>&1 && attach_status="READY" || true
83
+ fi
62
84
 
63
- 汇总结果,输出表格:
85
+ # 插件以“配置是否就绪”为准(真正安装由 opencode 启动时自动完成)
86
+ cfg_opencode="$HOME/.config/opencode/opencode.json"
87
+ plug_oh="NOT_CONFIGURED"
88
+ plug_codex="NOT_CONFIGURED"
89
+ plug_antigravity="NOT_CONFIGURED"
90
+ if [ -f "$cfg_opencode" ]; then
91
+ grep -q 'oh-my-opencode' "$cfg_opencode" && plug_oh="CONFIGURED" || true
92
+ grep -q 'opencode-openai-codex-auth' "$cfg_opencode" && plug_codex="CONFIGURED" || true
93
+ grep -q 'opencode-antigravity-auth' "$cfg_opencode" && plug_antigravity="CONFIGURED" || true
94
+ fi
64
95
 
65
- ```
66
- 工具 | 状态 | 版本
67
- opencode | <状态> | <版本>
68
- dx | <状态> | <版本>
69
- rg | <状态> | <版本>
70
- python3 | <状态> | <版本>
71
- python(软链接) | <状态> | <版本>
72
- AGENTS.md | <状态> | -
73
- oh-my-opencode 插件 | <状态> | -
74
- opencode-openai-codex-auth 插件 | <状态> | -
75
- agent-browser | <状态> | <版本>
76
- attach(全局配置写入) | <状态> | -
96
+ echo "OS: ${os} | PM: ${pm}"
97
+ echo
98
+ printf '%-34s | %-12s | %s\n' "tool" "status" "version"
99
+ printf '%-34s | %-12s | %s\n' "opencode" "$( [ "$opencode_v" = NOT_FOUND ] && echo MISSING || echo OK )" "$opencode_v"
100
+ printf '%-34s | %-12s | %s\n' "dx" "$( [ "$dx_v" = NOT_FOUND ] && echo MISSING || echo OK )" "$dx_v"
101
+ printf '%-34s | %-12s | %s\n' "rg" "$( [ "$rg_v" = NOT_FOUND ] && echo MISSING || echo OK )" "$rg_v"
102
+ printf '%-34s | %-12s | %s\n' "agent-browser" "$( [ "$agent_browser_v" = NOT_FOUND ] && echo MISSING || echo OK )" "$agent_browser_v"
103
+ printf '%-34s | %-12s | %s\n' "python3" "$( [ "$py3_v" = NOT_FOUND ] && echo MISSING || echo OK )" "$py3_v"
104
+ printf '%-34s | %-12s | %s\n' "python (softlink)" "$( [ "$py_v" = NOT_FOUND ] && echo MISSING || echo OK )" "$py_v"
105
+ printf '%-34s | %-12s | %s\n' "AGENTS.md" "$has_agents" "-"
106
+ printf '%-34s | %-12s | %s\n' "attach (global config)" "$attach_status" "-"
107
+ printf '%-34s | %-12s | %s\n' "plugin: oh-my-opencode" "$plug_oh" "-"
108
+ printf '%-34s | %-12s | %s\n' "plugin: opencode-openai-codex-auth" "$plug_codex" "-"
109
+ printf '%-34s | %-12s | %s\n' "plugin: opencode-antigravity-auth" "$plug_antigravity" "-"
110
+
111
+ missing=0
112
+ for x in "$opencode_v" "$dx_v" "$rg_v" "$agent_browser_v" "$py3_v"; do
113
+ [ "$x" = NOT_FOUND ] && missing=1
114
+ done
115
+ [ "$attach_status" != READY ] && missing=1
116
+ for x in "$plug_oh" "$plug_codex" "$plug_antigravity"; do
117
+ [ "$x" != CONFIGURED ] && missing=1
118
+ done
119
+
120
+ echo
121
+ if [ "$missing" = 0 ]; then
122
+ echo "OK: all dependencies ready"
123
+ else
124
+ echo "NEED_FIX: missing or not-ready items detected"
125
+ fi
77
126
  ```
78
127
 
79
128
  ---
80
129
 
81
- ## Step 3: 统一处理缺失项
82
-
83
- **如检测到任何缺失项,统一询问一次:**
84
-
85
- `AskUserQuestion`: 检测到以下缺失项,是否自动安装/配置所有?
86
-
87
- 确认后按顺序处理(需要直接执行对应安装/配置命令,不要只输出提示):
130
+ ## Step 2: 只问一次(缺失/升级)
88
131
 
89
- ### 3.1 opencode CLI 未安装
132
+ 如果出现 `NEED_FIX`,只问一次:是否一键安装 + 升级到最新版本(包含插件配置 attach)。
90
133
 
91
- 执行安装:
134
+ `AskUserQuestion`: 检测到缺失/未就绪项,是否一键修复并升级到最新版本?
92
135
 
93
- ```bash
94
- # brew 优先
95
- brew install opencode || npm install -g opencode
96
- ```
136
+ 选项:
97
137
 
98
- ### 3.2 AGENTS.md 未找到
138
+ - 一键修复(Recommended)
139
+ - 跳过(只输出检测表)
99
140
 
100
- 提示用户:
101
-
102
- - AGENTS.md 文件不存在,OpenCode 需要此文件作为项目指令入口
103
- - 建议创建或检查文件路径
141
+ ---
104
142
 
105
- ### 3.3 rg(ripgrep)未安装
143
+ ## Step 3: 一键修复(安装 + 升级到最新)
106
144
 
107
- 执行安装(幂等:已安装会跳过;缺少包管理器会报错并提示手动安装):
145
+ 确认后直接执行以下脚本(幂等;尽量走包管理器升级;插件用 attach 配置确保可自动安装/更新):
108
146
 
109
147
  ```bash
110
- set -e
148
+ set -euo pipefail
111
149
 
112
- if command -v rg >/dev/null 2>&1; then
113
- rg --version 2>/dev/null | head -n 1 || true
114
- exit 0
115
- fi
150
+ os="$(uname -s 2>/dev/null || echo unknown)"
151
+ has_brew=0; command -v brew >/dev/null 2>&1 && has_brew=1
152
+ has_apt=0; command -v apt-get >/dev/null 2>&1 && has_apt=1
116
153
 
117
- if command -v brew >/dev/null 2>&1; then
118
- brew install ripgrep
119
- elif command -v apt-get >/dev/null 2>&1; then
120
- sudo apt-get update
121
- sudo apt-get install -y ripgrep
122
- else
123
- echo "ripgrep (rg) NOT_FOUND, and no supported package manager (brew/apt-get) detected"
124
- echo "Please install ripgrep manually: https://github.com/BurntSushi/ripgrep#installation"
125
- exit 1
154
+ need_sudo=0
155
+ if [ "$has_apt" = 1 ] && command -v sudo >/dev/null 2>&1; then
156
+ need_sudo=1
126
157
  fi
127
158
 
128
- rg --version 2>/dev/null | head -n 1 || true
129
- ```
130
-
131
- ### 3.6 agent-browser 未安装
132
-
133
- 执行安装:
134
-
135
- ```bash
136
- npm install -g agent-browser && agent-browser install
137
- ```
138
-
139
- ### 3.6.1 python3 未安装
140
-
141
- 执行安装:
159
+ if ! command -v pnpm >/dev/null 2>&1; then
160
+ corepack enable >/dev/null 2>&1 || true
161
+ corepack prepare pnpm@latest --activate
162
+ fi
142
163
 
143
- ```bash
144
- # macOS (Homebrew)
145
- brew install python
146
- ```
164
+ # dx(始终升级到最新)
165
+ pnpm add -g @ranger1/dx@latest
147
166
 
148
- ### 3.6.2 python 命令缺失(需要软链接到 python3)
167
+ if ! command -v dx >/dev/null 2>&1; then
168
+ echo "WARN: dx still NOT_FOUND (check PATH for pnpm global bin: pnpm bin -g)"
169
+ fi
149
170
 
150
- 如果 `python` 不存在但 `python3` 存在,执行:
171
+ # OpenCode 模板(确保 opencode_attach.py 存在)
172
+ if [ ! -f "$HOME/.opencode/commands/opencode_attach.py" ]; then
173
+ dx initial
174
+ fi
151
175
 
152
- ```bash
153
- set -e
176
+ # opencode CLI
177
+ if [ "$os" = "Darwin" ] && [ "$has_brew" = 1 ]; then
178
+ brew update >/dev/null
179
+ brew tap anomalyco/tap >/dev/null 2>&1 || true
180
+ brew install anomalyco/tap/opencode >/dev/null 2>&1 || brew upgrade opencode >/dev/null 2>&1 || true
181
+ else
182
+ # 官方支持 npm/bun/pnpm;这里统一用 pnpm
183
+ pnpm add -g opencode-ai@latest
184
+ fi
154
185
 
155
- if command -v python >/dev/null 2>&1; then
156
- python --version
157
- exit 0
186
+ if ! command -v opencode >/dev/null 2>&1; then
187
+ echo "WARN: opencode still NOT_FOUND (check PATH for pnpm global bin: pnpm bin -g)"
158
188
  fi
159
189
 
160
- PY3="$(command -v python3 2>/dev/null || true)"
161
- if [ -z "$PY3" ]; then
162
- echo "python3 NOT_FOUND"
163
- exit 1
190
+ # ripgrep
191
+ if [ "$has_brew" = 1 ]; then
192
+ brew install ripgrep >/dev/null 2>&1 || brew upgrade ripgrep >/dev/null 2>&1 || true
193
+ elif [ "$has_apt" = 1 ] && [ "$need_sudo" = 1 ]; then
194
+ sudo apt-get update -y >/dev/null
195
+ sudo apt-get install -y ripgrep
196
+ else
197
+ echo "WARN: no brew/apt-get; skip ripgrep auto-install"
164
198
  fi
165
199
 
166
- PY_DIR="$(dirname "$PY3")"
167
- if [ -w "$PY_DIR" ]; then
168
- ln -sf "$PY3" "$PY_DIR/python"
169
- echo "linked: $PY_DIR/python -> $PY3"
200
+ # python3 (+ python 软链接尽量走系统包)
201
+ if [ "$has_brew" = 1 ]; then
202
+ brew install python >/dev/null 2>&1 || brew upgrade python >/dev/null 2>&1 || true
203
+ elif [ "$has_apt" = 1 ] && [ "$need_sudo" = 1 ]; then
204
+ sudo apt-get update -y >/dev/null
205
+ sudo apt-get install -y python3 python3-venv python3-pip python-is-python3
170
206
  else
171
- ln -sf "$PY3" "$HOME/.local/bin/python"
172
- echo "linked: $HOME/.local/bin/python -> $PY3"
173
- echo "NOTE: ensure $HOME/.local/bin is in PATH"
207
+ echo "WARN: no brew/apt-get; skip python auto-install"
174
208
  fi
175
209
 
176
- python --version
177
- ```
210
+ # agent-browser(安装/升级 + 安装 Chromium)
211
+ if [ "$os" = "Darwin" ] && [ "$has_brew" = 1 ]; then
212
+ brew install agent-browser >/dev/null 2>&1 || brew upgrade agent-browser >/dev/null 2>&1 || true
213
+ else
214
+ pnpm add -g agent-browser@latest
215
+ fi
178
216
 
179
- ### 3.9 自动 attach(推荐)
217
+ if command -v agent-browser >/dev/null 2>&1; then
218
+ agent-browser install >/dev/null 2>&1 || agent-browser install --with-deps
219
+ fi
180
220
 
181
- 执行 attach(会自动覆盖/新建对应节点,其它不动,并生成备份文件):
221
+ # attach(写入 ~/.config/opencode/*.json;自动备份 .bak.*)
222
+ if command -v python3 >/dev/null 2>&1 && [ -f "$HOME/.opencode/commands/opencode_attach.py" ]; then
223
+ python3 "$HOME/.opencode/commands/opencode_attach.py"
224
+ else
225
+ echo "ERROR: python3/opencode_attach.py NOT_READY"
226
+ exit 1
227
+ fi
182
228
 
183
- ```bash
184
- python3 ~/.opencode/commands/opencode_attach.py
229
+ echo "DONE"
185
230
  ```
186
231
 
187
-
188
-
189
232
  ---
190
233
 
191
234
  ## 输出格式
@@ -203,4 +246,4 @@ python3 ~/.opencode/commands/opencode_attach.py
203
246
  ```
204
247
 
205
248
  **修复完成后:**
206
- 输出最终状态表格,确认所有项目均为
249
+ 重复执行 Step 1,输出最终状态表格,确认所有项目均为 OK/READY/CONFIGURED。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ranger1/dx",
3
- "version": "0.1.43",
3
+ "version": "0.1.44",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {