@strands-agents/sdk 1.3.0 → 1.5.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 (462) hide show
  1. package/README.md +16 -16
  2. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  3. package/dist/src/__fixtures__/agent-helpers.js +6 -0
  4. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  5. package/dist/src/__fixtures__/register-node-defaults.d.ts +2 -0
  6. package/dist/src/__fixtures__/register-node-defaults.d.ts.map +1 -0
  7. package/dist/src/__fixtures__/register-node-defaults.js +6 -0
  8. package/dist/src/__fixtures__/register-node-defaults.js.map +1 -0
  9. package/dist/src/__fixtures__/test-sandbox.node.d.ts +15 -0
  10. package/dist/src/__fixtures__/test-sandbox.node.d.ts.map +1 -0
  11. package/dist/src/__fixtures__/test-sandbox.node.js +23 -0
  12. package/dist/src/__fixtures__/test-sandbox.node.js.map +1 -0
  13. package/dist/src/__tests__/default-slot.test.d.ts +2 -0
  14. package/dist/src/__tests__/default-slot.test.d.ts.map +1 -0
  15. package/dist/src/__tests__/default-slot.test.js +33 -0
  16. package/dist/src/__tests__/default-slot.test.js.map +1 -0
  17. package/dist/src/__tests__/mcp.test.js +14 -14
  18. package/dist/src/__tests__/mcp.test.js.map +1 -1
  19. package/dist/src/a2a/__tests__/async-lock.test.d.ts +2 -0
  20. package/dist/src/a2a/__tests__/async-lock.test.d.ts.map +1 -0
  21. package/dist/src/a2a/__tests__/async-lock.test.js +137 -0
  22. package/dist/src/a2a/__tests__/async-lock.test.js.map +1 -0
  23. package/dist/src/a2a/__tests__/executor.test.js +146 -8
  24. package/dist/src/a2a/__tests__/executor.test.js.map +1 -1
  25. package/dist/src/a2a/__tests__/server.test.js +20 -0
  26. package/dist/src/a2a/__tests__/server.test.js.map +1 -1
  27. package/dist/src/a2a/async-lock.d.ts +22 -0
  28. package/dist/src/a2a/async-lock.d.ts.map +1 -0
  29. package/dist/src/a2a/async-lock.js +38 -0
  30. package/dist/src/a2a/async-lock.js.map +1 -0
  31. package/dist/src/a2a/executor.d.ts +59 -24
  32. package/dist/src/a2a/executor.d.ts.map +1 -1
  33. package/dist/src/a2a/executor.js +209 -32
  34. package/dist/src/a2a/executor.js.map +1 -1
  35. package/dist/src/a2a/index.d.ts +1 -1
  36. package/dist/src/a2a/index.d.ts.map +1 -1
  37. package/dist/src/a2a/index.js +1 -1
  38. package/dist/src/a2a/index.js.map +1 -1
  39. package/dist/src/a2a/server.d.ts +18 -2
  40. package/dist/src/a2a/server.d.ts.map +1 -1
  41. package/dist/src/a2a/server.js +13 -2
  42. package/dist/src/a2a/server.js.map +1 -1
  43. package/dist/src/agent/__tests__/agent.context-manager.test.d.ts +2 -0
  44. package/dist/src/agent/__tests__/agent.context-manager.test.d.ts.map +1 -0
  45. package/dist/src/agent/__tests__/agent.context-manager.test.js +107 -0
  46. package/dist/src/agent/__tests__/agent.context-manager.test.js.map +1 -0
  47. package/dist/src/agent/__tests__/agent.test.js +195 -0
  48. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  49. package/dist/src/agent/__tests__/agent.tracer.test.node.js +14 -0
  50. package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -1
  51. package/dist/src/agent/__tests__/tool-caller.test.d.ts +2 -0
  52. package/dist/src/agent/__tests__/tool-caller.test.d.ts.map +1 -0
  53. package/dist/src/agent/__tests__/tool-caller.test.js +459 -0
  54. package/dist/src/agent/__tests__/tool-caller.test.js.map +1 -0
  55. package/dist/src/agent/agent.d.ts +194 -4
  56. package/dist/src/agent/agent.d.ts.map +1 -1
  57. package/dist/src/agent/agent.js +599 -253
  58. package/dist/src/agent/agent.js.map +1 -1
  59. package/dist/src/agent/tool-caller.d.ts +149 -0
  60. package/dist/src/agent/tool-caller.d.ts.map +1 -0
  61. package/dist/src/agent/tool-caller.js +198 -0
  62. package/dist/src/agent/tool-caller.js.map +1 -0
  63. package/dist/src/conversation-manager/__tests__/pin.test.d.ts +2 -0
  64. package/dist/src/conversation-manager/__tests__/pin.test.d.ts.map +1 -0
  65. package/dist/src/conversation-manager/__tests__/pin.test.js +119 -0
  66. package/dist/src/conversation-manager/__tests__/pin.test.js.map +1 -0
  67. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +49 -0
  68. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
  69. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +58 -0
  70. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
  71. package/dist/src/conversation-manager/pin-message.d.ts +45 -0
  72. package/dist/src/conversation-manager/pin-message.d.ts.map +1 -0
  73. package/dist/src/conversation-manager/pin-message.js +106 -0
  74. package/dist/src/conversation-manager/pin-message.js.map +1 -0
  75. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +7 -0
  76. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  77. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +27 -4
  78. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  79. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +7 -0
  80. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
  81. package/dist/src/conversation-manager/summarizing-conversation-manager.js +18 -4
  82. package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
  83. package/dist/src/default-slot.d.ts +6 -0
  84. package/dist/src/default-slot.d.ts.map +1 -0
  85. package/dist/src/default-slot.js +18 -0
  86. package/dist/src/default-slot.js.map +1 -0
  87. package/dist/src/errors.d.ts +25 -0
  88. package/dist/src/errors.d.ts.map +1 -1
  89. package/dist/src/errors.js +32 -0
  90. package/dist/src/errors.js.map +1 -1
  91. package/dist/src/index.d.ts +15 -3
  92. package/dist/src/index.d.ts.map +1 -1
  93. package/dist/src/index.js +10 -1
  94. package/dist/src/index.js.map +1 -1
  95. package/dist/src/index.node.d.ts +2 -0
  96. package/dist/src/index.node.d.ts.map +1 -0
  97. package/dist/src/index.node.js +9 -0
  98. package/dist/src/index.node.js.map +1 -0
  99. package/dist/src/interrupt.d.ts +5 -1
  100. package/dist/src/interrupt.d.ts.map +1 -1
  101. package/dist/src/interrupt.js +6 -0
  102. package/dist/src/interrupt.js.map +1 -1
  103. package/dist/src/interventions/handler.d.ts +1 -2
  104. package/dist/src/interventions/handler.d.ts.map +1 -1
  105. package/dist/src/interventions/registry.d.ts +2 -0
  106. package/dist/src/interventions/registry.d.ts.map +1 -1
  107. package/dist/src/interventions/registry.js +4 -0
  108. package/dist/src/interventions/registry.js.map +1 -1
  109. package/dist/src/mcp.d.ts +20 -15
  110. package/dist/src/mcp.d.ts.map +1 -1
  111. package/dist/src/mcp.js +15 -8
  112. package/dist/src/mcp.js.map +1 -1
  113. package/dist/src/memory/__tests__/memory-manager.test.d.ts +2 -0
  114. package/dist/src/memory/__tests__/memory-manager.test.d.ts.map +1 -0
  115. package/dist/src/memory/__tests__/memory-manager.test.js +493 -0
  116. package/dist/src/memory/__tests__/memory-manager.test.js.map +1 -0
  117. package/dist/src/memory/extraction/__tests__/extraction.test.d.ts +2 -0
  118. package/dist/src/memory/extraction/__tests__/extraction.test.d.ts.map +1 -0
  119. package/dist/src/memory/extraction/__tests__/extraction.test.js +637 -0
  120. package/dist/src/memory/extraction/__tests__/extraction.test.js.map +1 -0
  121. package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts +2 -0
  122. package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts.map +1 -0
  123. package/dist/src/memory/extraction/__tests__/model-extractor.test.js +68 -0
  124. package/dist/src/memory/extraction/__tests__/model-extractor.test.js.map +1 -0
  125. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts +2 -0
  126. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts.map +1 -0
  127. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js +81 -0
  128. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js.map +1 -0
  129. package/dist/src/memory/extraction/coordinator.d.ts +128 -0
  130. package/dist/src/memory/extraction/coordinator.d.ts.map +1 -0
  131. package/dist/src/memory/extraction/coordinator.js +245 -0
  132. package/dist/src/memory/extraction/coordinator.js.map +1 -0
  133. package/dist/src/memory/extraction/model-extractor.d.ts +32 -0
  134. package/dist/src/memory/extraction/model-extractor.d.ts.map +1 -0
  135. package/dist/src/memory/extraction/model-extractor.js +118 -0
  136. package/dist/src/memory/extraction/model-extractor.js.map +1 -0
  137. package/dist/src/memory/extraction/resolve-extraction-config.d.ts +46 -0
  138. package/dist/src/memory/extraction/resolve-extraction-config.d.ts.map +1 -0
  139. package/dist/src/memory/extraction/resolve-extraction-config.js +59 -0
  140. package/dist/src/memory/extraction/resolve-extraction-config.js.map +1 -0
  141. package/dist/src/memory/extraction/triggers.d.ts +41 -0
  142. package/dist/src/memory/extraction/triggers.d.ts.map +1 -0
  143. package/dist/src/memory/extraction/triggers.js +59 -0
  144. package/dist/src/memory/extraction/triggers.js.map +1 -0
  145. package/dist/src/memory/extraction/types.d.ts +133 -0
  146. package/dist/src/memory/extraction/types.d.ts.map +1 -0
  147. package/dist/src/memory/extraction/types.js +19 -0
  148. package/dist/src/memory/extraction/types.js.map +1 -0
  149. package/dist/src/memory/index.d.ts +9 -0
  150. package/dist/src/memory/index.d.ts.map +1 -0
  151. package/dist/src/memory/index.js +5 -0
  152. package/dist/src/memory/index.js.map +1 -0
  153. package/dist/src/memory/memory-manager.d.ts +131 -0
  154. package/dist/src/memory/memory-manager.d.ts.map +1 -0
  155. package/dist/src/memory/memory-manager.js +404 -0
  156. package/dist/src/memory/memory-manager.js.map +1 -0
  157. package/dist/src/memory/types.d.ts +213 -0
  158. package/dist/src/memory/types.d.ts.map +1 -0
  159. package/dist/src/memory/types.js +2 -0
  160. package/dist/src/memory/types.js.map +1 -0
  161. package/dist/src/middleware/__tests__/agent-middleware.test.d.ts +2 -0
  162. package/dist/src/middleware/__tests__/agent-middleware.test.d.ts.map +1 -0
  163. package/dist/src/middleware/__tests__/agent-middleware.test.js +1207 -0
  164. package/dist/src/middleware/__tests__/agent-middleware.test.js.map +1 -0
  165. package/dist/src/middleware/__tests__/custom-stages.test.d.ts +2 -0
  166. package/dist/src/middleware/__tests__/custom-stages.test.d.ts.map +1 -0
  167. package/dist/src/middleware/__tests__/custom-stages.test.js +97 -0
  168. package/dist/src/middleware/__tests__/custom-stages.test.js.map +1 -0
  169. package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts +2 -0
  170. package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts.map +1 -0
  171. package/dist/src/middleware/__tests__/middleware-interrupts.test.js +267 -0
  172. package/dist/src/middleware/__tests__/middleware-interrupts.test.js.map +1 -0
  173. package/dist/src/middleware/__tests__/registry.test.d.ts +2 -0
  174. package/dist/src/middleware/__tests__/registry.test.d.ts.map +1 -0
  175. package/dist/src/middleware/__tests__/registry.test.js +525 -0
  176. package/dist/src/middleware/__tests__/registry.test.js.map +1 -0
  177. package/dist/src/middleware/index.d.ts +5 -0
  178. package/dist/src/middleware/index.d.ts.map +1 -0
  179. package/dist/src/middleware/index.js +3 -0
  180. package/dist/src/middleware/index.js.map +1 -0
  181. package/dist/src/middleware/registry.d.ts +58 -0
  182. package/dist/src/middleware/registry.d.ts.map +1 -0
  183. package/dist/src/middleware/registry.js +107 -0
  184. package/dist/src/middleware/registry.js.map +1 -0
  185. package/dist/src/middleware/stages.d.ts +138 -0
  186. package/dist/src/middleware/stages.d.ts.map +1 -0
  187. package/dist/src/middleware/stages.js +31 -0
  188. package/dist/src/middleware/stages.js.map +1 -0
  189. package/dist/src/middleware/types.d.ts +88 -0
  190. package/dist/src/middleware/types.d.ts.map +1 -0
  191. package/dist/src/middleware/types.js +2 -0
  192. package/dist/src/middleware/types.js.map +1 -0
  193. package/dist/src/models/__tests__/anthropic.test.js +37 -7
  194. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  195. package/dist/src/models/__tests__/bedrock.test.js +181 -0
  196. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  197. package/dist/src/models/__tests__/model.test.js +46 -3
  198. package/dist/src/models/__tests__/model.test.js.map +1 -1
  199. package/dist/src/models/anthropic.d.ts.map +1 -1
  200. package/dist/src/models/anthropic.js +7 -4
  201. package/dist/src/models/anthropic.js.map +1 -1
  202. package/dist/src/models/bedrock.d.ts +26 -1
  203. package/dist/src/models/bedrock.d.ts.map +1 -1
  204. package/dist/src/models/bedrock.js +34 -9
  205. package/dist/src/models/bedrock.js.map +1 -1
  206. package/dist/src/models/defaults.d.ts.map +1 -1
  207. package/dist/src/models/defaults.js +2 -0
  208. package/dist/src/models/defaults.js.map +1 -1
  209. package/dist/src/models/model.d.ts.map +1 -1
  210. package/dist/src/models/model.js +7 -3
  211. package/dist/src/models/model.js.map +1 -1
  212. package/dist/src/models/openai/__tests__/chat.test.js +2 -10
  213. package/dist/src/models/openai/__tests__/chat.test.js.map +1 -1
  214. package/dist/src/models/openai/__tests__/errors.test.d.ts +2 -0
  215. package/dist/src/models/openai/__tests__/errors.test.d.ts.map +1 -0
  216. package/dist/src/models/openai/__tests__/errors.test.js +30 -0
  217. package/dist/src/models/openai/__tests__/errors.test.js.map +1 -0
  218. package/dist/src/models/openai/__tests__/responses.test.js +8 -33
  219. package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
  220. package/dist/src/models/openai/errors.d.ts.map +1 -1
  221. package/dist/src/models/openai/errors.js +5 -3
  222. package/dist/src/models/openai/errors.js.map +1 -1
  223. package/dist/src/multiagent/__tests__/nodes.test.js +50 -0
  224. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
  225. package/dist/src/multiagent/nodes.d.ts +23 -2
  226. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  227. package/dist/src/multiagent/nodes.js +18 -4
  228. package/dist/src/multiagent/nodes.js.map +1 -1
  229. package/dist/src/registry/__tests__/tool-registry.test.js +50 -1
  230. package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -1
  231. package/dist/src/registry/tool-registry.d.ts +13 -0
  232. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  233. package/dist/src/registry/tool-registry.js +35 -1
  234. package/dist/src/registry/tool-registry.js.map +1 -1
  235. package/dist/src/sandbox/__tests__/default.test.browser.d.ts +2 -0
  236. package/dist/src/sandbox/__tests__/default.test.browser.d.ts.map +1 -0
  237. package/dist/src/sandbox/__tests__/default.test.browser.js +11 -0
  238. package/dist/src/sandbox/__tests__/default.test.browser.js.map +1 -0
  239. package/dist/src/sandbox/__tests__/default.test.node.d.ts +2 -0
  240. package/dist/src/sandbox/__tests__/default.test.node.d.ts.map +1 -0
  241. package/dist/src/sandbox/__tests__/default.test.node.js +23 -0
  242. package/dist/src/sandbox/__tests__/default.test.node.js.map +1 -0
  243. package/dist/src/sandbox/__tests__/docker.test.node.d.ts +2 -0
  244. package/dist/src/sandbox/__tests__/docker.test.node.d.ts.map +1 -0
  245. package/dist/src/sandbox/__tests__/docker.test.node.js +89 -0
  246. package/dist/src/sandbox/__tests__/docker.test.node.js.map +1 -0
  247. package/dist/src/sandbox/__tests__/errors.test.node.d.ts +2 -0
  248. package/dist/src/sandbox/__tests__/errors.test.node.d.ts.map +1 -0
  249. package/dist/src/sandbox/__tests__/errors.test.node.js +33 -0
  250. package/dist/src/sandbox/__tests__/errors.test.node.js.map +1 -0
  251. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts +2 -0
  252. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts.map +1 -0
  253. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js +124 -0
  254. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js.map +1 -0
  255. package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts +2 -0
  256. package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts.map +1 -0
  257. package/dist/src/sandbox/__tests__/posix-shell.test.node.js +298 -0
  258. package/dist/src/sandbox/__tests__/posix-shell.test.node.js.map +1 -0
  259. package/dist/src/sandbox/__tests__/ssh.test.node.d.ts +2 -0
  260. package/dist/src/sandbox/__tests__/ssh.test.node.d.ts.map +1 -0
  261. package/dist/src/sandbox/__tests__/ssh.test.node.js +262 -0
  262. package/dist/src/sandbox/__tests__/ssh.test.node.js.map +1 -0
  263. package/dist/src/sandbox/base.d.ts +156 -0
  264. package/dist/src/sandbox/base.d.ts.map +1 -0
  265. package/dist/src/sandbox/base.js +97 -0
  266. package/dist/src/sandbox/base.js.map +1 -0
  267. package/dist/src/sandbox/constants.d.ts +25 -0
  268. package/dist/src/sandbox/constants.d.ts.map +1 -0
  269. package/dist/src/sandbox/constants.js +27 -0
  270. package/dist/src/sandbox/constants.js.map +1 -0
  271. package/dist/src/sandbox/default.d.ts +3 -0
  272. package/dist/src/sandbox/default.d.ts.map +1 -0
  273. package/dist/src/sandbox/default.js +3 -0
  274. package/dist/src/sandbox/default.js.map +1 -0
  275. package/dist/src/sandbox/docker.d.ts +38 -0
  276. package/dist/src/sandbox/docker.d.ts.map +1 -0
  277. package/dist/src/sandbox/docker.js +59 -0
  278. package/dist/src/sandbox/docker.js.map +1 -0
  279. package/dist/src/sandbox/errors.d.ts +26 -0
  280. package/dist/src/sandbox/errors.d.ts.map +1 -0
  281. package/dist/src/sandbox/errors.js +35 -0
  282. package/dist/src/sandbox/errors.js.map +1 -0
  283. package/dist/src/sandbox/index.d.ts +5 -0
  284. package/dist/src/sandbox/index.d.ts.map +1 -0
  285. package/dist/src/sandbox/index.js +4 -0
  286. package/dist/src/sandbox/index.js.map +1 -0
  287. package/dist/src/sandbox/not-a-sandbox-local-environment.d.ts +16 -0
  288. package/dist/src/sandbox/not-a-sandbox-local-environment.d.ts.map +1 -0
  289. package/dist/src/sandbox/not-a-sandbox-local-environment.js +83 -0
  290. package/dist/src/sandbox/not-a-sandbox-local-environment.js.map +1 -0
  291. package/dist/src/sandbox/posix-shell.d.ts +53 -0
  292. package/dist/src/sandbox/posix-shell.d.ts.map +1 -0
  293. package/dist/src/sandbox/posix-shell.js +116 -0
  294. package/dist/src/sandbox/posix-shell.js.map +1 -0
  295. package/dist/src/sandbox/ssh.d.ts +56 -0
  296. package/dist/src/sandbox/ssh.d.ts.map +1 -0
  297. package/dist/src/sandbox/ssh.js +119 -0
  298. package/dist/src/sandbox/ssh.js.map +1 -0
  299. package/dist/src/sandbox/stream-process.d.ts +32 -0
  300. package/dist/src/sandbox/stream-process.d.ts.map +1 -0
  301. package/dist/src/sandbox/stream-process.js +161 -0
  302. package/dist/src/sandbox/stream-process.js.map +1 -0
  303. package/dist/src/sandbox/types.d.ts +57 -0
  304. package/dist/src/sandbox/types.d.ts.map +1 -0
  305. package/dist/src/sandbox/types.js +8 -0
  306. package/dist/src/sandbox/types.js.map +1 -0
  307. package/dist/src/telemetry/__tests__/meter.test.js +11 -0
  308. package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
  309. package/dist/src/telemetry/meter.d.ts +10 -6
  310. package/dist/src/telemetry/meter.d.ts.map +1 -1
  311. package/dist/src/telemetry/meter.js +16 -3
  312. package/dist/src/telemetry/meter.js.map +1 -1
  313. package/dist/src/tsconfig.tsbuildinfo +1 -1
  314. package/dist/src/types/__tests__/messages.test.js +28 -0
  315. package/dist/src/types/__tests__/messages.test.js.map +1 -1
  316. package/dist/src/types/agent.d.ts +72 -0
  317. package/dist/src/types/agent.d.ts.map +1 -1
  318. package/dist/src/types/agent.js.map +1 -1
  319. package/dist/src/types/lifecycle-observer.d.ts +18 -0
  320. package/dist/src/types/lifecycle-observer.d.ts.map +1 -0
  321. package/dist/src/types/lifecycle-observer.js +2 -0
  322. package/dist/src/types/lifecycle-observer.js.map +1 -0
  323. package/dist/src/types/messages.d.ts +19 -3
  324. package/dist/src/types/messages.d.ts.map +1 -1
  325. package/dist/src/types/messages.js +9 -0
  326. package/dist/src/types/messages.js.map +1 -1
  327. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts +2 -0
  328. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts.map +1 -0
  329. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js +358 -0
  330. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js.map +1 -0
  331. package/dist/src/vended-interventions/hitl/hitl.d.ts +115 -0
  332. package/dist/src/vended-interventions/hitl/hitl.d.ts.map +1 -0
  333. package/dist/src/vended-interventions/hitl/hitl.js +138 -0
  334. package/dist/src/vended-interventions/hitl/hitl.js.map +1 -0
  335. package/dist/src/vended-interventions/hitl/index.d.ts +24 -0
  336. package/dist/src/vended-interventions/hitl/index.d.ts.map +1 -0
  337. package/dist/src/vended-interventions/hitl/index.js +23 -0
  338. package/dist/src/vended-interventions/hitl/index.js.map +1 -0
  339. package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts +2 -0
  340. package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts.map +1 -0
  341. package/dist/src/vended-interventions/steering/__tests__/handler.test.js +163 -0
  342. package/dist/src/vended-interventions/steering/__tests__/handler.test.js.map +1 -0
  343. package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts +2 -0
  344. package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts.map +1 -0
  345. package/dist/src/vended-interventions/steering/__tests__/llm.test.js +60 -0
  346. package/dist/src/vended-interventions/steering/__tests__/llm.test.js.map +1 -0
  347. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts +2 -0
  348. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts.map +1 -0
  349. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js +94 -0
  350. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js.map +1 -0
  351. package/dist/src/vended-interventions/steering/handlers/handler.d.ts +64 -0
  352. package/dist/src/vended-interventions/steering/handlers/handler.d.ts.map +1 -0
  353. package/dist/src/vended-interventions/steering/handlers/handler.js +71 -0
  354. package/dist/src/vended-interventions/steering/handlers/handler.js.map +1 -0
  355. package/dist/src/vended-interventions/steering/handlers/llm.d.ts +72 -0
  356. package/dist/src/vended-interventions/steering/handlers/llm.d.ts.map +1 -0
  357. package/dist/src/vended-interventions/steering/handlers/llm.js +177 -0
  358. package/dist/src/vended-interventions/steering/handlers/llm.js.map +1 -0
  359. package/dist/src/vended-interventions/steering/index.d.ts +31 -0
  360. package/dist/src/vended-interventions/steering/index.d.ts.map +1 -0
  361. package/dist/src/vended-interventions/steering/index.js +32 -0
  362. package/dist/src/vended-interventions/steering/index.js.map +1 -0
  363. package/dist/src/vended-interventions/steering/providers/context-provider.d.ts +55 -0
  364. package/dist/src/vended-interventions/steering/providers/context-provider.d.ts.map +1 -0
  365. package/dist/src/vended-interventions/steering/providers/context-provider.js +8 -0
  366. package/dist/src/vended-interventions/steering/providers/context-provider.js.map +1 -0
  367. package/dist/src/vended-interventions/steering/providers/tool-ledger.d.ts +49 -0
  368. package/dist/src/vended-interventions/steering/providers/tool-ledger.d.ts.map +1 -0
  369. package/dist/src/vended-interventions/steering/providers/tool-ledger.js +75 -0
  370. package/dist/src/vended-interventions/steering/providers/tool-ledger.js.map +1 -0
  371. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts +2 -0
  372. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts.map +1 -0
  373. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js +611 -0
  374. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js.map +1 -0
  375. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts +2 -0
  376. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts.map +1 -0
  377. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js +2 -0
  378. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js.map +1 -0
  379. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts +230 -0
  380. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts.map +1 -0
  381. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js +370 -0
  382. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js.map +1 -0
  383. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts +2 -0
  384. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts.map +1 -0
  385. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js +68 -0
  386. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js.map +1 -0
  387. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts +2 -0
  388. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts.map +1 -0
  389. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js +93 -0
  390. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js.map +1 -0
  391. package/dist/src/vended-plugins/context-offloader/index.d.ts +1 -1
  392. package/dist/src/vended-plugins/context-offloader/index.d.ts.map +1 -1
  393. package/dist/src/vended-plugins/context-offloader/plugin.d.ts +4 -1
  394. package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -1
  395. package/dist/src/vended-plugins/context-offloader/plugin.js +29 -7
  396. package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -1
  397. package/dist/src/vended-plugins/context-offloader/search.d.ts.map +1 -1
  398. package/dist/src/vended-plugins/context-offloader/search.js +3 -5
  399. package/dist/src/vended-plugins/context-offloader/search.js.map +1 -1
  400. package/dist/src/vended-plugins/context-offloader/storage.d.ts +29 -5
  401. package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
  402. package/dist/src/vended-plugins/context-offloader/storage.js +75 -11
  403. package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
  404. package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts +2 -0
  405. package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts.map +1 -0
  406. package/dist/src/vended-plugins/goal/__tests__/plugin.test.js +736 -0
  407. package/dist/src/vended-plugins/goal/__tests__/plugin.test.js.map +1 -0
  408. package/dist/src/vended-plugins/goal/index.d.ts +21 -0
  409. package/dist/src/vended-plugins/goal/index.d.ts.map +1 -0
  410. package/dist/src/vended-plugins/goal/index.js +20 -0
  411. package/dist/src/vended-plugins/goal/index.js.map +1 -0
  412. package/dist/src/vended-plugins/goal/judge.d.ts +41 -0
  413. package/dist/src/vended-plugins/goal/judge.d.ts.map +1 -0
  414. package/dist/src/vended-plugins/goal/judge.js +92 -0
  415. package/dist/src/vended-plugins/goal/judge.js.map +1 -0
  416. package/dist/src/vended-plugins/goal/plugin.d.ts +214 -0
  417. package/dist/src/vended-plugins/goal/plugin.d.ts.map +1 -0
  418. package/dist/src/vended-plugins/goal/plugin.js +287 -0
  419. package/dist/src/vended-plugins/goal/plugin.js.map +1 -0
  420. package/dist/src/vended-plugins/index.d.ts +12 -0
  421. package/dist/src/vended-plugins/index.d.ts.map +1 -0
  422. package/dist/src/vended-plugins/index.js +12 -0
  423. package/dist/src/vended-plugins/index.js.map +1 -0
  424. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +17 -7
  425. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
  426. package/dist/src/vended-plugins/skills/agent-skills.d.ts +21 -7
  427. package/dist/src/vended-plugins/skills/agent-skills.d.ts.map +1 -1
  428. package/dist/src/vended-plugins/skills/agent-skills.js +144 -77
  429. package/dist/src/vended-plugins/skills/agent-skills.js.map +1 -1
  430. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +44 -4
  431. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  432. package/dist/src/vended-tools/bash/bash.d.ts +3 -24
  433. package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
  434. package/dist/src/vended-tools/bash/bash.js +9 -9
  435. package/dist/src/vended-tools/bash/bash.js.map +1 -1
  436. package/dist/src/vended-tools/bash/index.d.ts +3 -1
  437. package/dist/src/vended-tools/bash/index.d.ts.map +1 -1
  438. package/dist/src/vended-tools/bash/index.js +2 -1
  439. package/dist/src/vended-tools/bash/index.js.map +1 -1
  440. package/dist/src/vended-tools/bash/make-bash.d.ts +22 -0
  441. package/dist/src/vended-tools/bash/make-bash.d.ts.map +1 -0
  442. package/dist/src/vended-tools/bash/make-bash.js +40 -0
  443. package/dist/src/vended-tools/bash/make-bash.js.map +1 -0
  444. package/dist/src/vended-tools/bash/types.d.ts +1 -0
  445. package/dist/src/vended-tools/bash/types.d.ts.map +1 -1
  446. package/dist/src/vended-tools/bash/types.js +2 -0
  447. package/dist/src/vended-tools/bash/types.js.map +1 -1
  448. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +83 -1
  449. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
  450. package/dist/src/vended-tools/file-editor/file-editor.d.ts +19 -10
  451. package/dist/src/vended-tools/file-editor/file-editor.d.ts.map +1 -1
  452. package/dist/src/vended-tools/file-editor/file-editor.js +188 -218
  453. package/dist/src/vended-tools/file-editor/file-editor.js.map +1 -1
  454. package/dist/src/vended-tools/file-editor/index.d.ts +2 -1
  455. package/dist/src/vended-tools/file-editor/index.d.ts.map +1 -1
  456. package/dist/src/vended-tools/file-editor/index.js +1 -1
  457. package/dist/src/vended-tools/file-editor/index.js.map +1 -1
  458. package/dist/src/vended-tools/index.d.ts +17 -0
  459. package/dist/src/vended-tools/index.d.ts.map +1 -0
  460. package/dist/src/vended-tools/index.js +17 -0
  461. package/dist/src/vended-tools/index.js.map +1 -0
  462. package/package.json +66 -15
@@ -0,0 +1,525 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { MiddlewareRegistry, createStage } from '../index.js';
3
+ import { CancelledError } from '../../errors.js';
4
+ import { InterruptError, Interrupt } from '../../interrupt.js';
5
+ import { collectGenerator } from '../../__fixtures__/model-test-helpers.js';
6
+ async function collect(gen) {
7
+ const { items, result } = await collectGenerator(gen);
8
+ return { events: items, result };
9
+ }
10
+ const TestStage = createStage('test');
11
+ describe('MiddlewareRegistry', () => {
12
+ describe('add', () => {
13
+ it('stores handlers in registration order', () => {
14
+ const registry = new MiddlewareRegistry();
15
+ const callOrder = [];
16
+ const handler1 = async function* (context, next) {
17
+ callOrder.push(1);
18
+ return yield* next(context);
19
+ };
20
+ const handler2 = async function* (context, next) {
21
+ callOrder.push(2);
22
+ return yield* next(context);
23
+ };
24
+ registry.add(TestStage, handler1);
25
+ registry.add(TestStage, handler2);
26
+ // eslint-disable-next-line require-yield
27
+ const terminal = async function* () {
28
+ callOrder.push(3);
29
+ return { output: 'done' };
30
+ };
31
+ const chain = registry.compose(TestStage, terminal);
32
+ // Execute the chain to verify order
33
+ const gen = chain({ value: 'test' });
34
+ return collect(gen).then(() => {
35
+ expect(callOrder).toStrictEqual([1, 2, 3]);
36
+ });
37
+ });
38
+ });
39
+ describe('compose', () => {
40
+ it('with no handlers returns terminal-equivalent function', async () => {
41
+ const registry = new MiddlewareRegistry();
42
+ const terminal = async function* (ctx) {
43
+ yield { data: `event-${ctx.value}` };
44
+ return { output: `result-${ctx.value}` };
45
+ };
46
+ const chain = registry.compose(TestStage, terminal);
47
+ const { events, result } = await collect(chain({ value: 'hello' }));
48
+ expect(events).toStrictEqual([{ data: 'event-hello' }]);
49
+ expect(result).toStrictEqual({ output: 'result-hello' });
50
+ });
51
+ it('executes handlers in registration order (outermost first)', async () => {
52
+ const registry = new MiddlewareRegistry();
53
+ const callOrder = [];
54
+ const outer = async function* (context, next) {
55
+ callOrder.push('outer-before');
56
+ const result = yield* next(context);
57
+ callOrder.push('outer-after');
58
+ return result;
59
+ };
60
+ const inner = async function* (context, next) {
61
+ callOrder.push('inner-before');
62
+ const result = yield* next(context);
63
+ callOrder.push('inner-after');
64
+ return result;
65
+ };
66
+ registry.add(TestStage, outer);
67
+ registry.add(TestStage, inner);
68
+ // eslint-disable-next-line require-yield
69
+ const terminal = async function* () {
70
+ callOrder.push('terminal');
71
+ return { output: 'done' };
72
+ };
73
+ const chain = registry.compose(TestStage, terminal);
74
+ await collect(chain({ value: 'test' }));
75
+ expect(callOrder).toStrictEqual(['outer-before', 'inner-before', 'terminal', 'inner-after', 'outer-after']);
76
+ });
77
+ });
78
+ describe('short-circuit behavior', () => {
79
+ it('does not call next handlers or terminal when middleware does not call next', async () => {
80
+ const registry = new MiddlewareRegistry();
81
+ let terminalCalled = false;
82
+ let innerCalled = false;
83
+ const shortCircuit = async function* () {
84
+ yield { data: 'synthetic' };
85
+ return { output: 'short-circuited' };
86
+ };
87
+ const inner = async function* (context, next) {
88
+ innerCalled = true;
89
+ return yield* next(context);
90
+ };
91
+ registry.add(TestStage, shortCircuit);
92
+ registry.add(TestStage, inner);
93
+ // eslint-disable-next-line require-yield
94
+ const terminal = async function* () {
95
+ terminalCalled = true;
96
+ return { output: 'terminal' };
97
+ };
98
+ const chain = registry.compose(TestStage, terminal);
99
+ const { events, result } = await collect(chain({ value: 'test' }));
100
+ expect(terminalCalled).toBe(false);
101
+ expect(innerCalled).toBe(false);
102
+ expect(events).toStrictEqual([{ data: 'synthetic' }]);
103
+ expect(result).toStrictEqual({ output: 'short-circuited' });
104
+ });
105
+ });
106
+ describe('event pass-through via yield* next(context)', () => {
107
+ it('forwards all events from terminal and returns terminal result', async () => {
108
+ const registry = new MiddlewareRegistry();
109
+ const passThrough = async function* (context, next) {
110
+ return yield* next(context);
111
+ };
112
+ registry.add(TestStage, passThrough);
113
+ const terminal = async function* () {
114
+ yield { data: 'event-1' };
115
+ yield { data: 'event-2' };
116
+ yield { data: 'event-3' };
117
+ return { output: 'terminal-result' };
118
+ };
119
+ const chain = registry.compose(TestStage, terminal);
120
+ const { events, result } = await collect(chain({ value: 'test' }));
121
+ expect(events).toStrictEqual([{ data: 'event-1' }, { data: 'event-2' }, { data: 'event-3' }]);
122
+ expect(result).toStrictEqual({ output: 'terminal-result' });
123
+ });
124
+ });
125
+ describe('event filtering via manual iteration', () => {
126
+ it('only yields events matching a predicate', async () => {
127
+ const registry = new MiddlewareRegistry();
128
+ const filter = async function* (context, next) {
129
+ const gen = next(context);
130
+ let iterResult = await gen.next();
131
+ while (!iterResult.done) {
132
+ const event = iterResult.value;
133
+ // Only forward events containing 'keep'
134
+ if (event.data.includes('keep')) {
135
+ yield event;
136
+ }
137
+ iterResult = await gen.next();
138
+ }
139
+ return iterResult.value;
140
+ };
141
+ registry.add(TestStage, filter);
142
+ const terminal = async function* () {
143
+ yield { data: 'keep-1' };
144
+ yield { data: 'drop-1' };
145
+ yield { data: 'keep-2' };
146
+ yield { data: 'drop-2' };
147
+ return { output: 'done' };
148
+ };
149
+ const chain = registry.compose(TestStage, terminal);
150
+ const { events, result } = await collect(chain({ value: 'test' }));
151
+ expect(events).toStrictEqual([{ data: 'keep-1' }, { data: 'keep-2' }]);
152
+ expect(result).toStrictEqual({ output: 'done' });
153
+ });
154
+ });
155
+ describe('context modification flows to terminal', () => {
156
+ it('terminal receives modified context', async () => {
157
+ const registry = new MiddlewareRegistry();
158
+ let receivedContext;
159
+ const modifier = async function* (context, next) {
160
+ const modified = { ...context, value: 'modified' };
161
+ return yield* next(modified);
162
+ };
163
+ registry.add(TestStage, modifier);
164
+ // eslint-disable-next-line require-yield
165
+ const terminal = async function* (ctx) {
166
+ receivedContext = ctx;
167
+ return { output: ctx.value };
168
+ };
169
+ const chain = registry.compose(TestStage, terminal);
170
+ const { result } = await collect(chain({ value: 'original' }));
171
+ expect(receivedContext).toStrictEqual({ value: 'modified' });
172
+ expect(result).toStrictEqual({ output: 'modified' });
173
+ });
174
+ it('each middleware can further modify context', async () => {
175
+ const registry = new MiddlewareRegistry();
176
+ let receivedContext;
177
+ const first = async function* (context, next) {
178
+ return yield* next({ ...context, value: context.value + '-first' });
179
+ };
180
+ const second = async function* (context, next) {
181
+ return yield* next({ ...context, value: context.value + '-second' });
182
+ };
183
+ registry.add(TestStage, first);
184
+ registry.add(TestStage, second);
185
+ // eslint-disable-next-line require-yield
186
+ const terminal = async function* (ctx) {
187
+ receivedContext = ctx;
188
+ return { output: ctx.value };
189
+ };
190
+ const chain = registry.compose(TestStage, terminal);
191
+ const { result } = await collect(chain({ value: 'start' }));
192
+ expect(receivedContext).toStrictEqual({ value: 'start-first-second' });
193
+ expect(result).toStrictEqual({ output: 'start-first-second' });
194
+ });
195
+ });
196
+ describe('error propagation through chain', () => {
197
+ it('errors from terminal reach middleware', async () => {
198
+ const registry = new MiddlewareRegistry();
199
+ let caughtError;
200
+ const catcher = async function* (context, next) {
201
+ try {
202
+ return yield* next(context);
203
+ }
204
+ catch (error) {
205
+ caughtError = error;
206
+ return { output: 'recovered' };
207
+ }
208
+ };
209
+ registry.add(TestStage, catcher);
210
+ // eslint-disable-next-line require-yield
211
+ const terminal = async function* () {
212
+ throw new Error('terminal error');
213
+ };
214
+ const chain = registry.compose(TestStage, terminal);
215
+ const { result } = await collect(chain({ value: 'test' }));
216
+ expect(caughtError).toBeInstanceOf(Error);
217
+ expect(caughtError.message).toBe('terminal error');
218
+ expect(result).toStrictEqual({ output: 'recovered' });
219
+ });
220
+ it('errors from middleware reach caller', async () => {
221
+ const registry = new MiddlewareRegistry();
222
+ // eslint-disable-next-line require-yield
223
+ const thrower = async function* () {
224
+ throw new Error('middleware error');
225
+ };
226
+ registry.add(TestStage, thrower);
227
+ // eslint-disable-next-line require-yield
228
+ const terminal = async function* () {
229
+ return { output: 'done' };
230
+ };
231
+ const chain = registry.compose(TestStage, terminal);
232
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow('middleware error');
233
+ });
234
+ it('middleware can transform errors from next', async () => {
235
+ const registry = new MiddlewareRegistry();
236
+ const transformer = async function* (context, next) {
237
+ try {
238
+ return yield* next(context);
239
+ }
240
+ catch {
241
+ throw new Error('transformed error');
242
+ }
243
+ };
244
+ registry.add(TestStage, transformer);
245
+ // eslint-disable-next-line require-yield
246
+ const terminal = async function* () {
247
+ throw new Error('original error');
248
+ };
249
+ const chain = registry.compose(TestStage, terminal);
250
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow('transformed error');
251
+ });
252
+ });
253
+ describe('CancelledError and InterruptError propagation', () => {
254
+ it('CancelledError propagates without being swallowed', async () => {
255
+ const registry = new MiddlewareRegistry();
256
+ const passThrough = async function* (context, next) {
257
+ return yield* next(context);
258
+ };
259
+ registry.add(TestStage, passThrough);
260
+ // eslint-disable-next-line require-yield
261
+ const terminal = async function* () {
262
+ throw new CancelledError();
263
+ };
264
+ const chain = registry.compose(TestStage, terminal);
265
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow(CancelledError);
266
+ });
267
+ it('InterruptError propagates without being swallowed', async () => {
268
+ const registry = new MiddlewareRegistry();
269
+ const passThrough = async function* (context, next) {
270
+ return yield* next(context);
271
+ };
272
+ registry.add(TestStage, passThrough);
273
+ // eslint-disable-next-line require-yield
274
+ const terminal = async function* () {
275
+ throw new InterruptError(new Interrupt({ id: 'int-1', name: 'test_interrupt' }));
276
+ };
277
+ const chain = registry.compose(TestStage, terminal);
278
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow(InterruptError);
279
+ });
280
+ it('CancelledError propagates through multiple middleware layers', async () => {
281
+ const registry = new MiddlewareRegistry();
282
+ const outer = async function* (context, next) {
283
+ return yield* next(context);
284
+ };
285
+ const inner = async function* (context, next) {
286
+ return yield* next(context);
287
+ };
288
+ registry.add(TestStage, outer);
289
+ registry.add(TestStage, inner);
290
+ // eslint-disable-next-line require-yield
291
+ const terminal = async function* () {
292
+ throw new CancelledError();
293
+ };
294
+ const chain = registry.compose(TestStage, terminal);
295
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow(CancelledError);
296
+ });
297
+ it('InterruptError propagates through multiple middleware layers', async () => {
298
+ const registry = new MiddlewareRegistry();
299
+ const outer = async function* (context, next) {
300
+ return yield* next(context);
301
+ };
302
+ const inner = async function* (context, next) {
303
+ return yield* next(context);
304
+ };
305
+ registry.add(TestStage, outer);
306
+ registry.add(TestStage, inner);
307
+ // eslint-disable-next-line require-yield
308
+ const terminal = async function* () {
309
+ throw new InterruptError(new Interrupt({ id: 'int-1', name: 'test_interrupt' }));
310
+ };
311
+ const chain = registry.compose(TestStage, terminal);
312
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow(InterruptError);
313
+ });
314
+ });
315
+ describe('try-finally guarantees', () => {
316
+ it('outer finally runs when inner middleware throws', async () => {
317
+ const registry = new MiddlewareRegistry();
318
+ const order = [];
319
+ const outer = async function* (context, next) {
320
+ try {
321
+ return yield* next(context);
322
+ }
323
+ finally {
324
+ order.push('outer-finally');
325
+ }
326
+ };
327
+ // eslint-disable-next-line require-yield
328
+ const inner = async function* () {
329
+ order.push('inner-throw');
330
+ throw new Error('inner exploded');
331
+ };
332
+ registry.add(TestStage, outer);
333
+ registry.add(TestStage, inner);
334
+ // eslint-disable-next-line require-yield
335
+ const terminal = async function* () {
336
+ return { output: 'unreachable' };
337
+ };
338
+ const chain = registry.compose(TestStage, terminal);
339
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow('inner exploded');
340
+ expect(order).toStrictEqual(['inner-throw', 'outer-finally']);
341
+ });
342
+ it('inner finally runs when terminal throws', async () => {
343
+ const registry = new MiddlewareRegistry();
344
+ const order = [];
345
+ const outer = async function* (context, next) {
346
+ try {
347
+ return yield* next(context);
348
+ }
349
+ finally {
350
+ order.push('outer-finally');
351
+ }
352
+ };
353
+ const inner = async function* (context, next) {
354
+ try {
355
+ return yield* next(context);
356
+ }
357
+ finally {
358
+ order.push('inner-finally');
359
+ }
360
+ };
361
+ registry.add(TestStage, outer);
362
+ registry.add(TestStage, inner);
363
+ // eslint-disable-next-line require-yield
364
+ const terminal = async function* () {
365
+ order.push('terminal-throw');
366
+ throw new Error('terminal exploded');
367
+ };
368
+ const chain = registry.compose(TestStage, terminal);
369
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow('terminal exploded');
370
+ expect(order).toStrictEqual(['terminal-throw', 'inner-finally', 'outer-finally']);
371
+ });
372
+ it('all finally blocks run in reverse order when terminal throws', async () => {
373
+ const registry = new MiddlewareRegistry();
374
+ const order = [];
375
+ const a = async function* (context, next) {
376
+ try {
377
+ order.push('a-enter');
378
+ return yield* next(context);
379
+ }
380
+ finally {
381
+ order.push('a-finally');
382
+ }
383
+ };
384
+ const b = async function* (context, next) {
385
+ try {
386
+ order.push('b-enter');
387
+ return yield* next(context);
388
+ }
389
+ finally {
390
+ order.push('b-finally');
391
+ }
392
+ };
393
+ const c = async function* (context, next) {
394
+ try {
395
+ order.push('c-enter');
396
+ return yield* next(context);
397
+ }
398
+ finally {
399
+ order.push('c-finally');
400
+ }
401
+ };
402
+ registry.add(TestStage, a);
403
+ registry.add(TestStage, b);
404
+ registry.add(TestStage, c);
405
+ // eslint-disable-next-line require-yield
406
+ const terminal = async function* () {
407
+ throw new Error('boom');
408
+ };
409
+ const chain = registry.compose(TestStage, terminal);
410
+ await expect(collect(chain({ value: 'test' }))).rejects.toThrow('boom');
411
+ expect(order).toStrictEqual(['a-enter', 'b-enter', 'c-enter', 'c-finally', 'b-finally', 'a-finally']);
412
+ });
413
+ it('finally runs even when caller abandons the generator mid-stream', async () => {
414
+ const registry = new MiddlewareRegistry();
415
+ const order = [];
416
+ const middleware = async function* (context, next) {
417
+ try {
418
+ return yield* next(context);
419
+ }
420
+ finally {
421
+ order.push('middleware-finally');
422
+ }
423
+ };
424
+ registry.add(TestStage, middleware);
425
+ const terminal = async function* () {
426
+ yield { data: 'event-1' };
427
+ yield { data: 'event-2' };
428
+ yield { data: 'event-3' };
429
+ return { output: 'done' };
430
+ };
431
+ const chain = registry.compose(TestStage, terminal);
432
+ const gen = chain({ value: 'test' });
433
+ // Only consume one event then abandon (call return to close the generator)
434
+ await gen.next();
435
+ await gen.return({ output: 'abandoned' });
436
+ expect(order).toStrictEqual(['middleware-finally']);
437
+ });
438
+ it('finally runs in both middleware when caller abandons mid-stream', async () => {
439
+ const registry = new MiddlewareRegistry();
440
+ const order = [];
441
+ const outer = async function* (context, next) {
442
+ try {
443
+ return yield* next(context);
444
+ }
445
+ finally {
446
+ order.push('outer-finally');
447
+ }
448
+ };
449
+ const inner = async function* (context, next) {
450
+ try {
451
+ return yield* next(context);
452
+ }
453
+ finally {
454
+ order.push('inner-finally');
455
+ }
456
+ };
457
+ registry.add(TestStage, outer);
458
+ registry.add(TestStage, inner);
459
+ const terminal = async function* () {
460
+ yield { data: 'event-1' };
461
+ yield { data: 'event-2' };
462
+ return { output: 'done' };
463
+ };
464
+ const chain = registry.compose(TestStage, terminal);
465
+ const gen = chain({ value: 'test' });
466
+ await gen.next();
467
+ await gen.return({ output: 'abandoned' });
468
+ expect(order).toStrictEqual(['inner-finally', 'outer-finally']);
469
+ });
470
+ });
471
+ describe('remove', () => {
472
+ it('removes a handler so it no longer runs', async () => {
473
+ const registry = new MiddlewareRegistry();
474
+ const callOrder = [];
475
+ const handler = async function* (context, next) {
476
+ callOrder.push(1);
477
+ return yield* next(context);
478
+ };
479
+ registry.add(TestStage, handler);
480
+ registry.remove(TestStage, handler);
481
+ // eslint-disable-next-line require-yield
482
+ const terminal = async function* () {
483
+ callOrder.push(2);
484
+ return { output: 'done' };
485
+ };
486
+ await collect(registry.invoke(TestStage, { value: 'test' }, terminal));
487
+ expect(callOrder).toStrictEqual([2]);
488
+ });
489
+ it('only removes the first occurrence of a duplicate handler', async () => {
490
+ const registry = new MiddlewareRegistry();
491
+ let callCount = 0;
492
+ const handler = async function* (context, next) {
493
+ callCount++;
494
+ return yield* next(context);
495
+ };
496
+ registry.add(TestStage, handler);
497
+ registry.add(TestStage, handler);
498
+ registry.remove(TestStage, handler);
499
+ // eslint-disable-next-line require-yield
500
+ const terminal = async function* () {
501
+ return { output: 'done' };
502
+ };
503
+ await collect(registry.invoke(TestStage, { value: 'test' }, terminal));
504
+ expect(callCount).toBe(1);
505
+ });
506
+ it('is a no-op when handler was never registered', async () => {
507
+ const registry = new MiddlewareRegistry();
508
+ const handler = async function* (context, next) {
509
+ return yield* next(context);
510
+ };
511
+ // Should not throw
512
+ registry.remove(TestStage, handler);
513
+ });
514
+ it('is a no-op when stage has no handlers', () => {
515
+ const registry = new MiddlewareRegistry();
516
+ const OtherStage = createStage('other');
517
+ const handler = async function* (context, next) {
518
+ return yield* next(context);
519
+ };
520
+ // Should not throw
521
+ registry.remove(OtherStage, handler);
522
+ });
523
+ });
524
+ });
525
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../../src/middleware/__tests__/registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA;AAE3E,KAAK,UAAU,OAAO,CAAkB,GAA+C;IACrF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,GAA6C,CAAC,CAAA;IAC/F,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAClC,CAAC;AAeD,MAAM,SAAS,GAAG,WAAW,CAAqC,MAAM,CAAC,CAAA;AAEzE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,SAAS,GAAa,EAAE,CAAA;YAE9B,MAAM,QAAQ,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACpG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,MAAM,QAAQ,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACpG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACjC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEjC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,oCAAoC;YACpC,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC5B,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC,EAAE,GAAG;gBACvF,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE,CAAA;gBACpC,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAA;YAC1C,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YAEnE,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAA;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,SAAS,GAAa,EAAE,CAAA;YAE9B,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACnC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBAC7B,OAAO,MAAM,CAAA;YACf,CAAC,CAAA;YAED,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACnC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBAC7B,OAAO,MAAM,CAAA;YACf,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAE9B,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;YAEvC,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;QAC7G,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC1F,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,IAAI,cAAc,GAAG,KAAK,CAAA;YAC1B,IAAI,WAAW,GAAG,KAAK,CAAA;YAEvB,MAAM,YAAY,GAA0D,KAAK,SAAS,CAAC;gBACzF,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;gBAC3B,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAA;YACtC,CAAC,CAAA;YAED,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,WAAW,GAAG,IAAI,CAAA;gBAClB,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YACrC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAE9B,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,cAAc,GAAG,IAAI,CAAA;gBACrB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;YAC/B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;YAElE,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAClC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;QAC3D,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,WAAW,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACvG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;YAEpC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzB,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAA;YACtC,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;YAElE,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;YAC7F,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,MAAM,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBAClG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;gBACzB,IAAI,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;gBACjC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;oBAC9B,wCAAwC;oBACxC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBAChC,MAAM,KAAK,CAAA;oBACb,CAAC;oBACD,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;gBAC/B,CAAC;gBACD,OAAO,UAAU,CAAC,KAAK,CAAA;YACzB,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YAE/B,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;gBACxB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;gBACxB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;gBACxB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;gBACxB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;YAElE,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACtD,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,IAAI,eAAwC,CAAA;YAE5C,MAAM,QAAQ,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACpG,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;gBAClD,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC9B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEjC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC,EAAE,GAAG;gBACvF,eAAe,GAAG,GAAG,CAAA;gBACrB,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAA;YAC9B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;YAE9D,MAAM,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,IAAI,eAAwC,CAAA;YAE5C,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAA;YACrE,CAAC,CAAA;YAED,MAAM,MAAM,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBAClG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC,CAAA;YACtE,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YAE/B,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC,EAAE,GAAG;gBACvF,eAAe,GAAG,GAAG,CAAA;gBACrB,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAA;YAC9B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;YAE3D,MAAM,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAA;YACtE,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC/C,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,IAAI,WAA8B,CAAA;YAElC,MAAM,OAAO,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACnG,IAAI,CAAC;oBACH,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,WAAW,GAAG,KAAc,CAAA;oBAC5B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;gBAChC,CAAC;YACH,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAEhC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACnC,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;YAE1D,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,CAAC,WAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,yCAAyC;YACzC,MAAM,OAAO,GAA0D,KAAK,SAAS,CAAC;gBACpF,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;YACrC,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAEhC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,WAAW,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACvG,IAAI,CAAC;oBACH,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;gBACtC,CAAC;YACH,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;YAEpC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACnC,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACtF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;QAC7D,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,WAAW,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACvG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;YAEpC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,IAAI,cAAc,EAAE,CAAA;YAC5B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,WAAW,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACvG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;YAEpC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,IAAI,cAAc,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;YAClF,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAE9B,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,IAAI,cAAc,EAAE,CAAA;YAC5B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAE9B,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,IAAI,cAAc,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;YAClF,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,KAAK,GAAa,EAAE,CAAA;YAE1B,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,IAAI,CAAC;oBACH,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC,CAAA;YAED,yCAAyC;YACzC,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC;gBAClF,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBACzB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACnC,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAE9B,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;YAClC,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAEjF,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,KAAK,GAAa,EAAE,CAAA;YAE1B,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,IAAI,CAAC;oBACH,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC,CAAA;YAED,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,IAAI,CAAC;oBACH,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAE9B,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;gBAC5B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;YACtC,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;YAEpF,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAA;QACnF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,KAAK,GAAa,EAAE,CAAA;YAE1B,MAAM,CAAC,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBAC7F,IAAI,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACrB,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACzB,CAAC;YACH,CAAC,CAAA;YAED,MAAM,CAAC,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBAC7F,IAAI,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACrB,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACzB,CAAC;YACH,CAAC,CAAA;YAED,MAAM,CAAC,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBAC7F,IAAI,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACrB,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACzB,CAAC;YACH,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAC1B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAC1B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAE1B,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAA;YACzB,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAEvE,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;QACvG,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,KAAK,GAAa,EAAE,CAAA;YAE1B,MAAM,UAAU,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACtG,IAAI,CAAC;oBACH,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;YAEnC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAEpC,2EAA2E;YAC3E,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAChB,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;YAEzC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,KAAK,GAAa,EAAE,CAAA;YAE1B,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,IAAI,CAAC;oBACH,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC,CAAA;YAED,MAAM,KAAK,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACjG,IAAI,CAAC;oBACH,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAE9B,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACnD,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAEpC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAChB,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;YAEzC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,SAAS,GAAa,EAAE,CAAA;YAE9B,MAAM,OAAO,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACnG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAChC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAEnC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,IAAI,SAAS,GAAG,CAAC,CAAA;YAEjB,MAAM,OAAO,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACnG,SAAS,EAAE,CAAA;gBACX,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAChC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAChC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAEnC,yCAAyC;YACzC,MAAM,QAAQ,GAAuD,KAAK,SAAS,CAAC;gBAClF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;YAC3B,CAAC,CAAA;YAED,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAEzC,MAAM,OAAO,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACnG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,mBAAmB;YACnB,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAA;YACzC,MAAM,UAAU,GAAG,WAAW,CAAqC,OAAO,CAAC,CAAA;YAE3E,MAAM,OAAO,GAA0D,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI;gBACnG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC,CAAA;YAED,mBAAmB;YACnB,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export type { MiddlewareStage, MiddlewareNext, MiddlewareHandler, MiddlewareHandlerOf, MiddlewareNextOf, MiddlewareInputHandler, MiddlewareOutputHandler, MiddlewareInputPhase, MiddlewareWrapPhase, MiddlewareOutputPhase, MiddlewarePhase, MiddlewarePhaseKind, } from './types.js';
2
+ export { createStage, InvokeModelStage, ExecuteToolStage, AgentStreamStage } from './stages.js';
3
+ export type { InvokeModelContext, InvokeModelResult, ExecuteToolContext, ExecuteToolResult, AgentStreamContext, AgentStreamResult, MiddlewareInterruptResult, MiddlewareInterruptible, } from './stages.js';
4
+ export { MiddlewareRegistry } from './registry.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC/F,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { createStage, InvokeModelStage, ExecuteToolStage, AgentStreamStage } from './stages.js';
2
+ export { MiddlewareRegistry } from './registry.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/middleware/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAW/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,58 @@
1
+ import type { MiddlewareStage, MiddlewareHandler, MiddlewareNext, MiddlewareInputPhase, MiddlewareOutputPhase, MiddlewareInputHandler, MiddlewareOutputHandler } from './types.js';
2
+ /**
3
+ * Registry that stores middleware handlers keyed by stage tokens
4
+ * and composes them into execution chains with phase ordering.
5
+ */
6
+ export declare class MiddlewareRegistry {
7
+ private readonly _handlers;
8
+ constructor();
9
+ /**
10
+ * Register a middleware handler for a given stage (Wrap phase).
11
+ * Handlers are stored in registration order within their phase.
12
+ *
13
+ * @param stage - The stage token to register the handler for
14
+ * @param handler - The middleware handler function
15
+ */
16
+ add<TContext, TResult, TEvent>(stage: MiddlewareStage<TContext, TResult, TEvent>, handler: MiddlewareHandler<TContext, TResult, TEvent>): void;
17
+ /**
18
+ * Register an Input phase handler. Transforms context before the Wrap chain runs.
19
+ * Multiple Input handlers compose in registration order (each sees the previous handler's output).
20
+ * Returns the adapted handler for cleanup purposes.
21
+ */
22
+ addInput<TContext, TResult, TEvent>(phase: MiddlewareInputPhase<TContext, TResult, TEvent>, handler: MiddlewareInputHandler<TContext>): MiddlewareHandler<TContext, TResult, TEvent>;
23
+ /**
24
+ * Register an Output phase handler. Transforms result after the Wrap chain completes.
25
+ * Multiple Output handlers compose in registration order (each sees the previous handler's output).
26
+ * Returns the adapted handler for cleanup purposes.
27
+ */
28
+ addOutput<TContext, TResult, TEvent>(phase: MiddlewareOutputPhase<TContext, TResult, TEvent>, handler: MiddlewareOutputHandler<TResult>): MiddlewareHandler<TContext, TResult, TEvent>;
29
+ /**
30
+ * Remove a previously registered middleware handler for a given stage.
31
+ * Removes the first occurrence of the handler (by reference equality on the adapted handler).
32
+ *
33
+ * @param stage - The stage token to remove the handler from
34
+ * @param handler - The middleware handler function to remove
35
+ */
36
+ remove<TContext, TResult, TEvent>(stage: MiddlewareStage<TContext, TResult, TEvent>, handler: MiddlewareHandler<TContext, TResult, TEvent>): void;
37
+ /**
38
+ * Compose all registered handlers for a stage into a single middleware chain.
39
+ * Handlers are ordered by phase (input → output → wrap), then by registration order within phase.
40
+ * First in the composed chain = outermost.
41
+ *
42
+ * @param stage - The stage token to compose handlers for
43
+ * @param terminal - The innermost function that performs actual stage execution
44
+ * @returns A single function representing the full middleware chain
45
+ */
46
+ compose<TContext, TResult, TEvent>(stage: MiddlewareStage<TContext, TResult, TEvent>, terminal: MiddlewareNext<TContext, TResult, TEvent>): MiddlewareNext<TContext, TResult, TEvent>;
47
+ /**
48
+ * Compose and invoke the middleware chain for a stage in one call.
49
+ * Equivalent to `compose(stage, terminal)(context)` but reads more clearly at call sites.
50
+ *
51
+ * @param stage - The stage token to invoke
52
+ * @param context - The context to pass into the chain
53
+ * @param terminal - The innermost function that performs actual stage execution
54
+ * @returns An async generator yielding events and returning the stage result
55
+ */
56
+ invoke<TContext, TResult, TEvent>(stage: MiddlewareStage<TContext, TResult, TEvent>, context: TContext, terminal: MiddlewareNext<TContext, TResult, TEvent>): AsyncGenerator<TEvent, TResult, undefined>;
57
+ }
58
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/middleware/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,cAAc,EAEd,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAWnB;;;GAGG;AACH,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqE;;IAM/F;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC3B,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACjD,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GACpD,IAAI;IAMP;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAChC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACtD,OAAO,EAAE,sBAAsB,CAAC,QAAQ,CAAC,GACxC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;IAY/C;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EACjC,KAAK,EAAE,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACvD,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACxC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;IAY/C;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC9B,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACjD,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GACpD,IAAI;IAOP;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC/B,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACjD,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAClD,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;IAgB5C;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC9B,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EACjD,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAClD,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;CAI9C"}