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
@@ -1,190 +0,0 @@
1
- /**
2
- * Subagent Tool Tests
3
- *
4
- * Tests for the subagent tool (Phase 3 stub).
5
- * Uses node:test and node:assert.
6
- */
7
- import { describe, it } from 'node:test';
8
- import assert from 'node:assert';
9
- import { subagentTool, isSubagentRequest } from './subagent.js';
10
- import { ToolError } from '../types.js';
11
- /** Create a ToolContext with sensible defaults */
12
- function createContext(overrides) {
13
- return {
14
- workingDir: '/tmp/test',
15
- permissions: overrides?.permissions ?? {
16
- allowFileRead: false,
17
- allowFileWrite: false,
18
- allowTerminal: false,
19
- allowNetwork: true,
20
- },
21
- signal: overrides?.signal,
22
- };
23
- }
24
- describe('subagent tool', () => {
25
- describe('metadata', () => {
26
- it('should have name "subagent"', () => {
27
- assert.strictEqual(subagentTool.name, 'subagent');
28
- });
29
- it('should have a description', () => {
30
- assert.ok(subagentTool.description.length > 0);
31
- });
32
- it('should have an inputSchema with agentName and prompt required', () => {
33
- assert.strictEqual(subagentTool.inputSchema.type, 'object');
34
- assert.ok(Array.isArray(subagentTool.inputSchema.required));
35
- const required = subagentTool.inputSchema.required;
36
- assert.ok(required.includes('agentName'));
37
- assert.ok(required.includes('prompt'));
38
- });
39
- });
40
- describe('successful invocation', () => {
41
- it('should return pending result with correct metadata', async () => {
42
- const result = await subagentTool.execute({ agentName: 'developer', prompt: 'Implement login page', description: 'Login UI' }, createContext());
43
- assert.strictEqual(result.success, true);
44
- assert.strictEqual(result.metadata?.agentName, 'developer');
45
- assert.strictEqual(result.metadata?.prompt, 'Implement login page');
46
- assert.strictEqual(result.metadata?.description, 'Login UI');
47
- assert.strictEqual(result.metadata?.status, 'pending');
48
- });
49
- it('should handle missing description', async () => {
50
- const result = await subagentTool.execute({ agentName: 'tester', prompt: 'Write tests for auth' }, createContext());
51
- assert.strictEqual(result.success, true);
52
- assert.strictEqual(result.metadata?.agentName, 'tester');
53
- assert.strictEqual(result.metadata?.description, undefined);
54
- assert.strictEqual(result.metadata?.status, 'pending');
55
- });
56
- it('should trim agentName and prompt', async () => {
57
- const result = await subagentTool.execute({ agentName: ' developer ', prompt: ' Build it ' }, createContext());
58
- assert.strictEqual(result.metadata?.agentName, 'developer');
59
- assert.strictEqual(result.metadata?.prompt, 'Build it');
60
- });
61
- it('should include agentName in output message', async () => {
62
- const result = await subagentTool.execute({ agentName: 'developer', prompt: 'Do stuff' }, createContext());
63
- assert.ok(result.output.includes('developer'));
64
- });
65
- });
66
- describe('input validation', () => {
67
- it('should reject empty agentName', async () => {
68
- await assert.rejects(() => subagentTool.execute({ agentName: '', prompt: 'Do stuff' }, createContext()), (err) => {
69
- assert.ok(err instanceof ToolError);
70
- assert.strictEqual(err.code, 'INVALID_INPUT');
71
- assert.ok(err.message.includes('agentName'));
72
- return true;
73
- });
74
- });
75
- it('should reject whitespace-only agentName', async () => {
76
- await assert.rejects(() => subagentTool.execute({ agentName: ' ', prompt: 'Do stuff' }, createContext()), (err) => {
77
- assert.ok(err instanceof ToolError);
78
- assert.strictEqual(err.code, 'INVALID_INPUT');
79
- return true;
80
- });
81
- });
82
- it('should reject non-string agentName', async () => {
83
- await assert.rejects(() => subagentTool.execute({ agentName: 42, prompt: 'Do stuff' }, createContext()), (err) => {
84
- assert.ok(err instanceof ToolError);
85
- assert.strictEqual(err.code, 'INVALID_INPUT');
86
- return true;
87
- });
88
- });
89
- it('should reject empty prompt', async () => {
90
- await assert.rejects(() => subagentTool.execute({ agentName: 'developer', prompt: '' }, createContext()), (err) => {
91
- assert.ok(err instanceof ToolError);
92
- assert.strictEqual(err.code, 'INVALID_INPUT');
93
- assert.ok(err.message.includes('prompt'));
94
- return true;
95
- });
96
- });
97
- it('should reject non-string prompt', async () => {
98
- await assert.rejects(() => subagentTool.execute({ agentName: 'developer', prompt: 123 }, createContext()), (err) => {
99
- assert.ok(err instanceof ToolError);
100
- assert.strictEqual(err.code, 'INVALID_INPUT');
101
- return true;
102
- });
103
- });
104
- });
105
- describe('permissions', () => {
106
- it('should throw PERMISSION_DENIED when allowNetwork is false', async () => {
107
- const ctx = createContext({
108
- permissions: {
109
- allowFileRead: false,
110
- allowFileWrite: false,
111
- allowTerminal: false,
112
- allowNetwork: false,
113
- },
114
- });
115
- await assert.rejects(() => subagentTool.execute({ agentName: 'developer', prompt: 'Do stuff' }, ctx), (err) => {
116
- assert.ok(err instanceof ToolError);
117
- assert.strictEqual(err.code, 'PERMISSION_DENIED');
118
- return true;
119
- });
120
- });
121
- });
122
- });
123
- describe('isSubagentRequest', () => {
124
- it('should return true for valid pending subagent result', () => {
125
- const result = {
126
- success: true,
127
- output: 'queued',
128
- metadata: {
129
- agentName: 'developer',
130
- prompt: 'Build it',
131
- status: 'pending',
132
- },
133
- };
134
- assert.strictEqual(isSubagentRequest(result), true);
135
- });
136
- it('should return false when success is false', () => {
137
- const result = {
138
- success: false,
139
- output: 'failed',
140
- metadata: {
141
- agentName: 'developer',
142
- prompt: 'Build it',
143
- status: 'pending',
144
- },
145
- };
146
- assert.strictEqual(isSubagentRequest(result), false);
147
- });
148
- it('should return false when metadata is missing', () => {
149
- const result = {
150
- success: true,
151
- output: 'ok',
152
- };
153
- assert.strictEqual(isSubagentRequest(result), false);
154
- });
155
- it('should return false when status is not pending', () => {
156
- const result = {
157
- success: true,
158
- output: 'ok',
159
- metadata: {
160
- agentName: 'developer',
161
- prompt: 'Build it',
162
- status: 'completed',
163
- },
164
- };
165
- assert.strictEqual(isSubagentRequest(result), false);
166
- });
167
- it('should return false when agentName is missing', () => {
168
- const result = {
169
- success: true,
170
- output: 'ok',
171
- metadata: {
172
- prompt: 'Build it',
173
- status: 'pending',
174
- },
175
- };
176
- assert.strictEqual(isSubagentRequest(result), false);
177
- });
178
- it('should return false when prompt is missing', () => {
179
- const result = {
180
- success: true,
181
- output: 'ok',
182
- metadata: {
183
- agentName: 'developer',
184
- status: 'pending',
185
- },
186
- };
187
- assert.strictEqual(isSubagentRequest(result), false);
188
- });
189
- });
190
- //# sourceMappingURL=subagent.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subagent.test.js","sourceRoot":"","sources":["../../../src/tools/cli/subagent.test.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Terminal Tool
3
- *
4
- * Executes shell commands in a controlled environment.
5
- * Uses execFile with /bin/sh to maintain a single controlled shell entry point.
6
- * Validates working directory and enforces timeouts and output limits.
7
- */
8
- import type { Tool } from '../interface.js';
9
- /**
10
- * Terminal tool implementation.
11
- *
12
- * Executes shell commands using execFile with /bin/sh for a controlled
13
- * shell entry point. Captures stdout/stderr, enforces timeouts, and
14
- * truncates large output.
15
- *
16
- * SECURITY: Uses execFile('/bin/sh', ['-c', command]) — never exec with shell:true.
17
- */
18
- export declare const terminalTool: Tool;
19
- //# sourceMappingURL=terminal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/tools/cli/terminal.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAoE5C;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,IAsH1B,CAAC"}
@@ -1,164 +0,0 @@
1
- /**
2
- * Terminal Tool
3
- *
4
- * Executes shell commands in a controlled environment.
5
- * Uses execFile with /bin/sh to maintain a single controlled shell entry point.
6
- * Validates working directory and enforces timeouts and output limits.
7
- */
8
- import { execFile } from 'node:child_process';
9
- import { resolve } from 'node:path';
10
- import { containsTraversal } from '../../lib/pathValidation.js';
11
- import { ToolError } from '../types.js';
12
- /** Default timeout in milliseconds (30 seconds) */
13
- const DEFAULT_TIMEOUT = 30_000;
14
- /** Maximum output size in bytes (50KB) */
15
- const MAX_OUTPUT_BYTES = 50 * 1024;
16
- /** Input schema for the terminal tool */
17
- const inputSchema = {
18
- type: 'object',
19
- properties: {
20
- command: {
21
- type: 'string',
22
- description: 'Shell command to execute',
23
- },
24
- cwd: {
25
- type: 'string',
26
- description: 'Working directory for the command (defaults to context workingDir)',
27
- },
28
- timeout: {
29
- type: 'number',
30
- description: 'Timeout in milliseconds (default: 30000)',
31
- },
32
- },
33
- required: ['command'],
34
- };
35
- /**
36
- * Validate and resolve the working directory, ensuring it stays within workingDir.
37
- *
38
- * @param cwd - User-provided working directory
39
- * @param workingDir - The allowed root directory
40
- * @param toolName - Name of the calling tool (for error reporting)
41
- * @returns The resolved absolute path
42
- * @throws {ToolError} If the path escapes workingDir or contains traversal
43
- */
44
- function validateCwd(cwd, workingDir, toolName) {
45
- if (containsTraversal(cwd)) {
46
- throw new ToolError('Working directory contains directory traversal sequences', 'INVALID_INPUT', toolName);
47
- }
48
- const resolved = resolve(workingDir, cwd);
49
- const normalizedWorking = resolve(workingDir);
50
- if (!resolved.startsWith(normalizedWorking)) {
51
- throw new ToolError('Working directory is outside the allowed directory', 'INVALID_INPUT', toolName);
52
- }
53
- return resolved;
54
- }
55
- /**
56
- * Truncate output to the maximum allowed size, appending a notice if truncated.
57
- */
58
- function truncateOutput(output) {
59
- const bytes = Buffer.byteLength(output, 'utf-8');
60
- if (bytes <= MAX_OUTPUT_BYTES) {
61
- return output;
62
- }
63
- // Truncate by bytes, then trim to last complete character
64
- const truncated = Buffer.from(output, 'utf-8').subarray(0, MAX_OUTPUT_BYTES).toString('utf-8');
65
- return truncated + '\n\n[Output truncated — exceeded 50KB limit]';
66
- }
67
- /**
68
- * Terminal tool implementation.
69
- *
70
- * Executes shell commands using execFile with /bin/sh for a controlled
71
- * shell entry point. Captures stdout/stderr, enforces timeouts, and
72
- * truncates large output.
73
- *
74
- * SECURITY: Uses execFile('/bin/sh', ['-c', command]) — never exec with shell:true.
75
- */
76
- export const terminalTool = {
77
- name: 'terminal',
78
- description: 'Execute a shell command and return its output',
79
- inputSchema,
80
- async execute(input, context) {
81
- // Check permission
82
- if (!context.permissions.allowTerminal) {
83
- throw new ToolError('Terminal permission denied', 'PERMISSION_DENIED', 'terminal');
84
- }
85
- // Validate command
86
- const command = input.command;
87
- if (typeof command !== 'string' || command.trim().length === 0) {
88
- throw new ToolError('command is required and must be a non-empty string', 'INVALID_INPUT', 'terminal');
89
- }
90
- // Resolve and validate cwd
91
- const rawCwd = typeof input.cwd === 'string' ? input.cwd : context.workingDir;
92
- const cwd = validateCwd(rawCwd, context.workingDir, 'terminal');
93
- // Resolve timeout
94
- const timeout = typeof input.timeout === 'number' && input.timeout > 0
95
- ? input.timeout
96
- : DEFAULT_TIMEOUT;
97
- return new Promise((resolvePromise, rejectPromise) => {
98
- const child = execFile('/bin/sh', ['-c', command], {
99
- cwd,
100
- timeout,
101
- maxBuffer: MAX_OUTPUT_BYTES * 2, // Allow extra buffer, we truncate ourselves
102
- signal: context.signal,
103
- }, (error, stdout, stderr) => {
104
- // Combine stdout and stderr
105
- let combined = '';
106
- if (stdout)
107
- combined += stdout;
108
- if (stderr) {
109
- if (combined.length > 0 && !combined.endsWith('\n'))
110
- combined += '\n';
111
- if (stderr.length > 0)
112
- combined += stderr;
113
- }
114
- const output = truncateOutput(combined);
115
- if (error) {
116
- // Timeout: killed is true when the timeout fires
117
- if (error.killed) {
118
- rejectPromise(new ToolError(`Command timed out after ${timeout}ms`, 'TIMEOUT', 'terminal', { cause: error }));
119
- return;
120
- }
121
- const nodeErr = error;
122
- // Spawn/exec failure (not a non-zero exit code)
123
- if (nodeErr.code === 'ENOENT' || nodeErr.code === 'EACCES') {
124
- rejectPromise(new ToolError(`Failed to execute command: ${nodeErr.message}`, 'EXECUTION_FAILED', 'terminal', { cause: error }));
125
- return;
126
- }
127
- // Abort signal
128
- if (nodeErr.code === 'ABORT_ERR' || nodeErr.name === 'AbortError') {
129
- rejectPromise(new ToolError('Command was aborted', 'EXECUTION_FAILED', 'terminal', { cause: error }));
130
- return;
131
- }
132
- // Non-zero exit code: still success=true, include exit code in metadata
133
- const exitCode = typeof error.code === 'number'
134
- ? error.code
135
- : 1;
136
- resolvePromise({
137
- success: true,
138
- output,
139
- metadata: {
140
- exitCode,
141
- cwd,
142
- },
143
- });
144
- return;
145
- }
146
- resolvePromise({
147
- success: true,
148
- output,
149
- metadata: {
150
- exitCode: 0,
151
- cwd,
152
- },
153
- });
154
- });
155
- // Ensure child process is cleaned up on abort
156
- if (context.signal) {
157
- context.signal.addEventListener('abort', () => {
158
- child.kill();
159
- }, { once: true });
160
- }
161
- });
162
- },
163
- };
164
- //# sourceMappingURL=terminal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../src/tools/cli/terminal.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Terminal Tool Tests
3
- *
4
- * Tests for the terminal tool implementation.
5
- * Uses node:test and node:assert with real command execution via tmpdir.
6
- */
7
- export {};
8
- //# sourceMappingURL=terminal.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.test.d.ts","sourceRoot":"","sources":["../../../src/tools/cli/terminal.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,161 +0,0 @@
1
- /**
2
- * Terminal Tool Tests
3
- *
4
- * Tests for the terminal tool implementation.
5
- * Uses node:test and node:assert with real command execution via tmpdir.
6
- */
7
- import { describe, it, beforeEach, afterEach } from 'node:test';
8
- import assert from 'node:assert';
9
- import { mkdtempSync, rmSync } from 'node:fs';
10
- import { join } from 'node:path';
11
- import { tmpdir } from 'node:os';
12
- import { terminalTool } from './terminal.js';
13
- import { ToolError } from '../types.js';
14
- /** Create a ToolContext with sensible defaults */
15
- function createContext(overrides) {
16
- return {
17
- workingDir: overrides?.workingDir ?? '/tmp',
18
- permissions: overrides?.permissions ?? {
19
- allowFileRead: false,
20
- allowFileWrite: false,
21
- allowTerminal: true,
22
- allowNetwork: false,
23
- },
24
- signal: overrides?.signal,
25
- };
26
- }
27
- describe('terminal tool', () => {
28
- let tempDir;
29
- beforeEach(() => {
30
- tempDir = mkdtempSync(join(tmpdir(), 'beth-terminal-'));
31
- });
32
- afterEach(() => {
33
- rmSync(tempDir, { recursive: true, force: true });
34
- });
35
- describe('metadata', () => {
36
- it('should have name "terminal"', () => {
37
- assert.strictEqual(terminalTool.name, 'terminal');
38
- });
39
- it('should have a description', () => {
40
- assert.ok(terminalTool.description.length > 0);
41
- });
42
- it('should have an inputSchema with command required', () => {
43
- assert.strictEqual(terminalTool.inputSchema.type, 'object');
44
- assert.ok(Array.isArray(terminalTool.inputSchema.required));
45
- assert.ok(terminalTool.inputSchema.required.includes('command'));
46
- });
47
- });
48
- describe('command execution', () => {
49
- it('should run a simple command', async () => {
50
- const result = await terminalTool.execute({ command: 'echo "hello"' }, createContext({ workingDir: tempDir }));
51
- assert.strictEqual(result.success, true);
52
- assert.ok(result.output.includes('hello'));
53
- assert.strictEqual(result.metadata?.exitCode, 0);
54
- });
55
- it('should capture stdout', async () => {
56
- const result = await terminalTool.execute({ command: 'echo "stdout output"' }, createContext({ workingDir: tempDir }));
57
- assert.strictEqual(result.success, true);
58
- assert.ok(result.output.includes('stdout output'));
59
- });
60
- it('should capture stderr', async () => {
61
- const result = await terminalTool.execute({ command: 'echo "error output" >&2' }, createContext({ workingDir: tempDir }));
62
- assert.strictEqual(result.success, true);
63
- assert.ok(result.output.includes('error output'));
64
- });
65
- it('should capture both stdout and stderr', async () => {
66
- const result = await terminalTool.execute({ command: 'echo "out" && echo "err" >&2' }, createContext({ workingDir: tempDir }));
67
- assert.strictEqual(result.success, true);
68
- assert.ok(result.output.includes('out'));
69
- assert.ok(result.output.includes('err'));
70
- });
71
- it('should return exit code in metadata', async () => {
72
- const result = await terminalTool.execute({ command: 'exit 0' }, createContext({ workingDir: tempDir }));
73
- assert.strictEqual(result.metadata?.exitCode, 0);
74
- });
75
- });
76
- describe('non-zero exit codes', () => {
77
- it('should return success=true with exit code for command failure', async () => {
78
- const result = await terminalTool.execute({ command: 'exit 42' }, createContext({ workingDir: tempDir }));
79
- assert.strictEqual(result.success, true);
80
- assert.strictEqual(result.metadata?.exitCode, 42);
81
- });
82
- it('should include output from failed commands', async () => {
83
- const result = await terminalTool.execute({ command: 'echo "before fail" && exit 1' }, createContext({ workingDir: tempDir }));
84
- assert.strictEqual(result.success, true);
85
- assert.ok(result.output.includes('before fail'));
86
- assert.strictEqual(result.metadata?.exitCode, 1);
87
- });
88
- });
89
- describe('timeout', () => {
90
- it('should throw TIMEOUT for long-running commands', async () => {
91
- await assert.rejects(() => terminalTool.execute({ command: 'sleep 60', timeout: 500 }, createContext({ workingDir: tempDir })), (err) => {
92
- assert.ok(err instanceof ToolError);
93
- assert.strictEqual(err.code, 'TIMEOUT');
94
- return true;
95
- });
96
- });
97
- });
98
- describe('permissions', () => {
99
- it('should return PERMISSION_DENIED when allowTerminal is false', async () => {
100
- const ctx = createContext({
101
- workingDir: tempDir,
102
- permissions: {
103
- allowFileRead: false,
104
- allowFileWrite: false,
105
- allowTerminal: false,
106
- allowNetwork: false,
107
- },
108
- });
109
- await assert.rejects(() => terminalTool.execute({ command: 'echo hi' }, ctx), (err) => {
110
- assert.ok(err instanceof ToolError);
111
- assert.strictEqual(err.code, 'PERMISSION_DENIED');
112
- return true;
113
- });
114
- });
115
- });
116
- describe('cwd validation', () => {
117
- it('should use workingDir as default cwd', async () => {
118
- const result = await terminalTool.execute({ command: 'pwd' }, createContext({ workingDir: tempDir }));
119
- assert.strictEqual(result.success, true);
120
- assert.ok(result.output.includes(tempDir));
121
- assert.strictEqual(result.metadata?.cwd, tempDir);
122
- });
123
- it('should reject cwd with traversal sequences', async () => {
124
- await assert.rejects(() => terminalTool.execute({ command: 'echo hi', cwd: '../../../etc' }, createContext({ workingDir: tempDir })), (err) => {
125
- assert.ok(err instanceof ToolError);
126
- assert.strictEqual(err.code, 'INVALID_INPUT');
127
- assert.ok(err.message.includes('traversal'));
128
- return true;
129
- });
130
- });
131
- });
132
- describe('input validation', () => {
133
- it('should reject empty command', async () => {
134
- await assert.rejects(() => terminalTool.execute({ command: '' }, createContext({ workingDir: tempDir })), (err) => {
135
- assert.ok(err instanceof ToolError);
136
- assert.strictEqual(err.code, 'INVALID_INPUT');
137
- return true;
138
- });
139
- });
140
- it('should reject non-string command', async () => {
141
- await assert.rejects(() => terminalTool.execute({ command: 123 }, createContext({ workingDir: tempDir })), (err) => {
142
- assert.ok(err instanceof ToolError);
143
- assert.strictEqual(err.code, 'INVALID_INPUT');
144
- return true;
145
- });
146
- });
147
- });
148
- describe('output truncation', () => {
149
- it('should truncate output exceeding 50KB', async () => {
150
- // Generate ~60KB of output
151
- const result = await terminalTool.execute({ command: 'seq 1 10000' }, createContext({ workingDir: tempDir }));
152
- assert.strictEqual(result.success, true);
153
- // Output should either be under limit or include truncation notice
154
- const outputBytes = Buffer.byteLength(result.output, 'utf-8');
155
- if (outputBytes > 50 * 1024) {
156
- assert.ok(result.output.includes('[Output truncated'));
157
- }
158
- });
159
- });
160
- });
161
- //# sourceMappingURL=terminal.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.test.js","sourceRoot":"","sources":["../../../src/tools/cli/terminal.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,kDAAkD;AAClD,SAAS,aAAa,CAAC,SAAgC;IACrD,OAAO;QACL,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,MAAM;QAC3C,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI;YACrC,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,KAAK;SACpB;QACD,MAAM,EAAE,SAAS,EAAE,MAAM;KAC1B,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,EAAE,CAAE,YAAY,CAAC,WAAW,CAAC,QAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,cAAc,EAAE,EAC3B,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,sBAAsB,EAAE,EACnC,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,yBAAyB,EAAE,EACtC,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAC3C,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,QAAQ,EAAE,EACrB,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,SAAS,EAAE,EACtB,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAC3C,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CACxB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,EACrC,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,EACD,CAAC,GAAY,EAAE,EAAE;gBACf,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,SAAS,CAAC,CAAC;gBACpC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACxC,OAAO,IAAI,CAAC;YACd,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,GAAG,GAAG,aAAa,CAAC;gBACxB,UAAU,EAAE,OAAO;gBACnB,WAAW,EAAE;oBACX,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK;oBACrB,aAAa,EAAE,KAAK;oBACpB,YAAY,EAAE,KAAK;iBACpB;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,EACvD,CAAC,GAAY,EAAE,EAAE;gBACf,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,SAAS,CAAC,CAAC;gBACpC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;gBAClD,OAAO,IAAI,CAAC;YACd,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,KAAK,EAAE,EAClB,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CACxB,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,EAC3C,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,EACD,CAAC,GAAY,EAAE,EAAE;gBACf,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,SAAS,CAAC,CAAC;gBACpC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBAC9C,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CACxB,EAAE,OAAO,EAAE,EAAE,EAAE,EACf,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,EACD,CAAC,GAAY,EAAE,EAAE;gBACf,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,SAAS,CAAC,CAAC;gBACpC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CACxB,EAAE,OAAO,EAAE,GAAG,EAAE,EAChB,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,EACD,CAAC,GAAY,EAAE,EAAE;gBACf,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,SAAS,CAAC,CAAC;gBACpC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,2BAA2B;YAC3B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACvC,EAAE,OAAO,EAAE,aAAa,EAAE,EAC1B,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CACvC,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,mEAAmE;YACnE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9D,IAAI,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;gBAC5B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Tool Abstraction Module
3
- *
4
- * Barrel exports for the tool abstraction layer.
5
- * Provides a uniform interface for agent tools regardless of
6
- * runtime environment (CLI, Copilot, MCP).
7
- */
8
- import { ToolRegistry } from './registry.js';
9
- export type { ToolErrorCode, ToolPermissions, ToolContext, ToolResult, ToolInputSchema, } from './types.js';
10
- export { ToolError } from './types.js';
11
- export type { Tool } from './interface.js';
12
- export { toToolDefinition } from './interface.js';
13
- export { ToolRegistry } from './registry.js';
14
- export { readFileTool } from './cli/readFile.js';
15
- export { editFileTool } from './cli/editFile.js';
16
- export { searchTool } from './cli/search.js';
17
- export { terminalTool } from './cli/terminal.js';
18
- export { beadsTool } from './cli/beads.js';
19
- export { subagentTool, isSubagentRequest } from './cli/subagent.js';
20
- export { MCPClient } from './mcp/client.js';
21
- export type { MCPServerConfig, MCPToolInfo } from './mcp/client.js';
22
- export { parseMCPConfig, createMCPTools, loadAllMCPTools } from './mcp/bridge.js';
23
- /** Create a ToolRegistry pre-loaded with all built-in CLI tools */
24
- export declare function createDefaultRegistry(): ToolRegistry;
25
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,YAAY,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,YAAY,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlF,mEAAmE;AACnE,wBAAgB,qBAAqB,IAAI,YAAY,CASpD"}