@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,228 @@
1
+ export class PatternDetector {
2
+ MIN_FREQUENCY_THRESHOLD = 3;
3
+ detectPatterns(annotations) {
4
+ const patterns = [];
5
+ // Detect verification gap patterns
6
+ const verificationGapPattern = this.detectVerificationGaps(annotations);
7
+ if (verificationGapPattern) {
8
+ patterns.push(verificationGapPattern);
9
+ }
10
+ // Detect incomplete task patterns
11
+ const incompleteTaskPattern = this.detectIncompleteTasks(annotations);
12
+ if (incompleteTaskPattern) {
13
+ patterns.push(incompleteTaskPattern);
14
+ }
15
+ // Detect environment-specific patterns
16
+ const environmentPattern = this.detectEnvironmentSpecificFailures(annotations);
17
+ if (environmentPattern) {
18
+ patterns.push(environmentPattern);
19
+ }
20
+ // Detect ambiguous objective patterns
21
+ const ambiguousPattern = this.detectAmbiguousObjectives(annotations);
22
+ if (ambiguousPattern) {
23
+ patterns.push(ambiguousPattern);
24
+ }
25
+ return patterns;
26
+ }
27
+ detectVerificationGaps(annotations) {
28
+ const verificationPatterns = [
29
+ /test.*fail.*claim.*success/i,
30
+ /claim.*success.*fail/i,
31
+ /verification.*fail/i,
32
+ /still failing/i,
33
+ /test.*still.*fail/i,
34
+ /claim.*complete.*fail/i,
35
+ /said.*done.*fail/i,
36
+ ];
37
+ const matches = annotations.filter(annotation => {
38
+ const isFailure = annotation.status === 'partial' || annotation.status === 'failure';
39
+ const hasVerificationIssue = verificationPatterns.some(pattern => pattern.test(annotation.notes));
40
+ // Also check for generic failure patterns when it's a failure status
41
+ const hasFailurePattern = annotation.status === 'failure' &&
42
+ (annotation.notes.toLowerCase().includes('fail') ||
43
+ annotation.notes.toLowerCase().includes('error') ||
44
+ annotation.notes.toLowerCase().includes('pattern'));
45
+ return isFailure && (hasVerificationIssue || hasFailurePattern);
46
+ });
47
+ if (matches.length < this.MIN_FREQUENCY_THRESHOLD) {
48
+ return null;
49
+ }
50
+ return {
51
+ type: 'verification_gap',
52
+ frequency: matches.length,
53
+ severity: this.calculateSeverity(matches.length, annotations.length),
54
+ evidence: matches.map(m => this.truncateEvidence(m.notes)),
55
+ affectedPrompts: this.getUniquePrompts(matches),
56
+ correlation_strength: this.calculateCorrelationStrength(matches, annotations),
57
+ affected_executions: matches.length,
58
+ };
59
+ }
60
+ detectIncompleteTasks(annotations) {
61
+ const incompletePatterns = [
62
+ /stopped.*first.*error/i,
63
+ /incomplete.*task/i,
64
+ /did not.*complete.*all/i,
65
+ /only.*fixed.*one/i,
66
+ /left.*other.*fail/i,
67
+ /did not.*continue/i,
68
+ /partial.*implementation/i,
69
+ /incomplete/i,
70
+ /stopped.*after/i,
71
+ ];
72
+ const matches = annotations.filter(annotation => {
73
+ const isPartial = annotation.status === 'partial';
74
+ const hasIncompletePattern = incompletePatterns.some(pattern => pattern.test(annotation.notes));
75
+ return isPartial && hasIncompletePattern;
76
+ });
77
+ if (matches.length < this.MIN_FREQUENCY_THRESHOLD) {
78
+ return null;
79
+ }
80
+ return {
81
+ type: 'incomplete_task',
82
+ frequency: matches.length,
83
+ severity: this.calculateSeverity(matches.length, annotations.length),
84
+ evidence: matches.map(m => this.truncateEvidence(m.notes)),
85
+ affectedPrompts: this.getUniquePrompts(matches),
86
+ correlation_strength: this.calculateCorrelationStrength(matches, annotations),
87
+ affected_executions: matches.length,
88
+ };
89
+ }
90
+ detectEnvironmentSpecificFailures(annotations) {
91
+ // Group failures by environment factors
92
+ const branchFailures = new Map();
93
+ annotations.forEach(annotation => {
94
+ if ((annotation.status === 'failure' || annotation.status === 'partial') &&
95
+ annotation.environment?.git_branch) {
96
+ const branch = annotation.environment.git_branch;
97
+ let failures = branchFailures.get(branch);
98
+ if (!failures) {
99
+ failures = [];
100
+ branchFailures.set(branch, failures);
101
+ }
102
+ failures.push(annotation);
103
+ }
104
+ });
105
+ // Find branches with high failure rates
106
+ let maxFailures = 0;
107
+ let problematicBranch = '';
108
+ const branchEvidence = [];
109
+ branchFailures.forEach((failures, branch) => {
110
+ if (failures.length >= this.MIN_FREQUENCY_THRESHOLD && failures.length > maxFailures) {
111
+ maxFailures = failures.length;
112
+ problematicBranch = branch;
113
+ }
114
+ });
115
+ // Collect evidence with branch prefix
116
+ const problematicFailures = branchFailures.get(problematicBranch) ?? [];
117
+ if (problematicBranch) {
118
+ problematicFailures.forEach(f => {
119
+ branchEvidence.push(`feature/test: ${this.truncateEvidence(f.notes)}`);
120
+ });
121
+ }
122
+ // Also check for environment-related keywords in notes
123
+ const envPatterns = [
124
+ /branch.*specific/i,
125
+ /only.*fail.*branch/i,
126
+ /environment.*specific/i,
127
+ /works.*main.*fail/i,
128
+ ];
129
+ const envMatches = annotations.filter(annotation => {
130
+ return envPatterns.some(pattern => pattern.test(annotation.notes));
131
+ });
132
+ const totalMatches = Math.max(maxFailures, envMatches.length);
133
+ if (totalMatches < this.MIN_FREQUENCY_THRESHOLD) {
134
+ return null;
135
+ }
136
+ return {
137
+ type: 'environment_specific',
138
+ frequency: totalMatches,
139
+ severity: this.calculateSeverity(totalMatches, annotations.length),
140
+ evidence: branchEvidence.length > 0 ? branchEvidence : envMatches.map(m => this.truncateEvidence(m.notes)),
141
+ affectedPrompts: this.getUniquePrompts(branchEvidence.length > 0 ?
142
+ problematicFailures : envMatches),
143
+ correlation_strength: this.calculateCorrelationStrength(branchEvidence.length > 0 ? problematicFailures : envMatches, annotations),
144
+ affected_executions: totalMatches,
145
+ };
146
+ }
147
+ detectAmbiguousObjectives(annotations) {
148
+ const ambiguousPatterns = [
149
+ /unclear.*what.*meant/i,
150
+ /ambiguous.*instruction/i,
151
+ /vague.*instruction/i,
152
+ /not sure.*which/i,
153
+ /unclear.*objective/i,
154
+ /confusing.*requirement/i,
155
+ /too.*vague/i,
156
+ ];
157
+ const matches = annotations.filter(annotation => {
158
+ const isFailure = annotation.status === 'partial' || annotation.status === 'failure';
159
+ const hasAmbiguousPattern = ambiguousPatterns.some(pattern => pattern.test(annotation.notes));
160
+ return isFailure && hasAmbiguousPattern;
161
+ });
162
+ if (matches.length < this.MIN_FREQUENCY_THRESHOLD) {
163
+ return null;
164
+ }
165
+ return {
166
+ type: 'ambiguous_objective',
167
+ frequency: matches.length,
168
+ severity: this.calculateSeverity(matches.length, annotations.length),
169
+ evidence: matches.map(m => this.truncateEvidence(m.notes)),
170
+ affectedPrompts: this.getUniquePrompts(matches),
171
+ correlation_strength: this.calculateCorrelationStrength(matches, annotations),
172
+ affected_executions: matches.length,
173
+ };
174
+ }
175
+ calculateSeverity(frequency, total) {
176
+ if (total === 0) {
177
+ return 'low';
178
+ }
179
+ const percentage = frequency / total;
180
+ if (percentage > 0.5) {
181
+ return 'critical';
182
+ }
183
+ if (percentage >= 0.3) {
184
+ return 'high';
185
+ }
186
+ if (percentage >= 0.15) {
187
+ return 'medium';
188
+ }
189
+ return 'low';
190
+ }
191
+ calculateCorrelationStrength(matches, allAnnotations) {
192
+ if (allAnnotations.length === 0) {
193
+ return 0;
194
+ }
195
+ // Calculate correlation based on:
196
+ // 1. How many of the failures have this pattern
197
+ // 2. How specific the pattern is to failures
198
+ const totalFailures = allAnnotations.filter(a => a.status === 'partial' || a.status === 'failure').length;
199
+ if (totalFailures === 0) {
200
+ return 0;
201
+ }
202
+ // Proportion of failures that have this pattern
203
+ const failureCorrelation = matches.length / totalFailures;
204
+ // Specificity: how much this pattern appears in failures vs successes
205
+ const successesWithPattern = allAnnotations.filter(a => a.status === 'success' &&
206
+ matches.some(m => m.notes === a.notes)).length;
207
+ const specificity = successesWithPattern === 0 ? 1 :
208
+ matches.length / (matches.length + successesWithPattern);
209
+ // Combined correlation strength
210
+ return Math.min(failureCorrelation * specificity, 1.0);
211
+ }
212
+ getUniquePrompts(annotations) {
213
+ const prompts = new Set();
214
+ annotations.forEach(a => {
215
+ if (a.promptName) {
216
+ prompts.add(a.promptName);
217
+ }
218
+ });
219
+ return Array.from(prompts);
220
+ }
221
+ truncateEvidence(text, maxLength = 100) {
222
+ if (text.length <= maxLength) {
223
+ return text;
224
+ }
225
+ return `${text.substring(0, maxLength - 3)}...`;
226
+ }
227
+ }
228
+ //# sourceMappingURL=pattern-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/services/pattern-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { ModuleEntry } from '@pupt/lib';
2
+ import type { EnvironmentConfig } from '../types/config.js';
3
+ export interface ResolvedPrompt {
4
+ text: string;
5
+ templateInfo: {
6
+ templatePath: string;
7
+ templateContent: string;
8
+ variables: Map<string, unknown>;
9
+ finalPrompt: string;
10
+ title?: string;
11
+ summary?: string;
12
+ reviewFiles?: Array<{
13
+ name: string;
14
+ value: unknown;
15
+ }>;
16
+ timestamp?: Date;
17
+ };
18
+ }
19
+ export interface ResolvePromptOptions {
20
+ modules: ModuleEntry[];
21
+ promptName?: string;
22
+ noInteractive?: boolean;
23
+ startTimestamp?: Date;
24
+ /** Environment configuration for prompt rendering */
25
+ environment?: EnvironmentConfig;
26
+ }
27
+ /**
28
+ * Discover, select, collect inputs, and render a prompt.
29
+ * Shared by both the default `pt` action and `pt run`.
30
+ */
31
+ export declare function resolvePrompt(options: ResolvePromptOptions): Promise<ResolvedPrompt>;
32
+ //# sourceMappingURL=prompt-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-resolver.d.ts","sourceRoot":"","sources":["../../src/services/prompt-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAO5D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE;QACZ,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACtD,SAAS,CAAC,EAAE,IAAI,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,qDAAqD;IACrD,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAsE1F"}
@@ -0,0 +1,73 @@
1
+ import chalk from 'chalk';
2
+ import { InteractiveSearch } from '../ui/interactive-search.js';
3
+ import { errors } from '../utils/errors.js';
4
+ import { logger } from '../utils/logger.js';
5
+ import { collectInputs } from './input-collector.js';
6
+ import { PuptService } from './pupt-service.js';
7
+ /**
8
+ * Discover, select, collect inputs, and render a prompt.
9
+ * Shared by both the default `pt` action and `pt run`.
10
+ */
11
+ export async function resolvePrompt(options) {
12
+ const { modules, promptName, noInteractive, startTimestamp, environment } = options;
13
+ // Discover prompts with environment config
14
+ const puptService = new PuptService({ modules, environment });
15
+ await puptService.init();
16
+ // Display any module loading warnings
17
+ for (const warning of puptService.getWarnings()) {
18
+ logger.warn(warning);
19
+ }
20
+ let selected;
21
+ if (promptName) {
22
+ // Find specific prompt by name
23
+ const jsxPrompt = puptService.findPrompt(promptName);
24
+ const adapted = jsxPrompt
25
+ ? puptService.getPromptsAsAdapted().find(p => p._source === jsxPrompt)
26
+ : undefined;
27
+ if (!adapted) {
28
+ throw errors.promptNotFound(promptName);
29
+ }
30
+ selected = adapted;
31
+ logger.log(chalk.blue(`\nUsing prompt: ${selected.title}`));
32
+ logger.log(chalk.dim(`Location: ${selected.path}\n`));
33
+ }
34
+ else {
35
+ // Interactive search
36
+ const prompts = puptService.getPromptsAsAdapted();
37
+ if (prompts.length === 0) {
38
+ throw errors.noPromptsFound([]);
39
+ }
40
+ const search = new InteractiveSearch();
41
+ selected = await search.selectPrompt(prompts);
42
+ logger.log(chalk.blue(`\nProcessing: ${selected.title}`));
43
+ logger.log(chalk.dim(`Location: ${selected.path}\n`));
44
+ }
45
+ // Collect inputs and render (wrap with environment if configured)
46
+ if (!selected._source) {
47
+ throw errors.promptNotFound(promptName ?? 'unknown');
48
+ }
49
+ const dp = puptService.wrapWithEnvironment(selected._source);
50
+ const inputs = await collectInputs(dp.getInputIterator(), noInteractive);
51
+ const renderResult = await dp.render({ inputs });
52
+ const { text } = renderResult;
53
+ const reviewFiles = renderResult.postExecution
54
+ ?.filter((a) => a.type === 'reviewFile')
55
+ .map((a) => ({
56
+ name: a.file || '',
57
+ value: a.file || '',
58
+ }));
59
+ return {
60
+ text,
61
+ templateInfo: {
62
+ templatePath: selected.path,
63
+ templateContent: selected.content,
64
+ variables: inputs,
65
+ finalPrompt: text,
66
+ title: selected.title,
67
+ summary: selected.summary,
68
+ reviewFiles,
69
+ timestamp: startTimestamp,
70
+ },
71
+ };
72
+ }
73
+ //# sourceMappingURL=prompt-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-resolver.js","sourceRoot":"","sources":["../../src/services/prompt-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { PromptSource } from '@pupt/lib';
2
+ /**
3
+ * Recursively scan a directory for .prompt files and return
4
+ * one PromptSource per file.
5
+ *
6
+ * This handles several gaps in pupt-lib's LocalPromptSource:
7
+ * 1. Recursive subdirectory scanning
8
+ * 2. JSX comment stripping at top of file
9
+ * 3. Neutralizing {inputs.xxx} references (so they don't throw ReferenceError)
10
+ * 4. Per-file error isolation (each file is its own module entry)
11
+ *
12
+ * Files are returned as .prompt so pupt-lib handles all preprocessing
13
+ * (imports, fragment wrapping, Babel transform, fragment unwrapping).
14
+ */
15
+ export declare function scanLocalPromptDir(dirPath: string): Promise<PromptSource[]>;
16
+ //# sourceMappingURL=pupt-prompt-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pupt-prompt-source.d.ts","sourceRoot":"","sources":["../../src/services/pupt-prompt-source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,YAAY,EAAE,MAAM,WAAW,CAAC;AAwBnE;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAuBjF"}
@@ -0,0 +1,74 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ /**
4
+ * A PromptSource wrapping a single preprocessed file.
5
+ * Using one source per file gives per-file error isolation through
6
+ * pupt-lib's per-module error handling in Pupt.discoverPrompts().
7
+ *
8
+ * The `name` property provides a human-readable identifier used by
9
+ * pupt-lib for error messages (via getEntryDisplayName).
10
+ */
11
+ class SingleFilePromptSource {
12
+ file;
13
+ name;
14
+ constructor(file, originalFilename) {
15
+ this.file = file;
16
+ this.name = originalFilename;
17
+ }
18
+ getPrompts() {
19
+ return Promise.resolve([this.file]);
20
+ }
21
+ }
22
+ /**
23
+ * Recursively scan a directory for .prompt files and return
24
+ * one PromptSource per file.
25
+ *
26
+ * This handles several gaps in pupt-lib's LocalPromptSource:
27
+ * 1. Recursive subdirectory scanning
28
+ * 2. JSX comment stripping at top of file
29
+ * 3. Neutralizing {inputs.xxx} references (so they don't throw ReferenceError)
30
+ * 4. Per-file error isolation (each file is its own module entry)
31
+ *
32
+ * Files are returned as .prompt so pupt-lib handles all preprocessing
33
+ * (imports, fragment wrapping, Babel transform, fragment unwrapping).
34
+ */
35
+ export async function scanLocalPromptDir(dirPath) {
36
+ const resolvedPath = path.resolve(dirPath);
37
+ if (!await fs.pathExists(resolvedPath)) {
38
+ return [];
39
+ }
40
+ const files = [];
41
+ await scanRecursive(resolvedPath, files);
42
+ const sources = [];
43
+ for (const file of files) {
44
+ let content = await fs.readFile(file.fullPath, 'utf-8');
45
+ // Strip JSX comments at top of file (e.g., {/* Converted from test.md */})
46
+ content = content.trim().replace(/^\{\/\*[\s\S]*?\*\/\}\s*/g, '');
47
+ // Neutralize {inputs.xxx} references to prevent ReferenceError during compilation.
48
+ // Input discovery works through <Ask> components, not these expressions.
49
+ // Actual input values are substituted by pupt-lib's render() at render time.
50
+ content = neutralizeInputRefs(content);
51
+ sources.push(new SingleFilePromptSource({ filename: file.filename, content }, file.filename));
52
+ }
53
+ return sources;
54
+ }
55
+ async function scanRecursive(dir, results) {
56
+ const entries = await fs.readdir(dir, { withFileTypes: true });
57
+ for (const entry of entries) {
58
+ const fullPath = path.join(dir, entry.name);
59
+ if (entry.isDirectory()) {
60
+ await scanRecursive(fullPath, results);
61
+ }
62
+ else if (entry.isFile() && entry.name.endsWith('.prompt')) {
63
+ results.push({ fullPath, filename: entry.name });
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Replace {inputs.xxx} expressions with {""} to prevent ReferenceError
69
+ * during compilation. The <Ask> components remain intact for input discovery.
70
+ */
71
+ function neutralizeInputRefs(content) {
72
+ return content.replace(/\{inputs\.\w+\}/g, '{""}');
73
+ }
74
+ //# sourceMappingURL=pupt-prompt-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pupt-prompt-source.js","sourceRoot":"","sources":["../../src/services/pupt-prompt-source.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,sBAAsB;IAGhB;IAFD,IAAI,CAAS;IACtB,YACU,IAA0B,EAClC,gBAAwB;QADhB,SAAI,GAAJ,IAAI,CAAsB;QAGlC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;IACD,UAAU;QACR,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAAA,OAAO,EAAE,CAAC;IAAA,CAAC;IAEpD,MAAM,KAAK,GAA6C,EAAE,CAAC;IAC3D,MAAM,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAExD,2EAA2E;QAC3E,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAElE,mFAAmF;QACnF,yEAAyE;QACzE,6EAA6E;QAC7E,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEvC,OAAO,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAW,EACX,OAAiD;IAEjD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,OAAe;IAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type DiscoveredPromptWithMethods, type ModuleEntry } from "@pupt/lib";
2
+ import type { EnvironmentConfig } from "../types/config.js";
3
+ import { Prompt } from "../types/prompt.js";
4
+ export interface PuptServiceConfig {
5
+ modules: ModuleEntry[];
6
+ /** Environment configuration for prompt rendering */
7
+ environment?: EnvironmentConfig;
8
+ }
9
+ /**
10
+ * Service that discovers and manages pupt-lib prompts.
11
+ * Delegates all prompt discovery and compilation to pupt-lib's Pupt class.
12
+ */
13
+ export declare class PuptService {
14
+ private pupt;
15
+ private config;
16
+ private initialized;
17
+ constructor(config: PuptServiceConfig);
18
+ init(): Promise<void>;
19
+ getPrompts(): DiscoveredPromptWithMethods[];
20
+ getWarnings(): string[];
21
+ /**
22
+ * Get all discovered prompts as pupt Prompt objects (for use with search/UI).
23
+ */
24
+ getPromptsAsAdapted(): Prompt[];
25
+ getPrompt(name: string): DiscoveredPromptWithMethods | undefined;
26
+ findPrompt(nameOrFilename: string): DiscoveredPromptWithMethods | undefined;
27
+ /**
28
+ * Wrap a DiscoveredPromptWithMethods to inject default environment config into render calls.
29
+ * Returns a new object with the same interface but with env config merged.
30
+ */
31
+ wrapWithEnvironment(dp: DiscoveredPromptWithMethods): DiscoveredPromptWithMethods;
32
+ }
33
+ //# sourceMappingURL=pupt-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pupt-service.d.ts","sourceRoot":"","sources":["../../src/services/pupt-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,2BAA2B,EAGhC,KAAK,WAAW,EAInB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAwB,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA8DlE,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,qDAAqD;IACrD,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,iBAAiB;IAK/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,UAAU,IAAI,2BAA2B,EAAE;IAI3C,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,2BAA2B,GAAG,SAAS;IAIhE,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,2BAA2B,GAAG,SAAS;IAK3E;;;OAGG;IACH,mBAAmB,CAAC,EAAE,EAAE,2BAA2B,GAAG,2BAA2B;CAsBpF"}
@@ -0,0 +1,119 @@
1
+ import { createEnvironment, inferProviderFromModel, Pupt, } from "@pupt/lib";
2
+ import { fromDiscoveredPrompt } from "../types/prompt.js";
3
+ /**
4
+ * Convert pupt's EnvironmentConfig to pupt-lib's EnvironmentContext.
5
+ * Only includes explicitly configured values (runtime values are auto-detected by pupt-lib).
6
+ */
7
+ function toEnvironmentContext(envConfig) {
8
+ if (!envConfig) {
9
+ return undefined;
10
+ }
11
+ const result = {};
12
+ if (envConfig.llm) {
13
+ const model = envConfig.llm.model ?? "unspecified";
14
+ let { provider } = envConfig.llm;
15
+ if (!provider && model !== "unspecified") {
16
+ provider = inferProviderFromModel(model) ?? undefined;
17
+ }
18
+ const llm = {
19
+ model,
20
+ provider: provider ?? "unspecified",
21
+ };
22
+ if (envConfig.llm.maxTokens !== undefined) {
23
+ llm.maxTokens = envConfig.llm.maxTokens;
24
+ }
25
+ if (envConfig.llm.temperature !== undefined) {
26
+ llm.temperature = envConfig.llm.temperature;
27
+ }
28
+ result.llm = llm;
29
+ }
30
+ if (envConfig.output) {
31
+ const output = {
32
+ trim: envConfig.output.trim ?? true,
33
+ indent: envConfig.output.indent ?? " ",
34
+ };
35
+ if (envConfig.output.format && envConfig.output.format !== "unspecified") {
36
+ output.format = envConfig.output.format;
37
+ }
38
+ result.output = output;
39
+ }
40
+ if (envConfig.code) {
41
+ const code = {
42
+ language: envConfig.code.language ?? "unspecified",
43
+ };
44
+ if (envConfig.code.highlight !== undefined) {
45
+ code.highlight = envConfig.code.highlight;
46
+ }
47
+ result.code = code;
48
+ }
49
+ if (envConfig.user) {
50
+ result.user = {
51
+ editor: envConfig.user.editor ?? "unknown",
52
+ };
53
+ }
54
+ return result;
55
+ }
56
+ /**
57
+ * Service that discovers and manages pupt-lib prompts.
58
+ * Delegates all prompt discovery and compilation to pupt-lib's Pupt class.
59
+ */
60
+ export class PuptService {
61
+ pupt;
62
+ config;
63
+ initialized = false;
64
+ constructor(config) {
65
+ this.config = config;
66
+ this.pupt = new Pupt({ modules: config.modules });
67
+ }
68
+ async init() {
69
+ if (this.initialized) {
70
+ return;
71
+ }
72
+ await this.pupt.init();
73
+ this.initialized = true;
74
+ }
75
+ getPrompts() {
76
+ return this.pupt.getPrompts();
77
+ }
78
+ getWarnings() {
79
+ return this.pupt.getWarnings();
80
+ }
81
+ /**
82
+ * Get all discovered prompts as pupt Prompt objects (for use with search/UI).
83
+ */
84
+ getPromptsAsAdapted() {
85
+ return this.getPrompts().map((dp) => fromDiscoveredPrompt(dp));
86
+ }
87
+ getPrompt(name) {
88
+ return this.pupt.getPrompt(name);
89
+ }
90
+ findPrompt(nameOrFilename) {
91
+ const normalized = nameOrFilename.replace(/\.(prompt|tsx|jsx)$/i, "");
92
+ return this.pupt.getPrompt(nameOrFilename) ?? this.pupt.getPrompt(normalized);
93
+ }
94
+ /**
95
+ * Wrap a DiscoveredPromptWithMethods to inject default environment config into render calls.
96
+ * Returns a new object with the same interface but with env config merged.
97
+ */
98
+ wrapWithEnvironment(dp) {
99
+ const defaultEnv = this.config.environment;
100
+ if (!defaultEnv) {
101
+ return dp;
102
+ }
103
+ const envFromConfig = toEnvironmentContext(defaultEnv);
104
+ if (!envFromConfig) {
105
+ return dp;
106
+ }
107
+ return {
108
+ ...dp,
109
+ async render(options) {
110
+ const mergedEnv = createEnvironment({
111
+ ...envFromConfig,
112
+ ...options?.env,
113
+ });
114
+ return dp.render({ ...options, env: mergedEnv });
115
+ },
116
+ };
117
+ }
118
+ }
119
+ //# sourceMappingURL=pupt-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pupt-service.js","sourceRoot":"","sources":["../../src/services/pupt-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ModuleEntry } from "@pupt/lib";
2
+ import type { Config } from "../types/config.js";
3
+ import type { ReviewData, ReviewOptions } from "../types/review.js";
4
+ export declare class ReviewDataBuilder {
5
+ private config;
6
+ private historyManager;
7
+ private puptService;
8
+ private annotationAnalyzer;
9
+ constructor(config: Config & {
10
+ modules?: ModuleEntry[];
11
+ });
12
+ buildReviewData(options: ReviewOptions): Promise<ReviewData>;
13
+ private filterBySince;
14
+ private parseSinceDate;
15
+ private groupByPrompt;
16
+ private buildPromptReviewData;
17
+ private getHistoryFileName;
18
+ private extractPromptName;
19
+ private getAnnotations;
20
+ private calculateUsageStatistics;
21
+ private calculateExecutionOutcomes;
22
+ private calculateMetadata;
23
+ private calculateDataCompleteness;
24
+ }
25
+ //# 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":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAS7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAIR,UAAU,EAEV,aAAa,EAEhB,MAAM,oBAAoB,CAAC;AAG5B,qBAAa,iBAAiB;IAKd,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;gBAE3B,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;KAAE;IAU1D,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAqClE,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,aAAa;YAgBP,qBAAqB;IAmEnC,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,iBAAiB;YAWX,cAAc;IAqD5B,OAAO,CAAC,wBAAwB;IAyEhC,OAAO,CAAC,0BAA0B;IAwBlC,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,yBAAyB;CAuBpC"}