claude-pangu 2.0.18 → 2.0.19
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/commands/expert.md +123 -0
- package/commands/hook-perf.md +138 -0
- package/commands/map.md +1 -1
- package/hooks/hook-performance-monitor.sh +167 -0
- package/package.json +1 -1
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expert
|
|
3
|
+
description: 专家模式开关 - 为高级用户提供精简输出,跳过引导信息
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- Bash
|
|
8
|
+
model: haiku
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<command-name>/expert</command-name>
|
|
12
|
+
|
|
13
|
+
# 专家模式开关
|
|
14
|
+
|
|
15
|
+
切换专家模式,控制输出详细程度。
|
|
16
|
+
|
|
17
|
+
## 使用方式
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
/expert [on|off|status]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 执行逻辑
|
|
24
|
+
|
|
25
|
+
### `/expert on` - 启用专家模式
|
|
26
|
+
|
|
27
|
+
1. 创建模式标记文件:
|
|
28
|
+
```bash
|
|
29
|
+
mkdir -p ~/.oh-my-claude && echo "expert" > ~/.oh-my-claude/mode
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
2. 显示确认:
|
|
33
|
+
```text
|
|
34
|
+
⚡ 专家模式已启用
|
|
35
|
+
|
|
36
|
+
效果:
|
|
37
|
+
• 跳过新手引导
|
|
38
|
+
• 精简输出格式
|
|
39
|
+
• 减少确认步骤
|
|
40
|
+
|
|
41
|
+
关闭: /expert off
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### `/expert off` - 关闭专家模式
|
|
45
|
+
|
|
46
|
+
1. 删除模式标记文件:
|
|
47
|
+
```bash
|
|
48
|
+
rm -f ~/.oh-my-claude/mode
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
2. 显示确认:
|
|
52
|
+
```text
|
|
53
|
+
📖 已切换到标准模式
|
|
54
|
+
|
|
55
|
+
效果:
|
|
56
|
+
• 显示完整引导
|
|
57
|
+
• 详细解释说明
|
|
58
|
+
• 更多操作提示
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### `/expert status` - 查看当前状态
|
|
62
|
+
|
|
63
|
+
1. 检查模式文件:
|
|
64
|
+
```bash
|
|
65
|
+
cat ~/.oh-my-claude/mode 2>/dev/null
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
2. 根据结果显示:
|
|
69
|
+
|
|
70
|
+
文件存在且内容为 "expert":
|
|
71
|
+
```text
|
|
72
|
+
当前模式: ⚡ 专家模式
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
文件不存在或内容不匹配:
|
|
76
|
+
```text
|
|
77
|
+
当前模式: 📖 标准模式
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### `/expert` 无参数 - 切换模式
|
|
81
|
+
|
|
82
|
+
检查当前状态并切换到相反模式:
|
|
83
|
+
- 如果当前是专家模式 → 切换到标准模式
|
|
84
|
+
- 如果当前是标准模式 → 切换到专家模式
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 模式效果对比
|
|
89
|
+
|
|
90
|
+
| 特性 | 标准模式 | 专家模式 |
|
|
91
|
+
|------|----------|----------|
|
|
92
|
+
| 新手引导 | ✅ 显示 | ❌ 跳过 |
|
|
93
|
+
| 详细解释 | ✅ 完整 | ⚡ 精简 |
|
|
94
|
+
| 操作确认 | ✅ 询问 | ⚡ 直接执行 |
|
|
95
|
+
| 错误提示 | 📚 多选项 | 🎯 首选方案 |
|
|
96
|
+
| 输出格式 | 📖 详细 | ⚡ 紧凑 |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 适用场景
|
|
101
|
+
|
|
102
|
+
### 推荐使用专家模式
|
|
103
|
+
|
|
104
|
+
- ✅ 熟悉 oh-my-claude 所有命令
|
|
105
|
+
- ✅ 不需要引导和解释
|
|
106
|
+
- ✅ 追求效率,减少阅读时间
|
|
107
|
+
- ✅ 屏幕空间有限
|
|
108
|
+
|
|
109
|
+
### 推荐使用标准模式
|
|
110
|
+
|
|
111
|
+
- ✅ 新用户或偶尔使用
|
|
112
|
+
- ✅ 需要详细的操作指引
|
|
113
|
+
- ✅ 遇到复杂问题需要多选项
|
|
114
|
+
- ✅ 正在学习命令用法
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 别名
|
|
119
|
+
|
|
120
|
+
- `/expert` - 主命令
|
|
121
|
+
- `/pro` - 简写
|
|
122
|
+
- `/专家` - 中文别名
|
|
123
|
+
- `/简洁` - 中文别名
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hook-perf
|
|
3
|
+
description: Hook 性能监控 - 查看各 Hook 的执行时间,识别性能瓶颈
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash
|
|
6
|
+
- Read
|
|
7
|
+
model: haiku
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<command-name>/hook-perf</command-name>
|
|
11
|
+
|
|
12
|
+
# Hook 性能监控
|
|
13
|
+
|
|
14
|
+
查看 oh-my-claude 43 个 Hook 的执行性能,识别可能影响响应速度的瓶颈。
|
|
15
|
+
|
|
16
|
+
## 使用方式
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
/hook-perf [report|clear|summary]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 执行流程
|
|
23
|
+
|
|
24
|
+
### `/hook-perf` 或 `/hook-perf report` - 查看性能报告
|
|
25
|
+
|
|
26
|
+
执行性能监控脚本:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
~/.claude/plugins/oh-my-claude/hooks/hook-performance-monitor.sh report
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
显示格式:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
36
|
+
│ 🔍 Hook 性能监控报告 │
|
|
37
|
+
├─────────────────────────────────────────────────────────────┤
|
|
38
|
+
│ │
|
|
39
|
+
│ Hook 名称 平均耗时 最大耗时 调用次数 │
|
|
40
|
+
│ ───────────────────────────────────────────────────────── │
|
|
41
|
+
│ keyword-detector.sh 120ms 350ms 45 │
|
|
42
|
+
│ todo-enforcer.sh 85ms 200ms 32 │
|
|
43
|
+
│ progress-notifier.sh 45ms 120ms 28 │
|
|
44
|
+
│ ... │
|
|
45
|
+
│ │
|
|
46
|
+
│ 📁 日志位置: ~/.oh-my-claude/performance/ │
|
|
47
|
+
│ │
|
|
48
|
+
└─────────────────────────────────────────────────────────────┘
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### `/hook-perf clear` - 清除性能日志
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
~/.claude/plugins/oh-my-claude/hooks/hook-performance-monitor.sh clear
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
输出:
|
|
58
|
+
```text
|
|
59
|
+
✅ 性能日志已清除
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### `/hook-perf summary` - 获取 JSON 摘要
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
~/.claude/plugins/oh-my-claude/hooks/hook-performance-monitor.sh summary
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
返回 JSON 格式的性能数据,可用于进一步分析。
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 性能阈值说明
|
|
73
|
+
|
|
74
|
+
| 阈值 | 说明 |
|
|
75
|
+
|------|------|
|
|
76
|
+
| < 500ms | 正常 |
|
|
77
|
+
| 500-2000ms | ⏱️ 较慢,可能需要优化 |
|
|
78
|
+
| > 2000ms | ⚠️ 非常慢,建议检查 |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 性能优化建议
|
|
83
|
+
|
|
84
|
+
当发现慢 Hook 时:
|
|
85
|
+
|
|
86
|
+
1. **检查外部依赖**
|
|
87
|
+
- 网络请求(API 调用)
|
|
88
|
+
- 文件系统操作(大量文件扫描)
|
|
89
|
+
- 外部命令(jq、curl 等)
|
|
90
|
+
|
|
91
|
+
2. **考虑禁用不必要的 Hook**
|
|
92
|
+
- 编辑 `hooks/hooks.json`
|
|
93
|
+
- 注释或删除不需要的 Hook
|
|
94
|
+
|
|
95
|
+
3. **使用缓存**
|
|
96
|
+
- 对于重复计算的结果使用缓存
|
|
97
|
+
- 设置合理的缓存过期时间
|
|
98
|
+
|
|
99
|
+
4. **异步执行**
|
|
100
|
+
- 非关键 Hook 可以在后台执行
|
|
101
|
+
- 避免阻塞主流程
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 日志文件位置
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
~/.oh-my-claude/performance/
|
|
109
|
+
├── hook-timing.log # 原始执行日志
|
|
110
|
+
└── summary.json # 性能摘要
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 依赖说明
|
|
116
|
+
|
|
117
|
+
- 需要 `jq` 进行 JSON 分析(可选)
|
|
118
|
+
- 无 jq 时仍可记录日志,但无法生成详细报告
|
|
119
|
+
|
|
120
|
+
安装 jq:
|
|
121
|
+
```bash
|
|
122
|
+
# macOS
|
|
123
|
+
brew install jq
|
|
124
|
+
|
|
125
|
+
# Linux
|
|
126
|
+
apt install jq
|
|
127
|
+
|
|
128
|
+
# Windows
|
|
129
|
+
choco install jq
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 别名
|
|
135
|
+
|
|
136
|
+
- `/hook-perf` - 主命令
|
|
137
|
+
- `/perf-hook` - 英文别名
|
|
138
|
+
- `/性能` - 中文别名
|
package/commands/map.md
CHANGED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Hook 性能监控
|
|
3
|
+
# 追踪各 Hook 的执行时间,识别性能瓶颈
|
|
4
|
+
# 触发时机: PostToolUse (周期性检查)
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
# 性能日志目录
|
|
9
|
+
PERF_LOG_DIR="${HOME}/.oh-my-claude/performance"
|
|
10
|
+
PERF_LOG_FILE="${PERF_LOG_DIR}/hook-timing.log"
|
|
11
|
+
PERF_SUMMARY_FILE="${PERF_LOG_DIR}/summary.json"
|
|
12
|
+
|
|
13
|
+
# 确保目录存在
|
|
14
|
+
mkdir -p "$PERF_LOG_DIR"
|
|
15
|
+
|
|
16
|
+
# 性能阈值(毫秒)
|
|
17
|
+
SLOW_HOOK_THRESHOLD=500
|
|
18
|
+
VERY_SLOW_HOOK_THRESHOLD=2000
|
|
19
|
+
|
|
20
|
+
# 获取当前时间戳(毫秒)
|
|
21
|
+
get_timestamp_ms() {
|
|
22
|
+
if command -v python3 &>/dev/null; then
|
|
23
|
+
python3 -c "import time; print(int(time.time() * 1000))"
|
|
24
|
+
elif command -v node &>/dev/null; then
|
|
25
|
+
node -e "console.log(Date.now())"
|
|
26
|
+
else
|
|
27
|
+
# 降级方案:秒级精度
|
|
28
|
+
echo "$(($(date +%s) * 1000))"
|
|
29
|
+
fi
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# 记录 Hook 执行时间
|
|
33
|
+
log_hook_timing() {
|
|
34
|
+
local hook_name="$1"
|
|
35
|
+
local start_time="$2"
|
|
36
|
+
local end_time="$3"
|
|
37
|
+
local duration=$((end_time - start_time))
|
|
38
|
+
|
|
39
|
+
# 追加到日志
|
|
40
|
+
echo "{\"hook\":\"$hook_name\",\"duration\":$duration,\"timestamp\":$end_time}" >> "$PERF_LOG_FILE"
|
|
41
|
+
|
|
42
|
+
# 检查是否超过阈值
|
|
43
|
+
if [ "$duration" -gt "$VERY_SLOW_HOOK_THRESHOLD" ]; then
|
|
44
|
+
echo "⚠️ 非常慢的 Hook: $hook_name (${duration}ms)"
|
|
45
|
+
elif [ "$duration" -gt "$SLOW_HOOK_THRESHOLD" ]; then
|
|
46
|
+
echo "⏱️ 较慢的 Hook: $hook_name (${duration}ms)"
|
|
47
|
+
fi
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# 生成性能摘要
|
|
51
|
+
generate_summary() {
|
|
52
|
+
if [ ! -f "$PERF_LOG_FILE" ]; then
|
|
53
|
+
echo "{\"error\": \"No performance data\"}"
|
|
54
|
+
return
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# 使用 jq 生成摘要(如果可用)
|
|
58
|
+
if command -v jq &>/dev/null; then
|
|
59
|
+
jq -s '
|
|
60
|
+
group_by(.hook) |
|
|
61
|
+
map({
|
|
62
|
+
hook: .[0].hook,
|
|
63
|
+
count: length,
|
|
64
|
+
avg_ms: (map(.duration) | add / length | floor),
|
|
65
|
+
max_ms: (map(.duration) | max),
|
|
66
|
+
min_ms: (map(.duration) | min)
|
|
67
|
+
}) |
|
|
68
|
+
sort_by(-.avg_ms)
|
|
69
|
+
' "$PERF_LOG_FILE" > "$PERF_SUMMARY_FILE"
|
|
70
|
+
|
|
71
|
+
cat "$PERF_SUMMARY_FILE"
|
|
72
|
+
else
|
|
73
|
+
echo "{\"message\": \"Install jq for detailed analysis\"}"
|
|
74
|
+
fi
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# 清理旧日志(保留最近 7 天)
|
|
78
|
+
cleanup_old_logs() {
|
|
79
|
+
if [ -f "$PERF_LOG_FILE" ]; then
|
|
80
|
+
# 获取 7 天前的时间戳
|
|
81
|
+
local cutoff_time
|
|
82
|
+
cutoff_time=$(( $(get_timestamp_ms) - 7 * 24 * 60 * 60 * 1000 ))
|
|
83
|
+
|
|
84
|
+
if command -v jq &>/dev/null; then
|
|
85
|
+
jq -c "select(.timestamp > $cutoff_time)" "$PERF_LOG_FILE" > "${PERF_LOG_FILE}.tmp" 2>/dev/null || true
|
|
86
|
+
mv "${PERF_LOG_FILE}.tmp" "$PERF_LOG_FILE" 2>/dev/null || true
|
|
87
|
+
fi
|
|
88
|
+
fi
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
# 显示性能报告
|
|
92
|
+
show_performance_report() {
|
|
93
|
+
echo ""
|
|
94
|
+
echo "┌─────────────────────────────────────────────────────────────┐"
|
|
95
|
+
echo "│ 🔍 Hook 性能监控报告 │"
|
|
96
|
+
echo "├─────────────────────────────────────────────────────────────┤"
|
|
97
|
+
|
|
98
|
+
if [ -f "$PERF_SUMMARY_FILE" ] && command -v jq &>/dev/null; then
|
|
99
|
+
echo "│ │"
|
|
100
|
+
echo "│ Hook 名称 平均耗时 最大耗时 调用次数 │"
|
|
101
|
+
echo "│ ───────────────────────────────────────────────────────── │"
|
|
102
|
+
|
|
103
|
+
jq -r '.[] | "│ \(.hook | .[0:25] | . + " " * (25 - length)) \(.avg_ms | tostring | . + "ms" + " " * (8 - length)) \(.max_ms | tostring | . + "ms" + " " * (8 - length)) \(.count) │"' "$PERF_SUMMARY_FILE" 2>/dev/null | head -10
|
|
104
|
+
|
|
105
|
+
echo "│ │"
|
|
106
|
+
else
|
|
107
|
+
echo "│ 暂无性能数据或 jq 未安装 │"
|
|
108
|
+
echo "│ │"
|
|
109
|
+
echo "│ 💡 安装 jq 以获取详细分析: │"
|
|
110
|
+
echo "│ brew install jq (macOS) │"
|
|
111
|
+
echo "│ apt install jq (Linux) │"
|
|
112
|
+
echo "│ choco install jq (Windows) │"
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
echo "│ │"
|
|
116
|
+
echo "│ 📁 日志位置: ~/.oh-my-claude/performance/ │"
|
|
117
|
+
echo "│ │"
|
|
118
|
+
echo "│ 🔧 命令: │"
|
|
119
|
+
echo "│ /hook-perf 查看性能报告 │"
|
|
120
|
+
echo "│ /hook-perf clear 清除性能日志 │"
|
|
121
|
+
echo "│ │"
|
|
122
|
+
echo "└─────────────────────────────────────────────────────────────┘"
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
# 主逻辑
|
|
126
|
+
main() {
|
|
127
|
+
local action="${1:-report}"
|
|
128
|
+
|
|
129
|
+
case "$action" in
|
|
130
|
+
"start")
|
|
131
|
+
# 记录开始时间(由调用者使用)
|
|
132
|
+
get_timestamp_ms
|
|
133
|
+
;;
|
|
134
|
+
"end")
|
|
135
|
+
# 记录结束时间并计算耗时
|
|
136
|
+
local hook_name="${2:-unknown}"
|
|
137
|
+
local start_time="${3:-0}"
|
|
138
|
+
local end_time
|
|
139
|
+
end_time=$(get_timestamp_ms)
|
|
140
|
+
log_hook_timing "$hook_name" "$start_time" "$end_time"
|
|
141
|
+
;;
|
|
142
|
+
"report")
|
|
143
|
+
# 显示性能报告
|
|
144
|
+
generate_summary >/dev/null 2>&1
|
|
145
|
+
show_performance_report
|
|
146
|
+
;;
|
|
147
|
+
"summary")
|
|
148
|
+
# 仅生成 JSON 摘要
|
|
149
|
+
generate_summary
|
|
150
|
+
;;
|
|
151
|
+
"clear")
|
|
152
|
+
# 清除日志
|
|
153
|
+
rm -f "$PERF_LOG_FILE" "$PERF_SUMMARY_FILE"
|
|
154
|
+
echo "✅ 性能日志已清除"
|
|
155
|
+
;;
|
|
156
|
+
"cleanup")
|
|
157
|
+
# 清理旧日志
|
|
158
|
+
cleanup_old_logs
|
|
159
|
+
;;
|
|
160
|
+
*)
|
|
161
|
+
echo "用法: hook-performance-monitor.sh [start|end|report|summary|clear|cleanup]"
|
|
162
|
+
;;
|
|
163
|
+
esac
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
# 运行主程序
|
|
167
|
+
main "$@"
|