@rpamis/comet 0.2.1 → 0.2.3

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.
@@ -1,91 +1,91 @@
1
- ---
2
- name: comet-design
3
- description: "Comet 阶段 2:深度设计。用 /comet-design 调用。通过 brainstorming 产出 Design Doc 和 delta spec。"
4
- ---
5
-
6
- # Comet 阶段 2:深度设计(Design)
7
-
8
- ## 前置条件
9
-
10
- - 活跃 change 已存在(proposal.md、design.md、tasks.md)
11
- - 无 Design Doc(`docs/superpowers/specs/` 下无对应文件)
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> design
22
- ```
23
-
24
- 验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
25
-
26
- ### 1a. 读取已有上下文
27
-
28
- 读取活跃 change 下的 `proposal.md` 和 `design.md`,将核心内容整理为摘要:
29
- - **proposal 摘要**:目标、动机、范围
30
- - **design 摘要**:架构决策、高层设计
31
-
32
- ### 1b. 执行 Brainstorming(带上下文)
33
-
34
- **立即执行:** 使用 Skill 工具加载 `superpowers:brainstorming` 技能,ARGUMENTS 包含:
35
-
36
- ```
37
- Change: <change-name>
38
- Proposal 摘要: <proposal 核心内容>
39
- Design 摘要: <design.md 架构决策>
40
- 跳过上下文探索,直接进入设计提问。
41
- ```
42
-
43
- 禁止跳过此步骤,禁止在未加载该技能的情况下继续。
44
-
45
- 如 `superpowers:brainstorming` 不可用,停止流程并提示安装或启用 Superpowers 技能,不要用普通对话替代该步骤。
46
-
47
- 技能加载后,按其指引产出:
48
- - `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` — 设计文档(技术 RFC)
49
- - `openspec/changes/<name>/specs/<capability>/spec.md` — 能力规格(delta)
50
-
51
- ### 2. 更新 Comet 状态
52
-
53
- 先记录 design_doc 路径,再运行 guard 自动流转:
54
-
55
- ```bash
56
- # 记录 design_doc 路径
57
- bash "$COMET_STATE" set <name> design_doc docs/superpowers/specs/YYYY-MM-DD-topic-design.md
58
-
59
- # 自动流转到下一阶段
60
- bash $COMET_GUARD <change-name> design --apply
61
- ```
62
-
63
- 状态文件自动更新,无需手动编辑其他字段。
64
-
65
- ### 3. 双 Spec 分工
66
-
67
- | Spec 类型 | 归属 | 存放位置 | 定义 |
68
- |-----------|------|---------|------|
69
- | 能力规格 | OpenSpec | `openspec/changes/<name>/specs/` | 系统应该做什么(需求 + 验收场景) |
70
- | 设计文档 | Superpowers | `docs/superpowers/specs/` | 怎么构建(技术架构 + 实现细节) |
71
-
72
- ### 4. 文档层级确认
73
-
74
- ```
75
- proposal.md(阶段 1) → Why + What
76
- design.md(阶段 1,OpenSpec) → 高层架构决策
77
- 设计文档(阶段 2,Superpowers) → 深度技术设计
78
- 能力规格(阶段 2,delta) → 需求 + 验收场景
79
- ```
80
-
81
- ## 退出条件
82
-
83
- - Design Doc 已创建并保存
84
- - 如有新能力则 delta spec 已创建
85
- - **阶段守卫**:运行 `bash $COMET_GUARD <change-name> design`,全部 PASS 后才允许流转
86
-
87
- ## 自动流转
88
-
89
- 退出条件满足后,**无需等待用户再次输入**,直接执行下一阶段:
90
-
91
- > **REQUIRED NEXT SKILL:** 调用 `comet-build` skill 进入计划与构建阶段。
1
+ ---
2
+ name: comet-design
3
+ description: "Comet 阶段 2:深度设计。用 /comet-design 调用。通过 brainstorming 产出 Design Doc 和 delta spec。"
4
+ ---
5
+
6
+ # Comet 阶段 2:深度设计(Design)
7
+
8
+ ## 前置条件
9
+
10
+ - 活跃 change 已存在(proposal.md、design.md、tasks.md)
11
+ - 无 Design Doc(`docs/superpowers/specs/` 下无对应文件)
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> design
22
+ ```
23
+
24
+ 验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
25
+
26
+ ### 1a. 读取已有上下文
27
+
28
+ 读取活跃 change 下的 `proposal.md` 和 `design.md`,将核心内容整理为摘要:
29
+ - **proposal 摘要**:目标、动机、范围
30
+ - **design 摘要**:架构决策、高层设计
31
+
32
+ ### 1b. 执行 Brainstorming(带上下文)
33
+
34
+ **立即执行:** 使用 Skill 工具加载 `superpowers:brainstorming` 技能,ARGUMENTS 包含:
35
+
36
+ ```
37
+ Change: <change-name>
38
+ Proposal 摘要: <proposal 核心内容>
39
+ Design 摘要: <design.md 架构决策>
40
+ 跳过上下文探索,直接进入设计提问。
41
+ ```
42
+
43
+ 禁止跳过此步骤,禁止在未加载该技能的情况下继续。
44
+
45
+ 如 `superpowers:brainstorming` 不可用,停止流程并提示安装或启用 Superpowers 技能,不要用普通对话替代该步骤。
46
+
47
+ 技能加载后,按其指引产出:
48
+ - `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` — 设计文档(技术 RFC)
49
+ - `openspec/changes/<name>/specs/<capability>/spec.md` — 能力规格(delta)
50
+
51
+ ### 2. 更新 Comet 状态
52
+
53
+ 先记录 design_doc 路径,再运行 guard 自动流转:
54
+
55
+ ```bash
56
+ # 记录 design_doc 路径
57
+ bash "$COMET_STATE" set <name> design_doc docs/superpowers/specs/YYYY-MM-DD-topic-design.md
58
+
59
+ # 自动流转到下一阶段
60
+ bash $COMET_GUARD <change-name> design --apply
61
+ ```
62
+
63
+ 状态文件自动更新,无需手动编辑其他字段。
64
+
65
+ ### 3. 双 Spec 分工
66
+
67
+ | Spec 类型 | 归属 | 存放位置 | 定义 |
68
+ |-----------|------|---------|------|
69
+ | 能力规格 | OpenSpec | `openspec/changes/<name>/specs/` | 系统应该做什么(需求 + 验收场景) |
70
+ | 设计文档 | Superpowers | `docs/superpowers/specs/` | 怎么构建(技术架构 + 实现细节) |
71
+
72
+ ### 4. 文档层级确认
73
+
74
+ ```
75
+ proposal.md(阶段 1) → Why + What
76
+ design.md(阶段 1,OpenSpec) → 高层架构决策
77
+ 设计文档(阶段 2,Superpowers) → 深度技术设计
78
+ 能力规格(阶段 2,delta) → 需求 + 验收场景
79
+ ```
80
+
81
+ ## 退出条件
82
+
83
+ - Design Doc 已创建并保存
84
+ - 如有新能力则 delta spec 已创建
85
+ - **阶段守卫**:运行 `bash $COMET_GUARD <change-name> design`,全部 PASS 后才允许流转
86
+
87
+ ## 自动流转
88
+
89
+ 退出条件满足后,**无需等待用户再次输入**,直接执行下一阶段:
90
+
91
+ > **REQUIRED NEXT SKILL:** 调用 `comet-build` skill 进入计划与构建阶段。
@@ -1,70 +1,70 @@
1
- ---
2
- name: comet-open
3
- description: "Comet 阶段 1:开启。用 /comet-open 调用。通过 OpenSpec 探索想法、创建 change 结构(proposal + design + tasks)。"
4
- ---
5
-
6
- # Comet 阶段 1:开启(Open)
7
-
8
- ## 前置条件
9
-
10
- - 无活跃 change,或用户希望创建新 change
11
-
12
- ## 步骤
13
-
14
- ### 0. 入口状态验证(Entry Check)
15
-
16
- 执行入口验证:
17
-
18
- ```bash
19
- COMET_STATE="${COMET_STATE:-$(find . -path '*/comet/scripts/comet-state.sh' -type f -print -quit)}"
20
- bash "$COMET_STATE" check <name> open
21
- ```
22
-
23
- 验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
24
-
25
- ### 1. 探索想法
26
-
27
- **立即执行:** 使用 Skill 工具加载 `openspec-explore` 技能。禁止跳过此步骤。
28
-
29
- 技能加载后,按其指引自由探索问题空间。
30
-
31
- ### 2. 创建 Change 结构
32
-
33
- **立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。若用户意图未明确、需要先形成建议,改为加载 `openspec-propose`。禁止跳过此步骤。
34
-
35
- 确认以下产物已创建:
36
-
37
- ```
38
- openspec/changes/<name>/
39
- ├── .openspec.yaml
40
- ├── .comet.yaml
41
- ├── proposal.md # Why + What:问题、目标、范围
42
- ├── design.md # How(高层):架构决策、方案选型
43
- └── tasks.md # 任务清单(勾选框)
44
- ```
45
-
46
- ### 3. 初始化 Comet 状态
47
-
48
- 初始化 Comet 状态文件:
49
-
50
- ```bash
51
- bash "$COMET_STATE" init <name> full
52
- ```
53
-
54
- ### 4. 内容完整性检查
55
-
56
- 确认三个文档内容完整:
57
- - **proposal.md**:问题背景、目标、范围、非目标
58
- - **design.md**:高层架构决策、方案选型、数据流
59
- - **tasks.md**:任务列表,每个任务有明确描述
60
-
61
- ## 退出条件
62
-
63
- - proposal.md、design.md、tasks.md 均已创建且内容完整
64
- - **阶段守卫**:运行 `bash $COMET_GUARD <change-name> open`,全部 PASS 后才允许流转
65
-
66
- ## 自动流转
67
-
68
- 退出条件满足后,**无需等待用户再次输入**,直接执行下一阶段:
69
-
70
- > **REQUIRED NEXT SKILL:** 调用 `comet-design` skill 进入深度设计阶段。
1
+ ---
2
+ name: comet-open
3
+ description: "Comet 阶段 1:开启。用 /comet-open 调用。通过 OpenSpec 探索想法、创建 change 结构(proposal + design + tasks)。"
4
+ ---
5
+
6
+ # Comet 阶段 1:开启(Open)
7
+
8
+ ## 前置条件
9
+
10
+ - 无活跃 change,或用户希望创建新 change
11
+
12
+ ## 步骤
13
+
14
+ ### 0. 入口状态验证(Entry Check)
15
+
16
+ 执行入口验证:
17
+
18
+ ```bash
19
+ COMET_STATE="${COMET_STATE:-$(find . -path '*/comet/scripts/comet-state.sh' -type f -print -quit)}"
20
+ bash "$COMET_STATE" check <name> open
21
+ ```
22
+
23
+ 验证通过后继续 Step 1。验证失败时脚本会输出具体失败原因。
24
+
25
+ ### 1. 探索想法
26
+
27
+ **立即执行:** 使用 Skill 工具加载 `openspec-explore` 技能。禁止跳过此步骤。
28
+
29
+ 技能加载后,按其指引自由探索问题空间。
30
+
31
+ ### 2. 创建 Change 结构
32
+
33
+ **立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。若用户意图未明确、需要先形成建议,改为加载 `openspec-propose`。禁止跳过此步骤。
34
+
35
+ 确认以下产物已创建:
36
+
37
+ ```
38
+ openspec/changes/<name>/
39
+ ├── .openspec.yaml
40
+ ├── .comet.yaml
41
+ ├── proposal.md # Why + What:问题、目标、范围
42
+ ├── design.md # How(高层):架构决策、方案选型
43
+ └── tasks.md # 任务清单(勾选框)
44
+ ```
45
+
46
+ ### 3. 初始化 Comet 状态
47
+
48
+ 初始化 Comet 状态文件:
49
+
50
+ ```bash
51
+ bash "$COMET_STATE" init <name> full
52
+ ```
53
+
54
+ ### 4. 内容完整性检查
55
+
56
+ 确认三个文档内容完整:
57
+ - **proposal.md**:问题背景、目标、范围、非目标
58
+ - **design.md**:高层架构决策、方案选型、数据流
59
+ - **tasks.md**:任务列表,每个任务有明确描述
60
+
61
+ ## 退出条件
62
+
63
+ - proposal.md、design.md、tasks.md 均已创建且内容完整
64
+ - **阶段守卫**:运行 `bash $COMET_GUARD <change-name> open`,全部 PASS 后才允许流转
65
+
66
+ ## 自动流转
67
+
68
+ 退出条件满足后,**无需等待用户再次输入**,直接执行下一阶段:
69
+
70
+ > **REQUIRED NEXT SKILL:** 调用 `comet-design` skill 进入深度设计阶段。
@@ -1,114 +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="${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 进入归档阶段。
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/bin/comet.js CHANGED
@@ -1,3 +1,3 @@
1
- #!/usr/bin/env node
2
-
3
- import '../dist/cli/index.js';
1
+ #!/usr/bin/env node
2
+
3
+ import '../dist/cli/index.js';
package/dist/cli/index.js CHANGED
@@ -19,7 +19,16 @@ program
19
19
  .option('--overwrite', 'Overwrite manifest-managed files')
20
20
  .option('--json', 'Output as JSON')
21
21
  .action(async (targetPath = '.', options) => {
22
- await initCommand(targetPath, options);
22
+ try {
23
+ await initCommand(targetPath, options);
24
+ }
25
+ catch (error) {
26
+ if (error instanceof Error && error.name === 'ExitPromptError') {
27
+ console.log('\n Cancelled.\n');
28
+ process.exit(0);
29
+ }
30
+ throw error;
31
+ }
23
32
  });
24
33
  program
25
34
  .command('status [path]')
@@ -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,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"}
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,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,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"}
@@ -1,8 +1,13 @@
1
1
  import { type Platform } from './platforms.js';
2
2
  import type { InstallScope } from './types.js';
3
3
  declare function getBaseDir(scope: InstallScope, projectPath: string): string;
4
+ /**
5
+ * Check if superpowers are installed via Claude Code plugin system.
6
+ * Looks in ~/.claude/plugins/cache/{marketplace}/superpowers/{version}/skills/
7
+ */
8
+ declare function hasPluginSuperpowers(): Promise<boolean>;
4
9
  declare function detectPlatforms(projectPath: string): Promise<Set<string>>;
5
10
  declare function hasSkills(baseDir: string, platform: Platform, component: 'openspec' | 'superpowers' | 'comet', _selectedPlatforms?: Platform[]): Promise<boolean>;
6
- export { detectPlatforms, hasSkills, getBaseDir };
11
+ export { detectPlatforms, hasSkills, hasPluginSuperpowers, getBaseDir };
7
12
  export type { InstallScope };
8
13
  //# sourceMappingURL=detect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,iBAAS,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,iBAAe,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAoBxE;AAED,iBAAe,SAAS,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,EAC/C,kBAAkB,GAAE,QAAQ,EAAO,GAClC,OAAO,CAAC,OAAO,CAAC,CAiClB;AAED,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,iBAAS,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;GAGG;AACH,iBAAe,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAmBtD;AAED,iBAAe,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAoBxE;AAED,iBAAe,SAAS,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,EAC/C,kBAAkB,GAAE,QAAQ,EAAO,GAClC,OAAO,CAAC,OAAO,CAAC,CAuClB;AAED,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -12,6 +12,29 @@ const SUPERPOWERS_SKILLS = [
12
12
  function getBaseDir(scope, projectPath) {
13
13
  return scope === 'global' ? os.homedir() : projectPath;
14
14
  }
15
+ /**
16
+ * Check if superpowers are installed via Claude Code plugin system.
17
+ * Looks in ~/.claude/plugins/cache/{marketplace}/superpowers/{version}/skills/
18
+ */
19
+ async function hasPluginSuperpowers() {
20
+ const claudeDir = process.env.CLAUDE_CONFIG_DIR || path.join(os.homedir(), '.claude');
21
+ const pluginsCacheDir = path.join(claudeDir, 'plugins', 'cache');
22
+ const marketplaceEntries = await readDir(pluginsCacheDir);
23
+ for (const marketplace of marketplaceEntries) {
24
+ const superpowersDir = path.join(pluginsCacheDir, marketplace, 'superpowers');
25
+ if (!(await fileExists(superpowersDir)))
26
+ continue;
27
+ const versionEntries = await readDir(superpowersDir);
28
+ for (const version of versionEntries) {
29
+ const skillsDir = path.join(superpowersDir, version, 'skills');
30
+ const skills = await readDir(skillsDir);
31
+ if (SUPERPOWERS_SKILLS.some((name) => skills.includes(name))) {
32
+ return true;
33
+ }
34
+ }
35
+ }
36
+ return false;
37
+ }
15
38
  async function detectPlatforms(projectPath) {
16
39
  const detected = new Set();
17
40
  for (const platform of PLATFORMS) {
@@ -67,7 +90,12 @@ async function hasSkills(baseDir, platform, component, _selectedPlatforms = [])
67
90
  break;
68
91
  }
69
92
  }
93
+ // Check Claude Code plugin cache for plugin-installed superpowers
94
+ if (component === 'superpowers' && platform.id === 'claude') {
95
+ if (await hasPluginSuperpowers())
96
+ return true;
97
+ }
70
98
  return false;
71
99
  }
72
- export { detectPlatforms, hasSkills, getBaseDir };
100
+ export { detectPlatforms, hasSkills, hasPluginSuperpowers, getBaseDir };
73
101
  //# sourceMappingURL=detect.js.map