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,158 @@
1
+ import { ConfigManager } from '../config/config-manager.js';
2
+ import { ReviewDataBuilder } from '../services/review-data-builder.js';
3
+ import chalk from 'chalk';
4
+ import fs from 'fs-extra';
5
+ import { logger } from '../utils/logger.js';
6
+ export async function reviewCommand(promptName, options = {}) {
7
+ try {
8
+ const config = await ConfigManager.load();
9
+ const builder = new ReviewDataBuilder(config);
10
+ // Build review data
11
+ const reviewData = await builder.buildReviewData({
12
+ promptName,
13
+ since: options.since,
14
+ });
15
+ // Format and output based on options
16
+ if (options.format === 'json') {
17
+ const output = JSON.stringify(reviewData, null, 2);
18
+ if (options.output) {
19
+ await fs.writeFile(options.output, output);
20
+ logger.log(chalk.green(`✓ Review data written to ${options.output}`));
21
+ }
22
+ else {
23
+ logger.log(output);
24
+ }
25
+ }
26
+ else {
27
+ // Default to markdown format
28
+ const report = formatMarkdownReport(reviewData);
29
+ if (options.output) {
30
+ await fs.writeFile(options.output, report);
31
+ logger.log(chalk.green(`✓ Review report written to ${options.output}`));
32
+ }
33
+ else {
34
+ logger.log(report);
35
+ }
36
+ }
37
+ }
38
+ catch (error) {
39
+ logger.error(chalk.red(`Error generating review: ${error instanceof Error ? error.message : String(error)}`));
40
+ if (options.since) {
41
+ logger.error(chalk.yellow('\nHint: Check that the time filter format is correct (e.g., 7d, 24h, 2w)'));
42
+ }
43
+ if (promptName) {
44
+ logger.error(chalk.yellow('\nHint: Verify that the prompt name exists'));
45
+ }
46
+ process.exit(1);
47
+ }
48
+ }
49
+ function formatMarkdownReport(data) {
50
+ const lines = [];
51
+ // Header
52
+ lines.push('# Prompt Review Report');
53
+ lines.push(`*Generated: ${new Date().toISOString()}*`);
54
+ lines.push(`*Analysis Period: ${data.metadata.analysis_period}*`);
55
+ lines.push('');
56
+ // Summary
57
+ lines.push('## Summary');
58
+ lines.push(`- Total Prompts: ${data.metadata.total_prompts}`);
59
+ lines.push(`- Total Executions: ${data.metadata.total_executions}`);
60
+ lines.push('');
61
+ // Data Completeness
62
+ lines.push('## Data Completeness');
63
+ lines.push(`- With Annotations: ${data.metadata.data_completeness.with_annotations}%`);
64
+ lines.push(`- With Output Capture: ${data.metadata.data_completeness.with_output_capture}%`);
65
+ lines.push(`- With Environment Data: ${data.metadata.data_completeness.with_environment_data}%`);
66
+ lines.push('');
67
+ // Prompt Details
68
+ lines.push('## Prompt Analysis');
69
+ lines.push('');
70
+ // Sort prompts by success rate (ascending) to highlight problematic ones first
71
+ const sortedPrompts = [...data.prompts].sort((a, b) => a.usage_statistics.success_rate - b.usage_statistics.success_rate);
72
+ for (const prompt of sortedPrompts) {
73
+ lines.push(`### ${prompt.name}`);
74
+ lines.push(`- **Path**: ${prompt.path}`);
75
+ lines.push(`- **Last Modified**: ${formatDate(prompt.last_modified)}`);
76
+ lines.push(`- **Last Used**: ${formatDate(prompt.usage_statistics.last_used)}`);
77
+ lines.push('');
78
+ // Usage Statistics
79
+ lines.push('#### Usage Statistics');
80
+ lines.push(`- Total Runs: ${prompt.usage_statistics.total_runs}`);
81
+ lines.push(`- Annotated Runs: ${prompt.usage_statistics.annotated_runs}`);
82
+ lines.push(`- **Success Rate: ${(prompt.usage_statistics.success_rate * 100).toFixed(1)}%**`);
83
+ lines.push(`- Average Duration: ${prompt.usage_statistics.avg_duration}`);
84
+ lines.push('');
85
+ // Execution Outcomes
86
+ if (prompt.usage_statistics.annotated_runs > 0) {
87
+ lines.push('#### Execution Outcomes');
88
+ lines.push(`- ${chalk.green('✓ Success')}: ${prompt.execution_outcomes.success}`);
89
+ lines.push(`- ${chalk.yellow('⚠ Partial')}: ${prompt.execution_outcomes.partial}`);
90
+ lines.push(`- ${chalk.red('✗ Failure')}: ${prompt.execution_outcomes.failure}`);
91
+ lines.push('');
92
+ }
93
+ else {
94
+ lines.push('*No annotations available for this prompt*');
95
+ lines.push('');
96
+ }
97
+ // Recent Annotations
98
+ if (prompt.user_annotations.length > 0) {
99
+ lines.push('#### Recent Annotations');
100
+ const recentAnnotations = prompt.user_annotations
101
+ .sort((a, b) => b.timestamp.localeCompare(a.timestamp))
102
+ .slice(0, 3);
103
+ for (const annotation of recentAnnotations) {
104
+ const statusIcon = getStatusIcon(annotation.status);
105
+ lines.push(`- ${formatDate(annotation.timestamp)} - ${statusIcon} ${annotation.status}`);
106
+ if (annotation.notes) {
107
+ const truncatedNotes = annotation.notes.substring(0, 100);
108
+ const notes = annotation.notes.length > 100 ? truncatedNotes + '...' : truncatedNotes;
109
+ lines.push(` *"${notes}"*`);
110
+ }
111
+ }
112
+ lines.push('');
113
+ }
114
+ // Detected Patterns (will be populated in Phase 5)
115
+ if (prompt.detected_patterns.length > 0) {
116
+ lines.push('#### Detected Patterns');
117
+ for (const pattern of prompt.detected_patterns) {
118
+ lines.push(`- **${pattern.pattern_type}** (${pattern.severity}): ${pattern.frequency} occurrences`);
119
+ }
120
+ lines.push('');
121
+ }
122
+ lines.push('---');
123
+ lines.push('');
124
+ }
125
+ // Cross-Prompt Patterns (will be populated in Phase 5)
126
+ if (data.cross_prompt_patterns.length > 0) {
127
+ lines.push('## Cross-Prompt Patterns');
128
+ for (const pattern of data.cross_prompt_patterns) {
129
+ lines.push(`- **${pattern.pattern}**: Affects ${pattern.affected_prompts.length} prompts`);
130
+ lines.push(` - Total Occurrences: ${pattern.total_occurrences}`);
131
+ lines.push(` - Impact: ${pattern.impact_assessment}`);
132
+ }
133
+ lines.push('');
134
+ }
135
+ return lines.join('\n');
136
+ }
137
+ function formatDate(isoDate) {
138
+ try {
139
+ const date = new Date(isoDate);
140
+ return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
141
+ }
142
+ catch {
143
+ return isoDate;
144
+ }
145
+ }
146
+ function getStatusIcon(status) {
147
+ switch (status) {
148
+ case 'success':
149
+ return chalk.green('✓');
150
+ case 'partial':
151
+ return chalk.yellow('⚠');
152
+ case 'failure':
153
+ return chalk.red('✗');
154
+ default:
155
+ return '•';
156
+ }
157
+ }
158
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface RunOptions {
2
+ historyIndex?: number;
3
+ prompt?: string;
4
+ skipPromptSelection?: boolean;
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
+ isAutoRun?: boolean;
19
+ }
20
+ interface ParsedArgs {
21
+ tool: string | undefined;
22
+ toolArgs: string[];
23
+ extraArgs: string[];
24
+ }
25
+ export declare function parseRunArgs(args: string[]): ParsedArgs;
26
+ export declare function runCommand(args: string[], options: RunOptions): Promise<void>;
27
+ export {};
28
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE;QACb,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;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqBvD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmOnF"}
@@ -0,0 +1,340 @@
1
+ import { ConfigManager } from '../config/config-manager.js';
2
+ import { PromptManager } from '../prompts/prompt-manager.js';
3
+ import { InteractiveSearch } from '../ui/interactive-search.js';
4
+ import { TemplateEngine } from '../template/template-engine.js';
5
+ import { HistoryManager } from '../history/history-manager.js';
6
+ import { spawn } from 'node:child_process';
7
+ import chalk from 'chalk';
8
+ import { confirm } from '@inquirer/prompts';
9
+ import { errors } from '../utils/errors.js';
10
+ import { logger } from '../utils/logger.js';
11
+ import * as path from 'node:path';
12
+ import { pathExists } from 'fs-extra';
13
+ import { editorLauncher } from '../utils/editor.js';
14
+ import { OutputCaptureService } from '../services/output-capture-service.js';
15
+ import { AutoAnnotationService } from '../services/auto-annotation-service.js';
16
+ import { DateFormats } from '../utils/date-formatter.js';
17
+ import crypto from 'node:crypto';
18
+ export function parseRunArgs(args) {
19
+ const separatorIndex = args.indexOf('--');
20
+ if (separatorIndex === -1) {
21
+ // No separator, all args go to tool
22
+ return {
23
+ tool: args[0],
24
+ toolArgs: args.slice(1),
25
+ extraArgs: []
26
+ };
27
+ }
28
+ // Split at separator
29
+ const beforeSeparator = args.slice(0, separatorIndex);
30
+ const afterSeparator = args.slice(separatorIndex + 1);
31
+ return {
32
+ tool: beforeSeparator[0],
33
+ toolArgs: beforeSeparator.slice(1),
34
+ extraArgs: afterSeparator
35
+ };
36
+ }
37
+ export async function runCommand(args, options) {
38
+ // Capture start timestamp for history
39
+ const startTimestamp = new Date();
40
+ // Generate filename components once for synchronized naming
41
+ const dateStr = DateFormats.YYYYMMDD(startTimestamp);
42
+ const hours = String(startTimestamp.getHours()).padStart(2, '0');
43
+ const minutes = String(startTimestamp.getMinutes()).padStart(2, '0');
44
+ const seconds = String(startTimestamp.getSeconds()).padStart(2, '0');
45
+ const timeStr = `${hours}${minutes}${seconds}`;
46
+ const randomSuffix = crypto.randomBytes(4).toString('hex');
47
+ // Load configuration
48
+ const configResult = await ConfigManager.loadWithPath();
49
+ const config = configResult.config;
50
+ const configDir = configResult.filepath ? path.dirname(configResult.filepath) : undefined;
51
+ // Parse arguments
52
+ const { tool, toolArgs, extraArgs } = parseRunArgs(args);
53
+ // Determine which tool to use
54
+ let finalTool;
55
+ let finalArgs;
56
+ if (tool) {
57
+ // Explicit tool specified
58
+ finalTool = tool;
59
+ finalArgs = [...toolArgs, ...extraArgs];
60
+ }
61
+ else if ((config.defaultCmd && config.defaultCmd.trim() !== '') || (config.codingTool && config.codingTool.trim() !== '')) {
62
+ // Use configured tool (prefer new field name)
63
+ finalTool = (config.defaultCmd && config.defaultCmd.trim() !== '' ? config.defaultCmd : config.codingTool);
64
+ finalArgs = [...(config.defaultCmdArgs || config.codingToolArgs || []), ...extraArgs];
65
+ }
66
+ else {
67
+ throw errors.toolNotFound('', ['claude', 'copilot', 'chat']);
68
+ }
69
+ let promptResult;
70
+ let templateInfo;
71
+ let exitCode = null;
72
+ // Check if using provided prompt (from autoRun)
73
+ if (options.prompt) {
74
+ promptResult = options.prompt;
75
+ // Use templateInfo if provided
76
+ if (options.templateInfo) {
77
+ templateInfo = options.templateInfo;
78
+ }
79
+ }
80
+ else if (options.historyIndex) {
81
+ // Validate history is enabled
82
+ if (!config.historyDir) {
83
+ throw errors.featureNotEnabled('History tracking', [
84
+ 'Track all your prompts',
85
+ 'Re-run previous prompts',
86
+ 'Add annotations'
87
+ ]);
88
+ }
89
+ // Load prompt from history
90
+ const historyManager = new HistoryManager(config.historyDir);
91
+ const historyEntry = await historyManager.getHistoryEntry(options.historyIndex);
92
+ if (!historyEntry) {
93
+ const entries = await historyManager.listHistory();
94
+ throw errors.historyNotFound(options.historyIndex, entries.length);
95
+ }
96
+ logger.log(chalk.blue(`\nUsing prompt from history #${options.historyIndex}`));
97
+ logger.log(chalk.dim(`Original: ${historyEntry.title || 'Untitled'}`));
98
+ logger.log(chalk.dim(`From: ${new Date(historyEntry.timestamp).toLocaleString()}\n`));
99
+ promptResult = historyEntry.finalPrompt;
100
+ }
101
+ else {
102
+ // Normal flow - discover and process prompts
103
+ const promptManager = new PromptManager(config.promptDirs);
104
+ const prompts = await promptManager.discoverPrompts();
105
+ if (prompts.length === 0) {
106
+ throw errors.noPromptsFound(config.promptDirs);
107
+ }
108
+ // Interactive search
109
+ const search = new InteractiveSearch();
110
+ const selected = await search.selectPrompt(prompts);
111
+ logger.log(chalk.blue(`\nProcessing: ${selected.title}`));
112
+ logger.log(chalk.dim(`Location: ${selected.path}\n`));
113
+ // Process template
114
+ const engine = new TemplateEngine(config, configDir);
115
+ promptResult = await engine.processTemplate(selected.content, selected);
116
+ // Store template info for history saving after successful execution
117
+ templateInfo = {
118
+ templatePath: selected.path,
119
+ templateContent: selected.content,
120
+ variables: engine.getContext().getMaskedValues(),
121
+ finalPrompt: promptResult,
122
+ title: selected.title,
123
+ timestamp: startTimestamp,
124
+ summary: selected.summary,
125
+ reviewFiles: engine.getContext().getVariablesByType('reviewFile')
126
+ };
127
+ }
128
+ // Handle coding tool options - always prompt when using default tool with options configured
129
+ if (!tool && ((config.defaultCmd && config.defaultCmd.trim() !== '') || (config.codingTool && config.codingTool.trim() !== '')) && (config.defaultCmdOptions || config.codingToolOptions)) {
130
+ // Prompt for each option
131
+ const selectedOptions = [];
132
+ for (const [question, arg] of Object.entries(config.defaultCmdOptions || config.codingToolOptions || {})) {
133
+ const answer = await confirm({
134
+ message: question,
135
+ default: false
136
+ });
137
+ if (answer) {
138
+ selectedOptions.push(arg);
139
+ }
140
+ }
141
+ // Insert options before extra args
142
+ finalArgs = [
143
+ ...(config.defaultCmdArgs || config.codingToolArgs || []),
144
+ ...selectedOptions,
145
+ ...extraArgs
146
+ ];
147
+ }
148
+ // Execute tool with prompt
149
+ logger.log(chalk.blue(`\nRunning: ${finalTool} ${finalArgs.join(' ')}`));
150
+ logger.log(chalk.dim('─'.repeat(60)));
151
+ const startTime = Date.now();
152
+ let outputFile;
153
+ let outputSize;
154
+ try {
155
+ // Check if output capture is enabled
156
+ if (config.outputCapture?.enabled && config.historyDir) {
157
+ const result = await executeToolWithCapture(finalTool, finalArgs, promptResult, config, {
158
+ dateStr,
159
+ timeStr,
160
+ randomSuffix
161
+ });
162
+ exitCode = result.exitCode;
163
+ outputFile = result.outputFile;
164
+ outputSize = result.outputSize;
165
+ }
166
+ else {
167
+ exitCode = await executeTool(finalTool, finalArgs, promptResult);
168
+ }
169
+ }
170
+ finally {
171
+ const executionTime = Date.now() - startTime;
172
+ // Save to history regardless of exit code
173
+ if (config.historyDir && templateInfo && promptResult.trim().length > 0) {
174
+ const historyManager = new HistoryManager(config.historyDir, config.annotationDir);
175
+ const historyFilename = await historyManager.savePrompt({
176
+ ...templateInfo,
177
+ outputFile,
178
+ outputSize,
179
+ executionTime,
180
+ exitCode,
181
+ filenameComponents: {
182
+ dateStr,
183
+ timeStr,
184
+ randomSuffix
185
+ }
186
+ });
187
+ // Trigger auto-annotation if configured
188
+ if (config.autoAnnotate?.enabled && historyFilename) {
189
+ const promptManager = new PromptManager(config.promptDirs || []);
190
+ const autoAnnotationService = new AutoAnnotationService(config, promptManager, historyManager);
191
+ // Extract prompt name from template path
192
+ const promptName = path.basename(templateInfo.templatePath, path.extname(templateInfo.templatePath));
193
+ if (autoAnnotationService.shouldAutoAnnotate(promptName)) {
194
+ // Create enhanced history entry for auto-annotation
195
+ const enhancedEntry = {
196
+ timestamp: startTimestamp.toISOString(),
197
+ templatePath: templateInfo.templatePath,
198
+ templateContent: templateInfo.templateContent,
199
+ variables: Object.fromEntries(templateInfo.variables),
200
+ finalPrompt: templateInfo.finalPrompt,
201
+ title: templateInfo.title,
202
+ summary: templateInfo.summary,
203
+ filename: historyFilename,
204
+ execution: {
205
+ start_time: startTimestamp.toISOString(),
206
+ end_time: new Date().toISOString(),
207
+ duration: `${executionTime}ms`,
208
+ exit_code: exitCode,
209
+ command: `${finalTool} ${finalArgs.join(' ')}`,
210
+ output_file: outputFile,
211
+ output_size: outputSize,
212
+ },
213
+ };
214
+ // Run auto-annotation asynchronously
215
+ autoAnnotationService.analyzeExecution(enhancedEntry).catch(error => {
216
+ logger.debug('Auto-annotation failed:', error);
217
+ });
218
+ }
219
+ }
220
+ }
221
+ // Handle post-run file reviews
222
+ if (templateInfo?.reviewFiles && templateInfo.reviewFiles.length > 0) {
223
+ await handlePostRunReviews(templateInfo.reviewFiles, config, options.isAutoRun);
224
+ }
225
+ }
226
+ // Exit with the same code as the tool
227
+ if (exitCode !== null && exitCode !== 0) {
228
+ process.exit(exitCode);
229
+ }
230
+ }
231
+ async function executeToolWithCapture(tool, args, prompt, config, filenameComponents) {
232
+ const outputCapture = new OutputCaptureService({
233
+ outputDirectory: config.outputCapture?.directory || config.historyDir,
234
+ maxOutputSize: (config.outputCapture?.maxSizeMB || 10) * 1024 * 1024
235
+ });
236
+ // Use provided filename components for synchronized naming
237
+ const { dateStr, timeStr, randomSuffix } = filenameComponents;
238
+ const outputFilename = `${dateStr}-${timeStr}-${randomSuffix}-output.txt`;
239
+ const outputPath = path.join(config.outputCapture?.directory || config.historyDir, outputFilename);
240
+ const result = await outputCapture.captureCommand(tool, args, prompt, outputPath);
241
+ return {
242
+ exitCode: result.exitCode,
243
+ outputFile: outputPath,
244
+ outputSize: result.outputSize
245
+ };
246
+ }
247
+ async function executeTool(tool, args, prompt) {
248
+ return new Promise((resolve, reject) => {
249
+ const child = spawn(tool, args, {
250
+ stdio: ['pipe', 'inherit', 'inherit']
251
+ });
252
+ child.on('error', (error) => {
253
+ if (error.code === 'ENOENT') {
254
+ // Try to suggest similar tools
255
+ const commonTools = ['claude', 'code', 'cat', 'less', 'vim'];
256
+ const suggestions = commonTools.filter(t => t.toLowerCase().includes(tool.toLowerCase()) ||
257
+ tool.toLowerCase().includes(t.toLowerCase()));
258
+ reject(errors.toolNotFound(tool, suggestions));
259
+ }
260
+ else {
261
+ reject(error);
262
+ }
263
+ });
264
+ child.on('close', (code) => {
265
+ resolve(code);
266
+ });
267
+ // Write prompt to stdin
268
+ try {
269
+ if (child.stdin) {
270
+ // Only add error handler if stdin has on method (not mocked in tests)
271
+ if (typeof child.stdin.on === 'function') {
272
+ child.stdin.on('error', (error) => {
273
+ // Ignore EPIPE errors which happen when the tool closes stdin early
274
+ const errorCode = error.code;
275
+ if (errorCode !== 'EPIPE') {
276
+ logger.error(`stdin error: ${error}`);
277
+ }
278
+ });
279
+ }
280
+ child.stdin.write(prompt);
281
+ child.stdin.end();
282
+ }
283
+ }
284
+ catch (error) {
285
+ // Ignore EPIPE errors which happen when the tool closes stdin early
286
+ const errorCode = error.code;
287
+ if (errorCode !== 'EPIPE') {
288
+ reject(new Error(`Failed to write prompt to tool: ${error instanceof Error ? error.message : String(error)}`));
289
+ }
290
+ }
291
+ });
292
+ }
293
+ async function handlePostRunReviews(reviewFiles, config, isAutoRun) {
294
+ logger.log(chalk.dim('\n' + '─'.repeat(60)));
295
+ for (const { name, value } of reviewFiles) {
296
+ const filePath = String(value);
297
+ // Check if file exists
298
+ const fileExists = await pathExists(filePath);
299
+ if (!fileExists) {
300
+ logger.log(chalk.yellow(`\nFile for '${name}' not found: ${filePath}`));
301
+ continue;
302
+ }
303
+ // In autoRun mode, skip the confirmation prompt and directly open the file
304
+ let shouldReview = false;
305
+ if (isAutoRun) {
306
+ shouldReview = true;
307
+ logger.log(chalk.blue(`\nAuto-reviewing file '${name}' (${filePath})`));
308
+ }
309
+ else {
310
+ // Prompt user to review the file
311
+ shouldReview = await confirm({
312
+ message: `Would you like to review the file '${name}' (${filePath})?`,
313
+ default: true
314
+ });
315
+ }
316
+ if (shouldReview) {
317
+ // Check autoReview setting (default to true)
318
+ const autoReview = config.autoReview ?? true;
319
+ if (autoReview) {
320
+ // Find an editor and open the file
321
+ const editor = await editorLauncher.findEditor();
322
+ if (!editor) {
323
+ logger.log(chalk.yellow('No editor found. Please configure an editor or set autoReview to false.'));
324
+ continue;
325
+ }
326
+ try {
327
+ logger.log(chalk.blue(`Opening ${filePath} in ${editor}...`));
328
+ await editorLauncher.openInEditor(editor, filePath);
329
+ }
330
+ catch (error) {
331
+ logger.error(chalk.red(`Failed to open editor: ${error instanceof Error ? error.message : String(error)}`));
332
+ }
333
+ }
334
+ else {
335
+ logger.log(chalk.dim(`File saved at: ${filePath}`));
336
+ }
337
+ }
338
+ }
339
+ }
340
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Config } from '../types/config.js';
2
+ export interface ConfigResult {
3
+ config: Config;
4
+ filepath?: string;
5
+ configDir?: string;
6
+ }
7
+ export declare class ConfigManager {
8
+ private static getExplorer;
9
+ static checkForOldConfigFiles(dir?: string): Promise<string[]>;
10
+ static renameOldConfigFile(oldPath: string): Promise<string>;
11
+ static load(startDir?: string): Promise<Config>;
12
+ static loadWithPath(startDir?: string): Promise<ConfigResult>;
13
+ private static validateConfig;
14
+ private static migrateConfig;
15
+ private static mergeConfigs;
16
+ private static expandPaths;
17
+ private static expandPath;
18
+ }
19
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAkB,MAAM,oBAAoB,CAAC;AAW5D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,WAAW;WAeb,sBAAsB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;WActE,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAgCrD,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAKxC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoFnE,OAAO,CAAC,MAAM,CAAC,cAAc;mBAyCR,aAAa;IA+DlC,OAAO,CAAC,MAAM,CAAC,YAAY;IAmH3B,OAAO,CAAC,MAAM,CAAC,WAAW;IAuD1B,OAAO,CAAC,MAAM,CAAC,UAAU;CAkB1B"}