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,302 @@
1
+ /**
2
+ * Validate Prompts for Ralph Engine
3
+ *
4
+ * AI guidance templates for validation, coverage, and integrity checks.
5
+ */
6
+ import { enhanceWithContext } from "./context-helpers.js";
7
+ export function getFullValidationGuidance(state) {
8
+ const { errors, warnings, brokenLinks, coverageGaps, orphanedItems } = state;
9
+ let situation;
10
+ if (errors === 0 && warnings === 0) {
11
+ situation = "All validations passed - project is in good shape";
12
+ }
13
+ else if (errors > 0) {
14
+ situation = `Validation found ${errors} error(s) that need attention`;
15
+ }
16
+ else {
17
+ situation = `Validation passed with ${warnings} warning(s)`;
18
+ }
19
+ const instructions = [];
20
+ const commands = [];
21
+ if (errors === 0 && warnings === 0) {
22
+ instructions.push("Project artifacts are consistent");
23
+ instructions.push("Continue with implementation");
24
+ commands.push({
25
+ command: "status board",
26
+ description: "View available stories",
27
+ when: "To continue work",
28
+ });
29
+ return { situation, instructions, commands };
30
+ }
31
+ // Prioritize fixes
32
+ if (brokenLinks.length > 0) {
33
+ instructions.push(`Fix ${brokenLinks.length} broken link(s):`);
34
+ for (const link of brokenLinks.slice(0, 3)) {
35
+ instructions.push(` - ${link.from.id} → ${link.to.id} (${link.type})`);
36
+ }
37
+ if (brokenLinks.length > 3) {
38
+ instructions.push(` ... and ${brokenLinks.length - 3} more`);
39
+ }
40
+ }
41
+ if (coverageGaps.length > 0) {
42
+ instructions.push(`Address ${coverageGaps.length} coverage gap(s):`);
43
+ for (const gap of coverageGaps.slice(0, 3)) {
44
+ instructions.push(` - ${gap.requirement} needs stories`);
45
+ }
46
+ if (coverageGaps.length > 3) {
47
+ instructions.push(` ... and ${coverageGaps.length - 3} more`);
48
+ }
49
+ // Group by epic for commands
50
+ const epicIds = [...new Set(coverageGaps.map((g) => g.epic))];
51
+ for (const epicId of epicIds.slice(0, 2)) {
52
+ commands.push({
53
+ command: "plan stories",
54
+ args: epicId,
55
+ description: `Generate stories for ${epicId}`,
56
+ when: "To cover missing requirements",
57
+ });
58
+ }
59
+ }
60
+ if (orphanedItems.length > 0) {
61
+ instructions.push(`Review ${orphanedItems.length} orphaned item(s):`);
62
+ for (const orphan of orphanedItems.slice(0, 3)) {
63
+ instructions.push(` - ${orphan.type}:${orphan.id} has no links`);
64
+ }
65
+ instructions.push("Consider linking to requirements or removing if obsolete");
66
+ }
67
+ commands.push({
68
+ command: "validate",
69
+ description: "Re-run validation",
70
+ when: "After making fixes",
71
+ });
72
+ return { situation, instructions, commands };
73
+ }
74
+ export function getLinkValidationGuidance(state) {
75
+ const { totalLinks, brokenLinks, orphans } = state;
76
+ let situation;
77
+ if (brokenLinks.length === 0 && orphans.length === 0) {
78
+ situation = `All ${totalLinks} links are valid`;
79
+ }
80
+ else if (brokenLinks.length > 0) {
81
+ situation = `${brokenLinks.length} broken links found`;
82
+ }
83
+ else {
84
+ situation = `${orphans.length} orphaned items found`;
85
+ }
86
+ const instructions = [];
87
+ const commands = [];
88
+ if (brokenLinks.length === 0 && orphans.length === 0) {
89
+ instructions.push("Link integrity is good");
90
+ instructions.push("All references point to valid targets");
91
+ return { situation, instructions, commands };
92
+ }
93
+ if (brokenLinks.length > 0) {
94
+ instructions.push("Fix broken links:");
95
+ for (const link of brokenLinks.slice(0, 5)) {
96
+ if (link.type === "implements") {
97
+ instructions.push(` - Story ${link.from.id} references non-existent requirement ${link.to.id}`);
98
+ instructions.push(` → Either create the requirement or update the story`);
99
+ }
100
+ else if (link.type === "depends_on") {
101
+ instructions.push(` - Story ${link.from.id} depends on non-existent story ${link.to.id}`);
102
+ instructions.push(` → Either create the dependency or remove the reference`);
103
+ }
104
+ }
105
+ }
106
+ if (orphans.length > 0) {
107
+ instructions.push("Review orphaned items:");
108
+ for (const orphan of orphans.slice(0, 5)) {
109
+ instructions.push(` - ${orphan.type}:${orphan.id} - ${orphan.reason}`);
110
+ }
111
+ instructions.push("Orphans should either be linked to requirements or removed");
112
+ }
113
+ commands.push({
114
+ command: "validate links",
115
+ description: "Re-check links",
116
+ when: "After fixing issues",
117
+ });
118
+ return { situation, instructions, commands };
119
+ }
120
+ export function getCoverageValidationGuidance(state) {
121
+ const { coveragePercent, gaps, epicCoverage } = state;
122
+ let situation;
123
+ if (coveragePercent === 100) {
124
+ situation = "100% requirement coverage achieved";
125
+ }
126
+ else if (coveragePercent >= 80) {
127
+ situation = `${coveragePercent.toFixed(1)}% coverage - nearly complete`;
128
+ }
129
+ else if (coveragePercent >= 50) {
130
+ situation = `${coveragePercent.toFixed(1)}% coverage - some gaps remain`;
131
+ }
132
+ else {
133
+ situation = `${coveragePercent.toFixed(1)}% coverage - significant gaps`;
134
+ }
135
+ const instructions = [];
136
+ const commands = [];
137
+ if (coveragePercent === 100) {
138
+ instructions.push("All requirements have implementing stories");
139
+ instructions.push("Continue with story implementation");
140
+ commands.push({
141
+ command: "status board",
142
+ description: "View story board",
143
+ when: "To work on stories",
144
+ });
145
+ return { situation, instructions, commands };
146
+ }
147
+ instructions.push("Generate stories for uncovered requirements:");
148
+ // Group gaps by epic
149
+ const gapsByEpic = new Map();
150
+ for (const gap of gaps) {
151
+ if (!gapsByEpic.has(gap.epic)) {
152
+ gapsByEpic.set(gap.epic, []);
153
+ }
154
+ gapsByEpic.get(gap.epic).push(gap.requirement);
155
+ }
156
+ for (const [epicId, reqs] of gapsByEpic) {
157
+ const epicInfo = epicCoverage[epicId];
158
+ const epicPercent = epicInfo?.percent || 0;
159
+ instructions.push(` ${epicId} (${epicPercent.toFixed(0)}% covered):`);
160
+ for (const req of reqs.slice(0, 3)) {
161
+ instructions.push(` - ${req}`);
162
+ }
163
+ if (reqs.length > 3) {
164
+ instructions.push(` ... and ${reqs.length - 3} more`);
165
+ }
166
+ commands.push({
167
+ command: "plan stories",
168
+ args: epicId,
169
+ description: `Generate stories for ${epicId}`,
170
+ when: `To cover ${reqs.length} requirement(s)`,
171
+ });
172
+ }
173
+ return { situation, instructions, commands };
174
+ }
175
+ export function getEpicValidationGuidance(state) {
176
+ const { epicId, hasEpicJson, hasPrd, hasArchitecture, storyCount, coveragePercent, uncoveredRequirements, } = state;
177
+ const missingArtifacts = [];
178
+ if (!hasEpicJson)
179
+ missingArtifacts.push("epic.json");
180
+ if (!hasPrd)
181
+ missingArtifacts.push("prd.md");
182
+ if (!hasArchitecture)
183
+ missingArtifacts.push("architecture.md");
184
+ let situation;
185
+ if (missingArtifacts.length > 0) {
186
+ situation = `Epic ${epicId} missing: ${missingArtifacts.join(", ")}`;
187
+ }
188
+ else if (coveragePercent < 100) {
189
+ situation = `Epic ${epicId} at ${coveragePercent.toFixed(0)}% coverage`;
190
+ }
191
+ else if (storyCount === 0) {
192
+ situation = `Epic ${epicId} has no stories`;
193
+ }
194
+ else {
195
+ situation = `Epic ${epicId} is fully covered with ${storyCount} stories`;
196
+ }
197
+ const instructions = [];
198
+ const commands = [];
199
+ if (missingArtifacts.length > 0) {
200
+ instructions.push("Create missing artifacts:");
201
+ for (const artifact of missingArtifacts) {
202
+ if (artifact === "prd.md") {
203
+ instructions.push(" - Generate PRD with requirements");
204
+ commands.push({
205
+ command: "plan prd",
206
+ args: epicId,
207
+ description: "Generate PRD",
208
+ when: "To define requirements",
209
+ });
210
+ }
211
+ else if (artifact === "architecture.md") {
212
+ instructions.push(" - Generate architecture document");
213
+ commands.push({
214
+ command: "plan architecture",
215
+ args: epicId,
216
+ description: "Generate architecture",
217
+ when: "After PRD is complete",
218
+ });
219
+ }
220
+ }
221
+ return enhanceWithContext({ situation, instructions, commands }, { target: { type: "epic", id: epicId } });
222
+ }
223
+ if (coveragePercent < 100) {
224
+ instructions.push("Generate stories for uncovered requirements:");
225
+ for (const req of uncoveredRequirements.slice(0, 5)) {
226
+ instructions.push(` - ${req}`);
227
+ }
228
+ if (uncoveredRequirements.length > 5) {
229
+ instructions.push(` ... and ${uncoveredRequirements.length - 5} more`);
230
+ }
231
+ commands.push({
232
+ command: "plan stories",
233
+ args: epicId,
234
+ description: "Generate stories",
235
+ when: "To achieve full coverage",
236
+ });
237
+ return enhanceWithContext({ situation, instructions, commands }, { target: { type: "epic", id: epicId } });
238
+ }
239
+ // All good
240
+ instructions.push("Epic artifacts are complete");
241
+ instructions.push("All requirements have implementing stories");
242
+ instructions.push("Continue with story implementation");
243
+ commands.push({
244
+ command: "status board",
245
+ description: "View story board",
246
+ when: "To work on stories",
247
+ });
248
+ return enhanceWithContext({ situation, instructions, commands }, { target: { type: "epic", id: epicId } });
249
+ }
250
+ // ============================================================================
251
+ // Issues Summary Guidance
252
+ // ============================================================================
253
+ export function getIssuesSummaryGuidance(issues) {
254
+ const errors = issues.filter((i) => i.severity === "error");
255
+ const warnings = issues.filter((i) => i.severity === "warning");
256
+ let situation;
257
+ if (issues.length === 0) {
258
+ situation = "No validation issues found";
259
+ }
260
+ else {
261
+ situation = `${errors.length} error(s), ${warnings.length} warning(s) found`;
262
+ }
263
+ const instructions = [];
264
+ const commands = [];
265
+ if (issues.length === 0) {
266
+ instructions.push("Project is in good shape");
267
+ return { situation, instructions, commands };
268
+ }
269
+ // Group by type
270
+ const byType = new Map();
271
+ for (const issue of issues) {
272
+ if (!byType.has(issue.type)) {
273
+ byType.set(issue.type, []);
274
+ }
275
+ byType.get(issue.type).push(issue);
276
+ }
277
+ instructions.push("Address issues by priority:");
278
+ // Errors first
279
+ for (const issue of errors.slice(0, 3)) {
280
+ instructions.push(` [ERROR] ${issue.message}`);
281
+ if (issue.suggestion) {
282
+ instructions.push(` → ${issue.suggestion}`);
283
+ }
284
+ }
285
+ // Then warnings
286
+ for (const issue of warnings.slice(0, 2)) {
287
+ instructions.push(` [WARN] ${issue.message}`);
288
+ if (issue.suggestion) {
289
+ instructions.push(` → ${issue.suggestion}`);
290
+ }
291
+ }
292
+ if (issues.length > 5) {
293
+ instructions.push(` ... and ${issues.length - 5} more issues`);
294
+ }
295
+ commands.push({
296
+ command: "validate",
297
+ description: "Re-run validation",
298
+ when: "After addressing issues",
299
+ });
300
+ return { situation, instructions, commands };
301
+ }
302
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../src/core/prompts/validate.ts"],"names":[],"mappings":"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"}