@pupt/cli 0.0.1 → 2.3.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 (259) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +54 -29
  3. package/dist/annotations/annotation-analyzer.d.ts +17 -0
  4. package/dist/annotations/annotation-analyzer.d.ts.map +1 -0
  5. package/dist/annotations/annotation-analyzer.js +145 -0
  6. package/dist/annotations/annotation-analyzer.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +435 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/add.d.ts +5 -0
  12. package/dist/commands/add.d.ts.map +1 -0
  13. package/dist/commands/add.js +164 -0
  14. package/dist/commands/add.js.map +1 -0
  15. package/dist/commands/annotate.d.ts +2 -0
  16. package/dist/commands/annotate.d.ts.map +1 -0
  17. package/dist/commands/annotate.js +99 -0
  18. package/dist/commands/annotate.js.map +1 -0
  19. package/dist/commands/base-command.d.ts +23 -0
  20. package/dist/commands/base-command.d.ts.map +1 -0
  21. package/dist/commands/base-command.js +41 -0
  22. package/dist/commands/base-command.js.map +1 -0
  23. package/dist/commands/cache.d.ts +9 -0
  24. package/dist/commands/cache.d.ts.map +1 -0
  25. package/dist/commands/cache.js +31 -0
  26. package/dist/commands/cache.js.map +1 -0
  27. package/dist/commands/config.d.ts +8 -0
  28. package/dist/commands/config.d.ts.map +1 -0
  29. package/dist/commands/config.js +93 -0
  30. package/dist/commands/config.js.map +1 -0
  31. package/dist/commands/edit.d.ts +2 -0
  32. package/dist/commands/edit.d.ts.map +1 -0
  33. package/dist/commands/edit.js +35 -0
  34. package/dist/commands/edit.js.map +1 -0
  35. package/dist/commands/help.d.ts +2 -0
  36. package/dist/commands/help.d.ts.map +1 -0
  37. package/dist/commands/help.js +26 -0
  38. package/dist/commands/help.js.map +1 -0
  39. package/dist/commands/history.d.ts +12 -0
  40. package/dist/commands/history.d.ts.map +1 -0
  41. package/dist/commands/history.js +317 -0
  42. package/dist/commands/history.js.map +1 -0
  43. package/dist/commands/init.d.ts +2 -0
  44. package/dist/commands/init.d.ts.map +1 -0
  45. package/dist/commands/init.js +137 -0
  46. package/dist/commands/init.js.map +1 -0
  47. package/dist/commands/install.d.ts +16 -0
  48. package/dist/commands/install.d.ts.map +1 -0
  49. package/dist/commands/install.js +263 -0
  50. package/dist/commands/install.js.map +1 -0
  51. package/dist/commands/review.d.ts +3 -0
  52. package/dist/commands/review.d.ts.map +1 -0
  53. package/dist/commands/review.js +160 -0
  54. package/dist/commands/review.js.map +1 -0
  55. package/dist/commands/run.d.ts +32 -0
  56. package/dist/commands/run.d.ts.map +1 -0
  57. package/dist/commands/run.js +367 -0
  58. package/dist/commands/run.js.map +1 -0
  59. package/dist/commands/uninstall.d.ts +2 -0
  60. package/dist/commands/uninstall.d.ts.map +1 -0
  61. package/dist/commands/uninstall.js +45 -0
  62. package/dist/commands/uninstall.js.map +1 -0
  63. package/dist/commands/update.d.ts +2 -0
  64. package/dist/commands/update.d.ts.map +1 -0
  65. package/dist/commands/update.js +113 -0
  66. package/dist/commands/update.js.map +1 -0
  67. package/dist/config/config-manager.d.ts +19 -0
  68. package/dist/config/config-manager.d.ts.map +1 -0
  69. package/dist/config/config-manager.js +221 -0
  70. package/dist/config/config-manager.js.map +1 -0
  71. package/dist/config/global-paths.d.ts +5 -0
  72. package/dist/config/global-paths.d.ts.map +1 -0
  73. package/dist/config/global-paths.js +16 -0
  74. package/dist/config/global-paths.js.map +1 -0
  75. package/dist/config/migration.d.ts +12 -0
  76. package/dist/config/migration.d.ts.map +1 -0
  77. package/dist/config/migration.js +270 -0
  78. package/dist/config/migration.js.map +1 -0
  79. package/dist/history/enhanced-history-manager.d.ts +27 -0
  80. package/dist/history/enhanced-history-manager.d.ts.map +1 -0
  81. package/dist/history/enhanced-history-manager.js +116 -0
  82. package/dist/history/enhanced-history-manager.js.map +1 -0
  83. package/dist/history/history-manager.d.ts +43 -0
  84. package/dist/history/history-manager.d.ts.map +1 -0
  85. package/dist/history/history-manager.js +229 -0
  86. package/dist/history/history-manager.js.map +1 -0
  87. package/dist/index.d.ts +6 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +6 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/prompts/input-types/file-search-prompt.d.ts +11 -0
  92. package/dist/prompts/input-types/file-search-prompt.d.ts.map +1 -0
  93. package/dist/prompts/input-types/file-search-prompt.js +53 -0
  94. package/dist/prompts/input-types/file-search-prompt.js.map +1 -0
  95. package/dist/prompts/input-types/review-file-prompt.d.ts +3 -0
  96. package/dist/prompts/input-types/review-file-prompt.d.ts.map +1 -0
  97. package/dist/prompts/input-types/review-file-prompt.js +9 -0
  98. package/dist/prompts/input-types/review-file-prompt.js.map +1 -0
  99. package/dist/schemas/config-schema.d.ts +1637 -0
  100. package/dist/schemas/config-schema.d.ts.map +1 -0
  101. package/dist/schemas/config-schema.js +136 -0
  102. package/dist/schemas/config-schema.js.map +1 -0
  103. package/dist/search/search-engine.d.ts +8 -0
  104. package/dist/search/search-engine.d.ts.map +1 -0
  105. package/dist/search/search-engine.js +53 -0
  106. package/dist/search/search-engine.js.map +1 -0
  107. package/dist/services/git-service.d.ts +28 -0
  108. package/dist/services/git-service.d.ts.map +1 -0
  109. package/dist/services/git-service.js +157 -0
  110. package/dist/services/git-service.js.map +1 -0
  111. package/dist/services/input-collector.d.ts +9 -0
  112. package/dist/services/input-collector.d.ts.map +1 -0
  113. package/dist/services/input-collector.js +162 -0
  114. package/dist/services/input-collector.js.map +1 -0
  115. package/dist/services/logging-service.d.ts +49 -0
  116. package/dist/services/logging-service.d.ts.map +1 -0
  117. package/dist/services/logging-service.js +203 -0
  118. package/dist/services/logging-service.js.map +1 -0
  119. package/dist/services/module-cache.d.ts +42 -0
  120. package/dist/services/module-cache.d.ts.map +1 -0
  121. package/dist/services/module-cache.js +205 -0
  122. package/dist/services/module-cache.js.map +1 -0
  123. package/dist/services/module-entry-builder.d.ts +20 -0
  124. package/dist/services/module-entry-builder.d.ts.map +1 -0
  125. package/dist/services/module-entry-builder.js +71 -0
  126. package/dist/services/module-entry-builder.js.map +1 -0
  127. package/dist/services/output-capture-service.d.ts +28 -0
  128. package/dist/services/output-capture-service.d.ts.map +1 -0
  129. package/dist/services/output-capture-service.js +348 -0
  130. package/dist/services/output-capture-service.js.map +1 -0
  131. package/dist/services/package-manager.d.ts +18 -0
  132. package/dist/services/package-manager.d.ts.map +1 -0
  133. package/dist/services/package-manager.js +141 -0
  134. package/dist/services/package-manager.js.map +1 -0
  135. package/dist/services/pattern-detector.d.ts +15 -0
  136. package/dist/services/pattern-detector.d.ts.map +1 -0
  137. package/dist/services/pattern-detector.js +228 -0
  138. package/dist/services/pattern-detector.js.map +1 -0
  139. package/dist/services/prompt-resolver.d.ts +32 -0
  140. package/dist/services/prompt-resolver.d.ts.map +1 -0
  141. package/dist/services/prompt-resolver.js +73 -0
  142. package/dist/services/prompt-resolver.js.map +1 -0
  143. package/dist/services/pupt-prompt-source.d.ts +16 -0
  144. package/dist/services/pupt-prompt-source.d.ts.map +1 -0
  145. package/dist/services/pupt-prompt-source.js +74 -0
  146. package/dist/services/pupt-prompt-source.js.map +1 -0
  147. package/dist/services/pupt-service.d.ts +33 -0
  148. package/dist/services/pupt-service.d.ts.map +1 -0
  149. package/dist/services/pupt-service.js +119 -0
  150. package/dist/services/pupt-service.js.map +1 -0
  151. package/dist/services/review-data-builder.d.ts +25 -0
  152. package/dist/services/review-data-builder.d.ts.map +1 -0
  153. package/dist/services/review-data-builder.js +333 -0
  154. package/dist/services/review-data-builder.js.map +1 -0
  155. package/dist/services/suggestion-generator.d.ts +11 -0
  156. package/dist/services/suggestion-generator.d.ts.map +1 -0
  157. package/dist/services/suggestion-generator.js +158 -0
  158. package/dist/services/suggestion-generator.js.map +1 -0
  159. package/dist/services/ui-service.d.ts +49 -0
  160. package/dist/services/ui-service.d.ts.map +1 -0
  161. package/dist/services/ui-service.js +196 -0
  162. package/dist/services/ui-service.js.map +1 -0
  163. package/dist/types/annotations.d.ts +50 -0
  164. package/dist/types/annotations.d.ts.map +1 -0
  165. package/dist/types/annotations.js +2 -0
  166. package/dist/types/annotations.js.map +1 -0
  167. package/dist/types/config.d.ts +110 -0
  168. package/dist/types/config.d.ts.map +1 -0
  169. package/dist/types/config.js +12 -0
  170. package/dist/types/config.js.map +1 -0
  171. package/dist/types/history.d.ts +36 -0
  172. package/dist/types/history.d.ts.map +1 -0
  173. package/dist/types/history.js +2 -0
  174. package/dist/types/history.js.map +1 -0
  175. package/dist/types/patterns.d.ts +25 -0
  176. package/dist/types/patterns.d.ts.map +1 -0
  177. package/dist/types/patterns.js +2 -0
  178. package/dist/types/patterns.js.map +1 -0
  179. package/dist/types/prompt.d.ts +29 -0
  180. package/dist/types/prompt.d.ts.map +1 -0
  181. package/dist/types/prompt.js +24 -0
  182. package/dist/types/prompt.js.map +1 -0
  183. package/dist/types/review.d.ts +81 -0
  184. package/dist/types/review.d.ts.map +1 -0
  185. package/dist/types/review.js +2 -0
  186. package/dist/types/review.js.map +1 -0
  187. package/dist/ui/console-ui.d.ts +30 -0
  188. package/dist/ui/console-ui.d.ts.map +1 -0
  189. package/dist/ui/console-ui.js +88 -0
  190. package/dist/ui/console-ui.js.map +1 -0
  191. package/dist/ui/interactive-search.d.ts +8 -0
  192. package/dist/ui/interactive-search.d.ts.map +1 -0
  193. package/dist/ui/interactive-search.js +29 -0
  194. package/dist/ui/interactive-search.js.map +1 -0
  195. package/dist/utils/annotation-migration.d.ts +12 -0
  196. package/dist/utils/annotation-migration.d.ts.map +1 -0
  197. package/dist/utils/annotation-migration.js +88 -0
  198. package/dist/utils/annotation-migration.js.map +1 -0
  199. package/dist/utils/date-formatter.d.ts +10 -0
  200. package/dist/utils/date-formatter.d.ts.map +1 -0
  201. package/dist/utils/date-formatter.js +46 -0
  202. package/dist/utils/date-formatter.js.map +1 -0
  203. package/dist/utils/editor.d.ts +14 -0
  204. package/dist/utils/editor.d.ts.map +1 -0
  205. package/dist/utils/editor.js +52 -0
  206. package/dist/utils/editor.js.map +1 -0
  207. package/dist/utils/errors.d.ts +58 -0
  208. package/dist/utils/errors.d.ts.map +1 -0
  209. package/dist/utils/errors.js +275 -0
  210. package/dist/utils/errors.js.map +1 -0
  211. package/dist/utils/git-info.d.ts +10 -0
  212. package/dist/utils/git-info.d.ts.map +1 -0
  213. package/dist/utils/git-info.js +44 -0
  214. package/dist/utils/git-info.js.map +1 -0
  215. package/dist/utils/gitignore.d.ts +10 -0
  216. package/dist/utils/gitignore.d.ts.map +1 -0
  217. package/dist/utils/gitignore.js +72 -0
  218. package/dist/utils/gitignore.js.map +1 -0
  219. package/dist/utils/logger.d.ts +39 -0
  220. package/dist/utils/logger.d.ts.map +1 -0
  221. package/dist/utils/logger.js +143 -0
  222. package/dist/utils/logger.js.map +1 -0
  223. package/dist/utils/platform.d.ts +9 -0
  224. package/dist/utils/platform.d.ts.map +1 -0
  225. package/dist/utils/platform.js +45 -0
  226. package/dist/utils/platform.js.map +1 -0
  227. package/dist/utils/project-root.d.ts +22 -0
  228. package/dist/utils/project-root.d.ts.map +1 -0
  229. package/dist/utils/project-root.js +226 -0
  230. package/dist/utils/project-root.js.map +1 -0
  231. package/dist/utils/prompt-dir-resolver.d.ts +5 -0
  232. package/dist/utils/prompt-dir-resolver.d.ts.map +1 -0
  233. package/dist/utils/prompt-dir-resolver.js +25 -0
  234. package/dist/utils/prompt-dir-resolver.js.map +1 -0
  235. package/dist/utils/security.d.ts +5 -0
  236. package/dist/utils/security.d.ts.map +1 -0
  237. package/dist/utils/security.js +57 -0
  238. package/dist/utils/security.js.map +1 -0
  239. package/dist/utils/tool-detection.d.ts +14 -0
  240. package/dist/utils/tool-detection.d.ts.map +1 -0
  241. package/dist/utils/tool-detection.js +43 -0
  242. package/dist/utils/tool-detection.js.map +1 -0
  243. package/package.json +79 -7
  244. package/prompts/prompts/ad-hoc-long.prompt +60 -0
  245. package/prompts/prompts/ad-hoc.prompt +29 -0
  246. package/prompts/prompts/code-review.prompt +99 -0
  247. package/prompts/prompts/debugging-error-message.prompt +81 -0
  248. package/prompts/prompts/fix-github-actions.prompt +62 -0
  249. package/prompts/prompts/fix-test-errors.prompt +73 -0
  250. package/prompts/prompts/git-commit-comment.prompt +61 -0
  251. package/prompts/prompts/implementation-phase.prompt +53 -0
  252. package/prompts/prompts/implementation-plan.prompt +101 -0
  253. package/prompts/prompts/new-feature.prompt +89 -0
  254. package/prompts/prompts/new-project.prompt +9 -0
  255. package/prompts/prompts/one-shot-change.prompt +79 -0
  256. package/prompts/prompts/pupt-prompt-improvement.prompt +270 -0
  257. package/prompts/prompts/simple-test.prompt +8 -0
  258. package/prompts/prompts/update-design.prompt +71 -0
  259. package/prompts/prompts/update-documentation.prompt +6 -0
@@ -0,0 +1,333 @@
1
+ import fs from "fs-extra";
2
+ import yaml from "js-yaml";
3
+ import path from "path";
4
+ import { AnnotationAnalyzer } from "../annotations/annotation-analyzer.js";
5
+ import { getDataDir } from "../config/global-paths.js";
6
+ import { HistoryManager } from "../history/history-manager.js";
7
+ import { PuptService } from "./pupt-service.js";
8
+ export class ReviewDataBuilder {
9
+ config;
10
+ historyManager;
11
+ puptService;
12
+ annotationAnalyzer;
13
+ constructor(config) {
14
+ this.config = config;
15
+ this.historyManager = new HistoryManager(config.historyDir || path.join(getDataDir(), "history"), config.annotationDir);
16
+ const modules = config.modules || [];
17
+ this.puptService = new PuptService({ modules, environment: config.environment });
18
+ this.annotationAnalyzer = new AnnotationAnalyzer();
19
+ }
20
+ async buildReviewData(options) {
21
+ // Get all history entries
22
+ let historyEntries = await this.historyManager.listHistory();
23
+ // Filter by time if specified
24
+ if (options.since) {
25
+ historyEntries = this.filterBySince(historyEntries, options.since);
26
+ }
27
+ // Filter by prompt name if specified
28
+ if (options.promptName) {
29
+ historyEntries = historyEntries.filter((entry) => this.extractPromptName(entry) === options.promptName);
30
+ }
31
+ // Group entries by prompt
32
+ const entriesByPrompt = this.groupByPrompt(historyEntries);
33
+ // Get all annotations
34
+ const annotations = await this.getAnnotations();
35
+ // Build prompt review data for each unique prompt
36
+ const prompts = [];
37
+ for (const [promptName, entries] of entriesByPrompt) {
38
+ const promptData = await this.buildPromptReviewData(promptName, entries, annotations);
39
+ prompts.push(promptData);
40
+ }
41
+ // Calculate metadata
42
+ const metadata = this.calculateMetadata(options.since || "30d", prompts, historyEntries);
43
+ return {
44
+ metadata,
45
+ prompts,
46
+ cross_prompt_patterns: [], // Will be implemented in Phase 5
47
+ };
48
+ }
49
+ filterBySince(entries, since) {
50
+ const cutoffDate = this.parseSinceDate(since);
51
+ return entries.filter((entry) => {
52
+ const entryDate = new Date(entry.timestamp);
53
+ return entryDate >= cutoffDate;
54
+ });
55
+ }
56
+ parseSinceDate(since) {
57
+ const now = new Date();
58
+ const match = since.match(/^(\d+)([dDhHmMwW])$/);
59
+ if (!match) {
60
+ // Try to parse as ISO date
61
+ const date = new Date(since);
62
+ if (!isNaN(date.getTime())) {
63
+ return date;
64
+ }
65
+ throw new Error(`Invalid since format: ${since}`);
66
+ }
67
+ const [, amountStr, unit] = match;
68
+ const amount = parseInt(amountStr, 10);
69
+ switch (unit.toLowerCase()) {
70
+ case "d":
71
+ now.setDate(now.getDate() - amount);
72
+ break;
73
+ case "h":
74
+ now.setHours(now.getHours() - amount);
75
+ break;
76
+ case "m":
77
+ now.setMinutes(now.getMinutes() - amount);
78
+ break;
79
+ case "w":
80
+ now.setDate(now.getDate() - amount * 7);
81
+ break;
82
+ default:
83
+ throw new Error(`Invalid time unit: ${unit}`);
84
+ }
85
+ return now;
86
+ }
87
+ groupByPrompt(entries) {
88
+ const grouped = new Map();
89
+ for (const entry of entries) {
90
+ const promptName = this.extractPromptName(entry);
91
+ let group = grouped.get(promptName);
92
+ if (!group) {
93
+ group = [];
94
+ grouped.set(promptName, group);
95
+ }
96
+ group.push(entry);
97
+ }
98
+ return grouped;
99
+ }
100
+ async buildPromptReviewData(promptName, entries, allAnnotations) {
101
+ // Get prompt content and metadata
102
+ let promptContent = "";
103
+ let promptPath = "";
104
+ // let promptMetadata = {};
105
+ try {
106
+ await this.puptService.init();
107
+ const prompts = this.puptService.getPromptsAsAdapted();
108
+ const prompt = prompts.find((p) => {
109
+ const ext = path.extname(p.path);
110
+ return path.basename(p.path, ext) === promptName;
111
+ });
112
+ if (prompt) {
113
+ promptContent = prompt.content;
114
+ promptPath = prompt.path;
115
+ }
116
+ else {
117
+ // Prompt file might have been deleted
118
+ promptPath = entries[0]?.templatePath || `prompts/${promptName}.prompt`;
119
+ }
120
+ }
121
+ catch {
122
+ // Prompt file might have been deleted
123
+ promptPath = entries[0]?.templatePath || `prompts/${promptName}.prompt`;
124
+ }
125
+ // Get last modified time
126
+ let lastModified = "";
127
+ try {
128
+ const stats = await fs.stat(promptPath);
129
+ lastModified = stats.mtime.toISOString();
130
+ }
131
+ catch {
132
+ // Use most recent execution time as fallback
133
+ lastModified = entries[entries.length - 1]?.timestamp || new Date().toISOString();
134
+ }
135
+ // Filter annotations for this prompt
136
+ const promptAnnotations = allAnnotations.filter((annotation) => {
137
+ return entries.some((entry) => {
138
+ const historyFileName = this.getHistoryFileName(entry);
139
+ return annotation.historyFile === historyFileName;
140
+ });
141
+ });
142
+ // Calculate usage statistics
143
+ const usageStatistics = this.calculateUsageStatistics(entries, promptAnnotations);
144
+ // Calculate execution outcomes
145
+ const executionOutcomes = this.calculateExecutionOutcomes(promptAnnotations);
146
+ return {
147
+ name: promptName,
148
+ path: promptPath,
149
+ content: promptContent,
150
+ last_modified: lastModified,
151
+ usage_statistics: usageStatistics,
152
+ execution_outcomes: executionOutcomes,
153
+ environment_correlations: {}, // Will be enhanced in future phases
154
+ captured_outputs: [], // Will be populated in Phase 2
155
+ user_annotations: promptAnnotations,
156
+ detected_patterns: [], // Will be populated in Phase 5
157
+ };
158
+ }
159
+ getHistoryFileName(entry) {
160
+ // Use the actual filename from the entry
161
+ return entry.filename;
162
+ }
163
+ extractPromptName(entry) {
164
+ // Extract prompt name from template path
165
+ if (entry.templatePath) {
166
+ const ext = path.extname(entry.templatePath);
167
+ return path.basename(entry.templatePath, ext);
168
+ }
169
+ // Fallback to extracting from filename if template path not available
170
+ const match = entry.filename.match(/history_.*?_(.+)\.json$/);
171
+ return match ? match[1] : "unknown";
172
+ }
173
+ async getAnnotations() {
174
+ if (!this.config.annotationDir) {
175
+ return [];
176
+ }
177
+ try {
178
+ const files = await fs.readdir(this.config.annotationDir);
179
+ const annotationFiles = files.filter((f) => (f.endsWith(".md") && f.includes("annotation")) ||
180
+ (f.endsWith(".json") && f.includes("annotation")));
181
+ const rawAnnotations = [];
182
+ for (const file of annotationFiles) {
183
+ const filePath = path.join(this.config.annotationDir, file);
184
+ if (file.endsWith(".json")) {
185
+ // Handle JSON format
186
+ const data = (await fs.readJson(filePath));
187
+ rawAnnotations.push({
188
+ ...data,
189
+ notes: data.notes || "",
190
+ annotationPath: filePath,
191
+ });
192
+ }
193
+ else {
194
+ // Handle legacy markdown format
195
+ const content = await fs.readFile(filePath, "utf-8");
196
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
197
+ if (frontmatterMatch) {
198
+ const metadata = yaml.load(frontmatterMatch[1]);
199
+ const notes = content
200
+ .slice(frontmatterMatch[0].length)
201
+ .trim()
202
+ .replace(/^## Notes\n\n/, ""); // Remove the "## Notes" header if present
203
+ rawAnnotations.push({
204
+ ...metadata,
205
+ notes,
206
+ annotationPath: filePath,
207
+ });
208
+ }
209
+ }
210
+ }
211
+ return this.annotationAnalyzer.parseAnnotations(rawAnnotations);
212
+ }
213
+ catch {
214
+ // Directory might not exist
215
+ return [];
216
+ }
217
+ }
218
+ calculateUsageStatistics(entries, annotations) {
219
+ const totalRuns = entries.length;
220
+ const annotatedRuns = annotations.length;
221
+ // Calculate success rate from annotations
222
+ const successCount = annotations.filter((a) => a.status === "success").length;
223
+ const successRate = annotatedRuns > 0 ? successCount / annotatedRuns : 0;
224
+ // Get last used time
225
+ const lastUsed = entries[entries.length - 1]?.timestamp || new Date().toISOString();
226
+ // Calculate average duration from enhanced history entries
227
+ let avgDuration = "N/A";
228
+ let avgActiveTime = "N/A";
229
+ let avgUserInputs = "N/A";
230
+ const enhancedEntries = entries;
231
+ const durationsMs = [];
232
+ const activeTimesMs = [];
233
+ const userInputCounts = [];
234
+ for (const entry of enhancedEntries) {
235
+ if (entry.execution) {
236
+ // Parse duration (format: "123ms" or "1h 2m 3s")
237
+ if (entry.execution.duration) {
238
+ const match = entry.execution.duration.match(/^(\d+)ms$/);
239
+ if (match) {
240
+ durationsMs.push(parseInt(match[1], 10));
241
+ }
242
+ }
243
+ // Parse active time if available
244
+ if (entry.execution.active_time) {
245
+ const match = entry.execution.active_time.match(/^(\d+)ms$/);
246
+ if (match) {
247
+ activeTimesMs.push(parseInt(match[1], 10));
248
+ }
249
+ }
250
+ // Track user input counts
251
+ if (entry.execution.user_input_count !== undefined) {
252
+ userInputCounts.push(entry.execution.user_input_count);
253
+ }
254
+ }
255
+ }
256
+ // Calculate averages
257
+ if (durationsMs.length > 0) {
258
+ const avg = durationsMs.reduce((a, b) => a + b, 0) / durationsMs.length;
259
+ avgDuration = `${Math.round(avg)}ms`;
260
+ }
261
+ if (activeTimesMs.length > 0) {
262
+ const avg = activeTimesMs.reduce((a, b) => a + b, 0) / activeTimesMs.length;
263
+ avgActiveTime = `${Math.round(avg)}ms`;
264
+ }
265
+ if (userInputCounts.length > 0) {
266
+ const avg = userInputCounts.reduce((a, b) => a + b, 0) / userInputCounts.length;
267
+ avgUserInputs = avg.toFixed(1);
268
+ }
269
+ return {
270
+ total_runs: totalRuns,
271
+ annotated_runs: annotatedRuns,
272
+ success_rate: successRate,
273
+ avg_duration: avgDuration,
274
+ last_used: lastUsed,
275
+ avg_active_time: avgActiveTime,
276
+ avg_user_inputs: avgUserInputs,
277
+ };
278
+ }
279
+ calculateExecutionOutcomes(annotations) {
280
+ let success = 0;
281
+ let partial = 0;
282
+ let failure = 0;
283
+ for (const annotation of annotations) {
284
+ switch (annotation.status) {
285
+ case "success":
286
+ success++;
287
+ break;
288
+ case "partial":
289
+ partial++;
290
+ break;
291
+ case "failure":
292
+ failure++;
293
+ break;
294
+ default:
295
+ break;
296
+ }
297
+ }
298
+ return { success, partial, failure };
299
+ }
300
+ calculateMetadata(analysisPeriod, prompts, allEntries) {
301
+ const totalPrompts = prompts.length;
302
+ const totalExecutions = allEntries.length;
303
+ // Calculate data completeness
304
+ const dataCompleteness = this.calculateDataCompleteness(prompts, allEntries);
305
+ return {
306
+ analysis_period: analysisPeriod,
307
+ total_prompts: totalPrompts,
308
+ total_executions: totalExecutions,
309
+ data_completeness: dataCompleteness,
310
+ };
311
+ }
312
+ calculateDataCompleteness(prompts, entries) {
313
+ if (entries.length === 0) {
314
+ return {
315
+ with_annotations: 0,
316
+ with_output_capture: 0,
317
+ with_environment_data: 0,
318
+ };
319
+ }
320
+ // Count entries with annotations
321
+ const totalAnnotations = prompts.reduce((sum, prompt) => sum + prompt.user_annotations.length, 0);
322
+ const withAnnotations = Math.round((totalAnnotations / entries.length) * 100);
323
+ // Output capture and environment data will be tracked in future phases
324
+ const withOutputCapture = 0;
325
+ const withEnvironmentData = 0;
326
+ return {
327
+ with_annotations: withAnnotations,
328
+ with_output_capture: withOutputCapture,
329
+ with_environment_data: withEnvironmentData,
330
+ };
331
+ }
332
+ }
333
+ //# sourceMappingURL=review-data-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-data-builder.js","sourceRoot":"","sources":["../../src/services/review-data-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Pattern, Suggestion } from '../types/patterns.js';
2
+ export declare class SuggestionGenerator {
3
+ generateSuggestions(patterns: Pattern[]): Suggestion[];
4
+ private generateSuggestion;
5
+ private sortPatternsByImpact;
6
+ private calculateImpactScore;
7
+ private calculateExpectedImprovement;
8
+ private generatePromptSpecificFixes;
9
+ private truncateEvidence;
10
+ }
11
+ //# sourceMappingURL=suggestion-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestion-generator.d.ts","sourceRoot":"","sources":["../../src/services/suggestion-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAW,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEzE,qBAAa,mBAAmB;IAC9B,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE;IAOtD,OAAO,CAAC,kBAAkB;IA6F1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,4BAA4B;IAkBpC,OAAO,CAAC,2BAA2B;IA4BnC,OAAO,CAAC,gBAAgB;CAMzB"}
@@ -0,0 +1,158 @@
1
+ export class SuggestionGenerator {
2
+ generateSuggestions(patterns) {
3
+ // Sort patterns by impact score (frequency * severity weight * correlation)
4
+ const sortedPatterns = this.sortPatternsByImpact(patterns);
5
+ return sortedPatterns.map(pattern => this.generateSuggestion(pattern));
6
+ }
7
+ generateSuggestion(pattern) {
8
+ const baseProps = {
9
+ pattern_type: pattern.type,
10
+ priority: pattern.severity,
11
+ evidence_cited: pattern.evidence.map(e => this.truncateEvidence(e)),
12
+ affected_prompts: pattern.affectedPrompts,
13
+ impact_score: this.calculateImpactScore(pattern),
14
+ expected_improvement: this.calculateExpectedImprovement(pattern),
15
+ };
16
+ switch (pattern.type) {
17
+ case 'verification_gap':
18
+ return {
19
+ ...baseProps,
20
+ improvement: 'Add explicit verification steps to ensure all tests pass before marking tasks complete',
21
+ specific_changes: [
22
+ 'Add explicit verification step: "Run \'npm test\' and verify ALL tests pass (0 failing)"',
23
+ 'Include requirement: "Do not proceed until all tests are green"',
24
+ 'Add checkpoint: "After implementation, verify the solution works by running tests"',
25
+ ],
26
+ prompt_specific_fixes: this.generatePromptSpecificFixes(pattern, 'verification'),
27
+ implementation_example: `# Verification Requirements
28
+ After completing the implementation:
29
+ 1. Run \`npm test\` and ensure output shows "0 failing"
30
+ 2. If any tests fail, debug and fix ALL failures
31
+ 3. Run tests again to confirm all pass
32
+ 4. Only mark complete when ALL tests are green`,
33
+ };
34
+ case 'incomplete_task':
35
+ return {
36
+ ...baseProps,
37
+ improvement: 'Ensure all errors are fixed completely before considering the task done',
38
+ specific_changes: [
39
+ 'Replace "fix the error" with "fix ALL errors until none remain"',
40
+ 'Add instruction: "Continue debugging until all tests pass and build succeeds"',
41
+ 'Continue fixing ALL errors until none remain',
42
+ ],
43
+ prompt_specific_fixes: this.generatePromptSpecificFixes(pattern, 'completion'),
44
+ implementation_example: `# Task Completion Requirements
45
+ - Fix ALL errors, not just the first one encountered
46
+ - Continue iterating until:
47
+ - All tests pass (0 failures)
48
+ - Build completes successfully
49
+ - No linting errors remain
50
+ - Do not stop at partial success`,
51
+ };
52
+ case 'environment_specific':
53
+ return {
54
+ ...baseProps,
55
+ improvement: 'Add environment awareness and branch-specific handling to the prompt',
56
+ specific_changes: [
57
+ 'Add environment check: "Note the current git branch with \'git branch\'"',
58
+ 'Include branch context: "Consider branch-specific configurations"',
59
+ 'Add fallback: "If issues occur on feature branches, check for branch-specific settings"',
60
+ ],
61
+ prompt_specific_fixes: this.generatePromptSpecificFixes(pattern, 'environment'),
62
+ implementation_example: `# Environment Awareness
63
+ 1. Check current branch: \`git branch --show-current\`
64
+ 2. Note any branch-specific configurations
65
+ 3. If on a feature branch, ensure compatibility with main branch
66
+ 4. Test changes work on both current branch and main`,
67
+ };
68
+ case 'ambiguous_objective':
69
+ return {
70
+ ...baseProps,
71
+ improvement: 'Replace ambiguous instructions with specific, measurable criteria',
72
+ specific_changes: [
73
+ 'Define specific error types to fix',
74
+ 'Specify exact success criteria (e.g., "all 5 tests pass")',
75
+ 'Define clear success criteria',
76
+ 'List specific tasks in priority order',
77
+ ],
78
+ prompt_specific_fixes: this.generatePromptSpecificFixes(pattern, 'clarity'),
79
+ implementation_example: `# Clear Objectives
80
+ Instead of: "Fix the errors"
81
+ Use: "Fix all TypeScript compilation errors (npm run build should succeed with 0 errors)"
82
+
83
+ Instead of: "Make it work"
84
+ Use: "Ensure all unit tests pass (npm test shows 0 failures) and the feature works as specified"`,
85
+ };
86
+ default:
87
+ return {
88
+ ...baseProps,
89
+ improvement: 'Review and improve prompt clarity',
90
+ specific_changes: ['Add specific success criteria', 'Include verification steps'],
91
+ };
92
+ }
93
+ }
94
+ sortPatternsByImpact(patterns) {
95
+ return patterns.sort((a, b) => {
96
+ const scoreA = this.calculateImpactScore(a);
97
+ const scoreB = this.calculateImpactScore(b);
98
+ return scoreB - scoreA;
99
+ });
100
+ }
101
+ calculateImpactScore(pattern) {
102
+ const severityWeights = {
103
+ critical: 4,
104
+ high: 3,
105
+ medium: 2,
106
+ low: 1,
107
+ };
108
+ return pattern.frequency * severityWeights[pattern.severity] * pattern.correlation_strength;
109
+ }
110
+ calculateExpectedImprovement(pattern) {
111
+ // Estimate improvement based on correlation strength and severity
112
+ const baseImprovement = pattern.correlation_strength * 100;
113
+ let severityMultiplier;
114
+ if (pattern.severity === 'critical') {
115
+ severityMultiplier = 0.9;
116
+ }
117
+ else if (pattern.severity === 'high') {
118
+ severityMultiplier = 0.7;
119
+ }
120
+ else if (pattern.severity === 'medium') {
121
+ severityMultiplier = 0.5;
122
+ }
123
+ else {
124
+ severityMultiplier = 0.3;
125
+ }
126
+ const improvement = Math.round(baseImprovement * severityMultiplier);
127
+ return `${improvement}% reduction in ${pattern.type.replace(/_/g, ' ')} issues`;
128
+ }
129
+ generatePromptSpecificFixes(pattern, fixType) {
130
+ const fixes = {};
131
+ pattern.affectedPrompts.forEach(promptName => {
132
+ switch (fixType) {
133
+ case 'verification':
134
+ fixes[promptName] = `Add to ${promptName}: "After implementation, run tests and verify 0 failures before proceeding"`;
135
+ break;
136
+ case 'completion':
137
+ fixes[promptName] = `Update ${promptName}: Replace partial fix instructions with "Continue until ALL errors are resolved"`;
138
+ break;
139
+ case 'environment':
140
+ fixes[promptName] = `Enhance ${promptName}: Add git branch awareness and environment checks`;
141
+ break;
142
+ case 'clarity':
143
+ fixes[promptName] = `Clarify ${promptName}: Replace vague objectives with specific, measurable success criteria`;
144
+ break;
145
+ default:
146
+ break;
147
+ }
148
+ });
149
+ return fixes;
150
+ }
151
+ truncateEvidence(text, maxLength = 100) {
152
+ if (text.length <= maxLength) {
153
+ return text;
154
+ }
155
+ return `${text.substring(0, maxLength - 3)}...`;
156
+ }
157
+ }
158
+ //# sourceMappingURL=suggestion-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestion-generator.js","sourceRoot":"","sources":["../../src/services/suggestion-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { Ora } from 'ora';
2
+ export declare enum LogLevel {
3
+ ERROR = 0,
4
+ WARN = 1,
5
+ INFO = 2,
6
+ DEBUG = 3
7
+ }
8
+ interface UIOptions {
9
+ logLevel?: LogLevel;
10
+ useColor?: boolean;
11
+ silent?: boolean;
12
+ }
13
+ interface ListOptions {
14
+ numbered?: boolean;
15
+ indent?: number;
16
+ }
17
+ export declare class ConsoleUI {
18
+ private logLevel;
19
+ private useColor;
20
+ private silent;
21
+ constructor(options?: UIOptions);
22
+ success(message: string): void;
23
+ error(error: Error | string): void;
24
+ warn(message: string): void;
25
+ info(message: string): void;
26
+ debug(message: string): void;
27
+ prompt(title: string, description?: string): void;
28
+ progress(message: string, current: number, total: number): void;
29
+ spinner(text: string): Ora;
30
+ table(data: unknown[]): void;
31
+ json(data: unknown, pretty?: boolean): void;
32
+ list(items: string[], options?: ListOptions): void;
33
+ header(text: string): void;
34
+ box(content: string, title?: string): void;
35
+ divider(): void;
36
+ formatCommand(command: string): string;
37
+ formatPath(path: string): string;
38
+ formatUrl(url: string): string;
39
+ formatHighlight(text: string): string;
40
+ formatDim(text: string): string;
41
+ formatBold(text: string): string;
42
+ setLogLevel(level: LogLevel): void;
43
+ setSilent(silent: boolean): void;
44
+ setUseColor(useColor: boolean): void;
45
+ clear(): void;
46
+ newline(): void;
47
+ }
48
+ export {};
49
+ //# sourceMappingURL=ui-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-service.d.ts","sourceRoot":"","sources":["../../src/services/ui-service.ts"],"names":[],"mappings":"AAEA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI/B,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAU;gBAEZ,OAAO,GAAE,SAAc;IAWnC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9B,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAOlC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAQjD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAU/D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAiB1B,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK5B,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,UAAO,GAAG,IAAI;IAMxC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI;IActD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAa1C,OAAO,IAAI,IAAI;IAOf,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKhC,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAIlC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAMpC,KAAK,IAAI,IAAI;IAMb,OAAO,IAAI,IAAI;CAKhB"}