forge-cc 0.1.41 → 1.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 (203) hide show
  1. package/README.md +454 -338
  2. package/dist/cli.js +194 -935
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config/loader.d.ts +1 -1
  5. package/dist/config/loader.js +49 -56
  6. package/dist/config/loader.js.map +1 -1
  7. package/dist/config/schema.d.ts +37 -125
  8. package/dist/config/schema.js +13 -28
  9. package/dist/config/schema.js.map +1 -1
  10. package/dist/doctor.d.ts +10 -0
  11. package/dist/doctor.js +148 -0
  12. package/dist/doctor.js.map +1 -0
  13. package/dist/gates/index.d.ts +14 -12
  14. package/dist/gates/index.js +53 -105
  15. package/dist/gates/index.js.map +1 -1
  16. package/dist/gates/lint-gate.d.ts +2 -2
  17. package/dist/gates/lint-gate.js +60 -66
  18. package/dist/gates/lint-gate.js.map +1 -1
  19. package/dist/gates/tests-gate.d.ts +2 -4
  20. package/dist/gates/tests-gate.js +75 -203
  21. package/dist/gates/tests-gate.js.map +1 -1
  22. package/dist/gates/types-gate.d.ts +2 -2
  23. package/dist/gates/types-gate.js +53 -59
  24. package/dist/gates/types-gate.js.map +1 -1
  25. package/dist/linear/client.d.ts +31 -108
  26. package/dist/linear/client.js +88 -388
  27. package/dist/linear/client.js.map +1 -1
  28. package/dist/linear/sync.d.ts +15 -0
  29. package/dist/linear/sync.js +102 -0
  30. package/dist/linear/sync.js.map +1 -0
  31. package/dist/runner/loop.d.ts +4 -0
  32. package/dist/runner/loop.js +168 -0
  33. package/dist/runner/loop.js.map +1 -0
  34. package/dist/runner/prompt.d.ts +14 -0
  35. package/dist/runner/prompt.js +59 -0
  36. package/dist/runner/prompt.js.map +1 -0
  37. package/dist/runner/update.d.ts +1 -0
  38. package/dist/runner/update.js +72 -0
  39. package/dist/runner/update.js.map +1 -0
  40. package/dist/server.d.ts +6 -2
  41. package/dist/server.js +43 -101
  42. package/dist/server.js.map +1 -1
  43. package/dist/setup.d.ts +5 -0
  44. package/dist/setup.js +208 -0
  45. package/dist/setup.js.map +1 -0
  46. package/dist/state/cache.d.ts +3 -0
  47. package/dist/state/cache.js +23 -0
  48. package/dist/state/cache.js.map +1 -0
  49. package/dist/state/status.d.ts +66 -0
  50. package/dist/state/status.js +96 -0
  51. package/dist/state/status.js.map +1 -0
  52. package/dist/types.d.ts +46 -114
  53. package/dist/worktree/manager.d.ts +6 -103
  54. package/dist/worktree/manager.js +25 -296
  55. package/dist/worktree/manager.js.map +1 -1
  56. package/hooks/pre-commit-verify.js +109 -109
  57. package/package.json +5 -3
  58. package/skills/forge-go.md +20 -13
  59. package/skills/forge-setup.md +149 -388
  60. package/skills/forge-spec.md +367 -342
  61. package/skills/forge-triage.md +179 -133
  62. package/skills/forge-update.md +87 -93
  63. package/dist/gates/codex-gate.d.ts +0 -51
  64. package/dist/gates/codex-gate.js +0 -121
  65. package/dist/gates/codex-gate.js.map +0 -1
  66. package/dist/gates/prd-gate.d.ts +0 -7
  67. package/dist/gates/prd-gate.js +0 -193
  68. package/dist/gates/prd-gate.js.map +0 -1
  69. package/dist/gates/remediation.d.ts +0 -46
  70. package/dist/gates/remediation.js +0 -423
  71. package/dist/gates/remediation.js.map +0 -1
  72. package/dist/gates/review-gate.d.ts +0 -16
  73. package/dist/gates/review-gate.js +0 -479
  74. package/dist/gates/review-gate.js.map +0 -1
  75. package/dist/gates/runtime-gate.d.ts +0 -5
  76. package/dist/gates/runtime-gate.js +0 -99
  77. package/dist/gates/runtime-gate.js.map +0 -1
  78. package/dist/gates/test-analysis.d.ts +0 -21
  79. package/dist/gates/test-analysis.js +0 -394
  80. package/dist/gates/test-analysis.js.map +0 -1
  81. package/dist/gates/visual-capture.d.ts +0 -24
  82. package/dist/gates/visual-capture.js +0 -144
  83. package/dist/gates/visual-capture.js.map +0 -1
  84. package/dist/gates/visual-gate.d.ts +0 -18
  85. package/dist/gates/visual-gate.js +0 -234
  86. package/dist/gates/visual-gate.js.map +0 -1
  87. package/dist/gates/visual-reviewer.d.ts +0 -11
  88. package/dist/gates/visual-reviewer.js +0 -211
  89. package/dist/gates/visual-reviewer.js.map +0 -1
  90. package/dist/go/auto-chain.d.ts +0 -136
  91. package/dist/go/auto-chain.js +0 -389
  92. package/dist/go/auto-chain.js.map +0 -1
  93. package/dist/go/executor.d.ts +0 -137
  94. package/dist/go/executor.js +0 -447
  95. package/dist/go/executor.js.map +0 -1
  96. package/dist/go/finalize.d.ts +0 -108
  97. package/dist/go/finalize.js +0 -331
  98. package/dist/go/finalize.js.map +0 -1
  99. package/dist/go/linear-sync-cli.d.ts +0 -55
  100. package/dist/go/linear-sync-cli.js +0 -192
  101. package/dist/go/linear-sync-cli.js.map +0 -1
  102. package/dist/go/linear-sync.d.ts +0 -112
  103. package/dist/go/linear-sync.js +0 -375
  104. package/dist/go/linear-sync.js.map +0 -1
  105. package/dist/go/prd-queue.d.ts +0 -43
  106. package/dist/go/prd-queue.js +0 -67
  107. package/dist/go/prd-queue.js.map +0 -1
  108. package/dist/go/prd-selector.d.ts +0 -57
  109. package/dist/go/prd-selector.js +0 -101
  110. package/dist/go/prd-selector.js.map +0 -1
  111. package/dist/go/verify-loop.d.ts +0 -64
  112. package/dist/go/verify-loop.js +0 -327
  113. package/dist/go/verify-loop.js.map +0 -1
  114. package/dist/hooks/pre-commit.d.ts +0 -5
  115. package/dist/hooks/pre-commit.js +0 -75
  116. package/dist/hooks/pre-commit.js.map +0 -1
  117. package/dist/linear/issues.d.ts +0 -22
  118. package/dist/linear/issues.js +0 -51
  119. package/dist/linear/issues.js.map +0 -1
  120. package/dist/linear/milestones.d.ts +0 -11
  121. package/dist/linear/milestones.js +0 -32
  122. package/dist/linear/milestones.js.map +0 -1
  123. package/dist/linear/projects.d.ts +0 -16
  124. package/dist/linear/projects.js +0 -51
  125. package/dist/linear/projects.js.map +0 -1
  126. package/dist/reporter/human.d.ts +0 -7
  127. package/dist/reporter/human.js +0 -93
  128. package/dist/reporter/human.js.map +0 -1
  129. package/dist/reporter/json.d.ts +0 -2
  130. package/dist/reporter/json.js +0 -4
  131. package/dist/reporter/json.js.map +0 -1
  132. package/dist/setup/structural-templates.d.ts +0 -12
  133. package/dist/setup/structural-templates.js +0 -288
  134. package/dist/setup/structural-templates.js.map +0 -1
  135. package/dist/setup/templates.d.ts +0 -17
  136. package/dist/setup/templates.js +0 -109
  137. package/dist/setup/templates.js.map +0 -1
  138. package/dist/setup/test-planner.d.ts +0 -38
  139. package/dist/setup/test-planner.js +0 -91
  140. package/dist/setup/test-planner.js.map +0 -1
  141. package/dist/setup/test-scaffold.d.ts +0 -31
  142. package/dist/setup/test-scaffold.js +0 -209
  143. package/dist/setup/test-scaffold.js.map +0 -1
  144. package/dist/setup/test-templates.d.ts +0 -37
  145. package/dist/setup/test-templates.js +0 -313
  146. package/dist/setup/test-templates.js.map +0 -1
  147. package/dist/spec/generator.d.ts +0 -34
  148. package/dist/spec/generator.js +0 -227
  149. package/dist/spec/generator.js.map +0 -1
  150. package/dist/spec/interview.d.ts +0 -142
  151. package/dist/spec/interview.js +0 -287
  152. package/dist/spec/interview.js.map +0 -1
  153. package/dist/spec/linear-sync.d.ts +0 -48
  154. package/dist/spec/linear-sync.js +0 -125
  155. package/dist/spec/linear-sync.js.map +0 -1
  156. package/dist/spec/scanner.d.ts +0 -79
  157. package/dist/spec/scanner.js +0 -566
  158. package/dist/spec/scanner.js.map +0 -1
  159. package/dist/spec/templates.d.ts +0 -375
  160. package/dist/spec/templates.js +0 -95
  161. package/dist/spec/templates.js.map +0 -1
  162. package/dist/state/prd-status.d.ts +0 -62
  163. package/dist/state/prd-status.js +0 -122
  164. package/dist/state/prd-status.js.map +0 -1
  165. package/dist/state/reader.d.ts +0 -7
  166. package/dist/state/reader.js +0 -43
  167. package/dist/state/reader.js.map +0 -1
  168. package/dist/state/writer.d.ts +0 -21
  169. package/dist/state/writer.js +0 -106
  170. package/dist/state/writer.js.map +0 -1
  171. package/dist/team/consensus.d.ts +0 -28
  172. package/dist/team/consensus.js +0 -130
  173. package/dist/team/consensus.js.map +0 -1
  174. package/dist/team/index.d.ts +0 -4
  175. package/dist/team/index.js +0 -5
  176. package/dist/team/index.js.map +0 -1
  177. package/dist/team/lifecycle.d.ts +0 -37
  178. package/dist/team/lifecycle.js +0 -92
  179. package/dist/team/lifecycle.js.map +0 -1
  180. package/dist/team/reviewer.d.ts +0 -10
  181. package/dist/team/reviewer.js +0 -345
  182. package/dist/team/reviewer.js.map +0 -1
  183. package/dist/team/types.d.ts +0 -269
  184. package/dist/team/types.js +0 -70
  185. package/dist/team/types.js.map +0 -1
  186. package/dist/utils/browser.d.ts +0 -10
  187. package/dist/utils/browser.js +0 -96
  188. package/dist/utils/browser.js.map +0 -1
  189. package/dist/utils/platform.d.ts +0 -29
  190. package/dist/utils/platform.js +0 -90
  191. package/dist/utils/platform.js.map +0 -1
  192. package/dist/worktree/identity.d.ts +0 -9
  193. package/dist/worktree/identity.js +0 -32
  194. package/dist/worktree/identity.js.map +0 -1
  195. package/dist/worktree/parallel.d.ts +0 -87
  196. package/dist/worktree/parallel.js +0 -328
  197. package/dist/worktree/parallel.js.map +0 -1
  198. package/dist/worktree/session.d.ts +0 -67
  199. package/dist/worktree/session.js +0 -194
  200. package/dist/worktree/session.js.map +0 -1
  201. package/dist/worktree/state-merge.d.ts +0 -43
  202. package/dist/worktree/state-merge.js +0 -162
  203. package/dist/worktree/state-merge.js.map +0 -1
@@ -1,375 +0,0 @@
1
- import { z } from "zod";
2
- export declare const UserStorySchema: z.ZodObject<{
3
- id: z.ZodString;
4
- title: z.ZodString;
5
- description: z.ZodString;
6
- acceptanceCriteria: z.ZodArray<z.ZodString, "many">;
7
- }, "strip", z.ZodTypeAny, {
8
- id: string;
9
- title: string;
10
- description: string;
11
- acceptanceCriteria: string[];
12
- }, {
13
- id: string;
14
- title: string;
15
- description: string;
16
- acceptanceCriteria: string[];
17
- }>;
18
- export declare const MilestoneWaveSchema: z.ZodObject<{
19
- waveNumber: z.ZodNumber;
20
- agents: z.ZodArray<z.ZodObject<{
21
- name: z.ZodString;
22
- task: z.ZodString;
23
- files: z.ZodArray<z.ZodString, "many">;
24
- }, "strip", z.ZodTypeAny, {
25
- name: string;
26
- task: string;
27
- files: string[];
28
- }, {
29
- name: string;
30
- task: string;
31
- files: string[];
32
- }>, "many">;
33
- }, "strip", z.ZodTypeAny, {
34
- waveNumber: number;
35
- agents: {
36
- name: string;
37
- task: string;
38
- files: string[];
39
- }[];
40
- }, {
41
- waveNumber: number;
42
- agents: {
43
- name: string;
44
- task: string;
45
- files: string[];
46
- }[];
47
- }>;
48
- /**
49
- * Milestones MUST fit in one agent context window. The maxContextWindowFit
50
- * field is a hard constraint — if false, the milestone should be split.
51
- * A milestone that requires more than ~4 agents across 2-3 waves is too
52
- * large and risks context overflow during execution.
53
- */
54
- export declare const MilestoneSchema: z.ZodObject<{
55
- number: z.ZodNumber;
56
- name: z.ZodString;
57
- goal: z.ZodString;
58
- assignedTo: z.ZodString;
59
- waves: z.ZodArray<z.ZodObject<{
60
- waveNumber: z.ZodNumber;
61
- agents: z.ZodArray<z.ZodObject<{
62
- name: z.ZodString;
63
- task: z.ZodString;
64
- files: z.ZodArray<z.ZodString, "many">;
65
- }, "strip", z.ZodTypeAny, {
66
- name: string;
67
- task: string;
68
- files: string[];
69
- }, {
70
- name: string;
71
- task: string;
72
- files: string[];
73
- }>, "many">;
74
- }, "strip", z.ZodTypeAny, {
75
- waveNumber: number;
76
- agents: {
77
- name: string;
78
- task: string;
79
- files: string[];
80
- }[];
81
- }, {
82
- waveNumber: number;
83
- agents: {
84
- name: string;
85
- task: string;
86
- files: string[];
87
- }[];
88
- }>, "many">;
89
- verificationCommands: z.ZodArray<z.ZodString, "many">;
90
- maxContextWindowFit: z.ZodDefault<z.ZodBoolean>;
91
- dependsOn: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
92
- testCriteria: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
93
- }, "strip", z.ZodTypeAny, {
94
- number: number;
95
- name: string;
96
- goal: string;
97
- assignedTo: string;
98
- waves: {
99
- waveNumber: number;
100
- agents: {
101
- name: string;
102
- task: string;
103
- files: string[];
104
- }[];
105
- }[];
106
- verificationCommands: string[];
107
- maxContextWindowFit: boolean;
108
- dependsOn: number[];
109
- testCriteria: string[];
110
- }, {
111
- number: number;
112
- name: string;
113
- goal: string;
114
- assignedTo: string;
115
- waves: {
116
- waveNumber: number;
117
- agents: {
118
- name: string;
119
- task: string;
120
- files: string[];
121
- }[];
122
- }[];
123
- verificationCommands: string[];
124
- maxContextWindowFit?: boolean | undefined;
125
- dependsOn?: number[] | undefined;
126
- testCriteria?: string[] | undefined;
127
- }>;
128
- export declare const PRDSchema: z.ZodObject<{
129
- project: z.ZodString;
130
- status: z.ZodString;
131
- branch: z.ZodString;
132
- created: z.ZodString;
133
- assignedTo: z.ZodString;
134
- linearProject: z.ZodOptional<z.ZodString>;
135
- overview: z.ZodString;
136
- problemStatement: z.ZodString;
137
- scope: z.ZodObject<{
138
- inScope: z.ZodArray<z.ZodString, "many">;
139
- outOfScope: z.ZodArray<z.ZodString, "many">;
140
- sacred: z.ZodArray<z.ZodString, "many">;
141
- }, "strip", z.ZodTypeAny, {
142
- inScope: string[];
143
- outOfScope: string[];
144
- sacred: string[];
145
- }, {
146
- inScope: string[];
147
- outOfScope: string[];
148
- sacred: string[];
149
- }>;
150
- userStories: z.ZodArray<z.ZodObject<{
151
- id: z.ZodString;
152
- title: z.ZodString;
153
- description: z.ZodString;
154
- acceptanceCriteria: z.ZodArray<z.ZodString, "many">;
155
- }, "strip", z.ZodTypeAny, {
156
- id: string;
157
- title: string;
158
- description: string;
159
- acceptanceCriteria: string[];
160
- }, {
161
- id: string;
162
- title: string;
163
- description: string;
164
- acceptanceCriteria: string[];
165
- }>, "many">;
166
- technicalDesign: z.ZodObject<{
167
- projectStructure: z.ZodOptional<z.ZodString>;
168
- keyTypes: z.ZodOptional<z.ZodString>;
169
- dependencies: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
170
- existingCode: z.ZodOptional<z.ZodString>;
171
- }, "strip", z.ZodTypeAny, {
172
- dependencies?: string[] | undefined;
173
- projectStructure?: string | undefined;
174
- keyTypes?: string | undefined;
175
- existingCode?: string | undefined;
176
- }, {
177
- dependencies?: string[] | undefined;
178
- projectStructure?: string | undefined;
179
- keyTypes?: string | undefined;
180
- existingCode?: string | undefined;
181
- }>;
182
- milestones: z.ZodArray<z.ZodObject<{
183
- number: z.ZodNumber;
184
- name: z.ZodString;
185
- goal: z.ZodString;
186
- assignedTo: z.ZodString;
187
- waves: z.ZodArray<z.ZodObject<{
188
- waveNumber: z.ZodNumber;
189
- agents: z.ZodArray<z.ZodObject<{
190
- name: z.ZodString;
191
- task: z.ZodString;
192
- files: z.ZodArray<z.ZodString, "many">;
193
- }, "strip", z.ZodTypeAny, {
194
- name: string;
195
- task: string;
196
- files: string[];
197
- }, {
198
- name: string;
199
- task: string;
200
- files: string[];
201
- }>, "many">;
202
- }, "strip", z.ZodTypeAny, {
203
- waveNumber: number;
204
- agents: {
205
- name: string;
206
- task: string;
207
- files: string[];
208
- }[];
209
- }, {
210
- waveNumber: number;
211
- agents: {
212
- name: string;
213
- task: string;
214
- files: string[];
215
- }[];
216
- }>, "many">;
217
- verificationCommands: z.ZodArray<z.ZodString, "many">;
218
- maxContextWindowFit: z.ZodDefault<z.ZodBoolean>;
219
- dependsOn: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
220
- testCriteria: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
221
- }, "strip", z.ZodTypeAny, {
222
- number: number;
223
- name: string;
224
- goal: string;
225
- assignedTo: string;
226
- waves: {
227
- waveNumber: number;
228
- agents: {
229
- name: string;
230
- task: string;
231
- files: string[];
232
- }[];
233
- }[];
234
- verificationCommands: string[];
235
- maxContextWindowFit: boolean;
236
- dependsOn: number[];
237
- testCriteria: string[];
238
- }, {
239
- number: number;
240
- name: string;
241
- goal: string;
242
- assignedTo: string;
243
- waves: {
244
- waveNumber: number;
245
- agents: {
246
- name: string;
247
- task: string;
248
- files: string[];
249
- }[];
250
- }[];
251
- verificationCommands: string[];
252
- maxContextWindowFit?: boolean | undefined;
253
- dependsOn?: number[] | undefined;
254
- testCriteria?: string[] | undefined;
255
- }>, "many">;
256
- verification: z.ZodObject<{
257
- perMilestone: z.ZodArray<z.ZodString, "many">;
258
- overall: z.ZodArray<z.ZodString, "many">;
259
- }, "strip", z.ZodTypeAny, {
260
- perMilestone: string[];
261
- overall: string[];
262
- }, {
263
- perMilestone: string[];
264
- overall: string[];
265
- }>;
266
- }, "strip", z.ZodTypeAny, {
267
- status: string;
268
- project: string;
269
- branch: string;
270
- milestones: {
271
- number: number;
272
- name: string;
273
- goal: string;
274
- assignedTo: string;
275
- waves: {
276
- waveNumber: number;
277
- agents: {
278
- name: string;
279
- task: string;
280
- files: string[];
281
- }[];
282
- }[];
283
- verificationCommands: string[];
284
- maxContextWindowFit: boolean;
285
- dependsOn: number[];
286
- testCriteria: string[];
287
- }[];
288
- assignedTo: string;
289
- created: string;
290
- overview: string;
291
- problemStatement: string;
292
- scope: {
293
- inScope: string[];
294
- outOfScope: string[];
295
- sacred: string[];
296
- };
297
- userStories: {
298
- id: string;
299
- title: string;
300
- description: string;
301
- acceptanceCriteria: string[];
302
- }[];
303
- technicalDesign: {
304
- dependencies?: string[] | undefined;
305
- projectStructure?: string | undefined;
306
- keyTypes?: string | undefined;
307
- existingCode?: string | undefined;
308
- };
309
- verification: {
310
- perMilestone: string[];
311
- overall: string[];
312
- };
313
- linearProject?: string | undefined;
314
- }, {
315
- status: string;
316
- project: string;
317
- branch: string;
318
- milestones: {
319
- number: number;
320
- name: string;
321
- goal: string;
322
- assignedTo: string;
323
- waves: {
324
- waveNumber: number;
325
- agents: {
326
- name: string;
327
- task: string;
328
- files: string[];
329
- }[];
330
- }[];
331
- verificationCommands: string[];
332
- maxContextWindowFit?: boolean | undefined;
333
- dependsOn?: number[] | undefined;
334
- testCriteria?: string[] | undefined;
335
- }[];
336
- assignedTo: string;
337
- created: string;
338
- overview: string;
339
- problemStatement: string;
340
- scope: {
341
- inScope: string[];
342
- outOfScope: string[];
343
- sacred: string[];
344
- };
345
- userStories: {
346
- id: string;
347
- title: string;
348
- description: string;
349
- acceptanceCriteria: string[];
350
- }[];
351
- technicalDesign: {
352
- dependencies?: string[] | undefined;
353
- projectStructure?: string | undefined;
354
- keyTypes?: string | undefined;
355
- existingCode?: string | undefined;
356
- };
357
- verification: {
358
- perMilestone: string[];
359
- overall: string[];
360
- };
361
- linearProject?: string | undefined;
362
- }>;
363
- export type UserStory = z.infer<typeof UserStorySchema>;
364
- export type MilestoneWave = z.infer<typeof MilestoneWaveSchema>;
365
- export type Milestone = z.infer<typeof MilestoneSchema>;
366
- export type PRDData = z.infer<typeof PRDSchema>;
367
- /**
368
- * Validates raw data against the PRD schema.
369
- * Throws a ZodError if validation fails.
370
- */
371
- export declare function validatePRD(data: unknown): PRDData;
372
- /**
373
- * Creates an empty PRD scaffold with sensible defaults.
374
- */
375
- export declare function createEmptyPRD(projectName: string): PRDData;
@@ -1,95 +0,0 @@
1
- import { z } from "zod";
2
- // ── Zod Schemas ──────────────────────────────────────────────────────
3
- export const UserStorySchema = z.object({
4
- id: z.string(),
5
- title: z.string(),
6
- description: z.string(),
7
- acceptanceCriteria: z.array(z.string()),
8
- });
9
- export const MilestoneWaveSchema = z.object({
10
- waveNumber: z.number(),
11
- agents: z.array(z.object({
12
- name: z.string(),
13
- task: z.string(),
14
- files: z.array(z.string()),
15
- })),
16
- });
17
- /**
18
- * Milestones MUST fit in one agent context window. The maxContextWindowFit
19
- * field is a hard constraint — if false, the milestone should be split.
20
- * A milestone that requires more than ~4 agents across 2-3 waves is too
21
- * large and risks context overflow during execution.
22
- */
23
- export const MilestoneSchema = z.object({
24
- number: z.number(),
25
- name: z.string(),
26
- goal: z.string(),
27
- assignedTo: z.string(),
28
- waves: z.array(MilestoneWaveSchema),
29
- verificationCommands: z.array(z.string()),
30
- maxContextWindowFit: z.boolean().default(true),
31
- dependsOn: z.array(z.number()).default([]),
32
- testCriteria: z.array(z.string()).default([]),
33
- });
34
- export const PRDSchema = z.object({
35
- project: z.string(),
36
- status: z.string(),
37
- branch: z.string(),
38
- created: z.string(),
39
- assignedTo: z.string(),
40
- linearProject: z.string().optional(),
41
- overview: z.string(),
42
- problemStatement: z.string(),
43
- scope: z.object({
44
- inScope: z.array(z.string()),
45
- outOfScope: z.array(z.string()),
46
- sacred: z.array(z.string()),
47
- }),
48
- userStories: z.array(UserStorySchema),
49
- technicalDesign: z.object({
50
- projectStructure: z.string().optional(),
51
- keyTypes: z.string().optional(),
52
- dependencies: z.array(z.string()).optional(),
53
- existingCode: z.string().optional(),
54
- }),
55
- milestones: z.array(MilestoneSchema),
56
- verification: z.object({
57
- perMilestone: z.array(z.string()),
58
- overall: z.array(z.string()),
59
- }),
60
- });
61
- // ── Helper Functions ─────────────────────────────────────────────────
62
- /**
63
- * Validates raw data against the PRD schema.
64
- * Throws a ZodError if validation fails.
65
- */
66
- export function validatePRD(data) {
67
- return PRDSchema.parse(data);
68
- }
69
- /**
70
- * Creates an empty PRD scaffold with sensible defaults.
71
- */
72
- export function createEmptyPRD(projectName) {
73
- return {
74
- project: projectName,
75
- status: "Draft",
76
- branch: "",
77
- created: new Date().toISOString().split("T")[0],
78
- assignedTo: "",
79
- overview: "",
80
- problemStatement: "",
81
- scope: {
82
- inScope: [],
83
- outOfScope: [],
84
- sacred: [],
85
- },
86
- userStories: [],
87
- technicalDesign: {},
88
- milestones: [],
89
- verification: {
90
- perMilestone: [],
91
- overall: [],
92
- },
93
- };
94
- }
95
- //# sourceMappingURL=templates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/spec/templates.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- import { z } from "zod";
2
- export declare const MilestoneStatusSchema: z.ZodObject<{
3
- status: z.ZodEnum<["pending", "in_progress", "complete"]>;
4
- date: z.ZodOptional<z.ZodString>;
5
- }, "strip", z.ZodTypeAny, {
6
- status: "pending" | "in_progress" | "complete";
7
- date?: string | undefined;
8
- }, {
9
- status: "pending" | "in_progress" | "complete";
10
- date?: string | undefined;
11
- }>;
12
- export declare const PRDStatusSchema: z.ZodObject<{
13
- project: z.ZodString;
14
- slug: z.ZodString;
15
- branch: z.ZodString;
16
- createdAt: z.ZodString;
17
- linearProjectId: z.ZodOptional<z.ZodString>;
18
- milestones: z.ZodRecord<z.ZodString, z.ZodObject<{
19
- status: z.ZodEnum<["pending", "in_progress", "complete"]>;
20
- date: z.ZodOptional<z.ZodString>;
21
- }, "strip", z.ZodTypeAny, {
22
- status: "pending" | "in_progress" | "complete";
23
- date?: string | undefined;
24
- }, {
25
- status: "pending" | "in_progress" | "complete";
26
- date?: string | undefined;
27
- }>>;
28
- }, "strip", z.ZodTypeAny, {
29
- project: string;
30
- slug: string;
31
- branch: string;
32
- createdAt: string;
33
- milestones: Record<string, {
34
- status: "pending" | "in_progress" | "complete";
35
- date?: string | undefined;
36
- }>;
37
- linearProjectId?: string | undefined;
38
- }, {
39
- project: string;
40
- slug: string;
41
- branch: string;
42
- createdAt: string;
43
- milestones: Record<string, {
44
- status: "pending" | "in_progress" | "complete";
45
- date?: string | undefined;
46
- }>;
47
- linearProjectId?: string | undefined;
48
- }>;
49
- export type PRDStatus = z.infer<typeof PRDStatusSchema>;
50
- export type MilestoneStatus = z.infer<typeof MilestoneStatusSchema>;
51
- export declare function readPRDStatus(projectDir: string, slug: string): Promise<PRDStatus | null>;
52
- export declare function writePRDStatus(projectDir: string, slug: string, status: PRDStatus): Promise<void>;
53
- export declare function updateMilestoneStatus(projectDir: string, slug: string, milestoneNumber: number, status: "pending" | "in_progress" | "complete"): Promise<void>;
54
- export declare function discoverPRDs(projectDir: string): Promise<Array<{
55
- slug: string;
56
- status: PRDStatus;
57
- }>>;
58
- export declare function findNextPendingMilestone(projectDir: string, slug: string): Promise<{
59
- number: number;
60
- status: MilestoneStatus;
61
- } | null>;
62
- export declare function countPendingMilestones(projectDir: string, slug?: string): Promise<number>;
@@ -1,122 +0,0 @@
1
- import { z } from "zod";
2
- import { readFile, writeFile, readdir, mkdir } from "node:fs/promises";
3
- import { join, dirname } from "node:path";
4
- // ---------------------------------------------------------------------------
5
- // Schemas
6
- // ---------------------------------------------------------------------------
7
- export const MilestoneStatusSchema = z.object({
8
- status: z.enum(["pending", "in_progress", "complete"]),
9
- date: z.string().optional(),
10
- });
11
- export const PRDStatusSchema = z.object({
12
- project: z.string(),
13
- slug: z.string(),
14
- branch: z.string(),
15
- createdAt: z.string(),
16
- linearProjectId: z.string().optional(),
17
- milestones: z.record(z.string(), MilestoneStatusSchema),
18
- });
19
- // ---------------------------------------------------------------------------
20
- // Helpers
21
- // ---------------------------------------------------------------------------
22
- function statusDir(projectDir) {
23
- return join(projectDir, ".planning", "status");
24
- }
25
- function statusFilePath(projectDir, slug) {
26
- return join(statusDir(projectDir), `${slug}.json`);
27
- }
28
- // ---------------------------------------------------------------------------
29
- // readPRDStatus
30
- // ---------------------------------------------------------------------------
31
- export async function readPRDStatus(projectDir, slug) {
32
- const filePath = statusFilePath(projectDir, slug);
33
- try {
34
- const raw = await readFile(filePath, "utf-8");
35
- const parsed = JSON.parse(raw);
36
- return PRDStatusSchema.parse(parsed);
37
- }
38
- catch {
39
- return null;
40
- }
41
- }
42
- // ---------------------------------------------------------------------------
43
- // writePRDStatus
44
- // ---------------------------------------------------------------------------
45
- export async function writePRDStatus(projectDir, slug, status) {
46
- const filePath = statusFilePath(projectDir, slug);
47
- await mkdir(dirname(filePath), { recursive: true });
48
- const content = JSON.stringify(status, null, 2) + "\n";
49
- await writeFile(filePath, content, "utf-8");
50
- }
51
- // ---------------------------------------------------------------------------
52
- // updateMilestoneStatus
53
- // ---------------------------------------------------------------------------
54
- export async function updateMilestoneStatus(projectDir, slug, milestoneNumber, status) {
55
- const current = await readPRDStatus(projectDir, slug);
56
- if (!current) {
57
- throw new Error(`PRD status file not found for slug: ${slug}`);
58
- }
59
- const key = String(milestoneNumber);
60
- const milestoneEntry = { status };
61
- if (status === "complete") {
62
- milestoneEntry.date = new Date().toISOString().slice(0, 10);
63
- }
64
- current.milestones[key] = milestoneEntry;
65
- await writePRDStatus(projectDir, slug, current);
66
- }
67
- // ---------------------------------------------------------------------------
68
- // discoverPRDs
69
- // ---------------------------------------------------------------------------
70
- export async function discoverPRDs(projectDir) {
71
- const dir = statusDir(projectDir);
72
- let files;
73
- try {
74
- files = await readdir(dir);
75
- }
76
- catch {
77
- return [];
78
- }
79
- const results = [];
80
- for (const file of files) {
81
- if (!file.endsWith(".json"))
82
- continue;
83
- const slug = file.replace(/\.json$/, "");
84
- const status = await readPRDStatus(projectDir, slug);
85
- if (status) {
86
- results.push({ slug, status });
87
- }
88
- }
89
- results.sort((a, b) => a.slug.localeCompare(b.slug));
90
- return results;
91
- }
92
- // ---------------------------------------------------------------------------
93
- // findNextPendingMilestone
94
- // ---------------------------------------------------------------------------
95
- export async function findNextPendingMilestone(projectDir, slug) {
96
- const prd = await readPRDStatus(projectDir, slug);
97
- if (!prd)
98
- return null;
99
- const entries = Object.entries(prd.milestones)
100
- .map(([key, value]) => ({ number: parseInt(key, 10), status: value }))
101
- .filter((e) => e.status.status === "pending")
102
- .sort((a, b) => a.number - b.number);
103
- return entries.length > 0 ? entries[0] : null;
104
- }
105
- // ---------------------------------------------------------------------------
106
- // countPendingMilestones
107
- // ---------------------------------------------------------------------------
108
- export async function countPendingMilestones(projectDir, slug) {
109
- if (slug) {
110
- const prd = await readPRDStatus(projectDir, slug);
111
- if (!prd)
112
- return 0;
113
- return Object.values(prd.milestones).filter((m) => m.status === "pending").length;
114
- }
115
- const allPRDs = await discoverPRDs(projectDir);
116
- let count = 0;
117
- for (const entry of allPRDs) {
118
- count += Object.values(entry.status.milestones).filter((m) => m.status === "pending").length;
119
- }
120
- return count;
121
- }
122
- //# sourceMappingURL=prd-status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prd-status.js","sourceRoot":"","sources":["../../src/state/prd-status.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export interface SessionContext {
2
- prdSlug: string;
3
- currentMilestoneSection: string | null;
4
- estimatedTokens: number;
5
- }
6
- export declare function readCurrentMilestone(prdPath: string, milestoneNumber: number): Promise<string | null>;
7
- export declare function readSessionContext(prdPath: string, milestoneNumber: number, prdSlug: string): Promise<SessionContext>;