beth-copilot 1.0.12 → 1.0.14
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/CHANGELOG.md +47 -0
- package/README.md +173 -32
- package/bin/cli.js +111 -193
- package/dist/cli/commands/doctor.d.ts +25 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +238 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/doctor.test.d.ts +6 -0
- package/dist/cli/commands/doctor.test.d.ts.map +1 -0
- package/dist/cli/commands/doctor.test.js +137 -0
- package/dist/cli/commands/doctor.test.js.map +1 -0
- package/dist/cli/commands/index.d.ts +7 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +10 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/quickstart.d.ts +18 -0
- package/dist/cli/commands/quickstart.d.ts.map +1 -0
- package/dist/cli/commands/quickstart.js +141 -0
- package/dist/cli/commands/quickstart.js.map +1 -0
- package/dist/core/agents/index.d.ts +6 -0
- package/dist/core/agents/index.d.ts.map +1 -0
- package/dist/core/agents/index.js +6 -0
- package/dist/core/agents/index.js.map +1 -0
- package/dist/core/agents/loader.d.ts +49 -0
- package/dist/core/agents/loader.d.ts.map +1 -0
- package/dist/core/agents/loader.js +217 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/agents/loader.test.d.ts +7 -0
- package/dist/core/agents/loader.test.d.ts.map +1 -0
- package/dist/core/agents/loader.test.js +144 -0
- package/dist/core/agents/loader.test.js.map +1 -0
- package/dist/core/agents/types.d.ts +77 -0
- package/dist/core/agents/types.d.ts.map +1 -0
- package/dist/core/agents/types.js +8 -0
- package/dist/core/agents/types.js.map +1 -0
- package/dist/core/agents/types.test.d.ts +6 -0
- package/dist/core/agents/types.test.d.ts.map +1 -0
- package/dist/core/agents/types.test.js +254 -0
- package/dist/core/agents/types.test.js.map +1 -0
- package/dist/core/skills/index.d.ts +6 -0
- package/dist/core/skills/index.d.ts.map +1 -0
- package/dist/core/skills/index.js +6 -0
- package/dist/core/skills/index.js.map +1 -0
- package/dist/core/skills/loader.d.ts +69 -0
- package/dist/core/skills/loader.d.ts.map +1 -0
- package/dist/core/skills/loader.js +243 -0
- package/dist/core/skills/loader.js.map +1 -0
- package/dist/core/skills/loader.test.d.ts +7 -0
- package/dist/core/skills/loader.test.d.ts.map +1 -0
- package/dist/core/skills/loader.test.js +184 -0
- package/dist/core/skills/loader.test.js.map +1 -0
- package/dist/core/skills/types.d.ts +58 -0
- package/dist/core/skills/types.d.ts.map +1 -0
- package/dist/core/skills/types.js +8 -0
- package/dist/core/skills/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/index.d.ts +7 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +7 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/pathValidation.d.ts +69 -0
- package/dist/lib/pathValidation.d.ts.map +1 -0
- package/dist/lib/pathValidation.js +185 -0
- package/dist/lib/pathValidation.js.map +1 -0
- package/dist/lib/pathValidation.test.d.ts +9 -0
- package/dist/lib/pathValidation.test.d.ts.map +1 -0
- package/dist/lib/pathValidation.test.js +195 -0
- package/dist/lib/pathValidation.test.js.map +1 -0
- package/package.json +15 -3
- package/templates/.github/agents/developer.agent.md +9 -0
- package/templates/.github/agents/product-manager.agent.md +9 -0
- package/templates/.github/agents/researcher.agent.md +9 -0
- package/templates/.github/agents/security-reviewer.agent.md +9 -2
- package/templates/.github/agents/tester.agent.md +9 -0
- package/templates/.github/agents/ux-designer.agent.md +9 -0
- package/templates/.github/copilot-instructions.md +3 -3
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor Command
|
|
3
|
+
*
|
|
4
|
+
* Checks system health and verifies Beth installation requirements:
|
|
5
|
+
* - Node.js version (≥18)
|
|
6
|
+
* - beads CLI available
|
|
7
|
+
* - backlog.md CLI available
|
|
8
|
+
* - .github/agents/ exists with valid frontmatter
|
|
9
|
+
* - .github/skills/ exists
|
|
10
|
+
*/
|
|
11
|
+
interface DoctorOptions {
|
|
12
|
+
verbose?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Main doctor command
|
|
16
|
+
* @param options - Command options
|
|
17
|
+
* @param exitOnFailure - If false, returns result instead of calling process.exit
|
|
18
|
+
*/
|
|
19
|
+
export declare function doctor(options?: DoctorOptions, exitOnFailure?: boolean): Promise<{
|
|
20
|
+
passed: number;
|
|
21
|
+
warned: number;
|
|
22
|
+
failed: number;
|
|
23
|
+
}>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA6MD;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,EAAE,aAAa,UAAO,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA4C3I"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor Command
|
|
3
|
+
*
|
|
4
|
+
* Checks system health and verifies Beth installation requirements:
|
|
5
|
+
* - Node.js version (≥18)
|
|
6
|
+
* - beads CLI available
|
|
7
|
+
* - backlog.md CLI available
|
|
8
|
+
* - .github/agents/ exists with valid frontmatter
|
|
9
|
+
* - .github/skills/ exists
|
|
10
|
+
*/
|
|
11
|
+
import { execSync } from 'child_process';
|
|
12
|
+
import { existsSync, readdirSync, readFileSync } from 'fs';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
import matter from 'gray-matter';
|
|
15
|
+
// Colors for terminal output
|
|
16
|
+
const COLORS = {
|
|
17
|
+
reset: '\x1b[0m',
|
|
18
|
+
bright: '\x1b[1m',
|
|
19
|
+
dim: '\x1b[2m',
|
|
20
|
+
red: '\x1b[31m',
|
|
21
|
+
green: '\x1b[32m',
|
|
22
|
+
yellow: '\x1b[33m',
|
|
23
|
+
cyan: '\x1b[36m',
|
|
24
|
+
};
|
|
25
|
+
function log(message, color = '') {
|
|
26
|
+
console.log(`${color}${message}${COLORS.reset}`);
|
|
27
|
+
}
|
|
28
|
+
function logResult(result, verbose) {
|
|
29
|
+
const icon = result.status === 'pass' ? '✓' : result.status === 'warn' ? '⚠' : '✗';
|
|
30
|
+
const color = result.status === 'pass' ? COLORS.green : result.status === 'warn' ? COLORS.yellow : COLORS.red;
|
|
31
|
+
log(`${icon} ${result.name}: ${result.message}`, color);
|
|
32
|
+
if (verbose && result.details) {
|
|
33
|
+
log(` ${result.details}`, COLORS.dim);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check Node.js version
|
|
38
|
+
*/
|
|
39
|
+
function checkNodeVersion() {
|
|
40
|
+
const version = process.version;
|
|
41
|
+
const major = parseInt(version.slice(1).split('.')[0], 10);
|
|
42
|
+
if (major >= 18) {
|
|
43
|
+
return {
|
|
44
|
+
name: 'Node.js',
|
|
45
|
+
status: 'pass',
|
|
46
|
+
message: `${version} (≥18 required)`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
name: 'Node.js',
|
|
51
|
+
status: 'fail',
|
|
52
|
+
message: `${version} (≥18 required)`,
|
|
53
|
+
details: 'Upgrade Node.js: https://nodejs.org/',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if a CLI tool is available
|
|
58
|
+
*/
|
|
59
|
+
function checkCli(name, command, installHint) {
|
|
60
|
+
try {
|
|
61
|
+
const output = execSync(`${command} --version`, {
|
|
62
|
+
encoding: 'utf-8',
|
|
63
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
64
|
+
}).trim();
|
|
65
|
+
return {
|
|
66
|
+
name,
|
|
67
|
+
status: 'pass',
|
|
68
|
+
message: `installed (${output.split('\n')[0]})`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return {
|
|
73
|
+
name,
|
|
74
|
+
status: 'fail',
|
|
75
|
+
message: 'not found',
|
|
76
|
+
details: `Install: ${installHint}`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check .github/agents/ directory and validate frontmatter
|
|
82
|
+
*/
|
|
83
|
+
function checkAgents(cwd) {
|
|
84
|
+
const agentsDir = join(cwd, '.github', 'agents');
|
|
85
|
+
if (!existsSync(agentsDir)) {
|
|
86
|
+
return {
|
|
87
|
+
name: 'Agents',
|
|
88
|
+
status: 'fail',
|
|
89
|
+
message: '.github/agents/ not found',
|
|
90
|
+
details: 'Run: npx beth-copilot init',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const agentFiles = readdirSync(agentsDir).filter(f => f.endsWith('.agent.md'));
|
|
94
|
+
if (agentFiles.length === 0) {
|
|
95
|
+
return {
|
|
96
|
+
name: 'Agents',
|
|
97
|
+
status: 'fail',
|
|
98
|
+
message: 'no .agent.md files found',
|
|
99
|
+
details: 'Run: npx beth-copilot init --force',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Validate frontmatter for each agent
|
|
103
|
+
const errors = [];
|
|
104
|
+
for (const file of agentFiles) {
|
|
105
|
+
try {
|
|
106
|
+
const content = readFileSync(join(agentsDir, file), 'utf-8');
|
|
107
|
+
const { data } = matter(content);
|
|
108
|
+
if (!data.name) {
|
|
109
|
+
errors.push(`${file}: missing 'name' in frontmatter`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
errors.push(`${file}: failed to parse - ${e instanceof Error ? e.message : 'unknown error'}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (errors.length > 0) {
|
|
117
|
+
return {
|
|
118
|
+
name: 'Agents',
|
|
119
|
+
status: 'warn',
|
|
120
|
+
message: `${agentFiles.length} agents, ${errors.length} with issues`,
|
|
121
|
+
details: errors.join('; '),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
name: 'Agents',
|
|
126
|
+
status: 'pass',
|
|
127
|
+
message: `${agentFiles.length} agents configured`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Check .github/skills/ directory
|
|
132
|
+
*/
|
|
133
|
+
function checkSkills(cwd) {
|
|
134
|
+
const skillsDir = join(cwd, '.github', 'skills');
|
|
135
|
+
if (!existsSync(skillsDir)) {
|
|
136
|
+
return {
|
|
137
|
+
name: 'Skills',
|
|
138
|
+
status: 'fail',
|
|
139
|
+
message: '.github/skills/ not found',
|
|
140
|
+
details: 'Run: npx beth-copilot init',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const skillDirs = readdirSync(skillsDir, { withFileTypes: true })
|
|
144
|
+
.filter(d => d.isDirectory())
|
|
145
|
+
.map(d => d.name);
|
|
146
|
+
if (skillDirs.length === 0) {
|
|
147
|
+
return {
|
|
148
|
+
name: 'Skills',
|
|
149
|
+
status: 'warn',
|
|
150
|
+
message: 'no skill directories found',
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Check each skill has a SKILL.md
|
|
154
|
+
const missingSkillMd = [];
|
|
155
|
+
for (const dir of skillDirs) {
|
|
156
|
+
const skillMd = join(skillsDir, dir, 'SKILL.md');
|
|
157
|
+
if (!existsSync(skillMd)) {
|
|
158
|
+
missingSkillMd.push(dir);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (missingSkillMd.length > 0) {
|
|
162
|
+
return {
|
|
163
|
+
name: 'Skills',
|
|
164
|
+
status: 'warn',
|
|
165
|
+
message: `${skillDirs.length} skills, ${missingSkillMd.length} missing SKILL.md`,
|
|
166
|
+
details: `Missing: ${missingSkillMd.join(', ')}`,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
name: 'Skills',
|
|
171
|
+
status: 'pass',
|
|
172
|
+
message: `${skillDirs.length} skills configured`,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Check if beads is initialized in the project
|
|
177
|
+
*/
|
|
178
|
+
function checkBeadsInit(cwd) {
|
|
179
|
+
const beadsDir = join(cwd, '.beads');
|
|
180
|
+
if (existsSync(beadsDir)) {
|
|
181
|
+
return {
|
|
182
|
+
name: 'Beads Init',
|
|
183
|
+
status: 'pass',
|
|
184
|
+
message: '.beads/ directory present',
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
name: 'Beads Init',
|
|
189
|
+
status: 'warn',
|
|
190
|
+
message: '.beads/ not initialized',
|
|
191
|
+
details: 'Run: bd init',
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Main doctor command
|
|
196
|
+
* @param options - Command options
|
|
197
|
+
* @param exitOnFailure - If false, returns result instead of calling process.exit
|
|
198
|
+
*/
|
|
199
|
+
export async function doctor(options = {}, exitOnFailure = true) {
|
|
200
|
+
const { verbose = false } = options;
|
|
201
|
+
const cwd = process.cwd();
|
|
202
|
+
console.log('');
|
|
203
|
+
log('Beth Doctor - System Health Check', COLORS.bright);
|
|
204
|
+
log('─'.repeat(40), COLORS.dim);
|
|
205
|
+
console.log('');
|
|
206
|
+
const results = [
|
|
207
|
+
checkNodeVersion(),
|
|
208
|
+
checkCli('beads', 'bd', 'curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash'),
|
|
209
|
+
checkAgents(cwd),
|
|
210
|
+
checkSkills(cwd),
|
|
211
|
+
checkBeadsInit(cwd),
|
|
212
|
+
];
|
|
213
|
+
// Display results
|
|
214
|
+
for (const result of results) {
|
|
215
|
+
logResult(result, verbose);
|
|
216
|
+
}
|
|
217
|
+
console.log('');
|
|
218
|
+
log('─'.repeat(40), COLORS.dim);
|
|
219
|
+
// Summary
|
|
220
|
+
const passed = results.filter(r => r.status === 'pass').length;
|
|
221
|
+
const warned = results.filter(r => r.status === 'warn').length;
|
|
222
|
+
const failed = results.filter(r => r.status === 'fail').length;
|
|
223
|
+
if (failed > 0) {
|
|
224
|
+
log(`\n${failed} check(s) failed. Fix issues above and run doctor again.`, COLORS.red);
|
|
225
|
+
if (exitOnFailure) {
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else if (warned > 0) {
|
|
230
|
+
log(`\n${passed}/${results.length} passed, ${warned} warning(s)`, COLORS.yellow);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
log(`\nAll ${results.length} checks passed! Beth is ready.`, COLORS.green);
|
|
234
|
+
}
|
|
235
|
+
console.log('');
|
|
236
|
+
return { passed, warned, failed };
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for doctor command.
|
|
3
|
+
* Run with: node --test dist/cli/commands/doctor.test.js
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
6
|
+
import assert from 'node:assert';
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { existsSync, mkdirSync, writeFileSync, rmSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { tmpdir } from 'os';
|
|
11
|
+
// Test utilities - we can't import the private functions from doctor.ts
|
|
12
|
+
// but we can test the overall behavior
|
|
13
|
+
describe('doctor command integration', () => {
|
|
14
|
+
let testDir;
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
// Create a temp directory for testing
|
|
17
|
+
testDir = join(tmpdir(), `beth-test-${Date.now()}`);
|
|
18
|
+
mkdirSync(testDir, { recursive: true });
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
// Clean up temp directory
|
|
22
|
+
if (existsSync(testDir)) {
|
|
23
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
describe('Node.js version check', () => {
|
|
27
|
+
it('should pass with current Node.js version', () => {
|
|
28
|
+
const version = process.version;
|
|
29
|
+
const major = parseInt(version.slice(1).split('.')[0], 10);
|
|
30
|
+
assert.ok(major >= 18, `Node.js ${version} should be >= 18`);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('agents directory validation', () => {
|
|
34
|
+
it('should detect missing .github/agents directory', () => {
|
|
35
|
+
const agentsDir = join(testDir, '.github', 'agents');
|
|
36
|
+
assert.strictEqual(existsSync(agentsDir), false);
|
|
37
|
+
});
|
|
38
|
+
it('should detect existing .github/agents directory', () => {
|
|
39
|
+
const agentsDir = join(testDir, '.github', 'agents');
|
|
40
|
+
mkdirSync(agentsDir, { recursive: true });
|
|
41
|
+
assert.strictEqual(existsSync(agentsDir), true);
|
|
42
|
+
});
|
|
43
|
+
it('should detect valid agent files', () => {
|
|
44
|
+
const agentsDir = join(testDir, '.github', 'agents');
|
|
45
|
+
mkdirSync(agentsDir, { recursive: true });
|
|
46
|
+
const agentContent = `---
|
|
47
|
+
name: test-agent
|
|
48
|
+
description: A test agent
|
|
49
|
+
model: Claude Opus 4.5
|
|
50
|
+
tools:
|
|
51
|
+
- readFile
|
|
52
|
+
- editFiles
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
# Test Agent
|
|
56
|
+
|
|
57
|
+
This is a test agent.
|
|
58
|
+
`;
|
|
59
|
+
writeFileSync(join(agentsDir, 'test.agent.md'), agentContent);
|
|
60
|
+
const files = existsSync(agentsDir);
|
|
61
|
+
assert.strictEqual(files, true);
|
|
62
|
+
});
|
|
63
|
+
it('should detect agent files missing name in frontmatter', () => {
|
|
64
|
+
const agentsDir = join(testDir, '.github', 'agents');
|
|
65
|
+
mkdirSync(agentsDir, { recursive: true });
|
|
66
|
+
// Agent file without name field
|
|
67
|
+
const agentContent = `---
|
|
68
|
+
description: A test agent without name
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
# Test Agent
|
|
72
|
+
`;
|
|
73
|
+
writeFileSync(join(agentsDir, 'invalid.agent.md'), agentContent);
|
|
74
|
+
// We'd need to import gray-matter to actually parse this
|
|
75
|
+
// For now, just verify file was created
|
|
76
|
+
assert.strictEqual(existsSync(join(agentsDir, 'invalid.agent.md')), true);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('skills directory validation', () => {
|
|
80
|
+
it('should detect missing .github/skills directory', () => {
|
|
81
|
+
const skillsDir = join(testDir, '.github', 'skills');
|
|
82
|
+
assert.strictEqual(existsSync(skillsDir), false);
|
|
83
|
+
});
|
|
84
|
+
it('should detect skill directories with SKILL.md', () => {
|
|
85
|
+
const skillDir = join(testDir, '.github', 'skills', 'test-skill');
|
|
86
|
+
mkdirSync(skillDir, { recursive: true });
|
|
87
|
+
writeFileSync(join(skillDir, 'SKILL.md'), '# Test Skill\n\nThis is a test skill.');
|
|
88
|
+
assert.strictEqual(existsSync(join(skillDir, 'SKILL.md')), true);
|
|
89
|
+
});
|
|
90
|
+
it('should detect skill directories missing SKILL.md', () => {
|
|
91
|
+
const skillDir = join(testDir, '.github', 'skills', 'incomplete-skill');
|
|
92
|
+
mkdirSync(skillDir, { recursive: true });
|
|
93
|
+
// Create directory but no SKILL.md
|
|
94
|
+
assert.strictEqual(existsSync(skillDir), true);
|
|
95
|
+
assert.strictEqual(existsSync(join(skillDir, 'SKILL.md')), false);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('beads initialization check', () => {
|
|
99
|
+
it('should detect missing .beads directory', () => {
|
|
100
|
+
const beadsDir = join(testDir, '.beads');
|
|
101
|
+
assert.strictEqual(existsSync(beadsDir), false);
|
|
102
|
+
});
|
|
103
|
+
it('should detect existing .beads directory', () => {
|
|
104
|
+
const beadsDir = join(testDir, '.beads');
|
|
105
|
+
mkdirSync(beadsDir, { recursive: true });
|
|
106
|
+
assert.strictEqual(existsSync(beadsDir), true);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('CLI availability checks', () => {
|
|
111
|
+
it('should detect beads CLI if installed', () => {
|
|
112
|
+
try {
|
|
113
|
+
const output = execSync('bd --version', {
|
|
114
|
+
encoding: 'utf-8',
|
|
115
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
116
|
+
});
|
|
117
|
+
assert.ok(output.includes('version'), 'bd --version should return version info');
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// bd not installed - this is not a failure, just skip
|
|
121
|
+
assert.ok(true, 'bd CLI not installed, skipping');
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
it('should handle missing CLI gracefully', () => {
|
|
125
|
+
try {
|
|
126
|
+
execSync('nonexistent-cli-tool-12345 --version', {
|
|
127
|
+
encoding: 'utf-8',
|
|
128
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
129
|
+
});
|
|
130
|
+
assert.fail('Should have thrown for non-existent CLI');
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
assert.ok(true, 'Correctly threw for missing CLI');
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=doctor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.test.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands
|
|
3
|
+
*
|
|
4
|
+
* Command implementations for the Beth CLI.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
// Commands will be exported here as they're implemented
|
|
8
|
+
// export { doctor } from './doctor.js';
|
|
9
|
+
// export { quickstart } from './quickstart.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,wDAAwD;AACxD,wCAAwC;AACxC,gDAAgD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quickstart Command
|
|
3
|
+
*
|
|
4
|
+
* Streamlined setup for Beth:
|
|
5
|
+
* - Checks if Beth is already initialized
|
|
6
|
+
* - Runs doctor to validate setup
|
|
7
|
+
* - Initializes beads if needed
|
|
8
|
+
* - Prints "what's next" guidance
|
|
9
|
+
*/
|
|
10
|
+
interface QuickstartOptions {
|
|
11
|
+
verbose?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Main quickstart command
|
|
15
|
+
*/
|
|
16
|
+
export declare function quickstart(options?: QuickstartOptions): Promise<void>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=quickstart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/quickstart.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAiED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE/E"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quickstart Command
|
|
3
|
+
*
|
|
4
|
+
* Streamlined setup for Beth:
|
|
5
|
+
* - Checks if Beth is already initialized
|
|
6
|
+
* - Runs doctor to validate setup
|
|
7
|
+
* - Initializes beads if needed
|
|
8
|
+
* - Prints "what's next" guidance
|
|
9
|
+
*/
|
|
10
|
+
import { execSync, spawnSync } from 'child_process';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { doctor } from './doctor.js';
|
|
14
|
+
// Colors for terminal output
|
|
15
|
+
const COLORS = {
|
|
16
|
+
reset: '\x1b[0m',
|
|
17
|
+
bright: '\x1b[1m',
|
|
18
|
+
dim: '\x1b[2m',
|
|
19
|
+
red: '\x1b[31m',
|
|
20
|
+
green: '\x1b[32m',
|
|
21
|
+
yellow: '\x1b[33m',
|
|
22
|
+
cyan: '\x1b[36m',
|
|
23
|
+
};
|
|
24
|
+
function log(message, color = '') {
|
|
25
|
+
console.log(`${color}${message}${COLORS.reset}`);
|
|
26
|
+
}
|
|
27
|
+
function logSuccess(message) {
|
|
28
|
+
log(`✓ ${message}`, COLORS.green);
|
|
29
|
+
}
|
|
30
|
+
function logWarning(message) {
|
|
31
|
+
log(`⚠ ${message}`, COLORS.yellow);
|
|
32
|
+
}
|
|
33
|
+
function logError(message) {
|
|
34
|
+
log(`✗ ${message}`, COLORS.red);
|
|
35
|
+
}
|
|
36
|
+
function logInfo(message) {
|
|
37
|
+
log(` ${message}`, COLORS.cyan);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if Beth is initialized in the project
|
|
41
|
+
*/
|
|
42
|
+
function isBethInitialized(cwd) {
|
|
43
|
+
const agentsDir = join(cwd, '.github', 'agents');
|
|
44
|
+
return existsSync(agentsDir);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if beads is initialized in the project
|
|
48
|
+
*/
|
|
49
|
+
function isBeadsInitialized(cwd) {
|
|
50
|
+
const beadsDir = join(cwd, '.beads');
|
|
51
|
+
return existsSync(beadsDir);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if beads CLI is available
|
|
55
|
+
*/
|
|
56
|
+
function isBeadsAvailable() {
|
|
57
|
+
try {
|
|
58
|
+
execSync('bd --version', { stdio: 'ignore' });
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Initialize beads in the project
|
|
67
|
+
*/
|
|
68
|
+
function initializeBeads(cwd) {
|
|
69
|
+
log('\nInitializing beads...', COLORS.cyan);
|
|
70
|
+
const result = spawnSync('bd', ['init'], {
|
|
71
|
+
cwd,
|
|
72
|
+
stdio: 'inherit',
|
|
73
|
+
shell: true,
|
|
74
|
+
});
|
|
75
|
+
return result.status === 0;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Main quickstart command
|
|
79
|
+
*/
|
|
80
|
+
export async function quickstart(options = {}) {
|
|
81
|
+
const { verbose = false } = options;
|
|
82
|
+
const cwd = process.cwd();
|
|
83
|
+
console.log('');
|
|
84
|
+
log('Beth Quickstart', COLORS.bright);
|
|
85
|
+
log('─'.repeat(40), COLORS.dim);
|
|
86
|
+
// Step 1: Check if Beth is initialized
|
|
87
|
+
if (!isBethInitialized(cwd)) {
|
|
88
|
+
console.log('');
|
|
89
|
+
logWarning('Beth not initialized in this project.');
|
|
90
|
+
logInfo('Run: npx beth-copilot init');
|
|
91
|
+
console.log('');
|
|
92
|
+
logInfo('Then run: npx beth-copilot quickstart');
|
|
93
|
+
console.log('');
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
logSuccess('Beth is initialized');
|
|
97
|
+
// Step 2: Check if beads CLI is available
|
|
98
|
+
if (!isBeadsAvailable()) {
|
|
99
|
+
console.log('');
|
|
100
|
+
logError('beads CLI not found.');
|
|
101
|
+
logInfo('Install: npm install -g @beads/bd');
|
|
102
|
+
logInfo('Or: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
|
|
103
|
+
console.log('');
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
// Step 3: Initialize beads if needed
|
|
107
|
+
if (!isBeadsInitialized(cwd)) {
|
|
108
|
+
const initialized = initializeBeads(cwd);
|
|
109
|
+
if (!initialized) {
|
|
110
|
+
logError('Failed to initialize beads.');
|
|
111
|
+
logInfo('Run manually: bd init');
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
logSuccess('beads initialized');
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
logSuccess('beads already initialized');
|
|
118
|
+
}
|
|
119
|
+
// Step 4: Run doctor (don't exit on failure, we still want to show next steps)
|
|
120
|
+
console.log('');
|
|
121
|
+
log('Running health check...', COLORS.cyan);
|
|
122
|
+
await doctor({ verbose }, false);
|
|
123
|
+
// Step 5: Print next steps
|
|
124
|
+
console.log('');
|
|
125
|
+
log('─'.repeat(40), COLORS.dim);
|
|
126
|
+
log('\nQuick Start Guide:', COLORS.bright);
|
|
127
|
+
console.log('');
|
|
128
|
+
log('1. Open this project in VS Code', COLORS.cyan);
|
|
129
|
+
log('2. Open Copilot Chat (Ctrl+Alt+I / Cmd+Alt+I)', COLORS.cyan);
|
|
130
|
+
log('3. Type @Beth to start working', COLORS.cyan);
|
|
131
|
+
console.log('');
|
|
132
|
+
log('Pro tip:', COLORS.bright);
|
|
133
|
+
logInfo('Start every session with @Beth and let her route work to specialists.');
|
|
134
|
+
console.log('');
|
|
135
|
+
log('Documentation:', COLORS.bright);
|
|
136
|
+
logInfo('https://github.com/stephschofield/beth');
|
|
137
|
+
console.log('');
|
|
138
|
+
log('"They broke my wings and forgot I had claws."', COLORS.cyan);
|
|
139
|
+
console.log('');
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=quickstart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../../src/cli/commands/quickstart.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,6BAA6B;AAC7B,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;CACjB,CAAC;AAMF,SAAS,GAAG,CAAC,OAAe,EAAE,KAAK,GAAG,EAAE;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC/B,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,OAAO,CAAC,OAAe;IAC9B,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;QACvC,GAAG;QACH,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAA6B,EAAE;IAC9D,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAEhC,uCAAuC;IACvC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,UAAU,CAAC,uCAAuC,CAAC,CAAC;QACpD,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,uCAAuC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAElC,0CAA0C;IAC1C,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACjC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QAC7C,OAAO,CAAC,kGAAkG,CAAC,CAAC;QAC5G,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,6BAA6B,CAAC,CAAC;YACxC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAC1C,CAAC;IAED,+EAA+E;IAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAEjC,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,GAAG,CAAC,+CAA+C,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,CAAC,uEAAuE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,+CAA+C,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|