@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
package/dist/cli.js ADDED
@@ -0,0 +1,435 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import chalk from 'chalk';
6
+ import { program } from 'commander';
7
+ import { addCommand } from './commands/add.js';
8
+ import { annotateCommand } from './commands/annotate.js';
9
+ import { cacheCommand } from './commands/cache.js';
10
+ import { configCommand } from './commands/config.js';
11
+ import { editCommand } from './commands/edit.js';
12
+ import { helpCommand } from './commands/help.js';
13
+ import { historyCommand } from './commands/history.js';
14
+ import { initCommand } from './commands/init.js';
15
+ import { installCommand } from './commands/install.js';
16
+ import { reviewCommand } from './commands/review.js';
17
+ import { runCommand } from './commands/run.js';
18
+ import { uninstallCommand } from './commands/uninstall.js';
19
+ import { updateCommand } from './commands/update.js';
20
+ import { ConfigManager } from './config/config-manager.js';
21
+ import { HistoryManager } from './history/history-manager.js';
22
+ import { buildModuleEntries } from './services/module-entry-builder.js';
23
+ import { resolvePrompt } from './services/prompt-resolver.js';
24
+ import { displayError, errors } from './utils/errors.js';
25
+ import { logger } from './utils/logger.js';
26
+ // Commander.js helper for repeatable options (e.g. -d path1 -d path2)
27
+ function collect(val, acc) {
28
+ return [...acc, val];
29
+ }
30
+ const __filename = fileURLToPath(import.meta.url);
31
+ const __dirname = dirname(__filename);
32
+ const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
33
+ // List of valid commands for suggestions
34
+ const VALID_COMMANDS = ['init', 'config', 'cache', 'history', 'add', 'edit', 'run', 'annotate', 'install', 'update', 'uninstall', 'review', 'help'];
35
+ // Calculate Levenshtein distance between two strings
36
+ function levenshteinDistance(a, b) {
37
+ const matrix = [];
38
+ for (let i = 0; i <= b.length; i++) {
39
+ matrix[i] = [i];
40
+ }
41
+ for (let j = 0; j <= a.length; j++) {
42
+ matrix[0][j] = j;
43
+ }
44
+ for (let i = 1; i <= b.length; i++) {
45
+ for (let j = 1; j <= a.length; j++) {
46
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
47
+ matrix[i][j] = matrix[i - 1][j - 1];
48
+ }
49
+ else {
50
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
51
+ matrix[i][j - 1] + 1, // insertion
52
+ matrix[i - 1][j] + 1 // deletion
53
+ );
54
+ }
55
+ }
56
+ }
57
+ return matrix[b.length][a.length];
58
+ }
59
+ // Find similar commands based on Levenshtein distance
60
+ function findSimilarCommands(input, maxDistance = 3) {
61
+ return VALID_COMMANDS
62
+ .map(cmd => ({ cmd, distance: levenshteinDistance(input.toLowerCase(), cmd.toLowerCase()) }))
63
+ .filter(({ distance }) => distance <= maxDistance)
64
+ .sort((a, b) => a.distance - b.distance)
65
+ .map(({ cmd }) => cmd);
66
+ }
67
+ // Ensure terminal is restored on exit
68
+ function ensureTerminalCleanup() {
69
+ try {
70
+ if (process.stdin.isTTY && process.stdin.setRawMode) {
71
+ process.stdin.setRawMode(false);
72
+ }
73
+ }
74
+ catch {
75
+ // Ignore errors - terminal might already be in correct state
76
+ }
77
+ }
78
+ // Set up cleanup handlers
79
+ process.on('exit', ensureTerminalCleanup);
80
+ process.on('SIGINT', () => {
81
+ ensureTerminalCleanup();
82
+ process.exit(130); // Standard exit code for SIGINT
83
+ });
84
+ process.on('SIGTERM', () => {
85
+ ensureTerminalCleanup();
86
+ process.exit(143); // Standard exit code for SIGTERM
87
+ });
88
+ program
89
+ .name('pt')
90
+ .description('CLI tool for managing AI prompts')
91
+ .version(packageJson.version)
92
+ .argument('[command]', 'command to run')
93
+ .option('-d, --prompt-dir <path>', 'Additional prompt directory (repeatable)', collect, [])
94
+ .allowUnknownOption(true)
95
+ .action(async (command, options) => {
96
+ // If a command-like argument is provided, it's likely a typo
97
+ if (command && VALID_COMMANDS.length > 0) {
98
+ // Check if it looks like a command (not a flag)
99
+ if (!command.startsWith('-')) {
100
+ const similarCommands = findSimilarCommands(command);
101
+ displayError(errors.commandNotFound(command, similarCommands, VALID_COMMANDS));
102
+ process.exit(1);
103
+ }
104
+ }
105
+ try {
106
+ // Load configuration
107
+ const configResult = await ConfigManager.loadWithPath();
108
+ const { config } = configResult;
109
+ // Capture timestamp at start of prompt processing
110
+ const startTimestamp = new Date();
111
+ // Build module entries from config + CLI overrides
112
+ const modules = await buildModuleEntries({
113
+ config,
114
+ cliPromptDirs: options.promptDir,
115
+ });
116
+ // Discover, select, collect inputs, and render
117
+ const resolved = await resolvePrompt({
118
+ modules,
119
+ startTimestamp,
120
+ environment: config.environment,
121
+ });
122
+ const result = resolved.text;
123
+ // Display result
124
+ logger.log(chalk.green(`\n${'='.repeat(60)}`));
125
+ logger.log(chalk.bold('Generated Prompt:'));
126
+ logger.log(chalk.green(`${'='.repeat(60)}\n`));
127
+ logger.log(result);
128
+ logger.log(chalk.green(`\n${'='.repeat(60)}`));
129
+ // Check if autoRun is enabled
130
+ const willAutoRun = config.autoRun && config.defaultCmd && config.defaultCmd.trim() !== '';
131
+ // Save to history if configured and NOT autoRunning (autoRun saves its own history)
132
+ if (config.historyDir && !willAutoRun) {
133
+ const historyManager = new HistoryManager(config.historyDir, config.annotationDir);
134
+ await historyManager.savePrompt({
135
+ templatePath: resolved.templateInfo.templatePath,
136
+ templateContent: resolved.templateInfo.templateContent,
137
+ variables: resolved.templateInfo.variables,
138
+ finalPrompt: result,
139
+ title: resolved.templateInfo.title,
140
+ timestamp: startTimestamp
141
+ });
142
+ logger.log(chalk.dim(`\nSaved to history: ${config.historyDir}`));
143
+ }
144
+ // Execute autoRun if enabled
145
+ if (willAutoRun) {
146
+ // Use the run command implementation
147
+ await runCommand([], {
148
+ prompt: result,
149
+ templateInfo: resolved.templateInfo,
150
+ isAutoRun: true,
151
+ promptDirOverrides: options.promptDir,
152
+ });
153
+ }
154
+ }
155
+ catch (error) {
156
+ if (error instanceof Error && error.message.includes('User force closed')) {
157
+ // User cancelled
158
+ process.exit(0);
159
+ }
160
+ displayError(error);
161
+ process.exit(1);
162
+ }
163
+ });
164
+ // Add init command
165
+ program
166
+ .command('init')
167
+ .description('Initialize a new PUPT configuration')
168
+ .action(async () => {
169
+ try {
170
+ await initCommand();
171
+ }
172
+ catch (error) {
173
+ displayError(error);
174
+ process.exit(1);
175
+ }
176
+ });
177
+ // Config command
178
+ program
179
+ .command('config')
180
+ .description('Show current configuration')
181
+ .option('-s, --show', 'Show current configuration with resolved paths')
182
+ .addHelpText('after', `
183
+ Examples:
184
+ pt config # Show current configuration
185
+ pt config --show # Same as above
186
+ `)
187
+ .action(async (options) => {
188
+ try {
189
+ await configCommand({
190
+ show: options.show,
191
+ });
192
+ }
193
+ catch (error) {
194
+ displayError(error);
195
+ process.exit(1);
196
+ }
197
+ });
198
+ // Add history command
199
+ program
200
+ .command('history [entry]')
201
+ .description('Show prompt execution history or a specific entry')
202
+ .option('-l, --limit <number>', 'Number of entries to show', '20')
203
+ .option('-a, --all', 'Show all history entries')
204
+ .option('-r, --result <number>', 'Show history entry with its output')
205
+ .option('--annotations', 'Show annotations for the history entry')
206
+ .option('-d, --dir <path>', 'Filter history by directory (git dir or working dir)')
207
+ .option('--all-dir', 'Show history from all directories (disable default filtering)')
208
+ .action(async (entry, options) => {
209
+ try {
210
+ await historyCommand({
211
+ limit: options.all ? undefined : parseInt(options.limit),
212
+ all: options.all,
213
+ entry: entry ? parseInt(entry) : undefined,
214
+ result: options.result ? parseInt(options.result) : undefined,
215
+ annotations: options.annotations,
216
+ dir: options.dir,
217
+ allDir: options.allDir
218
+ });
219
+ }
220
+ catch (error) {
221
+ displayError(error);
222
+ process.exit(1);
223
+ }
224
+ });
225
+ // Add command
226
+ program
227
+ .command('add')
228
+ .description('Create a new prompt interactively')
229
+ .option('-g, --global', 'Save to global prompt directory instead of local .prompts/')
230
+ .action(async (options) => {
231
+ try {
232
+ await addCommand({ global: options.global });
233
+ }
234
+ catch (error) {
235
+ displayError(error);
236
+ process.exit(1);
237
+ }
238
+ });
239
+ // Edit command
240
+ program
241
+ .command('edit')
242
+ .description('Edit an existing prompt in your editor')
243
+ .action(async () => {
244
+ try {
245
+ await editCommand();
246
+ }
247
+ catch (error) {
248
+ displayError(error);
249
+ process.exit(1);
250
+ }
251
+ });
252
+ // Run command
253
+ program
254
+ .command('run [tool] [args...]')
255
+ .description('Execute a prompt with an external tool')
256
+ .usage('[tool] [args...] [-- tool-specific-args]')
257
+ .option('-h, --history <number>', 'Use prompt from history by number')
258
+ .option('-p, --prompt <name>', 'Use specified prompt by title or filename')
259
+ .option('-d, --prompt-dir <path>', 'Additional prompt directory (repeatable)', collect, [])
260
+ .option('--no-interactive', 'Use default values for all prompt inputs')
261
+ .option('--no-cache', 'Bypass module cache for URL/GitHub imports')
262
+ .helpOption('--help', 'Display help for run command')
263
+ .addHelpText('after', `
264
+ Examples:
265
+ pt run # Use configured coding tool
266
+ pt run cat # Pipe prompt to cat
267
+ pt run code - # Open in VS Code
268
+ pt run claude # Send to Claude
269
+ pt run -- --continue # Pass args to configured tool
270
+ pt run npm test -- --coverage # Complex command with args
271
+ pt run -h 3 # Re-run prompt from history #3
272
+ pt run -h 1 claude # Send history #1 to claude
273
+ pt run -p api-client # Run specific prompt by name
274
+ pt run -p api-client --no-interactive # Run with defaults only
275
+ `)
276
+ .action(async (tool, args, options) => {
277
+ try {
278
+ // Combine tool and args into single array
279
+ const allArgs = tool ? [tool, ...args] : args;
280
+ await runCommand(allArgs, {
281
+ historyIndex: options.history ? parseInt(options.history) : undefined,
282
+ promptName: options.prompt,
283
+ promptDirOverrides: options.promptDir,
284
+ noInteractive: options.interactive === false,
285
+ noCache: options.cache === false,
286
+ });
287
+ }
288
+ catch (error) {
289
+ displayError(error);
290
+ process.exit(1);
291
+ }
292
+ });
293
+ // Annotate command
294
+ program
295
+ .command('annotate [history-number]')
296
+ .description('Add notes to a history entry')
297
+ .action(async (historyNumber) => {
298
+ try {
299
+ await annotateCommand(historyNumber ? parseInt(historyNumber) : undefined);
300
+ }
301
+ catch (error) {
302
+ displayError(error);
303
+ process.exit(1);
304
+ }
305
+ });
306
+ // Install command
307
+ program
308
+ .command('install <source>')
309
+ .description('Install prompts from a git repository or npm package')
310
+ .option('-n, --name <name>', 'Custom name for the installed library')
311
+ .addHelpText('after', `
312
+ Examples:
313
+ pt install https://github.com/user/prompts # Install from GitHub
314
+ pt install git@github.com:user/prompts.git # Install via SSH
315
+ pt install https://github.com/user/repo -n mylib # Install with custom name
316
+ pt install @org/prompts # Install from npm
317
+ `)
318
+ .action(async (source, options) => {
319
+ try {
320
+ await installCommand(source, { name: options.name });
321
+ }
322
+ catch (error) {
323
+ displayError(error);
324
+ process.exit(1);
325
+ }
326
+ });
327
+ // Update command
328
+ program
329
+ .command('update [name]')
330
+ .description('Update installed prompt libraries')
331
+ .addHelpText('after', `
332
+ Examples:
333
+ pt update # Update all installed libraries
334
+ pt update my-prompts # Update a specific library
335
+ `)
336
+ .action(async (name) => {
337
+ try {
338
+ await updateCommand(name);
339
+ }
340
+ catch (error) {
341
+ displayError(error);
342
+ process.exit(1);
343
+ }
344
+ });
345
+ // Uninstall command
346
+ program
347
+ .command('uninstall <name>')
348
+ .description('Remove an installed prompt library')
349
+ .addHelpText('after', `
350
+ Examples:
351
+ pt uninstall my-prompts # Remove a library
352
+ `)
353
+ .action(async (name) => {
354
+ try {
355
+ await uninstallCommand(name);
356
+ }
357
+ catch (error) {
358
+ displayError(error);
359
+ process.exit(1);
360
+ }
361
+ });
362
+ // Cache command
363
+ program
364
+ .command('cache')
365
+ .description('Manage the module cache for URL/GitHub imports')
366
+ .option('-c, --clear', 'Clear all cached modules')
367
+ .option('-u, --url <url>', 'Target a specific URL (use with --clear)')
368
+ .addHelpText('after', `
369
+ Examples:
370
+ pt cache # Show cache statistics
371
+ pt cache --clear # Clear all cached modules
372
+ pt cache --clear --url <url> # Clear cache for a specific URL
373
+ `)
374
+ .action(async (options) => {
375
+ try {
376
+ await cacheCommand({
377
+ clear: options.clear,
378
+ url: options.url,
379
+ });
380
+ }
381
+ catch (error) {
382
+ displayError(error);
383
+ process.exit(1);
384
+ }
385
+ });
386
+ // Review command
387
+ program
388
+ .command('review [prompt-name]')
389
+ .description('Review prompt usage patterns and generate improvement suggestions')
390
+ .option('-f, --format <format>', 'Output format (json|markdown)', 'markdown')
391
+ .option('-s, --since <time>', 'Time filter (e.g., 7d, 24h, 2w)', '30d')
392
+ .option('-o, --output <file>', 'Write output to file instead of stdout')
393
+ .addHelpText('after', `
394
+ Examples:
395
+ pt review # Review all prompts from last 30 days
396
+ pt review api-client # Review specific prompt
397
+ pt review -s 7d # Review last 7 days
398
+ pt review -f json # Output as JSON
399
+ pt review -o review.json # Save to file
400
+ `)
401
+ .action(async (promptName, options) => {
402
+ try {
403
+ await reviewCommand(promptName, {
404
+ format: options.format,
405
+ since: options.since,
406
+ output: options.output
407
+ });
408
+ }
409
+ catch (error) {
410
+ displayError(error);
411
+ process.exit(1);
412
+ }
413
+ });
414
+ // Help command
415
+ program
416
+ .command('help [command]')
417
+ .description('Display help information for a command')
418
+ .action(async (command) => {
419
+ try {
420
+ await helpCommand(command);
421
+ }
422
+ catch (error) {
423
+ displayError(error);
424
+ process.exit(1);
425
+ }
426
+ });
427
+ // Handle unknown commands
428
+ program.on('command:*', (operands) => {
429
+ const unknownCommand = operands[0];
430
+ const similarCommands = findSimilarCommands(unknownCommand);
431
+ displayError(errors.commandNotFound(unknownCommand, similarCommands, VALID_COMMANDS));
432
+ process.exit(1);
433
+ });
434
+ program.parse();
435
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface AddCommandOptions {
2
+ global?: boolean;
3
+ }
4
+ export declare function addCommand(options?: AddCommandOptions): Promise<void>;
5
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0H/E"}
@@ -0,0 +1,164 @@
1
+ import path from 'node:path';
2
+ import { confirm, input, select } from '@inquirer/prompts';
3
+ import chalk from 'chalk';
4
+ import fs from 'fs-extra';
5
+ import { ConfigManager } from '../config/config-manager.js';
6
+ import { editorLauncher } from '../utils/editor.js';
7
+ import { errors } from '../utils/errors.js';
8
+ import { logger } from '../utils/logger.js';
9
+ import { findProjectRoot } from '../utils/project-root.js';
10
+ import { findLocalPromptsDir } from '../utils/prompt-dir-resolver.js';
11
+ export async function addCommand(options = {}) {
12
+ // Load configuration
13
+ const config = await ConfigManager.load();
14
+ // Determine target directory based on --global flag and local .prompts/
15
+ let targetDir;
16
+ if (options.global) {
17
+ // --global: use global config promptDirs
18
+ if (!config.promptDirs || config.promptDirs.length === 0) {
19
+ throw errors.noPromptsFound([]);
20
+ }
21
+ targetDir = config.promptDirs[0];
22
+ if (config.promptDirs.length > 1) {
23
+ targetDir = await select({
24
+ message: 'Save to global directory:',
25
+ choices: config.promptDirs.map(dir => ({ value: dir, name: dir }))
26
+ });
27
+ }
28
+ }
29
+ else {
30
+ // Default: prefer local .prompts/ if it exists or can be created
31
+ const localDir = await findLocalPromptsDir();
32
+ if (localDir) {
33
+ targetDir = localDir;
34
+ }
35
+ else {
36
+ // Check if we're in a project root where we could create .prompts/
37
+ const projectRoot = findProjectRoot(process.cwd());
38
+ if (projectRoot) {
39
+ const potentialLocal = path.join(projectRoot, '.prompts');
40
+ // Fall back to global if available, but offer local as option
41
+ if (config.promptDirs && config.promptDirs.length > 0) {
42
+ const allDirs = [potentialLocal, ...config.promptDirs];
43
+ targetDir = await select({
44
+ message: 'Save to directory:',
45
+ choices: allDirs.map(dir => ({
46
+ value: dir,
47
+ name: dir === potentialLocal ? `${dir} (local project)` : dir
48
+ }))
49
+ });
50
+ }
51
+ else {
52
+ targetDir = potentialLocal;
53
+ }
54
+ }
55
+ else if (config.promptDirs && config.promptDirs.length > 0) {
56
+ // No project root; use global config dirs
57
+ targetDir = config.promptDirs[0];
58
+ if (config.promptDirs.length > 1) {
59
+ targetDir = await select({
60
+ message: 'Save to directory:',
61
+ choices: config.promptDirs.map(dir => ({ value: dir, name: dir }))
62
+ });
63
+ }
64
+ }
65
+ else {
66
+ throw errors.noPromptsFound([]);
67
+ }
68
+ }
69
+ }
70
+ // Ensure target directory exists
71
+ await fs.ensureDir(targetDir);
72
+ // Get prompt title
73
+ const title = await input({
74
+ message: 'Prompt title:',
75
+ validate: (value) => {
76
+ if (value.trim().length === 0) {
77
+ return 'Title is required\n\nExamples:\n • "API Client Generator"\n • "React Component Builder"\n • "Database Schema Designer"';
78
+ }
79
+ return true;
80
+ }
81
+ });
82
+ // Get tags
83
+ const tagsInput = await input({
84
+ message: 'Tags (comma-separated, optional):',
85
+ default: ''
86
+ });
87
+ const tags = tagsInput
88
+ .split(',')
89
+ .map(l => l.trim())
90
+ .filter(l => l.length > 0);
91
+ const ext = '.prompt';
92
+ // Generate filename
93
+ const filename = await generateFilename(title, targetDir, ext);
94
+ const filepath = path.join(targetDir, filename);
95
+ // Escape JSX string values (double quotes)
96
+ const escapedTitle = title.replace(/"/g, '\\"');
97
+ const tagsJsx = tags.length > 0
98
+ ? `tags={[${tags.map(t => `"${t.replace(/"/g, '\\"')}"`).join(', ')}]}`
99
+ : '';
100
+ const content = `<Prompt name="${escapedTitle}" description="" ${tagsJsx}>
101
+ <Task>
102
+ {/* Add your prompt content here */}
103
+ </Task>
104
+ </Prompt>
105
+ `;
106
+ // Write file
107
+ try {
108
+ await fs.writeFile(filepath, content);
109
+ logger.log(chalk.green('✅ Created prompt: ') + filepath);
110
+ }
111
+ catch (error) {
112
+ const err = error;
113
+ if (err.code === 'EACCES') {
114
+ throw errors.permissionDenied(targetDir);
115
+ }
116
+ throw errors.fileNotFound(targetDir);
117
+ }
118
+ // Ask to open in editor
119
+ const shouldOpen = await confirm({
120
+ message: 'Open in editor now?',
121
+ default: true
122
+ });
123
+ if (shouldOpen) {
124
+ await openInEditor(filepath);
125
+ }
126
+ }
127
+ async function generateFilename(title, directory, ext = '.prompt') {
128
+ // Convert to kebab-case and remove special characters
129
+ const base = title
130
+ .toLowerCase()
131
+ .normalize('NFD')
132
+ .replace(/[\u0300-\u036f]/g, '') // Remove diacritics
133
+ .replace(/[^a-z0-9\s-]/g, ' ') // Replace special chars with spaces
134
+ .trim()
135
+ .replace(/\s+/g, '-') // Replace spaces with hyphens
136
+ .replace(/-+/g, '-') // Remove multiple hyphens
137
+ .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
138
+ // Start with base filename
139
+ let filename = `${base}${ext}`;
140
+ let counter = 1;
141
+ // Check for existing files and increment if needed
142
+ while (await fs.pathExists(path.join(directory, filename))) {
143
+ filename = `${base}-${counter}${ext}`;
144
+ counter++;
145
+ }
146
+ return filename;
147
+ }
148
+ async function openInEditor(filepath) {
149
+ const editor = await editorLauncher.findEditor();
150
+ if (!editor) {
151
+ logger.log(errors.noEditor().message);
152
+ logger.log(chalk.yellow('\n📝 Open the file manually:'), filepath);
153
+ return;
154
+ }
155
+ // Open the file
156
+ try {
157
+ await editorLauncher.openInEditor(editor, filepath);
158
+ }
159
+ catch {
160
+ logger.log(chalk.yellow('⚠️ Failed to open editor'));
161
+ logger.log(chalk.yellow('📝 Open the file manually:'), filepath);
162
+ }
163
+ }
164
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function annotateCommand(historyNumber?: number): Promise<void>;
2
+ //# sourceMappingURL=annotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotate.d.ts","sourceRoot":"","sources":["../../src/commands/annotate.ts"],"names":[],"mappings":"AAcA,wBAAsB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4F3E"}