agentic-qe 3.3.4 → 3.4.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 (457) hide show
  1. package/.claude/agents/v3/qe-queen-coordinator.md +332 -166
  2. package/.claude/helpers/statusline-v3.cjs +85 -42
  3. package/.claude/skills/qcsd-ideation-swarm/SKILL.md +7 -4
  4. package/README.md +71 -2
  5. package/package.json +1 -1
  6. package/scripts/cloud-db-config.json +10 -5
  7. package/scripts/merge-v3-to-root.sql +48 -0
  8. package/v3/CHANGELOG.md +156 -0
  9. package/v3/README.md +118 -1
  10. package/v3/assets/agents/v3/qe-queen-coordinator.md +332 -166
  11. package/v3/assets/skills/qcsd-ideation-swarm/SKILL.md +7 -4
  12. package/v3/dist/adapters/a2a/agent-cards/generator.d.ts +153 -0
  13. package/v3/dist/adapters/a2a/agent-cards/generator.d.ts.map +1 -0
  14. package/v3/dist/adapters/a2a/agent-cards/generator.js +478 -0
  15. package/v3/dist/adapters/a2a/agent-cards/generator.js.map +1 -0
  16. package/v3/dist/adapters/a2a/agent-cards/schema.d.ts +274 -0
  17. package/v3/dist/adapters/a2a/agent-cards/schema.d.ts.map +1 -0
  18. package/v3/dist/adapters/a2a/agent-cards/schema.js +135 -0
  19. package/v3/dist/adapters/a2a/agent-cards/schema.js.map +1 -0
  20. package/v3/dist/adapters/a2a/agent-cards/validator.d.ts +514 -0
  21. package/v3/dist/adapters/a2a/agent-cards/validator.d.ts.map +1 -0
  22. package/v3/dist/adapters/a2a/agent-cards/validator.js +555 -0
  23. package/v3/dist/adapters/a2a/agent-cards/validator.js.map +1 -0
  24. package/v3/dist/adapters/a2a/auth/index.d.ts +23 -0
  25. package/v3/dist/adapters/a2a/auth/index.d.ts.map +1 -0
  26. package/v3/dist/adapters/a2a/auth/index.js +85 -0
  27. package/v3/dist/adapters/a2a/auth/index.js.map +1 -0
  28. package/v3/dist/adapters/a2a/auth/jwt-utils.d.ts +215 -0
  29. package/v3/dist/adapters/a2a/auth/jwt-utils.d.ts.map +1 -0
  30. package/v3/dist/adapters/a2a/auth/jwt-utils.js +314 -0
  31. package/v3/dist/adapters/a2a/auth/jwt-utils.js.map +1 -0
  32. package/v3/dist/adapters/a2a/auth/middleware.d.ts +173 -0
  33. package/v3/dist/adapters/a2a/auth/middleware.d.ts.map +1 -0
  34. package/v3/dist/adapters/a2a/auth/middleware.js +300 -0
  35. package/v3/dist/adapters/a2a/auth/middleware.js.map +1 -0
  36. package/v3/dist/adapters/a2a/auth/oauth-provider.d.ts +308 -0
  37. package/v3/dist/adapters/a2a/auth/oauth-provider.d.ts.map +1 -0
  38. package/v3/dist/adapters/a2a/auth/oauth-provider.js +573 -0
  39. package/v3/dist/adapters/a2a/auth/oauth-provider.js.map +1 -0
  40. package/v3/dist/adapters/a2a/auth/routes.d.ts +244 -0
  41. package/v3/dist/adapters/a2a/auth/routes.d.ts.map +1 -0
  42. package/v3/dist/adapters/a2a/auth/routes.js +496 -0
  43. package/v3/dist/adapters/a2a/auth/routes.js.map +1 -0
  44. package/v3/dist/adapters/a2a/auth/scopes.d.ts +219 -0
  45. package/v3/dist/adapters/a2a/auth/scopes.d.ts.map +1 -0
  46. package/v3/dist/adapters/a2a/auth/scopes.js +292 -0
  47. package/v3/dist/adapters/a2a/auth/scopes.js.map +1 -0
  48. package/v3/dist/adapters/a2a/auth/token-store.d.ts +278 -0
  49. package/v3/dist/adapters/a2a/auth/token-store.d.ts.map +1 -0
  50. package/v3/dist/adapters/a2a/auth/token-store.js +453 -0
  51. package/v3/dist/adapters/a2a/auth/token-store.js.map +1 -0
  52. package/v3/dist/adapters/a2a/discovery/agent-health.d.ts +226 -0
  53. package/v3/dist/adapters/a2a/discovery/agent-health.d.ts.map +1 -0
  54. package/v3/dist/adapters/a2a/discovery/agent-health.js +426 -0
  55. package/v3/dist/adapters/a2a/discovery/agent-health.js.map +1 -0
  56. package/v3/dist/adapters/a2a/discovery/discovery-service.d.ts +296 -0
  57. package/v3/dist/adapters/a2a/discovery/discovery-service.d.ts.map +1 -0
  58. package/v3/dist/adapters/a2a/discovery/discovery-service.js +520 -0
  59. package/v3/dist/adapters/a2a/discovery/discovery-service.js.map +1 -0
  60. package/v3/dist/adapters/a2a/discovery/file-watcher.d.ts +166 -0
  61. package/v3/dist/adapters/a2a/discovery/file-watcher.d.ts.map +1 -0
  62. package/v3/dist/adapters/a2a/discovery/file-watcher.js +385 -0
  63. package/v3/dist/adapters/a2a/discovery/file-watcher.js.map +1 -0
  64. package/v3/dist/adapters/a2a/discovery/hot-reload-service.d.ts +226 -0
  65. package/v3/dist/adapters/a2a/discovery/hot-reload-service.d.ts.map +1 -0
  66. package/v3/dist/adapters/a2a/discovery/hot-reload-service.js +433 -0
  67. package/v3/dist/adapters/a2a/discovery/hot-reload-service.js.map +1 -0
  68. package/v3/dist/adapters/a2a/discovery/index.d.ts +18 -0
  69. package/v3/dist/adapters/a2a/discovery/index.d.ts.map +1 -0
  70. package/v3/dist/adapters/a2a/discovery/index.js +54 -0
  71. package/v3/dist/adapters/a2a/discovery/index.js.map +1 -0
  72. package/v3/dist/adapters/a2a/discovery/metrics.d.ts +200 -0
  73. package/v3/dist/adapters/a2a/discovery/metrics.d.ts.map +1 -0
  74. package/v3/dist/adapters/a2a/discovery/metrics.js +371 -0
  75. package/v3/dist/adapters/a2a/discovery/metrics.js.map +1 -0
  76. package/v3/dist/adapters/a2a/discovery/routes.d.ts +184 -0
  77. package/v3/dist/adapters/a2a/discovery/routes.d.ts.map +1 -0
  78. package/v3/dist/adapters/a2a/discovery/routes.js +453 -0
  79. package/v3/dist/adapters/a2a/discovery/routes.js.map +1 -0
  80. package/v3/dist/adapters/a2a/index.d.ts +18 -0
  81. package/v3/dist/adapters/a2a/index.d.ts.map +1 -0
  82. package/v3/dist/adapters/a2a/index.js +139 -0
  83. package/v3/dist/adapters/a2a/index.js.map +1 -0
  84. package/v3/dist/adapters/a2a/jsonrpc/envelope.d.ts +312 -0
  85. package/v3/dist/adapters/a2a/jsonrpc/envelope.d.ts.map +1 -0
  86. package/v3/dist/adapters/a2a/jsonrpc/envelope.js +554 -0
  87. package/v3/dist/adapters/a2a/jsonrpc/envelope.js.map +1 -0
  88. package/v3/dist/adapters/a2a/jsonrpc/errors.d.ts +244 -0
  89. package/v3/dist/adapters/a2a/jsonrpc/errors.d.ts.map +1 -0
  90. package/v3/dist/adapters/a2a/jsonrpc/errors.js +365 -0
  91. package/v3/dist/adapters/a2a/jsonrpc/errors.js.map +1 -0
  92. package/v3/dist/adapters/a2a/jsonrpc/index.d.ts +14 -0
  93. package/v3/dist/adapters/a2a/jsonrpc/index.d.ts.map +1 -0
  94. package/v3/dist/adapters/a2a/jsonrpc/index.js +59 -0
  95. package/v3/dist/adapters/a2a/jsonrpc/index.js.map +1 -0
  96. package/v3/dist/adapters/a2a/jsonrpc/methods.d.ts +400 -0
  97. package/v3/dist/adapters/a2a/jsonrpc/methods.d.ts.map +1 -0
  98. package/v3/dist/adapters/a2a/jsonrpc/methods.js +249 -0
  99. package/v3/dist/adapters/a2a/jsonrpc/methods.js.map +1 -0
  100. package/v3/dist/adapters/a2a/notifications/index.d.ts +60 -0
  101. package/v3/dist/adapters/a2a/notifications/index.d.ts.map +1 -0
  102. package/v3/dist/adapters/a2a/notifications/index.js +99 -0
  103. package/v3/dist/adapters/a2a/notifications/index.js.map +1 -0
  104. package/v3/dist/adapters/a2a/notifications/retry-queue.d.ts +225 -0
  105. package/v3/dist/adapters/a2a/notifications/retry-queue.d.ts.map +1 -0
  106. package/v3/dist/adapters/a2a/notifications/retry-queue.js +449 -0
  107. package/v3/dist/adapters/a2a/notifications/retry-queue.js.map +1 -0
  108. package/v3/dist/adapters/a2a/notifications/signature.d.ts +133 -0
  109. package/v3/dist/adapters/a2a/notifications/signature.d.ts.map +1 -0
  110. package/v3/dist/adapters/a2a/notifications/signature.js +244 -0
  111. package/v3/dist/adapters/a2a/notifications/signature.js.map +1 -0
  112. package/v3/dist/adapters/a2a/notifications/subscription-store.d.ts +243 -0
  113. package/v3/dist/adapters/a2a/notifications/subscription-store.d.ts.map +1 -0
  114. package/v3/dist/adapters/a2a/notifications/subscription-store.js +486 -0
  115. package/v3/dist/adapters/a2a/notifications/subscription-store.js.map +1 -0
  116. package/v3/dist/adapters/a2a/notifications/webhook-service.d.ts +257 -0
  117. package/v3/dist/adapters/a2a/notifications/webhook-service.d.ts.map +1 -0
  118. package/v3/dist/adapters/a2a/notifications/webhook-service.js +542 -0
  119. package/v3/dist/adapters/a2a/notifications/webhook-service.js.map +1 -0
  120. package/v3/dist/adapters/a2a/tasks/index.d.ts +16 -0
  121. package/v3/dist/adapters/a2a/tasks/index.d.ts.map +1 -0
  122. package/v3/dist/adapters/a2a/tasks/index.js +33 -0
  123. package/v3/dist/adapters/a2a/tasks/index.js.map +1 -0
  124. package/v3/dist/adapters/a2a/tasks/task-manager.d.ts +306 -0
  125. package/v3/dist/adapters/a2a/tasks/task-manager.d.ts.map +1 -0
  126. package/v3/dist/adapters/a2a/tasks/task-manager.js +562 -0
  127. package/v3/dist/adapters/a2a/tasks/task-manager.js.map +1 -0
  128. package/v3/dist/adapters/a2a/tasks/task-router.d.ts +270 -0
  129. package/v3/dist/adapters/a2a/tasks/task-router.d.ts.map +1 -0
  130. package/v3/dist/adapters/a2a/tasks/task-router.js +574 -0
  131. package/v3/dist/adapters/a2a/tasks/task-router.js.map +1 -0
  132. package/v3/dist/adapters/a2a/tasks/task-store.d.ts +251 -0
  133. package/v3/dist/adapters/a2a/tasks/task-store.d.ts.map +1 -0
  134. package/v3/dist/adapters/a2a/tasks/task-store.js +468 -0
  135. package/v3/dist/adapters/a2a/tasks/task-store.js.map +1 -0
  136. package/v3/dist/adapters/a2ui/accessibility/aria-attributes.d.ts +294 -0
  137. package/v3/dist/adapters/a2ui/accessibility/aria-attributes.d.ts.map +1 -0
  138. package/v3/dist/adapters/a2ui/accessibility/aria-attributes.js +447 -0
  139. package/v3/dist/adapters/a2ui/accessibility/aria-attributes.js.map +1 -0
  140. package/v3/dist/adapters/a2ui/accessibility/index.d.ts +83 -0
  141. package/v3/dist/adapters/a2ui/accessibility/index.d.ts.map +1 -0
  142. package/v3/dist/adapters/a2ui/accessibility/index.js +155 -0
  143. package/v3/dist/adapters/a2ui/accessibility/index.js.map +1 -0
  144. package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.d.ts +177 -0
  145. package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.d.ts.map +1 -0
  146. package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.js +638 -0
  147. package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.js.map +1 -0
  148. package/v3/dist/adapters/a2ui/accessibility/wcag-validator.d.ts +186 -0
  149. package/v3/dist/adapters/a2ui/accessibility/wcag-validator.d.ts.map +1 -0
  150. package/v3/dist/adapters/a2ui/accessibility/wcag-validator.js +816 -0
  151. package/v3/dist/adapters/a2ui/accessibility/wcag-validator.js.map +1 -0
  152. package/v3/dist/adapters/a2ui/catalog/component-schemas.d.ts +227 -0
  153. package/v3/dist/adapters/a2ui/catalog/component-schemas.d.ts.map +1 -0
  154. package/v3/dist/adapters/a2ui/catalog/component-schemas.js +1090 -0
  155. package/v3/dist/adapters/a2ui/catalog/component-schemas.js.map +1 -0
  156. package/v3/dist/adapters/a2ui/catalog/index.d.ts +55 -0
  157. package/v3/dist/adapters/a2ui/catalog/index.d.ts.map +1 -0
  158. package/v3/dist/adapters/a2ui/catalog/index.js +100 -0
  159. package/v3/dist/adapters/a2ui/catalog/index.js.map +1 -0
  160. package/v3/dist/adapters/a2ui/catalog/qe-catalog.d.ts +456 -0
  161. package/v3/dist/adapters/a2ui/catalog/qe-catalog.d.ts.map +1 -0
  162. package/v3/dist/adapters/a2ui/catalog/qe-catalog.js +413 -0
  163. package/v3/dist/adapters/a2ui/catalog/qe-catalog.js.map +1 -0
  164. package/v3/dist/adapters/a2ui/catalog/standard-catalog.d.ts +581 -0
  165. package/v3/dist/adapters/a2ui/catalog/standard-catalog.d.ts.map +1 -0
  166. package/v3/dist/adapters/a2ui/catalog/standard-catalog.js +409 -0
  167. package/v3/dist/adapters/a2ui/catalog/standard-catalog.js.map +1 -0
  168. package/v3/dist/adapters/a2ui/data/bound-value.d.ts +252 -0
  169. package/v3/dist/adapters/a2ui/data/bound-value.d.ts.map +1 -0
  170. package/v3/dist/adapters/a2ui/data/bound-value.js +403 -0
  171. package/v3/dist/adapters/a2ui/data/bound-value.js.map +1 -0
  172. package/v3/dist/adapters/a2ui/data/index.d.ts +14 -0
  173. package/v3/dist/adapters/a2ui/data/index.d.ts.map +1 -0
  174. package/v3/dist/adapters/a2ui/data/index.js +41 -0
  175. package/v3/dist/adapters/a2ui/data/index.js.map +1 -0
  176. package/v3/dist/adapters/a2ui/data/json-pointer-resolver.d.ts +187 -0
  177. package/v3/dist/adapters/a2ui/data/json-pointer-resolver.d.ts.map +1 -0
  178. package/v3/dist/adapters/a2ui/data/json-pointer-resolver.js +425 -0
  179. package/v3/dist/adapters/a2ui/data/json-pointer-resolver.js.map +1 -0
  180. package/v3/dist/adapters/a2ui/data/reactive-store.d.ts +241 -0
  181. package/v3/dist/adapters/a2ui/data/reactive-store.d.ts.map +1 -0
  182. package/v3/dist/adapters/a2ui/data/reactive-store.js +461 -0
  183. package/v3/dist/adapters/a2ui/data/reactive-store.js.map +1 -0
  184. package/v3/dist/adapters/a2ui/index.d.ts +17 -0
  185. package/v3/dist/adapters/a2ui/index.d.ts.map +1 -0
  186. package/v3/dist/adapters/a2ui/index.js +119 -0
  187. package/v3/dist/adapters/a2ui/index.js.map +1 -0
  188. package/v3/dist/adapters/a2ui/integration/agui-sync.d.ts +259 -0
  189. package/v3/dist/adapters/a2ui/integration/agui-sync.d.ts.map +1 -0
  190. package/v3/dist/adapters/a2ui/integration/agui-sync.js +559 -0
  191. package/v3/dist/adapters/a2ui/integration/agui-sync.js.map +1 -0
  192. package/v3/dist/adapters/a2ui/integration/index.d.ts +11 -0
  193. package/v3/dist/adapters/a2ui/integration/index.d.ts.map +1 -0
  194. package/v3/dist/adapters/a2ui/integration/index.js +23 -0
  195. package/v3/dist/adapters/a2ui/integration/index.js.map +1 -0
  196. package/v3/dist/adapters/a2ui/integration/surface-state-bridge.d.ts +209 -0
  197. package/v3/dist/adapters/a2ui/integration/surface-state-bridge.d.ts.map +1 -0
  198. package/v3/dist/adapters/a2ui/integration/surface-state-bridge.js +545 -0
  199. package/v3/dist/adapters/a2ui/integration/surface-state-bridge.js.map +1 -0
  200. package/v3/dist/adapters/a2ui/renderer/component-builder.d.ts +227 -0
  201. package/v3/dist/adapters/a2ui/renderer/component-builder.d.ts.map +1 -0
  202. package/v3/dist/adapters/a2ui/renderer/component-builder.js +488 -0
  203. package/v3/dist/adapters/a2ui/renderer/component-builder.js.map +1 -0
  204. package/v3/dist/adapters/a2ui/renderer/index.d.ts +16 -0
  205. package/v3/dist/adapters/a2ui/renderer/index.d.ts.map +1 -0
  206. package/v3/dist/adapters/a2ui/renderer/index.js +50 -0
  207. package/v3/dist/adapters/a2ui/renderer/index.js.map +1 -0
  208. package/v3/dist/adapters/a2ui/renderer/message-types.d.ts +299 -0
  209. package/v3/dist/adapters/a2ui/renderer/message-types.d.ts.map +1 -0
  210. package/v3/dist/adapters/a2ui/renderer/message-types.js +187 -0
  211. package/v3/dist/adapters/a2ui/renderer/message-types.js.map +1 -0
  212. package/v3/dist/adapters/a2ui/renderer/surface-generator.d.ts +210 -0
  213. package/v3/dist/adapters/a2ui/renderer/surface-generator.d.ts.map +1 -0
  214. package/v3/dist/adapters/a2ui/renderer/surface-generator.js +586 -0
  215. package/v3/dist/adapters/a2ui/renderer/surface-generator.js.map +1 -0
  216. package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.d.ts +149 -0
  217. package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.d.ts.map +1 -0
  218. package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.js +414 -0
  219. package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.js.map +1 -0
  220. package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.d.ts +95 -0
  221. package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.d.ts.map +1 -0
  222. package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.js +231 -0
  223. package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.js.map +1 -0
  224. package/v3/dist/adapters/a2ui/renderer/templates/index.d.ts +12 -0
  225. package/v3/dist/adapters/a2ui/renderer/templates/index.d.ts.map +1 -0
  226. package/v3/dist/adapters/a2ui/renderer/templates/index.js +16 -0
  227. package/v3/dist/adapters/a2ui/renderer/templates/index.js.map +1 -0
  228. package/v3/dist/adapters/a2ui/renderer/templates/security-surface.d.ts +121 -0
  229. package/v3/dist/adapters/a2ui/renderer/templates/security-surface.d.ts.map +1 -0
  230. package/v3/dist/adapters/a2ui/renderer/templates/security-surface.js +367 -0
  231. package/v3/dist/adapters/a2ui/renderer/templates/security-surface.js.map +1 -0
  232. package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.d.ts +104 -0
  233. package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.d.ts.map +1 -0
  234. package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.js +294 -0
  235. package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.js.map +1 -0
  236. package/v3/dist/adapters/ag-ui/backpressure-handler.d.ts +201 -0
  237. package/v3/dist/adapters/ag-ui/backpressure-handler.d.ts.map +1 -0
  238. package/v3/dist/adapters/ag-ui/backpressure-handler.js +399 -0
  239. package/v3/dist/adapters/ag-ui/backpressure-handler.js.map +1 -0
  240. package/v3/dist/adapters/ag-ui/event-adapter.d.ts +360 -0
  241. package/v3/dist/adapters/ag-ui/event-adapter.d.ts.map +1 -0
  242. package/v3/dist/adapters/ag-ui/event-adapter.js +1083 -0
  243. package/v3/dist/adapters/ag-ui/event-adapter.js.map +1 -0
  244. package/v3/dist/adapters/ag-ui/event-batcher.d.ts +242 -0
  245. package/v3/dist/adapters/ag-ui/event-batcher.d.ts.map +1 -0
  246. package/v3/dist/adapters/ag-ui/event-batcher.js +444 -0
  247. package/v3/dist/adapters/ag-ui/event-batcher.js.map +1 -0
  248. package/v3/dist/adapters/ag-ui/event-types.d.ts +450 -0
  249. package/v3/dist/adapters/ag-ui/event-types.d.ts.map +1 -0
  250. package/v3/dist/adapters/ag-ui/event-types.js +173 -0
  251. package/v3/dist/adapters/ag-ui/event-types.js.map +1 -0
  252. package/v3/dist/adapters/ag-ui/index.d.ts +17 -0
  253. package/v3/dist/adapters/ag-ui/index.d.ts.map +1 -0
  254. package/v3/dist/adapters/ag-ui/index.js +47 -0
  255. package/v3/dist/adapters/ag-ui/index.js.map +1 -0
  256. package/v3/dist/adapters/ag-ui/json-patch-utils.d.ts +136 -0
  257. package/v3/dist/adapters/ag-ui/json-patch-utils.d.ts.map +1 -0
  258. package/v3/dist/adapters/ag-ui/json-patch-utils.js +574 -0
  259. package/v3/dist/adapters/ag-ui/json-patch-utils.js.map +1 -0
  260. package/v3/dist/adapters/ag-ui/json-patch.d.ts +241 -0
  261. package/v3/dist/adapters/ag-ui/json-patch.d.ts.map +1 -0
  262. package/v3/dist/adapters/ag-ui/json-patch.js +726 -0
  263. package/v3/dist/adapters/ag-ui/json-patch.js.map +1 -0
  264. package/v3/dist/adapters/ag-ui/state-delta-cache.d.ts +218 -0
  265. package/v3/dist/adapters/ag-ui/state-delta-cache.d.ts.map +1 -0
  266. package/v3/dist/adapters/ag-ui/state-delta-cache.js +422 -0
  267. package/v3/dist/adapters/ag-ui/state-delta-cache.js.map +1 -0
  268. package/v3/dist/adapters/ag-ui/state-manager.d.ts +249 -0
  269. package/v3/dist/adapters/ag-ui/state-manager.d.ts.map +1 -0
  270. package/v3/dist/adapters/ag-ui/state-manager.js +511 -0
  271. package/v3/dist/adapters/ag-ui/state-manager.js.map +1 -0
  272. package/v3/dist/adapters/ag-ui/stream-controller.d.ts +195 -0
  273. package/v3/dist/adapters/ag-ui/stream-controller.d.ts.map +1 -0
  274. package/v3/dist/adapters/ag-ui/stream-controller.js +481 -0
  275. package/v3/dist/adapters/ag-ui/stream-controller.js.map +1 -0
  276. package/v3/dist/adapters/index.d.ts +4 -0
  277. package/v3/dist/adapters/index.d.ts.map +1 -1
  278. package/v3/dist/adapters/index.js +89 -0
  279. package/v3/dist/adapters/index.js.map +1 -1
  280. package/v3/dist/cli/bundle.js +1507 -425
  281. package/v3/dist/coordination/consensus/providers/claude-provider.js +1 -1
  282. package/v3/dist/coordination/consensus/providers/gemini-provider.js +1 -1
  283. package/v3/dist/coordination/consensus/providers/openai-provider.js +1 -1
  284. package/v3/dist/init/init-wizard.d.ts.map +1 -1
  285. package/v3/dist/init/init-wizard.js +19 -4
  286. package/v3/dist/init/init-wizard.js.map +1 -1
  287. package/v3/dist/init/migration/config-migrator.d.ts.map +1 -1
  288. package/v3/dist/init/migration/config-migrator.js +15 -1
  289. package/v3/dist/init/migration/config-migrator.js.map +1 -1
  290. package/v3/dist/init/phases/05-learning.js +1 -1
  291. package/v3/dist/init/phases/05-learning.js.map +1 -1
  292. package/v3/dist/init/self-configurator.d.ts +7 -0
  293. package/v3/dist/init/self-configurator.d.ts.map +1 -1
  294. package/v3/dist/init/self-configurator.js +23 -27
  295. package/v3/dist/init/self-configurator.js.map +1 -1
  296. package/v3/dist/integrations/ruvector/interfaces.js +1 -1
  297. package/v3/dist/integrations/ruvector/interfaces.js.map +1 -1
  298. package/v3/dist/kernel/index.d.ts +1 -1
  299. package/v3/dist/kernel/index.d.ts.map +1 -1
  300. package/v3/dist/kernel/index.js +3 -1
  301. package/v3/dist/kernel/index.js.map +1 -1
  302. package/v3/dist/kernel/plugin-loader.d.ts.map +1 -1
  303. package/v3/dist/kernel/plugin-loader.js +6 -1
  304. package/v3/dist/kernel/plugin-loader.js.map +1 -1
  305. package/v3/dist/kernel/unified-memory.d.ts +123 -0
  306. package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
  307. package/v3/dist/kernel/unified-memory.js +258 -2
  308. package/v3/dist/kernel/unified-memory.js.map +1 -1
  309. package/v3/dist/learning/qe-unified-memory.js +1 -1
  310. package/v3/dist/learning/qe-unified-memory.js.map +1 -1
  311. package/v3/dist/learning/real-qe-reasoning-bank.js +2 -2
  312. package/v3/dist/learning/real-qe-reasoning-bank.js.map +1 -1
  313. package/v3/dist/learning/sqlite-persistence.d.ts +1 -1
  314. package/v3/dist/learning/sqlite-persistence.js +1 -1
  315. package/v3/dist/learning/sqlite-persistence.js.map +1 -1
  316. package/v3/dist/learning/v2-to-v3-migration.d.ts +2 -2
  317. package/v3/dist/learning/v2-to-v3-migration.d.ts.map +1 -1
  318. package/v3/dist/learning/v2-to-v3-migration.js +2 -2
  319. package/v3/dist/learning/v2-to-v3-migration.js.map +1 -1
  320. package/v3/dist/mcp/bundle.js +63075 -53304
  321. package/v3/dist/mcp/entry.d.ts +5 -0
  322. package/v3/dist/mcp/entry.d.ts.map +1 -1
  323. package/v3/dist/mcp/entry.js +36 -0
  324. package/v3/dist/mcp/entry.js.map +1 -1
  325. package/v3/dist/mcp/http-server.d.ts +95 -0
  326. package/v3/dist/mcp/http-server.d.ts.map +1 -0
  327. package/v3/dist/mcp/http-server.js +833 -0
  328. package/v3/dist/mcp/http-server.js.map +1 -0
  329. package/v3/dist/mcp/protocol-server.d.ts +6 -0
  330. package/v3/dist/mcp/protocol-server.d.ts.map +1 -1
  331. package/v3/dist/mcp/protocol-server.js +40 -0
  332. package/v3/dist/mcp/protocol-server.js.map +1 -1
  333. package/v3/dist/mcp/transport/index.d.ts +25 -3
  334. package/v3/dist/mcp/transport/index.d.ts.map +1 -1
  335. package/v3/dist/mcp/transport/index.js +22 -4
  336. package/v3/dist/mcp/transport/index.js.map +1 -1
  337. package/v3/dist/mcp/transport/sse/connection-manager.d.ts +84 -0
  338. package/v3/dist/mcp/transport/sse/connection-manager.d.ts.map +1 -0
  339. package/v3/dist/mcp/transport/sse/connection-manager.js +271 -0
  340. package/v3/dist/mcp/transport/sse/connection-manager.js.map +1 -0
  341. package/v3/dist/mcp/transport/sse/index.d.ts +10 -0
  342. package/v3/dist/mcp/transport/sse/index.d.ts.map +1 -0
  343. package/v3/dist/mcp/transport/sse/index.js +15 -0
  344. package/v3/dist/mcp/transport/sse/index.js.map +1 -0
  345. package/v3/dist/mcp/transport/sse/sse-transport.d.ts +56 -0
  346. package/v3/dist/mcp/transport/sse/sse-transport.d.ts.map +1 -0
  347. package/v3/dist/mcp/transport/sse/sse-transport.js +381 -0
  348. package/v3/dist/mcp/transport/sse/sse-transport.js.map +1 -0
  349. package/v3/dist/mcp/transport/sse/types.d.ts +237 -0
  350. package/v3/dist/mcp/transport/sse/types.d.ts.map +1 -0
  351. package/v3/dist/mcp/transport/sse/types.js +37 -0
  352. package/v3/dist/mcp/transport/sse/types.js.map +1 -0
  353. package/v3/dist/mcp/transport/websocket/connection-manager.d.ts +143 -0
  354. package/v3/dist/mcp/transport/websocket/connection-manager.d.ts.map +1 -0
  355. package/v3/dist/mcp/transport/websocket/connection-manager.js +522 -0
  356. package/v3/dist/mcp/transport/websocket/connection-manager.js.map +1 -0
  357. package/v3/dist/mcp/transport/websocket/index.d.ts +10 -0
  358. package/v3/dist/mcp/transport/websocket/index.d.ts.map +1 -0
  359. package/v3/dist/mcp/transport/websocket/index.js +19 -0
  360. package/v3/dist/mcp/transport/websocket/index.js.map +1 -0
  361. package/v3/dist/mcp/transport/websocket/types.d.ts +354 -0
  362. package/v3/dist/mcp/transport/websocket/types.d.ts.map +1 -0
  363. package/v3/dist/mcp/transport/websocket/types.js +49 -0
  364. package/v3/dist/mcp/transport/websocket/types.js.map +1 -0
  365. package/v3/dist/mcp/transport/websocket/websocket-transport.d.ts +77 -0
  366. package/v3/dist/mcp/transport/websocket/websocket-transport.d.ts.map +1 -0
  367. package/v3/dist/mcp/transport/websocket/websocket-transport.js +622 -0
  368. package/v3/dist/mcp/transport/websocket/websocket-transport.js.map +1 -0
  369. package/v3/dist/memory/crdt/convergence-tracker.d.ts +59 -0
  370. package/v3/dist/memory/crdt/convergence-tracker.d.ts.map +1 -0
  371. package/v3/dist/memory/crdt/convergence-tracker.js +325 -0
  372. package/v3/dist/memory/crdt/convergence-tracker.js.map +1 -0
  373. package/v3/dist/memory/crdt/crdt-store.d.ts +55 -0
  374. package/v3/dist/memory/crdt/crdt-store.d.ts.map +1 -0
  375. package/v3/dist/memory/crdt/crdt-store.js +582 -0
  376. package/v3/dist/memory/crdt/crdt-store.js.map +1 -0
  377. package/v3/dist/memory/crdt/g-counter.d.ts +47 -0
  378. package/v3/dist/memory/crdt/g-counter.d.ts.map +1 -0
  379. package/v3/dist/memory/crdt/g-counter.js +134 -0
  380. package/v3/dist/memory/crdt/g-counter.js.map +1 -0
  381. package/v3/dist/memory/crdt/index.d.ts +52 -0
  382. package/v3/dist/memory/crdt/index.d.ts.map +1 -0
  383. package/v3/dist/memory/crdt/index.js +66 -0
  384. package/v3/dist/memory/crdt/index.js.map +1 -0
  385. package/v3/dist/memory/crdt/lww-register.d.ts +40 -0
  386. package/v3/dist/memory/crdt/lww-register.d.ts.map +1 -0
  387. package/v3/dist/memory/crdt/lww-register.js +133 -0
  388. package/v3/dist/memory/crdt/lww-register.js.map +1 -0
  389. package/v3/dist/memory/crdt/or-set.d.ts +62 -0
  390. package/v3/dist/memory/crdt/or-set.d.ts.map +1 -0
  391. package/v3/dist/memory/crdt/or-set.js +336 -0
  392. package/v3/dist/memory/crdt/or-set.js.map +1 -0
  393. package/v3/dist/memory/crdt/pn-counter.d.ts +53 -0
  394. package/v3/dist/memory/crdt/pn-counter.d.ts.map +1 -0
  395. package/v3/dist/memory/crdt/pn-counter.js +147 -0
  396. package/v3/dist/memory/crdt/pn-counter.js.map +1 -0
  397. package/v3/dist/memory/crdt/types.d.ts +397 -0
  398. package/v3/dist/memory/crdt/types.d.ts.map +1 -0
  399. package/v3/dist/memory/crdt/types.js +12 -0
  400. package/v3/dist/memory/crdt/types.js.map +1 -0
  401. package/v3/dist/memory/index.d.ts +5 -2
  402. package/v3/dist/memory/index.d.ts.map +1 -1
  403. package/v3/dist/memory/index.js +5 -2
  404. package/v3/dist/memory/index.js.map +1 -1
  405. package/v3/dist/performance/benchmarks.d.ts +215 -0
  406. package/v3/dist/performance/benchmarks.d.ts.map +1 -0
  407. package/v3/dist/performance/benchmarks.js +516 -0
  408. package/v3/dist/performance/benchmarks.js.map +1 -0
  409. package/v3/dist/performance/ci-gates.d.ts +149 -0
  410. package/v3/dist/performance/ci-gates.d.ts.map +1 -0
  411. package/v3/dist/performance/ci-gates.js +425 -0
  412. package/v3/dist/performance/ci-gates.js.map +1 -0
  413. package/v3/dist/performance/index.d.ts +18 -0
  414. package/v3/dist/performance/index.d.ts.map +1 -0
  415. package/v3/dist/performance/index.js +26 -0
  416. package/v3/dist/performance/index.js.map +1 -0
  417. package/v3/dist/performance/optimizer.d.ts +323 -0
  418. package/v3/dist/performance/optimizer.d.ts.map +1 -0
  419. package/v3/dist/performance/optimizer.js +592 -0
  420. package/v3/dist/performance/optimizer.js.map +1 -0
  421. package/v3/dist/performance/profiler.d.ts +195 -0
  422. package/v3/dist/performance/profiler.d.ts.map +1 -0
  423. package/v3/dist/performance/profiler.js +369 -0
  424. package/v3/dist/performance/profiler.js.map +1 -0
  425. package/v3/dist/performance/run-gates.d.ts +23 -0
  426. package/v3/dist/performance/run-gates.d.ts.map +1 -0
  427. package/v3/dist/performance/run-gates.js +122 -0
  428. package/v3/dist/performance/run-gates.js.map +1 -0
  429. package/v3/dist/sync/claude-flow-bridge.d.ts +1 -1
  430. package/v3/dist/sync/claude-flow-bridge.js +1 -1
  431. package/v3/dist/sync/interfaces.d.ts +6 -0
  432. package/v3/dist/sync/interfaces.d.ts.map +1 -1
  433. package/v3/dist/sync/interfaces.js +34 -47
  434. package/v3/dist/sync/interfaces.js.map +1 -1
  435. package/v3/dist/sync/readers/sqlite-reader.d.ts +1 -1
  436. package/v3/dist/sync/readers/sqlite-reader.js +1 -1
  437. package/v3/dist/testing/index.d.ts +6 -0
  438. package/v3/dist/testing/index.d.ts.map +1 -0
  439. package/v3/dist/testing/index.js +7 -0
  440. package/v3/dist/testing/index.js.map +1 -0
  441. package/v3/dist/testing/load/agent-load-tester.d.ts +221 -0
  442. package/v3/dist/testing/load/agent-load-tester.d.ts.map +1 -0
  443. package/v3/dist/testing/load/agent-load-tester.js +566 -0
  444. package/v3/dist/testing/load/agent-load-tester.js.map +1 -0
  445. package/v3/dist/testing/load/bottleneck-analyzer.d.ts +150 -0
  446. package/v3/dist/testing/load/bottleneck-analyzer.d.ts.map +1 -0
  447. package/v3/dist/testing/load/bottleneck-analyzer.js +442 -0
  448. package/v3/dist/testing/load/bottleneck-analyzer.js.map +1 -0
  449. package/v3/dist/testing/load/index.d.ts +17 -0
  450. package/v3/dist/testing/load/index.d.ts.map +1 -0
  451. package/v3/dist/testing/load/index.js +23 -0
  452. package/v3/dist/testing/load/index.js.map +1 -0
  453. package/v3/dist/testing/load/metrics-collector.d.ts +275 -0
  454. package/v3/dist/testing/load/metrics-collector.d.ts.map +1 -0
  455. package/v3/dist/testing/load/metrics-collector.js +475 -0
  456. package/v3/dist/testing/load/metrics-collector.js.map +1 -0
  457. package/v3/package.json +5 -1
@@ -0,0 +1,195 @@
1
+ /**
2
+ * AG-UI Stream Controller
3
+ *
4
+ * Provides flow control and cancellation handling for AG-UI event streaming.
5
+ * Wraps EventAdapter with AbortSignal support, token buffering, and graceful shutdown.
6
+ *
7
+ * @module adapters/ag-ui/stream-controller
8
+ */
9
+ import { EventEmitter } from 'events';
10
+ import type { AGUIEvent } from './event-types.js';
11
+ import type { EventAdapter } from './event-adapter.js';
12
+ import type { BackpressureHandler } from './backpressure-handler.js';
13
+ /**
14
+ * Stream controller configuration
15
+ */
16
+ export interface StreamControllerConfig {
17
+ /** EventAdapter instance to wrap */
18
+ adapter: EventAdapter;
19
+ /** AbortSignal for cancellation */
20
+ signal?: AbortSignal;
21
+ /** Callback invoked when stream is cancelled */
22
+ onCancel?: () => Promise<void> | void;
23
+ /** Callback invoked when stream ends */
24
+ onEnd?: (reason: 'success' | 'cancelled' | 'error') => Promise<void> | void;
25
+ /** Callback invoked on stream error */
26
+ onError?: (error: Error) => Promise<void> | void;
27
+ /** Token buffering interval in milliseconds (default: 50ms for 20fps) */
28
+ bufferInterval?: number;
29
+ /** Maximum buffer size before flushing (default: 10) */
30
+ maxBufferSize?: number;
31
+ /** Optional backpressure handler */
32
+ backpressureHandler?: BackpressureHandler;
33
+ /** Whether to automatically emit RUN_FINISHED on cancel */
34
+ emitFinishOnCancel?: boolean;
35
+ }
36
+ /**
37
+ * Stream state
38
+ */
39
+ export type StreamState = 'idle' | 'streaming' | 'paused' | 'cancelled' | 'ended' | 'error';
40
+ /**
41
+ * Stream metrics
42
+ */
43
+ export interface StreamMetrics {
44
+ /** Total events processed */
45
+ totalEvents: number;
46
+ /** Events buffered and flushed */
47
+ bufferedEvents: number;
48
+ /** Events dropped (if backpressure applied) */
49
+ droppedEvents: number;
50
+ /** Average latency in milliseconds */
51
+ averageLatencyMs: number;
52
+ /** Peak latency in milliseconds */
53
+ peakLatencyMs: number;
54
+ /** Stream start time */
55
+ startTime: number;
56
+ /** Stream duration in milliseconds */
57
+ durationMs: number;
58
+ /** Buffer flush count */
59
+ flushCount: number;
60
+ }
61
+ /**
62
+ * AG-UI Stream Controller
63
+ *
64
+ * Wraps an EventAdapter to provide:
65
+ * - AbortController/AbortSignal based cancellation
66
+ * - Token buffering at configurable intervals
67
+ * - Graceful shutdown on client disconnect
68
+ * - Integration with backpressure handling
69
+ */
70
+ export declare class StreamController extends EventEmitter {
71
+ private readonly adapter;
72
+ private readonly signal?;
73
+ private readonly onCancelCallback?;
74
+ private readonly onEndCallback?;
75
+ private readonly onErrorCallback?;
76
+ private readonly bufferInterval;
77
+ private readonly maxBufferSize;
78
+ private readonly backpressureHandler?;
79
+ private readonly emitFinishOnCancel;
80
+ private state;
81
+ private buffer;
82
+ private flushTimer;
83
+ private abortHandler;
84
+ private metrics;
85
+ constructor(config: StreamControllerConfig);
86
+ /**
87
+ * Start the stream
88
+ */
89
+ start(): void;
90
+ /**
91
+ * Pause the stream (buffers events but doesn't emit)
92
+ */
93
+ pause(): void;
94
+ /**
95
+ * Resume the stream
96
+ */
97
+ resume(): void;
98
+ /**
99
+ * Cancel the stream
100
+ */
101
+ cancel(): Promise<void>;
102
+ /**
103
+ * End the stream gracefully
104
+ */
105
+ end(reason?: 'success' | 'error'): Promise<void>;
106
+ /**
107
+ * Handle error in stream
108
+ */
109
+ handleError(error: Error): Promise<void>;
110
+ /**
111
+ * Push an event to the stream
112
+ * Returns false if backpressure is applied and event should not be produced
113
+ */
114
+ push(event: AGUIEvent): boolean;
115
+ /**
116
+ * Flush the event buffer
117
+ */
118
+ flush(): void;
119
+ /**
120
+ * Get current stream state
121
+ */
122
+ getState(): StreamState;
123
+ /**
124
+ * Check if stream is active
125
+ */
126
+ isActive(): boolean;
127
+ /**
128
+ * Check if stream is cancelled
129
+ */
130
+ isCancelled(): boolean;
131
+ /**
132
+ * Get stream metrics
133
+ */
134
+ getMetrics(): Readonly<StreamMetrics>;
135
+ /**
136
+ * Get buffer size
137
+ */
138
+ getBufferSize(): number;
139
+ /**
140
+ * Get the wrapped adapter
141
+ */
142
+ getAdapter(): EventAdapter;
143
+ /**
144
+ * Dispose of the stream controller
145
+ */
146
+ dispose(): void;
147
+ private setupSignalHandler;
148
+ private removeAbortHandler;
149
+ private setupAdapterListeners;
150
+ private scheduleFlush;
151
+ private clearFlushTimer;
152
+ private initializeMetrics;
153
+ private updateLatencyMetrics;
154
+ }
155
+ /**
156
+ * Create a new StreamController instance
157
+ *
158
+ * @param config - Stream controller configuration
159
+ * @returns StreamController instance
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const controller = new AbortController();
164
+ * const stream = createStreamController({
165
+ * adapter: eventAdapter,
166
+ * signal: controller.signal,
167
+ * onCancel: async () => {
168
+ * await agent.abort();
169
+ * }
170
+ * });
171
+ *
172
+ * stream.start();
173
+ *
174
+ * // Later, to cancel:
175
+ * controller.abort();
176
+ * // -> onCancel called
177
+ * // -> RUN_FINISHED emitted with reason: 'cancelled'
178
+ * // -> Stream closed gracefully
179
+ * ```
180
+ */
181
+ export declare function createStreamController(config: StreamControllerConfig): StreamController;
182
+ /**
183
+ * Create an async iterator from a stream controller
184
+ * Allows using for-await-of syntax to consume events
185
+ */
186
+ export declare function streamEvents(controller: StreamController): AsyncGenerator<AGUIEvent, void, unknown>;
187
+ /**
188
+ * Create a transform stream from a stream controller
189
+ * For integration with Node.js streams API
190
+ */
191
+ export declare function createEventTransform(controller: StreamController): {
192
+ readable: ReadableStream<AGUIEvent>;
193
+ writable: WritableStream<AGUIEvent>;
194
+ };
195
+ //# sourceMappingURL=stream-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-controller.d.ts","sourceRoot":"","sources":["../../../src/adapters/ag-ui/stream-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,481 @@
1
+ /**
2
+ * AG-UI Stream Controller
3
+ *
4
+ * Provides flow control and cancellation handling for AG-UI event streaming.
5
+ * Wraps EventAdapter with AbortSignal support, token buffering, and graceful shutdown.
6
+ *
7
+ * @module adapters/ag-ui/stream-controller
8
+ */
9
+ import { EventEmitter } from 'events';
10
+ /**
11
+ * Default configuration values
12
+ */
13
+ const DEFAULT_CONFIG = {
14
+ bufferInterval: 50, // 50ms = 20fps
15
+ maxBufferSize: 10,
16
+ emitFinishOnCancel: true,
17
+ };
18
+ // ============================================================================
19
+ // Stream Controller Implementation
20
+ // ============================================================================
21
+ /**
22
+ * AG-UI Stream Controller
23
+ *
24
+ * Wraps an EventAdapter to provide:
25
+ * - AbortController/AbortSignal based cancellation
26
+ * - Token buffering at configurable intervals
27
+ * - Graceful shutdown on client disconnect
28
+ * - Integration with backpressure handling
29
+ */
30
+ export class StreamController extends EventEmitter {
31
+ adapter;
32
+ signal;
33
+ onCancelCallback;
34
+ onEndCallback;
35
+ onErrorCallback;
36
+ bufferInterval;
37
+ maxBufferSize;
38
+ backpressureHandler;
39
+ emitFinishOnCancel;
40
+ state = 'idle';
41
+ buffer = [];
42
+ flushTimer = null;
43
+ abortHandler = null;
44
+ metrics;
45
+ constructor(config) {
46
+ super();
47
+ this.adapter = config.adapter;
48
+ this.signal = config.signal;
49
+ this.onCancelCallback = config.onCancel;
50
+ this.onEndCallback = config.onEnd;
51
+ this.onErrorCallback = config.onError;
52
+ this.bufferInterval = config.bufferInterval ?? DEFAULT_CONFIG.bufferInterval;
53
+ this.maxBufferSize = config.maxBufferSize ?? DEFAULT_CONFIG.maxBufferSize;
54
+ this.backpressureHandler = config.backpressureHandler;
55
+ this.emitFinishOnCancel = config.emitFinishOnCancel ?? DEFAULT_CONFIG.emitFinishOnCancel;
56
+ this.metrics = this.initializeMetrics();
57
+ this.setupSignalHandler();
58
+ this.setupAdapterListeners();
59
+ }
60
+ // ============================================================================
61
+ // Lifecycle Methods
62
+ // ============================================================================
63
+ /**
64
+ * Start the stream
65
+ */
66
+ start() {
67
+ if (this.state !== 'idle') {
68
+ throw new Error(`Cannot start stream in state: ${this.state}`);
69
+ }
70
+ this.state = 'streaming';
71
+ this.metrics.startTime = Date.now();
72
+ this.emit('start');
73
+ }
74
+ /**
75
+ * Pause the stream (buffers events but doesn't emit)
76
+ */
77
+ pause() {
78
+ if (this.state !== 'streaming') {
79
+ return;
80
+ }
81
+ this.state = 'paused';
82
+ this.emit('pause');
83
+ }
84
+ /**
85
+ * Resume the stream
86
+ */
87
+ resume() {
88
+ if (this.state !== 'paused') {
89
+ return;
90
+ }
91
+ this.state = 'streaming';
92
+ this.emit('resume');
93
+ // Flush any buffered events
94
+ this.flush();
95
+ }
96
+ /**
97
+ * Cancel the stream
98
+ */
99
+ async cancel() {
100
+ if (this.state === 'cancelled' || this.state === 'ended' || this.state === 'error') {
101
+ return;
102
+ }
103
+ this.state = 'cancelled';
104
+ this.clearFlushTimer();
105
+ // Call cancel callback
106
+ if (this.onCancelCallback) {
107
+ try {
108
+ await this.onCancelCallback();
109
+ }
110
+ catch (error) {
111
+ this.emit('error', error);
112
+ }
113
+ }
114
+ // Emit RUN_FINISHED with cancelled outcome
115
+ if (this.emitFinishOnCancel) {
116
+ const runId = this.adapter.getCurrentRunId();
117
+ if (runId) {
118
+ const finishEvent = this.adapter.emitRunFinished(runId, 'cancelled');
119
+ this.emit('event', finishEvent);
120
+ }
121
+ }
122
+ // Flush remaining buffer
123
+ this.flush();
124
+ this.emit('cancel');
125
+ // Call end callback
126
+ if (this.onEndCallback) {
127
+ try {
128
+ await this.onEndCallback('cancelled');
129
+ }
130
+ catch (error) {
131
+ this.emit('error', error);
132
+ }
133
+ }
134
+ }
135
+ /**
136
+ * End the stream gracefully
137
+ */
138
+ async end(reason = 'success') {
139
+ if (this.state === 'cancelled' || this.state === 'ended' || this.state === 'error') {
140
+ return;
141
+ }
142
+ this.state = reason === 'error' ? 'error' : 'ended';
143
+ this.clearFlushTimer();
144
+ // Flush remaining buffer
145
+ this.flush();
146
+ this.metrics.durationMs = Date.now() - this.metrics.startTime;
147
+ this.emit('end', reason);
148
+ // Call end callback
149
+ if (this.onEndCallback) {
150
+ try {
151
+ await this.onEndCallback(reason);
152
+ }
153
+ catch (error) {
154
+ this.emit('error', error);
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * Handle error in stream
160
+ */
161
+ async handleError(error) {
162
+ if (this.state === 'cancelled' || this.state === 'ended' || this.state === 'error') {
163
+ return;
164
+ }
165
+ this.state = 'error';
166
+ this.clearFlushTimer();
167
+ // Call error callback
168
+ if (this.onErrorCallback) {
169
+ try {
170
+ await this.onErrorCallback(error);
171
+ }
172
+ catch (callbackError) {
173
+ // Emit original error, not callback error
174
+ }
175
+ }
176
+ this.emit('error', error);
177
+ await this.end('error');
178
+ }
179
+ // ============================================================================
180
+ // Event Handling
181
+ // ============================================================================
182
+ /**
183
+ * Push an event to the stream
184
+ * Returns false if backpressure is applied and event should not be produced
185
+ */
186
+ push(event) {
187
+ if (this.state !== 'streaming' && this.state !== 'paused') {
188
+ return false;
189
+ }
190
+ // Check backpressure
191
+ if (this.backpressureHandler) {
192
+ const accepted = this.backpressureHandler.push(event);
193
+ if (!accepted) {
194
+ this.metrics.droppedEvents++;
195
+ return false;
196
+ }
197
+ }
198
+ const bufferedEvent = {
199
+ event,
200
+ timestamp: Date.now(),
201
+ };
202
+ this.buffer.push(bufferedEvent);
203
+ this.metrics.bufferedEvents++;
204
+ this.metrics.totalEvents++;
205
+ // Schedule flush if not already scheduled
206
+ if (!this.flushTimer && this.state === 'streaming') {
207
+ this.scheduleFlush();
208
+ }
209
+ // Force flush if buffer exceeds max size
210
+ if (this.buffer.length >= this.maxBufferSize) {
211
+ this.flush();
212
+ }
213
+ return true;
214
+ }
215
+ /**
216
+ * Flush the event buffer
217
+ */
218
+ flush() {
219
+ this.clearFlushTimer();
220
+ if (this.buffer.length === 0) {
221
+ return;
222
+ }
223
+ const now = Date.now();
224
+ const eventsToFlush = [...this.buffer];
225
+ this.buffer = [];
226
+ this.metrics.flushCount++;
227
+ // Calculate latency metrics
228
+ for (const { event, timestamp } of eventsToFlush) {
229
+ const latency = now - timestamp;
230
+ this.updateLatencyMetrics(latency);
231
+ // Emit event
232
+ if (this.state === 'streaming' || this.state === 'cancelled' || this.state === 'ended') {
233
+ this.emit('event', event);
234
+ }
235
+ }
236
+ this.emit('flush', eventsToFlush.length);
237
+ }
238
+ // ============================================================================
239
+ // State and Metrics
240
+ // ============================================================================
241
+ /**
242
+ * Get current stream state
243
+ */
244
+ getState() {
245
+ return this.state;
246
+ }
247
+ /**
248
+ * Check if stream is active
249
+ */
250
+ isActive() {
251
+ return this.state === 'streaming' || this.state === 'paused';
252
+ }
253
+ /**
254
+ * Check if stream is cancelled
255
+ */
256
+ isCancelled() {
257
+ return this.state === 'cancelled';
258
+ }
259
+ /**
260
+ * Get stream metrics
261
+ */
262
+ getMetrics() {
263
+ return {
264
+ ...this.metrics,
265
+ durationMs: this.state === 'streaming' || this.state === 'paused'
266
+ ? Date.now() - this.metrics.startTime
267
+ : this.metrics.durationMs,
268
+ };
269
+ }
270
+ /**
271
+ * Get buffer size
272
+ */
273
+ getBufferSize() {
274
+ return this.buffer.length;
275
+ }
276
+ /**
277
+ * Get the wrapped adapter
278
+ */
279
+ getAdapter() {
280
+ return this.adapter;
281
+ }
282
+ // ============================================================================
283
+ // Cleanup
284
+ // ============================================================================
285
+ /**
286
+ * Dispose of the stream controller
287
+ */
288
+ dispose() {
289
+ this.clearFlushTimer();
290
+ this.removeAbortHandler();
291
+ this.removeAllListeners();
292
+ this.buffer = [];
293
+ }
294
+ // ============================================================================
295
+ // Private Methods
296
+ // ============================================================================
297
+ setupSignalHandler() {
298
+ if (!this.signal) {
299
+ return;
300
+ }
301
+ // Check if already aborted
302
+ if (this.signal.aborted) {
303
+ // Use setImmediate to allow constructor to complete
304
+ setImmediate(() => this.cancel());
305
+ return;
306
+ }
307
+ // Setup abort handler
308
+ this.abortHandler = () => {
309
+ this.cancel();
310
+ };
311
+ this.signal.addEventListener('abort', this.abortHandler);
312
+ }
313
+ removeAbortHandler() {
314
+ if (this.signal && this.abortHandler) {
315
+ this.signal.removeEventListener('abort', this.abortHandler);
316
+ this.abortHandler = null;
317
+ }
318
+ }
319
+ setupAdapterListeners() {
320
+ // Forward events from adapter to stream
321
+ this.adapter.on('event', (event) => {
322
+ this.push(event);
323
+ });
324
+ // Forward errors
325
+ this.adapter.on('error', (error) => {
326
+ this.handleError(error);
327
+ });
328
+ }
329
+ scheduleFlush() {
330
+ if (this.flushTimer) {
331
+ return;
332
+ }
333
+ this.flushTimer = setTimeout(() => {
334
+ this.flushTimer = null;
335
+ if (this.state === 'streaming') {
336
+ this.flush();
337
+ }
338
+ }, this.bufferInterval);
339
+ }
340
+ clearFlushTimer() {
341
+ if (this.flushTimer) {
342
+ clearTimeout(this.flushTimer);
343
+ this.flushTimer = null;
344
+ }
345
+ }
346
+ initializeMetrics() {
347
+ return {
348
+ totalEvents: 0,
349
+ bufferedEvents: 0,
350
+ droppedEvents: 0,
351
+ averageLatencyMs: 0,
352
+ peakLatencyMs: 0,
353
+ startTime: 0,
354
+ durationMs: 0,
355
+ flushCount: 0,
356
+ };
357
+ }
358
+ updateLatencyMetrics(latency) {
359
+ // Update peak
360
+ if (latency > this.metrics.peakLatencyMs) {
361
+ this.metrics.peakLatencyMs = latency;
362
+ }
363
+ // Update rolling average
364
+ const totalSamples = this.metrics.flushCount || 1;
365
+ this.metrics.averageLatencyMs =
366
+ (this.metrics.averageLatencyMs * (totalSamples - 1) + latency) / totalSamples;
367
+ }
368
+ }
369
+ // ============================================================================
370
+ // Factory Function
371
+ // ============================================================================
372
+ /**
373
+ * Create a new StreamController instance
374
+ *
375
+ * @param config - Stream controller configuration
376
+ * @returns StreamController instance
377
+ *
378
+ * @example
379
+ * ```typescript
380
+ * const controller = new AbortController();
381
+ * const stream = createStreamController({
382
+ * adapter: eventAdapter,
383
+ * signal: controller.signal,
384
+ * onCancel: async () => {
385
+ * await agent.abort();
386
+ * }
387
+ * });
388
+ *
389
+ * stream.start();
390
+ *
391
+ * // Later, to cancel:
392
+ * controller.abort();
393
+ * // -> onCancel called
394
+ * // -> RUN_FINISHED emitted with reason: 'cancelled'
395
+ * // -> Stream closed gracefully
396
+ * ```
397
+ */
398
+ export function createStreamController(config) {
399
+ return new StreamController(config);
400
+ }
401
+ // ============================================================================
402
+ // Utility Functions
403
+ // ============================================================================
404
+ /**
405
+ * Create an async iterator from a stream controller
406
+ * Allows using for-await-of syntax to consume events
407
+ */
408
+ export async function* streamEvents(controller) {
409
+ const events = [];
410
+ let resolveNext = null;
411
+ let done = false;
412
+ const eventHandler = (event) => {
413
+ events.push(event);
414
+ if (resolveNext) {
415
+ resolveNext();
416
+ resolveNext = null;
417
+ }
418
+ };
419
+ const endHandler = () => {
420
+ done = true;
421
+ if (resolveNext) {
422
+ resolveNext();
423
+ resolveNext = null;
424
+ }
425
+ };
426
+ controller.on('event', eventHandler);
427
+ controller.on('end', endHandler);
428
+ controller.on('cancel', endHandler);
429
+ try {
430
+ while (!done || events.length > 0) {
431
+ if (events.length > 0) {
432
+ yield events.shift();
433
+ }
434
+ else if (!done) {
435
+ await new Promise((resolve) => {
436
+ resolveNext = resolve;
437
+ });
438
+ }
439
+ }
440
+ }
441
+ finally {
442
+ controller.off('event', eventHandler);
443
+ controller.off('end', endHandler);
444
+ controller.off('cancel', endHandler);
445
+ }
446
+ }
447
+ /**
448
+ * Create a transform stream from a stream controller
449
+ * For integration with Node.js streams API
450
+ */
451
+ export function createEventTransform(controller) {
452
+ const readable = new ReadableStream({
453
+ start(streamController) {
454
+ controller.on('event', (event) => {
455
+ streamController.enqueue(event);
456
+ });
457
+ controller.on('end', () => {
458
+ streamController.close();
459
+ });
460
+ controller.on('cancel', () => {
461
+ streamController.close();
462
+ });
463
+ controller.on('error', (error) => {
464
+ streamController.error(error);
465
+ });
466
+ },
467
+ });
468
+ const writable = new WritableStream({
469
+ write(event) {
470
+ controller.push(event);
471
+ },
472
+ close() {
473
+ controller.end();
474
+ },
475
+ abort(reason) {
476
+ controller.cancel();
477
+ },
478
+ });
479
+ return { readable, writable };
480
+ }
481
+ //# sourceMappingURL=stream-controller.js.map