@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
package/README.md ADDED
@@ -0,0 +1,160 @@
1
+ # Idea1 CLI
2
+
3
+ CLI tool for Idea1.ai workflow automation - AI-assisted development workflows.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g idea1
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Headless Mode
14
+
15
+ Run commands directly from the command line:
16
+
17
+ ```bash
18
+ # Start implementing a project item
19
+ idea1 start-project-item https://app.idea1.ai/project/items/590
20
+ idea1 -s https://app.idea1.ai/project/items/590
21
+
22
+ # Start with custom options
23
+ idea1 -s https://app.idea1.ai/project/items/590 --base-branch main
24
+ idea1 -s https://app.idea1.ai/project/items/590 -b prompt
25
+
26
+ # Close worktree and create PR
27
+ idea1 close-worktree
28
+ idea1 -c
29
+ idea1 -c --prompt-pr
30
+
31
+ # Show help
32
+ idea1 --help
33
+ idea1 -h
34
+ ```
35
+
36
+ ### Interactive Mode
37
+
38
+ Run `idea1` without arguments to enter interactive mode with a searchable command interface:
39
+
40
+ ```
41
+ $ idea1
42
+
43
+ ╭──────────────────────────────────────────────────╮
44
+ │ │
45
+ │ Idea1 CLI v1.0.0 │
46
+ │ ~/src/my-repo-name │
47
+ │ │
48
+ ╰──────────────────────────────────────────────────╯
49
+
50
+ Available commands:
51
+ /start-project-item (s) - Start implementing a project item in an isolated environment
52
+ /close-worktree (c) - Close current worktree, commit changes, and create PR
53
+ /help (h, ?) - Show help information
54
+ /exit (q, quit) - Exit the CLI
55
+
56
+ > [Search and select commands using arrow keys and Enter]
57
+ ```
58
+
59
+ ## Commands
60
+
61
+ ### start-project-item
62
+
63
+ Start implementing an Idea1.ai project item in an isolated git worktree.
64
+
65
+ ```bash
66
+ idea1 start-project-item <url> [branch-name] [options]
67
+ idea1 -s <url> [branch-name] [options]
68
+ ```
69
+
70
+ **Arguments:**
71
+ - `<url>` - The Idea1.ai project item URL (required)
72
+ - `[branch-name]` - Custom branch name (optional, auto-generated from item description if not provided)
73
+
74
+ **Options:**
75
+ - `-m, --isolation-mode <mode>` - Isolation mode: `worktree` (default) or `container`
76
+ - `-p, --source-path <path>` - Path to source directory
77
+ - `-b, --base-branch <branch>` - Base branch (default: `working/release`). Use `prompt` to interactively select.
78
+ - `--build-image` - Force rebuild of Docker image (container mode only)
79
+ - `--disable-firewall` - Disable network firewall (container mode only)
80
+
81
+ **What it does:**
82
+ 1. Sets the item's workflow status to "Agent implementation"
83
+ 2. Generates a branch name from the item description (if not provided)
84
+ 3. Creates a new branch from the base branch
85
+ 4. Creates a git worktree for isolated development
86
+ 5. Runs any setup hooks defined in `.idea1/settings.json`
87
+ 6. Launches Claude Code with the implementation prompt
88
+
89
+ ### close-worktree
90
+
91
+ Close the current worktree, commit changes, and create a PR.
92
+
93
+ ```bash
94
+ idea1 close-worktree [options]
95
+ idea1 -c [options]
96
+ ```
97
+
98
+ **Options:**
99
+ - `-p, --source-path <path>` - Path to worktree directory
100
+ - `-b, --base-branch <branch>` - Base branch for PR (uses stored preference by default)
101
+ - `--prompt-pr` - Prompt before creating PR
102
+
103
+ **What it does:**
104
+ 1. Detects uncommitted changes and prompts for project item URL if needed
105
+ 2. Commits and pushes changes
106
+ 3. Creates a PR (or confirms existing PR)
107
+ 4. Updates the item's workflow status to "Dev implementation"
108
+ 5. Removes the git worktree
109
+ 6. Cleans up orphaned branch configs
110
+
111
+ ## Configuration
112
+
113
+ ### Repository Settings
114
+
115
+ Create `.idea1/settings.json` in your repository root to configure hooks:
116
+
117
+ ```json
118
+ {
119
+ "hooks": {
120
+ "setup-worktree": "dev/workflow/setup-worktree.sh"
121
+ }
122
+ }
123
+ ```
124
+
125
+ **Hooks:**
126
+ - `setup-worktree` - Script to run after creating a new worktree (e.g., install dependencies)
127
+
128
+ ### User Settings
129
+
130
+ User settings are stored in the XDG-compliant config directory:
131
+ - macOS: `~/Library/Preferences/idea1-cli/`
132
+ - Linux: `~/.config/idea1-cli/`
133
+ - Windows: `%APPDATA%/idea1-cli/`
134
+
135
+ Settings include:
136
+ - `defaultBaseBranch` - Default base branch (default: `working/release`)
137
+ - `defaultIsolationMode` - Default isolation mode (default: `worktree`)
138
+
139
+ ## Requirements
140
+
141
+ - Node.js 20+
142
+ - Git
143
+ - GitHub CLI (`gh`) - for PR operations
144
+ - Claude Code CLI (`claude`) - for AI-assisted development
145
+
146
+ ## Development
147
+
148
+ ```bash
149
+ # Build the CLI
150
+ npm run build
151
+
152
+ # Run in development mode (watch for changes)
153
+ npm run dev
154
+
155
+ # Link globally for testing
156
+ npm link
157
+
158
+ # Run the CLI
159
+ idea1 --help
160
+ ```
package/dist/cli.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Create and configure the CLI program
4
+ */
5
+ export declare function createProgram(): Command;
6
+ /**
7
+ * Run the CLI
8
+ */
9
+ export declare function runCli(argv: string[]): Promise<void>;
10
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAgGvC;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1D"}
package/dist/cli.js ADDED
@@ -0,0 +1,105 @@
1
+ import { Command } from 'commander';
2
+ import { startProjectItemCommand, closeWorktreeCommand, helpCommand } from './commands/index.js';
3
+ import { runInteractiveMode } from './interactive.js';
4
+ import { logger } from './lib/logger.js';
5
+ const VERSION = '1.0.0';
6
+ /**
7
+ * Create and configure the CLI program
8
+ */
9
+ export function createProgram() {
10
+ const program = new Command();
11
+ program
12
+ .name('idea1')
13
+ .description('CLI tool for Idea1.ai workflow automation - AI-assisted development workflows')
14
+ .version(VERSION, '-v, --version', 'Output the current version');
15
+ // Start project item command
16
+ program
17
+ .command('start-project-item <url> [branch-name]')
18
+ .alias('s')
19
+ .description('Start implementing a project item in an isolated environment')
20
+ .option('-m, --isolation-mode <mode>', 'Isolation mode: worktree (default) or container', 'worktree')
21
+ .option('-p, --source-path <path>', 'Path to source directory')
22
+ .option('-b, --base-branch <branch>', 'Base branch (default: working/release)', 'working/release')
23
+ .option('--build-image', 'Force rebuild of Docker image (container mode)')
24
+ .option('--disable-firewall', 'Disable network firewall (container mode)')
25
+ .action(async (url, branchName, options) => {
26
+ try {
27
+ const args = [url];
28
+ if (branchName) {
29
+ args.push(branchName);
30
+ }
31
+ if (options.isolationMode && options.isolationMode !== 'worktree') {
32
+ args.unshift('-m', options.isolationMode);
33
+ }
34
+ if (options.sourcePath) {
35
+ args.unshift('-p', options.sourcePath);
36
+ }
37
+ if (options.baseBranch && options.baseBranch !== 'working/release') {
38
+ args.unshift('-b', options.baseBranch);
39
+ }
40
+ if (options.buildImage) {
41
+ args.unshift('--build-image');
42
+ }
43
+ if (options.disableFirewall) {
44
+ args.unshift('--disable-firewall');
45
+ }
46
+ await startProjectItemCommand.execute(args);
47
+ }
48
+ catch (error) {
49
+ const err = error;
50
+ logger.error(err.message);
51
+ process.exit(1);
52
+ }
53
+ });
54
+ // Close worktree command
55
+ program
56
+ .command('close-worktree')
57
+ .alias('c')
58
+ .description('Close current worktree, commit changes, and create PR')
59
+ .option('-p, --source-path <path>', 'Path to worktree directory')
60
+ .option('-b, --base-branch <branch>', 'Base branch for PR')
61
+ .option('--prompt-pr', 'Prompt before creating PR')
62
+ .action(async (options) => {
63
+ try {
64
+ const args = [];
65
+ if (options.sourcePath) {
66
+ args.push('-p', options.sourcePath);
67
+ }
68
+ if (options.baseBranch) {
69
+ args.push('-b', options.baseBranch);
70
+ }
71
+ if (options.promptPr) {
72
+ args.push('--prompt-pr');
73
+ }
74
+ await closeWorktreeCommand.execute(args);
75
+ }
76
+ catch (error) {
77
+ const err = error;
78
+ logger.error(err.message);
79
+ process.exit(1);
80
+ }
81
+ });
82
+ // Help command (also available as --help by default)
83
+ program
84
+ .command('help')
85
+ .alias('h')
86
+ .description('Show help information')
87
+ .action(async () => {
88
+ await helpCommand.execute([]);
89
+ });
90
+ return program;
91
+ }
92
+ /**
93
+ * Run the CLI
94
+ */
95
+ export async function runCli(argv) {
96
+ const program = createProgram();
97
+ // If no arguments provided, run interactive mode
98
+ if (argv.length <= 2) {
99
+ await runInteractiveMode();
100
+ return;
101
+ }
102
+ // Parse and execute command
103
+ await program.parseAsync(argv);
104
+ }
105
+ //# 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,3 @@
1
+ import type { Command } from '../types/index.js';
2
+ export declare const closeWorktreeCommand: Command;
3
+ //# sourceMappingURL=close-worktree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close-worktree.d.ts","sourceRoot":"","sources":["../../src/commands/close-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,mBAAmB,CAAC;AAwHvE,eAAO,MAAM,oBAAoB,EAAE,OA8GlC,CAAC"}
@@ -0,0 +1,184 @@
1
+ import { logger } from '../lib/logger.js';
2
+ import * as git from '../services/git.js';
3
+ import * as github from '../services/github.js';
4
+ import * as claude from '../services/claude.js';
5
+ import { configService } from '../services/config.js';
6
+ import inquirer from 'inquirer';
7
+ /**
8
+ * Parse command line arguments for close-worktree
9
+ */
10
+ function parseArgs(args) {
11
+ const options = {
12
+ promptPr: false
13
+ };
14
+ let i = 0;
15
+ while (i < args.length) {
16
+ const arg = args[i];
17
+ switch (arg) {
18
+ case '--source-path':
19
+ case '-p':
20
+ i++;
21
+ options.sourcePath = args[i];
22
+ break;
23
+ case '--base-branch':
24
+ case '-b':
25
+ i++;
26
+ options.baseBranch = args[i];
27
+ break;
28
+ case '--prompt-pr':
29
+ options.promptPr = true;
30
+ break;
31
+ default:
32
+ if (arg.startsWith('-')) {
33
+ throw new Error(`Unknown option: ${arg}`);
34
+ }
35
+ throw new Error(`Unexpected argument: ${arg}`);
36
+ }
37
+ i++;
38
+ }
39
+ return options;
40
+ }
41
+ /**
42
+ * Prompt for project item URL
43
+ */
44
+ async function promptProjectItemUrl() {
45
+ const { url } = await inquirer.prompt([
46
+ {
47
+ type: 'input',
48
+ name: 'url',
49
+ message: 'Please paste the project item URL:',
50
+ validate: (input) => input.trim() ? true : 'Project item URL is required'
51
+ }
52
+ ]);
53
+ return url.trim();
54
+ }
55
+ /**
56
+ * Ask whether to create a PR
57
+ */
58
+ async function askCreatePr() {
59
+ const { createPr } = await inquirer.prompt([
60
+ {
61
+ type: 'confirm',
62
+ name: 'createPr',
63
+ message: 'No PR exists for this branch. Would you like to create one?',
64
+ default: true
65
+ }
66
+ ]);
67
+ return createPr;
68
+ }
69
+ /**
70
+ * Resolve base branch using hierarchical resolution:
71
+ * 1. Command-line parameter (if provided)
72
+ * 2. Existing PR (authoritative)
73
+ * 3. Stored preference in git config
74
+ * 4. Default to working/release
75
+ */
76
+ async function resolveBaseBranch(cliBaseBranch, branchName) {
77
+ // 1. Command-line parameter
78
+ if (cliBaseBranch) {
79
+ logger.dim(`Using command-line base branch: ${cliBaseBranch}`);
80
+ return cliBaseBranch;
81
+ }
82
+ // 2. Existing PR (authoritative)
83
+ const prBaseBranch = await github.getPrBaseBranch(branchName);
84
+ if (prBaseBranch) {
85
+ logger.dim(`Using base branch from existing PR: ${prBaseBranch}`);
86
+ return prBaseBranch;
87
+ }
88
+ // 3. Stored preference in git config
89
+ const storedBaseBranch = await git.getBaseBranch(branchName);
90
+ if (storedBaseBranch) {
91
+ logger.dim(`Using stored base branch: ${storedBaseBranch}`);
92
+ return storedBaseBranch;
93
+ }
94
+ // 4. Default
95
+ const defaultBranch = configService.getDefaultBaseBranch();
96
+ logger.dim(`Using default base branch: ${defaultBranch}`);
97
+ return defaultBranch;
98
+ }
99
+ export const closeWorktreeCommand = {
100
+ name: 'close-worktree',
101
+ aliases: ['c', 'close'],
102
+ description: 'Close current worktree, commit changes, and create PR',
103
+ async execute(args) {
104
+ const options = parseArgs(args);
105
+ // Navigate to source path if provided
106
+ if (options.sourcePath) {
107
+ process.chdir(options.sourcePath);
108
+ }
109
+ // Get the main repository root dynamically
110
+ const mainRepoRoot = await git.getMainRepoRoot();
111
+ // Get repository name
112
+ const repoName = await git.getRepoName();
113
+ // Get current branch
114
+ const fullBranchName = await git.getCurrentBranch();
115
+ // Extract short branch name (remove "working/agent/" prefix)
116
+ const shortBranchName = fullBranchName.replace(/^working\/agent\//, '');
117
+ logger.info(`Current branch: ${fullBranchName} -> short name: ${shortBranchName}`);
118
+ if (!shortBranchName) {
119
+ throw new Error('Could not extract branch name');
120
+ }
121
+ // Get worktree root path
122
+ const worktreeRootPath = process.cwd();
123
+ // Retrieve stored project item URL from git config
124
+ let projectItemUrl = await git.getProjectItemUrl(fullBranchName);
125
+ if (projectItemUrl) {
126
+ logger.dim(`Found stored project item URL: ${projectItemUrl}`);
127
+ }
128
+ // Resolve base branch
129
+ const baseBranchName = await resolveBaseBranch(options.baseBranch, fullBranchName);
130
+ // Check for uncommitted changes
131
+ const hasChanges = await git.hasUncommittedChanges();
132
+ if (hasChanges) {
133
+ logger.newline();
134
+ logger.info('Uncommitted changes detected in worktree.');
135
+ logger.newline();
136
+ // Prompt for URL if not stored
137
+ if (!projectItemUrl) {
138
+ projectItemUrl = await promptProjectItemUrl();
139
+ }
140
+ // Commit and push changes
141
+ const commitMessage = projectItemUrl
142
+ ? `Agent implementation of ${projectItemUrl} on ${fullBranchName}`
143
+ : `Changes on ${fullBranchName}`;
144
+ await git.commitAllChanges(commitMessage);
145
+ await git.pushToRemote(fullBranchName);
146
+ logger.success('Changes pushed successfully');
147
+ }
148
+ else {
149
+ logger.dim('No uncommitted changes detected.');
150
+ }
151
+ // Check if PR exists
152
+ const existingPr = await github.checkPrExists(fullBranchName, baseBranchName);
153
+ if (!existingPr) {
154
+ logger.newline();
155
+ let shouldCreatePr = true;
156
+ if (options.promptPr) {
157
+ shouldCreatePr = await askCreatePr();
158
+ }
159
+ if (shouldCreatePr) {
160
+ // Prompt for URL if not available
161
+ if (!projectItemUrl) {
162
+ projectItemUrl = await promptProjectItemUrl();
163
+ }
164
+ // Create PR
165
+ await github.createPrIfNeeded(fullBranchName, baseBranchName, projectItemUrl);
166
+ }
167
+ }
168
+ else {
169
+ logger.info(`PR #${existingPr.number} already exists for this branch.`);
170
+ }
171
+ // Update idea1.ai workflow status to "Dev implementation"
172
+ if (projectItemUrl) {
173
+ await claude.setWorkflowStatus(projectItemUrl, 'Dev implementation');
174
+ }
175
+ // Navigate to main repo root
176
+ process.chdir(mainRepoRoot);
177
+ // Remove git worktree
178
+ await git.removeWorktree(worktreeRootPath);
179
+ // Garbage collect orphaned branch configs
180
+ await git.gcOrphanedBranchConfigs();
181
+ logger.success('Done.');
182
+ }
183
+ };
184
+ //# sourceMappingURL=close-worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close-worktree.js","sourceRoot":"","sources":["../../src/commands/close-worktree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from '../types/index.js';
2
+ export declare const helpCommand: Command;
3
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAIjD,eAAO,MAAM,WAAW,EAAE,OAgDzB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { logger } from '../lib/logger.js';
2
+ import chalk from 'chalk';
3
+ export const helpCommand = {
4
+ name: 'help',
5
+ aliases: ['h', '?'],
6
+ description: 'Show help information',
7
+ async execute(_args) {
8
+ logger.newline();
9
+ console.log(chalk.bold('Idea1 CLI - AI-assisted development workflow automation'));
10
+ logger.newline();
11
+ console.log(chalk.bold('USAGE:'));
12
+ console.log(' idea1 [command] [options]');
13
+ console.log(' idea1 Launch interactive mode');
14
+ logger.newline();
15
+ console.log(chalk.bold('COMMANDS:'));
16
+ console.log(' start-project-item, -s <url> Start implementing a project item');
17
+ console.log(' close-worktree, -c Close current worktree and create PR');
18
+ console.log(' help, -h Show this help message');
19
+ logger.newline();
20
+ console.log(chalk.bold('START-PROJECT-ITEM OPTIONS:'));
21
+ console.log(' --isolation-mode, -m <mode> Isolation mode: worktree (default) or container');
22
+ console.log(' --source-path, -p <path> Path to source directory');
23
+ console.log(' --base-branch, -b <branch> Base branch (default: working/release)');
24
+ console.log(' Use "prompt" to interactively select');
25
+ console.log(' --build-image Force rebuild of Docker image (container mode)');
26
+ console.log(' --disable-firewall Disable network firewall (container mode)');
27
+ logger.newline();
28
+ console.log(chalk.bold('CLOSE-WORKTREE OPTIONS:'));
29
+ console.log(' --source-path, -p <path> Path to worktree directory');
30
+ console.log(' --base-branch, -b <branch> Base branch for PR');
31
+ console.log(' --prompt-pr Prompt before creating PR');
32
+ logger.newline();
33
+ console.log(chalk.bold('EXAMPLES:'));
34
+ console.log(' idea1 -s https://app.idea1.ai/project/items/590');
35
+ console.log(' idea1 --start-project-item https://app.idea1.ai/project/items/590 -b main');
36
+ console.log(' idea1 -c');
37
+ console.log(' idea1 --close-worktree --prompt-pr');
38
+ logger.newline();
39
+ console.log(chalk.bold('INTERACTIVE MODE:'));
40
+ console.log(' Run "idea1" without arguments to enter interactive mode.');
41
+ console.log(' Use slash commands: /start-project-item, /close-worktree, /help, /exit');
42
+ logger.newline();
43
+ }
44
+ };
45
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,uBAAuB;IAEpC,KAAK,CAAC,OAAO,CAAC,KAAe;QAC3B,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC3F,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACxF,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;CACF,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Command } from '../types/index.js';
2
+ import { startProjectItemCommand } from './start-project-item.js';
3
+ import { closeWorktreeCommand } from './close-worktree.js';
4
+ import { helpCommand } from './help.js';
5
+ /**
6
+ * Get a command by name or alias
7
+ */
8
+ export declare function getCommand(nameOrAlias: string): Command | undefined;
9
+ /**
10
+ * Get all unique commands (excludes aliases)
11
+ */
12
+ export declare function getAllCommands(): Command[];
13
+ /**
14
+ * Get all command names and aliases for autocomplete
15
+ */
16
+ export declare function getAllCommandNamesAndAliases(): string[];
17
+ export { startProjectItemCommand, closeWorktreeCommand, helpCommand };
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAyBxC;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEnE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,EAAE,CAM1C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,EAAE,CAEvD;AAED,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { startProjectItemCommand } from './start-project-item.js';
2
+ import { closeWorktreeCommand } from './close-worktree.js';
3
+ import { helpCommand } from './help.js';
4
+ /**
5
+ * Command registry - Map-based for O(1) lookup
6
+ */
7
+ const commandRegistry = new Map();
8
+ /**
9
+ * Register a command in the registry
10
+ */
11
+ function registerCommand(command) {
12
+ // Register by name
13
+ commandRegistry.set(command.name, command);
14
+ // Register by aliases
15
+ for (const alias of command.aliases) {
16
+ commandRegistry.set(alias, command);
17
+ }
18
+ }
19
+ // Register all commands
20
+ registerCommand(startProjectItemCommand);
21
+ registerCommand(closeWorktreeCommand);
22
+ registerCommand(helpCommand);
23
+ /**
24
+ * Get a command by name or alias
25
+ */
26
+ export function getCommand(nameOrAlias) {
27
+ return commandRegistry.get(nameOrAlias);
28
+ }
29
+ /**
30
+ * Get all unique commands (excludes aliases)
31
+ */
32
+ export function getAllCommands() {
33
+ const uniqueCommands = new Set();
34
+ for (const command of commandRegistry.values()) {
35
+ uniqueCommands.add(command);
36
+ }
37
+ return Array.from(uniqueCommands);
38
+ }
39
+ /**
40
+ * Get all command names and aliases for autocomplete
41
+ */
42
+ export function getAllCommandNamesAndAliases() {
43
+ return Array.from(commandRegistry.keys());
44
+ }
45
+ export { startProjectItemCommand, closeWorktreeCommand, helpCommand };
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;GAEG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEnD;;GAEG;AACH,SAAS,eAAe,CAAC,OAAgB;IACvC,mBAAmB;IACnB,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE3C,sBAAsB;IACtB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,wBAAwB;AACxB,eAAe,CAAC,uBAAuB,CAAC,CAAC;AACzC,eAAe,CAAC,oBAAoB,CAAC,CAAC;AACtC,eAAe,CAAC,WAAW,CAAC,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,OAAO,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAW,CAAC;IAC1C,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from '../types/index.js';
2
+ export declare const startProjectItemCommand: Command;
3
+ //# sourceMappingURL=start-project-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-project-item.d.ts","sourceRoot":"","sources":["../../src/commands/start-project-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AA+L1E,eAAO,MAAM,uBAAuB,EAAE,OAqErC,CAAC"}