@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.
- package/LICENSE +21 -0
- package/README.md +54 -29
- package/dist/annotations/annotation-analyzer.d.ts +17 -0
- package/dist/annotations/annotation-analyzer.d.ts.map +1 -0
- package/dist/annotations/annotation-analyzer.js +145 -0
- package/dist/annotations/annotation-analyzer.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +435 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +164 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/annotate.d.ts +2 -0
- package/dist/commands/annotate.d.ts.map +1 -0
- package/dist/commands/annotate.js +99 -0
- package/dist/commands/annotate.js.map +1 -0
- package/dist/commands/base-command.d.ts +23 -0
- package/dist/commands/base-command.d.ts.map +1 -0
- package/dist/commands/base-command.js +41 -0
- package/dist/commands/base-command.js.map +1 -0
- package/dist/commands/cache.d.ts +9 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +31 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +93 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/edit.d.ts +2 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +35 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/help.d.ts +2 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +26 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/history.d.ts +12 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +317 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +137 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +16 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +263 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/review.d.ts +3 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +160 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/run.d.ts +32 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +367 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +45 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +113 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config/config-manager.d.ts +19 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +221 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/global-paths.d.ts +5 -0
- package/dist/config/global-paths.d.ts.map +1 -0
- package/dist/config/global-paths.js +16 -0
- package/dist/config/global-paths.js.map +1 -0
- package/dist/config/migration.d.ts +12 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +270 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/history/enhanced-history-manager.d.ts +27 -0
- package/dist/history/enhanced-history-manager.d.ts.map +1 -0
- package/dist/history/enhanced-history-manager.js +116 -0
- package/dist/history/enhanced-history-manager.js.map +1 -0
- package/dist/history/history-manager.d.ts +43 -0
- package/dist/history/history-manager.d.ts.map +1 -0
- package/dist/history/history-manager.js +229 -0
- package/dist/history/history-manager.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/input-types/file-search-prompt.d.ts +11 -0
- package/dist/prompts/input-types/file-search-prompt.d.ts.map +1 -0
- package/dist/prompts/input-types/file-search-prompt.js +53 -0
- package/dist/prompts/input-types/file-search-prompt.js.map +1 -0
- package/dist/prompts/input-types/review-file-prompt.d.ts +3 -0
- package/dist/prompts/input-types/review-file-prompt.d.ts.map +1 -0
- package/dist/prompts/input-types/review-file-prompt.js +9 -0
- package/dist/prompts/input-types/review-file-prompt.js.map +1 -0
- package/dist/schemas/config-schema.d.ts +1637 -0
- package/dist/schemas/config-schema.d.ts.map +1 -0
- package/dist/schemas/config-schema.js +136 -0
- package/dist/schemas/config-schema.js.map +1 -0
- package/dist/search/search-engine.d.ts +8 -0
- package/dist/search/search-engine.d.ts.map +1 -0
- package/dist/search/search-engine.js +53 -0
- package/dist/search/search-engine.js.map +1 -0
- package/dist/services/git-service.d.ts +28 -0
- package/dist/services/git-service.d.ts.map +1 -0
- package/dist/services/git-service.js +157 -0
- package/dist/services/git-service.js.map +1 -0
- package/dist/services/input-collector.d.ts +9 -0
- package/dist/services/input-collector.d.ts.map +1 -0
- package/dist/services/input-collector.js +162 -0
- package/dist/services/input-collector.js.map +1 -0
- package/dist/services/logging-service.d.ts +49 -0
- package/dist/services/logging-service.d.ts.map +1 -0
- package/dist/services/logging-service.js +203 -0
- package/dist/services/logging-service.js.map +1 -0
- package/dist/services/module-cache.d.ts +42 -0
- package/dist/services/module-cache.d.ts.map +1 -0
- package/dist/services/module-cache.js +205 -0
- package/dist/services/module-cache.js.map +1 -0
- package/dist/services/module-entry-builder.d.ts +20 -0
- package/dist/services/module-entry-builder.d.ts.map +1 -0
- package/dist/services/module-entry-builder.js +71 -0
- package/dist/services/module-entry-builder.js.map +1 -0
- package/dist/services/output-capture-service.d.ts +28 -0
- package/dist/services/output-capture-service.d.ts.map +1 -0
- package/dist/services/output-capture-service.js +348 -0
- package/dist/services/output-capture-service.js.map +1 -0
- package/dist/services/package-manager.d.ts +18 -0
- package/dist/services/package-manager.d.ts.map +1 -0
- package/dist/services/package-manager.js +141 -0
- package/dist/services/package-manager.js.map +1 -0
- package/dist/services/pattern-detector.d.ts +15 -0
- package/dist/services/pattern-detector.d.ts.map +1 -0
- package/dist/services/pattern-detector.js +228 -0
- package/dist/services/pattern-detector.js.map +1 -0
- package/dist/services/prompt-resolver.d.ts +32 -0
- package/dist/services/prompt-resolver.d.ts.map +1 -0
- package/dist/services/prompt-resolver.js +73 -0
- package/dist/services/prompt-resolver.js.map +1 -0
- package/dist/services/pupt-prompt-source.d.ts +16 -0
- package/dist/services/pupt-prompt-source.d.ts.map +1 -0
- package/dist/services/pupt-prompt-source.js +74 -0
- package/dist/services/pupt-prompt-source.js.map +1 -0
- package/dist/services/pupt-service.d.ts +33 -0
- package/dist/services/pupt-service.d.ts.map +1 -0
- package/dist/services/pupt-service.js +119 -0
- package/dist/services/pupt-service.js.map +1 -0
- package/dist/services/review-data-builder.d.ts +25 -0
- package/dist/services/review-data-builder.d.ts.map +1 -0
- package/dist/services/review-data-builder.js +333 -0
- package/dist/services/review-data-builder.js.map +1 -0
- package/dist/services/suggestion-generator.d.ts +11 -0
- package/dist/services/suggestion-generator.d.ts.map +1 -0
- package/dist/services/suggestion-generator.js +158 -0
- package/dist/services/suggestion-generator.js.map +1 -0
- package/dist/services/ui-service.d.ts +49 -0
- package/dist/services/ui-service.d.ts.map +1 -0
- package/dist/services/ui-service.js +196 -0
- package/dist/services/ui-service.js.map +1 -0
- package/dist/types/annotations.d.ts +50 -0
- package/dist/types/annotations.d.ts.map +1 -0
- package/dist/types/annotations.js +2 -0
- package/dist/types/annotations.js.map +1 -0
- package/dist/types/config.d.ts +110 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +12 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/history.d.ts +36 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js +2 -0
- package/dist/types/history.js.map +1 -0
- package/dist/types/patterns.d.ts +25 -0
- package/dist/types/patterns.d.ts.map +1 -0
- package/dist/types/patterns.js +2 -0
- package/dist/types/patterns.js.map +1 -0
- package/dist/types/prompt.d.ts +29 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/prompt.js +24 -0
- package/dist/types/prompt.js.map +1 -0
- package/dist/types/review.d.ts +81 -0
- package/dist/types/review.d.ts.map +1 -0
- package/dist/types/review.js +2 -0
- package/dist/types/review.js.map +1 -0
- package/dist/ui/console-ui.d.ts +30 -0
- package/dist/ui/console-ui.d.ts.map +1 -0
- package/dist/ui/console-ui.js +88 -0
- package/dist/ui/console-ui.js.map +1 -0
- package/dist/ui/interactive-search.d.ts +8 -0
- package/dist/ui/interactive-search.d.ts.map +1 -0
- package/dist/ui/interactive-search.js +29 -0
- package/dist/ui/interactive-search.js.map +1 -0
- package/dist/utils/annotation-migration.d.ts +12 -0
- package/dist/utils/annotation-migration.d.ts.map +1 -0
- package/dist/utils/annotation-migration.js +88 -0
- package/dist/utils/annotation-migration.js.map +1 -0
- package/dist/utils/date-formatter.d.ts +10 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +46 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/editor.d.ts +14 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +52 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/errors.d.ts +58 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +275 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/git-info.d.ts +10 -0
- package/dist/utils/git-info.d.ts.map +1 -0
- package/dist/utils/git-info.js +44 -0
- package/dist/utils/git-info.js.map +1 -0
- package/dist/utils/gitignore.d.ts +10 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +72 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/logger.d.ts +39 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +143 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/platform.d.ts +9 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +45 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/project-root.d.ts +22 -0
- package/dist/utils/project-root.d.ts.map +1 -0
- package/dist/utils/project-root.js +226 -0
- package/dist/utils/project-root.js.map +1 -0
- package/dist/utils/prompt-dir-resolver.d.ts +5 -0
- package/dist/utils/prompt-dir-resolver.d.ts.map +1 -0
- package/dist/utils/prompt-dir-resolver.js +25 -0
- package/dist/utils/prompt-dir-resolver.js.map +1 -0
- package/dist/utils/security.d.ts +5 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +57 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/tool-detection.d.ts +14 -0
- package/dist/utils/tool-detection.d.ts.map +1 -0
- package/dist/utils/tool-detection.js +43 -0
- package/dist/utils/tool-detection.js.map +1 -0
- package/package.json +79 -7
- package/prompts/prompts/ad-hoc-long.prompt +60 -0
- package/prompts/prompts/ad-hoc.prompt +29 -0
- package/prompts/prompts/code-review.prompt +99 -0
- package/prompts/prompts/debugging-error-message.prompt +81 -0
- package/prompts/prompts/fix-github-actions.prompt +62 -0
- package/prompts/prompts/fix-test-errors.prompt +73 -0
- package/prompts/prompts/git-commit-comment.prompt +61 -0
- package/prompts/prompts/implementation-phase.prompt +53 -0
- package/prompts/prompts/implementation-plan.prompt +101 -0
- package/prompts/prompts/new-feature.prompt +89 -0
- package/prompts/prompts/new-project.prompt +9 -0
- package/prompts/prompts/one-shot-change.prompt +79 -0
- package/prompts/prompts/pupt-prompt-improvement.prompt +270 -0
- package/prompts/prompts/simple-test.prompt +8 -0
- package/prompts/prompts/update-design.prompt +71 -0
- 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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|