claude-issue-solver 1.13.0 → 1.15.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 +13 -8
- package/dist/commands/list.js +3 -1
- package/dist/commands/select.js +18 -25
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -27,16 +27,18 @@ This CLI tool fetches an issue from your repo, creates a worktree, opens Claude
|
|
|
27
27
|
## Demo
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
-
$
|
|
30
|
+
$ cis
|
|
31
31
|
|
|
32
32
|
Open issues for my-project:
|
|
33
|
-
(2 issues with open PRs hidden)
|
|
34
33
|
|
|
35
|
-
? Select
|
|
36
|
-
❯ #42 Add dark mode support
|
|
37
|
-
#38 Fix login bug on mobile
|
|
38
|
-
#35 Update dependencies
|
|
39
|
-
|
|
34
|
+
? Select issues to solve (space to select, enter to confirm):
|
|
35
|
+
❯ ◯ #42 Add dark mode support
|
|
36
|
+
◯ #38 Fix login bug on mobile [PR]
|
|
37
|
+
◯ #35 Update dependencies
|
|
38
|
+
|
|
39
|
+
# Select multiple issues, then press enter...
|
|
40
|
+
|
|
41
|
+
Starting 2 issue(s)...
|
|
40
42
|
|
|
41
43
|
📋 Fetching issue #42...
|
|
42
44
|
✔ Found issue #42
|
|
@@ -46,11 +48,14 @@ Open issues for my-project:
|
|
|
46
48
|
|
|
47
49
|
✅ Worktree created at: ../my-project-issue-42-add-dark-mode-support
|
|
48
50
|
Claude is running in a new terminal window.
|
|
51
|
+
|
|
52
|
+
📋 Fetching issue #35...
|
|
53
|
+
...
|
|
49
54
|
```
|
|
50
55
|
|
|
51
56
|
## Features
|
|
52
57
|
|
|
53
|
-
- 🎯 **
|
|
58
|
+
- 🎯 **Multi-select issues** - Select multiple issues to solve in parallel, each in its own terminal
|
|
54
59
|
- ✨ **Create and solve** - Create new issues and start solving them immediately
|
|
55
60
|
- 🌿 **Worktree isolation** - Each issue gets its own worktree, work on multiple issues in parallel
|
|
56
61
|
- 🤖 **Real-time PR creation** - Automatically creates/updates PR as Claude commits changes
|
package/dist/commands/list.js
CHANGED
|
@@ -15,11 +15,13 @@ async function listCommand() {
|
|
|
15
15
|
console.log(chalk_1.default.yellow('No open issues found.'));
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
+
const issuesWithPRs = (0, github_1.getIssuesWithOpenPRs)();
|
|
18
19
|
for (const issue of issues) {
|
|
20
|
+
const prTag = issuesWithPRs.has(issue.number) ? chalk_1.default.magenta(' [PR]') : '';
|
|
19
21
|
const labels = issue.labels.length > 0
|
|
20
22
|
? ' ' + issue.labels.map(l => chalk_1.default.hex(`#${l.color}`).bold(`[${l.name}]`)).join(' ')
|
|
21
23
|
: '';
|
|
22
|
-
console.log(` ${chalk_1.default.cyan(`#${issue.number}`)}\t${issue.title}${labels}`);
|
|
24
|
+
console.log(` ${chalk_1.default.cyan(`#${issue.number}`)}\t${issue.title}${prTag}${labels}`);
|
|
23
25
|
}
|
|
24
26
|
console.log();
|
|
25
27
|
}
|
package/dist/commands/select.js
CHANGED
|
@@ -17,38 +17,31 @@ async function selectCommand() {
|
|
|
17
17
|
console.log(chalk_1.default.yellow('No open issues found.'));
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
|
-
// Filter out issues that already have open PRs
|
|
21
20
|
const issuesWithPRs = (0, github_1.getIssuesWithOpenPRs)();
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const skipped = issues.length - availableIssues.length;
|
|
30
|
-
console.log(chalk_1.default.dim(`(${skipped} issue${skipped > 1 ? 's' : ''} with open PRs hidden)\n`));
|
|
31
|
-
}
|
|
32
|
-
const choices = availableIssues.map((issue) => ({
|
|
33
|
-
name: `#${issue.number}\t${issue.title}`,
|
|
34
|
-
value: issue.number,
|
|
35
|
-
}));
|
|
36
|
-
choices.push({
|
|
37
|
-
name: chalk_1.default.dim('Cancel'),
|
|
38
|
-
value: -1,
|
|
21
|
+
const choices = issues.map((issue) => {
|
|
22
|
+
const hasPR = issuesWithPRs.has(issue.number);
|
|
23
|
+
const prTag = hasPR ? chalk_1.default.magenta(' [PR]') : '';
|
|
24
|
+
return {
|
|
25
|
+
name: `#${issue.number}\t${issue.title}${prTag}`,
|
|
26
|
+
value: issue.number,
|
|
27
|
+
};
|
|
39
28
|
});
|
|
40
|
-
const {
|
|
29
|
+
const { issueNumbers } = await inquirer_1.default.prompt([
|
|
41
30
|
{
|
|
42
|
-
type: '
|
|
43
|
-
name: '
|
|
44
|
-
message: 'Select
|
|
31
|
+
type: 'checkbox',
|
|
32
|
+
name: 'issueNumbers',
|
|
33
|
+
message: 'Select issues to solve (space to select, enter to confirm):',
|
|
45
34
|
choices,
|
|
46
35
|
pageSize: 15,
|
|
47
36
|
},
|
|
48
37
|
]);
|
|
49
|
-
if (
|
|
50
|
-
console.log(chalk_1.default.dim('
|
|
38
|
+
if (issueNumbers.length === 0) {
|
|
39
|
+
console.log(chalk_1.default.dim('No issues selected.'));
|
|
51
40
|
return;
|
|
52
41
|
}
|
|
53
|
-
|
|
42
|
+
console.log(chalk_1.default.cyan(`\nStarting ${issueNumbers.length} issue(s)...\n`));
|
|
43
|
+
for (const issueNumber of issueNumbers) {
|
|
44
|
+
await (0, solve_1.solveCommand)(issueNumber);
|
|
45
|
+
console.log();
|
|
46
|
+
}
|
|
54
47
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-issue-solver",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0",
|
|
4
4
|
"description": "Automatically solve GitHub issues using Claude Code",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"dev": "ts-node src/index.ts",
|
|
13
|
-
"prepublishOnly": "npm run build"
|
|
13
|
+
"prepublishOnly": "npm run build",
|
|
14
|
+
"release": "npx ts-node scripts/release.ts"
|
|
14
15
|
},
|
|
15
16
|
"keywords": [
|
|
16
17
|
"claude",
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@types/inquirer": "^8.2.10",
|
|
37
38
|
"@types/node": "^20.10.0",
|
|
39
|
+
"ts-node": "^10.9.2",
|
|
38
40
|
"typescript": "^5.3.0"
|
|
39
41
|
},
|
|
40
42
|
"engines": {
|