@rpamis/comet 0.1.8 → 0.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/README.md +25 -5
- package/assets/manifest.json +2 -0
- package/assets/skills/comet/SKILL.md +214 -219
- package/assets/skills/comet/scripts/comet-state.sh +1 -0
- package/assets/skills/comet-archive/SKILL.md +2 -2
- package/assets/skills/comet-build/SKILL.md +1 -1
- package/assets/skills/comet-design/SKILL.md +1 -1
- package/assets/skills/comet-hotfix/SKILL.md +136 -133
- package/assets/skills/comet-open/SKILL.md +1 -1
- package/assets/skills/comet-tweak/SKILL.md +122 -120
- package/assets/skills/comet-verify/SKILL.md +2 -4
- package/assets/skills-zh/comet/SKILL.md +87 -98
- package/assets/skills-zh/comet-archive/SKILL.md +63 -63
- package/assets/skills-zh/comet-build/SKILL.md +153 -153
- package/assets/skills-zh/comet-design/SKILL.md +91 -91
- package/assets/skills-zh/comet-hotfix/SKILL.md +10 -7
- package/assets/skills-zh/comet-open/SKILL.md +70 -70
- package/assets/skills-zh/comet-tweak/SKILL.md +11 -9
- package/assets/skills-zh/comet-verify/SKILL.md +114 -116
- package/dist/cli/index.js +28 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +168 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +183 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +89 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +47 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/detect.d.ts +8 -0
- package/dist/core/detect.d.ts.map +1 -0
- package/dist/core/detect.js +73 -0
- package/dist/core/detect.js.map +1 -0
- package/dist/core/openspec.d.ts +5 -0
- package/dist/core/openspec.d.ts.map +1 -0
- package/dist/core/openspec.js +58 -0
- package/dist/core/openspec.js.map +1 -0
- package/dist/core/platforms.d.ts.map +1 -1
- package/dist/core/platforms.js +6 -1
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/skills.d.ts +22 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +59 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/superpowers.d.ts +5 -0
- package/dist/core/superpowers.d.ts.map +1 -0
- package/dist/core/superpowers.js +60 -0
- package/dist/core/superpowers.js.map +1 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/package.json +61 -50
- package/dist/core/init.d.ts +0 -14
- package/dist/core/init.d.ts.map +0 -1
- package/dist/core/init.js +0 -492
- package/dist/core/init.js.map +0 -1
|
@@ -26,7 +26,7 @@ Tweak 是 Comet 五阶段能力的预设工作流,不是独立的平行流程
|
|
|
26
26
|
执行入口验证:
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
COMET_STATE
|
|
29
|
+
COMET_STATE="${COMET_STATE:-$(find . -path '*/comet/scripts/comet-state.sh' -type f -print -quit)}"
|
|
30
30
|
bash "$COMET_STATE" check <name> open
|
|
31
31
|
```
|
|
32
32
|
|
|
@@ -61,7 +61,7 @@ bash "$COMET_STATE" init <name> tweak
|
|
|
61
61
|
1. 读取 `openspec/changes/<name>/tasks.md`,获取未完成任务列表
|
|
62
62
|
2. 对每个未完成任务:
|
|
63
63
|
- 根据任务描述修改目标文件
|
|
64
|
-
-
|
|
64
|
+
- 运行项目格式化命令(如 `mvn spotless:apply`、`npm run format` 等)
|
|
65
65
|
- 运行相关测试确认通过
|
|
66
66
|
- 将 tasks.md 中对应 `- [ ]` 勾选为 `- [x]`
|
|
67
67
|
- 提交代码,commit message 格式:`tweak: <简述变更>`
|
|
@@ -99,14 +99,16 @@ Tweak 流程为 **一次性连续执行**。调用 `/comet-tweak` 后,agent
|
|
|
99
99
|
|
|
100
100
|
## 升级条件
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
满足以下**任一**条件时,停止 tweak 流程,升级为完整 `/comet`:
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
5
|
|
109
|
-
|
|
104
|
+
| 条件 | 说明 |
|
|
105
|
+
|------|------|
|
|
106
|
+
| 改动涉及 **5+ 文件** | 超出小改动范围 |
|
|
107
|
+
| 多模块协调修改 | 需要跨组件协调 |
|
|
108
|
+
| 需要新增测试用例 **5+** | 变更复杂度上升 |
|
|
109
|
+
| 配置项新增或删除 | 非值修改的配置变更 |
|
|
110
|
+
| 需要新增 capability | 超出局部优化 |
|
|
111
|
+
| 需要 delta spec | 影响了已有规格 |
|
|
110
112
|
|
|
111
113
|
升级方式:在当前 change 基础上补充 Design Doc(执行 `/comet-design`),后续正常走完整流程。
|
|
112
114
|
|
|
@@ -1,116 +1,114 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: comet-verify
|
|
3
|
-
description: "Comet 阶段 4:验证与收尾。用 /comet-verify 调用。验证实现符合设计,处理开发分支。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Comet 阶段 4:验证与收尾(Verify)
|
|
7
|
-
|
|
8
|
-
## 前置条件
|
|
9
|
-
|
|
10
|
-
- 代码已提交(阶段 3 完成)
|
|
11
|
-
- tasks.md 全部任务已完成
|
|
12
|
-
|
|
13
|
-
## 步骤
|
|
14
|
-
|
|
15
|
-
### 0. 入口状态验证(Entry Check)
|
|
16
|
-
|
|
17
|
-
执行入口验证:
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
COMET_STATE
|
|
21
|
-
bash "$COMET_STATE" check <name> verify
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
|
|
25
|
-
|
|
26
|
-
### 1. 改动规模评估
|
|
27
|
-
|
|
28
|
-
执行规模评估:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
bash "$COMET_STATE" scale <name>
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
脚本自动统计任务数、增量规格数、变更文件数,判断使用 light 或 full 验证模式,并设置 verify_mode 字段。
|
|
35
|
-
|
|
36
|
-
### 2a. 轻量验证(小改动)
|
|
37
|
-
|
|
38
|
-
当规模评估结果为"小"时,跳过 `openspec-verify-change`,直接执行以下检查:
|
|
39
|
-
|
|
40
|
-
1. tasks.md 全部任务已完成 `[x]`
|
|
41
|
-
2. 改动文件与 tasks.md 描述一致(`git diff --stat` 对照 tasks 内容)
|
|
42
|
-
3.
|
|
43
|
-
4. 相关测试通过
|
|
44
|
-
5. 无明显安全问题(无硬编码密钥、无新增 unsafe 操作)
|
|
45
|
-
|
|
46
|
-
**通过标准**:5 项全部 OK,无 CRITICAL 问题。
|
|
47
|
-
|
|
48
|
-
**报告格式**:简表列出 5 项检查结果 + PASS/FAIL。
|
|
49
|
-
|
|
50
|
-
**跳过项**(不在轻量验证中检查):
|
|
51
|
-
- spec scenario 覆盖率
|
|
52
|
-
- design doc 一致性深度比对
|
|
53
|
-
- code pattern consistency 建议
|
|
54
|
-
- delta spec 与 design doc 漂移检测
|
|
55
|
-
|
|
56
|
-
### 2b. 完整验证(大改动)
|
|
57
|
-
|
|
58
|
-
当规模评估结果为"大"时:
|
|
59
|
-
|
|
60
|
-
**立即执行:** 使用 Skill 工具加载 `openspec-verify-change` 技能。禁止跳过此步骤。
|
|
61
|
-
|
|
62
|
-
技能加载后,按其指引验证。检查项:
|
|
63
|
-
1. tasks.md 全部任务已完成(`[x]`)
|
|
64
|
-
2. 实现符合 design.md 设计决策
|
|
65
|
-
3. 实现符合 brainstorming 设计文档
|
|
66
|
-
4. 能力规格场景全部通过
|
|
67
|
-
5. proposal.md 目标已满足
|
|
68
|
-
6. delta spec 与 design doc 无矛盾(若 Build 阶段有增量修改 spec,检查 design doc 是否有对应记录)
|
|
69
|
-
7. `docs/superpowers/specs/` 关联的设计文档可定位(文件存在且与当前 change 相关)
|
|
70
|
-
|
|
71
|
-
验证不通过时:报告缺失项,返回阶段 3 补充(调用 `/comet-build`)。
|
|
72
|
-
|
|
73
|
-
**Spec 漂移处理**:
|
|
74
|
-
- 若检查项 6 发现矛盾(delta spec 有内容但 design doc 未体现),提示用户:
|
|
75
|
-
- 选项 A:在 design doc 追加 "Implementation Divergence" 节记录偏差原因
|
|
76
|
-
- 选项 B:回退到 Build 阶段,补充 brainstorming 更新 design doc
|
|
77
|
-
- 选项 C:确认偏差可接受,继续验证(归档时 design doc 将标记为 `superseded-by-main-spec`)
|
|
78
|
-
|
|
79
|
-
### 3. 收尾(Superpowers)
|
|
80
|
-
|
|
81
|
-
**立即执行:** 使用 Skill 工具加载 `superpowers:finishing-a-development-branch` 技能。禁止跳过此步骤。
|
|
82
|
-
|
|
83
|
-
如 `superpowers:finishing-a-development-branch` 不可用,停止流程并提示安装或启用 Superpowers 技能,不要用普通对话替代该步骤。
|
|
84
|
-
|
|
85
|
-
技能加载后,按其指引收尾。分支处理选项:
|
|
86
|
-
1. 本地合并到主分支
|
|
87
|
-
2. 推送并创建 PR
|
|
88
|
-
3. 保持分支(稍后处理)
|
|
89
|
-
4. 丢弃工作
|
|
90
|
-
|
|
91
|
-
**确认项**:
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
> **REQUIRED NEXT SKILL:** 调用 `comet-archive` skill 进入归档阶段。
|
|
1
|
+
---
|
|
2
|
+
name: comet-verify
|
|
3
|
+
description: "Comet 阶段 4:验证与收尾。用 /comet-verify 调用。验证实现符合设计,处理开发分支。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Comet 阶段 4:验证与收尾(Verify)
|
|
7
|
+
|
|
8
|
+
## 前置条件
|
|
9
|
+
|
|
10
|
+
- 代码已提交(阶段 3 完成)
|
|
11
|
+
- tasks.md 全部任务已完成
|
|
12
|
+
|
|
13
|
+
## 步骤
|
|
14
|
+
|
|
15
|
+
### 0. 入口状态验证(Entry Check)
|
|
16
|
+
|
|
17
|
+
执行入口验证:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
COMET_STATE="${COMET_STATE:-$(find . -path '*/comet/scripts/comet-state.sh' -type f -print -quit)}"
|
|
21
|
+
bash "$COMET_STATE" check <name> verify
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
|
|
25
|
+
|
|
26
|
+
### 1. 改动规模评估
|
|
27
|
+
|
|
28
|
+
执行规模评估:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
bash "$COMET_STATE" scale <name>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
脚本自动统计任务数、增量规格数、变更文件数,判断使用 light 或 full 验证模式,并设置 verify_mode 字段。
|
|
35
|
+
|
|
36
|
+
### 2a. 轻量验证(小改动)
|
|
37
|
+
|
|
38
|
+
当规模评估结果为"小"时,跳过 `openspec-verify-change`,直接执行以下检查:
|
|
39
|
+
|
|
40
|
+
1. tasks.md 全部任务已完成 `[x]`
|
|
41
|
+
2. 改动文件与 tasks.md 描述一致(`git diff --stat` 对照 tasks 内容)
|
|
42
|
+
3. 编译通过(执行项目对应的构建命令,如 `npm run build`、`mvn compile`、`cargo build` 等)
|
|
43
|
+
4. 相关测试通过
|
|
44
|
+
5. 无明显安全问题(无硬编码密钥、无新增 unsafe 操作)
|
|
45
|
+
|
|
46
|
+
**通过标准**:5 项全部 OK,无 CRITICAL 问题。
|
|
47
|
+
|
|
48
|
+
**报告格式**:简表列出 5 项检查结果 + PASS/FAIL。
|
|
49
|
+
|
|
50
|
+
**跳过项**(不在轻量验证中检查):
|
|
51
|
+
- spec scenario 覆盖率
|
|
52
|
+
- design doc 一致性深度比对
|
|
53
|
+
- code pattern consistency 建议
|
|
54
|
+
- delta spec 与 design doc 漂移检测
|
|
55
|
+
|
|
56
|
+
### 2b. 完整验证(大改动)
|
|
57
|
+
|
|
58
|
+
当规模评估结果为"大"时:
|
|
59
|
+
|
|
60
|
+
**立即执行:** 使用 Skill 工具加载 `openspec-verify-change` 技能。禁止跳过此步骤。
|
|
61
|
+
|
|
62
|
+
技能加载后,按其指引验证。检查项:
|
|
63
|
+
1. tasks.md 全部任务已完成(`[x]`)
|
|
64
|
+
2. 实现符合 design.md 设计决策
|
|
65
|
+
3. 实现符合 brainstorming 设计文档
|
|
66
|
+
4. 能力规格场景全部通过
|
|
67
|
+
5. proposal.md 目标已满足
|
|
68
|
+
6. delta spec 与 design doc 无矛盾(若 Build 阶段有增量修改 spec,检查 design doc 是否有对应记录)
|
|
69
|
+
7. `docs/superpowers/specs/` 关联的设计文档可定位(文件存在且与当前 change 相关)
|
|
70
|
+
|
|
71
|
+
验证不通过时:报告缺失项,返回阶段 3 补充(调用 `/comet-build`)。
|
|
72
|
+
|
|
73
|
+
**Spec 漂移处理**:
|
|
74
|
+
- 若检查项 6 发现矛盾(delta spec 有内容但 design doc 未体现),提示用户:
|
|
75
|
+
- 选项 A:在 design doc 追加 "Implementation Divergence" 节记录偏差原因
|
|
76
|
+
- 选项 B:回退到 Build 阶段,补充 brainstorming 更新 design doc
|
|
77
|
+
- 选项 C:确认偏差可接受,继续验证(归档时 design doc 将标记为 `superseded-by-main-spec`)
|
|
78
|
+
|
|
79
|
+
### 3. 收尾(Superpowers)
|
|
80
|
+
|
|
81
|
+
**立即执行:** 使用 Skill 工具加载 `superpowers:finishing-a-development-branch` 技能。禁止跳过此步骤。
|
|
82
|
+
|
|
83
|
+
如 `superpowers:finishing-a-development-branch` 不可用,停止流程并提示安装或启用 Superpowers 技能,不要用普通对话替代该步骤。
|
|
84
|
+
|
|
85
|
+
技能加载后,按其指引收尾。分支处理选项:
|
|
86
|
+
1. 本地合并到主分支
|
|
87
|
+
2. 推送并创建 PR
|
|
88
|
+
3. 保持分支(稍后处理)
|
|
89
|
+
4. 丢弃工作
|
|
90
|
+
|
|
91
|
+
**确认项**:
|
|
92
|
+
- 全部测试通过
|
|
93
|
+
- 无硬编码密钥或安全问题
|
|
94
|
+
|
|
95
|
+
## 退出条件
|
|
96
|
+
|
|
97
|
+
- 验证报告通过
|
|
98
|
+
- 分支已处理
|
|
99
|
+
- `.comet.yaml` 中 `verify_result` 已记录为 `pass`
|
|
100
|
+
- **阶段守卫**:运行 `bash $COMET_GUARD <change-name> verify`,全部 PASS 后才允许流转
|
|
101
|
+
|
|
102
|
+
退出前运行 guard 自动流转:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
bash $COMET_GUARD <change-name> verify --apply
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
状态文件自动更新为 `phase: archive`、`verify_result: pass`、`verified_at: YYYY-MM-DD`。
|
|
109
|
+
|
|
110
|
+
## 自动流转
|
|
111
|
+
|
|
112
|
+
退出条件满足后,**无需等待用户再次输入**,直接执行下一阶段:
|
|
113
|
+
|
|
114
|
+
> **REQUIRED NEXT SKILL:** 调用 `comet-archive` skill 进入归档阶段。
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { createRequire } from 'module';
|
|
3
|
-
import { initCommand } from '../
|
|
3
|
+
import { initCommand } from '../commands/init.js';
|
|
4
|
+
import { statusCommand } from '../commands/status.js';
|
|
5
|
+
import { doctorCommand } from '../commands/doctor.js';
|
|
6
|
+
import { updateCommand } from '../commands/update.js';
|
|
4
7
|
const require = createRequire(import.meta.url);
|
|
5
8
|
const { version } = require('../../package.json');
|
|
6
9
|
const program = new Command();
|
|
@@ -14,8 +17,32 @@ program
|
|
|
14
17
|
.option('--yes', 'Auto-install missing components, skip existing')
|
|
15
18
|
.option('--skip-existing', 'Never overwrite existing components')
|
|
16
19
|
.option('--overwrite', 'Overwrite manifest-managed files')
|
|
20
|
+
.option('--json', 'Output as JSON')
|
|
17
21
|
.action(async (targetPath = '.', options) => {
|
|
18
22
|
await initCommand(targetPath, options);
|
|
19
23
|
});
|
|
24
|
+
program
|
|
25
|
+
.command('status [path]')
|
|
26
|
+
.description('Show active changes and workflow status')
|
|
27
|
+
.option('--json', 'Output as JSON')
|
|
28
|
+
.action(async (targetPath = '.', options) => {
|
|
29
|
+
await statusCommand(targetPath, options);
|
|
30
|
+
});
|
|
31
|
+
program
|
|
32
|
+
.command('doctor [path]')
|
|
33
|
+
.description('Diagnose Comet installation health')
|
|
34
|
+
.option('--json', 'Output as JSON')
|
|
35
|
+
.action(async (targetPath = '.', options) => {
|
|
36
|
+
await doctorCommand(targetPath, options);
|
|
37
|
+
});
|
|
38
|
+
program
|
|
39
|
+
.command('update [path]')
|
|
40
|
+
.description('Update comet skill files to latest version')
|
|
41
|
+
.option('--json', 'Output as JSON')
|
|
42
|
+
.option('--language <lang>', 'Language for skills (en, zh)')
|
|
43
|
+
.option('--scope <scope>', 'Install scope (global, project)')
|
|
44
|
+
.action(async (targetPath = '.', options) => {
|
|
45
|
+
await updateCommand(targetPath, options);
|
|
46
|
+
});
|
|
20
47
|
program.parse();
|
|
21
48
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,OAAO,EAAE,gDAAgD,CAAC;KACjE,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;KAChE,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;KACzD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KAC5D,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAmLA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { promises as fs } from 'fs';
|
|
4
|
+
import { fileExists, readDir } from '../utils/file-system.js';
|
|
5
|
+
import { isCommandAvailable } from '../core/openspec.js';
|
|
6
|
+
import { readManifest, getAssetsDir } from '../core/skills.js';
|
|
7
|
+
import { PLATFORMS } from '../core/platforms.js';
|
|
8
|
+
const VALID_YAML_FIELDS = new Set([
|
|
9
|
+
'workflow',
|
|
10
|
+
'phase',
|
|
11
|
+
'build_mode',
|
|
12
|
+
'isolation',
|
|
13
|
+
'verify_mode',
|
|
14
|
+
'verify_result',
|
|
15
|
+
'design_doc',
|
|
16
|
+
'plan',
|
|
17
|
+
'archived',
|
|
18
|
+
'verified_at',
|
|
19
|
+
]);
|
|
20
|
+
async function checkOpenSpecCli() {
|
|
21
|
+
if (!isCommandAvailable('openspec')) {
|
|
22
|
+
return {
|
|
23
|
+
check: 'openspec CLI',
|
|
24
|
+
status: 'warn',
|
|
25
|
+
message: 'not installed — install with: npm install -g @fission-ai/openspec@latest',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const version = execSync('openspec --version', { stdio: 'pipe', timeout: 10_000 })
|
|
30
|
+
.toString()
|
|
31
|
+
.trim();
|
|
32
|
+
return { check: 'openspec CLI', status: 'pass', message: `installed (${version})` };
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return { check: 'openspec CLI', status: 'pass', message: 'installed' };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function checkWorkingDirs(projectPath) {
|
|
39
|
+
const specsDir = path.join(projectPath, 'docs', 'superpowers', 'specs');
|
|
40
|
+
const plansDir = path.join(projectPath, 'docs', 'superpowers', 'plans');
|
|
41
|
+
const specsExist = await fileExists(specsDir);
|
|
42
|
+
const plansExist = await fileExists(plansDir);
|
|
43
|
+
if (specsExist && plansExist) {
|
|
44
|
+
return { check: 'working directories', status: 'pass', message: 'present' };
|
|
45
|
+
}
|
|
46
|
+
if (!specsExist && !plansExist) {
|
|
47
|
+
return { check: 'working directories', status: 'fail', message: 'missing — run: comet init' };
|
|
48
|
+
}
|
|
49
|
+
const missing = [];
|
|
50
|
+
if (!specsExist)
|
|
51
|
+
missing.push('specs');
|
|
52
|
+
if (!plansExist)
|
|
53
|
+
missing.push('plans');
|
|
54
|
+
return {
|
|
55
|
+
check: 'working directories',
|
|
56
|
+
status: 'warn',
|
|
57
|
+
message: `partial (missing: ${missing.join(', ')})`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function checkSkillCompleteness(projectPath) {
|
|
61
|
+
const results = [];
|
|
62
|
+
const manifest = await readManifest();
|
|
63
|
+
let anyPlatform = false;
|
|
64
|
+
for (const platform of PLATFORMS) {
|
|
65
|
+
const skillsDir = path.join(projectPath, platform.skillsDir, 'skills');
|
|
66
|
+
if (!(await fileExists(skillsDir)))
|
|
67
|
+
continue;
|
|
68
|
+
anyPlatform = true;
|
|
69
|
+
const missing = [];
|
|
70
|
+
for (const relPath of manifest.skills) {
|
|
71
|
+
const fullPath = path.join(projectPath, platform.skillsDir, 'skills', relPath);
|
|
72
|
+
if (!(await fileExists(fullPath))) {
|
|
73
|
+
missing.push(relPath);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
results.push(missing.length === 0
|
|
77
|
+
? {
|
|
78
|
+
check: `skills: ${platform.name}`,
|
|
79
|
+
status: 'pass',
|
|
80
|
+
message: `complete (${manifest.skills.length} files)`,
|
|
81
|
+
}
|
|
82
|
+
: {
|
|
83
|
+
check: `skills: ${platform.name}`,
|
|
84
|
+
status: 'warn',
|
|
85
|
+
message: `missing ${missing.length}: ${missing.join(', ')}`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (!anyPlatform) {
|
|
89
|
+
results.push({
|
|
90
|
+
check: 'skills',
|
|
91
|
+
status: 'warn',
|
|
92
|
+
message: 'no platforms detected — run comet init',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return results;
|
|
96
|
+
}
|
|
97
|
+
async function checkScriptsPresent() {
|
|
98
|
+
const assetsDir = getAssetsDir();
|
|
99
|
+
const scriptsDir = path.join(assetsDir, 'skills', 'comet', 'scripts');
|
|
100
|
+
if (!(await fileExists(scriptsDir))) {
|
|
101
|
+
return { check: 'scripts present', status: 'warn', message: 'scripts directory not found' };
|
|
102
|
+
}
|
|
103
|
+
const entries = await readDir(scriptsDir);
|
|
104
|
+
const shFiles = entries.filter((e) => e.endsWith('.sh'));
|
|
105
|
+
return {
|
|
106
|
+
check: 'scripts executable',
|
|
107
|
+
status: 'pass',
|
|
108
|
+
message: `OK (${shFiles.length} scripts)`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async function checkCometYamlValidity(projectPath) {
|
|
112
|
+
const changesDir = path.join(projectPath, 'openspec', 'changes');
|
|
113
|
+
if (!(await fileExists(changesDir)))
|
|
114
|
+
return [];
|
|
115
|
+
const entries = await readDir(changesDir);
|
|
116
|
+
const results = [];
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
const yamlPath = path.join(changesDir, entry, '.comet.yaml');
|
|
119
|
+
if (!(await fileExists(yamlPath)))
|
|
120
|
+
continue;
|
|
121
|
+
const raw = await fs.readFile(yamlPath, 'utf-8');
|
|
122
|
+
const unknownFields = [];
|
|
123
|
+
for (const line of raw.split('\n')) {
|
|
124
|
+
const match = line.match(/^(\w[\w_]*):/);
|
|
125
|
+
if (match && !VALID_YAML_FIELDS.has(match[1])) {
|
|
126
|
+
unknownFields.push(match[1]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
results.push(unknownFields.length === 0
|
|
130
|
+
? { check: `.comet.yaml: ${entry}`, status: 'pass', message: 'valid' }
|
|
131
|
+
: {
|
|
132
|
+
check: `.comet.yaml: ${entry}`,
|
|
133
|
+
status: 'fail',
|
|
134
|
+
message: `unknown field(s): ${unknownFields.join(', ')}`,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return results;
|
|
138
|
+
}
|
|
139
|
+
async function collectResults(projectPath) {
|
|
140
|
+
const results = [];
|
|
141
|
+
results.push(await checkOpenSpecCli());
|
|
142
|
+
results.push(await checkWorkingDirs(projectPath));
|
|
143
|
+
results.push(...(await checkSkillCompleteness(projectPath)));
|
|
144
|
+
results.push(await checkScriptsPresent());
|
|
145
|
+
results.push(...(await checkCometYamlValidity(projectPath)));
|
|
146
|
+
return results;
|
|
147
|
+
}
|
|
148
|
+
function icon(status) {
|
|
149
|
+
if (status === 'pass')
|
|
150
|
+
return '✓';
|
|
151
|
+
if (status === 'warn')
|
|
152
|
+
return '⚠';
|
|
153
|
+
return '✗';
|
|
154
|
+
}
|
|
155
|
+
export async function doctorCommand(targetPath, options = {}) {
|
|
156
|
+
const projectPath = path.resolve(targetPath);
|
|
157
|
+
const results = await collectResults(projectPath);
|
|
158
|
+
if (options.json) {
|
|
159
|
+
console.log(JSON.stringify({ results }, null, 2));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
console.log('Comet Doctor\n');
|
|
163
|
+
for (const r of results) {
|
|
164
|
+
console.log(` ${icon(r.status)} ${r.check}: ${r.message}`);
|
|
165
|
+
}
|
|
166
|
+
console.log();
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAaA,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AA8HF,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G9F"}
|