@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.
Files changed (40) hide show
  1. package/assets/manifest.json +2 -1
  2. package/assets/skills/comet/SKILL.md +6 -5
  3. package/assets/skills/comet/scripts/comet-env.sh +55 -0
  4. package/assets/skills/comet/scripts/comet-state.sh +2 -2
  5. package/assets/skills/comet-archive/SKILL.md +6 -2
  6. package/assets/skills/comet-build/SKILL.md +7 -4
  7. package/assets/skills/comet-design/SKILL.md +6 -4
  8. package/assets/skills/comet-hotfix/SKILL.md +11 -9
  9. package/assets/skills/comet-open/SKILL.md +6 -3
  10. package/assets/skills/comet-tweak/SKILL.md +10 -8
  11. package/assets/skills/comet-verify/SKILL.md +6 -3
  12. package/assets/skills-zh/comet/SKILL.md +7 -6
  13. package/assets/skills-zh/comet-archive/SKILL.md +6 -2
  14. package/assets/skills-zh/comet-build/SKILL.md +6 -3
  15. package/assets/skills-zh/comet-design/SKILL.md +6 -4
  16. package/assets/skills-zh/comet-hotfix/SKILL.md +9 -7
  17. package/assets/skills-zh/comet-open/SKILL.md +6 -3
  18. package/assets/skills-zh/comet-tweak/SKILL.md +6 -4
  19. package/assets/skills-zh/comet-verify/SKILL.md +6 -3
  20. package/dist/core/command-error.d.ts +4 -0
  21. package/dist/core/command-error.d.ts.map +1 -0
  22. package/dist/core/command-error.js +53 -0
  23. package/dist/core/command-error.js.map +1 -0
  24. package/dist/core/detect.d.ts.map +1 -1
  25. package/dist/core/detect.js +33 -4
  26. package/dist/core/detect.js.map +1 -1
  27. package/dist/core/openspec.d.ts.map +1 -1
  28. package/dist/core/openspec.js +52 -1
  29. package/dist/core/openspec.js.map +1 -1
  30. package/dist/core/platforms.d.ts.map +1 -1
  31. package/dist/core/platforms.js +14 -2
  32. package/dist/core/platforms.js.map +1 -1
  33. package/dist/core/skills.d.ts.map +1 -1
  34. package/dist/core/skills.js +58 -0
  35. package/dist/core/skills.js.map +1 -1
  36. package/dist/core/superpowers.d.ts +3 -2
  37. package/dist/core/superpowers.d.ts.map +1 -1
  38. package/dist/core/superpowers.js +75 -25
  39. package/dist/core/superpowers.js.map +1 -1
  40. package/package.json +1 -1
@@ -1,8 +1,9 @@
1
1
  {
2
- "version": "0.3.1",
2
+ "version": "0.3.2",
3
3
  "skills": [
4
4
  "comet/SKILL.md",
5
5
  "comet/reference/dirty-worktree.md",
6
+ "comet/scripts/comet-env.sh",
6
7
  "comet/scripts/comet-guard.sh",
7
8
  "comet/scripts/comet-state.sh",
8
9
  "comet/scripts/comet-handoff.sh",
@@ -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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
210
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
211
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
212
- COMET_HANDOFF="${COMET_HANDOFF:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-handoff.sh' -type f -print -quit 2>/dev/null)}"
213
- COMET_ARCHIVE="${COMET_ARCHIVE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-archive.sh' -type f -print -quit 2>/dev/null)}"
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, direct_override, build_command," >&2
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
22
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
21
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
22
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
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. **Must not select based on recommendation rules**. Recommendation rules are for suggestion only, not a substitute for user confirmation.
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
21
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
22
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
23
- COMET_HANDOFF="${COMET_HANDOFF:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-handoff.sh' -type f -print -quit 2>/dev/null)}"
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
27
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
28
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
29
- COMET_ARCHIVE="${COMET_ARCHIVE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-archive.sh' -type f -print -quit 2>/dev/null)}"
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. When tasks exceed 3 and transfer to `/comet-build` for workspace isolation and execution method selection
129
- 3. Verification phase (comet-verify) verification failure decision and branch handling decision
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 upgrade to full `/comet` workflow. Must not directly enter `/comet-design`, must not automatically supplement Design Doc.
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: **immediately use Skill tool to load `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.
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
39
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
40
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
30
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
31
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
32
- COMET_ARCHIVE="${COMET_ARCHIVE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-archive.sh' -type f -print -quit 2>/dev/null)}"
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. Verification phase (comet-verify) verification failure decision and branch handling decision
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 upgrade to full `/comet` workflow. Must not directly enter `/comet-design`, must not automatically supplement Design Doc.
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: **immediately use Skill tool to load `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.
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
21
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
22
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
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
- 4. verify 不通过时决定修复或接受偏差(含 Spec 漂移处理方式选择)
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
210
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
211
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
212
- COMET_HANDOFF="${COMET_HANDOFF:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-handoff.sh' -type f -print -quit 2>/dev/null)}"
213
- COMET_ARCHIVE="${COMET_ARCHIVE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-archive.sh' -type f -print -quit 2>/dev/null)}"
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
22
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
21
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
22
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
21
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
22
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
23
- COMET_HANDOFF="${COMET_HANDOFF:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-handoff.sh' -type f -print -quit 2>/dev/null)}"
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,4 阶段)
19
+ ## 流程(preset workflow,5 阶段)
20
20
 
21
21
  执行链路:open → build → verify → archive。Hotfix 为每个阶段提供默认决策:精简开启、直接构建、按规模验证、验证通过后归档。
22
22
 
23
23
  开始前先定位 Comet 脚本:
24
24
 
25
25
  ```bash
26
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
27
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
28
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
29
- COMET_ARCHIVE="${COMET_ARCHIVE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-archive.sh' -type f -print -quit 2>/dev/null)}"
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
- ### 4. 归档(preset archive)
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
39
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
40
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
30
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
31
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
32
- COMET_ARCHIVE="${COMET_ARCHIVE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-archive.sh' -type f -print -quit 2>/dev/null)}"
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
- COMET_SEARCH_ROOTS=("." "$HOME/.claude/skills" "$HOME/.codex/skills" "$HOME/.cursor/skills")
21
- COMET_STATE="${COMET_STATE:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-state.sh' -type f -print -quit 2>/dev/null)}"
22
- COMET_GUARD="${COMET_GUARD:-$(find "${COMET_SEARCH_ROOTS[@]}" -path '*/comet/scripts/comet-guard.sh' -type f -print -quit 2>/dev/null)}"
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,4 @@
1
+ declare function formatCommandErrorDetails(error: unknown): string[];
2
+ declare function printCommandErrorDetails(error: unknown, indent?: string): void;
3
+ export { printCommandErrorDetails, formatCommandErrorDetails };
4
+ //# sourceMappingURL=command-error.d.ts.map
@@ -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;AAED,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,CAiDlB;AAED,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,CAAC"}
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"}
@@ -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 (await fileExists(fullPath)) ? readDir(fullPath) : [];
72
+ return {
73
+ skillsDir,
74
+ entries: (await fileExists(fullPath)) ? await readDir(fullPath) : [],
75
+ };
65
76
  }));
66
- const entries = skillDirEntries.flat();
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 (await fileExists(fullPath)) ? readDir(fullPath) : [];
102
+ return {
103
+ skillsDir,
104
+ entries: (await fileExists(fullPath)) ? await readDir(fullPath) : [],
105
+ };
85
106
  }));
86
- const globalEntries = globalSkillDirEntries.flat();
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;
@@ -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":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/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;AAED,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQpD;AAqBD,iBAAe,eAAe,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,CAyB7C;AAED,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,aAAa,EAAE,CAAC"}
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"}
@@ -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":"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"}
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,EA8C/B,CAAC"}
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"}
@@ -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
- { id: 'opencode', name: 'OpenCode', skillsDir: '.opencode', openspecToolId: 'opencode' },
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
- { id: 'lingma', name: 'Lingma', skillsDir: '.lingma', openspecToolId: 'lingma' },
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":"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"}
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":"AAIA,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;AAEF,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,CAoC9C;AAED,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"}
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"}
@@ -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');
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,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,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,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC3C,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
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
@@ -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":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,QAAA,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6B5C,CAAC;AAMF,iBAAS,8BAA8B,CACrC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAeR;AAED,iBAAe,8BAA8B,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,CA6B7C;AAED,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,CAAC"}
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"}
@@ -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: 'universal',
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 = [...new Set(platformIds.map((id) => SKILLS_AGENT_MAP[id]).filter(Boolean))];
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 valid agent names resolved for platforms: ${platformIds.join(', ')}`);
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
- async function installSuperpowersForPlatforms(projectPath, scope, platformIds) {
50
- const command = buildSuperpowersInstallCommand(projectPath, scope, platformIds);
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(command, {
53
- cwd: projectPath,
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
- const execError = error;
61
- console.error(` Superpowers install failed: ${execError.message}`);
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;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,gBAAgB,GAA2B;IAC/C,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,UAAU;IACpB,gBAAgB,EAAE,gBAAgB;IAClC,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,WAAW;IACvB,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,WAAW;IAClB,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,aAAa;IAC1B,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAClE,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;AAC5F,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAE/C,SAAS,8BAA8B,CACrC,YAAoB,EACpB,KAAmB,EACnB,WAAqB,EACrB,WAA4B,OAAO,CAAC,QAAQ;IAE5C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE/F,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3F,OAAO,mCAAmC,KAAK,EAAE,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,WAAmB,EACnB,KAAmB,EACnB,WAAqB;IAErB,MAAM,OAAO,GAAG,8BAA8B,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAEhF,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,EAAE;YAChB,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,8BAA8B;SACxC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,KAAoC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,mCAAmC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;QACpD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM;iBACnB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;iBAChC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;iBACzB,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;iBAC1B,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;iBAC9E,IAAI,CAAC,IAAI,CAAC;iBACV,IAAI,EAAE,CAAC;YACV,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../src/core/superpowers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpamis/comet",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "OpenSpec + Superpowers dual-star development workflow",
5
5
  "keywords": [
6
6
  "comet",