@strands-agents/sdk 1.0.0 → 1.2.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 (284) hide show
  1. package/README.md +6 -0
  2. package/dist/src/__fixtures__/agent-helpers.d.ts +16 -1
  3. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  4. package/dist/src/__fixtures__/agent-helpers.js +42 -0
  5. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  6. package/dist/src/__fixtures__/tool-helpers.d.ts +2 -1
  7. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
  8. package/dist/src/__fixtures__/tool-helpers.js +20 -3
  9. package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
  10. package/dist/src/__tests__/interrupt.test.d.ts +2 -0
  11. package/dist/src/__tests__/interrupt.test.d.ts.map +1 -0
  12. package/dist/src/__tests__/interrupt.test.js +264 -0
  13. package/dist/src/__tests__/interrupt.test.js.map +1 -0
  14. package/dist/src/__tests__/mcp.test.js +447 -7
  15. package/dist/src/__tests__/mcp.test.js.map +1 -1
  16. package/dist/src/agent/__tests__/agent.hook.test.js +551 -1
  17. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
  18. package/dist/src/agent/__tests__/agent.interrupt.test.d.ts +2 -0
  19. package/dist/src/agent/__tests__/agent.interrupt.test.d.ts.map +1 -0
  20. package/dist/src/agent/__tests__/agent.interrupt.test.js +779 -0
  21. package/dist/src/agent/__tests__/agent.interrupt.test.js.map +1 -0
  22. package/dist/src/agent/__tests__/agent.model-retry.test.d.ts +2 -0
  23. package/dist/src/agent/__tests__/agent.model-retry.test.d.ts.map +1 -0
  24. package/dist/src/agent/__tests__/agent.model-retry.test.js +161 -0
  25. package/dist/src/agent/__tests__/agent.model-retry.test.js.map +1 -0
  26. package/dist/src/agent/__tests__/agent.test.js +174 -0
  27. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  28. package/dist/src/agent/__tests__/snapshot.test.js +148 -4
  29. package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
  30. package/dist/src/agent/agent-as-tool.d.ts.map +1 -1
  31. package/dist/src/agent/agent-as-tool.js +2 -3
  32. package/dist/src/agent/agent-as-tool.js.map +1 -1
  33. package/dist/src/agent/agent.d.ts +94 -4
  34. package/dist/src/agent/agent.d.ts.map +1 -1
  35. package/dist/src/agent/agent.js +625 -223
  36. package/dist/src/agent/agent.js.map +1 -1
  37. package/dist/src/agent/snapshot.d.ts +11 -19
  38. package/dist/src/agent/snapshot.d.ts.map +1 -1
  39. package/dist/src/agent/snapshot.js +23 -19
  40. package/dist/src/agent/snapshot.js.map +1 -1
  41. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +230 -9
  42. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -1
  43. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +19 -6
  44. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
  45. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +422 -41
  46. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
  47. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +75 -1
  48. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
  49. package/dist/src/conversation-manager/conversation-manager.d.ts +67 -22
  50. package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -1
  51. package/dist/src/conversation-manager/conversation-manager.js +65 -13
  52. package/dist/src/conversation-manager/conversation-manager.js.map +1 -1
  53. package/dist/src/conversation-manager/index.d.ts +1 -1
  54. package/dist/src/conversation-manager/index.d.ts.map +1 -1
  55. package/dist/src/conversation-manager/index.js +1 -1
  56. package/dist/src/conversation-manager/index.js.map +1 -1
  57. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +43 -10
  58. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  59. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +202 -45
  60. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  61. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +23 -1
  62. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
  63. package/dist/src/conversation-manager/summarizing-conversation-manager.js +39 -17
  64. package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
  65. package/dist/src/hooks/__tests__/events.test.js +99 -12
  66. package/dist/src/hooks/__tests__/events.test.js.map +1 -1
  67. package/dist/src/hooks/__tests__/registry.test.js +166 -2
  68. package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
  69. package/dist/src/hooks/events.d.ts +125 -32
  70. package/dist/src/hooks/events.d.ts.map +1 -1
  71. package/dist/src/hooks/events.js +111 -8
  72. package/dist/src/hooks/events.js.map +1 -1
  73. package/dist/src/hooks/index.d.ts +4 -3
  74. package/dist/src/hooks/index.d.ts.map +1 -1
  75. package/dist/src/hooks/index.js +2 -1
  76. package/dist/src/hooks/index.js.map +1 -1
  77. package/dist/src/hooks/registry.d.ts +12 -12
  78. package/dist/src/hooks/registry.d.ts.map +1 -1
  79. package/dist/src/hooks/registry.js +55 -15
  80. package/dist/src/hooks/registry.js.map +1 -1
  81. package/dist/src/hooks/types.d.ts +23 -0
  82. package/dist/src/hooks/types.d.ts.map +1 -1
  83. package/dist/src/hooks/types.js +17 -1
  84. package/dist/src/hooks/types.js.map +1 -1
  85. package/dist/src/index.d.ts +12 -6
  86. package/dist/src/index.d.ts.map +1 -1
  87. package/dist/src/index.js +7 -2
  88. package/dist/src/index.js.map +1 -1
  89. package/dist/src/interrupt.d.ts +247 -0
  90. package/dist/src/interrupt.d.ts.map +1 -0
  91. package/dist/src/interrupt.js +316 -0
  92. package/dist/src/interrupt.js.map +1 -0
  93. package/dist/src/mcp.d.ts +61 -4
  94. package/dist/src/mcp.d.ts.map +1 -1
  95. package/dist/src/mcp.js +161 -25
  96. package/dist/src/mcp.js.map +1 -1
  97. package/dist/src/models/__tests__/anthropic.test.js +78 -8
  98. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  99. package/dist/src/models/__tests__/bedrock.test.js +156 -18
  100. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  101. package/dist/src/models/__tests__/defaults.test.d.ts +2 -0
  102. package/dist/src/models/__tests__/defaults.test.d.ts.map +1 -0
  103. package/dist/src/models/__tests__/defaults.test.js +36 -0
  104. package/dist/src/models/__tests__/defaults.test.js.map +1 -0
  105. package/dist/src/models/__tests__/google.test.js +72 -6
  106. package/dist/src/models/__tests__/google.test.js.map +1 -1
  107. package/dist/src/models/anthropic.d.ts +10 -0
  108. package/dist/src/models/anthropic.d.ts.map +1 -1
  109. package/dist/src/models/anthropic.js +14 -4
  110. package/dist/src/models/anthropic.js.map +1 -1
  111. package/dist/src/models/bedrock.d.ts +17 -3
  112. package/dist/src/models/bedrock.d.ts.map +1 -1
  113. package/dist/src/models/bedrock.js +80 -13
  114. package/dist/src/models/bedrock.js.map +1 -1
  115. package/dist/src/models/defaults.d.ts +10 -0
  116. package/dist/src/models/defaults.d.ts.map +1 -1
  117. package/dist/src/models/defaults.js +129 -0
  118. package/dist/src/models/defaults.js.map +1 -1
  119. package/dist/src/models/google/model.d.ts.map +1 -1
  120. package/dist/src/models/google/model.js +4 -2
  121. package/dist/src/models/google/model.js.map +1 -1
  122. package/dist/src/models/google/types.d.ts +10 -0
  123. package/dist/src/models/google/types.d.ts.map +1 -1
  124. package/dist/src/models/model.d.ts +15 -0
  125. package/dist/src/models/model.d.ts.map +1 -1
  126. package/dist/src/models/model.js +18 -0
  127. package/dist/src/models/model.js.map +1 -1
  128. package/dist/src/models/openai/__tests__/chat.test.js +55 -2
  129. package/dist/src/models/openai/__tests__/chat.test.js.map +1 -1
  130. package/dist/src/models/openai/__tests__/responses.test.js +19 -0
  131. package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
  132. package/dist/src/models/openai/errors.d.ts.map +1 -1
  133. package/dist/src/models/openai/errors.js +7 -4
  134. package/dist/src/models/openai/errors.js.map +1 -1
  135. package/dist/src/models/openai/model.d.ts.map +1 -1
  136. package/dist/src/models/openai/model.js +2 -2
  137. package/dist/src/models/openai/model.js.map +1 -1
  138. package/dist/src/multiagent/__tests__/graph.test.js +69 -0
  139. package/dist/src/multiagent/__tests__/graph.test.js.map +1 -1
  140. package/dist/src/multiagent/__tests__/graph.tracer.test.js +14 -0
  141. package/dist/src/multiagent/__tests__/graph.tracer.test.js.map +1 -1
  142. package/dist/src/multiagent/__tests__/interrupts.test.d.ts +2 -0
  143. package/dist/src/multiagent/__tests__/interrupts.test.d.ts.map +1 -0
  144. package/dist/src/multiagent/__tests__/interrupts.test.js +390 -0
  145. package/dist/src/multiagent/__tests__/interrupts.test.js.map +1 -0
  146. package/dist/src/multiagent/__tests__/nodes.test.js +13 -0
  147. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
  148. package/dist/src/multiagent/__tests__/state.test.js +139 -1
  149. package/dist/src/multiagent/__tests__/state.test.js.map +1 -1
  150. package/dist/src/multiagent/__tests__/swarm.test.js +77 -0
  151. package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -1
  152. package/dist/src/multiagent/events.d.ts +15 -1
  153. package/dist/src/multiagent/events.d.ts.map +1 -1
  154. package/dist/src/multiagent/events.js +18 -0
  155. package/dist/src/multiagent/events.js.map +1 -1
  156. package/dist/src/multiagent/graph.d.ts +59 -3
  157. package/dist/src/multiagent/graph.d.ts.map +1 -1
  158. package/dist/src/multiagent/graph.js +201 -34
  159. package/dist/src/multiagent/graph.js.map +1 -1
  160. package/dist/src/multiagent/multiagent.d.ts +77 -3
  161. package/dist/src/multiagent/multiagent.d.ts.map +1 -1
  162. package/dist/src/multiagent/multiagent.js +115 -1
  163. package/dist/src/multiagent/multiagent.js.map +1 -1
  164. package/dist/src/multiagent/nodes.d.ts +18 -0
  165. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  166. package/dist/src/multiagent/nodes.js +69 -22
  167. package/dist/src/multiagent/nodes.js.map +1 -1
  168. package/dist/src/multiagent/state.d.ts +39 -3
  169. package/dist/src/multiagent/state.d.ts.map +1 -1
  170. package/dist/src/multiagent/state.js +80 -1
  171. package/dist/src/multiagent/state.js.map +1 -1
  172. package/dist/src/multiagent/swarm.d.ts +30 -1
  173. package/dist/src/multiagent/swarm.d.ts.map +1 -1
  174. package/dist/src/multiagent/swarm.js +166 -33
  175. package/dist/src/multiagent/swarm.js.map +1 -1
  176. package/dist/src/registry/__tests__/tool-registry.test.js +37 -0
  177. package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -1
  178. package/dist/src/registry/tool-registry.d.ts +13 -7
  179. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  180. package/dist/src/registry/tool-registry.js +35 -10
  181. package/dist/src/registry/tool-registry.js.map +1 -1
  182. package/dist/src/retry/__tests__/backoff-strategy.test.d.ts +2 -0
  183. package/dist/src/retry/__tests__/backoff-strategy.test.d.ts.map +1 -0
  184. package/dist/src/retry/__tests__/backoff-strategy.test.js +116 -0
  185. package/dist/src/retry/__tests__/backoff-strategy.test.js.map +1 -0
  186. package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts +2 -0
  187. package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts.map +1 -0
  188. package/dist/src/retry/__tests__/default-model-retry-strategy.test.js +225 -0
  189. package/dist/src/retry/__tests__/default-model-retry-strategy.test.js.map +1 -0
  190. package/dist/src/retry/backoff-strategy.d.ts +108 -0
  191. package/dist/src/retry/backoff-strategy.d.ts.map +1 -0
  192. package/dist/src/retry/backoff-strategy.js +86 -0
  193. package/dist/src/retry/backoff-strategy.js.map +1 -0
  194. package/dist/src/retry/default-model-retry-strategy.d.ts +76 -0
  195. package/dist/src/retry/default-model-retry-strategy.d.ts.map +1 -0
  196. package/dist/src/retry/default-model-retry-strategy.js +104 -0
  197. package/dist/src/retry/default-model-retry-strategy.js.map +1 -0
  198. package/dist/src/retry/index.d.ts +8 -0
  199. package/dist/src/retry/index.d.ts.map +1 -0
  200. package/dist/src/retry/index.js +7 -0
  201. package/dist/src/retry/index.js.map +1 -0
  202. package/dist/src/retry/model-retry-strategy.d.ts +80 -0
  203. package/dist/src/retry/model-retry-strategy.d.ts.map +1 -0
  204. package/dist/src/retry/model-retry-strategy.js +85 -0
  205. package/dist/src/retry/model-retry-strategy.js.map +1 -0
  206. package/dist/src/retry/retry-strategy.d.ts +34 -0
  207. package/dist/src/retry/retry-strategy.d.ts.map +1 -0
  208. package/dist/src/retry/retry-strategy.js +25 -0
  209. package/dist/src/retry/retry-strategy.js.map +1 -0
  210. package/dist/src/session/__tests__/session-manager.test.js +84 -3
  211. package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
  212. package/dist/src/session/session-manager.d.ts +11 -2
  213. package/dist/src/session/session-manager.d.ts.map +1 -1
  214. package/dist/src/session/session-manager.js +17 -6
  215. package/dist/src/session/session-manager.js.map +1 -1
  216. package/dist/src/telemetry/__tests__/meter.test.js +5 -27
  217. package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
  218. package/dist/src/telemetry/meter.d.ts +12 -4
  219. package/dist/src/telemetry/meter.d.ts.map +1 -1
  220. package/dist/src/telemetry/meter.js +13 -8
  221. package/dist/src/telemetry/meter.js.map +1 -1
  222. package/dist/src/tools/__tests__/tool.test.js +24 -1
  223. package/dist/src/tools/__tests__/tool.test.js.map +1 -1
  224. package/dist/src/tools/function-tool.d.ts.map +1 -1
  225. package/dist/src/tools/function-tool.js +6 -1
  226. package/dist/src/tools/function-tool.js.map +1 -1
  227. package/dist/src/tools/mcp-tool.d.ts.map +1 -1
  228. package/dist/src/tools/mcp-tool.js +3 -2
  229. package/dist/src/tools/mcp-tool.js.map +1 -1
  230. package/dist/src/tools/tool.d.ts +10 -1
  231. package/dist/src/tools/tool.d.ts.map +1 -1
  232. package/dist/src/tools/tool.js +12 -0
  233. package/dist/src/tools/tool.js.map +1 -1
  234. package/dist/src/tsconfig.tsbuildinfo +1 -1
  235. package/dist/src/types/__tests__/agent.test.js +97 -0
  236. package/dist/src/types/__tests__/agent.test.js.map +1 -1
  237. package/dist/src/types/agent.d.ts +48 -8
  238. package/dist/src/types/agent.d.ts.map +1 -1
  239. package/dist/src/types/agent.js +28 -3
  240. package/dist/src/types/agent.js.map +1 -1
  241. package/dist/src/types/interrupt.d.ts +103 -0
  242. package/dist/src/types/interrupt.d.ts.map +1 -0
  243. package/dist/src/types/interrupt.js +63 -0
  244. package/dist/src/types/interrupt.js.map +1 -0
  245. package/dist/src/types/messages.d.ts +2 -1
  246. package/dist/src/types/messages.d.ts.map +1 -1
  247. package/dist/src/types/messages.js.map +1 -1
  248. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts +2 -0
  249. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts.map +1 -0
  250. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +292 -0
  251. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +1 -0
  252. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts +2 -0
  253. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts.map +1 -0
  254. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +148 -0
  255. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +1 -0
  256. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts +2 -0
  257. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts.map +1 -0
  258. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js +78 -0
  259. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js.map +1 -0
  260. package/dist/src/vended-plugins/context-offloader/index.d.ts +23 -0
  261. package/dist/src/vended-plugins/context-offloader/index.d.ts.map +1 -0
  262. package/dist/src/vended-plugins/context-offloader/index.js +21 -0
  263. package/dist/src/vended-plugins/context-offloader/index.js.map +1 -0
  264. package/dist/src/vended-plugins/context-offloader/plugin.d.ts +48 -0
  265. package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -0
  266. package/dist/src/vended-plugins/context-offloader/plugin.js +244 -0
  267. package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -0
  268. package/dist/src/vended-plugins/context-offloader/storage.d.ts +114 -0
  269. package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -0
  270. package/dist/src/vended-plugins/context-offloader/storage.js +204 -0
  271. package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -0
  272. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +12 -0
  273. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
  274. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +3 -0
  275. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  276. package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
  277. package/dist/src/vended-tools/bash/bash.js +0 -3
  278. package/dist/src/vended-tools/bash/bash.js.map +1 -1
  279. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +3 -0
  280. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
  281. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +3 -0
  282. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
  283. package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
  284. package/package.json +9 -5
package/dist/src/index.js CHANGED
@@ -10,10 +10,13 @@ export { Agent } from './agent/agent.js';
10
10
  export { StateStore } from './state-store.js';
11
11
  // Agent types
12
12
  export { AgentResult } from './types/agent.js';
13
+ // Snapshot types
14
+ export { SNAPSHOT_SCHEMA_VERSION } from './types/snapshot.js';
13
15
  // Error types
14
16
  // Note: CancelledError is intentionally not exported — it is an internal
15
17
  // control-flow mechanism, never thrown to consumers. See its docstring in errors.ts.
16
18
  export { ModelError, ContextWindowOverflowError, MaxTokensError, JsonValidationError, ConcurrentInvocationError, ModelThrottledError, ToolValidationError, StructuredOutputError, } from './errors.js';
19
+ export { InterruptResponseContent } from './types/interrupt.js';
17
20
  // Message classes
18
21
  export { TextBlock, ToolUseBlock, ToolResultBlock, ReasoningBlock, CachePointBlock, GuardContentBlock, Message, JsonBlock, contentBlockFromData, toolResultContentFromData, } from './types/messages.js';
19
22
  // Citation class
@@ -34,7 +37,9 @@ export { Model } from './models/model.js';
34
37
  // Bedrock model provider
35
38
  export { BedrockModel as BedrockModel } from './models/bedrock.js';
36
39
  // Hooks system
37
- export { HookRegistry, StreamEvent, HookableEvent, InitializedEvent, BeforeInvocationEvent, AfterInvocationEvent, MessageAddedEvent, BeforeToolCallEvent, AfterToolCallEvent, BeforeModelCallEvent, AfterModelCallEvent, BeforeToolsEvent, AfterToolsEvent, ContentBlockEvent, ModelMessageEvent, ToolResultEvent, ToolStreamUpdateEvent, AgentResultEvent, ModelStreamUpdateEvent, } from './hooks/index.js';
40
+ export { HookRegistry, HookOrder, StreamEvent, HookableEvent, InitializedEvent, BeforeInvocationEvent, AfterInvocationEvent, MessageAddedEvent, BeforeToolCallEvent, AfterToolCallEvent, BeforeModelCallEvent, AfterModelCallEvent, BeforeToolsEvent, AfterToolsEvent, ContentBlockEvent, ModelMessageEvent, ToolResultEvent, ToolStreamUpdateEvent, AgentResultEvent, InterruptEvent, ModelStreamUpdateEvent, } from './hooks/index.js';
41
+ // Retry
42
+ export { ConstantBackoff, LinearBackoff, ExponentialBackoff, ModelRetryStrategy, DefaultModelRetryStrategy, } from './retry/index.js';
38
43
  // Conversation Manager
39
44
  export { ConversationManager, } from './conversation-manager/conversation-manager.js';
40
45
  export { NullConversationManager } from './conversation-manager/null-conversation-manager.js';
@@ -43,7 +48,7 @@ export { SummarizingConversationManager, } from './conversation-manager/summariz
43
48
  // Logging
44
49
  export { configureLogging } from './logging/logger.js';
45
50
  // MCP Client types and implementations
46
- export { McpClient } from './mcp.js';
51
+ export { McpClient, } from './mcp.js';
47
52
  // Session management
48
53
  export { SessionManager } from './session/session-manager.js';
49
54
  export { FileStorage } from './session/file-storage.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Human-in-the-loop interrupt system for agent workflows.
3
+ *
4
+ * Interrupt Flow:
5
+ * 1. Hook or tool calls `event.interrupt()` or `context.interrupt()`
6
+ * 2. If resuming (response exists), the response is returned
7
+ * 3. Otherwise, agent execution halts with `stopReason: 'interrupt'`
8
+ * 4. User resumes by invoking agent with `interruptResponse` content blocks
9
+ * 5. On resume, `interrupt()` returns the user's response
10
+ */
11
+ import { InterruptResponseContent, type InterruptResponseContentData, type InterruptParams } from './types/interrupt.js';
12
+ import type { JSONValue } from './types/json.js';
13
+ import type { LocalAgent } from './types/agent.js';
14
+ import { Message, ToolResultBlock, type MessageData, type ToolResultBlockData } from './types/messages.js';
15
+ /**
16
+ * Origin of an interrupt:
17
+ * - `'tool'` — raised by a tool callback via `ToolContext.interrupt()`.
18
+ * - `'hook'` — raised by an agent-level hook (e.g. `BeforeToolCallEvent.interrupt()`).
19
+ * - `'multiagent-hook'` — raised by a multi-agent hook (e.g. `BeforeNodeCallEvent.interrupt()`).
20
+ */
21
+ export type InterruptSource = 'tool' | 'hook' | 'multiagent-hook';
22
+ /**
23
+ * Represents an interrupt that can pause agent execution for human-in-the-loop workflows.
24
+ */
25
+ export declare class Interrupt {
26
+ /**
27
+ * Unique identifier for this interrupt.
28
+ */
29
+ readonly id: string;
30
+ /**
31
+ * User-defined name for the interrupt.
32
+ */
33
+ readonly name: string;
34
+ /**
35
+ * User-provided reason for raising the interrupt.
36
+ */
37
+ readonly reason?: JSONValue;
38
+ /**
39
+ * Human response provided when resuming the agent after an interrupt.
40
+ */
41
+ response?: JSONValue;
42
+ /**
43
+ * Where this interrupt was raised from — a tool callback, an agent-level hook, or
44
+ * a multi-agent orchestrator hook. Always populated. When deserializing a snapshot
45
+ * produced by an older SDK that did not record this field, defaults to `'hook'`.
46
+ */
47
+ readonly source: InterruptSource;
48
+ constructor(data: {
49
+ id: string;
50
+ name: string;
51
+ reason?: JSONValue;
52
+ response?: JSONValue;
53
+ source?: InterruptSource;
54
+ });
55
+ /**
56
+ * Serializes the interrupt to a JSON-compatible object.
57
+ */
58
+ toJSON(): {
59
+ id: string;
60
+ name: string;
61
+ reason?: JSONValue;
62
+ response?: JSONValue;
63
+ source: InterruptSource;
64
+ };
65
+ /**
66
+ * Creates an Interrupt instance from a JSON object.
67
+ *
68
+ * @param data - JSON data to deserialize
69
+ * @returns Interrupt instance
70
+ */
71
+ static fromJSON(data: {
72
+ id: string;
73
+ name: string;
74
+ reason?: JSONValue;
75
+ response?: JSONValue;
76
+ source?: InterruptSource;
77
+ }): Interrupt;
78
+ }
79
+ /**
80
+ * Error thrown when human input is required to continue agent execution.
81
+ * Caught by the agent loop to trigger an interrupt stop.
82
+ */
83
+ export declare class InterruptError extends Error {
84
+ /**
85
+ * The interrupts that caused this error.
86
+ */
87
+ readonly interrupts: Interrupt[];
88
+ constructor(interrupt: Interrupt | Interrupt[]);
89
+ }
90
+ /**
91
+ * Data format for serialized interrupt state.
92
+ */
93
+ export interface InterruptStateData {
94
+ /**
95
+ * Map of interrupt IDs to interrupt data.
96
+ */
97
+ interrupts: Record<string, {
98
+ id: string;
99
+ name: string;
100
+ reason?: JSONValue;
101
+ response?: JSONValue;
102
+ }>;
103
+ /**
104
+ * Resume responses that were provided when resuming from an interrupt.
105
+ */
106
+ resumeResponses?: InterruptResponseContentData[] | undefined;
107
+ /**
108
+ * Whether the agent is in an interrupted state.
109
+ */
110
+ activated: boolean;
111
+ /**
112
+ * Pending tool execution state for resume after interrupt.
113
+ */
114
+ pendingToolExecution?: PendingToolExecution | undefined;
115
+ }
116
+ /**
117
+ * Pending tool execution state stored when an interrupt occurs mid-execution.
118
+ * Contains all data needed to resume tool execution without re-calling the model.
119
+ */
120
+ export interface PendingToolExecution {
121
+ /**
122
+ * The assistant message containing tool use blocks, serialized as MessageData.
123
+ */
124
+ assistantMessageData: MessageData;
125
+ /**
126
+ * Tool results that were completed before the interrupt.
127
+ * Maps toolUseId to serialized ToolResultBlock data.
128
+ */
129
+ completedToolResults: Record<string, {
130
+ toolResult: ToolResultBlockData;
131
+ }>;
132
+ }
133
+ /**
134
+ * Tracks the state of interrupt events raised during agent execution.
135
+ *
136
+ * Interrupt state is cleared after resuming.
137
+ */
138
+ export declare class InterruptState implements InterruptStateData {
139
+ /** Record of interrupt IDs to Interrupt instances. */
140
+ interrupts: Record<string, Interrupt>;
141
+ /** Resume responses provided when resuming from an interrupt. */
142
+ resumeResponses?: InterruptResponseContent[] | undefined;
143
+ /** Whether the agent is in an interrupted state. */
144
+ activated: boolean;
145
+ /** Pending tool execution state for resume. */
146
+ pendingToolExecution?: PendingToolExecution | undefined;
147
+ constructor();
148
+ /**
149
+ * Gets the pending tool execution state with reconstructed Message and ToolResultBlock objects.
150
+ * Returns undefined if there is no pending execution.
151
+ */
152
+ getPendingExecution(): {
153
+ assistantMessage: Message;
154
+ completedToolResults: Map<string, ToolResultBlock>;
155
+ } | undefined;
156
+ /**
157
+ * Sets the pending tool execution state.
158
+ */
159
+ setPendingToolExecution(pending: PendingToolExecution): void;
160
+ /**
161
+ * Clears the pending tool execution state.
162
+ */
163
+ clearPendingToolExecution(): void;
164
+ /**
165
+ * Returns the list of interrupts as an array.
166
+ */
167
+ getInterruptsList(): Interrupt[];
168
+ /**
169
+ * Returns all interrupts that have no response (i.e., were raised but not yet answered).
170
+ */
171
+ getUnansweredInterrupts(): Interrupt[];
172
+ /**
173
+ * Returns the first interrupt that has no response (i.e., was raised but not yet answered).
174
+ */
175
+ getUnansweredInterrupt(): Interrupt | undefined;
176
+ /**
177
+ * Activates the interrupt state.
178
+ */
179
+ activate(): void;
180
+ /**
181
+ * Deactivates the interrupt state and clears all interrupts and context.
182
+ */
183
+ deactivate(): void;
184
+ /**
185
+ * Configures the interrupt state for resuming from an interrupt.
186
+ * Populates interrupt responses from the provided content blocks.
187
+ *
188
+ * @param responses - Array of interrupt response content blocks
189
+ * @throws Error if an interrupt ID is not found
190
+ */
191
+ resume(responses: InterruptResponseContent[]): void;
192
+ /**
193
+ * Gets or creates an interrupt with the given ID.
194
+ * If the interrupt already exists, returns it (potentially with a response).
195
+ * If a preemptive response is provided and the interrupt is new, the response
196
+ * is stored on the interrupt so it returns immediately without halting execution.
197
+ *
198
+ * @param id - Unique identifier for the interrupt
199
+ * @param name - User-defined name for the interrupt
200
+ * @param reason - Optional reason for the interrupt
201
+ * @param response - Optional preemptive response to skip the interrupt
202
+ * @param source - Where the interrupt was raised from (tool or hook callback)
203
+ * @returns The interrupt (may have a response if resuming or preemptive)
204
+ */
205
+ getOrCreateInterrupt(id: string, name: string, reason?: JSONValue, response?: JSONValue, source?: InterruptSource): Interrupt;
206
+ /**
207
+ * Serializes the interrupt state to a JSON-compatible object.
208
+ */
209
+ toJSON(): InterruptStateData;
210
+ /**
211
+ * Creates an InterruptState instance from a JSON object.
212
+ *
213
+ * @param data - JSON data to deserialize
214
+ * @returns InterruptState instance
215
+ */
216
+ static fromJSON(data: InterruptStateData): InterruptState;
217
+ }
218
+ /**
219
+ * Interface for objects that support human-in-the-loop interrupts.
220
+ * Implemented by hook events and tool contexts that can pause agent execution.
221
+ */
222
+ export interface Interruptible {
223
+ interrupt<T = JSONValue>(params: InterruptParams): T;
224
+ }
225
+ /**
226
+ * Shared interrupt logic that accesses the agent's interrupt state to register or resume an interrupt.
227
+ *
228
+ * @param agent - The agent whose interrupt state to access
229
+ * @param interruptId - Unique identifier for this interrupt instance
230
+ * @param params - Interrupt parameters including name and optional reason
231
+ * @param source - Where the interrupt was raised from (tool callback vs hook callback)
232
+ * @returns The user's response when resuming from an interrupt
233
+ * @throws InterruptError when no response is available (first invocation)
234
+ *
235
+ * @internal
236
+ */
237
+ export declare function interruptFromAgent<T>(agent: LocalAgent, interruptId: string, params: InterruptParams, source: InterruptSource): T;
238
+ /**
239
+ * Interrupt-or-resume helper for multi-agent hooks where interrupts live on a per-node
240
+ * `Interrupt[]` list rather than on an agent's `InterruptState`. Mirrors the
241
+ * {@link interruptFromAgent} contract: returns the response if the interrupt already
242
+ * has one (resume path), otherwise records a new interrupt and throws `InterruptError`.
243
+ *
244
+ * @internal
245
+ */
246
+ export declare function interruptFromMultiAgentNode<T>(interrupts: Interrupt[], interruptId: string, params: InterruptParams, source: InterruptSource): T;
247
+ //# sourceMappingURL=interrupt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interrupt.d.ts","sourceRoot":"","sources":["../../src/interrupt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Human-in-the-loop interrupt system for agent workflows.
3
+ *
4
+ * Interrupt Flow:
5
+ * 1. Hook or tool calls `event.interrupt()` or `context.interrupt()`
6
+ * 2. If resuming (response exists), the response is returned
7
+ * 3. Otherwise, agent execution halts with `stopReason: 'interrupt'`
8
+ * 4. User resumes by invoking agent with `interruptResponse` content blocks
9
+ * 5. On resume, `interrupt()` returns the user's response
10
+ */
11
+ import { InterruptResponseContent } from './types/interrupt.js';
12
+ import { Message, ToolResultBlock } from './types/messages.js';
13
+ /**
14
+ * Represents an interrupt that can pause agent execution for human-in-the-loop workflows.
15
+ */
16
+ export class Interrupt {
17
+ /**
18
+ * Unique identifier for this interrupt.
19
+ */
20
+ id;
21
+ /**
22
+ * User-defined name for the interrupt.
23
+ */
24
+ name;
25
+ /**
26
+ * User-provided reason for raising the interrupt.
27
+ */
28
+ reason;
29
+ /**
30
+ * Human response provided when resuming the agent after an interrupt.
31
+ */
32
+ response;
33
+ /**
34
+ * Where this interrupt was raised from — a tool callback, an agent-level hook, or
35
+ * a multi-agent orchestrator hook. Always populated. When deserializing a snapshot
36
+ * produced by an older SDK that did not record this field, defaults to `'hook'`.
37
+ */
38
+ source;
39
+ constructor(data) {
40
+ this.id = data.id;
41
+ this.name = data.name;
42
+ if (data.reason !== undefined) {
43
+ this.reason = data.reason;
44
+ }
45
+ if (data.response !== undefined) {
46
+ this.response = data.response;
47
+ }
48
+ // Default for legacy snapshots that predate the `source` field; current code
49
+ // paths always supply a value explicitly.
50
+ this.source = data.source ?? 'hook';
51
+ }
52
+ /**
53
+ * Serializes the interrupt to a JSON-compatible object.
54
+ */
55
+ toJSON() {
56
+ return {
57
+ id: this.id,
58
+ name: this.name,
59
+ ...(this.reason !== undefined && { reason: this.reason }),
60
+ ...(this.response !== undefined && { response: this.response }),
61
+ source: this.source,
62
+ };
63
+ }
64
+ /**
65
+ * Creates an Interrupt instance from a JSON object.
66
+ *
67
+ * @param data - JSON data to deserialize
68
+ * @returns Interrupt instance
69
+ */
70
+ static fromJSON(data) {
71
+ return new Interrupt(data);
72
+ }
73
+ }
74
+ /**
75
+ * Error thrown when human input is required to continue agent execution.
76
+ * Caught by the agent loop to trigger an interrupt stop.
77
+ */
78
+ export class InterruptError extends Error {
79
+ /**
80
+ * The interrupts that caused this error.
81
+ */
82
+ interrupts;
83
+ constructor(interrupt) {
84
+ const all = Array.isArray(interrupt) ? interrupt : [interrupt];
85
+ const message = all.length === 1
86
+ ? `Interrupt raised: ${all[0].name}`
87
+ : `${all.length} interrupts raised: ${all.map((i) => i.name).join(', ')}`;
88
+ super(message);
89
+ this.name = 'InterruptError';
90
+ this.interrupts = all;
91
+ }
92
+ }
93
+ /**
94
+ * Tracks the state of interrupt events raised during agent execution.
95
+ *
96
+ * Interrupt state is cleared after resuming.
97
+ */
98
+ export class InterruptState {
99
+ /** Record of interrupt IDs to Interrupt instances. */
100
+ interrupts;
101
+ /** Resume responses provided when resuming from an interrupt. */
102
+ resumeResponses;
103
+ /** Whether the agent is in an interrupted state. */
104
+ activated;
105
+ /** Pending tool execution state for resume. */
106
+ pendingToolExecution;
107
+ constructor() {
108
+ this.interrupts = {};
109
+ this.resumeResponses = undefined;
110
+ this.activated = false;
111
+ this.pendingToolExecution = undefined;
112
+ }
113
+ /**
114
+ * Gets the pending tool execution state with reconstructed Message and ToolResultBlock objects.
115
+ * Returns undefined if there is no pending execution.
116
+ */
117
+ getPendingExecution() {
118
+ if (!this.pendingToolExecution) {
119
+ return undefined;
120
+ }
121
+ const assistantMessage = Message.fromMessageData(this.pendingToolExecution.assistantMessageData);
122
+ const completedToolResults = new Map();
123
+ for (const [toolUseId, resultData] of Object.entries(this.pendingToolExecution.completedToolResults)) {
124
+ completedToolResults.set(toolUseId, ToolResultBlock.fromJSON(resultData));
125
+ }
126
+ return { assistantMessage, completedToolResults };
127
+ }
128
+ /**
129
+ * Sets the pending tool execution state.
130
+ */
131
+ setPendingToolExecution(pending) {
132
+ this.pendingToolExecution = pending;
133
+ }
134
+ /**
135
+ * Clears the pending tool execution state.
136
+ */
137
+ clearPendingToolExecution() {
138
+ this.pendingToolExecution = undefined;
139
+ }
140
+ /**
141
+ * Returns the list of interrupts as an array.
142
+ */
143
+ getInterruptsList() {
144
+ return Object.values(this.interrupts);
145
+ }
146
+ /**
147
+ * Returns all interrupts that have no response (i.e., were raised but not yet answered).
148
+ */
149
+ getUnansweredInterrupts() {
150
+ return Object.values(this.interrupts).filter((interrupt) => interrupt.response === undefined);
151
+ }
152
+ /**
153
+ * Returns the first interrupt that has no response (i.e., was raised but not yet answered).
154
+ */
155
+ getUnansweredInterrupt() {
156
+ for (const interrupt of Object.values(this.interrupts)) {
157
+ if (interrupt.response === undefined) {
158
+ return interrupt;
159
+ }
160
+ }
161
+ return undefined;
162
+ }
163
+ /**
164
+ * Activates the interrupt state.
165
+ */
166
+ activate() {
167
+ this.activated = true;
168
+ }
169
+ /**
170
+ * Deactivates the interrupt state and clears all interrupts and context.
171
+ */
172
+ deactivate() {
173
+ this.interrupts = {};
174
+ this.resumeResponses = undefined;
175
+ this.activated = false;
176
+ this.pendingToolExecution = undefined;
177
+ }
178
+ /**
179
+ * Configures the interrupt state for resuming from an interrupt.
180
+ * Populates interrupt responses from the provided content blocks.
181
+ *
182
+ * @param responses - Array of interrupt response content blocks
183
+ * @throws Error if an interrupt ID is not found
184
+ */
185
+ resume(responses) {
186
+ if (!this.activated) {
187
+ return;
188
+ }
189
+ for (const content of responses) {
190
+ const interruptId = content.interruptResponse.interruptId;
191
+ const response = content.interruptResponse.response;
192
+ const interrupt = this.interrupts[interruptId];
193
+ if (!interrupt) {
194
+ throw new Error(`interrupt_id=<${interruptId}> | no interrupt found`);
195
+ }
196
+ interrupt.response = response;
197
+ }
198
+ this.resumeResponses = responses;
199
+ }
200
+ /**
201
+ * Gets or creates an interrupt with the given ID.
202
+ * If the interrupt already exists, returns it (potentially with a response).
203
+ * If a preemptive response is provided and the interrupt is new, the response
204
+ * is stored on the interrupt so it returns immediately without halting execution.
205
+ *
206
+ * @param id - Unique identifier for the interrupt
207
+ * @param name - User-defined name for the interrupt
208
+ * @param reason - Optional reason for the interrupt
209
+ * @param response - Optional preemptive response to skip the interrupt
210
+ * @param source - Where the interrupt was raised from (tool or hook callback)
211
+ * @returns The interrupt (may have a response if resuming or preemptive)
212
+ */
213
+ getOrCreateInterrupt(id, name, reason, response, source) {
214
+ const existing = this.interrupts[id];
215
+ if (existing) {
216
+ return existing;
217
+ }
218
+ const interrupt = new Interrupt({
219
+ id,
220
+ name,
221
+ ...(reason !== undefined && { reason }),
222
+ ...(response !== undefined && { response }),
223
+ ...(source !== undefined && { source }),
224
+ });
225
+ this.interrupts[id] = interrupt;
226
+ return interrupt;
227
+ }
228
+ /**
229
+ * Serializes the interrupt state to a JSON-compatible object.
230
+ */
231
+ toJSON() {
232
+ const interrupts = {};
233
+ for (const [id, interrupt] of Object.entries(this.interrupts)) {
234
+ interrupts[id] = interrupt.toJSON();
235
+ }
236
+ return {
237
+ interrupts,
238
+ ...(this.resumeResponses && { resumeResponses: this.resumeResponses }),
239
+ activated: this.activated,
240
+ ...(this.pendingToolExecution && { pendingToolExecution: this.pendingToolExecution }),
241
+ };
242
+ }
243
+ /**
244
+ * Creates an InterruptState instance from a JSON object.
245
+ *
246
+ * @param data - JSON data to deserialize
247
+ * @returns InterruptState instance
248
+ */
249
+ static fromJSON(data) {
250
+ const state = new InterruptState();
251
+ state.activated = data.activated;
252
+ for (const [id, interruptData] of Object.entries(data.interrupts)) {
253
+ state.interrupts[id] = Interrupt.fromJSON(interruptData);
254
+ }
255
+ if (data.resumeResponses) {
256
+ state.resumeResponses = data.resumeResponses.map((r) => InterruptResponseContent.fromJSON(r));
257
+ }
258
+ if (data.pendingToolExecution) {
259
+ state.pendingToolExecution = data.pendingToolExecution;
260
+ }
261
+ return state;
262
+ }
263
+ }
264
+ /**
265
+ * Shared interrupt logic that accesses the agent's interrupt state to register or resume an interrupt.
266
+ *
267
+ * @param agent - The agent whose interrupt state to access
268
+ * @param interruptId - Unique identifier for this interrupt instance
269
+ * @param params - Interrupt parameters including name and optional reason
270
+ * @param source - Where the interrupt was raised from (tool callback vs hook callback)
271
+ * @returns The user's response when resuming from an interrupt
272
+ * @throws InterruptError when no response is available (first invocation)
273
+ *
274
+ * @internal
275
+ */
276
+ export function interruptFromAgent(agent, interruptId, params, source) {
277
+ const interruptState = agent._interruptState;
278
+ if (!interruptState) {
279
+ throw new Error('Interrupt state not available');
280
+ }
281
+ const interrupt = interruptState.getOrCreateInterrupt(interruptId, params.name, params.reason, params.response, source);
282
+ if (interrupt.response !== undefined) {
283
+ return interrupt.response;
284
+ }
285
+ throw new InterruptError(interrupt);
286
+ }
287
+ /**
288
+ * Interrupt-or-resume helper for multi-agent hooks where interrupts live on a per-node
289
+ * `Interrupt[]` list rather than on an agent's `InterruptState`. Mirrors the
290
+ * {@link interruptFromAgent} contract: returns the response if the interrupt already
291
+ * has one (resume path), otherwise records a new interrupt and throws `InterruptError`.
292
+ *
293
+ * @internal
294
+ */
295
+ export function interruptFromMultiAgentNode(interrupts, interruptId, params, source) {
296
+ const existing = interrupts.find((i) => i.id === interruptId);
297
+ if (existing?.response !== undefined) {
298
+ return existing.response;
299
+ }
300
+ const interrupt = existing ??
301
+ new Interrupt({
302
+ id: interruptId,
303
+ name: params.name,
304
+ ...(params.reason !== undefined && { reason: params.reason }),
305
+ ...(params.response !== undefined && { response: params.response }),
306
+ source,
307
+ });
308
+ if (!existing) {
309
+ interrupts.push(interrupt);
310
+ if (interrupt.response !== undefined) {
311
+ return interrupt.response;
312
+ }
313
+ }
314
+ throw new InterruptError(interrupt);
315
+ }
316
+ //# sourceMappingURL=interrupt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interrupt.js","sourceRoot":"","sources":["../../src/interrupt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,wBAAwB,EAA2D,MAAM,sBAAsB,CAAA;AAGxH,OAAO,EAAE,OAAO,EAAE,eAAe,EAA8C,MAAM,qBAAqB,CAAA;AAU1G;;GAEG;AACH,MAAM,OAAO,SAAS;IACpB;;OAEG;IACM,EAAE,CAAQ;IAEnB;;OAEG;IACM,IAAI,CAAQ;IAErB;;OAEG;IACM,MAAM,CAAY;IAE3B;;OAEG;IACH,QAAQ,CAAY;IAEpB;;;;OAIG;IACM,MAAM,CAAiB;IAEhC,YAAY,IAAsG;QAChH,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC/B,CAAC;QACD,6EAA6E;QAC7E,0CAA0C;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/D,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAMf;QACC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC;;OAEG;IACM,UAAU,CAAa;IAEhC,YAAY,SAAkC;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC9D,MAAM,OAAO,GACX,GAAG,CAAC,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE;YACrC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;QAC7E,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAA;IACvB,CAAC;CACF;AA4CD;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACzB,sDAAsD;IACtD,UAAU,CAA2B;IAErC,iEAAiE;IACjE,eAAe,CAAyC;IAExD,oDAAoD;IACpD,SAAS,CAAS;IAElB,+CAA+C;IAC/C,oBAAoB,CAAmC;IAEvD;QACE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;IACvC,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAA;QAEhG,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA2B,CAAA;QAC/D,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACrG,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;QAC3E,CAAC;QAED,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAA;IACnD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,OAA6B;QACnD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;IACvC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;IAC/F,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;IACvC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,SAAqC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAM;QACR,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAA;YACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAA;YAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;YAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,wBAAwB,CAAC,CAAA;YACvE,CAAC;YAED,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC/B,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;IAClC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,oBAAoB,CAClB,EAAU,EACV,IAAY,EACZ,MAAkB,EAClB,QAAoB,EACpB,MAAwB;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;YAC9B,EAAE;YACF,IAAI;YACJ,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC3C,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;SACxC,CAAC,CAAA;QACF,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;QAC/B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,MAAM,UAAU,GAA2F,EAAE,CAAA;QAC7G,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAA;QACrC,CAAC;QAED,OAAO;YACL,UAAU;YACV,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;YACtE,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;SACtF,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAwB;QACtC,MAAM,KAAK,GAAG,IAAI,cAAc,EAAE,CAAA;QAClC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAEhC,KAAK,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;QAC1D,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/F,CAAC;QAED,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAA;QACxD,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAUD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAiB,EACjB,WAAmB,EACnB,MAAuB,EACvB,MAAuB;IAEvB,MAAM,cAAc,GAAI,KAAyD,CAAC,eAAe,CAAA;IACjG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,oBAAoB,CACnD,WAAW,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EACf,MAAM,CACP,CAAA;IAED,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC,QAAa,CAAA;IAChC,CAAC;IAED,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,CAAA;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,UAAuB,EACvB,WAAmB,EACnB,MAAuB,EACvB,MAAuB;IAEvB,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAA;IAC7D,IAAI,QAAQ,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC,QAAa,CAAA;IAC/B,CAAC;IAED,MAAM,SAAS,GACb,QAAQ;QACR,IAAI,SAAS,CAAC;YACZ,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7D,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnE,MAAM;SACP,CAAC,CAAA;IAEJ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1B,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC,QAAa,CAAA;QAChC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,CAAA;AACrC,CAAC"}