@optima-chat/dev-skills 0.2.0 → 0.3.0
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/query-db.md +238 -0
- package/.claude/skills/query-db/SKILL.md +163 -0
- package/README.md +18 -35
- package/package.json +1 -1
- package/scripts/install.js +35 -21
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# /query-db - 查询数据库
|
|
2
|
+
|
|
3
|
+
执行 SQL 查询,支持 CI/Stage/Prod 三个环境。
|
|
4
|
+
|
|
5
|
+
**版本**: v0.3.0
|
|
6
|
+
|
|
7
|
+
## 使用场景
|
|
8
|
+
|
|
9
|
+
**开发者**: 快速查询数据验证功能
|
|
10
|
+
**调试**: 检查数据库状态、排查数据问题
|
|
11
|
+
**运维**: 查看生产数据、统计分析
|
|
12
|
+
|
|
13
|
+
## 用法
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
/query-db <service> <sql> [environment]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 参数
|
|
20
|
+
|
|
21
|
+
- `service` (必需): 服务名称
|
|
22
|
+
- `commerce-backend` - 电商后端数据库
|
|
23
|
+
- `user-auth` - 用户认证数据库
|
|
24
|
+
- `mcp-host` - MCP 协调器数据库
|
|
25
|
+
- `agentic-chat` - AI 聊天服务数据库
|
|
26
|
+
- `sql` (必需): SQL 查询语句(用引号包裹)
|
|
27
|
+
- `environment` (可选): 环境,默认 ci
|
|
28
|
+
- `ci` - CI 持续集成环境(开发环境,默认)
|
|
29
|
+
- `stage` - Stage 预发布环境
|
|
30
|
+
- `prod` - Prod 生产环境(⚠️ 谨慎使用)
|
|
31
|
+
|
|
32
|
+
## 示例
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
/query-db commerce-backend "SELECT COUNT(*) FROM products" # CI 环境(默认)
|
|
36
|
+
/query-db user-auth "SELECT email FROM users LIMIT 5" # CI 环境
|
|
37
|
+
/query-db commerce-backend "SELECT * FROM orders WHERE status='pending'" ci # CI 环境
|
|
38
|
+
/query-db user-auth "SELECT COUNT(*) FROM users" stage # Stage 环境
|
|
39
|
+
/query-db commerce-backend "SELECT * FROM products LIMIT 10" prod # Prod 环境(只读)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 特殊参数处理
|
|
43
|
+
|
|
44
|
+
如果用户输入 `/query-db` 或 `/query-db --help`,显示此帮助文档,不执行查询。
|
|
45
|
+
|
|
46
|
+
## Claude Code 执行步骤
|
|
47
|
+
|
|
48
|
+
**重要提示**:根据用户指定的 `environment` 参数选择执行方式:
|
|
49
|
+
- `ci` 或未指定 → 通过 SSH 连接 Docker Postgres(第 0 节,默认)
|
|
50
|
+
- `stage` → 通过 AWS RDS 端点连接(第 1 节)
|
|
51
|
+
- `prod` → 通过 AWS RDS 端点连接(第 2 节,⚠️ 只读)
|
|
52
|
+
|
|
53
|
+
### 0. CI 环境(environment = "ci" 或默认)
|
|
54
|
+
|
|
55
|
+
**访问方式**: SSH + Docker Exec
|
|
56
|
+
|
|
57
|
+
**步骤**:
|
|
58
|
+
```bash
|
|
59
|
+
# IMPORTANT: 使用单行命令
|
|
60
|
+
|
|
61
|
+
# 获取 CI 服务器配置
|
|
62
|
+
CI_USER=$(gh variable get CI_SSH_USER -R Optima-Chat/optima-dev-skills)
|
|
63
|
+
CI_HOST=$(gh variable get CI_SSH_HOST -R Optima-Chat/optima-dev-skills)
|
|
64
|
+
CI_PASSWORD=$(gh variable get CI_SSH_PASSWORD -R Optima-Chat/optima-dev-skills)
|
|
65
|
+
|
|
66
|
+
# 执行查询(根据服务选择不同的数据库)
|
|
67
|
+
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "docker exec commerce-postgres psql -U commerce -d commerce -c \"SELECT COUNT(*) FROM products\""
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**数据库配置映射**:
|
|
71
|
+
- `commerce-backend`:
|
|
72
|
+
- 容器: `commerce-postgres`
|
|
73
|
+
- 用户: `commerce`
|
|
74
|
+
- 密码: `commerce123`
|
|
75
|
+
- 数据库: `commerce`
|
|
76
|
+
|
|
77
|
+
- `user-auth`:
|
|
78
|
+
- 容器: `user-auth-postgres-1`
|
|
79
|
+
- 用户: `userauth`
|
|
80
|
+
- 密码: `password123`
|
|
81
|
+
- 数据库: `userauth`
|
|
82
|
+
|
|
83
|
+
- `mcp-host`:
|
|
84
|
+
- 容器: `mcp-host-db-1`
|
|
85
|
+
- 用户: `mcp_user`
|
|
86
|
+
- 密码: `mcp_password`
|
|
87
|
+
- 数据库: `mcp_host`
|
|
88
|
+
|
|
89
|
+
- `agentic-chat`:
|
|
90
|
+
- 容器: `optima-postgres`
|
|
91
|
+
- 用户: `postgres`
|
|
92
|
+
- 密码: `postgres123`
|
|
93
|
+
- 数据库: `optima_chat`
|
|
94
|
+
|
|
95
|
+
**完整命令示例**:
|
|
96
|
+
```bash
|
|
97
|
+
# 获取配置
|
|
98
|
+
CI_USER=$(gh variable get CI_SSH_USER -R Optima-Chat/optima-dev-skills)
|
|
99
|
+
CI_HOST=$(gh variable get CI_SSH_HOST -R Optima-Chat/optima-dev-skills)
|
|
100
|
+
CI_PASSWORD=$(gh variable get CI_SSH_PASSWORD -R Optima-Chat/optima-dev-skills)
|
|
101
|
+
|
|
102
|
+
# commerce-backend
|
|
103
|
+
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "docker exec commerce-postgres psql -U commerce -d commerce -c \"SELECT COUNT(*) FROM products\""
|
|
104
|
+
|
|
105
|
+
# user-auth
|
|
106
|
+
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "docker exec user-auth-postgres-1 psql -U userauth -d userauth -c \"SELECT COUNT(*) FROM users\""
|
|
107
|
+
|
|
108
|
+
# mcp-host
|
|
109
|
+
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "docker exec mcp-host-db-1 psql -U mcp_user -d mcp_host -c \"SELECT COUNT(*) FROM sessions\""
|
|
110
|
+
|
|
111
|
+
# agentic-chat
|
|
112
|
+
sshpass -p "$CI_PASSWORD" ssh -o StrictHostKeyChecking=no ${CI_USER}@${CI_HOST} "docker exec optima-postgres psql -U postgres -d optima_chat -c \"SELECT COUNT(*) FROM conversations\""
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 1. Stage 环境(environment = "stage")
|
|
116
|
+
|
|
117
|
+
**访问方式**: AWS RDS 直连(需要配置)
|
|
118
|
+
|
|
119
|
+
**步骤**:
|
|
120
|
+
```bash
|
|
121
|
+
# IMPORTANT: 使用单行命令
|
|
122
|
+
|
|
123
|
+
# 从 GitHub Variables 获取 RDS 配置
|
|
124
|
+
STAGE_DB_HOST=$(gh variable get STAGE_DB_HOST -R Optima-Chat/optima-dev-skills)
|
|
125
|
+
STAGE_DB_PASSWORD=$(gh variable get STAGE_DB_PASSWORD -R Optima-Chat/optima-dev-skills)
|
|
126
|
+
|
|
127
|
+
# 执行查询
|
|
128
|
+
PGPASSWORD="$STAGE_DB_PASSWORD" psql -h "$STAGE_DB_HOST" -U commerce -d commerce -c "SELECT COUNT(*) FROM products"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**数据库配置**(需要设置 GitHub Variables):
|
|
132
|
+
- `STAGE_DB_HOST` - RDS 端点
|
|
133
|
+
- `STAGE_DB_PASSWORD` - 数据库密码
|
|
134
|
+
- 每个服务可能有独立的数据库
|
|
135
|
+
|
|
136
|
+
### 2. Prod 环境(environment = "prod")
|
|
137
|
+
|
|
138
|
+
**访问方式**: AWS RDS 直连(⚠️ 只读用户)
|
|
139
|
+
|
|
140
|
+
**步骤**:
|
|
141
|
+
```bash
|
|
142
|
+
# IMPORTANT: 使用单行命令
|
|
143
|
+
# ⚠️ 生产环境只允许只读查询
|
|
144
|
+
|
|
145
|
+
# 从 GitHub Variables 获取 RDS 配置
|
|
146
|
+
PROD_DB_HOST=$(gh variable get PROD_DB_HOST -R Optima-Chat/optima-dev-skills)
|
|
147
|
+
PROD_DB_PASSWORD=$(gh variable get PROD_DB_PASSWORD -R Optima-Chat/optima-dev-skills)
|
|
148
|
+
|
|
149
|
+
# 执行查询(只读)
|
|
150
|
+
PGPASSWORD="$PROD_DB_PASSWORD" psql -h "$PROD_DB_HOST" -U commerce_readonly -d commerce -c "SELECT COUNT(*) FROM products"
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**⚠️ 生产环境安全规则**:
|
|
154
|
+
1. **只使用只读用户** (`commerce_readonly`, `userauth_readonly`)
|
|
155
|
+
2. **禁止 INSERT/UPDATE/DELETE**
|
|
156
|
+
3. **谨慎使用 SELECT***,优先指定列名
|
|
157
|
+
4. **添加 LIMIT** 防止查询过多数据
|
|
158
|
+
|
|
159
|
+
## 安全注意事项
|
|
160
|
+
|
|
161
|
+
### SQL 注入防护
|
|
162
|
+
|
|
163
|
+
**❌ 危险示例**:
|
|
164
|
+
```bash
|
|
165
|
+
# 不要直接拼接用户输入
|
|
166
|
+
/query-db commerce-backend "SELECT * FROM products WHERE id=$USER_INPUT"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**✅ 安全示例**:
|
|
170
|
+
```bash
|
|
171
|
+
# 使用参数化查询或明确的值
|
|
172
|
+
/query-db commerce-backend "SELECT * FROM products WHERE id=123"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 生产环境规则
|
|
176
|
+
|
|
177
|
+
1. **只读查询**: 生产环境只允许 SELECT
|
|
178
|
+
2. **限制返回行数**: 使用 LIMIT
|
|
179
|
+
3. **避免全表扫描**: 使用 WHERE 条件
|
|
180
|
+
4. **敏感数据**: 不查询密码、密钥等敏感字段
|
|
181
|
+
|
|
182
|
+
### 常见安全查询
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# ✅ 统计查询
|
|
186
|
+
/query-db commerce-backend "SELECT COUNT(*) FROM orders WHERE created_at > NOW() - INTERVAL '1 day'" prod
|
|
187
|
+
|
|
188
|
+
# ✅ 限制行数
|
|
189
|
+
/query-db user-auth "SELECT id, email, created_at FROM users ORDER BY created_at DESC LIMIT 10" prod
|
|
190
|
+
|
|
191
|
+
# ✅ 聚合查询
|
|
192
|
+
/query-db commerce-backend "SELECT status, COUNT(*) FROM orders GROUP BY status" prod
|
|
193
|
+
|
|
194
|
+
# ❌ 危险:全表查询
|
|
195
|
+
# /query-db commerce-backend "SELECT * FROM orders" prod
|
|
196
|
+
|
|
197
|
+
# ❌ 危险:敏感字段
|
|
198
|
+
# /query-db user-auth "SELECT password_hash FROM users" prod
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## 常见错误处理
|
|
202
|
+
|
|
203
|
+
### 错误:Connection refused
|
|
204
|
+
|
|
205
|
+
**原因**: 数据库未运行或网络不通
|
|
206
|
+
|
|
207
|
+
**解决**:
|
|
208
|
+
```bash
|
|
209
|
+
# CI: 检查容器状态
|
|
210
|
+
sshpass -p "$CI_PASSWORD" ssh ${CI_USER}@${CI_HOST} "docker ps | grep postgres"
|
|
211
|
+
|
|
212
|
+
# Stage/Prod: 检查安全组和网络配置
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 错误:Authentication failed
|
|
216
|
+
|
|
217
|
+
**原因**: 用户名或密码错误
|
|
218
|
+
|
|
219
|
+
**解决**: 检查 GitHub Variables 配置是否正确
|
|
220
|
+
|
|
221
|
+
### 错误:Permission denied
|
|
222
|
+
|
|
223
|
+
**原因**: 生产环境使用了写操作
|
|
224
|
+
|
|
225
|
+
**解决**: 使用只读查询,移除 INSERT/UPDATE/DELETE
|
|
226
|
+
|
|
227
|
+
## 最佳实践
|
|
228
|
+
|
|
229
|
+
1. **默认使用 CI**: 开发调试优先用 CI 环境
|
|
230
|
+
2. **生产只读**: Prod 环境只用于查看数据,不修改
|
|
231
|
+
3. **添加 LIMIT**: 避免返回过多数据
|
|
232
|
+
4. **使用聚合**: COUNT/SUM/AVG 比 SELECT * 更安全
|
|
233
|
+
5. **索引查询**: 使用主键或索引字段提高性能
|
|
234
|
+
|
|
235
|
+
## 相关资源
|
|
236
|
+
|
|
237
|
+
- PostgreSQL 文档: https://www.postgresql.org/docs/
|
|
238
|
+
- AWS RDS 最佳实践: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "query-db"
|
|
3
|
+
description: "当用户请求查询数据库、执行SQL、查看数据、统计数据、检查数据库、查询表、数据库查询时,使用此技能。支持 CI、Stage、Prod 三个环境的 commerce-backend、user-auth、mcp-host、agentic-chat 服务的数据库查询。"
|
|
4
|
+
allowed-tools: ["Bash", "SlashCommand"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 查询数据库
|
|
8
|
+
|
|
9
|
+
当你需要执行 SQL 查询检查数据时,使用这个场景。
|
|
10
|
+
|
|
11
|
+
## 🎯 适用情况
|
|
12
|
+
|
|
13
|
+
- 验证数据是否正确插入/更新
|
|
14
|
+
- 统计数据(用户数、订单数等)
|
|
15
|
+
- 排查数据问题
|
|
16
|
+
- 检查数据库状态
|
|
17
|
+
- 开发调试时查看数据
|
|
18
|
+
|
|
19
|
+
## 🚀 快速操作
|
|
20
|
+
|
|
21
|
+
### 1. 查询 CI 环境数据库(默认)
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
/query-db commerce-backend "SELECT COUNT(*) FROM products"
|
|
25
|
+
/query-db user-auth "SELECT email FROM users LIMIT 5"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**说明**:
|
|
29
|
+
- 查询 CI 开发环境数据库
|
|
30
|
+
- 默认环境,不需要指定 `ci` 参数
|
|
31
|
+
- 通过 SSH + Docker Exec 访问
|
|
32
|
+
- 可以执行任何 SQL 语句
|
|
33
|
+
|
|
34
|
+
### 2. 查询 Stage 环境数据库
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
/query-db commerce-backend "SELECT COUNT(*) FROM orders" stage
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**说明**:
|
|
41
|
+
- 查询 Stage 预发布环境
|
|
42
|
+
- 通过 AWS RDS 直连
|
|
43
|
+
|
|
44
|
+
### 3. 查询 Prod 环境数据库
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
/query-db commerce-backend "SELECT status, COUNT(*) FROM orders GROUP BY status" prod
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**说明**:
|
|
51
|
+
- 查询生产环境数据库
|
|
52
|
+
- ⚠️ **只读查询**,不能修改数据
|
|
53
|
+
- 使用只读用户连接
|
|
54
|
+
|
|
55
|
+
**常用服务**:
|
|
56
|
+
- `commerce-backend` - 电商数据库
|
|
57
|
+
- `user-auth` - 用户认证数据库
|
|
58
|
+
- `mcp-host` - MCP 协调器数据库
|
|
59
|
+
- `agentic-chat` - AI 聊天数据库
|
|
60
|
+
|
|
61
|
+
### 4. 常用查询示例
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
# 统计查询
|
|
65
|
+
/query-db commerce-backend "SELECT COUNT(*) FROM products WHERE status='active'"
|
|
66
|
+
|
|
67
|
+
# 查看最新数据
|
|
68
|
+
/query-db user-auth "SELECT id, email, created_at FROM users ORDER BY created_at DESC LIMIT 10"
|
|
69
|
+
|
|
70
|
+
# 聚合统计
|
|
71
|
+
/query-db commerce-backend "SELECT status, COUNT(*) as count FROM orders GROUP BY status"
|
|
72
|
+
|
|
73
|
+
# 检查特定记录
|
|
74
|
+
/query-db user-auth "SELECT * FROM users WHERE email='user@example.com'"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 📋 常见使用场景
|
|
78
|
+
|
|
79
|
+
### 场景 1:验证新功能
|
|
80
|
+
|
|
81
|
+
**步骤**:
|
|
82
|
+
1. 创建数据后查询:`/query-db commerce-backend "SELECT * FROM products WHERE title='新商品'"`
|
|
83
|
+
2. 检查关联数据:`/query-db commerce-backend "SELECT * FROM product_variants WHERE product_id=123"`
|
|
84
|
+
|
|
85
|
+
### 场景 2:数据统计
|
|
86
|
+
|
|
87
|
+
**步骤**:
|
|
88
|
+
1. 统计总数:`/query-db user-auth "SELECT COUNT(*) FROM users"`
|
|
89
|
+
2. 分组统计:`/query-db commerce-backend "SELECT DATE(created_at), COUNT(*) FROM orders GROUP BY DATE(created_at)"`
|
|
90
|
+
|
|
91
|
+
### 场景 3:排查问题
|
|
92
|
+
|
|
93
|
+
**步骤**:
|
|
94
|
+
1. 查找异常数据:`/query-db commerce-backend "SELECT * FROM orders WHERE status IS NULL"`
|
|
95
|
+
2. 检查重复数据:`/query-db user-auth "SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) > 1"`
|
|
96
|
+
|
|
97
|
+
## ⚠️ 安全提示
|
|
98
|
+
|
|
99
|
+
### 生产环境规则
|
|
100
|
+
|
|
101
|
+
1. **只读查询**: 只使用 SELECT,不能 INSERT/UPDATE/DELETE
|
|
102
|
+
2. **限制返回**: 使用 LIMIT 限制返回行数
|
|
103
|
+
3. **避免全表**: 使用 WHERE 条件
|
|
104
|
+
4. **不查敏感数据**: 避免查询密码、密钥等
|
|
105
|
+
|
|
106
|
+
### 安全查询示例
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
# ✅ 好的查询
|
|
110
|
+
/query-db commerce-backend "SELECT COUNT(*) FROM orders WHERE created_at > NOW() - INTERVAL '1 day'" prod
|
|
111
|
+
/query-db user-auth "SELECT id, email FROM users LIMIT 10" prod
|
|
112
|
+
|
|
113
|
+
# ❌ 不好的查询
|
|
114
|
+
# /query-db commerce-backend "SELECT * FROM orders" prod (全表扫描)
|
|
115
|
+
# /query-db user-auth "SELECT password_hash FROM users" prod (敏感数据)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 💡 最佳实践
|
|
119
|
+
|
|
120
|
+
1. **开发用 CI**: 调试和验证优先用 CI 环境
|
|
121
|
+
2. **生产只读**: Prod 环境只查看,不修改
|
|
122
|
+
3. **使用聚合**: COUNT/SUM/AVG 比 SELECT * 更好
|
|
123
|
+
4. **添加限制**: 总是使用 LIMIT
|
|
124
|
+
5. **指定列名**: 避免 SELECT *
|
|
125
|
+
|
|
126
|
+
## 🌐 环境对比
|
|
127
|
+
|
|
128
|
+
### CI 环境
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
/query-db commerce-backend "SELECT COUNT(*) FROM products"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**特点**:
|
|
135
|
+
- 开发环境,可以任意查询和修改
|
|
136
|
+
- 数据可以随时重置
|
|
137
|
+
- 通过 Docker 容器访问
|
|
138
|
+
|
|
139
|
+
### Stage 环境
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
/query-db commerce-backend "SELECT COUNT(*) FROM orders" stage
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**特点**:
|
|
146
|
+
- 预发布环境
|
|
147
|
+
- 数据接近生产
|
|
148
|
+
- 通过 AWS RDS 访问
|
|
149
|
+
|
|
150
|
+
### Prod 环境
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
/query-db commerce-backend "SELECT status, COUNT(*) FROM orders GROUP BY status" prod
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**特点**:
|
|
157
|
+
- 生产环境,只读访问
|
|
158
|
+
- 真实用户数据
|
|
159
|
+
- ⚠️ 谨慎使用
|
|
160
|
+
|
|
161
|
+
## 🔗 相关命令
|
|
162
|
+
|
|
163
|
+
- `/query-db` - 查询数据库(详细使用方法请查看 `/query-db --help`)
|
package/README.md
CHANGED
|
@@ -12,30 +12,7 @@ npm install -g @optima-chat/dev-skills@latest
|
|
|
12
12
|
|
|
13
13
|
安装后会自动将 skills 复制到 `~/.claude/` 目录。
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# 查看版本
|
|
19
|
-
optima-dev-skills --version
|
|
20
|
-
|
|
21
|
-
# 查看帮助
|
|
22
|
-
optima-dev-skills --help
|
|
23
|
-
|
|
24
|
-
# 检查文件
|
|
25
|
-
ls ~/.claude/commands/
|
|
26
|
-
ls ~/.claude/skills/logs/
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### 已安装的能力
|
|
30
|
-
|
|
31
|
-
- ✅ `/logs` 命令 - 查看 Stage/Prod 环境日志
|
|
32
|
-
- ✅ `logs` skill - 自动识别日志查看需求
|
|
33
|
-
|
|
34
|
-
### 更新
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
npm update -g @optima-chat/dev-skills@latest
|
|
38
|
-
```
|
|
15
|
+
安装后,`/logs` 命令和 `logs` skill 会自动可用。
|
|
39
16
|
|
|
40
17
|
## 🎯 核心理念
|
|
41
18
|
|
|
@@ -46,11 +23,12 @@ Optima Dev Skills 让 Claude Code 能够直接在 **CI、Stage、Prod** 三个
|
|
|
46
23
|
- **任务驱动** - 基于具体任务场景(查看日志、调用 API),不是抽象分类
|
|
47
24
|
- **跨环境协作** - 统一的命令在 CI、Stage、Prod 三个环境中使用
|
|
48
25
|
|
|
49
|
-
## 📋 任务场景(
|
|
26
|
+
## 📋 任务场景(2 个)
|
|
50
27
|
|
|
51
28
|
当 Claude Code 识别到以下任务时,会自动加载对应的 Skill:
|
|
52
29
|
|
|
53
30
|
- **logs** - 查看 CI/Stage/Prod 的服务器日志
|
|
31
|
+
- **query-db** - 查询 CI/Stage/Prod 的数据库
|
|
54
32
|
|
|
55
33
|
## 👤 用户故事
|
|
56
34
|
|
|
@@ -92,12 +70,13 @@ Claude:
|
|
|
92
70
|
|
|
93
71
|
| 命令 | 说明 | 示例 | 跨环境 |
|
|
94
72
|
|------|------|------|--------|
|
|
95
|
-
| `/logs` | 查看服务日志 | `/logs commerce-backend 100
|
|
73
|
+
| `/logs` | 查看服务日志 | `/logs commerce-backend 100` | ✅ |
|
|
74
|
+
| `/query-db` | 查询数据库 | `/query-db user-auth "SELECT COUNT(*) FROM users"` | ✅ |
|
|
96
75
|
|
|
97
76
|
**说明**:
|
|
98
77
|
- 命令支持 CI、Stage、Prod 三个环境
|
|
99
|
-
-
|
|
100
|
-
-
|
|
78
|
+
- 默认使用 CI 环境,适合日常开发
|
|
79
|
+
- Claude Code 会根据上下文自动选择环境和执行方式
|
|
101
80
|
|
|
102
81
|
## 🏗️ 项目结构
|
|
103
82
|
|
|
@@ -105,10 +84,13 @@ Claude:
|
|
|
105
84
|
optima-dev-skills/
|
|
106
85
|
├── .claude/
|
|
107
86
|
│ ├── commands/
|
|
108
|
-
│ │
|
|
87
|
+
│ │ ├── logs.md # /logs - 查看服务日志
|
|
88
|
+
│ │ └── query-db.md # /query-db - 查询数据库
|
|
109
89
|
│ │
|
|
110
90
|
│ └── skills/
|
|
111
|
-
│
|
|
91
|
+
│ ├── logs/ # 日志查看 skill
|
|
92
|
+
│ │ └── SKILL.md
|
|
93
|
+
│ └── query-db/ # 数据库查询 skill
|
|
112
94
|
│ └── SKILL.md
|
|
113
95
|
│
|
|
114
96
|
└── docs/
|
|
@@ -180,14 +162,15 @@ Claude:
|
|
|
180
162
|
|
|
181
163
|
## 🛠️ 开发状态
|
|
182
164
|
|
|
183
|
-
**当前版本**: 0.
|
|
165
|
+
**当前版本**: 0.3.0
|
|
184
166
|
|
|
185
167
|
**已完成**:
|
|
186
|
-
- ✅
|
|
187
|
-
- ✅
|
|
168
|
+
- ✅ 2 个跨环境命令:`/logs`、`/query-db`
|
|
169
|
+
- ✅ 2 个任务场景:`logs` skill、`query-db` skill
|
|
188
170
|
- ✅ 支持 CI、Stage、Prod 三个环境
|
|
189
|
-
- ✅ CI 环境通过 SSH + Docker
|
|
190
|
-
- ✅ Stage/Prod 通过 AWS
|
|
171
|
+
- ✅ CI 环境通过 SSH + Docker 访问
|
|
172
|
+
- ✅ Stage/Prod 通过 AWS 服务访问
|
|
173
|
+
- ✅ 数据库查询支持只读模式(Prod)
|
|
191
174
|
|
|
192
175
|
**设计原则**:
|
|
193
176
|
- 命令提供信息(URL、路径、凭证位置),不实现复杂逻辑
|
package/package.json
CHANGED
package/scripts/install.js
CHANGED
|
@@ -7,7 +7,8 @@ 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
|
|
10
|
+
const LOGS_SKILL_DEST = path.join(CLAUDE_DIR, 'skills', 'logs');
|
|
11
|
+
const QUERY_DB_SKILL_DEST = path.join(CLAUDE_DIR, 'skills', 'query-db');
|
|
11
12
|
|
|
12
13
|
// 颜色输出
|
|
13
14
|
const colors = {
|
|
@@ -50,34 +51,47 @@ function install() {
|
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
// 安装命令
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (fs.existsSync(commandsSource)) {
|
|
56
|
-
if (!fs.existsSync(COMMANDS_DEST)) {
|
|
57
|
-
fs.mkdirSync(COMMANDS_DEST, { recursive: true });
|
|
58
|
-
}
|
|
59
|
-
fs.copyFileSync(commandsSource, commandsDest);
|
|
60
|
-
log(`✓ Installed /logs command to ${commandsDest}`, 'green');
|
|
61
|
-
} else {
|
|
62
|
-
log(`✗ Commands not found at ${commandsSource}`, 'red');
|
|
54
|
+
if (!fs.existsSync(COMMANDS_DEST)) {
|
|
55
|
+
fs.mkdirSync(COMMANDS_DEST, { recursive: true });
|
|
63
56
|
}
|
|
64
57
|
|
|
65
|
-
// 安装
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
58
|
+
// 安装 /logs 命令
|
|
59
|
+
const logsCommandSource = path.join(SKILLS_SOURCE, 'commands', 'logs.md');
|
|
60
|
+
const logsCommandDest = path.join(COMMANDS_DEST, 'logs.md');
|
|
61
|
+
if (fs.existsSync(logsCommandSource)) {
|
|
62
|
+
fs.copyFileSync(logsCommandSource, logsCommandDest);
|
|
63
|
+
log(`✓ Installed /logs command`, 'green');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// 安装 /query-db 命令
|
|
67
|
+
const queryDbCommandSource = path.join(SKILLS_SOURCE, 'commands', 'query-db.md');
|
|
68
|
+
const queryDbCommandDest = path.join(COMMANDS_DEST, 'query-db.md');
|
|
69
|
+
if (fs.existsSync(queryDbCommandSource)) {
|
|
70
|
+
fs.copyFileSync(queryDbCommandSource, queryDbCommandDest);
|
|
71
|
+
log(`✓ Installed /query-db command`, 'green');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 安装 logs skill
|
|
75
|
+
const logsSkillSource = path.join(SKILLS_SOURCE, 'skills', 'logs');
|
|
76
|
+
if (fs.existsSync(logsSkillSource)) {
|
|
77
|
+
copyRecursive(logsSkillSource, LOGS_SKILL_DEST);
|
|
78
|
+
log(`✓ Installed logs skill`, 'green');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// 安装 query-db skill
|
|
82
|
+
const queryDbSkillSource = path.join(SKILLS_SOURCE, 'skills', 'query-db');
|
|
83
|
+
if (fs.existsSync(queryDbSkillSource)) {
|
|
84
|
+
copyRecursive(queryDbSkillSource, QUERY_DB_SKILL_DEST);
|
|
85
|
+
log(`✓ Installed query-db skill`, 'green');
|
|
72
86
|
}
|
|
73
87
|
|
|
74
88
|
log('\n✨ Installation complete!\n', 'green');
|
|
75
89
|
log('Available commands:', 'blue');
|
|
76
90
|
log(' /logs <service> [lines] [environment]', 'yellow');
|
|
91
|
+
log(' /query-db <service> <sql> [environment]', 'yellow');
|
|
77
92
|
log('\nExamples:', 'blue');
|
|
78
|
-
log(' /logs commerce-backend
|
|
79
|
-
log(' /
|
|
80
|
-
log(' /logs mcp-host 200 prod # Prod, 200 lines', 'yellow');
|
|
93
|
+
log(' /logs commerce-backend # CI logs', 'yellow');
|
|
94
|
+
log(' /query-db commerce-backend "SELECT COUNT(*) FROM orders" # CI query', 'yellow');
|
|
81
95
|
log('\nDocumentation: https://github.com/Optima-Chat/optima-dev-skills\n', 'blue');
|
|
82
96
|
}
|
|
83
97
|
|