claude-pangu 2.2.3 → 2.2.6

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://code.claude.com/plugin-schema.json",
3
3
  "name": "oh-my-claude",
4
- "version": "2.2.3",
5
- "hooks": "./hooks/hooks.json",
4
+ "version": "2.2.6",
5
+ "hooks": "../hooks/hooks.json",
6
6
  "description": "基于中国传统文化的 Claude Code 智能编排插件 - A Claude Code plugin inspired by Chinese traditional culture",
7
7
  "author": "ZDragon17",
8
8
  "contributors": [
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-installer.d.ts","sourceRoot":"","sources":["../../lib/plugin-installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,aAAa,EAAuB,MAAM,sBAAsB,CAAC;AA2B1E;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CA+DjE;AAID;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAuD/D;AAID;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAWzC;AA8BD;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAuCpD;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAyBxD"}
1
+ {"version":3,"file":"plugin-installer.d.ts","sourceRoot":"","sources":["../../lib/plugin-installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,aAAa,EAAuB,MAAM,sBAAsB,CAAC;AA2B1E;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CA+DjE;AAID;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAuD/D;AAID;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAWzC;AA8BD;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CA0CpD;AAwHD;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAyBxD"}
@@ -211,6 +211,8 @@ export function registerPluginToClaudeCode() {
211
211
  writeInstalledPlugins(installedPlugins);
212
212
  success('插件已注册到 Claude Code');
213
213
  info(`注册路径: ${INSTALLED_PLUGINS_PATH}`);
214
+ // 同步 hooks 到 settings.json(关键步骤!)
215
+ syncHooksToSettings();
214
216
  return true;
215
217
  }
216
218
  catch (err) {
@@ -219,6 +221,101 @@ export function registerPluginToClaudeCode() {
219
221
  return false;
220
222
  }
221
223
  }
224
+ // ==================== Hooks 同步 ====================
225
+ /** settings.json 路径 */
226
+ const SETTINGS_PATH = path.join(os.homedir(), '.claude', 'settings.json');
227
+ /**
228
+ * 同步 hooks 配置到 settings.json
229
+ * Claude Code 需要在 settings.json 中配置 hooks 才能生效
230
+ */
231
+ function syncHooksToSettings() {
232
+ info('正在同步 hooks 到 settings.json...');
233
+ try {
234
+ // 读取现有 settings.json
235
+ let settings = {};
236
+ if (fs.existsSync(SETTINGS_PATH)) {
237
+ try {
238
+ const content = fs.readFileSync(SETTINGS_PATH, 'utf-8');
239
+ settings = JSON.parse(content);
240
+ }
241
+ catch {
242
+ warn('settings.json 解析失败,将创建新配置');
243
+ }
244
+ }
245
+ // 备份 settings.json
246
+ if (fs.existsSync(SETTINGS_PATH)) {
247
+ const backupPath = `${SETTINGS_PATH}.backup-${Date.now()}`;
248
+ fs.copyFileSync(SETTINGS_PATH, backupPath);
249
+ }
250
+ // 定义核心 hooks(使用插件安装路径)
251
+ const coreHooks = {
252
+ PostToolUse: [
253
+ {
254
+ type: 'command',
255
+ command: `bash "${PLUGIN_DIR}/hooks/progress-notifier.sh"`,
256
+ timeout: 3000
257
+ },
258
+ {
259
+ type: 'command',
260
+ command: `bash "${PLUGIN_DIR}/hooks/context-smart-alert.sh"`,
261
+ timeout: 2000
262
+ }
263
+ ],
264
+ Stop: [
265
+ {
266
+ type: 'command',
267
+ command: `bash "${PLUGIN_DIR}/hooks/todo-continuation.sh"`,
268
+ timeout: 3000
269
+ },
270
+ {
271
+ type: 'command',
272
+ command: `bash "${PLUGIN_DIR}/hooks/ralph-loop.sh"`,
273
+ timeout: 3000
274
+ }
275
+ ]
276
+ };
277
+ // 合并 hooks(避免重复)
278
+ if (!settings.hooks) {
279
+ settings.hooks = {};
280
+ }
281
+ let hooksAdded = 0;
282
+ for (const [hookType, hooks] of Object.entries(coreHooks)) {
283
+ if (!settings.hooks[hookType]) {
284
+ settings.hooks[hookType] = [];
285
+ }
286
+ // 获取现有命令列表
287
+ const existingCommands = new Set(settings.hooks[hookType]
288
+ .filter((h) => typeof h === 'object' && 'command' in h)
289
+ .map(h => h.command));
290
+ // 添加新的 hooks(如果不存在)
291
+ for (const hook of hooks) {
292
+ // 检查是否已存在相同脚本的 hook(忽略路径差异)
293
+ const scriptName = hook.command.split('/').pop() || '';
294
+ const alreadyExists = Array.from(existingCommands).some(cmd => cmd.includes(scriptName));
295
+ if (!alreadyExists) {
296
+ settings.hooks[hookType].push(hook);
297
+ hooksAdded++;
298
+ }
299
+ }
300
+ }
301
+ // 写回 settings.json
302
+ const settingsDir = path.dirname(SETTINGS_PATH);
303
+ if (!fs.existsSync(settingsDir)) {
304
+ fs.mkdirSync(settingsDir, { recursive: true });
305
+ }
306
+ fs.writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2), 'utf-8');
307
+ if (hooksAdded > 0) {
308
+ success(`hooks 已同步到 settings.json (新增 ${hooksAdded} 个)`);
309
+ }
310
+ else {
311
+ info('hooks 已是最新,无需更新');
312
+ }
313
+ }
314
+ catch (err) {
315
+ warn(`hooks 同步失败: ${err instanceof Error ? err.message : 'Unknown error'}`);
316
+ warn('请手动配置 hooks,或运行 /diagnose 获取帮助');
317
+ }
318
+ }
222
319
  /**
223
320
  * 从 Claude Code 的 installed_plugins.json 移除插件注册
224
321
  */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-installer.js","sourceRoot":"","sources":["../../lib/plugin-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-installer.js","sourceRoot":"","sources":["../../lib/plugin-installer.ts"],"names":[],"mappings":"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"}
@@ -132,7 +132,7 @@ if [ "$usage_percent" -ge "$CRITICAL_THRESHOLD" ]; then
132
132
  record_alert_time
133
133
  progress_bar=$(generate_progress_bar "$usage_percent")
134
134
 
135
- printf '{"systemMessage":"\\n\\n┌─────────────────────────────────────────┐\\n│ 🚨 CONTEXT CRITICAL - 上下文即将耗尽 │\\n└─────────────────────────────────────────┘\\n\\n 📊 [%s] %d%%\\n ~%dk / %dk tokens\\n\\n ⚡ 立即行动 (选一个):\\n • /context compact 压缩历史\\n • /session save 保存进度后开新会话\\n\\n ⚠️ 继续操作可能导致会话中断!\\n"}\n' "$progress_bar" "$usage_percent" "$((accumulated_tokens / 1000))" "$((MAX_CONTEXT_TOKENS / 1000))"
135
+ printf '{"hookSpecificOutput":{"additionalContext":"\\n\\n┌─────────────────────────────────────────┐\\n│ 🚨 CONTEXT CRITICAL - 上下文即将耗尽 │\\n└─────────────────────────────────────────┘\\n\\n 📊 [%s] %d%%\\n ~%dk / %dk tokens\\n\\n ⚡ 立即行动 (选一个):\\n • /context compact 压缩历史\\n • /session save 保存进度后开新会话\\n\\n ⚠️ 继续操作可能导致会话中断!\\n"}}\n' "$progress_bar" "$usage_percent" "$((accumulated_tokens / 1000))" "$((MAX_CONTEXT_TOKENS / 1000))"
136
136
  exit 0
137
137
  fi
138
138
 
@@ -144,7 +144,7 @@ if [ "$usage_percent" -ge "$WARNING_THRESHOLD" ]; then
144
144
  record_alert_time
145
145
  progress_bar=$(generate_progress_bar "$usage_percent")
146
146
 
147
- printf '{"systemMessage":"\\n\\n┌──────────────────────────────────────┐\\n│ ⚠️ CONTEXT WARNING - 请尽快处理 │\\n└──────────────────────────────────────┘\\n\\n 📊 [%s] %d%%\\n ~%dk / %dk tokens\\n\\n 💡 建议: /context compact 压缩历史\\n"}\n' "$progress_bar" "$usage_percent" "$((accumulated_tokens / 1000))" "$((MAX_CONTEXT_TOKENS / 1000))"
147
+ printf '{"hookSpecificOutput":{"additionalContext":"\\n\\n┌──────────────────────────────────────┐\\n│ ⚠️ CONTEXT WARNING - 请尽快处理 │\\n└──────────────────────────────────────┘\\n\\n 📊 [%s] %d%%\\n ~%dk / %dk tokens\\n\\n 💡 建议: /context compact 压缩历史\\n"}}\n' "$progress_bar" "$usage_percent" "$((accumulated_tokens / 1000))" "$((MAX_CONTEXT_TOKENS / 1000))"
148
148
  exit 0
149
149
  fi
150
150
 
@@ -156,7 +156,7 @@ if [ "$usage_percent" -ge "$HINT_THRESHOLD" ]; then
156
156
  record_alert_time
157
157
  progress_bar=$(generate_progress_bar "$usage_percent")
158
158
 
159
- printf '{"systemMessage":"\\n 💡 上下文: [%s] %d%% - 使用 /context 查看详情\\n"}\n' "$progress_bar" "$usage_percent"
159
+ printf '{"hookSpecificOutput":{"additionalContext":"\\n 💡 上下文: [%s] %d%% - 使用 /context 查看详情\\n"}}\n' "$progress_bar" "$usage_percent"
160
160
  exit 0
161
161
  fi
162
162
 
@@ -82,11 +82,23 @@ clear_all_dedup() {
82
82
  }
83
83
 
84
84
  # 带去重的消息输出函数
85
- # $1: systemMessage 内容(不包含 JSON 包装)
85
+ # $1: 消息内容(不包含 JSON 包装)
86
+ # 注意:使用 additionalContext 而非 systemMessage(systemMessage 非 Claude Code 标准字段)
86
87
  output_system_message() {
87
88
  local message="$1"
88
89
 
89
90
  if should_show_message "$message"; then
90
- printf '{"systemMessage":"%s"}\n' "$message"
91
+ printf '{"hookSpecificOutput":{"additionalContext":"%s"}}\n' "$message"
92
+ fi
93
+ }
94
+
95
+ # 带去重的重要消息输出函数(会显示给用户)
96
+ # $1: 消息内容
97
+ output_user_visible_message() {
98
+ local message="$1"
99
+
100
+ if should_show_message "$message"; then
101
+ # 使用 additionalContext 添加指令让 Claude 显示给用户
102
+ printf '{"hookSpecificOutput":{"additionalContext":"[DISPLAY TO USER]\\n%s"}}\n' "$message"
91
103
  fi
92
104
  }
@@ -109,21 +109,40 @@ else
109
109
  fi
110
110
  fi
111
111
 
112
- # 只处理 TodoWrite 工具调用
112
+ # 只处理 TodoWrite 工具调用(兼容 MCP 工具名格式)
113
113
  debug_log "Extracted tool_name: [$tool_name]"
114
- if [ "$tool_name" != "TodoWrite" ]; then
115
- debug_log "Not TodoWrite, exiting"
114
+ if [ "$tool_name" != "TodoWrite" ] && [ "$tool_name" != "mcp_todowrite" ]; then
115
+ debug_log "Not TodoWrite/mcp_todowrite, exiting"
116
116
  exit 0
117
117
  fi
118
118
  debug_log "Processing TodoWrite event"
119
119
 
120
120
  # 提取 todo 统计信息
121
121
  if [ "$HAS_JQ" -eq 1 ]; then
122
- # 使用 jq 精确解析
123
- completed=$(echo "$input" | jq -r '.tool_input.todos | map(select(.status == "completed")) | length' 2>/dev/null)
124
- in_progress=$(echo "$input" | jq -r '.tool_input.todos | map(select(.status == "in_progress")) | length' 2>/dev/null)
125
- pending=$(echo "$input" | jq -r '.tool_input.todos | map(select(.status == "pending")) | length' 2>/dev/null)
126
- current_task=$(echo "$input" | jq -r '.tool_input.todos | map(select(.status == "in_progress")) | .[0].content // "准备下一个任务"' 2>/dev/null)
122
+ # 使用 jq 精确解析(兼容多种 JSON 路径)
123
+ # MCP 工具可能在: .tool_input.todos, .parameters.todos, .input.todos, 或直接 .todos
124
+ todos_path=""
125
+ for path in ".tool_input.todos" ".parameters.todos" ".input.todos" ".todos"; do
126
+ check=$(echo "$input" | jq -r "$path // empty" 2>/dev/null)
127
+ if [ -n "$check" ] && [ "$check" != "null" ]; then
128
+ todos_path="$path"
129
+ break
130
+ fi
131
+ done
132
+ debug_log "Found todos at path: $todos_path"
133
+
134
+ if [ -n "$todos_path" ]; then
135
+ completed=$(echo "$input" | jq -r "$todos_path | map(select(.status == \"completed\")) | length" 2>/dev/null)
136
+ in_progress=$(echo "$input" | jq -r "$todos_path | map(select(.status == \"in_progress\")) | length" 2>/dev/null)
137
+ pending=$(echo "$input" | jq -r "$todos_path | map(select(.status == \"pending\")) | length" 2>/dev/null)
138
+ current_task=$(echo "$input" | jq -r "$todos_path | map(select(.status == \"in_progress\")) | .[0].content // \"准备下一个任务\"" 2>/dev/null)
139
+ else
140
+ # 如果找不到路径,使用降级方案
141
+ completed=$(count_status "$input" "completed")
142
+ in_progress=$(count_status "$input" "in_progress")
143
+ pending=$(count_status "$input" "pending")
144
+ current_task=$(extract_current_task "$input")
145
+ fi
127
146
  else
128
147
  # 降级方案:使用纯 shell 解析
129
148
  completed=$(count_status "$input" "completed")
@@ -215,18 +234,24 @@ else
215
234
  progress_line2=$(printf '✅ 所有任务完成!')
216
235
  fi
217
236
 
218
- # 转义 JSON 特殊字符
237
+ # 转义 JSON 特殊字符(Windows Git Bash 兼容)
219
238
  escape_json() {
220
- printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g; s/\t/\\t/g'
239
+ local str="$1"
240
+ # 使用 bash 内置替换,避免 sed 处理 emoji 时出错
241
+ str="${str//\\/\\\\}" # 转义反斜杠
242
+ str="${str//\"/\\\"}" # 转义双引号
243
+ str="${str//$'\t'/\\t}" # 转义制表符
244
+ str="${str//$'\n'/\\n}" # 转义换行符
245
+ printf '%s' "$str"
221
246
  }
222
247
 
223
248
  line1_escaped=$(escape_json "$progress_line1")
224
249
  line2_escaped=$(escape_json "$progress_line2")
225
250
 
226
- # 输出 JSON(使用 hookSpecificOutput 确保 Claude 能看到并展示给用户)
227
- # systemMessage 用于直接显示给用户,additionalContext 用于 Claude 上下文
228
- output=$(printf '{"systemMessage":"\\n%s\\n%s\\n","hookSpecificOutput":{"hookEventName":"PostToolUse","additionalContext":"【任务进度】%s | %s"}}' \
229
- "$line1_escaped" "$line2_escaped" "$line1_escaped" "$line2_escaped")
251
+ # 输出 JSON(使用 additionalContext Claude 看到进度并显示给用户)
252
+ # 注意:systemMessage 不是标准字段,只使用 additionalContext
253
+ output=$(printf '{"hookSpecificOutput":{"additionalContext":"\\n【任务进度】\\n%s\\n%s\\n"}}' \
254
+ "$line1_escaped" "$line2_escaped")
230
255
 
231
256
  debug_log "Final output: $output"
232
257
  printf '%s\n' "$output"
@@ -51,6 +51,7 @@ if [ -f "$RALPH_STATE_FILE" ]; then
51
51
  fi
52
52
 
53
53
  # 返回 JSON 阻止退出并注入继续指令
54
- printf '{"decision":"block","systemMessage":"\\n\\n🔄 **Ralph Loop %d 次迭代**\\n\\n## 强制自检流程\\n\\n**必须执行以下步骤:**\\n\\n1. 调用 `mcp_todoread` 工具查看当前 TODO 列表\\n2. 检查是否有 `pending` 或 `in_progress` 状态的任务\\n3. 如果有未完成任务 → 继续工作,不要停止\\n4. 如果所有任务都是 `completed` → 执行结束流程\\n\\n## 结束方式\\n\\n当所有 TODO 完成后:\\n1. 向用户报告任务完成\\n2. 执行: `rm -f .claude/ralph-loop.local.md` 删除循环状态文件\\n3. 循环将自动结束\\n\\n**⚠️ 不要跳过 todoread 检查!**\\n"}\n' "$NEXT_ITERATION"
54
+ # 注意:Stop hook 使用 decision + reason 字段(非 systemMessage)
55
+ printf '{"decision":"block","reason":"🔄 Ralph Loop 第 %d 次迭代 - 必须先检查 TODO 列表","hookSpecificOutput":{"additionalContext":"\\n\\n🔄 **Ralph Loop 第 %d 次迭代**\\n\\n## 强制自检流程\\n\\n**必须执行以下步骤:**\\n\\n1. 调用 `mcp_todoread` 工具查看当前 TODO 列表\\n2. 检查是否有 `pending` 或 `in_progress` 状态的任务\\n3. 如果有未完成任务 → 继续工作,不要停止\\n4. 如果所有任务都是 `completed` → 执行结束流程\\n\\n## 结束方式\\n\\n当所有 TODO 完成后:\\n1. 向用户报告任务完成\\n2. 执行: `rm -f .claude/ralph-loop.local.md` 删除循环状态文件\\n3. 循环将自动结束\\n\\n**⚠️ 不要跳过 todoread 检查!**\\n"}}\n' "$NEXT_ITERATION" "$NEXT_ITERATION"
55
56
 
56
57
  exit 0
@@ -43,7 +43,7 @@ if [ -f "$YISHAN_STATE_FILE" ]; then
43
43
  fi
44
44
 
45
45
  # 返回 JSON 阻止退出
46
- # 注意:使用 printf 而不是 echo 来确保正确的 JSON 格式
47
- printf '{"decision":"block","systemMessage":"\\n\\n🏔️ **愚公移山 第 %d 次搬石**\\n\\n## 强制自检流程\\n\\n**必须执行以下步骤:**\\n\\n1. 调用 `mcp_todoread` 工具查看当前 TODO 列表\\n2. 检查是否有 `pending` 或 `in_progress` 状态的任务\\n3. 如果有未完成任务 → 继续工作,不要停止\\n4. 如果所有任务都是 `completed` → 执行结束流程\\n\\n## 结束方式\\n\\n当所有 TODO 完成后:\\n1. 向用户报告任务完成\\n2. 执行: `rm -f .claude/yishan-loop.local.md` 删除循环状态文件\\n3. 循环将自动结束\\n\\n**⚠️ 不要跳过 todoread 检查!**\\n"}\n' "$NEXT_ITERATION"
46
+ # 注意:Stop hook 使用 decision + reason 字段(非 systemMessage)
47
+ printf '{"decision":"block","reason":"🏔️ 愚公移山 第 %d 次搬石 - 必须先检查 TODO 列表","hookSpecificOutput":{"additionalContext":"\\n\\n🏔️ **愚公移山 第 %d 次搬石**\\n\\n## 强制自检流程\\n\\n**必须执行以下步骤:**\\n\\n1. 调用 `mcp_todoread` 工具查看当前 TODO 列表\\n2. 检查是否有 `pending` 或 `in_progress` 状态的任务\\n3. 如果有未完成任务 → 继续工作,不要停止\\n4. 如果所有任务都是 `completed` → 执行结束流程\\n\\n## 结束方式\\n\\n当所有 TODO 完成后:\\n1. 向用户报告任务完成\\n2. 执行: `rm -f .claude/yishan-loop.local.md` 删除循环状态文件\\n3. 循环将自动结束\\n\\n**⚠️ 不要跳过 todoread 检查!**\\n"}}\n' "$NEXT_ITERATION" "$NEXT_ITERATION"
48
48
 
49
49
  exit 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-pangu",
3
- "version": "2.2.3",
3
+ "version": "2.2.6",
4
4
  "description": "基于中国传统文化的 Claude Code 智能编排插件 - A Claude Code plugin inspired by Chinese traditional culture (原名 oh-my-claude)",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -22,6 +22,7 @@ PLUGIN_NAME="oh-my-claude"
22
22
  INSTALL_DIR="$HOME/.claude/plugins/$PLUGIN_NAME"
23
23
  COMMANDS_DIR="$HOME/.claude/commands"
24
24
  SKILLS_DIR="$HOME/.claude/skills"
25
+ SETTINGS_FILE="$HOME/.claude/settings.json"
25
26
 
26
27
  # 输出函数
27
28
  info() { echo -e "${BLUE}ℹ️ $1${NC}"; }
@@ -224,6 +225,123 @@ install_plugin() {
224
225
  fi
225
226
  }
226
227
 
228
+ # 同步 hooks 配置到 settings.json
229
+ setup_hooks() {
230
+ info "正在配置 hooks..."
231
+
232
+ # 检查 settings.json 是否存在
233
+ if [ ! -f "$SETTINGS_FILE" ]; then
234
+ warn "未找到 $SETTINGS_FILE,跳过 hooks 配置"
235
+ warn "请手动将 hooks/hooks.json 中的配置添加到 settings.json"
236
+ return 0
237
+ fi
238
+
239
+ # 备份 settings.json
240
+ cp "$SETTINGS_FILE" "${SETTINGS_FILE}.backup-$(date +%s)" 2>/dev/null || true
241
+
242
+ # 检查是否已经配置了 oh-my-claude hooks(通过检查 progress-notifier)
243
+ if grep -q "progress-notifier.sh" "$SETTINGS_FILE" 2>/dev/null; then
244
+ success "hooks 已配置,跳过"
245
+ return 0
246
+ fi
247
+
248
+ # 尝试使用 Python 合并 JSON(跨平台兼容)
249
+ if command -v python3 >/dev/null 2>&1; then
250
+ PYTHON_CMD="python3"
251
+ elif command -v python >/dev/null 2>&1; then
252
+ PYTHON_CMD="python"
253
+ else
254
+ warn "未找到 Python,无法自动配置 hooks"
255
+ warn "请手动将以下内容添加到 $SETTINGS_FILE 的 hooks 部分:"
256
+ echo ""
257
+ echo ' "hooks": {'
258
+ echo ' "PostToolUse": ['
259
+ echo ' {'
260
+ echo ' "type": "command",'
261
+ echo " \"command\": \"bash \\\"$INSTALL_DIR/hooks/progress-notifier.sh\\\"\","
262
+ echo ' "timeout": 3000'
263
+ echo ' }'
264
+ echo ' ]'
265
+ echo ' }'
266
+ echo ""
267
+ return 0
268
+ fi
269
+
270
+ # 使用 Python 脚本合并 hooks 配置
271
+ $PYTHON_CMD << PYTHON_SCRIPT
272
+ import json
273
+ import sys
274
+ import os
275
+
276
+ settings_file = "$SETTINGS_FILE"
277
+ install_dir = "$INSTALL_DIR"
278
+
279
+ try:
280
+ with open(settings_file, 'r', encoding='utf-8') as f:
281
+ settings = json.load(f)
282
+ except Exception as e:
283
+ print(f"读取 settings.json 失败: {e}", file=sys.stderr)
284
+ sys.exit(1)
285
+
286
+ # 定义核心 hooks(只添加最重要的几个)
287
+ core_hooks = {
288
+ "PostToolUse": [
289
+ {
290
+ "type": "command",
291
+ "command": f'bash "{install_dir}/hooks/progress-notifier.sh"',
292
+ "timeout": 3000
293
+ },
294
+ {
295
+ "type": "command",
296
+ "command": f'bash "{install_dir}/hooks/context-smart-alert.sh"',
297
+ "timeout": 2000
298
+ }
299
+ ],
300
+ "Stop": [
301
+ {
302
+ "type": "command",
303
+ "command": f'bash "{install_dir}/hooks/todo-continuation.sh"',
304
+ "timeout": 3000
305
+ },
306
+ {
307
+ "type": "command",
308
+ "command": f'bash "{install_dir}/hooks/ralph-loop.sh"',
309
+ "timeout": 3000
310
+ }
311
+ ]
312
+ }
313
+
314
+ # 合并 hooks
315
+ if "hooks" not in settings:
316
+ settings["hooks"] = {}
317
+
318
+ for hook_type, hooks in core_hooks.items():
319
+ if hook_type not in settings["hooks"]:
320
+ settings["hooks"][hook_type] = []
321
+
322
+ # 添加新的 hooks(避免重复)
323
+ existing_commands = [h.get("command", "") for h in settings["hooks"][hook_type] if isinstance(h, dict)]
324
+ for hook in hooks:
325
+ if hook["command"] not in existing_commands:
326
+ settings["hooks"][hook_type].append(hook)
327
+
328
+ # 写回文件
329
+ try:
330
+ with open(settings_file, 'w', encoding='utf-8') as f:
331
+ json.dump(settings, f, indent=2, ensure_ascii=False)
332
+ print("hooks 配置成功")
333
+ except Exception as e:
334
+ print(f"写入 settings.json 失败: {e}", file=sys.stderr)
335
+ sys.exit(1)
336
+ PYTHON_SCRIPT
337
+
338
+ if [ $? -eq 0 ]; then
339
+ success "hooks 配置完成"
340
+ else
341
+ warn "hooks 自动配置失败,请手动配置"
342
+ fi
343
+ }
344
+
227
345
  # 验证安装
228
346
  verify_installation() {
229
347
  info "验证安装..."
@@ -283,6 +401,7 @@ main() {
283
401
  show_banner
284
402
  check_dependencies
285
403
  install_plugin
404
+ setup_hooks
286
405
  verify_installation
287
406
  show_success
288
407
  }