@claudetree/cli 0.8.1 → 0.9.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.
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const prCommand: Command;
3
+ //# sourceMappingURL=pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkOpC,eAAO,MAAM,SAAS,SAyElB,CAAC"}
@@ -0,0 +1,233 @@
1
+ import { Command } from 'commander';
2
+ import { join } from 'node:path';
3
+ import { access, readFile } from 'node:fs/promises';
4
+ import { exec as execCb } from 'node:child_process';
5
+ import { FileSessionRepository } from '@claudetree/core';
6
+ function execAsync(cmd, opts) {
7
+ return new Promise((resolve, reject) => {
8
+ execCb(cmd, opts ?? {}, (error, stdout, stderr) => {
9
+ if (error)
10
+ reject(error);
11
+ else
12
+ resolve({ stdout: String(stdout), stderr: String(stderr) });
13
+ });
14
+ });
15
+ }
16
+ const CONFIG_DIR = '.claudetree';
17
+ async function loadConfig(cwd) {
18
+ try {
19
+ const configPath = join(cwd, CONFIG_DIR, 'config.json');
20
+ await access(configPath);
21
+ const content = await readFile(configPath, 'utf-8');
22
+ return JSON.parse(content);
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ async function getGitDiffStat(worktreePath, base) {
29
+ try {
30
+ const { stdout } = await execAsync(`git diff ${base}...HEAD --stat`, { cwd: worktreePath });
31
+ return stdout.trim();
32
+ }
33
+ catch {
34
+ return '(diff unavailable)';
35
+ }
36
+ }
37
+ async function getCommitMessages(worktreePath, base) {
38
+ try {
39
+ const { stdout } = await execAsync(`git log ${base}..HEAD --pretty=format:"%s"`, { cwd: worktreePath });
40
+ return stdout.trim().split('\n').filter(Boolean);
41
+ }
42
+ catch {
43
+ return [];
44
+ }
45
+ }
46
+ async function getCurrentBranch(worktreePath) {
47
+ const { stdout } = await execAsync('git rev-parse --abbrev-ref HEAD', { cwd: worktreePath });
48
+ return stdout.trim();
49
+ }
50
+ function extractIssueNumber(branch) {
51
+ const match = branch.match(/issue-(\d+)/);
52
+ return match ? parseInt(match[1], 10) : null;
53
+ }
54
+ function categorizeCommits(messages) {
55
+ const categories = {};
56
+ for (const msg of messages) {
57
+ const match = msg.match(/^(feat|fix|test|refactor|docs|chore|style|perf)(\(.+?\))?:\s*(.+)/);
58
+ if (match) {
59
+ const type = match[1];
60
+ const desc = match[3];
61
+ if (!categories[type])
62
+ categories[type] = [];
63
+ categories[type].push(desc);
64
+ }
65
+ else {
66
+ if (!categories['other'])
67
+ categories['other'] = [];
68
+ categories['other'].push(msg);
69
+ }
70
+ }
71
+ return categories;
72
+ }
73
+ function buildPRBody(session, commits, diffStat, issueNumber) {
74
+ const categories = categorizeCommits(commits);
75
+ const typeLabels = {
76
+ feat: 'Features',
77
+ fix: 'Bug Fixes',
78
+ test: 'Tests',
79
+ refactor: 'Refactoring',
80
+ docs: 'Documentation',
81
+ chore: 'Chores',
82
+ style: 'Style',
83
+ perf: 'Performance',
84
+ other: 'Other',
85
+ };
86
+ let body = '## Summary\n\n';
87
+ for (const [type, items] of Object.entries(categories)) {
88
+ const label = typeLabels[type] ?? type;
89
+ body += `### ${label}\n`;
90
+ for (const item of items) {
91
+ body += `- ${item}\n`;
92
+ }
93
+ body += '\n';
94
+ }
95
+ if (issueNumber) {
96
+ body += `Closes #${issueNumber}\n\n`;
97
+ }
98
+ body += '## Session Info\n\n';
99
+ body += `| Metric | Value |\n|--------|-------|\n`;
100
+ body += `| Session ID | \`${session.id.slice(0, 8)}\` |\n`;
101
+ body += `| Status | ${session.status} |\n`;
102
+ if (session.usage) {
103
+ body += `| Cost | $${session.usage.totalCostUsd.toFixed(4)} |\n`;
104
+ body += `| Tokens | ${session.usage.inputTokens.toLocaleString()} in / ${session.usage.outputTokens.toLocaleString()} out |\n`;
105
+ }
106
+ if (session.tags?.length) {
107
+ body += `| Tags | ${session.tags.join(', ')} |\n`;
108
+ }
109
+ body += '\n## Changes\n\n```\n' + diffStat + '\n```\n';
110
+ body += '\n---\n*Generated by [claudetree](https://github.com/wonjangcloud9/claude-tree)*\n';
111
+ return body;
112
+ }
113
+ function buildPRTitle(_session, commits, issueNumber) {
114
+ // Use first feat/fix commit as title, or first commit
115
+ const featCommit = commits.find((c) => c.startsWith('feat:') || c.startsWith('fix:'));
116
+ if (featCommit) {
117
+ const prefix = issueNumber ? `#${issueNumber} ` : '';
118
+ return `${prefix}${featCommit}`.slice(0, 70);
119
+ }
120
+ const prefix = issueNumber ? `Issue #${issueNumber}: ` : '';
121
+ return `${prefix}${commits[0] ?? 'Session changes'}`.slice(0, 70);
122
+ }
123
+ async function createPRForSession(session, config, base, dryRun) {
124
+ if (!session.worktreePath) {
125
+ return { title: '', error: 'No worktree path' };
126
+ }
127
+ const branch = await getCurrentBranch(session.worktreePath);
128
+ const issueNumber = session.issueNumber ?? extractIssueNumber(branch);
129
+ const commits = await getCommitMessages(session.worktreePath, base);
130
+ if (commits.length === 0) {
131
+ return { title: '', error: 'No commits to create PR from' };
132
+ }
133
+ const diffStat = await getGitDiffStat(session.worktreePath, base);
134
+ const title = buildPRTitle(session, commits, issueNumber);
135
+ const body = buildPRBody(session, commits, diffStat, issueNumber);
136
+ if (dryRun) {
137
+ console.log(`\n\x1b[36m--- PR Preview: ${session.id.slice(0, 8)} ---\x1b[0m`);
138
+ console.log(`Title: ${title}`);
139
+ console.log(`Branch: ${branch} → ${base}`);
140
+ console.log(`Commits: ${commits.length}`);
141
+ if (issueNumber)
142
+ console.log(`Closes: #${issueNumber}`);
143
+ console.log(`\n${body}`);
144
+ return { title };
145
+ }
146
+ // Push branch first
147
+ try {
148
+ await execAsync(`git push -u origin ${branch}`, { cwd: session.worktreePath });
149
+ }
150
+ catch {
151
+ // May already be pushed
152
+ }
153
+ // Create PR via gh CLI
154
+ const owner = config.github?.owner;
155
+ const repo = config.github?.repo;
156
+ if (!owner || !repo) {
157
+ return { title, error: 'GitHub owner/repo not configured' };
158
+ }
159
+ try {
160
+ const { stdout } = await execAsync(`unset GITHUB_TOKEN && gh pr create --repo ${owner}/${repo} --base ${base} --head ${branch} --title "${title.replace(/"/g, '\\"')}" --body "${body.replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`, { cwd: session.worktreePath });
161
+ const url = stdout.trim();
162
+ return { url, title };
163
+ }
164
+ catch (err) {
165
+ return { title, error: err instanceof Error ? err.message : 'PR creation failed' };
166
+ }
167
+ }
168
+ export const prCommand = new Command('pr')
169
+ .description('Create pull requests from completed sessions')
170
+ .option('-s, --session <id>', 'Session ID (creates PR for specific session)')
171
+ .option('-b, --base <branch>', 'Base branch for PR (default: develop)', 'develop')
172
+ .option('--dry-run', 'Preview PR without creating', false)
173
+ .option('-a, --all', 'Create PRs for all completed sessions without PRs', false)
174
+ .option('-t, --token <token>', 'GitHub token')
175
+ .action(async (options) => {
176
+ const cwd = process.cwd();
177
+ const config = await loadConfig(cwd);
178
+ if (!config) {
179
+ console.error('Error: claudetree not initialized. Run "claudetree init" first.');
180
+ process.exit(1);
181
+ }
182
+ const sessionRepo = new FileSessionRepository(join(cwd, CONFIG_DIR));
183
+ const sessions = await sessionRepo.findAll();
184
+ let targets;
185
+ if (options.session) {
186
+ const found = sessions.find((s) => s.id === options.session || s.id.startsWith(options.session));
187
+ if (!found) {
188
+ console.error(`Session "${options.session}" not found.`);
189
+ process.exit(1);
190
+ }
191
+ targets = [found];
192
+ }
193
+ else if (options.all) {
194
+ targets = sessions.filter((s) => s.status === 'completed');
195
+ }
196
+ else {
197
+ targets = sessions.filter((s) => s.status === 'completed');
198
+ if (targets.length === 0) {
199
+ console.log('No completed sessions found.');
200
+ process.exit(0);
201
+ }
202
+ console.log(`Found ${targets.length} completed session(s).`);
203
+ }
204
+ if (targets.length === 0) {
205
+ console.log('No sessions to create PRs for.');
206
+ process.exit(0);
207
+ }
208
+ console.log(`\n\x1b[36m╔══════════════════════════════════════════╗\x1b[0m`);
209
+ console.log(`\x1b[36m║ Creating Pull Requests ║\x1b[0m`);
210
+ console.log(`\x1b[36m╚══════════════════════════════════════════╝\x1b[0m\n`);
211
+ let created = 0;
212
+ let failed = 0;
213
+ for (const session of targets) {
214
+ const issueStr = session.issueNumber ? `#${session.issueNumber}` : session.id.slice(0, 8);
215
+ console.log(` Processing ${issueStr}...`);
216
+ const result = await createPRForSession(session, config, options.base, options.dryRun);
217
+ if (result.error) {
218
+ console.log(` \x1b[31m✗\x1b[0m ${issueStr}: ${result.error}`);
219
+ failed++;
220
+ }
221
+ else if (result.url) {
222
+ console.log(` \x1b[32m✓\x1b[0m ${issueStr}: ${result.url}`);
223
+ created++;
224
+ }
225
+ else if (options.dryRun) {
226
+ created++;
227
+ }
228
+ }
229
+ if (!options.dryRun) {
230
+ console.log(`\n Created: ${created}, Failed: ${failed}`);
231
+ }
232
+ });
233
+ //# sourceMappingURL=pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ import { exportCommand } from './commands/export.js';
11
11
  import { initCommand } from './commands/init.js';
12
12
  import { listCommand } from './commands/list.js';
13
13
  import { logCommand } from './commands/log.js';
14
+ import { prCommand } from './commands/pr.js';
14
15
  import { resumeCommand } from './commands/resume.js';
15
16
  import { startCommand } from './commands/start.js';
16
17
  import { statsCommand } from './commands/stats.js';
@@ -36,6 +37,7 @@ program.addCommand(bustercallCommand);
36
37
  program.addCommand(chainCommand);
37
38
  program.addCommand(configCommand);
38
39
  program.addCommand(exportCommand);
40
+ program.addCommand(prCommand);
39
41
  program.addCommand(watchCommand);
40
42
  program.addCommand(webCommand);
41
43
  program.addCommand(listCommand);
@@ -46,6 +48,7 @@ Quick Start:
46
48
  $ ct init # initialize in your project
47
49
  $ ct start <github-issue-url> # fire and forget
48
50
  $ ct status # monitor progress
51
+ $ ct pr --all # create PRs for completed sessions
49
52
  $ ct stats # view cost analytics
50
53
 
51
54
  Docs: https://github.com/wonjangcloud9/claude-tree`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,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,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,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,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,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,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,0FAA0F,CAAC;KACvG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,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,iBAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE;;;;;;;mDAOsB,CAAC,CAAC;AAErD,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,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,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,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,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,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,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,0FAA0F,CAAC;KACvG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,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,iBAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE;;;;;;;;mDAQsB,CAAC,CAAC;AAErD,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudetree/cli",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "description": "Issue-to-PR automation: parallel Claude Code sessions with cost tracking, batch processing & web dashboard",
5
5
  "type": "module",
6
6
  "bin": {