beth-copilot 1.0.18 → 2.0.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 (429) hide show
  1. package/CHANGELOG.md +79 -28
  2. package/README.md +127 -298
  3. package/assets/beth-questioning.png +0 -0
  4. package/assets/yellowstone-beth.png +0 -0
  5. package/bin/cli.js +124 -715
  6. package/dist/__tests__/inject-skills.test.d.ts +9 -0
  7. package/dist/__tests__/inject-skills.test.d.ts.map +1 -0
  8. package/dist/__tests__/inject-skills.test.js +143 -0
  9. package/dist/__tests__/inject-skills.test.js.map +1 -0
  10. package/dist/__tests__/skills/disambiguation.test.d.ts +10 -0
  11. package/dist/__tests__/skills/disambiguation.test.d.ts.map +1 -0
  12. package/dist/__tests__/skills/disambiguation.test.js +192 -0
  13. package/dist/__tests__/skills/disambiguation.test.js.map +1 -0
  14. package/dist/__tests__/skills/hook-injection.test.d.ts +11 -0
  15. package/dist/__tests__/skills/hook-injection.test.d.ts.map +1 -0
  16. package/dist/__tests__/skills/hook-injection.test.js +173 -0
  17. package/dist/__tests__/skills/hook-injection.test.js.map +1 -0
  18. package/dist/__tests__/skills/mapping-completeness.test.d.ts +17 -0
  19. package/dist/__tests__/skills/mapping-completeness.test.d.ts.map +1 -0
  20. package/dist/__tests__/skills/mapping-completeness.test.js +281 -0
  21. package/dist/__tests__/skills/mapping-completeness.test.js.map +1 -0
  22. package/dist/__tests__/skills/pipeline-integration.test.d.ts +18 -0
  23. package/dist/__tests__/skills/pipeline-integration.test.d.ts.map +1 -0
  24. package/dist/__tests__/skills/pipeline-integration.test.js +234 -0
  25. package/dist/__tests__/skills/pipeline-integration.test.js.map +1 -0
  26. package/dist/__tests__/skills/skill-routing.test.d.ts +15 -0
  27. package/dist/__tests__/skills/skill-routing.test.d.ts.map +1 -0
  28. package/dist/__tests__/skills/skill-routing.test.js +723 -0
  29. package/dist/__tests__/skills/skill-routing.test.js.map +1 -0
  30. package/dist/__tests__/skills/trigger-coverage.test.d.ts +24 -0
  31. package/dist/__tests__/skills/trigger-coverage.test.d.ts.map +1 -0
  32. package/dist/__tests__/skills/trigger-coverage.test.js +746 -0
  33. package/dist/__tests__/skills/trigger-coverage.test.js.map +1 -0
  34. package/dist/__tests__/smoke.test.d.ts +8 -0
  35. package/dist/__tests__/smoke.test.d.ts.map +1 -0
  36. package/dist/__tests__/smoke.test.js +62 -0
  37. package/dist/__tests__/smoke.test.js.map +1 -0
  38. package/dist/__tests__/verify-skills.test.d.ts +9 -0
  39. package/dist/__tests__/verify-skills.test.d.ts.map +1 -0
  40. package/dist/__tests__/verify-skills.test.js +78 -0
  41. package/dist/__tests__/verify-skills.test.js.map +1 -0
  42. package/dist/cli/commands/beads.e2e.test.d.ts +15 -0
  43. package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -0
  44. package/dist/cli/commands/beads.e2e.test.js +585 -0
  45. package/dist/cli/commands/beads.e2e.test.js.map +1 -0
  46. package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts +32 -0
  47. package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts.map +1 -0
  48. package/dist/cli/commands/cli-edge-cases.e2e.test.js +162 -0
  49. package/dist/cli/commands/cli-edge-cases.e2e.test.js.map +1 -0
  50. package/dist/cli/commands/close.d.ts +54 -0
  51. package/dist/cli/commands/close.d.ts.map +1 -0
  52. package/dist/cli/commands/close.e2e.test.d.ts +11 -0
  53. package/dist/cli/commands/close.e2e.test.d.ts.map +1 -0
  54. package/dist/cli/commands/close.e2e.test.js +71 -0
  55. package/dist/cli/commands/close.e2e.test.js.map +1 -0
  56. package/dist/cli/commands/close.js +95 -0
  57. package/dist/cli/commands/close.js.map +1 -0
  58. package/dist/cli/commands/close.test.d.ts +13 -0
  59. package/dist/cli/commands/close.test.d.ts.map +1 -0
  60. package/dist/cli/commands/close.test.js +254 -0
  61. package/dist/cli/commands/close.test.js.map +1 -0
  62. package/dist/cli/commands/doctor.d.ts +7 -1
  63. package/dist/cli/commands/doctor.d.ts.map +1 -1
  64. package/dist/cli/commands/doctor.e2e.test.js +3 -59
  65. package/dist/cli/commands/doctor.e2e.test.js.map +1 -1
  66. package/dist/cli/commands/doctor.js +38 -18
  67. package/dist/cli/commands/doctor.js.map +1 -1
  68. package/dist/cli/commands/doctor.test.js +32 -25
  69. package/dist/cli/commands/doctor.test.js.map +1 -1
  70. package/dist/cli/commands/framework-isolation.test.d.ts +30 -0
  71. package/dist/cli/commands/framework-isolation.test.d.ts.map +1 -0
  72. package/dist/cli/commands/framework-isolation.test.js +118 -0
  73. package/dist/cli/commands/framework-isolation.test.js.map +1 -0
  74. package/dist/cli/commands/help.e2e.test.js +5 -9
  75. package/dist/cli/commands/help.e2e.test.js.map +1 -1
  76. package/dist/cli/commands/init-logic.e2e.test.d.ts +37 -0
  77. package/dist/cli/commands/init-logic.e2e.test.d.ts.map +1 -0
  78. package/dist/cli/commands/init-logic.e2e.test.js +315 -0
  79. package/dist/cli/commands/init-logic.e2e.test.js.map +1 -0
  80. package/dist/cli/commands/init.test.js +4 -21
  81. package/dist/cli/commands/init.test.js.map +1 -1
  82. package/dist/cli/commands/land.d.ts +130 -0
  83. package/dist/cli/commands/land.d.ts.map +1 -0
  84. package/dist/cli/commands/land.js +592 -0
  85. package/dist/cli/commands/land.js.map +1 -0
  86. package/dist/cli/commands/land.test.d.ts +19 -0
  87. package/dist/cli/commands/land.test.d.ts.map +1 -0
  88. package/dist/cli/commands/land.test.js +567 -0
  89. package/dist/cli/commands/land.test.js.map +1 -0
  90. package/dist/cli/commands/mcp.e2e.test.js +24 -31
  91. package/dist/cli/commands/mcp.e2e.test.js.map +1 -1
  92. package/dist/cli/commands/pipeline.e2e.test.js +28 -31
  93. package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
  94. package/dist/cli/commands/pre-push-guard.d.ts +74 -0
  95. package/dist/cli/commands/pre-push-guard.d.ts.map +1 -0
  96. package/dist/cli/commands/pre-push-guard.e2e.test.d.ts +24 -0
  97. package/dist/cli/commands/pre-push-guard.e2e.test.d.ts.map +1 -0
  98. package/dist/cli/commands/pre-push-guard.e2e.test.js +171 -0
  99. package/dist/cli/commands/pre-push-guard.e2e.test.js.map +1 -0
  100. package/dist/cli/commands/pre-push-guard.js +212 -0
  101. package/dist/cli/commands/pre-push-guard.js.map +1 -0
  102. package/dist/cli/commands/pre-push-guard.test.d.ts +14 -0
  103. package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -0
  104. package/dist/cli/commands/pre-push-guard.test.js +314 -0
  105. package/dist/cli/commands/pre-push-guard.test.js.map +1 -0
  106. package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts +23 -0
  107. package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts.map +1 -0
  108. package/dist/cli/commands/quickstart-expanded.e2e.test.js +152 -0
  109. package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -0
  110. package/dist/cli/commands/quickstart.d.ts +0 -1
  111. package/dist/cli/commands/quickstart.d.ts.map +1 -1
  112. package/dist/cli/commands/quickstart.js +9 -83
  113. package/dist/cli/commands/quickstart.js.map +1 -1
  114. package/dist/cli/commands/quickstart.test.js +8 -129
  115. package/dist/cli/commands/quickstart.test.js.map +1 -1
  116. package/dist/cli/commands/update.d.ts +35 -0
  117. package/dist/cli/commands/update.d.ts.map +1 -0
  118. package/dist/cli/commands/update.e2e.test.d.ts +24 -0
  119. package/dist/cli/commands/update.e2e.test.d.ts.map +1 -0
  120. package/dist/cli/commands/update.e2e.test.js +240 -0
  121. package/dist/cli/commands/update.e2e.test.js.map +1 -0
  122. package/dist/cli/commands/update.js +255 -0
  123. package/dist/cli/commands/update.js.map +1 -0
  124. package/dist/core/agents/frontmatter.test.js +1 -1
  125. package/dist/core/agents/frontmatter.test.js.map +1 -1
  126. package/dist/core/agents/handoffs.test.js +1 -1
  127. package/dist/core/agents/handoffs.test.js.map +1 -1
  128. package/dist/core/agents/loader.d.ts +4 -2
  129. package/dist/core/agents/loader.d.ts.map +1 -1
  130. package/dist/core/agents/loader.js +5 -3
  131. package/dist/core/agents/loader.js.map +1 -1
  132. package/dist/core/agents/loader.test.js +42 -4
  133. package/dist/core/agents/loader.test.js.map +1 -1
  134. package/dist/core/agents/suite.test.js +12 -9
  135. package/dist/core/agents/suite.test.js.map +1 -1
  136. package/dist/core/agents/tools.test.js +15 -9
  137. package/dist/core/agents/tools.test.js.map +1 -1
  138. package/dist/core/agents/types.test.js +1 -1
  139. package/dist/core/agents/types.test.js.map +1 -1
  140. package/dist/core/skills/loader.test.js +1 -1
  141. package/dist/core/skills/loader.test.js.map +1 -1
  142. package/dist/index.d.ts +3 -11
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +5 -12
  145. package/dist/index.js.map +1 -1
  146. package/dist/lib/pathValidation.d.ts +0 -5
  147. package/dist/lib/pathValidation.d.ts.map +1 -1
  148. package/dist/lib/pathValidation.js +0 -11
  149. package/dist/lib/pathValidation.js.map +1 -1
  150. package/dist/lib/pathValidation.test.js +2 -14
  151. package/dist/lib/pathValidation.test.js.map +1 -1
  152. package/package.json +13 -10
  153. package/sbom.json +1927 -847
  154. package/templates/.github/agents/beth.agent.md +331 -105
  155. package/templates/.github/agents/developer.agent.md +73 -102
  156. package/templates/.github/agents/product-manager.agent.md +24 -68
  157. package/templates/.github/agents/researcher.agent.md +21 -69
  158. package/templates/.github/agents/security-reviewer.agent.md +39 -82
  159. package/templates/.github/agents/tester.agent.md +44 -65
  160. package/templates/.github/agents/ux-designer.agent.md +25 -76
  161. package/templates/.github/copilot-instructions.md +246 -225
  162. package/templates/.github/copilot-mcp-config.json +12 -0
  163. package/templates/.github/dependabot.yml +68 -0
  164. package/templates/.github/hooks/scripts/inject-skills.mjs +139 -0
  165. package/templates/.github/hooks/scripts/verify-skills.mjs +47 -0
  166. package/templates/.github/hooks/skill-enforcement.json +18 -0
  167. package/templates/.github/pull_request_template.md +48 -0
  168. package/templates/.github/skills/framer-components/SKILL.md +0 -0
  169. package/templates/.github/skills/prd/SKILL.md +0 -0
  170. package/templates/.github/skills/security-analysis/SKILL.md +798 -798
  171. package/templates/.github/skills/shadcn-ui/SKILL.md +561 -561
  172. package/templates/.github/skills/vercel-react-best-practices/AGENTS.md +0 -0
  173. package/templates/.github/skills/vercel-react-best-practices/SKILL.md +0 -0
  174. package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -0
  175. package/templates/.github/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -0
  176. package/templates/.github/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -0
  177. package/templates/.github/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -0
  178. package/templates/.github/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -0
  179. package/templates/.github/skills/vercel-react-best-practices/rules/async-parallel.md +0 -0
  180. package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -0
  181. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -0
  182. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -0
  183. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -0
  184. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -0
  185. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -0
  186. package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -0
  187. package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -0
  188. package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -0
  189. package/templates/.github/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -0
  190. package/templates/.github/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -0
  191. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -0
  192. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -0
  193. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -0
  194. package/templates/.github/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -0
  195. package/templates/.github/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -0
  196. package/templates/.github/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -0
  197. package/templates/.github/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -0
  198. package/templates/.github/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -0
  199. package/templates/.github/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -0
  200. package/templates/.github/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -0
  201. package/templates/.github/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -0
  202. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -0
  203. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
  204. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -0
  205. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -0
  206. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -0
  207. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
  208. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -0
  209. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -0
  210. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -0
  211. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -0
  212. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -0
  213. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -0
  214. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -0
  215. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -0
  216. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -0
  217. package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -0
  218. package/templates/.github/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -0
  219. package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -0
  220. package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -0
  221. package/templates/.github/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -0
  222. package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -0
  223. package/templates/.github/skills/vercel-react-best-practices/rules/server-serialization.md +0 -0
  224. package/templates/.github/skills/web-design-guidelines/SKILL.md +0 -0
  225. package/templates/.vscode/settings.json +16 -16
  226. package/templates/AGENTS.md +103 -54
  227. package/templates/Backlog.md +80 -80
  228. package/templates/mcp.json.example +0 -3
  229. package/assets/beth-portrait-small.txt +0 -13
  230. package/assets/beth-portrait.txt +0 -60
  231. package/bin/beth-animation.sh +0 -155
  232. package/bin/lib/animation.js +0 -189
  233. package/bin/lib/pathValidation.js +0 -233
  234. package/bin/lib/pathValidation.test.js +0 -280
  235. package/dist/cli/commands/client-config.d.ts +0 -31
  236. package/dist/cli/commands/client-config.d.ts.map +0 -1
  237. package/dist/cli/commands/client-config.e2e.test.d.ts +0 -15
  238. package/dist/cli/commands/client-config.e2e.test.d.ts.map +0 -1
  239. package/dist/cli/commands/client-config.e2e.test.js +0 -556
  240. package/dist/cli/commands/client-config.e2e.test.js.map +0 -1
  241. package/dist/cli/commands/client-config.js +0 -73
  242. package/dist/cli/commands/client-config.js.map +0 -1
  243. package/dist/cli/commands/client-config.test.d.ts +0 -6
  244. package/dist/cli/commands/client-config.test.d.ts.map +0 -1
  245. package/dist/cli/commands/client-config.test.js +0 -133
  246. package/dist/cli/commands/client-config.test.js.map +0 -1
  247. package/dist/cli/commands/init-quickstart.e2e.test.d.ts +0 -11
  248. package/dist/cli/commands/init-quickstart.e2e.test.d.ts.map +0 -1
  249. package/dist/cli/commands/init-quickstart.e2e.test.js +0 -221
  250. package/dist/cli/commands/init-quickstart.e2e.test.js.map +0 -1
  251. package/dist/core/context.d.ts +0 -171
  252. package/dist/core/context.d.ts.map +0 -1
  253. package/dist/core/context.js +0 -353
  254. package/dist/core/context.js.map +0 -1
  255. package/dist/core/context.test.d.ts +0 -8
  256. package/dist/core/context.test.d.ts.map +0 -1
  257. package/dist/core/context.test.js +0 -253
  258. package/dist/core/context.test.js.map +0 -1
  259. package/dist/core/handoffs.d.ts +0 -151
  260. package/dist/core/handoffs.d.ts.map +0 -1
  261. package/dist/core/handoffs.js +0 -220
  262. package/dist/core/handoffs.js.map +0 -1
  263. package/dist/core/handoffs.test.d.ts +0 -8
  264. package/dist/core/handoffs.test.d.ts.map +0 -1
  265. package/dist/core/handoffs.test.js +0 -231
  266. package/dist/core/handoffs.test.js.map +0 -1
  267. package/dist/core/orchestrator.d.ts +0 -246
  268. package/dist/core/orchestrator.d.ts.map +0 -1
  269. package/dist/core/orchestrator.js +0 -514
  270. package/dist/core/orchestrator.js.map +0 -1
  271. package/dist/core/orchestrator.test.d.ts +0 -8
  272. package/dist/core/orchestrator.test.d.ts.map +0 -1
  273. package/dist/core/orchestrator.test.js +0 -517
  274. package/dist/core/orchestrator.test.js.map +0 -1
  275. package/dist/core/router.d.ts +0 -102
  276. package/dist/core/router.d.ts.map +0 -1
  277. package/dist/core/router.js +0 -178
  278. package/dist/core/router.js.map +0 -1
  279. package/dist/core/router.test.d.ts +0 -8
  280. package/dist/core/router.test.d.ts.map +0 -1
  281. package/dist/core/router.test.js +0 -215
  282. package/dist/core/router.test.js.map +0 -1
  283. package/dist/init.test.js +0 -288
  284. package/dist/providers/azure.d.ts +0 -147
  285. package/dist/providers/azure.d.ts.map +0 -1
  286. package/dist/providers/azure.js +0 -491
  287. package/dist/providers/azure.js.map +0 -1
  288. package/dist/providers/azure.test.d.ts +0 -11
  289. package/dist/providers/azure.test.d.ts.map +0 -1
  290. package/dist/providers/azure.test.js +0 -330
  291. package/dist/providers/azure.test.js.map +0 -1
  292. package/dist/providers/config.d.ts +0 -87
  293. package/dist/providers/config.d.ts.map +0 -1
  294. package/dist/providers/config.js +0 -193
  295. package/dist/providers/config.js.map +0 -1
  296. package/dist/providers/config.test.d.ts +0 -7
  297. package/dist/providers/config.test.d.ts.map +0 -1
  298. package/dist/providers/config.test.js +0 -370
  299. package/dist/providers/config.test.js.map +0 -1
  300. package/dist/providers/index.d.ts +0 -18
  301. package/dist/providers/index.d.ts.map +0 -1
  302. package/dist/providers/index.js +0 -14
  303. package/dist/providers/index.js.map +0 -1
  304. package/dist/providers/interface.d.ts +0 -191
  305. package/dist/providers/interface.d.ts.map +0 -1
  306. package/dist/providers/interface.js +0 -94
  307. package/dist/providers/interface.js.map +0 -1
  308. package/dist/providers/retry.d.ts +0 -128
  309. package/dist/providers/retry.d.ts.map +0 -1
  310. package/dist/providers/retry.js +0 -205
  311. package/dist/providers/retry.js.map +0 -1
  312. package/dist/providers/retry.test.d.ts +0 -7
  313. package/dist/providers/retry.test.d.ts.map +0 -1
  314. package/dist/providers/retry.test.js +0 -439
  315. package/dist/providers/retry.test.js.map +0 -1
  316. package/dist/providers/streaming.d.ts +0 -157
  317. package/dist/providers/streaming.d.ts.map +0 -1
  318. package/dist/providers/streaming.js +0 -233
  319. package/dist/providers/streaming.js.map +0 -1
  320. package/dist/providers/streaming.test.d.ts +0 -7
  321. package/dist/providers/streaming.test.d.ts.map +0 -1
  322. package/dist/providers/streaming.test.js +0 -372
  323. package/dist/providers/streaming.test.js.map +0 -1
  324. package/dist/providers/types.d.ts +0 -209
  325. package/dist/providers/types.d.ts.map +0 -1
  326. package/dist/providers/types.js +0 -53
  327. package/dist/providers/types.js.map +0 -1
  328. package/dist/providers/types.test.d.ts +0 -7
  329. package/dist/providers/types.test.d.ts.map +0 -1
  330. package/dist/providers/types.test.js +0 -141
  331. package/dist/providers/types.test.js.map +0 -1
  332. package/dist/tools/cli/beads.d.ts +0 -27
  333. package/dist/tools/cli/beads.d.ts.map +0 -1
  334. package/dist/tools/cli/beads.js +0 -172
  335. package/dist/tools/cli/beads.js.map +0 -1
  336. package/dist/tools/cli/beads.test.d.ts +0 -8
  337. package/dist/tools/cli/beads.test.d.ts.map +0 -1
  338. package/dist/tools/cli/beads.test.js +0 -264
  339. package/dist/tools/cli/beads.test.js.map +0 -1
  340. package/dist/tools/cli/editFile.d.ts +0 -17
  341. package/dist/tools/cli/editFile.d.ts.map +0 -1
  342. package/dist/tools/cli/editFile.js +0 -125
  343. package/dist/tools/cli/editFile.js.map +0 -1
  344. package/dist/tools/cli/editFile.test.d.ts +0 -8
  345. package/dist/tools/cli/editFile.test.d.ts.map +0 -1
  346. package/dist/tools/cli/editFile.test.js +0 -177
  347. package/dist/tools/cli/editFile.test.js.map +0 -1
  348. package/dist/tools/cli/readFile.d.ts +0 -25
  349. package/dist/tools/cli/readFile.d.ts.map +0 -1
  350. package/dist/tools/cli/readFile.js +0 -118
  351. package/dist/tools/cli/readFile.js.map +0 -1
  352. package/dist/tools/cli/readFile.test.d.ts +0 -8
  353. package/dist/tools/cli/readFile.test.d.ts.map +0 -1
  354. package/dist/tools/cli/readFile.test.js +0 -194
  355. package/dist/tools/cli/readFile.test.js.map +0 -1
  356. package/dist/tools/cli/search.d.ts +0 -16
  357. package/dist/tools/cli/search.d.ts.map +0 -1
  358. package/dist/tools/cli/search.js +0 -261
  359. package/dist/tools/cli/search.js.map +0 -1
  360. package/dist/tools/cli/search.test.d.ts +0 -8
  361. package/dist/tools/cli/search.test.d.ts.map +0 -1
  362. package/dist/tools/cli/search.test.js +0 -172
  363. package/dist/tools/cli/search.test.js.map +0 -1
  364. package/dist/tools/cli/subagent.d.ts +0 -43
  365. package/dist/tools/cli/subagent.d.ts.map +0 -1
  366. package/dist/tools/cli/subagent.js +0 -99
  367. package/dist/tools/cli/subagent.js.map +0 -1
  368. package/dist/tools/cli/subagent.test.d.ts +0 -8
  369. package/dist/tools/cli/subagent.test.d.ts.map +0 -1
  370. package/dist/tools/cli/subagent.test.js +0 -190
  371. package/dist/tools/cli/subagent.test.js.map +0 -1
  372. package/dist/tools/cli/terminal.d.ts +0 -19
  373. package/dist/tools/cli/terminal.d.ts.map +0 -1
  374. package/dist/tools/cli/terminal.js +0 -164
  375. package/dist/tools/cli/terminal.js.map +0 -1
  376. package/dist/tools/cli/terminal.test.d.ts +0 -8
  377. package/dist/tools/cli/terminal.test.d.ts.map +0 -1
  378. package/dist/tools/cli/terminal.test.js +0 -161
  379. package/dist/tools/cli/terminal.test.js.map +0 -1
  380. package/dist/tools/index.d.ts +0 -25
  381. package/dist/tools/index.d.ts.map +0 -1
  382. package/dist/tools/index.js +0 -41
  383. package/dist/tools/index.js.map +0 -1
  384. package/dist/tools/interface.d.ts +0 -64
  385. package/dist/tools/interface.d.ts.map +0 -1
  386. package/dist/tools/interface.js +0 -37
  387. package/dist/tools/interface.js.map +0 -1
  388. package/dist/tools/interface.test.d.ts +0 -7
  389. package/dist/tools/interface.test.d.ts.map +0 -1
  390. package/dist/tools/interface.test.js +0 -179
  391. package/dist/tools/interface.test.js.map +0 -1
  392. package/dist/tools/mcp/bridge.d.ts +0 -48
  393. package/dist/tools/mcp/bridge.d.ts.map +0 -1
  394. package/dist/tools/mcp/bridge.js +0 -128
  395. package/dist/tools/mcp/bridge.js.map +0 -1
  396. package/dist/tools/mcp/bridge.test.d.ts +0 -8
  397. package/dist/tools/mcp/bridge.test.d.ts.map +0 -1
  398. package/dist/tools/mcp/bridge.test.js +0 -300
  399. package/dist/tools/mcp/bridge.test.js.map +0 -1
  400. package/dist/tools/mcp/client.d.ts +0 -135
  401. package/dist/tools/mcp/client.d.ts.map +0 -1
  402. package/dist/tools/mcp/client.js +0 -263
  403. package/dist/tools/mcp/client.js.map +0 -1
  404. package/dist/tools/mcp/client.test.d.ts +0 -8
  405. package/dist/tools/mcp/client.test.d.ts.map +0 -1
  406. package/dist/tools/mcp/client.test.js +0 -390
  407. package/dist/tools/mcp/client.test.js.map +0 -1
  408. package/dist/tools/registry.d.ts +0 -82
  409. package/dist/tools/registry.d.ts.map +0 -1
  410. package/dist/tools/registry.js +0 -99
  411. package/dist/tools/registry.js.map +0 -1
  412. package/dist/tools/registry.test.d.ts +0 -7
  413. package/dist/tools/registry.test.d.ts.map +0 -1
  414. package/dist/tools/registry.test.js +0 -199
  415. package/dist/tools/registry.test.js.map +0 -1
  416. package/dist/tools/suite.test.d.ts +0 -11
  417. package/dist/tools/suite.test.d.ts.map +0 -1
  418. package/dist/tools/suite.test.js +0 -119
  419. package/dist/tools/suite.test.js.map +0 -1
  420. package/dist/tools/types.d.ts +0 -75
  421. package/dist/tools/types.d.ts.map +0 -1
  422. package/dist/tools/types.js +0 -30
  423. package/dist/tools/types.js.map +0 -1
  424. package/dist/tools/types.test.d.ts +0 -7
  425. package/dist/tools/types.test.d.ts.map +0 -1
  426. package/dist/tools/types.test.js +0 -178
  427. package/dist/tools/types.test.js.map +0 -1
  428. package/templates/.vscode/mcp.json +0 -20
  429. package/templates/CLAUDE.md +0 -129
@@ -0,0 +1,585 @@
1
+ /**
2
+ * E2E tests for beads (bd) CLI commands that Beth depends on.
3
+ *
4
+ * Tests the full lifecycle of bd commands: create, show, list, update,
5
+ * close, ready, dep, children, and epic workflows.
6
+ *
7
+ * These tests run against the REAL beads database. All test issues are
8
+ * cleaned up in afterAll via batch deletion. A beforeAll safety net also
9
+ * removes stale "E2E test:" issues from previous failed runs to prevent
10
+ * pollution of `bd list` and `bd ready` output.
11
+ *
12
+ * Run with: npx tsx --test src/cli/commands/beads.e2e.test.ts
13
+ */
14
+ import { describe, it } from 'node:test';
15
+ import { beforeAll, afterAll } from 'vitest';
16
+ import assert from 'node:assert';
17
+ import { execSync } from 'child_process';
18
+ import { writeFileSync, unlinkSync } from 'fs';
19
+ import { join } from 'path';
20
+ const PROJECT_ROOT = process.cwd();
21
+ /** Track all issue IDs created during tests for cleanup */
22
+ const createdIssueIds = [];
23
+ /**
24
+ * Find and delete stale E2E test issues from previous failed runs.
25
+ * This is the safety net — if afterAll didn't run (crash, timeout, kill),
26
+ * these orphans get cleaned up on the next run.
27
+ */
28
+ function cleanupStaleTestIssues() {
29
+ try {
30
+ const output = execSync('bd list -n 500 --json --sandbox', {
31
+ cwd: PROJECT_ROOT,
32
+ encoding: 'utf-8',
33
+ stdio: ['pipe', 'pipe', 'pipe'],
34
+ timeout: 15000,
35
+ });
36
+ const issues = JSON.parse(output);
37
+ const staleIds = issues
38
+ .filter((i) => i.title.startsWith('E2E test:'))
39
+ .map((i) => i.id);
40
+ if (staleIds.length > 0) {
41
+ // Batch delete via --from-file for speed
42
+ const tmpFile = join(PROJECT_ROOT, '.beads-e2e-cleanup.tmp');
43
+ writeFileSync(tmpFile, staleIds.join('\n'));
44
+ try {
45
+ execSync(`bd delete --from-file "${tmpFile}" --force --sandbox`, {
46
+ cwd: PROJECT_ROOT,
47
+ encoding: 'utf-8',
48
+ stdio: ['pipe', 'pipe', 'pipe'],
49
+ timeout: 30000,
50
+ });
51
+ }
52
+ catch {
53
+ // Best effort — some may already be deleted
54
+ }
55
+ try {
56
+ unlinkSync(tmpFile);
57
+ }
58
+ catch { /* ignore */ }
59
+ }
60
+ }
61
+ catch {
62
+ // If bd list fails, skip cleanup — tests will still create fresh issues
63
+ }
64
+ }
65
+ /**
66
+ * Batch-delete all tracked test issues. Uses --from-file for efficiency.
67
+ */
68
+ function batchDeleteTestIssues(ids) {
69
+ if (ids.length === 0)
70
+ return;
71
+ // Close all first (reverse order for children-before-parents)
72
+ for (const id of [...ids].reverse()) {
73
+ try {
74
+ execSync(`bd close ${id} --force --reason "test cleanup" --sandbox`, {
75
+ cwd: PROJECT_ROOT,
76
+ encoding: 'utf-8',
77
+ stdio: ['pipe', 'pipe', 'pipe'],
78
+ timeout: 10000,
79
+ });
80
+ }
81
+ catch { /* already closed or doesn't exist */ }
82
+ }
83
+ // Then batch delete via temp file
84
+ const tmpFile = join(PROJECT_ROOT, '.beads-e2e-cleanup.tmp');
85
+ writeFileSync(tmpFile, [...ids].reverse().join('\n'));
86
+ try {
87
+ execSync(`bd delete --from-file "${tmpFile}" --force --sandbox`, {
88
+ cwd: PROJECT_ROOT,
89
+ encoding: 'utf-8',
90
+ stdio: ['pipe', 'pipe', 'pipe'],
91
+ timeout: 30000,
92
+ });
93
+ }
94
+ catch { /* best effort */ }
95
+ try {
96
+ unlinkSync(tmpFile);
97
+ }
98
+ catch { /* ignore */ }
99
+ }
100
+ /**
101
+ * Run a bd command and return stdout. Uses --sandbox to prevent auto-sync.
102
+ * Throws on non-zero exit unless expectFailure is true.
103
+ */
104
+ function bd(args, opts) {
105
+ const cmd = `bd ${args} --sandbox`;
106
+ try {
107
+ return execSync(cmd, {
108
+ cwd: PROJECT_ROOT,
109
+ encoding: 'utf-8',
110
+ stdio: ['pipe', 'pipe', 'pipe'],
111
+ env: { ...process.env, NO_COLOR: '1' },
112
+ timeout: 15000,
113
+ }).trim();
114
+ }
115
+ catch (error) {
116
+ if (opts?.expectFailure) {
117
+ const execError = error;
118
+ return (execError.stdout || '') + (execError.stderr || '');
119
+ }
120
+ throw error;
121
+ }
122
+ }
123
+ /**
124
+ * Run a bd command with --json and parse the result.
125
+ */
126
+ function bdJson(args) {
127
+ const output = bd(`${args} --json`);
128
+ return JSON.parse(output);
129
+ }
130
+ /**
131
+ * Create a test issue and track it for cleanup.
132
+ * Returns the issue ID extracted from bd create output.
133
+ */
134
+ function createTestIssue(args) {
135
+ const output = bd(`create ${args}`);
136
+ const match = output.match(/Created issue:\s+([\w.-]+)/);
137
+ assert.ok(match, `Expected issue ID in create output: ${output}`);
138
+ const id = match[1];
139
+ createdIssueIds.push(id);
140
+ return id;
141
+ }
142
+ // ============================================================================
143
+ // Preflight: verify bd is available
144
+ // ============================================================================
145
+ describe('beads CLI E2E tests', () => {
146
+ beforeAll(() => {
147
+ try {
148
+ const version = execSync('bd --version', { encoding: 'utf-8', timeout: 5000 });
149
+ assert.ok(version.includes('version'), 'bd CLI must be installed');
150
+ }
151
+ catch {
152
+ throw new Error('bd CLI is not installed. These tests require beads. Run: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
153
+ }
154
+ // Clean up stale test issues from previous failed runs
155
+ cleanupStaleTestIssues();
156
+ });
157
+ afterAll(() => {
158
+ batchDeleteTestIssues(createdIssueIds);
159
+ });
160
+ // ==========================================================================
161
+ // bd create
162
+ // ==========================================================================
163
+ describe('bd create', () => {
164
+ it('creates a basic task with title', () => {
165
+ const id = createTestIssue('"E2E test: basic task"');
166
+ assert.ok(id.startsWith('beth-'), `Issue ID should start with project prefix: ${id}`);
167
+ });
168
+ it('creates with priority flag', () => {
169
+ const id = createTestIssue('"E2E test: priority task" -p 0');
170
+ const issues = bdJson(`show ${id}`);
171
+ assert.strictEqual(issues[0].priority, 0, 'Priority should be 0 (critical)');
172
+ });
173
+ it('creates with description', () => {
174
+ const id = createTestIssue('"E2E test: described task" -d "This is a test description"');
175
+ const issues = bdJson(`show ${id}`);
176
+ assert.ok(issues[0].description.includes('test description'), 'Description should be set');
177
+ });
178
+ it('creates with type flag', () => {
179
+ const id = createTestIssue('"E2E test: bug type" --type bug');
180
+ const issues = bdJson(`show ${id}`);
181
+ assert.strictEqual(issues[0].issue_type, 'bug', 'Type should be bug');
182
+ });
183
+ it('creates an epic', () => {
184
+ const id = createTestIssue('"E2E test: epic" --type epic -p 1');
185
+ const issues = bdJson(`show ${id}`);
186
+ assert.strictEqual(issues[0].issue_type, 'epic', 'Type should be epic');
187
+ assert.strictEqual(issues[0].priority, 1, 'Priority should be P1');
188
+ });
189
+ it('creates a child task with --parent', () => {
190
+ const epicId = createTestIssue('"E2E test: parent epic" --type epic');
191
+ const childId = createTestIssue(`"E2E test: child task" --parent ${epicId}`);
192
+ assert.ok(childId.includes('.'), `Child ID should be hierarchical (contain dot): ${childId}`);
193
+ });
194
+ it('creates with labels', () => {
195
+ const id = createTestIssue('"E2E test: labeled task" -l test-label,e2e');
196
+ const issues = bdJson(`show ${id}`);
197
+ const labels = issues[0].labels || [];
198
+ assert.ok(labels.includes('test-label'), 'Should have test-label');
199
+ assert.ok(labels.includes('e2e'), 'Should have e2e label');
200
+ });
201
+ it('creates with dependency', () => {
202
+ const blockerId = createTestIssue('"E2E test: blocker"');
203
+ const blockedId = createTestIssue(`"E2E test: blocked" --deps "${blockerId}"`);
204
+ const issues = bdJson(`show ${blockedId}`);
205
+ const deps = issues[0].dependencies || [];
206
+ const hasBlocker = deps.some(d => d.id === blockerId);
207
+ assert.ok(hasBlocker, `Should depend on ${blockerId}`);
208
+ });
209
+ });
210
+ // ==========================================================================
211
+ // bd show
212
+ // ==========================================================================
213
+ describe('bd show', () => {
214
+ it('shows issue details in JSON', () => {
215
+ const id = createTestIssue('"E2E test: show me" -d "Show test description"');
216
+ const issues = bdJson(`show ${id}`);
217
+ assert.strictEqual(issues.length, 1, 'Should return exactly one issue');
218
+ assert.strictEqual(issues[0].id, id);
219
+ assert.strictEqual(issues[0].title, 'E2E test: show me');
220
+ assert.strictEqual(issues[0].status, 'open');
221
+ assert.ok(issues[0].description.includes('Show test description'));
222
+ });
223
+ it('shows children with --children flag', () => {
224
+ const epicId = createTestIssue('"E2E test: parent for show" --type epic');
225
+ const child1 = createTestIssue(`"E2E test: child 1" --parent ${epicId}`);
226
+ const child2 = createTestIssue(`"E2E test: child 2" --parent ${epicId}`);
227
+ // bd children returns a JSON array; show --children returns { id: [...] }
228
+ const children = bdJson(`children ${epicId}`);
229
+ const childIds = children.map(c => c.id);
230
+ assert.ok(childIds.includes(child1), `Should include ${child1}`);
231
+ assert.ok(childIds.includes(child2), `Should include ${child2}`);
232
+ });
233
+ it('shows multiple issues at once', () => {
234
+ const id1 = createTestIssue('"E2E test: multi-show 1"');
235
+ const id2 = createTestIssue('"E2E test: multi-show 2"');
236
+ const issues = bdJson(`show ${id1} ${id2}`);
237
+ assert.strictEqual(issues.length, 2, 'Should return two issues');
238
+ });
239
+ });
240
+ // ==========================================================================
241
+ // bd list
242
+ // ==========================================================================
243
+ describe('bd list', () => {
244
+ it('lists open issues as JSON array', () => {
245
+ const issues = bdJson('list');
246
+ assert.ok(Array.isArray(issues), 'Should return an array');
247
+ // All listed issues should be open (default filter)
248
+ for (const issue of issues) {
249
+ assert.strictEqual(issue.status, 'open', `Listed issue ${issue.id} should be open`);
250
+ }
251
+ });
252
+ it('respects --limit flag', () => {
253
+ const issues = bdJson('list --limit 2');
254
+ assert.ok(issues.length <= 2, `Should return at most 2 issues, got ${issues.length}`);
255
+ });
256
+ it('filters by type', () => {
257
+ createTestIssue('"E2E test: list-by-type epic" --type epic');
258
+ const issues = bdJson('list --type epic');
259
+ for (const issue of issues) {
260
+ assert.strictEqual(issue.issue_type, 'epic', `All listed should be epics`);
261
+ }
262
+ });
263
+ it('filters by priority', () => {
264
+ createTestIssue('"E2E test: list-by-priority" -p 0');
265
+ const issues = bdJson('list --priority 0');
266
+ for (const issue of issues) {
267
+ assert.strictEqual(issue.priority, 0, `All listed should be P0`);
268
+ }
269
+ });
270
+ it('shows all including closed with --all', () => {
271
+ const id = createTestIssue('"E2E test: will close for list"');
272
+ bd(`close ${id} --reason "testing list --all"`);
273
+ const allIssues = bdJson('list --all --limit 50');
274
+ const closedOnes = allIssues.filter(i => i.status === 'closed');
275
+ assert.ok(closedOnes.length > 0, 'Should include closed issues');
276
+ });
277
+ });
278
+ // ==========================================================================
279
+ // bd update
280
+ // ==========================================================================
281
+ describe('bd update', () => {
282
+ it('updates title', () => {
283
+ const id = createTestIssue('"E2E test: original title"');
284
+ bd(`update ${id} --title "E2E test: updated title"`);
285
+ const issues = bdJson(`show ${id}`);
286
+ assert.strictEqual(issues[0].title, 'E2E test: updated title');
287
+ });
288
+ it('updates priority', () => {
289
+ const id = createTestIssue('"E2E test: update priority" -p 3');
290
+ bd(`update ${id} -p 0`);
291
+ const issues = bdJson(`show ${id}`);
292
+ assert.strictEqual(issues[0].priority, 0);
293
+ });
294
+ it('updates status', () => {
295
+ const id = createTestIssue('"E2E test: update status"');
296
+ bd(`update ${id} -s in_progress`);
297
+ const issues = bdJson(`show ${id}`);
298
+ assert.strictEqual(issues[0].status, 'in_progress');
299
+ });
300
+ it('claims an issue atomically', () => {
301
+ const id = createTestIssue('"E2E test: claimable"');
302
+ bd(`update ${id} --claim`);
303
+ const issues = bdJson(`show ${id}`);
304
+ assert.strictEqual(issues[0].status, 'in_progress', 'Claimed issue should be in_progress');
305
+ assert.ok(issues[0].owner, 'Claimed issue should have an owner');
306
+ });
307
+ it('adds and removes labels', () => {
308
+ const id = createTestIssue('"E2E test: label management"');
309
+ bd(`update ${id} --add-label foo,bar`);
310
+ let issues = bdJson(`show ${id}`);
311
+ assert.ok((issues[0].labels || []).includes('foo'), 'Should have foo label');
312
+ bd(`update ${id} --remove-label foo`);
313
+ issues = bdJson(`show ${id}`);
314
+ assert.ok(!(issues[0].labels || []).includes('foo'), 'foo label should be removed');
315
+ assert.ok((issues[0].labels || []).includes('bar'), 'bar label should remain');
316
+ });
317
+ it('updates description', () => {
318
+ const id = createTestIssue('"E2E test: update desc"');
319
+ bd(`update ${id} -d "New description content"`);
320
+ const issues = bdJson(`show ${id}`);
321
+ assert.ok(issues[0].description.includes('New description content'));
322
+ });
323
+ });
324
+ // ==========================================================================
325
+ // bd close
326
+ // ==========================================================================
327
+ describe('bd close', () => {
328
+ it('closes an issue', () => {
329
+ const id = createTestIssue('"E2E test: close me"');
330
+ bd(`close ${id}`);
331
+ const issues = bdJson(`show ${id}`);
332
+ assert.strictEqual(issues[0].status, 'closed');
333
+ });
334
+ it('closes with a reason', () => {
335
+ const id = createTestIssue('"E2E test: close with reason"');
336
+ bd(`close ${id} --reason "Work completed successfully"`);
337
+ const issues = bdJson(`show ${id}`);
338
+ assert.strictEqual(issues[0].status, 'closed');
339
+ });
340
+ it('closed issues disappear from default list', () => {
341
+ const id = createTestIssue('"E2E test: vanish from list"');
342
+ bd(`close ${id}`);
343
+ const openIssues = bdJson('list');
344
+ const found = openIssues.find(i => i.id === id);
345
+ assert.strictEqual(found, undefined, 'Closed issue should not appear in default list');
346
+ });
347
+ });
348
+ // ==========================================================================
349
+ // bd ready
350
+ // ==========================================================================
351
+ describe('bd ready', () => {
352
+ it('returns only unblocked open issues', () => {
353
+ const issues = bdJson('ready');
354
+ assert.ok(Array.isArray(issues), 'Should return an array');
355
+ for (const issue of issues) {
356
+ assert.strictEqual(issue.status, 'open', `Ready issue ${issue.id} should be open`);
357
+ }
358
+ });
359
+ it('excludes blocked issues', () => {
360
+ const blockerId = createTestIssue('"E2E test: ready-blocker"');
361
+ const blockedId = createTestIssue(`"E2E test: ready-blocked" --deps "${blockerId}"`);
362
+ const readyIssues = bdJson('ready --limit 500');
363
+ const readyIds = readyIssues.map(i => i.id);
364
+ assert.ok(!readyIds.includes(blockedId), `Blocked issue ${blockedId} should not be ready`);
365
+ assert.ok(readyIds.includes(blockerId), `Blocker ${blockerId} should be ready`);
366
+ });
367
+ it('unblocks issues after closing blocker', () => {
368
+ const blockerId = createTestIssue('"E2E test: unblock-blocker"');
369
+ const blockedId = createTestIssue(`"E2E test: unblock-blocked" --deps "${blockerId}"`);
370
+ // Before: blocked issue NOT ready
371
+ let readyIssues = bdJson('ready --limit 500');
372
+ assert.ok(!readyIssues.map(i => i.id).includes(blockedId), 'Should be blocked initially');
373
+ // Close the blocker
374
+ bd(`close ${blockerId}`);
375
+ // After: previously blocked issue IS now ready
376
+ readyIssues = bdJson('ready --limit 500');
377
+ assert.ok(readyIssues.map(i => i.id).includes(blockedId), 'Should become ready after blocker closes');
378
+ });
379
+ it('excludes in_progress issues', () => {
380
+ const id = createTestIssue('"E2E test: ready-in-progress"');
381
+ bd(`update ${id} --claim`);
382
+ const readyIssues = bdJson('ready --limit 500');
383
+ const readyIds = readyIssues.map(i => i.id);
384
+ assert.ok(!readyIds.includes(id), 'In-progress issue should not appear in ready');
385
+ });
386
+ });
387
+ // ==========================================================================
388
+ // bd dep (dependencies)
389
+ // ==========================================================================
390
+ describe('bd dep', () => {
391
+ it('adds a blocking dependency', () => {
392
+ const blockerId = createTestIssue('"E2E test: dep-blocker"');
393
+ const blockedId = createTestIssue('"E2E test: dep-blocked"');
394
+ bd(`dep ${blockerId} --blocks ${blockedId}`);
395
+ const issues = bdJson(`show ${blockedId}`);
396
+ const deps = issues[0].dependencies || [];
397
+ const hasBlocker = deps.some(d => d.id === blockerId);
398
+ assert.ok(hasBlocker, `${blockedId} should depend on ${blockerId}`);
399
+ });
400
+ it('shows dependency tree', () => {
401
+ const epicId = createTestIssue('"E2E test: dep-tree epic" --type epic');
402
+ const task1 = createTestIssue(`"E2E test: dep-tree t1" --parent ${epicId}`);
403
+ const task2 = createTestIssue(`"E2E test: dep-tree t2" --parent ${epicId} --deps "${task1}"`);
404
+ // dep tree for task2 shows task2 and its blocker task1
405
+ const tree = bd(`dep tree ${task2}`);
406
+ assert.ok(tree.includes(task2), 'Tree should include task 2');
407
+ assert.ok(tree.includes(task1) || tree.includes('dep-tree t1'), 'Tree should include blocker task 1');
408
+ });
409
+ it('detects dependency cycles', () => {
410
+ // bd dep cycles returns output about any cycles in the entire database
411
+ // This just verifies the command runs without crashing
412
+ const output = bd('dep cycles');
413
+ assert.ok(typeof output === 'string', 'dep cycles should return output');
414
+ });
415
+ it('removes a dependency', () => {
416
+ const blockerId = createTestIssue('"E2E test: dep-remove-blocker"');
417
+ const blockedId = createTestIssue(`"E2E test: dep-remove-blocked" --deps "${blockerId}"`);
418
+ // Verify dep exists
419
+ let issues = bdJson(`show ${blockedId}`);
420
+ assert.ok((issues[0].dependencies || []).some(d => d.id === blockerId), 'Dep should exist');
421
+ // Remove it
422
+ bd(`dep remove ${blockedId} ${blockerId}`);
423
+ // Verify dep is gone
424
+ issues = bdJson(`show ${blockedId}`);
425
+ const remaining = (issues[0].dependencies || []).filter(d => d.id === blockerId);
426
+ assert.strictEqual(remaining.length, 0, 'Dependency should be removed');
427
+ });
428
+ });
429
+ // ==========================================================================
430
+ // bd children
431
+ // ==========================================================================
432
+ describe('bd children', () => {
433
+ it('lists children of an epic', () => {
434
+ const epicId = createTestIssue('"E2E test: children-epic" --type epic');
435
+ const child1 = createTestIssue(`"E2E test: children-c1" --parent ${epicId}`);
436
+ const child2 = createTestIssue(`"E2E test: children-c2" --parent ${epicId}`);
437
+ const children = bdJson(`children ${epicId}`);
438
+ const childIds = children.map(c => c.id);
439
+ assert.ok(childIds.includes(child1), `Should include ${child1}`);
440
+ assert.ok(childIds.includes(child2), `Should include ${child2}`);
441
+ });
442
+ it('returns empty array for issue with no children', () => {
443
+ const id = createTestIssue('"E2E test: no-children"');
444
+ const children = bdJson(`children ${id}`);
445
+ assert.strictEqual(children.length, 0, 'Should have no children');
446
+ });
447
+ });
448
+ // ==========================================================================
449
+ // Epic lifecycle (full workflow)
450
+ // ==========================================================================
451
+ describe('epic lifecycle', () => {
452
+ it('runs the full Beth orchestration workflow', { timeout: 120000 }, () => {
453
+ // 1. Create an epic
454
+ const epicId = createTestIssue('"E2E test: lifecycle epic" --type epic -p 1');
455
+ // 2. Create subtasks with dependencies (sequential chain)
456
+ const task1 = createTestIssue(`"E2E test: lifecycle requirements" --parent ${epicId}`);
457
+ const task2 = createTestIssue(`"E2E test: lifecycle design" --parent ${epicId} --deps "${task1}"`);
458
+ const task3 = createTestIssue(`"E2E test: lifecycle implement" --parent ${epicId} --deps "${task2}"`);
459
+ // 3. Verify dependency chain — only task1 should be ready
460
+ let ready = bdJson('ready --limit 500');
461
+ let readyIds = ready.map(r => r.id);
462
+ assert.ok(readyIds.includes(task1), 'Task 1 should be ready (no blockers)');
463
+ assert.ok(!readyIds.includes(task2), 'Task 2 should be blocked by task 1');
464
+ assert.ok(!readyIds.includes(task3), 'Task 3 should be blocked by task 2');
465
+ // 4. Close task1 → task2 becomes ready
466
+ bd(`close ${task1} --reason "Requirements done"`);
467
+ ready = bdJson('ready --limit 500');
468
+ readyIds = ready.map(r => r.id);
469
+ assert.ok(readyIds.includes(task2), 'Task 2 should be ready after task 1 closed');
470
+ assert.ok(!readyIds.includes(task3), 'Task 3 should still be blocked');
471
+ // 5. Close task2 → task3 becomes ready
472
+ bd(`close ${task2} --reason "Design done"`);
473
+ ready = bdJson('ready --limit 500');
474
+ readyIds = ready.map(r => r.id);
475
+ assert.ok(readyIds.includes(task3), 'Task 3 should be ready after task 2 closed');
476
+ // 6. Close task3 → all children done
477
+ bd(`close ${task3} --reason "Implementation done"`);
478
+ // 7. Verify all children are closed
479
+ const children = bdJson(`children ${epicId}`);
480
+ for (const child of children) {
481
+ assert.strictEqual(child.status, 'closed', `Child ${child.id} should be closed`);
482
+ }
483
+ // 8. Close the epic
484
+ bd(`close ${epicId} --reason "All work complete"`);
485
+ const epicData = bdJson(`show ${epicId}`);
486
+ assert.strictEqual(epicData[0].status, 'closed', 'Epic should be closed');
487
+ });
488
+ it('supports parallel subtask pattern', () => {
489
+ // Create epic with tasks that can run in parallel
490
+ const epicId = createTestIssue('"E2E test: parallel epic" --type epic');
491
+ const implTask = createTestIssue(`"E2E test: parallel impl" --parent ${epicId}`);
492
+ // Security and test tasks depend on impl but NOT on each other
493
+ const secTask = createTestIssue(`"E2E test: parallel security" --parent ${epicId} --deps "${implTask}"`);
494
+ const testTask = createTestIssue(`"E2E test: parallel testing" --parent ${epicId} --deps "${implTask}"`);
495
+ // Only impl should be ready
496
+ let ready = bdJson('ready --limit 500');
497
+ let readyIds = ready.map(r => r.id);
498
+ assert.ok(readyIds.includes(implTask), 'Impl should be ready');
499
+ assert.ok(!readyIds.includes(secTask), 'Security should be blocked');
500
+ assert.ok(!readyIds.includes(testTask), 'Testing should be blocked');
501
+ // Close impl → BOTH security and testing become ready (parallel)
502
+ bd(`close ${implTask}`);
503
+ ready = bdJson('ready --limit 500');
504
+ readyIds = ready.map(r => r.id);
505
+ assert.ok(readyIds.includes(secTask), 'Security should be ready after impl closes');
506
+ assert.ok(readyIds.includes(testTask), 'Testing should be ready after impl closes (parallel)');
507
+ });
508
+ });
509
+ // ==========================================================================
510
+ // Error handling
511
+ // ==========================================================================
512
+ describe('error handling', () => {
513
+ it('fails gracefully on invalid issue ID', () => {
514
+ const output = bd('show nonexistent-999', { expectFailure: true });
515
+ assert.ok(output.length > 0, 'Should produce error output');
516
+ });
517
+ it('bd close on already-closed issue fails or is idempotent', () => {
518
+ const id = createTestIssue('"E2E test: double close"');
519
+ bd(`close ${id}`);
520
+ // Second close should either fail gracefully or be idempotent
521
+ const output = bd(`close ${id}`, { expectFailure: true });
522
+ assert.ok(typeof output === 'string', 'Should handle double-close');
523
+ });
524
+ it('bd create requires a title', () => {
525
+ const output = bd('create', { expectFailure: true });
526
+ assert.ok(output.length > 0, 'Should produce error when no title given');
527
+ });
528
+ });
529
+ // ==========================================================================
530
+ // bd reopen
531
+ // ==========================================================================
532
+ describe('bd reopen', () => {
533
+ it('reopens a closed issue', () => {
534
+ const id = createTestIssue('"E2E test: reopen me"');
535
+ bd(`close ${id}`);
536
+ let issues = bdJson(`show ${id}`);
537
+ assert.strictEqual(issues[0].status, 'closed');
538
+ bd(`reopen ${id}`);
539
+ issues = bdJson(`show ${id}`);
540
+ assert.strictEqual(issues[0].status, 'open', 'Reopened issue should be open');
541
+ });
542
+ });
543
+ // ==========================================================================
544
+ // bd blocked
545
+ // ==========================================================================
546
+ describe('bd blocked', () => {
547
+ it('shows blocked issues', () => {
548
+ const blockerId = createTestIssue('"E2E test: blocked-view-blocker"');
549
+ const blockedId = createTestIssue(`"E2E test: blocked-view-target" --deps "${blockerId}"`);
550
+ const output = bd('blocked');
551
+ assert.ok(output.includes(blockedId) || output.includes('blocked-view-target'), 'Blocked command should show the blocked issue');
552
+ });
553
+ });
554
+ // ==========================================================================
555
+ // bd search
556
+ // ==========================================================================
557
+ describe('bd search', () => {
558
+ it('finds issues by text query', () => {
559
+ const uniqueMarker = `e2e-search-${Date.now()}`;
560
+ createTestIssue(`"E2E test: ${uniqueMarker}"`);
561
+ const output = bd(`search "${uniqueMarker}"`);
562
+ assert.ok(output.includes(uniqueMarker), 'Search should find the issue by title text');
563
+ });
564
+ });
565
+ // ==========================================================================
566
+ // bd count
567
+ // ==========================================================================
568
+ describe('bd count', () => {
569
+ it('counts open issues', () => {
570
+ const output = bd('count');
571
+ // count outputs a number (possibly with label text)
572
+ assert.ok(/\d+/.test(output), 'Count should include a number');
573
+ });
574
+ });
575
+ // ==========================================================================
576
+ // bd status (database overview)
577
+ // ==========================================================================
578
+ describe('bd status', () => {
579
+ it('shows database overview', () => {
580
+ const output = bd('status');
581
+ assert.ok(output.length > 0, 'Status should produce output');
582
+ });
583
+ });
584
+ });
585
+ //# sourceMappingURL=beads.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads.e2e.test.js","sourceRoot":"","sources":["../../../src/cli/commands/beads.e2e.test.ts"],"names":[],"mappings":"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"}