@desplega.ai/agent-swarm 1.150.0 → 1.151.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 (293) hide show
  1. package/README.md +11 -0
  2. package/dist/{acp-adapter-d5mzggyk.js → acp-adapter-ex8hzjfc.js} +5 -5
  3. package/dist/{actions-wn6ew0p7.js → actions-2bgpyhww.js} +38 -11
  4. package/dist/{anthropic-messages-ec35ktvx.js → anthropic-messages-2y8nktar.js} +16 -16
  5. package/dist/{app-dty7p9hg.js → app-1706zhr1.js} +7 -7
  6. package/dist/{assistant-q4vhgjtx.js → assistant-bavke5p7.js} +41 -16
  7. package/dist/{azure-openai-responses-g85jv7m8.js → azure-openai-responses-f38x2avq.js} +13 -13
  8. package/dist/{boot-reembed-92292pgf.js → boot-reembed-3cmrrmpa.js} +8 -8
  9. package/dist/{boot-reembed-n15q6s9x.js → boot-reembed-nafcmmmc.js} +13 -15
  10. package/dist/{boot-scrub-logs-44pc955m.js → boot-scrub-logs-cd6a2sq0.js} +5 -5
  11. package/dist/{claude-adapter-cjegjbje.js → claude-adapter-wfp2gzvz.js} +12 -13
  12. package/dist/{claude-managed-adapter-p3ts5m9m.js → claude-managed-adapter-dsmkcrjy.js} +3 -3
  13. package/dist/{claude-sdk-session-7ywbn12v.js → claude-sdk-session-bht9jjak.js} +12 -13
  14. package/dist/{cli-ceb5y160.js → cli-0qb1z6s2.js} +1 -1
  15. package/dist/{cli-ryz8q8p1.js → cli-2tbvf1z1.js} +40 -40
  16. package/dist/{cli-zthatyrx.js → cli-3v9xhjcn.js} +5 -5
  17. package/dist/{cli-mzb0n642.js → cli-4wppfkcm.js} +350 -20
  18. package/dist/{cli-3ckzxdt1.js → cli-5jd2z7av.js} +90 -81
  19. package/dist/{cli-3mh119qv.js → cli-5tpgq60f.js} +9726 -693
  20. package/dist/{cli-ck1vqzdj.js → cli-7tgcstn2.js} +9 -4
  21. package/dist/{cli-ttje5a4z.js → cli-9004vfdf.js} +105 -56
  22. package/dist/{cli-asvrh7kj.js → cli-9xvdm3bx.js} +1 -1
  23. package/dist/{cli-9gqddmxs.js → cli-a1z3h107.js} +8 -8
  24. package/dist/{cli-72xdszyx.js → cli-czjtgfys.js} +2 -2
  25. package/dist/{cli-5my3bjsd.js → cli-d3p82erb.js} +7 -7
  26. package/dist/{cli-kyysm7m3.js → cli-f1wky6zp.js} +1 -1
  27. package/dist/{cli-a45d5v9b.js → cli-fm4ytsdk.js} +2 -2
  28. package/dist/{cli-111ey3ra.js → cli-frcta2w4.js} +5 -5
  29. package/dist/{cli-h505yhex.js → cli-g69fdc9g.js} +2 -2
  30. package/dist/{cli-cmp8g3sw.js → cli-gbfwcd3k.js} +44 -9
  31. package/dist/{cli-hbagregr.js → cli-gjyvhmmh.js} +88 -13
  32. package/dist/{cli-hmyynq9b.js → cli-ht5rs63n.js} +1 -1
  33. package/dist/{cli-dyx0237s.js → cli-j4nv2wqy.js} +2 -4
  34. package/dist/{cli-vr6qj104.js → cli-j9xczhaq.js} +1 -1
  35. package/dist/cli-pf9q3696.js +172 -0
  36. package/dist/{cli-7fesa1ky.js → cli-pgj4a5fb.js} +1 -1
  37. package/dist/{cli-7kwmt3r5.js → cli-ppm4975n.js} +9 -3
  38. package/dist/{cli-8chp8xab.js → cli-q88st9aj.js} +2 -2
  39. package/dist/{cli-kt7wevqh.js → cli-r2q6pevn.js} +132 -46
  40. package/dist/{cli-07jd68a1.js → cli-re8z5p8p.js} +1 -1
  41. package/dist/{cli-qp69dd5d.js → cli-s14agm5s.js} +105 -12
  42. package/dist/{cli-zd21jrrc.js → cli-sjaae6ff.js} +9872 -424
  43. package/dist/{cli-taym3dmg.js → cli-vwm416m6.js} +13 -13
  44. package/dist/{cli-1mx65de9.js → cli-wbyk465z.js} +1 -1
  45. package/dist/{cli-n75jt793.js → cli-z61ykvam.js} +6 -5
  46. package/dist/{cli-gm0fhz13.js → cli-zkxymas5.js} +2 -1
  47. package/dist/cli.js +22 -21
  48. package/dist/{codex-adapter-rn3aq7jm.js → codex-adapter-jjjk8w4m.js} +8 -9
  49. package/dist/{codex-hook-gthcmm0g.js → codex-hook-8jexc34x.js} +2 -2
  50. package/dist/{codex-session-runner-bge0cbsw.js → codex-session-runner-nd6ayxkx.js} +8 -9
  51. package/dist/{commands-26phw0pc.js → commands-9v4psyq1.js} +5 -5
  52. package/dist/{db-jxjx6s1b.js → db-wnt58tpe.js} +5 -5
  53. package/dist/dispatcher-05jh1aqk.js +74 -0
  54. package/dist/{google-generative-ai-tsskx7te.js → google-generative-ai-ndjmj5fa.js} +7 -7
  55. package/dist/{google-vertex-pkhpkbq9.js → google-vertex-fr665tqs.js} +10 -10
  56. package/dist/handlers-tw90pkh5.js +65 -0
  57. package/dist/{hook-t6fqsggw.js → hook-123e2scb.js} +9 -10
  58. package/dist/{hook-jw0ztn96.js → hook-sxe3r349.js} +9 -10
  59. package/dist/{http-hyc7s57s.js → http-ecsar8ez.js} +1431 -579
  60. package/dist/{index-sfhaq59d.js → index-16js521z.js} +119 -101
  61. package/dist/{index-wtwpthe1.js → index-hw26vj40.js} +25 -19
  62. package/dist/{index-bcyx5djw.js → index-nnrbpcjp.js} +25 -17
  63. package/dist/index-ymn7em0p.js +25 -0
  64. package/dist/{index-1d9r6a74.js → index-zj518gf9.js} +26 -20
  65. package/dist/{keepalive-fbsak4ya.js → keepalive-asqtcm4y.js} +7 -7
  66. package/dist/{lead-rdzdm627.js → lead-xbfr7fvt.js} +41 -49
  67. package/dist/{maintenance-25z1c1vf.js → maintenance-qma55qvw.js} +8 -8
  68. package/dist/{node-209sxmg3.js → node-x1g4v0pq.js} +9 -9
  69. package/dist/{oauth-refresh-sweep-j3d7gtse.js → oauth-refresh-sweep-3s04c6qw.js} +6 -6
  70. package/dist/{onboard-dkcwrc75.js → onboard-drskd386.js} +13 -4
  71. package/dist/{openai-codex-responses-pm5gnyfa.js → openai-codex-responses-wy6a43wd.js} +11 -11
  72. package/dist/{openai-responses-vwvk1taj.js → openai-responses-6xwf7bzg.js} +13 -13
  73. package/dist/{opencode-adapter-dce4wskd.js → opencode-adapter-28axqa09.js} +4 -4
  74. package/dist/{otel-impl-8rgyy3j8.js → otel-impl-943c96er.js} +1 -1
  75. package/dist/{pi-mono-adapter-4s2bbkgq.js → pi-mono-adapter-jcqt71cg.js} +14 -16
  76. package/dist/{pricing-refresh-9cek71nq.js → pricing-refresh-mx51az05.js} +7 -7
  77. package/dist/{rbac-roles-z98s2ypy.js → rbac-roles-78baecqd.js} +13 -9
  78. package/dist/{rbac-roles-vk8mqp9v.js → rbac-roles-wcmrg6sv.js} +7 -7
  79. package/dist/{render-v2-3j26g0qh.js → render-v2-8zjntgf5.js} +7 -7
  80. package/dist/{seed-pricing-7rxhcnzm.js → seed-pricing-jqjs6cws.js} +6 -6
  81. package/dist/{setup-e2t7vz0c.js → setup-4pks0vfk.js} +2 -2
  82. package/dist/{work-objects-8d3nd3x2.js → work-objects-wangt792.js} +38 -14
  83. package/dist/{worker-0x9fn7nq.js → worker-p2mr422x.js} +41 -49
  84. package/openapi.json +1351 -265
  85. package/package.json +2 -1
  86. package/src/agentmail/handlers.ts +95 -71
  87. package/src/be/db-client.ts +5 -0
  88. package/src/be/db.ts +11 -3
  89. package/src/be/extensions/db.ts +461 -0
  90. package/src/be/extensions/validate.ts +107 -0
  91. package/src/be/memory/boot-reembed.ts +17 -12
  92. package/src/be/memory/index.ts +12 -0
  93. package/src/be/memory/providers/openai-embedding.ts +4 -0
  94. package/src/be/memory/types.ts +2 -0
  95. package/src/be/migrations/155_extensions.sql +66 -0
  96. package/src/be/migrations/156_inbox_item_state_read_at.sql +7 -0
  97. package/src/be/rbac-roles.ts +3 -2
  98. package/src/be/scripts/typecheck.ts +52 -38
  99. package/src/be/seed-skills/index.ts +7 -0
  100. package/src/be/swarm-config-guard.ts +3 -1
  101. package/src/commands/onboard/compose-generator.ts +14 -2
  102. package/src/commands/onboard/env-generator.ts +7 -0
  103. package/src/commands/runner.ts +1 -1
  104. package/src/extensions/apply-task-create.ts +135 -0
  105. package/src/extensions/bundle-path.ts +10 -0
  106. package/src/extensions/contract-runtime.ts +7 -0
  107. package/src/extensions/contract-types.generated.ts +4 -0
  108. package/src/extensions/contract.ts +270 -0
  109. package/src/extensions/ctx.ts +186 -0
  110. package/src/extensions/dispatcher.ts +479 -0
  111. package/src/extensions/identity.ts +44 -0
  112. package/src/extensions/lifecycle.ts +281 -0
  113. package/src/extensions/loader.ts +207 -0
  114. package/src/extensions/post-bridge.ts +161 -0
  115. package/src/github/handlers.ts +185 -149
  116. package/src/gitlab/handlers.ts +97 -81
  117. package/src/heartbeat/heartbeat.ts +152 -83
  118. package/src/http/agents.ts +1 -1
  119. package/src/http/all-routes.ts +1 -0
  120. package/src/http/apps.ts +14 -10
  121. package/src/http/core.ts +34 -0
  122. package/src/http/extensions.ts +547 -0
  123. package/src/http/inbox-state.ts +2 -0
  124. package/src/http/index.ts +25 -0
  125. package/src/http/mcp-bridge.ts +96 -62
  126. package/src/http/mcp.ts +1 -1
  127. package/src/http/status.ts +6 -4
  128. package/src/http/tasks.ts +51 -35
  129. package/src/integrations/kapso/inbound.ts +15 -11
  130. package/src/jira/sync.ts +26 -18
  131. package/src/linear/sync.ts +26 -18
  132. package/src/prompts/session-templates.ts +5 -4
  133. package/src/rbac/admission.ts +1 -1
  134. package/src/rbac/elevated-agents.ts +24 -0
  135. package/src/rbac/legacy-policy.ts +35 -6
  136. package/src/rbac/permissions.ts +8 -0
  137. package/src/scheduler/deferred-task-waits.ts +133 -51
  138. package/src/scheduler/schedule-task.ts +50 -24
  139. package/src/scheduler/scheduler.ts +4 -2
  140. package/src/scripts-runtime/executors/native.ts +5 -1
  141. package/src/scripts-runtime/executors/types.ts +5 -0
  142. package/src/scripts-runtime/import-allowlist.ts +79 -19
  143. package/src/scripts-runtime/sdk-allowlist.ts +4 -0
  144. package/src/scripts-runtime/swarm-config.ts +8 -0
  145. package/src/scripts-runtime/swarm-sdk.ts +3 -0
  146. package/src/scripts-runtime/types/stdlib.d.ts +9 -0
  147. package/src/scripts-runtime/types/swarm-extension.d.ts +562 -0
  148. package/src/scripts-runtime/types/swarm-sdk.d.ts +9 -0
  149. package/src/server.ts +6 -0
  150. package/src/slack/HEURISTICS.md +1 -1
  151. package/src/slack/actions.ts +21 -17
  152. package/src/slack/blocks.ts +1 -1
  153. package/src/slack/handlers.ts +98 -5
  154. package/src/slack/inbound-files.ts +6 -2
  155. package/src/slack/render-v2.ts +171 -35
  156. package/src/slack/router.ts +13 -3
  157. package/src/slack/steering.ts +3 -3
  158. package/src/tasks/errors.ts +9 -0
  159. package/src/tasks/sibling-awareness.ts +35 -1
  160. package/src/tasks/worker-follow-up.ts +64 -12
  161. package/src/tests/base-prompt.test.ts +1 -0
  162. package/src/tests/deferred-task-wake.test.ts +161 -9
  163. package/src/tests/docs-index-footprint.test.js +3 -3
  164. package/src/tests/env-flag.test.ts +1 -0
  165. package/src/tests/extensions-db.test.ts +216 -0
  166. package/src/tests/extensions-dispatcher.test.ts +275 -0
  167. package/src/tests/extensions-example-heartbeat-remediate.test.ts +69 -0
  168. package/src/tests/extensions-example-mcp-install.test.ts +63 -0
  169. package/src/tests/extensions-example-no-exclamation-marks.test.ts +72 -0
  170. package/src/tests/extensions-example-rewrite-and-suppress.test.ts +70 -0
  171. package/src/tests/extensions-example-route-slack-channel.test.ts +217 -0
  172. package/src/tests/extensions-heartbeat.test.ts +291 -0
  173. package/src/tests/extensions-http.test.ts +431 -0
  174. package/src/tests/extensions-lead-equivalence.test.ts +49 -0
  175. package/src/tests/extensions-lifecycle.test.ts +209 -0
  176. package/src/tests/extensions-loader.test.ts +95 -0
  177. package/src/tests/extensions-mcp-tools.test.ts +245 -0
  178. package/src/tests/extensions-pre-task.test.ts +487 -0
  179. package/src/tests/extensions-run-context.test.ts +41 -0
  180. package/src/tests/extensions-tool-call.test.ts +288 -0
  181. package/src/tests/extensions-validate.test.ts +196 -0
  182. package/src/tests/fixtures/extensions/bad-import/hooks.ts +8 -0
  183. package/src/tests/fixtures/extensions/bad-import/manifest.json +9 -0
  184. package/src/tests/fixtures/extensions/bad-return-shape/hooks.ts +10 -0
  185. package/src/tests/fixtures/extensions/bad-return-shape/manifest.json +9 -0
  186. package/src/tests/fixtures/extensions/block-tasks-from-source/hooks.ts +22 -0
  187. package/src/tests/fixtures/extensions/block-tasks-from-source/manifest.json +9 -0
  188. package/src/tests/fixtures/extensions/ignore-channel/hooks.ts +22 -0
  189. package/src/tests/fixtures/extensions/ignore-channel/manifest.json +9 -0
  190. package/src/tests/fixtures/extensions/load.ts +10 -0
  191. package/src/tests/fixtures/extensions/minimal/hooks.ts +7 -0
  192. package/src/tests/fixtures/extensions/minimal/manifest.json +9 -0
  193. package/src/tests/fixtures/extensions/never-fail-long-tasks/hooks.ts +11 -0
  194. package/src/tests/fixtures/extensions/never-fail-long-tasks/manifest.json +9 -0
  195. package/src/tests/fixtures/extensions/no-exclamation-marks/hooks.ts +23 -0
  196. package/src/tests/fixtures/extensions/no-exclamation-marks/manifest.json +9 -0
  197. package/src/tests/fixtures/extensions/post-logger/hooks.ts +9 -0
  198. package/src/tests/fixtures/extensions/post-logger/manifest.json +9 -0
  199. package/src/tests/fixtures/extensions/priority-a/hooks.ts +7 -0
  200. package/src/tests/fixtures/extensions/priority-a/manifest.json +9 -0
  201. package/src/tests/fixtures/extensions/priority-b/hooks.ts +7 -0
  202. package/src/tests/fixtures/extensions/priority-b/manifest.json +9 -0
  203. package/src/tests/fixtures/extensions/record-only-on-tag/hooks.ts +16 -0
  204. package/src/tests/fixtures/extensions/record-only-on-tag/manifest.json +9 -0
  205. package/src/tests/fixtures/extensions/reserved-assets/hooks.ts +5 -0
  206. package/src/tests/fixtures/extensions/reserved-assets/manifest.json +10 -0
  207. package/src/tests/fixtures/extensions/rewrite-progress-prefix/hooks.ts +22 -0
  208. package/src/tests/fixtures/extensions/rewrite-progress-prefix/manifest.json +9 -0
  209. package/src/tests/fixtures/extensions/rewrite-task-priority/hooks.ts +7 -0
  210. package/src/tests/fixtures/extensions/rewrite-task-priority/manifest.json +9 -0
  211. package/src/tests/fixtures/extensions/route-channel-to-agent/hooks.ts +26 -0
  212. package/src/tests/fixtures/extensions/route-channel-to-agent/manifest.json +9 -0
  213. package/src/tests/fixtures/extensions/slow/hooks.ts +10 -0
  214. package/src/tests/fixtures/extensions/slow/manifest.json +9 -0
  215. package/src/tests/fixtures/extensions/suppress-lead-follow-up/hooks.ts +12 -0
  216. package/src/tests/fixtures/extensions/suppress-lead-follow-up/manifest.json +9 -0
  217. package/src/tests/fixtures/extensions/throws/hooks.ts +12 -0
  218. package/src/tests/fixtures/extensions/throws/manifest.json +9 -0
  219. package/src/tests/fixtures/extensions/worker-runtime/hooks.ts +5 -0
  220. package/src/tests/fixtures/extensions/worker-runtime/manifest.json +9 -0
  221. package/src/tests/memory-edit-authorization.test.ts +32 -0
  222. package/src/tests/multi-runtime-enabled-stats.test.ts +2 -2
  223. package/src/tests/multi-runtime-registration.test.ts +14 -14
  224. package/src/tests/onboard-compose.test.ts +44 -0
  225. package/src/tests/preload.ts +5 -0
  226. package/src/tests/rbac-admission.test.ts +18 -3
  227. package/src/tests/rbac-engine.test.ts +39 -0
  228. package/src/tests/realtime-room-auth.test.ts +1 -1
  229. package/src/tests/reload-config.test.ts +44 -0
  230. package/src/tests/routing-affinity-inventory.test.ts +1 -1
  231. package/src/tests/script-connections.test.ts +2 -0
  232. package/src/tests/scripts-boot-reembed.test.ts +4 -0
  233. package/src/tests/scripts-embeddings.test.ts +4 -0
  234. package/src/tests/scripts-import-allowlist.test.ts +44 -1
  235. package/src/tests/scripts-mcp-e2e.test.ts +80 -0
  236. package/src/tests/scripts-only-gating.test.ts +2 -0
  237. package/src/tests/scripts-runtime-identity.test.ts +1 -1
  238. package/src/tests/slack-blocks.test.ts +12 -1
  239. package/src/tests/slack-render-v2.test.ts +76 -3
  240. package/src/tests/slack-router.test.ts +17 -2
  241. package/src/tests/slack-steering.test.ts +19 -0
  242. package/src/tests/status.test.ts +12 -0
  243. package/src/tests/steering-enabled.test.ts +6 -8
  244. package/src/tests/task-tool-preload-mcp.test.ts +4 -1
  245. package/src/tests/tool-annotations.test.ts +1 -1
  246. package/src/tests/tool-registrar-no-input.test.ts +42 -1
  247. package/src/tools/defer-task.ts +1 -1
  248. package/src/tools/extension-common.ts +84 -0
  249. package/src/tools/extension-install.ts +65 -0
  250. package/src/tools/extension-list.ts +66 -0
  251. package/src/tools/script-common.ts +43 -18
  252. package/src/tools/send-task.ts +69 -107
  253. package/src/tools/task-action.ts +43 -22
  254. package/src/tools/task-tool-ctx.ts +2 -0
  255. package/src/tools/tool-config.ts +3 -1
  256. package/src/tools/utils.ts +140 -16
  257. package/src/types.ts +133 -0
  258. package/src/utils/multi-runtime.ts +2 -2
  259. package/src/utils/steering-enabled.ts +4 -4
  260. package/src/workflows/executors/agent-task.ts +13 -3
  261. package/templates/extensions/README.md +17 -0
  262. package/templates/extensions/notify-on-complete/README.md +11 -0
  263. package/templates/extensions/notify-on-complete/hooks.ts +61 -0
  264. package/templates/extensions/notify-on-complete/manifest.json +7 -0
  265. package/templates/extensions/require-ticket-ref/README.md +11 -0
  266. package/templates/extensions/require-ticket-ref/hooks.ts +30 -0
  267. package/templates/extensions/require-ticket-ref/manifest.json +7 -0
  268. package/templates/extensions/require-verification-note/README.md +11 -0
  269. package/templates/extensions/require-verification-note/hooks.ts +32 -0
  270. package/templates/extensions/require-verification-note/manifest.json +7 -0
  271. package/templates/skills/scheduling/content.md +2 -0
  272. package/templates/skills/swarm-extensions/config.json +14 -0
  273. package/templates/skills/swarm-extensions/content.md +120 -0
  274. package/dist/cli-b8x19vbh.js +0 -823
  275. package/dist/cli-n1yj5fd5.js +0 -164
  276. package/dist/cli-q04q68be.js +0 -3066
  277. package/dist/cli-qgm2pfpq.js +0 -6377
  278. package/dist/cli-rnsr8asm.js +0 -4323
  279. package/dist/cli-rwp3ksm7.js +0 -545
  280. package/dist/cli-xjb9wghj.js +0 -668
  281. package/dist/cli-xvkmedgn.js +0 -332
  282. package/dist/cli-ydk0wjj8.js +0 -338
  283. package/dist/handlers-vr1djg4n.js +0 -41
  284. package/dist/{claude-managed-setup-f5pmsyrp.js → claude-managed-setup-48dwg9bv.js} +3 -3
  285. package/dist/{cli-81r683bv.js → cli-ch38q5z4.js} +0 -0
  286. package/dist/{cli-wk0gjrn3.js → cli-kj76p1ez.js} +6 -6
  287. package/dist/{cli-c71mg51n.js → cli-r2fpe7cx.js} +5 -5
  288. package/dist/{cli-8qx7jnrk.js → cli-y6x0gqtg.js} +16 -16
  289. package/dist/{index-aa3sa6s8.js → index-2wsdsnmm.js} +1 -1
  290. package/dist/{mistral-conversations-4ryk7h83.js → mistral-conversations-qhr84ph3.js} +9 -9
  291. package/dist/{openai-completions-qdcmkfnr.js → openai-completions-32rdwmze.js} +17 -17
  292. package/dist/{openrouter-images-qx18fyp8.js → openrouter-images-9f9ek4rw.js} +3 -3
  293. package/dist/{pi-messages-79jvzz1d.js → pi-messages-b1mbr6gp.js} +4 -4
@@ -1,12 +1,10 @@
1
1
  import {
2
2
  SYSTEM_COLUMN_KINDS,
3
- listAppRecords
4
- } from "./cli-q04q68be.js";
5
- import {
6
3
  getScriptApiTypes,
7
4
  getScriptMcpTypes,
5
+ listAppRecords,
8
6
  require_typescript
9
- } from "./cli-zd21jrrc.js";
7
+ } from "./cli-sjaae6ff.js";
10
8
  import {
11
9
  deleteSwarmConfigByKey,
12
10
  getAgentById,
@@ -15,7 +13,7 @@ import {
15
13
  getSwarmConfigs,
16
14
  init_db,
17
15
  upsertSwarmConfig
18
- } from "./cli-qp69dd5d.js";
16
+ } from "./cli-s14agm5s.js";
19
17
  import {
20
18
  init_secret_scrubber,
21
19
  scrubSecrets
@@ -577,52 +575,9 @@ async function getScriptAppTypes(_context = {}) {
577
575
  }
578
576
  }
579
577
 
580
- // src/be/scripts/extract-schema.ts
581
- import { fileURLToPath } from "node:url";
582
- var TIMEOUT_MS = 5000;
583
- function extractorPath() {
584
- return fileURLToPath(new URL("../../scripts-runtime/extract-args-schema.ts", import.meta.url));
585
- }
586
- async function extractArgsJsonSchema(source) {
587
- const tmpdir = `${process.env.TMPDIR ?? "/tmp"}/schema-extract-${crypto.randomUUID()}`;
588
- try {
589
- await Bun.$`mkdir -p ${tmpdir}`.quiet();
590
- const sourceFile = `${tmpdir}/source.ts`;
591
- const resultFile = `${tmpdir}/result.json`;
592
- await Bun.write(sourceFile, source);
593
- const proc = Bun.spawn(["bun", "run", extractorPath()], {
594
- env: {
595
- PATH: process.env.PATH ?? "/usr/bin:/bin",
596
- HOME: process.env.HOME ?? "/tmp",
597
- TMPDIR: tmpdir,
598
- SWARM_SCHEMA_SOURCE_FILE: sourceFile,
599
- SWARM_SCHEMA_RESULT_FILE: resultFile,
600
- SWARM_SCHEMA_TMPDIR: tmpdir
601
- },
602
- cwd: tmpdir,
603
- stdout: "ignore",
604
- stderr: "ignore"
605
- });
606
- const timeout = setTimeout(() => proc.kill(), TIMEOUT_MS);
607
- const exitCode = await proc.exited.catch(() => 1);
608
- clearTimeout(timeout);
609
- if (exitCode !== 0)
610
- return null;
611
- const result = await Bun.file(resultFile).text();
612
- const parsed = JSON.parse(result);
613
- if (parsed === null)
614
- return null;
615
- return JSON.stringify(parsed);
616
- } catch {
617
- return null;
618
- } finally {
619
- await Bun.$`rm -rf ${tmpdir}`.quiet().nothrow();
620
- }
621
- }
622
-
623
578
  // src/be/scripts/typecheck.ts
624
579
  var import_typescript = __toESM(require_typescript(), 1);
625
- import { fileURLToPath as fileURLToPath2 } from "node:url";
580
+ import { fileURLToPath } from "node:url";
626
581
  var SCRIPT_SDK_TYPES = `
627
582
  export type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };
628
583
  export type ScriptScope = "agent" | "global";
@@ -909,6 +864,10 @@ export interface SwarmSdk {
909
864
  script_getRun(args: { id: string }): Promise<unknown>;
910
865
  script_listRuns(args?: { status?: "running" | "paused" | "completed" | "failed" | "cancelled" | "aborted_limit"; agentId?: string; limit?: number; offset?: number }): Promise<unknown>;
911
866
 
867
+ // --- write: extensions ---
868
+ extension_install(args: { manifest: Record<string, unknown>; files: Record<string, string>; priority?: number; config?: Record<string, unknown> }): Promise<unknown>;
869
+ extension_list(args?: { enabledOnly?: boolean }): Promise<unknown>;
870
+
912
871
  // --- write: repos ---
913
872
  repo_update(args: Record<string, unknown>): Promise<unknown>;
914
873
 
@@ -1057,7 +1016,7 @@ ${mcpTypes}
1057
1016
  ${resolvedAppTypes}
1058
1017
  `;
1059
1018
  }
1060
- var STDLIB_MODULE_TYPES = `
1019
+ var SCRIPT_STDLIB_MODULE_TYPES = `
1061
1020
  declare module "stdlib" {
1062
1021
  export interface Redacted<T> {
1063
1022
  readonly __redactedBrand?: T;
@@ -1077,7 +1036,7 @@ declare module "stdlib" {
1077
1036
  }
1078
1037
  `;
1079
1038
  function stdlibTypesFor(sdkModuleBody) {
1080
- return `${STDLIB_MODULE_TYPES}
1039
+ return `${SCRIPT_STDLIB_MODULE_TYPES}
1081
1040
  declare module "swarm-sdk" {
1082
1041
  ${sdkModuleBody.replace(/^/gm, " ")}
1083
1042
  }
@@ -1411,16 +1370,14 @@ interface Window {
1411
1370
  `;
1412
1371
  var USER_FILE = "/virtual/user-script.ts";
1413
1372
  var CHECK_FILE = "/virtual/check.ts";
1414
- var SDK_FILE = "/virtual/swarm-sdk.d.ts";
1415
- var STDLIB_FILE = "/virtual/stdlib.d.ts";
1416
1373
  var RUNTIME_GLOBALS_FILE = "/virtual/runtime-globals.d.ts";
1417
1374
  function scriptTypesBase() {
1418
1375
  const dir = process.env.SCRIPT_TYPES_DIR;
1419
1376
  if (dir)
1420
1377
  return `${dir}/index.ts`;
1421
- return fileURLToPath2(new URL("../../index.ts", import.meta.url));
1378
+ return fileURLToPath(new URL("../../index.ts", import.meta.url));
1422
1379
  }
1423
- function createCompilerHost(files, options) {
1380
+ function createCompilerHost(files, options, virtualModules = new Map) {
1424
1381
  const host = import_typescript.default.createCompilerHost(options, true);
1425
1382
  const originalGetSourceFile = host.getSourceFile.bind(host);
1426
1383
  host.getSourceFile = (fileName, languageVersion, onError, shouldCreateNewSourceFile) => {
@@ -1444,11 +1401,9 @@ function createCompilerHost(files, options) {
1444
1401
  if (moduleName === "./user-script") {
1445
1402
  return { resolvedFileName: USER_FILE, extension: import_typescript.default.Extension.Ts };
1446
1403
  }
1447
- if (moduleName === "swarm-sdk") {
1448
- return { resolvedFileName: SDK_FILE, extension: import_typescript.default.Extension.Dts };
1449
- }
1450
- if (moduleName === "stdlib") {
1451
- return { resolvedFileName: STDLIB_FILE, extension: import_typescript.default.Extension.Dts };
1404
+ const virtualModule = virtualModules.get(moduleName);
1405
+ if (virtualModule) {
1406
+ return { resolvedFileName: virtualModule, extension: import_typescript.default.Extension.Dts };
1452
1407
  }
1453
1408
  const base = containingFile.startsWith("/virtual/") ? projectBase : containingFile;
1454
1409
  return import_typescript.default.resolveModuleName(moduleName, base, options, host).resolvedModule;
@@ -1521,7 +1476,7 @@ function toStructured(diag) {
1521
1476
  suggestion: extractSuggestion(message)
1522
1477
  };
1523
1478
  }
1524
- async function typecheckScript(source, context = {}) {
1479
+ async function typecheckWithAmbient(args) {
1525
1480
  const options = {
1526
1481
  allowImportingTsExtensions: true,
1527
1482
  lib: ["lib.es2022.d.ts"],
@@ -1533,28 +1488,22 @@ async function typecheckScript(source, context = {}) {
1533
1488
  target: import_typescript.default.ScriptTarget.ES2022,
1534
1489
  types: []
1535
1490
  };
1536
- const apiTypes = getScriptApiTypes(context);
1537
- const mcpTypes = getScriptMcpTypes(context);
1538
- const appTypes = await getScriptAppTypes(context);
1539
- const sdkTypes = await scriptSdkTypesWithGeneratedApis(apiTypes, mcpTypes, appTypes);
1540
- const stdlibTypes = appTypes ? await scriptStdlibTypesWithGeneratedApis(apiTypes, mcpTypes, appTypes) : SCRIPT_STDLIB_TYPES;
1541
1491
  const files = new Map([
1542
- [USER_FILE, source],
1543
- [SDK_FILE, sdkTypes],
1544
- [STDLIB_FILE, stdlibTypes],
1492
+ [USER_FILE, args.source],
1545
1493
  [RUNTIME_GLOBALS_FILE, SCRIPT_RUNTIME_GLOBALS],
1546
- [
1547
- CHECK_FILE,
1548
- `/// <reference path="./runtime-globals.d.ts" />
1549
- import run from "./user-script";
1550
- import type { ScriptMain } from "swarm-sdk";
1551
- const _scriptMain: ScriptMain = run;
1552
- void _scriptMain;
1553
- `
1554
- ]
1494
+ [CHECK_FILE, args.checkFile]
1555
1495
  ]);
1556
- const host = createCompilerHost(files, options);
1557
- const program = import_typescript.default.createProgram([USER_FILE, CHECK_FILE, SDK_FILE, STDLIB_FILE, RUNTIME_GLOBALS_FILE], options, host);
1496
+ const virtualModules = new Map;
1497
+ for (const [moduleName, source] of Object.entries(args.modules)) {
1498
+ const fileName = `/virtual/${moduleName.replace(/[^A-Za-z0-9_.-]/g, "_")}.d.ts`;
1499
+ files.set(fileName, source);
1500
+ virtualModules.set(moduleName, fileName);
1501
+ }
1502
+ for (const [name, source] of Object.entries(args.ambient ?? {})) {
1503
+ files.set(`/virtual/ambient-${name.replace(/[^A-Za-z0-9_.-]/g, "_")}.d.ts`, source);
1504
+ }
1505
+ const host = createCompilerHost(files, options, virtualModules);
1506
+ const program = import_typescript.default.createProgram([...files.keys()], options, host);
1558
1507
  const diagnostics = [
1559
1508
  ...program.getSyntacticDiagnostics(),
1560
1509
  ...program.getSemanticDiagnostics()
@@ -1576,6 +1525,66 @@ void _scriptMain;
1576
1525
  structured: diagnostics.map(toStructured)
1577
1526
  };
1578
1527
  }
1528
+ async function typecheckScript(source, context = {}) {
1529
+ const apiTypes = getScriptApiTypes(context);
1530
+ const mcpTypes = getScriptMcpTypes(context);
1531
+ const appTypes = await getScriptAppTypes(context);
1532
+ const sdkTypes = await scriptSdkTypesWithGeneratedApis(apiTypes, mcpTypes, appTypes);
1533
+ const stdlibTypes = appTypes ? await scriptStdlibTypesWithGeneratedApis(apiTypes, mcpTypes, appTypes) : SCRIPT_STDLIB_TYPES;
1534
+ return typecheckWithAmbient({
1535
+ source,
1536
+ modules: { "swarm-sdk": sdkTypes, stdlib: stdlibTypes },
1537
+ checkFile: `/// <reference path="./runtime-globals.d.ts" />
1538
+ import run from "./user-script";
1539
+ import type { ScriptMain } from "swarm-sdk";
1540
+ const _scriptMain: ScriptMain = run;
1541
+ void _scriptMain;
1542
+ `
1543
+ });
1544
+ }
1545
+
1546
+ // src/be/scripts/extract-schema.ts
1547
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
1548
+ var TIMEOUT_MS = 5000;
1549
+ function extractorPath() {
1550
+ return fileURLToPath2(new URL("../../scripts-runtime/extract-args-schema.ts", import.meta.url));
1551
+ }
1552
+ async function extractArgsJsonSchema(source) {
1553
+ const tmpdir = `${process.env.TMPDIR ?? "/tmp"}/schema-extract-${crypto.randomUUID()}`;
1554
+ try {
1555
+ await Bun.$`mkdir -p ${tmpdir}`.quiet();
1556
+ const sourceFile = `${tmpdir}/source.ts`;
1557
+ const resultFile = `${tmpdir}/result.json`;
1558
+ await Bun.write(sourceFile, source);
1559
+ const proc = Bun.spawn(["bun", "run", extractorPath()], {
1560
+ env: {
1561
+ PATH: process.env.PATH ?? "/usr/bin:/bin",
1562
+ HOME: process.env.HOME ?? "/tmp",
1563
+ TMPDIR: tmpdir,
1564
+ SWARM_SCHEMA_SOURCE_FILE: sourceFile,
1565
+ SWARM_SCHEMA_RESULT_FILE: resultFile,
1566
+ SWARM_SCHEMA_TMPDIR: tmpdir
1567
+ },
1568
+ cwd: tmpdir,
1569
+ stdout: "ignore",
1570
+ stderr: "ignore"
1571
+ });
1572
+ const timeout = setTimeout(() => proc.kill(), TIMEOUT_MS);
1573
+ const exitCode = await proc.exited.catch(() => 1);
1574
+ clearTimeout(timeout);
1575
+ if (exitCode !== 0)
1576
+ return null;
1577
+ const result = await Bun.file(resultFile).text();
1578
+ const parsed = JSON.parse(result);
1579
+ if (parsed === null)
1580
+ return null;
1581
+ return JSON.stringify(parsed);
1582
+ } catch {
1583
+ return null;
1584
+ } finally {
1585
+ await Bun.$`rm -rf ${tmpdir}`.quiet().nothrow();
1586
+ }
1587
+ }
1579
1588
 
1580
1589
  // src/scripts-runtime/extract-signature.ts
1581
1590
  var import_typescript2 = __toESM(require_typescript(), 1);
@@ -1634,4 +1643,4 @@ function extractScriptSignature(source) {
1634
1643
  return FALLBACK_SIGNATURE;
1635
1644
  }
1636
1645
 
1637
- export { agentFsProvisionSeeder, inviteEmailToSharedOrg, ensureAgentFsCredentialsForAgent, getScriptAppTypes, extractArgsJsonSchema, scriptSdkTypesWithGeneratedApis, scriptStdlibTypesWithGeneratedApis, typecheckScript, extractScriptSignature };
1646
+ export { getScriptAppTypes, SCRIPT_SDK_TYPES, scriptSdkTypesWithGeneratedApis, SCRIPT_STDLIB_MODULE_TYPES, scriptStdlibTypesWithGeneratedApis, typecheckWithAmbient, typecheckScript, agentFsProvisionSeeder, inviteEmailToSharedOrg, ensureAgentFsCredentialsForAgent, extractArgsJsonSchema, extractScriptSignature };