@dedesfr/prompter 0.9.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +105 -77
  3. package/dist/cli/index.js +25 -1
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +35 -9
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/login.d.ts +4 -0
  9. package/dist/commands/login.d.ts.map +1 -0
  10. package/dist/commands/login.js +56 -0
  11. package/dist/commands/login.js.map +1 -0
  12. package/dist/commands/logout.d.ts +4 -0
  13. package/dist/commands/logout.d.ts.map +1 -0
  14. package/dist/commands/logout.js +14 -0
  15. package/dist/commands/logout.js.map +1 -0
  16. package/dist/commands/update.d.ts +0 -2
  17. package/dist/commands/update.d.ts.map +1 -1
  18. package/dist/commands/update.js +19 -48
  19. package/dist/commands/update.js.map +1 -1
  20. package/dist/commands/whoami.d.ts +4 -0
  21. package/dist/commands/whoami.d.ts.map +1 -0
  22. package/dist/commands/whoami.js +42 -0
  23. package/dist/commands/whoami.js.map +1 -0
  24. package/dist/core/auth-store.d.ts +10 -0
  25. package/dist/core/auth-store.d.ts.map +1 -0
  26. package/dist/core/auth-store.js +39 -0
  27. package/dist/core/auth-store.js.map +1 -0
  28. package/dist/core/config.d.ts +0 -7
  29. package/dist/core/config.d.ts.map +1 -1
  30. package/dist/core/config.js +0 -128
  31. package/dist/core/config.js.map +1 -1
  32. package/dist/core/registry.d.ts +18 -0
  33. package/dist/core/registry.d.ts.map +1 -0
  34. package/dist/core/registry.js +94 -0
  35. package/dist/core/registry.js.map +1 -0
  36. package/package.json +7 -1
  37. package/AGENTS.md +0 -123
  38. package/CLAUDE.md +0 -17
  39. package/build.js +0 -20
  40. package/convex-setup.md +0 -403
  41. package/dist/core/prompt-templates.d.ts +0 -23
  42. package/dist/core/prompt-templates.d.ts.map +0 -1
  43. package/dist/core/prompt-templates.js +0 -3485
  44. package/dist/core/prompt-templates.js.map +0 -1
  45. package/prompt/ai-humanizer.md +0 -45
  46. package/prompt/api-contract-generator.md +0 -234
  47. package/prompt/apply.md +0 -17
  48. package/prompt/archive.md +0 -21
  49. package/prompt/design-system.md +0 -210
  50. package/prompt/document-explainer.md +0 -149
  51. package/prompt/epic-generator.md +0 -198
  52. package/prompt/epic-single.md +0 -47
  53. package/prompt/erd-generator.md +0 -130
  54. package/prompt/fsd-generator.md +0 -157
  55. package/prompt/prd-agent-generator.md +0 -147
  56. package/prompt/prd-generator.md +0 -195
  57. package/prompt/product-brief.md +0 -289
  58. package/prompt/proposal.md +0 -22
  59. package/prompt/qa-test-scenario.md +0 -133
  60. package/prompt/skill-creator.md +0 -350
  61. package/prompt/story-generator.md +0 -278
  62. package/prompt/story-single.md +0 -70
  63. package/prompt/tdd-generator.md +0 -294
  64. package/prompt/tdd-lite-generator.md +0 -224
  65. package/prompt/wireframe-generator.md +0 -219
  66. package/skills/ai-context-generator/SKILL.md +0 -54
  67. package/skills/ai-context-generator/references/AGENTS.template.md +0 -83
  68. package/skills/ai-context-generator/references/CLAUDE.template.md +0 -39
  69. package/skills/ai-context-generator/references/behavioral-guidelines.md +0 -71
  70. package/skills/ai-context-generator/references/discovery-checklist.md +0 -40
  71. package/skills/ai-context-generator/references/examples/AGENTS.good.md +0 -103
  72. package/skills/ai-context-generator/references/extraction-checklist.md +0 -23
  73. package/skills/ai-context-generator/references/overlays/laravel.md +0 -44
  74. package/skills/ai-humanizer/SKILL.md +0 -50
  75. package/skills/api-contract-generator/SKILL.md +0 -243
  76. package/skills/apply/SKILL.md +0 -23
  77. package/skills/archive/SKILL.md +0 -27
  78. package/skills/cerebro/SKILL.md +0 -187
  79. package/skills/cerebro/references/agents.md +0 -213
  80. package/skills/code-review/SKILL.md +0 -373
  81. package/skills/code-review/assets/report-template-agent.md +0 -212
  82. package/skills/code-review/assets/report-template-compact.md +0 -81
  83. package/skills/code-review/assets/report-template-full.md +0 -264
  84. package/skills/code-review/assets/report-template-human.md +0 -168
  85. package/skills/code-review/references/universal-patterns.md +0 -495
  86. package/skills/design-md/README.md +0 -34
  87. package/skills/design-md/SKILL.md +0 -172
  88. package/skills/design-md/examples/DESIGN.md +0 -154
  89. package/skills/design-system/SKILL.md +0 -216
  90. package/skills/design-system-generator/SKILL.md +0 -324
  91. package/skills/design-system-generator/assets/design-system-template.md +0 -348
  92. package/skills/design-system-generator/references/extraction-patterns.md +0 -321
  93. package/skills/doc-builder/SKILL.md +0 -115
  94. package/skills/doc-builder/references/ui-patterns.md +0 -394
  95. package/skills/document-explainer/SKILL.md +0 -155
  96. package/skills/document-translator/SKILL.md +0 -58
  97. package/skills/enhance/SKILL.md +0 -47
  98. package/skills/enhance-prompt/README.md +0 -34
  99. package/skills/enhance-prompt/SKILL.md +0 -204
  100. package/skills/enhance-prompt/references/KEYWORDS.md +0 -114
  101. package/skills/epic-generator/SKILL.md +0 -204
  102. package/skills/epic-single/SKILL.md +0 -63
  103. package/skills/erd-generator/SKILL.md +0 -138
  104. package/skills/feature-planner/SKILL.md +0 -305
  105. package/skills/feature-planner/assets/implementation-plan-template.md +0 -85
  106. package/skills/frontend-design/LICENSE.txt +0 -177
  107. package/skills/frontend-design/SKILL.md +0 -42
  108. package/skills/fsd-generator/SKILL.md +0 -163
  109. package/skills/gamma-builder/SKILL.md +0 -134
  110. package/skills/laravel-code-review/SKILL.md +0 -383
  111. package/skills/laravel-code-review/assets/report-template-agent.md +0 -195
  112. package/skills/laravel-code-review/assets/report-template-compact.md +0 -79
  113. package/skills/laravel-code-review/assets/report-template-full.md +0 -253
  114. package/skills/laravel-code-review/assets/report-template-human.md +0 -159
  115. package/skills/laravel-code-review/references/laravel-patterns.md +0 -571
  116. package/skills/laravel-code-review/references/php84-features.md +0 -442
  117. package/skills/mcp-builder/LICENSE.txt +0 -202
  118. package/skills/mcp-builder/SKILL.md +0 -236
  119. package/skills/mcp-builder/reference/evaluation.md +0 -602
  120. package/skills/mcp-builder/reference/mcp_best_practices.md +0 -249
  121. package/skills/mcp-builder/reference/node_mcp_server.md +0 -970
  122. package/skills/mcp-builder/reference/python_mcp_server.md +0 -719
  123. package/skills/mcp-builder/scripts/connections.py +0 -151
  124. package/skills/mcp-builder/scripts/evaluation.py +0 -373
  125. package/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  126. package/skills/mcp-builder/scripts/requirements.txt +0 -2
  127. package/skills/meeting-notes/SKILL.md +0 -159
  128. package/skills/meeting-notes/evals/evals.json +0 -23
  129. package/skills/prd-agent-generator/SKILL.md +0 -132
  130. package/skills/prd-generator/SKILL.md +0 -211
  131. package/skills/product-brief/SKILL.md +0 -141
  132. package/skills/project-orchestrator/SKILL.md +0 -487
  133. package/skills/project-orchestrator/assets/caddy-vps-setup.md +0 -180
  134. package/skills/project-orchestrator/assets/plan-summary-template.md +0 -159
  135. package/skills/prompter-specs/SKILL.md +0 -115
  136. package/skills/prompter-workflow/SKILL.md +0 -166
  137. package/skills/prompter-workflow/evals/evals.json +0 -89
  138. package/skills/proposal/SKILL.md +0 -28
  139. package/skills/qa-test-scenario/SKILL.md +0 -149
  140. package/skills/skill-creator/SKILL.md +0 -173
  141. package/skills/sph-generator/SKILL.md +0 -488
  142. package/skills/story-generator/SKILL.md +0 -285
  143. package/skills/story-single/SKILL.md +0 -86
  144. package/skills/tdd-generator/SKILL.md +0 -300
  145. package/skills/tdd-lite-generator/SKILL.md +0 -230
  146. package/skills/ui-ux-pro/SKILL.md +0 -199
  147. package/skills/ui-ux-pro/assets/design-spec-template.md +0 -173
  148. package/skills/ui-ux-pro/references/component-patterns.md +0 -255
  149. package/skills/ui-ux-pro/references/design-principles.md +0 -167
  150. package/skills/wireframe-generator/SKILL.md +0 -227
  151. package/src/cli/index.ts +0 -223
  152. package/src/commands/archive.ts +0 -302
  153. package/src/commands/change.ts +0 -292
  154. package/src/commands/config.ts +0 -233
  155. package/src/commands/guide.ts +0 -50
  156. package/src/commands/init.ts +0 -597
  157. package/src/commands/list.ts +0 -194
  158. package/src/commands/show.ts +0 -138
  159. package/src/commands/spec.ts +0 -251
  160. package/src/commands/update.ts +0 -129
  161. package/src/commands/upgrade.ts +0 -30
  162. package/src/commands/validate.ts +0 -326
  163. package/src/core/artifact-graph/graph.ts +0 -167
  164. package/src/core/artifact-graph/index.ts +0 -44
  165. package/src/core/artifact-graph/instruction-loader.ts +0 -302
  166. package/src/core/artifact-graph/resolver.ts +0 -226
  167. package/src/core/artifact-graph/schema.ts +0 -124
  168. package/src/core/artifact-graph/state.ts +0 -64
  169. package/src/core/artifact-graph/types.ts +0 -65
  170. package/src/core/completions/command-registry.ts +0 -382
  171. package/src/core/completions/completion-provider.ts +0 -128
  172. package/src/core/completions/generators/bash-generator.ts +0 -191
  173. package/src/core/completions/generators/fish-generator.ts +0 -188
  174. package/src/core/completions/generators/powershell-generator.ts +0 -223
  175. package/src/core/completions/generators/zsh-generator.ts +0 -281
  176. package/src/core/completions/templates/bash-templates.ts +0 -24
  177. package/src/core/completions/templates/fish-templates.ts +0 -40
  178. package/src/core/completions/templates/powershell-templates.ts +0 -25
  179. package/src/core/completions/templates/zsh-templates.ts +0 -36
  180. package/src/core/completions/types.ts +0 -90
  181. package/src/core/config-schema.ts +0 -230
  182. package/src/core/config.ts +0 -181
  183. package/src/core/configurators/slash/antigravity.ts +0 -10
  184. package/src/core/configurators/slash/base.ts +0 -109
  185. package/src/core/configurators/slash/claude.ts +0 -10
  186. package/src/core/configurators/slash/codex.ts +0 -10
  187. package/src/core/configurators/slash/droid.ts +0 -10
  188. package/src/core/configurators/slash/forge.ts +0 -10
  189. package/src/core/configurators/slash/github-copilot.ts +0 -10
  190. package/src/core/configurators/slash/index.ts +0 -10
  191. package/src/core/configurators/slash/kilocode.ts +0 -10
  192. package/src/core/configurators/slash/opencode.ts +0 -10
  193. package/src/core/configurators/slash/registry.ts +0 -51
  194. package/src/core/converters/json-converter.ts +0 -62
  195. package/src/core/global-config.ts +0 -136
  196. package/src/core/parsers/change-parser.ts +0 -234
  197. package/src/core/parsers/markdown-parser.ts +0 -237
  198. package/src/core/parsers/requirement-blocks.ts +0 -234
  199. package/src/core/prompt-templates.ts +0 -3504
  200. package/src/core/schemas/base.schema.ts +0 -20
  201. package/src/core/schemas/change.schema.ts +0 -42
  202. package/src/core/schemas/index.ts +0 -20
  203. package/src/core/schemas/spec.schema.ts +0 -17
  204. package/src/core/skill-discovery.ts +0 -68
  205. package/src/core/specs-apply.ts +0 -483
  206. package/src/core/styles/palette.ts +0 -8
  207. package/src/core/templates/agents-template.ts +0 -459
  208. package/src/core/templates/claude-template.ts +0 -2
  209. package/src/core/templates/index.ts +0 -3
  210. package/src/core/templates/project-template.ts +0 -32
  211. package/src/core/validation/constants.ts +0 -48
  212. package/src/core/validation/types.ts +0 -19
  213. package/src/core/validation/validator.ts +0 -449
  214. package/src/core/view.ts +0 -219
  215. package/src/index.ts +0 -1
  216. package/src/utils/change-metadata.ts +0 -171
  217. package/src/utils/change-utils.ts +0 -131
  218. package/src/utils/file-system.ts +0 -252
  219. package/src/utils/index.ts +0 -12
  220. package/src/utils/interactive.ts +0 -29
  221. package/src/utils/item-discovery.ts +0 -66
  222. package/src/utils/match.ts +0 -26
  223. package/src/utils/shell-detection.ts +0 -62
  224. package/src/utils/task-progress.ts +0 -43
  225. package/tsconfig.json +0 -28
@@ -1,65 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- // Artifact definition schema
4
- export const ArtifactSchema = z.object({
5
- id: z.string().min(1, { error: 'Artifact ID is required' }),
6
- generates: z.string().min(1, { error: 'generates field is required' }),
7
- description: z.string(),
8
- template: z.string().min(1, { error: 'template field is required' }),
9
- instruction: z.string().optional(),
10
- requires: z.array(z.string()).default([]),
11
- });
12
-
13
- // Apply phase configuration for schema-aware apply instructions
14
- export const ApplyPhaseSchema = z.object({
15
- // Artifact IDs that must exist before apply is available
16
- requires: z.array(z.string()).min(1, { error: 'At least one required artifact' }),
17
- // Path to file with checkboxes for progress (relative to change dir), or null if no tracking
18
- tracks: z.string().nullable().optional(),
19
- // Custom guidance for the apply phase
20
- instruction: z.string().optional(),
21
- });
22
-
23
- // Full schema YAML structure
24
- export const SchemaYamlSchema = z.object({
25
- name: z.string().min(1, { error: 'Schema name is required' }),
26
- version: z.number().int().positive({ error: 'Version must be a positive integer' }),
27
- description: z.string().optional(),
28
- artifacts: z.array(ArtifactSchema).min(1, { error: 'At least one artifact required' }),
29
- // Optional apply phase configuration (for schema-aware apply instructions)
30
- apply: ApplyPhaseSchema.optional(),
31
- });
32
-
33
- // Derived TypeScript types
34
- export type Artifact = z.infer<typeof ArtifactSchema>;
35
- export type ApplyPhase = z.infer<typeof ApplyPhaseSchema>;
36
- export type SchemaYaml = z.infer<typeof SchemaYamlSchema>;
37
-
38
- // Per-change metadata schema
39
- // Note: schema field is validated at parse time against available schemas
40
- // using a lazy import to avoid circular dependencies
41
- export const ChangeMetadataSchema = z.object({
42
- // Required: which workflow schema this change uses
43
- schema: z.string().min(1, { message: 'schema is required' }),
44
-
45
- // Optional: creation timestamp (ISO date string)
46
- created: z
47
- .string()
48
- .regex(/^\d{4}-\d{2}-\d{2}$/, {
49
- message: 'created must be YYYY-MM-DD format',
50
- })
51
- .optional(),
52
- });
53
-
54
- export type ChangeMetadata = z.infer<typeof ChangeMetadataSchema>;
55
-
56
- // Runtime state types (not Zod - internal only)
57
-
58
- // Slice 1: Simple completion tracking via filesystem
59
- export type CompletedSet = Set<string>;
60
-
61
- // Return type for blocked query
62
- export interface BlockedArtifacts {
63
- [artifactId: string]: string[];
64
- }
65
-
@@ -1,382 +0,0 @@
1
- import { CommandDefinition, FlagDefinition } from './types.js';
2
-
3
- /**
4
- * Common flags used across multiple commands
5
- */
6
- const COMMON_FLAGS = {
7
- json: {
8
- name: 'json',
9
- description: 'Output as JSON',
10
- } as FlagDefinition,
11
- jsonValidation: {
12
- name: 'json',
13
- description: 'Output validation results as JSON',
14
- } as FlagDefinition,
15
- strict: {
16
- name: 'strict',
17
- description: 'Enable strict validation mode',
18
- } as FlagDefinition,
19
- noInteractive: {
20
- name: 'no-interactive',
21
- description: 'Disable interactive prompts',
22
- } as FlagDefinition,
23
- type: {
24
- name: 'type',
25
- description: 'Specify item type when ambiguous',
26
- takesValue: true,
27
- values: ['change', 'spec'],
28
- } as FlagDefinition,
29
- } as const;
30
-
31
- /**
32
- * Registry of all Prompter CLI commands with their flags and metadata.
33
- * This registry is used to generate shell completion scripts.
34
- */
35
- export const COMMAND_REGISTRY: CommandDefinition[] = [
36
- {
37
- name: 'init',
38
- description: 'Initialize Prompter in your project',
39
- acceptsPositional: true,
40
- positionalType: 'path',
41
- flags: [
42
- {
43
- name: 'tools',
44
- description: 'Configure AI tools non-interactively (e.g., "all", "none", or comma-separated tool IDs)',
45
- takesValue: true,
46
- },
47
- ],
48
- },
49
- {
50
- name: 'update',
51
- description: 'Update Prompter instruction files',
52
- acceptsPositional: true,
53
- positionalType: 'path',
54
- flags: [],
55
- },
56
- {
57
- name: 'list',
58
- description: 'List items (changes by default, or specs with --specs)',
59
- flags: [
60
- {
61
- name: 'specs',
62
- description: 'List specs instead of changes',
63
- },
64
- {
65
- name: 'changes',
66
- description: 'List changes explicitly (default)',
67
- },
68
- ],
69
- },
70
- {
71
- name: 'view',
72
- description: 'Display an interactive dashboard of specs and changes',
73
- flags: [],
74
- },
75
- {
76
- name: 'validate',
77
- description: 'Validate changes and specs',
78
- acceptsPositional: true,
79
- positionalType: 'change-or-spec-id',
80
- flags: [
81
- {
82
- name: 'all',
83
- description: 'Validate all changes and specs',
84
- },
85
- {
86
- name: 'changes',
87
- description: 'Validate all changes',
88
- },
89
- {
90
- name: 'specs',
91
- description: 'Validate all specs',
92
- },
93
- COMMON_FLAGS.type,
94
- COMMON_FLAGS.strict,
95
- COMMON_FLAGS.jsonValidation,
96
- {
97
- name: 'concurrency',
98
- description: 'Max concurrent validations (defaults to env PROMPTER_CONCURRENCY or 6)',
99
- takesValue: true,
100
- },
101
- COMMON_FLAGS.noInteractive,
102
- ],
103
- },
104
- {
105
- name: 'show',
106
- description: 'Show a change or spec',
107
- acceptsPositional: true,
108
- positionalType: 'change-or-spec-id',
109
- flags: [
110
- COMMON_FLAGS.json,
111
- COMMON_FLAGS.type,
112
- COMMON_FLAGS.noInteractive,
113
- {
114
- name: 'deltas-only',
115
- description: 'Show only deltas (JSON only, change-specific)',
116
- },
117
- {
118
- name: 'requirements-only',
119
- description: 'Alias for --deltas-only (deprecated, change-specific)',
120
- },
121
- {
122
- name: 'requirements',
123
- description: 'Show only requirements, exclude scenarios (JSON only, spec-specific)',
124
- },
125
- {
126
- name: 'no-scenarios',
127
- description: 'Exclude scenario content (JSON only, spec-specific)',
128
- },
129
- {
130
- name: 'requirement',
131
- short: 'r',
132
- description: 'Show specific requirement by ID (JSON only, spec-specific)',
133
- takesValue: true,
134
- },
135
- ],
136
- },
137
- {
138
- name: 'archive',
139
- description: 'Archive a completed change and update main specs',
140
- acceptsPositional: true,
141
- positionalType: 'change-id',
142
- flags: [
143
- {
144
- name: 'yes',
145
- short: 'y',
146
- description: 'Skip confirmation prompts',
147
- },
148
- {
149
- name: 'skip-specs',
150
- description: 'Skip spec update operations',
151
- },
152
- {
153
- name: 'no-validate',
154
- description: 'Skip validation (not recommended)',
155
- },
156
- ],
157
- },
158
- {
159
- name: 'feedback',
160
- description: 'Submit feedback about Prompter',
161
- acceptsPositional: true,
162
- flags: [
163
- {
164
- name: 'body',
165
- description: 'Detailed description for the feedback',
166
- takesValue: true,
167
- },
168
- ],
169
- },
170
- {
171
- name: 'change',
172
- description: 'Manage Prompter change proposals (deprecated)',
173
- flags: [],
174
- subcommands: [
175
- {
176
- name: 'show',
177
- description: 'Show a change proposal',
178
- acceptsPositional: true,
179
- positionalType: 'change-id',
180
- flags: [
181
- COMMON_FLAGS.json,
182
- {
183
- name: 'deltas-only',
184
- description: 'Show only deltas (JSON only)',
185
- },
186
- {
187
- name: 'requirements-only',
188
- description: 'Alias for --deltas-only (deprecated)',
189
- },
190
- COMMON_FLAGS.noInteractive,
191
- ],
192
- },
193
- {
194
- name: 'list',
195
- description: 'List all active changes (deprecated)',
196
- flags: [
197
- COMMON_FLAGS.json,
198
- {
199
- name: 'long',
200
- description: 'Show id and title with counts',
201
- },
202
- ],
203
- },
204
- {
205
- name: 'validate',
206
- description: 'Validate a change proposal',
207
- acceptsPositional: true,
208
- positionalType: 'change-id',
209
- flags: [
210
- COMMON_FLAGS.strict,
211
- COMMON_FLAGS.jsonValidation,
212
- COMMON_FLAGS.noInteractive,
213
- ],
214
- },
215
- ],
216
- },
217
- {
218
- name: 'spec',
219
- description: 'Manage Prompter specifications',
220
- flags: [],
221
- subcommands: [
222
- {
223
- name: 'show',
224
- description: 'Show a specification',
225
- acceptsPositional: true,
226
- positionalType: 'spec-id',
227
- flags: [
228
- COMMON_FLAGS.json,
229
- {
230
- name: 'requirements',
231
- description: 'Show only requirements, exclude scenarios (JSON only)',
232
- },
233
- {
234
- name: 'no-scenarios',
235
- description: 'Exclude scenario content (JSON only)',
236
- },
237
- {
238
- name: 'requirement',
239
- short: 'r',
240
- description: 'Show specific requirement by ID (JSON only)',
241
- takesValue: true,
242
- },
243
- COMMON_FLAGS.noInteractive,
244
- ],
245
- },
246
- {
247
- name: 'list',
248
- description: 'List all specifications',
249
- flags: [
250
- COMMON_FLAGS.json,
251
- {
252
- name: 'long',
253
- description: 'Show id and title with counts',
254
- },
255
- ],
256
- },
257
- {
258
- name: 'validate',
259
- description: 'Validate a specification',
260
- acceptsPositional: true,
261
- positionalType: 'spec-id',
262
- flags: [
263
- COMMON_FLAGS.strict,
264
- COMMON_FLAGS.jsonValidation,
265
- COMMON_FLAGS.noInteractive,
266
- ],
267
- },
268
- ],
269
- },
270
- {
271
- name: 'completion',
272
- description: 'Manage shell completions for Prompter CLI',
273
- flags: [],
274
- subcommands: [
275
- {
276
- name: 'generate',
277
- description: 'Generate completion script for a shell (outputs to stdout)',
278
- acceptsPositional: true,
279
- positionalType: 'shell',
280
- flags: [],
281
- },
282
- {
283
- name: 'install',
284
- description: 'Install completion script for a shell',
285
- acceptsPositional: true,
286
- positionalType: 'shell',
287
- flags: [
288
- {
289
- name: 'verbose',
290
- description: 'Show detailed installation output',
291
- },
292
- ],
293
- },
294
- {
295
- name: 'uninstall',
296
- description: 'Uninstall completion script for a shell',
297
- acceptsPositional: true,
298
- positionalType: 'shell',
299
- flags: [
300
- {
301
- name: 'yes',
302
- short: 'y',
303
- description: 'Skip confirmation prompts',
304
- },
305
- ],
306
- },
307
- ],
308
- },
309
- {
310
- name: 'config',
311
- description: 'View and modify global Prompter configuration',
312
- flags: [
313
- {
314
- name: 'scope',
315
- description: 'Config scope (only "global" supported currently)',
316
- takesValue: true,
317
- values: ['global'],
318
- },
319
- ],
320
- subcommands: [
321
- {
322
- name: 'path',
323
- description: 'Show config file location',
324
- flags: [],
325
- },
326
- {
327
- name: 'list',
328
- description: 'Show all current settings',
329
- flags: [
330
- COMMON_FLAGS.json,
331
- ],
332
- },
333
- {
334
- name: 'get',
335
- description: 'Get a specific value (raw, scriptable)',
336
- acceptsPositional: true,
337
- flags: [],
338
- },
339
- {
340
- name: 'set',
341
- description: 'Set a value (auto-coerce types)',
342
- acceptsPositional: true,
343
- flags: [
344
- {
345
- name: 'string',
346
- description: 'Force value to be stored as string',
347
- },
348
- {
349
- name: 'allow-unknown',
350
- description: 'Allow setting unknown keys',
351
- },
352
- ],
353
- },
354
- {
355
- name: 'unset',
356
- description: 'Remove a key (revert to default)',
357
- acceptsPositional: true,
358
- flags: [],
359
- },
360
- {
361
- name: 'reset',
362
- description: 'Reset configuration to defaults',
363
- flags: [
364
- {
365
- name: 'all',
366
- description: 'Reset all configuration (required)',
367
- },
368
- {
369
- name: 'yes',
370
- short: 'y',
371
- description: 'Skip confirmation prompts',
372
- },
373
- ],
374
- },
375
- {
376
- name: 'edit',
377
- description: 'Open config in $EDITOR',
378
- flags: [],
379
- },
380
- ],
381
- },
382
- ];
@@ -1,128 +0,0 @@
1
- import { getActiveChangeIds, getSpecIds } from '../../utils/item-discovery.js';
2
-
3
- /**
4
- * Cache entry for completion data
5
- */
6
- interface CacheEntry<T> {
7
- data: T;
8
- timestamp: number;
9
- }
10
-
11
- /**
12
- * Provides dynamic completion suggestions for Prompter items (changes and specs).
13
- * Implements a 2-second cache to avoid excessive file system operations during
14
- * tab completion.
15
- */
16
- export class CompletionProvider {
17
- private readonly cacheTTL: number;
18
- private changeCache: CacheEntry<string[]> | null = null;
19
- private specCache: CacheEntry<string[]> | null = null;
20
-
21
- /**
22
- * Creates a new completion provider
23
- *
24
- * @param cacheTTLMs - Cache time-to-live in milliseconds (default: 2000ms)
25
- * @param projectRoot - Project root directory (default: process.cwd())
26
- */
27
- constructor(
28
- private readonly cacheTTLMs: number = 2000,
29
- private readonly projectRoot: string = process.cwd()
30
- ) {
31
- this.cacheTTL = cacheTTLMs;
32
- }
33
-
34
- /**
35
- * Get all active change IDs for completion
36
- *
37
- * @returns Array of change IDs
38
- */
39
- async getChangeIds(): Promise<string[]> {
40
- const now = Date.now();
41
-
42
- // Check if cache is valid
43
- if (this.changeCache && now - this.changeCache.timestamp < this.cacheTTL) {
44
- return this.changeCache.data;
45
- }
46
-
47
- // Fetch fresh data
48
- const changeIds = await getActiveChangeIds(this.projectRoot);
49
-
50
- // Update cache
51
- this.changeCache = {
52
- data: changeIds,
53
- timestamp: now,
54
- };
55
-
56
- return changeIds;
57
- }
58
-
59
- /**
60
- * Get all spec IDs for completion
61
- *
62
- * @returns Array of spec IDs
63
- */
64
- async getSpecIds(): Promise<string[]> {
65
- const now = Date.now();
66
-
67
- // Check if cache is valid
68
- if (this.specCache && now - this.specCache.timestamp < this.cacheTTL) {
69
- return this.specCache.data;
70
- }
71
-
72
- // Fetch fresh data
73
- const specIds = await getSpecIds(this.projectRoot);
74
-
75
- // Update cache
76
- this.specCache = {
77
- data: specIds,
78
- timestamp: now,
79
- };
80
-
81
- return specIds;
82
- }
83
-
84
- /**
85
- * Get both change and spec IDs for completion
86
- *
87
- * @returns Object with changeIds and specIds arrays
88
- */
89
- async getAllIds(): Promise<{ changeIds: string[]; specIds: string[] }> {
90
- const [changeIds, specIds] = await Promise.all([
91
- this.getChangeIds(),
92
- this.getSpecIds(),
93
- ]);
94
-
95
- return { changeIds, specIds };
96
- }
97
-
98
- /**
99
- * Clear all cached data
100
- */
101
- clearCache(): void {
102
- this.changeCache = null;
103
- this.specCache = null;
104
- }
105
-
106
- /**
107
- * Get cache statistics for debugging
108
- *
109
- * @returns Cache status information
110
- */
111
- getCacheStats(): {
112
- changeCache: { valid: boolean; age?: number };
113
- specCache: { valid: boolean; age?: number };
114
- } {
115
- const now = Date.now();
116
-
117
- return {
118
- changeCache: {
119
- valid: this.changeCache !== null && now - this.changeCache.timestamp < this.cacheTTL,
120
- age: this.changeCache ? now - this.changeCache.timestamp : undefined,
121
- },
122
- specCache: {
123
- valid: this.specCache !== null && now - this.specCache.timestamp < this.cacheTTL,
124
- age: this.specCache ? now - this.specCache.timestamp : undefined,
125
- },
126
- };
127
- }
128
- }