@strands-agents/sdk 0.0.1

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 (423) hide show
  1. package/LICENSE +175 -0
  2. package/README.md +185 -0
  3. package/dist/__fixtures__/model-test-helpers.d.ts +56 -0
  4. package/dist/__fixtures__/model-test-helpers.d.ts.map +1 -0
  5. package/dist/__fixtures__/model-test-helpers.js +85 -0
  6. package/dist/__fixtures__/model-test-helpers.js.map +1 -0
  7. package/dist/__fixtures__/tool-helpers.d.ts +15 -0
  8. package/dist/__fixtures__/tool-helpers.d.ts.map +1 -0
  9. package/dist/__fixtures__/tool-helpers.js +22 -0
  10. package/dist/__fixtures__/tool-helpers.js.map +1 -0
  11. package/dist/__tests__/errors.test.d.ts +2 -0
  12. package/dist/__tests__/errors.test.d.ts.map +1 -0
  13. package/dist/__tests__/errors.test.js +20 -0
  14. package/dist/__tests__/errors.test.js.map +1 -0
  15. package/dist/__tests__/index.test.d.ts +2 -0
  16. package/dist/__tests__/index.test.d.ts.map +1 -0
  17. package/dist/__tests__/index.test.js +27 -0
  18. package/dist/__tests__/index.test.js.map +1 -0
  19. package/dist/errors.d.ts +22 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +25 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/index.d.ts +19 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +17 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/models/__tests__/bedrock.test.d.ts +2 -0
  28. package/dist/models/__tests__/bedrock.test.d.ts.map +1 -0
  29. package/dist/models/__tests__/bedrock.test.js +1161 -0
  30. package/dist/models/__tests__/bedrock.test.js.map +1 -0
  31. package/dist/models/__tests__/model.test.d.ts +2 -0
  32. package/dist/models/__tests__/model.test.d.ts.map +1 -0
  33. package/dist/models/__tests__/model.test.js +297 -0
  34. package/dist/models/__tests__/model.test.js.map +1 -0
  35. package/dist/models/__tests__/openai.test.d.ts +2 -0
  36. package/dist/models/__tests__/openai.test.d.ts.map +1 -0
  37. package/dist/models/__tests__/openai.test.js +1016 -0
  38. package/dist/models/__tests__/openai.test.js.map +1 -0
  39. package/dist/models/__tests__/test-utils.d.ts +10 -0
  40. package/dist/models/__tests__/test-utils.d.ts.map +1 -0
  41. package/dist/models/__tests__/test-utils.js +17 -0
  42. package/dist/models/__tests__/test-utils.js.map +1 -0
  43. package/dist/models/bedrock.d.ts +272 -0
  44. package/dist/models/bedrock.d.ts.map +1 -0
  45. package/dist/models/bedrock.js +679 -0
  46. package/dist/models/bedrock.js.map +1 -0
  47. package/dist/models/model.d.ts +89 -0
  48. package/dist/models/model.d.ts.map +1 -0
  49. package/dist/models/model.js +122 -0
  50. package/dist/models/model.js.map +1 -0
  51. package/dist/models/openai.d.ts +262 -0
  52. package/dist/models/openai.d.ts.map +1 -0
  53. package/dist/models/openai.js +625 -0
  54. package/dist/models/openai.js.map +1 -0
  55. package/dist/models/streaming.d.ts +226 -0
  56. package/dist/models/streaming.d.ts.map +1 -0
  57. package/dist/models/streaming.js +2 -0
  58. package/dist/models/streaming.js.map +1 -0
  59. package/dist/src/__fixtures__/agent-helpers.d.ts +29 -0
  60. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -0
  61. package/dist/src/__fixtures__/agent-helpers.js +19 -0
  62. package/dist/src/__fixtures__/agent-helpers.js.map +1 -0
  63. package/dist/src/__fixtures__/environment.d.ts +12 -0
  64. package/dist/src/__fixtures__/environment.d.ts.map +1 -0
  65. package/dist/src/__fixtures__/environment.js +12 -0
  66. package/dist/src/__fixtures__/environment.js.map +1 -0
  67. package/dist/src/__fixtures__/mock-hook-provider.d.ts +14 -0
  68. package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -0
  69. package/dist/src/__fixtures__/mock-hook-provider.js +33 -0
  70. package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -0
  71. package/dist/src/__fixtures__/mock-message-model.d.ts +93 -0
  72. package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -0
  73. package/dist/src/__fixtures__/mock-message-model.js +226 -0
  74. package/dist/src/__fixtures__/mock-message-model.js.map +1 -0
  75. package/dist/src/__fixtures__/model-test-helpers.d.ts +56 -0
  76. package/dist/src/__fixtures__/model-test-helpers.d.ts.map +1 -0
  77. package/dist/src/__fixtures__/model-test-helpers.js +85 -0
  78. package/dist/src/__fixtures__/model-test-helpers.js.map +1 -0
  79. package/dist/src/__fixtures__/tool-helpers.d.ts +37 -0
  80. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -0
  81. package/dist/src/__fixtures__/tool-helpers.js +78 -0
  82. package/dist/src/__fixtures__/tool-helpers.js.map +1 -0
  83. package/dist/src/__tests__/errors.test.d.ts +2 -0
  84. package/dist/src/__tests__/errors.test.d.ts.map +1 -0
  85. package/dist/src/__tests__/errors.test.js +64 -0
  86. package/dist/src/__tests__/errors.test.js.map +1 -0
  87. package/dist/src/__tests__/index.test.d.ts +2 -0
  88. package/dist/src/__tests__/index.test.d.ts.map +1 -0
  89. package/dist/src/__tests__/index.test.js +27 -0
  90. package/dist/src/__tests__/index.test.js.map +1 -0
  91. package/dist/src/__tests__/mcp.test.d.ts +2 -0
  92. package/dist/src/__tests__/mcp.test.d.ts.map +1 -0
  93. package/dist/src/__tests__/mcp.test.js +166 -0
  94. package/dist/src/__tests__/mcp.test.js.map +1 -0
  95. package/dist/src/agent/__tests__/agent.hook.test.d.ts +2 -0
  96. package/dist/src/agent/__tests__/agent.hook.test.d.ts.map +1 -0
  97. package/dist/src/agent/__tests__/agent.hook.test.js +250 -0
  98. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -0
  99. package/dist/src/agent/__tests__/agent.test.d.ts +2 -0
  100. package/dist/src/agent/__tests__/agent.test.d.ts.map +1 -0
  101. package/dist/src/agent/__tests__/agent.test.js +414 -0
  102. package/dist/src/agent/__tests__/agent.test.js.map +1 -0
  103. package/dist/src/agent/__tests__/printer.test.d.ts +2 -0
  104. package/dist/src/agent/__tests__/printer.test.d.ts.map +1 -0
  105. package/dist/src/agent/__tests__/printer.test.js +152 -0
  106. package/dist/src/agent/__tests__/printer.test.js.map +1 -0
  107. package/dist/src/agent/__tests__/state.test.d.ts +2 -0
  108. package/dist/src/agent/__tests__/state.test.d.ts.map +1 -0
  109. package/dist/src/agent/__tests__/state.test.js +231 -0
  110. package/dist/src/agent/__tests__/state.test.js.map +1 -0
  111. package/dist/src/agent/agent.d.ts +207 -0
  112. package/dist/src/agent/agent.d.ts.map +1 -0
  113. package/dist/src/agent/agent.js +481 -0
  114. package/dist/src/agent/agent.js.map +1 -0
  115. package/dist/src/agent/printer.d.ts +73 -0
  116. package/dist/src/agent/printer.d.ts.map +1 -0
  117. package/dist/src/agent/printer.js +145 -0
  118. package/dist/src/agent/printer.js.map +1 -0
  119. package/dist/src/agent/state.d.ts +102 -0
  120. package/dist/src/agent/state.d.ts.map +1 -0
  121. package/dist/src/agent/state.js +73 -0
  122. package/dist/src/agent/state.js.map +1 -0
  123. package/dist/src/agent/streaming.d.ts +91 -0
  124. package/dist/src/agent/streaming.d.ts.map +1 -0
  125. package/dist/src/agent/streaming.js +2 -0
  126. package/dist/src/agent/streaming.js.map +1 -0
  127. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +2 -0
  128. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +1 -0
  129. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +10 -0
  130. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -0
  131. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts +2 -0
  132. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts.map +1 -0
  133. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +35 -0
  134. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -0
  135. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts +2 -0
  136. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts.map +1 -0
  137. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +553 -0
  138. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -0
  139. package/dist/src/conversation-manager/conversation-manager.d.ts +73 -0
  140. package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -0
  141. package/dist/src/conversation-manager/conversation-manager.js +24 -0
  142. package/dist/src/conversation-manager/conversation-manager.js.map +1 -0
  143. package/dist/src/conversation-manager/index.d.ts +8 -0
  144. package/dist/src/conversation-manager/index.d.ts.map +1 -0
  145. package/dist/src/conversation-manager/index.js +8 -0
  146. package/dist/src/conversation-manager/index.js.map +1 -0
  147. package/dist/src/conversation-manager/null-conversation-manager.d.ts +23 -0
  148. package/dist/src/conversation-manager/null-conversation-manager.d.ts.map +1 -0
  149. package/dist/src/conversation-manager/null-conversation-manager.js +23 -0
  150. package/dist/src/conversation-manager/null-conversation-manager.js.map +1 -0
  151. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +105 -0
  152. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -0
  153. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +212 -0
  154. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -0
  155. package/dist/src/errors.d.ts +83 -0
  156. package/dist/src/errors.d.ts.map +1 -0
  157. package/dist/src/errors.js +97 -0
  158. package/dist/src/errors.js.map +1 -0
  159. package/dist/src/hooks/__tests__/events.test.d.ts +2 -0
  160. package/dist/src/hooks/__tests__/events.test.d.ts.map +1 -0
  161. package/dist/src/hooks/__tests__/events.test.js +347 -0
  162. package/dist/src/hooks/__tests__/events.test.js.map +1 -0
  163. package/dist/src/hooks/__tests__/registry.test.d.ts +2 -0
  164. package/dist/src/hooks/__tests__/registry.test.d.ts.map +1 -0
  165. package/dist/src/hooks/__tests__/registry.test.js +154 -0
  166. package/dist/src/hooks/__tests__/registry.test.js.map +1 -0
  167. package/dist/src/hooks/events.d.ts +199 -0
  168. package/dist/src/hooks/events.d.ts.map +1 -0
  169. package/dist/src/hooks/events.js +191 -0
  170. package/dist/src/hooks/events.js.map +1 -0
  171. package/dist/src/hooks/index.d.ts +11 -0
  172. package/dist/src/hooks/index.d.ts.map +1 -0
  173. package/dist/src/hooks/index.js +11 -0
  174. package/dist/src/hooks/index.js.map +1 -0
  175. package/dist/src/hooks/registry.d.ts +65 -0
  176. package/dist/src/hooks/registry.d.ts.map +1 -0
  177. package/dist/src/hooks/registry.js +65 -0
  178. package/dist/src/hooks/registry.js.map +1 -0
  179. package/dist/src/hooks/types.d.ts +49 -0
  180. package/dist/src/hooks/types.d.ts.map +1 -0
  181. package/dist/src/hooks/types.js +2 -0
  182. package/dist/src/hooks/types.js.map +1 -0
  183. package/dist/src/index.d.ts +32 -0
  184. package/dist/src/index.d.ts.map +1 -0
  185. package/dist/src/index.js +29 -0
  186. package/dist/src/index.js.map +1 -0
  187. package/dist/src/mcp.d.ts +51 -0
  188. package/dist/src/mcp.d.ts.map +1 -0
  189. package/dist/src/mcp.js +91 -0
  190. package/dist/src/mcp.js.map +1 -0
  191. package/dist/src/models/__tests__/bedrock.test.d.ts +2 -0
  192. package/dist/src/models/__tests__/bedrock.test.d.ts.map +1 -0
  193. package/dist/src/models/__tests__/bedrock.test.js +1388 -0
  194. package/dist/src/models/__tests__/bedrock.test.js.map +1 -0
  195. package/dist/src/models/__tests__/model.test.d.ts +2 -0
  196. package/dist/src/models/__tests__/model.test.d.ts.map +1 -0
  197. package/dist/src/models/__tests__/model.test.js +342 -0
  198. package/dist/src/models/__tests__/model.test.js.map +1 -0
  199. package/dist/src/models/__tests__/openai.test.d.ts +2 -0
  200. package/dist/src/models/__tests__/openai.test.d.ts.map +1 -0
  201. package/dist/src/models/__tests__/openai.test.js +1189 -0
  202. package/dist/src/models/__tests__/openai.test.js.map +1 -0
  203. package/dist/src/models/__tests__/test-utils.d.ts +10 -0
  204. package/dist/src/models/__tests__/test-utils.d.ts.map +1 -0
  205. package/dist/src/models/__tests__/test-utils.js +17 -0
  206. package/dist/src/models/__tests__/test-utils.js.map +1 -0
  207. package/dist/src/models/bedrock.d.ts +289 -0
  208. package/dist/src/models/bedrock.d.ts.map +1 -0
  209. package/dist/src/models/bedrock.js +804 -0
  210. package/dist/src/models/bedrock.js.map +1 -0
  211. package/dist/src/models/model.d.ts +99 -0
  212. package/dist/src/models/model.d.ts.map +1 -0
  213. package/dist/src/models/model.js +169 -0
  214. package/dist/src/models/model.js.map +1 -0
  215. package/dist/src/models/openai.d.ts +262 -0
  216. package/dist/src/models/openai.d.ts.map +1 -0
  217. package/dist/src/models/openai.js +752 -0
  218. package/dist/src/models/openai.js.map +1 -0
  219. package/dist/src/models/streaming.d.ts +318 -0
  220. package/dist/src/models/streaming.d.ts.map +1 -0
  221. package/dist/src/models/streaming.js +122 -0
  222. package/dist/src/models/streaming.js.map +1 -0
  223. package/dist/src/registry/registry.d.ts +117 -0
  224. package/dist/src/registry/registry.d.ts.map +1 -0
  225. package/dist/src/registry/registry.js +298 -0
  226. package/dist/src/registry/registry.js.map +1 -0
  227. package/dist/src/registry/tool-registry.d.ts +34 -0
  228. package/dist/src/registry/tool-registry.d.ts.map +1 -0
  229. package/dist/src/registry/tool-registry.js +178 -0
  230. package/dist/src/registry/tool-registry.js.map +1 -0
  231. package/dist/src/tools/__tests__/tool.test.d.ts +2 -0
  232. package/dist/src/tools/__tests__/tool.test.d.ts.map +1 -0
  233. package/dist/src/tools/__tests__/tool.test.js +877 -0
  234. package/dist/src/tools/__tests__/tool.test.js.map +1 -0
  235. package/dist/src/tools/__tests__/zod-tool.test-d.d.ts +2 -0
  236. package/dist/src/tools/__tests__/zod-tool.test-d.d.ts.map +1 -0
  237. package/dist/src/tools/__tests__/zod-tool.test-d.js +227 -0
  238. package/dist/src/tools/__tests__/zod-tool.test-d.js.map +1 -0
  239. package/dist/src/tools/__tests__/zod-tool.test.d.ts +2 -0
  240. package/dist/src/tools/__tests__/zod-tool.test.d.ts.map +1 -0
  241. package/dist/src/tools/__tests__/zod-tool.test.js +372 -0
  242. package/dist/src/tools/__tests__/zod-tool.test.js.map +1 -0
  243. package/dist/src/tools/function-tool.d.ts +146 -0
  244. package/dist/src/tools/function-tool.d.ts.map +1 -0
  245. package/dist/src/tools/function-tool.js +188 -0
  246. package/dist/src/tools/function-tool.js.map +1 -0
  247. package/dist/src/tools/mcp-tool.d.ts +36 -0
  248. package/dist/src/tools/mcp-tool.d.ts.map +1 -0
  249. package/dist/src/tools/mcp-tool.js +78 -0
  250. package/dist/src/tools/mcp-tool.js.map +1 -0
  251. package/dist/src/tools/tool.d.ts +167 -0
  252. package/dist/src/tools/tool.d.ts.map +1 -0
  253. package/dist/src/tools/tool.js +68 -0
  254. package/dist/src/tools/tool.js.map +1 -0
  255. package/dist/src/tools/types.d.ts +62 -0
  256. package/dist/src/tools/types.d.ts.map +1 -0
  257. package/dist/src/tools/types.js +2 -0
  258. package/dist/src/tools/types.js.map +1 -0
  259. package/dist/src/tools/zod-tool.d.ts +70 -0
  260. package/dist/src/tools/zod-tool.d.ts.map +1 -0
  261. package/dist/src/tools/zod-tool.js +149 -0
  262. package/dist/src/tools/zod-tool.js.map +1 -0
  263. package/dist/src/types/__tests__/agent.test.d.ts +2 -0
  264. package/dist/src/types/__tests__/agent.test.d.ts.map +1 -0
  265. package/dist/src/types/__tests__/agent.test.js +155 -0
  266. package/dist/src/types/__tests__/agent.test.js.map +1 -0
  267. package/dist/src/types/__tests__/json.test.d.ts +2 -0
  268. package/dist/src/types/__tests__/json.test.d.ts.map +1 -0
  269. package/dist/src/types/__tests__/json.test.js +298 -0
  270. package/dist/src/types/__tests__/json.test.js.map +1 -0
  271. package/dist/src/types/__tests__/media.test.d.ts +2 -0
  272. package/dist/src/types/__tests__/media.test.d.ts.map +1 -0
  273. package/dist/src/types/__tests__/media.test.js +257 -0
  274. package/dist/src/types/__tests__/media.test.js.map +1 -0
  275. package/dist/src/types/__tests__/messages.test.d.ts +2 -0
  276. package/dist/src/types/__tests__/messages.test.d.ts.map +1 -0
  277. package/dist/src/types/__tests__/messages.test.js +364 -0
  278. package/dist/src/types/__tests__/messages.test.js.map +1 -0
  279. package/dist/src/types/__tests__/validation.test.d.ts +2 -0
  280. package/dist/src/types/__tests__/validation.test.d.ts.map +1 -0
  281. package/dist/src/types/__tests__/validation.test.js +30 -0
  282. package/dist/src/types/__tests__/validation.test.js.map +1 -0
  283. package/dist/src/types/agent.d.ts +57 -0
  284. package/dist/src/types/agent.d.ts.map +1 -0
  285. package/dist/src/types/agent.js +47 -0
  286. package/dist/src/types/agent.js.map +1 -0
  287. package/dist/src/types/json.d.ts +55 -0
  288. package/dist/src/types/json.d.ts.map +1 -0
  289. package/dist/src/types/json.js +72 -0
  290. package/dist/src/types/json.js.map +1 -0
  291. package/dist/src/types/media.d.ts +249 -0
  292. package/dist/src/types/media.d.ts.map +1 -0
  293. package/dist/src/types/media.js +173 -0
  294. package/dist/src/types/media.js.map +1 -0
  295. package/dist/src/types/messages.d.ts +438 -0
  296. package/dist/src/types/messages.d.ts.map +1 -0
  297. package/dist/src/types/messages.js +286 -0
  298. package/dist/src/types/messages.js.map +1 -0
  299. package/dist/src/types/validation.d.ts +10 -0
  300. package/dist/src/types/validation.d.ts.map +1 -0
  301. package/dist/src/types/validation.js +15 -0
  302. package/dist/src/types/validation.js.map +1 -0
  303. package/dist/tools/__tests__/registry.test.d.ts +2 -0
  304. package/dist/tools/__tests__/registry.test.d.ts.map +1 -0
  305. package/dist/tools/__tests__/registry.test.js +253 -0
  306. package/dist/tools/__tests__/registry.test.js.map +1 -0
  307. package/dist/tools/__tests__/tool.test.d.ts +2 -0
  308. package/dist/tools/__tests__/tool.test.d.ts.map +1 -0
  309. package/dist/tools/__tests__/tool.test.js +761 -0
  310. package/dist/tools/__tests__/tool.test.js.map +1 -0
  311. package/dist/tools/__tests__/zod-tool.test-d.d.ts +2 -0
  312. package/dist/tools/__tests__/zod-tool.test-d.d.ts.map +1 -0
  313. package/dist/tools/__tests__/zod-tool.test-d.js +227 -0
  314. package/dist/tools/__tests__/zod-tool.test-d.js.map +1 -0
  315. package/dist/tools/__tests__/zod-tool.test.d.ts +2 -0
  316. package/dist/tools/__tests__/zod-tool.test.d.ts.map +1 -0
  317. package/dist/tools/__tests__/zod-tool.test.js +342 -0
  318. package/dist/tools/__tests__/zod-tool.test.js.map +1 -0
  319. package/dist/tools/function-tool.d.ts +156 -0
  320. package/dist/tools/function-tool.d.ts.map +1 -0
  321. package/dist/tools/function-tool.js +237 -0
  322. package/dist/tools/function-tool.js.map +1 -0
  323. package/dist/tools/registry.d.ts +43 -0
  324. package/dist/tools/registry.d.ts.map +1 -0
  325. package/dist/tools/registry.js +82 -0
  326. package/dist/tools/registry.js.map +1 -0
  327. package/dist/tools/tool.d.ts +157 -0
  328. package/dist/tools/tool.d.ts.map +1 -0
  329. package/dist/tools/tool.js +2 -0
  330. package/dist/tools/tool.js.map +1 -0
  331. package/dist/tools/types.d.ts +119 -0
  332. package/dist/tools/types.d.ts.map +1 -0
  333. package/dist/tools/types.js +2 -0
  334. package/dist/tools/types.js.map +1 -0
  335. package/dist/tools/zod-tool.d.ts +70 -0
  336. package/dist/tools/zod-tool.d.ts.map +1 -0
  337. package/dist/tools/zod-tool.js +96 -0
  338. package/dist/tools/zod-tool.js.map +1 -0
  339. package/dist/types/__tests__/json.test.d.ts +2 -0
  340. package/dist/types/__tests__/json.test.d.ts.map +1 -0
  341. package/dist/types/__tests__/json.test.js +129 -0
  342. package/dist/types/__tests__/json.test.js.map +1 -0
  343. package/dist/types/__tests__/validation.test.d.ts +2 -0
  344. package/dist/types/__tests__/validation.test.d.ts.map +1 -0
  345. package/dist/types/__tests__/validation.test.js +30 -0
  346. package/dist/types/__tests__/validation.test.js.map +1 -0
  347. package/dist/types/json.d.ts +45 -0
  348. package/dist/types/json.d.ts.map +1 -0
  349. package/dist/types/json.js +17 -0
  350. package/dist/types/json.js.map +1 -0
  351. package/dist/types/messages.d.ts +160 -0
  352. package/dist/types/messages.d.ts.map +1 -0
  353. package/dist/types/messages.js +2 -0
  354. package/dist/types/messages.js.map +1 -0
  355. package/dist/types/validation.d.ts +10 -0
  356. package/dist/types/validation.d.ts.map +1 -0
  357. package/dist/types/validation.js +15 -0
  358. package/dist/types/validation.js.map +1 -0
  359. package/dist/vended_tools/bash/__tests__/bash.test.d.ts +2 -0
  360. package/dist/vended_tools/bash/__tests__/bash.test.d.ts.map +1 -0
  361. package/dist/vended_tools/bash/__tests__/bash.test.js +333 -0
  362. package/dist/vended_tools/bash/__tests__/bash.test.js.map +1 -0
  363. package/dist/vended_tools/bash/bash.d.ts +33 -0
  364. package/dist/vended_tools/bash/bash.d.ts.map +1 -0
  365. package/dist/vended_tools/bash/bash.js +264 -0
  366. package/dist/vended_tools/bash/bash.js.map +1 -0
  367. package/dist/vended_tools/bash/index.d.ts +7 -0
  368. package/dist/vended_tools/bash/index.d.ts.map +1 -0
  369. package/dist/vended_tools/bash/index.js +6 -0
  370. package/dist/vended_tools/bash/index.js.map +1 -0
  371. package/dist/vended_tools/bash/types.d.ts +65 -0
  372. package/dist/vended_tools/bash/types.d.ts.map +1 -0
  373. package/dist/vended_tools/bash/types.js +22 -0
  374. package/dist/vended_tools/bash/types.js.map +1 -0
  375. package/dist/vended_tools/file_editor/__tests__/file-editor.test.d.ts +2 -0
  376. package/dist/vended_tools/file_editor/__tests__/file-editor.test.d.ts.map +1 -0
  377. package/dist/vended_tools/file_editor/__tests__/file-editor.test.js +359 -0
  378. package/dist/vended_tools/file_editor/__tests__/file-editor.test.js.map +1 -0
  379. package/dist/vended_tools/file_editor/file-editor.d.ts +31 -0
  380. package/dist/vended_tools/file_editor/file-editor.d.ts.map +1 -0
  381. package/dist/vended_tools/file_editor/file-editor.js +353 -0
  382. package/dist/vended_tools/file_editor/file-editor.js.map +1 -0
  383. package/dist/vended_tools/file_editor/index.d.ts +6 -0
  384. package/dist/vended_tools/file_editor/index.d.ts.map +1 -0
  385. package/dist/vended_tools/file_editor/index.js +5 -0
  386. package/dist/vended_tools/file_editor/index.js.map +1 -0
  387. package/dist/vended_tools/file_editor/types.d.ts +61 -0
  388. package/dist/vended_tools/file_editor/types.d.ts.map +1 -0
  389. package/dist/vended_tools/file_editor/types.js +2 -0
  390. package/dist/vended_tools/file_editor/types.js.map +1 -0
  391. package/dist/vended_tools/http_request/__tests__/http-request.test.d.ts +2 -0
  392. package/dist/vended_tools/http_request/__tests__/http-request.test.d.ts.map +1 -0
  393. package/dist/vended_tools/http_request/__tests__/http-request.test.js +189 -0
  394. package/dist/vended_tools/http_request/__tests__/http-request.test.js.map +1 -0
  395. package/dist/vended_tools/http_request/http-request.d.ts +35 -0
  396. package/dist/vended_tools/http_request/http-request.d.ts.map +1 -0
  397. package/dist/vended_tools/http_request/http-request.js +95 -0
  398. package/dist/vended_tools/http_request/http-request.js.map +1 -0
  399. package/dist/vended_tools/http_request/index.d.ts +6 -0
  400. package/dist/vended_tools/http_request/index.d.ts.map +1 -0
  401. package/dist/vended_tools/http_request/index.js +5 -0
  402. package/dist/vended_tools/http_request/index.js.map +1 -0
  403. package/dist/vended_tools/http_request/types.d.ts +47 -0
  404. package/dist/vended_tools/http_request/types.d.ts.map +1 -0
  405. package/dist/vended_tools/http_request/types.js +2 -0
  406. package/dist/vended_tools/http_request/types.js.map +1 -0
  407. package/dist/vended_tools/notebook/__tests__/notebook.test.d.ts +2 -0
  408. package/dist/vended_tools/notebook/__tests__/notebook.test.d.ts.map +1 -0
  409. package/dist/vended_tools/notebook/__tests__/notebook.test.js +371 -0
  410. package/dist/vended_tools/notebook/__tests__/notebook.test.js.map +1 -0
  411. package/dist/vended_tools/notebook/index.d.ts +6 -0
  412. package/dist/vended_tools/notebook/index.d.ts.map +1 -0
  413. package/dist/vended_tools/notebook/index.js +5 -0
  414. package/dist/vended_tools/notebook/index.js.map +1 -0
  415. package/dist/vended_tools/notebook/notebook.d.ts +29 -0
  416. package/dist/vended_tools/notebook/notebook.d.ts.map +1 -0
  417. package/dist/vended_tools/notebook/notebook.js +215 -0
  418. package/dist/vended_tools/notebook/notebook.js.map +1 -0
  419. package/dist/vended_tools/notebook/types.d.ts +79 -0
  420. package/dist/vended_tools/notebook/types.d.ts.map +1 -0
  421. package/dist/vended_tools/notebook/types.js +2 -0
  422. package/dist/vended_tools/notebook/types.js.map +1 -0
  423. package/package.json +112 -0
@@ -0,0 +1,333 @@
1
+ import { describe, it, expect, vi, afterEach } from 'vitest';
2
+ import { bash } from '../index.js';
3
+ import { BashTimeoutError, BashSessionError } from '../index.js';
4
+ import { AgentState } from '../../../src/agent/state.js';
5
+ import { isNode } from '../../../src/__fixtures__/environment.js';
6
+ // Skip all tests if not in Node.js environment
7
+ describe.skipIf(!isNode || process.platform === 'win32')('bash tool', () => {
8
+ // Helper to create fresh context
9
+ const createFreshContext = () => {
10
+ const state = new AgentState({});
11
+ const context = {
12
+ toolUse: {
13
+ name: 'bash',
14
+ toolUseId: 'test-id',
15
+ input: {},
16
+ },
17
+ agent: { state, messages: [] },
18
+ };
19
+ return { state, context };
20
+ };
21
+ afterEach(() => {
22
+ vi.restoreAllMocks();
23
+ });
24
+ describe('input validation', () => {
25
+ it('accepts valid execute command', async () => {
26
+ const { context } = createFreshContext();
27
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "test"' }, context);
28
+ expect(result).toHaveProperty('output');
29
+ expect(result).toHaveProperty('error');
30
+ });
31
+ it('accepts valid restart command', async () => {
32
+ const { context } = createFreshContext();
33
+ const result = await bash.invoke({ mode: 'restart' }, context);
34
+ expect(result).toBe('Bash session restarted');
35
+ });
36
+ it('rejects invalid mode', async () => {
37
+ const { context } = createFreshContext();
38
+ await expect(
39
+ // @ts-expect-error - Testing invalid input
40
+ bash.invoke({ mode: 'invalid' }, context)).rejects.toThrow();
41
+ });
42
+ it('rejects execute without command', async () => {
43
+ const { context } = createFreshContext();
44
+ await expect(bash.invoke({ mode: 'execute' }, context)).rejects.toThrow();
45
+ });
46
+ it('accepts valid timeout configuration', async () => {
47
+ const { context } = createFreshContext();
48
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "fast"', timeout: 300 }, context);
49
+ expect(result).toHaveProperty('output');
50
+ });
51
+ it('rejects negative timeout', async () => {
52
+ const { context } = createFreshContext();
53
+ await expect(bash.invoke({ mode: 'execute', command: 'echo test', timeout: -1 }, context)).rejects.toThrow();
54
+ });
55
+ });
56
+ describe('session lifecycle', () => {
57
+ it('creates session on first execute', async () => {
58
+ const { context } = createFreshContext();
59
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "test"' }, context);
60
+ expect(result).toHaveProperty('output');
61
+ expect(result.output).toContain('test');
62
+ });
63
+ it('creates new session after restart', async () => {
64
+ const { context } = createFreshContext();
65
+ // Set variable
66
+ await bash.invoke({ mode: 'execute', command: 'TEST_RESTART="exists"' }, context);
67
+ // Restart
68
+ const restartResult = await bash.invoke({ mode: 'restart' }, context);
69
+ expect(restartResult).toBe('Bash session restarted');
70
+ // Variable should be gone
71
+ const afterRestart = await bash.invoke({ mode: 'execute', command: 'echo $TEST_RESTART' }, context);
72
+ expect(afterRestart.output.trim()).not.toContain('exists');
73
+ });
74
+ it('restarts existing session when restart is called', async () => {
75
+ const { context } = createFreshContext();
76
+ // First create a session by executing a command
77
+ await bash.invoke({ mode: 'execute', command: 'TEST_VAR="initial"' }, context);
78
+ // Now restart the existing session
79
+ const restartResult = await bash.invoke({ mode: 'restart' }, context);
80
+ expect(restartResult).toBe('Bash session restarted');
81
+ // Verify the variable is gone after restart
82
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "${TEST_VAR:-empty}"' }, context);
83
+ expect(result.output.trim()).toBe('empty');
84
+ });
85
+ it('provides isolated sessions for different agents', async () => {
86
+ const { context: context1 } = createFreshContext();
87
+ const { context: context2 } = createFreshContext();
88
+ // Set variable in first agent
89
+ await bash.invoke({ mode: 'execute', command: 'AGENT_VAR="agent1"' }, context1);
90
+ // Check it's not in second agent
91
+ const result = await bash.invoke({ mode: 'execute', command: 'echo $AGENT_VAR' }, context2);
92
+ expect(result.output.trim()).not.toContain('agent1');
93
+ });
94
+ it('handles session restart with no existing session gracefully', async () => {
95
+ const { context } = createFreshContext();
96
+ // Restart when no session exists
97
+ const result = await bash.invoke({ mode: 'restart' }, context);
98
+ expect(result).toBe('Bash session restarted');
99
+ // Should still be able to execute commands
100
+ const execResult = await bash.invoke({ mode: 'execute', command: 'echo "works"' }, context);
101
+ expect(execResult.output.trim()).toBe('works');
102
+ });
103
+ });
104
+ describe('command execution', () => {
105
+ it('executes command and returns output', async () => {
106
+ const { context } = createFreshContext();
107
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "Hello World"' }, context);
108
+ expect(result.output).toContain('Hello World');
109
+ expect(result.error).toBe('');
110
+ });
111
+ it('returns empty stderr on success', async () => {
112
+ const { context } = createFreshContext();
113
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "success"' }, context);
114
+ expect(result.error).toBe('');
115
+ });
116
+ it('captures stderr on command error', async () => {
117
+ const { context } = createFreshContext();
118
+ const result = await bash.invoke({ mode: 'execute', command: 'nonexistent_command_xyz' }, context);
119
+ expect(result.error).toContain('not found');
120
+ });
121
+ });
122
+ describe('timeout handling', () => {
123
+ it('completes command before timeout', async () => {
124
+ const { context } = createFreshContext();
125
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "fast"', timeout: 5 }, context);
126
+ expect(result.output).toContain('fast');
127
+ });
128
+ it('throws BashTimeoutError when command times out', async () => {
129
+ const { context } = createFreshContext();
130
+ await expect(bash.invoke({ mode: 'execute', command: 'sleep 10', timeout: 0.1 }, context)).rejects.toThrow(BashTimeoutError);
131
+ });
132
+ it('uses default timeout of 120 seconds', async () => {
133
+ const { context } = createFreshContext();
134
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "test"' }, context);
135
+ expect(result).toHaveProperty('output');
136
+ });
137
+ it('respects custom timeout for new session', async () => {
138
+ const { context } = createFreshContext();
139
+ // Create session with custom timeout
140
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "custom"', timeout: 10 }, context);
141
+ expect(result.output).toContain('custom');
142
+ });
143
+ it('handles timeout during command with large output', async () => {
144
+ const { context } = createFreshContext();
145
+ // Command that generates output continuously
146
+ await expect(bash.invoke({ mode: 'execute', command: 'while true; do echo "spam"; done', timeout: 0.1 }, context)).rejects.toThrow(BashTimeoutError);
147
+ });
148
+ });
149
+ describe('error handling', () => {
150
+ it('requires context for bash operations', async () => {
151
+ await expect(bash.invoke({ mode: 'execute', command: 'echo "test"' })).rejects.toThrow('Tool context is required');
152
+ });
153
+ it('validates command is required for execute mode', async () => {
154
+ const { context } = createFreshContext();
155
+ await expect(bash.invoke({ mode: 'execute' }, context)).rejects.toThrow('command is required when mode is "execute"');
156
+ });
157
+ it('validates command is required with undefined command', async () => {
158
+ const { context } = createFreshContext();
159
+ await expect(bash.invoke({ mode: 'execute', command: undefined }, context)).rejects.toThrow('command is required when mode is "execute"');
160
+ });
161
+ it('validates command is required with empty string', async () => {
162
+ const { context } = createFreshContext();
163
+ await expect(bash.invoke({ mode: 'execute', command: '' }, context)).rejects.toThrow('command is required when mode is "execute"');
164
+ });
165
+ it('handles command execution in a session without proper initialization', async () => {
166
+ const { context } = createFreshContext();
167
+ // Create a session first
168
+ await bash.invoke({ mode: 'execute', command: 'echo "init"' }, context);
169
+ // Then restart to clear it
170
+ await bash.invoke({ mode: 'restart' }, context);
171
+ // Try to execute another command - should work as it creates a new session
172
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "after restart"' }, context);
173
+ expect(result.output).toContain('after restart');
174
+ });
175
+ it('creates new session when none exists', async () => {
176
+ const { context } = createFreshContext();
177
+ // First command should create a new session
178
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "first"' }, context);
179
+ expect(result.output).toContain('first');
180
+ });
181
+ it('handles restart when no session exists', async () => {
182
+ const { context } = createFreshContext();
183
+ // Restart without existing session should not throw
184
+ const result = await bash.invoke({ mode: 'restart' }, context);
185
+ expect(result).toBe('Bash session restarted');
186
+ });
187
+ it('properly cleans up session on restart', async () => {
188
+ const { context } = createFreshContext();
189
+ // Create session with variable
190
+ await bash.invoke({ mode: 'execute', command: 'CLEANUP_TEST="should_be_gone"' }, context);
191
+ // Restart should clear the session
192
+ await bash.invoke({ mode: 'restart' }, context);
193
+ // Variable should not exist in new session
194
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "${CLEANUP_TEST:-empty}"' }, context);
195
+ expect(result.output.trim()).toBe('empty');
196
+ });
197
+ it('handles multiple restarts in sequence', async () => {
198
+ const { context } = createFreshContext();
199
+ // Restart without existing session
200
+ const result1 = await bash.invoke({ mode: 'restart' }, context);
201
+ expect(result1).toBe('Bash session restarted');
202
+ // Restart again
203
+ const result2 = await bash.invoke({ mode: 'restart' }, context);
204
+ expect(result2).toBe('Bash session restarted');
205
+ // Should still be able to execute
206
+ const execResult = await bash.invoke({ mode: 'execute', command: 'echo "still works"' }, context);
207
+ expect(execResult.output).toContain('still works');
208
+ });
209
+ it('handles command with empty output gracefully', async () => {
210
+ const { context } = createFreshContext();
211
+ const result = await bash.invoke({ mode: 'execute', command: 'true' }, context);
212
+ expect(result.output).toBe('');
213
+ expect(result.error).toBe('');
214
+ });
215
+ it('handles command with only whitespace output', async () => {
216
+ const { context } = createFreshContext();
217
+ const result = await bash.invoke({ mode: 'execute', command: 'echo " "' }, context);
218
+ expect(result.output.trim()).toBe('');
219
+ });
220
+ it('handles very long command output', async () => {
221
+ const { context } = createFreshContext();
222
+ // Generate a long string
223
+ const result = await bash.invoke({
224
+ mode: 'execute',
225
+ command: 'for i in {1..100}; do echo "Line $i of output"; done',
226
+ }, context);
227
+ expect(result.output).toContain('Line 1 of output');
228
+ expect(result.output).toContain('Line 100 of output');
229
+ });
230
+ it('creates session with default timeout when not specified', async () => {
231
+ const { context } = createFreshContext();
232
+ // Execute without timeout parameter
233
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "default"' }, context);
234
+ expect(result.output).toContain('default');
235
+ });
236
+ });
237
+ describe('working directory', () => {
238
+ it('starts in process.cwd()', async () => {
239
+ const { context } = createFreshContext();
240
+ const expectedCwd = process.cwd();
241
+ const result = await bash.invoke({ mode: 'execute', command: 'pwd' }, context);
242
+ expect(result.output).toContain(expectedCwd);
243
+ });
244
+ });
245
+ describe('tool properties', () => {
246
+ it('has correct tool name', () => {
247
+ expect(bash.name).toBe('bash');
248
+ });
249
+ it('has description', () => {
250
+ expect(bash.description).toBeDefined();
251
+ expect(bash.description.length).toBeGreaterThan(0);
252
+ });
253
+ it('has toolSpec', () => {
254
+ expect(bash.toolSpec).toBeDefined();
255
+ expect(bash.toolSpec.name).toBe('bash');
256
+ });
257
+ });
258
+ describe('error classes', () => {
259
+ it('BashTimeoutError has correct properties', () => {
260
+ const error = new BashTimeoutError('timeout message');
261
+ expect(error.name).toBe('BashTimeoutError');
262
+ expect(error.message).toBe('timeout message');
263
+ expect(error instanceof Error).toBe(true);
264
+ });
265
+ it('BashSessionError has correct properties', () => {
266
+ const error = new BashSessionError('session error message');
267
+ expect(error.name).toBe('BashSessionError');
268
+ expect(error.message).toBe('session error message');
269
+ expect(error instanceof Error).toBe(true);
270
+ });
271
+ });
272
+ describe('module exports', () => {
273
+ it('exports bash tool from index', () => {
274
+ expect(bash).toBeDefined();
275
+ expect(bash.name).toBe('bash');
276
+ });
277
+ it('exports error classes from index', () => {
278
+ expect(BashTimeoutError).toBeDefined();
279
+ expect(BashSessionError).toBeDefined();
280
+ });
281
+ });
282
+ describe('bash session edge cases', () => {
283
+ it('handles process close during command execution', async () => {
284
+ const { context } = createFreshContext();
285
+ // Use a command that will make the bash process exit - this should throw an error
286
+ await expect(bash.invoke({ mode: 'execute', command: 'exit 0' }, context)).rejects.toThrow(BashSessionError);
287
+ // Next command should work with a new session
288
+ const newResult = await bash.invoke({ mode: 'execute', command: 'echo "new session"' }, context);
289
+ expect(newResult.output).toContain('new session');
290
+ });
291
+ });
292
+ describe('process cleanup', () => {
293
+ it('cleans up on beforeExit event', async () => {
294
+ const { context } = createFreshContext();
295
+ // Create a session
296
+ await bash.invoke({ mode: 'execute', command: 'echo "test"' }, context);
297
+ // Simulate beforeExit event
298
+ process.emit('beforeExit', 0);
299
+ // Session should be cleaned up, next command creates new session
300
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "after exit"' }, context);
301
+ expect(result.output).toContain('after exit');
302
+ });
303
+ it('cleans up on exit event', async () => {
304
+ const { context } = createFreshContext();
305
+ // Create a session
306
+ await bash.invoke({ mode: 'execute', command: 'echo "test"' }, context);
307
+ // Simulate exit event
308
+ process.emit('exit', 0);
309
+ // Session should be cleaned up
310
+ const result = await bash.invoke({ mode: 'execute', command: 'echo "after exit"' }, context);
311
+ expect(result.output).toContain('after exit');
312
+ });
313
+ it('cleans up on SIGINT', async () => {
314
+ const { context } = createFreshContext();
315
+ // Mock process.exit to prevent actual exit
316
+ const exitMock = vi.spyOn(process, 'exit').mockImplementation(() => {
317
+ throw new Error('process.exit called');
318
+ });
319
+ // Create a session
320
+ await bash.invoke({ mode: 'execute', command: 'echo "test"' }, context);
321
+ // Simulate SIGINT
322
+ try {
323
+ process.emit('SIGINT');
324
+ }
325
+ catch {
326
+ // Expected to throw due to our mock
327
+ }
328
+ expect(exitMock).toHaveBeenCalledWith(0);
329
+ exitMock.mockRestore();
330
+ });
331
+ });
332
+ });
333
+ //# sourceMappingURL=bash.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.test.js","sourceRoot":"","sources":["../../../../vended_tools/bash/__tests__/bash.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { BashOutput } from './types.js';
2
+ /**
3
+ * Bash tool for executing shell commands in Node.js environments.
4
+ *
5
+ * This tool provides a persistent bash session that can execute commands and maintain state
6
+ * across multiple invocations within the same agent session.
7
+ *
8
+ * **Security Warning**: This tool executes arbitrary bash commands without sandboxing.
9
+ * Only use with trusted input and consider sandboxing for production deployments.
10
+ *
11
+ * **Node.js Only**: This tool requires Node.js and the `child_process` module.
12
+ * It will not work in browser environments.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // With agent
17
+ * const agent = new Agent({ tools: [bash] })
18
+ * await agent.invoke('List files in the current directory')
19
+ *
20
+ * // Direct usage
21
+ * const result = await bash.invoke(
22
+ * { mode: 'execute', command: 'echo "Hello"' },
23
+ * context
24
+ * )
25
+ * console.log(result.output) // "Hello"
26
+ * ```
27
+ */
28
+ export declare const bash: import("../../src/index.js").InvokableTool<{
29
+ mode: "execute" | "restart";
30
+ command?: string | undefined;
31
+ timeout?: number | undefined;
32
+ }, BashOutput | "Bash session restarted">;
33
+ //# sourceMappingURL=bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../vended_tools/bash/bash.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA2N5C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,IAAI;;;;yCA8Cf,CAAA"}
@@ -0,0 +1,264 @@
1
+ /* eslint-env node */
2
+ import { tool } from '../../src/tools/zod-tool.js';
3
+ import { z } from 'zod';
4
+ import { spawn } from 'child_process';
5
+ import { Buffer } from 'buffer';
6
+ import { BashTimeoutError, BashSessionError } from './types.js';
7
+ /**
8
+ * Zod schema for bash input validation.
9
+ *
10
+ * Note: Uses a single object schema instead of discriminated union for AWS Bedrock compatibility.
11
+ */
12
+ const bashInputSchema = z.object({
13
+ mode: z
14
+ .enum(['execute', 'restart'])
15
+ .describe('Operation mode: "execute" to run a command, "restart" to restart the session'),
16
+ command: z.string().optional().describe('The bash command to execute (required when mode is "execute")'),
17
+ timeout: z.number().positive().optional().describe('Timeout in seconds (default: 120, applies only to execute mode)'),
18
+ });
19
+ /**
20
+ * Internal class for managing a bash session.
21
+ */
22
+ class BashSession {
23
+ _process = null;
24
+ _started = false;
25
+ _timeout;
26
+ _sentinel;
27
+ constructor(timeout = 120) {
28
+ this._timeout = timeout;
29
+ this._sentinel = `__BASH_DONE_${Date.now()}_${Math.random().toString(36).slice(2)}__`;
30
+ }
31
+ /**
32
+ * Starts the bash process if not already started.
33
+ */
34
+ start() {
35
+ if (this._started) {
36
+ return;
37
+ }
38
+ try {
39
+ this._process = spawn('bash', [], {
40
+ cwd: process.cwd(),
41
+ env: { ...process.env, PS1: '', PS2: '' },
42
+ });
43
+ if (!this._process.stdin || !this._process.stdout || !this._process.stderr) {
44
+ throw new BashSessionError('Failed to create bash process streams');
45
+ }
46
+ this._started = true;
47
+ // Handle unexpected process exits
48
+ this._process.on('close', () => {
49
+ this._process = null;
50
+ this._started = false;
51
+ });
52
+ }
53
+ catch (err) {
54
+ throw new BashSessionError(`Failed to start bash session: ${err.message}`);
55
+ }
56
+ }
57
+ /**
58
+ * Stops the bash process.
59
+ */
60
+ stop() {
61
+ if (this._process) {
62
+ this._process.kill();
63
+ this._process = null;
64
+ this._started = false;
65
+ }
66
+ }
67
+ /**
68
+ * Runs a command in the bash session.
69
+ */
70
+ async run(command, timeout) {
71
+ this.start();
72
+ if (!this._process || !this._process.stdin || !this._process.stdout || !this._process.stderr) {
73
+ throw new BashSessionError('Bash session not properly initialized');
74
+ }
75
+ const effectiveTimeout = timeout ?? this._timeout;
76
+ let stdoutData = '';
77
+ let stderrData = '';
78
+ // eslint-disable-next-line no-undef
79
+ let timeoutHandle = null;
80
+ let isTimedOut = false;
81
+ return new Promise((resolve, reject) => {
82
+ const stdout = this._process.stdout;
83
+ const stderr = this._process.stderr;
84
+ const stdin = this._process.stdin;
85
+ // Handlers for stdout
86
+ const onStdoutData = (chunk) => {
87
+ const data = Buffer.from(chunk).toString('utf-8');
88
+ stdoutData += data;
89
+ // Check for sentinel
90
+ if (stdoutData.includes(this._sentinel)) {
91
+ cleanup();
92
+ // Remove sentinel from output
93
+ const output = stdoutData.replace(this._sentinel, '').trim();
94
+ const error = stderrData.trim();
95
+ resolve({ output, error });
96
+ }
97
+ };
98
+ // Handlers for stderr
99
+ const onStderrData = (chunk) => {
100
+ stderrData += Buffer.from(chunk).toString('utf-8');
101
+ };
102
+ // Handler for process close
103
+ const onClose = (code) => {
104
+ if (!isTimedOut) {
105
+ cleanup();
106
+ reject(new BashSessionError(`Bash process exited unexpectedly with code ${code ?? 'unknown'}`));
107
+ }
108
+ };
109
+ // Handler for process errors
110
+ const onError = (err) => {
111
+ cleanup();
112
+ reject(new BashSessionError(`Bash process error: ${err.message}`));
113
+ };
114
+ // Cleanup function
115
+ const cleanup = () => {
116
+ if (timeoutHandle !== null) {
117
+ // eslint-disable-next-line no-undef
118
+ clearTimeout(timeoutHandle);
119
+ timeoutHandle = null;
120
+ }
121
+ stdout.off('data', onStdoutData);
122
+ stderr.off('data', onStderrData);
123
+ // Check if process still exists before removing listeners
124
+ if (this._process) {
125
+ this._process.off('close', onClose);
126
+ this._process.off('error', onError);
127
+ }
128
+ // Kill the process after command completes to allow clean exit
129
+ // This is important for one-shot scripts that need to terminate
130
+ this.stop();
131
+ activeSessions.delete(this);
132
+ };
133
+ // Set up timeout
134
+ // eslint-disable-next-line no-undef
135
+ timeoutHandle = setTimeout(() => {
136
+ isTimedOut = true;
137
+ cleanup();
138
+ // Check if process still exists before killing
139
+ if (this._process) {
140
+ this._process.kill();
141
+ }
142
+ this._started = false;
143
+ reject(new BashTimeoutError(`Command timed out after ${effectiveTimeout} seconds`));
144
+ }, effectiveTimeout * 1000);
145
+ // Attach listeners
146
+ stdout.on('data', onStdoutData);
147
+ stderr.on('data', onStderrData);
148
+ this._process.on('close', onClose);
149
+ this._process.on('error', onError);
150
+ // Send command with sentinel
151
+ try {
152
+ stdin.write(`${command}\necho "${this._sentinel}"\n`);
153
+ }
154
+ catch (err) {
155
+ cleanup();
156
+ reject(new BashSessionError(`Failed to write command: ${err.message}`));
157
+ }
158
+ });
159
+ }
160
+ }
161
+ /**
162
+ * WeakMap to store bash sessions per agent instance.
163
+ */
164
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
165
+ const sessions = new WeakMap();
166
+ /**
167
+ * Track all active sessions for cleanup on process exit.
168
+ */
169
+ const activeSessions = new Set();
170
+ /**
171
+ * Clean up all active bash sessions.
172
+ */
173
+ function cleanupAllSessions() {
174
+ for (const session of activeSessions) {
175
+ session.stop();
176
+ }
177
+ activeSessions.clear();
178
+ }
179
+ // Register cleanup handlers for process exit
180
+ process.on('beforeExit', () => {
181
+ // beforeExit fires when event loop is empty but process is still alive
182
+ // This is our chance to clean up bash processes before they prevent exit
183
+ cleanupAllSessions();
184
+ });
185
+ process.on('exit', cleanupAllSessions);
186
+ process.on('SIGINT', () => {
187
+ cleanupAllSessions();
188
+ /* c8 ignore next */
189
+ process.exit(0);
190
+ });
191
+ /* c8 ignore start */
192
+ process.on('SIGTERM', () => {
193
+ cleanupAllSessions();
194
+ process.exit(0);
195
+ });
196
+ /* c8 ignore stop */
197
+ /**
198
+ * Bash tool for executing shell commands in Node.js environments.
199
+ *
200
+ * This tool provides a persistent bash session that can execute commands and maintain state
201
+ * across multiple invocations within the same agent session.
202
+ *
203
+ * **Security Warning**: This tool executes arbitrary bash commands without sandboxing.
204
+ * Only use with trusted input and consider sandboxing for production deployments.
205
+ *
206
+ * **Node.js Only**: This tool requires Node.js and the `child_process` module.
207
+ * It will not work in browser environments.
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * // With agent
212
+ * const agent = new Agent({ tools: [bash] })
213
+ * await agent.invoke('List files in the current directory')
214
+ *
215
+ * // Direct usage
216
+ * const result = await bash.invoke(
217
+ * { mode: 'execute', command: 'echo "Hello"' },
218
+ * context
219
+ * )
220
+ * console.log(result.output) // "Hello"
221
+ * ```
222
+ */
223
+ export const bash = tool({
224
+ name: 'bash',
225
+ description: 'Executes bash shell commands in a persistent session. Supports execute and restart modes. ' +
226
+ 'Commands persist state (variables, directory) within the session. Node.js only.',
227
+ inputSchema: bashInputSchema,
228
+ callback: async (input, context) => {
229
+ if (!context) {
230
+ throw new Error('Tool context is required for bash operations');
231
+ }
232
+ const agent = context.agent;
233
+ // Validate execute mode has command
234
+ if (input.mode === 'execute' && !input.command) {
235
+ throw new Error('command is required when mode is "execute"');
236
+ }
237
+ // Handle restart mode
238
+ if (input.mode === 'restart') {
239
+ const existingSession = sessions.get(agent);
240
+ if (existingSession) {
241
+ existingSession.stop();
242
+ activeSessions.delete(existingSession);
243
+ sessions.delete(agent);
244
+ }
245
+ // Create new session
246
+ const newSession = new BashSession(120);
247
+ sessions.set(agent, newSession);
248
+ activeSessions.add(newSession);
249
+ return 'Bash session restarted';
250
+ }
251
+ // Handle execute mode
252
+ // Get or create session
253
+ let session = sessions.get(agent);
254
+ if (!session) {
255
+ session = new BashSession(input.timeout ?? 120);
256
+ sessions.set(agent, session);
257
+ activeSessions.add(session);
258
+ }
259
+ // Execute command
260
+ const result = await session.run(input.command, input.timeout);
261
+ return result;
262
+ },
263
+ });
264
+ //# sourceMappingURL=bash.js.map