claude-pangu 2.1.5 → 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.
@@ -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.5",
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
@@ -804,6 +804,7 @@ model: sonnet
804
804
  - [x] v2.1.3 - **版本检测修复** 🐛(plugin.json 版本同步)
805
805
  - [x] v2.1.4 - **用户体验第三轮** ✨(工作流模板、偏好设置、友好错误、自诊断)
806
806
  - [x] v2.1.5 - **macOS 兼容性修复** 🍎(Shell 脚本跨平台兼容、grep 语法修复)
807
+ - [x] v2.1.6 - **稳定性与精准度优化** 🎯(关键词误判修复、愚公循环增强、Hook 去重)
807
808
 
808
809
  ## 🤝 贡献
809
810
 
@@ -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=300 # 5 分钟冷却期
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
@@ -93,7 +93,12 @@ fi
93
93
  # 第五优先级:测试类(质量保障)
94
94
  # ============================================================================
95
95
 
96
- if echo "$prompt_lower" | grep -qE '(测试|单元测试|集成测试|test|unit[-_]?test|integration[-_]?test|tdd|jest|vitest|pytest|包拯|baozheng|开封|coverage|覆盖率|e2e|端到端)'; then
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
- if echo "$prompt_lower" | grep -qE '(性能|优化|慢|performance|optimize|slow|孙子|sunzi|perf|瓶颈|bottleneck|缓存|cache|内存|memory|cpu|加速)'; then
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
- if echo "$prompt_lower" | grep -qE '(api|接口|集成|对接|integrate|webhook|sdk|rest|graphql|grpc|郑和|zhenghe|西洋|第三方|openapi|swagger)'; then
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
- if echo "$prompt_lower" | grep -qE '(文档|注释|记录|document|comment|readme|changelog|history|司马迁|simaqian|史记|shiji|wiki)'; then
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"
@@ -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[自检] 任务是否完成?\\n\\n## 继续条件\\n- 检查 TODO 列表,如有未完成项则继续工作\\n- 验证所有要求都已满足\\n\\n## 完成条件\\n当所有任务完成后:\\n1. 输出: <promise>%s</promise>\\n2. 使用 /cancel-ralph 结束循环\\n\\n**如果任务未完成,继续工作。不要停止。**\\n"}\n' "$NEXT_ITERATION" "$COMPLETION_PROMISE"
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
@@ -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[自检] 检查 TODO 列表,如有未完成项则继续工作。\\n\\n如果所有任务已完成,请输出: <promise>移山完毕</promise>\\n然后使用 /cancel-yishan 结束循环。\\n"}\n' "$NEXT_ITERATION"
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-pangu",
3
- "version": "2.1.5",
3
+ "version": "2.1.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",