forge-cc 1.0.0 → 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 (142) hide show
  1. package/package.json +3 -2
  2. package/dist/gates/codex-gate.d.ts +0 -51
  3. package/dist/gates/codex-gate.js +0 -121
  4. package/dist/gates/codex-gate.js.map +0 -1
  5. package/dist/gates/prd-gate.d.ts +0 -7
  6. package/dist/gates/prd-gate.js +0 -193
  7. package/dist/gates/prd-gate.js.map +0 -1
  8. package/dist/gates/remediation.d.ts +0 -46
  9. package/dist/gates/remediation.js +0 -423
  10. package/dist/gates/remediation.js.map +0 -1
  11. package/dist/gates/review-gate.d.ts +0 -16
  12. package/dist/gates/review-gate.js +0 -479
  13. package/dist/gates/review-gate.js.map +0 -1
  14. package/dist/gates/runtime-gate.d.ts +0 -5
  15. package/dist/gates/runtime-gate.js +0 -99
  16. package/dist/gates/runtime-gate.js.map +0 -1
  17. package/dist/gates/test-analysis.d.ts +0 -21
  18. package/dist/gates/test-analysis.js +0 -394
  19. package/dist/gates/test-analysis.js.map +0 -1
  20. package/dist/gates/visual-capture.d.ts +0 -24
  21. package/dist/gates/visual-capture.js +0 -144
  22. package/dist/gates/visual-capture.js.map +0 -1
  23. package/dist/gates/visual-gate.d.ts +0 -18
  24. package/dist/gates/visual-gate.js +0 -234
  25. package/dist/gates/visual-gate.js.map +0 -1
  26. package/dist/gates/visual-reviewer.d.ts +0 -11
  27. package/dist/gates/visual-reviewer.js +0 -211
  28. package/dist/gates/visual-reviewer.js.map +0 -1
  29. package/dist/go/auto-chain.d.ts +0 -136
  30. package/dist/go/auto-chain.js +0 -389
  31. package/dist/go/auto-chain.js.map +0 -1
  32. package/dist/go/executor.d.ts +0 -137
  33. package/dist/go/executor.js +0 -447
  34. package/dist/go/executor.js.map +0 -1
  35. package/dist/go/finalize.d.ts +0 -108
  36. package/dist/go/finalize.js +0 -331
  37. package/dist/go/finalize.js.map +0 -1
  38. package/dist/go/linear-sync-cli.d.ts +0 -55
  39. package/dist/go/linear-sync-cli.js +0 -192
  40. package/dist/go/linear-sync-cli.js.map +0 -1
  41. package/dist/go/linear-sync.d.ts +0 -112
  42. package/dist/go/linear-sync.js +0 -375
  43. package/dist/go/linear-sync.js.map +0 -1
  44. package/dist/go/prd-queue.d.ts +0 -43
  45. package/dist/go/prd-queue.js +0 -67
  46. package/dist/go/prd-queue.js.map +0 -1
  47. package/dist/go/prd-selector.d.ts +0 -57
  48. package/dist/go/prd-selector.js +0 -101
  49. package/dist/go/prd-selector.js.map +0 -1
  50. package/dist/go/verify-loop.d.ts +0 -64
  51. package/dist/go/verify-loop.js +0 -327
  52. package/dist/go/verify-loop.js.map +0 -1
  53. package/dist/hooks/pre-commit.d.ts +0 -5
  54. package/dist/hooks/pre-commit.js +0 -75
  55. package/dist/hooks/pre-commit.js.map +0 -1
  56. package/dist/linear/issues.d.ts +0 -22
  57. package/dist/linear/issues.js +0 -51
  58. package/dist/linear/issues.js.map +0 -1
  59. package/dist/linear/milestones.d.ts +0 -11
  60. package/dist/linear/milestones.js +0 -32
  61. package/dist/linear/milestones.js.map +0 -1
  62. package/dist/linear/projects.d.ts +0 -16
  63. package/dist/linear/projects.js +0 -51
  64. package/dist/linear/projects.js.map +0 -1
  65. package/dist/reporter/human.d.ts +0 -7
  66. package/dist/reporter/human.js +0 -93
  67. package/dist/reporter/human.js.map +0 -1
  68. package/dist/reporter/json.d.ts +0 -2
  69. package/dist/reporter/json.js +0 -4
  70. package/dist/reporter/json.js.map +0 -1
  71. package/dist/setup/structural-templates.d.ts +0 -12
  72. package/dist/setup/structural-templates.js +0 -288
  73. package/dist/setup/structural-templates.js.map +0 -1
  74. package/dist/setup/templates.d.ts +0 -17
  75. package/dist/setup/templates.js +0 -109
  76. package/dist/setup/templates.js.map +0 -1
  77. package/dist/setup/test-planner.d.ts +0 -38
  78. package/dist/setup/test-planner.js +0 -91
  79. package/dist/setup/test-planner.js.map +0 -1
  80. package/dist/setup/test-scaffold.d.ts +0 -31
  81. package/dist/setup/test-scaffold.js +0 -209
  82. package/dist/setup/test-scaffold.js.map +0 -1
  83. package/dist/setup/test-templates.d.ts +0 -37
  84. package/dist/setup/test-templates.js +0 -313
  85. package/dist/setup/test-templates.js.map +0 -1
  86. package/dist/spec/generator.d.ts +0 -34
  87. package/dist/spec/generator.js +0 -227
  88. package/dist/spec/generator.js.map +0 -1
  89. package/dist/spec/interview.d.ts +0 -142
  90. package/dist/spec/interview.js +0 -287
  91. package/dist/spec/interview.js.map +0 -1
  92. package/dist/spec/linear-sync.d.ts +0 -48
  93. package/dist/spec/linear-sync.js +0 -125
  94. package/dist/spec/linear-sync.js.map +0 -1
  95. package/dist/spec/scanner.d.ts +0 -79
  96. package/dist/spec/scanner.js +0 -566
  97. package/dist/spec/scanner.js.map +0 -1
  98. package/dist/spec/templates.d.ts +0 -375
  99. package/dist/spec/templates.js +0 -95
  100. package/dist/spec/templates.js.map +0 -1
  101. package/dist/state/prd-status.d.ts +0 -62
  102. package/dist/state/prd-status.js +0 -122
  103. package/dist/state/prd-status.js.map +0 -1
  104. package/dist/state/reader.d.ts +0 -7
  105. package/dist/state/reader.js +0 -43
  106. package/dist/state/reader.js.map +0 -1
  107. package/dist/state/writer.d.ts +0 -21
  108. package/dist/state/writer.js +0 -106
  109. package/dist/state/writer.js.map +0 -1
  110. package/dist/team/consensus.d.ts +0 -28
  111. package/dist/team/consensus.js +0 -130
  112. package/dist/team/consensus.js.map +0 -1
  113. package/dist/team/index.d.ts +0 -4
  114. package/dist/team/index.js +0 -5
  115. package/dist/team/index.js.map +0 -1
  116. package/dist/team/lifecycle.d.ts +0 -37
  117. package/dist/team/lifecycle.js +0 -92
  118. package/dist/team/lifecycle.js.map +0 -1
  119. package/dist/team/reviewer.d.ts +0 -10
  120. package/dist/team/reviewer.js +0 -345
  121. package/dist/team/reviewer.js.map +0 -1
  122. package/dist/team/types.d.ts +0 -269
  123. package/dist/team/types.js +0 -70
  124. package/dist/team/types.js.map +0 -1
  125. package/dist/utils/browser.d.ts +0 -10
  126. package/dist/utils/browser.js +0 -96
  127. package/dist/utils/browser.js.map +0 -1
  128. package/dist/utils/platform.d.ts +0 -29
  129. package/dist/utils/platform.js +0 -90
  130. package/dist/utils/platform.js.map +0 -1
  131. package/dist/worktree/identity.d.ts +0 -9
  132. package/dist/worktree/identity.js +0 -32
  133. package/dist/worktree/identity.js.map +0 -1
  134. package/dist/worktree/parallel.d.ts +0 -87
  135. package/dist/worktree/parallel.js +0 -328
  136. package/dist/worktree/parallel.js.map +0 -1
  137. package/dist/worktree/session.d.ts +0 -67
  138. package/dist/worktree/session.js +0 -194
  139. package/dist/worktree/session.js.map +0 -1
  140. package/dist/worktree/state-merge.d.ts +0 -43
  141. package/dist/worktree/state-merge.js +0 -162
  142. 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>;