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 @@
1
+ {"version":3,"file":"aws-prerequisites.js","sourceRoot":"","sources":["../../../src/cli/deploy/aws-prerequisites.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,UAAU,GAGX,MAAM,cAAc,CAAC;AAuBtB,KAAK,UAAU,mBAAmB,CAChC,OAAe,EACf,cAA6B;IAE7B,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC;IAC5D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC;IAEtD,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC7D,MAAM,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAEjD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAChE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAiB;QACpD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,OAAO;QAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Writable } from "node:stream";
2
+ import { type AwsCliExecOptions } from "./aws-cli.js";
3
+ export type TeardownAwsResourcesOptions = {
4
+ region: string;
5
+ bundleName: string;
6
+ stdout?: Writable;
7
+ stderr?: Writable;
8
+ awsCliExecImpl?: (options: AwsCliExecOptions) => Promise<{
9
+ stdout: string;
10
+ }>;
11
+ awsCliJsonImpl?: <T>(options: AwsCliExecOptions) => Promise<T>;
12
+ };
13
+ export declare function teardownAwsResources(options: TeardownAwsResourcesOptions): Promise<void>;
@@ -0,0 +1,204 @@
1
+ import { awsCliExec, awsCliJson, } from "./aws-cli.js";
2
+ import { createAwsDeploymentNames } from "./aws-ecs-shared.js";
3
+ async function runBestEffort(label, action, stdout, stderr) {
4
+ try {
5
+ stdout.write(`[deploy/aws] ${label}\n`);
6
+ await action();
7
+ }
8
+ catch (error) {
9
+ const message = error instanceof Error ? error.message : String(error);
10
+ stderr.write(`[deploy/aws] warning: ${label} failed: ${message}\n`);
11
+ }
12
+ }
13
+ async function deleteService(input) {
14
+ const described = await input.awsCliJsonImpl({
15
+ region: input.region,
16
+ args: ["ecs", "describe-services", "--cluster", input.clusterName, "--services", input.serviceName],
17
+ stderr: input.stderr,
18
+ });
19
+ const service = described.services[0];
20
+ if (!service?.status || service.status === "INACTIVE") {
21
+ return;
22
+ }
23
+ await input.awsCliExecImpl({
24
+ region: input.region,
25
+ args: [
26
+ "ecs",
27
+ "update-service",
28
+ "--cluster",
29
+ input.clusterName,
30
+ "--service",
31
+ input.serviceName,
32
+ "--desired-count",
33
+ "0",
34
+ ],
35
+ stderr: input.stderr,
36
+ });
37
+ await input.awsCliExecImpl({
38
+ region: input.region,
39
+ args: [
40
+ "ecs",
41
+ "delete-service",
42
+ "--cluster",
43
+ input.clusterName,
44
+ "--service",
45
+ input.serviceName,
46
+ "--force",
47
+ ],
48
+ stderr: input.stderr,
49
+ });
50
+ }
51
+ async function deregisterTaskDefinitions(input) {
52
+ const listed = await input.awsCliJsonImpl({
53
+ region: input.region,
54
+ args: ["ecs", "list-task-definitions", "--family-prefix", input.taskFamily],
55
+ stderr: input.stderr,
56
+ });
57
+ const taskDefinitionArns = listed.taskDefinitionArns ?? [];
58
+ await Promise.all(taskDefinitionArns.map(async (taskDefinitionArn) => {
59
+ await input.awsCliExecImpl({
60
+ region: input.region,
61
+ args: ["ecs", "deregister-task-definition", "--task-definition", taskDefinitionArn],
62
+ stderr: input.stderr,
63
+ });
64
+ }));
65
+ }
66
+ async function deleteSecurityGroup(input) {
67
+ const described = await input.awsCliJsonImpl({
68
+ region: input.region,
69
+ args: [
70
+ "ec2",
71
+ "describe-security-groups",
72
+ "--filters",
73
+ `Name=group-name,Values=${input.securityGroupName}`,
74
+ ],
75
+ stderr: input.stderr,
76
+ });
77
+ const groupId = described.SecurityGroups[0]?.GroupId;
78
+ if (!groupId) {
79
+ return;
80
+ }
81
+ await input.awsCliExecImpl({
82
+ region: input.region,
83
+ args: ["ec2", "delete-security-group", "--group-id", groupId],
84
+ stderr: input.stderr,
85
+ });
86
+ }
87
+ function createServiceTeardownSteps(input) {
88
+ return [
89
+ {
90
+ label: `Deleting ECS service ${input.names.serviceName}`,
91
+ action: async () => {
92
+ await deleteService({
93
+ region: input.options.region,
94
+ clusterName: input.names.clusterName,
95
+ serviceName: input.names.serviceName,
96
+ stderr: input.options.stderr,
97
+ awsCliExecImpl: input.awsCliExecImpl,
98
+ awsCliJsonImpl: input.awsCliJsonImpl,
99
+ });
100
+ },
101
+ },
102
+ {
103
+ label: `Deregistering ECS task definitions for ${input.names.taskFamily}`,
104
+ action: async () => {
105
+ await deregisterTaskDefinitions({
106
+ region: input.options.region,
107
+ taskFamily: input.names.taskFamily,
108
+ stderr: input.options.stderr,
109
+ awsCliExecImpl: input.awsCliExecImpl,
110
+ awsCliJsonImpl: input.awsCliJsonImpl,
111
+ });
112
+ },
113
+ },
114
+ {
115
+ label: `Deleting ECS cluster ${input.names.clusterName}`,
116
+ action: async () => {
117
+ await input.awsCliExecImpl({
118
+ region: input.options.region,
119
+ args: ["ecs", "delete-cluster", "--cluster", input.names.clusterName],
120
+ stderr: input.options.stderr,
121
+ });
122
+ },
123
+ },
124
+ {
125
+ label: `Deleting security group ${input.names.securityGroupName}`,
126
+ action: async () => {
127
+ await deleteSecurityGroup({
128
+ region: input.options.region,
129
+ securityGroupName: input.names.securityGroupName,
130
+ stderr: input.options.stderr,
131
+ awsCliExecImpl: input.awsCliExecImpl,
132
+ awsCliJsonImpl: input.awsCliJsonImpl,
133
+ });
134
+ },
135
+ },
136
+ ];
137
+ }
138
+ function createResourceTeardownSteps(input) {
139
+ return [
140
+ {
141
+ label: `Deleting secret ${input.names.secretName}`,
142
+ action: async () => {
143
+ await input.awsCliExecImpl({
144
+ region: input.options.region,
145
+ args: [
146
+ "secretsmanager",
147
+ "delete-secret",
148
+ "--secret-id",
149
+ input.names.secretName,
150
+ "--force-delete-without-recovery",
151
+ ],
152
+ stderr: input.options.stderr,
153
+ });
154
+ },
155
+ },
156
+ {
157
+ label: `Deleting ECR repository ${input.names.prefix}`,
158
+ action: async () => {
159
+ await input.awsCliExecImpl({
160
+ region: input.options.region,
161
+ args: ["ecr", "delete-repository", "--repository-name", input.names.prefix, "--force"],
162
+ stderr: input.options.stderr,
163
+ });
164
+ },
165
+ },
166
+ {
167
+ label: `Deleting CloudWatch log group ${input.names.logGroupName}`,
168
+ action: async () => {
169
+ await input.awsCliExecImpl({
170
+ region: input.options.region,
171
+ args: ["logs", "delete-log-group", "--log-group-name", input.names.logGroupName],
172
+ stderr: input.options.stderr,
173
+ });
174
+ },
175
+ },
176
+ ];
177
+ }
178
+ function createTeardownSteps(input) {
179
+ return [
180
+ ...createServiceTeardownSteps(input),
181
+ ...createResourceTeardownSteps(input),
182
+ ];
183
+ }
184
+ async function runTeardownSteps(steps, stdout, stderr) {
185
+ await steps.reduce(async (previous, step) => {
186
+ await previous;
187
+ await runBestEffort(step.label, step.action, stdout, stderr);
188
+ }, Promise.resolve());
189
+ }
190
+ export async function teardownAwsResources(options) {
191
+ const awsCliExecImpl = options.awsCliExecImpl ?? awsCliExec;
192
+ const awsCliJsonImpl = options.awsCliJsonImpl ?? awsCliJson;
193
+ const stdout = options.stdout ?? process.stdout;
194
+ const stderr = options.stderr ?? process.stderr;
195
+ const names = createAwsDeploymentNames(options.bundleName);
196
+ const steps = createTeardownSteps({
197
+ options,
198
+ names,
199
+ awsCliExecImpl,
200
+ awsCliJsonImpl,
201
+ });
202
+ await runTeardownSteps(steps, stdout, stderr);
203
+ }
204
+ //# sourceMappingURL=aws-teardown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-teardown.js","sourceRoot":"","sources":["../../../src/cli/deploy/aws-teardown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import type { Writable } from "node:stream";
3
+ import { loadBundleConfig } from "../config/load-bundle-config.js";
4
+ import type { KeyValueArgInput } from "../serve/runtime.js";
5
+ import { pushImageToEcr } from "./aws-ecr.js";
6
+ import { deployToAwsEcs } from "./aws-ecs.js";
7
+ import { ensureAwsPrerequisites } from "./aws-prerequisites.js";
8
+ import { teardownAwsResources } from "./aws-teardown.js";
9
+ export type RunDeployOptions = {
10
+ configPath: string;
11
+ outputDir?: string;
12
+ target?: string | boolean;
13
+ region?: string | boolean;
14
+ secretEntries?: KeyValueArgInput;
15
+ teardown?: boolean;
16
+ stdout?: Writable;
17
+ stderr?: Writable;
18
+ };
19
+ export type RunDeployResult = {
20
+ target: "aws";
21
+ region: string;
22
+ teardown: boolean;
23
+ imageUri?: string;
24
+ publicIp?: string;
25
+ serviceUrl?: string;
26
+ };
27
+ export type DeployDependencies = {
28
+ loadConfig?: typeof loadBundleConfig;
29
+ readFileImpl?: typeof readFile;
30
+ ensureAwsPrerequisitesImpl?: typeof ensureAwsPrerequisites;
31
+ pushImageToEcrImpl?: typeof pushImageToEcr;
32
+ deployToAwsEcsImpl?: typeof deployToAwsEcs;
33
+ teardownAwsResourcesImpl?: typeof teardownAwsResources;
34
+ env?: NodeJS.ProcessEnv;
35
+ };
36
+ export declare function runDeployCommand(options: RunDeployOptions, dependencies?: DeployDependencies): Promise<RunDeployResult>;
@@ -0,0 +1,209 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { DEFAULT_OUTPUT_DIR } from "../build/build.js";
4
+ import { loadBundleConfig } from "../config/load-bundle-config.js";
5
+ import { pushImageToEcr } from "./aws-ecr.js";
6
+ import { deployToAwsEcs } from "./aws-ecs.js";
7
+ import { ensureAwsPrerequisites } from "./aws-prerequisites.js";
8
+ import { teardownAwsResources } from "./aws-teardown.js";
9
+ const DEFAULT_AWS_REGION = "us-east-1";
10
+ const DEFAULT_AWS_CPU = "256";
11
+ const DEFAULT_AWS_MEMORY = "512";
12
+ const DEFAULT_AWS_DESIRED_COUNT = 1;
13
+ const DEFAULT_AWS_CONTAINER_PORT = 3000;
14
+ const SUPPORTED_DEPLOY_TARGET = "aws";
15
+ function isNodeError(error) {
16
+ return error instanceof Error && "code" in error;
17
+ }
18
+ function resolveTarget(targetArg, config) {
19
+ if (targetArg === true) {
20
+ throw new Error("--target requires a value.");
21
+ }
22
+ const explicitTarget = typeof targetArg === "string" && targetArg.length > 0
23
+ ? targetArg
24
+ : undefined;
25
+ const target = explicitTarget ?? config.deploy?.target;
26
+ if (!target) {
27
+ throw new Error("Missing deploy target. Set deploy.target in config or pass --target aws.");
28
+ }
29
+ if (target !== SUPPORTED_DEPLOY_TARGET) {
30
+ throw new Error(`Unsupported deploy target: ${target}. Supported target: aws.`);
31
+ }
32
+ return "aws";
33
+ }
34
+ function resolveRegionArg(regionArg) {
35
+ if (regionArg === true) {
36
+ throw new Error("--region requires a value.");
37
+ }
38
+ if (typeof regionArg !== "string" || regionArg.trim().length === 0) {
39
+ return undefined;
40
+ }
41
+ return regionArg;
42
+ }
43
+ function normalizeSecretEntries(raw) {
44
+ if (raw === undefined || raw === false) {
45
+ return [];
46
+ }
47
+ if (raw === true) {
48
+ throw new Error("--secret requires a secret key name.");
49
+ }
50
+ const values = Array.isArray(raw) ? raw : [raw];
51
+ return values
52
+ .flatMap((value) => value.split(","))
53
+ .map((value) => value.trim())
54
+ .filter((value) => value.length > 0);
55
+ }
56
+ function parseSecretKeyEntries(raw) {
57
+ return normalizeSecretEntries(raw).map((entry) => {
58
+ if (entry.includes("=")) {
59
+ throw new Error(`Invalid --secret entry "${entry}". Pass only secret key names and provide values via environment variables.`);
60
+ }
61
+ return entry;
62
+ });
63
+ }
64
+ function resolveSecretsFromEnv(secretKeys, env) {
65
+ const missing = [];
66
+ const secrets = secretKeys.reduce((acc, key) => {
67
+ const value = env[key];
68
+ if (typeof value === "string") {
69
+ acc[key] = value;
70
+ return acc;
71
+ }
72
+ missing.push(key);
73
+ return acc;
74
+ }, {});
75
+ if (missing.length > 0) {
76
+ throw new Error(`Missing secret values in environment: ${missing.join(", ")}. ` +
77
+ "Set environment variables and pass their names with --secret.");
78
+ }
79
+ return secrets;
80
+ }
81
+ function resolveAwsDeployRuntimeConfig(config, regionOverride) {
82
+ const awsConfig = config.deploy?.aws;
83
+ return {
84
+ region: regionOverride ?? awsConfig?.region ?? DEFAULT_AWS_REGION,
85
+ cpu: awsConfig?.cpu ?? DEFAULT_AWS_CPU,
86
+ memory: awsConfig?.memory ?? DEFAULT_AWS_MEMORY,
87
+ desiredCount: awsConfig?.desiredCount ?? DEFAULT_AWS_DESIRED_COUNT,
88
+ containerPort: awsConfig?.containerPort ?? DEFAULT_AWS_CONTAINER_PORT,
89
+ };
90
+ }
91
+ function resolveArtifactPath(outputDir, bundleName) {
92
+ const outputRoot = resolve(outputDir ?? DEFAULT_OUTPUT_DIR);
93
+ return join(outputRoot, bundleName, "bundle.json");
94
+ }
95
+ function extractLocalImageRef(artifact) {
96
+ const imageRef = artifact.sandboxImage?.ref;
97
+ if (!imageRef || imageRef.trim().length === 0) {
98
+ throw new Error("Build artifact bundle.json is missing sandboxImage.ref. Run `agent-bundle build` first.");
99
+ }
100
+ return imageRef;
101
+ }
102
+ async function loadBuiltBundleArtifact(artifactPath, readFileImpl) {
103
+ try {
104
+ const artifactSource = await readFileImpl(artifactPath, "utf8");
105
+ return JSON.parse(artifactSource);
106
+ }
107
+ catch (error) {
108
+ if (isNodeError(error) && error.code === "ENOENT") {
109
+ throw new Error(`Build artifact not found at ${artifactPath}. Run \`agent-bundle build\` first.`);
110
+ }
111
+ if (error instanceof SyntaxError) {
112
+ throw new Error(`Failed to parse build artifact JSON: ${error.message}`);
113
+ }
114
+ throw error;
115
+ }
116
+ }
117
+ function toServiceUrl(publicIp, containerPort) {
118
+ if (!publicIp) {
119
+ return undefined;
120
+ }
121
+ return `http://${publicIp}:${containerPort}`;
122
+ }
123
+ export async function runDeployCommand(options, dependencies = {}) {
124
+ const loadConfigImpl = dependencies.loadConfig ?? loadBundleConfig;
125
+ const readFileImpl = dependencies.readFileImpl ?? readFile;
126
+ const ensureAwsPrerequisitesImpl = dependencies.ensureAwsPrerequisitesImpl ?? ensureAwsPrerequisites;
127
+ const pushImageToEcrImpl = dependencies.pushImageToEcrImpl ?? pushImageToEcr;
128
+ const deployToAwsEcsImpl = dependencies.deployToAwsEcsImpl ?? deployToAwsEcs;
129
+ const teardownAwsResourcesImpl = dependencies.teardownAwsResourcesImpl ?? teardownAwsResources;
130
+ const env = dependencies.env ?? process.env;
131
+ const stdout = options.stdout ?? process.stdout;
132
+ const stderr = options.stderr ?? process.stderr;
133
+ const configPath = resolve(options.configPath);
134
+ const config = await loadConfigImpl(configPath);
135
+ const target = resolveTarget(options.target, config);
136
+ const awsConfig = resolveAwsDeployRuntimeConfig(config, resolveRegionArg(options.region));
137
+ stdout.write(`Deploying bundle "${config.name}" from ${configPath}\n`);
138
+ if (options.teardown) {
139
+ stdout.write("[deploy] Running AWS teardown\n");
140
+ await ensureAwsPrerequisitesImpl({
141
+ region: awsConfig.region,
142
+ requireDocker: false,
143
+ stdout,
144
+ stderr,
145
+ });
146
+ await teardownAwsResourcesImpl({
147
+ region: awsConfig.region,
148
+ bundleName: config.name,
149
+ stdout,
150
+ stderr,
151
+ });
152
+ stdout.write("[deploy] AWS teardown completed\n");
153
+ return {
154
+ target,
155
+ region: awsConfig.region,
156
+ teardown: true,
157
+ };
158
+ }
159
+ const secretKeys = parseSecretKeyEntries(options.secretEntries);
160
+ const secrets = resolveSecretsFromEnv(secretKeys, env);
161
+ stdout.write("[deploy] Running AWS preflight checks\n");
162
+ await ensureAwsPrerequisitesImpl({
163
+ region: awsConfig.region,
164
+ requireDocker: true,
165
+ stdout,
166
+ stderr,
167
+ });
168
+ const artifactPath = resolveArtifactPath(options.outputDir, config.name);
169
+ stdout.write(`[deploy] Loading build artifact ${artifactPath}\n`);
170
+ const artifact = await loadBuiltBundleArtifact(artifactPath, readFileImpl);
171
+ const localImageRef = extractLocalImageRef(artifact);
172
+ stdout.write("[deploy] Pushing image to ECR\n");
173
+ const ecrResult = await pushImageToEcrImpl({
174
+ region: awsConfig.region,
175
+ bundleName: config.name,
176
+ localImageRef,
177
+ stdout,
178
+ stderr,
179
+ });
180
+ stdout.write("[deploy] Deploying ECS service\n");
181
+ const ecsResult = await deployToAwsEcsImpl({
182
+ region: awsConfig.region,
183
+ bundleName: config.name,
184
+ imageUri: ecrResult.imageUri,
185
+ secrets,
186
+ deployConfig: {
187
+ cpu: awsConfig.cpu,
188
+ memory: awsConfig.memory,
189
+ desiredCount: awsConfig.desiredCount,
190
+ containerPort: awsConfig.containerPort,
191
+ },
192
+ stdout,
193
+ stderr,
194
+ });
195
+ const serviceUrl = toServiceUrl(ecsResult.publicIp, awsConfig.containerPort);
196
+ stdout.write(`[deploy] Deployment completed (service: ${ecsResult.serviceName})\n`);
197
+ if (serviceUrl) {
198
+ stdout.write(`[deploy] Service URL: ${serviceUrl}\n`);
199
+ }
200
+ return {
201
+ target,
202
+ region: awsConfig.region,
203
+ teardown: false,
204
+ imageUri: ecrResult.imageUri,
205
+ publicIp: ecsResult.publicIp,
206
+ serviceUrl,
207
+ };
208
+ }
209
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/cli/deploy/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function toErrorMessage(error: unknown): string;
@@ -0,0 +1,4 @@
1
+ export function toErrorMessage(error) {
2
+ return error instanceof Error ? error.message : String(error);
3
+ }
4
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/cli/error.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import type { Writable } from "node:stream";
3
+ import { generateSystemPromptTemplate } from "../../agent-loop/system-prompt/generate.js";
4
+ import { loadAllCommands } from "../../commands/loader.js";
5
+ import { loadAllPlugins, type LoadPluginOptions } from "../../plugins/loader.js";
6
+ import { loadAllSkills } from "../../skills/loader.js";
7
+ import { type GeneratedSources, type ResolvedBundleConfig } from "../build/codegen.js";
8
+ import { loadBundleConfig } from "../config/load-bundle-config.js";
9
+ import { resolveProjectRoot } from "../config/resolve-project-root.js";
10
+ export type RunGenerateOptions = {
11
+ configPath: string;
12
+ outputDir?: string;
13
+ stdout?: Writable;
14
+ stderr?: Writable;
15
+ };
16
+ export type RunGenerateResult = {
17
+ outputDir: string;
18
+ resolvedConfig: ResolvedBundleConfig;
19
+ };
20
+ export type GenerateDependencies = {
21
+ loadConfig?: typeof loadBundleConfig;
22
+ loadSkills?: typeof loadAllSkills;
23
+ loadCommands?: typeof loadAllCommands;
24
+ loadPlugins?: typeof loadAllPlugins;
25
+ generateSystemPrompt?: typeof generateSystemPromptTemplate;
26
+ writeFileImpl?: typeof writeFile;
27
+ mkdirImpl?: typeof mkdir;
28
+ resolveRoot?: typeof resolveProjectRoot;
29
+ pluginOptions?: LoadPluginOptions;
30
+ };
31
+ export declare function writeGeneratedFiles(input: {
32
+ outputDir: string;
33
+ sources: GeneratedSources;
34
+ mkdirImpl: typeof mkdir;
35
+ writeFileImpl: typeof writeFile;
36
+ }): Promise<void>;
37
+ export declare function runGenerateCommand(options: RunGenerateOptions, dependencies?: GenerateDependencies): Promise<RunGenerateResult>;
@@ -0,0 +1,121 @@
1
+ import { lstat, mkdir, symlink, writeFile } from "node:fs/promises";
2
+ import { dirname, join, resolve } from "node:path";
3
+ import { generateSystemPromptTemplate } from "../../agent-loop/system-prompt/generate.js";
4
+ import { loadAllCommands } from "../../commands/loader.js";
5
+ import { loadAllPlugins } from "../../plugins/loader.js";
6
+ import { mergePluginComponents } from "../../plugins/merge.js";
7
+ import { loadAllSkills } from "../../skills/loader.js";
8
+ import { createResolvedBundleConfig, generateSources, toCommandSummaries, } from "../build/codegen.js";
9
+ import { loadBundleConfig } from "../config/load-bundle-config.js";
10
+ import { resolveProjectRoot } from "../config/resolve-project-root.js";
11
+ function toSkillSummaries(skills) {
12
+ return skills.map((skill) => ({
13
+ name: skill.name,
14
+ description: skill.description,
15
+ sourcePath: skill.sourcePath,
16
+ content: skill.content,
17
+ }));
18
+ }
19
+ function resolveSandboxImageRefFromConfig(config) {
20
+ if (config.sandbox.provider === "kubernetes") {
21
+ const image = config.sandbox.kubernetes?.image;
22
+ if (!image) {
23
+ throw new Error("sandbox.kubernetes.image is required when sandbox provider is kubernetes.");
24
+ }
25
+ return { provider: "kubernetes", ref: image };
26
+ }
27
+ const template = config.sandbox.e2b?.template;
28
+ if (!template) {
29
+ throw new Error("sandbox.e2b.template is required when sandbox provider is e2b.");
30
+ }
31
+ return { provider: "e2b", ref: template };
32
+ }
33
+ export async function writeGeneratedFiles(input) {
34
+ await input.mkdirImpl(input.outputDir, { recursive: true });
35
+ await Promise.all([
36
+ input.writeFileImpl(join(input.outputDir, "index.ts"), input.sources.indexSource, "utf8"),
37
+ input.writeFileImpl(join(input.outputDir, "types.ts"), input.sources.typesSource, "utf8"),
38
+ input.writeFileImpl(join(input.outputDir, "bundle.json"), input.sources.bundleJsonSource, "utf8"),
39
+ input.writeFileImpl(join(input.outputDir, "package.json"), input.sources.packageJsonSource, "utf8"),
40
+ ]);
41
+ }
42
+ async function ensureSelfLink(projectRoot) {
43
+ const nodeModulesDir = join(projectRoot, "node_modules");
44
+ const linkPath = join(nodeModulesDir, "agent-bundle");
45
+ try {
46
+ await lstat(linkPath);
47
+ return;
48
+ }
49
+ catch {
50
+ await mkdir(nodeModulesDir, { recursive: true });
51
+ await symlink(projectRoot, linkPath, "dir");
52
+ }
53
+ }
54
+ async function resolveDefaultOutputDir(configPath, bundleName, resolveRoot) {
55
+ const projectRoot = await resolveRoot(dirname(resolve(configPath)));
56
+ return {
57
+ outputDir: join(projectRoot, "node_modules", "@agent-bundle", bundleName),
58
+ projectRoot,
59
+ };
60
+ }
61
+ export async function runGenerateCommand(options, dependencies = {}) {
62
+ const loadConfigImpl = dependencies.loadConfig ?? loadBundleConfig;
63
+ const loadSkillsImpl = dependencies.loadSkills ?? loadAllSkills;
64
+ const loadCommandsImpl = dependencies.loadCommands ?? loadAllCommands;
65
+ const loadPluginsImpl = dependencies.loadPlugins ?? loadAllPlugins;
66
+ const promptGenerator = dependencies.generateSystemPrompt ?? generateSystemPromptTemplate;
67
+ const writeFileImpl = dependencies.writeFileImpl ?? writeFile;
68
+ const mkdirImpl = dependencies.mkdirImpl ?? mkdir;
69
+ const resolveRoot = dependencies.resolveRoot ?? resolveProjectRoot;
70
+ const stdout = options.stdout ?? process.stdout;
71
+ const configPath = resolve(options.configPath);
72
+ const bundleDir = dirname(configPath);
73
+ const config = await loadConfigImpl(configPath);
74
+ stdout.write(`Generating bundle "${config.name}" from ${configPath}\n`);
75
+ const baseSkills = await loadSkillsImpl(config.skills, bundleDir);
76
+ const baseCommands = config.commands
77
+ ? await loadCommandsImpl(config.commands, bundleDir)
78
+ : [];
79
+ const pluginResults = config.plugins
80
+ ? await loadPluginsImpl(config.plugins, dependencies.pluginOptions)
81
+ : [];
82
+ const existingMcpServers = config.mcp?.servers ?? [];
83
+ const merged = mergePluginComponents(baseSkills, baseCommands, existingMcpServers, pluginResults);
84
+ const skillSummaries = toSkillSummaries(merged.skills);
85
+ const commandSummaries = toCommandSummaries(merged.commands);
86
+ const sandboxImage = resolveSandboxImageRefFromConfig(config);
87
+ const systemPrompt = promptGenerator({
88
+ basePrompt: config.prompt.system,
89
+ skills: skillSummaries,
90
+ });
91
+ const configWithMergedMcp = merged.mcpServers.length > 0
92
+ ? { ...config, mcp: { servers: merged.mcpServers } }
93
+ : config;
94
+ const resolvedConfig = createResolvedBundleConfig({
95
+ config: configWithMergedMcp,
96
+ skills: skillSummaries,
97
+ commands: commandSummaries,
98
+ systemPrompt,
99
+ sandboxImage,
100
+ });
101
+ const commandContents = new Map(merged.commands.map((cmd) => [cmd.name, cmd.content]));
102
+ const sources = generateSources(resolvedConfig, commandContents);
103
+ let outputDir;
104
+ if (options.outputDir) {
105
+ outputDir = join(resolve(options.outputDir), config.name);
106
+ }
107
+ else {
108
+ const resolved = await resolveDefaultOutputDir(configPath, config.name, resolveRoot);
109
+ outputDir = resolved.outputDir;
110
+ await ensureSelfLink(resolved.projectRoot);
111
+ }
112
+ await writeGeneratedFiles({
113
+ outputDir,
114
+ sources,
115
+ mkdirImpl,
116
+ writeFileImpl,
117
+ });
118
+ stdout.write(`Generate completed: ${outputDir}\n`);
119
+ return { outputDir, resolvedConfig };
120
+ }
121
+ //# sourceMappingURL=generate.js.map