aico-cli 0.3.0 → 0.3.1
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.
|
@@ -13,7 +13,7 @@ import { join as join$1 } from 'node:path';
|
|
|
13
13
|
import { join, dirname, basename } from 'pathe';
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
15
|
|
|
16
|
-
const version = "0.3.
|
|
16
|
+
const version = "0.3.1";
|
|
17
17
|
|
|
18
18
|
function displayBanner(subtitle) {
|
|
19
19
|
const defaultSubtitle = "\u4E00\u952E\u914D\u7F6E\u4F60\u7684\u5F00\u53D1\u73AF\u5883";
|
|
@@ -3191,16 +3191,6 @@ async function updateCcr(force = false) {
|
|
|
3191
3191
|
}
|
|
3192
3192
|
console.log(ansis.cyan(`\u5F53\u524D\u7248\u672C: ${currentVersion || ""}`));
|
|
3193
3193
|
console.log(ansis.cyan(`\u6700\u65B0\u7248\u672C: ${latestVersion}`));
|
|
3194
|
-
const { confirm } = await inquirer.prompt({
|
|
3195
|
-
type: "confirm",
|
|
3196
|
-
name: "confirm",
|
|
3197
|
-
message: "\u786E\u8BA4\u66F4\u65B0 CCR\uFF1F",
|
|
3198
|
-
default: true
|
|
3199
|
-
});
|
|
3200
|
-
if (!confirm) {
|
|
3201
|
-
console.log(ansis.gray("\u66F4\u65B0\u5DF2\u8DF3\u8FC7"));
|
|
3202
|
-
return true;
|
|
3203
|
-
}
|
|
3204
3194
|
const updateSpinner = ora("\u6B63\u5728\u66F4\u65B0 CCR...").start();
|
|
3205
3195
|
try {
|
|
3206
3196
|
await execAsync$4("npm update -g @musistudio/claude-code-router");
|
|
@@ -4696,7 +4686,7 @@ const DEFAULT_FILE_COPY_CONFIGS = [
|
|
|
4696
4686
|
destination: join(CLAUDE_DIR, "personality.md"),
|
|
4697
4687
|
type: "file",
|
|
4698
4688
|
options: {
|
|
4699
|
-
mergeStrategy: "
|
|
4689
|
+
mergeStrategy: "merge",
|
|
4700
4690
|
backupBeforeCopy: true,
|
|
4701
4691
|
deleteBeforeCopy: true
|
|
4702
4692
|
}
|
|
@@ -4706,7 +4696,7 @@ const DEFAULT_FILE_COPY_CONFIGS = [
|
|
|
4706
4696
|
destination: join(CLAUDE_DIR, "code.md"),
|
|
4707
4697
|
type: "file",
|
|
4708
4698
|
options: {
|
|
4709
|
-
mergeStrategy: "
|
|
4699
|
+
mergeStrategy: "merge",
|
|
4710
4700
|
backupBeforeCopy: true,
|
|
4711
4701
|
deleteBeforeCopy: true
|
|
4712
4702
|
}
|
|
@@ -4716,7 +4706,7 @@ const DEFAULT_FILE_COPY_CONFIGS = [
|
|
|
4716
4706
|
destination: join(CLAUDE_DIR, "language.md"),
|
|
4717
4707
|
type: "file",
|
|
4718
4708
|
options: {
|
|
4719
|
-
mergeStrategy: "
|
|
4709
|
+
mergeStrategy: "merge",
|
|
4720
4710
|
backupBeforeCopy: true,
|
|
4721
4711
|
deleteBeforeCopy: true
|
|
4722
4712
|
}
|
|
@@ -4798,11 +4788,21 @@ function handleDirectoryCopy(sourcePath, destPath, options) {
|
|
|
4798
4788
|
if (options?.deleteBeforeCopy && destExists) {
|
|
4799
4789
|
removeDir(destPath);
|
|
4800
4790
|
}
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4791
|
+
if (options?.mergeStrategy === "skip-if-exists" && destExists) {
|
|
4792
|
+
return;
|
|
4793
|
+
}
|
|
4794
|
+
if (options?.mergeStrategy === "merge" && destExists) {
|
|
4795
|
+
copyDir(sourcePath, destPath, {
|
|
4796
|
+
overwrite: false,
|
|
4797
|
+
// 不覆盖已存在的文件
|
|
4798
|
+
filter: options?.filter
|
|
4799
|
+
});
|
|
4800
|
+
} else {
|
|
4801
|
+
copyDir(sourcePath, destPath, {
|
|
4802
|
+
overwrite: options?.overwrite ?? true,
|
|
4803
|
+
filter: options?.filter
|
|
4804
|
+
});
|
|
4805
|
+
}
|
|
4806
4806
|
}
|
|
4807
4807
|
function copyClaudeMemoryFiles(lang, rootDir) {
|
|
4808
4808
|
const memorySourceDir = join(rootDir, "templates");
|
package/package.json
CHANGED
|
@@ -313,7 +313,189 @@ ADD COLUMN new_field VARCHAR(100);
|
|
|
313
313
|
4. ⚡ **实施难度**是否在可接受范围内?
|
|
314
314
|
5. 🔄 **依赖关系**是否明确?
|
|
315
315
|
|
|
316
|
-
|
|
316
|
+
**请确认此方案是否可行,确认后我们将进入测试脚本创建阶段。**
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### 阶段五:测试脚本创建与确认
|
|
320
|
+
|
|
321
|
+
在技术方案确认后,自动创建对应的测试脚本以确保质量:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
# 检测项目测试框架并创建测试脚本
|
|
325
|
+
if [ -f "package.json" ]; then
|
|
326
|
+
# 分析package.json识别测试框架
|
|
327
|
+
if grep -q "vitest\|jest\|mocha\|ava\|tape" package.json; then
|
|
328
|
+
echo "📦 检测到现有测试框架,创建对应测试文件..."
|
|
329
|
+
# 根据技术方案创建测试文件
|
|
330
|
+
cat > "test/unit/[功能模块]/[功能模块].test.ts" << 'EOF'
|
|
331
|
+
// 自动生成的测试脚本 - 基于技术方案
|
|
332
|
+
import { describe, it, expect } from 'vitest'
|
|
333
|
+
|
|
334
|
+
// 根据技术方案中的组件/服务编写测试
|
|
335
|
+
describe('[功能模块]', () => {
|
|
336
|
+
it('应该满足基本功能要求', () => {
|
|
337
|
+
// 测试逻辑基于技术方案文档
|
|
338
|
+
expect(true).toBe(true)
|
|
339
|
+
})
|
|
340
|
+
|
|
341
|
+
it('应该处理边界条件', () => {
|
|
342
|
+
// 边界条件测试
|
|
343
|
+
})
|
|
344
|
+
|
|
345
|
+
it('应该集成现有功能', () => {
|
|
346
|
+
// 集成测试
|
|
347
|
+
})
|
|
348
|
+
})
|
|
349
|
+
EOF
|
|
350
|
+
else
|
|
351
|
+
echo "📝 未检测到标准测试框架,创建通用测试脚本..."
|
|
352
|
+
mkdir -p ".aico/scripts/[功能模块]"
|
|
353
|
+
# 创建跨平台测试脚本
|
|
354
|
+
cat > ".aico/scripts/[功能模块]/test-script.sh" << 'EOF'
|
|
355
|
+
#!/usr/bin/env bash
|
|
356
|
+
# 跨平台测试脚本 - 支持 Windows (Git Bash/Cygwin/WSL)、Linux、macOS
|
|
357
|
+
|
|
358
|
+
set -euo pipefail
|
|
359
|
+
|
|
360
|
+
# 检测操作系统
|
|
361
|
+
detect_os() {
|
|
362
|
+
case "$(uname -s)" in
|
|
363
|
+
Darwin*) echo "macOS" ;;
|
|
364
|
+
Linux*) echo "Linux" ;;
|
|
365
|
+
CYGWIN*|MINGW*|MSYS*) echo "Windows" ;;
|
|
366
|
+
*) echo "Unknown" ;;
|
|
367
|
+
esac
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
# 主测试函数
|
|
371
|
+
run_tests() {
|
|
372
|
+
local os="$(detect_os)"
|
|
373
|
+
echo "🚀 运行测试 - 操作系统: $os"
|
|
374
|
+
|
|
375
|
+
# 根据技术方案执行测试逻辑
|
|
376
|
+
echo "✅ 测试1: 验证基本功能"
|
|
377
|
+
# 这里添加具体的测试命令
|
|
378
|
+
|
|
379
|
+
echo "✅ 测试2: 验证边界条件"
|
|
380
|
+
# 边界条件测试
|
|
381
|
+
|
|
382
|
+
echo "✅ 测试3: 验证集成功能"
|
|
383
|
+
# 集成测试
|
|
384
|
+
|
|
385
|
+
echo "🎉 所有测试通过!"
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
# 执行测试
|
|
389
|
+
run_tests "$@"
|
|
390
|
+
EOF
|
|
391
|
+
|
|
392
|
+
# 设置执行权限
|
|
393
|
+
chmod +x ".aico/scripts/[功能模块]/test-script.sh"
|
|
394
|
+
fi
|
|
395
|
+
else
|
|
396
|
+
echo "📝 创建通用测试脚本..."
|
|
397
|
+
mkdir -p ".aico/scripts/[功能模块]"
|
|
398
|
+
cat > ".aico/scripts/[功能模块]/test-script.bat" << 'EOF'
|
|
399
|
+
@echo off
|
|
400
|
+
REM Windows批处理测试脚本
|
|
401
|
+
echo 🚀 运行测试 - Windows平台
|
|
402
|
+
|
|
403
|
+
REM 根据技术方案执行测试逻辑
|
|
404
|
+
echo ✅ 测试1: 验证基本功能
|
|
405
|
+
REM 这里添加具体的测试命令
|
|
406
|
+
|
|
407
|
+
echo ✅ 测试2: 验证边界条件
|
|
408
|
+
REM 边界条件测试
|
|
409
|
+
|
|
410
|
+
echo ✅ 测试3: 验证集成功能
|
|
411
|
+
REM 集成测试
|
|
412
|
+
|
|
413
|
+
echo 🎉 所有测试通过!
|
|
414
|
+
pause
|
|
415
|
+
EOF
|
|
416
|
+
|
|
417
|
+
cat > ".aico/scripts/[功能模块]/test-script.sh" << 'EOF'
|
|
418
|
+
#!/usr/bin/env bash
|
|
419
|
+
# Unix/Linux/macOS测试脚本
|
|
420
|
+
|
|
421
|
+
echo "🚀 运行测试 - Unix平台"
|
|
422
|
+
|
|
423
|
+
# 根据技术方案执行测试逻辑
|
|
424
|
+
echo "✅ 测试1: 验证基本功能"
|
|
425
|
+
# 这里添加具体的测试命令
|
|
426
|
+
|
|
427
|
+
echo "✅ 测试2: 验证边界条件"
|
|
428
|
+
# 边界条件测试
|
|
429
|
+
|
|
430
|
+
echo "✅ 测试3: 验证集成功能"
|
|
431
|
+
# 集成测试
|
|
432
|
+
|
|
433
|
+
echo "🎉 所有测试通过!"
|
|
434
|
+
EOF
|
|
435
|
+
|
|
436
|
+
chmod +x ".aico/scripts/[功能模块]/test-script.sh"
|
|
437
|
+
fi
|
|
438
|
+
|
|
439
|
+
# 生成测试说明文档
|
|
440
|
+
cat > ".aico/scripts/[功能模块]/README.md" << 'EOF'
|
|
441
|
+
# 测试脚本说明
|
|
442
|
+
|
|
443
|
+
## 测试策略
|
|
444
|
+
基于技术方案文档 `.aico/docs/[需求名称]/技术对齐方案文档.md` 创建
|
|
445
|
+
|
|
446
|
+
## 测试覆盖
|
|
447
|
+
- ✅ 基本功能验证
|
|
448
|
+
- ✅ 边界条件测试
|
|
449
|
+
- ✅ 集成功能测试
|
|
450
|
+
|
|
451
|
+
## 运行方式
|
|
452
|
+
|
|
453
|
+
### Windows
|
|
454
|
+
```cmd
|
|
455
|
+
test-script.bat
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### Unix/Linux/macOS
|
|
459
|
+
```bash
|
|
460
|
+
./test-script.sh
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
## 自定义测试
|
|
464
|
+
编辑对应的脚本文件来添加具体的测试逻辑
|
|
465
|
+
EOF
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
**测试确认流程**:
|
|
469
|
+
|
|
470
|
+
```markdown
|
|
471
|
+
## 🧪 测试脚本已创建
|
|
472
|
+
|
|
473
|
+
已根据技术方案自动生成测试脚本,请确认:
|
|
474
|
+
|
|
475
|
+
### 📋 测试文件位置
|
|
476
|
+
- **标准测试框架**: `test/unit/[功能模块]/[功能模块].test.ts`
|
|
477
|
+
- **通用测试脚本**: `.aico/scripts/[功能模块]/test-script.*`
|
|
478
|
+
|
|
479
|
+
### ✅ 需要确认的内容
|
|
480
|
+
1. 🎯 **测试覆盖范围**是否满足需求?
|
|
481
|
+
2. 🔧 **测试环境兼容性**是否合适?
|
|
482
|
+
3. 📊 **测试用例设计**是否合理?
|
|
483
|
+
4. ⚡ **测试执行方式**是否清晰?
|
|
484
|
+
|
|
485
|
+
### 🔄 测试脚本管理
|
|
486
|
+
使用以下命令管理测试脚本:
|
|
487
|
+
```bash
|
|
488
|
+
# 查看测试脚本
|
|
489
|
+
aico test-script list [需求名称]
|
|
490
|
+
|
|
491
|
+
# 运行测试脚本
|
|
492
|
+
aico test-script run [需求名称]
|
|
493
|
+
|
|
494
|
+
# 编辑测试脚本
|
|
495
|
+
aico test-script edit [需求名称]
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
**请确认测试脚本无误,确认后我们将进入开发任务拆分阶段。**
|
|
317
499
|
```
|
|
318
500
|
|
|
319
501
|
严格按照用户确认后才能将上下文交接给下一个智能体的原则执行。
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 测试脚本管理指令 - 查看、运行、编辑跨平台测试脚本
|
|
3
|
+
allowed-tools: Read(.aico/scripts/**), Write(.aico/scripts/**), Bash
|
|
4
|
+
argument-hint: <操作> <需求名称> [模块名]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 用法
|
|
8
|
+
|
|
9
|
+
`/test-script <操作> <需求名称> [模块名]`
|
|
10
|
+
|
|
11
|
+
## 目标
|
|
12
|
+
|
|
13
|
+
专门管理需求对齐阶段生成的测试脚本,确保测试驱动开发(TDD)原则:
|
|
14
|
+
|
|
15
|
+
- 📋 **脚本查看**:列出指定需求的测试脚本
|
|
16
|
+
- 🚀 **脚本运行**:跨平台运行测试脚本(自动选择合适格式)
|
|
17
|
+
- 📝 **脚本编辑**:查看和编辑测试脚本内容
|
|
18
|
+
- 👀 **详情查看**:查看测试脚本的详细说明
|
|
19
|
+
- 🔄 **平台适配**:支持 Windows、Linux、macOS 多平台
|
|
20
|
+
|
|
21
|
+
## 执行流程
|
|
22
|
+
|
|
23
|
+
1. **操作解析**:解析用户指定的操作(list/run/edit/view)
|
|
24
|
+
2. **脚本定位**:在 `.aico/scripts/` 目录查找对应测试脚本
|
|
25
|
+
3. **平台适配**:根据当前操作系统自动选择合适脚本格式
|
|
26
|
+
4. **执行操作**:执行查看、运行、编辑或查看详情操作
|
|
27
|
+
5. **结果反馈**:提供清晰的操作结果和后续指引
|
|
28
|
+
|
|
29
|
+
## 参数说明
|
|
30
|
+
|
|
31
|
+
- `operation`: 操作类型(list/run/edit/view)
|
|
32
|
+
- `requirement_name`: 需求名称
|
|
33
|
+
- `module_name`: 模块名称(run/edit/view操作时需要)
|
|
34
|
+
- `platform`: 当前操作系统平台
|
|
35
|
+
- `script_path`: 测试脚本路径
|
|
36
|
+
|
|
37
|
+
## 使用场景
|
|
38
|
+
|
|
39
|
+
- 需求对齐阶段后查看生成的测试脚本
|
|
40
|
+
- 运行测试脚本验证技术方案可行性
|
|
41
|
+
- 编辑测试脚本添加具体的测试逻辑
|
|
42
|
+
- 查看测试脚本的使用说明和运行方式
|
|
43
|
+
- 跨平台环境下的测试脚本管理
|
|
44
|
+
|
|
45
|
+
## 输出要求
|
|
46
|
+
|
|
47
|
+
- 必须提供清晰的列表格式显示测试脚本
|
|
48
|
+
- 运行测试时必须显示详细的执行过程和结果
|
|
49
|
+
- 编辑操作必须提供文件内容预览和编辑指引
|
|
50
|
+
- 详情查看必须显示完整的说明文档
|
|
51
|
+
- 支持断点续行,可基于现有脚本继续操作
|
|
52
|
+
|
|
53
|
+
## 平台支持
|
|
54
|
+
|
|
55
|
+
✅ **Windows**: Git Bash/Cygwin/WSL 支持 `.sh` 脚本
|
|
56
|
+
✅ **Windows**: 原生支持 `.bat` 批处理文件
|
|
57
|
+
✅ **Windows**: PowerShell 支持 `.ps1` 脚本
|
|
58
|
+
✅ **Linux/macOS**: 原生支持 `.sh` shell脚本
|
|
59
|
+
✅ **自动检测**: 根据操作系统自动选择最适合的脚本格式
|
|
60
|
+
|
|
61
|
+
## 示例
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# 列出测试脚本
|
|
65
|
+
/test-script list my-requirement
|
|
66
|
+
|
|
67
|
+
# 运行测试脚本
|
|
68
|
+
/test-script run my-requirement user-auth
|
|
69
|
+
|
|
70
|
+
# 编辑测试脚本
|
|
71
|
+
/test-script edit my-requirement user-auth
|
|
72
|
+
|
|
73
|
+
# 查看脚本详情
|
|
74
|
+
/test-script view my-requirement user-auth
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 文件位置
|
|
78
|
+
|
|
79
|
+
测试脚本存储在 `.aico/scripts/[模块名]/` 目录,包含:
|
|
80
|
+
- `[模块名]-test.sh` - Unix/Linux/macOS Shell脚本
|
|
81
|
+
- `[模块名]-test.bat` - Windows批处理脚本
|
|
82
|
+
- `[模块名]-test.ps1` - Windows PowerShell脚本
|
|
83
|
+
- `README.md` - 详细使用说明文档
|
package/templates/personality.md
CHANGED