claude-pangu 2.1.4 → 2.1.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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +2 -0
- package/hooks/agent-collaboration.sh +1 -1
- package/hooks/agent-handoff-prompt.sh +55 -39
- package/hooks/agent-usage-reminder.sh +22 -2
- package/hooks/agent-usage-tracker.sh +1 -1
- package/hooks/anthropic-context-window-limit-recovery.sh +1 -1
- package/hooks/ast-grep.sh +1 -1
- package/hooks/at-agent-summoner.sh +1 -1
- package/hooks/atlas.sh +1 -1
- package/hooks/auto-slash-command.sh +1 -1
- package/hooks/auto-update-checker.sh +1 -1
- package/hooks/background-compaction.sh +1 -1
- package/hooks/background-notification.sh +1 -1
- package/hooks/code-quality-checker.sh +1 -1
- package/hooks/context-compression.sh +1 -1
- package/hooks/context-smart-alert.sh +1 -1
- package/hooks/context-window-monitor.sh +1 -1
- package/hooks/delegate-task-retry.sh +1 -1
- package/hooks/directory-agents-injector.sh +1 -1
- package/hooks/directory-readme-injector.sh +1 -1
- package/hooks/edit-error-recovery.sh +1 -1
- package/hooks/empty-task-response-detector.sh +1 -1
- package/hooks/error-friendly-display.sh +55 -12
- package/hooks/error-recovery.sh +1 -1
- package/hooks/failure-transparency.sh +1 -1
- package/hooks/first-use-onboarding.sh +1 -1
- package/hooks/hook-performance-monitor.sh +1 -1
- package/hooks/interactive-bash-session.sh +1 -1
- package/hooks/keyword-detector.sh +25 -5
- package/hooks/lib/message-dedup.sh +1 -1
- package/hooks/lsp-tools.sh +1 -1
- package/hooks/operation-history.sh +1 -1
- package/hooks/output-truncator.sh +1 -1
- package/hooks/preemptive-compaction.sh +1 -1
- package/hooks/progress-notifier.sh +1 -1
- package/hooks/ralph-loop.sh +2 -2
- package/hooks/rules-injector.sh +1 -1
- package/hooks/session-recovery.sh +1 -1
- package/hooks/task-checkpointing.sh +1 -1
- package/hooks/think-mode.sh +1 -1
- package/hooks/thinking-block-validator.sh +1 -1
- package/hooks/todo-continuation.sh +2 -2
- package/hooks/tool-output-validator.sh +1 -1
- package/package.json +1 -1
- package/scripts/install.sh +6 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://code.claude.com/plugin-schema.json",
|
|
3
3
|
"name": "oh-my-claude",
|
|
4
|
-
"version": "2.1.
|
|
4
|
+
"version": "2.1.6",
|
|
5
5
|
"hooks": "./hooks/hooks.json",
|
|
6
6
|
"description": "基于中国传统文化的 Claude Code 智能编排插件 - A Claude Code plugin inspired by Chinese traditional culture",
|
|
7
7
|
"author": "ZDragon17",
|
package/README.md
CHANGED
|
@@ -803,6 +803,8 @@ model: sonnet
|
|
|
803
803
|
- [x] v2.1.2 - **用户体验简化** 🎯(`/do` 作为唯一入口、精简帮助输出)
|
|
804
804
|
- [x] v2.1.3 - **版本检测修复** 🐛(plugin.json 版本同步)
|
|
805
805
|
- [x] v2.1.4 - **用户体验第三轮** ✨(工作流模板、偏好设置、友好错误、自诊断)
|
|
806
|
+
- [x] v2.1.5 - **macOS 兼容性修复** 🍎(Shell 脚本跨平台兼容、grep 语法修复)
|
|
807
|
+
- [x] v2.1.6 - **稳定性与精准度优化** 🎯(关键词误判修复、愚公循环增强、Hook 去重)
|
|
806
808
|
|
|
807
809
|
## 🤝 贡献
|
|
808
810
|
|
|
@@ -4,27 +4,11 @@
|
|
|
4
4
|
#
|
|
5
5
|
# 触发时机: PostToolUse (Task 工具完成后)
|
|
6
6
|
# 功能: 根据完成的 Agent 类型,智能推荐下一步操作
|
|
7
|
+
#
|
|
8
|
+
# 兼容性: macOS (bash 3.2+), Linux (bash 4.0+), Windows (Git Bash)
|
|
7
9
|
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# 超时保护 (最大执行时间 1.5 秒)
|
|
12
|
-
TIMEOUT_SECONDS=1.5
|
|
13
|
-
|
|
14
|
-
# 超时处理函数
|
|
15
|
-
timeout_handler() {
|
|
16
|
-
# 静默退出,不影响用户体验
|
|
17
|
-
exit 0
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
# 设置超时 trap (如果支持)
|
|
21
|
-
if command -v timeout >/dev/null 2>&1; then
|
|
22
|
-
# 使用 timeout 命令包装主逻辑
|
|
23
|
-
TIMEOUT_AVAILABLE=true
|
|
24
|
-
else
|
|
25
|
-
# 没有 timeout 命令,使用简单的执行
|
|
26
|
-
TIMEOUT_AVAILABLE=false
|
|
27
|
-
fi
|
|
10
|
+
# 错误捕获:任何错误都静默退出,不影响用户体验
|
|
11
|
+
trap 'exit 0' ERR EXIT
|
|
28
12
|
|
|
29
13
|
# 获取工具输出(带默认值保护)
|
|
30
14
|
TOOL_OUTPUT="${CLAUDE_TOOL_OUTPUT:-}"
|
|
@@ -37,7 +21,8 @@ if [ -z "$TOOL_OUTPUT" ]; then
|
|
|
37
21
|
fi
|
|
38
22
|
|
|
39
23
|
# 安全检查:如果工具输出过长(超过 50KB),跳过处理以避免性能问题
|
|
40
|
-
|
|
24
|
+
# 使用 wc -c 替代 ${#var},更兼容老版本
|
|
25
|
+
OUTPUT_LENGTH=$(printf '%s' "$TOOL_OUTPUT" | wc -c | tr -d ' ')
|
|
41
26
|
if [ "$OUTPUT_LENGTH" -gt 51200 ]; then
|
|
42
27
|
exit 0
|
|
43
28
|
fi
|
|
@@ -379,39 +364,70 @@ EOF
|
|
|
379
364
|
}
|
|
380
365
|
|
|
381
366
|
# 检测最后使用的 Agent(从输出中推断)
|
|
367
|
+
# 使用多个 grep 调用替代 \| 语法,提高 macOS 兼容性
|
|
382
368
|
detect_agent() {
|
|
383
369
|
local output="$1"
|
|
384
370
|
|
|
385
|
-
# 检测常见的 Agent
|
|
386
|
-
if echo "$output" | grep -qi "
|
|
371
|
+
# 检测常见的 Agent 标识(每个 Agent 使用独立的条件判断)
|
|
372
|
+
if echo "$output" | grep -qi "扁鹊" || \
|
|
373
|
+
echo "$output" | grep -qi "bianque" || \
|
|
374
|
+
echo "$output" | grep -qi "望闻问切"; then
|
|
387
375
|
echo "bianque"
|
|
388
|
-
elif echo "$output" | grep -qi "
|
|
376
|
+
elif echo "$output" | grep -qi "悟空" || \
|
|
377
|
+
echo "$output" | grep -qi "wukong" || \
|
|
378
|
+
echo "$output" | grep -qi "火眼金睛"; then
|
|
389
379
|
echo "wukong"
|
|
390
|
-
elif echo "$output" | grep -qi "
|
|
380
|
+
elif echo "$output" | grep -qi "诸葛" || \
|
|
381
|
+
echo "$output" | grep -qi "zhuge" || \
|
|
382
|
+
echo "$output" | grep -qi "架构设计"; then
|
|
391
383
|
echo "zhuge"
|
|
392
|
-
elif echo "$output" | grep -qi "
|
|
384
|
+
elif echo "$output" | grep -qi "鲁班" || \
|
|
385
|
+
echo "$output" | grep -qi "luban" || \
|
|
386
|
+
echo "$output" | grep -qi "精工巧匠"; then
|
|
393
387
|
echo "luban"
|
|
394
|
-
elif echo "$output" | grep -qi "
|
|
388
|
+
elif echo "$output" | grep -qi "包拯" || \
|
|
389
|
+
echo "$output" | grep -qi "baozheng" || \
|
|
390
|
+
echo "$output" | grep -qi "测试专家"; then
|
|
395
391
|
echo "baozheng"
|
|
396
|
-
elif echo "$output" | grep -qi "
|
|
392
|
+
elif echo "$output" | grep -qi "魏征" || \
|
|
393
|
+
echo "$output" | grep -qi "weizheng" || \
|
|
394
|
+
echo "$output" | grep -qi "代码审查"; then
|
|
397
395
|
echo "weizheng"
|
|
398
|
-
elif echo "$output" | grep -qi "
|
|
396
|
+
elif echo "$output" | grep -qi "墨子" || \
|
|
397
|
+
echo "$output" | grep -qi "mozi" || \
|
|
398
|
+
echo "$output" | grep -qi "安全审计"; then
|
|
399
399
|
echo "mozi"
|
|
400
|
-
elif echo "$output" | grep -qi "
|
|
400
|
+
elif echo "$output" | grep -qi "孙子" || \
|
|
401
|
+
echo "$output" | grep -qi "sunzi" || \
|
|
402
|
+
echo "$output" | grep -qi "性能优化"; then
|
|
401
403
|
echo "sunzi"
|
|
402
|
-
elif echo "$output" | grep -qi "
|
|
404
|
+
elif echo "$output" | grep -qi "李白" || \
|
|
405
|
+
echo "$output" | grep -qi "libai" || \
|
|
406
|
+
echo "$output" | grep -qi "需求分析"; then
|
|
403
407
|
echo "libai"
|
|
404
|
-
elif echo "$output" | grep -qi "
|
|
408
|
+
elif echo "$output" | grep -qi "司马迁" || \
|
|
409
|
+
echo "$output" | grep -qi "simaqian" || \
|
|
410
|
+
echo "$output" | grep -qi "文档撰写"; then
|
|
405
411
|
echo "simaqian"
|
|
406
|
-
elif echo "$output" | grep -qi "
|
|
412
|
+
elif echo "$output" | grep -qi "仓颉" || \
|
|
413
|
+
echo "$output" | grep -qi "cangjie" || \
|
|
414
|
+
echo "$output" | grep -qi "数据库设计"; then
|
|
407
415
|
echo "cangjie"
|
|
408
|
-
elif echo "$output" | grep -qi "
|
|
416
|
+
elif echo "$output" | grep -qi "顾恺之" || \
|
|
417
|
+
echo "$output" | grep -qi "gukaizhi" || \
|
|
418
|
+
echo "$output" | grep -qi "界面美学"; then
|
|
409
419
|
echo "gukaizhi"
|
|
410
|
-
elif echo "$output" | grep -qi "
|
|
420
|
+
elif echo "$output" | grep -qi "李冰" || \
|
|
421
|
+
echo "$output" | grep -qi "libing" || \
|
|
422
|
+
echo "$output" | grep -qi "DevOps"; then
|
|
411
423
|
echo "libing"
|
|
412
|
-
elif echo "$output" | grep -qi "
|
|
424
|
+
elif echo "$output" | grep -qi "嫦娥" || \
|
|
425
|
+
echo "$output" | grep -qi "change" || \
|
|
426
|
+
echo "$output" | grep -qi "云服务"; then
|
|
413
427
|
echo "change"
|
|
414
|
-
elif echo "$output" | grep -qi "
|
|
428
|
+
elif echo "$output" | grep -qi "老子" || \
|
|
429
|
+
echo "$output" | grep -qi "laozi" || \
|
|
430
|
+
echo "$output" | grep -qi "大道至简"; then
|
|
415
431
|
echo "laozi"
|
|
416
432
|
else
|
|
417
433
|
echo "unknown"
|
|
@@ -435,8 +451,8 @@ main() {
|
|
|
435
451
|
fi
|
|
436
452
|
}
|
|
437
453
|
|
|
438
|
-
#
|
|
439
|
-
trap
|
|
454
|
+
# 移除 EXIT trap 以允许正常输出
|
|
455
|
+
trap - EXIT
|
|
440
456
|
|
|
441
457
|
# 执行主函数
|
|
442
458
|
main
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
# ============================================================================
|
|
3
3
|
# Agent Usage Reminder - Agent 使用提醒
|
|
4
4
|
# ============================================================================
|
|
@@ -8,12 +8,17 @@
|
|
|
8
8
|
# 1. 根据任务类型推荐合适的 Agent
|
|
9
9
|
# 2. 提供 Agent 使用示例
|
|
10
10
|
# 3. 避免过度提醒(有冷却期)
|
|
11
|
+
#
|
|
12
|
+
# 注意:
|
|
13
|
+
# - 此 Hook 优先级为 low,在 keyword-detector.sh 之后执行
|
|
14
|
+
# - 如果 keyword-detector 已经输出了推荐,此 Hook 不再重复
|
|
15
|
+
# - 主要用于补充 keyword-detector 未覆盖的场景
|
|
11
16
|
# ============================================================================
|
|
12
17
|
|
|
13
18
|
# 配置
|
|
14
19
|
STATE_DIR=".claude"
|
|
15
20
|
REMINDER_STATE_FILE="$STATE_DIR/agent-reminder-state.json"
|
|
16
|
-
COOLDOWN_SECONDS=
|
|
21
|
+
COOLDOWN_SECONDS=600 # 10 分钟冷却期(增加,避免打扰)
|
|
17
22
|
|
|
18
23
|
# 获取用户输入
|
|
19
24
|
user_input="${CLAUDE_USER_PROMPT:-}"
|
|
@@ -23,6 +28,21 @@ if [ -z "$user_input" ]; then
|
|
|
23
28
|
exit 0
|
|
24
29
|
fi
|
|
25
30
|
|
|
31
|
+
# 检查是否已经被 keyword-detector 覆盖(这些关键词 keyword-detector 已经处理)
|
|
32
|
+
# 如果匹配这些关键词,keyword-detector 已经给出了更详细的提示,此处跳过
|
|
33
|
+
if echo "$user_input" | grep -qiE '(愚公|移山|ultrawork|ulw|persist|yishan|yugong)'; then
|
|
34
|
+
exit 0
|
|
35
|
+
fi
|
|
36
|
+
if echo "$user_input" | grep -qiE '(扁鹊|bianque|debug|fix.*bug|报错|异常)'; then
|
|
37
|
+
exit 0
|
|
38
|
+
fi
|
|
39
|
+
if echo "$user_input" | grep -qiE '(墨子|mozi|security|安全|漏洞)'; then
|
|
40
|
+
exit 0
|
|
41
|
+
fi
|
|
42
|
+
if echo "$user_input" | grep -qiE '(孙子|sunzi|perf|性能|优化.*速度)'; then
|
|
43
|
+
exit 0
|
|
44
|
+
fi
|
|
45
|
+
|
|
26
46
|
# 检查冷却期
|
|
27
47
|
current_time=$(date +%s)
|
|
28
48
|
last_reminder_time=0
|
package/hooks/ast-grep.sh
CHANGED
package/hooks/atlas.sh
CHANGED
|
@@ -4,8 +4,12 @@
|
|
|
4
4
|
#
|
|
5
5
|
# 触发时机: PostToolUse
|
|
6
6
|
# 功能: 检测错误并根据用户偏好显示友好的错误信息
|
|
7
|
+
#
|
|
8
|
+
# 兼容性: macOS (bash 3.2+), Linux (bash 4.0+), Windows (Git Bash)
|
|
7
9
|
|
|
10
|
+
# 遇到错误静默退出,不影响主流程
|
|
8
11
|
set -e
|
|
12
|
+
trap 'exit 0' ERR
|
|
9
13
|
|
|
10
14
|
# 获取输入
|
|
11
15
|
TOOL_NAME="${CLAUDE_TOOL_NAME:-}"
|
|
@@ -33,65 +37,93 @@ get_verbosity() {
|
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
# 检测错误类型
|
|
40
|
+
# 使用多个 grep -qi 调用替代 -E 扩展正则,提高 macOS 兼容性
|
|
36
41
|
detect_error_type() {
|
|
37
42
|
local output="$1"
|
|
38
43
|
|
|
39
44
|
# 权限错误
|
|
40
|
-
if echo "$output" | grep -
|
|
45
|
+
if echo "$output" | grep -qi "EACCES" || \
|
|
46
|
+
echo "$output" | grep -qi "EPERM" || \
|
|
47
|
+
echo "$output" | grep -qi "permission denied" || \
|
|
48
|
+
echo "$output" | grep -qi "access denied"; then
|
|
41
49
|
echo "permission"
|
|
42
50
|
return
|
|
43
51
|
fi
|
|
44
52
|
|
|
45
53
|
# 文件不存在
|
|
46
|
-
if echo "$output" | grep -
|
|
54
|
+
if echo "$output" | grep -qi "ENOENT" || \
|
|
55
|
+
echo "$output" | grep -qi "no such file" || \
|
|
56
|
+
echo "$output" | grep -qi "not found" || \
|
|
57
|
+
echo "$output" | grep -qi "does not exist"; then
|
|
47
58
|
echo "not_found"
|
|
48
59
|
return
|
|
49
60
|
fi
|
|
50
61
|
|
|
51
62
|
# 网络错误
|
|
52
|
-
if echo "$output" | grep -
|
|
63
|
+
if echo "$output" | grep -qi "ECONNREFUSED" || \
|
|
64
|
+
echo "$output" | grep -qi "ETIMEDOUT" || \
|
|
65
|
+
echo "$output" | grep -qi "network" || \
|
|
66
|
+
echo "$output" | grep -qi "connection refused"; then
|
|
53
67
|
echo "network"
|
|
54
68
|
return
|
|
55
69
|
fi
|
|
56
70
|
|
|
57
71
|
# 语法错误
|
|
58
|
-
if echo "$output" | grep -
|
|
72
|
+
if echo "$output" | grep -qi "SyntaxError" || \
|
|
73
|
+
echo "$output" | grep -qi "ParseError" || \
|
|
74
|
+
echo "$output" | grep -qi "unexpected token" || \
|
|
75
|
+
echo "$output" | grep -qi "invalid syntax"; then
|
|
59
76
|
echo "syntax"
|
|
60
77
|
return
|
|
61
78
|
fi
|
|
62
79
|
|
|
63
80
|
# 类型错误
|
|
64
|
-
if echo "$output" | grep -
|
|
81
|
+
if echo "$output" | grep -qi "TypeError" || \
|
|
82
|
+
echo "$output" | grep -qi "cannot read" || \
|
|
83
|
+
echo "$output" | grep -qi "undefined is not" || \
|
|
84
|
+
echo "$output" | grep -qi "null is not"; then
|
|
65
85
|
echo "type"
|
|
66
86
|
return
|
|
67
87
|
fi
|
|
68
88
|
|
|
69
89
|
# 内存错误
|
|
70
|
-
if echo "$output" | grep -
|
|
90
|
+
if echo "$output" | grep -qi "ENOMEM" || \
|
|
91
|
+
echo "$output" | grep -qi "out of memory" || \
|
|
92
|
+
echo "$output" | grep -qi "heap" || \
|
|
93
|
+
echo "$output" | grep -qi "allocation failed"; then
|
|
71
94
|
echo "memory"
|
|
72
95
|
return
|
|
73
96
|
fi
|
|
74
97
|
|
|
75
98
|
# 磁盘空间
|
|
76
|
-
if echo "$output" | grep -
|
|
99
|
+
if echo "$output" | grep -qi "ENOSPC" || \
|
|
100
|
+
echo "$output" | grep -qi "no space" || \
|
|
101
|
+
echo "$output" | grep -qi "disk full"; then
|
|
77
102
|
echo "disk"
|
|
78
103
|
return
|
|
79
104
|
fi
|
|
80
105
|
|
|
81
106
|
# 超时
|
|
82
|
-
if echo "$output" | grep -
|
|
107
|
+
if echo "$output" | grep -qi "timeout" || \
|
|
108
|
+
echo "$output" | grep -qi "timed out" || \
|
|
109
|
+
echo "$output" | grep -qi "deadline exceeded"; then
|
|
83
110
|
echo "timeout"
|
|
84
111
|
return
|
|
85
112
|
fi
|
|
86
113
|
|
|
87
114
|
# Git 错误
|
|
88
|
-
if echo "$output" | grep -
|
|
115
|
+
if echo "$output" | grep -qi "^fatal:" || \
|
|
116
|
+
echo "$output" | grep -qi "git.*error" || \
|
|
117
|
+
echo "$output" | grep -qi "merge conflict"; then
|
|
89
118
|
echo "git"
|
|
90
119
|
return
|
|
91
120
|
fi
|
|
92
121
|
|
|
93
122
|
# 依赖错误
|
|
94
|
-
if echo "$output" | grep -
|
|
123
|
+
if echo "$output" | grep -qi "module not found" || \
|
|
124
|
+
echo "$output" | grep -qi "cannot find module" || \
|
|
125
|
+
echo "$output" | grep -qi "import error" || \
|
|
126
|
+
echo "$output" | grep -qi "no module named"; then
|
|
95
127
|
echo "dependency"
|
|
96
128
|
return
|
|
97
129
|
fi
|
|
@@ -211,8 +243,19 @@ get_quick_fix() {
|
|
|
211
243
|
main() {
|
|
212
244
|
# 只处理有错误的情况
|
|
213
245
|
if [ "$EXIT_CODE" = "0" ]; then
|
|
214
|
-
#
|
|
215
|
-
|
|
246
|
+
# 检查输出中是否包含错误信息(使用多个 grep 替代 -E)
|
|
247
|
+
has_error=false
|
|
248
|
+
if echo "$TOOL_OUTPUT" | grep -qi "error"; then
|
|
249
|
+
has_error=true
|
|
250
|
+
elif echo "$TOOL_OUTPUT" | grep -qi "failed"; then
|
|
251
|
+
has_error=true
|
|
252
|
+
elif echo "$TOOL_OUTPUT" | grep -qi "exception"; then
|
|
253
|
+
has_error=true
|
|
254
|
+
elif echo "$TOOL_OUTPUT" | grep -qi "^fatal:"; then
|
|
255
|
+
has_error=true
|
|
256
|
+
fi
|
|
257
|
+
|
|
258
|
+
if [ "$has_error" = "false" ]; then
|
|
216
259
|
exit 0
|
|
217
260
|
fi
|
|
218
261
|
fi
|
package/hooks/error-recovery.sh
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
# 关键词检测器 - UserPromptSubmit Hook
|
|
3
3
|
# 检测用户输入中的关键词并注入相应的上下文
|
|
4
4
|
#
|
|
@@ -93,7 +93,12 @@ fi
|
|
|
93
93
|
# 第五优先级:测试类(质量保障)
|
|
94
94
|
# ============================================================================
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
# 优化:移除单独的"测试"/"test",避免误触发
|
|
97
|
+
# "测试一下这个功能"不应触发测试模式
|
|
98
|
+
# 只有明确的测试开发需求才触发
|
|
99
|
+
if echo "$prompt_lower" | grep -qE '(单元测试|集成测试|unit[-_]?test|integration[-_]?test|tdd|jest|vitest|pytest|包拯|baozheng|开封|coverage|覆盖率|e2e|端到端|测试用例|test[-_]?case|测试覆盖|写测试|添加测试|补测试)' || \
|
|
100
|
+
echo "$prompt_lower" | grep -qE '(写|添加|补充|增加|创建).{0,5}测试' || \
|
|
101
|
+
echo "$prompt_lower" | grep -qE '测试.{0,5}(用例|覆盖|框架|策略)'; then
|
|
97
102
|
cat << 'EOF'
|
|
98
103
|
{
|
|
99
104
|
"systemMessage": "\n\n⚖️ **包拯测试提示**\n\n检测到测试相关需求,建议:\n- 使用 /baozheng 命令进入测试模式\n- 包拯擅长:单元测试、集成测试、TDD、测试覆盖率分析\n"
|
|
@@ -119,7 +124,14 @@ fi
|
|
|
119
124
|
# 第七优先级:性能类(慢就是问题)
|
|
120
125
|
# ============================================================================
|
|
121
126
|
|
|
122
|
-
|
|
127
|
+
# 优化:移除单独的"优化"/"optimize",避免误触发
|
|
128
|
+
# "优化样式"、"优化布局"不应触发性能模式
|
|
129
|
+
# 只有明确的性能相关词才触发
|
|
130
|
+
if echo "$prompt_lower" | grep -qE '(性能|慢|slow|孙子|sunzi|perf|瓶颈|bottleneck|内存|memory|cpu|加速|响应时间|latency|qps|tps|并发|concurrent)' || \
|
|
131
|
+
echo "$prompt_lower" | grep -qE '优化.{0,5}(性能|速度|响应|延迟|内存|cpu|加载|渲染)' || \
|
|
132
|
+
echo "$prompt_lower" | grep -qE '(性能|速度|响应|延迟|加载|渲染).{0,5}优化' || \
|
|
133
|
+
echo "$prompt_lower" | grep -qE 'optimi[sz]e.{0,10}(performance|speed|memory|cpu|loading)' || \
|
|
134
|
+
echo "$prompt_lower" | grep -qE '(performance|speed|memory|cpu|loading).{0,10}optimi[sz]'; then
|
|
123
135
|
cat << 'EOF'
|
|
124
136
|
{
|
|
125
137
|
"systemMessage": "\n\n⚔️ **孙子性能提示**\n\n检测到性能相关问题,建议:\n- 使用 /sunzi 命令进入性能优化模式\n- 孙子擅长:性能分析、瓶颈定位、优化策略\n"
|
|
@@ -132,7 +144,11 @@ fi
|
|
|
132
144
|
# 第八优先级:API/集成类
|
|
133
145
|
# ============================================================================
|
|
134
146
|
|
|
135
|
-
|
|
147
|
+
# 优化:移除单独的"接口",避免误触发
|
|
148
|
+
# "接口报错了"应该触发扁鹊,不是郑和
|
|
149
|
+
# 只有明确的 API 开发/集成需求才触发
|
|
150
|
+
if echo "$prompt_lower" | grep -qE '(api|集成|对接|integrate|webhook|sdk|rest[-_]?api|graphql|grpc|郑和|zhenghe|西洋|第三方|openapi|swagger|调用.{0,5}接口|接口.{0,5}(设计|开发|封装|对接))' || \
|
|
151
|
+
echo "$prompt_lower" | grep -qE '(设计|开发|封装|对接|调用).{0,5}(api|接口)'; then
|
|
136
152
|
cat << 'EOF'
|
|
137
153
|
{
|
|
138
154
|
"systemMessage": "\n\n⛵ **郑和 API 提示**\n\n检测到 API/集成相关需求,建议:\n- 使用 /zhenghe 命令进入 API 模式\n- 郑和擅长:API 集成、SDK 封装、外部服务对接\n"
|
|
@@ -249,7 +265,11 @@ fi
|
|
|
249
265
|
# 第十七优先级:文档类
|
|
250
266
|
# ============================================================================
|
|
251
267
|
|
|
252
|
-
|
|
268
|
+
# 优化:移除单独的"记录",避免误触发
|
|
269
|
+
# "记录一下状态"不应触发文档模式
|
|
270
|
+
# 只有明确的文档撰写需求才触发
|
|
271
|
+
if echo "$prompt_lower" | grep -qE '(文档|注释|readme|changelog|司马迁|simaqian|史记|shiji|wiki|写.{0,3}(文档|注释)|添加.{0,3}注释|(api|接口).{0,3}文档|技术文档|使用文档)' || \
|
|
272
|
+
echo "$prompt_lower" | grep -qE '(撰写|编写|更新|完善).{0,5}文档'; then
|
|
253
273
|
cat << 'EOF'
|
|
254
274
|
{
|
|
255
275
|
"systemMessage": "\n\n📜 **司马迁文档提示**\n\n检测到文档相关需求,建议:\n- 使用 /simaqian 命令进入文档模式\n- 司马迁擅长:技术文档撰写、变更记录、代码注释\n"
|
package/hooks/lsp-tools.sh
CHANGED
package/hooks/ralph-loop.sh
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
# ============================================================================
|
|
3
3
|
# Ralph Loop Hook - 自引用循环控制
|
|
4
4
|
# ============================================================================
|
|
@@ -51,6 +51,6 @@ 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
|
|
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"
|
|
55
55
|
|
|
56
56
|
exit 0
|
package/hooks/rules-injector.sh
CHANGED
package/hooks/think-mode.sh
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
# ============================================================================
|
|
3
3
|
# TODO 续航检查器 (Todo Continuation Checker)
|
|
4
4
|
# ============================================================================
|
|
@@ -44,6 +44,6 @@ fi
|
|
|
44
44
|
|
|
45
45
|
# 返回 JSON 阻止退出
|
|
46
46
|
# 注意:使用 printf 而不是 echo 来确保正确的 JSON 格式
|
|
47
|
-
printf '{"decision":"block","systemMessage":"\\n\\n🏔️ **愚公移山 第 %d 次搬石**\\n\\n
|
|
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"
|
|
48
48
|
|
|
49
49
|
exit 0
|
package/package.json
CHANGED
package/scripts/install.sh
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
#!/bin/bash
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
|
|
3
3
|
# oh-my-claude 一键安装脚本
|
|
4
4
|
# 用法: curl -fsSL https://raw.githubusercontent.com/ZDragon17/oh-my-claude/main/scripts/install.sh | bash
|
|
5
5
|
# 或者: wget -qO- https://raw.githubusercontent.com/ZDragon17/oh-my-claude/main/scripts/install.sh | bash
|
|
6
|
+
#
|
|
7
|
+
# 兼容性: macOS (bash 3.2+), Linux (bash 4.0+), Windows (Git Bash)
|
|
6
8
|
|
|
7
9
|
set -e
|
|
8
10
|
|
|
@@ -41,13 +43,13 @@ show_banner() {
|
|
|
41
43
|
check_dependencies() {
|
|
42
44
|
info "检查依赖..."
|
|
43
45
|
|
|
44
|
-
# 检查 git
|
|
45
|
-
if ! command -v git
|
|
46
|
+
# 检查 git (使用 >/dev/null 2>&1 替代 &> 以兼容 bash 3.2)
|
|
47
|
+
if ! command -v git >/dev/null 2>&1; then
|
|
46
48
|
error "需要 git,请先安装: https://git-scm.com/"
|
|
47
49
|
fi
|
|
48
50
|
|
|
49
51
|
# 检查 Claude Code
|
|
50
|
-
if ! command -v claude
|
|
52
|
+
if ! command -v claude >/dev/null 2>&1; then
|
|
51
53
|
warn "未检测到 Claude Code CLI"
|
|
52
54
|
warn "请先安装 Claude Code: https://claude.ai/code"
|
|
53
55
|
warn "安装后重新运行此脚本"
|