agent-bundle 0.1.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 (376) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/agent/agent.d.ts +32 -0
  4. package/dist/agent/agent.js +241 -0
  5. package/dist/agent/agent.js.map +1 -0
  6. package/dist/agent/agent.test-helpers.d.ts +63 -0
  7. package/dist/agent/agent.test-helpers.js +170 -0
  8. package/dist/agent/agent.test-helpers.js.map +1 -0
  9. package/dist/agent/define-agent.d.ts +2 -0
  10. package/dist/agent/define-agent.js +18 -0
  11. package/dist/agent/define-agent.js.map +1 -0
  12. package/dist/agent/dependencies.d.ts +15 -0
  13. package/dist/agent/dependencies.js +14 -0
  14. package/dist/agent/dependencies.js.map +1 -0
  15. package/dist/agent/index.d.ts +4 -0
  16. package/dist/agent/index.js +5 -0
  17. package/dist/agent/index.js.map +1 -0
  18. package/dist/agent/internals.d.ts +28 -0
  19. package/dist/agent/internals.js +160 -0
  20. package/dist/agent/internals.js.map +1 -0
  21. package/dist/agent/session.d.ts +4 -0
  22. package/dist/agent/session.js +2 -0
  23. package/dist/agent/session.js.map +1 -0
  24. package/dist/agent/types.d.ts +52 -0
  25. package/dist/agent/types.js +2 -0
  26. package/dist/agent/types.js.map +1 -0
  27. package/dist/agent-loop/agent-loop.d.ts +27 -0
  28. package/dist/agent-loop/agent-loop.js +2 -0
  29. package/dist/agent-loop/agent-loop.js.map +1 -0
  30. package/dist/agent-loop/index.d.ts +4 -0
  31. package/dist/agent-loop/index.js +5 -0
  32. package/dist/agent-loop/index.js.map +1 -0
  33. package/dist/agent-loop/pi-mono/events.d.ts +3 -0
  34. package/dist/agent-loop/pi-mono/events.js +73 -0
  35. package/dist/agent-loop/pi-mono/events.js.map +1 -0
  36. package/dist/agent-loop/pi-mono/index.d.ts +1 -0
  37. package/dist/agent-loop/pi-mono/index.js +2 -0
  38. package/dist/agent-loop/pi-mono/index.js.map +1 -0
  39. package/dist/agent-loop/pi-mono/input.d.ts +6 -0
  40. package/dist/agent-loop/pi-mono/input.js +120 -0
  41. package/dist/agent-loop/pi-mono/input.js.map +1 -0
  42. package/dist/agent-loop/pi-mono/model.d.ts +7 -0
  43. package/dist/agent-loop/pi-mono/model.js +72 -0
  44. package/dist/agent-loop/pi-mono/model.js.map +1 -0
  45. package/dist/agent-loop/pi-mono/pi-mono-loop.d.ts +11 -0
  46. package/dist/agent-loop/pi-mono/pi-mono-loop.js +167 -0
  47. package/dist/agent-loop/pi-mono/pi-mono-loop.js.map +1 -0
  48. package/dist/agent-loop/pi-mono/pi-mono-loop.test-helpers.d.ts +28 -0
  49. package/dist/agent-loop/pi-mono/pi-mono-loop.test-helpers.js +76 -0
  50. package/dist/agent-loop/pi-mono/pi-mono-loop.test-helpers.js.map +1 -0
  51. package/dist/agent-loop/pi-mono/queue.d.ts +9 -0
  52. package/dist/agent-loop/pi-mono/queue.js +37 -0
  53. package/dist/agent-loop/pi-mono/queue.js.map +1 -0
  54. package/dist/agent-loop/pi-mono/tools.d.ts +4 -0
  55. package/dist/agent-loop/pi-mono/tools.js +164 -0
  56. package/dist/agent-loop/pi-mono/tools.js.map +1 -0
  57. package/dist/agent-loop/pi-mono/utils.d.ts +14 -0
  58. package/dist/agent-loop/pi-mono/utils.js +83 -0
  59. package/dist/agent-loop/pi-mono/utils.js.map +1 -0
  60. package/dist/agent-loop/system-prompt/fill.d.ts +1 -0
  61. package/dist/agent-loop/system-prompt/fill.js +19 -0
  62. package/dist/agent-loop/system-prompt/fill.js.map +1 -0
  63. package/dist/agent-loop/system-prompt/generate.d.ts +11 -0
  64. package/dist/agent-loop/system-prompt/generate.js +21 -0
  65. package/dist/agent-loop/system-prompt/generate.js.map +1 -0
  66. package/dist/agent-loop/system-prompt/index.d.ts +2 -0
  67. package/dist/agent-loop/system-prompt/index.js +3 -0
  68. package/dist/agent-loop/system-prompt/index.js.map +1 -0
  69. package/dist/agent-loop/types.d.ts +77 -0
  70. package/dist/agent-loop/types.js +2 -0
  71. package/dist/agent-loop/types.js.map +1 -0
  72. package/dist/cli/build/build.d.ts +35 -0
  73. package/dist/cli/build/build.js +174 -0
  74. package/dist/cli/build/build.js.map +1 -0
  75. package/dist/cli/build/build.test-helpers.d.ts +9 -0
  76. package/dist/cli/build/build.test-helpers.js +50 -0
  77. package/dist/cli/build/build.test-helpers.js.map +1 -0
  78. package/dist/cli/build/codegen-commands.d.ts +16 -0
  79. package/dist/cli/build/codegen-commands.js +81 -0
  80. package/dist/cli/build/codegen-commands.js.map +1 -0
  81. package/dist/cli/build/codegen.d.ts +55 -0
  82. package/dist/cli/build/codegen.js +212 -0
  83. package/dist/cli/build/codegen.js.map +1 -0
  84. package/dist/cli/build/e2b-template.d.ts +38 -0
  85. package/dist/cli/build/e2b-template.js +210 -0
  86. package/dist/cli/build/e2b-template.js.map +1 -0
  87. package/dist/cli/build/e2b-template.test-helpers.d.ts +19 -0
  88. package/dist/cli/build/e2b-template.test-helpers.js +80 -0
  89. package/dist/cli/build/e2b-template.test-helpers.js.map +1 -0
  90. package/dist/cli/build/sandbox-image.d.ts +35 -0
  91. package/dist/cli/build/sandbox-image.js +57 -0
  92. package/dist/cli/build/sandbox-image.js.map +1 -0
  93. package/dist/cli/build-codegen.d.ts +41 -0
  94. package/dist/cli/build-codegen.js +168 -0
  95. package/dist/cli/build-codegen.js.map +1 -0
  96. package/dist/cli/build-e2b-template.d.ts +38 -0
  97. package/dist/cli/build-e2b-template.js +223 -0
  98. package/dist/cli/build-e2b-template.js.map +1 -0
  99. package/dist/cli/build-e2b-template.test-helpers.d.ts +19 -0
  100. package/dist/cli/build-e2b-template.test-helpers.js +80 -0
  101. package/dist/cli/build-e2b-template.test-helpers.js.map +1 -0
  102. package/dist/cli/build-sandbox-image.d.ts +35 -0
  103. package/dist/cli/build-sandbox-image.js +57 -0
  104. package/dist/cli/build-sandbox-image.js.map +1 -0
  105. package/dist/cli/build.d.ts +30 -0
  106. package/dist/cli/build.js +151 -0
  107. package/dist/cli/build.js.map +1 -0
  108. package/dist/cli/build.test-helpers.d.ts +9 -0
  109. package/dist/cli/build.test-helpers.js +50 -0
  110. package/dist/cli/build.test-helpers.js.map +1 -0
  111. package/dist/cli/config/load-bundle-config.d.ts +2 -0
  112. package/dist/cli/config/load-bundle-config.js +20 -0
  113. package/dist/cli/config/load-bundle-config.js.map +1 -0
  114. package/dist/cli/config/resolve-project-root.d.ts +1 -0
  115. package/dist/cli/config/resolve-project-root.js +19 -0
  116. package/dist/cli/config/resolve-project-root.js.map +1 -0
  117. package/dist/cli/deploy/aws-cli.d.ts +42 -0
  118. package/dist/cli/deploy/aws-cli.js +95 -0
  119. package/dist/cli/deploy/aws-cli.js.map +1 -0
  120. package/dist/cli/deploy/aws-ecr.d.ts +20 -0
  121. package/dist/cli/deploy/aws-ecr.js +97 -0
  122. package/dist/cli/deploy/aws-ecr.js.map +1 -0
  123. package/dist/cli/deploy/aws-ecs-infra.d.ts +39 -0
  124. package/dist/cli/deploy/aws-ecs-infra.js +169 -0
  125. package/dist/cli/deploy/aws-ecs-infra.js.map +1 -0
  126. package/dist/cli/deploy/aws-ecs-role.d.ts +9 -0
  127. package/dist/cli/deploy/aws-ecs-role.js +114 -0
  128. package/dist/cli/deploy/aws-ecs-role.js.map +1 -0
  129. package/dist/cli/deploy/aws-ecs-service.d.ts +37 -0
  130. package/dist/cli/deploy/aws-ecs-service.js +207 -0
  131. package/dist/cli/deploy/aws-ecs-service.js.map +1 -0
  132. package/dist/cli/deploy/aws-ecs-shared.d.ts +59 -0
  133. package/dist/cli/deploy/aws-ecs-shared.js +30 -0
  134. package/dist/cli/deploy/aws-ecs-shared.js.map +1 -0
  135. package/dist/cli/deploy/aws-ecs.d.ts +3 -0
  136. package/dist/cli/deploy/aws-ecs.js +141 -0
  137. package/dist/cli/deploy/aws-ecs.js.map +1 -0
  138. package/dist/cli/deploy/aws-prerequisites.d.ts +16 -0
  139. package/dist/cli/deploy/aws-prerequisites.js +28 -0
  140. package/dist/cli/deploy/aws-prerequisites.js.map +1 -0
  141. package/dist/cli/deploy/aws-teardown.d.ts +13 -0
  142. package/dist/cli/deploy/aws-teardown.js +204 -0
  143. package/dist/cli/deploy/aws-teardown.js.map +1 -0
  144. package/dist/cli/deploy/deploy.d.ts +36 -0
  145. package/dist/cli/deploy/deploy.js +209 -0
  146. package/dist/cli/deploy/deploy.js.map +1 -0
  147. package/dist/cli/error.d.ts +1 -0
  148. package/dist/cli/error.js +4 -0
  149. package/dist/cli/error.js.map +1 -0
  150. package/dist/cli/generate/generate.d.ts +37 -0
  151. package/dist/cli/generate/generate.js +121 -0
  152. package/dist/cli/generate/generate.js.map +1 -0
  153. package/dist/cli/generate.d.ts +32 -0
  154. package/dist/cli/generate.js +102 -0
  155. package/dist/cli/generate.js.map +1 -0
  156. package/dist/cli/index.d.ts +2 -0
  157. package/dist/cli/index.js +182 -0
  158. package/dist/cli/index.js.map +1 -0
  159. package/dist/cli/load-bundle-config.d.ts +2 -0
  160. package/dist/cli/load-bundle-config.js +20 -0
  161. package/dist/cli/load-bundle-config.js.map +1 -0
  162. package/dist/cli/resolve-project-root.d.ts +1 -0
  163. package/dist/cli/resolve-project-root.js +19 -0
  164. package/dist/cli/resolve-project-root.js.map +1 -0
  165. package/dist/cli/serve/dev.d.ts +6 -0
  166. package/dist/cli/serve/dev.js +73 -0
  167. package/dist/cli/serve/dev.js.map +1 -0
  168. package/dist/cli/serve/http.d.ts +12 -0
  169. package/dist/cli/serve/http.js +123 -0
  170. package/dist/cli/serve/http.js.map +1 -0
  171. package/dist/cli/serve/init.d.ts +42 -0
  172. package/dist/cli/serve/init.js +110 -0
  173. package/dist/cli/serve/init.js.map +1 -0
  174. package/dist/cli/serve/runtime.d.ts +25 -0
  175. package/dist/cli/serve/runtime.js +142 -0
  176. package/dist/cli/serve/runtime.js.map +1 -0
  177. package/dist/cli/serve/serve.d.ts +7 -0
  178. package/dist/cli/serve/serve.js +63 -0
  179. package/dist/cli/serve/serve.js.map +1 -0
  180. package/dist/cli/serve/serve.test-helpers.d.ts +36 -0
  181. package/dist/cli/serve/serve.test-helpers.js +205 -0
  182. package/dist/cli/serve/serve.test-helpers.js.map +1 -0
  183. package/dist/cli/serve/worktree-port.d.ts +36 -0
  184. package/dist/cli/serve/worktree-port.js +124 -0
  185. package/dist/cli/serve/worktree-port.js.map +1 -0
  186. package/dist/cli/serve-http.d.ts +12 -0
  187. package/dist/cli/serve-http.js +112 -0
  188. package/dist/cli/serve-http.js.map +1 -0
  189. package/dist/cli/serve-runtime.d.ts +16 -0
  190. package/dist/cli/serve-runtime.js +122 -0
  191. package/dist/cli/serve-runtime.js.map +1 -0
  192. package/dist/cli/serve.d.ts +33 -0
  193. package/dist/cli/serve.js +150 -0
  194. package/dist/cli/serve.js.map +1 -0
  195. package/dist/cli/serve.test-helpers.d.ts +30 -0
  196. package/dist/cli/serve.test-helpers.js +145 -0
  197. package/dist/cli/serve.test-helpers.js.map +1 -0
  198. package/dist/code-formatter/bundle.json +41 -0
  199. package/dist/code-formatter/index.ts +26 -0
  200. package/dist/code-formatter/package.json +10 -0
  201. package/dist/code-formatter/types.ts +2 -0
  202. package/dist/code-formatter-e2b/bundle.json +40 -0
  203. package/dist/code-formatter-e2b/index.ts +25 -0
  204. package/dist/code-formatter-e2b/package.json +10 -0
  205. package/dist/code-formatter-e2b/types.ts +2 -0
  206. package/dist/coding-assistant-ollama/bundle.json +43 -0
  207. package/dist/coding-assistant-ollama/index.ts +28 -0
  208. package/dist/coding-assistant-ollama/package.json +10 -0
  209. package/dist/coding-assistant-ollama/types.ts +2 -0
  210. package/dist/commands/find.d.ts +8 -0
  211. package/dist/commands/find.js +11 -0
  212. package/dist/commands/find.js.map +1 -0
  213. package/dist/commands/loader.d.ts +13 -0
  214. package/dist/commands/loader.js +163 -0
  215. package/dist/commands/loader.js.map +1 -0
  216. package/dist/commands/types.d.ts +7 -0
  217. package/dist/commands/types.js +2 -0
  218. package/dist/commands/types.js.map +1 -0
  219. package/dist/commands/with-commands.d.ts +6 -0
  220. package/dist/commands/with-commands.js +19 -0
  221. package/dist/commands/with-commands.js.map +1 -0
  222. package/dist/data-analyst/bundle.json +40 -0
  223. package/dist/data-analyst/index.ts +25 -0
  224. package/dist/data-analyst/package.json +10 -0
  225. package/dist/data-analyst/types.ts +2 -0
  226. package/dist/financial-analyst/bundle.json +40 -0
  227. package/dist/financial-analyst/index.ts +25 -0
  228. package/dist/financial-analyst/package.json +10 -0
  229. package/dist/financial-analyst/types.ts +2 -0
  230. package/dist/mcp/client-manager.d.ts +26 -0
  231. package/dist/mcp/client-manager.js +101 -0
  232. package/dist/mcp/client-manager.js.map +1 -0
  233. package/dist/mcp/connect-server.d.ts +21 -0
  234. package/dist/mcp/connect-server.js +170 -0
  235. package/dist/mcp/connect-server.js.map +1 -0
  236. package/dist/mcp/index.d.ts +2 -0
  237. package/dist/mcp/index.js +3 -0
  238. package/dist/mcp/index.js.map +1 -0
  239. package/dist/mcp/sandbox-stdio-transport.d.ts +32 -0
  240. package/dist/mcp/sandbox-stdio-transport.js +199 -0
  241. package/dist/mcp/sandbox-stdio-transport.js.map +1 -0
  242. package/dist/observability/hooks.d.ts +10 -0
  243. package/dist/observability/hooks.js +97 -0
  244. package/dist/observability/hooks.js.map +1 -0
  245. package/dist/observability/index.d.ts +6 -0
  246. package/dist/observability/index.js +7 -0
  247. package/dist/observability/index.js.map +1 -0
  248. package/dist/observability/metrics.d.ts +31 -0
  249. package/dist/observability/metrics.js +61 -0
  250. package/dist/observability/metrics.js.map +1 -0
  251. package/dist/observability/middleware.d.ts +12 -0
  252. package/dist/observability/middleware.js +45 -0
  253. package/dist/observability/middleware.js.map +1 -0
  254. package/dist/observability/otel-harness.test-util.d.ts +37 -0
  255. package/dist/observability/otel-harness.test-util.js +96 -0
  256. package/dist/observability/otel-harness.test-util.js.map +1 -0
  257. package/dist/observability/provider.d.ts +8 -0
  258. package/dist/observability/provider.js +19 -0
  259. package/dist/observability/provider.js.map +1 -0
  260. package/dist/observability/tracing.d.ts +14 -0
  261. package/dist/observability/tracing.js +40 -0
  262. package/dist/observability/tracing.js.map +1 -0
  263. package/dist/observability/types.d.ts +39 -0
  264. package/dist/observability/types.js +31 -0
  265. package/dist/observability/types.js.map +1 -0
  266. package/dist/personalized-recommend/bundle.json +64 -0
  267. package/dist/personalized-recommend/index.ts +41 -0
  268. package/dist/personalized-recommend/package.json +10 -0
  269. package/dist/personalized-recommend/types.ts +2 -0
  270. package/dist/plugins/loader.d.ts +11 -0
  271. package/dist/plugins/loader.js +100 -0
  272. package/dist/plugins/loader.js.map +1 -0
  273. package/dist/plugins/merge.d.ts +10 -0
  274. package/dist/plugins/merge.js +22 -0
  275. package/dist/plugins/merge.js.map +1 -0
  276. package/dist/plugins/parse.d.ts +10 -0
  277. package/dist/plugins/parse.js +139 -0
  278. package/dist/plugins/parse.js.map +1 -0
  279. package/dist/plugins/types.d.ts +28 -0
  280. package/dist/plugins/types.js +2 -0
  281. package/dist/plugins/types.js.map +1 -0
  282. package/dist/plugins/urls.d.ts +7 -0
  283. package/dist/plugins/urls.js +40 -0
  284. package/dist/plugins/urls.js.map +1 -0
  285. package/dist/runtime.d.ts +5 -0
  286. package/dist/runtime.js +3 -0
  287. package/dist/runtime.js.map +1 -0
  288. package/dist/sandbox/factory.d.ts +2 -0
  289. package/dist/sandbox/factory.js +27 -0
  290. package/dist/sandbox/factory.js.map +1 -0
  291. package/dist/sandbox/index.d.ts +4 -0
  292. package/dist/sandbox/index.js +5 -0
  293. package/dist/sandbox/index.js.map +1 -0
  294. package/dist/sandbox/providers/e2b.d.ts +28 -0
  295. package/dist/sandbox/providers/e2b.js +294 -0
  296. package/dist/sandbox/providers/e2b.js.map +1 -0
  297. package/dist/sandbox/providers/kubernetes-command-run.d.ts +8 -0
  298. package/dist/sandbox/providers/kubernetes-command-run.js +195 -0
  299. package/dist/sandbox/providers/kubernetes-command-run.js.map +1 -0
  300. package/dist/sandbox/providers/kubernetes-helpers.d.ts +31 -0
  301. package/dist/sandbox/providers/kubernetes-helpers.js +152 -0
  302. package/dist/sandbox/providers/kubernetes-helpers.js.map +1 -0
  303. package/dist/sandbox/providers/kubernetes-kubeconfig.d.ts +7 -0
  304. package/dist/sandbox/providers/kubernetes-kubeconfig.js +51 -0
  305. package/dist/sandbox/providers/kubernetes-kubeconfig.js.map +1 -0
  306. package/dist/sandbox/providers/kubernetes-spawn.d.ts +2 -0
  307. package/dist/sandbox/providers/kubernetes-spawn.js +42 -0
  308. package/dist/sandbox/providers/kubernetes-spawn.js.map +1 -0
  309. package/dist/sandbox/providers/kubernetes-spawn.utils.d.ts +32 -0
  310. package/dist/sandbox/providers/kubernetes-spawn.utils.js +249 -0
  311. package/dist/sandbox/providers/kubernetes-spawn.utils.js.map +1 -0
  312. package/dist/sandbox/providers/kubernetes.constants.d.ts +3 -0
  313. package/dist/sandbox/providers/kubernetes.constants.js +4 -0
  314. package/dist/sandbox/providers/kubernetes.constants.js.map +1 -0
  315. package/dist/sandbox/providers/kubernetes.d.ts +37 -0
  316. package/dist/sandbox/providers/kubernetes.js +258 -0
  317. package/dist/sandbox/providers/kubernetes.js.map +1 -0
  318. package/dist/sandbox/types.d.ts +57 -0
  319. package/dist/sandbox/types.js +2 -0
  320. package/dist/sandbox/types.js.map +1 -0
  321. package/dist/sandbox/utils.d.ts +1 -0
  322. package/dist/sandbox/utils.js +4 -0
  323. package/dist/sandbox/utils.js.map +1 -0
  324. package/dist/schema/bundle.d.ts +143 -0
  325. package/dist/schema/bundle.js +203 -0
  326. package/dist/schema/bundle.js.map +1 -0
  327. package/dist/service/command-routes.d.ts +8 -0
  328. package/dist/service/command-routes.js +44 -0
  329. package/dist/service/command-routes.js.map +1 -0
  330. package/dist/service/create-server.d.ts +9 -0
  331. package/dist/service/create-server.js +113 -0
  332. package/dist/service/create-server.js.map +1 -0
  333. package/dist/service/index.d.ts +1 -0
  334. package/dist/service/index.js +2 -0
  335. package/dist/service/index.js.map +1 -0
  336. package/dist/skills/index.d.ts +1 -0
  337. package/dist/skills/index.js +2 -0
  338. package/dist/skills/index.js.map +1 -0
  339. package/dist/skills/loader.d.ts +18 -0
  340. package/dist/skills/loader.js +142 -0
  341. package/dist/skills/loader.js.map +1 -0
  342. package/dist/skills/summaries.d.ts +8 -0
  343. package/dist/skills/summaries.js +9 -0
  344. package/dist/skills/summaries.js.map +1 -0
  345. package/dist/test-helpers/env.d.ts +2 -0
  346. package/dist/test-helpers/env.js +20 -0
  347. package/dist/test-helpers/env.js.map +1 -0
  348. package/dist/test-helpers/mock-agent.d.ts +56 -0
  349. package/dist/test-helpers/mock-agent.js +180 -0
  350. package/dist/test-helpers/mock-agent.js.map +1 -0
  351. package/dist/test-helpers/mock-sandbox.d.ts +33 -0
  352. package/dist/test-helpers/mock-sandbox.js +200 -0
  353. package/dist/test-helpers/mock-sandbox.js.map +1 -0
  354. package/dist/tui/index.d.ts +2 -0
  355. package/dist/tui/index.js +3 -0
  356. package/dist/tui/index.js.map +1 -0
  357. package/dist/tui/render.d.ts +8 -0
  358. package/dist/tui/render.js +40 -0
  359. package/dist/tui/render.js.map +1 -0
  360. package/dist/tui/tui.d.ts +19 -0
  361. package/dist/tui/tui.js +133 -0
  362. package/dist/tui/tui.js.map +1 -0
  363. package/dist/webui/create-webui-server.d.ts +22 -0
  364. package/dist/webui/create-webui-server.js +293 -0
  365. package/dist/webui/create-webui-server.js.map +1 -0
  366. package/dist/webui/event-bus.d.ts +16 -0
  367. package/dist/webui/event-bus.js +24 -0
  368. package/dist/webui/event-bus.js.map +1 -0
  369. package/dist/webui/index.d.ts +2 -0
  370. package/dist/webui/index.js +3 -0
  371. package/dist/webui/index.js.map +1 -0
  372. package/dist/webui/public/app.js +847 -0
  373. package/dist/webui/public/file-transfer.js +114 -0
  374. package/dist/webui/public/index.html +166 -0
  375. package/dist/webui/public/styles.css +1678 -0
  376. package/package.json +99 -0
@@ -0,0 +1,170 @@
1
+ import { AgentImpl } from "./agent.js";
2
+ export class FakeLoop {
3
+ initConfigs = [];
4
+ runInputs = [];
5
+ disposeCount = 0;
6
+ initError = null;
7
+ queuedRuns = [];
8
+ setInitError(error) {
9
+ this.initError = error;
10
+ }
11
+ enqueueRun(events) {
12
+ this.queuedRuns.push(events);
13
+ }
14
+ async init(config) {
15
+ if (this.initError) {
16
+ throw this.initError;
17
+ }
18
+ this.initConfigs.push(config);
19
+ }
20
+ async *run(input, options) {
21
+ void options;
22
+ this.runInputs.push(input);
23
+ const events = this.queuedRuns.shift() ?? [];
24
+ for (const event of events) {
25
+ yield event;
26
+ }
27
+ }
28
+ async dispose() {
29
+ this.disposeCount += 1;
30
+ }
31
+ }
32
+ export class FakeSandbox {
33
+ id = "sandbox-1";
34
+ status = "idle";
35
+ execCalls = [];
36
+ spawnCalls = [];
37
+ readCalls = [];
38
+ writeCalls = [];
39
+ startCount = 0;
40
+ shutdownCount = 0;
41
+ nextReadResult = "sandbox-file-content";
42
+ nextExecResult = {
43
+ stdout: "",
44
+ stderr: "",
45
+ exitCode: 0,
46
+ };
47
+ nextSpawnedProcess = createSpawnedProcessStub();
48
+ async start() {
49
+ this.startCount += 1;
50
+ this.status = "ready";
51
+ }
52
+ async shutdown() {
53
+ this.shutdownCount += 1;
54
+ this.status = "stopped";
55
+ }
56
+ async exec(command, options) {
57
+ this.execCalls.push({ command, options });
58
+ return this.nextExecResult;
59
+ }
60
+ async spawn(command, args = [], options) {
61
+ this.spawnCalls.push({ command, args, options });
62
+ return this.nextSpawnedProcess;
63
+ }
64
+ file = {
65
+ read: async (path) => {
66
+ this.readCalls.push(path);
67
+ return this.nextReadResult;
68
+ },
69
+ write: async (path, content) => {
70
+ this.writeCalls.push({ path, content });
71
+ },
72
+ list: async (path) => {
73
+ void path;
74
+ return [];
75
+ },
76
+ delete: async (path) => {
77
+ void path;
78
+ return undefined;
79
+ },
80
+ };
81
+ }
82
+ function createBaseSandboxConfig() {
83
+ return {
84
+ provider: "e2b",
85
+ timeout: 900,
86
+ resources: {
87
+ cpu: 2,
88
+ memory: "512MB",
89
+ },
90
+ };
91
+ }
92
+ function createBaseAgentConfig(overrides = {}) {
93
+ return {
94
+ name: "invoice-processor",
95
+ sandbox: createBaseSandboxConfig(),
96
+ model: {
97
+ provider: "ollama",
98
+ model: "qwen2.5-coder",
99
+ },
100
+ systemPrompt: "Current user: {{user_name}}",
101
+ variables: ["user_name"],
102
+ ...overrides,
103
+ };
104
+ }
105
+ function createBaseInitOptions(overrides = {}) {
106
+ return {
107
+ variables: {
108
+ user_name: "Alice",
109
+ },
110
+ ...overrides,
111
+ };
112
+ }
113
+ export function createHarness(options = {}) {
114
+ const loop = new FakeLoop();
115
+ const sandbox = new FakeSandbox();
116
+ const dependencies = {
117
+ createSandbox: (config, hooks) => {
118
+ void config;
119
+ void hooks;
120
+ options.order?.push("createSandbox");
121
+ return sandbox;
122
+ },
123
+ createLoop: () => {
124
+ options.order?.push("createLoop");
125
+ return loop;
126
+ },
127
+ createMcpClientManager: async (servers, tokens, mcpSandbox) => {
128
+ void servers;
129
+ void tokens;
130
+ void mcpSandbox;
131
+ options.order?.push("createMcpClientManager");
132
+ return options.mcpClientManager ?? null;
133
+ },
134
+ };
135
+ const agent = new AgentImpl(createBaseAgentConfig(options.configOverrides), createBaseInitOptions(options.initOverrides), dependencies);
136
+ return {
137
+ agent,
138
+ loop,
139
+ sandbox,
140
+ dependencies,
141
+ };
142
+ }
143
+ export async function collectEvents(iterable) {
144
+ const events = [];
145
+ for await (const event of iterable) {
146
+ events.push(event);
147
+ }
148
+ return events;
149
+ }
150
+ function createSpawnedProcessStub() {
151
+ return {
152
+ pid: 1,
153
+ stdin: new WritableStream({
154
+ write: async () => undefined,
155
+ }),
156
+ stdout: new ReadableStream({
157
+ start(controller) {
158
+ controller.close();
159
+ },
160
+ }),
161
+ stderr: new ReadableStream({
162
+ start(controller) {
163
+ controller.close();
164
+ },
165
+ }),
166
+ exited: Promise.resolve(0),
167
+ kill: async () => undefined,
168
+ };
169
+ }
170
+ //# sourceMappingURL=agent.test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test-helpers.js","sourceRoot":"","sources":["../../src/agent/agent.test-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AgentConfig, AgentFactory } from "./types.js";
2
+ export declare function defineAgent<V extends string>(config: AgentConfig<V>): AgentFactory<V>;
@@ -0,0 +1,18 @@
1
+ import { createInitializedAgent } from "./agent.js";
2
+ function validateRequiredVariables(expectedVariables, variables) {
3
+ const missingVariables = expectedVariables.filter((name) => !Object.hasOwn(variables, name));
4
+ if (missingVariables.length === 0) {
5
+ return;
6
+ }
7
+ throw new Error(`Missing required init variables: ${missingVariables.join(", ")}`);
8
+ }
9
+ export function defineAgent(config) {
10
+ return {
11
+ name: config.name,
12
+ init: async (options) => {
13
+ validateRequiredVariables(config.variables, options.variables);
14
+ return await createInitializedAgent(config, options);
15
+ },
16
+ };
17
+ }
18
+ //# sourceMappingURL=define-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-agent.js","sourceRoot":"","sources":["../../src/agent/define-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,SAAS,yBAAyB,CAChC,iBAA+B,EAC/B,SAA4B;IAE5B,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7F,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oCAAoC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,WAAW,CAAmB,MAAsB;IAClE,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,yBAAyB,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YAC/D,OAAO,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type AgentLoop } from "../agent-loop/index.js";
2
+ import { type McpClientManager } from "../mcp/index.js";
3
+ import type { ObservabilityProvider } from "../observability/types.js";
4
+ import { type CreateSandbox } from "../sandbox/index.js";
5
+ import type { SandboxIO } from "../sandbox/types.js";
6
+ import type { McpServerConfig } from "./types.js";
7
+ export type { McpClientManager } from "../mcp/index.js";
8
+ export type CreateMcpClientManager = (servers: readonly McpServerConfig[], tokens: Record<string, string>, sandbox?: SandboxIO | null) => Promise<McpClientManager | null>;
9
+ export type AgentDependencies = {
10
+ createSandbox: CreateSandbox;
11
+ createLoop: () => AgentLoop;
12
+ createMcpClientManager: CreateMcpClientManager;
13
+ observability?: ObservabilityProvider;
14
+ };
15
+ export declare function createDefaultDependencies(): AgentDependencies;
@@ -0,0 +1,14 @@
1
+ import { PiMonoAgentLoop } from "../agent-loop/index.js";
2
+ import { createMcpClientManager } from "../mcp/index.js";
3
+ import { createSandbox } from "../sandbox/index.js";
4
+ function defaultCreateMcpClientManager(servers, tokens, sandbox) {
5
+ return createMcpClientManager(servers, tokens, { sandbox: sandbox ?? null });
6
+ }
7
+ export function createDefaultDependencies() {
8
+ return {
9
+ createSandbox,
10
+ createLoop: () => new PiMonoAgentLoop(),
11
+ createMcpClientManager: defaultCreateMcpClientManager,
12
+ };
13
+ }
14
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/agent/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAyB,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAmBxE,SAAS,6BAA6B,CACpC,OAAmC,EACnC,MAA8B,EAC9B,OAA0B;IAE1B,OAAO,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,aAAa;QACb,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE;QACvC,sBAAsB,EAAE,6BAA6B;KACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./agent.js";
2
+ export * from "./define-agent.js";
3
+ export * from "./session.js";
4
+ export * from "./types.js";
@@ -0,0 +1,5 @@
1
+ export * from "./agent.js";
2
+ export * from "./define-agent.js";
3
+ export * from "./session.js";
4
+ export * from "./types.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { AgentLoop, ModelProvider, ResponseInput, ResponseOutput, ToolResult } from "../agent-loop/index.js";
2
+ import type { ExecResult, Sandbox } from "../sandbox/index.js";
3
+ import type { AgentStatus } from "./types.js";
4
+ import type { McpClientManager } from "./dependencies.js";
5
+ export declare function toErrorMessage(error: unknown): string;
6
+ export declare function toToolError(toolCallId: string, message: string): ToolResult;
7
+ export declare function toConversationInput(conversationHistory: ResponseInput, input: ResponseInput): ResponseInput;
8
+ export declare function toNextConversationHistory(runInput: ResponseInput, output: ResponseOutput): ResponseInput;
9
+ export declare function extractRequiredString(input: Record<string, unknown>, fieldName: string): string | null;
10
+ export declare function extractRequiredNonEmptyString(input: Record<string, unknown>, fieldName: string): string | null;
11
+ export declare function extractOptionalString(input: Record<string, unknown>, fieldName: string): string | undefined;
12
+ export declare function extractOptionalNumber(input: Record<string, unknown>, fieldName: string): number | undefined;
13
+ export declare function extractOptionalChunkHandler(input: Record<string, unknown>, fieldName: string): ((chunk: string) => void) | undefined;
14
+ export declare function formatExecResult(result: ExecResult): string;
15
+ export declare function readFieldError(toolCallId: string, toolName: string, fieldName: string): ToolResult;
16
+ export declare function readFieldTypeError(toolCallId: string, toolName: string, fieldName: string): ToolResult;
17
+ export declare function disposeResources(loop: AgentLoop | null, mcpClientManager: McpClientManager | null, sandbox: Sandbox | null): Promise<void>;
18
+ export declare function ensureRunnableStatus(status: AgentStatus): void;
19
+ export declare function isMcpTool(name: string): boolean;
20
+ /**
21
+ * Parse an MCP tool name (e.g. `mcp__server__tool`) into server and tool parts.
22
+ * Returns null if the name does not match the expected format.
23
+ */
24
+ export declare function parseMcpToolName(name: string): {
25
+ serverName: string;
26
+ toolName: string;
27
+ } | null;
28
+ export declare function validateModelApiKey(provider: ModelProvider): void;
@@ -0,0 +1,160 @@
1
+ const MCP_TOOL_PREFIX = "mcp__";
2
+ export function toErrorMessage(error) {
3
+ if (error instanceof Error) {
4
+ return error.message;
5
+ }
6
+ if (typeof error === "string") {
7
+ return error;
8
+ }
9
+ return "Unknown error";
10
+ }
11
+ export function toToolError(toolCallId, message) {
12
+ return {
13
+ toolCallId,
14
+ output: message,
15
+ isError: true,
16
+ };
17
+ }
18
+ export function toConversationInput(conversationHistory, input) {
19
+ return [...conversationHistory, ...input];
20
+ }
21
+ export function toNextConversationHistory(runInput, output) {
22
+ return [
23
+ ...runInput,
24
+ {
25
+ role: "assistant",
26
+ content: output.output,
27
+ },
28
+ ];
29
+ }
30
+ export function extractRequiredString(input, fieldName) {
31
+ const value = input[fieldName];
32
+ if (typeof value === "string") {
33
+ return value;
34
+ }
35
+ return null;
36
+ }
37
+ export function extractRequiredNonEmptyString(input, fieldName) {
38
+ const value = input[fieldName];
39
+ if (typeof value === "string" && value.length > 0) {
40
+ return value;
41
+ }
42
+ return null;
43
+ }
44
+ export function extractOptionalString(input, fieldName) {
45
+ const value = input[fieldName];
46
+ if (value === undefined) {
47
+ return undefined;
48
+ }
49
+ return typeof value === "string" ? value : undefined;
50
+ }
51
+ export function extractOptionalNumber(input, fieldName) {
52
+ const value = input[fieldName];
53
+ if (value === undefined) {
54
+ return undefined;
55
+ }
56
+ return typeof value === "number" ? value : undefined;
57
+ }
58
+ export function extractOptionalChunkHandler(input, fieldName) {
59
+ const value = input[fieldName];
60
+ if (!isChunkHandler(value)) {
61
+ return undefined;
62
+ }
63
+ return value;
64
+ }
65
+ function isChunkHandler(value) {
66
+ return typeof value === "function";
67
+ }
68
+ export function formatExecResult(result) {
69
+ const sections = [
70
+ `exitCode: ${result.exitCode}`,
71
+ result.stdout.length > 0 ? `stdout:\n${result.stdout}` : "stdout: (empty)",
72
+ result.stderr.length > 0 ? `stderr:\n${result.stderr}` : "stderr: (empty)",
73
+ ];
74
+ return sections.join("\n\n");
75
+ }
76
+ export function readFieldError(toolCallId, toolName, fieldName) {
77
+ return toToolError(toolCallId, `${toolName} tool requires a non-empty string field \"${fieldName}\".`);
78
+ }
79
+ export function readFieldTypeError(toolCallId, toolName, fieldName) {
80
+ return toToolError(toolCallId, `${toolName} tool requires a string field \"${fieldName}\".`);
81
+ }
82
+ export async function disposeResources(loop, mcpClientManager, sandbox) {
83
+ const failures = [];
84
+ if (loop) {
85
+ try {
86
+ await loop.dispose();
87
+ }
88
+ catch (error) {
89
+ failures.push(`loop.dispose failed: ${toErrorMessage(error)}`);
90
+ }
91
+ }
92
+ if (mcpClientManager) {
93
+ try {
94
+ await mcpClientManager.dispose();
95
+ }
96
+ catch (error) {
97
+ failures.push(`mcp.dispose failed: ${toErrorMessage(error)}`);
98
+ }
99
+ }
100
+ if (sandbox) {
101
+ try {
102
+ await sandbox.shutdown();
103
+ }
104
+ catch (error) {
105
+ failures.push(`sandbox.shutdown failed: ${toErrorMessage(error)}`);
106
+ }
107
+ }
108
+ if (failures.length > 0) {
109
+ throw new Error(`Agent shutdown encountered errors: ${failures.join(" | ")}`);
110
+ }
111
+ }
112
+ export function ensureRunnableStatus(status) {
113
+ if (status === "stopped") {
114
+ throw new Error("Agent is stopped.");
115
+ }
116
+ if (status === "running") {
117
+ throw new Error("Agent is already running.");
118
+ }
119
+ }
120
+ export function isMcpTool(name) {
121
+ return name.startsWith(MCP_TOOL_PREFIX);
122
+ }
123
+ /**
124
+ * Parse an MCP tool name (e.g. `mcp__server__tool`) into server and tool parts.
125
+ * Returns null if the name does not match the expected format.
126
+ */
127
+ export function parseMcpToolName(name) {
128
+ if (!name.startsWith(MCP_TOOL_PREFIX))
129
+ return null;
130
+ const rest = name.slice(MCP_TOOL_PREFIX.length);
131
+ const separatorIndex = rest.indexOf("__");
132
+ if (separatorIndex < 1)
133
+ return null;
134
+ return {
135
+ serverName: rest.slice(0, separatorIndex),
136
+ toolName: rest.slice(separatorIndex + 2),
137
+ };
138
+ }
139
+ const MODEL_PROVIDER_CREDENTIAL_ENVS = {
140
+ anthropic: ["ANTHROPIC_OAUTH_TOKEN", "ANTHROPIC_API_KEY"],
141
+ openai: ["OPENAI_API_KEY"],
142
+ gemini: ["GEMINI_API_KEY"],
143
+ openrouter: ["OPENROUTER_API_KEY"],
144
+ };
145
+ export function validateModelApiKey(provider) {
146
+ const requiredEnvNames = MODEL_PROVIDER_CREDENTIAL_ENVS[provider];
147
+ if (!requiredEnvNames || requiredEnvNames.length === 0) {
148
+ // Ollama does not require an API key by default.
149
+ return;
150
+ }
151
+ const hasCredential = requiredEnvNames.some((envName) => {
152
+ const rawValue = process.env[envName];
153
+ return typeof rawValue === "string" && rawValue.trim().length > 0;
154
+ });
155
+ if (hasCredential) {
156
+ return;
157
+ }
158
+ throw new Error(`Missing credentials for provider "${provider}". Set ${requiredEnvNames.join(" or ")} before starting the agent.`);
159
+ }
160
+ //# sourceMappingURL=internals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internals.js","sourceRoot":"","sources":["../../src/agent/internals.ts"],"names":[],"mappings":"AAWA,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,OAAe;IAC7D,OAAO;QACL,UAAU;QACV,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,mBAAkC,EAClC,KAAoB;IAEpB,OAAO,CAAC,GAAG,mBAAmB,EAAE,GAAG,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,QAAuB,EACvB,MAAsB;IAEtB,OAAO;QACL,GAAG,QAAQ;QACX;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,MAAM,CAAC,MAAM;SACvB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAA8B,EAC9B,SAAiB;IAEjB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAA8B,EAC9B,SAAiB;IAEjB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAA8B,EAC9B,SAAiB;IAEjB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAA8B,EAC9B,SAAiB;IAEjB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAA8B,EAC9B,SAAiB;IAEjB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,MAAM,QAAQ,GAAG;QACf,aAAa,MAAM,CAAC,QAAQ,EAAE;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,iBAAiB;QAC1E,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,iBAAiB;KAC3E,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,QAAgB,EAChB,SAAiB;IAEjB,OAAO,WAAW,CAChB,UAAU,EACV,GAAG,QAAQ,6CAA6C,SAAS,KAAK,CACvE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,QAAgB,EAChB,SAAiB;IAEjB,OAAO,WAAW,CAChB,UAAU,EACV,GAAG,QAAQ,mCAAmC,SAAS,KAAK,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAsB,EACtB,gBAAyC,EACzC,OAAuB;IAEvB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,wBAAwB,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,uBAAuB,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,4BAA4B,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,cAAc,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;QACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,8BAA8B,GAAsD;IACxF,SAAS,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,CAAC;IACzD,MAAM,EAAE,CAAC,gBAAgB,CAAC;IAC1B,MAAM,EAAE,CAAC,gBAAgB,CAAC;IAC1B,UAAU,EAAE,CAAC,oBAAoB,CAAC;CACnC,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,QAAuB;IACzD,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,iDAAiD;QACjD,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IACH,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,UAAU,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAClH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ResponseInput } from "../agent-loop/types.js";
2
+ export type SessionState = {
3
+ conversationHistory: ResponseInput;
4
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import type { ModelConfig, ResponseEvent, ResponseInput, ResponseOutput } from "../agent-loop/types.js";
2
+ import type { SandboxConfig, SandboxHooks } from "../sandbox/types.js";
3
+ import type { SessionState } from "./session.js";
4
+ export type McpServerHttpConfig = {
5
+ transport: "http";
6
+ name: string;
7
+ url: string;
8
+ auth: "bearer";
9
+ };
10
+ export type McpServerStdioConfig = {
11
+ transport: "stdio";
12
+ name: string;
13
+ command: string;
14
+ args?: string[];
15
+ env?: Record<string, string>;
16
+ };
17
+ export type McpServerSseConfig = {
18
+ transport: "sse";
19
+ name: string;
20
+ url: string;
21
+ auth?: "bearer";
22
+ };
23
+ export type McpServerConfig = McpServerHttpConfig | McpServerStdioConfig | McpServerSseConfig;
24
+ export type AgentStatus = "ready" | "running" | "stopped";
25
+ export type RespondStreamOptions = {
26
+ signal?: AbortSignal;
27
+ };
28
+ export interface Agent {
29
+ readonly name: string;
30
+ readonly status: AgentStatus;
31
+ respond(input: ResponseInput): Promise<ResponseOutput>;
32
+ respondStream(input: ResponseInput, options?: RespondStreamOptions): AsyncIterable<ResponseEvent>;
33
+ shutdown(): Promise<void>;
34
+ }
35
+ export type InitOptions<V extends string> = {
36
+ variables: Record<V, string>;
37
+ hooks?: SandboxHooks;
38
+ session?: SessionState;
39
+ mcpTokens?: Record<string, string>;
40
+ };
41
+ export type AgentConfig<V extends string> = {
42
+ name: string;
43
+ sandbox: SandboxConfig;
44
+ model: ModelConfig;
45
+ systemPrompt: string;
46
+ variables: readonly V[];
47
+ mcp?: McpServerConfig[];
48
+ };
49
+ export type AgentFactory<V extends string> = {
50
+ name: string;
51
+ init(options: InitOptions<V>): Promise<Agent>;
52
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import type { ModelConfig, ResponseEvent, ResponseInput, ToolCall, ToolResult } from "./types.js";
2
+ export type ToolHandler = (call: ToolCall) => Promise<ToolResult>;
3
+ export type ToolInputSchema = {
4
+ type: "object";
5
+ properties?: Record<string, unknown>;
6
+ required?: string[];
7
+ [key: string]: unknown;
8
+ };
9
+ export type AgentLoopTool = {
10
+ name: string;
11
+ description: string;
12
+ inputSchema: ToolInputSchema;
13
+ };
14
+ export type AgentLoopConfig = {
15
+ systemPrompt: string;
16
+ model: ModelConfig;
17
+ toolHandler: ToolHandler;
18
+ externalTools?: readonly AgentLoopTool[];
19
+ };
20
+ export type RunOptions = {
21
+ signal?: AbortSignal;
22
+ };
23
+ export interface AgentLoop {
24
+ init(config: AgentLoopConfig): Promise<void>;
25
+ run(input: ResponseInput, options?: RunOptions): AsyncIterable<ResponseEvent>;
26
+ dispose(): Promise<void>;
27
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/agent-loop/agent-loop.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from "./agent-loop.js";
2
+ export * from "./pi-mono/index.js";
3
+ export * from "./system-prompt/index.js";
4
+ export * from "./types.js";
@@ -0,0 +1,5 @@
1
+ export * from "./agent-loop.js";
2
+ export * from "./pi-mono/index.js";
3
+ export * from "./system-prompt/index.js";
4
+ export * from "./types.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent-loop/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentEvent } from "@mariozechner/pi-agent-core";
2
+ import type { ResponseEvent } from "../types.js";
3
+ export declare function toResponseEvent(event: AgentEvent): ResponseEvent | null;
@@ -0,0 +1,73 @@
1
+ import { toInputRecord } from "./utils.js";
2
+ import { toBundleToolCallName } from "./tools.js";
3
+ function toToolCallEvent(toolCallId, toolName, args) {
4
+ return {
5
+ id: toolCallId,
6
+ name: toBundleToolCallName(toolName),
7
+ input: toInputRecord(args),
8
+ };
9
+ }
10
+ function toToolResultEvent(toolCallId, result, isError) {
11
+ return {
12
+ toolCallId,
13
+ output: result,
14
+ isError,
15
+ };
16
+ }
17
+ function toToolUpdateChunk(partialResult) {
18
+ if (typeof partialResult !== "object"
19
+ || partialResult === null
20
+ || !Object.hasOwn(partialResult, "content")) {
21
+ return "";
22
+ }
23
+ const content = Reflect.get(partialResult, "content");
24
+ if (!Array.isArray(content)) {
25
+ return "";
26
+ }
27
+ return content
28
+ .filter((item) => {
29
+ if (typeof item !== "object" || item === null) {
30
+ return false;
31
+ }
32
+ return Reflect.get(item, "type") === "text" && typeof Reflect.get(item, "text") === "string";
33
+ })
34
+ .map((item) => {
35
+ return typeof item === "object" && item !== null
36
+ ? String(Reflect.get(item, "text"))
37
+ : "";
38
+ })
39
+ .join("");
40
+ }
41
+ export function toResponseEvent(event) {
42
+ if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
43
+ return {
44
+ type: "response.output_text.delta",
45
+ delta: event.assistantMessageEvent.delta,
46
+ };
47
+ }
48
+ if (event.type === "tool_execution_start") {
49
+ return {
50
+ type: "response.tool_call.created",
51
+ toolCall: toToolCallEvent(event.toolCallId, event.toolName, event.args),
52
+ };
53
+ }
54
+ if (event.type === "tool_execution_update") {
55
+ const chunk = toToolUpdateChunk(event.partialResult);
56
+ if (chunk.length === 0) {
57
+ return null;
58
+ }
59
+ return {
60
+ type: "tool_execution_update",
61
+ toolCallId: event.toolCallId,
62
+ chunk,
63
+ };
64
+ }
65
+ if (event.type === "tool_execution_end") {
66
+ return {
67
+ type: "response.tool_call.done",
68
+ result: toToolResultEvent(event.toolCallId, event.result, event.isError),
69
+ };
70
+ }
71
+ return null;
72
+ }
73
+ //# sourceMappingURL=events.js.map