@silicaclaw/cli 1.0.0-beta.10 → 1.0.0-beta.12
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/package.json +1 -1
- package/scripts/quickstart.sh +81 -12
package/package.json
CHANGED
package/scripts/quickstart.sh
CHANGED
|
@@ -47,6 +47,50 @@ run_cmd_may_fail() {
|
|
|
47
47
|
return $code
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
first_writable_path_dir() {
|
|
51
|
+
local path_value="${PATH:-}"
|
|
52
|
+
local old_ifs="$IFS"
|
|
53
|
+
IFS=':'
|
|
54
|
+
for d in $path_value; do
|
|
55
|
+
if [ -n "$d" ] && [ -d "$d" ] && [ -w "$d" ] && [ -x "$d" ]; then
|
|
56
|
+
printf '%s' "$d"
|
|
57
|
+
IFS="$old_ifs"
|
|
58
|
+
return 0
|
|
59
|
+
fi
|
|
60
|
+
done
|
|
61
|
+
IFS="$old_ifs"
|
|
62
|
+
return 1
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
install_command_shim() {
|
|
66
|
+
local bindir="$1"
|
|
67
|
+
local script_path="$WORK_DIR/scripts/silicaclaw-cli.mjs"
|
|
68
|
+
local target="$bindir/silicaclaw"
|
|
69
|
+
if [ ! -f "$script_path" ]; then
|
|
70
|
+
echo "未找到 CLI 脚本: $script_path"
|
|
71
|
+
return 1
|
|
72
|
+
fi
|
|
73
|
+
cat >"$target" <<EOF
|
|
74
|
+
#!/usr/bin/env bash
|
|
75
|
+
set -euo pipefail
|
|
76
|
+
exec node "$script_path" "\$@"
|
|
77
|
+
EOF
|
|
78
|
+
chmod +x "$target"
|
|
79
|
+
return 0
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
default_system_bin_dir() {
|
|
83
|
+
if [ -d "/usr/local/bin" ]; then
|
|
84
|
+
printf '/usr/local/bin'
|
|
85
|
+
return 0
|
|
86
|
+
fi
|
|
87
|
+
if [ -d "/opt/homebrew/bin" ]; then
|
|
88
|
+
printf '/opt/homebrew/bin'
|
|
89
|
+
return 0
|
|
90
|
+
fi
|
|
91
|
+
printf '/usr/local/bin'
|
|
92
|
+
}
|
|
93
|
+
|
|
50
94
|
ask_yes_no() {
|
|
51
95
|
local prompt="$1"
|
|
52
96
|
local default="${2:-Y}"
|
|
@@ -172,23 +216,48 @@ fi
|
|
|
172
216
|
title "安装系统命令(silicaclaw)"
|
|
173
217
|
if command -v silicaclaw >/dev/null 2>&1; then
|
|
174
218
|
echo "已检测到系统命令: $(command -v silicaclaw)"
|
|
175
|
-
echo "
|
|
219
|
+
echo "跳过命令安装。"
|
|
176
220
|
else
|
|
177
|
-
echo "
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
echo "
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
echo "
|
|
221
|
+
echo "将尝试无 sudo 安装 silicaclaw 命令到 PATH 中可写目录。"
|
|
222
|
+
BIN_DIR="$(first_writable_path_dir || true)"
|
|
223
|
+
INSTALLED=0
|
|
224
|
+
if [ -n "${BIN_DIR:-}" ]; then
|
|
225
|
+
if install_command_shim "$BIN_DIR"; then
|
|
226
|
+
echo "命令已安装: $BIN_DIR/silicaclaw"
|
|
227
|
+
hash -r || true
|
|
228
|
+
if command -v silicaclaw >/dev/null 2>&1; then
|
|
229
|
+
echo "验证成功: $(command -v silicaclaw)"
|
|
230
|
+
INSTALLED=1
|
|
186
231
|
else
|
|
187
|
-
echo "
|
|
232
|
+
echo "命令已写入,但当前 shell 未立即识别。请新开终端后运行 silicaclaw。"
|
|
188
233
|
fi
|
|
234
|
+
else
|
|
235
|
+
echo "命令安装失败。可继续使用: npx @silicaclaw/cli@beta <command>"
|
|
189
236
|
fi
|
|
190
237
|
else
|
|
191
|
-
echo "
|
|
238
|
+
echo "当前 PATH 中没有可写目录,无法无 sudo 安装系统命令。"
|
|
239
|
+
fi
|
|
240
|
+
|
|
241
|
+
if [ "$INSTALLED" != "1" ]; then
|
|
242
|
+
SYS_BIN_DIR="$(default_system_bin_dir)"
|
|
243
|
+
echo "为保证开箱即用体验,建议安装到系统目录: $SYS_BIN_DIR/silicaclaw"
|
|
244
|
+
if ask_yes_no "是否使用 sudo 安装系统命令?" "Y"; then
|
|
245
|
+
run_cmd "sudo mkdir -p \"$SYS_BIN_DIR\""
|
|
246
|
+
run_cmd "sudo tee \"$SYS_BIN_DIR/silicaclaw\" >/dev/null <<'EOF'
|
|
247
|
+
#!/usr/bin/env bash
|
|
248
|
+
set -euo pipefail
|
|
249
|
+
exec node \"$WORK_DIR/scripts/silicaclaw-cli.mjs\" \"\$@\"
|
|
250
|
+
EOF"
|
|
251
|
+
run_cmd "sudo chmod +x \"$SYS_BIN_DIR/silicaclaw\""
|
|
252
|
+
hash -r || true
|
|
253
|
+
if command -v silicaclaw >/dev/null 2>&1; then
|
|
254
|
+
echo "验证成功: $(command -v silicaclaw)"
|
|
255
|
+
else
|
|
256
|
+
echo "安装完成,但当前 shell 未刷新。请新开终端后运行 silicaclaw。"
|
|
257
|
+
fi
|
|
258
|
+
else
|
|
259
|
+
echo "已跳过 sudo 安装。你仍可使用: npx @silicaclaw/cli@beta <command>"
|
|
260
|
+
fi
|
|
192
261
|
fi
|
|
193
262
|
fi
|
|
194
263
|
|