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,203 @@
1
+ import { z } from "zod";
2
+ const BUNDLE_NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
3
+ const GITHUB_REPO_PATTERN = /^[^\s/]+\/[^\s/]+$/;
4
+ const PROMPT_VARIABLE_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
5
+ const modelProviderSchema = z.enum([
6
+ "anthropic",
7
+ "openai",
8
+ "gemini",
9
+ "ollama",
10
+ "openrouter",
11
+ ]);
12
+ const ollamaModelSchema = z
13
+ .object({
14
+ baseUrl: z.string().url().optional(),
15
+ contextWindow: z.number().int().positive().optional(),
16
+ maxTokens: z.number().int().positive().optional(),
17
+ })
18
+ .strict();
19
+ const sandboxProviderSchema = z.enum(["e2b", "kubernetes"]);
20
+ const promptVariableSchema = z
21
+ .string()
22
+ .min(1, "Prompt variable names cannot be empty.")
23
+ .regex(PROMPT_VARIABLE_PATTERN, "Prompt variable names must start with a letter or underscore and contain only letters, numbers, or underscores.");
24
+ const resourcesSchema = z
25
+ .object({
26
+ cpu: z.number().positive(),
27
+ memory: z.string().min(1),
28
+ })
29
+ .strict()
30
+ .default({
31
+ cpu: 2,
32
+ memory: "512MB",
33
+ });
34
+ const sandboxBuildSchema = z
35
+ .object({
36
+ dockerfile: z.string().min(1),
37
+ context: z.string().min(1).optional(),
38
+ })
39
+ .strict();
40
+ const sandboxSchema = z
41
+ .object({
42
+ provider: sandboxProviderSchema,
43
+ timeout: z.number().int().positive().default(900),
44
+ resources: resourcesSchema,
45
+ e2b: z
46
+ .object({
47
+ template: z.string().min(1).optional(),
48
+ build: sandboxBuildSchema.optional(),
49
+ })
50
+ .strict()
51
+ .optional(),
52
+ kubernetes: z
53
+ .object({
54
+ namespace: z.string().min(1).optional(),
55
+ kubeconfig: z.string().min(1).optional(),
56
+ nodeSelector: z.record(z.string(), z.string()).optional(),
57
+ registry: z.string().min(1).optional(),
58
+ image: z.string().min(1).optional(),
59
+ build: sandboxBuildSchema.optional(),
60
+ })
61
+ .strict()
62
+ .optional(),
63
+ serve: z
64
+ .object({
65
+ provider: sandboxProviderSchema,
66
+ })
67
+ .strict()
68
+ .optional(),
69
+ })
70
+ .strict();
71
+ const awsDeploySchema = z
72
+ .object({
73
+ region: z.string().min(1).default("us-east-1"),
74
+ cpu: z.string().default("256"),
75
+ memory: z.string().default("512"),
76
+ desiredCount: z.number().int().positive().default(1),
77
+ containerPort: z.number().int().positive().default(3000),
78
+ })
79
+ .strict();
80
+ const deploySchema = z
81
+ .object({
82
+ target: z.enum(["aws"]),
83
+ aws: awsDeploySchema.optional(),
84
+ })
85
+ .strict();
86
+ const localSkillSchema = z
87
+ .object({
88
+ path: z.string().min(1),
89
+ })
90
+ .strict();
91
+ const githubSkillSchema = z
92
+ .object({
93
+ github: z
94
+ .string()
95
+ .regex(GITHUB_REPO_PATTERN, "GitHub skill source must be in owner/repo format."),
96
+ skill: z.string().min(1).optional(),
97
+ ref: z.string().min(1).default("main"),
98
+ })
99
+ .strict();
100
+ const urlSkillSchema = z
101
+ .object({
102
+ url: z.string().url(),
103
+ version: z.string().min(1).optional(),
104
+ })
105
+ .strict();
106
+ const skillEntrySchema = z.union([localSkillSchema, githubSkillSchema, urlSkillSchema]);
107
+ const localCommandSchema = z
108
+ .object({
109
+ path: z.string().min(1),
110
+ })
111
+ .strict();
112
+ const githubCommandSchema = z
113
+ .object({
114
+ github: z
115
+ .string()
116
+ .regex(GITHUB_REPO_PATTERN, "GitHub command source must be in owner/repo format."),
117
+ command: z.string().min(1).optional(),
118
+ ref: z.string().min(1).default("main"),
119
+ })
120
+ .strict();
121
+ const urlCommandSchema = z
122
+ .object({
123
+ url: z.string().url(),
124
+ version: z.string().min(1).optional(),
125
+ })
126
+ .strict();
127
+ const commandEntrySchema = z.union([localCommandSchema, githubCommandSchema, urlCommandSchema]);
128
+ const mcpServerHttpSchema = z
129
+ .object({
130
+ transport: z.literal("http"),
131
+ name: z.string().min(1),
132
+ url: z.string().url(),
133
+ auth: z.enum(["bearer"]),
134
+ })
135
+ .strict();
136
+ const mcpServerStdioSchema = z
137
+ .object({
138
+ transport: z.literal("stdio"),
139
+ name: z.string().min(1),
140
+ command: z.string().min(1),
141
+ args: z.array(z.string()).optional(),
142
+ env: z.record(z.string(), z.string()).optional(),
143
+ })
144
+ .strict();
145
+ const mcpServerSseSchema = z
146
+ .object({
147
+ transport: z.literal("sse"),
148
+ name: z.string().min(1),
149
+ url: z.string().url(),
150
+ auth: z.enum(["bearer"]).optional(),
151
+ })
152
+ .strict();
153
+ const mcpServerSchema = z.discriminatedUnion("transport", [
154
+ mcpServerHttpSchema,
155
+ mcpServerStdioSchema,
156
+ mcpServerSseSchema,
157
+ ]);
158
+ const mcpSchema = z
159
+ .object({
160
+ servers: z.array(mcpServerSchema).min(1),
161
+ })
162
+ .strict();
163
+ const pluginEntrySchema = z
164
+ .object({
165
+ marketplace: z
166
+ .string()
167
+ .regex(GITHUB_REPO_PATTERN, "Plugin marketplace source must be in owner/repo format."),
168
+ name: z.string().min(1),
169
+ ref: z.string().min(1).default("main"),
170
+ skills: z.array(z.string().min(1)).optional(),
171
+ commands: z.array(z.string().min(1)).optional(),
172
+ })
173
+ .strict();
174
+ export const bundleSchema = z
175
+ .object({
176
+ name: z
177
+ .string()
178
+ .regex(BUNDLE_NAME_PATTERN, "Bundle name must be kebab-case."),
179
+ model: z
180
+ .object({
181
+ provider: modelProviderSchema,
182
+ model: z.string().min(1),
183
+ ollama: ollamaModelSchema.optional(),
184
+ })
185
+ .strict(),
186
+ prompt: z
187
+ .object({
188
+ system: z.string().min(1),
189
+ variables: z.array(promptVariableSchema).default([]),
190
+ })
191
+ .strict(),
192
+ sandbox: sandboxSchema,
193
+ deploy: deploySchema.optional(),
194
+ skills: z.array(skillEntrySchema).min(1),
195
+ commands: z.array(commandEntrySchema).optional(),
196
+ mcp: mcpSchema.optional(),
197
+ plugins: z.array(pluginEntrySchema).min(1).optional(),
198
+ })
199
+ .strict();
200
+ export function parseBundleConfig(raw) {
201
+ return bundleSchema.parse(raw);
202
+ }
203
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/schema/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Hono } from "hono";
2
+ import type { Agent } from "../agent/types.js";
3
+ import type { Command } from "../commands/types.js";
4
+ export type CommandRegistry = {
5
+ commands: readonly Command[];
6
+ };
7
+ export declare function substituteArguments(content: string, args: string): string;
8
+ export declare function createCommandRoutes(agent: Agent, registry: CommandRegistry): Hono;
@@ -0,0 +1,44 @@
1
+ import { Hono } from "hono";
2
+ import { findCommand, toCommandSummary } from "../commands/find.js";
3
+ const ARGUMENTS_PLACEHOLDER = /\$ARGUMENTS/g;
4
+ export function substituteArguments(content, args) {
5
+ return content.replace(ARGUMENTS_PLACEHOLDER, args);
6
+ }
7
+ export function createCommandRoutes(agent, registry) {
8
+ const routes = new Hono();
9
+ routes.get("/commands", (c) => {
10
+ const summaries = registry.commands.map(toCommandSummary);
11
+ return c.json(summaries);
12
+ });
13
+ routes.post("/commands/:name", async (c) => {
14
+ const name = c.req.param("name");
15
+ const command = findCommand(registry.commands, name);
16
+ if (!command) {
17
+ return c.json({ error: { message: `Command not found: ${name}` } }, 404);
18
+ }
19
+ let args = "";
20
+ const contentType = c.req.header("content-type") ?? "";
21
+ const hasBody = contentType.includes("application/json");
22
+ if (hasBody) {
23
+ try {
24
+ const body = await c.req.json();
25
+ args = typeof body.args === "string" ? body.args : "";
26
+ }
27
+ catch {
28
+ return c.json({ error: { message: "Invalid JSON in request body." } }, 400);
29
+ }
30
+ }
31
+ const userMessage = substituteArguments(command.content, args);
32
+ const input = [{ role: "user", content: userMessage }];
33
+ try {
34
+ const output = await agent.respond(input);
35
+ return c.json(output);
36
+ }
37
+ catch (error) {
38
+ const message = error instanceof Error ? error.message : String(error);
39
+ return c.json({ error: { message } }, 500);
40
+ }
41
+ });
42
+ return routes;
43
+ }
44
+ //# sourceMappingURL=command-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-routes.js","sourceRoot":"","sources":["../../src/service/command-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAOpE,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAE7C,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,IAAY;IAC/D,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAY,EAAE,QAAyB;IACzE,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAE1B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAY,EAAE;QACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC1D,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAqB,EAAE;QAC5D,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,sBAAsB,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAqB,CAAC;gBACnD,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAEtE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Hono } from "hono";
2
+ import type { Agent } from "../agent/types.js";
3
+ import type { Command } from "../commands/types.js";
4
+ import type { ObservabilityProvider } from "../observability/types.js";
5
+ export type CreateServerOptions = {
6
+ commands?: readonly Command[];
7
+ observability?: ObservabilityProvider;
8
+ };
9
+ export declare function createServer(agent: Agent, options?: CreateServerOptions): Hono;
@@ -0,0 +1,113 @@
1
+ import { Hono } from "hono";
2
+ import { streamSSE } from "hono/streaming";
3
+ import { z } from "zod";
4
+ import { observabilityMiddleware } from "../observability/middleware.js";
5
+ import { createCommandRoutes } from "./command-routes.js";
6
+ function createErrorResponse(c, message, status) {
7
+ const payload = {
8
+ error: { message },
9
+ };
10
+ return c.json(payload, status);
11
+ }
12
+ const toolCallSchema = z.object({
13
+ id: z.string(),
14
+ name: z.string(),
15
+ input: z.record(z.string(), z.unknown()),
16
+ });
17
+ const toolResultSchema = z.object({
18
+ toolCallId: z.string(),
19
+ output: z.unknown(),
20
+ isError: z.boolean().optional(),
21
+ });
22
+ const responseInputMessageSchema = z.union([
23
+ z.object({
24
+ role: z.literal("system"),
25
+ content: z.string(),
26
+ }),
27
+ z.object({
28
+ role: z.literal("user"),
29
+ content: z.string(),
30
+ }),
31
+ z.object({
32
+ role: z.literal("assistant"),
33
+ content: z.string(),
34
+ tool_calls: z.array(toolCallSchema).optional(),
35
+ }),
36
+ z.object({
37
+ role: z.literal("tool"),
38
+ content: z.string(),
39
+ tool_results: z.array(toolResultSchema),
40
+ }),
41
+ ]);
42
+ const responsesRequestSchema = z.object({
43
+ input: z.array(responseInputMessageSchema).min(1),
44
+ stream: z.boolean().optional(),
45
+ });
46
+ function parseResponsesRequest(body) {
47
+ const parsedRequest = responsesRequestSchema.safeParse(body);
48
+ if (!parsedRequest.success) {
49
+ return null;
50
+ }
51
+ return {
52
+ input: parsedRequest.data.input,
53
+ stream: parsedRequest.data.stream === true,
54
+ };
55
+ }
56
+ function createEventStreamResponse(c, agent, input) {
57
+ return streamSSE(c, async (stream) => {
58
+ try {
59
+ for await (const event of agent.respondStream(input)) {
60
+ await stream.writeSSE({ data: JSON.stringify(event) });
61
+ }
62
+ }
63
+ catch (error) {
64
+ const message = error instanceof Error ? error.message : String(error);
65
+ await stream.writeSSE({
66
+ data: JSON.stringify({
67
+ type: "response.error",
68
+ error: message,
69
+ }),
70
+ });
71
+ }
72
+ });
73
+ }
74
+ export function createServer(agent, options) {
75
+ const app = new Hono();
76
+ if (options?.observability) {
77
+ app.use("*", observabilityMiddleware(options.observability));
78
+ }
79
+ if (options?.commands && options.commands.length > 0) {
80
+ const registry = { commands: options.commands };
81
+ const commandRoutes = createCommandRoutes(agent, registry);
82
+ app.route("/", commandRoutes);
83
+ }
84
+ app.get("/health", (c) => {
85
+ return c.json({ status: "ok" });
86
+ });
87
+ app.post("/v1/responses", async (c) => {
88
+ let body;
89
+ try {
90
+ body = await c.req.json();
91
+ }
92
+ catch {
93
+ return createErrorResponse(c, "Request body must be valid JSON.", 400);
94
+ }
95
+ const parsedRequest = parseResponsesRequest(body);
96
+ if (!parsedRequest) {
97
+ return createErrorResponse(c, "Invalid request body. Expected { input: ResponseInput, stream?: boolean }.", 400);
98
+ }
99
+ if (parsedRequest.stream) {
100
+ return createEventStreamResponse(c, agent, parsedRequest.input);
101
+ }
102
+ try {
103
+ const output = await agent.respond(parsedRequest.input);
104
+ return c.json(output);
105
+ }
106
+ catch (error) {
107
+ const message = error instanceof Error ? error.message : String(error);
108
+ return createErrorResponse(c, message, 500);
109
+ }
110
+ });
111
+ return app;
112
+ }
113
+ //# sourceMappingURL=create-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/service/create-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./create-server.js";
@@ -0,0 +1,2 @@
1
+ export * from "./create-server.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/service/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "./loader.js";
@@ -0,0 +1,2 @@
1
+ export * from "./loader.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { SkillEntry } from "../schema/bundle.js";
2
+ export type Skill = {
3
+ name: string;
4
+ description: string;
5
+ content: string;
6
+ sourcePath: string;
7
+ };
8
+ type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
9
+ export type LoadSkillOptions = {
10
+ basePath?: string;
11
+ cache?: boolean;
12
+ cacheDir?: string;
13
+ fetchImpl?: FetchLike;
14
+ };
15
+ export type LoadAllSkillsOptions = Omit<LoadSkillOptions, "basePath">;
16
+ export declare function loadSkill(entry: SkillEntry, options?: LoadSkillOptions): Promise<Skill>;
17
+ export declare function loadAllSkills(entries: SkillEntry[], basePath: string, options?: LoadAllSkillsOptions): Promise<Skill[]>;
18
+ export {};
@@ -0,0 +1,142 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { parse as parseYaml } from "yaml";
5
+ const DEFAULT_CACHE_DIR = "node_modules/.cache/agent-bundle/skills";
6
+ const FRONTMATTER_PATTERN = /^---\n([\s\S]*?)\n---\n?/;
7
+ function isNodeError(error) {
8
+ return error instanceof Error && "code" in error;
9
+ }
10
+ function normalizeMarkdown(markdown) {
11
+ return markdown.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
12
+ }
13
+ function parseFrontmatter(markdown) {
14
+ const normalized = normalizeMarkdown(markdown);
15
+ const match = normalized.match(FRONTMATTER_PATTERN);
16
+ if (!match) {
17
+ return { frontmatter: {}, content: normalized };
18
+ }
19
+ const parsed = parseYaml(match[1]);
20
+ return {
21
+ frontmatter: parsed && typeof parsed === "object" ? parsed : {},
22
+ content: normalized,
23
+ };
24
+ }
25
+ function getMetadataField(frontmatter, fieldName, sourcePath) {
26
+ const value = frontmatter[fieldName];
27
+ if (typeof value === "string" && value.trim().length > 0) {
28
+ return value.trim();
29
+ }
30
+ throw new Error(`Skill at ${sourcePath} must define a non-empty frontmatter field: ${fieldName}`);
31
+ }
32
+ function toLocalSkillFilePath(basePath, skillPath) {
33
+ const resolved = resolve(basePath, skillPath);
34
+ if (resolved.endsWith(".md")) {
35
+ return resolved;
36
+ }
37
+ return join(resolved, "SKILL.md");
38
+ }
39
+ function toGithubRawUrl(entry) {
40
+ const normalizedRef = encodeURIComponent(entry.ref);
41
+ const skillPath = entry.skill?.trim() ?? "";
42
+ const withSkillFile = skillPath.length === 0
43
+ ? "SKILL.md"
44
+ : skillPath.endsWith(".md")
45
+ ? skillPath
46
+ : `${skillPath}/SKILL.md`;
47
+ const encodedPath = withSkillFile
48
+ .split("/")
49
+ .filter((segment) => segment.length > 0)
50
+ .map((segment) => encodeURIComponent(segment))
51
+ .join("/");
52
+ return `https://raw.githubusercontent.com/${entry.github}/${normalizedRef}/${encodedPath}`;
53
+ }
54
+ function toUrlSkillMarkdownUrl(rawUrl) {
55
+ const parsed = new URL(rawUrl);
56
+ if (!parsed.pathname.endsWith(".md")) {
57
+ const trimmedPath = parsed.pathname.endsWith("/")
58
+ ? parsed.pathname.slice(0, -1)
59
+ : parsed.pathname;
60
+ parsed.pathname = `${trimmedPath}/SKILL.md`;
61
+ }
62
+ return parsed.toString();
63
+ }
64
+ function createCachePath(url, cacheDir) {
65
+ const hash = createHash("sha256").update(url).digest("hex");
66
+ return join(cacheDir, hash);
67
+ }
68
+ async function readCachedContent(cachePath) {
69
+ try {
70
+ return await readFile(cachePath, "utf8");
71
+ }
72
+ catch (error) {
73
+ if (isNodeError(error) && error.code === "ENOENT") {
74
+ return null;
75
+ }
76
+ throw error;
77
+ }
78
+ }
79
+ async function fetchRemoteSkillContent(url, options) {
80
+ const shouldUseCache = options.cache ?? true;
81
+ const cacheDir = options.cacheDir ?? DEFAULT_CACHE_DIR;
82
+ const cachePath = createCachePath(url, cacheDir);
83
+ if (shouldUseCache) {
84
+ const cachedContent = await readCachedContent(cachePath);
85
+ if (cachedContent !== null) {
86
+ return cachedContent;
87
+ }
88
+ }
89
+ const fetchImpl = options.fetchImpl ?? globalThis.fetch;
90
+ const response = await fetchImpl(url);
91
+ if (!response.ok) {
92
+ throw new Error(`Failed to fetch skill from ${url}: ${response.status} ${response.statusText}`.trim());
93
+ }
94
+ const content = await response.text();
95
+ if (shouldUseCache) {
96
+ await mkdir(dirname(cachePath), { recursive: true });
97
+ await writeFile(cachePath, content, "utf8");
98
+ }
99
+ return content;
100
+ }
101
+ function toSkill(markdown, sourcePath) {
102
+ const parsed = parseFrontmatter(markdown);
103
+ return {
104
+ name: getMetadataField(parsed.frontmatter, "name", sourcePath),
105
+ description: getMetadataField(parsed.frontmatter, "description", sourcePath),
106
+ content: parsed.content,
107
+ sourcePath,
108
+ };
109
+ }
110
+ async function loadLocalSkill(entry, options) {
111
+ if (!options.basePath) {
112
+ throw new Error("basePath is required to load local skills.");
113
+ }
114
+ const filePath = toLocalSkillFilePath(options.basePath, entry.path);
115
+ const content = await readFile(filePath, "utf8");
116
+ return toSkill(content, filePath);
117
+ }
118
+ async function loadGithubSkill(entry, options) {
119
+ const sourceUrl = toGithubRawUrl(entry);
120
+ const content = await fetchRemoteSkillContent(sourceUrl, options);
121
+ return toSkill(content, sourceUrl);
122
+ }
123
+ async function loadUrlSkill(entry, options) {
124
+ const sourceUrl = toUrlSkillMarkdownUrl(entry.url);
125
+ const content = await fetchRemoteSkillContent(sourceUrl, options);
126
+ return toSkill(content, sourceUrl);
127
+ }
128
+ export async function loadSkill(entry, options = {}) {
129
+ if ("path" in entry) {
130
+ return await loadLocalSkill(entry, options);
131
+ }
132
+ if ("github" in entry) {
133
+ return await loadGithubSkill(entry, options);
134
+ }
135
+ return await loadUrlSkill(entry, options);
136
+ }
137
+ export async function loadAllSkills(entries, basePath, options = {}) {
138
+ return await Promise.all(entries.map(async (entry) => {
139
+ return await loadSkill(entry, { ...options, basePath });
140
+ }));
141
+ }
142
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SkillSummary } from "../agent-loop/system-prompt/generate.js";
2
+ export type SkillSummarySource = {
3
+ name: string;
4
+ description: string;
5
+ sourcePath: string;
6
+ content?: string;
7
+ };
8
+ export declare function toSkillSummaries(skills: readonly SkillSummarySource[]): SkillSummary[];
@@ -0,0 +1,9 @@
1
+ export function toSkillSummaries(skills) {
2
+ return skills.map((skill) => ({
3
+ name: skill.name,
4
+ description: skill.description,
5
+ sourcePath: skill.sourcePath,
6
+ content: skill.content,
7
+ }));
8
+ }
9
+ //# sourceMappingURL=summaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summaries.js","sourceRoot":"","sources":["../../src/skills/summaries.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,gBAAgB,CAAC,MAAqC;IACpE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type EnvRestore = () => void;
2
+ export declare function withTemporaryEnv(updates: Record<string, string | undefined>): EnvRestore;
@@ -0,0 +1,20 @@
1
+ export function withTemporaryEnv(updates) {
2
+ const previousValues = Object.fromEntries(Object.keys(updates).map((key) => [key, process.env[key]]));
3
+ Object.entries(updates).forEach(([key, value]) => {
4
+ if (value === undefined) {
5
+ delete process.env[key];
6
+ return;
7
+ }
8
+ process.env[key] = value;
9
+ });
10
+ return () => {
11
+ Object.entries(previousValues).forEach(([key, value]) => {
12
+ if (value === undefined) {
13
+ delete process.env[key];
14
+ return;
15
+ }
16
+ process.env[key] = value;
17
+ });
18
+ };
19
+ }
20
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/test-helpers/env.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,OAA2C;IAC1E,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAC3D,CAAC;IAEF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACtD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}