@optima-chat/dev-skills 0.1.5 → 0.1.7
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/commands/logs.md +13 -36
- package/.claude/skills/{viewing-logs → logs}/SKILL.md +8 -17
- package/README.md +6 -6
- package/package.json +1 -1
- package/scripts/install.js +3 -3
package/.claude/commands/logs.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
快速查看服务日志,支持 Stage/Prod 两个环境。
|
|
4
4
|
|
|
5
|
-
**版本**: v0.1.
|
|
5
|
+
**版本**: v0.1.7
|
|
6
6
|
|
|
7
7
|
## 使用场景
|
|
8
8
|
|
|
@@ -48,20 +48,13 @@
|
|
|
48
48
|
|
|
49
49
|
**步骤**:
|
|
50
50
|
```bash
|
|
51
|
+
# IMPORTANT: 必须使用单行命令,不要使用反斜杠换行
|
|
52
|
+
|
|
51
53
|
# 1. 获取最新的 log stream
|
|
52
|
-
STREAM=$(aws logs describe-log-streams
|
|
53
|
-
--log-group-name /ecs/commerce-backend-stage \
|
|
54
|
-
--order-by LastEventTime \
|
|
55
|
-
--descending \
|
|
56
|
-
--max-items 1 \
|
|
57
|
-
| jq -r '.logStreams[0].logStreamName')
|
|
54
|
+
STREAM=$(aws logs describe-log-streams --log-group-name /ecs/commerce-backend-stage --order-by LastEventTime --descending --max-items 1 | jq -r '.logStreams[0].logStreamName')
|
|
58
55
|
|
|
59
56
|
# 2. 获取日志内容(纯文本)
|
|
60
|
-
aws logs get-log-events
|
|
61
|
-
--log-group-name /ecs/commerce-backend-stage \
|
|
62
|
-
--log-stream-name "$STREAM" \
|
|
63
|
-
--limit 50 \
|
|
64
|
-
| jq -r '.events[] | .message'
|
|
57
|
+
aws logs get-log-events --log-group-name /ecs/commerce-backend-stage --log-stream-name "$STREAM" --limit 50 | jq -r '.events[] | .message'
|
|
65
58
|
```
|
|
66
59
|
|
|
67
60
|
**服务映射**:
|
|
@@ -79,12 +72,8 @@ aws logs get-log-events \
|
|
|
79
72
|
# 获取日志内容(纯文本)
|
|
80
73
|
# 注意:Prod 环境的 log stream 通常是固定的 "backend"
|
|
81
74
|
# 使用 --no-start-from-head 从最新日志开始读取
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
--log-stream-name backend \
|
|
85
|
-
--limit 50 \
|
|
86
|
-
--no-start-from-head \
|
|
87
|
-
| jq -r '.events[] | .message'
|
|
75
|
+
# IMPORTANT: 必须使用单行命令,不要使用反斜杠换行
|
|
76
|
+
aws logs get-log-events --log-group-name /optima/prod/commerce-backend --log-stream-name backend --limit 50 --no-start-from-head | jq -r '.events[] | .message'
|
|
88
77
|
```
|
|
89
78
|
|
|
90
79
|
**服务映射**:
|
|
@@ -102,35 +91,23 @@ aws logs get-log-events \
|
|
|
102
91
|
|
|
103
92
|
### Stage 环境
|
|
104
93
|
```bash
|
|
94
|
+
# IMPORTANT: 使用单行命令
|
|
105
95
|
SERVICE="commerce-backend"
|
|
106
96
|
LINES=50
|
|
107
97
|
|
|
108
|
-
# 获取最新 stream
|
|
109
|
-
STREAM=$(aws logs describe-log-streams
|
|
110
|
-
|
|
111
|
-
--order-by LastEventTime --descending --max-items 1 \
|
|
112
|
-
| jq -r '.logStreams[0].logStreamName')
|
|
113
|
-
|
|
114
|
-
# 显示日志
|
|
115
|
-
aws logs get-log-events \
|
|
116
|
-
--log-group-name /ecs/${SERVICE}-stage \
|
|
117
|
-
--log-stream-name "$STREAM" \
|
|
118
|
-
--limit $LINES \
|
|
119
|
-
| jq -r '.events[] | .message'
|
|
98
|
+
# 获取最新 stream 并显示日志
|
|
99
|
+
STREAM=$(aws logs describe-log-streams --log-group-name /ecs/${SERVICE}-stage --order-by LastEventTime --descending --max-items 1 | jq -r '.logStreams[0].logStreamName')
|
|
100
|
+
aws logs get-log-events --log-group-name /ecs/${SERVICE}-stage --log-stream-name "$STREAM" --limit $LINES | jq -r '.events[] | .message'
|
|
120
101
|
```
|
|
121
102
|
|
|
122
103
|
### Prod 环境
|
|
123
104
|
```bash
|
|
105
|
+
# IMPORTANT: 使用单行命令
|
|
124
106
|
SERVICE="commerce-backend"
|
|
125
107
|
LINES=50
|
|
126
108
|
|
|
127
109
|
# 显示主服务日志(从最新开始)
|
|
128
|
-
aws logs get-log-events
|
|
129
|
-
--log-group-name /optima/prod/${SERVICE} \
|
|
130
|
-
--log-stream-name backend \
|
|
131
|
-
--limit $LINES \
|
|
132
|
-
--no-start-from-head \
|
|
133
|
-
| jq -r '.events[] | .message'
|
|
110
|
+
aws logs get-log-events --log-group-name /optima/prod/${SERVICE} --log-stream-name backend --limit $LINES --no-start-from-head | jq -r '.events[] | .message'
|
|
134
111
|
```
|
|
135
112
|
|
|
136
113
|
## 常见错误处理
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: "
|
|
3
|
-
description: "当用户请求查看日志、查看服务日志、排查问题、看看日志、检查日志、商品服务日志、后端日志、API
|
|
2
|
+
name: "logs"
|
|
3
|
+
description: "当用户请求查看日志、查看服务日志、排查问题、看看日志、检查日志、商品服务日志、后端日志、API日志、正式环境日志、生产环境日志时,使用此技能。支持 Stage、Prod 环境的 commerce-backend、user-auth、mcp-host、agentic-chat 服务。"
|
|
4
4
|
allowed-tools: ["Bash", "SlashCommand"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -142,18 +142,13 @@ INFO - Database query took 3200ms: SELECT * FROM products WHERE...
|
|
|
142
142
|
|
|
143
143
|
**实现方式**:
|
|
144
144
|
```bash
|
|
145
|
+
# IMPORTANT: 使用单行命令,避免反斜杠换行导致的参数解析错误
|
|
146
|
+
|
|
145
147
|
# 1. 获取最新 log stream
|
|
146
|
-
STREAM=$(aws logs describe-log-streams
|
|
147
|
-
--log-group-name /ecs/commerce-backend-stage \
|
|
148
|
-
--order-by LastEventTime --descending --max-items 1 \
|
|
149
|
-
| jq -r '.logStreams[0].logStreamName')
|
|
148
|
+
STREAM=$(aws logs describe-log-streams --log-group-name /ecs/commerce-backend-stage --order-by LastEventTime --descending --max-items 1 | jq -r '.logStreams[0].logStreamName')
|
|
150
149
|
|
|
151
150
|
# 2. 获取日志
|
|
152
|
-
aws logs get-log-events
|
|
153
|
-
--log-group-name /ecs/commerce-backend-stage \
|
|
154
|
-
--log-stream-name "$STREAM" \
|
|
155
|
-
--limit 100 \
|
|
156
|
-
| jq -r '.events[] | .message'
|
|
151
|
+
aws logs get-log-events --log-group-name /ecs/commerce-backend-stage --log-stream-name "$STREAM" --limit 100 | jq -r '.events[] | .message'
|
|
157
152
|
```
|
|
158
153
|
|
|
159
154
|
### Prod 环境
|
|
@@ -170,13 +165,9 @@ aws logs get-log-events \
|
|
|
170
165
|
|
|
171
166
|
**实现方式**:
|
|
172
167
|
```bash
|
|
168
|
+
# IMPORTANT: 使用单行命令,使用 --no-start-from-head 而不是 --start-from-head false
|
|
173
169
|
# 获取主服务日志
|
|
174
|
-
aws logs get-log-events
|
|
175
|
-
--log-group-name /optima/prod/commerce-backend \
|
|
176
|
-
--log-stream-name backend \
|
|
177
|
-
--limit 100 \
|
|
178
|
-
--start-from-head false \
|
|
179
|
-
| jq -r '.events[] | .message'
|
|
170
|
+
aws logs get-log-events --log-group-name /optima/prod/commerce-backend --log-stream-name backend --limit 100 --no-start-from-head | jq -r '.events[] | .message'
|
|
180
171
|
```
|
|
181
172
|
|
|
182
173
|
**可用的 log streams**:
|
package/README.md
CHANGED
|
@@ -22,14 +22,14 @@ optima-dev-skills --version
|
|
|
22
22
|
optima-dev-skills --help
|
|
23
23
|
|
|
24
24
|
# 检查文件
|
|
25
|
-
ls ~/.claude/commands/
|
|
26
|
-
ls ~/.claude/skills/
|
|
25
|
+
ls ~/.claude/commands/
|
|
26
|
+
ls ~/.claude/skills/logs/
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
### 已安装的能力
|
|
30
30
|
|
|
31
31
|
- ✅ `/logs` 命令 - 查看 Stage/Prod 环境日志
|
|
32
|
-
- ✅ `
|
|
32
|
+
- ✅ `logs` skill - 自动识别日志查看需求
|
|
33
33
|
|
|
34
34
|
### 更新
|
|
35
35
|
|
|
@@ -50,7 +50,7 @@ Optima Dev Skills 让 Claude Code 能够直接在 **CI、Stage、Prod** 三个
|
|
|
50
50
|
|
|
51
51
|
当 Claude Code 识别到以下任务时,会自动加载对应的 Skill:
|
|
52
52
|
|
|
53
|
-
- **
|
|
53
|
+
- **logs** - 查看 CI/Stage/Prod 的服务器日志
|
|
54
54
|
|
|
55
55
|
## 👤 用户故事
|
|
56
56
|
|
|
@@ -108,7 +108,7 @@ optima-dev-skills/
|
|
|
108
108
|
│ │ └── logs.md # /logs - 查看服务日志
|
|
109
109
|
│ │
|
|
110
110
|
│ └── skills/
|
|
111
|
-
│ └──
|
|
111
|
+
│ └── logs/ # 日志查看 skill
|
|
112
112
|
│ └── SKILL.md
|
|
113
113
|
│
|
|
114
114
|
└── docs/
|
|
@@ -184,7 +184,7 @@ Claude:
|
|
|
184
184
|
|
|
185
185
|
**已完成**:
|
|
186
186
|
- ✅ 1 个跨环境命令:`/logs`
|
|
187
|
-
- ✅ 1 个任务场景:`
|
|
187
|
+
- ✅ 1 个任务场景:`logs` skill
|
|
188
188
|
- ✅ 支持 CI、Stage、Prod 三个环境
|
|
189
189
|
|
|
190
190
|
**设计原则**:
|
package/package.json
CHANGED
package/scripts/install.js
CHANGED
|
@@ -7,7 +7,7 @@ const os = require('os');
|
|
|
7
7
|
const CLAUDE_DIR = path.join(os.homedir(), '.claude');
|
|
8
8
|
const SKILLS_SOURCE = path.join(__dirname, '..', '.claude');
|
|
9
9
|
const COMMANDS_DEST = path.join(CLAUDE_DIR, 'commands');
|
|
10
|
-
const SKILLS_DEST = path.join(CLAUDE_DIR, 'skills', '
|
|
10
|
+
const SKILLS_DEST = path.join(CLAUDE_DIR, 'skills', 'logs');
|
|
11
11
|
|
|
12
12
|
// 颜色输出
|
|
13
13
|
const colors = {
|
|
@@ -63,10 +63,10 @@ function install() {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
// 安装 skills
|
|
66
|
-
const skillsSource = path.join(SKILLS_SOURCE, 'skills', '
|
|
66
|
+
const skillsSource = path.join(SKILLS_SOURCE, 'skills', 'logs');
|
|
67
67
|
if (fs.existsSync(skillsSource)) {
|
|
68
68
|
copyRecursive(skillsSource, SKILLS_DEST);
|
|
69
|
-
log(`✓ Installed
|
|
69
|
+
log(`✓ Installed logs skill to ${SKILLS_DEST}`, 'green');
|
|
70
70
|
} else {
|
|
71
71
|
log(`✗ Skills not found at ${skillsSource}`, 'red');
|
|
72
72
|
}
|