@desplega.ai/agent-swarm 1.131.1 → 1.133.1

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 (250) hide show
  1. package/README.md +2 -2
  2. package/dist/{actions-jgcy477k.js → actions-cskpayd7.js} +11 -9
  3. package/dist/{anthropic-messages-rjmd2e7n.js → anthropic-messages-tpxtbx7b.js} +28 -12
  4. package/dist/{app-5da78bd4.js → app-ang77nbb.js} +8 -6
  5. package/dist/{assistant-f2vkk1hj.js → assistant-b4exebdw.js} +16 -13
  6. package/dist/{azure-openai-responses-c0yjmbfd.js → azure-openai-responses-m3921t4y.js} +8 -8
  7. package/dist/{boot-reembed-q7mp8hcr.js → boot-reembed-ps2aftpb.js} +9 -7
  8. package/dist/{boot-reembed-xmw8wcx6.js → boot-reembed-znyk3nxb.js} +10 -8
  9. package/dist/{boot-scrub-logs-dsqrv79n.js → boot-scrub-logs-2ax3xgz1.js} +7 -5
  10. package/dist/{claude-adapter-q6x7yspx.js → claude-adapter-3ct8kgxw.js} +13 -9
  11. package/dist/{claude-managed-adapter-wsg37bt8.js → claude-managed-adapter-akx4ntf2.js} +2 -2
  12. package/dist/{cli-114fvtmj.js → cli-13w2hwkh.js} +1 -1
  13. package/dist/{cli-4rkfg1wx.js → cli-1532szb1.js} +8 -6
  14. package/dist/{cli-g74vpjp2.js → cli-23d3rseb.js} +33 -17
  15. package/dist/{cli-3ty0t082.js → cli-2a75z9c5.js} +196 -7
  16. package/dist/{cli-pxfxkx5m.js → cli-2t30rj0d.js} +1 -1
  17. package/dist/{cli-rgrfzg8z.js → cli-3c3tdgab.js} +10 -10
  18. package/dist/{cli-6dp3ydxa.js → cli-3zzxa9jz.js} +15 -11
  19. package/dist/{cli-2f07m0xr.js → cli-4k6233gc.js} +1 -1
  20. package/dist/{cli-t8d349cy.js → cli-5p2tz05r.js} +2 -2
  21. package/dist/{cli-w2wxd56v.js → cli-5z2yhzvd.js} +127 -49
  22. package/dist/{cli-kd1ck4rx.js → cli-6zfq31nj.js} +9 -3
  23. package/dist/{cli-er3a4bb0.js → cli-8m9de10a.js} +6 -1
  24. package/dist/{cli-gm9cbhbq.js → cli-8t14vg9w.js} +27 -8
  25. package/dist/{cli-ccf9vy7q.js → cli-9nfc2es8.js} +6 -6
  26. package/dist/{cli-ycrnynpw.js → cli-9ta3pwms.js} +11 -4
  27. package/dist/{cli-7dm2zqy2.js → cli-avr0ns7z.js} +2 -2
  28. package/dist/{cli-n6h8qt8n.js → cli-c897wyhw.js} +12 -7
  29. package/dist/{cli-gecy3z2s.js → cli-dgk20ft7.js} +4 -4
  30. package/dist/cli-et1bbwqf.js +13 -0
  31. package/dist/{cli-bqw0mt1n.js → cli-f5w27pj3.js} +3 -3
  32. package/dist/{cli-2wadx7p2.js → cli-f8dre4bz.js} +2 -2
  33. package/dist/{cli-6pcz9h15.js → cli-ftwpv451.js} +170 -387
  34. package/dist/{cli-nrkkknat.js → cli-g854s2dw.js} +1 -1
  35. package/dist/{cli-793jvbsh.js → cli-ggmdxeqa.js} +13 -8
  36. package/dist/cli-hkwfe3qj.js +530 -0
  37. package/dist/{cli-5dsbcjjw.js → cli-jqwnqx9m.js} +1 -1
  38. package/dist/{cli-9dr5qzc0.js → cli-ny122vh4.js} +21 -10
  39. package/dist/{cli-sy7jk3tx.js → cli-pvzqhbs9.js} +2 -2
  40. package/dist/cli-pzq5rjym.js +15 -0
  41. package/dist/{cli-xpxde7rm.js → cli-qes8ef67.js} +48 -30
  42. package/dist/{cli-sajgpkqg.js → cli-qs9hhsvb.js} +1723 -325
  43. package/dist/cli-qys3rhhz.js +27 -0
  44. package/dist/{cli-se2p6rkb.js → cli-r6tpm37h.js} +2 -2
  45. package/dist/{cli-g1re8r05.js → cli-rch80c76.js} +2 -2
  46. package/dist/{cli-0258203w.js → cli-rpp0x4zy.js} +137 -17
  47. package/dist/{cli-5n6e5yfn.js → cli-s1k0wxhe.js} +12 -7
  48. package/dist/{cli-aca5pz9f.js → cli-sfd9v7sj.js} +1 -1
  49. package/dist/{cli-2rk0cx7s.js → cli-sh3ytsyj.js} +49 -39
  50. package/dist/{cli-zsspvvm2.js → cli-w1mp9jy7.js} +1 -1
  51. package/dist/{cli-6dpytdr2.js → cli-xdb4mpnp.js} +2 -2
  52. package/dist/{cli-57khth04.js → cli-xmyqv00z.js} +120 -4
  53. package/dist/{cli-jbcva0xj.js → cli-xv8t8p3c.js} +56 -31
  54. package/dist/{cli-f1am9szv.js → cli-xxv5pn4f.js} +1 -1
  55. package/dist/{cli-jevgrb4w.js → cli-y08jvxzx.js} +601 -140
  56. package/dist/{cli-50vbt00w.js → cli-zfbf3srj.js} +650 -245
  57. package/dist/{cli-ygrbmjja.js → cli-zmq89k34.js} +6 -6
  58. package/dist/cli.js +22 -22
  59. package/dist/{codex-adapter-htjkn22b.js → codex-adapter-bef93pq4.js} +9 -7
  60. package/dist/{codex-hook-hq54t9ft.js → codex-hook-e8dba65p.js} +3 -2
  61. package/dist/{codex-session-runner-wjfc7smz.js → codex-session-runner-5pkxys7x.js} +9 -7
  62. package/dist/{commands-xhrfwqsk.js → commands-e23s1bff.js} +9 -7
  63. package/dist/{db-anvwb22f.js → db-m3nabatn.js} +17 -5
  64. package/dist/{google-generative-ai-hysrd8qx.js → google-generative-ai-8maw55xh.js} +11 -8
  65. package/dist/{google-vertex-p5arrga0.js → google-vertex-8vjqmx8g.js} +11 -8
  66. package/dist/{handlers-b9kbc621.js → handlers-akazedvr.js} +16 -13
  67. package/dist/{hook-xkvn6c5h.js → hook-ze4cpf0v.js} +55 -41
  68. package/dist/{hook-cgk4wxmx.js → hook-zfqyyenw.js} +10 -7
  69. package/dist/{http-9xh6ta4r.js → http-sja0n6kw.js} +608 -147
  70. package/dist/index-0gr8vd6k.js +39 -0
  71. package/dist/{index-eaxyqcmj.js → index-354vkhdv.js} +154 -74
  72. package/dist/{index-070v4eyb.js → index-5qthek5t.js} +2 -3
  73. package/dist/{index-25wjsdv2.js → index-95t3cqq5.js} +16 -14
  74. package/dist/{index-9znhar3x.js → index-sea66619.js} +3 -4
  75. package/dist/{index-ywds4812.js → index-vpn36mma.js} +15 -13
  76. package/dist/{keepalive-vc7s2aa6.js → keepalive-3sp3meqj.js} +16 -10
  77. package/dist/{lead-r2yqfmx7.js → lead-mefeewkf.js} +39 -36
  78. package/dist/{maintenance-mw70k468.js → maintenance-8tbrbjfg.js} +10 -8
  79. package/dist/mistral-conversations-00zrp7g4.js +717 -0
  80. package/dist/{oauth-refresh-sweep-yecgjpk4.js → oauth-refresh-sweep-srjwjz6m.js} +8 -6
  81. package/dist/{onboard-xj0f73f9.js → onboard-mt2tgyjg.js} +7 -7
  82. package/dist/{openai-codex-responses-5g27pd6f.js → openai-codex-responses-map32h2s.js} +18 -18
  83. package/dist/{openai-completions-3vkmfz2a.js → openai-completions-w871b1cq.js} +12 -11
  84. package/dist/{openai-responses-dg4t7j7a.js → openai-responses-b0j7xnw8.js} +15 -12
  85. package/dist/{opencode-adapter-1gm38aba.js → opencode-adapter-b39jefcj.js} +5 -3
  86. package/dist/{openrouter-images-g3gm8931.js → openrouter-images-srfkywy0.js} +4 -4
  87. package/dist/{otel-impl-nxg0n0b3.js → otel-impl-z6pxt3j9.js} +224 -9
  88. package/dist/{pi-mono-adapter-4g5kby31.js → pi-mono-adapter-btvqmj58.js} +1138 -408
  89. package/dist/{pricing-refresh-2cn6effr.js → pricing-refresh-kyq8cezh.js} +9 -7
  90. package/dist/{rbac-roles-1hcxdtg7.js → rbac-roles-3ryfrfna.js} +8 -6
  91. package/dist/{rbac-roles-vynday5g.js → rbac-roles-6qfvbee1.js} +9 -7
  92. package/dist/{render-v2-tc0bh8kk.js → render-v2-p61ppjey.js} +8 -6
  93. package/dist/{seed-pricing-8kceb43f.js → seed-pricing-j56bbj4y.js} +8 -6
  94. package/dist/{setup-46xtgq3c.js → setup-tpr6c1kn.js} +2 -2
  95. package/dist/{worker-qrbz6hmv.js → worker-9w1v0mbb.js} +39 -36
  96. package/openapi.json +542 -16
  97. package/package.json +6 -6
  98. package/src/be/budget-refusal-notify.ts +14 -7
  99. package/src/be/db-queries/task-artifacts.ts +182 -0
  100. package/src/be/db.ts +783 -169
  101. package/src/be/events.ts +5 -0
  102. package/src/be/migrations/131_session_logs_created_at_index.sql +2 -0
  103. package/src/be/migrations/132_multi_runtime_instances.sql +44 -0
  104. package/src/be/migrations/133_workflow_run_trigger_type.sql +12 -0
  105. package/src/be/migrations/135_backfill_task_pull_request_attachments.sql +228 -0
  106. package/src/be/migrations/136_task_requester_provenance.sql +37 -0
  107. package/src/be/migrations/137_memory_retrieval_composite_index.sql +1 -0
  108. package/src/be/multi-runtime.ts +430 -0
  109. package/src/be/scripts/extract-schema.ts +3 -1
  110. package/src/be/scripts/typecheck.ts +3 -2
  111. package/src/be/seed-skills/index.ts +7 -0
  112. package/src/be/steering.ts +1 -1
  113. package/src/be/swarm-config-guard.ts +18 -0
  114. package/src/commands/credential-wait.ts +54 -0
  115. package/src/commands/onboard/steps/core-credentials.tsx +1 -1
  116. package/src/commands/onboard/steps/custom-templates.tsx +1 -1
  117. package/src/commands/onboard/steps/harness-credentials.tsx +1 -1
  118. package/src/commands/onboard/steps/health-check.tsx +1 -1
  119. package/src/commands/onboard/steps/start.tsx +1 -1
  120. package/src/commands/profile-sync-audit.ts +56 -0
  121. package/src/commands/profile-sync.ts +287 -15
  122. package/src/commands/provider-credentials.ts +46 -19
  123. package/src/commands/runner.ts +196 -33
  124. package/src/commands/templates.ts +22 -0
  125. package/src/github/handlers.ts +55 -9
  126. package/src/heartbeat/heartbeat.ts +71 -12
  127. package/src/hooks/hook.ts +49 -33
  128. package/src/http/active-sessions.ts +11 -1
  129. package/src/http/agents.ts +261 -30
  130. package/src/http/all-routes.ts +1 -0
  131. package/src/http/config.ts +13 -2
  132. package/src/http/core.ts +102 -4
  133. package/src/http/db-query-bounded.ts +313 -0
  134. package/src/http/db-query-shared.ts +249 -0
  135. package/src/http/db-query.ts +54 -42
  136. package/src/http/events.ts +2 -0
  137. package/src/http/index.ts +22 -2
  138. package/src/http/mcp-bridge.ts +37 -3
  139. package/src/http/mcp.ts +12 -0
  140. package/src/http/memory.ts +13 -2
  141. package/src/http/openapi.ts +1 -0
  142. package/src/http/poll.ts +70 -27
  143. package/src/http/route-def.ts +43 -9
  144. package/src/http/schedules.ts +2 -2
  145. package/src/http/scripts.ts +10 -1
  146. package/src/http/session-data.ts +44 -0
  147. package/src/http/tasks.ts +2 -2
  148. package/src/http/users.ts +74 -52
  149. package/src/http/webhooks.ts +5 -2
  150. package/src/http/workflows.ts +1 -4
  151. package/src/integrations/kapso/inbound.ts +1 -1
  152. package/src/jira/outbound.ts +39 -8
  153. package/src/jira/webhook-lifecycle.ts +13 -2
  154. package/src/linear/outbound.ts +43 -10
  155. package/src/oauth/keepalive.ts +13 -2
  156. package/src/prompts/base-prompt.ts +1 -1
  157. package/src/prompts/session-templates.ts +45 -7
  158. package/src/providers/claude-adapter.ts +6 -0
  159. package/src/providers/codex-adapter.ts +6 -0
  160. package/src/providers/opencode-adapter.ts +6 -0
  161. package/src/providers/pi-mono-adapter.ts +8 -0
  162. package/src/providers/pricing-sources.md +24 -0
  163. package/src/queue-stall-alarm.ts +216 -0
  164. package/src/scheduler/scheduler.ts +7 -0
  165. package/src/script-workflows/executor.ts +2 -1
  166. package/src/scripts-runtime/executors/native.ts +2 -1
  167. package/src/scripts-runtime/executors/types.ts +5 -0
  168. package/src/scripts-runtime/loader.ts +5 -0
  169. package/src/scripts-runtime/swarm-config.ts +8 -0
  170. package/src/scripts-runtime/swarm-sdk.ts +7 -0
  171. package/src/scripts-runtime/types/stdlib.d.ts +1 -0
  172. package/src/scripts-runtime/types/swarm-sdk.d.ts +1 -0
  173. package/src/tests/budget-claim-gate.test.ts +20 -0
  174. package/src/tests/claude-adapter.test.ts +32 -0
  175. package/src/tests/codex-adapter.test.ts +30 -0
  176. package/src/tests/create-task-validation.test.ts +128 -0
  177. package/src/tests/credential-wait.test.ts +67 -1
  178. package/src/tests/db-query.test.ts +711 -2
  179. package/src/tests/http-api-integration.test.ts +81 -0
  180. package/src/tests/http-users.test.ts +166 -1
  181. package/src/tests/identity-field-budget.test.ts +176 -0
  182. package/src/tests/mcp-tools-user.test.ts +34 -0
  183. package/src/tests/mcp-user-route.test.ts +17 -0
  184. package/src/tests/metrics-http.test.ts +44 -0
  185. package/src/tests/multi-runtime-registration.test.ts +2703 -0
  186. package/src/tests/openapi-response-contract.test.ts +24 -0
  187. package/src/tests/openapi-route-headers.test.ts +83 -0
  188. package/src/tests/opencode-adapter.test.ts +40 -0
  189. package/src/tests/outbound-listener-rejection.test.ts +138 -0
  190. package/src/tests/pi-mono-adapter.test.ts +98 -0
  191. package/src/tests/profile-sync-warning.test.ts +277 -0
  192. package/src/tests/profile-sync.test.ts +232 -6
  193. package/src/tests/prompt-template-session.test.ts +32 -3
  194. package/src/tests/queue-stall-alarm.test.ts +226 -0
  195. package/src/tests/requester-comms.test.ts +32 -0
  196. package/src/tests/runner-requester-profile.test.ts +38 -0
  197. package/src/tests/schedule-target-type.test.ts +38 -0
  198. package/src/tests/script-connections.test.ts +13 -1
  199. package/src/tests/scripts-runtime-identity.test.ts +375 -0
  200. package/src/tests/scripts-runtime.test.ts +4 -3
  201. package/src/tests/sdk-allowlist.test.ts +47 -0
  202. package/src/tests/send-task-requested-by.test.ts +9 -0
  203. package/src/tests/session-costs.test.ts +506 -1
  204. package/src/tests/shutdown-error-scrubbing.test.ts +92 -0
  205. package/src/tests/steering-core.test.ts +28 -0
  206. package/src/tests/task-artifacts.test.ts +386 -0
  207. package/src/tests/task-attachments-schema.test.ts +17 -1
  208. package/src/tests/task-completion-idempotency.test.ts +57 -0
  209. package/src/tests/task-pull-request-backfill-migration.test.ts +321 -0
  210. package/src/tests/update-profile-api.test.ts +67 -39
  211. package/src/tests/update-profile-auth.test.ts +48 -4
  212. package/src/tests/user-attribution-migration.test.ts +54 -0
  213. package/src/tests/user-identity.test.ts +72 -0
  214. package/src/tests/workflow-async-v2.test.ts +39 -1
  215. package/src/tests/workflow-http-v2.test.ts +3 -2
  216. package/src/tests/workflow-mcp-trigger-schema.test.ts +52 -3
  217. package/src/tests/workflow-retry-v2.test.ts +45 -1
  218. package/src/tools/db-query.ts +18 -8
  219. package/src/tools/get-task-details.ts +24 -3
  220. package/src/tools/manage-user.ts +36 -3
  221. package/src/tools/poll-task.ts +93 -14
  222. package/src/tools/script-common.ts +5 -0
  223. package/src/tools/send-task.ts +1 -4
  224. package/src/tools/store-progress.ts +13 -2
  225. package/src/tools/swarm-config/delete-config.ts +9 -0
  226. package/src/tools/swarm-config/set-config.ts +3 -2
  227. package/src/tools/task-action.ts +30 -0
  228. package/src/tools/task-tool-ctx.ts +8 -1
  229. package/src/tools/update-profile.ts +16 -21
  230. package/src/tools/utils.ts +5 -0
  231. package/src/tools/workflows/trigger-workflow.ts +7 -1
  232. package/src/types.ts +165 -1
  233. package/src/utils/github-pull-request.ts +76 -0
  234. package/src/utils/identity-field-budget.ts +73 -0
  235. package/src/utils/multi-runtime.ts +20 -0
  236. package/src/utils/requester-comms.ts +24 -0
  237. package/src/workflows/engine.ts +22 -2
  238. package/src/workflows/resume.ts +19 -11
  239. package/src/workflows/retry-poller.ts +1 -0
  240. package/src/workflows/triggers.ts +4 -0
  241. package/templates/skills/db-query-guidance/config.json +14 -0
  242. package/templates/skills/db-query-guidance/content.md +57 -0
  243. package/dist/cli-3te4jdkm.js +0 -225
  244. package/dist/cli-bmze986d.js +0 -7
  245. package/dist/cli-kh3ba2zf.js +0 -607
  246. package/dist/index-vg4snay4.js +0 -36
  247. package/dist/mistral-conversations-81fwav0j.js +0 -30578
  248. package/dist/otel-nqa12wf3.js +0 -3149
  249. package/dist/{cli-wz9115x0.js → cli-zr9q011v.js} +6 -6
  250. package/dist/{pi-messages-tqj8q6b9.js → pi-messages-sssy32x4.js} +3 -3
@@ -1,3 +1,6 @@
1
+ import {
2
+ isMultiRuntimeEnabled
3
+ } from "./cli-pzq5rjym.js";
1
4
  import {
2
5
  taskAttachmentDisplayUrl
3
6
  } from "./cli-t930g0xh.js";
@@ -9,20 +12,206 @@ import {
9
12
  getDb,
10
13
  getDependentTasks,
11
14
  getLeadAgent,
15
+ getSwarmConfigs,
12
16
  getTaskAttachments,
13
17
  getTaskById,
14
18
  hasNonTerminalRerouteDecisionChild,
15
19
  init_date_utils,
16
20
  init_db,
17
- init_templates1 as init_templates,
18
- normalizeDateRequired
19
- } from "./cli-50vbt00w.js";
21
+ init_templates,
22
+ normalizeDateRequired,
23
+ updateAgentMaxTasks,
24
+ updateAgentStatus,
25
+ upsertSwarmConfig
26
+ } from "./cli-zfbf3srj.js";
20
27
  import {
21
- init_env_flag,
22
28
  init_resolver,
23
- isEnvFlagEnabled,
24
29
  resolveTemplate
25
- } from "./cli-xpxde7rm.js";
30
+ } from "./cli-qes8ef67.js";
31
+ import {
32
+ init_env_flag,
33
+ isEnvFlagEnabled
34
+ } from "./cli-qys3rhhz.js";
35
+
36
+ // src/be/multi-runtime.ts
37
+ init_db();
38
+ var AGENT_MAX_TASKS_CONFIG_KEY = "AGENT_MAX_TASKS";
39
+ function parseAgentMaxTasksValue(raw) {
40
+ const str = raw.trim();
41
+ if (!/^\d+$/.test(str))
42
+ return null;
43
+ const value = Number(str);
44
+ return value >= 1 && value <= 100 ? value : null;
45
+ }
46
+ function defaultMaxTasksForAgent(agent) {
47
+ return agent.isLead ? 2 : 1;
48
+ }
49
+ function getAgentMaxTasksConfig(agentId) {
50
+ return getSwarmConfigs({ scope: "agent", scopeId: agentId, key: AGENT_MAX_TASKS_CONFIG_KEY })[0] ?? null;
51
+ }
52
+ function reconcileAgentMaxTasksPolicy(agentId) {
53
+ const agent = getAgentById(agentId);
54
+ if (!agent)
55
+ return;
56
+ const existing = getAgentMaxTasksConfig(agentId);
57
+ if (existing) {
58
+ const authoritative = parseAgentMaxTasksValue(existing.value);
59
+ if (authoritative !== null && authoritative !== (agent.maxTasks ?? 1)) {
60
+ updateAgentMaxTasks(agentId, authoritative);
61
+ }
62
+ return;
63
+ }
64
+ upsertSwarmConfig({
65
+ scope: "agent",
66
+ scopeId: agentId,
67
+ key: AGENT_MAX_TASKS_CONFIG_KEY,
68
+ value: String(agent.maxTasks ?? defaultMaxTasksForAgent(agent)),
69
+ description: "Logical agent max-tasks policy (seeded from agents.maxTasks)"
70
+ });
71
+ }
72
+ function resetAgentMaxTasksMirror(agentId) {
73
+ const agent = getAgentById(agentId);
74
+ if (!agent)
75
+ return;
76
+ updateAgentMaxTasks(agentId, defaultMaxTasksForAgent(agent));
77
+ }
78
+ function upsertSwarmConfigWithPolicyMirror(data) {
79
+ const scopeId = data.scope === "agent" ? data.scopeId : null;
80
+ if (!scopeId || data.key !== AGENT_MAX_TASKS_CONFIG_KEY) {
81
+ return upsertSwarmConfig(data);
82
+ }
83
+ return getDb().transaction(() => {
84
+ const row = upsertSwarmConfig(data);
85
+ const value = parseAgentMaxTasksValue(data.value);
86
+ if (value !== null)
87
+ updateAgentMaxTasks(scopeId, value);
88
+ return row;
89
+ })();
90
+ }
91
+ function rowToRuntimeInstance(row) {
92
+ let metadata = null;
93
+ if (row.metadata) {
94
+ try {
95
+ metadata = JSON.parse(row.metadata);
96
+ } catch {
97
+ metadata = null;
98
+ }
99
+ }
100
+ return {
101
+ id: row.id,
102
+ agentId: row.agent_id,
103
+ status: row.status,
104
+ reportedSlots: row.reported_slots,
105
+ credentialReady: row.credential_ready === null ? null : row.credential_ready === 1,
106
+ metadata,
107
+ lastSeenAt: row.last_seen_at,
108
+ createdAt: row.created_at,
109
+ updatedAt: row.updated_at
110
+ };
111
+ }
112
+ function runtimeStaleThresholdMinutes() {
113
+ return Number(process.env.RUNTIME_STALE_THRESHOLD_MIN) || 5;
114
+ }
115
+ function runtimeLivenessCutoff() {
116
+ return new Date(Date.now() - runtimeStaleThresholdMinutes() * 60 * 1000).toISOString();
117
+ }
118
+ function upsertRuntimeInstance(instance) {
119
+ const metadataJson = instance.metadata ? JSON.stringify(instance.metadata) : null;
120
+ const row = getDb().prepare(`INSERT INTO runtime_instances (id, agent_id, status, reported_slots, metadata)
121
+ VALUES (?, ?, 'active', ?, ?)
122
+ ON CONFLICT(id) DO UPDATE SET
123
+ status = 'active',
124
+ reported_slots = excluded.reported_slots,
125
+ metadata = COALESCE(excluded.metadata, runtime_instances.metadata),
126
+ last_seen_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
127
+ updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
128
+ WHERE runtime_instances.agent_id = excluded.agent_id
129
+ RETURNING *`).get(instance.id, instance.agentId, instance.reportedSlots, metadataJson);
130
+ return row ? rowToRuntimeInstance(row) : null;
131
+ }
132
+ function getRuntimeInstanceById(id) {
133
+ const row = getDb().prepare("SELECT * FROM runtime_instances WHERE id = ?").get(id);
134
+ return row ? rowToRuntimeInstance(row) : null;
135
+ }
136
+ function touchRuntimeInstance(id, agentId) {
137
+ const result = getDb().prepare(`UPDATE runtime_instances
138
+ SET last_seen_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),
139
+ updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
140
+ WHERE id = ? AND agent_id = ? AND status = 'active' AND last_seen_at >= ?`).run(id, agentId, runtimeLivenessCutoff());
141
+ return result.changes > 0;
142
+ }
143
+ function markRuntimeInstanceOffline(id, agentId) {
144
+ const row = getDb().prepare(`UPDATE runtime_instances
145
+ SET status = 'offline', updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
146
+ WHERE id = ? AND agent_id = ? RETURNING *`).get(id, agentId);
147
+ return row ? rowToRuntimeInstance(row) : null;
148
+ }
149
+ function countActiveRuntimeInstancesForAgent(agentId) {
150
+ const result = getDb().prepare(`SELECT COUNT(*) as count FROM runtime_instances
151
+ WHERE agent_id = ? AND status = 'active' AND last_seen_at >= ?`).get(agentId, runtimeLivenessCutoff());
152
+ return result?.count ?? 0;
153
+ }
154
+ function listRuntimeInstancesForAgent(agentId) {
155
+ const rows = getDb().prepare(`SELECT *, (status = 'active' AND last_seen_at >= ?) AS is_live
156
+ FROM runtime_instances
157
+ WHERE agent_id = ?
158
+ ORDER BY created_at ASC, id ASC`).all(runtimeLivenessCutoff(), agentId);
159
+ return rows.map((row) => ({ ...rowToRuntimeInstance(row), isLive: row.is_live === 1 }));
160
+ }
161
+ function setRuntimeCredentialReady(id, agentId, ready) {
162
+ const result = getDb().prepare(`UPDATE runtime_instances
163
+ SET credential_ready = ?, updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
164
+ WHERE id = ? AND agent_id = ? AND status = 'active' AND last_seen_at >= ?`).run(ready ? 1 : 0, id, agentId, runtimeLivenessCutoff());
165
+ return result.changes > 0;
166
+ }
167
+ function hasReadyLiveRuntime(agentId) {
168
+ const row = getDb().prepare(`SELECT COUNT(*) c FROM runtime_instances
169
+ WHERE agent_id = ? AND status = 'active' AND last_seen_at >= ?
170
+ AND (credential_ready IS NULL OR credential_ready = 1)`).get(agentId, runtimeLivenessCutoff());
171
+ return (row?.c ?? 0) > 0;
172
+ }
173
+ function reconcileAgentStatusFromRuntimes(agentId) {
174
+ const agent = getAgentById(agentId);
175
+ if (!agent)
176
+ return;
177
+ if (countActiveRuntimeInstancesForAgent(agentId) === 0) {
178
+ if (agent.status !== "offline")
179
+ updateAgentStatus(agentId, "offline");
180
+ return;
181
+ }
182
+ if (!hasReadyLiveRuntime(agentId)) {
183
+ if (agent.status !== "waiting_for_credentials") {
184
+ updateAgentStatus(agentId, "waiting_for_credentials");
185
+ }
186
+ return;
187
+ }
188
+ const next = getActiveTaskCount(agentId) > 0 ? "busy" : "idle";
189
+ if (agent.status !== next)
190
+ updateAgentStatus(agentId, next);
191
+ }
192
+ function agentsWithLiveRuntime() {
193
+ const rows = getDb().prepare(`SELECT DISTINCT agent_id FROM runtime_instances
194
+ WHERE status = 'active' AND last_seen_at >= ?`).all(runtimeLivenessCutoff());
195
+ return new Set(rows.map((r) => r.agent_id));
196
+ }
197
+ function expireStaleRuntimeInstances() {
198
+ if (!isMultiRuntimeEnabled()) {
199
+ return { expired: 0, agentsOffline: 0, pruned: 0 };
200
+ }
201
+ return getDb().transaction(() => {
202
+ const cutoff = runtimeLivenessCutoff();
203
+ const stale = getDb().prepare(`SELECT id, agent_id FROM runtime_instances
204
+ WHERE status = 'active' AND last_seen_at < ?`).all(cutoff);
205
+ const pruned = getDb().prepare("DELETE FROM runtime_instances WHERE last_seen_at < ?").run(cutoff).changes;
206
+ let agentsOffline = 0;
207
+ for (const agentId of new Set(stale.map((r) => r.agent_id))) {
208
+ reconcileAgentStatusFromRuntimes(agentId);
209
+ if (getAgentById(agentId)?.status === "offline")
210
+ agentsOffline++;
211
+ }
212
+ return { expired: stale.length, agentsOffline, pruned };
213
+ })();
214
+ }
26
215
 
27
216
  // src/be/db-queries/tracker.ts
28
217
  init_date_utils();
@@ -387,4 +576,4 @@ function createPoolStarvationDecisionTask(args) {
387
576
  return { kind: "created", task: created };
388
577
  }
389
578
 
390
- export { getTrackerSync, getTrackerSyncByExternalId, createTrackerSyncIfAbsent, updateTrackerSyncSwarmId, repointTrackerSyncBySwarmId, createTrackerSync, updateTrackerSync, deleteTrackerSync, hasTrackerDelivery, markTrackerDelivery, getAllTrackerSyncs, createTrackerAgentMapping, REBOOT_RETRY_PIN_TAG, getPinCandidateAgent, getResumeGeneration, getNextResumeGeneration, createWorkerTaskFollowUp, createResumeFollowUp, createRerouteDecisionTask, createPoolStarvationDecisionTask };
579
+ export { AGENT_MAX_TASKS_CONFIG_KEY, reconcileAgentMaxTasksPolicy, resetAgentMaxTasksMirror, upsertSwarmConfigWithPolicyMirror, runtimeStaleThresholdMinutes, upsertRuntimeInstance, getRuntimeInstanceById, touchRuntimeInstance, markRuntimeInstanceOffline, countActiveRuntimeInstancesForAgent, listRuntimeInstancesForAgent, setRuntimeCredentialReady, reconcileAgentStatusFromRuntimes, agentsWithLiveRuntime, expireStaleRuntimeInstances, getTrackerSync, getTrackerSyncByExternalId, createTrackerSyncIfAbsent, updateTrackerSyncSwarmId, repointTrackerSyncBySwarmId, createTrackerSync, updateTrackerSync, deleteTrackerSync, hasTrackerDelivery, markTrackerDelivery, getAllTrackerSyncs, createTrackerAgentMapping, REBOOT_RETRY_PIN_TAG, getPinCandidateAgent, getResumeGeneration, getNextResumeGeneration, createWorkerTaskFollowUp, createResumeFollowUp, createRerouteDecisionTask, createPoolStarvationDecisionTask };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_package,
3
3
  package_default
4
- } from "./cli-ccf9vy7q.js";
4
+ } from "./cli-9nfc2es8.js";
5
5
 
6
6
  // src/commands/shared/client-config.ts
7
7
  init_package();
@@ -37,15 +37,15 @@ import {
37
37
  setSlackMessageTracking,
38
38
  slackContextKey,
39
39
  updateSlackMessageRecord
40
- } from "./cli-50vbt00w.js";
41
- import {
42
- init_env_flag,
43
- isEnvFlagEnabled
44
- } from "./cli-xpxde7rm.js";
40
+ } from "./cli-zfbf3srj.js";
45
41
  import {
46
42
  getAppUrl,
47
43
  init_constants
48
44
  } from "./cli-x23me2mg.js";
45
+ import {
46
+ init_env_flag,
47
+ isEnvFlagEnabled
48
+ } from "./cli-qys3rhhz.js";
49
49
  import {
50
50
  require_receiver,
51
51
  require_sender,
@@ -55420,13 +55420,13 @@ async function initSlackApp() {
55420
55420
  socketMode: true,
55421
55421
  logLevel: import_bolt.LogLevel.DEBUG
55422
55422
  });
55423
- const { registerMessageHandler } = await import("./handlers-b9kbc621.js");
55424
- const { registerCommandHandler } = await import("./commands-xhrfwqsk.js");
55425
- const { registerActionHandlers } = await import("./actions-jgcy477k.js");
55423
+ const { registerMessageHandler } = await import("./handlers-akazedvr.js");
55424
+ const { registerCommandHandler } = await import("./commands-e23s1bff.js");
55425
+ const { registerActionHandlers } = await import("./actions-cskpayd7.js");
55426
55426
  registerMessageHandler(app);
55427
55427
  registerCommandHandler(app);
55428
55428
  registerActionHandlers(app);
55429
- const { createAssistant } = await import("./assistant-f2vkk1hj.js");
55429
+ const { createAssistant } = await import("./assistant-b4exebdw.js");
55430
55430
  app.assistant(createAssistant());
55431
55431
  return app;
55432
55432
  }
@@ -55435,7 +55435,7 @@ async function startSlackApp() {
55435
55435
  await initSlackApp();
55436
55436
  }
55437
55437
  if (app) {
55438
- const { isSlackRenderV2Enabled: isSlackRenderV2Enabled2 } = await import("./render-v2-tc0bh8kk.js");
55438
+ const { isSlackRenderV2Enabled: isSlackRenderV2Enabled2 } = await import("./render-v2-p61ppjey.js");
55439
55439
  if (isSlackRenderV2Enabled2())
55440
55440
  ensureSlackRenderV2Activation();
55441
55441
  await app.start();
@@ -1,12 +1,12 @@
1
- import {
2
- McpHttpClient
3
- } from "./cli-epan13p1.js";
4
1
  import {
5
2
  getApiKey
6
3
  } from "./cli-f14fvzag.js";
4
+ import {
5
+ McpHttpClient
6
+ } from "./cli-epan13p1.js";
7
7
  import {
8
8
  embedScript
9
- } from "./cli-g1re8r05.js";
9
+ } from "./cli-rch80c76.js";
10
10
  import {
11
11
  calculatePKCECodeChallenge,
12
12
  ensureAuthorizationTokenOrThrow,
@@ -18,7 +18,7 @@ import {
18
18
  oauthAppRowToProviderConfig,
19
19
  updateAuthorizationTokens,
20
20
  upsertAuthorization
21
- } from "./cli-nrkkknat.js";
21
+ } from "./cli-g854s2dw.js";
22
22
  import {
23
23
  CredentialBroker,
24
24
  DEFAULT_CREDENTIAL_BINDINGS,
@@ -38,14 +38,14 @@ import {
38
38
  normalizeDateRequired,
39
39
  placeholderForConfigKey,
40
40
  upsertSwarmConfig
41
- } from "./cli-50vbt00w.js";
41
+ } from "./cli-zfbf3srj.js";
42
42
  import {
43
43
  init_env_flag,
44
44
  isEnvFlagEnabled
45
- } from "./cli-xpxde7rm.js";
45
+ } from "./cli-qys3rhhz.js";
46
46
  import {
47
47
  init_zod
48
- } from "./cli-zsspvvm2.js";
48
+ } from "./cli-w1mp9jy7.js";
49
49
  import {
50
50
  init_secret_scrubber,
51
51
  refreshSecretScrubberCache,
@@ -55,7 +55,7 @@ import {
55
55
  } from "./cli-4j2mrzag.js";
56
56
  import {
57
57
  exports_external
58
- } from "./cli-5dsbcjjw.js";
58
+ } from "./cli-jqwnqx9m.js";
59
59
  import {
60
60
  __commonJS,
61
61
  __require,
@@ -171360,6 +171360,9 @@ async function buildEgressSecrets() {
171360
171360
  return await broker.resolveBindings({});
171361
171361
  }
171362
171362
 
171363
+ // src/scripts-runtime/executors/native.ts
171364
+ import { fileURLToPath } from "node:url";
171365
+
171363
171366
  // src/utils/sandboxed-process.ts
171364
171367
  var DEFAULT_SANDBOX_LIMITS = {
171365
171368
  virtualMemoryMb: 512,
@@ -171534,7 +171537,7 @@ class NativeScriptExecutor {
171534
171537
  const sourceFile = `${tmpdir}/source.ts`;
171535
171538
  const resultFile = `${tmpdir}/result.json`;
171536
171539
  const errorFile = `${tmpdir}/error.json`;
171537
- const harnessPath = process.env.SCRIPT_RUNTIME_DIR ? `${process.env.SCRIPT_RUNTIME_DIR}/eval-harness.bundle.js` : new URL("../eval-harness.ts", import.meta.url).pathname;
171540
+ const harnessPath = process.env.SCRIPT_RUNTIME_DIR ? `${process.env.SCRIPT_RUNTIME_DIR}/eval-harness.bundle.js` : fileURLToPath(new URL("../eval-harness.ts", import.meta.url));
171538
171541
  const controller = new AbortController;
171539
171542
  let timedOut = false;
171540
171543
  let killed = input.signal?.aborted ?? false;
@@ -171724,7 +171727,8 @@ async function buildConfigPayload(input) {
171724
171727
  mcpBaseUrl: {
171725
171728
  value: input.mcpBaseUrl ?? process.env.MCP_BASE_URL ?? "http://localhost:3013",
171726
171729
  isSecret: false
171727
- }
171730
+ },
171731
+ ...input.runtimeInstanceId ? { runtimeInstanceId: { value: input.runtimeInstanceId, isSecret: false } } : {}
171728
171732
  },
171729
171733
  user: input.userConfig ?? {},
171730
171734
  egressSecrets: input.egressSecrets ?? await buildEgressSecrets(),
@@ -3,7 +3,7 @@ import {
3
3
  getAgentById,
4
4
  getInProgressTasksByContextKey,
5
5
  init_db
6
- } from "./cli-50vbt00w.js";
6
+ } from "./cli-zfbf3srj.js";
7
7
 
8
8
  // src/tasks/sibling-awareness.ts
9
9
  init_db();
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  buildModelsDevSeedRows,
3
3
  loadModelsDevCache
4
- } from "./cli-114fvtmj.js";
4
+ } from "./cli-13w2hwkh.js";
5
5
  import {
6
6
  createLogEntry,
7
7
  getActivePricingRow,
8
8
  getDb,
9
9
  init_db,
10
10
  insertPricingRow
11
- } from "./cli-50vbt00w.js";
11
+ } from "./cli-zfbf3srj.js";
12
12
  import {
13
13
  init_secret_scrubber,
14
14
  scrubSecrets