smartlisa 0.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 (155) hide show
  1. package/README.md +77 -0
  2. package/dist/cli.js +6517 -0
  3. package/dist/src/adapters/cli/formatter.d.ts +34 -0
  4. package/dist/src/adapters/cli/formatter.d.ts.map +1 -0
  5. package/dist/src/adapters/cli/formatter.js +254 -0
  6. package/dist/src/adapters/cli/formatter.js.map +1 -0
  7. package/dist/src/adapters/cli/index.d.ts +14 -0
  8. package/dist/src/adapters/cli/index.d.ts.map +1 -0
  9. package/dist/src/adapters/cli/index.js +781 -0
  10. package/dist/src/adapters/cli/index.js.map +1 -0
  11. package/dist/src/adapters/state/__tests__/api.test.d.ts +8 -0
  12. package/dist/src/adapters/state/__tests__/api.test.d.ts.map +1 -0
  13. package/dist/src/adapters/state/__tests__/api.test.js +500 -0
  14. package/dist/src/adapters/state/__tests__/api.test.js.map +1 -0
  15. package/dist/src/adapters/state/__tests__/filesystem.test.d.ts +7 -0
  16. package/dist/src/adapters/state/__tests__/filesystem.test.d.ts.map +1 -0
  17. package/dist/src/adapters/state/__tests__/filesystem.test.js +418 -0
  18. package/dist/src/adapters/state/__tests__/filesystem.test.js.map +1 -0
  19. package/dist/src/adapters/state/api.d.ts +148 -0
  20. package/dist/src/adapters/state/api.d.ts.map +1 -0
  21. package/dist/src/adapters/state/api.js +337 -0
  22. package/dist/src/adapters/state/api.js.map +1 -0
  23. package/dist/src/adapters/state/filesystem.d.ts +80 -0
  24. package/dist/src/adapters/state/filesystem.d.ts.map +1 -0
  25. package/dist/src/adapters/state/filesystem.js +228 -0
  26. package/dist/src/adapters/state/filesystem.js.map +1 -0
  27. package/dist/src/adapters/state/index.d.ts +9 -0
  28. package/dist/src/adapters/state/index.d.ts.map +1 -0
  29. package/dist/src/adapters/state/index.js +10 -0
  30. package/dist/src/adapters/state/index.js.map +1 -0
  31. package/dist/src/adapters/state/types.d.ts +131 -0
  32. package/dist/src/adapters/state/types.d.ts.map +1 -0
  33. package/dist/src/adapters/state/types.js +11 -0
  34. package/dist/src/adapters/state/types.js.map +1 -0
  35. package/dist/src/core/__tests__/context.test.d.ts +12 -0
  36. package/dist/src/core/__tests__/context.test.d.ts.map +1 -0
  37. package/dist/src/core/__tests__/context.test.js +528 -0
  38. package/dist/src/core/__tests__/context.test.js.map +1 -0
  39. package/dist/src/core/__tests__/discover.test.d.ts +2 -0
  40. package/dist/src/core/__tests__/discover.test.d.ts.map +1 -0
  41. package/dist/src/core/__tests__/discover.test.js +667 -0
  42. package/dist/src/core/__tests__/discover.test.js.map +1 -0
  43. package/dist/src/core/__tests__/engine.test.d.ts +2 -0
  44. package/dist/src/core/__tests__/engine.test.d.ts.map +1 -0
  45. package/dist/src/core/__tests__/engine.test.js +444 -0
  46. package/dist/src/core/__tests__/engine.test.js.map +1 -0
  47. package/dist/src/core/__tests__/feedback.test.d.ts +2 -0
  48. package/dist/src/core/__tests__/feedback.test.d.ts.map +1 -0
  49. package/dist/src/core/__tests__/feedback.test.js +351 -0
  50. package/dist/src/core/__tests__/feedback.test.js.map +1 -0
  51. package/dist/src/core/__tests__/plan.test.d.ts +2 -0
  52. package/dist/src/core/__tests__/plan.test.d.ts.map +1 -0
  53. package/dist/src/core/__tests__/plan.test.js +429 -0
  54. package/dist/src/core/__tests__/plan.test.js.map +1 -0
  55. package/dist/src/core/__tests__/schemas.test.d.ts +2 -0
  56. package/dist/src/core/__tests__/schemas.test.d.ts.map +1 -0
  57. package/dist/src/core/__tests__/schemas.test.js +614 -0
  58. package/dist/src/core/__tests__/schemas.test.js.map +1 -0
  59. package/dist/src/core/__tests__/state.test.d.ts +2 -0
  60. package/dist/src/core/__tests__/state.test.d.ts.map +1 -0
  61. package/dist/src/core/__tests__/state.test.js +1107 -0
  62. package/dist/src/core/__tests__/state.test.js.map +1 -0
  63. package/dist/src/core/__tests__/status.test.d.ts +2 -0
  64. package/dist/src/core/__tests__/status.test.d.ts.map +1 -0
  65. package/dist/src/core/__tests__/status.test.js +600 -0
  66. package/dist/src/core/__tests__/status.test.js.map +1 -0
  67. package/dist/src/core/__tests__/test-helpers.d.ts +28 -0
  68. package/dist/src/core/__tests__/test-helpers.d.ts.map +1 -0
  69. package/dist/src/core/__tests__/test-helpers.js +185 -0
  70. package/dist/src/core/__tests__/test-helpers.js.map +1 -0
  71. package/dist/src/core/__tests__/utils.test.d.ts +2 -0
  72. package/dist/src/core/__tests__/utils.test.d.ts.map +1 -0
  73. package/dist/src/core/__tests__/utils.test.js +276 -0
  74. package/dist/src/core/__tests__/utils.test.js.map +1 -0
  75. package/dist/src/core/__tests__/validate.test.d.ts +2 -0
  76. package/dist/src/core/__tests__/validate.test.d.ts.map +1 -0
  77. package/dist/src/core/__tests__/validate.test.js +354 -0
  78. package/dist/src/core/__tests__/validate.test.js.map +1 -0
  79. package/dist/src/core/commands/discover.d.ts +71 -0
  80. package/dist/src/core/commands/discover.d.ts.map +1 -0
  81. package/dist/src/core/commands/discover.js +687 -0
  82. package/dist/src/core/commands/discover.js.map +1 -0
  83. package/dist/src/core/commands/feedback.d.ts +49 -0
  84. package/dist/src/core/commands/feedback.d.ts.map +1 -0
  85. package/dist/src/core/commands/feedback.js +283 -0
  86. package/dist/src/core/commands/feedback.js.map +1 -0
  87. package/dist/src/core/commands/index.d.ts +11 -0
  88. package/dist/src/core/commands/index.d.ts.map +1 -0
  89. package/dist/src/core/commands/index.js +11 -0
  90. package/dist/src/core/commands/index.js.map +1 -0
  91. package/dist/src/core/commands/plan.d.ts +108 -0
  92. package/dist/src/core/commands/plan.d.ts.map +1 -0
  93. package/dist/src/core/commands/plan.js +621 -0
  94. package/dist/src/core/commands/plan.js.map +1 -0
  95. package/dist/src/core/commands/status.d.ts +72 -0
  96. package/dist/src/core/commands/status.d.ts.map +1 -0
  97. package/dist/src/core/commands/status.js +720 -0
  98. package/dist/src/core/commands/status.js.map +1 -0
  99. package/dist/src/core/commands/validate.d.ts +47 -0
  100. package/dist/src/core/commands/validate.d.ts.map +1 -0
  101. package/dist/src/core/commands/validate.js +608 -0
  102. package/dist/src/core/commands/validate.js.map +1 -0
  103. package/dist/src/core/engine.d.ts +294 -0
  104. package/dist/src/core/engine.d.ts.map +1 -0
  105. package/dist/src/core/engine.js +219 -0
  106. package/dist/src/core/engine.js.map +1 -0
  107. package/dist/src/core/index.d.ts +14 -0
  108. package/dist/src/core/index.d.ts.map +1 -0
  109. package/dist/src/core/index.js +18 -0
  110. package/dist/src/core/index.js.map +1 -0
  111. package/dist/src/core/prompts/context-helpers.d.ts +48 -0
  112. package/dist/src/core/prompts/context-helpers.d.ts.map +1 -0
  113. package/dist/src/core/prompts/context-helpers.js +206 -0
  114. package/dist/src/core/prompts/context-helpers.js.map +1 -0
  115. package/dist/src/core/prompts/discovery.d.ts +11 -0
  116. package/dist/src/core/prompts/discovery.d.ts.map +1 -0
  117. package/dist/src/core/prompts/discovery.js +179 -0
  118. package/dist/src/core/prompts/discovery.js.map +1 -0
  119. package/dist/src/core/prompts/feedback.d.ts +38 -0
  120. package/dist/src/core/prompts/feedback.d.ts.map +1 -0
  121. package/dist/src/core/prompts/feedback.js +292 -0
  122. package/dist/src/core/prompts/feedback.js.map +1 -0
  123. package/dist/src/core/prompts/index.d.ts +12 -0
  124. package/dist/src/core/prompts/index.d.ts.map +1 -0
  125. package/dist/src/core/prompts/index.js +12 -0
  126. package/dist/src/core/prompts/index.js.map +1 -0
  127. package/dist/src/core/prompts/planning.d.ts +15 -0
  128. package/dist/src/core/prompts/planning.d.ts.map +1 -0
  129. package/dist/src/core/prompts/planning.js +293 -0
  130. package/dist/src/core/prompts/planning.js.map +1 -0
  131. package/dist/src/core/prompts/status.d.ts +41 -0
  132. package/dist/src/core/prompts/status.d.ts.map +1 -0
  133. package/dist/src/core/prompts/status.js +270 -0
  134. package/dist/src/core/prompts/status.js.map +1 -0
  135. package/dist/src/core/prompts/validate.d.ts +62 -0
  136. package/dist/src/core/prompts/validate.d.ts.map +1 -0
  137. package/dist/src/core/prompts/validate.js +302 -0
  138. package/dist/src/core/prompts/validate.js.map +1 -0
  139. package/dist/src/core/schemas.d.ts +5045 -0
  140. package/dist/src/core/schemas.d.ts.map +1 -0
  141. package/dist/src/core/schemas.js +492 -0
  142. package/dist/src/core/schemas.js.map +1 -0
  143. package/dist/src/core/state.d.ts +156 -0
  144. package/dist/src/core/state.d.ts.map +1 -0
  145. package/dist/src/core/state.js +608 -0
  146. package/dist/src/core/state.js.map +1 -0
  147. package/dist/src/core/types.d.ts +167 -0
  148. package/dist/src/core/types.d.ts.map +1 -0
  149. package/dist/src/core/types.js +102 -0
  150. package/dist/src/core/types.js.map +1 -0
  151. package/dist/src/core/utils.d.ts +39 -0
  152. package/dist/src/core/utils.d.ts.map +1 -0
  153. package/dist/src/core/utils.js +208 -0
  154. package/dist/src/core/utils.js.map +1 -0
  155. package/package.json +77 -0
@@ -0,0 +1,621 @@
1
+ /**
2
+ * Plan Commands for Ralph Engine
3
+ *
4
+ * Generates milestones, epics, and artifacts (PRD, architecture, stories).
5
+ */
6
+ import { success, error, section, } from "../types.js";
7
+ import { now, slugify, statusIcon, statusCategory } from "../utils.js";
8
+ import { getMilestonesGuidance, getEpicsGuidance, getEpicPlanningGuidance, getStoriesGuidance, } from "../prompts/planning.js";
9
+ // ============================================================================
10
+ // Milestones Commands
11
+ // ============================================================================
12
+ export async function showMilestones(state) {
13
+ if (!(await state.isInitialized())) {
14
+ return error("No Ralph project found.", "NOT_INITIALIZED");
15
+ }
16
+ const index = await state.readMilestoneIndex();
17
+ const context = await state.readDiscoveryContext();
18
+ const history = await state.readDiscoveryHistory();
19
+ const discoveryComplete = history?.is_complete || false;
20
+ const sections = [section.header("Milestones")];
21
+ // Check discovery status
22
+ if (!discoveryComplete) {
23
+ sections.push(section.warning("Discovery is not complete. Complete discovery first."));
24
+ sections.push(section.dim(" Run: discover"));
25
+ return success({
26
+ milestones: [],
27
+ approved: false,
28
+ discoveryComplete: false,
29
+ }, sections);
30
+ }
31
+ // Show context summary
32
+ sections.push(section.subheader("Project Context"));
33
+ if (context?.problem) {
34
+ sections.push(section.dim(` Problem: ${context.problem.slice(0, 80)}...`));
35
+ }
36
+ if (context?.vision) {
37
+ sections.push(section.dim(` Vision: ${context.vision.slice(0, 80)}...`));
38
+ }
39
+ sections.push(section.blank());
40
+ if (!index?.milestones || index.milestones.length === 0) {
41
+ sections.push(section.info("No milestones defined yet."));
42
+ const aiGuidance = getMilestonesGuidance(context, null);
43
+ return success({ milestones: [], discoveryComplete: true }, sections, aiGuidance);
44
+ }
45
+ // Build milestones with status
46
+ const milestonesWithStatus = [];
47
+ for (const m of index.milestones) {
48
+ const { status } = await state.getMilestoneWithStatus(m);
49
+ milestonesWithStatus.push({ ...m, status });
50
+ }
51
+ // Show existing milestones
52
+ sections.push(section.subheader("Current Milestones"));
53
+ sections.push(section.blank());
54
+ for (const m of milestonesWithStatus) {
55
+ const icon = statusIcon(m.status);
56
+ sections.push({
57
+ type: "status",
58
+ content: {
59
+ icon,
60
+ text: `${m.id}: ${m.name} [${m.status}]`,
61
+ status: m.status,
62
+ category: statusCategory(m.status),
63
+ },
64
+ });
65
+ sections.push(section.dim(` ${m.description}`));
66
+ if (m.epics.length > 0) {
67
+ sections.push(section.dim(` Epics: ${m.epics.join(", ")}`));
68
+ }
69
+ }
70
+ sections.push(section.blank());
71
+ sections.push(section.info("Next: Generate epics with 'plan epics M1'"));
72
+ const data = {
73
+ milestones: milestonesWithStatus,
74
+ discoveryComplete: true,
75
+ };
76
+ const aiGuidance = getMilestonesGuidance(context, index);
77
+ return success(data, sections, aiGuidance);
78
+ }
79
+ export async function addMilestone(state, options) {
80
+ if (!(await state.isInitialized())) {
81
+ return error("No Ralph project found.", "NOT_INITIALIZED");
82
+ }
83
+ let index = await state.readMilestoneIndex();
84
+ if (!index) {
85
+ index = { milestones: [] };
86
+ }
87
+ const milestoneNum = index.milestones.length + 1;
88
+ const milestone = {
89
+ id: `M${milestoneNum}`,
90
+ slug: slugify(options.name),
91
+ name: options.name,
92
+ description: options.description,
93
+ order: milestoneNum,
94
+ epics: [],
95
+ created: now(),
96
+ updated: now(),
97
+ };
98
+ index.milestones.push(milestone);
99
+ await state.writeMilestoneIndex(index);
100
+ const sections = [
101
+ section.success(`Added milestone ${milestone.id}: ${options.name}`),
102
+ ];
103
+ return success({ milestone }, sections);
104
+ }
105
+ // ============================================================================
106
+ // Epics Commands
107
+ // ============================================================================
108
+ export async function showEpics(state, options = {}) {
109
+ if (!(await state.isInitialized())) {
110
+ return error("No Ralph project found.", "NOT_INITIALIZED");
111
+ }
112
+ const index = await state.readMilestoneIndex();
113
+ if (!index?.milestones || index.milestones.length === 0) {
114
+ return error("No milestones found. Add milestones first.", "NO_MILESTONES");
115
+ }
116
+ let targetMilestone;
117
+ if (options.milestoneId) {
118
+ targetMilestone = index.milestones.find((m) => m.id === options.milestoneId);
119
+ if (!targetMilestone) {
120
+ return error(`Milestone ${options.milestoneId} not found.`, "NOT_FOUND");
121
+ }
122
+ }
123
+ const sections = [
124
+ section.header(targetMilestone ? `Epic Planning: ${options.milestoneId}` : "Epic Planning"),
125
+ ];
126
+ // List existing epics
127
+ const epicDirs = await state.listEpicDirs();
128
+ const milestoneHasEpics = targetMilestone
129
+ ? targetMilestone.epics.length > 0
130
+ : epicDirs.length > 0;
131
+ if (!milestoneHasEpics && targetMilestone) {
132
+ sections.push(section.info(`No epics for ${options.milestoneId} yet.`));
133
+ sections.push(section.blank());
134
+ sections.push(section.subheader(`Milestone: ${targetMilestone.name}`));
135
+ sections.push(section.dim(` ${targetMilestone.description}`));
136
+ const aiGuidance = getEpicsGuidance(targetMilestone, []);
137
+ return success({
138
+ milestoneId: options.milestoneId,
139
+ milestone: targetMilestone,
140
+ epics: [],
141
+ hasEpics: false,
142
+ }, sections, aiGuidance);
143
+ }
144
+ if (!milestoneHasEpics && !targetMilestone) {
145
+ sections.push(section.info("No epics generated yet."));
146
+ sections.push(section.blank());
147
+ sections.push(section.info("Pick a milestone to work on (M1 recommended):"));
148
+ for (const m of index.milestones) {
149
+ sections.push(section.dim(` ${m.id}: ${m.name}`));
150
+ }
151
+ return success({ epics: [], hasEpics: false }, sections);
152
+ }
153
+ // Show epics
154
+ const milestonesToShow = targetMilestone ? [targetMilestone] : index.milestones;
155
+ const allEpics = [];
156
+ sections.push(section.subheader(targetMilestone ? `Epics for ${targetMilestone.id}` : "Epics by Milestone"));
157
+ sections.push(section.blank());
158
+ for (const m of milestonesToShow) {
159
+ sections.push(section.text(` ${m.id}: ${m.name}`));
160
+ const epicIds = m.epics || [];
161
+ if (epicIds.length === 0) {
162
+ sections.push(section.dim(" (no epics yet)"));
163
+ }
164
+ else {
165
+ for (const epicDir of epicDirs) {
166
+ const [epicId] = epicDir.split("-");
167
+ if (epicIds.includes(epicId)) {
168
+ const slug = epicDir.split("-").slice(1).join("-");
169
+ const epicWithStatus = await state.getEpicWithStatus(epicId, slug);
170
+ if (epicWithStatus) {
171
+ const { epic, status } = epicWithStatus;
172
+ allEpics.push({ epic, status });
173
+ const icon = statusIcon(status);
174
+ sections.push({
175
+ type: "status",
176
+ content: {
177
+ icon,
178
+ text: ` ${epic.id}: ${epic.name} [${status}]`,
179
+ status,
180
+ category: statusCategory(status),
181
+ },
182
+ });
183
+ }
184
+ }
185
+ }
186
+ }
187
+ sections.push(section.blank());
188
+ }
189
+ // Next step guidance for specific milestone
190
+ if (targetMilestone) {
191
+ const incompleteEpics = allEpics.filter((e) => e.status !== "done");
192
+ if (incompleteEpics.length > 0) {
193
+ const nextEpic = incompleteEpics[0];
194
+ sections.push(section.info(`NEXT: Continue with ${nextEpic.epic.id} (${nextEpic.status})`));
195
+ }
196
+ else {
197
+ sections.push(section.success(`All epics in ${targetMilestone.id} complete!`));
198
+ }
199
+ }
200
+ const aiGuidance = targetMilestone
201
+ ? getEpicsGuidance(targetMilestone, allEpics)
202
+ : undefined;
203
+ return success({
204
+ milestoneId: options.milestoneId,
205
+ milestone: targetMilestone,
206
+ epics: allEpics,
207
+ hasEpics: true,
208
+ }, sections, aiGuidance);
209
+ }
210
+ export async function addEpic(state, options) {
211
+ if (!(await state.isInitialized())) {
212
+ return error("No Ralph project found.", "NOT_INITIALIZED");
213
+ }
214
+ const index = await state.readMilestoneIndex();
215
+ if (!index) {
216
+ return error("No milestones found.", "NO_MILESTONES");
217
+ }
218
+ const milestone = index.milestones.find((m) => m.id === options.milestoneId);
219
+ if (!milestone) {
220
+ return error(`Milestone ${options.milestoneId} not found.`, "NOT_FOUND");
221
+ }
222
+ // Calculate epic number
223
+ const existingEpics = await state.listEpicDirs();
224
+ const epicNum = existingEpics.length + 1;
225
+ const epicId = `E${epicNum}`;
226
+ const slug = slugify(options.name);
227
+ // Create epic directory
228
+ await state.createEpicDir(epicId, slug);
229
+ // Create epic metadata
230
+ const epic = {
231
+ id: epicId,
232
+ slug,
233
+ name: options.name,
234
+ description: options.description,
235
+ milestone: options.milestoneId,
236
+ deferred: false,
237
+ created: now(),
238
+ updated: now(),
239
+ artifacts: {
240
+ prd: { status: "pending", version: 1 },
241
+ architecture: { status: "pending", version: 1 },
242
+ stories: { status: "pending", count: 0 },
243
+ },
244
+ dependencies: [],
245
+ stats: {
246
+ requirements: 0,
247
+ stories: 0,
248
+ coverage: 0,
249
+ },
250
+ };
251
+ await state.writeEpic(epic);
252
+ // Update milestone
253
+ milestone.epics.push(epicId);
254
+ milestone.updated = now();
255
+ await state.writeMilestoneIndex(index);
256
+ // Update project stats
257
+ const project = await state.readProject();
258
+ if (project) {
259
+ project.stats.epics = existingEpics.length + 1;
260
+ await state.writeProject(project);
261
+ }
262
+ const sections = [
263
+ section.success(`Created epic ${epicId}: ${options.name}`),
264
+ section.blank(),
265
+ section.info("Next: Run discovery for this epic or proceed to PRD"),
266
+ ];
267
+ const aiGuidance = {
268
+ situation: `Epic ${epicId} created, ready for discovery or PRD`,
269
+ instructions: [
270
+ "Ask user if they want to run discovery for this epic",
271
+ "Discovery helps gather scope, constraints, and success criteria",
272
+ "If they skip, proceed directly to PRD generation",
273
+ ],
274
+ commands: [
275
+ {
276
+ command: "discover element",
277
+ args: `{ elementType: 'epic', elementId: '${epicId}' }`,
278
+ description: "Run epic discovery",
279
+ when: "To gather more context before PRD",
280
+ },
281
+ {
282
+ command: "plan epic",
283
+ args: epicId,
284
+ description: "Plan epic (PRD generation)",
285
+ when: "To skip discovery and proceed to PRD",
286
+ },
287
+ ],
288
+ };
289
+ return success({ epic }, sections, aiGuidance);
290
+ }
291
+ export async function planEpic(state, options) {
292
+ if (!(await state.isInitialized())) {
293
+ return error("No Ralph project found.", "NOT_INITIALIZED");
294
+ }
295
+ const ctx = await state.assembleEpicContext(options.epicId);
296
+ // Find epic directory
297
+ const epicDirs = await state.listEpicDirs();
298
+ const epicDir = epicDirs.find((d) => d.startsWith(`${options.epicId}-`));
299
+ if (!epicDir) {
300
+ return error(`Epic ${options.epicId} not found.`, "NOT_FOUND");
301
+ }
302
+ const slug = epicDir.split("-").slice(1).join("-");
303
+ const storiesFile = await state.readStories(options.epicId, slug);
304
+ const derivedStatus = await state.deriveEpicStatus(ctx.epic, storiesFile?.stories || null);
305
+ // Determine next step
306
+ let nextStep = "complete";
307
+ if (ctx.epic.artifacts.prd.status === "pending") {
308
+ nextStep = "prd";
309
+ }
310
+ else if (ctx.epic.artifacts.architecture.status === "pending") {
311
+ nextStep = "architecture";
312
+ }
313
+ else if (ctx.epic.artifacts.stories.status === "pending") {
314
+ nextStep = "stories";
315
+ }
316
+ const data = {
317
+ epic: ctx.epic,
318
+ status: derivedStatus,
319
+ milestone: ctx.milestone,
320
+ artifacts: {
321
+ prd: {
322
+ status: ctx.epic.artifacts.prd.status,
323
+ exists: ctx.epic.artifacts.prd.status === "complete",
324
+ },
325
+ architecture: {
326
+ status: ctx.epic.artifacts.architecture.status,
327
+ exists: ctx.epic.artifacts.architecture.status === "complete",
328
+ },
329
+ stories: {
330
+ status: ctx.epic.artifacts.stories.status,
331
+ count: ctx.epic.artifacts.stories.count,
332
+ },
333
+ },
334
+ nextStep,
335
+ };
336
+ const sections = [
337
+ section.header(`Planning ${options.epicId}: ${ctx.epic.name}`),
338
+ section.subheader("Current State"),
339
+ section.dim(` Description: ${ctx.epic.description}`),
340
+ section.dim(` Milestone: ${ctx.milestone.id} - ${ctx.milestone.name}`),
341
+ section.dim(` Status: ${derivedStatus}${ctx.epic.deferred ? " (deferred)" : ""}`),
342
+ section.blank(),
343
+ section.subheader("Artifacts"),
344
+ ];
345
+ const prdIcon = statusIcon(ctx.epic.artifacts.prd.status);
346
+ const archIcon = statusIcon(ctx.epic.artifacts.architecture.status);
347
+ const storiesIcon = statusIcon(ctx.epic.artifacts.stories.status);
348
+ sections.push(section.text(` ${prdIcon} PRD: ${ctx.epic.artifacts.prd.status}`));
349
+ sections.push(section.text(` ${archIcon} Architecture: ${ctx.epic.artifacts.architecture.status}`));
350
+ sections.push(section.text(` ${storiesIcon} Stories: ${ctx.epic.artifacts.stories.status} (${ctx.epic.artifacts.stories.count})`));
351
+ sections.push(section.blank());
352
+ // Show epic discovery if exists
353
+ if (ctx.epicDiscovery) {
354
+ sections.push(section.subheader("Epic Discovery"));
355
+ const discoveryIcon = ctx.epicDiscovery.status === "complete" ? "✓" : ctx.epicDiscovery.status === "in_progress" ? "▶" : "○";
356
+ sections.push(section.text(` ${discoveryIcon} Status: ${ctx.epicDiscovery.status}`));
357
+ if (ctx.epicDiscovery.problem) {
358
+ sections.push(section.dim(` Problem: ${ctx.epicDiscovery.problem.slice(0, 60)}...`));
359
+ }
360
+ sections.push(section.blank());
361
+ }
362
+ // Next step
363
+ if (nextStep === "prd") {
364
+ sections.push(section.info("NEXT: Generate PRD"));
365
+ }
366
+ else if (nextStep === "architecture") {
367
+ sections.push(section.info("NEXT: Generate Architecture"));
368
+ }
369
+ else if (nextStep === "stories") {
370
+ sections.push(section.info("NEXT: Generate Stories"));
371
+ }
372
+ else {
373
+ sections.push(section.success("All artifacts generated!"));
374
+ }
375
+ const aiGuidance = getEpicPlanningGuidance(ctx, nextStep);
376
+ return success(data, sections, aiGuidance);
377
+ }
378
+ // ============================================================================
379
+ // PRD Commands
380
+ // ============================================================================
381
+ export async function savePrd(state, options) {
382
+ const epicDirs = await state.listEpicDirs();
383
+ const epicDir = epicDirs.find((d) => d.startsWith(`${options.epicId}-`));
384
+ if (!epicDir) {
385
+ return error(`Epic ${options.epicId} not found.`, "NOT_FOUND");
386
+ }
387
+ const slug = epicDir.split("-").slice(1).join("-");
388
+ // Write PRD
389
+ await state.writePrd(options.epicId, slug, options.content);
390
+ // Update epic metadata
391
+ const epic = await state.readEpic(options.epicId, slug);
392
+ if (epic) {
393
+ epic.artifacts.prd.status = "complete";
394
+ epic.artifacts.prd.version = (epic.artifacts.prd.version || 0) + 1;
395
+ epic.artifacts.prd.last_updated = now();
396
+ // Count requirements
397
+ const reqMatches = options.content.match(/### R\d+:/g);
398
+ epic.stats.requirements = reqMatches?.length || 0;
399
+ await state.writeEpic(epic);
400
+ }
401
+ const sections = [
402
+ section.success(`PRD saved for ${options.epicId}`),
403
+ section.info(`Next: Generate architecture`),
404
+ ];
405
+ return success({ saved: true }, sections);
406
+ }
407
+ // ============================================================================
408
+ // Architecture Commands
409
+ // ============================================================================
410
+ export async function saveArchitecture(state, options) {
411
+ const epicDirs = await state.listEpicDirs();
412
+ const epicDir = epicDirs.find((d) => d.startsWith(`${options.epicId}-`));
413
+ if (!epicDir) {
414
+ return error(`Epic ${options.epicId} not found.`, "NOT_FOUND");
415
+ }
416
+ const slug = epicDir.split("-").slice(1).join("-");
417
+ // Write architecture
418
+ await state.writeArchitecture(options.epicId, slug, options.content);
419
+ // Update epic metadata
420
+ const epic = await state.readEpic(options.epicId, slug);
421
+ if (epic) {
422
+ epic.artifacts.architecture.status = "complete";
423
+ epic.artifacts.architecture.version = (epic.artifacts.architecture.version || 0) + 1;
424
+ epic.artifacts.architecture.last_updated = now();
425
+ await state.writeEpic(epic);
426
+ }
427
+ const sections = [
428
+ section.success(`Architecture saved for ${options.epicId}`),
429
+ section.info(`Next: Generate stories`),
430
+ ];
431
+ return success({ saved: true }, sections);
432
+ }
433
+ // ============================================================================
434
+ // Stories Commands
435
+ // ============================================================================
436
+ export async function showStories(state, options) {
437
+ const epicDirs = await state.listEpicDirs();
438
+ const epicDir = epicDirs.find((d) => d.startsWith(`${options.epicId}-`));
439
+ if (!epicDir) {
440
+ return error(`Epic ${options.epicId} not found.`, "NOT_FOUND");
441
+ }
442
+ const slug = epicDir.split("-").slice(1).join("-");
443
+ const existingStories = await state.readStories(options.epicId, slug);
444
+ if (existingStories && existingStories.stories.length > 0) {
445
+ const sections = [
446
+ section.header(`Stories: ${options.epicId}`),
447
+ section.warning(`${existingStories.stories.length} stories already exist.`),
448
+ section.blank(),
449
+ ];
450
+ for (const story of existingStories.stories) {
451
+ const icon = statusIcon(story.status);
452
+ sections.push({
453
+ type: "status",
454
+ content: {
455
+ icon,
456
+ text: `${story.id}: ${story.title}`,
457
+ status: story.status,
458
+ category: statusCategory(story.status),
459
+ },
460
+ });
461
+ }
462
+ return success({
463
+ epicId: options.epicId,
464
+ epicName: options.epicId,
465
+ stories: existingStories.stories,
466
+ requirements: [],
467
+ }, sections);
468
+ }
469
+ // No stories yet - show generation guidance
470
+ const ctx = await state.assembleStoryContext(options.epicId);
471
+ const sections = [
472
+ section.header(`Story Generation: ${ctx.epic.name}`),
473
+ section.subheader("PRD Requirements to Cover"),
474
+ ];
475
+ if (ctx.requirements.length > 0) {
476
+ for (const req of ctx.requirements) {
477
+ sections.push(section.dim(` ${req.id}: ${req.title}`));
478
+ }
479
+ }
480
+ sections.push(section.blank());
481
+ const aiGuidance = getStoriesGuidance(ctx);
482
+ return success({
483
+ epicId: options.epicId,
484
+ epicName: ctx.epic.name,
485
+ stories: [],
486
+ requirements: ctx.requirements,
487
+ }, sections, aiGuidance);
488
+ }
489
+ export async function addStory(state, options) {
490
+ const epicDirs = await state.listEpicDirs();
491
+ const epicDir = epicDirs.find((d) => d.startsWith(`${options.epicId}-`));
492
+ if (!epicDir) {
493
+ return error(`Epic ${options.epicId} not found.`, "NOT_FOUND");
494
+ }
495
+ const slug = epicDir.split("-").slice(1).join("-");
496
+ // Read or create stories file
497
+ let storiesFile = await state.readStories(options.epicId, slug);
498
+ if (!storiesFile) {
499
+ storiesFile = {
500
+ epic_id: options.epicId,
501
+ stories: [],
502
+ coverage: {},
503
+ validation: {
504
+ coverage_complete: false,
505
+ all_links_valid: false,
506
+ },
507
+ };
508
+ }
509
+ // Create story
510
+ const storyNum = storiesFile.stories.length + 1;
511
+ const story = {
512
+ id: `${options.epicId}.S${storyNum}`,
513
+ title: options.title,
514
+ description: options.description,
515
+ type: "feature",
516
+ requirements: options.requirements.map((r) => `${options.epicId}.${r}`),
517
+ acceptance_criteria: options.criteria,
518
+ dependencies: [],
519
+ status: "todo",
520
+ assignee: null,
521
+ };
522
+ storiesFile.stories.push(story);
523
+ // Update coverage map
524
+ for (const req of options.requirements) {
525
+ const fullReq = `${options.epicId}.${req}`;
526
+ if (!storiesFile.coverage[fullReq]) {
527
+ storiesFile.coverage[fullReq] = [];
528
+ }
529
+ storiesFile.coverage[fullReq].push(story.id);
530
+ }
531
+ await state.writeStories(options.epicId, slug, storiesFile);
532
+ // Update epic
533
+ const epic = await state.readEpic(options.epicId, slug);
534
+ if (epic) {
535
+ epic.artifacts.stories.count = storiesFile.stories.length;
536
+ epic.stats.stories = storiesFile.stories.length;
537
+ await state.writeEpic(epic);
538
+ }
539
+ // Update project stats
540
+ const project = await state.readProject();
541
+ if (project) {
542
+ let totalStories = 0;
543
+ for (const dir of await state.listEpicDirs()) {
544
+ const [id] = dir.split("-");
545
+ const s = dir.split("-").slice(1).join("-");
546
+ const sf = await state.readStories(id, s);
547
+ if (sf)
548
+ totalStories += sf.stories.length;
549
+ }
550
+ project.stats.stories = totalStories;
551
+ await state.writeProject(project);
552
+ }
553
+ const sections = [
554
+ section.success(`Added story ${story.id}: ${options.title}`),
555
+ ];
556
+ return success({ story }, sections);
557
+ }
558
+ export async function saveStories(state, options) {
559
+ const epicDirs = await state.listEpicDirs();
560
+ const epicDir = epicDirs.find((d) => d.startsWith(`${options.epicId}-`));
561
+ if (!epicDir) {
562
+ return error(`Epic ${options.epicId} not found.`, "NOT_FOUND");
563
+ }
564
+ const slug = epicDir.split("-").slice(1).join("-");
565
+ // Build stories file
566
+ const storiesFile = {
567
+ epic_id: options.epicId,
568
+ stories: options.stories.map((s, i) => ({
569
+ ...s,
570
+ id: s.id || `${options.epicId}.S${i + 1}`,
571
+ status: s.status || "todo",
572
+ assignee: s.assignee || null,
573
+ })),
574
+ coverage: {},
575
+ validation: {
576
+ coverage_complete: false,
577
+ all_links_valid: false,
578
+ },
579
+ };
580
+ // Build coverage map
581
+ for (const story of storiesFile.stories) {
582
+ for (const req of story.requirements) {
583
+ if (!storiesFile.coverage[req]) {
584
+ storiesFile.coverage[req] = [];
585
+ }
586
+ storiesFile.coverage[req].push(story.id);
587
+ }
588
+ }
589
+ await state.writeStories(options.epicId, slug, storiesFile);
590
+ // Update epic
591
+ const epic = await state.readEpic(options.epicId, slug);
592
+ if (epic) {
593
+ epic.artifacts.stories.status = "complete";
594
+ epic.artifacts.stories.count = storiesFile.stories.length;
595
+ epic.stats.stories = storiesFile.stories.length;
596
+ await state.writeEpic(epic);
597
+ }
598
+ const sections = [
599
+ section.success(`Saved ${storiesFile.stories.length} stories for ${options.epicId}`),
600
+ ];
601
+ return success({ count: storiesFile.stories.length }, sections);
602
+ }
603
+ export async function markStoriesComplete(state, options) {
604
+ const epicDirs = await state.listEpicDirs();
605
+ const epicDir = epicDirs.find((d) => d.startsWith(`${options.epicId}-`));
606
+ if (!epicDir) {
607
+ return error(`Epic ${options.epicId} not found.`, "NOT_FOUND");
608
+ }
609
+ const slug = epicDir.split("-").slice(1).join("-");
610
+ const epic = await state.readEpic(options.epicId, slug);
611
+ if (epic) {
612
+ epic.artifacts.stories.status = "complete";
613
+ await state.writeEpic(epic);
614
+ }
615
+ const sections = [
616
+ section.success(`${options.epicId} stories marked complete`),
617
+ section.info("Run validation: validate epic " + options.epicId),
618
+ ];
619
+ return success({ completed: true }, sections);
620
+ }
621
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../../src/core/commands/plan.ts"],"names":[],"mappings":"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"}