@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 +2 -0
- package/README.ko.md +2 -0
- package/README.md +2 -0
- package/README.zh.md +2 -0
- package/dist/commands/bustercall.d.ts +3 -0
- package/dist/commands/bustercall.d.ts.map +1 -0
- package/dist/commands/bustercall.js +182 -0
- package/dist/commands/bustercall.js.map +1 -0
- package/dist/commands/clean.d.ts +3 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +111 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.ja.md
CHANGED
package/README.ko.md
CHANGED
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
|
@@ -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 @@
|
|
|
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.
|
|
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.
|
|
32
|
-
"@claudetree/shared": "0.
|
|
31
|
+
"@claudetree/core": "0.3.1",
|
|
32
|
+
"@claudetree/shared": "0.3.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^22.10.0",
|