@desplega.ai/agent-swarm 1.165.0 → 1.166.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 (188) hide show
  1. package/dist/{acp-adapter-w6zws6me.js → acp-adapter-yzfxn8vj.js} +4 -4
  2. package/dist/{actions-jna0b3wm.js → actions-qz3m692w.js} +20 -24
  3. package/dist/{amp-adapter-0eve81pz.js → amp-adapter-j1xbmsqz.js} +4 -4
  4. package/dist/{app-75hm5cfa.js → app-43vrdmv8.js} +6 -7
  5. package/dist/{assistant-yzd51j33.js → assistant-ertffmka.js} +21 -25
  6. package/dist/{boot-reembed-z158xq32.js → boot-reembed-998jtpdg.js} +9 -12
  7. package/dist/{boot-reembed-2ex2mcsh.js → boot-reembed-s7k7c6v2.js} +10 -12
  8. package/dist/boot-scrub-sweep-nepsk4t1.js +211 -0
  9. package/dist/{boot-seeds-2bmnh18p.js → boot-seeds-vvzs1zhk.js} +8 -8
  10. package/dist/{claude-adapter-jbj1mycz.js → claude-adapter-2zvmekrp.js} +9 -11
  11. package/dist/{claude-managed-adapter-17ggz09t.js → claude-managed-adapter-s49wbk8t.js} +3 -3
  12. package/dist/{claude-managed-setup-ptm1nzm2.js → claude-managed-setup-cvhqq8qn.js} +4 -4
  13. package/dist/{claude-sdk-session-9re1g7r2.js → claude-sdk-session-kkbxtw5q.js} +2618 -2600
  14. package/dist/{cli-k6xx3pve.js → cli-0nhdwxd5.js} +4 -4
  15. package/dist/{cli-n9ehc28t.js → cli-0qjcsxgz.js} +4 -4
  16. package/dist/{cli-zn2v3t8v.js → cli-3ddybbbx.js} +1 -1
  17. package/dist/{cli-5anb0ev3.js → cli-3qn4r334.js} +71 -14
  18. package/dist/{cli-1kzfvd1z.js → cli-4r1sjfc4.js} +9 -5
  19. package/dist/{cli-ba66wyhy.js → cli-66zh26sp.js} +6 -6
  20. package/dist/{cli-9xb89xca.js → cli-68r1j4sg.js} +6 -6
  21. package/dist/{cli-xnzrzets.js → cli-8kgvmkak.js} +2 -2
  22. package/dist/{cli-28smfvbn.js → cli-8t229cmr.js} +5 -5
  23. package/dist/{cli-9866bd07.js → cli-aqcey741.js} +1 -1
  24. package/dist/{cli-90v942q1.js → cli-cpfmqz3n.js} +8 -8
  25. package/dist/{cli-50eg13rj.js → cli-df56tqdw.js} +459 -282
  26. package/dist/{cli-8gpbwy09.js → cli-dw2q9f7g.js} +5 -5
  27. package/dist/{cli-0n4fasz0.js → cli-ecknp7p1.js} +15 -15
  28. package/dist/{cli-xb3c6aat.js → cli-f2n17zhp.js} +1 -1
  29. package/dist/{cli-ftry7975.js → cli-feh3dkah.js} +1 -1
  30. package/dist/{cli-amwhs8h2.js → cli-fn697bnt.js} +2 -2
  31. package/dist/{cli-prt9emct.js → cli-gt8azyet.js} +3 -3
  32. package/dist/{cli-59jn5twa.js → cli-h3x613ze.js} +2 -2
  33. package/dist/{cli-mmzwwptd.js → cli-hf5s9pgf.js} +1 -1
  34. package/dist/cli-j2jbr8af.js +516 -0
  35. package/dist/{cli-wfajtmf7.js → cli-jhm6hzjn.js} +593 -10
  36. package/dist/{cli-xtgtyafv.js → cli-jvj6a0cv.js} +190 -439
  37. package/dist/{cli-hpryr6em.js → cli-mb75wpxf.js} +1 -1
  38. package/dist/{cli-420bdgw0.js → cli-mv2520nm.js} +1 -1
  39. package/dist/{cli-pjxnr1jn.js → cli-mwegs4af.js} +3 -3
  40. package/dist/{cli-5b2fjjzh.js → cli-p4ztb80h.js} +2 -2
  41. package/dist/{cli-e7t4snpa.js → cli-rggdq8wq.js} +4 -4
  42. package/dist/{cli-bdv39kgj.js → cli-rsy933yz.js} +5 -5
  43. package/dist/{cli-gh5yqzpe.js → cli-v2a8x45d.js} +2 -2
  44. package/dist/{cli-bns5c8k9.js → cli-vzc73wet.js} +43 -47
  45. package/dist/cli-wt7ccy4r.js +2654 -0
  46. package/dist/{cli-j0pdrmwg.js → cli-x7kpr72a.js} +3 -3
  47. package/dist/{cli-x7afk5wm.js → cli-xvc3q9br.js} +1 -1
  48. package/dist/{cli-9s3h836g.js → cli-xvdgasgy.js} +1 -1
  49. package/dist/{cli-zvckv750.js → cli-y59h2pk9.js} +2 -2
  50. package/dist/{cli-qdv8kgz7.js → cli-yshaazs1.js} +13884 -3241
  51. package/dist/{cli-nfygw434.js → cli-ysnyhws9.js} +2 -2
  52. package/dist/{cli-fw6vdcq5.js → cli-zp67qg5x.js} +34 -1
  53. package/dist/{cli-ma3zvh39.js → cli-zy7vwsne.js} +6066 -5829
  54. package/dist/cli.js +24 -20
  55. package/dist/{codex-adapter-3qnxshje.js → codex-adapter-dw1wxqt8.js} +7 -7
  56. package/dist/{codex-login-brkxhhdg.js → codex-login-terbdsqq.js} +2 -2
  57. package/dist/{codex-session-runner-612wnapp.js → codex-session-runner-3cgb8y1g.js} +7 -7
  58. package/dist/{commands-2ybfcxkj.js → commands-mhxam6z2.js} +6 -6
  59. package/dist/{cursor-adapter-p3jgdehv.js → cursor-adapter-2qda3st7.js} +3 -3
  60. package/dist/{db-f4ans0jj.js → db-sjks418k.js} +8 -6
  61. package/dist/{devin-adapter-dhzt01ff.js → devin-adapter-bffjj5n4.js} +2 -2
  62. package/dist/{dispatcher-pk182apd.js → dispatcher-1es759rn.js} +18 -22
  63. package/dist/{dsh-adapter-7twaeps1.js → dsh-adapter-bek4cyw9.js} +3 -3
  64. package/dist/{e2b-y8t3jzyz.js → e2b-nd50eccg.js} +1 -1
  65. package/dist/{event-bus-w7ac4n3c.js → event-bus-vnfthafg.js} +2 -2
  66. package/dist/{grok-adapter-yt9pab3k.js → grok-adapter-ar9cw9jg.js} +5 -5
  67. package/dist/{handlers-g2wnr4t9.js → handlers-1gkbhktr.js} +21 -25
  68. package/dist/{hook-f7jt9vnm.js → hook-ds2zxq9v.js} +14 -16
  69. package/dist/{hook-bbdpnkb4.js → hook-vxa3tcsy.js} +8 -10
  70. package/dist/{http-w40q4w94.js → http-3h21z9md.js} +247 -164
  71. package/dist/{index-056j5kzn.js → index-9b65j1m5.js} +8 -8
  72. package/dist/{index-9bfssf54.js → index-bn6cy8ps.js} +18 -22
  73. package/dist/{index-cj1r9q83.js → index-dkfxpkmm.js} +19 -23
  74. package/dist/{index-7n70jwbb.js → index-f8xnqrye.js} +19 -21
  75. package/dist/{index-fdk1t4d6.js → index-n0rxa4ca.js} +11962 -9900
  76. package/dist/{index-k8xc083e.js → index-n99fycq7.js} +18 -22
  77. package/dist/{keepalive-1tj10tf4.js → keepalive-3xspa9jw.js} +11 -8
  78. package/dist/{lead-st0bg7v4.js → lead-6qphc124.js} +34 -38
  79. package/dist/{maintenance-nz71zats.js → maintenance-0teem1bb.js} +7 -9
  80. package/dist/{node-f0ykebbv.js → node-9sg7ajby.js} +25 -7
  81. package/dist/{oauth-refresh-sweep-aefzwvvq.js → oauth-refresh-sweep-sh9q25xp.js} +10 -7
  82. package/dist/{onboard-kgpr9mbn.js → onboard-54qmnqxe.js} +2 -2
  83. package/dist/{opencode-adapter-0c8e70dk.js → opencode-adapter-wjfa2wvd.js} +2 -2
  84. package/dist/{otel-impl-x8zp4y5a.js → otel-impl-ycqzp2a1.js} +2 -2
  85. package/dist/{pi-mono-adapter-t280ah5c.js → pi-mono-adapter-e77e9zst.js} +4 -4
  86. package/dist/{pricing-refresh-9e0q7cwk.js → pricing-refresh-atnkngqs.js} +7 -7
  87. package/dist/{rbac-roles-kcp6zge2.js → rbac-roles-9pjphh9q.js} +6 -6
  88. package/dist/{rbac-roles-790j3ga8.js → rbac-roles-j78wdksm.js} +6 -6
  89. package/dist/{render-v2-tch4nefj.js → render-v2-pxjs49fx.js} +6 -7
  90. package/dist/{setup-rcm303ns.js → setup-ymej0xtx.js} +2 -2
  91. package/dist/{work-objects-ctg7t70w.js → work-objects-3nh4ymzb.js} +22 -26
  92. package/dist/{worker-5dp0xm55.js → worker-qa9fkz5s.js} +34 -38
  93. package/dist/{x-v3yw66zs.js → x-ma4gnfgy.js} +2 -2
  94. package/openapi.json +5 -2
  95. package/package.json +9 -5
  96. package/src/be/automation-preflight.ts +9 -4
  97. package/src/be/boot-scrub-sweep.ts +302 -0
  98. package/src/be/crypto/key-bootstrap.ts +1 -1
  99. package/src/be/db/approvals.ts +15 -1
  100. package/src/be/db/codex-oauth-device-flows.ts +40 -0
  101. package/src/be/db/config-secrets.ts +31 -0
  102. package/src/be/db/runtime.ts +4 -0
  103. package/src/be/db/script-runs.ts +15 -0
  104. package/src/be/db/tasks/write.ts +1 -1
  105. package/src/be/db-queries/mcp-oauth.ts +5 -0
  106. package/src/be/db-queries/oauth.ts +77 -0
  107. package/src/be/db.ts +162 -59
  108. package/src/be/events.ts +17 -1
  109. package/src/be/memory/index-content.ts +2 -2
  110. package/src/be/memory/providers/sqlite-store.ts +63 -11
  111. package/src/be/memory/types.ts +14 -0
  112. package/src/be/migrations/201_workflow_replay_columns.sql +10 -0
  113. package/src/be/migrations/202_codex_oauth_device_flows.sql +24 -0
  114. package/src/be/scripts/db.ts +28 -4
  115. package/src/be/scripts/source-secrets.ts +37 -0
  116. package/src/be/scrub-json.ts +32 -0
  117. package/src/be/sealed-json.ts +59 -0
  118. package/src/be/secret-registry.ts +131 -0
  119. package/src/be/workflow-replay.ts +77 -0
  120. package/src/http/codex-oauth-device.ts +8 -10
  121. package/src/http/db-query-bounded.ts +3 -0
  122. package/src/http/db-query-shared.ts +107 -15
  123. package/src/http/db-query.ts +10 -2
  124. package/src/http/index.ts +23 -6
  125. package/src/http/script-runs.ts +9 -1
  126. package/src/http/scripts.ts +15 -0
  127. package/src/http/workflows.ts +3 -2
  128. package/src/oauth/mcp-wrapper.ts +1 -1
  129. package/src/providers/acp-adapter.ts +25 -11
  130. package/src/providers/acp-target-catalog.ts +35 -1
  131. package/src/providers/acp-targets.ts +69 -3
  132. package/src/providers/amp-adapter.ts +1 -1
  133. package/src/providers/cursor-adapter.ts +1 -1
  134. package/src/script-workflows/supervisor.ts +11 -2
  135. package/src/scripts-runtime/eval-harness.ts +2 -12
  136. package/src/scripts-runtime/executors/quickjs-bundle.ts +152 -0
  137. package/src/scripts-runtime/executors/quickjs-prelude.ts +285 -0
  138. package/src/scripts-runtime/executors/quickjs-runner.ts +580 -0
  139. package/src/scripts-runtime/executors/quickjs-worker.ts +81 -0
  140. package/src/scripts-runtime/executors/quickjs.ts +196 -0
  141. package/src/scripts-runtime/executors/registry.ts +2 -0
  142. package/src/scripts-runtime/executors/sourcemap.ts +79 -0
  143. package/src/scripts-runtime/script-error-hints.ts +14 -0
  144. package/src/server.ts +3 -1
  145. package/src/tests/acp-adapter.test.ts +127 -2
  146. package/src/tests/boot-scrub-sweep.test.ts +390 -0
  147. package/src/tests/check-text-columns.test.ts +145 -0
  148. package/src/tests/claude-sdk-process.fixture.ts +13 -2
  149. package/src/tests/codex-oauth-device.test.ts +23 -37
  150. package/src/tests/db-query-denylist.test.ts +202 -0
  151. package/src/tests/db-task-read-contract.test.ts +1 -0
  152. package/src/tests/db-task-write-contract.test.ts +1 -0
  153. package/src/tests/entrypoint-acp-target-binary.test.ts +31 -1
  154. package/src/tests/events-scrub.test.ts +88 -0
  155. package/src/tests/fixtures/secret-corpus.ts +320 -0
  156. package/src/tests/script-connections.test.ts +5 -0
  157. package/src/tests/script-executor-conformance.test.ts +3 -0
  158. package/src/tests/script-executor-quickjs.test.ts +442 -0
  159. package/src/tests/script-executor-registry.test.ts +6 -1
  160. package/src/tests/script-runs-http.test.ts +88 -1
  161. package/src/tests/script-runs-scrub.test.ts +275 -0
  162. package/src/tests/scripts-http.test.ts +82 -1
  163. package/src/tests/scrubbed-text-12e.test.ts +289 -0
  164. package/src/tests/sealed-key-guard.test.ts +166 -0
  165. package/src/tests/secret-canary-sweep.test.ts +958 -0
  166. package/src/tests/secret-registry.test.ts +355 -0
  167. package/src/tests/secret-rules.test.ts +230 -0
  168. package/src/tests/secret-scrubber.test.ts +3 -2
  169. package/src/tests/workflow-replay.test.ts +518 -0
  170. package/src/tests/workflow-scrub.test.ts +242 -0
  171. package/src/tools/db-query.ts +1 -1
  172. package/src/tools/inject-learning.ts +1 -1
  173. package/src/tools/workflows/get-workflow-run.ts +3 -2
  174. package/src/types.ts +1 -1
  175. package/src/utils/secret-rules.generated.ts +2055 -0
  176. package/src/utils/secret-scrubber.ts +363 -29
  177. package/src/workflows/engine.ts +39 -4
  178. package/src/workflows/recovery.ts +10 -1
  179. package/src/workflows/resume.ts +62 -3
  180. package/src/workflows/retry-poller.ts +3 -0
  181. package/dist/boot-scrub-logs-246yn076.js +0 -99
  182. package/dist/cli-3a4m1aws.js +0 -572
  183. package/dist/cli-a87b04k8.js +0 -951
  184. package/dist/cli-cvk6yzw5.js +0 -40
  185. package/dist/cli-h1spv8v4.js +0 -427
  186. package/dist/cli-jqt9hrnz.js +0 -168
  187. package/dist/cli-yhmwmv0g.js +0 -9281
  188. package/src/be/boot-scrub-logs.ts +0 -132
@@ -12,60 +12,64 @@ import {
12
12
  import {
13
13
  DEFAULT_MODEL,
14
14
  resolveCredential
15
- } from "./cli-xb3c6aat.js";
15
+ } from "./cli-f2n17zhp.js";
16
16
  import {
17
17
  DEFAULT_OPENROUTER_BASE_URL,
18
18
  getOpenRouterBaseUrl
19
19
  } from "./cli-3dpj7atn.js";
20
- import {
21
- embedScript
22
- } from "./cli-jqt9hrnz.js";
23
20
  import {
24
21
  calculatePKCECodeChallenge,
25
22
  ensureAuthorizationTokenOrThrow,
26
23
  generateRandomCodeVerifier,
27
24
  generateRandomState,
28
- getAuthorizationById,
29
- getOAuthApp,
30
- getOAuthAppById,
31
- oauthAppRowToProviderConfig,
32
- updateAuthorizationTokens,
33
- upsertAuthorization
34
- } from "./cli-a87b04k8.js";
25
+ oauthAppRowToProviderConfig
26
+ } from "./cli-j2jbr8af.js";
35
27
  import {
36
28
  getSlackApp
37
- } from "./cli-0n4fasz0.js";
29
+ } from "./cli-ecknp7p1.js";
38
30
  import {
39
31
  CredentialBroker,
40
32
  DEFAULT_CREDENTIAL_BINDINGS,
41
33
  claimApprovalCancellationNotification,
42
34
  completeApprovalCancellationNotificationClaim,
43
- computeContentHash,
44
35
  createTaskExtended,
45
36
  decryptSecret,
46
37
  encryptSecret,
38
+ getAuthorizationById,
47
39
  getDb,
48
40
  getDbClient,
49
41
  getEncryptionKey,
50
42
  getLeadAgent,
51
43
  getMcpServerById,
44
+ getOAuthApp,
45
+ getOAuthAppById,
52
46
  getResolvedConfig,
47
+ getScriptById,
53
48
  getTaskById,
54
49
  init_credential_broker,
55
50
  init_crypto,
56
51
  init_date_utils,
57
52
  init_db,
53
+ init_db1 as init_db2,
54
+ init_oauth,
55
+ init_secret_registry,
58
56
  normalizeDateRequired,
57
+ oauthSecretName,
59
58
  placeholderForConfigKey,
59
+ registerStoredSecret,
60
60
  releaseApprovalCancellationNotificationClaim,
61
+ restoreScratchScriptLastUsedIfUnchanged,
62
+ touchScratchScriptLastUsed,
63
+ updateAuthorizationTokens,
64
+ upsertAuthorization,
61
65
  upsertSwarmConfig
62
- } from "./cli-qdv8kgz7.js";
66
+ } from "./cli-yshaazs1.js";
63
67
  import {
64
68
  TERMINAL_TASK_STATUSES,
65
69
  defaultAssetKey,
66
70
  init_key,
67
71
  init_types
68
- } from "./cli-9s3h836g.js";
72
+ } from "./cli-xvdgasgy.js";
69
73
  import {
70
74
  getAppUrl,
71
75
  init_constants
@@ -102,7 +106,7 @@ import {
102
106
  registerVolatileSecret,
103
107
  scrubObject,
104
108
  scrubSecrets
105
- } from "./cli-h1spv8v4.js";
109
+ } from "./cli-wt7ccy4r.js";
106
110
  import {
107
111
  __commonJS,
108
112
  __require,
@@ -175254,7 +175258,7 @@ init_constants();
175254
175258
  init_secret_scrubber();
175255
175259
 
175256
175260
  // src/workflows/approval-notifications.ts
175257
- init_db();
175261
+ init_db2();
175258
175262
  init_resolver();
175259
175263
  init_types();
175260
175264
  init_secret_scrubber();
@@ -175590,7 +175594,7 @@ class HumanInTheLoopExecutor extends BaseExecutor {
175590
175594
  }
175591
175595
  if (notification.channel === "slack") {
175592
175596
  try {
175593
- const { getSlackApp: getSlackApp2 } = await import("./app-75hm5cfa.js");
175597
+ const { getSlackApp: getSlackApp2 } = await import("./app-43vrdmv8.js");
175594
175598
  const slackApp = getSlackApp2();
175595
175599
  if (!slackApp) {
175596
175600
  console.warn("[HITL] Slack not initialized — cannot send notification");
@@ -177233,7 +177237,8 @@ function applyDefinitionPatch(def, patch) {
177233
177237
 
177234
177238
  // src/be/script-connections.ts
177235
177239
  init_zod();
177236
- init_db();
177240
+ init_db2();
177241
+ init_oauth();
177237
177242
 
177238
177243
  // src/oauth/mcp-wrapper.ts
177239
177244
  init_env_flag();
@@ -177602,13 +177607,15 @@ init_credential_broker();
177602
177607
  init_secret_scrubber();
177603
177608
 
177604
177609
  // src/be/mcp-proxy.ts
177605
- init_db();
177610
+ init_db2();
177606
177611
 
177607
177612
  // src/be/db-queries/mcp-oauth.ts
177608
177613
  init_secret_scrubber();
177609
177614
  init_crypto();
177610
177615
  init_date_utils();
177611
- init_db();
177616
+ init_db2();
177617
+ init_secret_registry();
177618
+ init_oauth();
177612
177619
  function parseObject(value) {
177613
177620
  try {
177614
177621
  const parsed = JSON.parse(value || "{}");
@@ -177695,6 +177702,7 @@ async function upsertMcpApp(input) {
177695
177702
  invalidated: false
177696
177703
  });
177697
177704
  const encryptedClientSecret = input.dcrClientSecret == null || input.dcrClientSecret === "" ? existing?.clientSecret ?? null : encryptSecret(input.dcrClientSecret, getEncryptionKey());
177705
+ registerStoredSecret(input.dcrClientSecret, oauthSecretName(`mcp-${input.mcpServerId}`, "client_secret"));
177698
177706
  const source = "dcr";
177699
177707
  if (existing) {
177700
177708
  await getDbClient().run(`UPDATE oauth_apps SET
@@ -179557,9 +179565,10 @@ ${members.join(`
179557
179565
  // src/be/script-credential-broker.ts
179558
179566
  init_credential_broker();
179559
179567
  init_secret_scrubber();
179560
- init_db();
179568
+ init_db2();
179561
179569
 
179562
179570
  // src/be/oauth-credential-bindings.ts
179571
+ init_oauth();
179563
179572
  var OAUTH_BINDING_REFRESH_BUFFER_MS = 5 * 60 * 1000;
179564
179573
  function oauthAppToProviderConfig(app) {
179565
179574
  return oauthAppRowToProviderConfig(app);
@@ -179622,419 +179631,6 @@ async function buildScriptCredentialBindings(input) {
179622
179631
  return (await buildScriptCredentialBindingsWithFailures(input)).egressSecrets;
179623
179632
  }
179624
179633
 
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
179634
  // src/scripts-runtime/import-allowlist.ts
180039
179635
  var import_typescript = __toESM(require_typescript(), 1);
180040
179636
  var SCRIPT_ALLOWED_BARE_IMPORTS = ["swarm-sdk", "stdlib", "zod"];
@@ -180436,9 +180032,162 @@ class NativeScriptExecutor {
180436
180032
  }
180437
180033
  }
180438
180034
 
180035
+ // src/scripts-runtime/executors/quickjs.ts
180036
+ var POOL_SIZE = 4;
180037
+ var UNRESPONSIVE_GRACE_MS = 5000;
180038
+ var RECYCLE_WASM_HEAP_BYTES = 64 * 1024 * 1024;
180039
+ function workerSpecifier() {
180040
+ if (import.meta.url.includes("/$bunfs/"))
180041
+ return "./scripts-runtime/executors/quickjs-worker.ts";
180042
+ return new URL("./quickjs-worker.ts", import.meta.url).href;
180043
+ }
180044
+ function emptyOutput(error, stderr = "") {
180045
+ return {
180046
+ result: undefined,
180047
+ stdout: "",
180048
+ stderr,
180049
+ truncated: { stdout: false, stderr: false },
180050
+ durationMs: 0,
180051
+ exitCode: 1,
180052
+ error
180053
+ };
180054
+ }
180055
+
180056
+ class QuickJSWorkerPool {
180057
+ size;
180058
+ slots = [];
180059
+ waiters = [];
180060
+ constructor(size) {
180061
+ this.size = size;
180062
+ }
180063
+ spawn() {
180064
+ const worker = new Worker(workerSpecifier());
180065
+ worker.unref?.();
180066
+ const ready = new Promise((resolve, reject) => {
180067
+ const onMessage = (event) => {
180068
+ if (event.data.type === "ready")
180069
+ resolve();
180070
+ else if (event.data.type === "fatal" && event.data.id === undefined) {
180071
+ reject(new Error(event.data.message));
180072
+ } else
180073
+ return;
180074
+ worker.removeEventListener("message", onMessage);
180075
+ };
180076
+ worker.addEventListener("message", onMessage);
180077
+ worker.addEventListener("error", (event) => reject(new Error(event.message)), { once: true });
180078
+ });
180079
+ ready.catch(() => {});
180080
+ const slot = { worker, ready, busy: true };
180081
+ this.slots.push(slot);
180082
+ return slot;
180083
+ }
180084
+ acquire() {
180085
+ const idle = this.slots.find((slot) => !slot.busy);
180086
+ if (idle) {
180087
+ idle.busy = true;
180088
+ return Promise.resolve(idle);
180089
+ }
180090
+ if (this.slots.length < this.size)
180091
+ return Promise.resolve(this.spawn());
180092
+ return new Promise((resolve) => this.waiters.push(resolve));
180093
+ }
180094
+ release(slot) {
180095
+ const waiter = this.waiters.shift();
180096
+ if (waiter)
180097
+ waiter(slot);
180098
+ else
180099
+ slot.busy = false;
180100
+ }
180101
+ get workerCount() {
180102
+ return this.slots.length;
180103
+ }
180104
+ discard(slot) {
180105
+ slot.worker.terminate();
180106
+ const index = this.slots.indexOf(slot);
180107
+ if (index !== -1)
180108
+ this.slots.splice(index, 1);
180109
+ const waiter = this.waiters.shift();
180110
+ if (waiter)
180111
+ waiter(this.spawn());
180112
+ }
180113
+ }
180114
+ var sharedPool;
180115
+ var requestSeq = 0;
180116
+
180117
+ class QuickJSScriptExecutor {
180118
+ name = "quickjs";
180119
+ async run(input) {
180120
+ if (input.fsMode === "workspace-rw") {
180121
+ return emptyOutput("executor_error", "workspace-rw not supported by quickjs executor");
180122
+ }
180123
+ if (input.signal?.aborted)
180124
+ return emptyOutput("killed");
180125
+ sharedPool ??= new QuickJSWorkerPool(POOL_SIZE);
180126
+ const pool = sharedPool;
180127
+ const slot = await pool.acquire();
180128
+ if (input.signal?.aborted) {
180129
+ pool.release(slot);
180130
+ return emptyOutput("killed");
180131
+ }
180132
+ try {
180133
+ await slot.ready;
180134
+ } catch (error) {
180135
+ pool.discard(slot);
180136
+ return emptyOutput("executor_error", `quickjs worker failed to start: ${error instanceof Error ? error.message : String(error)}`);
180137
+ }
180138
+ const id = ++requestSeq;
180139
+ const start = performance.now();
180140
+ return await new Promise((resolve) => {
180141
+ let settled = false;
180142
+ const settle = (output, healthy) => {
180143
+ if (settled)
180144
+ return;
180145
+ settled = true;
180146
+ clearTimeout(watchdog);
180147
+ slot.worker.removeEventListener("message", onMessage);
180148
+ slot.worker.removeEventListener("error", onError);
180149
+ input.signal?.removeEventListener("abort", onAbort);
180150
+ if (healthy)
180151
+ pool.release(slot);
180152
+ else
180153
+ pool.discard(slot);
180154
+ resolve(output);
180155
+ };
180156
+ const elapsed = () => Math.round(performance.now() - start);
180157
+ const onMessage = (event) => {
180158
+ const message = event.data;
180159
+ if (message.type === "result" && message.id === id) {
180160
+ const reusable = message.leakedHostCalls === 0 && (message.wasmHeapBytes ?? 0) <= RECYCLE_WASM_HEAP_BYTES;
180161
+ settle(message.output, reusable);
180162
+ } else if (message.type === "fatal" && message.id === id) {
180163
+ settle({ ...emptyOutput("executor_error", message.message), durationMs: elapsed() }, false);
180164
+ }
180165
+ };
180166
+ const onError = (event) => {
180167
+ settle({ ...emptyOutput("executor_error", event.message), durationMs: elapsed() }, false);
180168
+ };
180169
+ const onAbort = () => settle({ ...emptyOutput("killed"), durationMs: elapsed() }, false);
180170
+ const watchdog = setTimeout(() => settle({ ...emptyOutput("timeout"), exitCode: 124, durationMs: elapsed() }, false), input.resources.wallClockMs + UNRESPONSIVE_GRACE_MS);
180171
+ slot.worker.addEventListener("message", onMessage);
180172
+ slot.worker.addEventListener("error", onError);
180173
+ input.signal?.addEventListener("abort", onAbort, { once: true });
180174
+ slot.worker.postMessage({
180175
+ id,
180176
+ job: {
180177
+ source: input.source,
180178
+ args: input.args,
180179
+ configPayload: input.configPayload,
180180
+ resources: input.resources
180181
+ }
180182
+ });
180183
+ });
180184
+ }
180185
+ }
180186
+
180439
180187
  // src/scripts-runtime/executors/registry.ts
180440
180188
  var EXECUTORS = {
180441
- native: () => new NativeScriptExecutor
180189
+ native: () => new NativeScriptExecutor,
180190
+ quickjs: () => new QuickJSScriptExecutor
180442
180191
  };
180443
180192
  function getScriptExecutor(name = process.env.SCRIPT_EXECUTOR ?? "native") {
180444
180193
  const factory = EXECUTORS[name];
@@ -180646,8 +180395,10 @@ import { fileURLToPath as fileURLToPath3 } from "node:url";
180646
180395
 
180647
180396
  // src/apps/definition.ts
180648
180397
  init_zod();
180398
+ init_db();
180649
180399
 
180650
180400
  // src/be/scripts/run-saved.ts
180401
+ init_db();
180651
180402
  function getSavedScriptOwnerAgentId(script) {
180652
180403
  return script.scopeId ?? script.createdByAgentId;
180653
180404
  }
@@ -183042,7 +182793,7 @@ function validatePage(definition, catalog, target) {
183042
182793
  }
183043
182794
 
183044
182795
  // src/apps/sync-run-as.ts
183045
- init_db();
182796
+ init_db2();
183046
182797
  async function resolveSyncRunAs(script) {
183047
182798
  return getSavedScriptOwnerAgentId(script) ?? (await getLeadAgent())?.id ?? "app-sync";
183048
182799
  }
@@ -183764,7 +183515,7 @@ function applyAppDefinitionPatch(stored, patch) {
183764
183515
 
183765
183516
  // src/apps/store.ts
183766
183517
  init_key();
183767
- init_db();
183518
+ init_db2();
183768
183519
 
183769
183520
  // src/apps/format-upgrades.ts
183770
183521
  var CURRENT_APP_SCHEMA_VERSION = 1;
@@ -185166,4 +184917,4 @@ void _scriptMain;
185166
184917
  });
185167
184918
  }
185168
184919
 
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 };
184920
+ 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 };