@codewalla_india/openspec 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +214 -133
  3. package/bin/openspec.js +5 -5
  4. package/dist/cli/index.js +99 -62
  5. package/dist/commands/change.d.ts +0 -2
  6. package/dist/commands/change.js +107 -86
  7. package/dist/commands/config.js +14 -16
  8. package/dist/commands/doctor.js +9 -4
  9. package/dist/commands/feedback.js +79 -30
  10. package/dist/commands/modify.d.ts +26 -0
  11. package/dist/commands/modify.js +147 -0
  12. package/dist/commands/schema.js +170 -91
  13. package/dist/commands/show.js +5 -2
  14. package/dist/commands/spec.js +49 -29
  15. package/dist/commands/store.js +15 -21
  16. package/dist/commands/validate.d.ts +8 -0
  17. package/dist/commands/validate.js +43 -20
  18. package/dist/commands/workflow/index.d.ts +2 -2
  19. package/dist/commands/workflow/index.js +1 -1
  20. package/dist/commands/workflow/instructions.d.ts +6 -26
  21. package/dist/commands/workflow/instructions.js +183 -376
  22. package/dist/commands/workflow/new-change.d.ts +0 -4
  23. package/dist/commands/workflow/new-change.js +10 -28
  24. package/dist/commands/workflow/shared.d.ts +34 -19
  25. package/dist/commands/workflow/shared.js +34 -4
  26. package/dist/commands/workflow/status.js +10 -32
  27. package/dist/commands/workflow/templates.js +15 -5
  28. package/dist/commands/workset.d.ts +2 -2
  29. package/dist/commands/workset.js +19 -22
  30. package/dist/comprehension-quiz/fingerprint.d.ts +39 -0
  31. package/dist/comprehension-quiz/fingerprint.js +84 -0
  32. package/dist/comprehension-quiz/index.d.ts +42 -0
  33. package/dist/comprehension-quiz/index.js +47 -0
  34. package/dist/comprehension-quiz/pass-record.d.ts +44 -0
  35. package/dist/comprehension-quiz/pass-record.js +98 -0
  36. package/dist/comprehension-quiz/providers/anthropic.d.ts +35 -0
  37. package/dist/comprehension-quiz/providers/anthropic.js +69 -0
  38. package/dist/comprehension-quiz/providers/factory.d.ts +44 -0
  39. package/dist/comprehension-quiz/providers/factory.js +174 -0
  40. package/dist/comprehension-quiz/providers/interface.d.ts +98 -0
  41. package/dist/comprehension-quiz/providers/interface.js +150 -0
  42. package/dist/comprehension-quiz/providers/local.d.ts +35 -0
  43. package/dist/comprehension-quiz/providers/local.js +69 -0
  44. package/dist/comprehension-quiz/providers/ollama.d.ts +35 -0
  45. package/dist/comprehension-quiz/providers/ollama.js +69 -0
  46. package/dist/comprehension-quiz/providers/openai.d.ts +35 -0
  47. package/dist/comprehension-quiz/providers/openai.js +72 -0
  48. package/dist/comprehension-quiz/question-generator.d.ts +117 -0
  49. package/dist/comprehension-quiz/question-generator.js +203 -0
  50. package/dist/comprehension-quiz/quiz-executor.d.ts +75 -0
  51. package/dist/comprehension-quiz/quiz-executor.js +181 -0
  52. package/dist/comprehension-quiz/types.d.ts +137 -0
  53. package/dist/comprehension-quiz/types.js +11 -0
  54. package/dist/core/archive.d.ts +14 -1
  55. package/dist/core/archive.js +1350 -190
  56. package/dist/core/artifact-graph/graph.d.ts +28 -9
  57. package/dist/core/artifact-graph/graph.js +94 -43
  58. package/dist/core/artifact-graph/index.d.ts +1 -1
  59. package/dist/core/artifact-graph/index.js +1 -1
  60. package/dist/core/artifact-graph/instruction-loader.d.ts +30 -3
  61. package/dist/core/artifact-graph/instruction-loader.js +70 -12
  62. package/dist/core/artifact-graph/outputs.d.ts +1 -0
  63. package/dist/core/artifact-graph/outputs.js +67 -5
  64. package/dist/core/artifact-graph/resolver.d.ts +14 -0
  65. package/dist/core/artifact-graph/resolver.js +69 -15
  66. package/dist/core/artifact-graph/types.js +21 -3
  67. package/dist/core/available-tools.d.ts +2 -2
  68. package/dist/core/available-tools.js +14 -3
  69. package/dist/core/change-metadata/schema.d.ts +2 -0
  70. package/dist/core/change-metadata/schema.js +13 -0
  71. package/dist/core/change-status-policy.d.ts +10 -1
  72. package/dist/core/change-status-policy.js +30 -2
  73. package/dist/core/command-generation/adapters/amazon-q.d.ts +4 -0
  74. package/dist/core/command-generation/adapters/amazon-q.js +11 -5
  75. package/dist/core/command-generation/adapters/antigravity.js +6 -5
  76. package/dist/core/command-generation/adapters/auggie.js +7 -6
  77. package/dist/core/command-generation/adapters/bob.d.ts +5 -1
  78. package/dist/core/command-generation/adapters/bob.js +11 -10
  79. package/dist/core/command-generation/adapters/claude.d.ts +1 -1
  80. package/dist/core/command-generation/adapters/claude.js +12 -17
  81. package/dist/core/command-generation/adapters/cline.js +5 -5
  82. package/dist/core/command-generation/adapters/codebuddy.js +8 -7
  83. package/dist/core/command-generation/adapters/continue.js +8 -7
  84. package/dist/core/command-generation/adapters/costrict.js +7 -6
  85. package/dist/core/command-generation/adapters/crush.js +9 -9
  86. package/dist/core/command-generation/adapters/cursor.js +8 -8
  87. package/dist/core/command-generation/adapters/devin.d.ts +19 -0
  88. package/dist/core/command-generation/adapters/devin.js +36 -0
  89. package/dist/core/command-generation/adapters/factory.js +7 -6
  90. package/dist/core/command-generation/adapters/gemini.js +40 -5
  91. package/dist/core/command-generation/adapters/github-copilot.js +6 -5
  92. package/dist/core/command-generation/adapters/iflow.js +9 -8
  93. package/dist/core/command-generation/adapters/index.d.ts +4 -2
  94. package/dist/core/command-generation/adapters/index.js +4 -2
  95. package/dist/core/command-generation/adapters/junie.js +6 -5
  96. package/dist/core/command-generation/adapters/kilocode.js +1 -1
  97. package/dist/core/command-generation/adapters/kiro.js +6 -5
  98. package/dist/core/command-generation/adapters/lingma.js +9 -9
  99. package/dist/core/command-generation/adapters/oh-my-pi.d.ts +21 -0
  100. package/dist/core/command-generation/adapters/oh-my-pi.js +42 -0
  101. package/dist/core/command-generation/adapters/opencode.js +6 -8
  102. package/dist/core/command-generation/adapters/pi.d.ts +2 -2
  103. package/dist/core/command-generation/adapters/pi.js +7 -10
  104. package/dist/core/command-generation/adapters/qoder.js +9 -9
  105. package/dist/core/command-generation/adapters/qwen.d.ts +7 -3
  106. package/dist/core/command-generation/adapters/qwen.js +14 -9
  107. package/dist/core/command-generation/adapters/roocode.d.ts +4 -4
  108. package/dist/core/command-generation/adapters/roocode.js +9 -9
  109. package/dist/core/command-generation/adapters/trae.d.ts +13 -0
  110. package/dist/core/command-generation/adapters/trae.js +28 -0
  111. package/dist/core/command-generation/adapters/zcode.d.ts +16 -0
  112. package/dist/core/command-generation/adapters/zcode.js +33 -0
  113. package/dist/core/command-generation/generator.d.ts +8 -0
  114. package/dist/core/command-generation/generator.js +15 -1
  115. package/dist/core/command-generation/index.d.ts +1 -1
  116. package/dist/core/command-generation/index.js +1 -1
  117. package/dist/core/command-generation/invocation.d.ts +73 -0
  118. package/dist/core/command-generation/invocation.js +77 -0
  119. package/dist/core/command-generation/registry.js +8 -4
  120. package/dist/core/command-generation/types.d.ts +9 -2
  121. package/dist/core/command-generation/yaml.d.ts +20 -6
  122. package/dist/core/command-generation/yaml.js +31 -21
  123. package/dist/core/command-surface.d.ts +15 -0
  124. package/dist/core/command-surface.js +33 -0
  125. package/dist/core/completions/command-registry.js +16 -61
  126. package/dist/core/completions/generators/bash-generator.js +41 -41
  127. package/dist/core/completions/generators/fish-generator.js +7 -7
  128. package/dist/core/completions/generators/powershell-generator.js +44 -37
  129. package/dist/core/completions/generators/zsh-generator.js +33 -33
  130. package/dist/core/completions/installers/zsh-installer.d.ts +9 -0
  131. package/dist/core/completions/installers/zsh-installer.js +20 -4
  132. package/dist/core/completions/templates/bash-templates.js +24 -24
  133. package/dist/core/completions/templates/fish-templates.js +38 -38
  134. package/dist/core/completions/templates/powershell-templates.js +28 -28
  135. package/dist/core/completions/templates/zsh-templates.js +39 -39
  136. package/dist/core/config-prompts.d.ts +1 -1
  137. package/dist/core/config-prompts.js +14 -1
  138. package/dist/core/config-schema.d.ts +10 -1
  139. package/dist/core/config-schema.js +67 -1
  140. package/dist/core/config.d.ts +15 -0
  141. package/dist/core/config.js +46 -5
  142. package/dist/core/file-state.js +56 -24
  143. package/dist/core/github-copilot/cloud-agent.d.ts +95 -0
  144. package/dist/core/github-copilot/cloud-agent.js +497 -0
  145. package/dist/core/global-config.d.ts +16 -0
  146. package/dist/core/init.d.ts +58 -0
  147. package/dist/core/init.js +474 -73
  148. package/dist/core/legacy-cleanup.d.ts +59 -0
  149. package/dist/core/legacy-cleanup.js +253 -24
  150. package/dist/core/list.js +23 -16
  151. package/dist/core/migration.d.ts +73 -1
  152. package/dist/core/migration.js +360 -11
  153. package/dist/core/modify/conflict-detector.d.ts +26 -0
  154. package/dist/core/modify/conflict-detector.js +62 -0
  155. package/dist/core/modify/dependency-propagator.d.ts +38 -0
  156. package/dist/core/modify/dependency-propagator.js +103 -0
  157. package/dist/core/modify/history-tracker.d.ts +34 -0
  158. package/dist/core/modify/history-tracker.js +114 -0
  159. package/dist/core/modify/index.d.ts +7 -0
  160. package/dist/core/modify/index.js +7 -0
  161. package/dist/core/onboarding-commands.d.ts +30 -0
  162. package/dist/core/onboarding-commands.js +38 -0
  163. package/dist/core/openspec-root.js +18 -15
  164. package/dist/core/parsers/change-parser.d.ts +17 -2
  165. package/dist/core/parsers/change-parser.js +35 -21
  166. package/dist/core/parsers/code-fence.d.ts +15 -0
  167. package/dist/core/parsers/code-fence.js +49 -0
  168. package/dist/core/parsers/markdown-parser.d.ts +0 -3
  169. package/dist/core/parsers/markdown-parser.js +7 -60
  170. package/dist/core/parsers/requirement-blocks.d.ts +29 -0
  171. package/dist/core/parsers/requirement-blocks.js +150 -31
  172. package/dist/core/parsers/requirement-text.d.ts +48 -0
  173. package/dist/core/parsers/requirement-text.js +98 -0
  174. package/dist/core/parsers/spec-structure.d.ts +1 -1
  175. package/dist/core/parsers/spec-structure.js +20 -30
  176. package/dist/core/profile-sync-drift.d.ts +0 -8
  177. package/dist/core/profile-sync-drift.js +49 -50
  178. package/dist/core/profiles.d.ts +2 -2
  179. package/dist/core/profiles.js +2 -2
  180. package/dist/core/project-config.d.ts +27 -18
  181. package/dist/core/project-config.js +101 -34
  182. package/dist/core/references.js +42 -4
  183. package/dist/core/relationship-health.d.ts +8 -0
  184. package/dist/core/relationship-health.js +13 -0
  185. package/dist/core/root-selection.d.ts +9 -6
  186. package/dist/core/root-selection.js +42 -5
  187. package/dist/core/schemas/base.schema.js +7 -2
  188. package/dist/core/shared/allowed-tools.d.ts +12 -0
  189. package/dist/core/shared/allowed-tools.js +12 -0
  190. package/dist/core/shared/index.d.ts +1 -0
  191. package/dist/core/shared/index.js +1 -0
  192. package/dist/core/shared/skill-content-equivalence.d.ts +7 -0
  193. package/dist/core/shared/skill-content-equivalence.js +41 -0
  194. package/dist/core/shared/skill-generation.js +17 -13
  195. package/dist/core/shared/skill-paths.d.ts +13 -0
  196. package/dist/core/shared/skill-paths.js +23 -0
  197. package/dist/core/shared/tool-detection.d.ts +27 -7
  198. package/dist/core/shared/tool-detection.js +167 -37
  199. package/dist/core/shared-skill-target.d.ts +16 -0
  200. package/dist/core/shared-skill-target.js +156 -0
  201. package/dist/core/specs-apply.d.ts +80 -33
  202. package/dist/core/specs-apply.js +667 -145
  203. package/dist/core/store/git.d.ts +13 -0
  204. package/dist/core/store/git.js +24 -0
  205. package/dist/core/store/operations.js +20 -0
  206. package/dist/core/templates/skill-templates.d.ts +3 -2
  207. package/dist/core/templates/skill-templates.js +3 -2
  208. package/dist/core/templates/workflows/apply-change.d.ts +10 -0
  209. package/dist/core/templates/workflows/apply-change.js +186 -224
  210. package/dist/core/templates/workflows/archive-change.js +387 -260
  211. package/dist/core/templates/workflows/bulk-archive-change.js +655 -475
  212. package/dist/core/templates/workflows/continue-change.js +210 -219
  213. package/dist/core/templates/workflows/explore.js +479 -443
  214. package/dist/core/templates/workflows/feedback.js +97 -97
  215. package/dist/core/templates/workflows/ff-change.js +200 -191
  216. package/dist/core/templates/workflows/modify-change.d.ts +4 -1
  217. package/dist/core/templates/workflows/modify-change.js +193 -71
  218. package/dist/core/templates/workflows/new-change.js +127 -134
  219. package/dist/core/templates/workflows/onboard.js +548 -542
  220. package/dist/core/templates/workflows/propose.js +273 -217
  221. package/dist/core/templates/workflows/store-selection.d.ts +1 -1
  222. package/dist/core/templates/workflows/store-selection.js +1 -1
  223. package/dist/core/templates/workflows/sync-specs.js +500 -273
  224. package/dist/core/templates/workflows/update-change.d.ts +10 -0
  225. package/dist/core/templates/workflows/update-change.js +177 -0
  226. package/dist/core/templates/workflows/verify-change.js +324 -326
  227. package/dist/core/update.d.ts +40 -5
  228. package/dist/core/update.js +411 -96
  229. package/dist/core/validation/constants.d.ts +4 -1
  230. package/dist/core/validation/constants.js +4 -1
  231. package/dist/core/validation/plan-validator.d.ts +8 -0
  232. package/dist/core/validation/plan-validator.js +45 -0
  233. package/dist/core/validation/task-numbering.d.ts +16 -0
  234. package/dist/core/validation/task-numbering.js +57 -0
  235. package/dist/core/validation/validator.d.ts +27 -3
  236. package/dist/core/validation/validator.js +337 -48
  237. package/dist/core/version-check.d.ts +152 -0
  238. package/dist/core/version-check.js +731 -0
  239. package/dist/core/view.js +13 -18
  240. package/dist/prompts/searchable-multi-select.js +1 -1
  241. package/dist/telemetry/caller-detection.d.ts +27 -0
  242. package/dist/telemetry/caller-detection.js +85 -0
  243. package/dist/telemetry/caller-detection.test.d.ts +5 -0
  244. package/dist/telemetry/config.d.ts +48 -2
  245. package/dist/telemetry/config.js +113 -11
  246. package/dist/telemetry/config.test.d.ts +5 -0
  247. package/dist/telemetry/deduplication.d.ts +35 -0
  248. package/dist/telemetry/deduplication.js +82 -0
  249. package/dist/telemetry/deduplication.test.d.ts +5 -0
  250. package/dist/telemetry/identity.d.ts +62 -22
  251. package/dist/telemetry/identity.js +147 -102
  252. package/dist/telemetry/index.d.ts +126 -15
  253. package/dist/telemetry/index.js +569 -37
  254. package/dist/telemetry/sanitization.d.ts +40 -0
  255. package/dist/telemetry/sanitization.js +114 -0
  256. package/dist/telemetry/sanitization.test.d.ts +5 -0
  257. package/dist/telemetry/throttling.d.ts +20 -0
  258. package/dist/telemetry/throttling.js +70 -0
  259. package/dist/ui/welcome-screen.d.ts +9 -1
  260. package/dist/ui/welcome-screen.js +91 -38
  261. package/dist/utils/change-metadata.d.ts +43 -0
  262. package/dist/utils/change-metadata.js +123 -7
  263. package/dist/utils/change-utils.d.ts +10 -4
  264. package/dist/utils/change-utils.js +20 -13
  265. package/dist/utils/ci.d.ts +12 -0
  266. package/dist/utils/ci.js +16 -0
  267. package/dist/utils/command-references.d.ts +92 -6
  268. package/dist/utils/command-references.js +180 -7
  269. package/dist/utils/date.d.ts +8 -0
  270. package/dist/utils/date.js +13 -0
  271. package/dist/utils/file-system.d.ts +10 -0
  272. package/dist/utils/file-system.js +70 -0
  273. package/dist/utils/index.d.ts +1 -1
  274. package/dist/utils/index.js +1 -1
  275. package/dist/utils/interactive.d.ts +23 -0
  276. package/dist/utils/interactive.js +32 -0
  277. package/dist/utils/item-discovery.d.ts +19 -0
  278. package/dist/utils/item-discovery.js +30 -48
  279. package/dist/utils/shell-detection.d.ts +1 -1
  280. package/dist/utils/shell-detection.js +64 -11
  281. package/dist/utils/spec-discovery.d.ts +40 -0
  282. package/dist/utils/spec-discovery.js +115 -0
  283. package/dist/utils/task-progress.d.ts +29 -1
  284. package/dist/utils/task-progress.js +109 -15
  285. package/package.json +96 -84
  286. package/schemas/spec-driven/schema.yaml +252 -184
  287. package/schemas/spec-driven/templates/design.md +19 -19
  288. package/schemas/spec-driven/templates/plan-template.md +91 -0
  289. package/schemas/spec-driven/templates/proposal.md +29 -24
  290. package/schemas/spec-driven/templates/spec.md +11 -8
  291. package/schemas/spec-driven/templates/tasks.md +9 -9
  292. package/scripts/postinstall.js +83 -83
  293. package/dist/core/command-generation/adapters/codex.d.ts +0 -16
  294. package/dist/core/command-generation/adapters/codex.js +0 -39
  295. package/dist/core/command-generation/adapters/windsurf.d.ts +0 -14
  296. package/dist/core/command-generation/adapters/windsurf.js +0 -38
  297. package/dist/core/comprehension/config.d.ts +0 -20
  298. package/dist/core/comprehension/config.js +0 -23
  299. package/dist/core/comprehension/fingerprint.d.ts +0 -14
  300. package/dist/core/comprehension/fingerprint.js +0 -33
  301. package/dist/core/comprehension/index.d.ts +0 -57
  302. package/dist/core/comprehension/index.js +0 -87
  303. package/dist/core/comprehension/pass-record.d.ts +0 -29
  304. package/dist/core/comprehension/pass-record.js +0 -64
  305. package/dist/core/comprehension/stats.d.ts +0 -35
  306. package/dist/core/comprehension/stats.js +0 -133
  307. package/dist/core/templates/workflows/comprehension-guidance.d.ts +0 -9
  308. package/dist/core/templates/workflows/comprehension-guidance.js +0 -73
  309. package/dist/core/templates/workflows/mcp-guidance.d.ts +0 -13
  310. package/dist/core/templates/workflows/mcp-guidance.js +0 -131
  311. package/dist/core/templates/workflows/user-prompt-guidance.d.ts +0 -16
  312. package/dist/core/templates/workflows/user-prompt-guidance.js +0 -48
  313. package/dist/telemetry/caller.d.ts +0 -5
  314. package/dist/telemetry/caller.js +0 -29
  315. package/dist/telemetry/client.d.ts +0 -27
  316. package/dist/telemetry/client.js +0 -127
  317. package/dist/telemetry/command-context.d.ts +0 -13
  318. package/dist/telemetry/command-context.js +0 -59
  319. package/dist/telemetry/comprehension.d.ts +0 -44
  320. package/dist/telemetry/comprehension.js +0 -105
  321. package/dist/telemetry/content.d.ts +0 -10
  322. package/dist/telemetry/content.js +0 -56
  323. package/dist/telemetry/git-stats.d.ts +0 -12
  324. package/dist/telemetry/git-stats.js +0 -69
  325. package/dist/telemetry/identify-cache.d.ts +0 -7
  326. package/dist/telemetry/identify-cache.js +0 -47
  327. package/dist/telemetry/input.d.ts +0 -17
  328. package/dist/telemetry/input.js +0 -68
  329. package/dist/telemetry/marker.d.ts +0 -37
  330. package/dist/telemetry/marker.js +0 -67
  331. package/dist/telemetry/workflow.d.ts +0 -85
  332. package/dist/telemetry/workflow.js +0 -318
  333. package/schemas/spec-driven/templates/plan.md +0 -19
@@ -22,6 +22,18 @@ export const COMMAND_REGISTRY = [
22
22
  takesValue: true,
23
23
  values: ['core', 'custom'],
24
24
  },
25
+ {
26
+ name: 'no-animation',
27
+ description: 'Show a static welcome screen instead of the animated one',
28
+ },
29
+ {
30
+ name: 'copilot-cloud',
31
+ description: 'Generate GitHub Copilot cloud coding-agent files (opt-in; default: prompt)',
32
+ },
33
+ {
34
+ name: 'no-copilot-cloud',
35
+ description: 'Skip generating GitHub Copilot cloud coding-agent files',
36
+ },
25
37
  ],
26
38
  },
27
39
  {
@@ -62,7 +74,9 @@ export const COMMAND_REGISTRY = [
62
74
  {
63
75
  name: 'view',
64
76
  description: 'Display an interactive dashboard of specs and changes',
65
- flags: [],
77
+ flags: [
78
+ COMMON_FLAGS.store,
79
+ ],
66
80
  },
67
81
  {
68
82
  name: 'validate',
@@ -177,7 +191,7 @@ export const COMMAND_REGISTRY = [
177
191
  },
178
192
  {
179
193
  name: 'instructions',
180
- description: 'Output enriched instructions for creating an artifact or applying tasks',
194
+ description: 'Output enriched instructions for artifacts, apply, or archive',
181
195
  acceptsPositional: true,
182
196
  positionals: [{ name: 'artifact', optional: true }],
183
197
  flags: [
@@ -191,45 +205,6 @@ export const COMMAND_REGISTRY = [
191
205
  description: 'Schema override',
192
206
  takesValue: true,
193
207
  },
194
- {
195
- name: 'record-comprehension-pass',
196
- description: 'Record a successful comprehension quiz pass (use with instructions apply)',
197
- },
198
- {
199
- name: 'score',
200
- description: 'Quiz score 0-100 (required with --record-comprehension-pass)',
201
- takesValue: true,
202
- },
203
- {
204
- name: 'attempt',
205
- description: 'Quiz attempt number',
206
- takesValue: true,
207
- },
208
- {
209
- name: 'question-count',
210
- description: 'Number of quiz questions taken',
211
- takesValue: true,
212
- },
213
- {
214
- name: 'artifact',
215
- description: 'Source artifact to modify (use with: instructions modify)',
216
- takesValue: true,
217
- },
218
- {
219
- name: 'workflow-input',
220
- description: 'User modify request for telemetry (use with: instructions modify)',
221
- takesValue: true,
222
- },
223
- {
224
- name: 'workflow-input-file',
225
- description: 'Read modify request from a file (use with: instructions modify)',
226
- takesValue: true,
227
- },
228
- {
229
- name: 'editor',
230
- description: 'AI editor used (cursor, windsurf, claude)',
231
- takesValue: true,
232
- },
233
208
  COMMON_FLAGS.json,
234
209
  COMMON_FLAGS.store,
235
210
  ],
@@ -279,26 +254,6 @@ export const COMMAND_REGISTRY = [
279
254
  description: 'Workflow schema to use',
280
255
  takesValue: true,
281
256
  },
282
- {
283
- name: 'entry-point',
284
- description: 'Workflow entry point (propose, new, ff, manual)',
285
- takesValue: true,
286
- },
287
- {
288
- name: 'workflow-input',
289
- description: 'User workflow intent for telemetry',
290
- takesValue: true,
291
- },
292
- {
293
- name: 'workflow-input-file',
294
- description: 'Read workflow intent from a file for telemetry',
295
- takesValue: true,
296
- },
297
- {
298
- name: 'editor',
299
- description: 'AI editor used (cursor, windsurf, claude)',
300
- takesValue: true,
301
- },
302
257
  COMMON_FLAGS.json,
303
258
  COMMON_FLAGS.store,
304
259
  ],
@@ -25,47 +25,47 @@ export class BashGenerator {
25
25
  // Dynamic completion helpers from template
26
26
  const helpers = BASH_DYNAMIC_HELPERS;
27
27
  // Assemble final script with template literal
28
- return `# Bash completion script for OpenSpec CLI
29
- # Auto-generated - do not edit manually
30
-
31
- _openspec_completion() {
32
- local cur prev words cword
33
-
34
- # Use _init_completion if available (from bash-completion package)
35
- # The -n : option prevents colons from being treated as word separators
36
- # (important for spec/change IDs that may contain colons)
37
- # Otherwise, fall back to manual initialization
38
- if declare -F _init_completion >/dev/null 2>&1; then
39
- _init_completion -n : || return
40
- else
41
- # Manual fallback when bash-completion is not installed
42
- COMPREPLY=()
43
- cur="\${COMP_WORDS[COMP_CWORD]}"
44
- prev="\${COMP_WORDS[COMP_CWORD-1]}"
45
- words=("\${COMP_WORDS[@]}")
46
- cword=$COMP_CWORD
47
- fi
48
-
49
- local cmd="\${words[1]}"
50
- local subcmd="\${words[2]}"
51
-
52
- # Top-level commands
53
- if [[ $cword -eq 1 ]]; then
54
- local commands="${commandList}"
55
- COMPREPLY=($(compgen -W "$commands" -- "$cur"))
56
- return 0
57
- fi
58
-
59
- # Command-specific completion
60
- case "$cmd" in
61
- ${commandCases}
62
- esac
63
-
64
- return 0
65
- }
66
-
67
- ${helpers}
68
- complete -F _openspec_completion openspec
28
+ return `# Bash completion script for OpenSpec CLI
29
+ # Auto-generated - do not edit manually
30
+
31
+ _openspec_completion() {
32
+ local cur prev words cword
33
+
34
+ # Use _init_completion if available (from bash-completion package)
35
+ # The -n : option prevents colons from being treated as word separators
36
+ # (important for spec/change IDs that may contain colons)
37
+ # Otherwise, fall back to manual initialization
38
+ if declare -F _init_completion >/dev/null 2>&1; then
39
+ _init_completion -n : || return
40
+ else
41
+ # Manual fallback when bash-completion is not installed
42
+ COMPREPLY=()
43
+ cur="\${COMP_WORDS[COMP_CWORD]}"
44
+ prev="\${COMP_WORDS[COMP_CWORD-1]}"
45
+ words=("\${COMP_WORDS[@]}")
46
+ cword=$COMP_CWORD
47
+ fi
48
+
49
+ local cmd="\${words[1]}"
50
+ local subcmd="\${words[2]}"
51
+
52
+ # Top-level commands
53
+ if [[ $cword -eq 1 ]]; then
54
+ local commands="${commandList}"
55
+ COMPREPLY=($(compgen -W "$commands" -- "$cur"))
56
+ return 0
57
+ fi
58
+
59
+ # Command-specific completion
60
+ case "$cmd" in
61
+ ${commandCases}
62
+ esac
63
+
64
+ return 0
65
+ }
66
+
67
+ ${helpers}
68
+ complete -F _openspec_completion openspec
69
69
  `;
70
70
  }
71
71
  /**
@@ -31,13 +31,13 @@ export class FishGenerator {
31
31
  // Dynamic completion helpers from template
32
32
  const dynamicHelpers = FISH_DYNAMIC_HELPERS;
33
33
  // Assemble final script with template literal
34
- return `# Fish completion script for OpenSpec CLI
35
- # Auto-generated - do not edit manually
36
-
37
- ${helperFunctions}
38
- ${dynamicHelpers}
39
- ${topLevelCommands}
40
-
34
+ return `# Fish completion script for OpenSpec CLI
35
+ # Auto-generated - do not edit manually
36
+
37
+ ${helperFunctions}
38
+ ${dynamicHelpers}
39
+ ${topLevelCommands}
40
+
41
41
  ${commandCompletions}`;
42
42
  }
43
43
  /**
@@ -35,35 +35,35 @@ export class PowerShellGenerator {
35
35
  // Dynamic completion helpers from template
36
36
  const helpers = POWERSHELL_DYNAMIC_HELPERS;
37
37
  // Assemble final script with template literal
38
- return `# PowerShell completion script for OpenSpec CLI
39
- # Auto-generated - do not edit manually
40
-
41
- ${helpers}
42
- $openspecCompleter = {
43
- param($wordToComplete, $commandAst, $cursorPosition)
44
-
45
- $tokens = $commandAst.ToString() -split "\\s+"
46
- $commandCount = ($tokens | Measure-Object).Count
47
-
48
- # Top-level commands
49
- if ($commandCount -eq 1 -or ($commandCount -eq 2 -and $wordToComplete)) {
50
- $commands = @(
51
- ${topLevelCommands}
52
- )
53
- $commands | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object {
54
- [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, "ParameterValue", $_.Description)
55
- }
56
- return
57
- }
58
-
59
- $command = $tokens[1]
60
-
61
- switch ($command) {
62
- ${commandCases}
63
- }
64
- }
65
-
66
- Register-ArgumentCompleter -CommandName openspec -ScriptBlock $openspecCompleter
38
+ return `# PowerShell completion script for OpenSpec CLI
39
+ # Auto-generated - do not edit manually
40
+
41
+ ${helpers}
42
+ $openspecCompleter = {
43
+ param($wordToComplete, $commandAst, $cursorPosition)
44
+
45
+ $tokens = $commandAst.ToString() -split "\\s+"
46
+ $commandCount = ($tokens | Measure-Object).Count
47
+
48
+ # Top-level commands
49
+ if ($commandCount -eq 1 -or ($commandCount -eq 2 -and $wordToComplete)) {
50
+ $commands = @(
51
+ ${topLevelCommands}
52
+ )
53
+ $commands | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object {
54
+ [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, "ParameterValue", $_.Description)
55
+ }
56
+ return
57
+ }
58
+
59
+ $command = $tokens[1]
60
+
61
+ switch ($command) {
62
+ ${commandCases}
63
+ }
64
+ }
65
+
66
+ Register-ArgumentCompleter -CommandName openspec -ScriptBlock $openspecCompleter
67
67
  `;
68
68
  }
69
69
  /**
@@ -164,6 +164,20 @@ Register-ArgumentCompleter -CommandName openspec -ScriptBlock $openspecCompleter
164
164
  return lines;
165
165
  }
166
166
  generateIndexedPositionalCompletion(positionals, flags, firstPositionalTokenIndex, indent) {
167
+ const caseLines = [];
168
+ for (const [index, positional] of positionals.entries()) {
169
+ const completion = this.generatePositionalCompletion(positional.type, indent + ' ');
170
+ if (completion.length === 0)
171
+ continue;
172
+ caseLines.push(`${indent} ${index} {`);
173
+ caseLines.push(...completion);
174
+ caseLines.push(`${indent} }`);
175
+ }
176
+ // A switch with no clauses is a PowerShell parse error, so when no
177
+ // positional produces completions skip the whole block (it would only
178
+ // feed the empty switch anyway).
179
+ if (caseLines.length === 0)
180
+ return [];
167
181
  const lines = [];
168
182
  const valueFlags = this.generateValueFlags(flags);
169
183
  if (valueFlags.length > 0) {
@@ -192,14 +206,7 @@ Register-ArgumentCompleter -CommandName openspec -ScriptBlock $openspecCompleter
192
206
  lines.push(`${indent}}`);
193
207
  lines.push('');
194
208
  lines.push(`${indent}switch ($positionalIndex) {`);
195
- for (const [index, positional] of positionals.entries()) {
196
- const completion = this.generatePositionalCompletion(positional.type, indent + ' ');
197
- if (completion.length === 0)
198
- continue;
199
- lines.push(`${indent} ${index} {`);
200
- lines.push(...completion);
201
- lines.push(`${indent} }`);
202
- }
209
+ lines.push(...caseLines);
203
210
  lines.push(`${indent}}`);
204
211
  return lines;
205
212
  }
@@ -37,39 +37,39 @@ export class ZshGenerator {
37
37
  // Dynamic completion helpers from template
38
38
  const helpers = ZSH_DYNAMIC_HELPERS;
39
39
  // Assemble final script with template literal
40
- return `#compdef openspec
41
-
42
- # Zsh completion script for OpenSpec CLI
43
- # Auto-generated - do not edit manually
44
-
45
- _openspec() {
46
- local context state line
47
- typeset -A opt_args
48
-
49
- local -a commands
50
- commands=(
51
- ${commandList}
52
- )
53
-
54
- _arguments -C \\
55
- "1: :->command" \\
56
- "*::arg:->args"
57
-
58
- case $state in
59
- command)
60
- _describe "openspec command" commands
61
- ;;
62
- args)
63
- case $words[1] in
64
- ${commandCases}
65
- esac
66
- ;;
67
- esac
68
- }
69
-
70
- ${commandFunctions}
71
- ${helpers}
72
- compdef _openspec openspec
40
+ return `#compdef openspec
41
+
42
+ # Zsh completion script for OpenSpec CLI
43
+ # Auto-generated - do not edit manually
44
+
45
+ _openspec() {
46
+ local context state line
47
+ typeset -A opt_args
48
+
49
+ local -a commands
50
+ commands=(
51
+ ${commandList}
52
+ )
53
+
54
+ _arguments -C \\
55
+ "1: :->command" \\
56
+ "*::arg:->args"
57
+
58
+ case $state in
59
+ command)
60
+ _describe "openspec command" commands
61
+ ;;
62
+ args)
63
+ case $words[1] in
64
+ ${commandCases}
65
+ esac
66
+ ;;
67
+ esac
68
+ }
69
+
70
+ ${commandFunctions}
71
+ ${helpers}
72
+ compdef _openspec openspec
73
73
  `;
74
74
  }
75
75
  /**
@@ -16,6 +16,15 @@ export declare class ZshInstaller {
16
16
  * @returns true if Oh My Zsh is detected via $ZSH env var or directory exists
17
17
  */
18
18
  isOhMyZshInstalled(): Promise<boolean>;
19
+ /**
20
+ * Oh My Zsh exports its root as $ZSH; honor a custom location, or the
21
+ * completion lands in a ~/.oh-my-zsh tree that nothing ever loads.
22
+ */
23
+ private ohMyZshRoot;
24
+ /**
25
+ * The custom dir is separately relocatable via $ZSH_CUSTOM.
26
+ */
27
+ private ohMyZshCustomDir;
19
28
  /**
20
29
  * Get the appropriate installation path for the completion script
21
30
  *
@@ -29,15 +29,27 @@ export class ZshInstaller {
29
29
  return true;
30
30
  }
31
31
  // Fall back to checking for ~/.oh-my-zsh directory
32
- const ohMyZshPath = path.join(this.homeDir, '.oh-my-zsh');
33
32
  try {
34
- const stat = await fs.stat(ohMyZshPath);
33
+ const stat = await fs.stat(this.ohMyZshRoot());
35
34
  return stat.isDirectory();
36
35
  }
37
36
  catch {
38
37
  return false;
39
38
  }
40
39
  }
40
+ /**
41
+ * Oh My Zsh exports its root as $ZSH; honor a custom location, or the
42
+ * completion lands in a ~/.oh-my-zsh tree that nothing ever loads.
43
+ */
44
+ ohMyZshRoot() {
45
+ return process.env.ZSH || path.join(this.homeDir, '.oh-my-zsh');
46
+ }
47
+ /**
48
+ * The custom dir is separately relocatable via $ZSH_CUSTOM.
49
+ */
50
+ ohMyZshCustomDir() {
51
+ return process.env.ZSH_CUSTOM || path.join(this.ohMyZshRoot(), 'custom');
52
+ }
41
53
  /**
42
54
  * Get the appropriate installation path for the completion script
43
55
  *
@@ -48,7 +60,7 @@ export class ZshInstaller {
48
60
  if (isOhMyZsh) {
49
61
  // Oh My Zsh custom completions directory
50
62
  return {
51
- path: path.join(this.homeDir, '.oh-my-zsh', 'custom', 'completions', '_openspec'),
63
+ path: path.join(this.ohMyZshCustomDir(), 'completions', '_openspec'),
52
64
  isOhMyZsh: true,
53
65
  };
54
66
  }
@@ -292,10 +304,14 @@ export class ZshInstaller {
292
304
  * @returns Array of guidance strings, or undefined if not needed
293
305
  */
294
306
  generateOhMyZshFpathGuidance(completionsDir) {
307
+ // One fpath entry per line, matched as a literal: a relocated $ZSH_CUSTOM
308
+ // need not contain "custom/completions", and the path may hold characters
309
+ // grep would otherwise read as a pattern. Single-quoted for the shell.
310
+ const quotedDir = `'${completionsDir.replace(/'/g, `'\\''`)}'`;
295
311
  return [
296
312
  'Note: Oh My Zsh typically auto-loads completions from custom/completions.',
297
313
  `Verify that ${completionsDir} is in your fpath by running:`,
298
- ' echo $fpath | grep "custom/completions"',
314
+ ` printf '%s\\n' $fpath | grep -F ${quotedDir}`,
299
315
  '',
300
316
  'If not found, completions may not work. Restart your shell to ensure changes take effect.',
301
317
  ];
@@ -2,29 +2,29 @@
2
2
  * Static template strings for Bash completion scripts.
3
3
  * These are Bash-specific helper functions that never change.
4
4
  */
5
- export const BASH_DYNAMIC_HELPERS = `# Dynamic completion helpers
6
-
7
- _openspec_complete_changes() {
8
- local changes
9
- changes=$(openspec __complete changes 2>/dev/null | cut -f1)
10
- COMPREPLY=($(compgen -W "$changes" -- "$cur"))
11
- }
12
-
13
- _openspec_complete_specs() {
14
- local specs
15
- specs=$(openspec __complete specs 2>/dev/null | cut -f1)
16
- COMPREPLY=($(compgen -W "$specs" -- "$cur"))
17
- }
18
-
19
- _openspec_complete_items() {
20
- local items
21
- items=$(openspec __complete changes 2>/dev/null | cut -f1; openspec __complete specs 2>/dev/null | cut -f1)
22
- COMPREPLY=($(compgen -W "$items" -- "$cur"))
23
- }
24
-
25
- _openspec_complete_schemas() {
26
- local schemas
27
- schemas=$(openspec __complete schemas 2>/dev/null | cut -f1)
28
- COMPREPLY=($(compgen -W "$schemas" -- "$cur"))
5
+ export const BASH_DYNAMIC_HELPERS = `# Dynamic completion helpers
6
+
7
+ _openspec_complete_changes() {
8
+ local changes
9
+ changes=$(openspec __complete changes 2>/dev/null | cut -f1)
10
+ COMPREPLY=($(compgen -W "$changes" -- "$cur"))
11
+ }
12
+
13
+ _openspec_complete_specs() {
14
+ local specs
15
+ specs=$(openspec __complete specs 2>/dev/null | cut -f1)
16
+ COMPREPLY=($(compgen -W "$specs" -- "$cur"))
17
+ }
18
+
19
+ _openspec_complete_items() {
20
+ local items
21
+ items=$(openspec __complete changes 2>/dev/null | cut -f1; openspec __complete specs 2>/dev/null | cut -f1)
22
+ COMPREPLY=($(compgen -W "$items" -- "$cur"))
23
+ }
24
+
25
+ _openspec_complete_schemas() {
26
+ local schemas
27
+ schemas=$(openspec __complete schemas 2>/dev/null | cut -f1)
28
+ COMPREPLY=($(compgen -W "$schemas" -- "$cur"))
29
29
  }`;
30
30
  //# sourceMappingURL=bash-templates.js.map
@@ -2,44 +2,44 @@
2
2
  * Static template strings for Fish completion scripts.
3
3
  * These are Fish-specific helper functions that never change.
4
4
  */
5
- export const FISH_STATIC_HELPERS = `# Helper function to check if a subcommand is present
6
- function __fish_openspec_using_subcommand
7
- set -l cmd (commandline -opc)
8
- set -e cmd[1]
9
- for i in $argv
10
- if contains -- $i $cmd
11
- return 0
12
- end
13
- end
14
- return 1
15
- end
16
-
17
- function __fish_openspec_no_subcommand
18
- set -l cmd (commandline -opc)
19
- test (count $cmd) -eq 1
5
+ export const FISH_STATIC_HELPERS = `# Helper function to check if a subcommand is present
6
+ function __fish_openspec_using_subcommand
7
+ set -l cmd (commandline -opc)
8
+ set -e cmd[1]
9
+ for i in $argv
10
+ if contains -- $i $cmd
11
+ return 0
12
+ end
13
+ end
14
+ return 1
15
+ end
16
+
17
+ function __fish_openspec_no_subcommand
18
+ set -l cmd (commandline -opc)
19
+ test (count $cmd) -eq 1
20
20
  end`;
21
- export const FISH_DYNAMIC_HELPERS = `# Dynamic completion helpers
22
-
23
- function __fish_openspec_changes
24
- openspec __complete changes 2>/dev/null | while read -l id desc
25
- printf '%s\\t%s\\n' "$id" "$desc"
26
- end
27
- end
28
-
29
- function __fish_openspec_specs
30
- openspec __complete specs 2>/dev/null | while read -l id desc
31
- printf '%s\\t%s\\n' "$id" "$desc"
32
- end
33
- end
34
-
35
- function __fish_openspec_items
36
- __fish_openspec_changes
37
- __fish_openspec_specs
38
- end
39
-
40
- function __fish_openspec_schemas
41
- openspec __complete schemas 2>/dev/null | while read -l id desc
42
- printf '%s\\t%s\\n' "$id" "$desc"
43
- end
21
+ export const FISH_DYNAMIC_HELPERS = `# Dynamic completion helpers
22
+
23
+ function __fish_openspec_changes
24
+ openspec __complete changes 2>/dev/null | while read -l id desc
25
+ printf '%s\\t%s\\n' "$id" "$desc"
26
+ end
27
+ end
28
+
29
+ function __fish_openspec_specs
30
+ openspec __complete specs 2>/dev/null | while read -l id desc
31
+ printf '%s\\t%s\\n' "$id" "$desc"
32
+ end
33
+ end
34
+
35
+ function __fish_openspec_items
36
+ __fish_openspec_changes
37
+ __fish_openspec_specs
38
+ end
39
+
40
+ function __fish_openspec_schemas
41
+ openspec __complete schemas 2>/dev/null | while read -l id desc
42
+ printf '%s\\t%s\\n' "$id" "$desc"
43
+ end
44
44
  end`;
45
45
  //# sourceMappingURL=fish-templates.js.map
@@ -2,33 +2,33 @@
2
2
  * Static template strings for PowerShell completion scripts.
3
3
  * These are PowerShell-specific helper functions that never change.
4
4
  */
5
- export const POWERSHELL_DYNAMIC_HELPERS = `# Dynamic completion helpers
6
-
7
- function Get-OpenSpecChanges {
8
- $output = openspec __complete changes 2>$null
9
- if ($output) {
10
- $output | ForEach-Object {
11
- ($_ -split "\\t")[0]
12
- }
13
- }
14
- }
15
-
16
- function Get-OpenSpecSpecs {
17
- $output = openspec __complete specs 2>$null
18
- if ($output) {
19
- $output | ForEach-Object {
20
- ($_ -split "\\t")[0]
21
- }
22
- }
23
- }
24
-
25
- function Get-OpenSpecSchemas {
26
- $output = openspec __complete schemas 2>$null
27
- if ($output) {
28
- $output | ForEach-Object {
29
- ($_ -split "\\t")[0]
30
- }
31
- }
32
- }
5
+ export const POWERSHELL_DYNAMIC_HELPERS = `# Dynamic completion helpers
6
+
7
+ function Get-OpenSpecChanges {
8
+ $output = openspec __complete changes 2>$null
9
+ if ($output) {
10
+ $output | ForEach-Object {
11
+ ($_ -split "\\t")[0]
12
+ }
13
+ }
14
+ }
15
+
16
+ function Get-OpenSpecSpecs {
17
+ $output = openspec __complete specs 2>$null
18
+ if ($output) {
19
+ $output | ForEach-Object {
20
+ ($_ -split "\\t")[0]
21
+ }
22
+ }
23
+ }
24
+
25
+ function Get-OpenSpecSchemas {
26
+ $output = openspec __complete schemas 2>$null
27
+ if ($output) {
28
+ $output | ForEach-Object {
29
+ ($_ -split "\\t")[0]
30
+ }
31
+ }
32
+ }
33
33
  `;
34
34
  //# sourceMappingURL=powershell-templates.js.map