@optima-chat/commerce-cli 1.0.0 → 1.2.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/skills/commerce-i18n/SKILL.md +141 -0
- package/.claude/skills/commerce-inventory/SKILL.md +83 -0
- package/.claude/skills/commerce-order/SKILL.md +112 -0
- package/.claude/skills/commerce-product/SKILL.md +108 -0
- package/.claude/skills/commerce-storefront/SKILL.md +110 -0
- package/README.md +41 -51
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +122 -67
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/postinstall.js +6 -91
- package/dist/postinstall.js.map +1 -1
- package/dist/preuninstall.d.ts +0 -1
- package/dist/preuninstall.js +3 -51
- package/dist/preuninstall.js.map +1 -1
- package/package.json +1 -1
- package/.claude/CLAUDE.md +0 -101
- package/dist/commands/cleanup.d.ts +0 -3
- package/dist/commands/cleanup.d.ts.map +0 -1
- package/dist/commands/cleanup.js +0 -100
- package/dist/commands/cleanup.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
# ⚡️
|
|
3
|
+
# ⚡️ Commerce CLI
|
|
4
4
|
|
|
5
5
|
### 用自然语言管理你的电商店铺
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
[](https://www.typescriptlang.org/)
|
|
13
13
|
[](https://nodejs.org/)
|
|
14
14
|
|
|
15
|
-
[网站](https://cli.optima.shop) • [文档](https://github.com/Optima-Chat/
|
|
15
|
+
[网站](https://cli.optima.shop) • [文档](https://github.com/Optima-Chat/commerce-cli#readme) • [NPM](https://www.npmjs.com/package/@optima-chat/commerce-cli) • [问题反馈](https://github.com/Optima-Chat/commerce-cli/issues)
|
|
16
16
|
|
|
17
17
|
</div>
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
## 🎯 简介
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Commerce CLI 是 [Optima Commerce](https://www.optima.shop) 生态的命令行工具,**专为 Claude Code 设计**。
|
|
24
24
|
|
|
25
25
|
无需记住命令 - 直接用中文对话,Claude 会自动调用相应的 CLI 命令来管理你的电商店铺。
|
|
26
26
|
|
|
@@ -28,14 +28,14 @@ Optima CLI 是 [Optima Commerce](https://www.optima.shop) 生态的命令行工
|
|
|
28
28
|
# 传统方式(需要记住命令)
|
|
29
29
|
commerce product create --title "陶瓷杯" --price 89 --stock 20
|
|
30
30
|
|
|
31
|
-
#
|
|
31
|
+
# Commerce CLI + Claude Code(自然语言)
|
|
32
32
|
"创建陶瓷杯商品,89 美元,库存 20" ✨
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## 🎬 演示
|
|
36
36
|
|
|
37
37
|
### Claude Code 自然语言交互
|
|
38
|
-
> 这是
|
|
38
|
+
> 这是 Commerce CLI 最强大的功能 - 用自然语言管理电商店铺
|
|
39
39
|
|
|
40
40
|
<!--
|
|
41
41
|
TODO: 录制演示 GIF 后取消注释
|
|
@@ -85,10 +85,21 @@ TODO: 录制商品管理演示 GIF
|
|
|
85
85
|
npm install -g @optima-chat/commerce-cli@latest
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
安装完成后,在项目中运行 `commerce init` 启用所需场景。支持 5 个场景化 Skills:
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
**可用场景**:
|
|
91
|
+
- 🛍️ **Product Management** - 商品管理(商品、变体、图片)
|
|
92
|
+
- 📦 **Order Fulfillment** - 订单履行(发货、退款)
|
|
93
|
+
- 📊 **Inventory Management** - 库存管理(监控、补货)
|
|
94
|
+
- 🏪 **Storefront Configuration** - 店铺配置(首页、集合)
|
|
95
|
+
- 🌍 **Internationalization** - 国际化(多语言翻译)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# 交互式选择场景
|
|
99
|
+
commerce init
|
|
100
|
+
|
|
101
|
+
# 或直接指定场景
|
|
102
|
+
commerce init --skills product,order
|
|
92
103
|
```
|
|
93
104
|
|
|
94
105
|
### 2. 登录你的账号
|
|
@@ -116,13 +127,13 @@ Claude 会自动打开浏览器引导你完成 OAuth 授权。
|
|
|
116
127
|
- "给商品添加中文翻译"
|
|
117
128
|
```
|
|
118
129
|
|
|
119
|
-
Claude 会自动调用对应的 `
|
|
130
|
+
Claude 会自动调用对应的 `commerce` 命令来完成操作。
|
|
120
131
|
|
|
121
132
|
**就是这么简单!** 🎉
|
|
122
133
|
|
|
123
134
|
## 📦 功能模块
|
|
124
135
|
|
|
125
|
-
|
|
136
|
+
Commerce CLI 提供 **16 个功能模块**,**95+ 个命令**,覆盖电商全流程:
|
|
126
137
|
|
|
127
138
|
| 模块 | 命令数 | 说明 |
|
|
128
139
|
|------|--------|------|
|
|
@@ -145,7 +156,7 @@ Optima CLI 提供 **16 个功能模块**,**95+ 个命令**,覆盖电商全
|
|
|
145
156
|
|
|
146
157
|
## 🎨 输出格式
|
|
147
158
|
|
|
148
|
-
|
|
159
|
+
Commerce CLI 支持两种输出格式,适用于不同场景:
|
|
149
160
|
|
|
150
161
|
### JSON 模式(默认,AI 友好)
|
|
151
162
|
|
|
@@ -226,11 +237,11 @@ $ commerce merchant info --pretty
|
|
|
226
237
|
|
|
227
238
|
## 🤖 非交互模式 / CI/CD
|
|
228
239
|
|
|
229
|
-
**v0.16.0 新增**:
|
|
240
|
+
**v0.16.0 新增**:Commerce CLI 现在支持智能环境检测,自动适配终端用户和 AI/CI/CD 环境!
|
|
230
241
|
|
|
231
242
|
### 🎯 自动环境检测
|
|
232
243
|
|
|
233
|
-
|
|
244
|
+
Commerce CLI 自动检测运行环境,无需手动配置:
|
|
234
245
|
|
|
235
246
|
| 环境 | 行为 | 示例 |
|
|
236
247
|
|------|------|------|
|
|
@@ -272,7 +283,7 @@ jobs:
|
|
|
272
283
|
steps:
|
|
273
284
|
- uses: actions/checkout@v3
|
|
274
285
|
|
|
275
|
-
- name: Install
|
|
286
|
+
- name: Install Commerce CLI
|
|
276
287
|
run: npm install -g @optima-chat/commerce-cli
|
|
277
288
|
|
|
278
289
|
- name: Create Products
|
|
@@ -316,12 +327,12 @@ FROM node:18-alpine
|
|
|
316
327
|
RUN npm install -g @optima-chat/commerce-cli
|
|
317
328
|
|
|
318
329
|
# 非交互环境,需提供所有参数
|
|
319
|
-
CMD ["
|
|
330
|
+
CMD ["commerce", "product", "list", "--json"]
|
|
320
331
|
```
|
|
321
332
|
|
|
322
333
|
```bash
|
|
323
334
|
# 运行容器
|
|
324
|
-
docker run -e OPTIMA_TOKEN=$OPTIMA_TOKEN
|
|
335
|
+
docker run -e OPTIMA_TOKEN=$OPTIMA_TOKEN commerce-cli
|
|
325
336
|
```
|
|
326
337
|
|
|
327
338
|
### ✅ 确认操作(`--yes` 标志)
|
|
@@ -381,7 +392,7 @@ commerce auth logout --all # 登出所有环境
|
|
|
381
392
|
|
|
382
393
|
**多环境支持**(v0.19.0+):
|
|
383
394
|
|
|
384
|
-
|
|
395
|
+
Commerce CLI 支持三个独立环境,各自拥有独立的配置文件:
|
|
385
396
|
|
|
386
397
|
| 环境 | Auth API | Commerce API | 前端域名 | 配置文件 |
|
|
387
398
|
|------|----------|--------------|---------|----------|
|
|
@@ -389,7 +400,7 @@ Optima CLI 支持三个独立环境,各自拥有独立的配置文件:
|
|
|
389
400
|
| **Stage** | **auth-stage.optima.shop** | **api-stage.optima.shop** | **stage.optima.shop** | **config-stage.json** |
|
|
390
401
|
| Development | auth.optima.chat | api.optima.chat | optima.sh | config-dev.json |
|
|
391
402
|
|
|
392
|
-
**配置文件位置**:`~/.config/
|
|
403
|
+
**配置文件位置**:`~/.config/commerce-cli/`
|
|
393
404
|
|
|
394
405
|
```bash
|
|
395
406
|
# 登录到不同环境
|
|
@@ -416,14 +427,14 @@ export OPTIMA_TOKEN=<your_access_token>
|
|
|
416
427
|
commerce product list
|
|
417
428
|
|
|
418
429
|
# Docker 容器
|
|
419
|
-
docker run -e OPTIMA_TOKEN=<your_token>
|
|
430
|
+
docker run -e OPTIMA_TOKEN=<your_token> commerce-cli product list
|
|
420
431
|
|
|
421
432
|
# CI/CD 流水线
|
|
422
433
|
export OPTIMA_TOKEN=${{ secrets.OPTIMA_TOKEN }}
|
|
423
434
|
commerce product create --title "商品"
|
|
424
435
|
```
|
|
425
436
|
|
|
426
|
-
**认证优先级**:`OPTIMA_TOKEN` 环境变量 > 配置文件(`~/.config/
|
|
437
|
+
**认证优先级**:`OPTIMA_TOKEN` 环境变量 > 配置文件(`~/.config/commerce-cli`)
|
|
427
438
|
|
|
428
439
|
**自定义 Backend 地址**(适用于开发/测试环境):
|
|
429
440
|
|
|
@@ -440,7 +451,7 @@ commerce auth login
|
|
|
440
451
|
docker run \
|
|
441
452
|
-e OPTIMA_TOKEN=<your_token> \
|
|
442
453
|
-e OPTIMA_API_URL=http://host.docker.internal:8000 \
|
|
443
|
-
|
|
454
|
+
commerce-cli product list
|
|
444
455
|
```
|
|
445
456
|
|
|
446
457
|
**默认 Backend**:
|
|
@@ -800,7 +811,7 @@ commerce transfer summary # 财务汇总
|
|
|
800
811
|
|
|
801
812
|
### 🌐 国际化翻译
|
|
802
813
|
|
|
803
|
-
|
|
814
|
+
Commerce CLI 内置完整的多语言翻译管理系统:
|
|
804
815
|
|
|
805
816
|
```bash
|
|
806
817
|
# 语言管理
|
|
@@ -868,7 +879,7 @@ commerce i18n collection create --collection-id coll_789 \
|
|
|
868
879
|
|
|
869
880
|
### 🧪 测试工具
|
|
870
881
|
|
|
871
|
-
|
|
882
|
+
Commerce CLI 内置测试工具,可用作功能测试和 API 健康检查:
|
|
872
883
|
|
|
873
884
|
```bash
|
|
874
885
|
# 健康检查(检查 API 连通性和响应时间)
|
|
@@ -1020,14 +1031,14 @@ $ commerce test smoke
|
|
|
1020
1031
|
## 🛠 工具命令
|
|
1021
1032
|
|
|
1022
1033
|
```bash
|
|
1023
|
-
commerce init # 在当前项目启用
|
|
1034
|
+
commerce init # 在当前项目启用 Commerce CLI(创建 Claude Skill)
|
|
1024
1035
|
commerce cleanup # 清理配置文件
|
|
1025
1036
|
commerce version # 显示版本信息
|
|
1026
1037
|
```
|
|
1027
1038
|
|
|
1028
1039
|
## 🏗 项目状态
|
|
1029
1040
|
|
|
1030
|
-
**当前版本:
|
|
1041
|
+
**当前版本:v1.0.0** 🎉
|
|
1031
1042
|
|
|
1032
1043
|
✅ **已完成功能**:
|
|
1033
1044
|
- ✅ 完整的 OAuth 2.0 认证系统(Device Flow + 自动刷新)
|
|
@@ -1048,33 +1059,12 @@ commerce version # 显示版本信息
|
|
|
1048
1059
|
|
|
1049
1060
|
**功能覆盖率**:100%(所有核心商户运营功能 + 测试工具)
|
|
1050
1061
|
|
|
1051
|
-
**最近更新**:
|
|
1052
|
-
|
|
1053
|
-
**v0.19.0**(2025-11-13):
|
|
1054
|
-
- 🌐 **三环境架构**:新增 Stage 环境,支持 Production/Stage/Development 完全隔离
|
|
1055
|
-
- 🔐 **多文件配置**:每个环境独立配置文件(config-prod.json, config-stage.json, config-dev.json)
|
|
1056
|
-
- 🔄 **环境切换命令**:新增 `auth switch` 命令,无需重新登录即可切换环境
|
|
1057
|
-
- 🧪 **测试模块**:新增 `test health` 和 `test smoke` 命令
|
|
1058
|
-
- 📜 **E2E 测试脚本**:`scripts/e2e-test.sh` 用于 CI/CD 集成
|
|
1059
|
-
- 🛠️ **认证命令增强**:`whoami` 显示环境信息,`logout` 支持 `--env` 和 `--all`
|
|
1060
|
-
- 📚 **完整文档更新**:CLAUDE.md 和 README.md 包含所有新功能
|
|
1061
|
-
|
|
1062
|
-
**v0.18.1**(2025-11-11):
|
|
1063
|
-
- 🐛 修复:开发环境店铺域名使用正确的 `optima.sh`
|
|
1064
|
-
- 🛠️ 优化:统一店铺域名管理,自动根据环境选择
|
|
1065
|
-
|
|
1066
|
-
**v0.18.0**(2025-11-11):
|
|
1067
|
-
- 🌍 新增:环境支持(`--env development` 参数)
|
|
1068
|
-
- 🔐 支持生产和开发环境切换
|
|
1069
|
-
- 🎯 自动选择对应的 OAuth Client ID 和 API 端点
|
|
1070
|
-
- 🔄 环境配置持久化
|
|
1071
|
-
|
|
1072
1062
|
## 🔧 开发
|
|
1073
1063
|
|
|
1074
1064
|
```bash
|
|
1075
1065
|
# 克隆仓库
|
|
1076
|
-
git clone https://github.com/Optima-Chat/
|
|
1077
|
-
cd
|
|
1066
|
+
git clone https://github.com/Optima-Chat/commerce-cli.git
|
|
1067
|
+
cd commerce-cli
|
|
1078
1068
|
|
|
1079
1069
|
# 安装依赖
|
|
1080
1070
|
npm install
|
|
@@ -1117,14 +1107,14 @@ git push --follow-tags # 推送触发自动发布
|
|
|
1117
1107
|
- [Optima Store](https://go.optima.shop) - 买家购物前端
|
|
1118
1108
|
- [Claude Code](https://claude.com/claude-code)
|
|
1119
1109
|
- [NPM Package](https://www.npmjs.com/package/@optima-chat/commerce-cli)
|
|
1120
|
-
- [GitHub Issues](https://github.com/Optima-Chat/
|
|
1110
|
+
- [GitHub Issues](https://github.com/Optima-Chat/commerce-cli/issues)
|
|
1121
1111
|
|
|
1122
1112
|
## 💬 支持
|
|
1123
1113
|
|
|
1124
1114
|
遇到问题?
|
|
1125
1115
|
|
|
1126
|
-
- 提交 [Issue](https://github.com/Optima-Chat/
|
|
1127
|
-
-
|
|
1116
|
+
- 提交 [Issue](https://github.com/Optima-Chat/commerce-cli/issues)
|
|
1117
|
+
- 查看完整命令列表:`commerce --help`
|
|
1128
1118
|
- 联系团队:support@optima.chat
|
|
1129
1119
|
|
|
1130
1120
|
---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoLpC,eAAO,MAAM,WAAW,SAAM,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -3,95 +3,150 @@ import chalk from 'chalk';
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
|
+
import inquirer from 'inquirer';
|
|
7
|
+
import { addEnhancedHelp } from '../utils/helpText.js';
|
|
8
|
+
import { isInteractiveEnvironment } from '../utils/interactive.js';
|
|
9
|
+
import { ValidationError, handleError } from '../utils/error.js';
|
|
6
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
11
|
const __dirname = path.dirname(__filename);
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const PROJECT_SKILLS_DIR = path.join(process.cwd(), '.claude', 'skills');
|
|
13
|
+
const TEMPLATE_SKILLS_DIR = path.join(__dirname, '..', '..', '.claude', 'skills');
|
|
14
|
+
// 可用的场景定义
|
|
15
|
+
const AVAILABLE_SKILLS = [
|
|
16
|
+
{ id: 'product', name: 'Product Management', description: '商品管理 - 商品上架、编辑、SKU管理' },
|
|
17
|
+
{ id: 'order', name: 'Order Fulfillment', description: '订单履行 - 订单处理、发货、售后' },
|
|
18
|
+
{ id: 'inventory', name: 'Inventory Management', description: '库存管理 - 库存监控、补货、预留' },
|
|
19
|
+
{ id: 'storefront', name: 'Storefront Configuration', description: '店铺配置 - 首页设置、集合管理' },
|
|
20
|
+
{ id: 'i18n', name: 'Internationalization', description: '国际化 - 多语言翻译管理' },
|
|
21
|
+
];
|
|
22
|
+
const cmd = new Command('init')
|
|
23
|
+
.description('Enable Commerce CLI Skills in current project')
|
|
24
|
+
.option('--skills <skills>', 'Comma-separated skill IDs (product,order,inventory,storefront,i18n)')
|
|
25
|
+
.action(async (options) => {
|
|
14
26
|
try {
|
|
15
|
-
|
|
16
|
-
const match = templateContent.match(new RegExp(`${OPTIMA_START_MARKER}[\\s\\S]*?${OPTIMA_END_MARKER}`));
|
|
17
|
-
if (match) {
|
|
18
|
-
return match[0];
|
|
19
|
-
}
|
|
27
|
+
await initializeSkills(options);
|
|
20
28
|
}
|
|
21
29
|
catch (error) {
|
|
22
|
-
|
|
30
|
+
handleError(error);
|
|
23
31
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
});
|
|
33
|
+
async function initializeSkills(options) {
|
|
34
|
+
let selectedSkills = [];
|
|
35
|
+
// 如果指定了 --skills 参数
|
|
36
|
+
if (options.skills) {
|
|
37
|
+
selectedSkills = options.skills.split(',').map(s => s.trim());
|
|
38
|
+
// 验证 skill IDs
|
|
39
|
+
const invalidSkills = selectedSkills.filter(id => !AVAILABLE_SKILLS.some(skill => skill.id === id));
|
|
40
|
+
if (invalidSkills.length > 0) {
|
|
41
|
+
throw new ValidationError(`无效的 skill IDs: ${invalidSkills.join(', ')}\n可用的 skills: ${AVAILABLE_SKILLS.map(s => s.id).join(', ')}`, 'skills');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 交互式选择
|
|
45
|
+
else if (isInteractiveEnvironment()) {
|
|
46
|
+
const answer = await inquirer.prompt([
|
|
47
|
+
{
|
|
48
|
+
type: 'checkbox',
|
|
49
|
+
name: 'skills',
|
|
50
|
+
message: '选择要启用的场景(可多选):',
|
|
51
|
+
choices: AVAILABLE_SKILLS.map(skill => ({
|
|
52
|
+
name: `${skill.name} - ${skill.description}`,
|
|
53
|
+
value: skill.id,
|
|
54
|
+
checked: skill.id === 'product' || skill.id === 'order', // 默认选中常用场景
|
|
55
|
+
})),
|
|
56
|
+
validate: (answer) => {
|
|
57
|
+
if (answer.length === 0) {
|
|
58
|
+
return '请至少选择一个场景';
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
selectedSkills = answer.skills;
|
|
65
|
+
}
|
|
66
|
+
// 非交互环境且未指定 --skills
|
|
67
|
+
else {
|
|
68
|
+
throw new ValidationError('非交互环境需要使用 --skills 参数指定要启用的场景\n示例: commerce init --skills product,order', 'skills');
|
|
69
|
+
}
|
|
70
|
+
// 确保 .claude/skills 目录存在
|
|
71
|
+
if (!fs.existsSync(PROJECT_SKILLS_DIR)) {
|
|
72
|
+
fs.mkdirSync(PROJECT_SKILLS_DIR, { recursive: true });
|
|
73
|
+
}
|
|
74
|
+
// 复制选中的 Skills
|
|
75
|
+
const installedSkills = [];
|
|
76
|
+
const updatedSkills = [];
|
|
77
|
+
for (const skillId of selectedSkills) {
|
|
78
|
+
const skillDirName = `commerce-${skillId}`;
|
|
79
|
+
const projectSkillDir = path.join(PROJECT_SKILLS_DIR, skillDirName);
|
|
80
|
+
const projectSkillFile = path.join(projectSkillDir, 'SKILL.md');
|
|
81
|
+
const templateSkillDir = path.join(TEMPLATE_SKILLS_DIR, skillDirName);
|
|
82
|
+
const templateSkillFile = path.join(templateSkillDir, 'SKILL.md');
|
|
83
|
+
// 检查模板是否存在
|
|
84
|
+
if (!fs.existsSync(templateSkillFile)) {
|
|
85
|
+
console.log(chalk.yellow(`⚠️ 找不到 ${skillId} 的模板文件,跳过`));
|
|
86
|
+
continue;
|
|
41
87
|
}
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (fs.existsSync(PROJECT_CLAUDE_MD)) {
|
|
46
|
-
existingContent = fs.readFileSync(PROJECT_CLAUDE_MD, 'utf-8');
|
|
47
|
-
hasExisting = existingContent.includes(OPTIMA_START_MARKER);
|
|
88
|
+
// 创建目录
|
|
89
|
+
if (!fs.existsSync(projectSkillDir)) {
|
|
90
|
+
fs.mkdirSync(projectSkillDir, { recursive: true });
|
|
48
91
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
existingContent = existingContent.replace(regex, '');
|
|
59
|
-
}
|
|
60
|
-
existingContent = existingContent.replace(/\n{3,}/g, '\n\n').trim();
|
|
92
|
+
const isUpdate = fs.existsSync(projectSkillFile);
|
|
93
|
+
// 复制 Skill 文件
|
|
94
|
+
const skillContent = fs.readFileSync(templateSkillFile, 'utf-8');
|
|
95
|
+
fs.writeFileSync(projectSkillFile, skillContent, 'utf-8');
|
|
96
|
+
if (isUpdate) {
|
|
97
|
+
updatedSkills.push(skillDirName);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
installedSkills.push(skillDirName);
|
|
61
101
|
}
|
|
62
|
-
// 写入新配置
|
|
63
|
-
const optimaSection = getOptimaSection();
|
|
64
|
-
const newContent = existingContent.trim() + '\n\n' + optimaSection.trim() + '\n';
|
|
65
|
-
fs.writeFileSync(PROJECT_CLAUDE_MD, newContent, 'utf-8');
|
|
66
|
-
console.log(chalk.green('\n✓ Optima CLI 已在当前项目中启用'));
|
|
67
|
-
console.log(chalk.gray(` 配置文件: ${PROJECT_CLAUDE_MD}`));
|
|
68
|
-
console.log(chalk.gray('\n 现在可以使用 optima auth login 登录了!\n'));
|
|
69
102
|
}
|
|
70
|
-
|
|
71
|
-
|
|
103
|
+
// 输出结果
|
|
104
|
+
console.log(chalk.green('\n✓ Commerce CLI Skills 配置完成\n'));
|
|
105
|
+
if (installedSkills.length > 0) {
|
|
106
|
+
console.log(chalk.cyan(`已启用 ${installedSkills.length} 个场景:`));
|
|
107
|
+
installedSkills.forEach(skill => console.log(chalk.gray(` - ${skill}`)));
|
|
72
108
|
}
|
|
73
|
-
|
|
109
|
+
if (updatedSkills.length > 0) {
|
|
110
|
+
console.log(chalk.cyan(`\n已更新 ${updatedSkills.length} 个场景:`));
|
|
111
|
+
updatedSkills.forEach(skill => console.log(chalk.gray(` - ${skill}`)));
|
|
112
|
+
}
|
|
113
|
+
console.log(chalk.gray(`\n Skills 目录: ${PROJECT_SKILLS_DIR}`));
|
|
114
|
+
console.log(chalk.gray('\n 现在可以用自然语言管理店铺了!'));
|
|
115
|
+
console.log(chalk.gray(' 例如:"帮我创建一个商品" 或 "查看今天的订单"\n'));
|
|
116
|
+
}
|
|
74
117
|
addEnhancedHelp(cmd, {
|
|
75
118
|
examples: [
|
|
76
|
-
'#
|
|
119
|
+
'# Interactive mode - select skills to enable',
|
|
77
120
|
'$ commerce init',
|
|
78
121
|
'',
|
|
79
|
-
'#
|
|
80
|
-
'
|
|
122
|
+
'# Specify skills directly (non-interactive)',
|
|
123
|
+
'$ commerce init --skills product,order',
|
|
124
|
+
'',
|
|
125
|
+
'# Enable all skills',
|
|
126
|
+
'$ commerce init --skills product,order,inventory,storefront,i18n',
|
|
127
|
+
'',
|
|
128
|
+
'Available skills:',
|
|
129
|
+
' product - Product management (create, update, variants, images)',
|
|
130
|
+
' order - Order fulfillment (shipping, cancellation, refunds)',
|
|
131
|
+
' inventory - Inventory management (stock monitoring, replenishment)',
|
|
132
|
+
' storefront - Storefront configuration (homepage, collections)',
|
|
133
|
+
' i18n - Internationalization (multilingual translations)',
|
|
81
134
|
],
|
|
82
135
|
output: {
|
|
83
|
-
description: 'Creates
|
|
84
|
-
example:
|
|
136
|
+
description: 'Creates Claude Skills in .claude/skills/ directory',
|
|
137
|
+
example: `已启用 2 个场景:
|
|
138
|
+
- commerce-product
|
|
139
|
+
- commerce-order`
|
|
85
140
|
},
|
|
86
141
|
relatedCommands: [
|
|
87
|
-
{ command: 'cleanup', description: 'Remove Optima config from Claude' },
|
|
88
142
|
{ command: 'auth login', description: 'Login after initialization' },
|
|
89
143
|
],
|
|
90
144
|
notes: [
|
|
91
|
-
'Creates .claude
|
|
92
|
-
'
|
|
93
|
-
'
|
|
94
|
-
'
|
|
145
|
+
'Creates .claude/skills/<skill-name> directories',
|
|
146
|
+
'Each skill contains a SKILL.md file',
|
|
147
|
+
'Claude auto-discovers skills based on user intent',
|
|
148
|
+
'You can enable multiple skills for different use cases',
|
|
149
|
+
'Project-level skills (not global)',
|
|
95
150
|
]
|
|
96
151
|
});
|
|
97
152
|
export const initCommand = cmd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,6 @@ import { readFileSync } from 'fs';
|
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
import { dirname, join } from 'path';
|
|
7
7
|
import { authCommand } from './commands/auth/index.js';
|
|
8
|
-
import { cleanupCommand } from './commands/cleanup.js';
|
|
9
8
|
import { initCommand } from './commands/init.js';
|
|
10
9
|
import { productCommand } from './commands/product/index.js';
|
|
11
10
|
import { orderCommand } from './commands/order/index.js';
|
|
@@ -89,7 +88,6 @@ Documentation:
|
|
|
89
88
|
`);
|
|
90
89
|
// 注册命令
|
|
91
90
|
program.addCommand(authCommand);
|
|
92
|
-
program.addCommand(cleanupCommand);
|
|
93
91
|
program.addCommand(initCommand);
|
|
94
92
|
program.addCommand(productCommand);
|
|
95
93
|
program.addCommand(variantCommand);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|