@rpamis/comet 0.3.1 → 0.3.2
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/assets/manifest.json +2 -1
- package/assets/skills/comet/SKILL.md +6 -5
- package/assets/skills/comet/scripts/comet-env.sh +55 -0
- package/assets/skills/comet/scripts/comet-state.sh +2 -2
- package/assets/skills/comet-archive/SKILL.md +6 -2
- package/assets/skills/comet-build/SKILL.md +7 -4
- package/assets/skills/comet-design/SKILL.md +6 -4
- package/assets/skills/comet-hotfix/SKILL.md +11 -9
- package/assets/skills/comet-open/SKILL.md +6 -3
- package/assets/skills/comet-tweak/SKILL.md +10 -8
- package/assets/skills/comet-verify/SKILL.md +6 -3
- package/assets/skills-zh/comet/SKILL.md +7 -6
- package/assets/skills-zh/comet-archive/SKILL.md +6 -2
- package/assets/skills-zh/comet-build/SKILL.md +6 -3
- package/assets/skills-zh/comet-design/SKILL.md +6 -4
- package/assets/skills-zh/comet-hotfix/SKILL.md +9 -7
- package/assets/skills-zh/comet-open/SKILL.md +6 -3
- package/assets/skills-zh/comet-tweak/SKILL.md +6 -4
- package/assets/skills-zh/comet-verify/SKILL.md +6 -3
- package/dist/core/command-error.d.ts +4 -0
- package/dist/core/command-error.d.ts.map +1 -0
- package/dist/core/command-error.js +53 -0
- package/dist/core/command-error.js.map +1 -0
- package/dist/core/detect.d.ts.map +1 -1
- package/dist/core/detect.js +33 -4
- package/dist/core/detect.js.map +1 -1
- package/dist/core/openspec.d.ts.map +1 -1
- package/dist/core/openspec.js +52 -1
- package/dist/core/openspec.js.map +1 -1
- package/dist/core/platforms.d.ts.map +1 -1
- package/dist/core/platforms.js +14 -2
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +58 -0
- package/dist/core/skills.js.map +1 -1
- package/dist/core/superpowers.d.ts +3 -2
- package/dist/core/superpowers.d.ts.map +1 -1
- package/dist/core/superpowers.js +75 -25
- package/dist/core/superpowers.js.map +1 -1
- package/package.json +1 -1
package/assets/manifest.json
CHANGED
|
@@ -206,11 +206,12 @@ State-machine hard constraints:
|
|
|
206
206
|
Comet scripts are distributed in `comet/scripts/`. **Do not hardcode paths** — locate once, cache in env vars:
|
|
207
207
|
|
|
208
208
|
```bash
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
209
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
210
|
+
if [ -z "$COMET_ENV" ]; then
|
|
211
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
212
|
+
return 1
|
|
213
|
+
fi
|
|
214
|
+
. "$COMET_ENV"
|
|
214
215
|
|
|
215
216
|
# Stop workflow when script location fails
|
|
216
217
|
if [ -z "$COMET_GUARD" ] || [ -z "$COMET_STATE" ] || [ -z "$COMET_HANDOFF" ] || [ -z "$COMET_ARCHIVE" ]; then
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Comet script locator — source this file to export paths to bundled scripts.
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# . /path/to/comet/scripts/comet-env.sh
|
|
6
|
+
#
|
|
7
|
+
# This file is sourced by workflow snippets. Do not set global shell options here.
|
|
8
|
+
|
|
9
|
+
_comet_env_source="${BASH_SOURCE[0]:-$0}"
|
|
10
|
+
_comet_script_dir="$(cd "$(dirname "$_comet_env_source")" && pwd -P)"
|
|
11
|
+
_comet_env_sourced=0
|
|
12
|
+
(return 0 2>/dev/null) && _comet_env_sourced=1
|
|
13
|
+
|
|
14
|
+
export COMET_GUARD="${COMET_GUARD:-${_comet_script_dir}/comet-guard.sh}"
|
|
15
|
+
export COMET_STATE="${COMET_STATE:-${_comet_script_dir}/comet-state.sh}"
|
|
16
|
+
export COMET_HANDOFF="${COMET_HANDOFF:-${_comet_script_dir}/comet-handoff.sh}"
|
|
17
|
+
export COMET_ARCHIVE="${COMET_ARCHIVE:-${_comet_script_dir}/comet-archive.sh}"
|
|
18
|
+
export COMET_YAML_VALIDATE="${COMET_YAML_VALIDATE:-${_comet_script_dir}/comet-yaml-validate.sh}"
|
|
19
|
+
|
|
20
|
+
_comet_env_fail() {
|
|
21
|
+
echo "ERROR: Comet scripts not found. Ensure the comet skill is installed completely." >&2
|
|
22
|
+
echo "Expected path pattern: */comet/scripts/comet-*.sh under project or platform skill directories" >&2
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
_comet_env_abort() {
|
|
26
|
+
local _comet_env_was_sourced="$_comet_env_sourced"
|
|
27
|
+
unset _comet_env_source _comet_script_dir _comet_script _comet_env_missing _comet_env_sourced
|
|
28
|
+
unset -f _comet_env_fail
|
|
29
|
+
if [ "$_comet_env_was_sourced" -eq 1 ]; then
|
|
30
|
+
unset -f _comet_env_abort
|
|
31
|
+
return 1
|
|
32
|
+
fi
|
|
33
|
+
exit 1
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
_comet_env_missing=0
|
|
37
|
+
for _comet_script in \
|
|
38
|
+
"$COMET_GUARD" \
|
|
39
|
+
"$COMET_STATE" \
|
|
40
|
+
"$COMET_HANDOFF" \
|
|
41
|
+
"$COMET_ARCHIVE" \
|
|
42
|
+
"$COMET_YAML_VALIDATE"; do
|
|
43
|
+
if [ ! -f "$_comet_script" ]; then
|
|
44
|
+
_comet_env_fail
|
|
45
|
+
_comet_env_missing=1
|
|
46
|
+
break
|
|
47
|
+
fi
|
|
48
|
+
done
|
|
49
|
+
|
|
50
|
+
if [ "$_comet_env_missing" -ne 0 ]; then
|
|
51
|
+
_comet_env_abort
|
|
52
|
+
else
|
|
53
|
+
unset _comet_env_source _comet_script_dir _comet_script _comet_env_missing _comet_env_sourced
|
|
54
|
+
unset -f _comet_env_fail _comet_env_abort
|
|
55
|
+
fi
|
|
@@ -271,8 +271,8 @@ cmd_set() {
|
|
|
271
271
|
red "Valid fields:" >&2
|
|
272
272
|
red " workflow, phase, design_doc, plan, build_mode, isolation," >&2
|
|
273
273
|
red " verify_mode, verify_result, verification_report, branch_status," >&2
|
|
274
|
-
red " verified_at, archived,
|
|
275
|
-
red " verify_command, handoff_context, handoff_hash" >&2
|
|
274
|
+
red " verified_at, created_at, archived, base_ref, direct_override," >&2
|
|
275
|
+
red " build_command, verify_command, handoff_context, handoff_hash" >&2
|
|
276
276
|
exit 1
|
|
277
277
|
;;
|
|
278
278
|
esac
|
|
@@ -18,8 +18,12 @@ description: "Comet Phase 5: Archive. Invoke with /comet-archive. Sync delta spe
|
|
|
18
18
|
Execute entry verification:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
22
|
+
if [ -z "$COMET_ENV" ]; then
|
|
23
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
24
|
+
return 1
|
|
25
|
+
fi
|
|
26
|
+
. "$COMET_ENV"
|
|
23
27
|
bash "$COMET_STATE" check <name> archive
|
|
24
28
|
```
|
|
25
29
|
|
|
@@ -17,9 +17,12 @@ description: "Comet Phase 3: Plan and Build. Invoke with /comet-build. Create pl
|
|
|
17
17
|
Execute entry verification:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
21
|
+
if [ -z "$COMET_ENV" ]; then
|
|
22
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
23
|
+
return 1
|
|
24
|
+
fi
|
|
25
|
+
. "$COMET_ENV"
|
|
23
26
|
bash "$COMET_STATE" check <name> build
|
|
24
27
|
```
|
|
25
28
|
|
|
@@ -85,7 +88,7 @@ Plan has been written to the current branch. Before starting execution, **ask th
|
|
|
85
88
|
- Task count ≤ 2 and no cross-module dependencies → Recommend B
|
|
86
89
|
- From hotfix path → Recommend B
|
|
87
90
|
|
|
88
|
-
This is a user decision point. Must pause and wait for the user to explicitly choose both isolation method and execution method. **
|
|
91
|
+
This is a user decision point. Must pause and wait for the user to explicitly choose both isolation method and execution method. You **must not choose `branch` or `worktree` based on recommendation rules**, and **must not choose the execution method based on recommendation rules**. Recommendation rules are for suggestion only, not a substitute for user confirmation.
|
|
89
92
|
|
|
90
93
|
After user selection, update `isolation` and `build_mode` fields:
|
|
91
94
|
|
|
@@ -17,10 +17,12 @@ description: "Comet Phase 2: Deep Design. Invoke with /comet-design. Produce Des
|
|
|
17
17
|
Execute entry verification:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
21
|
+
if [ -z "$COMET_ENV" ]; then
|
|
22
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
23
|
+
return 1
|
|
24
|
+
fi
|
|
25
|
+
. "$COMET_ENV"
|
|
24
26
|
bash "$COMET_STATE" check <name> design
|
|
25
27
|
```
|
|
26
28
|
|
|
@@ -23,10 +23,12 @@ Execution chain: open → build → root cause check → verify → archive. Hot
|
|
|
23
23
|
Locate Comet scripts before starting:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
27
|
+
if [ -z "$COMET_ENV" ]; then
|
|
28
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
29
|
+
return 1
|
|
30
|
+
fi
|
|
31
|
+
. "$COMET_ENV"
|
|
30
32
|
```
|
|
31
33
|
|
|
32
34
|
### 1. Quick Open (preset open)
|
|
@@ -124,9 +126,9 @@ If there is delta spec, sync to main spec according to comet-archive rules, and
|
|
|
124
126
|
<IMPORTANT>
|
|
125
127
|
Hotfix workflow is **one-time continuous execution**. After invoking `/comet-hotfix`, agent must automatically advance through hotfix steps, without pausing to wait for user input mid-way. But the following situations must pause and wait for user confirmation:
|
|
126
128
|
|
|
127
|
-
1. Encountering upgrade conditions (see "Upgrade Conditions" section)
|
|
128
|
-
2.
|
|
129
|
-
3.
|
|
129
|
+
1. Encountering upgrade conditions (see "Upgrade Conditions" section). Handle through the upgrade-condition blocking confirmation
|
|
130
|
+
2. workspace isolation and execution-method selection when tasks exceed 3 and transfer to `/comet-build`
|
|
131
|
+
3. verify phase (comet-verify) verification-failure and branch-handling decisions
|
|
130
132
|
|
|
131
133
|
Execution order: quick open → direct build → root cause check → verification → archive → complete
|
|
132
134
|
|
|
@@ -147,7 +149,7 @@ Upgrade to full `/comet` when **any** of the following conditions are met:
|
|
|
147
149
|
| Introduces new public API | Fix creates new external interface |
|
|
148
150
|
| Fix scope exceeds single function/module | Requires coordinated changes |
|
|
149
151
|
|
|
150
|
-
When upgrade conditions are met, must pause and wait for user to explicitly confirm
|
|
152
|
+
When upgrade conditions are met, must pause and wait for the user to explicitly confirm upgrading to the full `/comet` workflow. Do not directly enter `/comet-design`, and do not automatically supplement Design Doc.
|
|
151
153
|
|
|
152
154
|
After user confirms upgrade, **must first update the workflow field** before entering full flow:
|
|
153
155
|
|
|
@@ -155,7 +157,7 @@ After user confirms upgrade, **must first update the workflow field** before ent
|
|
|
155
157
|
bash "$COMET_STATE" set <name> workflow full
|
|
156
158
|
```
|
|
157
159
|
|
|
158
|
-
Then on current change basis, supplement Design Doc: **
|
|
160
|
+
Then on current change basis, supplement Design Doc: **Immediately use the Skill tool to load the `comet-design` skill**, proceed normally with full workflow. If user does not confirm upgrade, stop hotfix and report that current change has exceeded hotfix scope.
|
|
159
161
|
|
|
160
162
|
---
|
|
161
163
|
|
|
@@ -35,9 +35,12 @@ openspec/changes/<name>/
|
|
|
35
35
|
Create `.comet.yaml` state file:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
39
|
+
if [ -z "$COMET_ENV" ]; then
|
|
40
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
41
|
+
return 1
|
|
42
|
+
fi
|
|
43
|
+
. "$COMET_ENV"
|
|
41
44
|
|
|
42
45
|
if [ -z "$COMET_STATE" ] || [ -z "$COMET_GUARD" ]; then
|
|
43
46
|
echo "ERROR: Comet scripts not found. Ensure the comet skill is installed." >&2
|
|
@@ -26,10 +26,12 @@ Execution chain: open → lightweight build → light verify → archive. Tweak
|
|
|
26
26
|
Locate Comet scripts before starting:
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
30
|
+
if [ -z "$COMET_ENV" ]; then
|
|
31
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
32
|
+
return 1
|
|
33
|
+
fi
|
|
34
|
+
. "$COMET_ENV"
|
|
33
35
|
```
|
|
34
36
|
|
|
35
37
|
### 1. Quick Open (preset open)
|
|
@@ -109,8 +111,8 @@ Reuse `/comet-archive`. Must satisfy `verify_result: pass` in `.comet.yaml` befo
|
|
|
109
111
|
<IMPORTANT>
|
|
110
112
|
Tweak workflow is **one-time continuous execution**. After invoking `/comet-tweak`, agent must automatically advance through tweak steps, without pausing to wait for user input mid-way. But the following situations must pause and wait for user confirmation:
|
|
111
113
|
|
|
112
|
-
1. Encountering upgrade conditions (see "Upgrade Conditions" section)
|
|
113
|
-
2.
|
|
114
|
+
1. Encountering upgrade conditions (see "Upgrade Conditions" section). Handle through the upgrade-condition blocking confirmation
|
|
115
|
+
2. verify phase (comet-verify) verification-failure and branch-handling decisions
|
|
114
116
|
|
|
115
117
|
Execution order: quick open → lightweight build → lightweight verification → archive → complete
|
|
116
118
|
|
|
@@ -132,7 +134,7 @@ Upgrade to full `/comet` when **any** of the following conditions are met:
|
|
|
132
134
|
| New capability needed | Exceeds local optimization |
|
|
133
135
|
| Delta spec needed | Affects existing specs |
|
|
134
136
|
|
|
135
|
-
When upgrade conditions are met, must pause and wait for user to explicitly confirm
|
|
137
|
+
When upgrade conditions are met, must pause and wait for the user to explicitly confirm upgrading to the full `/comet` workflow. Do not directly enter `/comet-design`, and do not automatically supplement Design Doc.
|
|
136
138
|
|
|
137
139
|
After user confirms upgrade, **must first update the workflow field** before entering full flow:
|
|
138
140
|
|
|
@@ -140,7 +142,7 @@ After user confirms upgrade, **must first update the workflow field** before ent
|
|
|
140
142
|
bash "$COMET_STATE" set <name> workflow full
|
|
141
143
|
```
|
|
142
144
|
|
|
143
|
-
Then on current change basis, supplement Design Doc: **
|
|
145
|
+
Then on current change basis, supplement Design Doc: **Immediately use the Skill tool to load the `comet-design` skill**, proceed normally with full workflow. If user does not confirm upgrade, stop tweak and report that current change has exceeded tweak scope.
|
|
144
146
|
|
|
145
147
|
---
|
|
146
148
|
|
|
@@ -17,9 +17,12 @@ description: "Comet Phase 4: Verify and Close. Invoke with /comet-verify. Verify
|
|
|
17
17
|
Execute entry verification:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
21
|
+
if [ -z "$COMET_ENV" ]; then
|
|
22
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
23
|
+
return 1
|
|
24
|
+
fi
|
|
25
|
+
. "$COMET_ENV"
|
|
23
26
|
bash "$COMET_STATE" check <change-name> verify
|
|
24
27
|
```
|
|
25
28
|
|
|
@@ -110,7 +110,7 @@ agent 做决策只需读本节,参考附录按需查阅。
|
|
|
110
110
|
需要用户参与的节点(仅在这些节点暂停):
|
|
111
111
|
1. brainstorming 确认设计方案
|
|
112
112
|
2. build 阶段选择工作方式(隔离方式 + 执行方式,一次交互完成)
|
|
113
|
-
|
|
113
|
+
3. verify 不通过时决定修复或接受偏差(含 Spec 漂移处理方式选择)
|
|
114
114
|
4. finishing-branch 选择分支处理方式
|
|
115
115
|
5. 遇到升级条件(hotfix/tweak → 完整流程)
|
|
116
116
|
6. build 阶段范围扩张需重新设计或拆分新 change
|
|
@@ -206,11 +206,12 @@ archived: false
|
|
|
206
206
|
Comet 脚本随 skill 包分发在 `comet/scripts/` 下。**不硬编码路径** — 定位一次,缓存到环境变量:
|
|
207
207
|
|
|
208
208
|
```bash
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
209
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
210
|
+
if [ -z "$COMET_ENV" ]; then
|
|
211
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
212
|
+
return 1
|
|
213
|
+
fi
|
|
214
|
+
. "$COMET_ENV"
|
|
214
215
|
|
|
215
216
|
# 脚本定位失败时停止流程
|
|
216
217
|
if [ -z "$COMET_GUARD" ] || [ -z "$COMET_STATE" ] || [ -z "$COMET_HANDOFF" ] || [ -z "$COMET_ARCHIVE" ]; then
|
|
@@ -18,8 +18,12 @@ description: "Comet 阶段 5:归档。用 /comet-archive 调用。同步 delta
|
|
|
18
18
|
执行入口验证:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
22
|
+
if [ -z "$COMET_ENV" ]; then
|
|
23
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
24
|
+
return 1
|
|
25
|
+
fi
|
|
26
|
+
. "$COMET_ENV"
|
|
23
27
|
bash "$COMET_STATE" check <name> archive
|
|
24
28
|
```
|
|
25
29
|
|
|
@@ -17,9 +17,12 @@ description: "Comet 阶段 3:计划与构建。用 /comet-build 调用。制
|
|
|
17
17
|
执行入口验证:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
21
|
+
if [ -z "$COMET_ENV" ]; then
|
|
22
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
23
|
+
return 1
|
|
24
|
+
fi
|
|
25
|
+
. "$COMET_ENV"
|
|
23
26
|
bash "$COMET_STATE" check <name> build
|
|
24
27
|
```
|
|
25
28
|
|
|
@@ -17,10 +17,12 @@ description: "Comet 阶段 2:深度设计。用 /comet-design 调用。通过
|
|
|
17
17
|
执行入口验证:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
21
|
+
if [ -z "$COMET_ENV" ]; then
|
|
22
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
23
|
+
return 1
|
|
24
|
+
fi
|
|
25
|
+
. "$COMET_ENV"
|
|
24
26
|
bash "$COMET_STATE" check <name> design
|
|
25
27
|
```
|
|
26
28
|
|
|
@@ -16,17 +16,19 @@ description: "Comet 预设路径:Bug fix / 热修复。跳过 brainstorming,
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
-
## 流程(preset workflow,
|
|
19
|
+
## 流程(preset workflow,5 阶段)
|
|
20
20
|
|
|
21
21
|
执行链路:open → build → verify → archive。Hotfix 为每个阶段提供默认决策:精简开启、直接构建、按规模验证、验证通过后归档。
|
|
22
22
|
|
|
23
23
|
开始前先定位 Comet 脚本:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
27
|
+
if [ -z "$COMET_ENV" ]; then
|
|
28
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
29
|
+
return 1
|
|
30
|
+
fi
|
|
31
|
+
. "$COMET_ENV"
|
|
30
32
|
```
|
|
31
33
|
|
|
32
34
|
### 1. 快速开启(preset open)
|
|
@@ -110,7 +112,7 @@ bash "$COMET_GUARD" <change-name> build --apply
|
|
|
110
112
|
|
|
111
113
|
验证通过后,按 `/comet-verify` 的规则将 `.comet.yaml` 的 `verify_result` 记录为 `pass`,归档前不得跳过该状态。
|
|
112
114
|
|
|
113
|
-
###
|
|
115
|
+
### 5. 归档(preset archive)
|
|
114
116
|
|
|
115
117
|
复用 `/comet-archive`。归档前必须满足 `.comet.yaml` 中 `verify_result: pass`。
|
|
116
118
|
|
|
@@ -128,7 +130,7 @@ Hotfix 流程为 **一次性连续执行**。调用 `/comet-hotfix` 后,agent
|
|
|
128
130
|
2. 任务超过 3 个转入 `/comet-build` 时的工作区隔离和执行方式选择
|
|
129
131
|
3. 验证阶段(comet-verify)的验证失败决策和分支处理决策
|
|
130
132
|
|
|
131
|
-
执行顺序:快速开启 → 直接构建 → 验证 → 归档 → 完成
|
|
133
|
+
执行顺序:快速开启 → 直接构建 → 根因消除检查 → 验证 → 归档 → 完成
|
|
132
134
|
|
|
133
135
|
每个阶段完成后立即进入下一阶段。阶段内部仍必须按上文要求调用对应 Comet/OpenSpec/Superpowers skill,被调用的 skill 如有自己的用户决策点,按该 skill 规则执行。
|
|
134
136
|
</IMPORTANT>
|
|
@@ -35,9 +35,12 @@ openspec/changes/<name>/
|
|
|
35
35
|
创建 `.comet.yaml` 状态文件:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
39
|
+
if [ -z "$COMET_ENV" ]; then
|
|
40
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
41
|
+
return 1
|
|
42
|
+
fi
|
|
43
|
+
. "$COMET_ENV"
|
|
41
44
|
|
|
42
45
|
if [ -z "$COMET_STATE" ] || [ -z "$COMET_GUARD" ]; then
|
|
43
46
|
echo "ERROR: Comet scripts not found. Ensure the comet skill is installed." >&2
|
|
@@ -26,10 +26,12 @@ Tweak 是 Comet 五阶段能力的预设工作流,不是独立的平行流程
|
|
|
26
26
|
开始前先定位 Comet 脚本:
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
30
|
+
if [ -z "$COMET_ENV" ]; then
|
|
31
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
32
|
+
return 1
|
|
33
|
+
fi
|
|
34
|
+
. "$COMET_ENV"
|
|
33
35
|
```
|
|
34
36
|
|
|
35
37
|
### 1. 快速开启(preset open)
|
|
@@ -17,9 +17,12 @@ description: "Comet 阶段 4:验证与收尾。用 /comet-verify 调用。验
|
|
|
17
17
|
执行入口验证:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
COMET_ENV="${COMET_ENV:-$(find . "$HOME"/.*/skills "$HOME/.config" "$HOME/.gemini" -path '*/comet/scripts/comet-env.sh' -type f -print -quit 2>/dev/null)}"
|
|
21
|
+
if [ -z "$COMET_ENV" ]; then
|
|
22
|
+
echo "ERROR: comet-env.sh not found. Ensure the comet skill is installed." >&2
|
|
23
|
+
return 1
|
|
24
|
+
fi
|
|
25
|
+
. "$COMET_ENV"
|
|
23
26
|
bash "$COMET_STATE" check <change-name> verify
|
|
24
27
|
```
|
|
25
28
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-error.d.ts","sourceRoot":"","sources":["../../src/core/command-error.ts"],"names":[],"mappings":"AA2BA,iBAAS,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CA+B3D;AAED,iBAAS,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,GAAG,IAAI,CAIvE;AAED,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const ESC = String.fromCharCode(27);
|
|
2
|
+
const ANSI_ESCAPE_PATTERN = new RegExp(`${ESC}\\[[0-9;?]*[a-zA-Z]`, 'g');
|
|
3
|
+
const LOOSE_ESCAPE_PATTERN = new RegExp(`${ESC}\\[[^a-zA-Z\\r\\n]*`, 'g');
|
|
4
|
+
function streamToText(stream) {
|
|
5
|
+
if (!stream)
|
|
6
|
+
return '';
|
|
7
|
+
return Buffer.isBuffer(stream) ? stream.toString() : stream;
|
|
8
|
+
}
|
|
9
|
+
function cleanCommandOutput(output) {
|
|
10
|
+
return output
|
|
11
|
+
.replace(ANSI_ESCAPE_PATTERN, '')
|
|
12
|
+
.replace(LOOSE_ESCAPE_PATTERN, '')
|
|
13
|
+
.split('\n')
|
|
14
|
+
.map((line) => line.trimEnd())
|
|
15
|
+
.filter((line) => line.trim() && !/^(│|├|╮|╯|●|◇|◒|◐|◓|◑|■)/.test(line.trim()))
|
|
16
|
+
.join('\n')
|
|
17
|
+
.trim();
|
|
18
|
+
}
|
|
19
|
+
function formatCommandErrorDetails(error) {
|
|
20
|
+
const details = [];
|
|
21
|
+
if (!error || typeof error !== 'object') {
|
|
22
|
+
details.push('Unknown error occurred');
|
|
23
|
+
return details;
|
|
24
|
+
}
|
|
25
|
+
const commandError = error;
|
|
26
|
+
for (const [label, stream] of [
|
|
27
|
+
['stderr', commandError.stderr],
|
|
28
|
+
['stdout', commandError.stdout],
|
|
29
|
+
]) {
|
|
30
|
+
const cleaned = cleanCommandOutput(streamToText(stream));
|
|
31
|
+
if (cleaned) {
|
|
32
|
+
details.push(`${label}:\n${cleaned}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (details.length === 0) {
|
|
36
|
+
const reason = commandError.killed
|
|
37
|
+
? 'Process was killed (likely timed out)'
|
|
38
|
+
: commandError.code === 'ETIMEDOUT'
|
|
39
|
+
? 'Process timed out'
|
|
40
|
+
: commandError.code === 'ENOENT'
|
|
41
|
+
? 'Command not found — check that the required CLI is installed and on PATH'
|
|
42
|
+
: 'No error output captured';
|
|
43
|
+
details.push(reason);
|
|
44
|
+
}
|
|
45
|
+
return details;
|
|
46
|
+
}
|
|
47
|
+
function printCommandErrorDetails(error, indent = ' ') {
|
|
48
|
+
for (const detail of formatCommandErrorDetails(error)) {
|
|
49
|
+
console.error(`${indent}${detail.split('\n').join(`\n${indent}`)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export { printCommandErrorDetails, formatCommandErrorDetails };
|
|
53
|
+
//# sourceMappingURL=command-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-error.js","sourceRoot":"","sources":["../../src/core/command-error.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,qBAAqB,EAAE,GAAG,CAAC,CAAC;AACzE,MAAM,oBAAoB,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,qBAAqB,EAAE,GAAG,CAAC,CAAC;AAS1E,SAAS,YAAY,CAAC,MAAmC;IACvD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9D,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,OAAO,MAAM;SACV,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAC9E,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,KAAqB,CAAC;IAE3C,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI;QAC5B,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC;QAC/B,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC;KACvB,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM;YAChC,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,WAAW;gBACjC,CAAC,CAAC,mBAAmB;gBACrB,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ;oBAC9B,CAAC,CAAC,0EAA0E;oBAC5E,CAAC,CAAC,0BAA0B,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc,EAAE,MAAM,GAAG,MAAM;IAC/D,KAAK,MAAM,MAAM,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEjF,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;
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEjF,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;AAWD,iBAAe,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAuBxE;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,EACnC,KAAK,GAAE,YAAwB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAqElB;AAED,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/core/detect.js
CHANGED
|
@@ -35,6 +35,14 @@ async function hasPluginSuperpowers() {
|
|
|
35
35
|
}
|
|
36
36
|
return false;
|
|
37
37
|
}
|
|
38
|
+
async function hasOpenCodeCometCommands(baseDir, skillsDir, entries) {
|
|
39
|
+
const cometEntries = entries.filter((entry) => entry.startsWith('comet'));
|
|
40
|
+
if (cometEntries.length === 0)
|
|
41
|
+
return false;
|
|
42
|
+
const commandsDir = path.join(baseDir, skillsDir, 'commands');
|
|
43
|
+
const commandEntries = await readDir(commandsDir);
|
|
44
|
+
return cometEntries.every((entry) => commandEntries.includes(`${entry}.md`));
|
|
45
|
+
}
|
|
38
46
|
async function detectPlatforms(projectPath) {
|
|
39
47
|
const detected = new Set();
|
|
40
48
|
for (const platform of PLATFORMS) {
|
|
@@ -61,9 +69,12 @@ async function detectPlatforms(projectPath) {
|
|
|
61
69
|
async function hasSkills(baseDir, platform, component, _selectedPlatforms = [], scope = 'project') {
|
|
62
70
|
const skillDirEntries = await Promise.all(getPlatformSkillsDirs(platform, scope).map(async (skillsDir) => {
|
|
63
71
|
const fullPath = path.join(baseDir, skillsDir, 'skills');
|
|
64
|
-
return
|
|
72
|
+
return {
|
|
73
|
+
skillsDir,
|
|
74
|
+
entries: (await fileExists(fullPath)) ? await readDir(fullPath) : [],
|
|
75
|
+
};
|
|
65
76
|
}));
|
|
66
|
-
const entries = skillDirEntries.
|
|
77
|
+
const entries = skillDirEntries.flatMap((dir) => dir.entries);
|
|
67
78
|
switch (component) {
|
|
68
79
|
case 'openspec':
|
|
69
80
|
if (entries.some((e) => e.startsWith('openspec-')))
|
|
@@ -74,6 +85,13 @@ async function hasSkills(baseDir, platform, component, _selectedPlatforms = [],
|
|
|
74
85
|
return true;
|
|
75
86
|
break;
|
|
76
87
|
case 'comet':
|
|
88
|
+
if (platform.id === 'opencode') {
|
|
89
|
+
for (const dir of skillDirEntries) {
|
|
90
|
+
if (await hasOpenCodeCometCommands(baseDir, dir.skillsDir, dir.entries))
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
77
95
|
if (entries.some((e) => e.startsWith('comet')))
|
|
78
96
|
return true;
|
|
79
97
|
break;
|
|
@@ -81,9 +99,12 @@ async function hasSkills(baseDir, platform, component, _selectedPlatforms = [],
|
|
|
81
99
|
if (scope === 'project' && baseDir !== os.homedir()) {
|
|
82
100
|
const globalSkillDirEntries = await Promise.all(getPlatformSkillsDirs(platform, 'global').map(async (skillsDir) => {
|
|
83
101
|
const fullPath = path.join(os.homedir(), skillsDir, 'skills');
|
|
84
|
-
return
|
|
102
|
+
return {
|
|
103
|
+
skillsDir,
|
|
104
|
+
entries: (await fileExists(fullPath)) ? await readDir(fullPath) : [],
|
|
105
|
+
};
|
|
85
106
|
}));
|
|
86
|
-
const globalEntries = globalSkillDirEntries.
|
|
107
|
+
const globalEntries = globalSkillDirEntries.flatMap((dir) => dir.entries);
|
|
87
108
|
switch (component) {
|
|
88
109
|
case 'openspec':
|
|
89
110
|
if (globalEntries.some((e) => e.startsWith('openspec-')))
|
|
@@ -94,6 +115,14 @@ async function hasSkills(baseDir, platform, component, _selectedPlatforms = [],
|
|
|
94
115
|
return true;
|
|
95
116
|
break;
|
|
96
117
|
case 'comet':
|
|
118
|
+
if (platform.id === 'opencode') {
|
|
119
|
+
for (const dir of globalSkillDirEntries) {
|
|
120
|
+
if (await hasOpenCodeCometCommands(os.homedir(), dir.skillsDir, dir.entries)) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
97
126
|
if (globalEntries.some((e) => e.startsWith('comet')))
|
|
98
127
|
return true;
|
|
99
128
|
break;
|
package/dist/core/detect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/core/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openspec.d.ts","sourceRoot":"","sources":["../../src/core/openspec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openspec.d.ts","sourceRoot":"","sources":["../../src/core/openspec.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiB/C,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAK1F;AAED,iBAAS,wBAAwB,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,YAAY,EACnB,OAAO,SAAe,EACtB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAGR;AAmCD,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQpD;AAsBD,iBAAe,eAAe,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,CAkC7C;AAED,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/core/openspec.js
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
|
+
import fs from 'fs';
|
|
2
3
|
import os from 'os';
|
|
4
|
+
import path from 'path';
|
|
3
5
|
import { PLATFORMS } from './platforms.js';
|
|
6
|
+
import { printCommandErrorDetails } from './command-error.js';
|
|
4
7
|
const VALID_TOOL_IDS = new Set(PLATFORMS.map((p) => p.openspecToolId));
|
|
8
|
+
const ALL_OPENSPEC_WORKFLOWS = [
|
|
9
|
+
'propose',
|
|
10
|
+
'explore',
|
|
11
|
+
'new',
|
|
12
|
+
'continue',
|
|
13
|
+
'apply',
|
|
14
|
+
'ff',
|
|
15
|
+
'sync',
|
|
16
|
+
'archive',
|
|
17
|
+
'bulk-archive',
|
|
18
|
+
'verify',
|
|
19
|
+
'onboard',
|
|
20
|
+
];
|
|
5
21
|
function quoteShellArg(value, platform = process.platform) {
|
|
6
22
|
if (platform === 'win32') {
|
|
7
23
|
return `"${value.replace(/"/g, '\\"').replace(/\\+$/, (match) => match + match)}"`;
|
|
@@ -10,7 +26,31 @@ function quoteShellArg(value, platform = process.platform) {
|
|
|
10
26
|
}
|
|
11
27
|
function buildOpenSpecInitCommand(projectPath, toolIds, scope, homeDir = os.homedir(), platform = process.platform) {
|
|
12
28
|
const targetPath = scope === 'global' ? homeDir : projectPath;
|
|
13
|
-
return `openspec init ${quoteShellArg(targetPath, platform)} --tools ${quoteShellArg(toolIds.join(','), platform)}`;
|
|
29
|
+
return `openspec init ${quoteShellArg(targetPath, platform)} --tools ${quoteShellArg(toolIds.join(','), platform)} --profile custom`;
|
|
30
|
+
}
|
|
31
|
+
function createOpenSpecAllWorkflowsEnv() {
|
|
32
|
+
const configHome = fs.mkdtempSync(path.join(os.tmpdir(), 'comet-openspec-profile-'));
|
|
33
|
+
try {
|
|
34
|
+
const openspecConfigDir = path.join(configHome, 'openspec');
|
|
35
|
+
fs.mkdirSync(openspecConfigDir, { recursive: true });
|
|
36
|
+
fs.writeFileSync(path.join(openspecConfigDir, 'config.json'), JSON.stringify({
|
|
37
|
+
featureFlags: {},
|
|
38
|
+
profile: 'custom',
|
|
39
|
+
delivery: 'both',
|
|
40
|
+
workflows: [...ALL_OPENSPEC_WORKFLOWS],
|
|
41
|
+
}, null, 2) + '\n', 'utf-8');
|
|
42
|
+
return {
|
|
43
|
+
configHome,
|
|
44
|
+
env: {
|
|
45
|
+
...process.env,
|
|
46
|
+
XDG_CONFIG_HOME: configHome,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
fs.rmSync(configHome, { recursive: true, force: true });
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
14
54
|
}
|
|
15
55
|
function isCommandAvailable(command) {
|
|
16
56
|
try {
|
|
@@ -36,6 +76,7 @@ async function ensureOpenSpecCli(scope, projectPath) {
|
|
|
36
76
|
}
|
|
37
77
|
catch (error) {
|
|
38
78
|
console.error(` Failed to install OpenSpec CLI: ${error.message}`);
|
|
79
|
+
printCommandErrorDetails(error);
|
|
39
80
|
return false;
|
|
40
81
|
}
|
|
41
82
|
}
|
|
@@ -49,9 +90,13 @@ async function installOpenSpec(projectPath, toolIds, scope) {
|
|
|
49
90
|
if (unknownIds.length > 0) {
|
|
50
91
|
throw new Error(`Unknown tool IDs: ${unknownIds.join(', ')}`);
|
|
51
92
|
}
|
|
93
|
+
let configHome;
|
|
52
94
|
try {
|
|
95
|
+
const openspecEnv = createOpenSpecAllWorkflowsEnv();
|
|
96
|
+
configHome = openspecEnv.configHome;
|
|
53
97
|
execSync(buildOpenSpecInitCommand(projectPath, toolIds, scope), {
|
|
54
98
|
cwd: projectPath,
|
|
99
|
+
env: openspecEnv.env,
|
|
55
100
|
stdio: 'pipe',
|
|
56
101
|
timeout: 120_000,
|
|
57
102
|
});
|
|
@@ -59,8 +104,14 @@ async function installOpenSpec(projectPath, toolIds, scope) {
|
|
|
59
104
|
}
|
|
60
105
|
catch (error) {
|
|
61
106
|
console.error(` OpenSpec init failed: ${error.message}`);
|
|
107
|
+
printCommandErrorDetails(error);
|
|
62
108
|
return 'failed';
|
|
63
109
|
}
|
|
110
|
+
finally {
|
|
111
|
+
if (configHome) {
|
|
112
|
+
fs.rmSync(configHome, { recursive: true, force: true });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
64
115
|
}
|
|
65
116
|
export { installOpenSpec, isCommandAvailable, buildOpenSpecInitCommand, quoteShellArg };
|
|
66
117
|
//# sourceMappingURL=openspec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openspec.js","sourceRoot":"","sources":["../../src/core/openspec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"openspec.js","sourceRoot":"","sources":["../../src/core/openspec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platforms.d.ts","sourceRoot":"","sources":["../../src/core/platforms.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAKpF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAEvF;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"platforms.d.ts","sourceRoot":"","sources":["../../src/core/platforms.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAKpF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAEvF;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,EA0D/B,CAAC"}
|
package/dist/core/platforms.js
CHANGED
|
@@ -17,7 +17,13 @@ export const PLATFORMS = [
|
|
|
17
17
|
{ id: 'claude', name: 'Claude Code', skillsDir: '.claude', openspecToolId: 'claude' },
|
|
18
18
|
{ id: 'cursor', name: 'Cursor', skillsDir: '.cursor', openspecToolId: 'cursor' },
|
|
19
19
|
{ id: 'codex', name: 'Codex', skillsDir: '.codex', openspecToolId: 'codex' },
|
|
20
|
-
{
|
|
20
|
+
{
|
|
21
|
+
id: 'opencode',
|
|
22
|
+
name: 'OpenCode',
|
|
23
|
+
skillsDir: '.opencode',
|
|
24
|
+
globalSkillsDir: '.config/opencode',
|
|
25
|
+
openspecToolId: 'opencode',
|
|
26
|
+
},
|
|
21
27
|
{ id: 'windsurf', name: 'Windsurf', skillsDir: '.windsurf', openspecToolId: 'windsurf' },
|
|
22
28
|
{ id: 'cline', name: 'Cline', skillsDir: '.cline', openspecToolId: 'cline' },
|
|
23
29
|
{ id: 'roocode', name: 'RooCode', skillsDir: '.roo', openspecToolId: 'roocode' },
|
|
@@ -40,7 +46,13 @@ export const PLATFORMS = [
|
|
|
40
46
|
{ id: 'kilocode', name: 'Kilo Code', skillsDir: '.kilocode', openspecToolId: 'kilocode' },
|
|
41
47
|
{ id: 'auggie', name: 'Auggie (Augment CLI)', skillsDir: '.augment', openspecToolId: 'auggie' },
|
|
42
48
|
{ id: 'kiro', name: 'Kiro', skillsDir: '.kiro', openspecToolId: 'kiro' },
|
|
43
|
-
{
|
|
49
|
+
{
|
|
50
|
+
id: 'lingma',
|
|
51
|
+
name: 'Lingma',
|
|
52
|
+
skillsDir: '.lingma',
|
|
53
|
+
globalSkillsDir: '.lingma',
|
|
54
|
+
openspecToolId: 'lingma',
|
|
55
|
+
},
|
|
44
56
|
{ id: 'junie', name: 'Junie', skillsDir: '.junie', openspecToolId: 'junie' },
|
|
45
57
|
{ id: 'codebuddy', name: 'CodeBuddy Code', skillsDir: '.codebuddy', openspecToolId: 'codebuddy' },
|
|
46
58
|
{ id: 'costrict', name: 'CoStrict', skillsDir: '.cospec', openspecToolId: 'costrict' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../src/core/platforms.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,MAAM,UAAU,oBAAoB,CAAC,QAAkB,EAAE,KAAmB;IAC1E,IAAI,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC,eAAe,CAAC;IAClC,CAAC;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAkB,EAAE,KAAmB;IAC3E,OAAO,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE;IACrF,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE;IAChF,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE;IAC5E,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../src/core/platforms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,KAAK,cAAc,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAOF,iBAAS,YAAY,IAAI,MAAM,CAE9B;AAED,iBAAe,0BAA0B,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,OAAO,EAClB,iBAAiB,GAAE,MAAiB,EACpC,KAAK,GAAE,YAAwB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAiD9C;AAgED,iBAAe,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAI/C;AAED,iBAAe,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGpD;AAED,iBAAe,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASnE;AAED,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,CAAC;AACF,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/core/skills.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
|
+
import { readFile, writeFile } from 'fs/promises';
|
|
2
3
|
import { fileURLToPath } from 'url';
|
|
3
4
|
import { fileExists, readJson, copyFile, ensureDir } from '../utils/file-system.js';
|
|
4
5
|
import { getPlatformSkillsDir } from './platforms.js';
|
|
5
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
7
|
const __dirname = path.dirname(__filename);
|
|
8
|
+
const OPENCODE_COMMAND_HEADER = `---
|
|
9
|
+
description: Run the {skillName} Comet workflow
|
|
10
|
+
---
|
|
11
|
+
`;
|
|
7
12
|
function getAssetsDir() {
|
|
8
13
|
return path.resolve(__dirname, '..', '..', 'assets');
|
|
9
14
|
}
|
|
@@ -36,8 +41,61 @@ async function copyCometSkillsForPlatform(baseDir, platform, overwrite, language
|
|
|
36
41
|
console.error(` Failed to copy ${skillRelPath}: ${err.message}`);
|
|
37
42
|
}
|
|
38
43
|
}
|
|
44
|
+
if (platform.id === 'opencode') {
|
|
45
|
+
const result = await createOpenCodeCommands(baseDir, platform, manifest.skills, overwrite, scope, languageSkillsDir);
|
|
46
|
+
copied += result.copied;
|
|
47
|
+
skippedCount += result.skipped;
|
|
48
|
+
}
|
|
39
49
|
return { copied, skipped: skippedCount };
|
|
40
50
|
}
|
|
51
|
+
function stripFrontmatter(content) {
|
|
52
|
+
if (!content.startsWith('---\n') && !content.startsWith('---\r\n')) {
|
|
53
|
+
return content.trimStart();
|
|
54
|
+
}
|
|
55
|
+
const normalized = content.replace(/\r\n/g, '\n');
|
|
56
|
+
const end = normalized.indexOf('\n---\n', 4);
|
|
57
|
+
if (end === -1)
|
|
58
|
+
return content.trimStart();
|
|
59
|
+
return normalized.slice(end + '\n---\n'.length).trimStart();
|
|
60
|
+
}
|
|
61
|
+
async function createOpenCodeCommands(baseDir, platform, skillPaths, overwrite, scope, languageSkillsDir) {
|
|
62
|
+
let copied = 0;
|
|
63
|
+
let skipped = 0;
|
|
64
|
+
const assetsDir = getAssetsDir();
|
|
65
|
+
const commandsDir = path.join(baseDir, getPlatformSkillsDir(platform, scope), 'commands');
|
|
66
|
+
for (const skillPath of skillPaths) {
|
|
67
|
+
const parts = skillPath.split('/');
|
|
68
|
+
if (parts.length !== 2 || parts[1] !== 'SKILL.md')
|
|
69
|
+
continue;
|
|
70
|
+
const skillName = parts[0];
|
|
71
|
+
const dest = path.join(commandsDir, `${skillName}.md`);
|
|
72
|
+
if (!overwrite && (await fileExists(dest))) {
|
|
73
|
+
skipped++;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
await ensureDir(path.dirname(dest));
|
|
77
|
+
let skillSourcePath = path.join(assetsDir, languageSkillsDir, skillPath);
|
|
78
|
+
if (!(await fileExists(skillSourcePath))) {
|
|
79
|
+
skillSourcePath = path.join(assetsDir, 'skills', skillPath);
|
|
80
|
+
}
|
|
81
|
+
const skillBody = stripFrontmatter(await readFile(skillSourcePath, 'utf-8'));
|
|
82
|
+
const content = `${OPENCODE_COMMAND_HEADER.replace('{skillName}', skillName)}
|
|
83
|
+
Equivalent Comet skill: \`${skillName}\`
|
|
84
|
+
Command name: \`/${skillName}\`
|
|
85
|
+
|
|
86
|
+
Use the invocation arguments below as the user input for this workflow:
|
|
87
|
+
|
|
88
|
+
\`\`\`text
|
|
89
|
+
$ARGUMENTS
|
|
90
|
+
\`\`\`
|
|
91
|
+
|
|
92
|
+
${skillBody}
|
|
93
|
+
`;
|
|
94
|
+
await writeFile(dest, content, 'utf-8');
|
|
95
|
+
copied++;
|
|
96
|
+
}
|
|
97
|
+
return { copied, skipped };
|
|
98
|
+
}
|
|
41
99
|
async function readManifest() {
|
|
42
100
|
const assetsDir = getAssetsDir();
|
|
43
101
|
const manifestPath = path.join(assetsDir, 'manifest.json');
|
package/dist/core/skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAiB,MAAM,gBAAgB,CAAC;AAGrE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAc3C,MAAM,uBAAuB,GAAG;;;CAG/B,CAAC;AAEF,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,OAAe,EACf,QAAkB,EAClB,SAAkB,EAClB,oBAA4B,QAAQ,EACpC,QAAsB,SAAS;IAE/B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAE3D,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAW,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,uBAAuB,YAAY,6BAA6B,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAE1D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAE/F,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3C,YAAY,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1B,MAAM,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sBAAsB,YAAY,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,OAAO,EACP,QAAQ,EACR,QAAQ,CAAC,MAAM,EACf,SAAS,EACT,KAAK,EACL,iBAAiB,CAClB,CAAC;QACF,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QACxB,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC;IAE3C,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAAe,EACf,QAAkB,EAClB,UAAoB,EACpB,SAAkB,EAClB,KAAmB,EACnB,iBAAyB;IAEzB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;IAE1F,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU;YAAE,SAAS;QAE5D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;QAEvD,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACzC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC;4BACpD,SAAS;mBAClB,SAAS;;;;;;;;EAQ1B,SAAS;CACV,CAAC;QACE,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC;IACX,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC3D,OAAO,QAAQ,CAAW,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,OAAO,QAAQ,CAAC,MAAM,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,MAAM,IAAI,GAAG;QACX,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC;KACvD,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { InstallScope } from './types.js';
|
|
2
|
-
declare const SKILLS_AGENT_MAP: Record<string, string>;
|
|
2
|
+
declare const SKILLS_AGENT_MAP: Record<string, string | null>;
|
|
3
3
|
declare function buildSuperpowersInstallCommand(_projectPath: string, scope: InstallScope, platformIds: string[], platform?: NodeJS.Platform): string;
|
|
4
|
+
declare function buildLingmaSuperpowersStageCommand(platform?: NodeJS.Platform): string;
|
|
4
5
|
declare function installSuperpowersForPlatforms(projectPath: string, scope: InstallScope, platformIds: string[]): Promise<'installed' | 'failed' | 'skipped'>;
|
|
5
|
-
export { installSuperpowersForPlatforms, buildSuperpowersInstallCommand, SKILLS_AGENT_MAP };
|
|
6
|
+
export { installSuperpowersForPlatforms, buildSuperpowersInstallCommand, buildLingmaSuperpowersStageCommand, SKILLS_AGENT_MAP, };
|
|
6
7
|
//# sourceMappingURL=superpowers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../../src/core/superpowers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../../src/core/superpowers.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,QAAA,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA6BnD,CAAC;AAOF,iBAAS,8BAA8B,CACrC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAmBR;AAED,iBAAS,kCAAkC,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAEhG;AAkDD,iBAAe,8BAA8B,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,CAgC7C;AAED,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,kCAAkC,EAClC,gBAAgB,GACjB,CAAC"}
|
package/dist/core/superpowers.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { cp, mkdir, mkdtemp, readdir, rm } from 'fs/promises';
|
|
5
|
+
import { printCommandErrorDetails } from './command-error.js';
|
|
2
6
|
import { quoteShellArg } from './openspec.js';
|
|
7
|
+
import { getPlatformSkillsDir, PLATFORMS } from './platforms.js';
|
|
3
8
|
const SKILLS_AGENT_MAP = {
|
|
4
9
|
claude: 'claude-code',
|
|
5
10
|
cursor: 'cursor',
|
|
@@ -16,7 +21,7 @@ const SKILLS_AGENT_MAP = {
|
|
|
16
21
|
kilocode: 'kilo',
|
|
17
22
|
auggie: 'augment',
|
|
18
23
|
kiro: 'kiro-cli',
|
|
19
|
-
lingma:
|
|
24
|
+
lingma: null,
|
|
20
25
|
junie: 'junie',
|
|
21
26
|
codebuddy: 'codebuddy',
|
|
22
27
|
costrict: 'universal',
|
|
@@ -31,50 +36,95 @@ const SKILLS_AGENT_MAP = {
|
|
|
31
36
|
trae: 'trae',
|
|
32
37
|
};
|
|
33
38
|
const VALID_PLATFORM_IDS = new Set(Object.keys(SKILLS_AGENT_MAP));
|
|
34
|
-
const ANSI_ESCAPE_PATTERN = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*[a-zA-Z]`, 'g');
|
|
35
39
|
const SUPERPOWERS_INSTALL_TIMEOUT_MS = 300_000;
|
|
40
|
+
const LINGMA_PLATFORM_ID = 'lingma';
|
|
41
|
+
const LINGMA_STAGE_AGENT = 'claude-code';
|
|
36
42
|
function buildSuperpowersInstallCommand(_projectPath, scope, platformIds, platform = process.platform) {
|
|
37
43
|
const unknownIds = platformIds.filter((id) => !VALID_PLATFORM_IDS.has(id));
|
|
38
44
|
if (unknownIds.length > 0) {
|
|
39
45
|
throw new Error(`Unknown platform IDs: ${unknownIds.join(', ')}`);
|
|
40
46
|
}
|
|
41
|
-
const agentNames = [
|
|
47
|
+
const agentNames = [
|
|
48
|
+
...new Set(platformIds.map((id) => SKILLS_AGENT_MAP[id]).filter((name) => Boolean(name))),
|
|
49
|
+
];
|
|
42
50
|
if (agentNames.length === 0) {
|
|
43
|
-
throw new Error(`No
|
|
51
|
+
throw new Error(`No skills CLI agent names resolved for platforms: ${platformIds.join(', ')}`);
|
|
44
52
|
}
|
|
45
53
|
const agentFlags = agentNames.map((name) => `--agent ${quoteShellArg(name, platform)}`).join(' ');
|
|
46
54
|
const flags = ['-y', scope === 'global' ? '-g' : '', agentFlags].filter(Boolean).join(' ');
|
|
47
55
|
return `npx skills add obra/superpowers ${flags}`;
|
|
48
56
|
}
|
|
49
|
-
|
|
50
|
-
|
|
57
|
+
function buildLingmaSuperpowersStageCommand(platform = process.platform) {
|
|
58
|
+
return `npx skills add obra/superpowers -y --agent ${quoteShellArg(LINGMA_STAGE_AGENT, platform)}`;
|
|
59
|
+
}
|
|
60
|
+
async function copyDirectoryContents(srcDir, destDir) {
|
|
61
|
+
await mkdir(destDir, { recursive: true });
|
|
62
|
+
const entries = await readdir(srcDir, { withFileTypes: true });
|
|
63
|
+
for (const entry of entries) {
|
|
64
|
+
await cp(path.join(srcDir, entry.name), path.join(destDir, entry.name), {
|
|
65
|
+
recursive: true,
|
|
66
|
+
force: true,
|
|
67
|
+
dereference: true,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function installSuperpowersForLingma(projectPath, scope) {
|
|
72
|
+
const lingmaPlatform = PLATFORMS.find((platform) => platform.id === LINGMA_PLATFORM_ID);
|
|
73
|
+
if (!lingmaPlatform) {
|
|
74
|
+
console.error(' Superpowers install failed: Lingma platform is not registered');
|
|
75
|
+
return 'failed';
|
|
76
|
+
}
|
|
77
|
+
const tempDir = await mkdtemp(path.join(os.tmpdir(), 'comet-lingma-superpowers-'));
|
|
51
78
|
try {
|
|
52
|
-
execSync(
|
|
53
|
-
cwd:
|
|
79
|
+
execSync(buildLingmaSuperpowersStageCommand(), {
|
|
80
|
+
cwd: tempDir,
|
|
54
81
|
stdio: 'pipe',
|
|
55
82
|
timeout: SUPERPOWERS_INSTALL_TIMEOUT_MS,
|
|
56
83
|
});
|
|
84
|
+
const stagedSkillsDir = path.join(tempDir, '.claude', 'skills');
|
|
85
|
+
const baseDir = scope === 'global' ? os.homedir() : projectPath;
|
|
86
|
+
const lingmaSkillsDir = path.join(baseDir, getPlatformSkillsDir(lingmaPlatform, scope), 'skills');
|
|
87
|
+
await copyDirectoryContents(stagedSkillsDir, lingmaSkillsDir);
|
|
57
88
|
return 'installed';
|
|
58
89
|
}
|
|
59
90
|
catch (error) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const stderr = execError.stderr?.toString()?.trim();
|
|
63
|
-
if (stderr) {
|
|
64
|
-
const cleaned = stderr
|
|
65
|
-
.replace(ANSI_ESCAPE_PATTERN, '')
|
|
66
|
-
.replace(/\[999D\[J/g, '')
|
|
67
|
-
.replace(/\[\?25[hl]/g, '')
|
|
68
|
-
.split('\n')
|
|
69
|
-
.filter((line) => line.trim() && !/^(│|├|╮|╯|●|◇|◒|◐|◓|◑|■)/.test(line.trim()))
|
|
70
|
-
.join('\n')
|
|
71
|
-
.trim();
|
|
72
|
-
if (cleaned) {
|
|
73
|
-
console.error(` ${cleaned.split('\n').join('\n ')}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
91
|
+
console.error(` Lingma Superpowers install failed: ${error.message}`);
|
|
92
|
+
printCommandErrorDetails(error);
|
|
76
93
|
return 'failed';
|
|
77
94
|
}
|
|
95
|
+
finally {
|
|
96
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function installSuperpowersForPlatforms(projectPath, scope, platformIds) {
|
|
100
|
+
const unknownIds = platformIds.filter((id) => !VALID_PLATFORM_IDS.has(id));
|
|
101
|
+
if (unknownIds.length > 0) {
|
|
102
|
+
throw new Error(`Unknown platform IDs: ${unknownIds.join(', ')}`);
|
|
103
|
+
}
|
|
104
|
+
const skillsCliPlatformIds = platformIds.filter((id) => SKILLS_AGENT_MAP[id]);
|
|
105
|
+
const shouldInstallLingma = platformIds.includes(LINGMA_PLATFORM_ID);
|
|
106
|
+
let failed = false;
|
|
107
|
+
if (skillsCliPlatformIds.length > 0) {
|
|
108
|
+
const command = buildSuperpowersInstallCommand(projectPath, scope, skillsCliPlatformIds);
|
|
109
|
+
try {
|
|
110
|
+
execSync(command, {
|
|
111
|
+
cwd: projectPath,
|
|
112
|
+
stdio: 'pipe',
|
|
113
|
+
timeout: SUPERPOWERS_INSTALL_TIMEOUT_MS,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error(` Superpowers install failed: ${error.message}`);
|
|
118
|
+
printCommandErrorDetails(error);
|
|
119
|
+
failed = true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (shouldInstallLingma) {
|
|
123
|
+
const lingmaStatus = await installSuperpowersForLingma(projectPath, scope);
|
|
124
|
+
if (lingmaStatus === 'failed')
|
|
125
|
+
failed = true;
|
|
126
|
+
}
|
|
127
|
+
return failed ? 'failed' : 'installed';
|
|
78
128
|
}
|
|
79
|
-
export { installSuperpowersForPlatforms, buildSuperpowersInstallCommand, SKILLS_AGENT_MAP };
|
|
129
|
+
export { installSuperpowersForPlatforms, buildSuperpowersInstallCommand, buildLingmaSuperpowersStageCommand, SKILLS_AGENT_MAP, };
|
|
80
130
|
//# sourceMappingURL=superpowers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../src/core/superpowers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../src/core/superpowers.ts"],"names":[],"mappings":"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"}
|