@claudetree/cli 0.2.5 → 0.3.1

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.ja.md CHANGED
@@ -44,6 +44,8 @@ ct web
44
44
  | `ct doctor` | 環境ヘルスチェック |
45
45
  | `ct demo` | インタラクティブデモ(トークン不使用) |
46
46
  | `ct batch` | 複数の課題を並列処理 |
47
+ | `ct bustercall` | すべてのopen課題を自動取得して並列セッション実行 |
48
+ | `ct clean` | すべてのworktreeを削除(main以外) |
47
49
  | `ct web` | Webダッシュボード開始 |
48
50
 
49
51
  ## 主な機能
package/README.ko.md CHANGED
@@ -44,6 +44,8 @@ ct web
44
44
  | `ct doctor` | 환경 상태 확인 |
45
45
  | `ct demo` | 인터랙티브 데모 (토큰 미사용) |
46
46
  | `ct batch` | 여러 이슈를 병렬로 처리 |
47
+ | `ct bustercall` | 모든 open 이슈를 자동으로 가져와 병렬 세션 실행 |
48
+ | `ct clean` | 모든 worktree 제거 (main 제외) |
47
49
  | `ct web` | 웹 대시보드 시작 |
48
50
 
49
51
  ## 주요 기능
package/README.md CHANGED
@@ -44,6 +44,8 @@ ct web
44
44
  | `ct doctor` | Check environment health |
45
45
  | `ct demo` | Interactive demo (no tokens used) |
46
46
  | `ct batch` | Process multiple issues in parallel |
47
+ | `ct bustercall` | Auto-fetch all open issues and run parallel sessions |
48
+ | `ct clean` | Remove all worktrees (except main) |
47
49
  | `ct web` | Start web dashboard |
48
50
 
49
51
  ## Key Features
package/README.zh.md CHANGED
@@ -44,6 +44,8 @@ ct web
44
44
  | `ct doctor` | 检查环境健康状态 |
45
45
  | `ct demo` | 交互式演示(不消耗token) |
46
46
  | `ct batch` | 并行处理多个问题 |
47
+ | `ct bustercall` | 自动获取所有open问题并运行并行会话 |
48
+ | `ct clean` | 删除所有worktree(main除外) |
47
49
  | `ct web` | 启动Web仪表板 |
48
50
 
49
51
  ## 主要功能
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const bustercallCommand: Command;
3
+ //# sourceMappingURL=bustercall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bustercall.d.ts","sourceRoot":"","sources":["../../src/commands/bustercall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyGpC,eAAO,MAAM,iBAAiB,SAiJ1B,CAAC"}
@@ -0,0 +1,182 @@
1
+ import { Command } from 'commander';
2
+ import { join } from 'node:path';
3
+ import { access, readFile } from 'node:fs/promises';
4
+ import { spawn } from 'node:child_process';
5
+ import { GitHubAdapter, SlackNotifier } from '@claudetree/core';
6
+ const CONFIG_DIR = '.claudetree';
7
+ async function loadConfig(cwd) {
8
+ try {
9
+ const configPath = join(cwd, CONFIG_DIR, 'config.json');
10
+ await access(configPath);
11
+ const content = await readFile(configPath, 'utf-8');
12
+ return JSON.parse(content);
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ async function startSession(issueNumber, options) {
19
+ return new Promise((resolve, reject) => {
20
+ const args = ['start', String(issueNumber)];
21
+ if (options.template) {
22
+ args.push('--template', options.template);
23
+ }
24
+ const proc = spawn('claudetree', args, {
25
+ cwd: options.cwd,
26
+ stdio: 'inherit',
27
+ detached: true,
28
+ });
29
+ proc.unref();
30
+ setTimeout(() => resolve(), 1000);
31
+ proc.on('error', reject);
32
+ });
33
+ }
34
+ function truncate(str, maxLen) {
35
+ if (str.length <= maxLen)
36
+ return str;
37
+ return str.slice(0, maxLen - 3) + '...';
38
+ }
39
+ function printStatus(items) {
40
+ console.clear();
41
+ console.log('\n=== Bustercall ===\n');
42
+ for (const item of items) {
43
+ const icon = item.status === 'pending' ? '\u25CB' :
44
+ item.status === 'running' ? '\u25D0' :
45
+ item.status === 'completed' ? '\u25CF' :
46
+ '\u2717';
47
+ const color = item.status === 'pending' ? '\x1b[90m' :
48
+ item.status === 'running' ? '\x1b[33m' :
49
+ item.status === 'completed' ? '\x1b[32m' :
50
+ '\x1b[31m';
51
+ const title = truncate(item.issue.title, 40);
52
+ const statusText = item.error ? ` [${item.error}]` : '';
53
+ console.log(` ${color}${icon}\x1b[0m #${item.issue.number} - ${title}${statusText}`);
54
+ }
55
+ const completed = items.filter((i) => i.status === 'completed').length;
56
+ const failed = items.filter((i) => i.status === 'failed').length;
57
+ const running = items.filter((i) => i.status === 'running').length;
58
+ console.log(`\n[${completed}/${items.length}] completed, ${running} running, ${failed} failed`);
59
+ }
60
+ export const bustercallCommand = new Command('bustercall')
61
+ .description('Auto-fetch all open issues and start parallel Claude sessions')
62
+ .option('-l, --label <label>', 'Filter by GitHub label (comma-separated for AND)')
63
+ .option('-n, --limit <number>', 'Maximum issues to process', '10')
64
+ .option('-P, --parallel <number>', 'Number of parallel sessions', '3')
65
+ .option('-T, --template <template>', 'Session template to use')
66
+ .option('-t, --token <token>', 'GitHub token (or use GITHUB_TOKEN env)')
67
+ .option('-e, --exclude <numbers>', 'Exclude issue numbers (comma-separated)')
68
+ .option('--dry-run', 'Show target issues without starting', false)
69
+ .action(async (options) => {
70
+ const cwd = process.cwd();
71
+ const config = await loadConfig(cwd);
72
+ if (!config) {
73
+ console.error('Error: claudetree not initialized. Run "claudetree init" first.');
74
+ process.exit(1);
75
+ }
76
+ const ghToken = options.token ?? process.env.GITHUB_TOKEN ?? config.github?.token;
77
+ if (!ghToken || !config.github?.owner || !config.github?.repo) {
78
+ console.error('Error: GitHub configuration required for bustercall.');
79
+ console.log('\nRequired:');
80
+ console.log(' - GITHUB_TOKEN environment variable or --token flag');
81
+ console.log(' - github.owner and github.repo in .claudetree/config.json');
82
+ process.exit(1);
83
+ }
84
+ const ghAdapter = new GitHubAdapter(ghToken);
85
+ console.log('Fetching open issues from GitHub...');
86
+ let issues;
87
+ try {
88
+ issues = await ghAdapter.listIssues(config.github.owner, config.github.repo, {
89
+ labels: options.label,
90
+ state: 'open',
91
+ });
92
+ }
93
+ catch (err) {
94
+ console.error(`Error fetching issues: ${err instanceof Error ? err.message : err}`);
95
+ process.exit(1);
96
+ }
97
+ // Apply exclude filter
98
+ if (options.exclude) {
99
+ const excludeSet = new Set(options.exclude.split(',').map((n) => parseInt(n.trim(), 10)));
100
+ issues = issues.filter((i) => !excludeSet.has(i.number));
101
+ }
102
+ // Apply limit
103
+ const limit = parseInt(options.limit, 10);
104
+ if (issues.length > limit) {
105
+ console.log(`Found ${issues.length} issues, limiting to ${limit}`);
106
+ issues = issues.slice(0, limit);
107
+ }
108
+ else {
109
+ console.log(`Found ${issues.length} issues`);
110
+ }
111
+ if (issues.length === 0) {
112
+ console.log('No open issues found matching criteria.');
113
+ process.exit(0);
114
+ }
115
+ // Dry run mode
116
+ if (options.dryRun) {
117
+ console.log('\n[Dry Run] Would start sessions for:\n');
118
+ issues.forEach((issue, i) => {
119
+ console.log(` ${i + 1}. #${issue.number} - ${issue.title}`);
120
+ if (issue.labels.length > 0) {
121
+ console.log(` Labels: ${issue.labels.join(', ')}`);
122
+ }
123
+ });
124
+ return;
125
+ }
126
+ // Initialize items
127
+ const items = issues.map((issue) => ({
128
+ issue,
129
+ status: 'pending',
130
+ }));
131
+ const parallelLimit = parseInt(options.parallel, 10);
132
+ let runningCount = 0;
133
+ let currentIndex = 0;
134
+ const startNext = async () => {
135
+ while (runningCount < parallelLimit && currentIndex < items.length) {
136
+ const item = items[currentIndex];
137
+ if (!item)
138
+ break;
139
+ currentIndex++;
140
+ runningCount++;
141
+ item.status = 'running';
142
+ printStatus(items);
143
+ try {
144
+ await startSession(item.issue.number, {
145
+ template: options.template,
146
+ cwd,
147
+ });
148
+ item.status = 'completed';
149
+ }
150
+ catch (err) {
151
+ item.status = 'failed';
152
+ item.error = err instanceof Error ? err.message : 'Unknown error';
153
+ }
154
+ runningCount--;
155
+ printStatus(items);
156
+ }
157
+ };
158
+ // Start initial batch
159
+ const promises = [];
160
+ for (let i = 0; i < parallelLimit && i < items.length; i++) {
161
+ promises.push(startNext());
162
+ }
163
+ await Promise.all(promises);
164
+ // Final status
165
+ console.log('\n=== Bustercall Complete ===');
166
+ const completed = items.filter((i) => i.status === 'completed').length;
167
+ const failed = items.filter((i) => i.status === 'failed').length;
168
+ console.log(`Completed: ${completed}, Failed: ${failed}`);
169
+ // Send Slack notification
170
+ if (config.slack?.webhookUrl) {
171
+ const slack = new SlackNotifier(config.slack.webhookUrl);
172
+ await slack.notifyBatch(items.map((item) => ({
173
+ issue: String(item.issue.number),
174
+ status: item.status === 'completed' ? 'completed' : 'failed',
175
+ error: item.error,
176
+ })));
177
+ console.log('\nSlack notification sent.');
178
+ }
179
+ console.log('\nView all sessions: claudetree status');
180
+ console.log('Open dashboard: claudetree web');
181
+ });
182
+ //# sourceMappingURL=bustercall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bustercall.js","sourceRoot":"","sources":["../../src/commands/bustercall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const cleanCommand: Command;
3
+ //# sourceMappingURL=clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,eAAO,MAAM,YAAY,SAyGrB,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { Command } from 'commander';
2
+ import { join } from 'node:path';
3
+ import { createInterface } from 'node:readline';
4
+ import { GitWorktreeAdapter, FileSessionRepository } from '@claudetree/core';
5
+ const CONFIG_DIR = '.claudetree';
6
+ async function confirm(message) {
7
+ const rl = createInterface({
8
+ input: process.stdin,
9
+ output: process.stdout,
10
+ });
11
+ return new Promise((resolve) => {
12
+ rl.question(`${message} [y/N] `, (answer) => {
13
+ rl.close();
14
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
15
+ });
16
+ });
17
+ }
18
+ export const cleanCommand = new Command('clean')
19
+ .description('Remove all worktrees (except main)')
20
+ .option('-f, --force', 'Force removal without confirmation', false)
21
+ .option('--keep-sessions', 'Keep session records after removal', false)
22
+ .option('--dry-run', 'Show what would be removed without removing', false)
23
+ .action(async (options) => {
24
+ const cwd = process.cwd();
25
+ const adapter = new GitWorktreeAdapter(cwd);
26
+ try {
27
+ const worktrees = await adapter.list();
28
+ const toRemove = worktrees.filter((wt) => !wt.isMainWorktree);
29
+ if (toRemove.length === 0) {
30
+ console.log('No worktrees to remove.');
31
+ return;
32
+ }
33
+ console.log('\n=== Clean Worktrees ===\n');
34
+ console.log(`Found ${toRemove.length} worktree(s) to remove:\n`);
35
+ for (const wt of toRemove) {
36
+ const branch = wt.branch || '(detached)';
37
+ console.log(` \u2022 ${wt.path} (${branch})`);
38
+ }
39
+ if (options.dryRun) {
40
+ console.log('\n[Dry run] No changes made.');
41
+ return;
42
+ }
43
+ if (!options.force) {
44
+ console.log('');
45
+ const confirmed = await confirm('Are you sure you want to remove these worktrees?');
46
+ if (!confirmed) {
47
+ console.log('Cancelled.');
48
+ return;
49
+ }
50
+ }
51
+ console.log('');
52
+ let successCount = 0;
53
+ let failCount = 0;
54
+ for (const wt of toRemove) {
55
+ process.stdout.write(`Removing ${wt.path}... `);
56
+ try {
57
+ await adapter.remove(wt.path, options.force);
58
+ console.log('\u2713');
59
+ successCount++;
60
+ }
61
+ catch (error) {
62
+ console.log('\u2717');
63
+ if (error instanceof Error) {
64
+ console.log(` Error: ${error.message}`);
65
+ }
66
+ failCount++;
67
+ }
68
+ }
69
+ // Clean up sessions if not keeping them
70
+ if (!options.keepSessions) {
71
+ const configDir = join(cwd, CONFIG_DIR);
72
+ try {
73
+ const sessionRepo = new FileSessionRepository(configDir);
74
+ const sessions = await sessionRepo.findAll();
75
+ // Find sessions that reference removed worktrees
76
+ const removedPaths = new Set(toRemove.map((wt) => wt.path));
77
+ const sessionsToDelete = sessions.filter((s) => s.worktreePath && removedPaths.has(s.worktreePath));
78
+ for (const session of sessionsToDelete) {
79
+ await sessionRepo.delete(session.id);
80
+ }
81
+ if (sessionsToDelete.length > 0) {
82
+ console.log(`\nRemoved ${sessionsToDelete.length} associated session(s).`);
83
+ }
84
+ }
85
+ catch {
86
+ // Config dir might not exist, which is fine
87
+ }
88
+ }
89
+ // Prune stale worktree entries
90
+ process.stdout.write('\nPruning stale entries... ');
91
+ try {
92
+ await adapter.prune();
93
+ console.log('\u2713');
94
+ }
95
+ catch {
96
+ console.log('\u2717');
97
+ }
98
+ console.log(`\nRemoved ${successCount} worktree(s) successfully.`);
99
+ if (failCount > 0) {
100
+ console.log(`Failed to remove ${failCount} worktree(s).`);
101
+ process.exit(1);
102
+ }
103
+ }
104
+ catch (error) {
105
+ if (error instanceof Error) {
106
+ console.error(`Error: ${error.message}`);
107
+ }
108
+ process.exit(1);
109
+ }
110
+ });
111
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { program } from 'commander';
3
3
  import { batchCommand } from './commands/batch.js';
4
+ import { bustercallCommand } from './commands/bustercall.js';
5
+ import { cleanCommand } from './commands/clean.js';
4
6
  import { demoCommand } from './commands/demo.js';
5
7
  import { doctorCommand } from './commands/doctor.js';
6
8
  import { initCommand } from './commands/init.js';
@@ -15,6 +17,8 @@ program
15
17
  .description('Git Worktree-based Claude Code multi-session manager')
16
18
  .version('0.1.0');
17
19
  program.addCommand(batchCommand);
20
+ program.addCommand(bustercallCommand);
21
+ program.addCommand(cleanCommand);
18
22
  program.addCommand(demoCommand);
19
23
  program.addCommand(doctorCommand);
20
24
  program.addCommand(initCommand);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudetree/cli",
3
- "version": "0.2.5",
3
+ "version": "0.3.1",
4
4
  "description": "CLI for claudetree - Manage Claude sessions with git worktrees",
5
5
  "type": "module",
6
6
  "bin": {
@@ -28,8 +28,8 @@
28
28
  "license": "MIT",
29
29
  "dependencies": {
30
30
  "commander": "^13.0.0",
31
- "@claudetree/core": "0.2.5",
32
- "@claudetree/shared": "0.2.5"
31
+ "@claudetree/core": "0.3.1",
32
+ "@claudetree/shared": "0.3.1"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^22.10.0",