beth-copilot 1.0.14 → 1.0.16

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.
Files changed (236) hide show
  1. package/CHANGELOG.md +195 -177
  2. package/README.md +528 -185
  3. package/bin/cli.js +47 -0
  4. package/dist/cli/commands/doctor.e2e.test.d.ts +8 -0
  5. package/dist/cli/commands/doctor.e2e.test.d.ts.map +1 -0
  6. package/dist/cli/commands/doctor.e2e.test.js +428 -0
  7. package/dist/cli/commands/doctor.e2e.test.js.map +1 -0
  8. package/dist/cli/commands/doctor.test.js +1 -1
  9. package/dist/cli/commands/help.e2e.test.d.ts +9 -0
  10. package/dist/cli/commands/help.e2e.test.d.ts.map +1 -0
  11. package/dist/cli/commands/help.e2e.test.js +150 -0
  12. package/dist/cli/commands/help.e2e.test.js.map +1 -0
  13. package/dist/cli/commands/init.test.d.ts +6 -0
  14. package/dist/cli/commands/init.test.d.ts.map +1 -0
  15. package/dist/cli/commands/init.test.js +289 -0
  16. package/dist/cli/commands/init.test.js.map +1 -0
  17. package/dist/cli/commands/mcp.e2e.test.d.ts +9 -0
  18. package/dist/cli/commands/mcp.e2e.test.d.ts.map +1 -0
  19. package/dist/cli/commands/mcp.e2e.test.js +139 -0
  20. package/dist/cli/commands/mcp.e2e.test.js.map +1 -0
  21. package/dist/cli/commands/pipeline.e2e.test.d.ts +9 -0
  22. package/dist/cli/commands/pipeline.e2e.test.d.ts.map +1 -0
  23. package/dist/cli/commands/pipeline.e2e.test.js +192 -0
  24. package/dist/cli/commands/pipeline.e2e.test.js.map +1 -0
  25. package/dist/cli/commands/quickstart.test.d.ts +6 -0
  26. package/dist/cli/commands/quickstart.test.d.ts.map +1 -0
  27. package/dist/cli/commands/quickstart.test.js +232 -0
  28. package/dist/cli/commands/quickstart.test.js.map +1 -0
  29. package/dist/core/agents/frontmatter.test.d.ts +8 -0
  30. package/dist/core/agents/frontmatter.test.d.ts.map +1 -0
  31. package/dist/core/agents/frontmatter.test.js +589 -0
  32. package/dist/core/agents/frontmatter.test.js.map +1 -0
  33. package/dist/core/agents/handoffs.test.d.ts +8 -0
  34. package/dist/core/agents/handoffs.test.d.ts.map +1 -0
  35. package/dist/core/agents/handoffs.test.js +320 -0
  36. package/dist/core/agents/handoffs.test.js.map +1 -0
  37. package/dist/core/agents/loader.test.js +1 -1
  38. package/dist/core/agents/suite.test.d.ts +8 -0
  39. package/dist/core/agents/suite.test.d.ts.map +1 -0
  40. package/dist/core/agents/suite.test.js +207 -0
  41. package/dist/core/agents/suite.test.js.map +1 -0
  42. package/dist/core/agents/tools.test.d.ts +8 -0
  43. package/dist/core/agents/tools.test.d.ts.map +1 -0
  44. package/dist/core/agents/tools.test.js +332 -0
  45. package/dist/core/agents/tools.test.js.map +1 -0
  46. package/dist/core/context.d.ts +171 -0
  47. package/dist/core/context.d.ts.map +1 -0
  48. package/dist/core/context.js +353 -0
  49. package/dist/core/context.js.map +1 -0
  50. package/dist/core/context.test.d.ts +8 -0
  51. package/dist/core/context.test.d.ts.map +1 -0
  52. package/dist/core/context.test.js +253 -0
  53. package/dist/core/context.test.js.map +1 -0
  54. package/dist/core/handoffs.d.ts +151 -0
  55. package/dist/core/handoffs.d.ts.map +1 -0
  56. package/dist/core/handoffs.js +220 -0
  57. package/dist/core/handoffs.js.map +1 -0
  58. package/dist/core/handoffs.test.d.ts +8 -0
  59. package/dist/core/handoffs.test.d.ts.map +1 -0
  60. package/dist/core/handoffs.test.js +231 -0
  61. package/dist/core/handoffs.test.js.map +1 -0
  62. package/dist/core/orchestrator.d.ts +246 -0
  63. package/dist/core/orchestrator.d.ts.map +1 -0
  64. package/dist/core/orchestrator.js +514 -0
  65. package/dist/core/orchestrator.js.map +1 -0
  66. package/dist/core/orchestrator.test.d.ts +8 -0
  67. package/dist/core/orchestrator.test.d.ts.map +1 -0
  68. package/dist/core/orchestrator.test.js +517 -0
  69. package/dist/core/orchestrator.test.js.map +1 -0
  70. package/dist/core/router.d.ts +102 -0
  71. package/dist/core/router.d.ts.map +1 -0
  72. package/dist/core/router.js +178 -0
  73. package/dist/core/router.js.map +1 -0
  74. package/dist/core/router.test.d.ts +8 -0
  75. package/dist/core/router.test.d.ts.map +1 -0
  76. package/dist/core/router.test.js +215 -0
  77. package/dist/core/router.test.js.map +1 -0
  78. package/dist/index.d.ts +9 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +7 -0
  81. package/dist/index.js.map +1 -1
  82. package/dist/init.test.js +288 -0
  83. package/dist/providers/azure.d.ts +147 -0
  84. package/dist/providers/azure.d.ts.map +1 -0
  85. package/dist/providers/azure.js +491 -0
  86. package/dist/providers/azure.js.map +1 -0
  87. package/dist/providers/azure.test.d.ts +11 -0
  88. package/dist/providers/azure.test.d.ts.map +1 -0
  89. package/dist/providers/azure.test.js +330 -0
  90. package/dist/providers/azure.test.js.map +1 -0
  91. package/dist/providers/config.d.ts +87 -0
  92. package/dist/providers/config.d.ts.map +1 -0
  93. package/dist/providers/config.js +193 -0
  94. package/dist/providers/config.js.map +1 -0
  95. package/dist/providers/config.test.d.ts +7 -0
  96. package/dist/providers/config.test.d.ts.map +1 -0
  97. package/dist/providers/config.test.js +370 -0
  98. package/dist/providers/config.test.js.map +1 -0
  99. package/dist/providers/index.d.ts +18 -0
  100. package/dist/providers/index.d.ts.map +1 -0
  101. package/dist/providers/index.js +14 -0
  102. package/dist/providers/index.js.map +1 -0
  103. package/dist/providers/interface.d.ts +191 -0
  104. package/dist/providers/interface.d.ts.map +1 -0
  105. package/dist/providers/interface.js +94 -0
  106. package/dist/providers/interface.js.map +1 -0
  107. package/dist/providers/retry.d.ts +128 -0
  108. package/dist/providers/retry.d.ts.map +1 -0
  109. package/dist/providers/retry.js +205 -0
  110. package/dist/providers/retry.js.map +1 -0
  111. package/dist/providers/retry.test.d.ts +7 -0
  112. package/dist/providers/retry.test.d.ts.map +1 -0
  113. package/dist/providers/retry.test.js +439 -0
  114. package/dist/providers/retry.test.js.map +1 -0
  115. package/dist/providers/streaming.d.ts +157 -0
  116. package/dist/providers/streaming.d.ts.map +1 -0
  117. package/dist/providers/streaming.js +233 -0
  118. package/dist/providers/streaming.js.map +1 -0
  119. package/dist/providers/streaming.test.d.ts +7 -0
  120. package/dist/providers/streaming.test.d.ts.map +1 -0
  121. package/dist/providers/streaming.test.js +372 -0
  122. package/dist/providers/streaming.test.js.map +1 -0
  123. package/dist/providers/types.d.ts +209 -0
  124. package/dist/providers/types.d.ts.map +1 -0
  125. package/dist/providers/types.js +53 -0
  126. package/dist/providers/types.js.map +1 -0
  127. package/dist/providers/types.test.d.ts +7 -0
  128. package/dist/providers/types.test.d.ts.map +1 -0
  129. package/dist/providers/types.test.js +141 -0
  130. package/dist/providers/types.test.js.map +1 -0
  131. package/dist/tools/cli/beads.d.ts +27 -0
  132. package/dist/tools/cli/beads.d.ts.map +1 -0
  133. package/dist/tools/cli/beads.js +172 -0
  134. package/dist/tools/cli/beads.js.map +1 -0
  135. package/dist/tools/cli/beads.test.d.ts +8 -0
  136. package/dist/tools/cli/beads.test.d.ts.map +1 -0
  137. package/dist/tools/cli/beads.test.js +264 -0
  138. package/dist/tools/cli/beads.test.js.map +1 -0
  139. package/dist/tools/cli/editFile.d.ts +17 -0
  140. package/dist/tools/cli/editFile.d.ts.map +1 -0
  141. package/dist/tools/cli/editFile.js +125 -0
  142. package/dist/tools/cli/editFile.js.map +1 -0
  143. package/dist/tools/cli/editFile.test.d.ts +8 -0
  144. package/dist/tools/cli/editFile.test.d.ts.map +1 -0
  145. package/dist/tools/cli/editFile.test.js +177 -0
  146. package/dist/tools/cli/editFile.test.js.map +1 -0
  147. package/dist/tools/cli/readFile.d.ts +25 -0
  148. package/dist/tools/cli/readFile.d.ts.map +1 -0
  149. package/dist/tools/cli/readFile.js +118 -0
  150. package/dist/tools/cli/readFile.js.map +1 -0
  151. package/dist/tools/cli/readFile.test.d.ts +8 -0
  152. package/dist/tools/cli/readFile.test.d.ts.map +1 -0
  153. package/dist/tools/cli/readFile.test.js +194 -0
  154. package/dist/tools/cli/readFile.test.js.map +1 -0
  155. package/dist/tools/cli/search.d.ts +16 -0
  156. package/dist/tools/cli/search.d.ts.map +1 -0
  157. package/dist/tools/cli/search.js +261 -0
  158. package/dist/tools/cli/search.js.map +1 -0
  159. package/dist/tools/cli/search.test.d.ts +8 -0
  160. package/dist/tools/cli/search.test.d.ts.map +1 -0
  161. package/dist/tools/cli/search.test.js +172 -0
  162. package/dist/tools/cli/search.test.js.map +1 -0
  163. package/dist/tools/cli/subagent.d.ts +43 -0
  164. package/dist/tools/cli/subagent.d.ts.map +1 -0
  165. package/dist/tools/cli/subagent.js +99 -0
  166. package/dist/tools/cli/subagent.js.map +1 -0
  167. package/dist/tools/cli/subagent.test.d.ts +8 -0
  168. package/dist/tools/cli/subagent.test.d.ts.map +1 -0
  169. package/dist/tools/cli/subagent.test.js +190 -0
  170. package/dist/tools/cli/subagent.test.js.map +1 -0
  171. package/dist/tools/cli/terminal.d.ts +19 -0
  172. package/dist/tools/cli/terminal.d.ts.map +1 -0
  173. package/dist/tools/cli/terminal.js +164 -0
  174. package/dist/tools/cli/terminal.js.map +1 -0
  175. package/dist/tools/cli/terminal.test.d.ts +8 -0
  176. package/dist/tools/cli/terminal.test.d.ts.map +1 -0
  177. package/dist/tools/cli/terminal.test.js +161 -0
  178. package/dist/tools/cli/terminal.test.js.map +1 -0
  179. package/dist/tools/index.d.ts +25 -0
  180. package/dist/tools/index.d.ts.map +1 -0
  181. package/dist/tools/index.js +41 -0
  182. package/dist/tools/index.js.map +1 -0
  183. package/dist/tools/interface.d.ts +64 -0
  184. package/dist/tools/interface.d.ts.map +1 -0
  185. package/dist/tools/interface.js +37 -0
  186. package/dist/tools/interface.js.map +1 -0
  187. package/dist/tools/interface.test.d.ts +7 -0
  188. package/dist/tools/interface.test.d.ts.map +1 -0
  189. package/dist/tools/interface.test.js +179 -0
  190. package/dist/tools/interface.test.js.map +1 -0
  191. package/dist/tools/mcp/bridge.d.ts +48 -0
  192. package/dist/tools/mcp/bridge.d.ts.map +1 -0
  193. package/dist/tools/mcp/bridge.js +128 -0
  194. package/dist/tools/mcp/bridge.js.map +1 -0
  195. package/dist/tools/mcp/bridge.test.d.ts +8 -0
  196. package/dist/tools/mcp/bridge.test.d.ts.map +1 -0
  197. package/dist/tools/mcp/bridge.test.js +300 -0
  198. package/dist/tools/mcp/bridge.test.js.map +1 -0
  199. package/dist/tools/mcp/client.d.ts +135 -0
  200. package/dist/tools/mcp/client.d.ts.map +1 -0
  201. package/dist/tools/mcp/client.js +263 -0
  202. package/dist/tools/mcp/client.js.map +1 -0
  203. package/dist/tools/mcp/client.test.d.ts +8 -0
  204. package/dist/tools/mcp/client.test.d.ts.map +1 -0
  205. package/dist/tools/mcp/client.test.js +390 -0
  206. package/dist/tools/mcp/client.test.js.map +1 -0
  207. package/dist/tools/registry.d.ts +82 -0
  208. package/dist/tools/registry.d.ts.map +1 -0
  209. package/dist/tools/registry.js +99 -0
  210. package/dist/tools/registry.js.map +1 -0
  211. package/dist/tools/registry.test.d.ts +7 -0
  212. package/dist/tools/registry.test.d.ts.map +1 -0
  213. package/dist/tools/registry.test.js +199 -0
  214. package/dist/tools/registry.test.js.map +1 -0
  215. package/dist/tools/suite.test.d.ts +11 -0
  216. package/dist/tools/suite.test.d.ts.map +1 -0
  217. package/dist/tools/suite.test.js +119 -0
  218. package/dist/tools/suite.test.js.map +1 -0
  219. package/dist/tools/types.d.ts +75 -0
  220. package/dist/tools/types.d.ts.map +1 -0
  221. package/dist/tools/types.js +30 -0
  222. package/dist/tools/types.js.map +1 -0
  223. package/dist/tools/types.test.d.ts +7 -0
  224. package/dist/tools/types.test.d.ts.map +1 -0
  225. package/dist/tools/types.test.js +178 -0
  226. package/dist/tools/types.test.js.map +1 -0
  227. package/package.json +60 -56
  228. package/sbom.json +3302 -8
  229. package/templates/.github/agents/beth.agent.md +329 -329
  230. package/templates/.github/agents/developer.agent.md +572 -572
  231. package/templates/.github/agents/product-manager.agent.md +272 -272
  232. package/templates/.github/agents/researcher.agent.md +338 -338
  233. package/templates/.github/agents/security-reviewer.agent.md +465 -465
  234. package/templates/.github/agents/tester.agent.md +496 -496
  235. package/templates/.github/agents/ux-designer.agent.md +393 -393
  236. package/templates/mcp.json.example +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.e2e.test.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * E2E tests for the full init → doctor pipeline.
3
+ * Run with: node --test dist/cli/commands/pipeline.e2e.test.js
4
+ *
5
+ * Tests the intended user journey: run init, then doctor to verify,
6
+ * confirming the two commands compose correctly.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=pipeline.e2e.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.e2e.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pipeline.e2e.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * E2E tests for the full init → doctor pipeline.
3
+ * Run with: node --test dist/cli/commands/pipeline.e2e.test.js
4
+ *
5
+ * Tests the intended user journey: run init, then doctor to verify,
6
+ * confirming the two commands compose correctly.
7
+ */
8
+ import { describe, it, beforeEach, afterEach } from 'node:test';
9
+ import assert from 'node:assert';
10
+ import { execSync } from 'child_process';
11
+ import { existsSync, mkdirSync, rmSync, readdirSync, readFileSync, writeFileSync } from 'fs';
12
+ import { join, resolve } from 'path';
13
+ import { tmpdir } from 'os';
14
+ const CLI_PATH = resolve(join(import.meta.dirname, '..', '..', '..', 'bin', 'cli.js'));
15
+ // Expected counts from templates
16
+ const EXPECTED_AGENT_COUNT = 7;
17
+ const EXPECTED_SKILL_COUNT = 6;
18
+ /**
19
+ * Run a CLI command in a directory.
20
+ */
21
+ function runCli(cwd, command, flags = []) {
22
+ const argStr = flags.length > 0 ? ` ${flags.join(' ')}` : '';
23
+ try {
24
+ const stdout = execSync(`node "${CLI_PATH}" ${command}${argStr}`, {
25
+ cwd,
26
+ encoding: 'utf-8',
27
+ env: { ...process.env, NO_COLOR: '1' },
28
+ stdio: ['pipe', 'pipe', 'pipe'],
29
+ });
30
+ return { stdout, stderr: '', code: 0 };
31
+ }
32
+ catch (error) {
33
+ const e = error;
34
+ return { stdout: e.stdout || '', stderr: e.stderr || '', code: e.status || 1 };
35
+ }
36
+ }
37
+ describe('init → doctor pipeline E2E', () => {
38
+ let testDir;
39
+ beforeEach(() => {
40
+ testDir = join(tmpdir(), `beth-pipeline-${Date.now()}-${Math.random().toString(36).slice(2)}`);
41
+ mkdirSync(testDir, { recursive: true });
42
+ });
43
+ afterEach(() => {
44
+ if (existsSync(testDir)) {
45
+ rmSync(testDir, { recursive: true, force: true });
46
+ }
47
+ });
48
+ describe('init creates what doctor checks', () => {
49
+ it('should pass agent check after init', () => {
50
+ // Step 1: Run init
51
+ const initResult = runCli(testDir, 'init', ['--skip-beads']);
52
+ assert.strictEqual(initResult.code, 0, `Init should succeed. Output: ${initResult.stdout}`);
53
+ // Step 2: Run doctor
54
+ const doctorResult = runCli(testDir, 'doctor');
55
+ // Agent check should pass (init installed 7 agents)
56
+ assert.ok(doctorResult.stdout.includes('agents configured') || doctorResult.stdout.includes('Agents'), 'Doctor should find agents after init');
57
+ assert.ok(doctorResult.stdout.includes(`${EXPECTED_AGENT_COUNT} agents`), `Doctor should find ${EXPECTED_AGENT_COUNT} agents`);
58
+ });
59
+ it('should pass skills check after init', () => {
60
+ const initResult = runCli(testDir, 'init', ['--skip-beads']);
61
+ assert.strictEqual(initResult.code, 0, 'Init should succeed');
62
+ const doctorResult = runCli(testDir, 'doctor');
63
+ assert.ok(doctorResult.stdout.includes('skills configured') || doctorResult.stdout.includes('Skills'), 'Doctor should find skills after init');
64
+ assert.ok(doctorResult.stdout.includes(`${EXPECTED_SKILL_COUNT} skills`), `Doctor should find ${EXPECTED_SKILL_COUNT} skills`);
65
+ });
66
+ it('should warn about beads when init used --skip-beads', () => {
67
+ runCli(testDir, 'init', ['--skip-beads']);
68
+ const doctorResult = runCli(testDir, 'doctor');
69
+ // beads warning expected (init skipped it, so .beads/ doesn't exist)
70
+ assert.ok(doctorResult.stdout.includes('⚠') || doctorResult.stdout.includes('not initialized'), 'Doctor should warn about missing .beads after init --skip-beads');
71
+ });
72
+ it('Node.js check should always pass', () => {
73
+ runCli(testDir, 'init', ['--skip-beads']);
74
+ const doctorResult = runCli(testDir, 'doctor');
75
+ assert.ok(doctorResult.stdout.includes('Node.js') && doctorResult.stdout.includes('✓'), 'Node.js check should pass');
76
+ });
77
+ });
78
+ describe('doctor detects init --skip-* gaps', () => {
79
+ it('should still pass agent/skills checks with --skip-mcp', () => {
80
+ runCli(testDir, 'init', ['--skip-beads', '--skip-mcp']);
81
+ const doctorResult = runCli(testDir, 'doctor');
82
+ // Agents and skills should still be checked and pass
83
+ assert.ok(doctorResult.stdout.includes(`${EXPECTED_AGENT_COUNT} agents`), 'Agent check should pass even with --skip-mcp');
84
+ });
85
+ it('should still pass agent/skills checks with --skip-backlog', () => {
86
+ runCli(testDir, 'init', ['--skip-beads', '--skip-backlog']);
87
+ const doctorResult = runCli(testDir, 'doctor');
88
+ assert.ok(doctorResult.stdout.includes(`${EXPECTED_AGENT_COUNT} agents`), 'Agent check should pass even with --skip-backlog');
89
+ });
90
+ });
91
+ describe('init --force then doctor', () => {
92
+ it('should pass doctor after init --force over existing files', () => {
93
+ // First init
94
+ runCli(testDir, 'init', ['--skip-beads']);
95
+ // Corrupt an agent file
96
+ const bethAgent = join(testDir, '.github', 'agents', 'beth.agent.md');
97
+ writeFileSync(bethAgent, 'corrupted content');
98
+ // Doctor should show a warning (corrupted agent has no valid frontmatter)
99
+ const doctorBefore = runCli(testDir, 'doctor');
100
+ assert.ok(doctorBefore.stdout.includes('⚠') || doctorBefore.stdout.includes('issues'), 'Doctor should detect corrupted agent');
101
+ // Re-init with --force
102
+ runCli(testDir, 'init', ['--skip-beads', '--force']);
103
+ // Doctor should now be healthy again
104
+ const doctorAfter = runCli(testDir, 'doctor');
105
+ assert.ok(doctorAfter.stdout.includes(`${EXPECTED_AGENT_COUNT} agents configured`), 'Doctor should pass after init --force repairs the corrupted file');
106
+ });
107
+ });
108
+ describe('full installed structure validation', () => {
109
+ it('should have complete directory structure after init', () => {
110
+ runCli(testDir, 'init', ['--skip-beads']);
111
+ // Verify the full expected structure
112
+ assert.ok(existsSync(join(testDir, '.github', 'agents')), '.github/agents should exist');
113
+ assert.ok(existsSync(join(testDir, '.github', 'skills')), '.github/skills should exist');
114
+ assert.ok(existsSync(join(testDir, '.github', 'copilot-instructions.md')), 'copilot-instructions.md should exist');
115
+ assert.ok(existsSync(join(testDir, '.vscode', 'settings.json')), '.vscode/settings.json should exist');
116
+ assert.ok(existsSync(join(testDir, 'AGENTS.md')), 'AGENTS.md should exist');
117
+ assert.ok(existsSync(join(testDir, 'Backlog.md')), 'Backlog.md should exist');
118
+ assert.ok(existsSync(join(testDir, 'mcp.json.example')), 'mcp.json.example should exist');
119
+ });
120
+ it('all installed agent files should have valid frontmatter', () => {
121
+ runCli(testDir, 'init', ['--skip-beads']);
122
+ const agentsDir = join(testDir, '.github', 'agents');
123
+ const agentFiles = readdirSync(agentsDir).filter(f => f.endsWith('.agent.md'));
124
+ assert.strictEqual(agentFiles.length, EXPECTED_AGENT_COUNT, `Should have ${EXPECTED_AGENT_COUNT} agent files`);
125
+ for (const file of agentFiles) {
126
+ const content = readFileSync(join(agentsDir, file), 'utf-8');
127
+ // Should have frontmatter delimiters
128
+ assert.ok(content.startsWith('---'), `${file} should start with YAML frontmatter delimiter`);
129
+ // Should contain name field
130
+ assert.ok(content.includes('name:'), `${file} should have name field in frontmatter`);
131
+ }
132
+ });
133
+ it('all installed skill directories should have SKILL.md', () => {
134
+ runCli(testDir, 'init', ['--skip-beads']);
135
+ const skillsDir = join(testDir, '.github', 'skills');
136
+ const skillDirs = readdirSync(skillsDir, { withFileTypes: true })
137
+ .filter(d => d.isDirectory())
138
+ .map(d => d.name);
139
+ assert.ok(skillDirs.length >= EXPECTED_SKILL_COUNT, `Should have at least ${EXPECTED_SKILL_COUNT} skill dirs`);
140
+ const missingSkillMd = [];
141
+ for (const dir of skillDirs) {
142
+ const skillMd = join(skillsDir, dir, 'SKILL.md');
143
+ const agentsMd = join(skillsDir, dir, 'AGENTS.md');
144
+ if (!existsSync(skillMd) && !existsSync(agentsMd)) {
145
+ missingSkillMd.push(dir);
146
+ }
147
+ }
148
+ assert.strictEqual(missingSkillMd.length, 0, `Skill directories missing SKILL.md or AGENTS.md: ${missingSkillMd.join(', ')}`);
149
+ });
150
+ it('installed mcp.json.example should be valid JSON', () => {
151
+ runCli(testDir, 'init', ['--skip-beads']);
152
+ const mcpPath = join(testDir, 'mcp.json.example');
153
+ const content = readFileSync(mcpPath, 'utf-8');
154
+ assert.doesNotThrow(() => {
155
+ JSON.parse(content);
156
+ }, 'mcp.json.example should be valid JSON');
157
+ });
158
+ it('installed .vscode/settings.json should be valid JSONC', () => {
159
+ runCli(testDir, 'init', ['--skip-beads']);
160
+ const settingsPath = join(testDir, '.vscode', 'settings.json');
161
+ const content = readFileSync(settingsPath, 'utf-8');
162
+ // VS Code settings use JSONC (JSON with comments) — strip comments before parsing
163
+ const stripped = content.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
164
+ assert.doesNotThrow(() => {
165
+ JSON.parse(stripped);
166
+ }, '.vscode/settings.json should be valid JSONC');
167
+ });
168
+ it('installed .vscode/settings.json should enable subagent delegation', () => {
169
+ runCli(testDir, 'init', ['--skip-beads']);
170
+ const settingsPath = join(testDir, '.vscode', 'settings.json');
171
+ const content = readFileSync(settingsPath, 'utf-8');
172
+ const stripped = content.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
173
+ const settings = JSON.parse(stripped);
174
+ assert.strictEqual(settings['chat.customAgentInSubagent.enabled'], true, '.vscode/settings.json should enable agent-to-agent (A2A) delegation');
175
+ });
176
+ });
177
+ describe('doctor output after complete init', () => {
178
+ it('doctor summary should show no failures after full init', () => {
179
+ runCli(testDir, 'init', ['--skip-beads']);
180
+ // Simulate beads init so doctor has no failures
181
+ mkdirSync(join(testDir, '.beads'), { recursive: true });
182
+ const doctorResult = runCli(testDir, 'doctor');
183
+ // Should not have any ✗ failures
184
+ const failureCount = (doctorResult.stdout.match(/✗/g) || []).length;
185
+ // beads CLI might not be installed, which would be a failure
186
+ // but agents, skills, Node.js, and beads init should all pass
187
+ const passCount = (doctorResult.stdout.match(/✓/g) || []).length;
188
+ assert.ok(passCount >= 4, `Should have at least 4 passing checks (Node.js, Agents, Skills, Beads Init). Got ${passCount} passes, ${failureCount} failures. Output:\n${doctorResult.stdout}`);
189
+ });
190
+ });
191
+ });
192
+ //# sourceMappingURL=pipeline.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.e2e.test.js","sourceRoot":"","sources":["../../../src/cli/commands/pipeline.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * E2E tests for quickstart command.
3
+ * Run with: node --test dist/cli/commands/quickstart.test.js
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=quickstart.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/quickstart.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * E2E tests for quickstart command.
3
+ * Run with: node --test dist/cli/commands/quickstart.test.js
4
+ */
5
+ import { describe, it, beforeEach, afterEach } from 'node:test';
6
+ import assert from 'node:assert';
7
+ import { execSync, spawnSync } from 'child_process';
8
+ import { existsSync, mkdirSync, writeFileSync, rmSync } from 'fs';
9
+ import { join, resolve } from 'path';
10
+ import { tmpdir } from 'os';
11
+ // Path to CLI
12
+ const CLI_PATH = resolve(join(import.meta.dirname, '../../../bin/cli.js'));
13
+ // Check if beads CLI is available for conditional tests
14
+ function isBeadsInstalled() {
15
+ try {
16
+ execSync('bd --version', { stdio: 'ignore' });
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ const BEADS_AVAILABLE = isBeadsInstalled();
24
+ // Skip reason for tests requiring beads
25
+ const SKIP_NO_BEADS = !BEADS_AVAILABLE ? 'beads CLI not installed' : false;
26
+ const SKIP_BEADS_INSTALLED = BEADS_AVAILABLE ? 'beads CLI is installed, cannot test missing CLI' : false;
27
+ /**
28
+ * Run quickstart command in a directory
29
+ */
30
+ function runQuickstart(cwd, args = []) {
31
+ const result = spawnSync('node', [CLI_PATH, 'quickstart', ...args], {
32
+ cwd,
33
+ encoding: 'utf-8',
34
+ env: { ...process.env, FORCE_COLOR: '0' },
35
+ });
36
+ return {
37
+ stdout: result.stdout || '',
38
+ stderr: result.stderr || '',
39
+ status: result.status,
40
+ };
41
+ }
42
+ /**
43
+ * Create a minimal Beth initialized project structure
44
+ */
45
+ function createBethProject(dir) {
46
+ const agentsDir = join(dir, '.github', 'agents');
47
+ mkdirSync(agentsDir, { recursive: true });
48
+ // Create a minimal Beth agent file
49
+ const bethAgent = `---
50
+ name: Beth
51
+ description: AI orchestrator
52
+ model: Claude Opus 4.5
53
+ tools:
54
+ - readFile
55
+ ---
56
+
57
+ # Beth Agent
58
+ `;
59
+ writeFileSync(join(agentsDir, 'beth.agent.md'), bethAgent);
60
+ }
61
+ /**
62
+ * Create skills directory structure
63
+ */
64
+ function createSkillsDir(dir) {
65
+ const skillsDir = join(dir, '.github', 'skills', 'test-skill');
66
+ mkdirSync(skillsDir, { recursive: true });
67
+ writeFileSync(join(skillsDir, 'SKILL.md'), '# Test Skill');
68
+ }
69
+ /**
70
+ * Simulate beads initialization by creating .beads directory
71
+ */
72
+ function simulateBeadsInit(dir) {
73
+ const beadsDir = join(dir, '.beads');
74
+ mkdirSync(beadsDir, { recursive: true });
75
+ // Create minimal beads structure
76
+ writeFileSync(join(beadsDir, 'config.json'), JSON.stringify({ version: '1.0' }));
77
+ }
78
+ describe('quickstart command E2E', () => {
79
+ let testDir;
80
+ beforeEach(() => {
81
+ // Create a temp directory for testing
82
+ testDir = join(tmpdir(), `beth-quickstart-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
83
+ mkdirSync(testDir, { recursive: true });
84
+ });
85
+ afterEach(() => {
86
+ // Clean up temp directory
87
+ if (existsSync(testDir)) {
88
+ rmSync(testDir, { recursive: true, force: true });
89
+ }
90
+ });
91
+ describe('Beth initialization check', () => {
92
+ it('should exit with error if Beth not initialized (no .github/agents)', () => {
93
+ // Run quickstart in empty directory
94
+ const result = runQuickstart(testDir);
95
+ assert.strictEqual(result.status, 1, 'Should exit with status 1');
96
+ assert.ok(result.stdout.includes('Beth not initialized') || result.stdout.includes('not initialized'), 'Should indicate Beth is not initialized');
97
+ assert.ok(result.stdout.includes('npx beth-copilot init'), 'Should suggest running init command');
98
+ });
99
+ it('should detect Beth is initialized when .github/agents exists', () => {
100
+ createBethProject(testDir);
101
+ // Even if beads is missing, it should pass the Beth check first
102
+ const result = runQuickstart(testDir);
103
+ // Should show Beth is initialized (may fail later for beads)
104
+ assert.ok(result.stdout.includes('Beth is initialized') || result.stdout.includes('✓'), 'Should confirm Beth is initialized');
105
+ });
106
+ });
107
+ describe('beads CLI detection', () => {
108
+ it('should detect missing beads CLI', { skip: SKIP_BEADS_INSTALLED }, () => {
109
+ createBethProject(testDir);
110
+ const result = runQuickstart(testDir);
111
+ assert.strictEqual(result.status, 1, 'Should exit with status 1 when beads missing');
112
+ assert.ok(result.stdout.includes('beads CLI not found') || result.stdout.includes('not found'), 'Should indicate beads CLI is not found');
113
+ });
114
+ });
115
+ describe('beads initialization', () => {
116
+ it('should detect uninitialized beads (no .beads directory)', { skip: SKIP_NO_BEADS }, () => {
117
+ createBethProject(testDir);
118
+ // Verify .beads doesn't exist initially
119
+ assert.strictEqual(existsSync(join(testDir, '.beads')), false);
120
+ // Note: quickstart will try to run `bd init` which may or may not succeed
121
+ // depending on the environment. We're testing detection, not initialization.
122
+ const result = runQuickstart(testDir);
123
+ // The command should attempt to initialize beads or indicate it's not initialized
124
+ assert.ok(result.stdout.includes('beads') || result.stdout.includes('Initializing'), 'Should mention beads in output');
125
+ });
126
+ it('should recognize existing beads initialization', { skip: SKIP_NO_BEADS }, () => {
127
+ createBethProject(testDir);
128
+ simulateBeadsInit(testDir);
129
+ const result = runQuickstart(testDir);
130
+ assert.ok(result.stdout.includes('beads already initialized') ||
131
+ result.stdout.includes('already initialized'), 'Should indicate beads is already initialized');
132
+ });
133
+ });
134
+ describe('Quick Start Guide output', () => {
135
+ it('should show Quick Start Guide with VS Code instructions', { skip: SKIP_NO_BEADS }, () => {
136
+ createBethProject(testDir);
137
+ createSkillsDir(testDir);
138
+ simulateBeadsInit(testDir);
139
+ const result = runQuickstart(testDir);
140
+ // Check for Quick Start Guide section
141
+ assert.ok(result.stdout.includes('Quick Start Guide'), 'Should show Quick Start Guide heading');
142
+ // Check for VS Code instructions
143
+ assert.ok(result.stdout.includes('VS Code') || result.stdout.includes('Open this project'), 'Should mention VS Code');
144
+ // Check for Copilot Chat instruction
145
+ assert.ok(result.stdout.includes('Copilot Chat') || result.stdout.includes('Ctrl+Alt+I'), 'Should mention Copilot Chat shortcut');
146
+ // Check for @Beth instruction
147
+ assert.ok(result.stdout.includes('@Beth'), 'Should mention @Beth');
148
+ });
149
+ it('should show Beth tagline quote', { skip: SKIP_NO_BEADS }, () => {
150
+ createBethProject(testDir);
151
+ createSkillsDir(testDir);
152
+ simulateBeadsInit(testDir);
153
+ const result = runQuickstart(testDir);
154
+ // Check for the tagline quote
155
+ assert.ok(result.stdout.includes('They broke my wings and forgot I had claws'), 'Should show Beth tagline quote');
156
+ });
157
+ });
158
+ describe('doctor integration', () => {
159
+ it('should run doctor check and show results', { skip: SKIP_NO_BEADS }, () => {
160
+ createBethProject(testDir);
161
+ createSkillsDir(testDir);
162
+ simulateBeadsInit(testDir);
163
+ const result = runQuickstart(testDir);
164
+ // Should show health check is running
165
+ assert.ok(result.stdout.includes('health check') || result.stdout.includes('Running'), 'Should indicate health check is running');
166
+ // Doctor output should include some checks
167
+ assert.ok(result.stdout.includes('Node.js') ||
168
+ result.stdout.includes('agents') ||
169
+ result.stdout.includes('✓'), 'Should show doctor check results');
170
+ });
171
+ it('should pass --verbose flag through to doctor command', { skip: SKIP_NO_BEADS }, () => {
172
+ createBethProject(testDir);
173
+ createSkillsDir(testDir);
174
+ simulateBeadsInit(testDir);
175
+ // Run with verbose flag
176
+ const verboseResult = runQuickstart(testDir, ['--verbose']);
177
+ // Verbose output should be longer or contain more details
178
+ // At minimum, both should succeed
179
+ assert.ok(verboseResult.status === 0 || verboseResult.stdout.includes('Quick Start Guide'), 'Verbose command should run successfully');
180
+ // Note: exact behavior depends on what --verbose adds
181
+ // We verify the flag is accepted without error
182
+ });
183
+ });
184
+ describe('full success scenario', () => {
185
+ it('should succeed in fully initialized project', { skip: SKIP_NO_BEADS }, () => {
186
+ // Create complete project structure
187
+ createBethProject(testDir);
188
+ createSkillsDir(testDir);
189
+ simulateBeadsInit(testDir);
190
+ // Also create AGENTS.md and Backlog.md
191
+ writeFileSync(join(testDir, 'AGENTS.md'), '# Agent Instructions');
192
+ writeFileSync(join(testDir, 'Backlog.md'), '# Backlog');
193
+ const result = runQuickstart(testDir);
194
+ // Command should succeed
195
+ assert.strictEqual(result.status, 0, 'Should exit with status 0');
196
+ // Should show success indicators
197
+ assert.ok(result.stdout.includes('✓') || result.stdout.includes('Beth is initialized'), 'Should show success indicators');
198
+ // Should complete with Quick Start Guide
199
+ assert.ok(result.stdout.includes('Quick Start Guide'), 'Should show Quick Start Guide at end');
200
+ });
201
+ });
202
+ describe('error handling', () => {
203
+ it('should show helpful error when run outside a project', () => {
204
+ // Run in temp dir with nothing - should fail gracefully
205
+ const result = runQuickstart(testDir);
206
+ assert.ok(result.status !== 0, 'Should exit with non-zero status');
207
+ assert.ok(result.stdout.includes('init') || result.stdout.includes('not initialized'), 'Should suggest how to initialize');
208
+ });
209
+ });
210
+ });
211
+ describe('quickstart output format', () => {
212
+ let testDir;
213
+ beforeEach(() => {
214
+ testDir = join(tmpdir(), `beth-qs-format-${Date.now()}-${Math.random().toString(36).slice(2)}`);
215
+ mkdirSync(testDir, { recursive: true });
216
+ });
217
+ afterEach(() => {
218
+ if (existsSync(testDir)) {
219
+ rmSync(testDir, { recursive: true, force: true });
220
+ }
221
+ });
222
+ it('should show Beth Quickstart header', () => {
223
+ const result = runQuickstart(testDir);
224
+ assert.ok(result.stdout.includes('Beth Quickstart'), 'Should show Beth Quickstart header');
225
+ });
226
+ it('should show decorative separator lines', () => {
227
+ const result = runQuickstart(testDir);
228
+ // Check for separator line (─ repeated)
229
+ assert.ok(result.stdout.includes('─') || result.stdout.includes('-'), 'Should show separator lines');
230
+ });
231
+ });
232
+ //# sourceMappingURL=quickstart.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart.test.js","sourceRoot":"","sources":["../../../src/cli/commands/quickstart.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Agent Frontmatter Validation Tests
3
+ *
4
+ * Tests for YAML frontmatter parsing and validation in agent files.
5
+ * Uses temporary files with inline fixtures to test edge cases.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=frontmatter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.test.d.ts","sourceRoot":"","sources":["../../../src/core/agents/frontmatter.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}