@desplega.ai/agent-swarm 1.165.0 → 1.167.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 (296) hide show
  1. package/dist/acp-adapter-zpvy6321.js +34 -0
  2. package/dist/{actions-jna0b3wm.js → actions-fq2zrwtf.js} +30 -34
  3. package/dist/{amp-adapter-0eve81pz.js → amp-adapter-5gbk7501.js} +7 -7
  4. package/dist/{anthropic-messages-hst62ws9.js → anthropic-messages-13yn502s.js} +4 -4
  5. package/dist/{app-75hm5cfa.js → app-nctetn1e.js} +11 -11
  6. package/dist/{assistant-yzd51j33.js → assistant-0aq8gjvj.js} +31 -35
  7. package/dist/{azure-openai-responses-mh8tvf78.js → azure-openai-responses-9st34pfz.js} +5 -5
  8. package/dist/{boot-reembed-z158xq32.js → boot-reembed-1ze5853n.js} +14 -16
  9. package/dist/{boot-reembed-2ex2mcsh.js → boot-reembed-fmp5ww69.js} +15 -16
  10. package/dist/boot-scrub-sweep-cbp8xd4e.js +212 -0
  11. package/dist/{boot-seeds-2bmnh18p.js → boot-seeds-22tx8a53.js} +13 -12
  12. package/dist/{claude-adapter-jbj1mycz.js → claude-adapter-0jhgeh1d.js} +25 -25
  13. package/dist/{claude-managed-adapter-17ggz09t.js → claude-managed-adapter-tzwxy803.js} +5 -5
  14. package/dist/{claude-managed-setup-ptm1nzm2.js → claude-managed-setup-nrhfx5b0.js} +5 -5
  15. package/dist/{claude-sdk-session-9re1g7r2.js → claude-sdk-session-wh77rh83.js} +2632 -2614
  16. package/dist/{cli-zsh093hk.js → cli-014vns2y.js} +63 -1
  17. package/dist/{cli-qvfk83fy.js → cli-13xwcqvj.js} +2 -2
  18. package/dist/{cli-8gpbwy09.js → cli-1yrcfa5s.js} +5 -5
  19. package/dist/{cli-xtgtyafv.js → cli-577bxkf6.js} +212 -451
  20. package/dist/{cli-ma3zvh39.js → cli-5qkcdv8c.js} +6118 -5874
  21. package/dist/{cli-cwxhbf43.js → cli-5t5my0h8.js} +85 -2
  22. package/dist/{cli-zvckv750.js → cli-69egj654.js} +2 -2
  23. package/dist/{cli-9xb89xca.js → cli-6bpvv8h4.js} +9 -9
  24. package/dist/{cli-90v942q1.js → cli-6qxmjpem.js} +8 -8
  25. package/dist/{cli-9866bd07.js → cli-6vfz44sr.js} +1 -1
  26. package/dist/{cli-32bca7nr.js → cli-7avy4v8w.js} +1 -1
  27. package/dist/{cli-xb3c6aat.js → cli-7mhy3ths.js} +21 -18
  28. package/dist/{cli-q38n4bq0.js → cli-95zs84qw.js} +3 -3
  29. package/dist/cli-a35hzdve.js +33 -0
  30. package/dist/{cli-x3x0qwky.js → cli-bxqez1p0.js} +51 -23
  31. package/dist/{cli-prt9emct.js → cli-c2tpw9ck.js} +3 -3
  32. package/dist/{cli-0n4fasz0.js → cli-c8r99akr.js} +16 -16
  33. package/dist/{cli-5anb0ev3.js → cli-cexctgn5.js} +89 -26
  34. package/dist/{cli-bns5c8k9.js → cli-cf2vgn9d.js} +105 -91
  35. package/dist/{cli-ng97fjq7.js → cli-cmxkbzzs.js} +33 -7
  36. package/dist/{cli-nexwh8zg.js → cli-g7k7zbcz.js} +12 -5
  37. package/dist/{cli-mmzwwptd.js → cli-hf5s9pgf.js} +1 -1
  38. package/dist/{cli-nvvfd8bq.js → cli-jbzbr36n.js} +4091 -3793
  39. package/dist/{cli-zn2v3t8v.js → cli-jvmtxqtc.js} +27 -15
  40. package/dist/{cli-pkke6geq.js → cli-km4x66j0.js} +83 -65
  41. package/dist/cli-kw0jcfje.js +516 -0
  42. package/dist/{cli-28smfvbn.js → cli-m7vmeepg.js} +32 -19
  43. package/dist/{cli-hpryr6em.js → cli-mb75wpxf.js} +1 -1
  44. package/dist/{cli-qdv8kgz7.js → cli-mkdsy1nq.js} +14018 -3333
  45. package/dist/{cli-b0f70z24.js → cli-mn8qkd8v.js} +1 -1
  46. package/dist/{cli-420bdgw0.js → cli-mv2520nm.js} +1 -1
  47. package/dist/{cli-n9ehc28t.js → cli-mxry91sa.js} +31 -10
  48. package/dist/{cli-wfajtmf7.js → cli-mxvnnv5q.js} +596 -13
  49. package/dist/cli-nkqjj42q.js +104 -0
  50. package/dist/{cli-e7t4snpa.js → cli-p8rt8spp.js} +5 -5
  51. package/dist/{cli-gh5yqzpe.js → cli-pkj1w46r.js} +12 -7
  52. package/dist/cli-q1vnz8wv.js +96 -0
  53. package/dist/{cli-fj86xr3c.js → cli-qd97v6z2.js} +2 -2
  54. package/dist/{cli-ba66wyhy.js → cli-qzmzwegq.js} +60 -20
  55. package/dist/{cli-5b2fjjzh.js → cli-r7eeddkq.js} +14 -9
  56. package/dist/{cli-8ssjez7e.js → cli-rhy7z1rp.js} +22 -11
  57. package/dist/{cli-4mevd1hf.js → cli-s9y81s7j.js} +5 -5
  58. package/dist/{cli-59jn5twa.js → cli-tc5zec7v.js} +7 -7
  59. package/dist/{cli-ttbsse3f.js → cli-tmhsxhb8.js} +1 -1
  60. package/dist/{cli-k6xx3pve.js → cli-tx2zvn23.js} +4 -4
  61. package/dist/{cli-pjxnr1jn.js → cli-ty4bzkqr.js} +5 -5
  62. package/dist/{cli-nfygw434.js → cli-v1pwxreq.js} +55 -52
  63. package/dist/{cli-ftry7975.js → cli-v1w7pbd8.js} +3 -2
  64. package/dist/{cli-10zmp1p7.js → cli-vr5avem2.js} +27 -32
  65. package/dist/{cli-bzr0ftht.js → cli-wnb9b2g3.js} +19 -0
  66. package/dist/cli-wt7ccy4r.js +2654 -0
  67. package/dist/{cli-50eg13rj.js → cli-wydz3feg.js} +549 -321
  68. package/dist/{cli-krqm5f11.js → cli-xezn9nkh.js} +16 -13
  69. package/dist/{cli-8kt0bmgx.js → cli-xf713zz0.js} +2 -2
  70. package/dist/{cli-x7afk5wm.js → cli-xvc3q9br.js} +1 -1
  71. package/dist/{cli-9s3h836g.js → cli-xvdgasgy.js} +1 -1
  72. package/dist/{cli-j0pdrmwg.js → cli-y0kjpfm9.js} +3 -3
  73. package/dist/{cli-6zcfw0x7.js → cli-y195hv1a.js} +1 -1
  74. package/dist/{cli-amwhs8h2.js → cli-ykt8f7va.js} +22 -9
  75. package/dist/{cli-1kzfvd1z.js → cli-ymmc1zxg.js} +15 -11
  76. package/dist/{cli-xnzrzets.js → cli-ypgba1a8.js} +2 -2
  77. package/dist/{cli-bdv39kgj.js → cli-z1dqhc9y.js} +31 -20
  78. package/dist/{cli-fw6vdcq5.js → cli-zp67qg5x.js} +34 -1
  79. package/dist/{cli-qbksc292.js → cli-zy39d433.js} +2 -0
  80. package/dist/cli.js +36 -32
  81. package/dist/{cloudflare-workers-ai-system-one-tt484t61.js → cloudflare-workers-ai-system-one-sta45jf9.js} +7 -5
  82. package/dist/{codex-adapter-3qnxshje.js → codex-adapter-cgesnjkr.js} +20 -20
  83. package/dist/{codex-login-brkxhhdg.js → codex-login-g1cyt5zm.js} +2 -2
  84. package/dist/{codex-session-runner-612wnapp.js → codex-session-runner-8kd7ddhr.js} +20 -20
  85. package/dist/{commands-2ybfcxkj.js → commands-h6zaaxym.js} +11 -10
  86. package/dist/{cursor-adapter-p3jgdehv.js → cursor-adapter-v8mm6bp5.js} +7 -7
  87. package/dist/{db-f4ans0jj.js → db-qg3myn53.js} +13 -10
  88. package/dist/{devin-adapter-dhzt01ff.js → devin-adapter-bffjj5n4.js} +2 -2
  89. package/dist/{dispatcher-pk182apd.js → dispatcher-7vnwj9qw.js} +28 -32
  90. package/dist/{dsh-adapter-7twaeps1.js → dsh-adapter-tz6hfp5r.js} +7 -7
  91. package/dist/{e2b-y8t3jzyz.js → e2b-nd50eccg.js} +1 -1
  92. package/dist/{easter-egg-3d-mtpnw06s.js → easter-egg-3d-66zxervv.js} +2 -2
  93. package/dist/{event-bus-w7ac4n3c.js → event-bus-vnfthafg.js} +2 -2
  94. package/dist/{execute-s4ccjq3n.js → execute-h4jgevyw.js} +61 -11
  95. package/dist/{google-generative-ai-d6nphg3q.js → google-generative-ai-b8zxrpax.js} +5 -5
  96. package/dist/{google-vertex-cpshkref.js → google-vertex-nrdd697t.js} +5 -5
  97. package/dist/grok-adapter-jdt2dz2s.js +39 -0
  98. package/dist/{handlers-g2wnr4t9.js → handlers-2qtkpncr.js} +31 -35
  99. package/dist/{hook-f7jt9vnm.js → hook-51yfcgsv.js} +48 -39
  100. package/dist/{hook-bbdpnkb4.js → hook-qnbdgwvd.js} +15 -17
  101. package/dist/{http-w40q4w94.js → http-jsmtag08.js} +536 -231
  102. package/dist/{index-056j5kzn.js → index-2t9kesn1.js} +13 -12
  103. package/dist/{index-cj1r9q83.js → index-bt8wkv1w.js} +29 -33
  104. package/dist/{index-7n70jwbb.js → index-cx1sb9bq.js} +42 -35
  105. package/dist/{index-9bfssf54.js → index-ekywyv2v.js} +28 -32
  106. package/dist/{index-fdk1t4d6.js → index-n0rxa4ca.js} +11962 -9900
  107. package/dist/{index-k8xc083e.js → index-t4g06w93.js} +28 -32
  108. package/dist/{keepalive-1tj10tf4.js → keepalive-4aezx4bj.js} +16 -12
  109. package/dist/{lead-st0bg7v4.js → lead-r44bkpm5.js} +52 -56
  110. package/dist/{llama-cpp-classify-tgj35k8d.js → llama-cpp-classify-6erb7wwv.js} +3 -1
  111. package/dist/{maintenance-nz71zats.js → maintenance-grz5jrzh.js} +12 -13
  112. package/dist/{mistral-conversations-8445ddjn.js → mistral-conversations-059y51zt.js} +4 -4
  113. package/dist/{node-f0ykebbv.js → node-qm9eb6z0.js} +25 -7
  114. package/dist/{oauth-refresh-sweep-aefzwvvq.js → oauth-refresh-sweep-wm4ctjfj.js} +15 -11
  115. package/dist/{onboard-kgpr9mbn.js → onboard-v60zgqf0.js} +2 -2
  116. package/dist/{openai-codex-responses-9ynm88zy.js → openai-codex-responses-jzxkta9b.js} +8 -7
  117. package/dist/{openai-completions-nhqwjmaw.js → openai-completions-663yncfq.js} +4 -4
  118. package/dist/openai-decisions-vj9nkpf8.js +162 -0
  119. package/dist/{openai-responses-xx1c4kgm.js → openai-responses-m3g43rrt.js} +5 -5
  120. package/dist/{opencode-adapter-0c8e70dk.js → opencode-adapter-yjyqynzf.js} +8 -8
  121. package/dist/{openrouter-images-8yx3487g.js → openrouter-images-kr60n6b9.js} +1 -1
  122. package/dist/{otel-impl-x8zp4y5a.js → otel-impl-ghh4dyf8.js} +2 -2
  123. package/dist/{pi-messages-vxdt8v7j.js → pi-messages-xszk613n.js} +1 -1
  124. package/dist/{pi-mono-adapter-t280ah5c.js → pi-mono-adapter-0eg8kw2c.js} +69 -52
  125. package/dist/{pricing-refresh-9e0q7cwk.js → pricing-refresh-mjrqvnvw.js} +12 -11
  126. package/dist/{rbac-roles-790j3ga8.js → rbac-roles-axv4d74x.js} +11 -10
  127. package/dist/{rbac-roles-kcp6zge2.js → rbac-roles-fd5tskj9.js} +11 -10
  128. package/dist/{render-v2-tch4nefj.js → render-v2-k50j33qd.js} +11 -11
  129. package/dist/{runtime-v2t1r79e.js → runtime-h9ha1mq6.js} +4 -4
  130. package/dist/{setup-rcm303ns.js → setup-4syh0pd2.js} +2 -2
  131. package/dist/{typesafe-system-one-datfr82p.js → typesafe-system-one-e988vty7.js} +7 -5
  132. package/dist/{virtual-modules-wm8mxdxx.js → virtual-modules-ftr9kwe8.js} +11 -11
  133. package/dist/{work-objects-ctg7t70w.js → work-objects-jcdbg8rr.js} +32 -36
  134. package/dist/{worker-5dp0xm55.js → worker-x8j8c9sx.js} +52 -56
  135. package/dist/{x-v3yw66zs.js → x-ma4gnfgy.js} +2 -2
  136. package/openapi.json +5 -2
  137. package/package.json +15 -11
  138. package/src/be/automation-preflight.ts +9 -4
  139. package/src/be/boot-scrub-sweep.ts +302 -0
  140. package/src/be/crypto/key-bootstrap.ts +1 -1
  141. package/src/be/db/approvals.ts +15 -1
  142. package/src/be/db/codex-oauth-device-flows.ts +40 -0
  143. package/src/be/db/config-secrets.ts +31 -0
  144. package/src/be/db/runtime.ts +4 -0
  145. package/src/be/db/script-runs.ts +15 -0
  146. package/src/be/db/tasks/write.ts +1 -1
  147. package/src/be/db-queries/mcp-oauth.ts +5 -0
  148. package/src/be/db-queries/oauth.ts +77 -0
  149. package/src/be/db.ts +162 -59
  150. package/src/be/events.ts +17 -1
  151. package/src/be/memory/index-content.ts +2 -2
  152. package/src/be/memory/providers/openai-embedding.ts +7 -2
  153. package/src/be/memory/providers/sqlite-store.ts +63 -11
  154. package/src/be/memory/raters/llm-summarizer.ts +7 -2
  155. package/src/be/memory/types.ts +14 -0
  156. package/src/be/migrations/201_workflow_replay_columns.sql +10 -0
  157. package/src/be/migrations/202_codex_oauth_device_flows.sql +24 -0
  158. package/src/be/modelsdev-cache.json +61 -0
  159. package/src/be/scripts/db.ts +28 -4
  160. package/src/be/scripts/source-secrets.ts +37 -0
  161. package/src/be/scrub-json.ts +32 -0
  162. package/src/be/sealed-json.ts +59 -0
  163. package/src/be/secret-registry.ts +131 -0
  164. package/src/be/seed-pricing.ts +84 -53
  165. package/src/be/swarm-config-guard.ts +13 -0
  166. package/src/be/workflow-replay.ts +77 -0
  167. package/src/commands/provider-credentials.ts +28 -5
  168. package/src/commands/runner.ts +7 -12
  169. package/src/heartbeat/heartbeat.ts +91 -19
  170. package/src/hooks/hook.ts +72 -27
  171. package/src/http/codex-oauth-device.ts +8 -10
  172. package/src/http/db-query-bounded.ts +3 -0
  173. package/src/http/db-query-shared.ts +107 -15
  174. package/src/http/db-query.ts +10 -2
  175. package/src/http/index.ts +23 -6
  176. package/src/http/mcp.ts +5 -0
  177. package/src/http/onboarding.ts +2 -0
  178. package/src/http/script-runs.ts +9 -1
  179. package/src/http/scripts.ts +15 -0
  180. package/src/http/workflows.ts +3 -2
  181. package/src/oauth/mcp-wrapper.ts +1 -1
  182. package/src/providers/acp-adapter.ts +25 -11
  183. package/src/providers/acp-target-catalog.ts +35 -1
  184. package/src/providers/acp-targets.ts +78 -7
  185. package/src/providers/amp-adapter.ts +1 -1
  186. package/src/providers/claude-adapter.ts +26 -0
  187. package/src/providers/codex-adapter.ts +30 -3
  188. package/src/providers/codex-oauth/auth-json.ts +21 -4
  189. package/src/providers/codex-oauth/types.ts +2 -0
  190. package/src/providers/cursor-adapter.ts +1 -1
  191. package/src/providers/dsh-adapter.ts +10 -1
  192. package/src/providers/grok-adapter.ts +18 -2
  193. package/src/providers/opencode-adapter.ts +21 -5
  194. package/src/providers/pi-mono-extension.ts +56 -25
  195. package/src/providers/pricing-sources.md +2 -0
  196. package/src/script-workflows/supervisor.ts +11 -2
  197. package/src/scripts-runtime/eval-harness.ts +2 -12
  198. package/src/scripts-runtime/executors/quickjs-bundle.ts +152 -0
  199. package/src/scripts-runtime/executors/quickjs-prelude.ts +285 -0
  200. package/src/scripts-runtime/executors/quickjs-runner.ts +580 -0
  201. package/src/scripts-runtime/executors/quickjs-worker.ts +81 -0
  202. package/src/scripts-runtime/executors/quickjs.ts +196 -0
  203. package/src/scripts-runtime/executors/registry.ts +2 -0
  204. package/src/scripts-runtime/executors/sourcemap.ts +79 -0
  205. package/src/scripts-runtime/script-error-hints.ts +14 -0
  206. package/src/server.ts +66 -4
  207. package/src/tests/acp-adapter.test.ts +277 -12
  208. package/src/tests/boot-scrub-sweep.test.ts +390 -0
  209. package/src/tests/check-text-columns.test.ts +145 -0
  210. package/src/tests/ci-unit-test-report.test.ts +73 -0
  211. package/src/tests/claude-default-route.test.ts +75 -0
  212. package/src/tests/claude-hook-output.test.ts +233 -0
  213. package/src/tests/claude-sdk-process.fixture.ts +13 -2
  214. package/src/tests/codex-adapter-pool-auth-revalidate.test.ts +4 -2
  215. package/src/tests/codex-adapter.test.ts +166 -26
  216. package/src/tests/codex-oauth-auth-timestamps.test.ts +76 -0
  217. package/src/tests/codex-oauth-device.test.ts +23 -37
  218. package/src/tests/codex-oauth.test.ts +4 -1
  219. package/src/tests/context-window.test.ts +2 -2
  220. package/src/tests/credential-check.test.ts +51 -1
  221. package/src/tests/db-query-denylist.test.ts +202 -0
  222. package/src/tests/db-task-read-contract.test.ts +1 -0
  223. package/src/tests/db-task-write-contract.test.ts +1 -0
  224. package/src/tests/dsh-adapter.test.ts +23 -1
  225. package/src/tests/enabled-tools.test.ts +269 -0
  226. package/src/tests/entrypoint-acp-target-binary.test.ts +31 -1
  227. package/src/tests/entrypoint-codex-oauth-seed.test.ts +12 -0
  228. package/src/tests/events-scrub.test.ts +88 -0
  229. package/src/tests/fixtures/secret-corpus.ts +320 -0
  230. package/src/tests/grok-adapter.test.ts +13 -0
  231. package/src/tests/haiku-5-5-pricing.test.ts +38 -0
  232. package/src/tests/heartbeat-checklist.test.ts +158 -1
  233. package/src/tests/onboarding.test.ts +44 -0
  234. package/src/tests/opencode-adapter.test.ts +66 -3
  235. package/src/tests/opencode-plugin.test.ts +37 -0
  236. package/src/tests/openrouter-attribution-call-sites.test.ts +204 -0
  237. package/src/tests/openrouter-base-url.test.ts +30 -39
  238. package/src/tests/pi-mono-extension.test.ts +161 -2
  239. package/src/tests/pricing-refresh.test.ts +70 -1
  240. package/src/tests/reasoning-effort.test.ts +3 -1
  241. package/src/tests/script-connections.test.ts +5 -0
  242. package/src/tests/script-executor-conformance.test.ts +3 -0
  243. package/src/tests/script-executor-quickjs.test.ts +442 -0
  244. package/src/tests/script-executor-registry.test.ts +6 -1
  245. package/src/tests/script-runs-http.test.ts +88 -1
  246. package/src/tests/script-runs-scrub.test.ts +275 -0
  247. package/src/tests/scripts-http.test.ts +82 -1
  248. package/src/tests/scrubbed-text-12e.test.ts +289 -0
  249. package/src/tests/sealed-key-guard.test.ts +166 -0
  250. package/src/tests/secret-canary-sweep.test.ts +958 -0
  251. package/src/tests/secret-registry.test.ts +355 -0
  252. package/src/tests/secret-rules.test.ts +230 -0
  253. package/src/tests/secret-scrubber.test.ts +3 -2
  254. package/src/tests/telemetry-trigger.test.ts +12 -1
  255. package/src/tests/workflow-llm.test.ts +14 -0
  256. package/src/tests/workflow-replay.test.ts +518 -0
  257. package/src/tests/workflow-scrub.test.ts +242 -0
  258. package/src/tests/workflow-system-one-decision-providers.test.ts +33 -0
  259. package/src/tools/db-query.ts +1 -1
  260. package/src/tools/inject-learning.ts +1 -1
  261. package/src/tools/request-human-input.ts +7 -2
  262. package/src/tools/workflows/get-workflow-run.ts +3 -2
  263. package/src/types.ts +1 -1
  264. package/src/utils/enabled-tools.ts +27 -0
  265. package/src/utils/internal-ai/complete-structured.ts +11 -3
  266. package/src/utils/openrouter-base-url.ts +23 -0
  267. package/src/utils/secret-rules.generated.ts +2055 -0
  268. package/src/utils/secret-scrubber.ts +363 -29
  269. package/src/workflows/engine.ts +39 -4
  270. package/src/workflows/executors/raw-llm.ts +1 -0
  271. package/src/workflows/executors/system-one-decision.ts +2 -0
  272. package/src/workflows/executors/validate.ts +1 -0
  273. package/src/workflows/executors/workflow-llm.ts +9 -2
  274. package/src/workflows/recovery.ts +10 -1
  275. package/src/workflows/resume.ts +62 -3
  276. package/src/workflows/retry-poller.ts +3 -0
  277. package/templates/skills/agent-browser/SKILL.md +2 -0
  278. package/templates/skills/agent-browser/content.md +2 -0
  279. package/templates/skills/code-quality/content.md +1 -0
  280. package/templates/skills/heartbeat-runbook/content.md +1 -1
  281. package/templates/skills/work-on-task/SKILL.md +4 -0
  282. package/templates/skills/work-on-task/content.md +4 -0
  283. package/templates/skills/workflow-iterate/content.md +9 -0
  284. package/dist/acp-adapter-w6zws6me.js +0 -23
  285. package/dist/boot-scrub-logs-246yn076.js +0 -99
  286. package/dist/cli-3a4m1aws.js +0 -572
  287. package/dist/cli-3dpj7atn.js +0 -11
  288. package/dist/cli-a87b04k8.js +0 -951
  289. package/dist/cli-cvk6yzw5.js +0 -40
  290. package/dist/cli-gvcgmx69.js +0 -183
  291. package/dist/cli-h1spv8v4.js +0 -427
  292. package/dist/cli-jqt9hrnz.js +0 -168
  293. package/dist/cli-yhmwmv0g.js +0 -9281
  294. package/dist/grok-adapter-yt9pab3k.js +0 -29
  295. package/src/be/boot-scrub-logs.ts +0 -132
  296. package/dist/{codex-hook-d2rkvf39.js → codex-hook-15dgc4cb.js} +1 -1
@@ -4,76 +4,82 @@ import {
4
4
  import {
5
5
  getApiKey
6
6
  } from "./cli-f14fvzag.js";
7
+ import {
8
+ DEFAULT_MODEL,
9
+ resolveCredential
10
+ } from "./cli-7mhy3ths.js";
7
11
  import {
8
12
  detachedProcessGroup,
9
13
  registerProcessGroup,
10
14
  terminateProcessGroup
11
15
  } from "./cli-zt3w1cn1.js";
12
- import {
13
- DEFAULT_MODEL,
14
- resolveCredential
15
- } from "./cli-xb3c6aat.js";
16
- import {
17
- DEFAULT_OPENROUTER_BASE_URL,
18
- getOpenRouterBaseUrl
19
- } from "./cli-3dpj7atn.js";
20
- import {
21
- embedScript
22
- } from "./cli-jqt9hrnz.js";
23
16
  import {
24
17
  calculatePKCECodeChallenge,
25
18
  ensureAuthorizationTokenOrThrow,
26
19
  generateRandomCodeVerifier,
27
20
  generateRandomState,
28
- getAuthorizationById,
29
- getOAuthApp,
30
- getOAuthAppById,
31
- oauthAppRowToProviderConfig,
32
- updateAuthorizationTokens,
33
- upsertAuthorization
34
- } from "./cli-a87b04k8.js";
21
+ oauthAppRowToProviderConfig
22
+ } from "./cli-kw0jcfje.js";
35
23
  import {
36
24
  getSlackApp
37
- } from "./cli-0n4fasz0.js";
25
+ } from "./cli-c8r99akr.js";
38
26
  import {
39
27
  CredentialBroker,
40
28
  DEFAULT_CREDENTIAL_BINDINGS,
41
29
  claimApprovalCancellationNotification,
42
30
  completeApprovalCancellationNotificationClaim,
43
- computeContentHash,
44
31
  createTaskExtended,
45
32
  decryptSecret,
46
33
  encryptSecret,
34
+ getAuthorizationById,
47
35
  getDb,
48
36
  getDbClient,
49
37
  getEncryptionKey,
50
38
  getLeadAgent,
51
39
  getMcpServerById,
40
+ getOAuthApp,
41
+ getOAuthAppById,
52
42
  getResolvedConfig,
43
+ getScriptById,
53
44
  getTaskById,
54
45
  init_credential_broker,
55
46
  init_crypto,
56
47
  init_date_utils,
57
48
  init_db,
49
+ init_db1 as init_db2,
50
+ init_oauth,
51
+ init_secret_registry,
58
52
  normalizeDateRequired,
53
+ oauthSecretName,
59
54
  placeholderForConfigKey,
55
+ registerStoredSecret,
60
56
  releaseApprovalCancellationNotificationClaim,
57
+ restoreScratchScriptLastUsedIfUnchanged,
58
+ touchScratchScriptLastUsed,
59
+ updateAuthorizationTokens,
60
+ upsertAuthorization,
61
61
  upsertSwarmConfig
62
- } from "./cli-qdv8kgz7.js";
62
+ } from "./cli-mkdsy1nq.js";
63
63
  import {
64
64
  TERMINAL_TASK_STATUSES,
65
65
  defaultAssetKey,
66
66
  init_key,
67
67
  init_types
68
- } from "./cli-9s3h836g.js";
69
- import {
70
- getAppUrl,
71
- init_constants
72
- } from "./cli-gd4favx9.js";
68
+ } from "./cli-xvdgasgy.js";
73
69
  import {
74
70
  init_resolver,
75
71
  resolveTemplate
76
72
  } from "./cli-5c2j5yvx.js";
73
+ import {
74
+ DEFAULT_OPENROUTER_BASE_URL,
75
+ getOpenRouterAttributionHeaders,
76
+ getOpenRouterBaseUrl,
77
+ init_openrouter_base_url
78
+ } from "./cli-a35hzdve.js";
79
+ import {
80
+ getAppUrl,
81
+ init_constants
82
+ } from "./cli-gd4favx9.js";
77
83
  import {
78
84
  init_env_flag,
79
85
  isEnvFlagEnabled
@@ -102,7 +108,7 @@ import {
102
108
  registerVolatileSecret,
103
109
  scrubObject,
104
110
  scrubSecrets
105
- } from "./cli-h1spv8v4.js";
111
+ } from "./cli-wt7ccy4r.js";
106
112
  import {
107
113
  __commonJS,
108
114
  __require,
@@ -175203,6 +175209,7 @@ Additional information: BADCLIENT: Bad error code, ${badCode} not found in range
175203
175209
 
175204
175210
  // src/workflows/executors/system-one-decision.ts
175205
175211
  init_zod();
175212
+ init_openrouter_base_url();
175206
175213
  init_secret_scrubber();
175207
175214
 
175208
175215
  // src/workflows/executors/base.ts
@@ -175254,7 +175261,7 @@ init_constants();
175254
175261
  init_secret_scrubber();
175255
175262
 
175256
175263
  // src/workflows/approval-notifications.ts
175257
- init_db();
175264
+ init_db2();
175258
175265
  init_resolver();
175259
175266
  init_types();
175260
175267
  init_secret_scrubber();
@@ -175590,7 +175597,7 @@ class HumanInTheLoopExecutor extends BaseExecutor {
175590
175597
  }
175591
175598
  if (notification.channel === "slack") {
175592
175599
  try {
175593
- const { getSlackApp: getSlackApp2 } = await import("./app-75hm5cfa.js");
175600
+ const { getSlackApp: getSlackApp2 } = await import("./app-nctetn1e.js");
175594
175601
  const slackApp = getSlackApp2();
175595
175602
  if (!slackApp) {
175596
175603
  console.warn("[HITL] Slack not initialized — cannot send notification");
@@ -175677,6 +175684,9 @@ function formatTimeout(seconds) {
175677
175684
  return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`;
175678
175685
  }
175679
175686
 
175687
+ // src/workflows/executors/system-one-providers.ts
175688
+ init_openrouter_base_url();
175689
+
175680
175690
  // src/workflows/executors/system-one-wire.ts
175681
175691
  class SystemOneWireError extends Error {
175682
175692
  }
@@ -175852,6 +175862,7 @@ var OPENAI_DECISIONS_WIRE = {
175852
175862
  };
175853
175863
 
175854
175864
  // src/workflows/executors/workflow-llm.ts
175865
+ init_openrouter_base_url();
175855
175866
  async function resolveWorkflowLlmConfig(requestedModel, env = process.env, options = {}) {
175856
175867
  const credential = await resolveCredential({ env });
175857
175868
  if (!credential) {
@@ -175865,9 +175876,11 @@ async function resolveWorkflowLlmConfig(requestedModel, env = process.env, optio
175865
175876
  }
175866
175877
  const providerPrefix = `${credential.kind}/`;
175867
175878
  const model = requestedModel ?? DEFAULT_MODEL[credential.kind];
175879
+ const baseURL = credential.kind === "openrouter" ? getOpenRouterBaseUrl(env) : undefined;
175868
175880
  return {
175869
175881
  apiKey: credential.apiKey,
175870
- baseURL: credential.kind === "openrouter" ? getOpenRouterBaseUrl(env) : undefined,
175882
+ baseURL,
175883
+ headers: baseURL ? getOpenRouterAttributionHeaders(baseURL, env) : {},
175871
175884
  model: model.startsWith(providerPrefix) ? model.slice(providerPrefix.length) : model
175872
175885
  };
175873
175886
  }
@@ -176822,6 +176835,7 @@ class SystemOneDecisionExecutor extends BaseExecutor {
176822
176835
  res = await doFetch(endpoint, {
176823
176836
  method: "POST",
176824
176837
  headers: {
176838
+ ...getOpenRouterAttributionHeaders(endpoint, this.providerContext().env),
176825
176839
  "content-type": "application/json",
176826
176840
  accept: "application/json",
176827
176841
  authorization: `Bearer ${apiKey}`
@@ -177233,7 +177247,8 @@ function applyDefinitionPatch(def, patch) {
177233
177247
 
177234
177248
  // src/be/script-connections.ts
177235
177249
  init_zod();
177236
- init_db();
177250
+ init_db2();
177251
+ init_oauth();
177237
177252
 
177238
177253
  // src/oauth/mcp-wrapper.ts
177239
177254
  init_env_flag();
@@ -177602,13 +177617,15 @@ init_credential_broker();
177602
177617
  init_secret_scrubber();
177603
177618
 
177604
177619
  // src/be/mcp-proxy.ts
177605
- init_db();
177620
+ init_db2();
177606
177621
 
177607
177622
  // src/be/db-queries/mcp-oauth.ts
177608
177623
  init_secret_scrubber();
177609
177624
  init_crypto();
177610
177625
  init_date_utils();
177611
- init_db();
177626
+ init_db2();
177627
+ init_secret_registry();
177628
+ init_oauth();
177612
177629
  function parseObject(value) {
177613
177630
  try {
177614
177631
  const parsed = JSON.parse(value || "{}");
@@ -177695,6 +177712,7 @@ async function upsertMcpApp(input) {
177695
177712
  invalidated: false
177696
177713
  });
177697
177714
  const encryptedClientSecret = input.dcrClientSecret == null || input.dcrClientSecret === "" ? existing?.clientSecret ?? null : encryptSecret(input.dcrClientSecret, getEncryptionKey());
177715
+ registerStoredSecret(input.dcrClientSecret, oauthSecretName(`mcp-${input.mcpServerId}`, "client_secret"));
177698
177716
  const source = "dcr";
177699
177717
  if (existing) {
177700
177718
  await getDbClient().run(`UPDATE oauth_apps SET
@@ -179557,9 +179575,10 @@ ${members.join(`
179557
179575
  // src/be/script-credential-broker.ts
179558
179576
  init_credential_broker();
179559
179577
  init_secret_scrubber();
179560
- init_db();
179578
+ init_db2();
179561
179579
 
179562
179580
  // src/be/oauth-credential-bindings.ts
179581
+ init_oauth();
179563
179582
  var OAUTH_BINDING_REFRESH_BUFFER_MS = 5 * 60 * 1000;
179564
179583
  function oauthAppToProviderConfig(app) {
179565
179584
  return oauthAppRowToProviderConfig(app);
@@ -179622,419 +179641,6 @@ async function buildScriptCredentialBindings(input) {
179622
179641
  return (await buildScriptCredentialBindingsWithFailures(input)).egressSecrets;
179623
179642
  }
179624
179643
 
179625
- // src/be/scripts/db.ts
179626
- init_key();
179627
- init_secret_scrubber();
179628
-
179629
- // src/utils/short-id.ts
179630
- import { randomBytes } from "node:crypto";
179631
- var LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
179632
- var BASE62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
179633
- function generateShortId(len = 12) {
179634
- let out = "";
179635
- while (out.length < len) {
179636
- for (const byte of randomBytes((len - out.length) * 2)) {
179637
- if (byte < 208) {
179638
- out += LETTERS[byte % 52];
179639
- if (out.length === len)
179640
- break;
179641
- }
179642
- }
179643
- }
179644
- return out;
179645
- }
179646
- function base62(bytes) {
179647
- let out = "";
179648
- for (const byte of bytes)
179649
- out += BASE62[byte % 62];
179650
- return out;
179651
- }
179652
- function generateBearerToken() {
179653
- return `xsk_${base62(randomBytes(24))}`;
179654
- }
179655
-
179656
- // src/be/scripts/db.ts
179657
- init_crypto();
179658
- init_db();
179659
- function normalizeScopeId(scope, scopeId) {
179660
- if (scope === "global")
179661
- return null;
179662
- if (!scopeId) {
179663
- throw new Error("scopeId is required for agent-scoped scripts");
179664
- }
179665
- return scopeId;
179666
- }
179667
- function rowToScript(row) {
179668
- return {
179669
- ...row,
179670
- scopeId: row.scopeId ?? null,
179671
- isScratch: row.isScratch === 1,
179672
- typeChecked: row.typeChecked === 1,
179673
- createdByAgentId: row.createdByAgentId ?? null
179674
- };
179675
- }
179676
- function rowToScriptVersion(row) {
179677
- return {
179678
- ...row,
179679
- changedByAgentId: row.changedByAgentId ?? null,
179680
- changeReason: row.changeReason ?? null
179681
- };
179682
- }
179683
- async function insertScriptVersion(args) {
179684
- await getDbClient().run(`INSERT INTO script_versions (
179685
- id, scriptId, version, source, description, intent, signatureJson,
179686
- contentHash, changedByAgentId, changedAt, changeReason
179687
- )
179688
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
179689
- crypto.randomUUID(),
179690
- args.scriptId,
179691
- args.version,
179692
- args.source,
179693
- args.description,
179694
- args.intent,
179695
- args.signatureJson,
179696
- args.contentHash,
179697
- args.changedByAgentId ?? null,
179698
- new Date().toISOString(),
179699
- args.changeReason ?? null
179700
- ]);
179701
- }
179702
- async function insertScript(args) {
179703
- const now = new Date().toISOString();
179704
- const id = crypto.randomUUID();
179705
- const scopeId = normalizeScopeId(args.scope, args.scopeId);
179706
- const contentHash = computeContentHash(args.source);
179707
- const fsMode = args.fsMode ?? "none";
179708
- const isScratch = args.isScratch ? 1 : 0;
179709
- const typeChecked = args.typeChecked ? 1 : 0;
179710
- return await getDbClient().transaction(async (tx) => {
179711
- const row = await tx.get(`INSERT INTO scripts (
179712
- id, "key", name, scope, scopeId, source, description, intent, signatureJson,
179713
- argsJsonSchema, contentHash, isScratch, typeChecked, fsMode, createdByAgentId, createdAt, updatedAt,
179714
- created_by, updated_by
179715
- )
179716
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
179717
- RETURNING *`, [
179718
- id,
179719
- defaultAssetKey("script", id),
179720
- args.name,
179721
- args.scope,
179722
- scopeId,
179723
- args.source,
179724
- args.description,
179725
- args.intent,
179726
- args.signatureJson,
179727
- args.argsJsonSchema ?? null,
179728
- contentHash,
179729
- isScratch,
179730
- typeChecked,
179731
- fsMode,
179732
- args.agentId ?? null,
179733
- now,
179734
- now,
179735
- args.createdBy ?? null,
179736
- args.createdBy ?? null
179737
- ]);
179738
- if (!row)
179739
- throw new Error("Failed to insert script");
179740
- await insertScriptVersion({
179741
- scriptId: row.id,
179742
- version: row.version,
179743
- source: row.source,
179744
- description: row.description,
179745
- intent: row.intent,
179746
- signatureJson: row.signatureJson,
179747
- contentHash: row.contentHash,
179748
- changedByAgentId: args.agentId ?? null,
179749
- changeReason: args.changeReason ?? "Initial creation"
179750
- });
179751
- return rowToScript(row);
179752
- });
179753
- }
179754
- async function upsertScriptByName(args) {
179755
- const shouldEmbed = args.embeddingMode !== "skip";
179756
- const existing = await getScript(args);
179757
- if (!existing) {
179758
- const script2 = await insertScript(args);
179759
- if (!script2.isScratch && shouldEmbed) {
179760
- await embedScript(script2);
179761
- }
179762
- return {
179763
- script: script2,
179764
- isNew: true,
179765
- contentDeduped: false
179766
- };
179767
- }
179768
- const contentHash = computeContentHash(args.source);
179769
- if (existing.contentHash === contentHash) {
179770
- const fsMode2 = args.fsMode ?? existing.fsMode;
179771
- const isScratch2 = args.isScratch ?? existing.isScratch;
179772
- const typeChecked2 = args.typeChecked ?? existing.typeChecked;
179773
- const argsJsonSchema2 = args.argsJsonSchema !== undefined ? args.argsJsonSchema : existing.argsJsonSchema;
179774
- const trackedMetadataChanged = args.description !== existing.description || args.intent !== existing.intent || args.signatureJson !== existing.signatureJson || argsJsonSchema2 !== existing.argsJsonSchema;
179775
- const promotedFromScratch = existing.isScratch && !isScratch2;
179776
- const refreshScratchLastUsed = existing.scope === "agent" && existing.name.startsWith("scratch-") && existing.isScratch && isScratch2;
179777
- if (fsMode2 !== existing.fsMode || isScratch2 !== existing.isScratch || typeChecked2 !== existing.typeChecked || trackedMetadataChanged || refreshScratchLastUsed) {
179778
- const row = await getDbClient().get(`UPDATE scripts
179779
- SET description = ?, intent = ?, signatureJson = ?, argsJsonSchema = ?,
179780
- isScratch = ?, typeChecked = ?, fsMode = ?, updatedAt = ?, updated_by = ?
179781
- WHERE id = ?
179782
- RETURNING *`, [
179783
- args.description,
179784
- args.intent,
179785
- args.signatureJson,
179786
- argsJsonSchema2 ?? null,
179787
- isScratch2 ? 1 : 0,
179788
- typeChecked2 ? 1 : 0,
179789
- fsMode2,
179790
- new Date().toISOString(),
179791
- args.createdBy ?? null,
179792
- existing.id
179793
- ]);
179794
- if (!row)
179795
- throw new Error("Failed to update script metadata");
179796
- const script2 = rowToScript(row);
179797
- if (!script2.isScratch && shouldEmbed && (trackedMetadataChanged || promotedFromScratch)) {
179798
- await embedScript(script2);
179799
- }
179800
- return {
179801
- script: script2,
179802
- isNew: false,
179803
- contentDeduped: true
179804
- };
179805
- }
179806
- return {
179807
- script: existing,
179808
- isNew: false,
179809
- contentDeduped: true
179810
- };
179811
- }
179812
- const now = new Date().toISOString();
179813
- const newVersion = existing.version + 1;
179814
- const fsMode = args.fsMode ?? existing.fsMode;
179815
- const isScratch = args.isScratch ?? existing.isScratch;
179816
- const typeChecked = args.typeChecked ?? existing.typeChecked;
179817
- const argsJsonSchema = args.argsJsonSchema !== undefined ? args.argsJsonSchema : existing.argsJsonSchema;
179818
- const script = await getDbClient().transaction(async (tx) => {
179819
- const row = await tx.get(`UPDATE scripts
179820
- SET source = ?, description = ?, intent = ?, signatureJson = ?, argsJsonSchema = ?,
179821
- contentHash = ?, version = ?, isScratch = ?, typeChecked = ?, fsMode = ?, updatedAt = ?, updated_by = ?
179822
- WHERE id = ?
179823
- RETURNING *`, [
179824
- args.source,
179825
- args.description,
179826
- args.intent,
179827
- args.signatureJson,
179828
- argsJsonSchema ?? null,
179829
- contentHash,
179830
- newVersion,
179831
- isScratch ? 1 : 0,
179832
- typeChecked ? 1 : 0,
179833
- fsMode,
179834
- now,
179835
- args.createdBy ?? null,
179836
- existing.id
179837
- ]);
179838
- if (!row)
179839
- throw new Error("Failed to update script");
179840
- await insertScriptVersion({
179841
- scriptId: row.id,
179842
- version: row.version,
179843
- source: row.source,
179844
- description: row.description,
179845
- intent: row.intent,
179846
- signatureJson: row.signatureJson,
179847
- contentHash: row.contentHash,
179848
- changedByAgentId: args.agentId ?? null,
179849
- changeReason: args.changeReason ?? null
179850
- });
179851
- return rowToScript(row);
179852
- });
179853
- if (!script.isScratch && shouldEmbed) {
179854
- await embedScript(script);
179855
- }
179856
- return {
179857
- script,
179858
- isNew: false,
179859
- contentDeduped: false
179860
- };
179861
- }
179862
- async function getScript(args) {
179863
- const scopeId = normalizeScopeId(args.scope, args.scopeId);
179864
- const row = scopeId === null ? await getDbClient().get("SELECT * FROM scripts WHERE name = ? AND scope = ? AND scopeId IS NULL", [args.name, args.scope]) : await getDbClient().get("SELECT * FROM scripts WHERE name = ? AND scope = ? AND scopeId = ?", [args.name, args.scope, scopeId]);
179865
- return row ? rowToScript(row) : null;
179866
- }
179867
- async function getScriptById(id) {
179868
- const row = await getDbClient().get("SELECT * FROM scripts WHERE id = ?", [id]);
179869
- return row ? rowToScript(row) : null;
179870
- }
179871
- async function getScriptVersion(args) {
179872
- if (args.version === undefined && args.contentHash === undefined) {
179873
- throw new Error("version or contentHash is required");
179874
- }
179875
- const row = args.version !== undefined ? await getDbClient().get("SELECT * FROM script_versions WHERE scriptId = ? AND version = ?", [args.scriptId, args.version]) : await getDbClient().get("SELECT * FROM script_versions WHERE scriptId = ? AND contentHash = ? ORDER BY version DESC LIMIT 1", [args.scriptId, args.contentHash]);
179876
- return row ? rowToScriptVersion(row) : null;
179877
- }
179878
- async function listScripts(args) {
179879
- const conditions = [];
179880
- const params = [];
179881
- if (args?.scope) {
179882
- conditions.push("scope = ?");
179883
- params.push(args.scope);
179884
- if (args.scope === "global") {
179885
- conditions.push("scopeId IS NULL");
179886
- } else if (args.scopeId !== undefined) {
179887
- conditions.push("scopeId = ?");
179888
- params.push(normalizeScopeId(args.scope, args.scopeId));
179889
- }
179890
- } else if (args?.scopeId !== undefined) {
179891
- conditions.push("scopeId = ?");
179892
- params.push(args.scopeId ?? "");
179893
- }
179894
- if (!args?.includeScratch) {
179895
- conditions.push("isScratch = 0");
179896
- }
179897
- const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
179898
- const rows = await getDbClient().query(`SELECT * FROM scripts ${whereClause} ORDER BY scope ASC, scopeId ASC, name ASC`, params);
179899
- return rows.map(rowToScript);
179900
- }
179901
- async function listScriptVersions(scriptId) {
179902
- const rows = await getDbClient().query("SELECT * FROM script_versions WHERE scriptId = ? ORDER BY version DESC", [scriptId]);
179903
- return rows.map(rowToScriptVersion);
179904
- }
179905
- async function deleteScript(args) {
179906
- const existing = await getScript(args);
179907
- if (!existing)
179908
- return false;
179909
- const result = await getDbClient().run("DELETE FROM scripts WHERE id = ?", [existing.id]);
179910
- return result.changes > 0;
179911
- }
179912
- async function touchScratchScriptLastUsed(id, at = new Date().toISOString()) {
179913
- const result = await getDbClient().run(`UPDATE scripts SET updatedAt = ?
179914
- WHERE id = ? AND scope = 'agent' AND isScratch = 1 AND name GLOB 'scratch-*'`, [at, id]);
179915
- return result.changes > 0 ? at : null;
179916
- }
179917
- async function restoreScratchScriptLastUsedIfUnchanged(id, priorUpdatedAt, expectedUpdatedAt) {
179918
- const result = await getDbClient().run(`UPDATE scripts SET updatedAt = ?
179919
- WHERE id = ? AND scope = 'agent' AND isScratch = 1 AND name GLOB 'scratch-*' AND updatedAt = ?`, [priorUpdatedAt, id, expectedUpdatedAt]);
179920
- return result.changes > 0;
179921
- }
179922
- var SCRIPT_API_ID_LEN = 12;
179923
- function rowToScriptApi(row) {
179924
- return {
179925
- id: row.id,
179926
- scriptId: row.scriptId,
179927
- agentId: row.agentId,
179928
- authMode: row.authMode,
179929
- enabled: row.enabled === 1,
179930
- label: row.label ?? null,
179931
- callCount: row.callCount,
179932
- lastUsedAt: row.lastUsedAt ?? null,
179933
- createdAt: row.createdAt
179934
- };
179935
- }
179936
- function isUniqueConstraintError(err) {
179937
- return err instanceof Error && /UNIQUE constraint failed/i.test(err.message);
179938
- }
179939
- async function createScriptApi(args) {
179940
- const now = new Date().toISOString();
179941
- const token = args.authMode === "bearer" ? generateBearerToken() : null;
179942
- const encrypted = token ? encryptSecret(token, getEncryptionKey()) : null;
179943
- const createdBy = args.createdBy ?? null;
179944
- for (let attempt = 0;attempt < 5; attempt++) {
179945
- const id = generateShortId(SCRIPT_API_ID_LEN);
179946
- try {
179947
- const row = await getDbClient().get(`INSERT INTO script_apis
179948
- (id, scriptId, agentId, authMode, bearerTokenEncrypted, enabled, label,
179949
- callCount, lastUsedAt, createdAt, created_by, updated_by)
179950
- VALUES (?, ?, ?, ?, ?, 1, ?, 0, NULL, ?, ?, ?)
179951
- RETURNING *`, [
179952
- id,
179953
- args.scriptId,
179954
- args.agentId,
179955
- args.authMode,
179956
- encrypted,
179957
- args.label ?? null,
179958
- now,
179959
- createdBy,
179960
- createdBy
179961
- ]);
179962
- if (!row)
179963
- throw new Error("Failed to create script API endpoint");
179964
- if (token)
179965
- registerVolatileSecret(token, `script-api:${id}`);
179966
- return { ...rowToScriptApi(row), token };
179967
- } catch (err) {
179968
- if (isUniqueConstraintError(err) && attempt < 4)
179969
- continue;
179970
- throw err;
179971
- }
179972
- }
179973
- throw new Error("Failed to allocate a unique script API endpoint id");
179974
- }
179975
- async function listScriptApisForScript(scriptId) {
179976
- const rows = await getDbClient().query("SELECT * FROM script_apis WHERE scriptId = ? ORDER BY createdAt DESC", [scriptId]);
179977
- return rows.map(rowToScriptApi);
179978
- }
179979
- async function getScriptApiById(id) {
179980
- const row = await getDbClient().get("SELECT * FROM script_apis WHERE id = ?", [id]);
179981
- if (!row)
179982
- return null;
179983
- return { ...rowToScriptApi(row), bearerTokenEncrypted: row.bearerTokenEncrypted ?? null };
179984
- }
179985
- async function getScriptApiSecret(id) {
179986
- const row = await getDbClient().get("SELECT bearerTokenEncrypted FROM script_apis WHERE id = ?", [id]);
179987
- if (!row?.bearerTokenEncrypted)
179988
- return null;
179989
- const token = decryptSecret(row.bearerTokenEncrypted, getEncryptionKey());
179990
- registerVolatileSecret(token, `script-api:${id}`);
179991
- return token;
179992
- }
179993
- async function updateScriptApi(id, args) {
179994
- const sets = [];
179995
- const vals = [];
179996
- if (args.enabled !== undefined) {
179997
- sets.push("enabled = ?");
179998
- vals.push(args.enabled ? 1 : 0);
179999
- }
180000
- if (args.label !== undefined) {
180001
- sets.push("label = ?");
180002
- vals.push(args.label);
180003
- }
180004
- if (args.updatedBy !== undefined) {
180005
- sets.push("updated_by = ?");
180006
- vals.push(args.updatedBy);
180007
- }
180008
- if (sets.length === 0) {
180009
- const row2 = await getDbClient().get("SELECT * FROM script_apis WHERE id = ?", [
180010
- id
180011
- ]);
180012
- return row2 ? rowToScriptApi(row2) : null;
180013
- }
180014
- vals.push(id);
180015
- const row = await getDbClient().get(`UPDATE script_apis SET ${sets.join(", ")} WHERE id = ? RETURNING *`, vals);
180016
- return row ? rowToScriptApi(row) : null;
180017
- }
180018
- async function rotateScriptApiSecret(id, updatedBy) {
180019
- const existing = await getScriptApiById(id);
180020
- if (!existing || existing.authMode !== "bearer")
180021
- return null;
180022
- const token = generateBearerToken();
180023
- const encrypted = encryptSecret(token, getEncryptionKey());
180024
- const row = await getDbClient().get("UPDATE script_apis SET bearerTokenEncrypted = ?, updated_by = ? WHERE id = ? RETURNING *", [encrypted, updatedBy ?? null, id]);
180025
- if (!row)
180026
- return null;
180027
- registerVolatileSecret(token, `script-api:${id}`);
180028
- return { ...rowToScriptApi(row), token };
180029
- }
180030
- async function deleteScriptApi(id) {
180031
- const result = await getDbClient().run("DELETE FROM script_apis WHERE id = ?", [id]);
180032
- return result.changes > 0;
180033
- }
180034
- async function recordScriptApiUsage(id) {
180035
- await getDbClient().run("UPDATE script_apis SET callCount = callCount + 1, lastUsedAt = ? WHERE id = ?", [new Date().toISOString(), id]);
180036
- }
180037
-
180038
179644
  // src/scripts-runtime/import-allowlist.ts
180039
179645
  var import_typescript = __toESM(require_typescript(), 1);
180040
179646
  var SCRIPT_ALLOWED_BARE_IMPORTS = ["swarm-sdk", "stdlib", "zod"];
@@ -180436,9 +180042,162 @@ class NativeScriptExecutor {
180436
180042
  }
180437
180043
  }
180438
180044
 
180045
+ // src/scripts-runtime/executors/quickjs.ts
180046
+ var POOL_SIZE = 4;
180047
+ var UNRESPONSIVE_GRACE_MS = 5000;
180048
+ var RECYCLE_WASM_HEAP_BYTES = 64 * 1024 * 1024;
180049
+ function workerSpecifier() {
180050
+ if (import.meta.url.includes("/$bunfs/"))
180051
+ return "./scripts-runtime/executors/quickjs-worker.ts";
180052
+ return new URL("./quickjs-worker.ts", import.meta.url).href;
180053
+ }
180054
+ function emptyOutput(error, stderr = "") {
180055
+ return {
180056
+ result: undefined,
180057
+ stdout: "",
180058
+ stderr,
180059
+ truncated: { stdout: false, stderr: false },
180060
+ durationMs: 0,
180061
+ exitCode: 1,
180062
+ error
180063
+ };
180064
+ }
180065
+
180066
+ class QuickJSWorkerPool {
180067
+ size;
180068
+ slots = [];
180069
+ waiters = [];
180070
+ constructor(size) {
180071
+ this.size = size;
180072
+ }
180073
+ spawn() {
180074
+ const worker = new Worker(workerSpecifier());
180075
+ worker.unref?.();
180076
+ const ready = new Promise((resolve, reject) => {
180077
+ const onMessage = (event) => {
180078
+ if (event.data.type === "ready")
180079
+ resolve();
180080
+ else if (event.data.type === "fatal" && event.data.id === undefined) {
180081
+ reject(new Error(event.data.message));
180082
+ } else
180083
+ return;
180084
+ worker.removeEventListener("message", onMessage);
180085
+ };
180086
+ worker.addEventListener("message", onMessage);
180087
+ worker.addEventListener("error", (event) => reject(new Error(event.message)), { once: true });
180088
+ });
180089
+ ready.catch(() => {});
180090
+ const slot = { worker, ready, busy: true };
180091
+ this.slots.push(slot);
180092
+ return slot;
180093
+ }
180094
+ acquire() {
180095
+ const idle = this.slots.find((slot) => !slot.busy);
180096
+ if (idle) {
180097
+ idle.busy = true;
180098
+ return Promise.resolve(idle);
180099
+ }
180100
+ if (this.slots.length < this.size)
180101
+ return Promise.resolve(this.spawn());
180102
+ return new Promise((resolve) => this.waiters.push(resolve));
180103
+ }
180104
+ release(slot) {
180105
+ const waiter = this.waiters.shift();
180106
+ if (waiter)
180107
+ waiter(slot);
180108
+ else
180109
+ slot.busy = false;
180110
+ }
180111
+ get workerCount() {
180112
+ return this.slots.length;
180113
+ }
180114
+ discard(slot) {
180115
+ slot.worker.terminate();
180116
+ const index = this.slots.indexOf(slot);
180117
+ if (index !== -1)
180118
+ this.slots.splice(index, 1);
180119
+ const waiter = this.waiters.shift();
180120
+ if (waiter)
180121
+ waiter(this.spawn());
180122
+ }
180123
+ }
180124
+ var sharedPool;
180125
+ var requestSeq = 0;
180126
+
180127
+ class QuickJSScriptExecutor {
180128
+ name = "quickjs";
180129
+ async run(input) {
180130
+ if (input.fsMode === "workspace-rw") {
180131
+ return emptyOutput("executor_error", "workspace-rw not supported by quickjs executor");
180132
+ }
180133
+ if (input.signal?.aborted)
180134
+ return emptyOutput("killed");
180135
+ sharedPool ??= new QuickJSWorkerPool(POOL_SIZE);
180136
+ const pool = sharedPool;
180137
+ const slot = await pool.acquire();
180138
+ if (input.signal?.aborted) {
180139
+ pool.release(slot);
180140
+ return emptyOutput("killed");
180141
+ }
180142
+ try {
180143
+ await slot.ready;
180144
+ } catch (error) {
180145
+ pool.discard(slot);
180146
+ return emptyOutput("executor_error", `quickjs worker failed to start: ${error instanceof Error ? error.message : String(error)}`);
180147
+ }
180148
+ const id = ++requestSeq;
180149
+ const start = performance.now();
180150
+ return await new Promise((resolve) => {
180151
+ let settled = false;
180152
+ const settle = (output, healthy) => {
180153
+ if (settled)
180154
+ return;
180155
+ settled = true;
180156
+ clearTimeout(watchdog);
180157
+ slot.worker.removeEventListener("message", onMessage);
180158
+ slot.worker.removeEventListener("error", onError);
180159
+ input.signal?.removeEventListener("abort", onAbort);
180160
+ if (healthy)
180161
+ pool.release(slot);
180162
+ else
180163
+ pool.discard(slot);
180164
+ resolve(output);
180165
+ };
180166
+ const elapsed = () => Math.round(performance.now() - start);
180167
+ const onMessage = (event) => {
180168
+ const message = event.data;
180169
+ if (message.type === "result" && message.id === id) {
180170
+ const reusable = message.leakedHostCalls === 0 && (message.wasmHeapBytes ?? 0) <= RECYCLE_WASM_HEAP_BYTES;
180171
+ settle(message.output, reusable);
180172
+ } else if (message.type === "fatal" && message.id === id) {
180173
+ settle({ ...emptyOutput("executor_error", message.message), durationMs: elapsed() }, false);
180174
+ }
180175
+ };
180176
+ const onError = (event) => {
180177
+ settle({ ...emptyOutput("executor_error", event.message), durationMs: elapsed() }, false);
180178
+ };
180179
+ const onAbort = () => settle({ ...emptyOutput("killed"), durationMs: elapsed() }, false);
180180
+ const watchdog = setTimeout(() => settle({ ...emptyOutput("timeout"), exitCode: 124, durationMs: elapsed() }, false), input.resources.wallClockMs + UNRESPONSIVE_GRACE_MS);
180181
+ slot.worker.addEventListener("message", onMessage);
180182
+ slot.worker.addEventListener("error", onError);
180183
+ input.signal?.addEventListener("abort", onAbort, { once: true });
180184
+ slot.worker.postMessage({
180185
+ id,
180186
+ job: {
180187
+ source: input.source,
180188
+ args: input.args,
180189
+ configPayload: input.configPayload,
180190
+ resources: input.resources
180191
+ }
180192
+ });
180193
+ });
180194
+ }
180195
+ }
180196
+
180439
180197
  // src/scripts-runtime/executors/registry.ts
180440
180198
  var EXECUTORS = {
180441
- native: () => new NativeScriptExecutor
180199
+ native: () => new NativeScriptExecutor,
180200
+ quickjs: () => new QuickJSScriptExecutor
180442
180201
  };
180443
180202
  function getScriptExecutor(name = process.env.SCRIPT_EXECUTOR ?? "native") {
180444
180203
  const factory = EXECUTORS[name];
@@ -180646,8 +180405,10 @@ import { fileURLToPath as fileURLToPath3 } from "node:url";
180646
180405
 
180647
180406
  // src/apps/definition.ts
180648
180407
  init_zod();
180408
+ init_db();
180649
180409
 
180650
180410
  // src/be/scripts/run-saved.ts
180411
+ init_db();
180651
180412
  function getSavedScriptOwnerAgentId(script) {
180652
180413
  return script.scopeId ?? script.createdByAgentId;
180653
180414
  }
@@ -183042,7 +182803,7 @@ function validatePage(definition, catalog, target) {
183042
182803
  }
183043
182804
 
183044
182805
  // src/apps/sync-run-as.ts
183045
- init_db();
182806
+ init_db2();
183046
182807
  async function resolveSyncRunAs(script) {
183047
182808
  return getSavedScriptOwnerAgentId(script) ?? (await getLeadAgent())?.id ?? "app-sync";
183048
182809
  }
@@ -183764,7 +183525,7 @@ function applyAppDefinitionPatch(stored, patch) {
183764
183525
 
183765
183526
  // src/apps/store.ts
183766
183527
  init_key();
183767
- init_db();
183528
+ init_db2();
183768
183529
 
183769
183530
  // src/apps/format-upgrades.ts
183770
183531
  var CURRENT_APP_SCHEMA_VERSION = 1;
@@ -185166,4 +184927,4 @@ void _scriptMain;
185166
184927
  });
185167
184928
  }
185168
184929
 
185169
- export { require_dist, isInvalidClientError, assertUrlSafe, publicEndpointSsrfOptions, 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, listVendoredOpenapiEntries, ConnectionAuthInputSchema, connectionAuthSummary, listRelationalCredentialBindings, getCredentialBindingById, findCredentialBindingByIdentity, upsertCredentialBinding, disableCredentialBinding, listScriptConnections, listScriptConnectionsAsync, getScriptConnectionById, ScriptConnectionConflictError, connectionAuthInputFromFlat, upsertScriptConnection, refreshScriptConnection, setScriptConnectionEnabled, getScriptApiConnectionDescriptors, getScriptMcpConnectionDescriptors, getScriptApiTypes, getScriptMcpTypes, oauthAppToProviderConfig, getOAuthProviderConfig, getOAuthBindingTokenStatus, buildScriptCredentialBindingsWithFailures, buildScriptCredentialBindings, upsertScriptByName, getScript, getScriptById, getScriptVersion, listScripts, listScriptVersions, deleteScript, touchScratchScriptLastUsed, restoreScratchScriptLastUsedIfUnchanged, createScriptApi, listScriptApisForScript, getScriptApiById, getScriptApiSecret, updateScriptApi, rotateScriptApiSecret, deleteScriptApi, recordScriptApiUsage, 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, BaseExecutor, postApprovalCancellationUpdates, createApprovalFollowUpTask, HumanInTheLoopExecutor, resolveWorkflowLlmConfig, SYSTEM_ONE_DECISION_NODE_TYPE, systemOneRetryViolations, systemOneUnresolvedError, SystemOneDecisionExecutor, getNextTargets, generateEdges, findEntryNodes, resolveValidationPort, getSuccessors, definitionNodeIds, validateDefinition, applyDefinitionPatch, 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 };
184930
+ export { require_dist, isInvalidClientError, assertUrlSafe, publicEndpointSsrfOptions, 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, listVendoredOpenapiEntries, ConnectionAuthInputSchema, connectionAuthSummary, listRelationalCredentialBindings, getCredentialBindingById, findCredentialBindingByIdentity, upsertCredentialBinding, disableCredentialBinding, listScriptConnections, listScriptConnectionsAsync, getScriptConnectionById, ScriptConnectionConflictError, connectionAuthInputFromFlat, upsertScriptConnection, refreshScriptConnection, setScriptConnectionEnabled, 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, BaseExecutor, postApprovalCancellationUpdates, createApprovalFollowUpTask, HumanInTheLoopExecutor, resolveWorkflowLlmConfig, SYSTEM_ONE_DECISION_NODE_TYPE, systemOneRetryViolations, systemOneUnresolvedError, SystemOneDecisionExecutor, getNextTargets, generateEdges, findEntryNodes, resolveValidationPort, getSuccessors, definitionNodeIds, validateDefinition, applyDefinitionPatch, 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 };