@bobby_z/openspec 0.0.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 (234) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +204 -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 +8 -0
  11. package/dist/commands/config.js +198 -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 +52 -0
  31. package/dist/commands/workflow/shared.js +111 -0
  32. package/dist/commands/workflow/status.d.ts +14 -0
  33. package/dist/commands/workflow/status.js +58 -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 +328 -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/command-generation/adapters/amazon-q.d.ts +13 -0
  53. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  54. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  55. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  56. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  57. package/dist/core/command-generation/adapters/auggie.js +27 -0
  58. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  59. package/dist/core/command-generation/adapters/claude.js +50 -0
  60. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  61. package/dist/core/command-generation/adapters/cline.js +27 -0
  62. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  63. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  64. package/dist/core/command-generation/adapters/codex.d.ts +16 -0
  65. package/dist/core/command-generation/adapters/codex.js +39 -0
  66. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  67. package/dist/core/command-generation/adapters/continue.js +28 -0
  68. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  69. package/dist/core/command-generation/adapters/costrict.js +27 -0
  70. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  71. package/dist/core/command-generation/adapters/crush.js +30 -0
  72. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  73. package/dist/core/command-generation/adapters/cursor.js +44 -0
  74. package/dist/core/command-generation/adapters/devagent.d.ts +15 -0
  75. package/dist/core/command-generation/adapters/devagent.js +28 -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 +28 -0
  85. package/dist/core/command-generation/adapters/index.js +28 -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/opencode.d.ts +13 -0
  89. package/dist/core/command-generation/adapters/opencode.js +29 -0
  90. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  91. package/dist/core/command-generation/adapters/qoder.js +30 -0
  92. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  93. package/dist/core/command-generation/adapters/qwen.js +26 -0
  94. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  95. package/dist/core/command-generation/adapters/roocode.js +27 -0
  96. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  97. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  98. package/dist/core/command-generation/generator.d.ts +21 -0
  99. package/dist/core/command-generation/generator.js +27 -0
  100. package/dist/core/command-generation/index.d.ts +22 -0
  101. package/dist/core/command-generation/index.js +24 -0
  102. package/dist/core/command-generation/registry.d.ts +36 -0
  103. package/dist/core/command-generation/registry.js +90 -0
  104. package/dist/core/command-generation/types.d.ts +56 -0
  105. package/dist/core/command-generation/types.js +8 -0
  106. package/dist/core/completions/command-registry.d.ts +7 -0
  107. package/dist/core/completions/command-registry.js +454 -0
  108. package/dist/core/completions/completion-provider.d.ts +60 -0
  109. package/dist/core/completions/completion-provider.js +102 -0
  110. package/dist/core/completions/factory.d.ts +64 -0
  111. package/dist/core/completions/factory.js +75 -0
  112. package/dist/core/completions/generators/bash-generator.d.ts +32 -0
  113. package/dist/core/completions/generators/bash-generator.js +174 -0
  114. package/dist/core/completions/generators/fish-generator.d.ts +32 -0
  115. package/dist/core/completions/generators/fish-generator.js +157 -0
  116. package/dist/core/completions/generators/powershell-generator.d.ts +33 -0
  117. package/dist/core/completions/generators/powershell-generator.js +207 -0
  118. package/dist/core/completions/generators/zsh-generator.d.ts +44 -0
  119. package/dist/core/completions/generators/zsh-generator.js +250 -0
  120. package/dist/core/completions/installers/bash-installer.d.ts +87 -0
  121. package/dist/core/completions/installers/bash-installer.js +318 -0
  122. package/dist/core/completions/installers/fish-installer.d.ts +43 -0
  123. package/dist/core/completions/installers/fish-installer.js +143 -0
  124. package/dist/core/completions/installers/powershell-installer.d.ts +88 -0
  125. package/dist/core/completions/installers/powershell-installer.js +327 -0
  126. package/dist/core/completions/installers/zsh-installer.d.ts +125 -0
  127. package/dist/core/completions/installers/zsh-installer.js +449 -0
  128. package/dist/core/completions/templates/bash-templates.d.ts +6 -0
  129. package/dist/core/completions/templates/bash-templates.js +24 -0
  130. package/dist/core/completions/templates/fish-templates.d.ts +7 -0
  131. package/dist/core/completions/templates/fish-templates.js +39 -0
  132. package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
  133. package/dist/core/completions/templates/powershell-templates.js +25 -0
  134. package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
  135. package/dist/core/completions/templates/zsh-templates.js +36 -0
  136. package/dist/core/completions/types.d.ts +79 -0
  137. package/dist/core/completions/types.js +2 -0
  138. package/dist/core/config-prompts.d.ts +9 -0
  139. package/dist/core/config-prompts.js +34 -0
  140. package/dist/core/config-schema.d.ts +76 -0
  141. package/dist/core/config-schema.js +200 -0
  142. package/dist/core/config.d.ts +17 -0
  143. package/dist/core/config.js +175 -0
  144. package/dist/core/converters/json-converter.d.ts +6 -0
  145. package/dist/core/converters/json-converter.js +51 -0
  146. package/dist/core/global-config.d.ts +39 -0
  147. package/dist/core/global-config.js +115 -0
  148. package/dist/core/index.d.ts +2 -0
  149. package/dist/core/index.js +3 -0
  150. package/dist/core/init.d.ts +32 -0
  151. package/dist/core/init.js +447 -0
  152. package/dist/core/legacy-cleanup.d.ts +162 -0
  153. package/dist/core/legacy-cleanup.js +520 -0
  154. package/dist/core/list.d.ts +9 -0
  155. package/dist/core/list.js +171 -0
  156. package/dist/core/parsers/change-parser.d.ts +13 -0
  157. package/dist/core/parsers/change-parser.js +193 -0
  158. package/dist/core/parsers/markdown-parser.d.ts +22 -0
  159. package/dist/core/parsers/markdown-parser.js +187 -0
  160. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  161. package/dist/core/parsers/requirement-blocks.js +201 -0
  162. package/dist/core/project-config.d.ts +64 -0
  163. package/dist/core/project-config.js +223 -0
  164. package/dist/core/schemas/base.schema.d.ts +13 -0
  165. package/dist/core/schemas/base.schema.js +13 -0
  166. package/dist/core/schemas/change.schema.d.ts +73 -0
  167. package/dist/core/schemas/change.schema.js +31 -0
  168. package/dist/core/schemas/index.d.ts +4 -0
  169. package/dist/core/schemas/index.js +4 -0
  170. package/dist/core/schemas/spec.schema.d.ts +18 -0
  171. package/dist/core/schemas/spec.schema.js +15 -0
  172. package/dist/core/shared/index.d.ts +8 -0
  173. package/dist/core/shared/index.js +8 -0
  174. package/dist/core/shared/skill-generation.d.ts +42 -0
  175. package/dist/core/shared/skill-generation.js +80 -0
  176. package/dist/core/shared/tool-detection.d.ts +66 -0
  177. package/dist/core/shared/tool-detection.js +140 -0
  178. package/dist/core/specs-apply.d.ts +73 -0
  179. package/dist/core/specs-apply.js +384 -0
  180. package/dist/core/styles/palette.d.ts +7 -0
  181. package/dist/core/styles/palette.js +8 -0
  182. package/dist/core/templates/index.d.ts +8 -0
  183. package/dist/core/templates/index.js +9 -0
  184. package/dist/core/templates/skill-templates.d.ts +122 -0
  185. package/dist/core/templates/skill-templates.js +3437 -0
  186. package/dist/core/update.d.ts +42 -0
  187. package/dist/core/update.js +311 -0
  188. package/dist/core/validation/constants.d.ts +34 -0
  189. package/dist/core/validation/constants.js +40 -0
  190. package/dist/core/validation/types.d.ts +18 -0
  191. package/dist/core/validation/types.js +2 -0
  192. package/dist/core/validation/validator.d.ts +33 -0
  193. package/dist/core/validation/validator.js +409 -0
  194. package/dist/core/view.d.ts +8 -0
  195. package/dist/core/view.js +168 -0
  196. package/dist/index.d.ts +3 -0
  197. package/dist/index.js +3 -0
  198. package/dist/prompts/searchable-multi-select.d.ts +27 -0
  199. package/dist/prompts/searchable-multi-select.js +149 -0
  200. package/dist/telemetry/config.d.ts +32 -0
  201. package/dist/telemetry/config.js +68 -0
  202. package/dist/telemetry/index.d.ts +31 -0
  203. package/dist/telemetry/index.js +145 -0
  204. package/dist/ui/ascii-patterns.d.ts +16 -0
  205. package/dist/ui/ascii-patterns.js +133 -0
  206. package/dist/ui/welcome-screen.d.ts +10 -0
  207. package/dist/ui/welcome-screen.js +146 -0
  208. package/dist/utils/change-metadata.d.ts +51 -0
  209. package/dist/utils/change-metadata.js +147 -0
  210. package/dist/utils/change-utils.d.ts +62 -0
  211. package/dist/utils/change-utils.js +121 -0
  212. package/dist/utils/command-references.d.ts +18 -0
  213. package/dist/utils/command-references.js +20 -0
  214. package/dist/utils/file-system.d.ts +36 -0
  215. package/dist/utils/file-system.js +281 -0
  216. package/dist/utils/index.d.ts +6 -0
  217. package/dist/utils/index.js +9 -0
  218. package/dist/utils/interactive.d.ts +18 -0
  219. package/dist/utils/interactive.js +21 -0
  220. package/dist/utils/item-discovery.d.ts +4 -0
  221. package/dist/utils/item-discovery.js +72 -0
  222. package/dist/utils/match.d.ts +3 -0
  223. package/dist/utils/match.js +22 -0
  224. package/dist/utils/shell-detection.d.ts +20 -0
  225. package/dist/utils/shell-detection.js +41 -0
  226. package/dist/utils/task-progress.d.ts +8 -0
  227. package/dist/utils/task-progress.js +36 -0
  228. package/package.json +83 -0
  229. package/schemas/spec-driven/schema.yaml +151 -0
  230. package/schemas/spec-driven/templates/design.md +21 -0
  231. package/schemas/spec-driven/templates/proposal.md +25 -0
  232. package/schemas/spec-driven/templates/spec.md +10 -0
  233. package/schemas/spec-driven/templates/tasks.md +9 -0
  234. package/scripts/postinstall.js +147 -0
@@ -0,0 +1,454 @@
1
+ /**
2
+ * Common flags used across multiple commands
3
+ */
4
+ const COMMON_FLAGS = {
5
+ json: {
6
+ name: "json",
7
+ description: "以 JSON 输出",
8
+ },
9
+ jsonValidation: {
10
+ name: "json",
11
+ description: "以 JSON 输出校验结果",
12
+ },
13
+ strict: {
14
+ name: "strict",
15
+ description: "启用严格校验模式",
16
+ },
17
+ noInteractive: {
18
+ name: "no-interactive",
19
+ description: "关闭交互提示",
20
+ },
21
+ type: {
22
+ name: "type",
23
+ description: "名称歧义时指定项类型",
24
+ takesValue: true,
25
+ values: ["change", "spec"],
26
+ },
27
+ };
28
+ /**
29
+ * Registry of all OpenSpec CLI commands with their flags and metadata.
30
+ * This registry is used to generate shell completion scripts.
31
+ */
32
+ export const COMMAND_REGISTRY = [
33
+ {
34
+ name: "init",
35
+ description: "在项目中初始化 OpenSpec",
36
+ acceptsPositional: true,
37
+ positionalType: "path",
38
+ flags: [
39
+ {
40
+ name: "tools",
41
+ description: '非交互配置 AI 工具(如 "all"、"none" 或逗号分隔的工具 ID)',
42
+ takesValue: true,
43
+ },
44
+ ],
45
+ },
46
+ {
47
+ name: "update",
48
+ description: "更新 OpenSpec 指令文件",
49
+ acceptsPositional: true,
50
+ positionalType: "path",
51
+ flags: [],
52
+ },
53
+ {
54
+ name: "list",
55
+ description: "列出项(默认变更,加 --specs 为规范)",
56
+ flags: [
57
+ {
58
+ name: "specs",
59
+ description: "列出规范而非变更",
60
+ },
61
+ {
62
+ name: "changes",
63
+ description: "明确列出变更(默认)",
64
+ },
65
+ ],
66
+ },
67
+ {
68
+ name: "view",
69
+ description: "显示规范与变更的交互式总览",
70
+ flags: [],
71
+ },
72
+ {
73
+ name: "validate",
74
+ description: "校验变更与规范",
75
+ acceptsPositional: true,
76
+ positionalType: "change-or-spec-id",
77
+ flags: [
78
+ {
79
+ name: "all",
80
+ description: "校验所有变更与规范",
81
+ },
82
+ {
83
+ name: "changes",
84
+ description: "校验所有变更",
85
+ },
86
+ {
87
+ name: "specs",
88
+ description: "校验所有规范",
89
+ },
90
+ COMMON_FLAGS.type,
91
+ COMMON_FLAGS.strict,
92
+ COMMON_FLAGS.jsonValidation,
93
+ {
94
+ name: "concurrency",
95
+ description: "最大并发校验数(默认取 OPENSPEC_CONCURRENCY 或 6)",
96
+ takesValue: true,
97
+ },
98
+ COMMON_FLAGS.noInteractive,
99
+ ],
100
+ },
101
+ {
102
+ name: "show",
103
+ description: "显示变更或规范",
104
+ acceptsPositional: true,
105
+ positionalType: "change-or-spec-id",
106
+ flags: [
107
+ COMMON_FLAGS.json,
108
+ COMMON_FLAGS.type,
109
+ COMMON_FLAGS.noInteractive,
110
+ {
111
+ name: "deltas-only",
112
+ description: "仅显示增量(仅 JSON,变更)",
113
+ },
114
+ {
115
+ name: "requirements-only",
116
+ description: "同 --deltas-only(已弃用,变更)",
117
+ },
118
+ {
119
+ name: "requirements",
120
+ description: "仅显示需求,不含场景(仅 JSON,规范)",
121
+ },
122
+ {
123
+ name: "no-scenarios",
124
+ description: "不含场景内容(仅 JSON,规范)",
125
+ },
126
+ {
127
+ name: "requirement",
128
+ short: "r",
129
+ description: "按 ID 显示指定需求(仅 JSON,规范)",
130
+ takesValue: true,
131
+ },
132
+ ],
133
+ },
134
+ {
135
+ name: "archive",
136
+ description: "归档已完成的变更并更新主规范",
137
+ acceptsPositional: true,
138
+ positionalType: "change-id",
139
+ flags: [
140
+ {
141
+ name: "yes",
142
+ short: "y",
143
+ description: "跳过确认提示",
144
+ },
145
+ {
146
+ name: "skip-specs",
147
+ description: "跳过规范更新",
148
+ },
149
+ {
150
+ name: "no-validate",
151
+ description: "跳过校验(不推荐)",
152
+ },
153
+ ],
154
+ },
155
+ {
156
+ name: "feedback",
157
+ description: "提交 OpenSpec 相关反馈",
158
+ acceptsPositional: true,
159
+ flags: [
160
+ {
161
+ name: "body",
162
+ description: "反馈的详细说明",
163
+ takesValue: true,
164
+ },
165
+ ],
166
+ },
167
+ {
168
+ name: "change",
169
+ description: "管理 OpenSpec 变更提案(已弃用)",
170
+ flags: [],
171
+ subcommands: [
172
+ {
173
+ name: "show",
174
+ description: "显示变更提案",
175
+ acceptsPositional: true,
176
+ positionalType: "change-id",
177
+ flags: [
178
+ COMMON_FLAGS.json,
179
+ {
180
+ name: "deltas-only",
181
+ description: "仅显示增量(仅 JSON)",
182
+ },
183
+ {
184
+ name: "requirements-only",
185
+ description: "同 --deltas-only(已弃用)",
186
+ },
187
+ COMMON_FLAGS.noInteractive,
188
+ ],
189
+ },
190
+ {
191
+ name: "list",
192
+ description: "列出所有进行中变更(已弃用)",
193
+ flags: [
194
+ COMMON_FLAGS.json,
195
+ {
196
+ name: "long",
197
+ description: "显示 id 与标题及数量",
198
+ },
199
+ ],
200
+ },
201
+ {
202
+ name: "validate",
203
+ description: "校验变更提案",
204
+ acceptsPositional: true,
205
+ positionalType: "change-id",
206
+ flags: [
207
+ COMMON_FLAGS.strict,
208
+ COMMON_FLAGS.jsonValidation,
209
+ COMMON_FLAGS.noInteractive,
210
+ ],
211
+ },
212
+ ],
213
+ },
214
+ {
215
+ name: "spec",
216
+ description: "管理 OpenSpec 规范",
217
+ flags: [],
218
+ subcommands: [
219
+ {
220
+ name: "show",
221
+ description: "显示规范",
222
+ acceptsPositional: true,
223
+ positionalType: "spec-id",
224
+ flags: [
225
+ COMMON_FLAGS.json,
226
+ {
227
+ name: "requirements",
228
+ description: "仅显示需求,不含场景(仅 JSON)",
229
+ },
230
+ {
231
+ name: "no-scenarios",
232
+ description: "不含场景内容(仅 JSON)",
233
+ },
234
+ {
235
+ name: "requirement",
236
+ short: "r",
237
+ description: "按 ID 显示指定需求(仅 JSON)",
238
+ takesValue: true,
239
+ },
240
+ COMMON_FLAGS.noInteractive,
241
+ ],
242
+ },
243
+ {
244
+ name: "list",
245
+ description: "列出所有规范",
246
+ flags: [
247
+ COMMON_FLAGS.json,
248
+ {
249
+ name: "long",
250
+ description: "显示 id 与标题及数量",
251
+ },
252
+ ],
253
+ },
254
+ {
255
+ name: "validate",
256
+ description: "校验规范",
257
+ acceptsPositional: true,
258
+ positionalType: "spec-id",
259
+ flags: [
260
+ COMMON_FLAGS.strict,
261
+ COMMON_FLAGS.jsonValidation,
262
+ COMMON_FLAGS.noInteractive,
263
+ ],
264
+ },
265
+ ],
266
+ },
267
+ {
268
+ name: "completion",
269
+ description: "管理 OpenSpec CLI 的 Shell 补全",
270
+ flags: [],
271
+ subcommands: [
272
+ {
273
+ name: "generate",
274
+ description: "生成某 Shell 的补全脚本(输出到 stdout)",
275
+ acceptsPositional: true,
276
+ positionalType: "shell",
277
+ flags: [],
278
+ },
279
+ {
280
+ name: "install",
281
+ description: "为某 Shell 安装补全脚本",
282
+ acceptsPositional: true,
283
+ positionalType: "shell",
284
+ flags: [
285
+ {
286
+ name: "verbose",
287
+ description: "显示详细安装输出",
288
+ },
289
+ ],
290
+ },
291
+ {
292
+ name: "uninstall",
293
+ description: "卸载某 Shell 的补全脚本",
294
+ acceptsPositional: true,
295
+ positionalType: "shell",
296
+ flags: [
297
+ {
298
+ name: "yes",
299
+ short: "y",
300
+ description: "跳过确认提示",
301
+ },
302
+ ],
303
+ },
304
+ ],
305
+ },
306
+ {
307
+ name: "config",
308
+ description: "查看与修改全局 OpenSpec 配置",
309
+ flags: [
310
+ {
311
+ name: "scope",
312
+ description: '配置范围(当前仅支持 "global")',
313
+ takesValue: true,
314
+ values: ["global"],
315
+ },
316
+ ],
317
+ subcommands: [
318
+ {
319
+ name: "path",
320
+ description: "显示配置文件路径",
321
+ flags: [],
322
+ },
323
+ {
324
+ name: "list",
325
+ description: "显示当前所有设置",
326
+ flags: [COMMON_FLAGS.json],
327
+ },
328
+ {
329
+ name: "get",
330
+ description: "获取某值(原始、可脚本)",
331
+ acceptsPositional: true,
332
+ flags: [],
333
+ },
334
+ {
335
+ name: "set",
336
+ description: "设置某值(自动类型转换)",
337
+ acceptsPositional: true,
338
+ flags: [
339
+ {
340
+ name: "string",
341
+ description: "强制按字符串存储",
342
+ },
343
+ {
344
+ name: "allow-unknown",
345
+ description: "允许设置未知键",
346
+ },
347
+ ],
348
+ },
349
+ {
350
+ name: "unset",
351
+ description: "删除某键(恢复默认)",
352
+ acceptsPositional: true,
353
+ flags: [],
354
+ },
355
+ {
356
+ name: "reset",
357
+ description: "将配置恢复为默认",
358
+ flags: [
359
+ {
360
+ name: "all",
361
+ description: "重置全部配置(必填)",
362
+ },
363
+ {
364
+ name: "yes",
365
+ short: "y",
366
+ description: "跳过确认提示",
367
+ },
368
+ ],
369
+ },
370
+ {
371
+ name: "edit",
372
+ description: "用 $EDITOR 打开配置",
373
+ flags: [],
374
+ },
375
+ ],
376
+ },
377
+ {
378
+ name: "schema",
379
+ description: "管理工作流模式",
380
+ flags: [],
381
+ subcommands: [
382
+ {
383
+ name: "which",
384
+ description: "显示某模式解析自何处",
385
+ acceptsPositional: true,
386
+ positionalType: "schema-name",
387
+ flags: [
388
+ COMMON_FLAGS.json,
389
+ {
390
+ name: "all",
391
+ description: "列出所有模式及其解析来源",
392
+ },
393
+ ],
394
+ },
395
+ {
396
+ name: "validate",
397
+ description: "校验工作流模式结构与模板",
398
+ acceptsPositional: true,
399
+ positionalType: "schema-name",
400
+ flags: [
401
+ COMMON_FLAGS.json,
402
+ {
403
+ name: "verbose",
404
+ description: "显示详细校验步骤",
405
+ },
406
+ ],
407
+ },
408
+ {
409
+ name: "fork",
410
+ description: "将已有模式复制到项目以便自定义",
411
+ acceptsPositional: true,
412
+ positionalType: "schema-name",
413
+ flags: [
414
+ COMMON_FLAGS.json,
415
+ {
416
+ name: "force",
417
+ description: "覆盖已有目标",
418
+ },
419
+ ],
420
+ },
421
+ {
422
+ name: "init",
423
+ description: "创建新的项目本地工作流模式",
424
+ acceptsPositional: true,
425
+ flags: [
426
+ COMMON_FLAGS.json,
427
+ {
428
+ name: "description",
429
+ description: "模式说明",
430
+ takesValue: true,
431
+ },
432
+ {
433
+ name: "artifacts",
434
+ description: "逗号分隔的制品 ID",
435
+ takesValue: true,
436
+ },
437
+ {
438
+ name: "default",
439
+ description: "设为项目默认模式",
440
+ },
441
+ {
442
+ name: "no-default",
443
+ description: "不提示设为默认",
444
+ },
445
+ {
446
+ name: "force",
447
+ description: "覆盖已有模式",
448
+ },
449
+ ],
450
+ },
451
+ ],
452
+ },
453
+ ];
454
+ //# 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