@agentbrain/cli 1.4.5 → 1.4.9
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/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +51 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/commands/__tests__/context.test.d.ts +2 -0
- package/dist/commands/__tests__/context.test.d.ts.map +1 -0
- package/dist/commands/__tests__/context.test.js +54 -0
- package/dist/commands/__tests__/context.test.js.map +1 -0
- package/dist/commands/__tests__/doctor.test.d.ts +2 -0
- package/dist/commands/__tests__/doctor.test.d.ts.map +1 -0
- package/dist/commands/__tests__/doctor.test.js +46 -0
- package/dist/commands/__tests__/doctor.test.js.map +1 -0
- package/dist/commands/context.d.ts +3 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +90 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +123 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.js +20 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/standards.js +12 -11
- package/dist/commands/standards.js.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/package.json +10 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
describe('CLI entry point', () => {
|
|
3
|
+
it('exports are available', async () => {
|
|
4
|
+
// Just verify the module can be imported
|
|
5
|
+
// (actual CLI execution is tested via integration)
|
|
6
|
+
expect(true).toBe(true);
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
describe('CLI command registration', () => {
|
|
10
|
+
it('registers context command', async () => {
|
|
11
|
+
const { createContextCommand } = await import('../commands/context.js');
|
|
12
|
+
const cmd = createContextCommand();
|
|
13
|
+
expect(cmd.name()).toBe('context');
|
|
14
|
+
});
|
|
15
|
+
it('registers doctor command', async () => {
|
|
16
|
+
const { createDoctorCommand } = await import('../commands/doctor.js');
|
|
17
|
+
const cmd = createDoctorCommand();
|
|
18
|
+
expect(cmd.name()).toBe('doctor');
|
|
19
|
+
});
|
|
20
|
+
it('registers init command', async () => {
|
|
21
|
+
const { createInitCommand } = await import('../commands/init.js');
|
|
22
|
+
const cmd = createInitCommand();
|
|
23
|
+
expect(cmd.name()).toBe('init');
|
|
24
|
+
});
|
|
25
|
+
it('registers setup command', async () => {
|
|
26
|
+
const { createSetupCommand } = await import('../commands/setup.js');
|
|
27
|
+
const cmd = createSetupCommand();
|
|
28
|
+
expect(cmd.name()).toBe('setup');
|
|
29
|
+
});
|
|
30
|
+
it('registers config command', async () => {
|
|
31
|
+
const { createConfigCommand } = await import('../commands/config.js');
|
|
32
|
+
const cmd = createConfigCommand();
|
|
33
|
+
expect(cmd.name()).toBe('config');
|
|
34
|
+
});
|
|
35
|
+
it('registers standards command', async () => {
|
|
36
|
+
const { createStandardsCommand } = await import('../commands/standards.js');
|
|
37
|
+
const cmd = createStandardsCommand();
|
|
38
|
+
expect(cmd.name()).toBe('standards');
|
|
39
|
+
});
|
|
40
|
+
it('registers handoff command', async () => {
|
|
41
|
+
const { createHandoffCommand } = await import('../commands/handoff.js');
|
|
42
|
+
const cmd = createHandoffCommand();
|
|
43
|
+
expect(cmd.name()).toBe('handoff');
|
|
44
|
+
});
|
|
45
|
+
it('registers disable command', async () => {
|
|
46
|
+
const { createDisableCommand } = await import('../commands/disable.js');
|
|
47
|
+
const cmd = createDisableCommand();
|
|
48
|
+
expect(cmd.name()).toBe('disable');
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/context.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
import { createContextCommand } from '../context.js';
|
|
3
|
+
describe('context command', () => {
|
|
4
|
+
it('exports createContextCommand function', () => {
|
|
5
|
+
expect(createContextCommand).toBeDefined();
|
|
6
|
+
expect(typeof createContextCommand).toBe('function');
|
|
7
|
+
});
|
|
8
|
+
it('creates command with correct name', () => {
|
|
9
|
+
const cmd = createContextCommand();
|
|
10
|
+
expect(cmd.name()).toBe('context');
|
|
11
|
+
});
|
|
12
|
+
it('has description', () => {
|
|
13
|
+
const cmd = createContextCommand();
|
|
14
|
+
expect(cmd.description()).toContain('task');
|
|
15
|
+
expect(cmd.description().length).toBeGreaterThan(10);
|
|
16
|
+
});
|
|
17
|
+
it('has required task argument', () => {
|
|
18
|
+
const cmd = createContextCommand();
|
|
19
|
+
const args = cmd.registeredArguments;
|
|
20
|
+
expect(args.length).toBeGreaterThan(0);
|
|
21
|
+
expect(args[0].name()).toBe('task');
|
|
22
|
+
expect(args[0].required).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
it('has --path option', () => {
|
|
25
|
+
const cmd = createContextCommand();
|
|
26
|
+
const pathOpt = cmd.options.find((o) => o.long === '--path');
|
|
27
|
+
expect(pathOpt).toBeDefined();
|
|
28
|
+
expect(pathOpt?.description).toContain('path');
|
|
29
|
+
});
|
|
30
|
+
it('has --max-files option with default', () => {
|
|
31
|
+
const cmd = createContextCommand();
|
|
32
|
+
const maxFilesOpt = cmd.options.find((o) => o.long === '--max-files');
|
|
33
|
+
expect(maxFilesOpt).toBeDefined();
|
|
34
|
+
expect(maxFilesOpt?.defaultValue).toBe('20');
|
|
35
|
+
});
|
|
36
|
+
it('has --output option with default', () => {
|
|
37
|
+
const cmd = createContextCommand();
|
|
38
|
+
const outputOpt = cmd.options.find((o) => o.long === '--output');
|
|
39
|
+
expect(outputOpt).toBeDefined();
|
|
40
|
+
expect(outputOpt?.defaultValue).toBe('agentbrain/task-context.md');
|
|
41
|
+
});
|
|
42
|
+
it('has --no-cache option', () => {
|
|
43
|
+
const cmd = createContextCommand();
|
|
44
|
+
const cacheOpt = cmd.options.find((o) => o.long === '--no-cache');
|
|
45
|
+
expect(cacheOpt).toBeDefined();
|
|
46
|
+
expect(cacheOpt?.description).toContain('cache');
|
|
47
|
+
});
|
|
48
|
+
it('has action handler', () => {
|
|
49
|
+
const cmd = createContextCommand();
|
|
50
|
+
// Commander stores action in _actionHandler
|
|
51
|
+
expect(cmd._actionHandler).toBeDefined();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/context.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;QAClC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;QAClC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC3C,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;QAClC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QAC5D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QAC7B,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;QAClC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;QACrE,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAA;QACjC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;QAClC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;QAChE,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;QAC/B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAA;QACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;QAC9B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAA;QAClC,4CAA4C;QAC5C,MAAM,CAAE,GAAW,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAA;IACnD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/doctor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
import { createDoctorCommand } from '../doctor.js';
|
|
3
|
+
describe('doctor command', () => {
|
|
4
|
+
it('exports createDoctorCommand function', () => {
|
|
5
|
+
expect(createDoctorCommand).toBeDefined();
|
|
6
|
+
expect(typeof createDoctorCommand).toBe('function');
|
|
7
|
+
});
|
|
8
|
+
it('creates command with correct name', () => {
|
|
9
|
+
const cmd = createDoctorCommand();
|
|
10
|
+
expect(cmd.name()).toBe('doctor');
|
|
11
|
+
});
|
|
12
|
+
it('has description', () => {
|
|
13
|
+
const cmd = createDoctorCommand();
|
|
14
|
+
expect(cmd.description()).toContain('diagnostic');
|
|
15
|
+
expect(cmd.description().length).toBeGreaterThan(10);
|
|
16
|
+
});
|
|
17
|
+
it('has --path option', () => {
|
|
18
|
+
const cmd = createDoctorCommand();
|
|
19
|
+
const pathOpt = cmd.options.find((o) => o.long === '--path');
|
|
20
|
+
expect(pathOpt).toBeDefined();
|
|
21
|
+
expect(pathOpt?.description).toContain('path');
|
|
22
|
+
});
|
|
23
|
+
it('has --fix option', () => {
|
|
24
|
+
const cmd = createDoctorCommand();
|
|
25
|
+
const fixOpt = cmd.options.find((o) => o.long === '--fix');
|
|
26
|
+
expect(fixOpt).toBeDefined();
|
|
27
|
+
expect(fixOpt?.description).toContain('fix');
|
|
28
|
+
});
|
|
29
|
+
it('has --json option', () => {
|
|
30
|
+
const cmd = createDoctorCommand();
|
|
31
|
+
const jsonOpt = cmd.options.find((o) => o.long === '--json');
|
|
32
|
+
expect(jsonOpt).toBeDefined();
|
|
33
|
+
expect(jsonOpt?.description).toContain('JSON');
|
|
34
|
+
});
|
|
35
|
+
it('has no required arguments', () => {
|
|
36
|
+
const cmd = createDoctorCommand();
|
|
37
|
+
const requiredArgs = cmd.registeredArguments.filter((a) => a.required);
|
|
38
|
+
expect(requiredArgs.length).toBe(0);
|
|
39
|
+
});
|
|
40
|
+
it('has action handler', () => {
|
|
41
|
+
const cmd = createDoctorCommand();
|
|
42
|
+
// Commander stores action in _actionHandler
|
|
43
|
+
expect(cmd._actionHandler).toBeDefined();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=doctor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/doctor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYnC,wBAAgB,oBAAoB,IAAI,OAAO,CAkB9C"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Task-aware context command
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { writeFile, mkdir } from 'node:fs/promises';
|
|
5
|
+
import { existsSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { loadAIConfig, generateTaskContext, invalidateCache, } from '@agentbrain/core';
|
|
8
|
+
import { displayBanner, success, error, info, spinner } from '../display.js';
|
|
9
|
+
export function createContextCommand() {
|
|
10
|
+
const cmd = new Command('context')
|
|
11
|
+
.description('Generate task-focused context using cached summaries')
|
|
12
|
+
.argument('<task>', 'Task description (e.g., "add OAuth login to auth module")')
|
|
13
|
+
.option('--path <path>', 'Repository path', process.cwd())
|
|
14
|
+
.option('--max-files <number>', 'Maximum files to include', '20')
|
|
15
|
+
.option('--output <path>', 'Output file path', 'agentbrain/task-context.md')
|
|
16
|
+
.option('--no-cache', 'Force re-scan (invalidate cache first)')
|
|
17
|
+
.action(async (task, options) => {
|
|
18
|
+
try {
|
|
19
|
+
await runContextCommand(task, options);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
error(err instanceof Error ? err.message : 'Context generation failed');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return cmd;
|
|
27
|
+
}
|
|
28
|
+
async function runContextCommand(task, options) {
|
|
29
|
+
displayBanner();
|
|
30
|
+
const repoPath = resolve(options.path);
|
|
31
|
+
const maxFiles = parseInt(options.maxFiles, 10);
|
|
32
|
+
const outputPath = resolve(repoPath, options.output);
|
|
33
|
+
info(`Repository: ${repoPath}`);
|
|
34
|
+
info(`Task: "${task}"`);
|
|
35
|
+
console.log();
|
|
36
|
+
// Invalidate cache if --no-cache
|
|
37
|
+
if (!options.cache) {
|
|
38
|
+
info('Invalidating cache...');
|
|
39
|
+
await invalidateCache(repoPath);
|
|
40
|
+
}
|
|
41
|
+
// Load AI config
|
|
42
|
+
const aiConfig = await loadAIConfig();
|
|
43
|
+
const spin = spinner('Generating task-focused context...');
|
|
44
|
+
try {
|
|
45
|
+
const result = await generateTaskContext({
|
|
46
|
+
repoPath,
|
|
47
|
+
aiConfig,
|
|
48
|
+
task,
|
|
49
|
+
maxFiles,
|
|
50
|
+
onProgress: (msg) => {
|
|
51
|
+
spin.text = msg;
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
spin.succeed('Context generated!');
|
|
55
|
+
// Ensure output directory exists
|
|
56
|
+
const outputDir = join(repoPath, 'agentbrain');
|
|
57
|
+
if (!existsSync(outputDir)) {
|
|
58
|
+
await mkdir(outputDir, { recursive: true });
|
|
59
|
+
}
|
|
60
|
+
// Write task context
|
|
61
|
+
const header = `# Task Context: ${task}
|
|
62
|
+
|
|
63
|
+
*Generated on ${new Date().toISOString()}*
|
|
64
|
+
*Selected ${result.selectedFiles.length} most relevant files*
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
`;
|
|
69
|
+
await writeFile(outputPath, header + result.content, 'utf-8');
|
|
70
|
+
console.log();
|
|
71
|
+
success(`Task: "${task}"`);
|
|
72
|
+
success(`Scored ${result.totalFilesScored} files against task (used cached summaries)`);
|
|
73
|
+
success(`Selected top ${result.selectedFiles.length} most relevant files`);
|
|
74
|
+
success(`${options.output} written`);
|
|
75
|
+
console.log();
|
|
76
|
+
info(`💸 Cost: ~$${result.cost.toFixed(4)} (re-used cached summaries)`);
|
|
77
|
+
console.log();
|
|
78
|
+
// Show top 5 files
|
|
79
|
+
console.log('📄 Top relevant files:');
|
|
80
|
+
result.selectedFiles.slice(0, 5).forEach((f, idx) => {
|
|
81
|
+
console.log(` ${idx + 1}. ${f.path} (score: ${f.score}/10)`);
|
|
82
|
+
});
|
|
83
|
+
console.log();
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
spin.fail('Context generation failed');
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWnC,wBAAgB,mBAAmB,IAAI,OAAO,CAgB7C"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Diagnostic command for AgentBrain setup
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { exec } from 'node:child_process';
|
|
5
|
+
import { promisify } from 'node:util';
|
|
6
|
+
import { runDiagnostics } from '@agentbrain/core';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { displayBanner, error } from '../display.js';
|
|
9
|
+
const execAsync = promisify(exec);
|
|
10
|
+
export function createDoctorCommand() {
|
|
11
|
+
const cmd = new Command('doctor')
|
|
12
|
+
.description('Run diagnostic checks for AgentBrain setup')
|
|
13
|
+
.option('--path <path>', 'Repository path', process.cwd())
|
|
14
|
+
.option('--fix', 'Attempt to auto-fix warnings')
|
|
15
|
+
.option('--json', 'Output JSON for programmatic use')
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
try {
|
|
18
|
+
await runDoctorCommand(options);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
error(err instanceof Error ? err.message : 'Doctor checks failed');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return cmd;
|
|
26
|
+
}
|
|
27
|
+
async function runDoctorCommand(options) {
|
|
28
|
+
const repoPath = resolve(options.path);
|
|
29
|
+
// Run diagnostics
|
|
30
|
+
const result = await runDiagnostics(repoPath);
|
|
31
|
+
// JSON output
|
|
32
|
+
if (options.json) {
|
|
33
|
+
console.log(JSON.stringify(result, null, 2));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Human-readable output
|
|
37
|
+
displayBanner();
|
|
38
|
+
console.log(chalk.bold(`AgentBrain Doctor — ${repoPath}\n`));
|
|
39
|
+
console.log(chalk.gray('Checking setup...\n'));
|
|
40
|
+
// Display all checks
|
|
41
|
+
for (const check of result.checks) {
|
|
42
|
+
const icon = getCheckIcon(check.status);
|
|
43
|
+
const color = getCheckColor(check.status);
|
|
44
|
+
const name = check.name.padEnd(20);
|
|
45
|
+
console.log(` ${icon} ${color(name)} ${check.message}`);
|
|
46
|
+
}
|
|
47
|
+
console.log();
|
|
48
|
+
// Display warnings section
|
|
49
|
+
const warnings = result.checks.filter((c) => c.status === 'warn' || c.status === 'fail');
|
|
50
|
+
if (warnings.length > 0) {
|
|
51
|
+
console.log(chalk.yellow.bold('Warnings:\n'));
|
|
52
|
+
for (const check of warnings) {
|
|
53
|
+
const icon = getCheckIcon(check.status);
|
|
54
|
+
console.log(` ${icon} ${check.name.padEnd(20)} ${check.message}`);
|
|
55
|
+
if (check.fix) {
|
|
56
|
+
console.log(` ${' '.repeat(22)} ${chalk.gray(`fix: ${check.fix}`)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
console.log();
|
|
60
|
+
}
|
|
61
|
+
// Score
|
|
62
|
+
console.log(chalk.bold(`Score: ${chalk.green(result.score.passed)}/${result.score.total} checks passed`));
|
|
63
|
+
if (warnings.length > 0 && !options.fix) {
|
|
64
|
+
console.log(chalk.gray('\nRun "agentbrain doctor --fix" to auto-fix warnings.\n'));
|
|
65
|
+
}
|
|
66
|
+
// Auto-fix
|
|
67
|
+
if (options.fix && warnings.length > 0) {
|
|
68
|
+
console.log(chalk.yellow.bold('\nAttempting auto-fixes...\n'));
|
|
69
|
+
await runAutoFixes(warnings, repoPath);
|
|
70
|
+
}
|
|
71
|
+
// Exit code
|
|
72
|
+
const hasFails = result.checks.some((c) => c.status === 'fail');
|
|
73
|
+
if (hasFails) {
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function runAutoFixes(warnings, repoPath) {
|
|
78
|
+
for (const check of warnings) {
|
|
79
|
+
if (!check.fix)
|
|
80
|
+
continue;
|
|
81
|
+
console.log(` ${chalk.cyan('→')} Fixing ${check.name}...`);
|
|
82
|
+
try {
|
|
83
|
+
// Execute fix command
|
|
84
|
+
const { stdout, stderr } = await execAsync(check.fix, { cwd: repoPath });
|
|
85
|
+
if (stderr && !stderr.includes('warning')) {
|
|
86
|
+
console.log(` ${chalk.yellow('⚠')} ${check.name}: ${stderr.trim()}`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.log(` ${chalk.green('✓')} ${check.name} fixed`);
|
|
90
|
+
}
|
|
91
|
+
if (stdout) {
|
|
92
|
+
console.log(chalk.gray(` ${stdout.trim()}`));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
97
|
+
console.log(` ${chalk.red('✗')} ${check.name}: ${message}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
console.log();
|
|
101
|
+
console.log(chalk.green('Auto-fix complete. Run "agentbrain doctor" again to verify.\n'));
|
|
102
|
+
}
|
|
103
|
+
function getCheckIcon(status) {
|
|
104
|
+
switch (status) {
|
|
105
|
+
case 'pass':
|
|
106
|
+
return chalk.green('✓');
|
|
107
|
+
case 'warn':
|
|
108
|
+
return chalk.yellow('⚠');
|
|
109
|
+
case 'fail':
|
|
110
|
+
return chalk.red('✗');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function getCheckColor(status) {
|
|
114
|
+
switch (status) {
|
|
115
|
+
case 'pass':
|
|
116
|
+
return chalk.green;
|
|
117
|
+
case 'warn':
|
|
118
|
+
return chalk.yellow;
|
|
119
|
+
case 'fail':
|
|
120
|
+
return chalk.red;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEpD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AAEjC,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAC9B,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACzD,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,kCAAkC,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAA;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAI/B;IACC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtC,kBAAkB;IAClB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAA;IAE7C,cAAc;IACd,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAM;IACR,CAAC;IAED,wBAAwB;IACxB,aAAa,EAAE,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,IAAI,CAAC,CAAC,CAAA;IAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAE9C,qBAAqB;IACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;IACxF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QAC7C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACvC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YAClE,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;IAED,QAAQ;IACR,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,UAAU,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,gBAAgB,CACjF,CACF,CAAA;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAA;IACpF,CAAC;IAED,WAAW;IACX,IAAI,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAA;QAC9D,MAAM,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACxC,CAAC;IAED,YAAY;IACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;IAC/D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,QAAuB,EACvB,QAAgB;IAEhB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG;YAAE,SAAQ;QAExB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;QAE3D,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAA;YAExE,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YACvE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAA;YAC1D,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAA;AAC3F,CAAC;AAED,SAAS,YAAY,CAAC,MAAgC;IACpD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACzB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAgC;IACrD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,KAAK,CAAA;QACpB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,MAAM,CAAA;QACrB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,GAAG,CAAA;IACpB,CAAC;AACH,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { confirm } from '@inquirer/prompts';
|
|
4
4
|
import { resolve } from 'node:path';
|
|
5
|
-
import { writeFile, mkdir } from 'node:fs/promises';
|
|
5
|
+
import { writeFile, mkdir, readFile } from 'node:fs/promises';
|
|
6
6
|
import { existsSync } from 'node:fs';
|
|
7
7
|
import { join } from 'node:path';
|
|
8
8
|
import { loadAIConfig, generateContext, estimateContextCost, scanRepository, injectIntoAllAgents, detectAgents, AGENT_FILE_PATHS, } from '@agentbrain/core';
|
|
@@ -141,11 +141,28 @@ async function runInit(options) {
|
|
|
141
141
|
{ name: 'agentbrain/patterns.md', description: 'Coding patterns' },
|
|
142
142
|
]);
|
|
143
143
|
displayActualCost(result.totalTokens, result.cost);
|
|
144
|
-
const nextSteps = [
|
|
144
|
+
const nextSteps = [];
|
|
145
|
+
// Only suggest setup if git hook is not already installed
|
|
146
|
+
const hookPath = join(repoPath, '.git', 'hooks', 'post-commit');
|
|
147
|
+
let hasHook = false;
|
|
148
|
+
if (existsSync(hookPath)) {
|
|
149
|
+
try {
|
|
150
|
+
const content = await readFile(hookPath, 'utf-8');
|
|
151
|
+
hasHook = content.includes('AgentBrain');
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Ignore read errors
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (!hasHook) {
|
|
158
|
+
nextSteps.push('Run "agentbrain setup" to install git hooks for auto-refresh');
|
|
159
|
+
}
|
|
145
160
|
if (detectAgents(repoPath).length === 0) {
|
|
146
161
|
nextSteps.push('Create CLAUDE.md, .cursor/rules, or .windsurfrules for your agent');
|
|
147
162
|
}
|
|
148
|
-
|
|
163
|
+
if (nextSteps.length > 0) {
|
|
164
|
+
displayNextSteps(nextSteps);
|
|
165
|
+
}
|
|
149
166
|
success('AgentBrain initialization complete!');
|
|
150
167
|
}
|
|
151
168
|
}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Standards command - generate CLAUDE.md / .cursorrules / .windsurfrules
|
|
2
2
|
import { Command } from 'commander';
|
|
3
|
-
import { input,
|
|
3
|
+
import { input, select } from '@inquirer/prompts';
|
|
4
4
|
import { resolve } from 'node:path';
|
|
5
5
|
import { writeFile, mkdir } from 'node:fs/promises';
|
|
6
6
|
import { existsSync } from 'node:fs';
|
|
@@ -65,18 +65,18 @@ async function runStandards(options) {
|
|
|
65
65
|
architectureNotes,
|
|
66
66
|
};
|
|
67
67
|
// Select target agents
|
|
68
|
-
const
|
|
69
|
-
message: '
|
|
68
|
+
const agentChoice = await select({
|
|
69
|
+
message: 'Which agent do you want to generate standards for?',
|
|
70
70
|
choices: [
|
|
71
|
-
{ name: 'Claude Code
|
|
72
|
-
{ name: '
|
|
73
|
-
{ name: '
|
|
71
|
+
{ name: 'All agents (Claude Code, Cursor, Windsurf)', value: 'all' },
|
|
72
|
+
{ name: 'Claude Code (CLAUDE.md)', value: 'claude-code' },
|
|
73
|
+
{ name: 'Cursor (.cursor/rules)', value: 'cursor' },
|
|
74
|
+
{ name: 'Windsurf (.windsurfrules)', value: 'windsurf' },
|
|
74
75
|
],
|
|
75
76
|
});
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
77
|
+
const agents = agentChoice === 'all'
|
|
78
|
+
? ['claude-code', 'cursor', 'windsurf']
|
|
79
|
+
: [agentChoice];
|
|
80
80
|
// Generate standards
|
|
81
81
|
const spin = spinner('Generating standards files...');
|
|
82
82
|
const output = await generateStandards({
|
|
@@ -110,7 +110,8 @@ async function runStandards(options) {
|
|
|
110
110
|
}
|
|
111
111
|
displayGeneratedFiles(generatedFiles);
|
|
112
112
|
success('Standards files generated successfully!');
|
|
113
|
-
console.log('\n
|
|
113
|
+
console.log('\n💡 Tip: Run "agentbrain init" to inject context loading instructions into these files.\n');
|
|
114
|
+
console.log('📌 Next steps:\n');
|
|
114
115
|
if (agents.includes('claude-code')) {
|
|
115
116
|
console.log(' • Claude Code will automatically load CLAUDE.md on session start');
|
|
116
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards.js","sourceRoot":"","sources":["../../src/commands/standards.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"standards.js","sourceRoot":"","sources":["../../src/commands/standards.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,16 +7,20 @@ import { createStandardsCommand } from './commands/standards.js';
|
|
|
7
7
|
import { createHandoffCommand } from './commands/handoff.js';
|
|
8
8
|
import { createSetupCommand } from './commands/setup.js';
|
|
9
9
|
import { createDisableCommand } from './commands/disable.js';
|
|
10
|
+
import { createContextCommand } from './commands/context.js';
|
|
11
|
+
import { createDoctorCommand } from './commands/doctor.js';
|
|
10
12
|
const program = new Command();
|
|
11
13
|
program
|
|
12
14
|
.name('agentbrain')
|
|
13
15
|
.description('Generate smart context docs for coding agents')
|
|
14
|
-
.version('1.4.
|
|
16
|
+
.version('1.4.9');
|
|
15
17
|
// Add commands
|
|
16
18
|
program.addCommand(createSetupCommand());
|
|
17
19
|
program.addCommand(createInitCommand());
|
|
20
|
+
program.addCommand(createContextCommand());
|
|
18
21
|
program.addCommand(createStandardsCommand());
|
|
19
22
|
program.addCommand(createHandoffCommand());
|
|
23
|
+
program.addCommand(createDoctorCommand());
|
|
20
24
|
program.addCommand(createConfigCommand());
|
|
21
25
|
program.addCommand(createDisableCommand());
|
|
22
26
|
// Parse arguments
|
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;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,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;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,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,oBAAoB,EAAE,CAAC,CAAA;AAC1C,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;AACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAA;AACzC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAE1C,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAA;AACf,aAAa"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentbrain/cli",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.9",
|
|
4
4
|
"description": "CLI for AgentBrain - generate smart context documentation for coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -35,7 +35,10 @@
|
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "tsc -p tsconfig.json",
|
|
37
37
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
38
|
-
"clean": "rm -rf dist"
|
|
38
|
+
"clean": "rm -rf dist",
|
|
39
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
|
|
40
|
+
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
|
|
41
|
+
"test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --coverage"
|
|
39
42
|
},
|
|
40
43
|
"dependencies": {
|
|
41
44
|
"@agentbrain/core": "*",
|
|
@@ -47,6 +50,10 @@
|
|
|
47
50
|
},
|
|
48
51
|
"devDependencies": {
|
|
49
52
|
"@types/node": "^22.10.7",
|
|
50
|
-
"typescript": "^5.7.2"
|
|
53
|
+
"typescript": "^5.7.2",
|
|
54
|
+
"@jest/globals": "^30.3.0",
|
|
55
|
+
"@types/jest": "^30.0.0",
|
|
56
|
+
"jest": "^30.3.0",
|
|
57
|
+
"ts-jest": "^29.4.6"
|
|
51
58
|
}
|
|
52
59
|
}
|