@sokeai/cli 1.0.23 → 1.0.25
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/README.md +450 -57
- package/package.json +1 -1
- package/scripts/local-test.sh +59 -12
- package/scripts/push.sh +0 -10
package/README.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
`soke-cli` 是授客AI官方提供的命令行工具,旨在帮助开发者和系统管理员更便捷地通过命令行与授客AI开放平台进行交互。该工具使用 Go 语言开发,支持多平台,并提供了 NPM 包的安装方式。
|
|
4
4
|
|
|
5
|
+
## 目录
|
|
6
|
+
|
|
7
|
+
- [核心能力](#核心能力)
|
|
8
|
+
- [安装方法](#安装方法)
|
|
9
|
+
- [快速开始](#快速开始)
|
|
10
|
+
- [开发指南](#开发指南)
|
|
11
|
+
- [从接口封装到发布的完整流程](#从接口封装到发布的完整流程)
|
|
12
|
+
- [本地开发测试](#本地开发测试)
|
|
13
|
+
- [项目结构](#项目结构)
|
|
14
|
+
- [相关文档](#相关文档)
|
|
15
|
+
|
|
5
16
|
## 核心能力
|
|
6
17
|
|
|
7
18
|
`soke-cli` 提供了以下核心能力:
|
|
@@ -25,12 +36,16 @@
|
|
|
25
36
|
- **培训 (training)**: 线下培训查询与分配。
|
|
26
37
|
- **新闻公告 (news)**: 资讯列表与详情。
|
|
27
38
|
|
|
39
|
+
4. **AI Agent Skills**
|
|
40
|
+
- 提供 AI Agent 技能(Skills),使 AI 助手能够自动发现和调用 CLI 功能。
|
|
41
|
+
- 支持自然语言交互,无需记忆复杂的命令参数。
|
|
42
|
+
|
|
28
43
|
## 安装方法
|
|
29
44
|
|
|
30
45
|
### 方式一:通过 NPM 安装 (推荐)
|
|
31
46
|
如果你本地已安装 Node.js,可以直接使用 npm 全局安装:
|
|
32
47
|
```bash
|
|
33
|
-
npm install -g @sokeai/cli
|
|
48
|
+
npm install -g @sokeai/cli@latest
|
|
34
49
|
```
|
|
35
50
|
|
|
36
51
|
### 方式二:通过源码编译安装 (需要 Go 环境)
|
|
@@ -149,20 +164,377 @@ soke-cli api GET /users/me
|
|
|
149
164
|
soke-cli api POST /some/endpoint --data '{"key": "value"}'
|
|
150
165
|
```
|
|
151
166
|
|
|
152
|
-
##
|
|
167
|
+
## 开发指南
|
|
168
|
+
|
|
169
|
+
### 从接口封装到发布的完整流程
|
|
170
|
+
|
|
171
|
+
#### 1️⃣ 接口封装为 CLI 命令
|
|
172
|
+
|
|
173
|
+
**步骤 1: 在 shortcuts 目录下定义接口元数据**
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 创建新模块目录
|
|
177
|
+
mkdir -p shortcuts/your-module
|
|
178
|
+
|
|
179
|
+
# 创建命令定义文件
|
|
180
|
+
touch shortcuts/your-module/list_items.go
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**示例:定义一个查询列表的命令**
|
|
184
|
+
|
|
185
|
+
```go
|
|
186
|
+
// shortcuts/your-module/list_items.go
|
|
187
|
+
package yourmodule
|
|
188
|
+
|
|
189
|
+
import "soke-cli/internal/client"
|
|
190
|
+
|
|
191
|
+
// ListItemsShortcut 定义查询列表命令
|
|
192
|
+
func ListItemsShortcut() client.Shortcut {
|
|
193
|
+
return client.Shortcut{
|
|
194
|
+
Name: "list-items", // 命令名称
|
|
195
|
+
Description: "查询项目列表", // 命令描述
|
|
196
|
+
Method: "GET", // HTTP 方法
|
|
197
|
+
Path: "/api/v1/items", // API 路径
|
|
198
|
+
Params: []client.Param{ // 参数定义
|
|
199
|
+
{
|
|
200
|
+
Name: "page",
|
|
201
|
+
Type: "int",
|
|
202
|
+
Description: "页码",
|
|
203
|
+
Required: false,
|
|
204
|
+
Default: "1",
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
Name: "page_size",
|
|
208
|
+
Type: "int",
|
|
209
|
+
Description: "每页数量",
|
|
210
|
+
Required: false,
|
|
211
|
+
Default: "10",
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
Name: "keyword",
|
|
215
|
+
Type: "string",
|
|
216
|
+
Description: "搜索关键词",
|
|
217
|
+
Required: false,
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**步骤 2: 注册命令到模块**
|
|
225
|
+
|
|
226
|
+
```go
|
|
227
|
+
// shortcuts/your-module/shortcuts.go
|
|
228
|
+
package yourmodule
|
|
229
|
+
|
|
230
|
+
import "soke-cli/internal/client"
|
|
231
|
+
|
|
232
|
+
// Shortcuts 返回该模块的所有快捷命令
|
|
233
|
+
func Shortcuts() []client.Shortcut {
|
|
234
|
+
return []client.Shortcut{
|
|
235
|
+
ListItemsShortcut(),
|
|
236
|
+
// 添加更多命令...
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**步骤 3: 在 cmd 层注册模块**
|
|
242
|
+
|
|
243
|
+
```go
|
|
244
|
+
// cmd/your_module/your_module.go
|
|
245
|
+
package yourmodule
|
|
246
|
+
|
|
247
|
+
import (
|
|
248
|
+
"soke-cli/internal/client"
|
|
249
|
+
yourmodule "soke-cli/shortcuts/your-module"
|
|
250
|
+
"github.com/spf13/cobra"
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
// YourModuleCmd 模块根命令
|
|
254
|
+
var YourModuleCmd = &cobra.Command{
|
|
255
|
+
Use: "your-module",
|
|
256
|
+
Short: "你的模块管理",
|
|
257
|
+
Long: "管理你的模块相关功能",
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
func init() {
|
|
261
|
+
// 自动注册所有快捷命令
|
|
262
|
+
client.RegisterShortcuts(YourModuleCmd, yourmodule.Shortcuts())
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**步骤 4: 在根命令中注册模块**
|
|
267
|
+
|
|
268
|
+
```go
|
|
269
|
+
// cmd/root.go
|
|
270
|
+
import (
|
|
271
|
+
yourmodule "soke-cli/cmd/your_module"
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
func init() {
|
|
275
|
+
// 注册模块命令
|
|
276
|
+
rootCmd.AddCommand(yourmodule.YourModuleCmd)
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
#### 2️⃣ 创建 AI Agent Skill
|
|
281
|
+
|
|
282
|
+
**步骤 1: 创建 Skill 目录和文档**
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
# 创建 Skill 目录
|
|
286
|
+
mkdir -p skills/your-module
|
|
287
|
+
|
|
288
|
+
# 创建 Skill 定义文件
|
|
289
|
+
touch skills/your-module/SKILL.md
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**步骤 2: 编写 Skill 文档**
|
|
293
|
+
|
|
294
|
+
```markdown
|
|
295
|
+
<!-- skills/your-module/SKILL.md -->
|
|
296
|
+
---
|
|
297
|
+
name: your-module
|
|
298
|
+
description: 你的模块管理:查询项目列表、创建项目、更新项目等
|
|
299
|
+
trigger: 当用户需要查询项目、管理项目时使用
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
# 你的模块管理 Skill
|
|
303
|
+
|
|
304
|
+
## 功能说明
|
|
305
|
+
|
|
306
|
+
提供项目管理相关功能,包括:
|
|
307
|
+
- 查询项目列表
|
|
308
|
+
- 创建新项目
|
|
309
|
+
- 更新项目信息
|
|
310
|
+
- 删除项目
|
|
311
|
+
|
|
312
|
+
## 使用场景
|
|
313
|
+
|
|
314
|
+
- 用户询问:"查询所有项目"
|
|
315
|
+
- 用户询问:"创建一个新项目"
|
|
316
|
+
- 用户询问:"更新项目信息"
|
|
317
|
+
|
|
318
|
+
## 可用命令
|
|
319
|
+
|
|
320
|
+
### 查询项目列表
|
|
321
|
+
|
|
322
|
+
\`\`\`bash
|
|
323
|
+
soke-cli your-module +list-items [选项]
|
|
324
|
+
\`\`\`
|
|
325
|
+
|
|
326
|
+
**参数说明:**
|
|
327
|
+
- `--page <number>`: 页码(可选,默认:1)
|
|
328
|
+
- `--page-size <number>`: 每页数量(可选,默认:10)
|
|
329
|
+
- `--keyword <string>`: 搜索关键词(可选)
|
|
330
|
+
|
|
331
|
+
**使用示例:**
|
|
332
|
+
\`\`\`bash
|
|
333
|
+
# 查询第一页
|
|
334
|
+
soke-cli your-module +list-items
|
|
335
|
+
|
|
336
|
+
# 搜索包含"测试"的项目
|
|
337
|
+
soke-cli your-module +list-items --keyword "测试"
|
|
338
|
+
\`\`\`
|
|
339
|
+
|
|
340
|
+
## 交互流程
|
|
341
|
+
|
|
342
|
+
1. 识别用户意图(查询/创建/更新/删除)
|
|
343
|
+
2. 提示用户提供必要参数
|
|
344
|
+
3. 执行对应的 CLI 命令
|
|
345
|
+
4. 解析并展示结果
|
|
346
|
+
|
|
347
|
+
## 错误处理
|
|
348
|
+
|
|
349
|
+
- 如果用户未登录,提示执行 `soke-cli auth login`
|
|
350
|
+
- 如果参数缺失,提示用户补充必要参数
|
|
351
|
+
- 如果 API 返回错误,展示友好的错误信息
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
**步骤 3: 更新 skills/README.md**
|
|
355
|
+
|
|
356
|
+
在 `skills/README.md` 中添加新 Skill 的说明。
|
|
357
|
+
|
|
358
|
+
#### 3️⃣ 本地测试 Skill
|
|
359
|
+
|
|
360
|
+
**方法一:一键测试脚本(推荐)**
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# 1. 编译、安装到全局、运行测试
|
|
364
|
+
bash ./scripts/local-test.sh
|
|
365
|
+
# 提示时输入 'y' 更新全局安装
|
|
366
|
+
|
|
367
|
+
# 2. 链接 Skills 到 AI Agent
|
|
368
|
+
bash ./scripts/link-skills.sh
|
|
369
|
+
# 选择 'all' 链接到所有目录
|
|
370
|
+
|
|
371
|
+
# 3. 在 AI Agent 中测试
|
|
372
|
+
# 打开 Claude Code,输入:"查询所有项目"
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**方法二:手动测试**
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
# 1. 编译项目
|
|
379
|
+
go build -o soke-cli main.go
|
|
380
|
+
|
|
381
|
+
# 2. 测试命令是否正常工作
|
|
382
|
+
./soke-cli your-module +list-items --help
|
|
383
|
+
|
|
384
|
+
# 3. 安装到全局
|
|
385
|
+
sudo cp soke-cli /usr/local/bin/
|
|
386
|
+
|
|
387
|
+
# 4. 链接 Skill 到 Claude
|
|
388
|
+
mkdir -p ~/.claude/skills/your-module
|
|
389
|
+
cp skills/your-module/SKILL.md ~/.claude/skills/your-module/
|
|
390
|
+
|
|
391
|
+
# 5. 在 Claude Code 中测试
|
|
392
|
+
# 输入:"查询所有项目"
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**测试检查清单:**
|
|
396
|
+
- [ ] CLI 命令能正常执行
|
|
397
|
+
- [ ] 参数验证正确
|
|
398
|
+
- [ ] API 调用成功
|
|
399
|
+
- [ ] 输出格式正确
|
|
400
|
+
- [ ] AI Agent 能识别意图
|
|
401
|
+
- [ ] AI Agent 能正确调用命令
|
|
402
|
+
- [ ] 错误处理友好
|
|
403
|
+
|
|
404
|
+
#### 4️⃣ 用 Go 编译二进制文件
|
|
405
|
+
|
|
406
|
+
**编译单平台二进制**
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
# macOS (Intel)
|
|
410
|
+
GOOS=darwin GOARCH=amd64 go build -o bin/soke-cli-darwin-amd64 main.go
|
|
411
|
+
|
|
412
|
+
# macOS (Apple Silicon)
|
|
413
|
+
GOOS=darwin GOARCH=arm64 go build -o bin/soke-cli-darwin-arm64 main.go
|
|
414
|
+
|
|
415
|
+
# Linux
|
|
416
|
+
GOOS=linux GOARCH=amd64 go build -o bin/soke-cli-linux-amd64 main.go
|
|
417
|
+
|
|
418
|
+
# Windows
|
|
419
|
+
GOOS=windows GOARCH=amd64 go build -o bin/soke-cli-windows-amd64.exe main.go
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**一键编译所有平台**
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
# 使用编译脚本
|
|
426
|
+
bash ./scripts/build-binaries.sh
|
|
427
|
+
|
|
428
|
+
# 编译结果在 bin/ 目录下
|
|
429
|
+
ls -lh bin/
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
**编译优化选项**
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
# 减小二进制文件大小
|
|
436
|
+
go build -ldflags="-s -w" -o soke-cli main.go
|
|
437
|
+
|
|
438
|
+
# 添加版本信息
|
|
439
|
+
VERSION=$(git describe --tags --always)
|
|
440
|
+
go build -ldflags="-X main.Version=$VERSION" -o soke-cli main.go
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
#### 5️⃣ 发布到 NPM 和 GitHub
|
|
444
|
+
|
|
445
|
+
**准备工作**
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
# 1. 确保已登录 NPM
|
|
449
|
+
npm login
|
|
450
|
+
|
|
451
|
+
# 2. 确保已登录 GitHub CLI
|
|
452
|
+
gh auth login
|
|
453
|
+
|
|
454
|
+
# 3. 确保代码已提交
|
|
455
|
+
git add .
|
|
456
|
+
git commit -m "feat: 添加新模块"
|
|
457
|
+
git push
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
**发布流程**
|
|
461
|
+
|
|
462
|
+
**方法一:一键发布(推荐)**
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
# 1. 更新版本号
|
|
466
|
+
npm version patch # 1.0.0 -> 1.0.1
|
|
467
|
+
# 或
|
|
468
|
+
npm version minor # 1.0.0 -> 1.1.0
|
|
469
|
+
# 或
|
|
470
|
+
npm version major # 1.0.0 -> 2.0.0
|
|
471
|
+
|
|
472
|
+
# 2. 执行一键发布脚本
|
|
473
|
+
bash ./scripts/release.sh
|
|
474
|
+
|
|
475
|
+
# 脚本会自动完成:
|
|
476
|
+
# - 编译所有平台二进制文件
|
|
477
|
+
# - 创建 Git 标签
|
|
478
|
+
# - 推送标签到 GitHub
|
|
479
|
+
# - 创建 GitHub Release 并上传二进制文件
|
|
480
|
+
# - 发布到 NPM
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
**方法二:手动发布**
|
|
153
484
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
485
|
+
```bash
|
|
486
|
+
# 1. 更新版本号
|
|
487
|
+
npm version patch
|
|
488
|
+
|
|
489
|
+
# 2. 编译所有平台
|
|
490
|
+
bash ./scripts/build-binaries.sh
|
|
491
|
+
|
|
492
|
+
# 3. 创建并推送标签
|
|
493
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
494
|
+
git tag v$VERSION
|
|
495
|
+
git push origin v$VERSION
|
|
496
|
+
|
|
497
|
+
# 4. 创建 GitHub Release
|
|
498
|
+
gh release create v$VERSION \
|
|
499
|
+
bin/soke-cli-darwin-amd64 \
|
|
500
|
+
bin/soke-cli-darwin-arm64 \
|
|
501
|
+
bin/soke-cli-linux-amd64 \
|
|
502
|
+
bin/soke-cli-windows-amd64.exe \
|
|
503
|
+
--title "v$VERSION" \
|
|
504
|
+
--notes "Release v$VERSION"
|
|
505
|
+
|
|
506
|
+
# 5. 发布到 NPM
|
|
507
|
+
npm publish --access public
|
|
508
|
+
|
|
509
|
+
# 6. 验证发布
|
|
510
|
+
npm view @sokeai/cli version
|
|
511
|
+
```
|
|
159
512
|
|
|
160
|
-
|
|
513
|
+
**发布后验证**
|
|
161
514
|
|
|
162
|
-
|
|
515
|
+
```bash
|
|
516
|
+
# 1. 测试 NPM 安装
|
|
517
|
+
npm install -g @sokeai/cli@latest
|
|
518
|
+
|
|
519
|
+
# 2. 验证版本
|
|
520
|
+
soke-cli --version
|
|
521
|
+
|
|
522
|
+
# 3. 测试命令
|
|
523
|
+
soke-cli your-module +list-items --help
|
|
524
|
+
|
|
525
|
+
# 4. 测试 Skills 安装
|
|
526
|
+
npx skills add liuchenlong1111/soke-cli -y -g
|
|
527
|
+
|
|
528
|
+
# 5. 在 AI Agent 中测试
|
|
529
|
+
# 打开 Claude Code,输入:"查询所有项目"
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
### 本地开发测试
|
|
533
|
+
|
|
534
|
+
**🚀 快速测试流程(推荐)**
|
|
163
535
|
|
|
164
536
|
```bash
|
|
165
|
-
# 1.
|
|
537
|
+
# 1. 一键测试:编译、安装到全局、运行测试(一条命令)
|
|
166
538
|
bash ./scripts/local-test.sh
|
|
167
539
|
# 提示时输入 'y' 更新全局安装
|
|
168
540
|
|
|
@@ -176,51 +548,72 @@ bash ./scripts/link-skills.sh
|
|
|
176
548
|
|
|
177
549
|
**📖 详细指南:** [docs/LOCAL_TESTING.md](docs/LOCAL_TESTING.md)
|
|
178
550
|
|
|
179
|
-
|
|
551
|
+
**完整开发流程**
|
|
552
|
+
|
|
553
|
+
```bash
|
|
554
|
+
# 1. 修改代码后,运行本地测试(会提示是否更新全局安装)
|
|
555
|
+
bash ./scripts/local-test.sh
|
|
556
|
+
|
|
557
|
+
# 2. 运行完整 E2E 测试
|
|
558
|
+
bash ./scripts/e2e-test.sh
|
|
559
|
+
|
|
560
|
+
# 3. 测试 Skills(需要先更新全局安装)
|
|
561
|
+
npx skills add liuchenlong1111/soke-cli -y -g
|
|
562
|
+
|
|
563
|
+
# 4. 在 AI Agent 中测试自然语言交互
|
|
564
|
+
# 例如:"查询张三的学习档案"
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
**运行完整 E2E 测试**
|
|
568
|
+
|
|
569
|
+
```bash
|
|
570
|
+
# 测试所有模块
|
|
571
|
+
bash ./scripts/e2e-test.sh
|
|
572
|
+
|
|
573
|
+
# 测试特定模块
|
|
574
|
+
bash ./scripts/e2e-test.sh learning-profile
|
|
575
|
+
bash ./scripts/e2e-test.sh contact
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
## 项目结构
|
|
579
|
+
|
|
580
|
+
```
|
|
581
|
+
soke-cli/
|
|
582
|
+
├── cmd/ # CLI 子命令定义(按业务模块划分)
|
|
583
|
+
│ ├── root.go # 根命令和命令注册
|
|
584
|
+
│ ├── auth/ # 认证相关命令
|
|
585
|
+
│ ├── config/ # 配置管理命令
|
|
586
|
+
│ ├── api/ # 通用 API 调用命令
|
|
587
|
+
│ └── your_module/ # 你的业务模块命令
|
|
588
|
+
├── internal/ # 核心逻辑(不对外暴露)
|
|
589
|
+
│ ├── auth/ # 认证逻辑(OAuth Device Flow)
|
|
590
|
+
│ ├── client/ # API 客户端封装
|
|
591
|
+
│ ├── core/ # 配置管理
|
|
592
|
+
│ └── output/ # 输出格式化
|
|
593
|
+
├── shortcuts/ # 业务模块快捷命令元数据定义
|
|
594
|
+
│ └── your-module/ # 各模块的 API 路径、参数、默认值等
|
|
595
|
+
├── skills/ # AI Agent Skills 定义
|
|
596
|
+
│ ├── README.md # Skills 使用说明
|
|
597
|
+
│ └── your-module/ # 各模块的 Skill 文档
|
|
598
|
+
│ └── SKILL.md
|
|
599
|
+
├── scripts/ # 构建和发布脚本
|
|
600
|
+
│ ├── install.js # NPM 安装时下载二进制文件
|
|
601
|
+
│ ├── run.js # NPM 运行时入口
|
|
602
|
+
│ ├── build-binaries.sh # 编译所有平台二进制
|
|
603
|
+
│ ├── release.sh # 一键发布脚本
|
|
604
|
+
│ ├── local-test.sh # 本地测试脚本
|
|
605
|
+
│ └── link-skills.sh # 链接 Skills 到 AI Agent
|
|
606
|
+
├── main.go # CLI 主入口
|
|
607
|
+
├── go.mod # Go 依赖管理
|
|
608
|
+
├── package.json # NPM 包配置
|
|
609
|
+
├── Makefile # 编译和安装脚本
|
|
610
|
+
└── README.md # 项目说明文档
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
## 相关文档
|
|
180
614
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
这个脚本会:
|
|
188
|
-
- 编译项目
|
|
189
|
-
- 检查本地版本功能
|
|
190
|
-
- 检测全局安装状态
|
|
191
|
-
- 提示是否需要更新全局安装(会自动备份)
|
|
192
|
-
- 运行功能测试验证
|
|
193
|
-
|
|
194
|
-
2. **运行完整 E2E 测试**
|
|
195
|
-
```bash
|
|
196
|
-
# 测试所有模块
|
|
197
|
-
bash ./scripts/e2e-test.sh
|
|
198
|
-
|
|
199
|
-
# 测试特定模块
|
|
200
|
-
bash ./scripts/e2e-test.sh learning-profile
|
|
201
|
-
bash ./scripts/e2e-test.sh contact
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
3. **依赖管理**
|
|
205
|
-
|
|
206
|
-
项目使用 Go Modules,可以运行 `go mod tidy` 整理依赖。
|
|
207
|
-
|
|
208
|
-
4. **添加新命令**
|
|
209
|
-
- 业务接口建议在 `shortcuts/` 目录下添加对应的结构定义。
|
|
210
|
-
- 基础功能可在 `cmd/` 下新建对应包并在 `cmd/root.go` 中注册。
|
|
211
|
-
- 为新模块创建 Skill 文档:`skills/<module-name>/SKILL.md`
|
|
212
|
-
|
|
213
|
-
5. **完整开发流程**
|
|
214
|
-
```bash
|
|
215
|
-
# 1. 修改代码后,运行本地测试(会提示是否更新全局安装)
|
|
216
|
-
bash ./scripts/local-test.sh
|
|
217
|
-
|
|
218
|
-
# 2. 运行完整 E2E 测试
|
|
219
|
-
bash ./scripts/e2e-test.sh
|
|
220
|
-
|
|
221
|
-
# 3. 测试 Skills(需要先更新全局安装)
|
|
222
|
-
npx skills add liuchenlong1111/soke-cli -y -g
|
|
223
|
-
|
|
224
|
-
# 4. 在 AI Agent 中测试自然语言交互
|
|
225
|
-
# 例如:"查询张三的学习档案"
|
|
226
|
-
```
|
|
615
|
+
- **[QUICKSTART.md](QUICKSTART.md)** - 快速开始指南
|
|
616
|
+
- **[CLAUDE.md](CLAUDE.md)** - 项目架构和开发规范
|
|
617
|
+
- **[docs/LOCAL_TESTING.md](docs/LOCAL_TESTING.md)** - 本地测试详细指南
|
|
618
|
+
- **[skills/README.md](skills/README.md)** - AI Agent Skills 使用说明
|
|
619
|
+
- **[npm.md](npm.md)** - NPM 包发布详细文档
|
package/package.json
CHANGED
package/scripts/local-test.sh
CHANGED
|
@@ -107,7 +107,65 @@ else
|
|
|
107
107
|
fi
|
|
108
108
|
echo ""
|
|
109
109
|
|
|
110
|
-
# 步骤
|
|
110
|
+
# 步骤3.5: 分发 Skills 到本地 Agent
|
|
111
|
+
echo -e "${YELLOW}[3.5/4] 分发 Skills 到本地 Agent...${NC}"
|
|
112
|
+
if [ "$SKIP_GLOBAL" = false ]; then
|
|
113
|
+
echo -e " 执行 scripts/install.js 同步 Skills..."
|
|
114
|
+
# 注入特殊环境变量或者直接调用 node 执行
|
|
115
|
+
# 我们只想要触发 syncSkillsToSokeclawWorkspace 和 syncSkillsToWorkclawRegistry
|
|
116
|
+
# 但原 install.js 会尝试下载二进制文件,所以我们新建一个临时脚本或修改调用方式
|
|
117
|
+
|
|
118
|
+
# 为了安全起见,这里直接使用 node 运行一小段脚本引入 install.js 中的逻辑
|
|
119
|
+
cat > ./scripts/sync-skills-local.js << 'EOF'
|
|
120
|
+
const fs = require('fs');
|
|
121
|
+
const path = require('path');
|
|
122
|
+
const installCode = fs.readFileSync(path.join(__dirname, 'install.js'), 'utf8');
|
|
123
|
+
|
|
124
|
+
// 提取需要的函数
|
|
125
|
+
const syncFn1Match = installCode.match(/function syncSkillsToSokeclawWorkspace\(\) \{[\s\S]*?\n\}/);
|
|
126
|
+
const syncFn2Match = installCode.match(/function syncSkillsToWorkclawRegistry\(\) \{[\s\S]*?\n\}/);
|
|
127
|
+
|
|
128
|
+
// 我们更推荐直接利用已经写好的 js 模块(如果它是通过 module.exports 导出的)
|
|
129
|
+
// 但因为 install.js 是直接执行的脚本,我们通过简单的 node 脚本手动拷贝
|
|
130
|
+
const os = require('os');
|
|
131
|
+
function copyDirRecursive(srcDir, destDir) {
|
|
132
|
+
if (!fs.existsSync(srcDir)) return;
|
|
133
|
+
if (!fs.existsSync(destDir)) fs.mkdirSync(destDir, { recursive: true });
|
|
134
|
+
const entries = fs.readdirSync(srcDir, { withFileTypes: true });
|
|
135
|
+
for (const entry of entries) {
|
|
136
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
137
|
+
const destPath = path.join(destDir, entry.name);
|
|
138
|
+
if (entry.isDirectory()) { copyDirRecursive(srcPath, destPath); continue; }
|
|
139
|
+
fs.copyFileSync(srcPath, destPath);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const homeDir = os.homedir();
|
|
144
|
+
const defaultSokeclawDir = path.join(homeDir, '.sokeclaw', 'openai-agents', 'workspaces', 'main', 'skills');
|
|
145
|
+
const packageRoot = path.join(__dirname, '..');
|
|
146
|
+
const packagedSkillsDir = path.join(packageRoot, 'skills');
|
|
147
|
+
|
|
148
|
+
if (fs.existsSync(packagedSkillsDir)) {
|
|
149
|
+
const skillNames = fs.readdirSync(packagedSkillsDir).filter(n => n.startsWith('soke-'));
|
|
150
|
+
if (fs.existsSync(defaultSokeclawDir)) {
|
|
151
|
+
for (const skillName of skillNames) {
|
|
152
|
+
const src = path.join(packagedSkillsDir, skillName);
|
|
153
|
+
const dest = path.join(defaultSokeclawDir, skillName);
|
|
154
|
+
copyDirRecursive(src, dest);
|
|
155
|
+
console.log(` ✓ 同步 ${skillName} 到 ${dest}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
EOF
|
|
160
|
+
node ./scripts/sync-skills-local.js
|
|
161
|
+
rm ./scripts/sync-skills-local.js
|
|
162
|
+
echo -e "${GREEN} ✓ Skills 同步完成${NC}"
|
|
163
|
+
else
|
|
164
|
+
echo -e "${YELLOW} 跳过全局安装,同时跳过 Skills 同步${NC}"
|
|
165
|
+
fi
|
|
166
|
+
echo ""
|
|
167
|
+
|
|
168
|
+
# 步骤4: 运行功能测试
|
|
111
169
|
echo -e "${YELLOW}[4/4] 运行功能测试...${NC}"
|
|
112
170
|
|
|
113
171
|
# 测试本地版本
|
|
@@ -164,15 +222,4 @@ echo ""
|
|
|
164
222
|
echo -e "${GREEN}========================================${NC}"
|
|
165
223
|
echo -e "${GREEN} 本地测试完成! ✓${NC}"
|
|
166
224
|
echo -e "${GREEN}========================================${NC}"
|
|
167
|
-
echo ""
|
|
168
|
-
echo -e "${BLUE}下一步:${NC}"
|
|
169
|
-
if [ "$SKIP_GLOBAL" = true ]; then
|
|
170
|
-
echo -e " ${YELLOW}提示: 未更新全局安装,Skills 可能无法使用新功能${NC}"
|
|
171
|
-
echo -e " ${YELLOW}如需测试 Skills,请重新运行此脚本并选择更新全局安装${NC}"
|
|
172
|
-
echo ""
|
|
173
|
-
fi
|
|
174
|
-
echo -e " 1. 运行完整测试: ${BLUE}bash ./scripts/e2e-test.sh${NC}"
|
|
175
|
-
echo -e " 2. 测试 Skills: ${BLUE}npx skills add liuchenlong1111/soke-cli -y -g${NC}"
|
|
176
|
-
echo -e " 3. 在 AI Agent 中测试: ${BLUE}\"查询张三的学习档案\"${NC}"
|
|
177
|
-
echo ""
|
|
178
225
|
|
package/scripts/push.sh
CHANGED
|
@@ -236,13 +236,3 @@ fi
|
|
|
236
236
|
|
|
237
237
|
echo " - Aliyun (origin): master 分支已更新"
|
|
238
238
|
echo " - GitHub (github): master 和 main 分支已更新"
|
|
239
|
-
|
|
240
|
-
if [[ "$IS_RELEASE" == true ]]; then
|
|
241
|
-
echo ""
|
|
242
|
-
print_highlight "📦 下一步操作:"
|
|
243
|
-
echo " 1. 编译二进制文件: make build"
|
|
244
|
-
echo " 2. 发布到 NPM: npm publish"
|
|
245
|
-
echo " 3. 创建 GitHub Release (可选)"
|
|
246
|
-
fi
|
|
247
|
-
|
|
248
|
-
echo ""
|