@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.
- package/README.md +160 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +105 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/close-worktree.d.ts +3 -0
- package/dist/commands/close-worktree.d.ts.map +1 -0
- package/dist/commands/close-worktree.js +184 -0
- package/dist/commands/close-worktree.js.map +1 -0
- package/dist/commands/help.d.ts +3 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +45 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/index.d.ts +18 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +46 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/start-project-item.d.ts +3 -0
- package/dist/commands/start-project-item.d.ts.map +1 -0
- package/dist/commands/start-project-item.js +214 -0
- package/dist/commands/start-project-item.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive.d.ts +5 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +348 -0
- package/dist/interactive.js.map +1 -0
- package/dist/lib/logger.d.ts +16 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +44 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/settings.d.ts +10 -0
- package/dist/lib/settings.d.ts.map +1 -0
- package/dist/lib/settings.js +27 -0
- package/dist/lib/settings.js.map +1 -0
- package/dist/lib/shell.d.ts +23 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +61 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/services/claude.d.ts +25 -0
- package/dist/services/claude.d.ts.map +1 -0
- package/dist/services/claude.js +81 -0
- package/dist/services/claude.js.map +1 -0
- package/dist/services/config.d.ts +35 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +63 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/git.d.ts +89 -0
- package/dist/services/git.d.ts.map +1 -0
- package/dist/services/git.js +246 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/github.d.ts +18 -0
- package/dist/services/github.d.ts.map +1 -0
- package/dist/services/github.js +90 -0
- package/dist/services/github.js.map +1 -0
- package/dist/types/index.d.ts +61 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- 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
|
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":"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 @@
|
|
|
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 @@
|
|
|
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"}
|