@exodus/openspec 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +203 -0
  3. package/bin/openspec.js +3 -0
  4. package/dist/cli/index.d.ts +2 -0
  5. package/dist/cli/index.js +482 -0
  6. package/dist/commands/change.d.ts +35 -0
  7. package/dist/commands/change.js +277 -0
  8. package/dist/commands/completion.d.ts +72 -0
  9. package/dist/commands/completion.js +257 -0
  10. package/dist/commands/config.d.ts +36 -0
  11. package/dist/commands/config.js +552 -0
  12. package/dist/commands/feedback.d.ts +9 -0
  13. package/dist/commands/feedback.js +183 -0
  14. package/dist/commands/schema.d.ts +6 -0
  15. package/dist/commands/schema.js +869 -0
  16. package/dist/commands/show.d.ts +14 -0
  17. package/dist/commands/show.js +132 -0
  18. package/dist/commands/spec.d.ts +15 -0
  19. package/dist/commands/spec.js +225 -0
  20. package/dist/commands/validate.d.ts +24 -0
  21. package/dist/commands/validate.js +294 -0
  22. package/dist/commands/workflow/index.d.ts +17 -0
  23. package/dist/commands/workflow/index.js +12 -0
  24. package/dist/commands/workflow/instructions.d.ts +29 -0
  25. package/dist/commands/workflow/instructions.js +381 -0
  26. package/dist/commands/workflow/new-change.d.ts +11 -0
  27. package/dist/commands/workflow/new-change.js +44 -0
  28. package/dist/commands/workflow/schemas.d.ts +10 -0
  29. package/dist/commands/workflow/schemas.js +34 -0
  30. package/dist/commands/workflow/shared.d.ts +57 -0
  31. package/dist/commands/workflow/shared.js +116 -0
  32. package/dist/commands/workflow/status.d.ts +14 -0
  33. package/dist/commands/workflow/status.js +75 -0
  34. package/dist/commands/workflow/templates.d.ts +16 -0
  35. package/dist/commands/workflow/templates.js +68 -0
  36. package/dist/core/archive.d.ts +11 -0
  37. package/dist/core/archive.js +318 -0
  38. package/dist/core/artifact-graph/graph.d.ts +56 -0
  39. package/dist/core/artifact-graph/graph.js +141 -0
  40. package/dist/core/artifact-graph/index.d.ts +7 -0
  41. package/dist/core/artifact-graph/index.js +13 -0
  42. package/dist/core/artifact-graph/instruction-loader.d.ts +143 -0
  43. package/dist/core/artifact-graph/instruction-loader.js +214 -0
  44. package/dist/core/artifact-graph/resolver.d.ts +81 -0
  45. package/dist/core/artifact-graph/resolver.js +257 -0
  46. package/dist/core/artifact-graph/schema.d.ts +13 -0
  47. package/dist/core/artifact-graph/schema.js +108 -0
  48. package/dist/core/artifact-graph/state.d.ts +12 -0
  49. package/dist/core/artifact-graph/state.js +54 -0
  50. package/dist/core/artifact-graph/types.d.ts +45 -0
  51. package/dist/core/artifact-graph/types.js +43 -0
  52. package/dist/core/available-tools.d.ts +16 -0
  53. package/dist/core/available-tools.js +30 -0
  54. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  55. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  56. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  57. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  58. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  59. package/dist/core/command-generation/adapters/auggie.js +27 -0
  60. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  61. package/dist/core/command-generation/adapters/claude.js +50 -0
  62. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  63. package/dist/core/command-generation/adapters/cline.js +27 -0
  64. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  65. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  66. package/dist/core/command-generation/adapters/codex.d.ts +16 -0
  67. package/dist/core/command-generation/adapters/codex.js +39 -0
  68. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  69. package/dist/core/command-generation/adapters/continue.js +28 -0
  70. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  71. package/dist/core/command-generation/adapters/costrict.js +27 -0
  72. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  73. package/dist/core/command-generation/adapters/crush.js +30 -0
  74. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  75. package/dist/core/command-generation/adapters/cursor.js +44 -0
  76. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  77. package/dist/core/command-generation/adapters/factory.js +27 -0
  78. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  79. package/dist/core/command-generation/adapters/gemini.js +26 -0
  80. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  81. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  82. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  83. package/dist/core/command-generation/adapters/iflow.js +29 -0
  84. package/dist/core/command-generation/adapters/index.d.ts +29 -0
  85. package/dist/core/command-generation/adapters/index.js +29 -0
  86. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  87. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  88. package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
  89. package/dist/core/command-generation/adapters/kiro.js +26 -0
  90. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  91. package/dist/core/command-generation/adapters/opencode.js +29 -0
  92. package/dist/core/command-generation/adapters/pi.d.ts +14 -0
  93. package/dist/core/command-generation/adapters/pi.js +41 -0
  94. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  95. package/dist/core/command-generation/adapters/qoder.js +30 -0
  96. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  97. package/dist/core/command-generation/adapters/qwen.js +26 -0
  98. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  99. package/dist/core/command-generation/adapters/roocode.js +27 -0
  100. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  101. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  102. package/dist/core/command-generation/generator.d.ts +21 -0
  103. package/dist/core/command-generation/generator.js +27 -0
  104. package/dist/core/command-generation/index.d.ts +22 -0
  105. package/dist/core/command-generation/index.js +24 -0
  106. package/dist/core/command-generation/registry.d.ts +36 -0
  107. package/dist/core/command-generation/registry.js +92 -0
  108. package/dist/core/command-generation/types.d.ts +56 -0
  109. package/dist/core/command-generation/types.js +8 -0
  110. package/dist/core/completions/command-registry.d.ts +7 -0
  111. package/dist/core/completions/command-registry.js +461 -0
  112. package/dist/core/completions/completion-provider.d.ts +60 -0
  113. package/dist/core/completions/completion-provider.js +102 -0
  114. package/dist/core/completions/factory.d.ts +64 -0
  115. package/dist/core/completions/factory.js +75 -0
  116. package/dist/core/completions/generators/bash-generator.d.ts +32 -0
  117. package/dist/core/completions/generators/bash-generator.js +174 -0
  118. package/dist/core/completions/generators/fish-generator.d.ts +32 -0
  119. package/dist/core/completions/generators/fish-generator.js +157 -0
  120. package/dist/core/completions/generators/powershell-generator.d.ts +33 -0
  121. package/dist/core/completions/generators/powershell-generator.js +207 -0
  122. package/dist/core/completions/generators/zsh-generator.d.ts +44 -0
  123. package/dist/core/completions/generators/zsh-generator.js +250 -0
  124. package/dist/core/completions/installers/bash-installer.d.ts +87 -0
  125. package/dist/core/completions/installers/bash-installer.js +318 -0
  126. package/dist/core/completions/installers/fish-installer.d.ts +43 -0
  127. package/dist/core/completions/installers/fish-installer.js +143 -0
  128. package/dist/core/completions/installers/powershell-installer.d.ts +88 -0
  129. package/dist/core/completions/installers/powershell-installer.js +327 -0
  130. package/dist/core/completions/installers/zsh-installer.d.ts +125 -0
  131. package/dist/core/completions/installers/zsh-installer.js +449 -0
  132. package/dist/core/completions/templates/bash-templates.d.ts +6 -0
  133. package/dist/core/completions/templates/bash-templates.js +24 -0
  134. package/dist/core/completions/templates/fish-templates.d.ts +7 -0
  135. package/dist/core/completions/templates/fish-templates.js +39 -0
  136. package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
  137. package/dist/core/completions/templates/powershell-templates.js +25 -0
  138. package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
  139. package/dist/core/completions/templates/zsh-templates.js +36 -0
  140. package/dist/core/completions/types.d.ts +79 -0
  141. package/dist/core/completions/types.js +2 -0
  142. package/dist/core/config-prompts.d.ts +9 -0
  143. package/dist/core/config-prompts.js +34 -0
  144. package/dist/core/config-schema.d.ts +86 -0
  145. package/dist/core/config-schema.js +213 -0
  146. package/dist/core/config.d.ts +17 -0
  147. package/dist/core/config.js +33 -0
  148. package/dist/core/converters/json-converter.d.ts +6 -0
  149. package/dist/core/converters/json-converter.js +51 -0
  150. package/dist/core/global-config.d.ts +44 -0
  151. package/dist/core/global-config.js +125 -0
  152. package/dist/core/index.d.ts +2 -0
  153. package/dist/core/index.js +3 -0
  154. package/dist/core/init.d.ts +38 -0
  155. package/dist/core/init.js +625 -0
  156. package/dist/core/legacy-cleanup.d.ts +162 -0
  157. package/dist/core/legacy-cleanup.js +512 -0
  158. package/dist/core/list.d.ts +9 -0
  159. package/dist/core/list.js +171 -0
  160. package/dist/core/migration.d.ts +23 -0
  161. package/dist/core/migration.js +108 -0
  162. package/dist/core/parsers/change-parser.d.ts +13 -0
  163. package/dist/core/parsers/change-parser.js +193 -0
  164. package/dist/core/parsers/markdown-parser.d.ts +22 -0
  165. package/dist/core/parsers/markdown-parser.js +187 -0
  166. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  167. package/dist/core/parsers/requirement-blocks.js +201 -0
  168. package/dist/core/profile-sync-drift.d.ts +38 -0
  169. package/dist/core/profile-sync-drift.js +200 -0
  170. package/dist/core/profiles.d.ts +26 -0
  171. package/dist/core/profiles.js +40 -0
  172. package/dist/core/project-config.d.ts +64 -0
  173. package/dist/core/project-config.js +223 -0
  174. package/dist/core/schemas/base.schema.d.ts +13 -0
  175. package/dist/core/schemas/base.schema.js +13 -0
  176. package/dist/core/schemas/change.schema.d.ts +73 -0
  177. package/dist/core/schemas/change.schema.js +31 -0
  178. package/dist/core/schemas/index.d.ts +4 -0
  179. package/dist/core/schemas/index.js +4 -0
  180. package/dist/core/schemas/spec.schema.d.ts +18 -0
  181. package/dist/core/schemas/spec.schema.js +15 -0
  182. package/dist/core/shared/index.d.ts +8 -0
  183. package/dist/core/shared/index.js +8 -0
  184. package/dist/core/shared/skill-generation.d.ts +49 -0
  185. package/dist/core/shared/skill-generation.js +96 -0
  186. package/dist/core/shared/tool-detection.d.ts +71 -0
  187. package/dist/core/shared/tool-detection.js +158 -0
  188. package/dist/core/specs-apply.d.ts +73 -0
  189. package/dist/core/specs-apply.js +384 -0
  190. package/dist/core/styles/palette.d.ts +7 -0
  191. package/dist/core/styles/palette.js +8 -0
  192. package/dist/core/templates/index.d.ts +8 -0
  193. package/dist/core/templates/index.js +9 -0
  194. package/dist/core/templates/skill-templates.d.ts +19 -0
  195. package/dist/core/templates/skill-templates.js +18 -0
  196. package/dist/core/templates/types.d.ts +19 -0
  197. package/dist/core/templates/types.js +5 -0
  198. package/dist/core/templates/workflows/apply-change.d.ts +10 -0
  199. package/dist/core/templates/workflows/apply-change.js +362 -0
  200. package/dist/core/templates/workflows/archive-change.d.ts +10 -0
  201. package/dist/core/templates/workflows/archive-change.js +331 -0
  202. package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
  203. package/dist/core/templates/workflows/bulk-archive-change.js +488 -0
  204. package/dist/core/templates/workflows/continue-change.d.ts +10 -0
  205. package/dist/core/templates/workflows/continue-change.js +232 -0
  206. package/dist/core/templates/workflows/explore.d.ts +10 -0
  207. package/dist/core/templates/workflows/explore.js +527 -0
  208. package/dist/core/templates/workflows/feedback.d.ts +9 -0
  209. package/dist/core/templates/workflows/feedback.js +108 -0
  210. package/dist/core/templates/workflows/ff-change.d.ts +10 -0
  211. package/dist/core/templates/workflows/ff-change.js +198 -0
  212. package/dist/core/templates/workflows/new-change.d.ts +10 -0
  213. package/dist/core/templates/workflows/new-change.js +143 -0
  214. package/dist/core/templates/workflows/onboard.d.ts +10 -0
  215. package/dist/core/templates/workflows/onboard.js +565 -0
  216. package/dist/core/templates/workflows/propose.d.ts +10 -0
  217. package/dist/core/templates/workflows/propose.js +306 -0
  218. package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
  219. package/dist/core/templates/workflows/sync-specs.js +272 -0
  220. package/dist/core/templates/workflows/verify-change.d.ts +10 -0
  221. package/dist/core/templates/workflows/verify-change.js +332 -0
  222. package/dist/core/update.d.ts +77 -0
  223. package/dist/core/update.js +537 -0
  224. package/dist/core/validation/constants.d.ts +34 -0
  225. package/dist/core/validation/constants.js +40 -0
  226. package/dist/core/validation/types.d.ts +18 -0
  227. package/dist/core/validation/types.js +2 -0
  228. package/dist/core/validation/validator.d.ts +33 -0
  229. package/dist/core/validation/validator.js +409 -0
  230. package/dist/core/view.d.ts +8 -0
  231. package/dist/core/view.js +168 -0
  232. package/dist/core/workspace.d.ts +18 -0
  233. package/dist/core/workspace.js +103 -0
  234. package/dist/index.d.ts +3 -0
  235. package/dist/index.js +3 -0
  236. package/dist/prompts/searchable-multi-select.d.ts +28 -0
  237. package/dist/prompts/searchable-multi-select.js +159 -0
  238. package/dist/telemetry/config.d.ts +32 -0
  239. package/dist/telemetry/config.js +68 -0
  240. package/dist/telemetry/index.d.ts +31 -0
  241. package/dist/telemetry/index.js +145 -0
  242. package/dist/ui/ascii-patterns.d.ts +16 -0
  243. package/dist/ui/ascii-patterns.js +133 -0
  244. package/dist/ui/welcome-screen.d.ts +10 -0
  245. package/dist/ui/welcome-screen.js +146 -0
  246. package/dist/utils/change-metadata.d.ts +51 -0
  247. package/dist/utils/change-metadata.js +147 -0
  248. package/dist/utils/change-utils.d.ts +62 -0
  249. package/dist/utils/change-utils.js +121 -0
  250. package/dist/utils/command-references.d.ts +18 -0
  251. package/dist/utils/command-references.js +20 -0
  252. package/dist/utils/file-system.d.ts +36 -0
  253. package/dist/utils/file-system.js +281 -0
  254. package/dist/utils/index.d.ts +6 -0
  255. package/dist/utils/index.js +9 -0
  256. package/dist/utils/interactive.d.ts +18 -0
  257. package/dist/utils/interactive.js +21 -0
  258. package/dist/utils/item-discovery.d.ts +4 -0
  259. package/dist/utils/item-discovery.js +72 -0
  260. package/dist/utils/match.d.ts +3 -0
  261. package/dist/utils/match.js +22 -0
  262. package/dist/utils/shell-detection.d.ts +20 -0
  263. package/dist/utils/shell-detection.js +41 -0
  264. package/dist/utils/task-progress.d.ts +8 -0
  265. package/dist/utils/task-progress.js +36 -0
  266. package/package.json +83 -0
  267. package/schemas/spec-driven/schema.yaml +153 -0
  268. package/schemas/spec-driven/templates/design.md +19 -0
  269. package/schemas/spec-driven/templates/proposal.md +23 -0
  270. package/schemas/spec-driven/templates/spec.md +8 -0
  271. package/schemas/spec-driven/templates/tasks.md +9 -0
  272. package/scripts/postinstall.js +147 -0
@@ -0,0 +1,362 @@
1
+ export function getApplyChangeSkillTemplate() {
2
+ return {
3
+ name: 'openspec-apply-change',
4
+ description: 'Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.',
5
+ instructions: `Implement tasks from an OpenSpec change.
6
+
7
+ **Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
8
+
9
+ **Steps**
10
+
11
+ 1. **Select the change**
12
+
13
+ If a name is provided, use it. Otherwise:
14
+ - Infer from conversation context if the user mentioned a change
15
+ - Auto-select if only one active change exists
16
+ - If ambiguous, run \`openspec list --json\` to get available changes and use the **AskUserQuestion tool** to let the user select
17
+
18
+ Always announce: "Using change: <name>" and how to override (e.g., \`/opsx:apply <other>\`).
19
+
20
+ 2. **Detect if this is an umbrella change**
21
+
22
+ \`\`\`bash
23
+ cat openspec/changes/<name>/links.yaml 2>/dev/null
24
+ \`\`\`
25
+
26
+ - If \`links.yaml\` exists: jump to **Umbrella Apply Flow** below.
27
+ - If not found: proceed with standard single-scope flow.
28
+
29
+ For single-scope: if no workspace.yaml, run openspec from current dir. If workspace.yaml exists, read it and determine which scope owns this change, then run openspec as \`(cd <scope.path> && openspec ...)\`.
30
+
31
+ 3. **Check status to understand the schema**
32
+ \`\`\`bash
33
+ (cd <workspace> && openspec status --change "<name>" --json)
34
+ \`\`\`
35
+ Parse the JSON to understand:
36
+ - \`schemaName\`: The workflow being used (e.g., "spec-driven")
37
+ - Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)
38
+
39
+ 4. **Get apply instructions**
40
+
41
+ \`\`\`bash
42
+ (cd <workspace> && openspec instructions apply --change "<name>" --json)
43
+ \`\`\`
44
+
45
+ This returns:
46
+ - Context file paths (varies by schema - could be proposal/specs/design/tasks or spec/tests/implementation/docs)
47
+ - Progress (total, complete, remaining)
48
+ - Task list with status
49
+ - Dynamic instruction based on current state
50
+
51
+ **Handle states:**
52
+ - If \`state: "blocked"\` (missing artifacts): show message, suggest using openspec-continue-change
53
+ - If \`state: "all_done"\`: congratulate, suggest archive
54
+ - Otherwise: proceed to implementation
55
+
56
+ 5. **Read context files**
57
+
58
+ Read the files listed in \`contextFiles\` from the apply instructions output.
59
+ The files depend on the schema being used:
60
+ - **spec-driven**: proposal, specs, design, tasks
61
+ - Other schemas: follow the contextFiles from CLI output
62
+
63
+ 6. **Show current progress**
64
+
65
+ Display:
66
+ - Schema being used
67
+ - Progress: "N/M tasks complete"
68
+ - Remaining tasks overview
69
+ - Dynamic instruction from CLI
70
+
71
+ 7. **Implement tasks (loop until done or blocked)**
72
+
73
+ For each pending task:
74
+ - Show which task is being worked on
75
+ - Make the code changes required
76
+ - Keep changes minimal and focused
77
+ - Mark task complete in the tasks file: \`- [ ]\` → \`- [x]\`
78
+ - Continue to next task
79
+
80
+ **Pause if:**
81
+ - Task is unclear → ask for clarification
82
+ - Implementation reveals a design issue → suggest updating artifacts
83
+ - Error or blocker encountered → report and wait for guidance
84
+ - User interrupts
85
+
86
+ 8. **On completion or pause, show status**
87
+
88
+ Display:
89
+ - Tasks completed this session
90
+ - Overall progress: "N/M tasks complete"
91
+ - If all done: suggest archive
92
+ - If paused: explain why and wait for guidance
93
+
94
+ ## Umbrella Apply Flow *(cross-scope changes only)*
95
+
96
+ 1. Read umbrella context:
97
+ \`\`\`bash
98
+ cat openspec/changes/<name>/proposal.md
99
+ cat openspec/changes/<name>/links.yaml
100
+ \`\`\`
101
+
102
+ 2. For each scope in links.yaml:
103
+ - Announce: "Applying <name> in scope: <scope.name>"
104
+ - Follow steps 3-8 of standard flow using that scope's path
105
+ - Complete all tasks for one scope before moving to next
106
+
107
+ 3. Show umbrella completion summary with per-scope progress.
108
+
109
+ **Output During Implementation**
110
+
111
+ \`\`\`
112
+ ## Implementing: <change-name> (schema: <schema-name>)
113
+
114
+ Working on task 3/7: <task description>
115
+ [...implementation happening...]
116
+ ✓ Task complete
117
+
118
+ Working on task 4/7: <task description>
119
+ [...implementation happening...]
120
+ ✓ Task complete
121
+ \`\`\`
122
+
123
+ **Output On Completion**
124
+
125
+ \`\`\`
126
+ ## Implementation Complete
127
+
128
+ **Change:** <change-name>
129
+ **Schema:** <schema-name>
130
+ **Progress:** 7/7 tasks complete ✓
131
+
132
+ ### Completed This Session
133
+ - [x] Task 1
134
+ - [x] Task 2
135
+ ...
136
+
137
+ All tasks complete! Ready to archive this change.
138
+ \`\`\`
139
+
140
+ **Output On Pause (Issue Encountered)**
141
+
142
+ \`\`\`
143
+ ## Implementation Paused
144
+
145
+ **Change:** <change-name>
146
+ **Schema:** <schema-name>
147
+ **Progress:** 4/7 tasks complete
148
+
149
+ ### Issue Encountered
150
+ <description of the issue>
151
+
152
+ **Options:**
153
+ 1. <option 1>
154
+ 2. <option 2>
155
+ 3. Other approach
156
+
157
+ What would you like to do?
158
+ \`\`\`
159
+
160
+ **Guardrails**
161
+ - Keep going through tasks until done or blocked
162
+ - Always read context files before starting (from the apply instructions output)
163
+ - If task is ambiguous, pause and ask before implementing
164
+ - If implementation reveals issues, pause and suggest artifact updates
165
+ - Keep code changes minimal and scoped to each task
166
+ - Update task checkbox immediately after completing each task
167
+ - Pause on errors, blockers, or unclear requirements - don't guess
168
+ - For umbrella changes, complete one scope fully before starting the next
169
+ - Use contextFiles from CLI output, don't assume specific file names
170
+
171
+ **Fluid Workflow Integration**
172
+
173
+ This skill supports the "actions on a change" model:
174
+
175
+ - **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
176
+ - **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly`,
177
+ license: 'MIT',
178
+ compatibility: 'Requires openspec CLI.',
179
+ metadata: { author: 'openspec', version: '1.0' },
180
+ };
181
+ }
182
+ export function getOpsxApplyCommandTemplate() {
183
+ return {
184
+ name: 'OPSX: Apply',
185
+ description: 'Implement tasks from an OpenSpec change (Experimental)',
186
+ category: 'Workflow',
187
+ tags: ['workflow', 'artifacts', 'experimental'],
188
+ content: `Implement tasks from an OpenSpec change.
189
+
190
+ **Input**: Optionally specify a change name (e.g., \`/opsx:apply add-auth\`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
191
+
192
+ **Steps**
193
+
194
+ 1. **Select the change**
195
+
196
+ If a name is provided, use it. Otherwise:
197
+ - Infer from conversation context if the user mentioned a change
198
+ - Auto-select if only one active change exists
199
+ - If ambiguous, run \`openspec list --json\` to get available changes and use the **AskUserQuestion tool** to let the user select
200
+
201
+ Always announce: "Using change: <name>" and how to override (e.g., \`/opsx:apply <other>\`).
202
+
203
+ 2. **Detect if this is an umbrella change**
204
+
205
+ \`\`\`bash
206
+ cat openspec/changes/<name>/links.yaml 2>/dev/null
207
+ \`\`\`
208
+
209
+ - If \`links.yaml\` exists: jump to **Umbrella Apply Flow** below.
210
+ - If not found: proceed with standard single-scope flow.
211
+
212
+ For single-scope: if no workspace.yaml, run openspec from current dir. If workspace.yaml exists, read it and determine which scope owns this change, then run openspec as \`(cd <scope.path> && openspec ...)\`.
213
+
214
+ 3. **Check status to understand the schema**
215
+ \`\`\`bash
216
+ (cd <workspace> && openspec status --change "<name>" --json)
217
+ \`\`\`
218
+ Parse the JSON to understand:
219
+ - \`schemaName\`: The workflow being used (e.g., "spec-driven")
220
+ - Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)
221
+
222
+ 4. **Get apply instructions**
223
+
224
+ \`\`\`bash
225
+ (cd <workspace> && openspec instructions apply --change "<name>" --json)
226
+ \`\`\`
227
+
228
+ This returns:
229
+ - Context file paths (varies by schema)
230
+ - Progress (total, complete, remaining)
231
+ - Task list with status
232
+ - Dynamic instruction based on current state
233
+
234
+ **Handle states:**
235
+ - If \`state: "blocked"\` (missing artifacts): show message, suggest using \`/opsx:continue\`
236
+ - If \`state: "all_done"\`: congratulate, suggest archive
237
+ - Otherwise: proceed to implementation
238
+
239
+ 5. **Read context files**
240
+
241
+ Read the files listed in \`contextFiles\` from the apply instructions output.
242
+ The files depend on the schema being used:
243
+ - **spec-driven**: proposal, specs, design, tasks
244
+ - Other schemas: follow the contextFiles from CLI output
245
+
246
+ 6. **Show current progress**
247
+
248
+ Display:
249
+ - Schema being used
250
+ - Progress: "N/M tasks complete"
251
+ - Remaining tasks overview
252
+ - Dynamic instruction from CLI
253
+
254
+ 7. **Implement tasks (loop until done or blocked)**
255
+
256
+ For each pending task:
257
+ - Show which task is being worked on
258
+ - Make the code changes required
259
+ - Keep changes minimal and focused
260
+ - Mark task complete in the tasks file: \`- [ ]\` → \`- [x]\`
261
+ - Continue to next task
262
+
263
+ **Pause if:**
264
+ - Task is unclear → ask for clarification
265
+ - Implementation reveals a design issue → suggest updating artifacts
266
+ - Error or blocker encountered → report and wait for guidance
267
+ - User interrupts
268
+
269
+ 8. **On completion or pause, show status**
270
+
271
+ Display:
272
+ - Tasks completed this session
273
+ - Overall progress: "N/M tasks complete"
274
+ - If all done: suggest archive
275
+ - If paused: explain why and wait for guidance
276
+
277
+ ## Umbrella Apply Flow *(cross-scope changes only)*
278
+
279
+ 1. Read umbrella context:
280
+ \`\`\`bash
281
+ cat openspec/changes/<name>/proposal.md
282
+ cat openspec/changes/<name>/links.yaml
283
+ \`\`\`
284
+
285
+ 2. For each scope in links.yaml:
286
+ - Announce: "Applying <name> in scope: <scope.name>"
287
+ - Follow steps 3-8 of standard flow using that scope's path
288
+ - Complete all tasks for one scope before moving to next
289
+
290
+ 3. Show umbrella completion summary with per-scope progress.
291
+
292
+ **Output During Implementation**
293
+
294
+ \`\`\`
295
+ ## Implementing: <change-name> (schema: <schema-name>)
296
+
297
+ Working on task 3/7: <task description>
298
+ [...implementation happening...]
299
+ ✓ Task complete
300
+
301
+ Working on task 4/7: <task description>
302
+ [...implementation happening...]
303
+ ✓ Task complete
304
+ \`\`\`
305
+
306
+ **Output On Completion**
307
+
308
+ \`\`\`
309
+ ## Implementation Complete
310
+
311
+ **Change:** <change-name>
312
+ **Schema:** <schema-name>
313
+ **Progress:** 7/7 tasks complete ✓
314
+
315
+ ### Completed This Session
316
+ - [x] Task 1
317
+ - [x] Task 2
318
+ ...
319
+
320
+ All tasks complete! You can archive this change with \`/opsx:archive\`.
321
+ \`\`\`
322
+
323
+ **Output On Pause (Issue Encountered)**
324
+
325
+ \`\`\`
326
+ ## Implementation Paused
327
+
328
+ **Change:** <change-name>
329
+ **Schema:** <schema-name>
330
+ **Progress:** 4/7 tasks complete
331
+
332
+ ### Issue Encountered
333
+ <description of the issue>
334
+
335
+ **Options:**
336
+ 1. <option 1>
337
+ 2. <option 2>
338
+ 3. Other approach
339
+
340
+ What would you like to do?
341
+ \`\`\`
342
+
343
+ **Guardrails**
344
+ - Keep going through tasks until done or blocked
345
+ - Always read context files before starting (from the apply instructions output)
346
+ - If task is ambiguous, pause and ask before implementing
347
+ - If implementation reveals issues, pause and suggest artifact updates
348
+ - Keep code changes minimal and scoped to each task
349
+ - Update task checkbox immediately after completing each task
350
+ - Pause on errors, blockers, or unclear requirements - don't guess
351
+ - For umbrella changes, complete one scope fully before starting the next
352
+ - Use contextFiles from CLI output, don't assume specific file names
353
+
354
+ **Fluid Workflow Integration**
355
+
356
+ This skill supports the "actions on a change" model:
357
+
358
+ - **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
359
+ - **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly`
360
+ };
361
+ }
362
+ //# sourceMappingURL=apply-change.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Skill Template Workflow Modules
3
+ *
4
+ * This file is generated by splitting the legacy monolithic
5
+ * templates file into workflow-focused modules.
6
+ */
7
+ import type { SkillTemplate, CommandTemplate } from '../types.js';
8
+ export declare function getArchiveChangeSkillTemplate(): SkillTemplate;
9
+ export declare function getOpsxArchiveCommandTemplate(): CommandTemplate;
10
+ //# sourceMappingURL=archive-change.d.ts.map
@@ -0,0 +1,331 @@
1
+ export function getArchiveChangeSkillTemplate() {
2
+ return {
3
+ name: 'openspec-archive-change',
4
+ description: 'Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.',
5
+ instructions: `Archive a completed change in the experimental workflow.
6
+
7
+ **Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
8
+
9
+ **Steps**
10
+
11
+ 1. **If no change name provided, prompt for selection**
12
+
13
+ Run \`openspec list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select.
14
+
15
+ Show only active changes (not already archived).
16
+ Include the schema used for each change if available.
17
+
18
+ **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.
19
+
20
+ 2. **Detect if this is an umbrella change**
21
+
22
+ \`\`\`bash
23
+ cat openspec/changes/<name>/links.yaml 2>/dev/null
24
+ \`\`\`
25
+
26
+ - If \`links.yaml\` exists: jump to **Umbrella Archive Flow** below.
27
+ - If not found: proceed with standard single-scope flow.
28
+
29
+ For single-scope: if no workspace.yaml, run openspec from current dir. If workspace.yaml exists, read it and determine which scope owns this change, then run openspec as \`(cd <scope.path> && openspec ...)\`.
30
+
31
+ 3. **Check artifact completion status**
32
+
33
+ Run \`(cd <workspace> && openspec status --change "<name>" --json)\` to check artifact completion.
34
+
35
+ Parse the JSON to understand:
36
+ - \`schemaName\`: The workflow being used
37
+ - \`artifacts\`: List of artifacts with their status (\`done\` or other)
38
+
39
+ **If any artifacts are not \`done\`:**
40
+ - Display warning listing incomplete artifacts
41
+ - Use **AskUserQuestion tool** to confirm user wants to proceed
42
+ - Proceed if user confirms
43
+
44
+ 4. **Check task completion status**
45
+
46
+ Read the tasks file (typically \`tasks.md\`) to check for incomplete tasks.
47
+
48
+ Count tasks marked with \`- [ ]\` (incomplete) vs \`- [x]\` (complete).
49
+
50
+ **If incomplete tasks found:**
51
+ - Display warning showing count of incomplete tasks
52
+ - Use **AskUserQuestion tool** to confirm user wants to proceed
53
+ - Proceed if user confirms
54
+
55
+ **If no tasks file exists:** Proceed without task-related warning.
56
+
57
+ 5. **Assess delta spec sync state**
58
+
59
+ Check for delta specs at \`<workspace>/openspec/changes/<name>/specs/\`. If none exist, proceed without sync prompt.
60
+
61
+ **If delta specs exist:**
62
+ - Compare each delta spec with its corresponding main spec at \`openspec/specs/<capability>/spec.md\`
63
+ - Determine what changes would be applied (adds, modifications, removals, renames)
64
+ - Show a combined summary before prompting
65
+
66
+ **Prompt options:**
67
+ - If changes needed: "Sync now (recommended)", "Archive without syncing"
68
+ - If already synced: "Archive now", "Sync anyway", "Cancel"
69
+
70
+ If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke openspec-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>"). Proceed to archive regardless of choice.
71
+
72
+ 6. **Perform the archive**
73
+
74
+ Create the archive directory if it doesn't exist:
75
+ \`\`\`bash
76
+ mkdir -p openspec/changes/archive
77
+ \`\`\`
78
+
79
+ Generate target name using current date: \`YYYY-MM-DD-<change-name>\`
80
+
81
+ **Check if target already exists:**
82
+ - If yes: Fail with error, suggest renaming existing archive or using different date
83
+ - If no: Move the change directory to archive
84
+
85
+ \`\`\`bash
86
+ mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
87
+ \`\`\`
88
+
89
+ 7. **Display summary**
90
+
91
+ Show archive completion summary including:
92
+ - Change name
93
+ - Schema that was used
94
+ - Archive location
95
+ - Whether specs were synced (if applicable)
96
+ - Note about any warnings (incomplete artifacts/tasks)
97
+
98
+ ## Umbrella Archive Flow *(cross-scope changes only)*
99
+
100
+ 1. Read links.yaml to get list of scopes.
101
+
102
+ 2. For each scope: follow steps 3-7 (artifact check, task check, delta sync, archive, commit) using that scope's path. Complete one scope fully before starting the next.
103
+
104
+ 3. Archive umbrella directory:
105
+ \`\`\`bash
106
+ mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
107
+ \`\`\`
108
+
109
+ 4. Commit:
110
+ \`\`\`bash
111
+ git add openspec/changes/ && git commit -m "chore(openspec): archive <name> umbrella"
112
+ \`\`\`
113
+
114
+ 5. Show completion summary with per-scope archive status.
115
+
116
+ **Output On Success**
117
+
118
+ \`\`\`
119
+ ## Archive Complete
120
+
121
+ **Change:** <change-name>
122
+ **Schema:** <schema-name>
123
+ **Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
124
+ **Specs:** ✓ Synced to main specs (or "No delta specs" or "Sync skipped")
125
+
126
+ All artifacts complete. All tasks complete.
127
+ \`\`\`
128
+
129
+ **Guardrails**
130
+ - Always prompt for change selection if not provided
131
+ - Use artifact graph (openspec status --json) for completion checking
132
+ - Don't block archive on warnings - just inform and confirm
133
+ - Preserve .openspec.yaml when moving to archive (it moves with the directory)
134
+ - Show clear summary of what happened
135
+ - If sync is requested, use openspec-sync-specs approach (agent-driven)
136
+ - If delta specs exist, always run the sync assessment and show the combined summary before prompting
137
+ - For umbrella changes, complete one scope fully before starting the next`,
138
+ license: 'MIT',
139
+ compatibility: 'Requires openspec CLI.',
140
+ metadata: { author: 'openspec', version: '1.0' },
141
+ };
142
+ }
143
+ export function getOpsxArchiveCommandTemplate() {
144
+ return {
145
+ name: 'OPSX: Archive',
146
+ description: 'Archive a completed change in the experimental workflow',
147
+ category: 'Workflow',
148
+ tags: ['workflow', 'archive', 'experimental'],
149
+ content: `Archive a completed change in the experimental workflow.
150
+
151
+ **Input**: Optionally specify a change name after \`/opsx:archive\` (e.g., \`/opsx:archive add-auth\`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
152
+
153
+ **Steps**
154
+
155
+ 1. **If no change name provided, prompt for selection**
156
+
157
+ Run \`openspec list --json\` to get available changes. Use the **AskUserQuestion tool** to let the user select.
158
+
159
+ Show only active changes (not already archived).
160
+ Include the schema used for each change if available.
161
+
162
+ **IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.
163
+
164
+ 2. **Detect if this is an umbrella change**
165
+
166
+ \`\`\`bash
167
+ cat openspec/changes/<name>/links.yaml 2>/dev/null
168
+ \`\`\`
169
+
170
+ - If \`links.yaml\` exists: jump to **Umbrella Archive Flow** below.
171
+ - If not found: proceed with standard single-scope flow.
172
+
173
+ For single-scope: if no workspace.yaml, run openspec from current dir. If workspace.yaml exists, read it and determine which scope owns this change, then run openspec as \`(cd <scope.path> && openspec ...)\`.
174
+
175
+ 3. **Check artifact completion status**
176
+
177
+ Run \`(cd <workspace> && openspec status --change "<name>" --json)\` to check artifact completion.
178
+
179
+ Parse the JSON to understand:
180
+ - \`schemaName\`: The workflow being used
181
+ - \`artifacts\`: List of artifacts with their status (\`done\` or other)
182
+
183
+ **If any artifacts are not \`done\`:**
184
+ - Display warning listing incomplete artifacts
185
+ - Prompt user for confirmation to continue
186
+ - Proceed if user confirms
187
+
188
+ 4. **Check task completion status**
189
+
190
+ Read the tasks file (typically \`tasks.md\`) to check for incomplete tasks.
191
+
192
+ Count tasks marked with \`- [ ]\` (incomplete) vs \`- [x]\` (complete).
193
+
194
+ **If incomplete tasks found:**
195
+ - Display warning showing count of incomplete tasks
196
+ - Prompt user for confirmation to continue
197
+ - Proceed if user confirms
198
+
199
+ **If no tasks file exists:** Proceed without task-related warning.
200
+
201
+ 5. **Assess delta spec sync state**
202
+
203
+ Check for delta specs at \`<workspace>/openspec/changes/<name>/specs/\`. If none exist, proceed without sync prompt.
204
+
205
+ **If delta specs exist:**
206
+ - Compare each delta spec with its corresponding main spec at \`openspec/specs/<capability>/spec.md\`
207
+ - Determine what changes would be applied (adds, modifications, removals, renames)
208
+ - Show a combined summary before prompting
209
+
210
+ **Prompt options:**
211
+ - If changes needed: "Sync now (recommended)", "Archive without syncing"
212
+ - If already synced: "Archive now", "Sync anyway", "Cancel"
213
+
214
+ If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke openspec-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>"). Proceed to archive regardless of choice.
215
+
216
+ 6. **Perform the archive**
217
+
218
+ Create the archive directory if it doesn't exist:
219
+ \`\`\`bash
220
+ mkdir -p openspec/changes/archive
221
+ \`\`\`
222
+
223
+ Generate target name using current date: \`YYYY-MM-DD-<change-name>\`
224
+
225
+ **Check if target already exists:**
226
+ - If yes: Fail with error, suggest renaming existing archive or using different date
227
+ - If no: Move the change directory to archive
228
+
229
+ \`\`\`bash
230
+ mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
231
+ \`\`\`
232
+
233
+ 7. **Display summary**
234
+
235
+ Show archive completion summary including:
236
+ - Change name
237
+ - Schema that was used
238
+ - Archive location
239
+ - Spec sync status (synced / sync skipped / no delta specs)
240
+ - Note about any warnings (incomplete artifacts/tasks)
241
+
242
+ ## Umbrella Archive Flow *(cross-scope changes only)*
243
+
244
+ 1. Read links.yaml to get list of scopes.
245
+
246
+ 2. For each scope: follow steps 3-7 (artifact check, task check, delta sync, archive, commit) using that scope's path. Complete one scope fully before starting the next.
247
+
248
+ 3. Archive umbrella directory:
249
+ \`\`\`bash
250
+ mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
251
+ \`\`\`
252
+
253
+ 4. Commit:
254
+ \`\`\`bash
255
+ git add openspec/changes/ && git commit -m "chore(openspec): archive <name> umbrella"
256
+ \`\`\`
257
+
258
+ 5. Show completion summary with per-scope archive status.
259
+
260
+ **Output On Success**
261
+
262
+ \`\`\`
263
+ ## Archive Complete
264
+
265
+ **Change:** <change-name>
266
+ **Schema:** <schema-name>
267
+ **Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
268
+ **Specs:** ✓ Synced to main specs
269
+
270
+ All artifacts complete. All tasks complete.
271
+ \`\`\`
272
+
273
+ **Output On Success (No Delta Specs)**
274
+
275
+ \`\`\`
276
+ ## Archive Complete
277
+
278
+ **Change:** <change-name>
279
+ **Schema:** <schema-name>
280
+ **Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
281
+ **Specs:** No delta specs
282
+
283
+ All artifacts complete. All tasks complete.
284
+ \`\`\`
285
+
286
+ **Output On Success With Warnings**
287
+
288
+ \`\`\`
289
+ ## Archive Complete (with warnings)
290
+
291
+ **Change:** <change-name>
292
+ **Schema:** <schema-name>
293
+ **Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
294
+ **Specs:** Sync skipped (user chose to skip)
295
+
296
+ **Warnings:**
297
+ - Archived with 2 incomplete artifacts
298
+ - Archived with 3 incomplete tasks
299
+ - Delta spec sync was skipped (user chose to skip)
300
+
301
+ Review the archive if this was not intentional.
302
+ \`\`\`
303
+
304
+ **Output On Error (Archive Exists)**
305
+
306
+ \`\`\`
307
+ ## Archive Failed
308
+
309
+ **Change:** <change-name>
310
+ **Target:** openspec/changes/archive/YYYY-MM-DD-<name>/
311
+
312
+ Target archive directory already exists.
313
+
314
+ **Options:**
315
+ 1. Rename the existing archive
316
+ 2. Delete the existing archive if it's a duplicate
317
+ 3. Wait until a different date to archive
318
+ \`\`\`
319
+
320
+ **Guardrails**
321
+ - Always prompt for change selection if not provided
322
+ - Use artifact graph (openspec status --json) for completion checking
323
+ - Don't block archive on warnings - just inform and confirm
324
+ - Preserve .openspec.yaml when moving to archive (it moves with the directory)
325
+ - Show clear summary of what happened
326
+ - If sync is requested, use the Skill tool to invoke \`openspec-sync-specs\` (agent-driven)
327
+ - If delta specs exist, always run the sync assessment and show the combined summary before prompting
328
+ - For umbrella changes, complete one scope fully before starting the next`
329
+ };
330
+ }
331
+ //# sourceMappingURL=archive-change.js.map