@desplega.ai/agent-swarm 1.173.0 → 2.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 (511) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-ccm9xrep.js → acp-adapter-kr4abrsk.js} +17 -16
  3. package/dist/{actions-sgeyv08k.js → actions-eh4g6w2r.js} +39 -34
  4. package/dist/{amp-adapter-gpxp3kc9.js → amp-adapter-7h7wdt8q.js} +8 -7
  5. package/dist/{app-km9qnv2f.js → app-7k8s9w5p.js} +18 -14
  6. package/dist/{assistant-5r8tcvvd.js → assistant-wswt2y7p.js} +40 -35
  7. package/dist/{boot-reembed-16rv9843.js → boot-reembed-9apm9qw6.js} +10 -9
  8. package/dist/{boot-reembed-swwzdgd7.js → boot-reembed-whzbdthj.js} +10 -9
  9. package/dist/{boot-scrub-sweep-zkr6vkqb.js → boot-scrub-sweep-ndzmvmgt.js} +11 -10
  10. package/dist/{boot-seeds-d8sp49t2.js → boot-seeds-e9sta0yt.js} +16 -13
  11. package/dist/{claude-adapter-yzzzh8jp.js → claude-adapter-4mqd3r6r.js} +19 -18
  12. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-9wswb52m.js} +7 -5
  13. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-tpe1effx.js} +6 -4
  14. package/dist/{claude-sdk-session-4whxere4.js → claude-sdk-session-q49ghmh9.js} +12402 -11850
  15. package/dist/{cli-ne7smj1b.js → cli-01xvj1rq.js} +10 -10
  16. package/dist/{cli-nwrdx840.js → cli-035vekcw.js} +3 -3
  17. package/dist/{cli-9xf7fdtp.js → cli-0pd8hzhc.js} +29 -6
  18. package/dist/{cli-tmhsxhb8.js → cli-0veb92a3.js} +28 -6
  19. package/dist/{cli-c3rk1v0x.js → cli-10jesr25.js} +3 -3
  20. package/dist/{cli-6thk4jz3.js → cli-1y7yywmj.js} +6 -6
  21. package/dist/{cli-6r2f7edk.js → cli-20krdhz5.js} +47 -19
  22. package/dist/{cli-rfs4vddv.js → cli-29rja109.js} +39 -20
  23. package/dist/cli-2m1ktfzz.js +17795 -0
  24. package/dist/{cli-na2pxe4f.js → cli-2pwa0q4d.js} +15 -4
  25. package/dist/{cli-7a93cv8c.js → cli-4mengw46.js} +441 -43
  26. package/dist/{cli-94b48jhk.js → cli-5twdke5x.js} +16 -14
  27. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  28. package/dist/cli-6cvfxs8r.js +47 -0
  29. package/dist/{cli-w1apjecb.js → cli-711vwbxn.js} +2 -2
  30. package/dist/{cli-r4fqfpwf.js → cli-78vv7446.js} +50 -27
  31. package/dist/{cli-srqq3gc5.js → cli-7n6s5man.js} +5 -5
  32. package/dist/{cli-m89t9jdf.js → cli-7x0g4sn1.js} +15416 -16024
  33. package/dist/{cli-2bw3w47j.js → cli-8wwxw8a3.js} +1 -1
  34. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  35. package/dist/{cli-ywm1azg9.js → cli-9jzdj90z.js} +8 -4
  36. package/dist/cli-9traj3dn.js +638 -0
  37. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  38. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  39. package/dist/cli-cvv9k0hh.js +10143 -0
  40. package/dist/{cli-anzdk0z4.js → cli-d9286m9h.js} +2 -2
  41. package/dist/cli-e3g5mbkz.js +776 -0
  42. package/dist/cli-f527ce74.js +781 -0
  43. package/dist/{cli-gmdajfw5.js → cli-gxzkg1de.js} +5020 -1729
  44. package/dist/{cli-451ks6aw.js → cli-h1arqn31.js} +1 -1
  45. package/dist/cli-hjwmhcg1.js +10622 -0
  46. package/dist/{cli-jpc4r224.js → cli-hqr88ew6.js} +19 -3
  47. package/dist/{cli-h7k0xtry.js → cli-hvqbtna4.js} +4 -1256
  48. package/dist/{cli-cd0hv9nh.js → cli-j67mh2vg.js} +2 -2
  49. package/dist/cli-jta2eyzc.js +619 -0
  50. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  51. package/dist/cli-kceah1eh.js +92 -0
  52. package/dist/{cli-d603qf86.js → cli-ksphgh48.js} +10 -8
  53. package/dist/{cli-3nxdmjrc.js → cli-mgz4nbgg.js} +4 -4
  54. package/dist/{cli-saqyage0.js → cli-mz5as5ha.js} +179 -27
  55. package/dist/cli-n2wq4j7m.js +6985 -0
  56. package/dist/{cli-ppy4nnnh.js → cli-n8ndw8j7.js} +2 -2
  57. package/dist/{cli-1w0vj3gw.js → cli-naqzr17j.js} +7 -7
  58. package/dist/{cli-0a7mm3zp.js → cli-nm1p8jfr.js} +25 -21
  59. package/dist/{cli-wrh08zjd.js → cli-p3zbc1rw.js} +5 -18
  60. package/dist/{cli-hsem16hb.js → cli-pe05f8yk.js} +29 -6
  61. package/dist/{cli-5wpw4rab.js → cli-qmzsbkvy.js} +5 -5
  62. package/dist/{cli-bv2etw2y.js → cli-qnm4e9e4.js} +99 -590
  63. package/dist/{cli-1x7da0de.js → cli-qqy4q48b.js} +8 -8
  64. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  65. package/dist/{cli-5er5gjbm.js → cli-r35rw5de.js} +15 -15
  66. package/dist/{cli-v3zhnxsb.js → cli-r610p9bs.js} +2 -2
  67. package/dist/{cli-7jykv7ef.js → cli-rc6pf5kv.js} +1 -1
  68. package/dist/{cli-x119kdba.js → cli-rdxm77k3.js} +1 -1
  69. package/dist/cli-rhs9pz33.js +294 -0
  70. package/dist/{cli-0p3enk35.js → cli-s69nfyeh.js} +9 -1
  71. package/dist/{cli-0kxf81jj.js → cli-sawv63e8.js} +2 -2
  72. package/dist/{cli-e3pmyt39.js → cli-sg19gbf0.js} +1 -1
  73. package/dist/{cli-d161g69q.js → cli-shk7r5cs.js} +57 -6
  74. package/dist/{cli-7pz3b7x5.js → cli-sksetb2q.js} +36 -1
  75. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  76. package/dist/{cli-db3m6zdt.js → cli-t02z59f2.js} +1 -1
  77. package/dist/{cli-b07hr3bt.js → cli-txqb9s38.js} +2 -2
  78. package/dist/{cli-s8z6x4b4.js → cli-v7g551te.js} +225 -113
  79. package/dist/{cli-rfz2ve55.js → cli-vgqzp4em.js} +3341 -955
  80. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  81. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  82. package/dist/cli-wfnemr1t.js +86 -0
  83. package/dist/cli-wmgrkscj.js +23254 -0
  84. package/dist/{cli-qm1448f9.js → cli-wms6x9db.js} +8 -8
  85. package/dist/{cli-tadfgd0t.js → cli-x1r545x8.js} +33 -4
  86. package/dist/{cli-xc7p7s3g.js → cli-xczsgshn.js} +6 -6
  87. package/dist/{cli-fmhj1ehj.js → cli-y3167wt1.js} +882 -271
  88. package/dist/{cli-r0byd61h.js → cli-yjmqpxt3.js} +17 -16
  89. package/dist/{cli-81r1wjyv.js → cli-z780ec7c.js} +1 -1
  90. package/dist/{cli-phcqp1b9.js → cli-zm9t2vde.js} +2 -2
  91. package/dist/cli.js +34 -49
  92. package/dist/{codex-adapter-r3dn4fp5.js → codex-adapter-4z16v9n0.js} +15 -14
  93. package/dist/{codex-login-841kv5fk.js → codex-login-pkepy2j1.js} +3 -2
  94. package/dist/{codex-session-runner-fwt793h4.js → codex-session-runner-rvms9y2x.js} +15 -14
  95. package/dist/{commands-z8fq9qna.js → commands-2a9rtyat.js} +11 -10
  96. package/dist/{controller-hq5ggpcp.js → controller-3k3madbn.js} +5 -4
  97. package/dist/{controllers-connect-3mf2btyj.js → controllers-connect-v9yn8zb9.js} +42 -37
  98. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-98gbhyzn.js} +7 -6
  99. package/dist/{db-qfpq4bt7.js → db-eywwsnjw.js} +30 -9
  100. package/dist/{db-yyhqqrbf.js → db-ncypk9np.js} +12 -11
  101. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-zeq8b9gz.js} +3 -2
  102. package/dist/{dispatcher-x0x7qfcq.js → dispatcher-w94kc575.js} +38 -33
  103. package/dist/{docker-f503k9p0.js → docker-b1e4cqab.js} +3 -2
  104. package/dist/{dsh-adapter-34etvb5m.js → dsh-adapter-47ztej36.js} +7 -6
  105. package/dist/{e2b-66xra4az.js → e2b-bbt8ey45.js} +4 -3
  106. package/dist/{e2b-xwhyj8cw.js → e2b-dp804sen.js} +4 -3
  107. package/dist/{event-bus-vjtv82gm.js → event-bus-j2jdg3qb.js} +3 -2
  108. package/dist/{external-channel-h1fjecwe.js → external-channel-zrkg8ar9.js} +11 -10
  109. package/dist/{google-generative-ai-szdxbpqg.js → google-generative-ai-g8db7x0f.js} +4 -2
  110. package/dist/{google-vertex-qzw3p36d.js → google-vertex-r2692q0r.js} +4 -2
  111. package/dist/{grok-adapter-e7mr287e.js → grok-adapter-s9ncp9vy.js} +18 -17
  112. package/dist/{handlers-znb9n7d4.js → handlers-kqftvjgw.js} +41 -36
  113. package/dist/{heartbeat-bm4qkn8d.js → heartbeat-9q96p8v9.js} +43 -38
  114. package/dist/{hook-254r4mza.js → hook-56qe10dp.js} +11 -23
  115. package/dist/{hook-xaa3q80s.js → hook-yy6rw42k.js} +12 -11
  116. package/dist/{http-3dgrgp8y.js → http-r2dnb8f8.js} +2411 -275
  117. package/dist/{index-fx3jqq1e.js → index-3gtmkhc6.js} +38 -33
  118. package/dist/{index-bdsqa799.js → index-3k5hkz7r.js} +43 -38
  119. package/dist/index-52j1aja4.js +3465 -0
  120. package/dist/{index-g2byveez.js → index-5e101240.js} +38 -33
  121. package/dist/{index-2ybk7khy.js → index-5wyfjc2c.js} +845 -683
  122. package/dist/index-9gw58n4k.js +193 -0
  123. package/dist/index-9j87mcm8.js +56305 -0
  124. package/dist/index-bsmcresk.js +79424 -0
  125. package/dist/index-mh85qhec.js +475 -0
  126. package/dist/{index-jd7sejm2.js → index-vxvhxxbn.js} +10 -9
  127. package/dist/index-we27kd31.js +12810 -0
  128. package/dist/{keepalive-6ywhpja1.js → keepalive-psj6j54c.js} +12 -11
  129. package/dist/{lead-cw45n21s.js → lead-hajz4688.js} +61 -56
  130. package/dist/{maintenance-ss1a1ge9.js → maintenance-ps02sb5m.js} +10 -9
  131. package/dist/{node-fkajaq96.js → node-mwb5r697.js} +2 -1
  132. package/dist/{oauth-refresh-sweep-3c6f8vyy.js → oauth-refresh-sweep-0284h93b.js} +11 -10
  133. package/dist/{onboard-8hzdhc1k.js → onboard-rbf6bg01.js} +11 -3
  134. package/dist/{opencode-adapter-qbchbcfz.js → opencode-adapter-13dcatgq.js} +18 -13
  135. package/dist/{otel-impl-e6mnvc4v.js → otel-impl-zvqcbhp7.js} +242 -868
  136. package/dist/{pi-mono-adapter-3c9g9snh.js → pi-mono-adapter-xxy47q4v.js} +244 -106
  137. package/dist/{pricing-refresh-gedkjdw0.js → pricing-refresh-kefx9v3t.js} +12 -11
  138. package/dist/{rbac-roles-dt4vh1yy.js → rbac-roles-3m36rxm2.js} +11 -10
  139. package/dist/{rbac-roles-eszdg6pm.js → rbac-roles-z76xv0hq.js} +12 -11
  140. package/dist/{render-v2-907cy6sa.js → render-v2-wz73bs25.js} +18 -14
  141. package/dist/{resume-42stcaz0.js → resume-k4wzge8w.js} +25 -21
  142. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  143. package/dist/{setup-adbc1c10.js → setup-2fp2pypp.js} +2 -2
  144. package/dist/{virtual-modules-rtmt494q.js → virtual-modules-9gkxqrap.js} +6 -5
  145. package/dist/{work-objects-wpj8ck95.js → work-objects-6k0ywz3m.js} +41 -36
  146. package/dist/{worker-bzdra9rf.js → worker-5v3rxsdh.js} +61 -56
  147. package/dist/{x-qfmygqqv.js → x-4mtdeym1.js} +3 -2
  148. package/openapi.json +1279 -329
  149. package/package.json +15 -15
  150. package/src/agentmail/handlers.ts +21 -11
  151. package/src/apps/definition.ts +16 -0
  152. package/src/azure-devops/api.ts +52 -2
  153. package/src/azure-devops/boards-sync.ts +50 -20
  154. package/src/azure-devops/index.ts +1 -0
  155. package/src/azure-devops/outbound.ts +95 -0
  156. package/src/be/boot-seeds.ts +11 -0
  157. package/src/be/config-refs.ts +60 -0
  158. package/src/be/db/model-profiles.ts +315 -0
  159. package/src/be/db/page-versions.ts +15 -0
  160. package/src/be/db/runtime.ts +35 -8
  161. package/src/be/db/skill-name-resolution.ts +36 -0
  162. package/src/be/db/tasks/read.ts +237 -0
  163. package/src/be/db/tasks/write.ts +7 -0
  164. package/src/be/db.ts +87 -36
  165. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  166. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  167. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  168. package/src/be/migrations/219_relabel_pi_context_compactions.sql +22 -0
  169. package/src/be/migrations/220_model_profiles.sql +137 -0
  170. package/src/be/model-catalog-store.ts +5 -1
  171. package/src/be/model-tier-resolution.ts +155 -10
  172. package/src/be/model-validation.ts +12 -2
  173. package/src/be/models-catalog.ts +26 -1
  174. package/src/be/modelsdev-cache.json +198 -63
  175. package/src/be/modelsdev-cache.ts +9 -1
  176. package/src/be/script-credential-broker.ts +39 -2
  177. package/src/be/scripts/run-saved.ts +1 -0
  178. package/src/be/scripts/typecheck.ts +22 -8
  179. package/src/be/secret-registry.ts +6 -2
  180. package/src/be/seed/runner.ts +13 -1
  181. package/src/be/seed/state-db.ts +5 -0
  182. package/src/be/seed/types.ts +6 -0
  183. package/src/be/seed-model-profiles.ts +41 -0
  184. package/src/be/seed-pricing.ts +19 -2
  185. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +368 -0
  186. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  187. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  188. package/src/be/seed-scripts/index.ts +9 -0
  189. package/src/be/seed-skills/bundled-files.generated.json +0 -18
  190. package/src/be/seed-skills/index.ts +104 -3
  191. package/src/be/swarm-config-guard.ts +53 -0
  192. package/src/cli.tsx +0 -16
  193. package/src/commands/onboard/non-interactive.ts +4 -2
  194. package/src/commands/provider-credentials.ts +52 -6
  195. package/src/commands/runner.ts +193 -71
  196. package/src/e2b/env.ts +5 -0
  197. package/src/extensions/catalog.generated.json +17 -0
  198. package/src/extensions/contract-types.generated.ts +1 -1
  199. package/src/extensions/contract.ts +45 -0
  200. package/src/extensions/dispatcher.ts +7 -0
  201. package/src/extensions/loader.ts +10 -5
  202. package/src/extensions/post-bridge.ts +40 -0
  203. package/src/github/handlers.ts +11 -4
  204. package/src/heartbeat/heartbeat.ts +2 -1
  205. package/src/heartbeat/templates.ts +8 -5
  206. package/src/hooks/hook.ts +0 -26
  207. package/src/http/agents.ts +49 -2
  208. package/src/http/all-routes.ts +1 -1
  209. package/src/http/apps.ts +30 -3
  210. package/src/http/config.ts +62 -19
  211. package/src/http/core.ts +8 -0
  212. package/src/http/index.ts +25 -3
  213. package/src/http/integrations.ts +88 -1
  214. package/src/http/mcp.ts +15 -5
  215. package/src/http/model-profiles.ts +303 -0
  216. package/src/http/page-proxy.ts +2 -4
  217. package/src/http/pages-public.ts +13 -7
  218. package/src/http/pages.ts +3 -13
  219. package/src/http/poll.ts +42 -71
  220. package/src/http/requested-by.ts +54 -0
  221. package/src/http/script-runs.ts +1 -1
  222. package/src/http/scripts.ts +26 -2
  223. package/src/http/stats.ts +1 -30
  224. package/src/http/tasks.ts +79 -5
  225. package/src/http/utils.ts +14 -0
  226. package/src/http/webhooks.ts +160 -3
  227. package/src/http/x.ts +1 -0
  228. package/src/integrations/chat-sdk/adapters.ts +129 -0
  229. package/src/integrations/chat-sdk/attachments.ts +232 -0
  230. package/src/integrations/chat-sdk/background.ts +36 -0
  231. package/src/integrations/chat-sdk/commands.ts +194 -0
  232. package/src/integrations/chat-sdk/config.ts +198 -0
  233. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  234. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  235. package/src/integrations/chat-sdk/handlers.ts +28 -0
  236. package/src/integrations/chat-sdk/inbound.ts +426 -0
  237. package/src/integrations/chat-sdk/limits.ts +48 -0
  238. package/src/integrations/chat-sdk/logger.ts +81 -0
  239. package/src/integrations/chat-sdk/outbound.ts +123 -0
  240. package/src/integrations/chat-sdk/relay.ts +172 -0
  241. package/src/integrations/chat-sdk/router.ts +169 -0
  242. package/src/integrations/chat-sdk/runtime.ts +351 -0
  243. package/src/integrations/chat-sdk/schema.ts +245 -0
  244. package/src/integrations/chat-sdk/state.ts +243 -0
  245. package/src/integrations/chat-sdk/status.ts +244 -0
  246. package/src/integrations/chat-sdk/steering.ts +58 -0
  247. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  248. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  249. package/src/integrations/chat-sdk/templates.ts +16 -0
  250. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  251. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  252. package/src/integrations/chat-sdk/typing.ts +65 -0
  253. package/src/{artifact-sdk → pages}/feedback-overlay.ts +65 -6
  254. package/src/pages/version.ts +4 -5
  255. package/src/prompts/base-prompt.ts +111 -45
  256. package/src/providers/acp-target-catalog.ts +6 -0
  257. package/src/providers/acp-targets.ts +56 -3
  258. package/src/providers/amp-adapter.ts +1 -1
  259. package/src/providers/claude-adapter.ts +1 -1
  260. package/src/providers/claude-flag-settings.ts +17 -5
  261. package/src/providers/claude-managed-adapter.ts +1 -1
  262. package/src/providers/claude-session-events.ts +6 -1
  263. package/src/providers/dsh-adapter.ts +1 -1
  264. package/src/providers/opencode-adapter.ts +243 -26
  265. package/src/providers/opencode-swarm-plugin.ts +31 -0
  266. package/src/providers/pi-mono-adapter.ts +398 -153
  267. package/src/providers/pi-mono-extension.ts +17 -3
  268. package/src/providers/pricing-sources.md +33 -2
  269. package/src/providers/reasoning-effort.ts +37 -0
  270. package/src/providers/types.ts +6 -2
  271. package/src/rbac/legacy-policy.ts +16 -2
  272. package/src/rbac/permissions.ts +26 -0
  273. package/src/scheduler/deferred-task-waits.ts +18 -5
  274. package/src/scheduler/scheduler.ts +11 -3
  275. package/src/scripts-runtime/executors/quickjs-prelude.ts +75 -6
  276. package/src/scripts-runtime/executors/quickjs-runner.ts +85 -8
  277. package/src/scripts-runtime/executors/quickjs-web-shims.ts +1041 -0
  278. package/src/scripts-runtime/extract-args-schema.ts +9 -8
  279. package/src/scripts-runtime/loader.ts +19 -7
  280. package/src/scripts-runtime/quickjs-compat.ts +464 -0
  281. package/src/scripts-runtime/sdk-allowlist.ts +12 -6
  282. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  283. package/src/scripts-runtime/types/stdlib.d.ts +39 -15
  284. package/src/scripts-runtime/types/swarm-extension.d.ts +66 -1
  285. package/src/scripts-runtime/types/swarm-sdk.d.ts +39 -15
  286. package/src/server.ts +62 -19
  287. package/src/slack/blocks.ts +4 -2
  288. package/src/slack/event-dedup.ts +1 -1
  289. package/src/slack/reaction-shortcode.ts +14 -0
  290. package/src/slack/render-v2.ts +12 -7
  291. package/src/slack/responses.ts +5 -4
  292. package/src/slack/thread-buffer.ts +41 -22
  293. package/src/tasks/additive-buffer.ts +4 -2
  294. package/src/tasks/context-key.ts +60 -1
  295. package/src/tasks/model-pin.ts +67 -0
  296. package/src/tasks/worker-follow-up.ts +15 -33
  297. package/src/tests/acp-adapter.test.ts +42 -0
  298. package/src/tests/agentmail-filters.test.ts +47 -0
  299. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  300. package/src/tests/apps-spike2.test.ts +35 -0
  301. package/src/tests/azure-devops-outbound.test.ts +420 -0
  302. package/src/tests/base-prompt.test.ts +58 -54
  303. package/src/tests/chat-sdk-commands.test.ts +191 -0
  304. package/src/tests/chat-sdk-config.test.ts +334 -0
  305. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  306. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  307. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  308. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  309. package/src/tests/chat-sdk-harness.ts +146 -0
  310. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  311. package/src/tests/chat-sdk-relay.test.ts +470 -0
  312. package/src/tests/chat-sdk-reload.test.ts +128 -0
  313. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  314. package/src/tests/chat-sdk-slack.test.ts +268 -0
  315. package/src/tests/chat-sdk-state.test.ts +163 -0
  316. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  317. package/src/tests/chat-sdk-teams.test.ts +277 -0
  318. package/src/tests/chat-sdk-tools.test.ts +520 -0
  319. package/src/tests/chat-sdk-typing.test.ts +120 -0
  320. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  321. package/src/tests/claude-adapter-binary.test.ts +9 -4
  322. package/src/tests/claude-flag-settings.test.ts +11 -3
  323. package/src/tests/claude-managed-adapter.test.ts +1 -1
  324. package/src/tests/claude-sdk-lifecycle.test.ts +9 -3
  325. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  326. package/src/tests/claude-worker-parity.test.ts +2 -7
  327. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  328. package/src/tests/config-refs.test.ts +66 -0
  329. package/src/tests/context-key.test.ts +19 -0
  330. package/src/tests/cors-allowlist.test.ts +25 -0
  331. package/src/tests/create-page-tool.test.ts +18 -0
  332. package/src/tests/credential-check.test.ts +139 -0
  333. package/src/tests/credentials.test.ts +21 -0
  334. package/src/tests/db-runtime.test.ts +61 -0
  335. package/src/tests/db-task-read-contract.test.ts +22 -0
  336. package/src/tests/db-task-write-contract.test.ts +11 -0
  337. package/src/tests/deferred-task-wake.test.ts +78 -1
  338. package/src/tests/docs-index-footprint.test.js +3 -3
  339. package/src/tests/dsh-adapter.test.ts +1 -1
  340. package/src/tests/enabled-capabilities.test.ts +20 -0
  341. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  342. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  343. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  344. package/src/tests/env-flag.test.ts +1 -0
  345. package/src/tests/explicit-model-validation.test.ts +105 -1
  346. package/src/tests/extensions-catalog.test.ts +1 -0
  347. package/src/tests/extensions-example-comms-adherence-gate.test.ts +413 -0
  348. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  349. package/src/tests/extensions-loader.test.ts +15 -0
  350. package/src/tests/extensions-post-bridge.test.ts +51 -0
  351. package/src/tests/fetch-resolved-env.test.ts +128 -0
  352. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  353. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  354. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  355. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  356. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  357. package/src/tests/github-handlers.test.ts +35 -0
  358. package/src/tests/harness-provider-resolution.test.ts +12 -0
  359. package/src/tests/heartbeat-checklist.test.ts +3 -2
  360. package/src/tests/heartbeat-jev-gate-credentials.test.ts +168 -0
  361. package/src/tests/heartbeat-jev-gate.test.ts +385 -0
  362. package/src/tests/hook-runtime-close.test.ts +0 -2
  363. package/src/tests/http-api-integration.test.ts +0 -25
  364. package/src/tests/migration-046-budgets.test.ts +17 -16
  365. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  366. package/src/tests/model-profile-backcompat.test.ts +327 -0
  367. package/src/tests/model-profile-providers.test.ts +302 -0
  368. package/src/tests/model-profile-runtime-secrets.test.ts +223 -0
  369. package/src/tests/model-profiles-api.test.ts +614 -0
  370. package/src/tests/model-tier-resolution.test.ts +93 -0
  371. package/src/tests/models-catalog.test.ts +42 -1
  372. package/src/tests/openai-compatible-providers.test.ts +134 -0
  373. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  374. package/src/tests/opencode-adapter.test.ts +216 -2
  375. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  376. package/src/tests/opencode-shell-env.test.ts +145 -0
  377. package/src/tests/openrouter-base-url.test.ts +101 -151
  378. package/src/tests/page-proxy.test.ts +1 -1
  379. package/src/tests/pages-browser-sdk.test.ts +76 -0
  380. package/src/tests/pages-feedback-keys.test.ts +121 -0
  381. package/src/tests/pages-feedback.test.ts +4 -1
  382. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  383. package/src/tests/pi-context-compaction.test.ts +193 -0
  384. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  385. package/src/tests/pi-mono-adapter.test.ts +385 -5
  386. package/src/tests/pi-shell-env.test.ts +170 -0
  387. package/src/tests/profile-claim.test.ts +269 -0
  388. package/src/tests/prompt-template-remaining.test.ts +35 -0
  389. package/src/tests/quickjs-compat.test.ts +213 -0
  390. package/src/tests/rbac-engine.test.ts +32 -3
  391. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  392. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  393. package/src/tests/script-connections.test.ts +6 -0
  394. package/src/tests/script-executor-conformance.test.ts +252 -1
  395. package/src/tests/script-executor-quickjs.test.ts +96 -0
  396. package/src/tests/script-runs-http.test.ts +89 -0
  397. package/src/tests/scripts-http.test.ts +217 -1
  398. package/src/tests/scripts-only-gating.test.ts +2 -3
  399. package/src/tests/scripts-runtime.test.ts +58 -40
  400. package/src/tests/secret-scrubber.test.ts +96 -0
  401. package/src/tests/seed-model-profiles.test.ts +174 -0
  402. package/src/tests/seed-scripts.test.ts +2 -2
  403. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  404. package/src/tests/seed-skills-retire.test.ts +182 -0
  405. package/src/tests/send-task-requester-gate.test.ts +58 -0
  406. package/src/tests/session-cost-recompute-unit.test.ts +46 -0
  407. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  408. package/src/tests/skill-invocations.test.ts +4 -2
  409. package/src/tests/slack-blocks.test.ts +36 -0
  410. package/src/tests/slack-inline-output.test.ts +14 -0
  411. package/src/tests/slack-reaction-config.test.ts +20 -0
  412. package/src/tests/slack-render-v2.test.ts +37 -0
  413. package/src/tests/slack-thread-buffer.test.ts +98 -1
  414. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  415. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  416. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  417. package/src/tests/swarm-diff.test.ts +1 -1
  418. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  419. package/src/tests/task-session-prompts.test.ts +132 -0
  420. package/src/tests/task-tool-manifest.test.ts +14 -0
  421. package/src/tests/task-tools-ctx.test.ts +2 -0
  422. package/src/tests/tool-annotations.test.ts +6 -6
  423. package/src/tests/ui-logs-parser.test.ts +43 -0
  424. package/src/tests/used-by-route.test.ts +6 -0
  425. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  426. package/src/tests/workflow-llm.test.ts +61 -0
  427. package/src/tests/workflow-swarm-script.test.ts +38 -0
  428. package/src/tests/workflow-wait-filter.test.ts +5 -3
  429. package/src/tools/chat-access.ts +41 -0
  430. package/src/tools/chat-open-dm.ts +59 -0
  431. package/src/tools/chat-post.ts +74 -0
  432. package/src/tools/chat-read-thread.ts +100 -0
  433. package/src/tools/chat-reply.ts +75 -0
  434. package/src/tools/create-page.ts +3 -13
  435. package/src/tools/model-catalog/index.ts +2 -1
  436. package/src/tools/model-profiles/list-model-profiles.ts +54 -0
  437. package/src/tools/register-chat-channel.ts +139 -0
  438. package/src/tools/request-human-input.ts +11 -3
  439. package/src/tools/script-apis.ts +5 -1
  440. package/src/tools/script-upsert.ts +4 -1
  441. package/src/tools/send-task.ts +48 -1
  442. package/src/tools/skills/skill-get.ts +17 -9
  443. package/src/tools/swarm-config/get-config.ts +2 -1
  444. package/src/tools/swarm-config/list-config.ts +2 -1
  445. package/src/tools/swarm-config/set-config.ts +16 -3
  446. package/src/tools/system-one-decide.ts +104 -0
  447. package/src/tools/task-action.ts +22 -1
  448. package/src/tools/tool-config.ts +14 -6
  449. package/src/types.ts +48 -3
  450. package/src/utils/config-env-export.ts +74 -0
  451. package/src/utils/credentials.test.ts +92 -0
  452. package/src/utils/credentials.ts +52 -4
  453. package/src/utils/harness-provider.ts +15 -6
  454. package/src/utils/runtime-model-catalog.ts +11 -1
  455. package/src/utils/secret-scrubber.ts +86 -10
  456. package/src/utils/task-tool-manifest.ts +19 -2
  457. package/src/utils/vcs-repo-match.ts +29 -0
  458. package/src/workflows/executors/raw-llm.ts +8 -3
  459. package/src/workflows/executors/swarm-script.ts +1 -0
  460. package/src/workflows/executors/system-one-decision.ts +21 -11
  461. package/src/workflows/executors/workflow-llm.ts +22 -0
  462. package/src/workflows/index.ts +21 -12
  463. package/templates/extensions/README.md +1 -0
  464. package/templates/extensions/comms-adherence-gate/README.md +88 -0
  465. package/templates/extensions/comms-adherence-gate/hooks.ts +489 -0
  466. package/templates/extensions/comms-adherence-gate/manifest.json +8 -0
  467. package/templates/skills/agent-browser/SKILL.md +1 -1
  468. package/templates/skills/agent-browser/content.md +1 -1
  469. package/templates/skills/apps/SKILL.md +8 -1
  470. package/templates/skills/apps/content.md +8 -1
  471. package/templates/skills/chat-sdk/config.json +14 -0
  472. package/templates/skills/chat-sdk/content.md +84 -0
  473. package/templates/skills/composio-gmail/content.md +7 -0
  474. package/templates/skills/composio-google-docs/content.md +1 -1
  475. package/templates/skills/email-domain-health/config.json +14 -0
  476. package/templates/skills/email-domain-health/content.md +131 -0
  477. package/templates/skills/kv-storage/content.md +2 -2
  478. package/templates/skills/pages/content.md +8 -10
  479. package/templates/skills/swarm-extensions/content.md +2 -0
  480. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  481. package/templates/skills/swarm-scripts/config.json +1 -1
  482. package/templates/skills/swarm-scripts/content.md +4 -2
  483. package/templates/skills/workflow-iterate/content.md +38 -0
  484. package/dist/artifact-eczsknc3.js +0 -3843
  485. package/dist/cli-42qhyvwx.js +0 -33
  486. package/dist/cli-bd957dgb.js +0 -153
  487. package/dist/cli-q51yprfq.js +0 -1104
  488. package/dist/cli-t1ze64h3.js +0 -811
  489. package/dist/cli-tcc4wd5d.js +0 -56471
  490. package/dist/index-9ch1n761.js +0 -1102
  491. package/src/artifact-sdk/index.ts +0 -2
  492. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  493. package/src/artifact-sdk/port.ts +0 -12
  494. package/src/artifact-sdk/server.ts +0 -183
  495. package/src/artifact-sdk/tunnel.ts +0 -19
  496. package/src/commands/artifact.ts +0 -249
  497. package/src/http/ecosystem.ts +0 -77
  498. package/src/tests/artifact-commands.test.ts +0 -92
  499. package/src/tests/artifact-sdk.test.ts +0 -793
  500. package/src/tests/register-service-security.test.ts +0 -194
  501. package/src/tools/list-services.ts +0 -107
  502. package/src/tools/register-service.ts +0 -177
  503. package/src/tools/unregister-service.ts +0 -73
  504. package/src/tools/update-service-status.ts +0 -96
  505. package/templates/skills/artifacts/config.json +0 -14
  506. package/templates/skills/artifacts/content.md +0 -344
  507. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  508. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  509. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  510. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  511. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
@@ -12,7 +12,7 @@ import {
12
12
  generateRandomCodeVerifier,
13
13
  generateRandomState,
14
14
  oauthAppRowToProviderConfig
15
- } from "./cli-w1apjecb.js";
15
+ } from "./cli-711vwbxn.js";
16
16
  import {
17
17
  CredentialBroker,
18
18
  DEFAULT_CREDENTIAL_BINDINGS,
@@ -36,6 +36,9 @@ import {
36
36
  init_oauth,
37
37
  init_quickjs_pool_config,
38
38
  init_secret_registry,
39
+ init_swarm_config_guard,
40
+ isApiOnlyConfigKey,
41
+ isInternalConfigKey,
39
42
  normalizeDateRequired,
40
43
  oauthSecretName,
41
44
  placeholderForConfigKey,
@@ -46,11 +49,11 @@ import {
46
49
  updateAuthorizationTokens,
47
50
  upsertAuthorization,
48
51
  upsertSwarmConfig
49
- } from "./cli-fmhj1ehj.js";
52
+ } from "./cli-y3167wt1.js";
50
53
  import {
51
54
  defaultAssetKey,
52
55
  init_key
53
- } from "./cli-hsem16hb.js";
56
+ } from "./cli-pe05f8yk.js";
54
57
  import {
55
58
  init_zod
56
59
  } from "./cli-sd0mxa3c.js";
@@ -73,6 +76,10 @@ import {
73
76
  init_node_env,
74
77
  isDevOrTestNodeEnv
75
78
  } from "./cli-p0sg24zp.js";
79
+ import {
80
+ getMcpBaseUrl,
81
+ init_constants
82
+ } from "./cli-gd4favx9.js";
76
83
  import {
77
84
  init_env_flag,
78
85
  isEnvFlagEnabled
@@ -82,12 +89,13 @@ import {
82
89
  init_api_key
83
90
  } from "./cli-a1b9b32n.js";
84
91
  import {
92
+ createValueScrubber,
85
93
  init_secret_scrubber,
86
94
  refreshSecretScrubberCache,
87
95
  registerVolatileSecret,
88
96
  scrubObject,
89
97
  scrubSecrets
90
- } from "./cli-d161g69q.js";
98
+ } from "./cli-shk7r5cs.js";
91
99
  import {
92
100
  __commonJS,
93
101
  __require,
@@ -175188,6 +175196,7 @@ var require_dist = __commonJS(function(exports) {
175188
175196
 
175189
175197
  // src/scripts-runtime/loader.ts
175190
175198
  init_api_key();
175199
+ init_constants();
175191
175200
  init_secret_scrubber();
175192
175201
 
175193
175202
  // src/scripts-runtime/egress-secrets.ts
@@ -175784,7 +175793,7 @@ async function buildConfigPayload(input) {
175784
175793
  apiKey: { value: apiKey, isSecret: true },
175785
175794
  agentId: { value: input.agentId, isSecret: false },
175786
175795
  mcpBaseUrl: {
175787
- value: input.mcpBaseUrl ?? process.env.MCP_BASE_URL ?? "http://localhost:3013",
175796
+ value: input.mcpBaseUrl ?? getMcpBaseUrl(),
175788
175797
  isSecret: false
175789
175798
  },
175790
175799
  ...input.runtimeInstanceId ? { runtimeInstanceId: { value: input.runtimeInstanceId, isSecret: false } } : {}
@@ -175808,12 +175817,13 @@ async function runScript(input) {
175808
175817
  error: "executor_error"
175809
175818
  };
175810
175819
  }
175820
+ const runSecrets = createValueScrubber(Object.entries(input.userConfig ?? {}).filter(([, entry]) => entry.isSecret).map(([key, entry]) => ({ value: entry.value, name: `config:${key}` })));
175811
175821
  const imports = validateScriptImports(input.source);
175812
175822
  if (!imports.ok) {
175813
175823
  return {
175814
175824
  result: undefined,
175815
175825
  stdout: "",
175816
- stderr: imports.diagnostic,
175826
+ stderr: scrubSecrets(runSecrets.text(imports.diagnostic)),
175817
175827
  truncated: { stdout: false, stderr: false },
175818
175828
  durationMs: 0,
175819
175829
  exitCode: 1,
@@ -175844,10 +175854,10 @@ async function runScript(input) {
175844
175854
  }
175845
175855
  return {
175846
175856
  ...output,
175847
- result: scrubObject(output.result),
175848
- stdout: scrubSecrets(output.stdout),
175849
- stderr: scrubSecrets(output.stderr),
175850
- ...output.runtimeError ? { runtimeError: scrubObject(output.runtimeError) } : {}
175857
+ result: scrubObject(runSecrets.object(output.result)),
175858
+ stdout: scrubSecrets(runSecrets.text(output.stdout)),
175859
+ stderr: scrubSecrets(runSecrets.text(output.stderr)),
175860
+ ...output.runtimeError ? { runtimeError: scrubObject(runSecrets.object(output.runtimeError)) } : {}
175851
175861
  };
175852
175862
  }
175853
175863
 
@@ -178361,13 +178371,25 @@ async function resolveOAuthBindingToken(oauthAuthorizationId) {
178361
178371
  }
178362
178372
 
178363
178373
  // src/be/script-credential-broker.ts
178374
+ init_swarm_config_guard();
178375
+
178364
178376
  class RelationalCredentialBindingStore {
178365
178377
  listActiveBindings(context) {
178366
178378
  return listRelationalCredentialBindings(context);
178367
178379
  }
178368
178380
  }
178381
+ function toScriptUserConfig(configs) {
178382
+ const exposed = configs.filter((config) => !isApiOnlyConfigKey(config.key) && !isInternalConfigKey(config.key));
178383
+ for (const config of exposed) {
178384
+ if (config.isSecret && config.value) {
178385
+ registerVolatileSecret(config.value, `config:${config.key}`);
178386
+ }
178387
+ }
178388
+ return Object.fromEntries(exposed.map((config) => [config.key, { value: config.value, isSecret: config.isSecret }]));
178389
+ }
178369
178390
  async function buildScriptCredentialBindingsWithFailures(input) {
178370
178391
  const resolvedConfigs = await getResolvedConfig(input.agentId, input.repoId);
178392
+ const userConfig = toScriptUserConfig(resolvedConfigs);
178371
178393
  const configMap = new Map(resolvedConfigs.map((config) => [config.key, config.value]));
178372
178394
  const broker = new CredentialBroker(new RelationalCredentialBindingStore, (configKey) => configMap.get(configKey) ?? process.env[configKey], DEFAULT_CREDENTIAL_BINDINGS, (oauthAuthorizationId) => resolveOAuthBindingToken(oauthAuthorizationId));
178373
178395
  const { resolved, failed } = await broker.resolveBindingsWithFailures({
@@ -178377,10 +178399,11 @@ async function buildScriptCredentialBindingsWithFailures(input) {
178377
178399
  for (const binding of resolved) {
178378
178400
  registerVolatileSecret(binding.value, binding.configKey);
178379
178401
  }
178380
- return { egressSecrets: resolved, failedBindings: failed };
178381
- }
178382
- async function buildScriptCredentialBindings(input) {
178383
- return (await buildScriptCredentialBindingsWithFailures(input)).egressSecrets;
178402
+ return {
178403
+ egressSecrets: resolved,
178404
+ failedBindings: failed,
178405
+ userConfig
178406
+ };
178384
178407
  }
178385
178408
 
178386
178409
  // src/be/scripts/run-saved.ts
@@ -178407,6 +178430,7 @@ async function runSavedScriptAsAgent(args, deps = {}) {
178407
178430
  agentId: args.agentId,
178408
178431
  egressSecrets: credentials.egressSecrets,
178409
178432
  failedBindings: credentials.failedBindings,
178433
+ userConfig: credentials.userConfig,
178410
178434
  apiConnections: getScriptApiConnectionDescriptors({ agentId: args.agentId }),
178411
178435
  mcpConnections: getScriptMcpConnectionDescriptors({ agentId: args.agentId }),
178412
178436
  ...args.timeoutMs ? { timeoutMs: args.timeoutMs } : {},
@@ -178525,12 +178549,312 @@ async function extractArgsJsonSchema(source) {
178525
178549
  }
178526
178550
 
178527
178551
  // src/be/scripts/typecheck.ts
178528
- var import_typescript3 = __toESM(require_typescript(), 1);
178552
+ var import_typescript4 = __toESM(require_typescript(), 1);
178529
178553
  import { fileURLToPath as fileURLToPath3 } from "node:url";
178530
178554
 
178531
178555
  // src/apps/definition.ts
178532
178556
  init_zod();
178533
178557
  init_db();
178558
+
178559
+ // src/scripts-runtime/quickjs-compat.ts
178560
+ var import_typescript3 = __toESM(require_typescript(), 1);
178561
+ var UNSUPPORTED_GLOBALS = new Set([
178562
+ "AbortController",
178563
+ "AbortSignal",
178564
+ "Blob",
178565
+ "Buffer",
178566
+ "Event",
178567
+ "EventTarget",
178568
+ "File",
178569
+ "FormData",
178570
+ "Intl",
178571
+ "ReadableStream",
178572
+ "Request",
178573
+ "TransformStream",
178574
+ "WebSocket",
178575
+ "WritableStream",
178576
+ "clearImmediate",
178577
+ "navigator",
178578
+ "performance",
178579
+ "queueMicrotask",
178580
+ "setImmediate",
178581
+ "structuredClone"
178582
+ ]);
178583
+ var RESPONSE_BODY_METHODS = new Set(["arrayBuffer", "blob", "formData", "bytes"]);
178584
+ var LOCALE_METHODS = new Set(["toLocaleString", "toLocaleDateString", "toLocaleTimeString"]);
178585
+ var FS_STDLIB = new Set(["glob", "grep"]);
178586
+ var HOST_ONLY_CONFIG = new Set(["apiKey", "runtimeInstanceId"]);
178587
+ var MAX_FINDINGS = 20;
178588
+ var SCRIPT_FILE = "user-script.ts";
178589
+ var MAX_CONST_DEPTH = 4;
178590
+ function isAmbient(node) {
178591
+ for (let current = node;current; current = current.parent) {
178592
+ if (import_typescript3.default.canHaveModifiers(current) && import_typescript3.default.getModifiers(current)?.some((modifier) => modifier.kind === import_typescript3.default.SyntaxKind.DeclareKeyword)) {
178593
+ return true;
178594
+ }
178595
+ }
178596
+ return false;
178597
+ }
178598
+ function createScope(source) {
178599
+ const sourceFile = import_typescript3.default.createSourceFile(SCRIPT_FILE, source, import_typescript3.default.ScriptTarget.Latest, true);
178600
+ const host = {
178601
+ getSourceFile: (name) => name === SCRIPT_FILE ? sourceFile : undefined,
178602
+ getDefaultLibFileName: () => "lib.d.ts",
178603
+ writeFile: () => {},
178604
+ getCurrentDirectory: () => "/",
178605
+ getCanonicalFileName: (name) => name,
178606
+ useCaseSensitiveFileNames: () => true,
178607
+ getNewLine: () => `
178608
+ `,
178609
+ fileExists: (name) => name === SCRIPT_FILE,
178610
+ readFile: () => {
178611
+ return;
178612
+ }
178613
+ };
178614
+ const program = import_typescript3.default.createProgram({
178615
+ rootNames: [SCRIPT_FILE],
178616
+ options: { noLib: true, noResolve: true, types: [], target: import_typescript3.default.ScriptTarget.Latest },
178617
+ host
178618
+ });
178619
+ const checker = program.getTypeChecker();
178620
+ const isLocal = (node) => {
178621
+ const symbol = import_typescript3.default.isShorthandPropertyAssignment(node.parent) && node.parent.name === node ? checker.getShorthandAssignmentValueSymbol(node.parent) : checker.getSymbolAtLocation(node);
178622
+ return Boolean(symbol?.declarations?.some((declaration) => declaration.getSourceFile() === sourceFile && !isAmbient(declaration)));
178623
+ };
178624
+ const constInitializer = (node) => {
178625
+ const declaration = checker.getSymbolAtLocation(node)?.valueDeclaration;
178626
+ if (!declaration || !import_typescript3.default.isVariableDeclaration(declaration) || !declaration.initializer) {
178627
+ return null;
178628
+ }
178629
+ return import_typescript3.default.getCombinedNodeFlags(declaration) & import_typescript3.default.NodeFlags.Const ? declaration.initializer : null;
178630
+ };
178631
+ return { sourceFile, isLocal, constInitializer };
178632
+ }
178633
+ function isValueReference(node) {
178634
+ const parent = node.parent;
178635
+ if (import_typescript3.default.isPropertyAccessExpression(parent) && parent.name === node)
178636
+ return false;
178637
+ if (import_typescript3.default.isShorthandPropertyAssignment(parent))
178638
+ return true;
178639
+ if ("name" in parent && parent.name === node)
178640
+ return false;
178641
+ if (import_typescript3.default.isTypeOfExpression(parent))
178642
+ return false;
178643
+ return true;
178644
+ }
178645
+ function isTypeOnly(node) {
178646
+ return import_typescript3.default.isTypeNode(node) || import_typescript3.default.isInterfaceDeclaration(node) || import_typescript3.default.isTypeAliasDeclaration(node) || import_typescript3.default.isImportDeclaration(node) && Boolean(node.importClause?.isTypeOnly);
178647
+ }
178648
+ function stdlibImportNames(node) {
178649
+ if (!import_typescript3.default.isStringLiteral(node.moduleSpecifier) || node.moduleSpecifier.text !== "stdlib")
178650
+ return [];
178651
+ const bindings = node.importClause?.namedBindings;
178652
+ if (!bindings || !import_typescript3.default.isNamedImports(bindings))
178653
+ return [];
178654
+ return bindings.elements.map((element) => (element.propertyName ?? element.name).text).filter((name) => FS_STDLIB.has(name));
178655
+ }
178656
+ function unwrap(node) {
178657
+ let current = node;
178658
+ while (import_typescript3.default.isParenthesizedExpression(current) || import_typescript3.default.isAsExpression(current) || import_typescript3.default.isNonNullExpression(current) || import_typescript3.default.isTypeAssertionExpression(current) || import_typescript3.default.isSatisfiesExpression(current)) {
178659
+ current = current.expression;
178660
+ }
178661
+ return current;
178662
+ }
178663
+ function isGlobalThis(node) {
178664
+ const inner = unwrap(node);
178665
+ return import_typescript3.default.isIdentifier(inner) && inner.text === "globalThis";
178666
+ }
178667
+ function globalName(node, isLocal) {
178668
+ const inner = unwrap(node);
178669
+ if (import_typescript3.default.isIdentifier(inner))
178670
+ return isLocal(inner) ? null : inner.text;
178671
+ if (import_typescript3.default.isPropertyAccessExpression(inner) && isGlobalThis(inner.expression)) {
178672
+ return inner.name.text;
178673
+ }
178674
+ return null;
178675
+ }
178676
+ function isPrivateIPv42([a = 0, b = 0, c = 0]) {
178677
+ return a === 0 || a === 10 || a === 127 || a === 100 && b >= 64 && b <= 127 || a === 169 && b === 254 || a === 172 && b >= 16 && b <= 31 || a === 192 && b === 168 || a === 192 && b === 0 && c === 0 || a === 198 && (b === 18 || b === 19) || a >= 224;
178678
+ }
178679
+ function isPrivateIPv62(text) {
178680
+ const [head = "", tail = ""] = text.split("::");
178681
+ const left = head ? head.split(":") : [];
178682
+ const right = text.includes("::") && tail ? tail.split(":") : [];
178683
+ const fill = text.includes("::") ? 8 - left.length - right.length : 0;
178684
+ const g = [...left, ...Array(fill).fill("0"), ...right].map((part) => parseInt(part, 16));
178685
+ const g0 = g[0] ?? 0;
178686
+ if (g.slice(0, 6).every((part) => part === 0))
178687
+ return true;
178688
+ if (g.slice(0, 5).every((part) => part === 0) && g[5] === 65535) {
178689
+ const [g6 = 0, g7 = 0] = g.slice(6);
178690
+ return isPrivateIPv42([g6 >> 8, g6 & 255, g7 >> 8]);
178691
+ }
178692
+ return (g0 & 65024) === 64512 || (g0 & 65472) === 65152 || (g0 & 65472) === 65216 || (g0 & 65280) === 65280;
178693
+ }
178694
+ function staticHostClass(hostname) {
178695
+ const host = hostname.toLowerCase().replace(/\.$/, "");
178696
+ if (host === "localhost" || host.endsWith(".localhost"))
178697
+ return "private";
178698
+ if (host.startsWith("["))
178699
+ return isPrivateIPv62(host.slice(1, -1)) ? "private" : null;
178700
+ const v4 = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.exec(host);
178701
+ if (v4)
178702
+ return isPrivateIPv42(v4.slice(1).map(Number)) ? "private" : null;
178703
+ return host !== "" && !host.includes(".") ? "single-label" : null;
178704
+ }
178705
+ function fetchCallName(callee) {
178706
+ const inner = unwrap(callee);
178707
+ if (import_typescript3.default.isIdentifier(inner)) {
178708
+ return inner.text === "fetch" || inner.text === "fetchJson" ? inner.text : null;
178709
+ }
178710
+ if (!import_typescript3.default.isPropertyAccessExpression(inner))
178711
+ return null;
178712
+ const method = inner.name.text;
178713
+ if (method !== "fetch" && method !== "fetchJson")
178714
+ return null;
178715
+ const owner = unwrap(inner.expression);
178716
+ if (method === "fetch" && isGlobalThis(owner))
178717
+ return "fetch";
178718
+ const ownerName = import_typescript3.default.isIdentifier(owner) ? owner.text : import_typescript3.default.isPropertyAccessExpression(owner) ? owner.name.text : null;
178719
+ return ownerName === "stdlib" ? `ctx.stdlib.${method}` : null;
178720
+ }
178721
+ function staticPrefix(node, resolve, depth = 0) {
178722
+ const inner = unwrap(node);
178723
+ if (import_typescript3.default.isStringLiteral(inner) || import_typescript3.default.isNoSubstitutionTemplateLiteral(inner)) {
178724
+ return { text: inner.text, cut: false };
178725
+ }
178726
+ if (import_typescript3.default.isIdentifier(inner)) {
178727
+ const initializer = depth < MAX_CONST_DEPTH ? resolve(inner) : null;
178728
+ return initializer ? staticPrefix(initializer, resolve, depth + 1) : null;
178729
+ }
178730
+ if (import_typescript3.default.isTemplateExpression(inner)) {
178731
+ let text = inner.head.text;
178732
+ let boundary = false;
178733
+ for (const span of inner.templateSpans) {
178734
+ const part = staticPrefix(span.expression, resolve, depth);
178735
+ if (part === null)
178736
+ return { text, cut: !boundary || text === "" };
178737
+ if (part.cut)
178738
+ return { text: text + part.text, cut: true };
178739
+ text += part.text + span.literal.text;
178740
+ boundary = span.literal.text === "";
178741
+ }
178742
+ return { text, cut: false };
178743
+ }
178744
+ if (import_typescript3.default.isBinaryExpression(inner) && inner.operatorToken.kind === import_typescript3.default.SyntaxKind.PlusToken) {
178745
+ const left = staticPrefix(inner.left, resolve, depth);
178746
+ if (left === null || left.cut)
178747
+ return left;
178748
+ const right = staticPrefix(inner.right, resolve, depth);
178749
+ if (right === null)
178750
+ return { text: left.text, cut: !import_typescript3.default.isIdentifier(unwrap(inner.left)) };
178751
+ return { text: left.text + right.text, cut: right.cut };
178752
+ }
178753
+ return null;
178754
+ }
178755
+ function literalUrl(arg, resolve) {
178756
+ if (!arg)
178757
+ return null;
178758
+ const prefix = staticPrefix(arg, resolve);
178759
+ if (!prefix)
178760
+ return null;
178761
+ if (prefix.cut && !/^[a-z][a-z0-9+.-]*:\/\/[^/?#]*[/?#]/i.test(prefix.text))
178762
+ return null;
178763
+ try {
178764
+ return new URL(prefix.text);
178765
+ } catch {
178766
+ return null;
178767
+ }
178768
+ }
178769
+ function checkQuickJSCompat(source, options = {}) {
178770
+ const findings = [];
178771
+ const seen = new Set;
178772
+ const { sourceFile, isLocal, constInitializer } = createScope(source);
178773
+ const add = (rule, message, node) => {
178774
+ if (seen.has(`${rule}:${message}`))
178775
+ return;
178776
+ seen.add(`${rule}:${message}`);
178777
+ const line = node ? sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1 : undefined;
178778
+ findings.push(line === undefined ? { rule, message } : { rule, message, line });
178779
+ };
178780
+ if (options.fsMode === "workspace-rw") {
178781
+ add("workspaceRw", "fsMode workspace-rw is not available under quickjs");
178782
+ }
178783
+ const reportGlobal = (name, node) => {
178784
+ if (name === "Bun")
178785
+ add("bunGlobal", "Bun.* is not available under quickjs", node);
178786
+ else if (name === "process")
178787
+ add("process", "process is not available under quickjs", node);
178788
+ else if (UNSUPPORTED_GLOBALS.has(name)) {
178789
+ add("unsupportedGlobal", `${name} is not available under quickjs`, node);
178790
+ }
178791
+ };
178792
+ const visit = (node) => {
178793
+ if (isTypeOnly(node))
178794
+ return;
178795
+ if (import_typescript3.default.isIdentifier(node) && (node.text === "Bun" || node.text === "process" || UNSUPPORTED_GLOBALS.has(node.text)) && isValueReference(node) && !isLocal(node)) {
178796
+ reportGlobal(node.text, node);
178797
+ }
178798
+ if (import_typescript3.default.isPropertyAccessExpression(node)) {
178799
+ const member = node.name.text;
178800
+ const owner = globalName(node.expression, isLocal);
178801
+ if (isGlobalThis(node.expression) && !import_typescript3.default.isTypeOfExpression(node.parent)) {
178802
+ reportGlobal(member, node);
178803
+ }
178804
+ const parent = unwrap(node.expression);
178805
+ if (HOST_ONLY_CONFIG.has(member) && import_typescript3.default.isPropertyAccessExpression(parent) && parent.name.text === "config") {
178806
+ add("hostCredential", `ctx.swarm.config.${member} is host-only under quickjs; ctx.swarm calls use it for you`, node);
178807
+ }
178808
+ if (member === "subtle" && owner === "crypto") {
178809
+ add("cryptoSubtle", "crypto.subtle is not available under quickjs", node);
178810
+ }
178811
+ if (FS_STDLIB.has(member) && import_typescript3.default.isPropertyAccessExpression(unwrap(node.expression)) && unwrap(node.expression).name.text === "stdlib") {
178812
+ add("fsStdlib", `ctx.stdlib.${member} needs filesystem access, which quickjs lacks`, node);
178813
+ }
178814
+ }
178815
+ if (import_typescript3.default.isImportDeclaration(node)) {
178816
+ for (const name of stdlibImportNames(node)) {
178817
+ add("fsStdlib", `stdlib ${name} needs filesystem access, which quickjs lacks`, node);
178818
+ }
178819
+ }
178820
+ if (import_typescript3.default.isVariableDeclaration(node) && import_typescript3.default.isObjectBindingPattern(node.name) && node.initializer && import_typescript3.default.isPropertyAccessExpression(node.initializer) && node.initializer.name.text === "stdlib") {
178821
+ for (const element of node.name.elements) {
178822
+ const name = (element.propertyName ?? element.name).getText(sourceFile);
178823
+ if (FS_STDLIB.has(name)) {
178824
+ add("fsStdlib", `ctx.stdlib.${name} needs filesystem access, which quickjs lacks`, node);
178825
+ }
178826
+ }
178827
+ }
178828
+ if (import_typescript3.default.isCallExpression(node)) {
178829
+ const callee = node.expression;
178830
+ const fetchName = fetchCallName(callee);
178831
+ const url = fetchName ? literalUrl(node.arguments[0], constInitializer) : null;
178832
+ const hostClass = url && (url.protocol === "http:" || url.protocol === "https:") ? staticHostClass(url.hostname) : null;
178833
+ if (url && hostClass) {
178834
+ add("privateHost", `${fetchName} to ${url.host} (${hostClass} host) depends on the egress policy: quickjs refuses private hosts unless the operator allows them`, node);
178835
+ }
178836
+ if (import_typescript3.default.isIdentifier(callee) && callee.text === "require" && !isLocal(callee)) {
178837
+ add("require", "require() is not supported; use an import", node);
178838
+ }
178839
+ if (import_typescript3.default.isPropertyAccessExpression(callee)) {
178840
+ const method = callee.name.text;
178841
+ if (RESPONSE_BODY_METHODS.has(method) && node.arguments.length === 0) {
178842
+ add("responseBody", `.${method}() on a fetch Response is not available under quickjs (text() and json() are)`, node);
178843
+ }
178844
+ if (LOCALE_METHODS.has(method) && node.arguments.length > 0) {
178845
+ add("localeFormat", `${method}(locale, options) ignores its arguments under quickjs (no Intl)`, node);
178846
+ }
178847
+ }
178848
+ }
178849
+ import_typescript3.default.forEachChild(node, visit);
178850
+ };
178851
+ visit(sourceFile);
178852
+ return { compatible: findings.length === 0, findings: findings.slice(0, MAX_FINDINGS) };
178853
+ }
178854
+ function quickJSCompatWarnings(report, label) {
178855
+ const prefix = label ? `${label}: ` : "";
178856
+ return report.findings.map((finding) => `${prefix}quickjs compat (${finding.rule}${finding.line ? `, line ${finding.line}` : ""}): ${finding.message}`);
178857
+ }
178534
178858
  // src/apps/catalog.generated.json
178535
178859
  var catalog_generated_default = {
178536
178860
  $comment: "GENERATED by apps/ui/scripts/generate-catalog-schema.ts — do not hand-edit. Regenerate with `cd apps/ui && bun run generate:catalog-schema`.",
@@ -182583,6 +182907,17 @@ function collectScriptReferences(definition) {
182583
182907
  }
182584
182908
  return references;
182585
182909
  }
182910
+ async function scriptCompatWarnings(definition) {
182911
+ const warnings = [];
182912
+ for (const [scriptId, paths] of collectScriptReferences(definition)) {
182913
+ const script = await getScriptById(scriptId);
182914
+ if (!script)
182915
+ continue;
182916
+ const report = checkQuickJSCompat(script.source, { fsMode: script.fsMode });
182917
+ warnings.push(...quickJSCompatWarnings(report, paths.join(", ")));
182918
+ }
182919
+ return warnings;
182920
+ }
182586
182921
  function foreignScriptForWriter(context, script) {
182587
182922
  if (script.scope !== "agent")
182588
182923
  return false;
@@ -183514,13 +183849,15 @@ export interface SwarmSdk {
183514
183849
  // --- config ---
183515
183850
  config_get(args?: { agentId?: string; repoId?: string; key?: string; includeSecrets?: boolean }): Promise<unknown>;
183516
183851
  config_list(args?: { scope?: "global" | "agent" | "repo"; scopeId?: string; key?: string; includeSecrets?: boolean }): Promise<unknown>;
183852
+ // --- model profiles ---
183853
+ modelProfile_list(args?: { harness?: string }): Promise<unknown>;
183517
183854
  // --- slack ---
183518
183855
  slack_read(args?: { inboxMessageId?: string; taskId?: string; channelId?: string; threadTs?: string; limit?: number; includeFiles?: boolean }): Promise<unknown>;
183519
183856
  slack_listChannels(args?: { types?: Array<"public" | "private" | "dm" | "mpim">; limit?: number }): Promise<unknown>;
183857
+ // --- chat sdk ---
183858
+ chat_readThread(args: { threadId: string; limit?: number }): Promise<unknown>;
183520
183859
  // --- messaging ---
183521
183860
  message_read(args?: { channel?: string; limit?: number; since?: string; unreadOnly?: boolean; mentionsOnly?: boolean; markAsRead?: boolean }): Promise<unknown>;
183522
- // --- services ---
183523
- service_list(args?: { agentId?: string; name?: string; status?: "starting" | "healthy" | "unhealthy" | "stopped"; includeOwn?: boolean }): Promise<unknown>;
183524
183861
  // --- context / profiles ---
183525
183862
  context_history(args?: { agentId?: string; field?: "soulMd" | "identityMd" | "toolsMd" | "claudeMd" | "setupScript"; limit?: number }): Promise<unknown>;
183526
183863
  context_diff(args: { versionId: string; compareToVersionId?: string }): Promise<unknown>;
@@ -183563,7 +183900,7 @@ export interface SwarmSdk {
183563
183900
  task_action(args: Record<string, unknown>): Promise<unknown>;
183564
183901
 
183565
183902
  // --- write: config ---
183566
- config_set(args: { key: string; value: unknown; scope?: "global" | "agent" | "repo"; scopeId?: string; isSecret?: boolean }): Promise<unknown>;
183903
+ config_set(args: { key: string; value: unknown; scope?: "global" | "agent" | "repo"; scopeId?: string; isSecret?: boolean; exportToEnv?: boolean }): Promise<unknown>;
183567
183904
  config_delete(args: { id: string }): Promise<unknown>;
183568
183905
 
183569
183906
  // --- write: model catalog ---
@@ -183593,17 +183930,19 @@ export interface SwarmSdk {
183593
183930
  slack_delete(args: { channelId: string; messageTs: string }): Promise<unknown>;
183594
183931
  slack_update(args: { channelId: string; messageTs: string; message: string }): Promise<unknown>;
183595
183932
 
183933
+ // --- write: chat sdk ---
183934
+ chat_reply(args: { text: string }): Promise<unknown>;
183935
+ chat_post(args: { adapter: "telegram" | "slack" | "discord" | "teams"; threadId?: string; channelId?: string; text: string }): Promise<unknown>;
183936
+ chat_openDm(args: { adapter: "telegram" | "slack" | "discord" | "teams"; userId: string }): Promise<unknown>;
183937
+ chat_registerChannel(args: { adapter: "telegram" | "slack" | "discord" | "teams"; channelId: string; agentId?: string; workflowId?: string; name?: string }): Promise<unknown>;
183938
+ chat_unregisterChannel(args: { adapter: "telegram" | "slack" | "discord" | "teams"; channelId: string }): Promise<unknown>;
183939
+
183596
183940
  // --- write: messaging (internal) ---
183597
183941
  message_post(args: { channel?: string; content: string; to?: string }): Promise<unknown>;
183598
183942
 
183599
183943
  // --- write: profiles ---
183600
183944
  profile_update(args: Record<string, unknown>): Promise<unknown>;
183601
183945
 
183602
- // --- write: services ---
183603
- service_register(args: Record<string, unknown>): Promise<unknown>;
183604
- service_unregister(args: { name: string }): Promise<unknown>;
183605
- service_updateStatus(args: { name: string; status: "starting" | "healthy" | "unhealthy" | "stopped" }): Promise<unknown>;
183606
-
183607
183946
  // --- write: schedules ---
183608
183947
  schedule_create(args: Record<string, unknown>): Promise<unknown>;
183609
183948
  schedule_update(args: Record<string, unknown>): Promise<unknown>;
@@ -183719,6 +184058,16 @@ export interface SwarmSdk {
183719
184058
  // --- human input ---
183720
184059
  request_humanInput(args: Record<string, unknown>): Promise<unknown>;
183721
184060
  approval_cancel(args: { requestId: string; reason?: string }): Promise<unknown>;
184061
+
184062
+ // --- decisions ---
184063
+ systemOne_decide(args: {
184064
+ provider?: "typesafe" | "openrouter" | "laya" | "openai" | "cloudflare";
184065
+ model?: string;
184066
+ state: string | string[] | Record<string, unknown>;
184067
+ questions: Record<string, Record<string, unknown>>;
184068
+ timeoutMs?: number;
184069
+ maxRetries?: number;
184070
+ }): Promise<unknown>;
183722
184071
  }
183723
184072
 
183724
184073
  export interface ScriptStdlib {
@@ -184168,20 +184517,20 @@ function sourceFileCacheKey(fileName, languageVersion) {
184168
184517
  return `${fileName}\x00${languageVersion.languageVersion}\x00${languageVersion.impliedNodeFormat}\x00${languageVersion.jsDocParsingMode}`;
184169
184518
  }
184170
184519
  function createCompilerHost(files, options, virtualModules = new Map) {
184171
- const host = import_typescript3.default.createCompilerHost(options, true);
184520
+ const host = import_typescript4.default.createCompilerHost(options, true);
184172
184521
  const originalGetSourceFile = host.getSourceFile.bind(host);
184173
184522
  host.getSourceFile = (fileName, languageVersion, onError, shouldCreateNewSourceFile) => {
184174
184523
  const normalized = fileName.replace(/\\/g, "/");
184175
184524
  const source = files.get(normalized);
184176
184525
  if (normalized === USER_FILE || normalized === CHECK_FILE) {
184177
184526
  if (source !== undefined) {
184178
- return import_typescript3.default.createSourceFile(normalized, source, languageVersion, true, import_typescript3.default.ScriptKind.TS);
184527
+ return import_typescript4.default.createSourceFile(normalized, source, languageVersion, true, import_typescript4.default.ScriptKind.TS);
184179
184528
  }
184180
184529
  }
184181
- const text = source ?? import_typescript3.default.sys.readFile(fileName);
184530
+ const text = source ?? import_typescript4.default.sys.readFile(fileName);
184182
184531
  if (text === undefined || shouldCreateNewSourceFile) {
184183
184532
  if (source !== undefined) {
184184
- return import_typescript3.default.createSourceFile(normalized, source, languageVersion, true, import_typescript3.default.ScriptKind.TS);
184533
+ return import_typescript4.default.createSourceFile(normalized, source, languageVersion, true, import_typescript4.default.ScriptKind.TS);
184185
184534
  }
184186
184535
  return originalGetSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
184187
184536
  }
@@ -184189,30 +184538,30 @@ function createCompilerHost(files, options, virtualModules = new Map) {
184189
184538
  const cached = sharedSourceFiles.get(key);
184190
184539
  if (cached && cached.text === text)
184191
184540
  return cached.sourceFile;
184192
- const sourceFile = source !== undefined ? import_typescript3.default.createSourceFile(normalized, source, languageVersion, true, import_typescript3.default.ScriptKind.TS) : originalGetSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
184541
+ const sourceFile = source !== undefined ? import_typescript4.default.createSourceFile(normalized, source, languageVersion, true, import_typescript4.default.ScriptKind.TS) : originalGetSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
184193
184542
  if (sourceFile)
184194
184543
  sharedSourceFiles.set(key, { text, sourceFile });
184195
184544
  return sourceFile;
184196
184545
  };
184197
184546
  host.fileExists = (fileName) => {
184198
184547
  const normalized = fileName.replace(/\\/g, "/");
184199
- return files.has(normalized) || import_typescript3.default.sys.fileExists(fileName);
184548
+ return files.has(normalized) || import_typescript4.default.sys.fileExists(fileName);
184200
184549
  };
184201
184550
  host.readFile = (fileName) => {
184202
184551
  const normalized = fileName.replace(/\\/g, "/");
184203
- return files.get(normalized) ?? import_typescript3.default.sys.readFile(fileName);
184552
+ return files.get(normalized) ?? import_typescript4.default.sys.readFile(fileName);
184204
184553
  };
184205
184554
  const projectBase = scriptTypesBase();
184206
184555
  host.resolveModuleNames = (moduleNames, containingFile) => moduleNames.map((moduleName) => {
184207
184556
  if (moduleName === "./user-script") {
184208
- return { resolvedFileName: USER_FILE, extension: import_typescript3.default.Extension.Ts };
184557
+ return { resolvedFileName: USER_FILE, extension: import_typescript4.default.Extension.Ts };
184209
184558
  }
184210
184559
  const virtualModule = virtualModules.get(moduleName);
184211
184560
  if (virtualModule) {
184212
- return { resolvedFileName: virtualModule, extension: import_typescript3.default.Extension.Dts };
184561
+ return { resolvedFileName: virtualModule, extension: import_typescript4.default.Extension.Dts };
184213
184562
  }
184214
184563
  const base = containingFile.startsWith("/virtual/") ? projectBase : containingFile;
184215
- return import_typescript3.default.resolveModuleName(moduleName, base, options, host).resolvedModule;
184564
+ return import_typescript4.default.resolveModuleName(moduleName, base, options, host).resolvedModule;
184216
184565
  });
184217
184566
  const tsLibDir = process.env.TS_LIB_DIR;
184218
184567
  if (tsLibDir) {
@@ -184221,16 +184570,16 @@ function createCompilerHost(files, options, virtualModules = new Map) {
184221
184570
  return host;
184222
184571
  }
184223
184572
  function flattenMessage(messageText) {
184224
- return import_typescript3.default.flattenDiagnosticMessageText(messageText, `
184573
+ return import_typescript4.default.flattenDiagnosticMessageText(messageText, `
184225
184574
  `);
184226
184575
  }
184227
184576
  function diagnosticSeverity(diag) {
184228
184577
  switch (diag.category) {
184229
- case import_typescript3.default.DiagnosticCategory.Error:
184578
+ case import_typescript4.default.DiagnosticCategory.Error:
184230
184579
  return "error";
184231
- case import_typescript3.default.DiagnosticCategory.Warning:
184580
+ case import_typescript4.default.DiagnosticCategory.Warning:
184232
184581
  return "warning";
184233
- case import_typescript3.default.DiagnosticCategory.Suggestion:
184582
+ case import_typescript4.default.DiagnosticCategory.Suggestion:
184234
184583
  return "suggestion";
184235
184584
  default:
184236
184585
  return "message";
@@ -184286,12 +184635,12 @@ async function typecheckWithAmbient(args) {
184286
184635
  const options = {
184287
184636
  allowImportingTsExtensions: true,
184288
184637
  lib: ["lib.es2022.d.ts"],
184289
- module: import_typescript3.default.ModuleKind.ESNext,
184290
- moduleResolution: import_typescript3.default.ModuleResolutionKind.Bundler,
184638
+ module: import_typescript4.default.ModuleKind.ESNext,
184639
+ moduleResolution: import_typescript4.default.ModuleResolutionKind.Bundler,
184291
184640
  noEmit: true,
184292
184641
  skipLibCheck: true,
184293
184642
  strict: true,
184294
- target: import_typescript3.default.ScriptTarget.ES2022,
184643
+ target: import_typescript4.default.ScriptTarget.ES2022,
184295
184644
  types: []
184296
184645
  };
184297
184646
  const files = new Map([
@@ -184309,7 +184658,7 @@ async function typecheckWithAmbient(args) {
184309
184658
  files.set(`/virtual/ambient-${name.replace(/[^A-Za-z0-9_.-]/g, "_")}.d.ts`, source);
184310
184659
  }
184311
184660
  const host = createCompilerHost(files, options, virtualModules);
184312
- const program = import_typescript3.default.createProgram([...files.keys()], options, host);
184661
+ const program = import_typescript4.default.createProgram([...files.keys()], options, host);
184313
184662
  const diagnostics = [
184314
184663
  ...program.getSyntacticDiagnostics(),
184315
184664
  ...program.getSemanticDiagnostics()
@@ -184327,7 +184676,7 @@ async function typecheckWithAmbient(args) {
184327
184676
  };
184328
184677
  return {
184329
184678
  ok: false,
184330
- diagnostics: diagnostics.map((diagnostic) => import_typescript3.default.formatDiagnosticsWithColorAndContext([diagnostic], formatHost).trimEnd()),
184679
+ diagnostics: diagnostics.map((diagnostic) => import_typescript4.default.formatDiagnosticsWithColorAndContext([diagnostic], formatHost).trimEnd()),
184331
184680
  structured: diagnostics.map(toStructured)
184332
184681
  };
184333
184682
  }
@@ -184349,4 +184698,53 @@ void _scriptMain;
184349
184698
  });
184350
184699
  }
184351
184700
 
184352
- export { require_dist, isInvalidClientError, assertUrlSafe, publicEndpointSsrfOptions, mcpOAuthSsrfOptions, discoverProtectedResourceMetadata, discoverAuthorizationServerMetadata, normalizeTokenEndpointAuthMethod, resolveAdvertisedTokenEndpointAuthMethod, authMethodForStoredClient, selectDcrTokenEndpointAuthMethod, registerClient, buildAuthorizeUrl, exchangeCodeForTokens, refreshMcpToken, revokeMcpToken, computeExpiresAt, getMcpOAuthToken, findReusableMcpOAuthClient, invalidateMcpOAuthClient, upsertMcpOAuthToken, applyMcpOAuthRefresh, markMcpOAuthTokenStatus, deleteMcpOAuthToken, insertMcpOAuthPending, consumeMcpOAuthPending, gcMcpOAuthPending, setMcpServerAuthMethod, ensureMcpToken, callMcpServerTool, resolveSqlDsn, runReadOnlyQuery, listVendoredOpenapiEntries, ConnectionAuthInputSchema, SqlDsnInputSchema, connectionAuthSummary, listRelationalCredentialBindings, getCredentialBindingById, findCredentialBindingByIdentity, upsertCredentialBinding, disableCredentialBinding, listScriptConnections, listScriptConnectionsAsync, getScriptConnectionById, ScriptConnectionConflictError, connectionAuthInputFromFlat, upsertScriptConnection, refreshScriptConnection, setScriptConnectionEnabled, deleteScriptConnection, getScriptApiConnectionDescriptors, getScriptMcpConnectionDescriptors, getScriptApiTypes, getScriptMcpTypes, oauthAppToProviderConfig, getOAuthProviderConfig, getOAuthBindingTokenStatus, buildScriptCredentialBindingsWithFailures, buildScriptCredentialBindings, buildSandboxedCommand, sandboxSpawnEnv, createCappedStreamState, snapshotCapped, readStreamCapped, writeBareImportShim, MIN_SCRIPT_WALL_CLOCK_MS, SCRIPT_LONG_TIMEOUT_HINT_MS, MAX_SCRIPT_WALL_CLOCK_MS, DEFAULT_SCRIPT_RESOURCES, require_typescript, checkImportAllowlist, validateScriptImports, runScript, extractScriptSignature, extractArgsJsonSchema, getSavedScriptOwnerAgentId, runSavedScriptAsAgent, resolveSyncRunAs, AppNameSchema, ColumnKindSchema, isIso8601Date, SYSTEM_COLUMN_KINDS, SORTABLE_SYSTEM_DATE_COLUMNS, AppElementsSchema, AppDefinitionSchema, collectScriptReferences, parseAppDefinition, applyAppDefinitionPatch, upgradeAppDefinition, decodeAppDefinition, appDefinitionNeedsRepair, createApp, getApp, listApps, listAppRecords, updateApp, deleteApp, getScriptAppTypes, SCRIPT_SDK_TYPES, scriptSdkTypesWithGeneratedApis, SCRIPT_STDLIB_MODULE_TYPES, scriptStdlibTypesWithGeneratedApis, typecheckWithAmbient, typecheckScript };
184701
+ // src/be/skill-parser.ts
184702
+ function parseSkillContent(content) {
184703
+ const trimmed = content.trim();
184704
+ if (!trimmed.startsWith("---")) {
184705
+ throw new Error("Skill content must start with YAML frontmatter (---). No frontmatter found.");
184706
+ }
184707
+ const secondDelimiter = trimmed.indexOf("---", 3);
184708
+ if (secondDelimiter === -1) {
184709
+ throw new Error("Skill content has unterminated frontmatter. Missing closing ---.");
184710
+ }
184711
+ const frontmatterRaw = trimmed.slice(3, secondDelimiter).trim();
184712
+ const body = trimmed.slice(secondDelimiter + 3).trim();
184713
+ const metadata = {};
184714
+ for (const line of frontmatterRaw.split(`
184715
+ `)) {
184716
+ const colonIdx = line.indexOf(":");
184717
+ if (colonIdx === -1)
184718
+ continue;
184719
+ const key = line.slice(0, colonIdx).trim();
184720
+ let value = line.slice(colonIdx + 1).trim();
184721
+ if (value.length >= 2 && value.startsWith('"') && value.endsWith('"')) {
184722
+ try {
184723
+ value = JSON.parse(value);
184724
+ } catch {}
184725
+ }
184726
+ if (key && value) {
184727
+ metadata[key] = value;
184728
+ }
184729
+ }
184730
+ if (!metadata.name) {
184731
+ throw new Error('Skill frontmatter is missing required field: "name"');
184732
+ }
184733
+ if (!metadata.description) {
184734
+ throw new Error('Skill frontmatter is missing required field: "description"');
184735
+ }
184736
+ return {
184737
+ name: metadata.name,
184738
+ description: metadata.description,
184739
+ allowedTools: metadata["allowed-tools"] || undefined,
184740
+ model: metadata.model || undefined,
184741
+ effort: metadata.effort || undefined,
184742
+ context: metadata.context || undefined,
184743
+ agent: metadata.agent || undefined,
184744
+ disableModelInvocation: metadata["disable-model-invocation"] === "true" ? true : undefined,
184745
+ userInvocable: metadata["user-invocable"] !== undefined ? metadata["user-invocable"] !== "false" : undefined,
184746
+ body
184747
+ };
184748
+ }
184749
+
184750
+ export { require_dist, isInvalidClientError, assertUrlSafe, publicEndpointSsrfOptions, mcpOAuthSsrfOptions, discoverProtectedResourceMetadata, discoverAuthorizationServerMetadata, normalizeTokenEndpointAuthMethod, resolveAdvertisedTokenEndpointAuthMethod, authMethodForStoredClient, selectDcrTokenEndpointAuthMethod, registerClient, buildAuthorizeUrl, exchangeCodeForTokens, refreshMcpToken, revokeMcpToken, computeExpiresAt, getMcpOAuthToken, findReusableMcpOAuthClient, invalidateMcpOAuthClient, upsertMcpOAuthToken, applyMcpOAuthRefresh, markMcpOAuthTokenStatus, deleteMcpOAuthToken, insertMcpOAuthPending, consumeMcpOAuthPending, gcMcpOAuthPending, setMcpServerAuthMethod, ensureMcpToken, callMcpServerTool, resolveSqlDsn, runReadOnlyQuery, listVendoredOpenapiEntries, ConnectionAuthInputSchema, SqlDsnInputSchema, connectionAuthSummary, listRelationalCredentialBindings, getCredentialBindingById, findCredentialBindingByIdentity, upsertCredentialBinding, disableCredentialBinding, listScriptConnections, listScriptConnectionsAsync, getScriptConnectionById, ScriptConnectionConflictError, connectionAuthInputFromFlat, upsertScriptConnection, refreshScriptConnection, setScriptConnectionEnabled, deleteScriptConnection, getScriptApiConnectionDescriptors, getScriptMcpConnectionDescriptors, getScriptApiTypes, getScriptMcpTypes, oauthAppToProviderConfig, getOAuthProviderConfig, getOAuthBindingTokenStatus, buildScriptCredentialBindingsWithFailures, buildSandboxedCommand, sandboxSpawnEnv, createCappedStreamState, snapshotCapped, readStreamCapped, writeBareImportShim, MIN_SCRIPT_WALL_CLOCK_MS, SCRIPT_LONG_TIMEOUT_HINT_MS, MAX_SCRIPT_WALL_CLOCK_MS, DEFAULT_SCRIPT_RESOURCES, require_typescript, checkImportAllowlist, validateScriptImports, runScript, extractScriptSignature, extractArgsJsonSchema, getSavedScriptOwnerAgentId, runSavedScriptAsAgent, checkQuickJSCompat, quickJSCompatWarnings, resolveSyncRunAs, AppNameSchema, ColumnKindSchema, isIso8601Date, SYSTEM_COLUMN_KINDS, SORTABLE_SYSTEM_DATE_COLUMNS, AppElementsSchema, AppDefinitionSchema, collectScriptReferences, scriptCompatWarnings, parseAppDefinition, applyAppDefinitionPatch, upgradeAppDefinition, decodeAppDefinition, appDefinitionNeedsRepair, createApp, getApp, listApps, listAppRecords, updateApp, deleteApp, getScriptAppTypes, SCRIPT_SDK_TYPES, scriptSdkTypesWithGeneratedApis, SCRIPT_STDLIB_MODULE_TYPES, scriptStdlibTypesWithGeneratedApis, typecheckWithAmbient, typecheckScript, parseSkillContent };