@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,367 @@
1
+ import { spawn } from 'node:child_process';
2
+ import crypto from 'node:crypto';
3
+ import * as path from 'node:path';
4
+ import { confirm } from '@inquirer/prompts';
5
+ import chalk from 'chalk';
6
+ import { pathExists } from 'fs-extra';
7
+ import { ConfigManager } from '../config/config-manager.js';
8
+ import { HistoryManager } from '../history/history-manager.js';
9
+ import { buildModuleEntries } from '../services/module-entry-builder.js';
10
+ import { OutputCaptureService } from '../services/output-capture-service.js';
11
+ import { resolvePrompt } from '../services/prompt-resolver.js';
12
+ import { DateFormats } from '../utils/date-formatter.js';
13
+ import { editorLauncher } from '../utils/editor.js';
14
+ import { errors } from '../utils/errors.js';
15
+ import { logger } from '../utils/logger.js';
16
+ import { getToolByCommand, isInteractiveTUI } from '../utils/tool-detection.js';
17
+ export function parseRunArgs(args) {
18
+ const separatorIndex = args.indexOf('--');
19
+ if (separatorIndex === -1) {
20
+ // No separator, all args go to tool
21
+ return {
22
+ tool: args[0],
23
+ toolArgs: args.slice(1),
24
+ extraArgs: []
25
+ };
26
+ }
27
+ // Split at separator
28
+ const beforeSeparator = args.slice(0, separatorIndex);
29
+ const afterSeparator = args.slice(separatorIndex + 1);
30
+ return {
31
+ tool: beforeSeparator[0],
32
+ toolArgs: beforeSeparator.slice(1),
33
+ extraArgs: afterSeparator
34
+ };
35
+ }
36
+ export async function runCommand(args, options) {
37
+ // Capture start timestamp for history
38
+ const startTimestamp = new Date();
39
+ // Generate filename components once for synchronized naming
40
+ const dateStr = DateFormats.YYYYMMDD(startTimestamp);
41
+ const hours = String(startTimestamp.getHours()).padStart(2, '0');
42
+ const minutes = String(startTimestamp.getMinutes()).padStart(2, '0');
43
+ const seconds = String(startTimestamp.getSeconds()).padStart(2, '0');
44
+ const timeStr = `${hours}${minutes}${seconds}`;
45
+ const randomSuffix = crypto.randomBytes(4).toString('hex');
46
+ // Load configuration
47
+ const configResult = await ConfigManager.loadWithPath();
48
+ const { config } = configResult;
49
+ // Parse arguments
50
+ const { tool, toolArgs, extraArgs } = parseRunArgs(args);
51
+ // Determine which tool to use
52
+ let finalTool;
53
+ let finalArgs;
54
+ if (tool) {
55
+ // Explicit tool specified
56
+ finalTool = tool;
57
+ if (toolArgs.length === 0) {
58
+ // No explicit args — use defaults from SUPPORTED_TOOLS if available
59
+ const toolConfig = getToolByCommand(tool);
60
+ finalArgs = [...(toolConfig?.defaultArgs || []), ...extraArgs];
61
+ }
62
+ else {
63
+ finalArgs = [...toolArgs, ...extraArgs];
64
+ }
65
+ }
66
+ else if (config.defaultCmd && config.defaultCmd.trim() !== '') {
67
+ // Use configured tool
68
+ finalTool = config.defaultCmd;
69
+ finalArgs = [...(config.defaultCmdArgs || []), ...extraArgs];
70
+ }
71
+ else {
72
+ throw errors.toolNotFound('', ['claude', 'copilot', 'chat']);
73
+ }
74
+ let promptResult;
75
+ let templateInfo;
76
+ let exitCode = null;
77
+ // Check if using provided prompt (from autoRun)
78
+ if (options.prompt) {
79
+ promptResult = options.prompt;
80
+ // Use templateInfo if provided
81
+ if (options.templateInfo) {
82
+ ({ templateInfo } = options);
83
+ }
84
+ }
85
+ else if (options.historyIndex) {
86
+ // Validate history is enabled
87
+ if (!config.historyDir) {
88
+ throw errors.featureNotEnabled('History tracking', [
89
+ 'Track all your prompts',
90
+ 'Re-run previous prompts',
91
+ 'Add annotations'
92
+ ]);
93
+ }
94
+ // Load prompt from history
95
+ const historyManager = new HistoryManager(config.historyDir);
96
+ const historyEntry = await historyManager.getHistoryEntry(options.historyIndex);
97
+ if (!historyEntry) {
98
+ const entries = await historyManager.listHistory();
99
+ throw errors.historyNotFound(options.historyIndex, entries.length);
100
+ }
101
+ logger.log(chalk.blue(`\nUsing prompt from history #${options.historyIndex}`));
102
+ logger.log(chalk.dim(`Original: ${historyEntry.title || 'Untitled'}`));
103
+ logger.log(chalk.dim(`From: ${new Date(historyEntry.timestamp).toLocaleString()}\n`));
104
+ promptResult = historyEntry.finalPrompt;
105
+ // Set up templateInfo for saving to history with rerun reference
106
+ templateInfo = {
107
+ templatePath: historyEntry.templatePath,
108
+ templateContent: historyEntry.templateContent,
109
+ variables: new Map(Object.entries(historyEntry.variables)),
110
+ finalPrompt: historyEntry.finalPrompt,
111
+ title: historyEntry.title,
112
+ timestamp: startTimestamp,
113
+ summary: historyEntry.summary,
114
+ // Store the original history filename for rerun reference
115
+ rerunFrom: historyEntry.filename
116
+ };
117
+ }
118
+ else {
119
+ // Normal flow - discover, select, collect inputs, render
120
+ const modules = await buildModuleEntries({
121
+ config,
122
+ cliPromptDirs: options.promptDirOverrides,
123
+ });
124
+ const resolved = await resolvePrompt({
125
+ modules,
126
+ promptName: options.promptName,
127
+ noInteractive: options.noInteractive,
128
+ startTimestamp,
129
+ environment: config.environment,
130
+ });
131
+ ({ text: promptResult, templateInfo } = resolved);
132
+ }
133
+ // Handle coding tool options - always prompt when using default tool with options configured
134
+ if (!tool && config.defaultCmd && config.defaultCmd.trim() !== '' && config.defaultCmdOptions) {
135
+ // Prompt for each option
136
+ const selectedOptions = [];
137
+ if (options.noInteractive) {
138
+ // In no-interactive mode, don't add any optional flags
139
+ logger.log(chalk.dim('Skipping tool options in non-interactive mode'));
140
+ }
141
+ else {
142
+ for (const [question, arg] of Object.entries(config.defaultCmdOptions || {})) {
143
+ const answer = await confirm({
144
+ message: question,
145
+ default: false
146
+ });
147
+ if (answer) {
148
+ selectedOptions.push(arg);
149
+ }
150
+ }
151
+ }
152
+ // Insert options before extra args
153
+ finalArgs = [
154
+ ...(config.defaultCmdArgs || []),
155
+ ...selectedOptions,
156
+ ...extraArgs
157
+ ];
158
+ }
159
+ // Execute tool with prompt
160
+ logger.log(chalk.blue(`\nRunning: ${finalTool} ${finalArgs.join(' ')}`));
161
+ logger.log(chalk.dim('─'.repeat(60)));
162
+ const startTime = Date.now();
163
+ let outputFile;
164
+ let outputSize;
165
+ try {
166
+ // Check if output capture is enabled
167
+ if (config.outputCapture?.enabled && config.historyDir) {
168
+ const isTUI = isInteractiveTUI(finalTool);
169
+ const result = await executeToolWithCapture(finalTool, finalArgs, promptResult, config, {
170
+ dateStr,
171
+ timeStr,
172
+ randomSuffix
173
+ }, isTUI);
174
+ ({ exitCode, outputFile, outputSize } = result);
175
+ }
176
+ else {
177
+ exitCode = await executeTool(finalTool, finalArgs, promptResult, isInteractiveTUI(finalTool));
178
+ }
179
+ }
180
+ finally {
181
+ const executionTime = Date.now() - startTime;
182
+ // Save to history regardless of exit code
183
+ if (config.historyDir && templateInfo && promptResult.trim().length > 0) {
184
+ const historyManager = new HistoryManager(config.historyDir, config.annotationDir);
185
+ await historyManager.savePrompt({
186
+ ...templateInfo,
187
+ outputFile,
188
+ outputSize,
189
+ executionTime,
190
+ exitCode,
191
+ filenameComponents: {
192
+ dateStr,
193
+ timeStr,
194
+ randomSuffix
195
+ }
196
+ });
197
+ }
198
+ // Handle post-run file reviews
199
+ if (templateInfo?.reviewFiles && templateInfo.reviewFiles.length > 0) {
200
+ await handlePostRunReviews(templateInfo.reviewFiles, config, options.isAutoRun || options.noInteractive);
201
+ }
202
+ }
203
+ // Exit with the same code as the tool
204
+ if (exitCode !== null && exitCode !== 0) {
205
+ process.exit(exitCode);
206
+ }
207
+ }
208
+ async function executeToolWithCapture(tool, args, prompt, config, filenameComponents, isTUI = false) {
209
+ const outputCapture = new OutputCaptureService({
210
+ outputDirectory: config.outputCapture?.directory ?? config.historyDir ?? '',
211
+ maxOutputSize: (config.outputCapture?.maxSizeMB || 10) * 1024 * 1024
212
+ });
213
+ // Use provided filename components for synchronized naming
214
+ const { dateStr, timeStr, randomSuffix } = filenameComponents;
215
+ const outputFilename = `${dateStr}-${timeStr}-${randomSuffix}-output.json`;
216
+ const outputPath = path.join(config.outputCapture?.directory ?? config.historyDir ?? '', outputFilename);
217
+ // For interactive TUI tools (Claude, Kiro), pass prompt as argument; for others, use stdin
218
+ let finalArgs = args;
219
+ let finalPrompt = prompt;
220
+ if (isTUI) {
221
+ finalArgs = [...args, prompt];
222
+ finalPrompt = ''; // Don't send via stdin
223
+ }
224
+ const result = await outputCapture.captureCommand(tool, finalArgs, finalPrompt, outputPath);
225
+ return {
226
+ exitCode: result.exitCode,
227
+ outputFile: outputPath,
228
+ outputSize: result.outputSize
229
+ };
230
+ }
231
+ async function executeTool(tool, args, prompt, isTUI = false) {
232
+ // For interactive TUI tools (Claude, Kiro), pass prompt as argument; for others, use stdin
233
+ let finalArgs = args;
234
+ let finalPrompt = prompt;
235
+ if (isTUI) {
236
+ finalArgs = [...args, prompt];
237
+ finalPrompt = ''; // Don't send via stdin
238
+ }
239
+ return new Promise((resolve, reject) => {
240
+ // When running interactive TUI tools, inherit stdin for TTY access
241
+ // For other tools, pipe stdin to send the prompt
242
+ const child = spawn(tool, finalArgs, {
243
+ stdio: [isTUI ? 'inherit' : 'pipe', 'inherit', tool === 'claude' ? 'pipe' : 'inherit']
244
+ });
245
+ let _stderrData = '';
246
+ let errorDetected = false;
247
+ // Capture stderr for Claude-specific error detection
248
+ if (tool === 'claude' && child.stderr) {
249
+ child.stderr.on('data', (data) => {
250
+ const output = data.toString();
251
+ _stderrData += output;
252
+ // Still write to stderr so user sees the output
253
+ process.stderr.write(data);
254
+ // Check for the raw mode error
255
+ if (output.includes('Raw mode is not supported') && output.includes('Ink')) {
256
+ errorDetected = true;
257
+ }
258
+ });
259
+ }
260
+ child.on('error', (error) => {
261
+ if (error.code === 'ENOENT') {
262
+ // Try to suggest similar tools
263
+ const commonTools = ['claude', 'kiro-cli', 'code', 'cat', 'less', 'vim'];
264
+ const suggestions = commonTools.filter(t => t.toLowerCase().includes(tool.toLowerCase()) ||
265
+ tool.toLowerCase().includes(t.toLowerCase()));
266
+ reject(errors.toolNotFound(tool, suggestions));
267
+ }
268
+ else {
269
+ reject(error);
270
+ }
271
+ });
272
+ child.on('close', (code) => {
273
+ // Handle Claude raw mode error specifically
274
+ // Only show error if Claude actually failed (non-zero exit code)
275
+ if (tool === 'claude' && errorDetected && code !== 0) {
276
+ logger.error(chalk.red('\nError: Claude cannot run in interactive mode when launched from pt.'));
277
+ logger.log(chalk.yellow('\nThis typically happens when Claude needs to ask for directory trust permissions.'));
278
+ logger.log(chalk.blue('\nTo fix this:'));
279
+ logger.log(chalk.white('1. Run Claude directly in this directory: ') + chalk.cyan('claude'));
280
+ logger.log(chalk.white('2. When prompted, trust the directory'));
281
+ logger.log(chalk.white('3. Then run your pt command again\n'));
282
+ logger.log(chalk.dim('Alternatively, you can use: ') + chalk.cyan('pt run claude -- --permission-mode acceptEdits'));
283
+ reject(new Error('Claude requires interactive trust setup. Please see instructions above.'));
284
+ return;
285
+ }
286
+ resolve(code);
287
+ });
288
+ // Write prompt to stdin (only if not Claude Code)
289
+ if (finalPrompt) {
290
+ try {
291
+ if (child.stdin) {
292
+ // Only add error handler if stdin has on method (not mocked in tests)
293
+ if (typeof child.stdin.on === 'function') {
294
+ child.stdin.on('error', (error) => {
295
+ // Ignore EPIPE errors which happen when the tool closes stdin early
296
+ const errorCode = error.code;
297
+ if (errorCode !== 'EPIPE') {
298
+ logger.error(`stdin error: ${error}`);
299
+ }
300
+ });
301
+ }
302
+ child.stdin.write(finalPrompt);
303
+ child.stdin.end();
304
+ }
305
+ }
306
+ catch (error) {
307
+ // Ignore EPIPE errors which happen when the tool closes stdin early
308
+ const errorCode = error.code;
309
+ if (errorCode !== 'EPIPE') {
310
+ reject(new Error(`Failed to write prompt to tool: ${error instanceof Error ? error.message : String(error)}`));
311
+ }
312
+ }
313
+ }
314
+ else if (child.stdin) {
315
+ // Close stdin even if we're not writing to it
316
+ child.stdin.end();
317
+ }
318
+ });
319
+ }
320
+ async function handlePostRunReviews(reviewFiles, config, isAutoRun) {
321
+ logger.log(chalk.dim(`\n${'─'.repeat(60)}`));
322
+ for (const { name, value } of reviewFiles) {
323
+ const filePath = String(value);
324
+ // Check if file exists
325
+ const fileExists = await pathExists(filePath);
326
+ if (!fileExists) {
327
+ logger.log(chalk.yellow(`\nFile for '${name}' not found: ${filePath}`));
328
+ continue;
329
+ }
330
+ // In autoRun mode, skip the confirmation prompt and directly open the file
331
+ let shouldReview = false;
332
+ if (isAutoRun) {
333
+ shouldReview = true;
334
+ logger.log(chalk.blue(`\nAuto-reviewing file '${name}' (${filePath})`));
335
+ }
336
+ else {
337
+ // Prompt user to review the file
338
+ shouldReview = await confirm({
339
+ message: `Would you like to review the file '${name}' (${filePath})?`,
340
+ default: true
341
+ });
342
+ }
343
+ if (shouldReview) {
344
+ // Check autoReview setting (default to true)
345
+ const autoReview = config.autoReview ?? true;
346
+ if (autoReview) {
347
+ // Find an editor and open the file
348
+ const editor = await editorLauncher.findEditor();
349
+ if (!editor) {
350
+ logger.log(chalk.yellow('No editor found. Please configure an editor or set autoReview to false.'));
351
+ continue;
352
+ }
353
+ try {
354
+ logger.log(chalk.blue(`Opening ${filePath} in ${editor}...`));
355
+ await editorLauncher.openInEditor(editor, filePath);
356
+ }
357
+ catch (error) {
358
+ logger.error(chalk.red(`Failed to open editor: ${error instanceof Error ? error.message : String(error)}`));
359
+ }
360
+ }
361
+ else {
362
+ logger.log(chalk.dim(`File saved at: ${filePath}`));
363
+ }
364
+ }
365
+ }
366
+ }
367
+ //# 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,2 @@
1
+ export declare function uninstallCommand(name: string): Promise<void>;
2
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AASA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyClE"}
@@ -0,0 +1,45 @@
1
+ import * as path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ import { ConfigManager } from '../config/config-manager.js';
4
+ import { getDataDir } from '../config/global-paths.js';
5
+ import { GlobalPackageManager } from '../services/package-manager.js';
6
+ import { logger } from '../utils/logger.js';
7
+ export async function uninstallCommand(name) {
8
+ if (!name) {
9
+ throw new Error('Please provide a library name to uninstall. Use "pt config" to see installed libraries.');
10
+ }
11
+ const config = await ConfigManager.load();
12
+ const libraries = config.libraries ?? [];
13
+ const libraryIndex = libraries.findIndex(lib => lib.name === name);
14
+ if (libraryIndex === -1) {
15
+ throw new Error(`Library "${name}" not found. Use "pt config" to see installed libraries.`);
16
+ }
17
+ const library = libraries[libraryIndex];
18
+ const dataDir = getDataDir();
19
+ if (library.type === 'npm') {
20
+ // Uninstall npm package
21
+ const packageManager = new GlobalPackageManager(dataDir);
22
+ try {
23
+ await packageManager.uninstall(library.name);
24
+ logger.log(`Removed npm package: ${library.name}`);
25
+ }
26
+ catch (error) {
27
+ const errorMessage = error instanceof Error ? error.message : String(error);
28
+ logger.warn(`Warning: Failed to uninstall npm package: ${errorMessage}`);
29
+ }
30
+ }
31
+ else {
32
+ // Remove git library directory
33
+ const libraryPath = path.join(dataDir, 'libraries', library.name);
34
+ if (await fs.pathExists(libraryPath)) {
35
+ await fs.remove(libraryPath);
36
+ logger.log(`Removed library directory: ${libraryPath}`);
37
+ }
38
+ }
39
+ // Remove library entry from config
40
+ libraries.splice(libraryIndex, 1);
41
+ config.libraries = libraries;
42
+ await ConfigManager.save(config);
43
+ logger.log(`Successfully uninstalled library "${name}".`);
44
+ }
45
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IAEzC,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnE,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,0DAA0D,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,wBAAwB;QACxB,MAAM,cAAc,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,CAAC,GAAG,CAAC,qCAAqC,IAAI,IAAI,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function updateCommand(name?: string): Promise<void>;
2
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AA8EA,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhE"}
@@ -0,0 +1,113 @@
1
+ import * as path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ import simpleGit from 'simple-git';
4
+ import { ConfigManager } from '../config/config-manager.js';
5
+ import { getDataDir } from '../config/global-paths.js';
6
+ import { GlobalPackageManager } from '../services/package-manager.js';
7
+ import { logger } from '../utils/logger.js';
8
+ import { loadConfigFromDirectory } from './install.js';
9
+ async function updateGitLibrary(library) {
10
+ const dataDir = getDataDir();
11
+ const libraryPath = path.join(dataDir, 'libraries', library.name);
12
+ // Check if library directory exists
13
+ if (!await fs.pathExists(libraryPath)) {
14
+ throw new Error(`Library directory not found: ${libraryPath}. Try reinstalling with "pt install ${library.source}".`);
15
+ }
16
+ logger.log(`Updating library "${library.name}"...`);
17
+ // Git pull to update
18
+ const git = simpleGit(libraryPath);
19
+ try {
20
+ await git.pull();
21
+ }
22
+ catch (error) {
23
+ const errorMessage = error instanceof Error ? error.message : String(error);
24
+ throw new Error(`Failed to update library "${library.name}": ${errorMessage}`);
25
+ }
26
+ // Get new commit hash
27
+ let newVersion;
28
+ try {
29
+ const log = await git.log({ maxCount: 1 });
30
+ newVersion = log.latest?.hash?.substring(0, 8);
31
+ }
32
+ catch {
33
+ // Version is optional
34
+ }
35
+ // Re-read library config to detect promptDirs changes
36
+ const newPromptDirs = await loadConfigFromDirectory(libraryPath);
37
+ // Update the library entry
38
+ if (newVersion) {
39
+ library.version = newVersion;
40
+ }
41
+ if (newPromptDirs && newPromptDirs.length > 0) {
42
+ library.promptDirs = newPromptDirs;
43
+ }
44
+ logger.log(`Successfully updated library "${library.name}"${newVersion ? ` to ${newVersion}` : ''}`);
45
+ }
46
+ async function updateNpmLibrary(library) {
47
+ const dataDir = getDataDir();
48
+ const packageManager = new GlobalPackageManager(dataDir);
49
+ logger.log(`Updating package "${library.name}"...`);
50
+ await packageManager.update(library.name);
51
+ // Get new version
52
+ const newVersion = await packageManager.getInstalledVersion(library.name);
53
+ if (newVersion) {
54
+ library.version = newVersion;
55
+ }
56
+ // Re-detect promptDirs in case they changed
57
+ const newPromptDirs = await packageManager.detectPromptDirs(library.name);
58
+ if (newPromptDirs.length > 0) {
59
+ library.promptDirs = newPromptDirs;
60
+ }
61
+ logger.log(`Successfully updated package "${library.name}"${newVersion ? ` to v${newVersion}` : ''}`);
62
+ }
63
+ export async function updateCommand(name) {
64
+ const config = await ConfigManager.load();
65
+ const libraries = config.libraries ?? [];
66
+ if (libraries.length === 0) {
67
+ logger.log('No libraries installed. Use "pt install" to install a library.');
68
+ return;
69
+ }
70
+ if (name) {
71
+ // Update specific library
72
+ const library = libraries.find(lib => lib.name === name);
73
+ if (!library) {
74
+ throw new Error(`Library "${name}" not found. Use "pt config" to see installed libraries.`);
75
+ }
76
+ if (library.type === 'git') {
77
+ await updateGitLibrary(library);
78
+ }
79
+ else if (library.type === 'npm') {
80
+ await updateNpmLibrary(library);
81
+ }
82
+ }
83
+ else {
84
+ // Update all libraries
85
+ let successCount = 0;
86
+ let errorCount = 0;
87
+ for (const library of libraries) {
88
+ try {
89
+ if (library.type === 'git') {
90
+ await updateGitLibrary(library);
91
+ }
92
+ else if (library.type === 'npm') {
93
+ await updateNpmLibrary(library);
94
+ }
95
+ successCount++;
96
+ }
97
+ catch (error) {
98
+ const errorMessage = error instanceof Error ? error.message : String(error);
99
+ logger.error(`Failed to update "${library.name}": ${errorMessage}`);
100
+ errorCount++;
101
+ }
102
+ }
103
+ if (successCount > 0) {
104
+ logger.log(`\nUpdated ${successCount} library${successCount > 1 ? 'ies' : ''}.`);
105
+ }
106
+ if (errorCount > 0) {
107
+ logger.log(`${errorCount} library${errorCount > 1 ? 'ies' : ''} failed to update.`);
108
+ }
109
+ }
110
+ // Save updated config
111
+ await ConfigManager.save(config);
112
+ }
113
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Config } from '../types/config.js';
2
+ interface ConfigResult {
3
+ config: Config;
4
+ filepath?: string;
5
+ configDir?: string;
6
+ }
7
+ declare function load(startDir?: string): Promise<Config>;
8
+ declare function loadWithPath(_startDir?: string): Promise<ConfigResult>;
9
+ /**
10
+ * Save a config object to the global config path.
11
+ */
12
+ declare function save(config: Config): Promise<void>;
13
+ export declare const ConfigManager: {
14
+ load: typeof load;
15
+ loadWithPath: typeof loadWithPath;
16
+ save: typeof save;
17
+ };
18
+ export {};
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":"AAOA,OAAO,EAAE,MAAM,EAAkB,MAAM,oBAAoB,CAAC;AAQ5D,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkLD,iBAAe,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGtD;AAED,iBAAe,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA+CrE;AAED;;GAEG;AACH,iBAAe,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjD;AAED,eAAO,MAAM,aAAa;;;;CAIzB,CAAC"}