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,233 +0,0 @@
1
- /**
2
- * Stream Handler Utilities for LLM Streaming Responses
3
- *
4
- * Provides utilities for processing incremental streaming responses from LLM APIs.
5
- * Handles content accumulation, tool call assembly from deltas, and stream transformation.
6
- */
7
- // =============================================================================
8
- // StreamAccumulator Class
9
- // =============================================================================
10
- /**
11
- * Accumulates streamed chat response chunks into a complete response.
12
- *
13
- * Handles the complexity of:
14
- * - Concatenating content chunks as they arrive
15
- * - Assembling tool calls from incremental deltas (by index)
16
- * - Tracking the finish reason from the final chunk
17
- * - Managing multiple in-flight tool calls simultaneously
18
- *
19
- * @example
20
- * ```typescript
21
- * const accumulator = new StreamAccumulator();
22
- *
23
- * for await (const chunk of stream) {
24
- * accumulator.processChunk(chunk);
25
- * }
26
- *
27
- * console.log(accumulator.getContent());
28
- * console.log(accumulator.getToolCalls());
29
- * console.log(accumulator.getFinishReason());
30
- * ```
31
- */
32
- export class StreamAccumulator {
33
- /** Accumulated text content from all chunks */
34
- content = '';
35
- /** Map of tool call index to partially assembled tool call */
36
- toolCallMap = new Map();
37
- /** Finish reason from the final chunk */
38
- finishReason = null;
39
- /** Role from the response (typically from first chunk) */
40
- role = 'assistant';
41
- /**
42
- * Process a single chunk from the stream.
43
- *
44
- * Updates internal state with any content, tool call deltas,
45
- * role, or finish reason present in the chunk.
46
- *
47
- * @param chunk - The chat chunk to process
48
- */
49
- processChunk(chunk) {
50
- // Accumulate text content
51
- if (chunk.content !== null) {
52
- this.content += chunk.content;
53
- }
54
- // Track role (typically only in first chunk)
55
- if (chunk.role !== undefined) {
56
- this.role = chunk.role;
57
- }
58
- // Track finish reason (only in final chunk)
59
- if (chunk.finish_reason !== null) {
60
- this.finishReason = chunk.finish_reason;
61
- }
62
- // Process tool call deltas
63
- if (chunk.tool_calls !== undefined) {
64
- for (const delta of chunk.tool_calls) {
65
- this.processToolCallDelta(delta);
66
- }
67
- }
68
- }
69
- /**
70
- * Process a tool call delta and merge it into the accumulated state.
71
- *
72
- * Tool calls arrive incrementally:
73
- * - First chunk: id, type, function.name
74
- * - Subsequent chunks: function.arguments (appended)
75
- *
76
- * @param delta - The tool call delta to process
77
- */
78
- processToolCallDelta(delta) {
79
- const { index } = delta;
80
- // Get or create the partial tool call for this index
81
- let partial = this.toolCallMap.get(index);
82
- if (partial === undefined) {
83
- // First delta for this tool call - initialize
84
- partial = {
85
- id: delta.id ?? '',
86
- type: delta.type ?? 'function',
87
- functionName: delta.function?.name ?? '',
88
- functionArguments: delta.function?.arguments ?? '',
89
- };
90
- this.toolCallMap.set(index, partial);
91
- }
92
- else {
93
- // Subsequent delta - merge in new data
94
- if (delta.id !== undefined) {
95
- partial.id = delta.id;
96
- }
97
- if (delta.type !== undefined) {
98
- partial.type = delta.type;
99
- }
100
- if (delta.function?.name !== undefined) {
101
- partial.functionName = delta.function.name;
102
- }
103
- if (delta.function?.arguments !== undefined) {
104
- // Arguments are streamed incrementally - append
105
- partial.functionArguments += delta.function.arguments;
106
- }
107
- }
108
- }
109
- /**
110
- * Get the accumulated text content.
111
- *
112
- * @returns The complete text content from all processed chunks
113
- */
114
- getContent() {
115
- return this.content;
116
- }
117
- /**
118
- * Get the assembled tool calls.
119
- *
120
- * Returns tool calls sorted by their original index order.
121
- *
122
- * @returns Array of fully assembled tool calls
123
- */
124
- getToolCalls() {
125
- // Sort by index to maintain order
126
- const sortedEntries = [...this.toolCallMap.entries()].sort(([a], [b]) => a - b);
127
- return sortedEntries.map(([, partial]) => ({
128
- id: partial.id,
129
- type: partial.type,
130
- function: {
131
- name: partial.functionName,
132
- arguments: partial.functionArguments,
133
- },
134
- }));
135
- }
136
- /**
137
- * Get the finish reason from the final chunk.
138
- *
139
- * @returns The finish reason, or null if stream hasn't finished
140
- */
141
- getFinishReason() {
142
- return this.finishReason;
143
- }
144
- /**
145
- * Get the role of the response.
146
- *
147
- * @returns The chat role (defaults to 'assistant' if not specified)
148
- */
149
- getRole() {
150
- return this.role;
151
- }
152
- /**
153
- * Reset the accumulator for reuse.
154
- *
155
- * Clears all accumulated state, allowing the accumulator to be
156
- * reused for processing a new stream.
157
- */
158
- reset() {
159
- this.content = '';
160
- this.toolCallMap.clear();
161
- this.finishReason = null;
162
- this.role = 'assistant';
163
- }
164
- }
165
- /**
166
- * Consume an entire stream and collect the results.
167
- *
168
- * This is a convenience function that uses StreamAccumulator internally
169
- * to process all chunks and return the final aggregated result.
170
- *
171
- * @param stream - Async iterable of chat chunks
172
- * @returns Promise resolving to the collected stream result
173
- *
174
- * @example
175
- * ```typescript
176
- * const stream = client.streamCompletion(messages);
177
- * const result = await collectStream(stream);
178
- *
179
- * if (result.toolCalls.length > 0) {
180
- * // Handle tool calls
181
- * } else {
182
- * console.log(result.content);
183
- * }
184
- * ```
185
- */
186
- export async function collectStream(stream) {
187
- const accumulator = new StreamAccumulator();
188
- for await (const chunk of stream) {
189
- accumulator.processChunk(chunk);
190
- }
191
- return {
192
- content: accumulator.getContent(),
193
- toolCalls: accumulator.getToolCalls(),
194
- finishReason: accumulator.getFinishReason(),
195
- };
196
- }
197
- /**
198
- * Transform stream chunks using a mapping function.
199
- *
200
- * Creates a new async generator that yields transformed values
201
- * for each chunk in the input stream.
202
- *
203
- * @typeParam T - The output type of the mapper function
204
- * @param stream - Async iterable of chat chunks
205
- * @param mapper - Function to transform each chunk
206
- * @returns Async generator yielding transformed values
207
- *
208
- * @example
209
- * ```typescript
210
- * // Extract just the content from each chunk
211
- * const contentStream = mapStream(stream, (chunk) => chunk.content ?? '');
212
- *
213
- * for await (const text of contentStream) {
214
- * process.stdout.write(text);
215
- * }
216
- * ```
217
- *
218
- * @example
219
- * ```typescript
220
- * // Transform to custom event format
221
- * const eventStream = mapStream(stream, (chunk) => ({
222
- * type: 'delta',
223
- * text: chunk.content,
224
- * done: chunk.finish_reason !== null,
225
- * }));
226
- * ```
227
- */
228
- export async function* mapStream(stream, mapper) {
229
- for await (const chunk of stream) {
230
- yield mapper(chunk);
231
- }
232
- }
233
- //# sourceMappingURL=streaming.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/providers/streaming.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Stream Handler Utility Tests
3
- *
4
- * Tests for StreamAccumulator, collectStream, and mapStream.
5
- */
6
- export {};
7
- //# sourceMappingURL=streaming.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streaming.test.d.ts","sourceRoot":"","sources":["../../src/providers/streaming.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,372 +0,0 @@
1
- /**
2
- * Stream Handler Utility Tests
3
- *
4
- * Tests for StreamAccumulator, collectStream, and mapStream.
5
- */
6
- import { describe, it } from 'node:test';
7
- import assert from 'node:assert';
8
- import { StreamAccumulator, collectStream, mapStream } from './streaming.js';
9
- /**
10
- * Helper to create async iterable from array of chunks.
11
- */
12
- async function* asyncIterableFromArray(chunks) {
13
- for (const chunk of chunks) {
14
- yield chunk;
15
- }
16
- }
17
- /**
18
- * Helper to create a basic ChatChunk.
19
- */
20
- function createChunk(overrides = {}) {
21
- return {
22
- id: 'test-id',
23
- content: null,
24
- finish_reason: null,
25
- ...overrides,
26
- };
27
- }
28
- describe('StreamAccumulator', () => {
29
- describe('content accumulation', () => {
30
- it('should accumulate content from multiple chunks', () => {
31
- const accumulator = new StreamAccumulator();
32
- accumulator.processChunk(createChunk({ content: 'Hello' }));
33
- accumulator.processChunk(createChunk({ content: ' ' }));
34
- accumulator.processChunk(createChunk({ content: 'World' }));
35
- assert.strictEqual(accumulator.getContent(), 'Hello World');
36
- });
37
- it('should return empty string when no content received', () => {
38
- const accumulator = new StreamAccumulator();
39
- assert.strictEqual(accumulator.getContent(), '');
40
- });
41
- it('should handle single chunk with content', () => {
42
- const accumulator = new StreamAccumulator();
43
- accumulator.processChunk(createChunk({ content: 'Complete message' }));
44
- assert.strictEqual(accumulator.getContent(), 'Complete message');
45
- });
46
- it('should skip null content chunks (no accumulation)', () => {
47
- const accumulator = new StreamAccumulator();
48
- accumulator.processChunk(createChunk({ content: 'Start' }));
49
- accumulator.processChunk(createChunk({ content: null }));
50
- accumulator.processChunk(createChunk({ content: 'End' }));
51
- assert.strictEqual(accumulator.getContent(), 'StartEnd');
52
- });
53
- it('should handle empty string content', () => {
54
- const accumulator = new StreamAccumulator();
55
- accumulator.processChunk(createChunk({ content: 'A' }));
56
- accumulator.processChunk(createChunk({ content: '' }));
57
- accumulator.processChunk(createChunk({ content: 'B' }));
58
- assert.strictEqual(accumulator.getContent(), 'AB');
59
- });
60
- });
61
- describe('role tracking', () => {
62
- it('should track role from first chunk', () => {
63
- const accumulator = new StreamAccumulator();
64
- accumulator.processChunk(createChunk({ role: 'assistant', content: 'Hello' }));
65
- accumulator.processChunk(createChunk({ content: ' World' }));
66
- assert.strictEqual(accumulator.getRole(), 'assistant');
67
- });
68
- it('should default to assistant role', () => {
69
- const accumulator = new StreamAccumulator();
70
- assert.strictEqual(accumulator.getRole(), 'assistant');
71
- });
72
- it('should update role if provided in later chunk', () => {
73
- const accumulator = new StreamAccumulator();
74
- accumulator.processChunk(createChunk({ role: 'user' }));
75
- accumulator.processChunk(createChunk({ role: 'assistant' }));
76
- assert.strictEqual(accumulator.getRole(), 'assistant');
77
- });
78
- });
79
- describe('finish_reason tracking', () => {
80
- it('should track finish_reason from final chunk', () => {
81
- const accumulator = new StreamAccumulator();
82
- accumulator.processChunk(createChunk({ content: 'Hello' }));
83
- accumulator.processChunk(createChunk({ content: ' World', finish_reason: 'stop' }));
84
- assert.strictEqual(accumulator.getFinishReason(), 'stop');
85
- });
86
- it('should return null if stream has not finished', () => {
87
- const accumulator = new StreamAccumulator();
88
- accumulator.processChunk(createChunk({ content: 'Hello' }));
89
- assert.strictEqual(accumulator.getFinishReason(), null);
90
- });
91
- it('should handle tool_calls finish reason', () => {
92
- const accumulator = new StreamAccumulator();
93
- accumulator.processChunk(createChunk({ finish_reason: 'tool_calls' }));
94
- assert.strictEqual(accumulator.getFinishReason(), 'tool_calls');
95
- });
96
- it('should handle length finish reason', () => {
97
- const accumulator = new StreamAccumulator();
98
- accumulator.processChunk(createChunk({ finish_reason: 'length' }));
99
- assert.strictEqual(accumulator.getFinishReason(), 'length');
100
- });
101
- it('should handle content_filter finish reason', () => {
102
- const accumulator = new StreamAccumulator();
103
- accumulator.processChunk(createChunk({ finish_reason: 'content_filter' }));
104
- assert.strictEqual(accumulator.getFinishReason(), 'content_filter');
105
- });
106
- });
107
- describe('tool call assembly', () => {
108
- it('should assemble tool calls from deltas', () => {
109
- const accumulator = new StreamAccumulator();
110
- // First chunk: id, type, function name (beginning of tool call)
111
- const delta1 = {
112
- index: 0,
113
- id: 'call_123',
114
- type: 'function',
115
- function: {
116
- name: 'get_weather',
117
- arguments: '',
118
- },
119
- };
120
- // Second chunk: arguments (streamed incrementally)
121
- const delta2 = {
122
- index: 0,
123
- function: {
124
- arguments: '{"city":',
125
- },
126
- };
127
- // Third chunk: more arguments
128
- const delta3 = {
129
- index: 0,
130
- function: {
131
- arguments: '"NYC"}',
132
- },
133
- };
134
- accumulator.processChunk(createChunk({ tool_calls: [delta1] }));
135
- accumulator.processChunk(createChunk({ tool_calls: [delta2] }));
136
- accumulator.processChunk(createChunk({ tool_calls: [delta3] }));
137
- const toolCalls = accumulator.getToolCalls();
138
- assert.strictEqual(toolCalls.length, 1);
139
- assert.strictEqual(toolCalls[0].id, 'call_123');
140
- assert.strictEqual(toolCalls[0].type, 'function');
141
- assert.strictEqual(toolCalls[0].function.name, 'get_weather');
142
- assert.strictEqual(toolCalls[0].function.arguments, '{"city":"NYC"}');
143
- });
144
- it('should handle multiple simultaneous tool calls (different indices)', () => {
145
- const accumulator = new StreamAccumulator();
146
- // First tool call
147
- const delta0 = {
148
- index: 0,
149
- id: 'call_1',
150
- type: 'function',
151
- function: { name: 'tool_a', arguments: '{}' },
152
- };
153
- // Second tool call
154
- const delta1 = {
155
- index: 1,
156
- id: 'call_2',
157
- type: 'function',
158
- function: { name: 'tool_b', arguments: '{"x":1}' },
159
- };
160
- accumulator.processChunk(createChunk({ tool_calls: [delta0, delta1] }));
161
- const toolCalls = accumulator.getToolCalls();
162
- assert.strictEqual(toolCalls.length, 2);
163
- assert.strictEqual(toolCalls[0].id, 'call_1');
164
- assert.strictEqual(toolCalls[0].function.name, 'tool_a');
165
- assert.strictEqual(toolCalls[1].id, 'call_2');
166
- assert.strictEqual(toolCalls[1].function.name, 'tool_b');
167
- });
168
- it('should sort tool calls by index', () => {
169
- const accumulator = new StreamAccumulator();
170
- // Receive tool calls out of order
171
- accumulator.processChunk(createChunk({
172
- tool_calls: [
173
- { index: 2, id: 'call_3', type: 'function', function: { name: 'c', arguments: '' } },
174
- ],
175
- }));
176
- accumulator.processChunk(createChunk({
177
- tool_calls: [
178
- { index: 0, id: 'call_1', type: 'function', function: { name: 'a', arguments: '' } },
179
- ],
180
- }));
181
- accumulator.processChunk(createChunk({
182
- tool_calls: [
183
- { index: 1, id: 'call_2', type: 'function', function: { name: 'b', arguments: '' } },
184
- ],
185
- }));
186
- const toolCalls = accumulator.getToolCalls();
187
- assert.strictEqual(toolCalls.length, 3);
188
- assert.strictEqual(toolCalls[0].function.name, 'a');
189
- assert.strictEqual(toolCalls[1].function.name, 'b');
190
- assert.strictEqual(toolCalls[2].function.name, 'c');
191
- });
192
- it('should return empty array when no tool calls', () => {
193
- const accumulator = new StreamAccumulator();
194
- accumulator.processChunk(createChunk({ content: 'Hello' }));
195
- const toolCalls = accumulator.getToolCalls();
196
- assert.deepStrictEqual(toolCalls, []);
197
- });
198
- it('should handle tool call with empty function details', () => {
199
- const accumulator = new StreamAccumulator();
200
- const delta = {
201
- index: 0,
202
- };
203
- accumulator.processChunk(createChunk({ tool_calls: [delta] }));
204
- const toolCalls = accumulator.getToolCalls();
205
- assert.strictEqual(toolCalls.length, 1);
206
- assert.strictEqual(toolCalls[0].id, '');
207
- assert.strictEqual(toolCalls[0].function.name, '');
208
- assert.strictEqual(toolCalls[0].function.arguments, '');
209
- });
210
- it('should merge tool call updates correctly', () => {
211
- const accumulator = new StreamAccumulator();
212
- // First: partial info
213
- accumulator.processChunk(createChunk({
214
- tool_calls: [{ index: 0, id: 'original_id' }],
215
- }));
216
- // Second: update with name
217
- accumulator.processChunk(createChunk({
218
- tool_calls: [{ index: 0, function: { name: 'my_function' } }],
219
- }));
220
- // Third: update with arguments
221
- accumulator.processChunk(createChunk({
222
- tool_calls: [{ index: 0, function: { arguments: '{"a":1}' } }],
223
- }));
224
- const toolCalls = accumulator.getToolCalls();
225
- assert.strictEqual(toolCalls[0].id, 'original_id');
226
- assert.strictEqual(toolCalls[0].function.name, 'my_function');
227
- assert.strictEqual(toolCalls[0].function.arguments, '{"a":1}');
228
- });
229
- });
230
- describe('reset', () => {
231
- it('should clear all state', () => {
232
- const accumulator = new StreamAccumulator();
233
- accumulator.processChunk(createChunk({ content: 'Hello', role: 'user' }));
234
- accumulator.processChunk(createChunk({ finish_reason: 'stop' }));
235
- accumulator.processChunk(createChunk({
236
- tool_calls: [
237
- { index: 0, id: 'call_1', type: 'function', function: { name: 'test', arguments: '{}' } },
238
- ],
239
- }));
240
- accumulator.reset();
241
- assert.strictEqual(accumulator.getContent(), '');
242
- assert.strictEqual(accumulator.getRole(), 'assistant');
243
- assert.strictEqual(accumulator.getFinishReason(), null);
244
- assert.deepStrictEqual(accumulator.getToolCalls(), []);
245
- });
246
- it('should allow reuse after reset', () => {
247
- const accumulator = new StreamAccumulator();
248
- accumulator.processChunk(createChunk({ content: 'First' }));
249
- accumulator.reset();
250
- accumulator.processChunk(createChunk({ content: 'Second' }));
251
- assert.strictEqual(accumulator.getContent(), 'Second');
252
- });
253
- });
254
- });
255
- describe('collectStream', () => {
256
- it('should collect complete stream into result', async () => {
257
- const chunks = [
258
- createChunk({ role: 'assistant', content: 'Hello' }),
259
- createChunk({ content: ' World' }),
260
- createChunk({ content: '!', finish_reason: 'stop' }),
261
- ];
262
- const result = await collectStream(asyncIterableFromArray(chunks));
263
- assert.strictEqual(result.content, 'Hello World!');
264
- assert.strictEqual(result.finishReason, 'stop');
265
- assert.deepStrictEqual(result.toolCalls, []);
266
- });
267
- it('should return content, toolCalls, and finishReason', async () => {
268
- const chunks = [
269
- createChunk({
270
- content: '',
271
- tool_calls: [
272
- { index: 0, id: 'tc_1', type: 'function', function: { name: 'test', arguments: '{}' } },
273
- ],
274
- }),
275
- createChunk({ finish_reason: 'tool_calls' }),
276
- ];
277
- const result = await collectStream(asyncIterableFromArray(chunks));
278
- assert.strictEqual(result.finishReason, 'tool_calls');
279
- assert.strictEqual(result.toolCalls.length, 1);
280
- assert.strictEqual(result.toolCalls[0].id, 'tc_1');
281
- });
282
- it('should work with empty stream', async () => {
283
- const chunks = [];
284
- const result = await collectStream(asyncIterableFromArray(chunks));
285
- assert.strictEqual(result.content, '');
286
- assert.strictEqual(result.finishReason, null);
287
- assert.deepStrictEqual(result.toolCalls, []);
288
- });
289
- it('should handle stream with only null content', async () => {
290
- const chunks = [
291
- createChunk({ content: null }),
292
- createChunk({ content: null, finish_reason: 'stop' }),
293
- ];
294
- const result = await collectStream(asyncIterableFromArray(chunks));
295
- assert.strictEqual(result.content, '');
296
- assert.strictEqual(result.finishReason, 'stop');
297
- });
298
- });
299
- describe('mapStream', () => {
300
- it('should transform chunks through mapper function', async () => {
301
- const chunks = [
302
- createChunk({ content: 'A' }),
303
- createChunk({ content: 'B' }),
304
- createChunk({ content: 'C' }),
305
- ];
306
- const mappedStream = mapStream(asyncIterableFromArray(chunks), (chunk) => chunk.content ?? '');
307
- const results = [];
308
- for await (const value of mappedStream) {
309
- results.push(value);
310
- }
311
- assert.deepStrictEqual(results, ['A', 'B', 'C']);
312
- });
313
- it('should preserve iteration order', async () => {
314
- const chunks = [
315
- createChunk({ id: '1', content: 'first' }),
316
- createChunk({ id: '2', content: 'second' }),
317
- createChunk({ id: '3', content: 'third' }),
318
- ];
319
- const mappedStream = mapStream(asyncIterableFromArray(chunks), (chunk) => chunk.id);
320
- const results = [];
321
- for await (const value of mappedStream) {
322
- results.push(value);
323
- }
324
- assert.deepStrictEqual(results, ['1', '2', '3']);
325
- });
326
- it('should transform to different type', async () => {
327
- const chunks = [
328
- createChunk({ content: 'hello' }),
329
- createChunk({ content: 'world' }),
330
- ];
331
- const mappedStream = mapStream(asyncIterableFromArray(chunks), (chunk) => ({
332
- text: chunk.content,
333
- length: chunk.content?.length ?? 0,
334
- }));
335
- const results = [];
336
- for await (const value of mappedStream) {
337
- results.push(value);
338
- }
339
- assert.deepStrictEqual(results, [
340
- { text: 'hello', length: 5 },
341
- { text: 'world', length: 5 },
342
- ]);
343
- });
344
- it('should work with empty stream', async () => {
345
- const chunks = [];
346
- const mappedStream = mapStream(asyncIterableFromArray(chunks), (chunk) => chunk.content);
347
- const results = [];
348
- for await (const value of mappedStream) {
349
- results.push(value);
350
- }
351
- assert.deepStrictEqual(results, []);
352
- });
353
- it('should handle mapper that extracts complex data', async () => {
354
- const chunks = [
355
- createChunk({ id: 'c1', content: 'text', finish_reason: null }),
356
- createChunk({ id: 'c2', content: null, finish_reason: 'stop' }),
357
- ];
358
- const mappedStream = mapStream(asyncIterableFromArray(chunks), (chunk) => ({
359
- id: chunk.id,
360
- done: chunk.finish_reason !== null,
361
- }));
362
- const results = [];
363
- for await (const value of mappedStream) {
364
- results.push(value);
365
- }
366
- assert.deepStrictEqual(results, [
367
- { id: 'c1', done: false },
368
- { id: 'c2', done: true },
369
- ]);
370
- });
371
- });
372
- //# sourceMappingURL=streaming.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streaming.test.js","sourceRoot":"","sources":["../../src/providers/streaming.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG7E;;GAEG;AACH,KAAK,SAAS,CAAC,CAAC,sBAAsB,CAAC,MAAmB;IACxD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,YAAgC,EAAE;IACrD,OAAO;QACL,EAAE,EAAE,SAAS;QACb,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,IAAI;QACnB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YACxD,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAE5D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;YAEvE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAE1D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YACxD,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACvD,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAExD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/E,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAE7D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACxD,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAE7D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAEpF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAE5D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;YAEvE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAEnE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAE3E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,gEAAgE;YAChE,MAAM,MAAM,GAAkB;gBAC5B,KAAK,EAAE,CAAC;gBACR,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,EAAE;iBACd;aACF,CAAC;YAEF,mDAAmD;YACnD,MAAM,MAAM,GAAkB;gBAC5B,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE;oBACR,SAAS,EAAE,UAAU;iBACtB;aACF,CAAC;YAEF,8BAA8B;YAC9B,MAAM,MAAM,GAAkB;gBAC5B,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE;oBACR,SAAS,EAAE,QAAQ;iBACpB;aACF,CAAC;YAEF,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAChE,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAChE,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAEhE,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;YAE7C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,kBAAkB;YAClB,MAAM,MAAM,GAAkB;gBAC5B,KAAK,EAAE,CAAC;gBACR,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;aAC9C,CAAC;YAEF,mBAAmB;YACnB,MAAM,MAAM,GAAkB;gBAC5B,KAAK,EAAE,CAAC;gBACR,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE;aACnD,CAAC;YAEF,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAExE,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;YAE7C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,kCAAkC;YAClC,WAAW,CAAC,YAAY,CACtB,WAAW,CAAC;gBACV,UAAU,EAAE;oBACV,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE;iBACrF;aACF,CAAC,CACH,CAAC;YACF,WAAW,CAAC,YAAY,CACtB,WAAW,CAAC;gBACV,UAAU,EAAE;oBACV,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE;iBACrF;aACF,CAAC,CACH,CAAC;YACF,WAAW,CAAC,YAAY,CACtB,WAAW,CAAC;gBACV,UAAU,EAAE;oBACV,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE;iBACrF;aACF,CAAC,CACH,CAAC;YAEF,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;YAE7C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAE5D,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;YAE7C,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,MAAM,KAAK,GAAkB;gBAC3B,KAAK,EAAE,CAAC;aACT,CAAC;YAEF,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/D,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;YAE7C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,sBAAsB;YACtB,WAAW,CAAC,YAAY,CACtB,WAAW,CAAC;gBACV,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC;aAC9C,CAAC,CACH,CAAC;YAEF,2BAA2B;YAC3B,WAAW,CAAC,YAAY,CACtB,WAAW,CAAC;gBACV,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC;aAC9D,CAAC,CACH,CAAC;YAEF,+BAA+B;YAC/B,WAAW,CAAC,YAAY,CACtB,WAAW,CAAC;gBACV,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC;aAC/D,CAAC,CACH,CAAC;YAEF,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;YAE7C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1E,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACjE,WAAW,CAAC,YAAY,CACtB,WAAW,CAAC;gBACV,UAAU,EAAE;oBACV,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;iBAC1F;aACF,CAAC,CACH,CAAC;YAEF,WAAW,CAAC,KAAK,EAAE,CAAC;YAEpB,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;YACxD,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAE7D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAgB;YAC1B,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YACpD,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YAClC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;SACrD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,GAAgB;YAC1B,WAAW,CAAC;gBACV,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE;oBACV,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;iBACxF;aACF,CAAC;YACF,WAAW,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;SAC7C,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,MAAM,GAAgB;YAC1B,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9B,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;SACtD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,MAAM,GAAgB;YAC1B,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAC7B,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAC7B,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;SAC9B,CAAC;QAEF,MAAM,YAAY,GAAG,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAE/F,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,MAAM,GAAgB;YAC1B,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC1C,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YAC3C,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;SAC3C,CAAC;QAEF,MAAM,YAAY,GAAG,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEpF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,MAAM,GAAgB;YAC1B,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YACjC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC;QAEF,MAAM,YAAY,GAAG,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzE,IAAI,EAAE,KAAK,CAAC,OAAO;YACnB,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;SACnC,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAA8C,EAAE,CAAC;QAC9D,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE;YAC9B,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;YAC5B,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,MAAM,YAAY,GAAG,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEzF,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,MAAM,GAAgB;YAC1B,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAC/D,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;SAChE,CAAC;QAEF,MAAM,YAAY,GAAG,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzE,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI;SACnC,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAAoC,EAAE,CAAC;QACpD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE;YAC9B,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;YACzB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}