@agentbrain/cli 1.2.0 → 1.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,wBAAgB,oBAAoB,IAAI,OAAO,CAgB9C"}
1
+ {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,wBAAgB,oBAAoB,IAAI,OAAO,CAmB9C"}
@@ -13,24 +13,34 @@ export function createHandoffCommand() {
13
13
  .option('--path <path>', 'Repository path', process.cwd())
14
14
  .option('--goal <goal>', 'Session goal or objective')
15
15
  .option('--commits <number>', 'Number of recent commits to include (default: 5)', '5')
16
+ .option('--auto', 'Auto mode - skip prompts and banner (for git hooks)')
16
17
  .action(async (options) => {
17
18
  try {
18
19
  await runHandoff(options);
19
20
  }
20
21
  catch (err) {
21
- error(err instanceof Error ? err.message : 'Handoff generation failed');
22
+ if (!options.auto) {
23
+ error(err instanceof Error ? err.message : 'Handoff generation failed');
24
+ }
22
25
  process.exit(1);
23
26
  }
24
27
  });
25
28
  return cmd;
26
29
  }
27
30
  async function runHandoff(options) {
28
- displayBanner();
31
+ const auto = options.auto;
32
+ if (!auto) {
33
+ displayBanner();
34
+ }
29
35
  const repoPath = resolve(options.path);
30
- info(`Repository: ${repoPath}`);
36
+ if (!auto) {
37
+ info(`Repository: ${repoPath}`);
38
+ }
31
39
  // Load AI config
32
40
  const aiConfig = await loadAIConfig();
33
- info(`Using ${aiConfig.provider} API\n`);
41
+ if (!auto) {
42
+ info(`Using ${aiConfig.provider} API\n`);
43
+ }
34
44
  // Parse commit count
35
45
  const commitCount = parseInt(options.commits, 10);
36
46
  if (isNaN(commitCount) || commitCount < 1) {
@@ -38,21 +48,23 @@ async function runHandoff(options) {
38
48
  }
39
49
  // Get session goal if not provided
40
50
  let goal = options.goal;
41
- if (!goal) {
51
+ if (!goal && !auto) {
42
52
  goal = await input({
43
53
  message: 'Session goal (optional):',
44
54
  default: '',
45
55
  });
46
56
  }
47
57
  // Generate handoff
48
- const spin = spinner('Analyzing changes and generating handoff...');
58
+ const spin = auto ? null : spinner('Analyzing changes and generating handoff...');
49
59
  const result = await generateHandoff({
50
60
  repoPath,
51
61
  aiConfig,
52
62
  goal: goal || undefined,
53
63
  commitCount,
54
64
  });
55
- spin.succeed('Handoff generation complete!');
65
+ if (!auto) {
66
+ spin?.succeed('Handoff generation complete!');
67
+ }
56
68
  // Write to disk
57
69
  const outputDir = join(repoPath, 'agentbrain');
58
70
  if (!existsSync(outputDir)) {
@@ -60,20 +72,22 @@ async function runHandoff(options) {
60
72
  }
61
73
  const filePath = join(outputDir, 'handoff.md');
62
74
  await writeFile(filePath, result.doc.content, 'utf-8');
63
- displayGeneratedFiles([
64
- { name: 'agentbrain/handoff.md', description: 'Session handoff document' },
65
- ]);
66
- if (result.tokenCount > 0) {
67
- const cost = aiConfig.provider === 'anthropic' ? result.tokenCount / 1_000_000 * 3.0 : result.tokenCount / 1_000_000 * 2.5;
68
- info(`Tokens used: ${result.tokenCount.toLocaleString()} (~$${cost.toFixed(4)})`);
69
- }
70
- else {
71
- info('No AI tokens used (no changes detected)');
75
+ if (!auto) {
76
+ displayGeneratedFiles([
77
+ { name: 'agentbrain/handoff.md', description: 'Session handoff document' },
78
+ ]);
79
+ if (result.tokenCount > 0) {
80
+ const cost = aiConfig.provider === 'anthropic' ? (result.tokenCount / 1_000_000) * 3.0 : (result.tokenCount / 1_000_000) * 2.5;
81
+ info(`Tokens used: ${result.tokenCount.toLocaleString()} (~$${cost.toFixed(4)})`);
82
+ }
83
+ else {
84
+ info('No AI tokens used (no changes detected)');
85
+ }
86
+ success('Handoff document generated!');
87
+ console.log('\nšŸ“Œ Next steps:\n');
88
+ console.log(' • Share agentbrain/handoff.md with the next developer or session');
89
+ console.log(' • Reference it at the start of your next session for context');
90
+ console.log();
72
91
  }
73
- success('Handoff document generated!');
74
- console.log('\nšŸ“Œ Next steps:\n');
75
- console.log(' • Share agentbrain/handoff.md with the next developer or session');
76
- console.log(' • Reference it at the start of your next session for context');
77
- console.log();
78
92
  }
79
93
  //# sourceMappingURL=handoff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA0BnC,wBAAgB,iBAAiB,IAAI,OAAO,CAiB3C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6BnC,wBAAgB,iBAAiB,IAAI,OAAO,CAsB3C"}
@@ -5,7 +5,7 @@ import { resolve } from 'node:path';
5
5
  import { writeFile, mkdir } from 'node:fs/promises';
6
6
  import { existsSync } from 'node:fs';
7
7
  import { join } from 'node:path';
8
- import { loadAIConfig, generateContext, estimateContextCost, scanRepository, } from '@agentbrain/core';
8
+ import { loadAIConfig, generateContext, estimateContextCost, scanRepository, injectIntoAllAgents, detectAgents, AGENT_FILE_PATHS, } from '@agentbrain/core';
9
9
  import { displayBanner, success, error, info, spinner, displayFileTable, displayCostEstimate, displayActualCost, displayGeneratedFiles, displayNextSteps, displayProviderInfo, } from '../display.js';
10
10
  export function createInitCommand() {
11
11
  const cmd = new Command('init')
@@ -14,51 +14,77 @@ export function createInitCommand() {
14
14
  .option('--max-files <number>', 'Maximum files to analyze', '100')
15
15
  .option('--no-cache', 'Skip cache and regenerate')
16
16
  .option('--dry-run', 'Show what would be generated without actually generating')
17
+ .option('--silent', 'Suppress output (for git hooks)')
18
+ .option('--no-confirm', 'Skip confirmation prompts')
19
+ .option('--no-inject', 'Skip agent file injection')
17
20
  .action(async (options) => {
18
21
  try {
19
22
  await runInit(options);
20
23
  }
21
24
  catch (err) {
22
- error(err instanceof Error ? err.message : 'Initialization failed');
25
+ if (!options.silent) {
26
+ error(err instanceof Error ? err.message : 'Initialization failed');
27
+ }
23
28
  process.exit(1);
24
29
  }
25
30
  });
26
31
  return cmd;
27
32
  }
28
33
  async function runInit(options) {
29
- displayBanner();
34
+ const silent = options.silent;
35
+ if (!silent) {
36
+ displayBanner();
37
+ }
30
38
  const repoPath = resolve(options.path);
31
39
  const maxFiles = parseInt(options.maxFiles, 10);
32
40
  const useCache = options.cache;
33
- info(`Repository: ${repoPath}`);
41
+ const skipConfirm = !options.confirm;
42
+ const skipInject = !options.inject;
43
+ if (!silent) {
44
+ info(`Repository: ${repoPath}`);
45
+ }
34
46
  // Load AI config
35
47
  const aiConfig = await loadAIConfig();
36
- displayProviderInfo(aiConfig.provider, aiConfig.models);
48
+ if (!silent) {
49
+ displayProviderInfo(aiConfig.provider, aiConfig.models);
50
+ }
37
51
  // Scan repository
38
- const spin = spinner('Scanning repository...');
52
+ const spin = silent ? null : spinner('Scanning repository...');
39
53
  const scanResult = await scanRepository(repoPath, { maxFiles });
40
- spin.succeed(`Found ${scanResult.totalFiles} files, selected ${scanResult.relevantFiles.length} relevant files`);
41
- console.log();
42
- displayFileTable(scanResult.relevantFiles, 8);
54
+ if (!silent) {
55
+ spin?.succeed(`Found ${scanResult.totalFiles} files, selected ${scanResult.relevantFiles.length} relevant files`);
56
+ console.log();
57
+ displayFileTable(scanResult.relevantFiles, 8);
58
+ }
43
59
  // Estimate cost
44
- info('Estimating cost...');
60
+ if (!silent) {
61
+ info('Estimating cost...');
62
+ }
45
63
  const estimate = await estimateContextCost(repoPath, aiConfig, maxFiles);
46
- displayCostEstimate(estimate);
64
+ if (!silent) {
65
+ displayCostEstimate(estimate);
66
+ }
47
67
  if (options.dryRun) {
48
- info('Dry run complete - no files generated');
68
+ if (!silent) {
69
+ info('Dry run complete - no files generated');
70
+ }
49
71
  return;
50
72
  }
51
73
  // Confirm generation
52
- const confirmed = await confirm({
53
- message: 'Generate context docs?',
54
- default: true,
55
- });
56
- if (!confirmed) {
57
- info('Cancelled');
58
- return;
74
+ if (!skipConfirm) {
75
+ const confirmed = await confirm({
76
+ message: 'Generate context docs?',
77
+ default: true,
78
+ });
79
+ if (!confirmed) {
80
+ if (!silent) {
81
+ info('Cancelled');
82
+ }
83
+ return;
84
+ }
59
85
  }
60
86
  // Generate context
61
- const genSpin = spinner('Generating context documents...');
87
+ const genSpin = silent ? null : spinner('Generating context documents...');
62
88
  let lastProgress = '';
63
89
  const result = await generateContext({
64
90
  repoPath,
@@ -66,13 +92,17 @@ async function runInit(options) {
66
92
  maxFiles,
67
93
  useCache,
68
94
  onProgress: (msg) => {
69
- if (msg !== lastProgress) {
70
- genSpin.text = msg;
95
+ if (!silent && msg !== lastProgress) {
96
+ if (genSpin) {
97
+ genSpin.text = msg;
98
+ }
71
99
  lastProgress = msg;
72
100
  }
73
101
  },
74
102
  });
75
- genSpin.succeed('Context generation complete!');
103
+ if (!silent) {
104
+ genSpin?.succeed('Context generation complete!');
105
+ }
76
106
  // Write files to disk
77
107
  const outputDir = join(repoPath, 'agentbrain');
78
108
  if (!existsSync(outputDir)) {
@@ -83,18 +113,40 @@ async function runInit(options) {
83
113
  const filePath = join(outputDir, fileName);
84
114
  await writeFile(filePath, doc.content, 'utf-8');
85
115
  }
116
+ // Inject into agent files
117
+ if (!skipInject) {
118
+ const agents = detectAgents(repoPath);
119
+ if (agents.length > 0) {
120
+ const gitHash = scanResult.gitHash;
121
+ const injectionResults = await injectIntoAllAgents(repoPath, gitHash);
122
+ if (!silent && injectionResults.length > 0) {
123
+ console.log();
124
+ info('Updated agent files with context loading instructions:');
125
+ for (const { agent, created, updated } of injectionResults) {
126
+ const action = created ? 'Created' : updated ? 'Updated' : 'Checked';
127
+ console.log(` āœ“ ${action} ${AGENT_FILE_PATHS[agent]}`);
128
+ }
129
+ }
130
+ }
131
+ else if (!silent) {
132
+ console.log();
133
+ info('No agent files detected. Create CLAUDE.md, .cursor/rules, or .windsurfrules to enable auto-injection.');
134
+ }
135
+ }
86
136
  // Display summary
87
- displayGeneratedFiles([
88
- { name: 'agentbrain/context.md', description: 'Full repo intelligence' },
89
- { name: 'agentbrain/dependency-map.md', description: 'Service relationships' },
90
- { name: 'agentbrain/patterns.md', description: 'Coding patterns' },
91
- ]);
92
- displayActualCost(result.totalTokens, result.cost);
93
- displayNextSteps([
94
- 'Add to your CLAUDE.md: @agentbrain/context.md',
95
- 'Run "agentbrain standards" to generate coding standards files',
96
- 'Run "agentbrain handoff" before ending sessions',
97
- ]);
98
- success('AgentBrain initialization complete!');
137
+ if (!silent) {
138
+ displayGeneratedFiles([
139
+ { name: 'agentbrain/context.md', description: 'Full repo intelligence' },
140
+ { name: 'agentbrain/dependency-map.md', description: 'Service relationships' },
141
+ { name: 'agentbrain/patterns.md', description: 'Coding patterns' },
142
+ ]);
143
+ displayActualCost(result.totalTokens, result.cost);
144
+ const nextSteps = ['Run "agentbrain setup" to install git hooks for auto-refresh'];
145
+ if (detectAgents(repoPath).length === 0) {
146
+ nextSteps.push('Create CLAUDE.md, .cursor/rules, or .windsurfrules for your agent');
147
+ }
148
+ displayNextSteps(nextSteps);
149
+ success('AgentBrain initialization complete!');
150
+ }
99
151
  }
100
152
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,aAAa,EACb,OAAO,EACP,KAAK,EACL,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,eAAe,CAAA;AAEtB,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;SAC5B,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACzD,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,EAAE,KAAK,CAAC;SACjE,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAAC;SACjD,MAAM,CAAC,WAAW,EAAE,0DAA0D,CAAC;SAC/E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAA;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAKtB;IACC,aAAa,EAAE,CAAA;IAEf,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAA;IAE9B,IAAI,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAA;IAE/B,iBAAiB;IACjB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;IAErC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEvD,kBAAkB;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAA;IAC9C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC/D,IAAI,CAAC,OAAO,CAAC,SAAS,UAAU,CAAC,UAAU,oBAAoB,UAAU,CAAC,aAAa,CAAC,MAAM,iBAAiB,CAAC,CAAA;IAEhH,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;IAE7C,gBAAgB;IAChB,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACxE,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAE7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,uCAAuC,CAAC,CAAA;QAC7C,OAAM;IACR,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;QAC9B,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,CAAA;QACjB,OAAM;IACR,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAA;IAC1D,IAAI,YAAY,GAAG,EAAE,CAAA;IAErB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;YAClB,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;gBAClB,YAAY,GAAG,GAAG,CAAA;YACpB,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAA;IAE/C,sBAAsB;IACtB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC9C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,CAAA;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACjD,CAAC;IAED,kBAAkB;IAClB,qBAAqB,CAAC;QACpB,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,wBAAwB,EAAE;QACxE,EAAE,IAAI,EAAE,8BAA8B,EAAE,WAAW,EAAE,uBAAuB,EAAE;QAC9E,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,iBAAiB,EAAE;KACnE,CAAC,CAAA;IAEF,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IAElD,gBAAgB,CAAC;QACf,+CAA+C;QAC/C,+DAA+D;QAC/D,iDAAiD;KAClD,CAAC,CAAA;IAEF,OAAO,CAAC,qCAAqC,CAAC,CAAA;AAChD,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createSetupCommand(): Command;
3
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA0BnC,wBAAgB,kBAAkB,IAAI,OAAO,CAgB5C"}
@@ -0,0 +1,135 @@
1
+ // Setup command - one-command complete setup
2
+ import { Command } from 'commander';
3
+ import { confirm, checkbox } from '@inquirer/prompts';
4
+ import { resolve } from 'node:path';
5
+ import { isGitRepository, installAllHooks, detectAgents, loadAIConfig, generateContext, injectIntoAllAgents, AGENT_FILE_PATHS, } from '@agentbrain/core';
6
+ import { writeFile, mkdir } from 'node:fs/promises';
7
+ import { existsSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { displayBanner, success, error, info, spinner, displayGeneratedFiles, displayActualCost, } from '../display.js';
10
+ export function createSetupCommand() {
11
+ const cmd = new Command('setup')
12
+ .description('One-command setup for AgentBrain (init + hooks + agent files)')
13
+ .option('--path <path>', 'Repository path', process.cwd())
14
+ .option('--skip-hooks', 'Skip git hooks installation')
15
+ .option('--skip-agent-files', 'Skip agent file injection')
16
+ .action(async (options) => {
17
+ try {
18
+ await runSetup(options);
19
+ }
20
+ catch (err) {
21
+ error(err instanceof Error ? err.message : 'Setup failed');
22
+ process.exit(1);
23
+ }
24
+ });
25
+ return cmd;
26
+ }
27
+ async function runSetup(options) {
28
+ displayBanner();
29
+ const repoPath = resolve(options.path);
30
+ info(`Repository: ${repoPath}`);
31
+ console.log();
32
+ // Check git repository
33
+ if (!isGitRepository(repoPath)) {
34
+ error('Not a git repository. Please run "git init" first.');
35
+ process.exit(1);
36
+ }
37
+ // Step 1: Detect or select agents
38
+ let selectedAgents = detectAgents(repoPath);
39
+ if (selectedAgents.length === 0 && !options.skipAgentFiles) {
40
+ info('No agent files detected. Which agent(s) do you use?\n');
41
+ const agents = await checkbox({
42
+ message: 'Select all that apply:',
43
+ choices: [
44
+ { name: 'Claude Code (CLAUDE.md)', value: 'claude-code' },
45
+ { name: 'Cursor (.cursor/rules)', value: 'cursor' },
46
+ { name: 'Windsurf (.windsurfrules)', value: 'windsurf' },
47
+ ],
48
+ });
49
+ selectedAgents = agents;
50
+ if (selectedAgents.length === 0) {
51
+ info('\nNo agents selected. Skipping agent file creation.');
52
+ }
53
+ }
54
+ // Step 2: Load AI config
55
+ info('\nLoading AI configuration...');
56
+ const aiConfig = await loadAIConfig();
57
+ info(`āœ“ Using ${aiConfig.provider} API`);
58
+ // Step 3: Generate context
59
+ console.log();
60
+ const confirmed = await confirm({
61
+ message: 'Generate initial context documentation?',
62
+ default: true,
63
+ });
64
+ if (!confirmed) {
65
+ info('Skipping context generation.');
66
+ return;
67
+ }
68
+ const spin = spinner('Generating context...');
69
+ const result = await generateContext({
70
+ repoPath,
71
+ aiConfig,
72
+ maxFiles: 100,
73
+ useCache: true,
74
+ onProgress: (msg) => {
75
+ spin.text = msg;
76
+ },
77
+ });
78
+ spin.succeed('Context generated!');
79
+ // Write files
80
+ const outputDir = join(repoPath, 'agentbrain');
81
+ if (!existsSync(outputDir)) {
82
+ await mkdir(outputDir, { recursive: true });
83
+ }
84
+ for (const doc of result.docs) {
85
+ const fileName = `${doc.type}.md`;
86
+ const filePath = join(outputDir, fileName);
87
+ await writeFile(filePath, doc.content, 'utf-8');
88
+ }
89
+ // Get git hash from result
90
+ const gitHash = result.docs[0]?.gitHash || 'unknown';
91
+ // Step 4: Inject into agent files
92
+ if (!options.skipAgentFiles && selectedAgents.length > 0) {
93
+ console.log();
94
+ info('Updating agent files...');
95
+ for (const agent of selectedAgents) {
96
+ await injectIntoAllAgents(repoPath, gitHash);
97
+ const filePath = AGENT_FILE_PATHS[agent];
98
+ console.log(` āœ“ Updated ${filePath}`);
99
+ }
100
+ }
101
+ // Step 5: Install git hooks
102
+ if (!options.skipHooks) {
103
+ console.log();
104
+ const installHooks = await confirm({
105
+ message: 'Install git hooks for auto-refresh on commits?',
106
+ default: true,
107
+ });
108
+ if (installHooks) {
109
+ const { installed } = await installAllHooks(repoPath);
110
+ info('Git hooks installed:');
111
+ for (const hook of installed) {
112
+ console.log(` āœ“ ${hook}`);
113
+ }
114
+ }
115
+ }
116
+ // Summary
117
+ console.log();
118
+ displayGeneratedFiles([
119
+ { name: 'agentbrain/context.md', description: 'Full repo intelligence' },
120
+ { name: 'agentbrain/dependency-map.md', description: 'Service relationships' },
121
+ { name: 'agentbrain/patterns.md', description: 'Coding patterns' },
122
+ ]);
123
+ displayActualCost(result.totalTokens, result.cost);
124
+ console.log();
125
+ success('šŸŽ‰ AgentBrain setup complete!');
126
+ console.log();
127
+ console.log('What happens now:');
128
+ console.log(' āœ“ Your agent will automatically load context at session start');
129
+ console.log(' āœ“ Context refreshes automatically after every commit');
130
+ console.log(' āœ“ Handoff documents generated automatically');
131
+ console.log();
132
+ console.log('Just start coding - AgentBrain works invisibly in the background!');
133
+ console.log();
134
+ }
135
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,12 +5,14 @@ import { createConfigCommand } from './commands/config.js';
5
5
  import { createInitCommand } from './commands/init.js';
6
6
  import { createStandardsCommand } from './commands/standards.js';
7
7
  import { createHandoffCommand } from './commands/handoff.js';
8
+ import { createSetupCommand } from './commands/setup.js';
8
9
  const program = new Command();
9
10
  program
10
11
  .name('agentbrain')
11
12
  .description('Generate smart context docs for coding agents')
12
- .version('1.2.0');
13
+ .version('1.3.0');
13
14
  // Add commands
15
+ program.addCommand(createSetupCommand());
14
16
  program.addCommand(createInitCommand());
15
17
  program.addCommand(createStandardsCommand());
16
18
  program.addCommand(createHandoffCommand());
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,6BAA6B;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAA;AAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAA;AAEzC,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,6BAA6B;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;AACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAA;AAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAA;AAEzC,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentbrain/cli",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "CLI for AgentBrain - generate smart context documentation for coding agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",