@idea1/cli 1.0.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 (62) hide show
  1. package/README.md +160 -0
  2. package/dist/cli.d.ts +10 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +105 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/close-worktree.d.ts +3 -0
  7. package/dist/commands/close-worktree.d.ts.map +1 -0
  8. package/dist/commands/close-worktree.js +184 -0
  9. package/dist/commands/close-worktree.js.map +1 -0
  10. package/dist/commands/help.d.ts +3 -0
  11. package/dist/commands/help.d.ts.map +1 -0
  12. package/dist/commands/help.js +45 -0
  13. package/dist/commands/help.js.map +1 -0
  14. package/dist/commands/index.d.ts +18 -0
  15. package/dist/commands/index.d.ts.map +1 -0
  16. package/dist/commands/index.js +46 -0
  17. package/dist/commands/index.js.map +1 -0
  18. package/dist/commands/start-project-item.d.ts +3 -0
  19. package/dist/commands/start-project-item.d.ts.map +1 -0
  20. package/dist/commands/start-project-item.js +214 -0
  21. package/dist/commands/start-project-item.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +18 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/interactive.d.ts +5 -0
  27. package/dist/interactive.d.ts.map +1 -0
  28. package/dist/interactive.js +348 -0
  29. package/dist/interactive.js.map +1 -0
  30. package/dist/lib/logger.d.ts +16 -0
  31. package/dist/lib/logger.d.ts.map +1 -0
  32. package/dist/lib/logger.js +44 -0
  33. package/dist/lib/logger.js.map +1 -0
  34. package/dist/lib/settings.d.ts +10 -0
  35. package/dist/lib/settings.d.ts.map +1 -0
  36. package/dist/lib/settings.js +27 -0
  37. package/dist/lib/settings.js.map +1 -0
  38. package/dist/lib/shell.d.ts +23 -0
  39. package/dist/lib/shell.d.ts.map +1 -0
  40. package/dist/lib/shell.js +61 -0
  41. package/dist/lib/shell.js.map +1 -0
  42. package/dist/services/claude.d.ts +25 -0
  43. package/dist/services/claude.d.ts.map +1 -0
  44. package/dist/services/claude.js +81 -0
  45. package/dist/services/claude.js.map +1 -0
  46. package/dist/services/config.d.ts +35 -0
  47. package/dist/services/config.d.ts.map +1 -0
  48. package/dist/services/config.js +63 -0
  49. package/dist/services/config.js.map +1 -0
  50. package/dist/services/git.d.ts +89 -0
  51. package/dist/services/git.d.ts.map +1 -0
  52. package/dist/services/git.js +246 -0
  53. package/dist/services/git.js.map +1 -0
  54. package/dist/services/github.d.ts +18 -0
  55. package/dist/services/github.d.ts.map +1 -0
  56. package/dist/services/github.js +90 -0
  57. package/dist/services/github.js.map +1 -0
  58. package/dist/types/index.d.ts +61 -0
  59. package/dist/types/index.d.ts.map +1 -0
  60. package/dist/types/index.js +2 -0
  61. package/dist/types/index.js.map +1 -0
  62. package/package.json +53 -0
@@ -0,0 +1,214 @@
1
+ import { logger } from '../lib/logger.js';
2
+ import { execWithOutput } from '../lib/shell.js';
3
+ import { getSetupWorktreeHook } from '../lib/settings.js';
4
+ import * as git from '../services/git.js';
5
+ import * as claude from '../services/claude.js';
6
+ import { configService } from '../services/config.js';
7
+ import inquirer from 'inquirer';
8
+ /**
9
+ * Parse command line arguments for start-project-item
10
+ */
11
+ function parseArgs(args) {
12
+ const options = {
13
+ isolationMode: configService.getDefaultIsolationMode(),
14
+ baseBranch: configService.getDefaultBaseBranch(),
15
+ buildImage: false,
16
+ disableFirewall: false
17
+ };
18
+ let projectItemUrl = '';
19
+ let shortBranchName;
20
+ let i = 0;
21
+ while (i < args.length) {
22
+ const arg = args[i];
23
+ switch (arg) {
24
+ case '--isolation-mode':
25
+ case '-m':
26
+ i++;
27
+ if (args[i] === 'worktree' || args[i] === 'container') {
28
+ options.isolationMode = args[i];
29
+ }
30
+ else {
31
+ throw new Error('--isolation-mode must be either "worktree" or "container"');
32
+ }
33
+ break;
34
+ case '--source-path':
35
+ case '-p':
36
+ i++;
37
+ options.sourcePath = args[i];
38
+ break;
39
+ case '--base-branch':
40
+ case '-b':
41
+ i++;
42
+ options.baseBranch = args[i];
43
+ break;
44
+ case '--build-image':
45
+ options.buildImage = true;
46
+ break;
47
+ case '--disable-firewall':
48
+ options.disableFirewall = true;
49
+ break;
50
+ default:
51
+ if (arg.startsWith('-')) {
52
+ throw new Error(`Unknown option: ${arg}`);
53
+ }
54
+ if (!projectItemUrl) {
55
+ projectItemUrl = arg;
56
+ }
57
+ else if (!shortBranchName) {
58
+ shortBranchName = arg;
59
+ }
60
+ else {
61
+ throw new Error('Too many arguments');
62
+ }
63
+ }
64
+ i++;
65
+ }
66
+ return { projectItemUrl, shortBranchName, options };
67
+ }
68
+ /**
69
+ * Prompt user to select base branch interactively
70
+ */
71
+ async function promptBaseBranch() {
72
+ let currentBranch = 'unknown';
73
+ try {
74
+ currentBranch = await git.getCurrentBranch();
75
+ }
76
+ catch {
77
+ // Ignore
78
+ }
79
+ const { choice } = await inquirer.prompt([
80
+ {
81
+ type: 'list',
82
+ name: 'choice',
83
+ message: 'Select base branch:',
84
+ choices: [
85
+ { name: `Current branch (${currentBranch})`, value: 'current' },
86
+ { name: 'working/release', value: 'working/release' },
87
+ { name: 'Enter custom branch', value: 'custom' }
88
+ ],
89
+ default: 'current'
90
+ }
91
+ ]);
92
+ if (choice === 'current') {
93
+ return currentBranch;
94
+ }
95
+ else if (choice === 'custom') {
96
+ const { customBranch } = await inquirer.prompt([
97
+ {
98
+ type: 'input',
99
+ name: 'customBranch',
100
+ message: 'Enter branch name:',
101
+ validate: (input) => input.trim() ? true : 'Branch name cannot be empty'
102
+ }
103
+ ]);
104
+ return customBranch.trim();
105
+ }
106
+ return choice;
107
+ }
108
+ /**
109
+ * Run the setup-worktree hook if defined
110
+ */
111
+ async function runSetupWorktreeHook(repoRoot) {
112
+ const hookCommand = await getSetupWorktreeHook(repoRoot);
113
+ if (!hookCommand) {
114
+ logger.dim('No setup-worktree hook defined');
115
+ return;
116
+ }
117
+ logger.step(`Running setup-worktree hook: ${hookCommand}`);
118
+ const exitCode = await execWithOutput('bash', [hookCommand], { cwd: repoRoot });
119
+ if (exitCode !== 0) {
120
+ logger.warning('Setup-worktree hook failed, continuing anyway');
121
+ }
122
+ }
123
+ /**
124
+ * Setup worktree isolation mode
125
+ */
126
+ async function setupWorktreeIsolation(fullBranchName, shortBranchName, projectItemUrl, baseBranchName) {
127
+ logger.step('Setting up worktree isolation...');
128
+ // Create git worktree
129
+ const worktreePath = await git.createWorktree(fullBranchName, shortBranchName);
130
+ // Enter worktree and set up upstream
131
+ await git.enterWorktreeAndSetup(worktreePath, fullBranchName);
132
+ // Store project item URL and base branch in git config
133
+ await git.storeProjectItemUrl(projectItemUrl, fullBranchName);
134
+ await git.storeBaseBranch(baseBranchName, fullBranchName);
135
+ // Run repo-specific setup hook if defined
136
+ await runSetupWorktreeHook(worktreePath);
137
+ // Run claude command
138
+ if (projectItemUrl) {
139
+ const prompt = claude.getImplementationPrompt(projectItemUrl);
140
+ await claude.runInteractive(prompt, worktreePath);
141
+ }
142
+ else {
143
+ await claude.runInteractive(undefined, worktreePath);
144
+ }
145
+ // Output the final directory path for the user
146
+ logger.newline();
147
+ logger.info('To continue working in this directory, run:');
148
+ logger.plain(`cd ${worktreePath}`);
149
+ }
150
+ /**
151
+ * Setup container isolation mode (not yet implemented)
152
+ */
153
+ async function setupContainerIsolation(_fullBranchName, _shortBranchName, _projectItemUrl, _options) {
154
+ logger.error('Container isolation mode is not yet implemented in the CLI tool.');
155
+ logger.info('Please use the shell script directly:');
156
+ logger.plain('dev/workflow/start-project-item.sh --isolation-mode container <url>');
157
+ }
158
+ export const startProjectItemCommand = {
159
+ name: 'start-project-item',
160
+ aliases: ['s', 'start'],
161
+ description: 'Start implementing a project item in an isolated environment',
162
+ async execute(args) {
163
+ const { projectItemUrl, shortBranchName: providedBranchName, options } = parseArgs(args);
164
+ if (!projectItemUrl) {
165
+ throw new Error('Please provide a project item URL');
166
+ }
167
+ // Validate URL format
168
+ if (!projectItemUrl.includes('idea1.ai/project/items/')) {
169
+ logger.warning('URL does not appear to be an idea1.ai project item URL');
170
+ }
171
+ // Handle --base-branch prompt
172
+ if (options.baseBranch === 'prompt') {
173
+ options.baseBranch = await promptBaseBranch();
174
+ logger.info(`Using base branch: ${options.baseBranch}`);
175
+ }
176
+ // Navigate to source path if provided
177
+ if (options.sourcePath) {
178
+ process.chdir(options.sourcePath);
179
+ }
180
+ // Set workflow status to "Agent implementation"
181
+ await claude.setWorkflowStatus(projectItemUrl, 'Agent implementation');
182
+ // Generate branch name if not provided
183
+ let shortBranchName = providedBranchName;
184
+ if (!shortBranchName) {
185
+ shortBranchName = await claude.generateBranchName(projectItemUrl);
186
+ }
187
+ logger.info(`Using branch name: ${shortBranchName}`);
188
+ if (!shortBranchName) {
189
+ throw new Error('Failed to generate a branch name');
190
+ }
191
+ // Ensure clean working directory
192
+ await git.ensureCleanWorkingDirectory();
193
+ // Validate base branch exists
194
+ const baseBranchExists = await git.branchExists(options.baseBranch);
195
+ if (!baseBranchExists) {
196
+ throw new Error(`Base branch '${options.baseBranch}' does not exist locally or on origin`);
197
+ }
198
+ // Fetch latest, checkout base branch, create new branch
199
+ await git.fetchLatest();
200
+ await git.checkoutAndPullBranch(options.baseBranch);
201
+ const fullBranchName = `working/agent/${shortBranchName}`;
202
+ await git.createAndPushBranch(fullBranchName, options.baseBranch);
203
+ await git.prepareRepoForWorktree(fullBranchName, options.baseBranch);
204
+ logger.dim('Note: PR will be created later when changes are pushed');
205
+ // Setup isolation
206
+ if (options.isolationMode === 'container') {
207
+ await setupContainerIsolation(fullBranchName, shortBranchName, projectItemUrl, options);
208
+ }
209
+ else {
210
+ await setupWorktreeIsolation(fullBranchName, shortBranchName, projectItemUrl, options.baseBranch);
211
+ }
212
+ }
213
+ };
214
+ //# sourceMappingURL=start-project-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-project-item.js","sourceRoot":"","sources":["../../src/commands/start-project-item.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from './cli.js';
3
+ import { logger } from './lib/logger.js';
4
+ /**
5
+ * Main entry point
6
+ */
7
+ async function main() {
8
+ try {
9
+ await runCli(process.argv);
10
+ }
11
+ catch (error) {
12
+ const err = error;
13
+ logger.error(err.message);
14
+ process.exit(1);
15
+ }
16
+ }
17
+ main();
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Run the interactive REPL
3
+ */
4
+ export declare function runInteractiveMode(): Promise<void>;
5
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAgXA;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4DxD"}
@@ -0,0 +1,348 @@
1
+ import chalk from 'chalk';
2
+ import boxen from 'boxen';
3
+ import readline from 'readline';
4
+ import { getAllCommands, getCommand } from './commands/index.js';
5
+ import { logger } from './lib/logger.js';
6
+ import { exec } from './lib/shell.js';
7
+ // Get package version
8
+ const VERSION = '1.0.0';
9
+ /**
10
+ * Display the CLI header
11
+ */
12
+ async function displayHeader() {
13
+ // Get current working directory
14
+ const cwd = process.cwd();
15
+ // Try to get repo name
16
+ let repoName = '';
17
+ const result = await exec('git', ['rev-parse', '--show-toplevel']);
18
+ if (result.exitCode === 0) {
19
+ repoName = result.stdout.trim().split('/').pop() ?? '';
20
+ }
21
+ const headerText = `Idea1 CLI v${VERSION}`;
22
+ const locationText = repoName ? `${cwd} (${repoName})` : cwd;
23
+ console.log(boxen(`${chalk.bold.blue(headerText)}\n${chalk.dim(locationText)}`, {
24
+ padding: 1,
25
+ margin: 1,
26
+ borderStyle: 'round',
27
+ borderColor: 'blue'
28
+ }));
29
+ }
30
+ /**
31
+ * Display available commands
32
+ */
33
+ function displayCommands() {
34
+ logger.newline();
35
+ console.log(chalk.bold('Available commands:'));
36
+ const commands = getAllCommands();
37
+ for (const cmd of commands) {
38
+ const aliases = cmd.aliases.length > 0 ? chalk.dim(` (${cmd.aliases.join(', ')})`) : '';
39
+ console.log(` ${chalk.cyan('/' + cmd.name)}${aliases} - ${cmd.description}`);
40
+ }
41
+ console.log(` ${chalk.cyan('/exit')}${chalk.dim(' (q, quit)')} - Exit the CLI`);
42
+ logger.newline();
43
+ }
44
+ /**
45
+ * Parse a command line input
46
+ */
47
+ function parseInput(input) {
48
+ const trimmed = input.trim();
49
+ // Handle slash commands
50
+ if (trimmed.startsWith('/')) {
51
+ const parts = trimmed.slice(1).split(/\s+/);
52
+ return {
53
+ command: parts[0] ?? '',
54
+ args: parts.slice(1)
55
+ };
56
+ }
57
+ // Handle bare commands
58
+ const parts = trimmed.split(/\s+/);
59
+ return {
60
+ command: parts[0] ?? '',
61
+ args: parts.slice(1)
62
+ };
63
+ }
64
+ /**
65
+ * Build command menu items
66
+ */
67
+ function buildCommandMenuItems() {
68
+ const commands = getAllCommands();
69
+ const items = [];
70
+ for (const cmd of commands) {
71
+ const aliasText = cmd.aliases.length > 0 ? ` (${cmd.aliases.join(', ')})` : '';
72
+ items.push({
73
+ commandName: '/' + cmd.name,
74
+ aliasText,
75
+ description: cmd.description,
76
+ value: '/' + cmd.name,
77
+ matchTerms: ['/' + cmd.name, ...cmd.aliases.map(a => '/' + a)]
78
+ });
79
+ }
80
+ // Add exit command
81
+ items.push({
82
+ commandName: '/exit',
83
+ aliasText: ' (q, quit)',
84
+ description: 'Exit the CLI',
85
+ value: '/exit',
86
+ matchTerms: ['/exit', '/q', '/quit']
87
+ });
88
+ // Calculate max width for alignment
89
+ const maxWidth = Math.max(...items.map(e => e.commandName.length + e.aliasText.length));
90
+ return items.map(entry => {
91
+ const paddingNeeded = maxWidth - (entry.commandName.length + entry.aliasText.length) + 2;
92
+ const padding = ' '.repeat(paddingNeeded);
93
+ return {
94
+ displayName: entry.commandName + entry.aliasText + padding + entry.description,
95
+ value: entry.value,
96
+ matchTerms: entry.matchTerms
97
+ };
98
+ });
99
+ }
100
+ /**
101
+ * Filter menu items based on search term
102
+ * Returns items with the matched term attached
103
+ */
104
+ function filterMenuItems(items, term) {
105
+ if (!term.startsWith('/')) {
106
+ return [];
107
+ }
108
+ const searchTerm = term.toLowerCase();
109
+ const results = [];
110
+ for (const item of items) {
111
+ // Find which term matched
112
+ const matchedTerm = item.matchTerms.find(t => t.toLowerCase().startsWith(searchTerm));
113
+ if (matchedTerm) {
114
+ results.push({ ...item, matchedTerm });
115
+ }
116
+ }
117
+ return results;
118
+ }
119
+ /**
120
+ * Render a menu item (styled)
121
+ */
122
+ function renderMenuItem(item, isHighlighted) {
123
+ const parts = item.displayName.match(/^(\/\S+)(\s*\([^)]*\))?(.*)$/);
124
+ if (!parts) {
125
+ return isHighlighted ? chalk.cyan(item.displayName) : chalk.white(item.displayName);
126
+ }
127
+ const [, command, aliases = '', rest] = parts;
128
+ if (isHighlighted) {
129
+ return chalk.cyan(command) + chalk.gray(aliases) + chalk.cyan(rest);
130
+ }
131
+ return chalk.white(command) + chalk.gray(aliases) + chalk.white(rest);
132
+ }
133
+ const MAX_MENU_ITEMS = 5;
134
+ /**
135
+ * Interactive prompt with command completion
136
+ */
137
+ function createInteractivePrompt() {
138
+ return new Promise((resolve, reject) => {
139
+ const menuItems = buildCommandMenuItems();
140
+ let currentInput = '';
141
+ let filteredItems = [];
142
+ let highlightIndex = 0;
143
+ let menuOpen = false; // Whether menu space has been reserved
144
+ const rl = readline.createInterface({
145
+ input: process.stdin,
146
+ output: process.stdout,
147
+ terminal: true
148
+ });
149
+ // Enable raw mode for keypress handling
150
+ if (process.stdin.isTTY) {
151
+ process.stdin.setRawMode(true);
152
+ }
153
+ readline.emitKeypressEvents(process.stdin, rl);
154
+ const openMenu = () => {
155
+ if (menuOpen)
156
+ return;
157
+ menuOpen = true;
158
+ // Print newlines to reserve space, then move cursor back up
159
+ process.stdout.write('\n'.repeat(MAX_MENU_ITEMS));
160
+ process.stdout.write(`\x1b[${MAX_MENU_ITEMS}A`);
161
+ };
162
+ const closeMenu = () => {
163
+ if (!menuOpen)
164
+ return;
165
+ // Clear the menu lines
166
+ process.stdout.write('\x1b7'); // Save cursor
167
+ for (let i = 0; i < MAX_MENU_ITEMS; i++) {
168
+ process.stdout.write('\n\x1b[2K'); // Move down and clear line
169
+ }
170
+ process.stdout.write('\x1b8'); // Restore cursor
171
+ menuOpen = false;
172
+ };
173
+ const renderPromptLine = () => {
174
+ process.stdout.write('\r\x1b[2K');
175
+ process.stdout.write(chalk.cyan('> ') + currentInput);
176
+ };
177
+ const renderMenu = () => {
178
+ if (!menuOpen)
179
+ return;
180
+ // Save cursor position
181
+ process.stdout.write('\x1b7');
182
+ // Render each menu slot (always MAX_MENU_ITEMS lines)
183
+ for (let i = 0; i < MAX_MENU_ITEMS; i++) {
184
+ process.stdout.write('\n\x1b[2K'); // Move down, clear line
185
+ if (i < filteredItems.length) {
186
+ const item = filteredItems[i];
187
+ const isHighlighted = i === highlightIndex;
188
+ const prefix = isHighlighted ? chalk.cyan('❯ ') : ' ';
189
+ process.stdout.write(prefix + renderMenuItem(item, isHighlighted));
190
+ }
191
+ }
192
+ // Restore cursor position
193
+ process.stdout.write('\x1b8');
194
+ };
195
+ const updateDisplay = () => {
196
+ filteredItems = filterMenuItems(menuItems, currentInput).slice(0, MAX_MENU_ITEMS);
197
+ const isMenuNeeded = filteredItems.length > 0;
198
+ // Open menu if we now have items
199
+ if (isMenuNeeded && !menuOpen) {
200
+ openMenu();
201
+ }
202
+ // Close menu if we no longer have items
203
+ if (!isMenuNeeded && menuOpen) {
204
+ closeMenu();
205
+ }
206
+ // Clamp highlight index
207
+ highlightIndex = Math.min(highlightIndex, Math.max(0, filteredItems.length - 1));
208
+ renderPromptLine();
209
+ renderMenu();
210
+ };
211
+ const cleanup = () => {
212
+ closeMenu();
213
+ if (process.stdin.isTTY) {
214
+ process.stdin.setRawMode(false);
215
+ }
216
+ rl.close();
217
+ };
218
+ const completeWithHighlighted = () => {
219
+ if (filteredItems.length > 0 && highlightIndex < filteredItems.length) {
220
+ const item = filteredItems[highlightIndex];
221
+ currentInput = item.matchedTerm ?? item.value;
222
+ filteredItems = [];
223
+ closeMenu();
224
+ renderPromptLine();
225
+ }
226
+ };
227
+ const submit = () => {
228
+ if (menuOpen && filteredItems.length > 0 && highlightIndex < filteredItems.length) {
229
+ const item = filteredItems[highlightIndex];
230
+ currentInput = item.matchedTerm ?? item.value;
231
+ }
232
+ closeMenu();
233
+ process.stdout.write('\n');
234
+ cleanup();
235
+ resolve(currentInput);
236
+ };
237
+ // Initial prompt
238
+ renderPromptLine();
239
+ process.stdin.on('keypress', (str, key) => {
240
+ if (!key)
241
+ return;
242
+ // Handle Ctrl+C
243
+ if (key.ctrl && key.name === 'c') {
244
+ cleanup();
245
+ process.stdout.write('\n');
246
+ reject(new Error('force closed'));
247
+ return;
248
+ }
249
+ // Handle Tab - complete with highlighted item
250
+ if (key.name === 'tab') {
251
+ completeWithHighlighted();
252
+ return;
253
+ }
254
+ // Handle Enter - submit
255
+ if (key.name === 'return') {
256
+ submit();
257
+ return;
258
+ }
259
+ // Handle arrow keys for menu navigation
260
+ if (key.name === 'up' && menuOpen && filteredItems.length > 0) {
261
+ highlightIndex = Math.max(0, highlightIndex - 1);
262
+ renderMenu();
263
+ return;
264
+ }
265
+ if (key.name === 'down' && menuOpen && filteredItems.length > 0) {
266
+ highlightIndex = Math.min(filteredItems.length - 1, highlightIndex + 1);
267
+ renderMenu();
268
+ return;
269
+ }
270
+ // Prevent arrow keys from inserting escape sequences
271
+ if (key.name === 'up' || key.name === 'down' || key.name === 'left' || key.name === 'right') {
272
+ return;
273
+ }
274
+ // Handle backspace
275
+ if (key.name === 'backspace') {
276
+ if (currentInput.length > 0) {
277
+ currentInput = currentInput.slice(0, -1);
278
+ highlightIndex = 0;
279
+ updateDisplay();
280
+ }
281
+ return;
282
+ }
283
+ // Handle regular character input
284
+ if (str && !key.ctrl && !key.meta && str.length === 1) {
285
+ currentInput += str;
286
+ highlightIndex = 0;
287
+ updateDisplay();
288
+ }
289
+ });
290
+ });
291
+ }
292
+ /**
293
+ * Run the interactive REPL
294
+ */
295
+ export async function runInteractiveMode() {
296
+ await displayHeader();
297
+ displayCommands();
298
+ // eslint-disable-next-line no-constant-condition
299
+ while (true) {
300
+ try {
301
+ const selectedCommand = await createInteractivePrompt();
302
+ if (!selectedCommand) {
303
+ continue;
304
+ }
305
+ const { command, args } = parseInput(selectedCommand);
306
+ // Handle empty input
307
+ if (!command) {
308
+ continue;
309
+ }
310
+ // Handle exit commands
311
+ if (['exit', 'q', 'quit'].includes(command.toLowerCase())) {
312
+ logger.info('Goodbye!');
313
+ break;
314
+ }
315
+ // Handle help shortcut
316
+ if (command === '?' || command === 'commands') {
317
+ displayCommands();
318
+ continue;
319
+ }
320
+ // Look up command
321
+ const cmd = getCommand(command);
322
+ if (!cmd) {
323
+ logger.error(`Unknown command: ${command}`);
324
+ logger.dim('Type /help or /? to see available commands');
325
+ continue;
326
+ }
327
+ // Execute command
328
+ try {
329
+ await cmd.execute(args);
330
+ }
331
+ catch (error) {
332
+ const err = error;
333
+ logger.error(err.message);
334
+ }
335
+ }
336
+ catch (error) {
337
+ // Handle Ctrl+C gracefully
338
+ const err = error;
339
+ if (err.message?.includes('force closed') || err.name === 'ExitPromptError') {
340
+ logger.newline();
341
+ logger.info('Goodbye!');
342
+ break;
343
+ }
344
+ throw error;
345
+ }
346
+ }
347
+ }
348
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Logger utility for consistent console output with colors
3
+ */
4
+ export declare const logger: {
5
+ info: (message: string) => void;
6
+ success: (message: string) => void;
7
+ warning: (message: string) => void;
8
+ error: (message: string) => void;
9
+ step: (message: string) => void;
10
+ dim: (message: string) => void;
11
+ plain: (message: string) => void;
12
+ header: (message: string) => void;
13
+ section: (message: string) => void;
14
+ newline: () => void;
15
+ };
16
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,MAAM;oBACD,MAAM,KAAG,IAAI;uBAIV,MAAM,KAAG,IAAI;uBAIb,MAAM,KAAG,IAAI;qBAIf,MAAM,KAAG,IAAI;oBAId,MAAM,KAAG,IAAI;mBAId,MAAM,KAAG,IAAI;qBAIX,MAAM,KAAG,IAAI;sBAIZ,MAAM,KAAG,IAAI;uBAQZ,MAAM,KAAG,IAAI;mBAOnB,IAAI;CAGlB,CAAC"}