beth-copilot 1.0.18 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/CHANGELOG.md +41 -28
  2. package/README.md +87 -247
  3. package/bin/cli.js +158 -358
  4. package/dist/__tests__/smoke.test.d.ts +8 -0
  5. package/dist/__tests__/smoke.test.d.ts.map +1 -0
  6. package/dist/__tests__/smoke.test.js +49 -0
  7. package/dist/__tests__/smoke.test.js.map +1 -0
  8. package/dist/cli/commands/beads.e2e.test.d.ts +13 -0
  9. package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -0
  10. package/dist/cli/commands/beads.e2e.test.js +526 -0
  11. package/dist/cli/commands/beads.e2e.test.js.map +1 -0
  12. package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts +32 -0
  13. package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts.map +1 -0
  14. package/dist/cli/commands/cli-edge-cases.e2e.test.js +162 -0
  15. package/dist/cli/commands/cli-edge-cases.e2e.test.js.map +1 -0
  16. package/dist/cli/commands/close.d.ts +89 -0
  17. package/dist/cli/commands/close.d.ts.map +1 -0
  18. package/dist/cli/commands/close.e2e.test.d.ts +27 -0
  19. package/dist/cli/commands/close.e2e.test.d.ts.map +1 -0
  20. package/dist/cli/commands/close.e2e.test.js +252 -0
  21. package/dist/cli/commands/close.e2e.test.js.map +1 -0
  22. package/dist/cli/commands/close.js +309 -0
  23. package/dist/cli/commands/close.js.map +1 -0
  24. package/dist/cli/commands/close.test.d.ts +15 -0
  25. package/dist/cli/commands/close.test.d.ts.map +1 -0
  26. package/dist/cli/commands/close.test.js +634 -0
  27. package/dist/cli/commands/close.test.js.map +1 -0
  28. package/dist/cli/commands/doctor.d.ts +23 -0
  29. package/dist/cli/commands/doctor.d.ts.map +1 -1
  30. package/dist/cli/commands/doctor.js +93 -0
  31. package/dist/cli/commands/doctor.js.map +1 -1
  32. package/dist/cli/commands/doctor.test.js +209 -0
  33. package/dist/cli/commands/doctor.test.js.map +1 -1
  34. package/dist/cli/commands/framework-isolation.test.d.ts +30 -0
  35. package/dist/cli/commands/framework-isolation.test.d.ts.map +1 -0
  36. package/dist/cli/commands/framework-isolation.test.js +119 -0
  37. package/dist/cli/commands/framework-isolation.test.js.map +1 -0
  38. package/dist/cli/commands/help.e2e.test.js +4 -4
  39. package/dist/cli/commands/help.e2e.test.js.map +1 -1
  40. package/dist/cli/commands/init-logic.e2e.test.d.ts +37 -0
  41. package/dist/cli/commands/init-logic.e2e.test.d.ts.map +1 -0
  42. package/dist/cli/commands/init-logic.e2e.test.js +305 -0
  43. package/dist/cli/commands/init-logic.e2e.test.js.map +1 -0
  44. package/dist/cli/commands/land.d.ts +142 -0
  45. package/dist/cli/commands/land.d.ts.map +1 -0
  46. package/dist/cli/commands/land.js +647 -0
  47. package/dist/cli/commands/land.js.map +1 -0
  48. package/dist/cli/commands/land.test.d.ts +20 -0
  49. package/dist/cli/commands/land.test.d.ts.map +1 -0
  50. package/dist/cli/commands/land.test.js +622 -0
  51. package/dist/cli/commands/land.test.js.map +1 -0
  52. package/dist/cli/commands/mcp.e2e.test.js +22 -29
  53. package/dist/cli/commands/mcp.e2e.test.js.map +1 -1
  54. package/dist/cli/commands/pipeline.e2e.test.js +20 -20
  55. package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
  56. package/dist/cli/commands/pre-push-guard.d.ts +84 -0
  57. package/dist/cli/commands/pre-push-guard.d.ts.map +1 -0
  58. package/dist/cli/commands/pre-push-guard.e2e.test.d.ts +24 -0
  59. package/dist/cli/commands/pre-push-guard.e2e.test.d.ts.map +1 -0
  60. package/dist/cli/commands/pre-push-guard.e2e.test.js +171 -0
  61. package/dist/cli/commands/pre-push-guard.e2e.test.js.map +1 -0
  62. package/dist/cli/commands/pre-push-guard.js +257 -0
  63. package/dist/cli/commands/pre-push-guard.js.map +1 -0
  64. package/dist/cli/commands/pre-push-guard.test.d.ts +15 -0
  65. package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -0
  66. package/dist/cli/commands/pre-push-guard.test.js +397 -0
  67. package/dist/cli/commands/pre-push-guard.test.js.map +1 -0
  68. package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts +23 -0
  69. package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts.map +1 -0
  70. package/dist/cli/commands/quickstart-expanded.e2e.test.js +179 -0
  71. package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -0
  72. package/dist/cli/commands/quickstart.d.ts.map +1 -1
  73. package/dist/cli/commands/quickstart.js +7 -23
  74. package/dist/cli/commands/quickstart.js.map +1 -1
  75. package/dist/cli/commands/quickstart.test.js +40 -67
  76. package/dist/cli/commands/quickstart.test.js.map +1 -1
  77. package/dist/core/agents/suite.test.js +4 -2
  78. package/dist/core/agents/suite.test.js.map +1 -1
  79. package/dist/core/agents/tools.test.js +5 -1
  80. package/dist/core/agents/tools.test.js.map +1 -1
  81. package/dist/index.d.ts +3 -10
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +5 -10
  84. package/dist/index.js.map +1 -1
  85. package/package.json +15 -9
  86. package/sbom.json +2011 -819
  87. package/templates/.github/agents/beth.agent.md +220 -66
  88. package/templates/.github/agents/developer.agent.md +53 -90
  89. package/templates/.github/agents/product-manager.agent.md +15 -68
  90. package/templates/.github/agents/researcher.agent.md +20 -71
  91. package/templates/.github/agents/security-reviewer.agent.md +29 -81
  92. package/templates/.github/agents/tester.agent.md +40 -69
  93. package/templates/.github/agents/ux-designer.agent.md +20 -74
  94. package/templates/.github/copilot-instructions.md +217 -225
  95. package/templates/AGENTS.md +108 -20
  96. package/templates/mcp.json.example +0 -3
  97. package/dist/cli/commands/client-config.d.ts +0 -31
  98. package/dist/cli/commands/client-config.d.ts.map +0 -1
  99. package/dist/cli/commands/client-config.e2e.test.d.ts +0 -15
  100. package/dist/cli/commands/client-config.e2e.test.d.ts.map +0 -1
  101. package/dist/cli/commands/client-config.e2e.test.js +0 -556
  102. package/dist/cli/commands/client-config.e2e.test.js.map +0 -1
  103. package/dist/cli/commands/client-config.js +0 -73
  104. package/dist/cli/commands/client-config.js.map +0 -1
  105. package/dist/cli/commands/client-config.test.d.ts +0 -6
  106. package/dist/cli/commands/client-config.test.d.ts.map +0 -1
  107. package/dist/cli/commands/client-config.test.js +0 -133
  108. package/dist/cli/commands/client-config.test.js.map +0 -1
  109. package/dist/cli/commands/init-quickstart.e2e.test.d.ts +0 -11
  110. package/dist/cli/commands/init-quickstart.e2e.test.d.ts.map +0 -1
  111. package/dist/cli/commands/init-quickstart.e2e.test.js +0 -221
  112. package/dist/cli/commands/init-quickstart.e2e.test.js.map +0 -1
  113. package/dist/core/context.d.ts +0 -171
  114. package/dist/core/context.d.ts.map +0 -1
  115. package/dist/core/context.js +0 -353
  116. package/dist/core/context.js.map +0 -1
  117. package/dist/core/context.test.d.ts +0 -8
  118. package/dist/core/context.test.d.ts.map +0 -1
  119. package/dist/core/context.test.js +0 -253
  120. package/dist/core/context.test.js.map +0 -1
  121. package/dist/core/handoffs.d.ts +0 -151
  122. package/dist/core/handoffs.d.ts.map +0 -1
  123. package/dist/core/handoffs.js +0 -220
  124. package/dist/core/handoffs.js.map +0 -1
  125. package/dist/core/handoffs.test.d.ts +0 -8
  126. package/dist/core/handoffs.test.d.ts.map +0 -1
  127. package/dist/core/handoffs.test.js +0 -231
  128. package/dist/core/handoffs.test.js.map +0 -1
  129. package/dist/core/orchestrator.d.ts +0 -246
  130. package/dist/core/orchestrator.d.ts.map +0 -1
  131. package/dist/core/orchestrator.js +0 -514
  132. package/dist/core/orchestrator.js.map +0 -1
  133. package/dist/core/orchestrator.test.d.ts +0 -8
  134. package/dist/core/orchestrator.test.d.ts.map +0 -1
  135. package/dist/core/orchestrator.test.js +0 -517
  136. package/dist/core/orchestrator.test.js.map +0 -1
  137. package/dist/core/router.d.ts +0 -102
  138. package/dist/core/router.d.ts.map +0 -1
  139. package/dist/core/router.js +0 -178
  140. package/dist/core/router.js.map +0 -1
  141. package/dist/core/router.test.d.ts +0 -8
  142. package/dist/core/router.test.d.ts.map +0 -1
  143. package/dist/core/router.test.js +0 -215
  144. package/dist/core/router.test.js.map +0 -1
  145. package/dist/init.test.js +0 -288
  146. package/dist/providers/azure.d.ts +0 -147
  147. package/dist/providers/azure.d.ts.map +0 -1
  148. package/dist/providers/azure.js +0 -491
  149. package/dist/providers/azure.js.map +0 -1
  150. package/dist/providers/azure.test.d.ts +0 -11
  151. package/dist/providers/azure.test.d.ts.map +0 -1
  152. package/dist/providers/azure.test.js +0 -330
  153. package/dist/providers/azure.test.js.map +0 -1
  154. package/dist/providers/config.d.ts +0 -87
  155. package/dist/providers/config.d.ts.map +0 -1
  156. package/dist/providers/config.js +0 -193
  157. package/dist/providers/config.js.map +0 -1
  158. package/dist/providers/config.test.d.ts +0 -7
  159. package/dist/providers/config.test.d.ts.map +0 -1
  160. package/dist/providers/config.test.js +0 -370
  161. package/dist/providers/config.test.js.map +0 -1
  162. package/dist/providers/index.d.ts +0 -18
  163. package/dist/providers/index.d.ts.map +0 -1
  164. package/dist/providers/index.js +0 -14
  165. package/dist/providers/index.js.map +0 -1
  166. package/dist/providers/interface.d.ts +0 -191
  167. package/dist/providers/interface.d.ts.map +0 -1
  168. package/dist/providers/interface.js +0 -94
  169. package/dist/providers/interface.js.map +0 -1
  170. package/dist/providers/retry.d.ts +0 -128
  171. package/dist/providers/retry.d.ts.map +0 -1
  172. package/dist/providers/retry.js +0 -205
  173. package/dist/providers/retry.js.map +0 -1
  174. package/dist/providers/retry.test.d.ts +0 -7
  175. package/dist/providers/retry.test.d.ts.map +0 -1
  176. package/dist/providers/retry.test.js +0 -439
  177. package/dist/providers/retry.test.js.map +0 -1
  178. package/dist/providers/streaming.d.ts +0 -157
  179. package/dist/providers/streaming.d.ts.map +0 -1
  180. package/dist/providers/streaming.js +0 -233
  181. package/dist/providers/streaming.js.map +0 -1
  182. package/dist/providers/streaming.test.d.ts +0 -7
  183. package/dist/providers/streaming.test.d.ts.map +0 -1
  184. package/dist/providers/streaming.test.js +0 -372
  185. package/dist/providers/streaming.test.js.map +0 -1
  186. package/dist/providers/types.d.ts +0 -209
  187. package/dist/providers/types.d.ts.map +0 -1
  188. package/dist/providers/types.js +0 -53
  189. package/dist/providers/types.js.map +0 -1
  190. package/dist/providers/types.test.d.ts +0 -7
  191. package/dist/providers/types.test.d.ts.map +0 -1
  192. package/dist/providers/types.test.js +0 -141
  193. package/dist/providers/types.test.js.map +0 -1
  194. package/dist/tools/cli/beads.d.ts +0 -27
  195. package/dist/tools/cli/beads.d.ts.map +0 -1
  196. package/dist/tools/cli/beads.js +0 -172
  197. package/dist/tools/cli/beads.js.map +0 -1
  198. package/dist/tools/cli/beads.test.d.ts +0 -8
  199. package/dist/tools/cli/beads.test.d.ts.map +0 -1
  200. package/dist/tools/cli/beads.test.js +0 -264
  201. package/dist/tools/cli/beads.test.js.map +0 -1
  202. package/dist/tools/cli/editFile.d.ts +0 -17
  203. package/dist/tools/cli/editFile.d.ts.map +0 -1
  204. package/dist/tools/cli/editFile.js +0 -125
  205. package/dist/tools/cli/editFile.js.map +0 -1
  206. package/dist/tools/cli/editFile.test.d.ts +0 -8
  207. package/dist/tools/cli/editFile.test.d.ts.map +0 -1
  208. package/dist/tools/cli/editFile.test.js +0 -177
  209. package/dist/tools/cli/editFile.test.js.map +0 -1
  210. package/dist/tools/cli/readFile.d.ts +0 -25
  211. package/dist/tools/cli/readFile.d.ts.map +0 -1
  212. package/dist/tools/cli/readFile.js +0 -118
  213. package/dist/tools/cli/readFile.js.map +0 -1
  214. package/dist/tools/cli/readFile.test.d.ts +0 -8
  215. package/dist/tools/cli/readFile.test.d.ts.map +0 -1
  216. package/dist/tools/cli/readFile.test.js +0 -194
  217. package/dist/tools/cli/readFile.test.js.map +0 -1
  218. package/dist/tools/cli/search.d.ts +0 -16
  219. package/dist/tools/cli/search.d.ts.map +0 -1
  220. package/dist/tools/cli/search.js +0 -261
  221. package/dist/tools/cli/search.js.map +0 -1
  222. package/dist/tools/cli/search.test.d.ts +0 -8
  223. package/dist/tools/cli/search.test.d.ts.map +0 -1
  224. package/dist/tools/cli/search.test.js +0 -172
  225. package/dist/tools/cli/search.test.js.map +0 -1
  226. package/dist/tools/cli/subagent.d.ts +0 -43
  227. package/dist/tools/cli/subagent.d.ts.map +0 -1
  228. package/dist/tools/cli/subagent.js +0 -99
  229. package/dist/tools/cli/subagent.js.map +0 -1
  230. package/dist/tools/cli/subagent.test.d.ts +0 -8
  231. package/dist/tools/cli/subagent.test.d.ts.map +0 -1
  232. package/dist/tools/cli/subagent.test.js +0 -190
  233. package/dist/tools/cli/subagent.test.js.map +0 -1
  234. package/dist/tools/cli/terminal.d.ts +0 -19
  235. package/dist/tools/cli/terminal.d.ts.map +0 -1
  236. package/dist/tools/cli/terminal.js +0 -164
  237. package/dist/tools/cli/terminal.js.map +0 -1
  238. package/dist/tools/cli/terminal.test.d.ts +0 -8
  239. package/dist/tools/cli/terminal.test.d.ts.map +0 -1
  240. package/dist/tools/cli/terminal.test.js +0 -161
  241. package/dist/tools/cli/terminal.test.js.map +0 -1
  242. package/dist/tools/index.d.ts +0 -25
  243. package/dist/tools/index.d.ts.map +0 -1
  244. package/dist/tools/index.js +0 -41
  245. package/dist/tools/index.js.map +0 -1
  246. package/dist/tools/interface.d.ts +0 -64
  247. package/dist/tools/interface.d.ts.map +0 -1
  248. package/dist/tools/interface.js +0 -37
  249. package/dist/tools/interface.js.map +0 -1
  250. package/dist/tools/interface.test.d.ts +0 -7
  251. package/dist/tools/interface.test.d.ts.map +0 -1
  252. package/dist/tools/interface.test.js +0 -179
  253. package/dist/tools/interface.test.js.map +0 -1
  254. package/dist/tools/mcp/bridge.d.ts +0 -48
  255. package/dist/tools/mcp/bridge.d.ts.map +0 -1
  256. package/dist/tools/mcp/bridge.js +0 -128
  257. package/dist/tools/mcp/bridge.js.map +0 -1
  258. package/dist/tools/mcp/bridge.test.d.ts +0 -8
  259. package/dist/tools/mcp/bridge.test.d.ts.map +0 -1
  260. package/dist/tools/mcp/bridge.test.js +0 -300
  261. package/dist/tools/mcp/bridge.test.js.map +0 -1
  262. package/dist/tools/mcp/client.d.ts +0 -135
  263. package/dist/tools/mcp/client.d.ts.map +0 -1
  264. package/dist/tools/mcp/client.js +0 -263
  265. package/dist/tools/mcp/client.js.map +0 -1
  266. package/dist/tools/mcp/client.test.d.ts +0 -8
  267. package/dist/tools/mcp/client.test.d.ts.map +0 -1
  268. package/dist/tools/mcp/client.test.js +0 -390
  269. package/dist/tools/mcp/client.test.js.map +0 -1
  270. package/dist/tools/registry.d.ts +0 -82
  271. package/dist/tools/registry.d.ts.map +0 -1
  272. package/dist/tools/registry.js +0 -99
  273. package/dist/tools/registry.js.map +0 -1
  274. package/dist/tools/registry.test.d.ts +0 -7
  275. package/dist/tools/registry.test.d.ts.map +0 -1
  276. package/dist/tools/registry.test.js +0 -199
  277. package/dist/tools/registry.test.js.map +0 -1
  278. package/dist/tools/suite.test.d.ts +0 -11
  279. package/dist/tools/suite.test.d.ts.map +0 -1
  280. package/dist/tools/suite.test.js +0 -119
  281. package/dist/tools/suite.test.js.map +0 -1
  282. package/dist/tools/types.d.ts +0 -75
  283. package/dist/tools/types.d.ts.map +0 -1
  284. package/dist/tools/types.js +0 -30
  285. package/dist/tools/types.js.map +0 -1
  286. package/dist/tools/types.test.d.ts +0 -7
  287. package/dist/tools/types.test.d.ts.map +0 -1
  288. package/dist/tools/types.test.js +0 -178
  289. package/dist/tools/types.test.js.map +0 -1
  290. package/templates/.vscode/mcp.json +0 -20
  291. package/templates/CLAUDE.md +0 -129
@@ -1,15 +0,0 @@
1
- /**
2
- * E2E tests for each Beth client configuration.
3
- *
4
- * Tests the three supported client modes:
5
- * - VS Code GitHub Copilot Chat (--client vscode)
6
- * - GitHub Copilot CLI (--client copilot-cli)
7
- * - Claude Code (--client claude-code)
8
- *
9
- * Each configuration installs a different set of files. These tests verify
10
- * that each mode installs exactly what it should — and nothing extra.
11
- *
12
- * Run with: node --test dist/cli/commands/client-config.e2e.test.js
13
- */
14
- export {};
15
- //# sourceMappingURL=client-config.e2e.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-config.e2e.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/client-config.e2e.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -1,556 +0,0 @@
1
- /**
2
- * E2E tests for each Beth client configuration.
3
- *
4
- * Tests the three supported client modes:
5
- * - VS Code GitHub Copilot Chat (--client vscode)
6
- * - GitHub Copilot CLI (--client copilot-cli)
7
- * - Claude Code (--client claude-code)
8
- *
9
- * Each configuration installs a different set of files. These tests verify
10
- * that each mode installs exactly what it should — and nothing extra.
11
- *
12
- * Run with: node --test dist/cli/commands/client-config.e2e.test.js
13
- */
14
- import { describe, it, beforeEach, afterEach } from 'node:test';
15
- import assert from 'node:assert';
16
- import { execSync } from 'child_process';
17
- import { existsSync, mkdirSync, rmSync, readFileSync, readdirSync, writeFileSync, } from 'fs';
18
- import { join, resolve } from 'path';
19
- import { tmpdir } from 'os';
20
- const CLI_PATH = resolve(join(import.meta.dirname, '..', '..', '..', 'bin', 'cli.js'));
21
- // Expected template contents
22
- const EXPECTED_AGENTS = [
23
- 'beth.agent.md',
24
- 'developer.agent.md',
25
- 'product-manager.agent.md',
26
- 'researcher.agent.md',
27
- 'security-reviewer.agent.md',
28
- 'tester.agent.md',
29
- 'ux-designer.agent.md',
30
- ];
31
- const EXPECTED_SKILLS = [
32
- 'framer-components',
33
- 'prd',
34
- 'security-analysis',
35
- 'shadcn-ui',
36
- 'vercel-react-best-practices',
37
- 'web-design-guidelines',
38
- ];
39
- /**
40
- * Run the CLI init command with a specific --client flag.
41
- */
42
- function runInit(cwd, clientMode, extraFlags = []) {
43
- const flags = ['--skip-beads', '--client', clientMode, ...extraFlags];
44
- const command = `node "${CLI_PATH}" init ${flags.join(' ')}`;
45
- try {
46
- const stdout = execSync(command, {
47
- cwd,
48
- encoding: 'utf-8',
49
- env: { ...process.env, NO_COLOR: '1' },
50
- stdio: ['pipe', 'pipe', 'pipe'],
51
- });
52
- return { stdout, stderr: '', code: 0 };
53
- }
54
- catch (error) {
55
- const e = error;
56
- return { stdout: e.stdout || '', stderr: e.stderr || '', code: e.status || 1 };
57
- }
58
- }
59
- /**
60
- * Run the CLI doctor command.
61
- */
62
- function runDoctor(cwd) {
63
- try {
64
- const stdout = execSync(`node "${CLI_PATH}" doctor`, {
65
- cwd,
66
- encoding: 'utf-8',
67
- env: { ...process.env, NO_COLOR: '1' },
68
- stdio: ['pipe', 'pipe', 'pipe'],
69
- });
70
- return { stdout, stderr: '', code: 0 };
71
- }
72
- catch (error) {
73
- const e = error;
74
- return { stdout: e.stdout || '', stderr: e.stderr || '', code: e.status || 1 };
75
- }
76
- }
77
- // ═══════════════════════════════════════════════════════════════════════════════
78
- // VS CODE + GITHUB COPILOT CHAT
79
- // ═══════════════════════════════════════════════════════════════════════════════
80
- describe('--client vscode (VS Code + GitHub Copilot Chat)', () => {
81
- let testDir;
82
- beforeEach(() => {
83
- testDir = join(tmpdir(), `beth-vscode-${Date.now()}-${Math.random().toString(36).slice(2)}`);
84
- mkdirSync(testDir, { recursive: true });
85
- });
86
- afterEach(() => {
87
- if (existsSync(testDir)) {
88
- rmSync(testDir, { recursive: true, force: true });
89
- }
90
- });
91
- describe('installed file structure', () => {
92
- it('should exit 0', () => {
93
- const result = runInit(testDir, 'vscode');
94
- assert.strictEqual(result.code, 0, `Init failed: ${result.stdout}\n${result.stderr}`);
95
- });
96
- it('should install all 7 agent definition files', () => {
97
- runInit(testDir, 'vscode');
98
- const agentsDir = join(testDir, '.github', 'agents');
99
- assert.ok(existsSync(agentsDir), '.github/agents/ should exist');
100
- const files = readdirSync(agentsDir).filter(f => f.endsWith('.agent.md')).sort();
101
- assert.deepStrictEqual(files, EXPECTED_AGENTS, 'Should have all 7 agents');
102
- });
103
- it('should install all 6 skill directories with SKILL.md or AGENTS.md', () => {
104
- runInit(testDir, 'vscode');
105
- const skillsDir = join(testDir, '.github', 'skills');
106
- assert.ok(existsSync(skillsDir), '.github/skills/ should exist');
107
- const dirs = readdirSync(skillsDir)
108
- .filter(f => {
109
- const skillMd = join(skillsDir, f, 'SKILL.md');
110
- const agentsMd = join(skillsDir, f, 'AGENTS.md');
111
- return existsSync(skillMd) || existsSync(agentsMd);
112
- })
113
- .sort();
114
- assert.deepStrictEqual(dirs, EXPECTED_SKILLS, 'Should have all 6 skills');
115
- });
116
- it('should install copilot-instructions.md', () => {
117
- runInit(testDir, 'vscode');
118
- const filepath = join(testDir, '.github', 'copilot-instructions.md');
119
- assert.ok(existsSync(filepath), '.github/copilot-instructions.md should exist');
120
- const content = readFileSync(filepath, 'utf-8');
121
- assert.ok(content.includes('Agent'), 'copilot-instructions.md should reference agents');
122
- });
123
- it('should install .vscode/settings.json with required settings', () => {
124
- runInit(testDir, 'vscode');
125
- const settingsPath = join(testDir, '.vscode', 'settings.json');
126
- assert.ok(existsSync(settingsPath), '.vscode/settings.json should exist');
127
- const content = readFileSync(settingsPath, 'utf-8');
128
- // Strip JSONC comments
129
- const stripped = content.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
130
- const settings = JSON.parse(stripped);
131
- assert.strictEqual(settings['chat.customAgentInSubagent.enabled'], true, 'Should enable subagent delegation');
132
- assert.strictEqual(settings['chat.agent.enabled'], true, 'Should enable agent mode');
133
- });
134
- it('should install .vscode/mcp.json with MCP server definitions', () => {
135
- runInit(testDir, 'vscode');
136
- const mcpPath = join(testDir, '.vscode', 'mcp.json');
137
- assert.ok(existsSync(mcpPath), '.vscode/mcp.json should exist');
138
- const mcp = JSON.parse(readFileSync(mcpPath, 'utf-8'));
139
- assert.ok(mcp.servers, 'mcp.json should have servers object');
140
- assert.ok(mcp.servers.shadcn, 'Should have shadcn MCP server configured');
141
- });
142
- it('should install AGENTS.md in project root', () => {
143
- runInit(testDir, 'vscode');
144
- assert.ok(existsSync(join(testDir, 'AGENTS.md')), 'AGENTS.md should exist');
145
- });
146
- it('should install Backlog.md in project root', () => {
147
- runInit(testDir, 'vscode');
148
- assert.ok(existsSync(join(testDir, 'Backlog.md')), 'Backlog.md should exist');
149
- });
150
- it('should NOT install CLAUDE.md (VS Code mode is not Claude Code)', () => {
151
- runInit(testDir, 'vscode');
152
- assert.strictEqual(existsSync(join(testDir, 'CLAUDE.md')), false, 'CLAUDE.md should NOT exist for vscode mode');
153
- });
154
- });
155
- describe('agent frontmatter validation', () => {
156
- it('all agent files should have valid YAML frontmatter with name field', () => {
157
- runInit(testDir, 'vscode');
158
- const agentsDir = join(testDir, '.github', 'agents');
159
- const files = readdirSync(agentsDir).filter(f => f.endsWith('.agent.md'));
160
- for (const file of files) {
161
- const content = readFileSync(join(agentsDir, file), 'utf-8');
162
- assert.ok(content.startsWith('---'), `${file} should start with frontmatter delimiter`);
163
- assert.ok(content.includes('name:'), `${file} should have name field`);
164
- assert.ok(content.includes('description:'), `${file} should have description field`);
165
- assert.ok(content.includes('tools:'), `${file} should have tools field`);
166
- }
167
- });
168
- it('beth.agent.md should have runSubagent tool and handoffs', () => {
169
- runInit(testDir, 'vscode');
170
- const content = readFileSync(join(testDir, '.github', 'agents', 'beth.agent.md'), 'utf-8');
171
- assert.ok(content.includes('runSubagent'), 'Beth agent should have runSubagent tool');
172
- assert.ok(content.includes('handoffs:'), 'Beth agent should define handoffs');
173
- assert.ok(content.includes('infer: true'), 'Beth agent should be inferable as subagent');
174
- });
175
- it('developer.agent.md should have editing tools', () => {
176
- runInit(testDir, 'vscode');
177
- const content = readFileSync(join(testDir, '.github', 'agents', 'developer.agent.md'), 'utf-8');
178
- assert.ok(content.includes('editFiles'), 'Developer should have editFiles tool');
179
- assert.ok(content.includes('readFile'), 'Developer should have readFile tool');
180
- });
181
- });
182
- describe('init → doctor pipeline', () => {
183
- it('doctor should recognize all agents installed by init --client vscode', () => {
184
- runInit(testDir, 'vscode');
185
- const doctorResult = runDoctor(testDir);
186
- assert.ok(doctorResult.stdout.includes('7 agents'), `Doctor should find 7 agents. Output:\n${doctorResult.stdout}`);
187
- });
188
- it('doctor should recognize all skills installed by init --client vscode', () => {
189
- runInit(testDir, 'vscode');
190
- const doctorResult = runDoctor(testDir);
191
- assert.ok(doctorResult.stdout.includes('6 skills'), `Doctor should find 6 skills. Output:\n${doctorResult.stdout}`);
192
- });
193
- });
194
- describe('--skip-mcp flag', () => {
195
- it('should not install .vscode/mcp.json when --skip-mcp is used', () => {
196
- runInit(testDir, 'vscode', ['--skip-mcp']);
197
- assert.strictEqual(existsSync(join(testDir, '.vscode', 'mcp.json')), false, '.vscode/mcp.json should NOT exist with --skip-mcp');
198
- });
199
- it('should still install .vscode/settings.json when --skip-mcp is used', () => {
200
- runInit(testDir, 'vscode', ['--skip-mcp']);
201
- assert.ok(existsSync(join(testDir, '.vscode', 'settings.json')), '.vscode/settings.json should still exist with --skip-mcp');
202
- });
203
- });
204
- describe('--force flag', () => {
205
- it('should overwrite existing agent files with --force', () => {
206
- // First init
207
- runInit(testDir, 'vscode');
208
- // Corrupt an agent
209
- const bethAgent = join(testDir, '.github', 'agents', 'beth.agent.md');
210
- writeFileSync(bethAgent, 'corrupted');
211
- // Re-init with force
212
- runInit(testDir, 'vscode', ['--force']);
213
- const content = readFileSync(bethAgent, 'utf-8');
214
- assert.ok(content.startsWith('---'), 'Forced re-init should restore valid agent file');
215
- assert.ok(content.includes('name: Beth'), 'Forced re-init should restore Beth agent');
216
- });
217
- });
218
- describe('output messaging', () => {
219
- it('should mention VS Code in the output', () => {
220
- const result = runInit(testDir, 'vscode');
221
- assert.ok(result.stdout.includes('VS Code') || result.stdout.includes('vscode') || result.stdout.includes('Copilot'), 'Output should reference VS Code or Copilot');
222
- });
223
- it('should report configuring for VS Code', () => {
224
- const result = runInit(testDir, 'vscode');
225
- assert.ok(result.stdout.includes('Configuring for') || result.stdout.includes('Installing'), 'Output should confirm which client is being configured');
226
- });
227
- });
228
- });
229
- // ═══════════════════════════════════════════════════════════════════════════════
230
- // GITHUB COPILOT CLI
231
- // ═══════════════════════════════════════════════════════════════════════════════
232
- describe('--client copilot-cli (GitHub Copilot CLI)', () => {
233
- let testDir;
234
- beforeEach(() => {
235
- testDir = join(tmpdir(), `beth-copilot-cli-${Date.now()}-${Math.random().toString(36).slice(2)}`);
236
- mkdirSync(testDir, { recursive: true });
237
- });
238
- afterEach(() => {
239
- if (existsSync(testDir)) {
240
- rmSync(testDir, { recursive: true, force: true });
241
- }
242
- });
243
- describe('installed file structure', () => {
244
- it('should exit 0', () => {
245
- const result = runInit(testDir, 'copilot-cli');
246
- assert.strictEqual(result.code, 0, `Init failed: ${result.stdout}\n${result.stderr}`);
247
- });
248
- it('should install copilot-instructions.md', () => {
249
- runInit(testDir, 'copilot-cli');
250
- const filepath = join(testDir, '.github', 'copilot-instructions.md');
251
- assert.ok(existsSync(filepath), '.github/copilot-instructions.md should exist');
252
- const content = readFileSync(filepath, 'utf-8');
253
- assert.ok(content.includes('Agent'), 'copilot-instructions.md should reference agents');
254
- });
255
- it('should install all 6 skill directories (shared knowledge)', () => {
256
- runInit(testDir, 'copilot-cli');
257
- const skillsDir = join(testDir, '.github', 'skills');
258
- assert.ok(existsSync(skillsDir), '.github/skills/ should exist');
259
- const dirs = readdirSync(skillsDir)
260
- .filter(f => {
261
- const skillMd = join(skillsDir, f, 'SKILL.md');
262
- const agentsMd = join(skillsDir, f, 'AGENTS.md');
263
- return existsSync(skillMd) || existsSync(agentsMd);
264
- })
265
- .sort();
266
- assert.deepStrictEqual(dirs, EXPECTED_SKILLS, 'Should have all 6 skills');
267
- });
268
- it('should install AGENTS.md in project root', () => {
269
- runInit(testDir, 'copilot-cli');
270
- assert.ok(existsSync(join(testDir, 'AGENTS.md')), 'AGENTS.md should exist');
271
- });
272
- it('should install Backlog.md in project root', () => {
273
- runInit(testDir, 'copilot-cli');
274
- assert.ok(existsSync(join(testDir, 'Backlog.md')), 'Backlog.md should exist');
275
- });
276
- it('should NOT install .github/agents/ (no VS Code agent frontmatter needed)', () => {
277
- runInit(testDir, 'copilot-cli');
278
- assert.strictEqual(existsSync(join(testDir, '.github', 'agents')), false, '.github/agents/ should NOT exist for copilot-cli mode');
279
- });
280
- it('should NOT install .vscode/ directory', () => {
281
- runInit(testDir, 'copilot-cli');
282
- assert.strictEqual(existsSync(join(testDir, '.vscode')), false, '.vscode/ should NOT exist for copilot-cli mode');
283
- });
284
- it('should NOT install CLAUDE.md', () => {
285
- runInit(testDir, 'copilot-cli');
286
- assert.strictEqual(existsSync(join(testDir, 'CLAUDE.md')), false, 'CLAUDE.md should NOT exist for copilot-cli mode');
287
- });
288
- });
289
- describe('output messaging', () => {
290
- it('should mention Copilot CLI in the output', () => {
291
- const result = runInit(testDir, 'copilot-cli');
292
- assert.ok(result.stdout.includes('Copilot CLI') || result.stdout.includes('copilot-cli'), 'Output should reference Copilot CLI');
293
- });
294
- });
295
- describe('skip flags work in copilot-cli mode', () => {
296
- it('should not install Backlog.md with --skip-backlog', () => {
297
- runInit(testDir, 'copilot-cli', ['--skip-backlog']);
298
- assert.strictEqual(existsSync(join(testDir, 'Backlog.md')), false, 'Backlog.md should not exist with --skip-backlog');
299
- });
300
- });
301
- });
302
- // ═══════════════════════════════════════════════════════════════════════════════
303
- // CLAUDE CODE
304
- // ═══════════════════════════════════════════════════════════════════════════════
305
- describe('--client claude-code (Claude Code)', () => {
306
- let testDir;
307
- beforeEach(() => {
308
- testDir = join(tmpdir(), `beth-claude-${Date.now()}-${Math.random().toString(36).slice(2)}`);
309
- mkdirSync(testDir, { recursive: true });
310
- });
311
- afterEach(() => {
312
- if (existsSync(testDir)) {
313
- rmSync(testDir, { recursive: true, force: true });
314
- }
315
- });
316
- describe('installed file structure', () => {
317
- it('should exit 0', () => {
318
- const result = runInit(testDir, 'claude-code');
319
- assert.strictEqual(result.code, 0, `Init failed: ${result.stdout}\n${result.stderr}`);
320
- });
321
- it('should install CLAUDE.md in project root', () => {
322
- runInit(testDir, 'claude-code');
323
- const claudeMd = join(testDir, 'CLAUDE.md');
324
- assert.ok(existsSync(claudeMd), 'CLAUDE.md should exist');
325
- const content = readFileSync(claudeMd, 'utf-8');
326
- assert.ok(content.includes('Beth'), 'CLAUDE.md should reference Beth');
327
- assert.ok(content.includes('Seven') || content.includes('agent') || content.includes('Role'), 'CLAUDE.md should describe the agent roles');
328
- });
329
- it('should install all 6 skill directories (shared knowledge)', () => {
330
- runInit(testDir, 'claude-code');
331
- const skillsDir = join(testDir, '.github', 'skills');
332
- assert.ok(existsSync(skillsDir), '.github/skills/ should exist');
333
- const dirs = readdirSync(skillsDir)
334
- .filter(f => {
335
- const skillMd = join(skillsDir, f, 'SKILL.md');
336
- const agentsMd = join(skillsDir, f, 'AGENTS.md');
337
- return existsSync(skillMd) || existsSync(agentsMd);
338
- })
339
- .sort();
340
- assert.deepStrictEqual(dirs, EXPECTED_SKILLS, 'Should have all 6 skills');
341
- });
342
- it('should install AGENTS.md in project root', () => {
343
- runInit(testDir, 'claude-code');
344
- assert.ok(existsSync(join(testDir, 'AGENTS.md')), 'AGENTS.md should exist');
345
- });
346
- it('should install Backlog.md in project root', () => {
347
- runInit(testDir, 'claude-code');
348
- assert.ok(existsSync(join(testDir, 'Backlog.md')), 'Backlog.md should exist');
349
- });
350
- it('should NOT install .github/agents/ (no VS Code frontmatter agents)', () => {
351
- runInit(testDir, 'claude-code');
352
- assert.strictEqual(existsSync(join(testDir, '.github', 'agents')), false, '.github/agents/ should NOT exist for claude-code mode');
353
- });
354
- it('should NOT install .vscode/ directory', () => {
355
- runInit(testDir, 'claude-code');
356
- assert.strictEqual(existsSync(join(testDir, '.vscode')), false, '.vscode/ should NOT exist for claude-code mode');
357
- });
358
- it('should NOT install copilot-instructions.md', () => {
359
- runInit(testDir, 'claude-code');
360
- assert.strictEqual(existsSync(join(testDir, '.github', 'copilot-instructions.md')), false, 'copilot-instructions.md should NOT exist for claude-code mode');
361
- });
362
- });
363
- describe('CLAUDE.md content validation', () => {
364
- it('should contain Beth personality and role descriptions', () => {
365
- runInit(testDir, 'claude-code');
366
- const content = readFileSync(join(testDir, 'CLAUDE.md'), 'utf-8');
367
- assert.ok(content.includes('Beth'), 'Should reference Beth');
368
- assert.ok(content.includes('Developer') || content.includes('developer'), 'Should mention developer role');
369
- assert.ok(content.includes('Tester') || content.includes('tester'), 'Should mention tester role');
370
- });
371
- it('should contain skill references', () => {
372
- runInit(testDir, 'claude-code');
373
- const content = readFileSync(join(testDir, 'CLAUDE.md'), 'utf-8');
374
- assert.ok(content.includes('skills'), 'Should reference skills system');
375
- assert.ok(content.includes('SKILL.md'), 'Should reference SKILL.md files');
376
- });
377
- it('should contain beads integration instructions', () => {
378
- runInit(testDir, 'claude-code');
379
- const content = readFileSync(join(testDir, 'CLAUDE.md'), 'utf-8');
380
- assert.ok(content.includes('beads') || content.includes('bd'), 'Should reference beads/bd');
381
- });
382
- });
383
- describe('output messaging', () => {
384
- it('should mention Claude Code in the output', () => {
385
- const result = runInit(testDir, 'claude-code');
386
- assert.ok(result.stdout.includes('Claude') || result.stdout.includes('claude'), 'Output should reference Claude Code');
387
- });
388
- });
389
- describe('skip flags work in claude-code mode', () => {
390
- it('should not install Backlog.md with --skip-backlog', () => {
391
- runInit(testDir, 'claude-code', ['--skip-backlog']);
392
- assert.strictEqual(existsSync(join(testDir, 'Backlog.md')), false, 'Backlog.md should not exist with --skip-backlog');
393
- });
394
- });
395
- describe('--force flag', () => {
396
- it('should overwrite existing CLAUDE.md with --force', () => {
397
- writeFileSync(join(testDir, 'CLAUDE.md'), 'ORIGINAL');
398
- runInit(testDir, 'claude-code');
399
- let content = readFileSync(join(testDir, 'CLAUDE.md'), 'utf-8');
400
- assert.strictEqual(content, 'ORIGINAL', 'Should not overwrite without --force');
401
- runInit(testDir, 'claude-code', ['--force']);
402
- content = readFileSync(join(testDir, 'CLAUDE.md'), 'utf-8');
403
- assert.notStrictEqual(content, 'ORIGINAL', 'Should overwrite with --force');
404
- assert.ok(content.includes('Beth'), 'Restored CLAUDE.md should contain Beth');
405
- });
406
- });
407
- });
408
- // ═══════════════════════════════════════════════════════════════════════════════
409
- // CROSS-CONFIGURATION TESTS
410
- // ═══════════════════════════════════════════════════════════════════════════════
411
- describe('cross-configuration behavior', () => {
412
- let testDir;
413
- beforeEach(() => {
414
- testDir = join(tmpdir(), `beth-cross-${Date.now()}-${Math.random().toString(36).slice(2)}`);
415
- mkdirSync(testDir, { recursive: true });
416
- });
417
- afterEach(() => {
418
- if (existsSync(testDir)) {
419
- rmSync(testDir, { recursive: true, force: true });
420
- }
421
- });
422
- describe('--client all installs everything', () => {
423
- it('should install VS Code agents, Claude Code CLAUDE.md, and copilot-instructions', () => {
424
- runInit(testDir, 'all');
425
- // VS Code files
426
- assert.ok(existsSync(join(testDir, '.github', 'agents')), 'agents/ should exist for --client all');
427
- assert.ok(existsSync(join(testDir, '.vscode', 'settings.json')), 'settings.json should exist');
428
- assert.ok(existsSync(join(testDir, '.vscode', 'mcp.json')), 'mcp.json should exist');
429
- // Copilot CLI files
430
- assert.ok(existsSync(join(testDir, '.github', 'copilot-instructions.md')), 'copilot-instructions.md should exist');
431
- // Claude Code files
432
- assert.ok(existsSync(join(testDir, 'CLAUDE.md')), 'CLAUDE.md should exist');
433
- // Shared files
434
- assert.ok(existsSync(join(testDir, '.github', 'skills')), 'skills/ should exist');
435
- assert.ok(existsSync(join(testDir, 'AGENTS.md')), 'AGENTS.md should exist');
436
- assert.ok(existsSync(join(testDir, 'Backlog.md')), 'Backlog.md should exist');
437
- });
438
- it('should install all 7 agents', () => {
439
- runInit(testDir, 'all');
440
- const agentsDir = join(testDir, '.github', 'agents');
441
- const files = readdirSync(agentsDir).filter(f => f.endsWith('.agent.md')).sort();
442
- assert.deepStrictEqual(files, EXPECTED_AGENTS, 'All mode should install all 7 agents');
443
- });
444
- it('should install all 6 skills', () => {
445
- runInit(testDir, 'all');
446
- const skillsDir = join(testDir, '.github', 'skills');
447
- const dirs = readdirSync(skillsDir)
448
- .filter(f => {
449
- const skillMd = join(skillsDir, f, 'SKILL.md');
450
- const agentsMd = join(skillsDir, f, 'AGENTS.md');
451
- return existsSync(skillMd) || existsSync(agentsMd);
452
- })
453
- .sort();
454
- assert.deepStrictEqual(dirs, EXPECTED_SKILLS, 'All mode should install all 6 skills');
455
- });
456
- });
457
- describe('shared files are consistent across modes', () => {
458
- it('skills/ content should be identical regardless of client mode', () => {
459
- // Install for each mode in separate directories
460
- const vsDir = join(testDir, 'vscode');
461
- const cliDir = join(testDir, 'copilot-cli');
462
- const claudeDir = join(testDir, 'claude-code');
463
- mkdirSync(vsDir, { recursive: true });
464
- mkdirSync(cliDir, { recursive: true });
465
- mkdirSync(claudeDir, { recursive: true });
466
- runInit(vsDir, 'vscode');
467
- runInit(cliDir, 'copilot-cli');
468
- runInit(claudeDir, 'claude-code');
469
- // Each should have the same skills
470
- const vsSkills = readdirSync(join(vsDir, '.github', 'skills')).sort();
471
- const cliSkills = readdirSync(join(cliDir, '.github', 'skills')).sort();
472
- const claudeSkills = readdirSync(join(claudeDir, '.github', 'skills')).sort();
473
- assert.deepStrictEqual(vsSkills, cliSkills, 'VS Code and CLI skills should match');
474
- assert.deepStrictEqual(cliSkills, claudeSkills, 'CLI and Claude skills should match');
475
- });
476
- it('AGENTS.md should be identical regardless of client mode', () => {
477
- const vsDir = join(testDir, 'vscode');
478
- const cliDir = join(testDir, 'copilot-cli');
479
- const claudeDir = join(testDir, 'claude-code');
480
- mkdirSync(vsDir, { recursive: true });
481
- mkdirSync(cliDir, { recursive: true });
482
- mkdirSync(claudeDir, { recursive: true });
483
- runInit(vsDir, 'vscode');
484
- runInit(cliDir, 'copilot-cli');
485
- runInit(claudeDir, 'claude-code');
486
- const vsContent = readFileSync(join(vsDir, 'AGENTS.md'), 'utf-8');
487
- const cliContent = readFileSync(join(cliDir, 'AGENTS.md'), 'utf-8');
488
- const claudeContent = readFileSync(join(claudeDir, 'AGENTS.md'), 'utf-8');
489
- assert.strictEqual(vsContent, cliContent, 'VS Code and CLI AGENTS.md should match');
490
- assert.strictEqual(cliContent, claudeContent, 'CLI and Claude AGENTS.md should match');
491
- });
492
- });
493
- describe('mode exclusivity', () => {
494
- it('vscode mode should NOT produce claude-code or copilot-cli exclusive files', () => {
495
- runInit(testDir, 'vscode');
496
- // CLAUDE.md is claude-code exclusive
497
- assert.strictEqual(existsSync(join(testDir, 'CLAUDE.md')), false, 'No CLAUDE.md in vscode mode');
498
- });
499
- it('copilot-cli mode should NOT produce vscode or claude-code exclusive files', () => {
500
- runInit(testDir, 'copilot-cli');
501
- // .github/agents/ is vscode exclusive
502
- assert.strictEqual(existsSync(join(testDir, '.github', 'agents')), false, 'No agents/ in copilot-cli mode');
503
- // .vscode/ is vscode exclusive
504
- assert.strictEqual(existsSync(join(testDir, '.vscode')), false, 'No .vscode/ in copilot-cli mode');
505
- // CLAUDE.md is claude-code exclusive
506
- assert.strictEqual(existsSync(join(testDir, 'CLAUDE.md')), false, 'No CLAUDE.md in copilot-cli mode');
507
- });
508
- it('claude-code mode should NOT produce vscode or copilot-cli exclusive files', () => {
509
- runInit(testDir, 'claude-code');
510
- // .github/agents/ is vscode exclusive
511
- assert.strictEqual(existsSync(join(testDir, '.github', 'agents')), false, 'No agents/ in claude-code mode');
512
- // .vscode/ is vscode exclusive
513
- assert.strictEqual(existsSync(join(testDir, '.vscode')), false, 'No .vscode/ in claude-code mode');
514
- // copilot-instructions.md is vscode/copilot-cli exclusive
515
- assert.strictEqual(existsSync(join(testDir, '.github', 'copilot-instructions.md')), false, 'No copilot-instructions.md in claude-code mode');
516
- });
517
- });
518
- describe('sequential init with different clients', () => {
519
- it('should layer vscode on top of claude-code without conflict', () => {
520
- // First: Claude Code
521
- runInit(testDir, 'claude-code');
522
- assert.ok(existsSync(join(testDir, 'CLAUDE.md')), 'CLAUDE.md from first init');
523
- assert.strictEqual(existsSync(join(testDir, '.github', 'agents')), false, 'No agents yet');
524
- // Second: VS Code (without force — should add its files)
525
- runInit(testDir, 'vscode');
526
- assert.ok(existsSync(join(testDir, 'CLAUDE.md')), 'CLAUDE.md preserved from first init');
527
- assert.ok(existsSync(join(testDir, '.github', 'agents')), 'agents/ added by second init');
528
- assert.ok(existsSync(join(testDir, '.vscode', 'settings.json')), 'settings.json added by second init');
529
- });
530
- it('should layer claude-code on top of vscode without conflict', () => {
531
- // First: VS Code
532
- runInit(testDir, 'vscode');
533
- assert.ok(existsSync(join(testDir, '.github', 'agents')), 'agents/ from first init');
534
- // Second: Claude Code
535
- runInit(testDir, 'claude-code');
536
- assert.ok(existsSync(join(testDir, '.github', 'agents')), 'agents/ preserved from first init');
537
- assert.ok(existsSync(join(testDir, 'CLAUDE.md')), 'CLAUDE.md added by second init');
538
- });
539
- it('doctor should pass after layering vscode + claude-code', () => {
540
- runInit(testDir, 'vscode');
541
- runInit(testDir, 'claude-code');
542
- // Simulate beads init
543
- mkdirSync(join(testDir, '.beads'), { recursive: true });
544
- const doctorResult = runDoctor(testDir);
545
- assert.ok(doctorResult.stdout.includes('7 agents'), `Doctor should find 7 agents after layered init. Output:\n${doctorResult.stdout}`);
546
- });
547
- });
548
- describe('invalid --client value', () => {
549
- it('should reject invalid client values', () => {
550
- const result = runInit(testDir, 'invalid-client');
551
- assert.notStrictEqual(result.code, 0, 'Should exit non-zero for invalid client');
552
- assert.ok(result.stdout.includes('Invalid client') || result.stderr.includes('Invalid client'), 'Should report invalid client');
553
- });
554
- });
555
- });
556
- //# sourceMappingURL=client-config.e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-config.e2e.test.js","sourceRoot":"","sources":["../../../src/cli/commands/client-config.e2e.test.ts"],"names":[],"mappings":"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"}