@claudetree/cli 0.13.0 → 0.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.
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const archiveCommand: Command;
3
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,cAAc,SAiGvB,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { Command } from 'commander';
2
+ import { join } from 'node:path';
3
+ import { access, writeFile, mkdir } from 'node:fs/promises';
4
+ import { FileSessionRepository } from '@claudetree/core';
5
+ const CONFIG_DIR = '.claudetree';
6
+ export const archiveCommand = new Command('archive')
7
+ .description('Archive old sessions to reduce clutter in status/stats')
8
+ .option('--status <statuses>', 'Archive sessions with these statuses (comma-separated)', 'completed,failed')
9
+ .option('--before <period>', 'Only archive sessions older than period (e.g. 7d, 30d)')
10
+ .option('--dry-run', 'Show what would be archived', false)
11
+ .option('--tag <tags...>', 'Only archive sessions with these tags')
12
+ .action(async (options) => {
13
+ const cwd = process.cwd();
14
+ const configDir = join(cwd, CONFIG_DIR);
15
+ try {
16
+ await access(configDir);
17
+ }
18
+ catch {
19
+ console.error('Error: claudetree not initialized. Run "claudetree init" first.');
20
+ process.exit(1);
21
+ }
22
+ const sessionRepo = new FileSessionRepository(configDir);
23
+ const sessions = await sessionRepo.findAll();
24
+ const statusFilter = new Set(options.status.split(',').map((s) => s.trim()));
25
+ let candidates = sessions.filter((s) => statusFilter.has(s.status));
26
+ // Time filter
27
+ if (options.before) {
28
+ const match = options.before.match(/^(\d+)([hdwm])$/);
29
+ if (match) {
30
+ const val = parseInt(match[1], 10);
31
+ const unit = match[2];
32
+ const msMap = {
33
+ h: 3_600_000, d: 86_400_000, w: 604_800_000, m: 2_592_000_000,
34
+ };
35
+ const cutoff = Date.now() - val * (msMap[unit] ?? 86_400_000);
36
+ candidates = candidates.filter((s) => new Date(s.updatedAt).getTime() < cutoff);
37
+ }
38
+ }
39
+ // Tag filter
40
+ if (options.tag?.length) {
41
+ const filterTags = new Set(options.tag);
42
+ candidates = candidates.filter((s) => s.tags?.some((t) => filterTags.has(t)));
43
+ }
44
+ if (candidates.length === 0) {
45
+ console.log('No sessions to archive.');
46
+ process.exit(0);
47
+ }
48
+ if (options.dryRun) {
49
+ console.log(`\nWould archive ${candidates.length} session(s):\n`);
50
+ for (const s of candidates) {
51
+ const issue = s.issueNumber ? `#${s.issueNumber}` : s.id.slice(0, 8);
52
+ console.log(` ${issue} | ${s.status} | ${new Date(s.updatedAt).toLocaleDateString()}`);
53
+ }
54
+ return;
55
+ }
56
+ // Save to archive file
57
+ const archiveDir = join(configDir, 'archive');
58
+ await mkdir(archiveDir, { recursive: true });
59
+ const archivePath = join(archiveDir, `archive-${Date.now()}.json`);
60
+ let totalCost = 0;
61
+ for (const s of candidates) {
62
+ if (s.usage)
63
+ totalCost += s.usage.totalCostUsd;
64
+ }
65
+ await writeFile(archivePath, JSON.stringify({
66
+ archivedAt: new Date().toISOString(),
67
+ count: candidates.length,
68
+ totalCost,
69
+ sessions: candidates,
70
+ }, null, 2));
71
+ // Remove archived sessions from active list
72
+ const archivedIds = new Set(candidates.map((s) => s.id));
73
+ const remaining = sessions.filter((s) => !archivedIds.has(s.id));
74
+ const sessionsPath = join(configDir, 'sessions.json');
75
+ await writeFile(sessionsPath, JSON.stringify(remaining, null, 2));
76
+ console.log(`\n\x1b[32m✓\x1b[0m Archived ${candidates.length} session(s)`);
77
+ console.log(` Total cost archived: $${totalCost.toFixed(4)}`);
78
+ console.log(` Archive: ${archivePath}`);
79
+ console.log(` Remaining active: ${remaining.length} session(s)`);
80
+ });
81
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,UAAU,GAAG,aAAa,CAAC;AASjC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CACL,qBAAqB,EACrB,wDAAwD,EACxD,kBAAkB,CACnB;KACA,MAAM,CACL,mBAAmB,EACnB,wDAAwD,CACzD;KACA,MAAM,CAAC,WAAW,EAAE,6BAA6B,EAAE,KAAK,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,uCAAuC,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAE7C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7E,IAAI,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpE,cAAc;IACd,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,KAAK,GAA2B;gBACpC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa;aAC9D,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;YAC9D,UAAU,GAAG,UAAU,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,aAAa;IACb,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,UAAU,GAAG,UAAU,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACtD,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAClE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO;IACT,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnE,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,KAAK;YAAE,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IACjD,CAAC;IAED,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;QAC1C,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,KAAK,EAAE,UAAU,CAAC,MAAM;QACxB,SAAS;QACT,QAAQ,EAAE,UAAU;KACrB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEb,4CAA4C;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAElE,OAAO,CAAC,GAAG,CAAC,+BAA+B,UAAU,CAAC,MAAM,aAAa,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,MAAM,aAAa,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const templateCommand: Command;
3
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,eAAe,SA6GzB,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { Command } from 'commander';
2
+ import { join } from 'node:path';
3
+ import { access, writeFile, mkdir } from 'node:fs/promises';
4
+ import { TemplateLoader, DEFAULT_TEMPLATES } from '@claudetree/core';
5
+ const CONFIG_DIR = '.claudetree';
6
+ function printTemplate(name, tmpl) {
7
+ const desc = tmpl.description ?? '(no description)';
8
+ const skill = tmpl.skill ? `\x1b[33m[${tmpl.skill}]\x1b[0m ` : '';
9
+ console.log(` \x1b[36m${name}\x1b[0m ${skill}- ${desc}`);
10
+ }
11
+ export const templateCommand = new Command('template')
12
+ .description('Manage session templates (list, show, create)')
13
+ .addCommand(new Command('list')
14
+ .description('List all available templates')
15
+ .action(async () => {
16
+ const cwd = process.cwd();
17
+ const loader = new TemplateLoader(join(cwd, CONFIG_DIR));
18
+ console.log('\n\x1b[36mBuilt-in Templates:\x1b[0m\n');
19
+ for (const [name, tmpl] of Object.entries(DEFAULT_TEMPLATES)) {
20
+ printTemplate(name, tmpl);
21
+ }
22
+ const custom = await loader.loadAll();
23
+ if (Object.keys(custom).length > 0) {
24
+ console.log('\n\x1b[36mCustom Templates:\x1b[0m\n');
25
+ for (const [name, tmpl] of Object.entries(custom)) {
26
+ printTemplate(name, tmpl);
27
+ }
28
+ }
29
+ console.log(`\n Total: ${Object.keys(DEFAULT_TEMPLATES).length + Object.keys(custom).length} template(s)`);
30
+ console.log(' Use: \x1b[90mct template show <name>\x1b[0m for details\n');
31
+ }))
32
+ .addCommand(new Command('show')
33
+ .description('Show template details')
34
+ .argument('<name>', 'Template name')
35
+ .action(async (name) => {
36
+ const cwd = process.cwd();
37
+ const loader = new TemplateLoader(join(cwd, CONFIG_DIR));
38
+ let tmpl = null;
39
+ if (name in DEFAULT_TEMPLATES) {
40
+ tmpl = DEFAULT_TEMPLATES[name] ?? null;
41
+ }
42
+ if (!tmpl) {
43
+ tmpl = await loader.load(name);
44
+ }
45
+ if (!tmpl) {
46
+ console.error(`Template "${name}" not found.`);
47
+ console.log('Run: ct template list');
48
+ process.exit(1);
49
+ }
50
+ console.log(`\n\x1b[36m╔══════════════════════════════════════════╗\x1b[0m`);
51
+ console.log(`\x1b[36m║ Template: ${tmpl.name.padEnd(29)}║\x1b[0m`);
52
+ console.log(`\x1b[36m╚══════════════════════════════════════════╝\x1b[0m\n`);
53
+ if (tmpl.description) {
54
+ console.log(` Description: ${tmpl.description}`);
55
+ }
56
+ if (tmpl.skill) {
57
+ console.log(` Skill: ${tmpl.skill}`);
58
+ }
59
+ if (tmpl.allowedTools?.length) {
60
+ console.log(` Allowed tools: ${tmpl.allowedTools.join(', ')}`);
61
+ }
62
+ if (tmpl.promptPrefix) {
63
+ console.log(`\n \x1b[33mPrompt Prefix:\x1b[0m`);
64
+ console.log(` ${tmpl.promptPrefix.split('\n').join('\n ')}`);
65
+ }
66
+ if (tmpl.promptSuffix) {
67
+ console.log(`\n \x1b[33mPrompt Suffix:\x1b[0m`);
68
+ console.log(` ${tmpl.promptSuffix}`);
69
+ }
70
+ console.log('');
71
+ }))
72
+ .addCommand(new Command('create')
73
+ .description('Create a custom template')
74
+ .argument('<name>', 'Template name')
75
+ .option('-d, --description <desc>', 'Template description')
76
+ .option('-p, --prompt <prompt>', 'Prompt prefix')
77
+ .option('-s, --skill <skill>', 'Skill to activate (tdd, review, docs)')
78
+ .action(async (name, options) => {
79
+ const cwd = process.cwd();
80
+ const templatesDir = join(cwd, CONFIG_DIR, 'templates');
81
+ try {
82
+ await access(join(cwd, CONFIG_DIR));
83
+ }
84
+ catch {
85
+ console.error('Error: claudetree not initialized. Run "claudetree init" first.');
86
+ process.exit(1);
87
+ }
88
+ const template = {
89
+ name,
90
+ description: options.description ?? `Custom template: ${name}`,
91
+ promptPrefix: options.prompt ?? `You are working with the ${name} template. Follow best practices.`,
92
+ skill: options.skill,
93
+ };
94
+ await mkdir(templatesDir, { recursive: true });
95
+ await writeFile(join(templatesDir, `${name}.json`), JSON.stringify(template, null, 2));
96
+ console.log(`\n\x1b[32m✓\x1b[0m Template "${name}" created`);
97
+ console.log(` Path: ${join(templatesDir, `${name}.json`)}`);
98
+ console.log(` Use: ct start <issue> --template ${name}\n`);
99
+ }));
100
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { program } from 'commander';
4
+ import { archiveCommand } from './commands/archive.js';
4
5
  import { batchCommand } from './commands/batch.js';
5
6
  import { bustercallCommand } from './commands/bustercall.js';
6
7
  import { chainCommand } from './commands/chain.js';
@@ -19,6 +20,7 @@ import { statsCommand } from './commands/stats.js';
19
20
  import { statusCommand } from './commands/status.js';
20
21
  import { stopCommand } from './commands/stop.js';
21
22
  import { summaryCommand } from './commands/summary.js';
23
+ import { templateCommand } from './commands/template.js';
22
24
  import { watchCommand } from './commands/watch.js';
23
25
  import { webCommand } from './commands/web.js';
24
26
  const require = createRequire(import.meta.url);
@@ -42,10 +44,12 @@ program.addCommand(diffCommand);
42
44
  program.addCommand(exportCommand);
43
45
  program.addCommand(prCommand);
44
46
  program.addCommand(summaryCommand);
47
+ program.addCommand(templateCommand);
45
48
  program.addCommand(watchCommand);
46
49
  program.addCommand(webCommand);
47
50
  program.addCommand(listCommand);
48
51
  program.addCommand(cleanCommand);
52
+ program.addCommand(archiveCommand);
49
53
  program.addCommand(doctorCommand);
50
54
  program.addHelpText('after', `
51
55
  Quick Start:
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudetree/cli",
3
- "version": "0.13.0",
3
+ "version": "0.15.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": {
@@ -36,11 +36,11 @@
36
36
  "dependencies": {
37
37
  "async-mutex": "^0.5.0",
38
38
  "commander": "^14.0.3",
39
- "@claudetree/core": "0.10.0",
40
- "@claudetree/shared": "0.7.1"
39
+ "@claudetree/core": "0.11.1",
40
+ "@claudetree/shared": "0.8.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@types/node": "^25.0.3",
43
+ "@types/node": "^25.6.0",
44
44
  "typescript": "^5.9.3",
45
45
  "vitest": "^4.1.4"
46
46
  },