pupt 1.2.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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +517 -0
  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 +375 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/add.d.ts +2 -0
  12. package/dist/commands/add.d.ts.map +1 -0
  13. package/dist/commands/add.js +149 -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 +223 -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/edit.d.ts +2 -0
  24. package/dist/commands/edit.d.ts.map +1 -0
  25. package/dist/commands/edit.js +31 -0
  26. package/dist/commands/edit.js.map +1 -0
  27. package/dist/commands/help.d.ts +2 -0
  28. package/dist/commands/help.d.ts.map +1 -0
  29. package/dist/commands/help.js +25 -0
  30. package/dist/commands/help.js.map +1 -0
  31. package/dist/commands/history.d.ts +9 -0
  32. package/dist/commands/history.d.ts.map +1 -0
  33. package/dist/commands/history.js +232 -0
  34. package/dist/commands/history.js.map +1 -0
  35. package/dist/commands/init-refactored.d.ts +19 -0
  36. package/dist/commands/init-refactored.d.ts.map +1 -0
  37. package/dist/commands/init-refactored.js +141 -0
  38. package/dist/commands/init-refactored.js.map +1 -0
  39. package/dist/commands/init.d.ts +2 -0
  40. package/dist/commands/init.d.ts.map +1 -0
  41. package/dist/commands/init.js +124 -0
  42. package/dist/commands/init.js.map +1 -0
  43. package/dist/commands/install.d.ts +10 -0
  44. package/dist/commands/install.d.ts.map +1 -0
  45. package/dist/commands/install.js +224 -0
  46. package/dist/commands/install.js.map +1 -0
  47. package/dist/commands/review.d.ts +3 -0
  48. package/dist/commands/review.d.ts.map +1 -0
  49. package/dist/commands/review.js +158 -0
  50. package/dist/commands/review.js.map +1 -0
  51. package/dist/commands/run.d.ts +28 -0
  52. package/dist/commands/run.d.ts.map +1 -0
  53. package/dist/commands/run.js +340 -0
  54. package/dist/commands/run.js.map +1 -0
  55. package/dist/config/config-manager.d.ts +19 -0
  56. package/dist/config/config-manager.d.ts.map +1 -0
  57. package/dist/config/config-manager.js +386 -0
  58. package/dist/config/config-manager.js.map +1 -0
  59. package/dist/config/migration.d.ts +11 -0
  60. package/dist/config/migration.d.ts.map +1 -0
  61. package/dist/config/migration.js +153 -0
  62. package/dist/config/migration.js.map +1 -0
  63. package/dist/history/enhanced-history-manager.d.ts +25 -0
  64. package/dist/history/enhanced-history-manager.d.ts.map +1 -0
  65. package/dist/history/enhanced-history-manager.js +88 -0
  66. package/dist/history/enhanced-history-manager.js.map +1 -0
  67. package/dist/history/history-manager.d.ts +33 -0
  68. package/dist/history/history-manager.d.ts.map +1 -0
  69. package/dist/history/history-manager.js +176 -0
  70. package/dist/history/history-manager.js.map +1 -0
  71. package/dist/index.d.ts +6 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +6 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/prompts/input-types/file-prompt.d.ts +12 -0
  76. package/dist/prompts/input-types/file-prompt.d.ts.map +1 -0
  77. package/dist/prompts/input-types/file-prompt.js +166 -0
  78. package/dist/prompts/input-types/file-prompt.js.map +1 -0
  79. package/dist/prompts/input-types/file-search-prompt.d.ts +12 -0
  80. package/dist/prompts/input-types/file-search-prompt.d.ts.map +1 -0
  81. package/dist/prompts/input-types/file-search-prompt.js +54 -0
  82. package/dist/prompts/input-types/file-search-prompt.js.map +1 -0
  83. package/dist/prompts/input-types/review-file-prompt.d.ts +4 -0
  84. package/dist/prompts/input-types/review-file-prompt.d.ts.map +1 -0
  85. package/dist/prompts/input-types/review-file-prompt.js +10 -0
  86. package/dist/prompts/input-types/review-file-prompt.js.map +1 -0
  87. package/dist/prompts/prompt-manager.d.ts +12 -0
  88. package/dist/prompts/prompt-manager.d.ts.map +1 -0
  89. package/dist/prompts/prompt-manager.js +102 -0
  90. package/dist/prompts/prompt-manager.js.map +1 -0
  91. package/dist/pupt-1.2.0.tgz +0 -0
  92. package/dist/schemas/config-schema.d.ts +1268 -0
  93. package/dist/schemas/config-schema.d.ts.map +1 -0
  94. package/dist/schemas/config-schema.js +100 -0
  95. package/dist/schemas/config-schema.js.map +1 -0
  96. package/dist/schemas/prompt-schema.d.ts +927 -0
  97. package/dist/schemas/prompt-schema.d.ts.map +1 -0
  98. package/dist/schemas/prompt-schema.js +110 -0
  99. package/dist/schemas/prompt-schema.js.map +1 -0
  100. package/dist/search/file-search-engine.d.ts +36 -0
  101. package/dist/search/file-search-engine.d.ts.map +1 -0
  102. package/dist/search/file-search-engine.js +184 -0
  103. package/dist/search/file-search-engine.js.map +1 -0
  104. package/dist/search/search-engine.d.ts +8 -0
  105. package/dist/search/search-engine.d.ts.map +1 -0
  106. package/dist/search/search-engine.js +52 -0
  107. package/dist/search/search-engine.js.map +1 -0
  108. package/dist/services/auto-annotation-service.d.ts +39 -0
  109. package/dist/services/auto-annotation-service.d.ts.map +1 -0
  110. package/dist/services/auto-annotation-service.js +203 -0
  111. package/dist/services/auto-annotation-service.js.map +1 -0
  112. package/dist/services/file-system-service.d.ts +42 -0
  113. package/dist/services/file-system-service.d.ts.map +1 -0
  114. package/dist/services/file-system-service.js +269 -0
  115. package/dist/services/file-system-service.js.map +1 -0
  116. package/dist/services/git-service.d.ts +27 -0
  117. package/dist/services/git-service.d.ts.map +1 -0
  118. package/dist/services/git-service.js +157 -0
  119. package/dist/services/git-service.js.map +1 -0
  120. package/dist/services/logging-service.d.ts +50 -0
  121. package/dist/services/logging-service.d.ts.map +1 -0
  122. package/dist/services/logging-service.js +203 -0
  123. package/dist/services/logging-service.js.map +1 -0
  124. package/dist/services/output-capture-service.d.ts +25 -0
  125. package/dist/services/output-capture-service.d.ts.map +1 -0
  126. package/dist/services/output-capture-service.js +277 -0
  127. package/dist/services/output-capture-service.js.map +1 -0
  128. package/dist/services/pattern-detector.d.ts +15 -0
  129. package/dist/services/pattern-detector.d.ts.map +1 -0
  130. package/dist/services/pattern-detector.js +219 -0
  131. package/dist/services/pattern-detector.js.map +1 -0
  132. package/dist/services/prompt-service.d.ts +30 -0
  133. package/dist/services/prompt-service.d.ts.map +1 -0
  134. package/dist/services/prompt-service.js +278 -0
  135. package/dist/services/prompt-service.js.map +1 -0
  136. package/dist/services/review-data-builder.d.ts +22 -0
  137. package/dist/services/review-data-builder.d.ts.map +1 -0
  138. package/dist/services/review-data-builder.js +263 -0
  139. package/dist/services/review-data-builder.js.map +1 -0
  140. package/dist/services/suggestion-generator.d.ts +11 -0
  141. package/dist/services/suggestion-generator.d.ts.map +1 -0
  142. package/dist/services/suggestion-generator.js +146 -0
  143. package/dist/services/suggestion-generator.js.map +1 -0
  144. package/dist/services/ui-service.d.ts +49 -0
  145. package/dist/services/ui-service.d.ts.map +1 -0
  146. package/dist/services/ui-service.js +183 -0
  147. package/dist/services/ui-service.js.map +1 -0
  148. package/dist/template/helpers/index.d.ts +4 -0
  149. package/dist/template/helpers/index.d.ts.map +1 -0
  150. package/dist/template/helpers/index.js +132 -0
  151. package/dist/template/helpers/index.js.map +1 -0
  152. package/dist/template/template-context.d.ts +26 -0
  153. package/dist/template/template-context.d.ts.map +1 -0
  154. package/dist/template/template-context.js +65 -0
  155. package/dist/template/template-context.js.map +1 -0
  156. package/dist/template/template-engine.d.ts +13 -0
  157. package/dist/template/template-engine.d.ts.map +1 -0
  158. package/dist/template/template-engine.js +83 -0
  159. package/dist/template/template-engine.js.map +1 -0
  160. package/dist/types/annotations.d.ts +49 -0
  161. package/dist/types/annotations.d.ts.map +1 -0
  162. package/dist/types/annotations.js +2 -0
  163. package/dist/types/annotations.js.map +1 -0
  164. package/dist/types/config.d.ts +49 -0
  165. package/dist/types/config.d.ts.map +1 -0
  166. package/dist/types/config.js +8 -0
  167. package/dist/types/config.js.map +1 -0
  168. package/dist/types/history.d.ts +32 -0
  169. package/dist/types/history.d.ts.map +1 -0
  170. package/dist/types/history.js +2 -0
  171. package/dist/types/history.js.map +1 -0
  172. package/dist/types/patterns.d.ts +24 -0
  173. package/dist/types/patterns.d.ts.map +1 -0
  174. package/dist/types/patterns.js +2 -0
  175. package/dist/types/patterns.js.map +1 -0
  176. package/dist/types/prompt.d.ts +23 -0
  177. package/dist/types/prompt.d.ts.map +1 -0
  178. package/dist/types/prompt.js +2 -0
  179. package/dist/types/prompt.js.map +1 -0
  180. package/dist/types/review.d.ts +76 -0
  181. package/dist/types/review.d.ts.map +1 -0
  182. package/dist/types/review.js +2 -0
  183. package/dist/types/review.js.map +1 -0
  184. package/dist/ui/console-ui.d.ts +35 -0
  185. package/dist/ui/console-ui.d.ts.map +1 -0
  186. package/dist/ui/console-ui.js +83 -0
  187. package/dist/ui/console-ui.js.map +1 -0
  188. package/dist/ui/interactive-search.d.ts +8 -0
  189. package/dist/ui/interactive-search.d.ts.map +1 -0
  190. package/dist/ui/interactive-search.js +29 -0
  191. package/dist/ui/interactive-search.js.map +1 -0
  192. package/dist/utils/date-formatter.d.ts +10 -0
  193. package/dist/utils/date-formatter.d.ts.map +1 -0
  194. package/dist/utils/date-formatter.js +43 -0
  195. package/dist/utils/date-formatter.js.map +1 -0
  196. package/dist/utils/editor.d.ts +13 -0
  197. package/dist/utils/editor.d.ts.map +1 -0
  198. package/dist/utils/editor.js +62 -0
  199. package/dist/utils/editor.js.map +1 -0
  200. package/dist/utils/errors.d.ts +55 -0
  201. package/dist/utils/errors.d.ts.map +1 -0
  202. package/dist/utils/errors.js +248 -0
  203. package/dist/utils/errors.js.map +1 -0
  204. package/dist/utils/file-utils.d.ts +18 -0
  205. package/dist/utils/file-utils.d.ts.map +1 -0
  206. package/dist/utils/file-utils.js +88 -0
  207. package/dist/utils/file-utils.js.map +1 -0
  208. package/dist/utils/git-info.d.ts +8 -0
  209. package/dist/utils/git-info.d.ts.map +1 -0
  210. package/dist/utils/git-info.js +41 -0
  211. package/dist/utils/git-info.js.map +1 -0
  212. package/dist/utils/gitignore.d.ts +10 -0
  213. package/dist/utils/gitignore.d.ts.map +1 -0
  214. package/dist/utils/gitignore.js +72 -0
  215. package/dist/utils/gitignore.js.map +1 -0
  216. package/dist/utils/handlebars-extensions.d.ts +4 -0
  217. package/dist/utils/handlebars-extensions.d.ts.map +1 -0
  218. package/dist/utils/handlebars-extensions.js +87 -0
  219. package/dist/utils/handlebars-extensions.js.map +1 -0
  220. package/dist/utils/logger.d.ts +39 -0
  221. package/dist/utils/logger.d.ts.map +1 -0
  222. package/dist/utils/logger.js +143 -0
  223. package/dist/utils/logger.js.map +1 -0
  224. package/dist/utils/platform.d.ts +9 -0
  225. package/dist/utils/platform.d.ts.map +1 -0
  226. package/dist/utils/platform.js +44 -0
  227. package/dist/utils/platform.js.map +1 -0
  228. package/dist/utils/security.d.ts +5 -0
  229. package/dist/utils/security.d.ts.map +1 -0
  230. package/dist/utils/security.js +57 -0
  231. package/dist/utils/security.js.map +1 -0
  232. package/dist/utils/tool-detection.d.ts +11 -0
  233. package/dist/utils/tool-detection.d.ts.map +1 -0
  234. package/dist/utils/tool-detection.js +32 -0
  235. package/dist/utils/tool-detection.js.map +1 -0
  236. package/dist/utils/trie.d.ts +18 -0
  237. package/dist/utils/trie.d.ts.map +1 -0
  238. package/dist/utils/trie.js +84 -0
  239. package/dist/utils/trie.js.map +1 -0
  240. package/package.json +102 -0
@@ -0,0 +1,278 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'node:path';
3
+ import matter from 'gray-matter';
4
+ import MiniSearch from 'minisearch';
5
+ import { z } from 'zod';
6
+ import { normalizeLineEndings } from '../utils/platform.js';
7
+ import { errors } from '../utils/errors.js';
8
+ import { logger } from '../utils/logger.js';
9
+ // Zod schemas for validation
10
+ const VariableSchema = z.object({
11
+ name: z.string(),
12
+ type: z.enum(['input', 'select', 'multiselect', 'confirm', 'file', 'review-file']),
13
+ message: z.string().optional(),
14
+ default: z.any().optional(),
15
+ choices: z.array(z.string()).optional(),
16
+ validate: z.string().optional(),
17
+ basePath: z.string().optional(),
18
+ filter: z.string().optional(),
19
+ autoReview: z.boolean().optional()
20
+ });
21
+ const PromptSchema = z.object({
22
+ path: z.string(),
23
+ relativePath: z.string(),
24
+ filename: z.string(),
25
+ title: z.string(),
26
+ labels: z.array(z.string()),
27
+ content: z.string(),
28
+ frontmatter: z.record(z.string(), z.any()),
29
+ variables: z.array(VariableSchema).optional()
30
+ });
31
+ export class PromptService {
32
+ promptDirs;
33
+ cache = new Map();
34
+ searchIndex = null;
35
+ options;
36
+ constructor(promptDirs, options = {}) {
37
+ this.promptDirs = promptDirs;
38
+ this.options = {
39
+ cacheTimeout: options.cacheTimeout ?? 5000
40
+ };
41
+ }
42
+ async discoverPrompts() {
43
+ const cacheKey = 'discover:all';
44
+ const cached = this.getFromCache(cacheKey);
45
+ if (cached)
46
+ return cached;
47
+ const allPrompts = [];
48
+ for (const dir of this.promptDirs) {
49
+ if (await fs.pathExists(dir)) {
50
+ const prompts = await this.discoverPromptsInDir(dir);
51
+ allPrompts.push(...prompts);
52
+ }
53
+ }
54
+ this.setCache(cacheKey, allPrompts);
55
+ // Build search index
56
+ await this.buildSearchIndex(allPrompts);
57
+ return allPrompts;
58
+ }
59
+ async loadPrompt(promptPath) {
60
+ const cacheKey = `load:${promptPath}`;
61
+ const cached = this.getFromCache(cacheKey);
62
+ if (cached)
63
+ return cached;
64
+ try {
65
+ const content = await fs.readFile(promptPath, 'utf-8');
66
+ const normalized = normalizeLineEndings(content);
67
+ const { data: frontmatter, content: markdownContent } = matter(normalized);
68
+ const filename = path.basename(promptPath);
69
+ // Find base directory
70
+ let baseDir = path.dirname(promptPath);
71
+ for (const dir of this.promptDirs) {
72
+ if (promptPath.startsWith(dir)) {
73
+ baseDir = dir;
74
+ break;
75
+ }
76
+ }
77
+ const relativePath = path.relative(baseDir, promptPath);
78
+ // Extract title from frontmatter or filename
79
+ const title = frontmatter.title || path.basename(filename, '.md');
80
+ // Extract labels
81
+ const labels = Array.isArray(frontmatter.labels) ? frontmatter.labels : [];
82
+ // Extract variables
83
+ const variables = this.parseVariables(frontmatter.variables);
84
+ const prompt = {
85
+ path: promptPath,
86
+ relativePath,
87
+ filename,
88
+ title,
89
+ labels,
90
+ content: markdownContent.trim(),
91
+ frontmatter,
92
+ variables,
93
+ };
94
+ this.setCache(cacheKey, prompt);
95
+ return prompt;
96
+ }
97
+ catch {
98
+ throw errors.fileNotFound(promptPath);
99
+ }
100
+ }
101
+ async validatePrompt(prompt) {
102
+ try {
103
+ // Validate basic structure
104
+ PromptSchema.parse(prompt);
105
+ // Additional validation
106
+ const errors = [];
107
+ // Validate variables
108
+ if (prompt.variables) {
109
+ for (const variable of prompt.variables) {
110
+ if (variable.type === 'select' || variable.type === 'multiselect') {
111
+ if (!variable.choices || variable.choices.length === 0) {
112
+ errors.push(`Variable '${variable.name}' of type '${variable.type}' must have choices`);
113
+ }
114
+ }
115
+ if (!['input', 'select', 'multiselect', 'confirm', 'file', 'review-file'].includes(variable.type)) {
116
+ errors.push(`Invalid variable type: ${variable.type}`);
117
+ }
118
+ }
119
+ }
120
+ // Check for duplicate variable names
121
+ if (prompt.variables) {
122
+ const names = prompt.variables.map(v => v.name);
123
+ const duplicates = names.filter((name, index) => names.indexOf(name) !== index);
124
+ if (duplicates.length > 0) {
125
+ errors.push(`Duplicate variable names: ${duplicates.join(', ')}`);
126
+ }
127
+ }
128
+ return {
129
+ success: errors.length === 0,
130
+ errors: errors.length > 0 ? errors : undefined
131
+ };
132
+ }
133
+ catch (error) {
134
+ if (error instanceof z.ZodError) {
135
+ return {
136
+ success: false,
137
+ errors: error.issues.map(e => `${e.path.join('.')}: ${e.message}`)
138
+ };
139
+ }
140
+ return {
141
+ success: false,
142
+ errors: [error instanceof Error ? error.message : String(error)]
143
+ };
144
+ }
145
+ }
146
+ async searchPrompts(query) {
147
+ if (!this.searchIndex) {
148
+ await this.discoverPrompts(); // This will build the index
149
+ }
150
+ if (!this.searchIndex) {
151
+ return [];
152
+ }
153
+ const results = this.searchIndex.search(query, {
154
+ fuzzy: 0.2,
155
+ prefix: true,
156
+ boost: { title: 2, labels: 1.5 },
157
+ fields: ['title', 'labels', 'content']
158
+ });
159
+ return results.map(result => {
160
+ const { id: _, ...prompt } = this.searchIndex.getStoredFields(result.id);
161
+ return prompt;
162
+ });
163
+ }
164
+ async getPromptsByLabel(label) {
165
+ const allPrompts = await this.discoverPrompts();
166
+ return allPrompts.filter(prompt => prompt.labels.includes(label));
167
+ }
168
+ async discoverPromptsInDir(dir, baseDir) {
169
+ const prompts = [];
170
+ const base = baseDir || dir;
171
+ try {
172
+ const entries = await fs.readdir(dir, { withFileTypes: true });
173
+ for (const entry of entries) {
174
+ const fullPath = path.join(dir, entry.name);
175
+ if (entry.isDirectory()) {
176
+ // Recursively search subdirectories
177
+ const subPrompts = await this.discoverPromptsInDir(fullPath, base);
178
+ prompts.push(...subPrompts);
179
+ }
180
+ else if (entry.isFile() && entry.name.endsWith('.md')) {
181
+ try {
182
+ const prompt = await this.loadPrompt(fullPath);
183
+ prompts.push(prompt);
184
+ }
185
+ catch (error) {
186
+ // Log error but continue discovering other prompts
187
+ logger.error(`Error loading prompt ${fullPath}:`, error);
188
+ }
189
+ }
190
+ }
191
+ }
192
+ catch (error) {
193
+ // Log error but don't fail the entire discovery
194
+ logger.error(`Error reading directory ${dir}:`, error);
195
+ }
196
+ return prompts;
197
+ }
198
+ parseVariables(variables) {
199
+ if (!Array.isArray(variables)) {
200
+ return undefined;
201
+ }
202
+ return variables.map(v => {
203
+ const variable = v;
204
+ const parsed = {
205
+ name: variable.name,
206
+ type: variable.type || 'input',
207
+ };
208
+ // Add optional properties only if they exist
209
+ if (variable.message !== undefined)
210
+ parsed.message = variable.message;
211
+ if (variable.default !== undefined)
212
+ parsed.default = variable.default;
213
+ if (variable.choices !== undefined)
214
+ parsed.choices = variable.choices;
215
+ if (variable.validate !== undefined)
216
+ parsed.validate = variable.validate;
217
+ if (variable.basePath !== undefined)
218
+ parsed.basePath = variable.basePath;
219
+ if (variable.filter !== undefined)
220
+ parsed.filter = variable.filter;
221
+ if (variable.autoReview !== undefined)
222
+ parsed.autoReview = variable.autoReview;
223
+ return parsed;
224
+ });
225
+ }
226
+ async buildSearchIndex(prompts) {
227
+ this.searchIndex = new MiniSearch({
228
+ fields: ['title', 'labels', 'content'],
229
+ storeFields: ['path', 'relativePath', 'filename', 'title', 'labels', 'content', 'frontmatter', 'variables'],
230
+ searchOptions: {
231
+ boost: { title: 2, labels: 1.5 },
232
+ fuzzy: 0.2
233
+ },
234
+ processTerm: (term) => term.toLowerCase()
235
+ });
236
+ // Add prompts with numeric IDs
237
+ const promptsWithIds = prompts.map((prompt, index) => ({
238
+ ...prompt,
239
+ id: index
240
+ }));
241
+ this.searchIndex.addAll(promptsWithIds);
242
+ }
243
+ getFromCache(key) {
244
+ const cached = this.cache.get(key);
245
+ if (!cached)
246
+ return null;
247
+ const age = Date.now() - cached.timestamp;
248
+ if (age > this.options.cacheTimeout) {
249
+ this.cache.delete(key);
250
+ return null;
251
+ }
252
+ return cached.data;
253
+ }
254
+ setCache(key, data) {
255
+ this.cache.set(key, { data, timestamp: Date.now() });
256
+ }
257
+ clearCache() {
258
+ this.cache.clear();
259
+ this.searchIndex = null;
260
+ }
261
+ addPromptDirectory(dir) {
262
+ if (!this.promptDirs.includes(dir)) {
263
+ this.promptDirs.push(dir);
264
+ this.clearCache(); // Clear cache to force re-discovery
265
+ }
266
+ }
267
+ removePromptDirectory(dir) {
268
+ const index = this.promptDirs.indexOf(dir);
269
+ if (index !== -1) {
270
+ this.promptDirs.splice(index, 1);
271
+ this.clearCache(); // Clear cache to force re-discovery
272
+ }
273
+ }
274
+ getPromptDirectories() {
275
+ return [...this.promptDirs];
276
+ }
277
+ }
278
+ //# sourceMappingURL=prompt-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-service.js","sourceRoot":"","sources":["../../src/services/prompt-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Config } from '../types/config.js';
2
+ import type { ReviewData, ReviewOptions } from '../types/review.js';
3
+ export declare class ReviewDataBuilder {
4
+ private config;
5
+ private historyManager;
6
+ private promptManager;
7
+ private annotationAnalyzer;
8
+ constructor(config: Config);
9
+ buildReviewData(options: ReviewOptions): Promise<ReviewData>;
10
+ private filterBySince;
11
+ private parseSinceDate;
12
+ private groupByPrompt;
13
+ private buildPromptReviewData;
14
+ private getHistoryFileName;
15
+ private extractPromptName;
16
+ private getAnnotations;
17
+ private calculateUsageStatistics;
18
+ private calculateExecutionOutcomes;
19
+ private calculateMetadata;
20
+ private calculateDataCompleteness;
21
+ }
22
+ //# sourceMappingURL=review-data-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-data-builder.d.ts","sourceRoot":"","sources":["../../src/services/review-data-builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EAMd,MAAM,oBAAoB,CAAC;AAM5B,qBAAa,iBAAiB;IAKhB,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAqB;gBAE3B,MAAM,EAAE,MAAM;IAM5B,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IA+ClE,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,aAAa;YAcP,qBAAqB;IAgEnC,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,iBAAiB;YAUX,cAAc;IAiC5B,OAAO,CAAC,wBAAwB;IA0BhC,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,yBAAyB;CA6BlC"}
@@ -0,0 +1,263 @@
1
+ import { HistoryManager } from '../history/history-manager.js';
2
+ import { PromptManager } from '../prompts/prompt-manager.js';
3
+ import fs from 'fs-extra';
4
+ import path from 'path';
5
+ import yaml from 'js-yaml';
6
+ import { AnnotationAnalyzer } from '../annotations/annotation-analyzer.js';
7
+ export class ReviewDataBuilder {
8
+ config;
9
+ historyManager;
10
+ promptManager;
11
+ annotationAnalyzer;
12
+ constructor(config) {
13
+ this.config = config;
14
+ this.historyManager = new HistoryManager(config.historyDir || './history', config.annotationDir);
15
+ this.promptManager = new PromptManager(config.promptDirs || ['./prompts']);
16
+ this.annotationAnalyzer = new AnnotationAnalyzer();
17
+ }
18
+ async buildReviewData(options) {
19
+ // Get all history entries
20
+ let historyEntries = await this.historyManager.listHistory();
21
+ // Filter by time if specified
22
+ if (options.since) {
23
+ historyEntries = this.filterBySince(historyEntries, options.since);
24
+ }
25
+ // Filter by prompt name if specified
26
+ if (options.promptName) {
27
+ historyEntries = historyEntries.filter(entry => this.extractPromptName(entry) === options.promptName);
28
+ }
29
+ // Group entries by prompt
30
+ const entriesByPrompt = this.groupByPrompt(historyEntries);
31
+ // Get all annotations
32
+ const annotations = await this.getAnnotations();
33
+ // Build prompt review data for each unique prompt
34
+ const prompts = [];
35
+ for (const [promptName, entries] of entriesByPrompt) {
36
+ const promptData = await this.buildPromptReviewData(promptName, entries, annotations);
37
+ prompts.push(promptData);
38
+ }
39
+ // Calculate metadata
40
+ const metadata = this.calculateMetadata(options.since || '30d', prompts, historyEntries);
41
+ return {
42
+ metadata,
43
+ prompts,
44
+ cross_prompt_patterns: [] // Will be implemented in Phase 5
45
+ };
46
+ }
47
+ filterBySince(entries, since) {
48
+ const cutoffDate = this.parseSinceDate(since);
49
+ return entries.filter(entry => {
50
+ const entryDate = new Date(entry.timestamp);
51
+ return entryDate >= cutoffDate;
52
+ });
53
+ }
54
+ parseSinceDate(since) {
55
+ const now = new Date();
56
+ const match = since.match(/^(\d+)([dDhHmMwW])$/);
57
+ if (!match) {
58
+ // Try to parse as ISO date
59
+ const date = new Date(since);
60
+ if (!isNaN(date.getTime())) {
61
+ return date;
62
+ }
63
+ throw new Error(`Invalid since format: ${since}`);
64
+ }
65
+ const [, amountStr, unit] = match;
66
+ const amount = parseInt(amountStr, 10);
67
+ switch (unit.toLowerCase()) {
68
+ case 'd':
69
+ now.setDate(now.getDate() - amount);
70
+ break;
71
+ case 'h':
72
+ now.setHours(now.getHours() - amount);
73
+ break;
74
+ case 'm':
75
+ now.setMinutes(now.getMinutes() - amount);
76
+ break;
77
+ case 'w':
78
+ now.setDate(now.getDate() - (amount * 7));
79
+ break;
80
+ default:
81
+ throw new Error(`Invalid time unit: ${unit}`);
82
+ }
83
+ return now;
84
+ }
85
+ groupByPrompt(entries) {
86
+ const grouped = new Map();
87
+ for (const entry of entries) {
88
+ const promptName = this.extractPromptName(entry);
89
+ if (!grouped.has(promptName)) {
90
+ grouped.set(promptName, []);
91
+ }
92
+ grouped.get(promptName).push(entry);
93
+ }
94
+ return grouped;
95
+ }
96
+ async buildPromptReviewData(promptName, entries, allAnnotations) {
97
+ // Get prompt content and metadata
98
+ let promptContent = '';
99
+ let promptPath = '';
100
+ // let promptMetadata = {};
101
+ try {
102
+ const prompts = await this.promptManager.discoverPrompts();
103
+ const prompt = prompts.find(p => path.basename(p.path, '.md') === promptName);
104
+ if (prompt) {
105
+ promptContent = prompt.content;
106
+ promptPath = prompt.path;
107
+ // promptMetadata = prompt.frontmatter || {};
108
+ }
109
+ else {
110
+ // Prompt file might have been deleted
111
+ promptPath = entries[0]?.templatePath || `prompts/${promptName}.md`;
112
+ }
113
+ }
114
+ catch {
115
+ // Prompt file might have been deleted
116
+ promptPath = entries[0]?.templatePath || `prompts/${promptName}.md`;
117
+ }
118
+ // Get last modified time
119
+ let lastModified = '';
120
+ try {
121
+ const stats = await fs.stat(promptPath);
122
+ lastModified = stats.mtime.toISOString();
123
+ }
124
+ catch {
125
+ // Use most recent execution time as fallback
126
+ lastModified = entries[entries.length - 1]?.timestamp || new Date().toISOString();
127
+ }
128
+ // Filter annotations for this prompt
129
+ const promptAnnotations = allAnnotations.filter(annotation => {
130
+ return entries.some(entry => {
131
+ const historyFileName = this.getHistoryFileName(entry);
132
+ return annotation.historyFile === historyFileName;
133
+ });
134
+ });
135
+ // Calculate usage statistics
136
+ const usageStatistics = this.calculateUsageStatistics(entries, promptAnnotations);
137
+ // Calculate execution outcomes
138
+ const executionOutcomes = this.calculateExecutionOutcomes(promptAnnotations);
139
+ return {
140
+ name: promptName,
141
+ path: promptPath,
142
+ content: promptContent,
143
+ last_modified: lastModified,
144
+ usage_statistics: usageStatistics,
145
+ execution_outcomes: executionOutcomes,
146
+ environment_correlations: {}, // Will be enhanced in future phases
147
+ captured_outputs: [], // Will be populated in Phase 2
148
+ user_annotations: promptAnnotations,
149
+ detected_patterns: [] // Will be populated in Phase 5
150
+ };
151
+ }
152
+ getHistoryFileName(entry) {
153
+ // Use the actual filename from the entry
154
+ return entry.filename;
155
+ }
156
+ extractPromptName(entry) {
157
+ // Extract prompt name from template path
158
+ if (entry.templatePath) {
159
+ return path.basename(entry.templatePath, '.md');
160
+ }
161
+ // Fallback to extracting from filename if template path not available
162
+ const match = entry.filename.match(/history_.*?_(.+)\.json$/);
163
+ return match ? match[1] : 'unknown';
164
+ }
165
+ async getAnnotations() {
166
+ if (!this.config.annotationDir) {
167
+ return [];
168
+ }
169
+ try {
170
+ const files = await fs.readdir(this.config.annotationDir);
171
+ const annotationFiles = files.filter(f => f.endsWith('.md'));
172
+ const rawAnnotations = [];
173
+ for (const file of annotationFiles) {
174
+ const content = await fs.readFile(path.join(this.config.annotationDir, file), 'utf-8');
175
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
176
+ if (frontmatterMatch) {
177
+ const metadata = yaml.load(frontmatterMatch[1]);
178
+ const notes = content.slice(frontmatterMatch[0].length).trim();
179
+ rawAnnotations.push({
180
+ ...metadata,
181
+ notes,
182
+ annotationPath: path.join(this.config.annotationDir, file)
183
+ });
184
+ }
185
+ }
186
+ return this.annotationAnalyzer.parseAnnotations(rawAnnotations);
187
+ }
188
+ catch {
189
+ // Directory might not exist
190
+ return [];
191
+ }
192
+ }
193
+ calculateUsageStatistics(entries, annotations) {
194
+ const totalRuns = entries.length;
195
+ const annotatedRuns = annotations.length;
196
+ // Calculate success rate from annotations
197
+ const successCount = annotations.filter(a => a.status === 'success').length;
198
+ const successRate = annotatedRuns > 0 ? successCount / annotatedRuns : 0;
199
+ // Get last used time
200
+ const lastUsed = entries[entries.length - 1]?.timestamp || new Date().toISOString();
201
+ // TODO: Calculate average duration when execution data is available
202
+ const avgDuration = 'N/A';
203
+ return {
204
+ total_runs: totalRuns,
205
+ annotated_runs: annotatedRuns,
206
+ success_rate: successRate,
207
+ avg_duration: avgDuration,
208
+ last_used: lastUsed
209
+ };
210
+ }
211
+ calculateExecutionOutcomes(annotations) {
212
+ let success = 0;
213
+ let partial = 0;
214
+ let failure = 0;
215
+ for (const annotation of annotations) {
216
+ switch (annotation.status) {
217
+ case 'success':
218
+ success++;
219
+ break;
220
+ case 'partial':
221
+ partial++;
222
+ break;
223
+ case 'failure':
224
+ failure++;
225
+ break;
226
+ }
227
+ }
228
+ return { success, partial, failure };
229
+ }
230
+ calculateMetadata(analysisPeriod, prompts, allEntries) {
231
+ const totalPrompts = prompts.length;
232
+ const totalExecutions = allEntries.length;
233
+ // Calculate data completeness
234
+ const dataCompleteness = this.calculateDataCompleteness(prompts, allEntries);
235
+ return {
236
+ analysis_period: analysisPeriod,
237
+ total_prompts: totalPrompts,
238
+ total_executions: totalExecutions,
239
+ data_completeness: dataCompleteness
240
+ };
241
+ }
242
+ calculateDataCompleteness(prompts, entries) {
243
+ if (entries.length === 0) {
244
+ return {
245
+ with_annotations: 0,
246
+ with_output_capture: 0,
247
+ with_environment_data: 0
248
+ };
249
+ }
250
+ // Count entries with annotations
251
+ const totalAnnotations = prompts.reduce((sum, prompt) => sum + prompt.user_annotations.length, 0);
252
+ const withAnnotations = Math.round((totalAnnotations / entries.length) * 100);
253
+ // Output capture and environment data will be tracked in future phases
254
+ const withOutputCapture = 0;
255
+ const withEnvironmentData = 0;
256
+ return {
257
+ with_annotations: withAnnotations,
258
+ with_output_capture: withOutputCapture,
259
+ with_environment_data: withEnvironmentData
260
+ };
261
+ }
262
+ }
263
+ //# 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,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAE1E,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;IAWpC,OAAO,CAAC,2BAA2B;IA0BnC,OAAO,CAAC,gBAAgB;CAMzB"}