@dynamicworks/br-openspec 1.3.1

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 (291) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +210 -0
  3. package/README.pt-BR.md +212 -0
  4. package/bin/openspec.js +3 -0
  5. package/dist/cli/index.d.ts +2 -0
  6. package/dist/cli/index.js +484 -0
  7. package/dist/commands/change.d.ts +35 -0
  8. package/dist/commands/change.js +278 -0
  9. package/dist/commands/completion.d.ts +72 -0
  10. package/dist/commands/completion.js +258 -0
  11. package/dist/commands/config.d.ts +36 -0
  12. package/dist/commands/config.js +553 -0
  13. package/dist/commands/feedback.d.ts +9 -0
  14. package/dist/commands/feedback.js +184 -0
  15. package/dist/commands/schema.d.ts +6 -0
  16. package/dist/commands/schema.js +869 -0
  17. package/dist/commands/show.d.ts +14 -0
  18. package/dist/commands/show.js +133 -0
  19. package/dist/commands/spec.d.ts +15 -0
  20. package/dist/commands/spec.js +226 -0
  21. package/dist/commands/tools.d.ts +11 -0
  22. package/dist/commands/tools.js +252 -0
  23. package/dist/commands/validate.d.ts +24 -0
  24. package/dist/commands/validate.js +295 -0
  25. package/dist/commands/workflow/index.d.ts +17 -0
  26. package/dist/commands/workflow/index.js +12 -0
  27. package/dist/commands/workflow/instructions.d.ts +29 -0
  28. package/dist/commands/workflow/instructions.js +328 -0
  29. package/dist/commands/workflow/new-change.d.ts +11 -0
  30. package/dist/commands/workflow/new-change.js +44 -0
  31. package/dist/commands/workflow/schemas.d.ts +10 -0
  32. package/dist/commands/workflow/schemas.js +35 -0
  33. package/dist/commands/workflow/shared.d.ts +57 -0
  34. package/dist/commands/workflow/shared.js +117 -0
  35. package/dist/commands/workflow/status.d.ts +14 -0
  36. package/dist/commands/workflow/status.js +76 -0
  37. package/dist/commands/workflow/templates.d.ts +16 -0
  38. package/dist/commands/workflow/templates.js +70 -0
  39. package/dist/core/archive.d.ts +11 -0
  40. package/dist/core/archive.js +322 -0
  41. package/dist/core/artifact-graph/graph.d.ts +56 -0
  42. package/dist/core/artifact-graph/graph.js +141 -0
  43. package/dist/core/artifact-graph/index.d.ts +8 -0
  44. package/dist/core/artifact-graph/index.js +14 -0
  45. package/dist/core/artifact-graph/instruction-loader.d.ts +143 -0
  46. package/dist/core/artifact-graph/instruction-loader.js +217 -0
  47. package/dist/core/artifact-graph/outputs.d.ts +14 -0
  48. package/dist/core/artifact-graph/outputs.js +39 -0
  49. package/dist/core/artifact-graph/resolver.d.ts +81 -0
  50. package/dist/core/artifact-graph/resolver.js +258 -0
  51. package/dist/core/artifact-graph/schema.d.ts +13 -0
  52. package/dist/core/artifact-graph/schema.js +108 -0
  53. package/dist/core/artifact-graph/state.d.ts +12 -0
  54. package/dist/core/artifact-graph/state.js +31 -0
  55. package/dist/core/artifact-graph/types.d.ts +45 -0
  56. package/dist/core/artifact-graph/types.js +43 -0
  57. package/dist/core/available-tools.d.ts +17 -0
  58. package/dist/core/available-tools.js +43 -0
  59. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  60. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  61. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  62. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  63. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  64. package/dist/core/command-generation/adapters/auggie.js +27 -0
  65. package/dist/core/command-generation/adapters/bob.d.ts +14 -0
  66. package/dist/core/command-generation/adapters/bob.js +45 -0
  67. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  68. package/dist/core/command-generation/adapters/claude.js +50 -0
  69. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  70. package/dist/core/command-generation/adapters/cline.js +27 -0
  71. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  72. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  73. package/dist/core/command-generation/adapters/codex.d.ts +16 -0
  74. package/dist/core/command-generation/adapters/codex.js +39 -0
  75. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  76. package/dist/core/command-generation/adapters/continue.js +28 -0
  77. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  78. package/dist/core/command-generation/adapters/costrict.js +27 -0
  79. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  80. package/dist/core/command-generation/adapters/crush.js +30 -0
  81. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  82. package/dist/core/command-generation/adapters/cursor.js +44 -0
  83. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  84. package/dist/core/command-generation/adapters/factory.js +27 -0
  85. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  86. package/dist/core/command-generation/adapters/gemini.js +26 -0
  87. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  88. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  89. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  90. package/dist/core/command-generation/adapters/iflow.js +29 -0
  91. package/dist/core/command-generation/adapters/index.d.ts +32 -0
  92. package/dist/core/command-generation/adapters/index.js +32 -0
  93. package/dist/core/command-generation/adapters/junie.d.ts +13 -0
  94. package/dist/core/command-generation/adapters/junie.js +26 -0
  95. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  96. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  97. package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
  98. package/dist/core/command-generation/adapters/kiro.js +26 -0
  99. package/dist/core/command-generation/adapters/lingma.d.ts +13 -0
  100. package/dist/core/command-generation/adapters/lingma.js +30 -0
  101. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  102. package/dist/core/command-generation/adapters/opencode.js +29 -0
  103. package/dist/core/command-generation/adapters/pi.d.ts +18 -0
  104. package/dist/core/command-generation/adapters/pi.js +55 -0
  105. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  106. package/dist/core/command-generation/adapters/qoder.js +30 -0
  107. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  108. package/dist/core/command-generation/adapters/qwen.js +26 -0
  109. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  110. package/dist/core/command-generation/adapters/roocode.js +27 -0
  111. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  112. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  113. package/dist/core/command-generation/generator.d.ts +21 -0
  114. package/dist/core/command-generation/generator.js +27 -0
  115. package/dist/core/command-generation/index.d.ts +22 -0
  116. package/dist/core/command-generation/index.js +24 -0
  117. package/dist/core/command-generation/registry.d.ts +36 -0
  118. package/dist/core/command-generation/registry.js +98 -0
  119. package/dist/core/command-generation/types.d.ts +56 -0
  120. package/dist/core/command-generation/types.js +8 -0
  121. package/dist/core/completions/command-registry.d.ts +7 -0
  122. package/dist/core/completions/command-registry.js +462 -0
  123. package/dist/core/completions/completion-provider.d.ts +60 -0
  124. package/dist/core/completions/completion-provider.js +102 -0
  125. package/dist/core/completions/factory.d.ts +64 -0
  126. package/dist/core/completions/factory.js +75 -0
  127. package/dist/core/completions/generators/bash-generator.d.ts +32 -0
  128. package/dist/core/completions/generators/bash-generator.js +174 -0
  129. package/dist/core/completions/generators/fish-generator.d.ts +32 -0
  130. package/dist/core/completions/generators/fish-generator.js +157 -0
  131. package/dist/core/completions/generators/powershell-generator.d.ts +33 -0
  132. package/dist/core/completions/generators/powershell-generator.js +208 -0
  133. package/dist/core/completions/generators/zsh-generator.d.ts +44 -0
  134. package/dist/core/completions/generators/zsh-generator.js +250 -0
  135. package/dist/core/completions/installers/bash-installer.d.ts +87 -0
  136. package/dist/core/completions/installers/bash-installer.js +319 -0
  137. package/dist/core/completions/installers/fish-installer.d.ts +43 -0
  138. package/dist/core/completions/installers/fish-installer.js +143 -0
  139. package/dist/core/completions/installers/powershell-installer.d.ts +102 -0
  140. package/dist/core/completions/installers/powershell-installer.js +400 -0
  141. package/dist/core/completions/installers/zsh-installer.d.ts +125 -0
  142. package/dist/core/completions/installers/zsh-installer.js +450 -0
  143. package/dist/core/completions/templates/bash-templates.d.ts +6 -0
  144. package/dist/core/completions/templates/bash-templates.js +24 -0
  145. package/dist/core/completions/templates/fish-templates.d.ts +7 -0
  146. package/dist/core/completions/templates/fish-templates.js +39 -0
  147. package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
  148. package/dist/core/completions/templates/powershell-templates.js +25 -0
  149. package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
  150. package/dist/core/completions/templates/zsh-templates.js +36 -0
  151. package/dist/core/completions/types.d.ts +79 -0
  152. package/dist/core/completions/types.js +2 -0
  153. package/dist/core/config-prompts.d.ts +9 -0
  154. package/dist/core/config-prompts.js +34 -0
  155. package/dist/core/config-schema.d.ts +86 -0
  156. package/dist/core/config-schema.js +213 -0
  157. package/dist/core/config.d.ts +18 -0
  158. package/dist/core/config.js +38 -0
  159. package/dist/core/converters/json-converter.d.ts +6 -0
  160. package/dist/core/converters/json-converter.js +51 -0
  161. package/dist/core/global-config.d.ts +44 -0
  162. package/dist/core/global-config.js +125 -0
  163. package/dist/core/index.d.ts +2 -0
  164. package/dist/core/index.js +3 -0
  165. package/dist/core/init.d.ts +37 -0
  166. package/dist/core/init.js +549 -0
  167. package/dist/core/is-project-initialized.d.ts +12 -0
  168. package/dist/core/is-project-initialized.js +18 -0
  169. package/dist/core/legacy-cleanup.d.ts +162 -0
  170. package/dist/core/legacy-cleanup.js +515 -0
  171. package/dist/core/list.d.ts +9 -0
  172. package/dist/core/list.js +172 -0
  173. package/dist/core/migration.d.ts +23 -0
  174. package/dist/core/migration.js +109 -0
  175. package/dist/core/parsers/change-parser.d.ts +13 -0
  176. package/dist/core/parsers/change-parser.js +197 -0
  177. package/dist/core/parsers/markdown-parser.d.ts +26 -0
  178. package/dist/core/parsers/markdown-parser.js +228 -0
  179. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  180. package/dist/core/parsers/requirement-blocks.js +201 -0
  181. package/dist/core/parsers/spec-structure.d.ts +9 -0
  182. package/dist/core/parsers/spec-structure.js +88 -0
  183. package/dist/core/profile-sync-drift.d.ts +38 -0
  184. package/dist/core/profile-sync-drift.js +200 -0
  185. package/dist/core/profiles.d.ts +26 -0
  186. package/dist/core/profiles.js +40 -0
  187. package/dist/core/project-config.d.ts +64 -0
  188. package/dist/core/project-config.js +224 -0
  189. package/dist/core/schemas/base.schema.d.ts +13 -0
  190. package/dist/core/schemas/base.schema.js +13 -0
  191. package/dist/core/schemas/change.schema.d.ts +73 -0
  192. package/dist/core/schemas/change.schema.js +31 -0
  193. package/dist/core/schemas/index.d.ts +4 -0
  194. package/dist/core/schemas/index.js +4 -0
  195. package/dist/core/schemas/spec.schema.d.ts +18 -0
  196. package/dist/core/schemas/spec.schema.js +15 -0
  197. package/dist/core/shared/index.d.ts +8 -0
  198. package/dist/core/shared/index.js +8 -0
  199. package/dist/core/shared/skill-generation.d.ts +49 -0
  200. package/dist/core/shared/skill-generation.js +96 -0
  201. package/dist/core/shared/tool-detection.d.ts +71 -0
  202. package/dist/core/shared/tool-detection.js +158 -0
  203. package/dist/core/specs-apply.d.ts +73 -0
  204. package/dist/core/specs-apply.js +393 -0
  205. package/dist/core/styles/palette.d.ts +7 -0
  206. package/dist/core/styles/palette.js +8 -0
  207. package/dist/core/templates/index.d.ts +8 -0
  208. package/dist/core/templates/index.js +9 -0
  209. package/dist/core/templates/skill-templates.d.ts +20 -0
  210. package/dist/core/templates/skill-templates.js +19 -0
  211. package/dist/core/templates/types.d.ts +19 -0
  212. package/dist/core/templates/types.js +5 -0
  213. package/dist/core/templates/workflows/apply-change.d.ts +10 -0
  214. package/dist/core/templates/workflows/apply-change.js +308 -0
  215. package/dist/core/templates/workflows/archive-change.d.ts +10 -0
  216. package/dist/core/templates/workflows/archive-change.js +271 -0
  217. package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
  218. package/dist/core/templates/workflows/bulk-archive-change.js +492 -0
  219. package/dist/core/templates/workflows/continue-change.d.ts +10 -0
  220. package/dist/core/templates/workflows/continue-change.js +232 -0
  221. package/dist/core/templates/workflows/explore.d.ts +10 -0
  222. package/dist/core/templates/workflows/explore.js +463 -0
  223. package/dist/core/templates/workflows/feedback.d.ts +9 -0
  224. package/dist/core/templates/workflows/feedback.js +108 -0
  225. package/dist/core/templates/workflows/ff-change.d.ts +10 -0
  226. package/dist/core/templates/workflows/ff-change.js +198 -0
  227. package/dist/core/templates/workflows/new-change.d.ts +10 -0
  228. package/dist/core/templates/workflows/new-change.js +21 -0
  229. package/dist/core/templates/workflows/onboard.d.ts +10 -0
  230. package/dist/core/templates/workflows/onboard.js +21 -0
  231. package/dist/core/templates/workflows/propose.d.ts +10 -0
  232. package/dist/core/templates/workflows/propose.js +216 -0
  233. package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
  234. package/dist/core/templates/workflows/sync-specs.js +272 -0
  235. package/dist/core/templates/workflows/upstream-sync.d.ts +10 -0
  236. package/dist/core/templates/workflows/upstream-sync.js +116 -0
  237. package/dist/core/templates/workflows/verify-change.d.ts +10 -0
  238. package/dist/core/templates/workflows/verify-change.js +21 -0
  239. package/dist/core/tools-manager.d.ts +56 -0
  240. package/dist/core/tools-manager.js +215 -0
  241. package/dist/core/update.d.ts +77 -0
  242. package/dist/core/update.js +538 -0
  243. package/dist/core/validation/constants.d.ts +34 -0
  244. package/dist/core/validation/constants.js +40 -0
  245. package/dist/core/validation/types.d.ts +18 -0
  246. package/dist/core/validation/types.js +2 -0
  247. package/dist/core/validation/validator.d.ts +33 -0
  248. package/dist/core/validation/validator.js +419 -0
  249. package/dist/core/view.d.ts +8 -0
  250. package/dist/core/view.js +169 -0
  251. package/dist/index.d.ts +3 -0
  252. package/dist/index.js +3 -0
  253. package/dist/messages/index.d.ts +867 -0
  254. package/dist/messages/index.js +1960 -0
  255. package/dist/prompts/searchable-multi-select.d.ts +28 -0
  256. package/dist/prompts/searchable-multi-select.js +160 -0
  257. package/dist/telemetry/config.d.ts +38 -0
  258. package/dist/telemetry/config.js +136 -0
  259. package/dist/telemetry/index.d.ts +31 -0
  260. package/dist/telemetry/index.js +165 -0
  261. package/dist/ui/ascii-patterns.d.ts +16 -0
  262. package/dist/ui/ascii-patterns.js +133 -0
  263. package/dist/ui/welcome-screen.d.ts +10 -0
  264. package/dist/ui/welcome-screen.js +147 -0
  265. package/dist/utils/change-metadata.d.ts +51 -0
  266. package/dist/utils/change-metadata.js +147 -0
  267. package/dist/utils/change-utils.d.ts +62 -0
  268. package/dist/utils/change-utils.js +121 -0
  269. package/dist/utils/command-references.d.ts +18 -0
  270. package/dist/utils/command-references.js +20 -0
  271. package/dist/utils/file-system.d.ts +41 -0
  272. package/dist/utils/file-system.js +302 -0
  273. package/dist/utils/index.d.ts +6 -0
  274. package/dist/utils/index.js +9 -0
  275. package/dist/utils/interactive.d.ts +18 -0
  276. package/dist/utils/interactive.js +21 -0
  277. package/dist/utils/item-discovery.d.ts +4 -0
  278. package/dist/utils/item-discovery.js +72 -0
  279. package/dist/utils/match.d.ts +3 -0
  280. package/dist/utils/match.js +22 -0
  281. package/dist/utils/shell-detection.d.ts +20 -0
  282. package/dist/utils/shell-detection.js +41 -0
  283. package/dist/utils/task-progress.d.ts +8 -0
  284. package/dist/utils/task-progress.js +37 -0
  285. package/package.json +84 -0
  286. package/schemas/spec-driven/schema.yaml +153 -0
  287. package/schemas/spec-driven/templates/design.md +19 -0
  288. package/schemas/spec-driven/templates/proposal.md +23 -0
  289. package/schemas/spec-driven/templates/spec.md +8 -0
  290. package/schemas/spec-driven/templates/tasks.md +9 -0
  291. package/scripts/postinstall.js +83 -0
@@ -0,0 +1,462 @@
1
+ import { CLI_DESCRIPTIONS, CONFIG_MESSAGES, SCHEMA_MESSAGES } from '../../messages/index.js';
2
+ /**
3
+ * Common flags used across multiple commands
4
+ */
5
+ const COMMON_FLAGS = {
6
+ json: {
7
+ name: 'json',
8
+ description: CLI_DESCRIPTIONS.showJson,
9
+ },
10
+ jsonValidation: {
11
+ name: 'json',
12
+ description: CLI_DESCRIPTIONS.validateJson,
13
+ },
14
+ strict: {
15
+ name: 'strict',
16
+ description: CLI_DESCRIPTIONS.validateStrict,
17
+ },
18
+ noInteractive: {
19
+ name: 'no-interactive',
20
+ description: CLI_DESCRIPTIONS.showNoInteractive,
21
+ },
22
+ type: {
23
+ name: 'type',
24
+ description: CLI_DESCRIPTIONS.validateType,
25
+ takesValue: true,
26
+ values: ['change', 'spec'],
27
+ },
28
+ };
29
+ /**
30
+ * Registry of all BR-OpenSpec CLI commands with their flags and metadata.
31
+ * This registry is used to generate shell completion scripts.
32
+ */
33
+ export const COMMAND_REGISTRY = [
34
+ {
35
+ name: 'init',
36
+ description: CLI_DESCRIPTIONS.init,
37
+ acceptsPositional: true,
38
+ positionalType: 'path',
39
+ flags: [
40
+ {
41
+ name: 'tools',
42
+ description: CLI_DESCRIPTIONS.toolsOption,
43
+ takesValue: true,
44
+ },
45
+ ],
46
+ },
47
+ {
48
+ name: 'update',
49
+ description: CLI_DESCRIPTIONS.update,
50
+ acceptsPositional: true,
51
+ positionalType: 'path',
52
+ flags: [],
53
+ },
54
+ {
55
+ name: 'list',
56
+ description: CLI_DESCRIPTIONS.list,
57
+ flags: [
58
+ {
59
+ name: 'specs',
60
+ description: CLI_DESCRIPTIONS.listSpecs,
61
+ },
62
+ {
63
+ name: 'changes',
64
+ description: CLI_DESCRIPTIONS.listChanges,
65
+ },
66
+ ],
67
+ },
68
+ {
69
+ name: 'view',
70
+ description: CLI_DESCRIPTIONS.view,
71
+ flags: [],
72
+ },
73
+ {
74
+ name: 'validate',
75
+ description: CLI_DESCRIPTIONS.validate,
76
+ acceptsPositional: true,
77
+ positionalType: 'change-or-spec-id',
78
+ flags: [
79
+ {
80
+ name: 'all',
81
+ description: CLI_DESCRIPTIONS.validateAll,
82
+ },
83
+ {
84
+ name: 'changes',
85
+ description: CLI_DESCRIPTIONS.validateChanges,
86
+ },
87
+ {
88
+ name: 'specs',
89
+ description: CLI_DESCRIPTIONS.validateSpecs,
90
+ },
91
+ COMMON_FLAGS.type,
92
+ COMMON_FLAGS.strict,
93
+ COMMON_FLAGS.jsonValidation,
94
+ {
95
+ name: 'concurrency',
96
+ description: CLI_DESCRIPTIONS.validateConcurrency,
97
+ takesValue: true,
98
+ },
99
+ COMMON_FLAGS.noInteractive,
100
+ ],
101
+ },
102
+ {
103
+ name: 'show',
104
+ description: CLI_DESCRIPTIONS.show,
105
+ acceptsPositional: true,
106
+ positionalType: 'change-or-spec-id',
107
+ flags: [
108
+ COMMON_FLAGS.json,
109
+ COMMON_FLAGS.type,
110
+ COMMON_FLAGS.noInteractive,
111
+ {
112
+ name: 'deltas-only',
113
+ description: CLI_DESCRIPTIONS.showDeltasOnly,
114
+ },
115
+ {
116
+ name: 'requirements-only',
117
+ description: CLI_DESCRIPTIONS.showRequirementsOnly,
118
+ },
119
+ {
120
+ name: 'requirements',
121
+ description: CLI_DESCRIPTIONS.showRequirements,
122
+ },
123
+ {
124
+ name: 'no-scenarios',
125
+ description: CLI_DESCRIPTIONS.showNoScenarios,
126
+ },
127
+ {
128
+ name: 'requirement',
129
+ short: 'r',
130
+ description: CLI_DESCRIPTIONS.showRequirement,
131
+ takesValue: true,
132
+ },
133
+ ],
134
+ },
135
+ {
136
+ name: 'archive',
137
+ description: CLI_DESCRIPTIONS.archive,
138
+ acceptsPositional: true,
139
+ positionalType: 'change-id',
140
+ flags: [
141
+ {
142
+ name: 'yes',
143
+ short: 'y',
144
+ description: CLI_DESCRIPTIONS.archiveYes,
145
+ },
146
+ {
147
+ name: 'skip-specs',
148
+ description: CLI_DESCRIPTIONS.archiveSkipSpecs,
149
+ },
150
+ {
151
+ name: 'no-validate',
152
+ description: CLI_DESCRIPTIONS.archiveNoValidate,
153
+ },
154
+ ],
155
+ },
156
+ {
157
+ name: 'feedback',
158
+ description: CLI_DESCRIPTIONS.feedback,
159
+ acceptsPositional: true,
160
+ flags: [
161
+ {
162
+ name: 'body',
163
+ description: CLI_DESCRIPTIONS.feedbackBody,
164
+ takesValue: true,
165
+ },
166
+ ],
167
+ },
168
+ {
169
+ name: 'change',
170
+ description: CLI_DESCRIPTIONS.change,
171
+ flags: [],
172
+ subcommands: [
173
+ {
174
+ name: 'show',
175
+ description: CLI_DESCRIPTIONS.changeShow,
176
+ acceptsPositional: true,
177
+ positionalType: 'change-id',
178
+ flags: [
179
+ COMMON_FLAGS.json,
180
+ {
181
+ name: 'deltas-only',
182
+ description: CLI_DESCRIPTIONS.changeShowDeltasOnly,
183
+ },
184
+ {
185
+ name: 'requirements-only',
186
+ description: CLI_DESCRIPTIONS.changeShowRequirementsOnly,
187
+ },
188
+ COMMON_FLAGS.noInteractive,
189
+ ],
190
+ },
191
+ {
192
+ name: 'list',
193
+ description: CLI_DESCRIPTIONS.changeList,
194
+ flags: [
195
+ COMMON_FLAGS.json,
196
+ {
197
+ name: 'long',
198
+ description: CLI_DESCRIPTIONS.changeListLong,
199
+ },
200
+ ],
201
+ },
202
+ {
203
+ name: 'validate',
204
+ description: CLI_DESCRIPTIONS.changeValidate,
205
+ acceptsPositional: true,
206
+ positionalType: 'change-id',
207
+ flags: [
208
+ COMMON_FLAGS.strict,
209
+ COMMON_FLAGS.jsonValidation,
210
+ COMMON_FLAGS.noInteractive,
211
+ ],
212
+ },
213
+ ],
214
+ },
215
+ {
216
+ name: 'spec',
217
+ description: CLI_DESCRIPTIONS.spec,
218
+ flags: [],
219
+ subcommands: [
220
+ {
221
+ name: 'show',
222
+ description: CLI_DESCRIPTIONS.specShow,
223
+ acceptsPositional: true,
224
+ positionalType: 'spec-id',
225
+ flags: [
226
+ COMMON_FLAGS.json,
227
+ {
228
+ name: 'requirements',
229
+ description: CLI_DESCRIPTIONS.specShowRequirements,
230
+ },
231
+ {
232
+ name: 'no-scenarios',
233
+ description: CLI_DESCRIPTIONS.specShowNoScenarios,
234
+ },
235
+ {
236
+ name: 'requirement',
237
+ short: 'r',
238
+ description: CLI_DESCRIPTIONS.specShowRequirement,
239
+ takesValue: true,
240
+ },
241
+ COMMON_FLAGS.noInteractive,
242
+ ],
243
+ },
244
+ {
245
+ name: 'list',
246
+ description: CLI_DESCRIPTIONS.specList,
247
+ flags: [
248
+ COMMON_FLAGS.json,
249
+ {
250
+ name: 'long',
251
+ description: CLI_DESCRIPTIONS.specListLong,
252
+ },
253
+ ],
254
+ },
255
+ {
256
+ name: 'validate',
257
+ description: CLI_DESCRIPTIONS.specValidate,
258
+ acceptsPositional: true,
259
+ positionalType: 'spec-id',
260
+ flags: [
261
+ COMMON_FLAGS.strict,
262
+ COMMON_FLAGS.jsonValidation,
263
+ COMMON_FLAGS.noInteractive,
264
+ ],
265
+ },
266
+ ],
267
+ },
268
+ {
269
+ name: 'completion',
270
+ description: CLI_DESCRIPTIONS.completion,
271
+ flags: [],
272
+ subcommands: [
273
+ {
274
+ name: 'generate',
275
+ description: CLI_DESCRIPTIONS.completionGenerate,
276
+ acceptsPositional: true,
277
+ positionalType: 'shell',
278
+ flags: [],
279
+ },
280
+ {
281
+ name: 'install',
282
+ description: CLI_DESCRIPTIONS.completionInstall,
283
+ acceptsPositional: true,
284
+ positionalType: 'shell',
285
+ flags: [
286
+ {
287
+ name: 'verbose',
288
+ description: CLI_DESCRIPTIONS.completionVerbose,
289
+ },
290
+ ],
291
+ },
292
+ {
293
+ name: 'uninstall',
294
+ description: CLI_DESCRIPTIONS.completionUninstall,
295
+ acceptsPositional: true,
296
+ positionalType: 'shell',
297
+ flags: [
298
+ {
299
+ name: 'yes',
300
+ short: 'y',
301
+ description: CLI_DESCRIPTIONS.yesSkipConfirm,
302
+ },
303
+ ],
304
+ },
305
+ ],
306
+ },
307
+ {
308
+ name: 'config',
309
+ description: CONFIG_MESSAGES.viewAndModify,
310
+ flags: [
311
+ {
312
+ name: 'scope',
313
+ description: CONFIG_MESSAGES.configScopeOption,
314
+ takesValue: true,
315
+ values: ['global'],
316
+ },
317
+ ],
318
+ subcommands: [
319
+ {
320
+ name: 'path',
321
+ description: CONFIG_MESSAGES.showLocation,
322
+ flags: [],
323
+ },
324
+ {
325
+ name: 'list',
326
+ description: CONFIG_MESSAGES.showAllSettings,
327
+ flags: [
328
+ COMMON_FLAGS.json,
329
+ ],
330
+ },
331
+ {
332
+ name: 'get',
333
+ description: CONFIG_MESSAGES.getValue,
334
+ acceptsPositional: true,
335
+ flags: [],
336
+ },
337
+ {
338
+ name: 'set',
339
+ description: CONFIG_MESSAGES.setValue,
340
+ acceptsPositional: true,
341
+ flags: [
342
+ {
343
+ name: 'string',
344
+ description: CONFIG_MESSAGES.forceStringOption,
345
+ },
346
+ {
347
+ name: 'allow-unknown',
348
+ description: CONFIG_MESSAGES.allowUnknownOption,
349
+ },
350
+ ],
351
+ },
352
+ {
353
+ name: 'unset',
354
+ description: CONFIG_MESSAGES.removeKey,
355
+ acceptsPositional: true,
356
+ flags: [],
357
+ },
358
+ {
359
+ name: 'reset',
360
+ description: CONFIG_MESSAGES.resetConfig,
361
+ flags: [
362
+ {
363
+ name: 'all',
364
+ description: CONFIG_MESSAGES.resetAllOption,
365
+ },
366
+ {
367
+ name: 'yes',
368
+ short: 'y',
369
+ description: CLI_DESCRIPTIONS.yesSkipConfirm,
370
+ },
371
+ ],
372
+ },
373
+ {
374
+ name: 'edit',
375
+ description: CONFIG_MESSAGES.openInEditor,
376
+ flags: [],
377
+ },
378
+ {
379
+ name: 'profile',
380
+ description: CONFIG_MESSAGES.configureProfile,
381
+ flags: [],
382
+ },
383
+ ],
384
+ },
385
+ {
386
+ name: 'schema',
387
+ description: SCHEMA_MESSAGES.manageWorkflows,
388
+ flags: [],
389
+ subcommands: [
390
+ {
391
+ name: 'which',
392
+ description: SCHEMA_MESSAGES.showResolve,
393
+ acceptsPositional: true,
394
+ positionalType: 'schema-name',
395
+ flags: [
396
+ COMMON_FLAGS.json,
397
+ {
398
+ name: 'all',
399
+ description: SCHEMA_MESSAGES.listAllSchemasOption,
400
+ },
401
+ ],
402
+ },
403
+ {
404
+ name: 'validate',
405
+ description: SCHEMA_MESSAGES.validateStructure,
406
+ acceptsPositional: true,
407
+ positionalType: 'schema-name',
408
+ flags: [
409
+ COMMON_FLAGS.json,
410
+ {
411
+ name: 'verbose',
412
+ description: SCHEMA_MESSAGES.verboseOption,
413
+ },
414
+ ],
415
+ },
416
+ {
417
+ name: 'fork',
418
+ description: SCHEMA_MESSAGES.copySchema,
419
+ acceptsPositional: true,
420
+ positionalType: 'schema-name',
421
+ flags: [
422
+ COMMON_FLAGS.json,
423
+ {
424
+ name: 'force',
425
+ description: SCHEMA_MESSAGES.forceOption,
426
+ },
427
+ ],
428
+ },
429
+ {
430
+ name: 'init',
431
+ description: SCHEMA_MESSAGES.createSchema,
432
+ acceptsPositional: true,
433
+ flags: [
434
+ COMMON_FLAGS.json,
435
+ {
436
+ name: 'description',
437
+ description: SCHEMA_MESSAGES.descriptionOption,
438
+ takesValue: true,
439
+ },
440
+ {
441
+ name: 'artifacts',
442
+ description: SCHEMA_MESSAGES.artifactsOption,
443
+ takesValue: true,
444
+ },
445
+ {
446
+ name: 'default',
447
+ description: SCHEMA_MESSAGES.defaultOption,
448
+ },
449
+ {
450
+ name: 'no-default',
451
+ description: SCHEMA_MESSAGES.noDefaultOption,
452
+ },
453
+ {
454
+ name: 'force',
455
+ description: SCHEMA_MESSAGES.forceOption2,
456
+ },
457
+ ],
458
+ },
459
+ ],
460
+ },
461
+ ];
462
+ //# sourceMappingURL=command-registry.js.map
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Provides dynamic completion suggestions for OpenSpec items (changes and specs).
3
+ * Implements a 2-second cache to avoid excessive file system operations during
4
+ * tab completion.
5
+ */
6
+ export declare class CompletionProvider {
7
+ private readonly cacheTTLMs;
8
+ private readonly projectRoot;
9
+ private readonly cacheTTL;
10
+ private changeCache;
11
+ private specCache;
12
+ /**
13
+ * Creates a new completion provider
14
+ *
15
+ * @param cacheTTLMs - Cache time-to-live in milliseconds (default: 2000ms)
16
+ * @param projectRoot - Project root directory (default: process.cwd())
17
+ */
18
+ constructor(cacheTTLMs?: number, projectRoot?: string);
19
+ /**
20
+ * Get all active change IDs for completion
21
+ *
22
+ * @returns Array of change IDs
23
+ */
24
+ getChangeIds(): Promise<string[]>;
25
+ /**
26
+ * Get all spec IDs for completion
27
+ *
28
+ * @returns Array of spec IDs
29
+ */
30
+ getSpecIds(): Promise<string[]>;
31
+ /**
32
+ * Get both change and spec IDs for completion
33
+ *
34
+ * @returns Object with changeIds and specIds arrays
35
+ */
36
+ getAllIds(): Promise<{
37
+ changeIds: string[];
38
+ specIds: string[];
39
+ }>;
40
+ /**
41
+ * Clear all cached data
42
+ */
43
+ clearCache(): void;
44
+ /**
45
+ * Get cache statistics for debugging
46
+ *
47
+ * @returns Cache status information
48
+ */
49
+ getCacheStats(): {
50
+ changeCache: {
51
+ valid: boolean;
52
+ age?: number;
53
+ };
54
+ specCache: {
55
+ valid: boolean;
56
+ age?: number;
57
+ };
58
+ };
59
+ }
60
+ //# sourceMappingURL=completion-provider.d.ts.map
@@ -0,0 +1,102 @@
1
+ import { getActiveChangeIds, getSpecIds } from '../../utils/item-discovery.js';
2
+ /**
3
+ * Provides dynamic completion suggestions for OpenSpec items (changes and specs).
4
+ * Implements a 2-second cache to avoid excessive file system operations during
5
+ * tab completion.
6
+ */
7
+ export class CompletionProvider {
8
+ cacheTTLMs;
9
+ projectRoot;
10
+ cacheTTL;
11
+ changeCache = null;
12
+ specCache = null;
13
+ /**
14
+ * Creates a new completion provider
15
+ *
16
+ * @param cacheTTLMs - Cache time-to-live in milliseconds (default: 2000ms)
17
+ * @param projectRoot - Project root directory (default: process.cwd())
18
+ */
19
+ constructor(cacheTTLMs = 2000, projectRoot = process.cwd()) {
20
+ this.cacheTTLMs = cacheTTLMs;
21
+ this.projectRoot = projectRoot;
22
+ this.cacheTTL = cacheTTLMs;
23
+ }
24
+ /**
25
+ * Get all active change IDs for completion
26
+ *
27
+ * @returns Array of change IDs
28
+ */
29
+ async getChangeIds() {
30
+ const now = Date.now();
31
+ // Check if cache is valid
32
+ if (this.changeCache && now - this.changeCache.timestamp < this.cacheTTL) {
33
+ return this.changeCache.data;
34
+ }
35
+ // Fetch fresh data
36
+ const changeIds = await getActiveChangeIds(this.projectRoot);
37
+ // Update cache
38
+ this.changeCache = {
39
+ data: changeIds,
40
+ timestamp: now,
41
+ };
42
+ return changeIds;
43
+ }
44
+ /**
45
+ * Get all spec IDs for completion
46
+ *
47
+ * @returns Array of spec IDs
48
+ */
49
+ async getSpecIds() {
50
+ const now = Date.now();
51
+ // Check if cache is valid
52
+ if (this.specCache && now - this.specCache.timestamp < this.cacheTTL) {
53
+ return this.specCache.data;
54
+ }
55
+ // Fetch fresh data
56
+ const specIds = await getSpecIds(this.projectRoot);
57
+ // Update cache
58
+ this.specCache = {
59
+ data: specIds,
60
+ timestamp: now,
61
+ };
62
+ return specIds;
63
+ }
64
+ /**
65
+ * Get both change and spec IDs for completion
66
+ *
67
+ * @returns Object with changeIds and specIds arrays
68
+ */
69
+ async getAllIds() {
70
+ const [changeIds, specIds] = await Promise.all([
71
+ this.getChangeIds(),
72
+ this.getSpecIds(),
73
+ ]);
74
+ return { changeIds, specIds };
75
+ }
76
+ /**
77
+ * Clear all cached data
78
+ */
79
+ clearCache() {
80
+ this.changeCache = null;
81
+ this.specCache = null;
82
+ }
83
+ /**
84
+ * Get cache statistics for debugging
85
+ *
86
+ * @returns Cache status information
87
+ */
88
+ getCacheStats() {
89
+ const now = Date.now();
90
+ return {
91
+ changeCache: {
92
+ valid: this.changeCache !== null && now - this.changeCache.timestamp < this.cacheTTL,
93
+ age: this.changeCache ? now - this.changeCache.timestamp : undefined,
94
+ },
95
+ specCache: {
96
+ valid: this.specCache !== null && now - this.specCache.timestamp < this.cacheTTL,
97
+ age: this.specCache ? now - this.specCache.timestamp : undefined,
98
+ },
99
+ };
100
+ }
101
+ }
102
+ //# sourceMappingURL=completion-provider.js.map
@@ -0,0 +1,64 @@
1
+ import { CompletionGenerator } from './types.js';
2
+ import { SupportedShell } from '../../utils/shell-detection.js';
3
+ /**
4
+ * Common installation result interface
5
+ */
6
+ export interface InstallationResult {
7
+ success: boolean;
8
+ installedPath?: string;
9
+ backupPath?: string;
10
+ message: string;
11
+ instructions?: string[];
12
+ warnings?: string[];
13
+ isOhMyZsh?: boolean;
14
+ zshrcConfigured?: boolean;
15
+ bashrcConfigured?: boolean;
16
+ profileConfigured?: boolean;
17
+ }
18
+ /**
19
+ * Interface for completion installers
20
+ */
21
+ export interface CompletionInstaller {
22
+ install(script: string): Promise<InstallationResult>;
23
+ uninstall(): Promise<{
24
+ success: boolean;
25
+ message: string;
26
+ }>;
27
+ }
28
+ /**
29
+ * Factory for creating completion generators and installers
30
+ * This design makes it easy to add support for additional shells
31
+ */
32
+ export declare class CompletionFactory {
33
+ private static readonly SUPPORTED_SHELLS;
34
+ /**
35
+ * Create a completion generator for the specified shell
36
+ *
37
+ * @param shell - The target shell
38
+ * @returns CompletionGenerator instance
39
+ * @throws Error if shell is not supported
40
+ */
41
+ static createGenerator(shell: SupportedShell): CompletionGenerator;
42
+ /**
43
+ * Create a completion installer for the specified shell
44
+ *
45
+ * @param shell - The target shell
46
+ * @returns CompletionInstaller instance
47
+ * @throws Error if shell is not supported
48
+ */
49
+ static createInstaller(shell: SupportedShell): CompletionInstaller;
50
+ /**
51
+ * Check if a shell is supported
52
+ *
53
+ * @param shell - The shell to check
54
+ * @returns true if the shell is supported
55
+ */
56
+ static isSupported(shell: string): shell is SupportedShell;
57
+ /**
58
+ * Get list of all supported shells
59
+ *
60
+ * @returns Array of supported shell names
61
+ */
62
+ static getSupportedShells(): SupportedShell[];
63
+ }
64
+ //# sourceMappingURL=factory.d.ts.map