@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.
@@ -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
- ### 方式 2:验证安装
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
- ## 📋 任务场景(1 个)
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 stage` | ✅ |
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
- - Claude Code 会根据上下文自动选择环境
100
- - 命令提供信息和入口,具体操作由 Claude Code 智能完成
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
- │ │ └── logs.md # /logs - 查看服务日志
87
+ │ │ ├── logs.md # /logs - 查看服务日志
88
+ │ │ └── query-db.md # /query-db - 查询数据库
109
89
  │ │
110
90
  │ └── skills/
111
- └── logs/ # 日志查看 skill
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.2.0
165
+ **当前版本**: 0.3.0
184
166
 
185
167
  **已完成**:
186
- - ✅ 1 个跨环境命令:`/logs`
187
- - ✅ 1 个任务场景:`logs` skill
168
+ - ✅ 2 个跨环境命令:`/logs`、`/query-db`
169
+ - ✅ 2 个任务场景:`logs` skill、`query-db` skill
188
170
  - ✅ 支持 CI、Stage、Prod 三个环境
189
- - ✅ CI 环境通过 SSH + Docker Compose 访问
190
- - ✅ Stage/Prod 通过 AWS CloudWatch Logs 访问
171
+ - ✅ CI 环境通过 SSH + Docker 访问
172
+ - ✅ Stage/Prod 通过 AWS 服务访问
173
+ - ✅ 数据库查询支持只读模式(Prod)
191
174
 
192
175
  **设计原则**:
193
176
  - 命令提供信息(URL、路径、凭证位置),不实现复杂逻辑
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/dev-skills",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Claude Code Skills for Optima development team - cross-environment collaboration tools",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -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 SKILLS_DEST = path.join(CLAUDE_DIR, 'skills', 'logs');
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
- const commandsSource = path.join(SKILLS_SOURCE, 'commands', 'logs.md');
54
- const commandsDest = path.join(COMMANDS_DEST, 'logs.md');
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
- // 安装 skills
66
- const skillsSource = path.join(SKILLS_SOURCE, 'skills', 'logs');
67
- if (fs.existsSync(skillsSource)) {
68
- copyRecursive(skillsSource, SKILLS_DEST);
69
- log(`✓ Installed logs skill to ${SKILLS_DEST}`, 'green');
70
- } else {
71
- log(`✗ Skills not found at ${skillsSource}`, 'red');
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 # Stage, 50 lines', 'yellow');
79
- log(' /logs user-auth 100 # Stage, 100 lines', 'yellow');
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