@desplega.ai/agent-swarm 2.7.6 → 2.7.7

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 (244) hide show
  1. package/dist/{acp-adapter-bp91d37f.js → acp-adapter-7b4vk3h5.js} +5 -4
  2. package/dist/{actions-yj0eeaqh.js → actions-3tt153af.js} +18 -18
  3. package/dist/{amp-adapter-4pg9h34q.js → amp-adapter-njpts0yr.js} +1 -1
  4. package/dist/{anthropic-messages-x4q6rfq5.js → anthropic-messages-xey2skwx.js} +7 -7
  5. package/dist/{app-909e97cr.js → app-nky4378f.js} +3 -3
  6. package/dist/{assistant-qdyb5fyy.js → assistant-jnb669pa.js} +19 -19
  7. package/dist/{azure-openai-responses-s1w5n70z.js → azure-openai-responses-26t7j9ra.js} +5 -5
  8. package/dist/{boot-reembed-fk0s9z18.js → boot-reembed-9mgvaztt.js} +1 -1
  9. package/dist/{boot-reembed-gs1rzrnh.js → boot-reembed-qs2djdej.js} +1 -1
  10. package/dist/{boot-scrub-sweep-4qfd4kfx.js → boot-scrub-sweep-yjpdj7s1.js} +3 -3
  11. package/dist/{boot-seeds-yr00k13d.js → boot-seeds-5cm6ambd.js} +4 -4
  12. package/dist/{boxd-vdmfssd9.js → boxd-nv507va8.js} +1 -1
  13. package/dist/{claude-adapter-qta1f1xn.js → claude-adapter-fn287zmm.js} +5 -4
  14. package/dist/{claude-managed-setup-sc6j4dm0.js → claude-managed-setup-wtdz2mj2.js} +1 -1
  15. package/dist/{claude-sdk-session-zgrz6yvc.js → claude-sdk-session-x91kqyhm.js} +8288 -8224
  16. package/dist/{cli-wp9sp1qb.js → cli-08bmz9z9.js} +1 -1
  17. package/dist/{cli-yy3rhsdw.js → cli-1c6tzt8g.js} +7 -7
  18. package/dist/{cli-q0k1w5zd.js → cli-35rsp8ye.js} +1 -1
  19. package/dist/{cli-xnrwazav.js → cli-3fg0bdcv.js} +1 -1
  20. package/dist/{cli-89knwags.js → cli-5b456bpf.js} +2 -2
  21. package/dist/{cli-drr5v6av.js → cli-5jnhv72d.js} +1 -1
  22. package/dist/{cli-dxae2yg7.js → cli-5zx699j9.js} +2 -2
  23. package/dist/{cli-0at8w34w.js → cli-6g0hb4cp.js} +8 -8
  24. package/dist/{cli-e3r2neck.js → cli-6pfd54vx.js} +5 -5
  25. package/dist/{cli-bsn8nhrq.js → cli-6vcp76qk.js} +3 -3
  26. package/dist/{cli-ekwks2vs.js → cli-72v799xn.js} +1 -1
  27. package/dist/cli-82j36f2m.js +45 -0
  28. package/dist/{cli-yx4kfngt.js → cli-8305gbq0.js} +29 -16
  29. package/dist/{cli-4necwtsv.js → cli-8sckt74b.js} +8 -8
  30. package/dist/{cli-vvpx3gsx.js → cli-95jzxcp3.js} +1 -1
  31. package/dist/{cli-hr2e2fft.js → cli-adeegh7d.js} +7 -7
  32. package/dist/{cli-m48g6p95.js → cli-afkqkrtw.js} +3 -3
  33. package/dist/{cli-0qatpy8q.js → cli-ayayvfg4.js} +24 -4
  34. package/dist/{cli-bqt1mptt.js → cli-az48n0nr.js} +4 -4
  35. package/dist/{cli-zm72anhg.js → cli-bfv7vdg6.js} +9 -9
  36. package/dist/{cli-hgaazk69.js → cli-caj33vcq.js} +5 -5
  37. package/dist/{cli-3ypk9vk1.js → cli-cb2a8pna.js} +1 -1
  38. package/dist/{cli-waqbxg08.js → cli-cppkf404.js} +17 -17
  39. package/dist/{cli-yn4kxs06.js → cli-ddaanqkd.js} +4 -4
  40. package/dist/{cli-386tyxxg.js → cli-e0kmphd6.js} +2 -2
  41. package/dist/{cli-54t00gt8.js → cli-e46hg0xw.js} +1 -1
  42. package/dist/{cli-jm2vfpfd.js → cli-e5bzrn01.js} +1 -1
  43. package/dist/{cli-436532ck.js → cli-excnnjg2.js} +165 -153
  44. package/dist/{cli-71ptav7x.js → cli-ferkkrg9.js} +1 -1
  45. package/dist/{cli-vpf89f34.js → cli-fmjd0t1y.js} +3 -3
  46. package/dist/{cli-pd7vagab.js → cli-fyt2g4wd.js} +3 -3
  47. package/dist/{cli-gdhpcbhf.js → cli-g08zdaec.js} +1 -1
  48. package/dist/{cli-ehq736cn.js → cli-g7s47cc5.js} +4 -4
  49. package/dist/{cli-svj5090z.js → cli-gz6q4eve.js} +3 -3
  50. package/dist/{cli-8snvgs5r.js → cli-je518txm.js} +10 -10
  51. package/dist/{cli-rmmmrjkd.js → cli-jtjtabxe.js} +1 -1
  52. package/dist/{cli-611a1294.js → cli-k0wwfqbg.js} +18 -1
  53. package/dist/{cli-es6va8jk.js → cli-k1nje3v3.js} +38 -43
  54. package/dist/{cli-p5gp8pcx.js → cli-k8196sh2.js} +6 -6
  55. package/dist/{cli-nwj0ee2w.js → cli-k899ehvh.js} +2 -2
  56. package/dist/{cli-decfb6v8.js → cli-m0da8j35.js} +23 -9
  57. package/dist/{cli-he9wchme.js → cli-mkk9rnzz.js} +4 -4
  58. package/dist/{cli-nhrvpaj7.js → cli-n6bv12jn.js} +510 -4
  59. package/dist/{cli-8bc1w0tw.js → cli-nmzhp1b5.js} +14 -12
  60. package/dist/{cli-0yv5z2pg.js → cli-p82cnnjq.js} +1 -1
  61. package/dist/{cli-c60vetmm.js → cli-pc6n7fre.js} +1 -1
  62. package/dist/{cli-xds5f77d.js → cli-pjctyea3.js} +2 -2
  63. package/dist/{cli-xbbndvjy.js → cli-pq73h5mz.js} +3 -3
  64. package/dist/{cli-aa6yxc7m.js → cli-pz4rk021.js} +1 -1
  65. package/dist/{cli-xnqgpshy.js → cli-q3tkegby.js} +1 -1
  66. package/dist/cli-qghe0h66.js +67 -0
  67. package/dist/{cli-zbbwez0r.js → cli-qh4d4tvk.js} +4 -4
  68. package/dist/{cli-w6dt9ged.js → cli-rtt8g4v9.js} +1 -1
  69. package/dist/{cli-1h3wcpbw.js → cli-snpj5zbj.js} +2 -2
  70. package/dist/{cli-a7v854rf.js → cli-tgrv9cjx.js} +263 -12
  71. package/dist/{cli-faxe6thg.js → cli-vz22fyqv.js} +186 -54
  72. package/dist/{cli-k2gzwsj2.js → cli-wk5yrfwd.js} +160 -26
  73. package/dist/{cli-shpbx5ee.js → cli-ws19768n.js} +1641 -49
  74. package/dist/{cli-70r77n04.js → cli-xae4g51r.js} +1 -1
  75. package/dist/{cli-kqdg1bsb.js → cli-yndmfxb3.js} +2 -2
  76. package/dist/{cli-bjb3z51z.js → cli-yyj3j5m4.js} +2 -2
  77. package/dist/cli.js +21 -21
  78. package/dist/{cloudflare-workers-ai-system-one-bm60fjm0.js → cloudflare-workers-ai-system-one-ef2a980q.js} +2 -2
  79. package/dist/{codex-adapter-ayd1fb6h.js → codex-adapter-cf2yxe9m.js} +3 -2
  80. package/dist/{codex-hook-9efm2x1m.js → codex-hook-a0c6g6t6.js} +1 -1
  81. package/dist/{codex-session-runner-jesa32xc.js → codex-session-runner-6vfzdgbd.js} +3 -2
  82. package/dist/{commands-hanewgf2.js → commands-t3mfy7vn.js} +3 -3
  83. package/dist/{controller-dt1n3c1q.js → controller-q7xrbaz0.js} +3 -3
  84. package/dist/{controllers-connect-xx8x64n5.js → controllers-connect-c6nm70kg.js} +19 -19
  85. package/dist/{cursor-adapter-9s4dwwdw.js → cursor-adapter-ftd81ga8.js} +1 -1
  86. package/dist/{db-3vttcbv4.js → db-dk572x25.js} +3 -3
  87. package/dist/{db-9dv0g1ab.js → db-vemtpmcc.js} +4 -2
  88. package/dist/{dispatcher-tx9hd1sv.js → dispatcher-kh7ecxh9.js} +17 -17
  89. package/dist/{dsh-adapter-007y4ejs.js → dsh-adapter-v8628r89.js} +1 -1
  90. package/dist/{e2b-we6hs6q5.js → e2b-fr12yccx.js} +1 -1
  91. package/dist/{e2b-a19d28rz.js → e2b-x6ywzak3.js} +1 -1
  92. package/dist/{easter-egg-3d-rgbrqb8s.js → easter-egg-3d-nenw4x63.js} +1 -1
  93. package/dist/{embedding-space-ny1e2940.js → embedding-space-0jepb239.js} +6 -6
  94. package/dist/{embeddings-2t386t13.js → embeddings-xxt49yxg.js} +1 -1
  95. package/dist/{execute-pksh0ceh.js → execute-1mhw6e4x.js} +1 -1
  96. package/dist/{external-channel-phgmhmd7.js → external-channel-55v12e60.js} +2 -2
  97. package/dist/{fx-adapter-fy8rr921.js → fx-adapter-bs8wqrk5.js} +6 -5
  98. package/dist/{google-generative-ai-8y3m3k4b.js → google-generative-ai-v94hr7h0.js} +5 -5
  99. package/dist/{google-vertex-w3v98n7b.js → google-vertex-g7vr6cf8.js} +5 -5
  100. package/dist/{grok-adapter-q0abvpaj.js → grok-adapter-gpjqmkcq.js} +6 -5
  101. package/dist/handlers-zxmp1ta4.js +32 -0
  102. package/dist/{heartbeat-kadyek8p.js → heartbeat-k42svnr0.js} +20 -20
  103. package/dist/{hook-9k551xnj.js → hook-114m7hap.js} +4 -3
  104. package/dist/{hook-5zs3msf6.js → hook-6nphweh0.js} +24 -9
  105. package/dist/{http-mhz9vw1f.js → http-r8cc4wz7.js} +1025 -173
  106. package/dist/index-a8phxqnk.js +37 -0
  107. package/dist/{index-vdygbq10.js → index-e3s8wmxy.js} +1 -1
  108. package/dist/{index-q361cg2f.js → index-fpk4bcd9.js} +1 -1
  109. package/dist/index-k6h00t4c.js +30 -0
  110. package/dist/{index-rvr00sg7.js → index-nh3wyqdt.js} +1017 -574
  111. package/dist/index-xrz7te8h.js +33 -0
  112. package/dist/{keepalive-w56f32cg.js → keepalive-x060nt9p.js} +3 -3
  113. package/dist/lead-956sd2yc.js +71 -0
  114. package/dist/{maintenance-7mdgxcea.js → maintenance-2xxfexhf.js} +1 -1
  115. package/dist/{mistral-conversations-4pmwj1c0.js → mistral-conversations-3gjpdb4b.js} +4 -4
  116. package/dist/{oauth-refresh-sweep-29txy9vk.js → oauth-refresh-sweep-fckc4ar5.js} +2 -2
  117. package/dist/{onboard-kpsrkarj.js → onboard-zc48j237.js} +3 -3
  118. package/dist/{openai-codex-responses-44j573nm.js → openai-codex-responses-8pbxq9h5.js} +5 -5
  119. package/dist/{openai-completions-a4gee2a8.js → openai-completions-rm00s912.js} +4 -4
  120. package/dist/{openai-decisions-w4qkrcar.js → openai-decisions-8v957r2r.js} +1 -1
  121. package/dist/{openai-responses-rbp6h5kr.js → openai-responses-agxpf96k.js} +5 -5
  122. package/dist/{opencode-adapter-j25vm3rr.js → opencode-adapter-r690h1cr.js} +4 -3
  123. package/dist/{otel-impl-6kkct7a8.js → otel-impl-r5xbh81q.js} +4 -4
  124. package/dist/{pi-mono-adapter-exhkzhn2.js → pi-mono-adapter-c7v8sdec.js} +7 -6
  125. package/dist/{pricing-refresh-n2x7jh6k.js → pricing-refresh-3pmre11v.js} +3 -3
  126. package/dist/{rbac-roles-81ypx6es.js → rbac-roles-3vbshwsb.js} +1 -1
  127. package/dist/{rbac-roles-b5htkjby.js → rbac-roles-910mmkgz.js} +2 -2
  128. package/dist/{render-v2-qn6jmpk4.js → render-v2-pxykkbab.js} +3 -3
  129. package/dist/{resume-wd30wx23.js → resume-adda0bwy.js} +6 -6
  130. package/dist/{runtime-4hsg7h60.js → runtime-fnbm7stk.js} +1 -1
  131. package/dist/{session-access-5qvfevhk.js → session-access-2fvamrdc.js} +4 -4
  132. package/dist/{session-source-backfill-n1czavbr.js → session-source-backfill-08xvv0sm.js} +2 -2
  133. package/dist/{setup-dnb56qy5.js → setup-1aqmvmh1.js} +1 -1
  134. package/dist/{typesafe-system-one-5mavm259.js → typesafe-system-one-0bmqcxfg.js} +2 -2
  135. package/dist/{virtual-modules-76xxv9fs.js → virtual-modules-d2pjk9j1.js} +5 -5
  136. package/dist/{work-objects-4n21tfkm.js → work-objects-9s0yrm5j.js} +20 -20
  137. package/dist/{worker-follow-up-77hvzxww.js → worker-follow-up-3q78fqmr.js} +17 -17
  138. package/dist/worker-y15hy08h.js +71 -0
  139. package/openapi.json +197 -4
  140. package/package.json +5 -5
  141. package/src/apps/definition.ts +6 -5
  142. package/src/be/db/page-theme-tokens.ts +12 -0
  143. package/src/be/db/tasks/read.ts +9 -1
  144. package/src/be/db/tasks/write.ts +19 -0
  145. package/src/be/db-client.ts +107 -7
  146. package/src/be/db.ts +34 -2
  147. package/src/be/migrations/269_pages_design_system.sql +23 -0
  148. package/src/be/seed/schedules-seeder.ts +0 -10
  149. package/src/be/seed-scripts/catalog/catalog-report.inline.ts +2 -0
  150. package/src/be/seed-scripts/catalog/catalog-report.ts +2 -0
  151. package/src/be/seed-scripts/catalog/memory-eval.ts +2 -0
  152. package/src/be/seed-scripts/catalog/swarm-update-check.ts +150 -0
  153. package/src/be/seed-scripts/index.ts +9 -0
  154. package/src/be/seed-skills/bundled-files.generated.json +3 -3
  155. package/src/be/swarm-config-guard.ts +32 -0
  156. package/src/be/task-auto-title-listener.ts +127 -0
  157. package/src/commands/onboard/agent-fs-version.ts +1 -1
  158. package/src/commands/profile-sync.ts +151 -16
  159. package/src/commands/runner.ts +15 -7
  160. package/src/hooks/hook.ts +20 -9
  161. package/src/http/index.ts +3 -0
  162. package/src/http/pages-public.ts +93 -129
  163. package/src/http/pages.ts +94 -21
  164. package/src/pages/browser-sdk.ts +48 -21
  165. package/src/pages/color-literals.ts +115 -0
  166. package/src/pages/page-head.ts +766 -0
  167. package/src/pages/version.ts +3 -0
  168. package/src/providers/amp-adapter.ts +1 -1
  169. package/src/providers/codex-adapter.ts +1 -0
  170. package/src/providers/codex-app-server.ts +27 -1
  171. package/src/providers/pi-mono-extension.ts +30 -15
  172. package/src/tasks/follow-up-gate.ts +318 -0
  173. package/src/tasks/worker-follow-up.ts +21 -1
  174. package/src/tests/codex-app-server.test.ts +59 -0
  175. package/src/tests/codex-gateway-route.test.ts +50 -1
  176. package/src/tests/create-page-tool.test.ts +501 -0
  177. package/src/tests/db-client-busy-retry.test.ts +81 -0
  178. package/src/tests/db-task-read-contract.test.ts +1 -0
  179. package/src/tests/db-task-write-contract.test.ts +2 -0
  180. package/src/tests/db-tasks-read.test.ts +21 -0
  181. package/src/tests/fixtures/pages/head-v1.html +56 -0
  182. package/src/tests/follow-up-gate-shadow.test.ts +513 -0
  183. package/src/tests/identity-field-budget.test.ts +1 -1
  184. package/src/tests/internal-ai/credentials.test.ts +62 -0
  185. package/src/tests/internal-ai/task-title.test.ts +283 -0
  186. package/src/tests/merge-gate-detect-changes.test.ts +145 -0
  187. package/src/tests/page-proxy.test.ts +1 -1
  188. package/src/tests/page-session-dev-cookie.test.ts +188 -0
  189. package/src/tests/pages-frame-ancestors.test.ts +28 -1
  190. package/src/tests/pages-head-v2.test.ts +534 -0
  191. package/src/tests/pages-http.test.ts +330 -0
  192. package/src/tests/pages-public-html.test.ts +43 -0
  193. package/src/tests/pages-storage.test.ts +182 -0
  194. package/src/tests/pages-versioning.test.ts +72 -0
  195. package/src/tests/profile-sync-stale-writeback.test.ts +334 -0
  196. package/src/tests/profile-sync.test.ts +11 -15
  197. package/src/tests/scheduled-task-required-params-migration.test.ts +3 -1
  198. package/src/tests/script-connections.test.ts +2 -0
  199. package/src/tests/seed-registry.test.ts +28 -6
  200. package/src/tests/seed-schedules.test.ts +61 -8
  201. package/src/tests/seed-scripts.test.ts +142 -2
  202. package/src/tests/swarm-diff.test.ts +121 -2
  203. package/src/tests/task-auto-title-config-guard.test.ts +37 -0
  204. package/src/tests/task-auto-title-listener.test.ts +165 -0
  205. package/src/tests/theme-import.test.ts +758 -0
  206. package/src/tests/themes-page-theme.test.ts +155 -0
  207. package/src/tests/themes-presets.test.ts +172 -0
  208. package/src/tests/workflow-script-principal.test.ts +2 -1
  209. package/src/themes/classics.ts +949 -0
  210. package/src/themes/import.ts +420 -0
  211. package/src/themes/page-fields.ts +40 -0
  212. package/src/themes/page-theme.ts +102 -0
  213. package/src/themes/presets.ts +561 -0
  214. package/src/themes/tokens.ts +218 -0
  215. package/src/tools/app-upsert.ts +1 -1
  216. package/src/tools/create-page.ts +118 -12
  217. package/src/tools/utils.ts +33 -0
  218. package/src/types.ts +45 -3
  219. package/src/utils/constants.ts +19 -0
  220. package/src/utils/follow-up-gate-schedule-ids.ts +13 -0
  221. package/src/utils/internal-ai/credentials.ts +146 -93
  222. package/src/utils/internal-ai/index.ts +10 -0
  223. package/src/utils/internal-ai/models.ts +18 -0
  224. package/src/utils/internal-ai/task-title.ts +282 -0
  225. package/src/utils/page-session.ts +37 -0
  226. package/templates/schedules/daily-status-report/content.md +88 -2
  227. package/templates/schedules/daily-swarm-update-check/content.md +16 -40
  228. package/templates/skills/apps/SKILL.md +1 -1
  229. package/templates/skills/apps/content.md +1 -1
  230. package/templates/skills/heartbeat-runbook/content.md +1 -1
  231. package/templates/skills/pages/config.json +1 -1
  232. package/templates/skills/pages/content.md +539 -86
  233. package/templates/skills/pages/files/examples/annotated-pr.html +21 -12
  234. package/templates/skills/pages/files/examples/multiplayer-board.html +41 -41
  235. package/templates/skills/pages/files/examples/report-page.html +125 -124
  236. package/dist/cli-2pnswgh8.js +0 -189
  237. package/dist/handlers-by3sfxyx.js +0 -32
  238. package/dist/index-4f2pvxae.js +0 -37
  239. package/dist/index-98gz7tmp.js +0 -30
  240. package/dist/index-k08z2cak.js +0 -33
  241. package/dist/lead-enq35nqp.js +0 -70
  242. package/dist/worker-gg1576j3.js +0 -70
  243. package/templates/schedules/daily-workflow-health-audit/config.json +0 -19
  244. package/templates/schedules/daily-workflow-health-audit/content.md +0 -191
@@ -10,24 +10,24 @@ import {
10
10
  createRerouteDecisionTask2,
11
11
  createPoolStarvationDecisionTask2,
12
12
  init_worker_follow_up
13
- } from "./cli-shpbx5ee.js";
14
- import"./cli-zbbwez0r.js";
15
- import"./cli-89knwags.js";
16
- import"./cli-c60vetmm.js";
17
- import"./cli-hr2e2fft.js";
18
- import"./cli-xnqgpshy.js";
13
+ } from "./cli-ws19768n.js";
14
+ import"./cli-qh4d4tvk.js";
15
+ import"./cli-5b456bpf.js";
16
+ import"./cli-pc6n7fre.js";
17
+ import"./cli-adeegh7d.js";
18
+ import"./cli-q3tkegby.js";
19
19
  import"./cli-3xj33nrx.js";
20
- import"./cli-4necwtsv.js";
21
- import"./cli-m48g6p95.js";
22
- import"./cli-8bc1w0tw.js";
23
- import"./cli-waqbxg08.js";
24
- import"./cli-gdhpcbhf.js";
25
- import"./cli-w6dt9ged.js";
26
- import"./cli-hgaazk69.js";
27
- import"./cli-yn4kxs06.js";
28
- import"./cli-drr5v6av.js";
29
- import"./cli-rmmmrjkd.js";
30
- import"./cli-k2gzwsj2.js";
20
+ import"./cli-8sckt74b.js";
21
+ import"./cli-afkqkrtw.js";
22
+ import"./cli-nmzhp1b5.js";
23
+ import"./cli-cppkf404.js";
24
+ import"./cli-g08zdaec.js";
25
+ import"./cli-rtt8g4v9.js";
26
+ import"./cli-caj33vcq.js";
27
+ import"./cli-ddaanqkd.js";
28
+ import"./cli-5jnhv72d.js";
29
+ import"./cli-jtjtabxe.js";
30
+ import"./cli-wk5yrfwd.js";
31
31
  import"./cli-wx3rhnm0.js";
32
32
  init_worker_follow_up();
33
33
 
@@ -0,0 +1,71 @@
1
+ import"./cli-wk5yrfwd.js";
2
+ import"./cli-jtjtabxe.js";
3
+ import"./cli-qh4d4tvk.js";
4
+ import"./cli-5b456bpf.js";
5
+ import"./cli-wx3rhnm0.js";
6
+ import"./cli-rtt8g4v9.js";
7
+ import"./cli-cppkf404.js";
8
+ import"./cli-afkqkrtw.js";
9
+ import {
10
+ getEnabledCapabilities,
11
+ init_server
12
+ } from "./cli-ws19768n.js";
13
+ import"./cli-3xj33nrx.js";
14
+ import"./cli-ddaanqkd.js";
15
+ import"./cli-8sckt74b.js";
16
+ import"./cli-yyj3j5m4.js";
17
+ import"./cli-ftyxyspd.js";
18
+ import {
19
+ runAgent
20
+ } from "./cli-k1nje3v3.js";
21
+ import"./cli-98rw5dt5.js";
22
+ import"./cli-77cd6gy8.js";
23
+ import"./cli-mthwvjre.js";
24
+ import"./cli-a22h291q.js";
25
+ import"./cli-dhar9qay.js";
26
+ import"./cli-jc1g9ndz.js";
27
+ import"./cli-k899ehvh.js";
28
+ import"./cli-e5bzrn01.js";
29
+ import"./cli-vz22fyqv.js";
30
+ import"./cli-qghe0h66.js";
31
+ import"./cli-d82btycs.js";
32
+ import"./cli-0726awxw.js";
33
+ import"./cli-m0da8j35.js";
34
+ import"./cli-gz6q4eve.js";
35
+ import"./cli-4bd1rck6.js";
36
+ import"./cli-98rwmcyc.js";
37
+ import"./cli-318r69gq.js";
38
+ import"./cli-vfym7wmz.js";
39
+ import"./cli-kr5tjjtz.js";
40
+ import"./cli-ayayvfg4.js";
41
+ import"./cli-08bmz9z9.js";
42
+ import"./cli-srye3vdt.js";
43
+ import"./cli-95jzxcp3.js";
44
+ import"./cli-fyt2g4wd.js";
45
+ import"./cli-8305gbq0.js";
46
+ import"./cli-72v799xn.js";
47
+ import"./cli-e46hg0xw.js";
48
+ import"./cli-cb2a8pna.js";
49
+ import"./cli-4zsenjhy.js";
50
+ import"./cli-pc6n7fre.js";
51
+ import"./cli-adeegh7d.js";
52
+ import"./cli-q3tkegby.js";
53
+ import"./cli-nmzhp1b5.js";
54
+ import"./cli-g08zdaec.js";
55
+ import"./cli-caj33vcq.js";
56
+ import"./cli-5jnhv72d.js";
57
+
58
+ // src/commands/worker.ts
59
+ init_server();
60
+ var workerConfig = {
61
+ role: "worker",
62
+ defaultPrompt: "/start-worker",
63
+ metadataType: "worker_metadata",
64
+ capabilities: getEnabledCapabilities()
65
+ };
66
+ async function runWorker(opts) {
67
+ return runAgent(workerConfig, opts);
68
+ }
69
+ export {
70
+ runWorker
71
+ };
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "Agent Swarm API",
5
- "version": "2.7.6",
5
+ "version": "2.7.7",
6
6
  "description": "Multi-agent orchestration API for Claude Code, Codex, and Gemini CLI. Enables task distribution, agent communication, and service discovery.\n\nMCP tools are documented separately in [MCP.md](./MCP.md)."
7
7
  },
8
8
  "servers": [
@@ -3171,6 +3171,7 @@
3171
3171
  "task_released",
3172
3172
  "task_deferred_wait_woke",
3173
3173
  "task_follow_up_suppressed",
3174
+ "task_follow_up_gate_shadow",
3174
3175
  "task_citation_check_refused",
3175
3176
  "channel_message",
3176
3177
  "service_registered",
@@ -3226,6 +3227,30 @@
3226
3227
  }
3227
3228
  }
3228
3229
  },
3230
+ "PageThemeTokens": {
3231
+ "type": [
3232
+ "object",
3233
+ "null"
3234
+ ],
3235
+ "properties": {
3236
+ "light": {
3237
+ "type": "object",
3238
+ "additionalProperties": {
3239
+ "type": "string"
3240
+ }
3241
+ },
3242
+ "dark": {
3243
+ "type": "object",
3244
+ "additionalProperties": {
3245
+ "type": "string"
3246
+ }
3247
+ }
3248
+ },
3249
+ "required": [
3250
+ "light",
3251
+ "dark"
3252
+ ]
3253
+ },
3229
3254
  "Page": {
3230
3255
  "type": "object",
3231
3256
  "properties": {
@@ -3278,6 +3303,19 @@
3278
3303
  "type": "string"
3279
3304
  }
3280
3305
  },
3306
+ "theme": {
3307
+ "type": [
3308
+ "string",
3309
+ "null"
3310
+ ]
3311
+ },
3312
+ "themeTokens": {
3313
+ "$ref": "#/components/schemas/PageThemeTokens"
3314
+ },
3315
+ "designVersion": {
3316
+ "type": "integer",
3317
+ "minimum": 1
3318
+ },
3281
3319
  "viewCount": {
3282
3320
  "type": "integer",
3283
3321
  "minimum": 0,
@@ -3302,6 +3340,9 @@
3302
3340
  "contentType",
3303
3341
  "authMode",
3304
3342
  "body",
3343
+ "theme",
3344
+ "themeTokens",
3345
+ "designVersion",
3305
3346
  "createdAt",
3306
3347
  "updatedAt"
3307
3348
  ]
@@ -3373,6 +3414,19 @@
3373
3414
  "items": {
3374
3415
  "type": "string"
3375
3416
  }
3417
+ },
3418
+ "theme": {
3419
+ "type": [
3420
+ "string",
3421
+ "null"
3422
+ ]
3423
+ },
3424
+ "themeTokens": {
3425
+ "$ref": "#/components/schemas/PageThemeTokens"
3426
+ },
3427
+ "designVersion": {
3428
+ "type": "integer",
3429
+ "minimum": 1
3376
3430
  }
3377
3431
  },
3378
3432
  "required": [
@@ -36828,6 +36882,51 @@
36828
36882
  "items": {
36829
36883
  "type": "string"
36830
36884
  }
36885
+ },
36886
+ "theme": {
36887
+ "type": [
36888
+ "string",
36889
+ "null"
36890
+ ],
36891
+ "description": "Theme preset id that restyles the whole page. One of: hive, meadow, iris, rose, cobalt, ember, carbon, paper, github, vscode, material, solarized, tokyo, monokai, gruvbox, catppuccin. Omit to follow the viewer's theme. Pass null on update to clear it."
36892
+ },
36893
+ "themeTokens": {
36894
+ "type": [
36895
+ "object",
36896
+ "null"
36897
+ ],
36898
+ "properties": {
36899
+ "format": {
36900
+ "type": "string",
36901
+ "enum": [
36902
+ "tokens",
36903
+ "css"
36904
+ ]
36905
+ },
36906
+ "light": {
36907
+ "type": "object",
36908
+ "additionalProperties": {
36909
+ "type": "string"
36910
+ }
36911
+ },
36912
+ "dark": {
36913
+ "type": "object",
36914
+ "additionalProperties": {
36915
+ "type": "string"
36916
+ }
36917
+ },
36918
+ "css": {
36919
+ "type": "string"
36920
+ }
36921
+ },
36922
+ "additionalProperties": false,
36923
+ "description": "Per-page token overrides, applied on top of the preset. Send { light, dark } maps of token name to CSS value, or { format: \"css\", css } with a CSS variable block (:root, .dark, @theme). Stored normalized. Names outside the token contract, and values that reference a variable outside it, are ignored and listed in ignoredTokens. Replaces the stored overrides. Pass null on update to clear them."
36924
+ },
36925
+ "designVersion": {
36926
+ "type": "integer",
36927
+ "minimum": 1,
36928
+ "maximum": 2,
36929
+ "description": "Design system version. 2 is the swarm design system and the default for new pages. 1 is the original look that older pages keep. Omit on update to keep the stored value."
36831
36930
  }
36832
36931
  },
36833
36932
  "required": [
@@ -36867,6 +36966,18 @@
36867
36966
  },
36868
36967
  "app_url": {
36869
36968
  "type": "string"
36969
+ },
36970
+ "ignoredTokens": {
36971
+ "type": "array",
36972
+ "items": {
36973
+ "type": "string"
36974
+ },
36975
+ "description": "Theme tokens the importer ignored. A bare name is outside the token contract. Other entries give the reason, for example --font-sans (references --font-geist-sans) or --ring (in .card). Absent when none were ignored."
36976
+ },
36977
+ "designVersion": {
36978
+ "type": "integer",
36979
+ "minimum": 1,
36980
+ "description": "The design version of the new page: 2 unless the body set designVersion: 1."
36870
36981
  }
36871
36982
  },
36872
36983
  "required": [
@@ -36874,14 +36985,15 @@
36874
36985
  "key",
36875
36986
  "version",
36876
36987
  "api_url",
36877
- "app_url"
36988
+ "app_url",
36989
+ "designVersion"
36878
36990
  ]
36879
36991
  }
36880
36992
  }
36881
36993
  }
36882
36994
  },
36883
36995
  "400": {
36884
- "description": "Invalid body",
36996
+ "description": "Invalid body, unknown theme, or invalid themeTokens",
36885
36997
  "content": {
36886
36998
  "application/json": {
36887
36999
  "schema": {
@@ -37054,6 +37166,19 @@
37054
37166
  "type": "string"
37055
37167
  }
37056
37168
  },
37169
+ "theme": {
37170
+ "type": [
37171
+ "string",
37172
+ "null"
37173
+ ]
37174
+ },
37175
+ "themeTokens": {
37176
+ "$ref": "#/components/schemas/PageThemeTokens"
37177
+ },
37178
+ "designVersion": {
37179
+ "type": "integer",
37180
+ "minimum": 1
37181
+ },
37057
37182
  "viewCount": {
37058
37183
  "type": "integer",
37059
37184
  "minimum": 0,
@@ -37253,6 +37378,51 @@
37253
37378
  "items": {
37254
37379
  "type": "string"
37255
37380
  }
37381
+ },
37382
+ "theme": {
37383
+ "type": [
37384
+ "string",
37385
+ "null"
37386
+ ],
37387
+ "description": "Theme preset id that restyles the whole page. One of: hive, meadow, iris, rose, cobalt, ember, carbon, paper, github, vscode, material, solarized, tokyo, monokai, gruvbox, catppuccin. Omit to follow the viewer's theme. Pass null on update to clear it."
37388
+ },
37389
+ "themeTokens": {
37390
+ "type": [
37391
+ "object",
37392
+ "null"
37393
+ ],
37394
+ "properties": {
37395
+ "format": {
37396
+ "type": "string",
37397
+ "enum": [
37398
+ "tokens",
37399
+ "css"
37400
+ ]
37401
+ },
37402
+ "light": {
37403
+ "type": "object",
37404
+ "additionalProperties": {
37405
+ "type": "string"
37406
+ }
37407
+ },
37408
+ "dark": {
37409
+ "type": "object",
37410
+ "additionalProperties": {
37411
+ "type": "string"
37412
+ }
37413
+ },
37414
+ "css": {
37415
+ "type": "string"
37416
+ }
37417
+ },
37418
+ "additionalProperties": false,
37419
+ "description": "Per-page token overrides, applied on top of the preset. Send { light, dark } maps of token name to CSS value, or { format: \"css\", css } with a CSS variable block (:root, .dark, @theme). Stored normalized. Names outside the token contract, and values that reference a variable outside it, are ignored and listed in ignoredTokens. Replaces the stored overrides. Pass null on update to clear them."
37420
+ },
37421
+ "designVersion": {
37422
+ "type": "integer",
37423
+ "minimum": 1,
37424
+ "maximum": 2,
37425
+ "description": "Design system version. 2 is the swarm design system and the default for new pages. 1 is the original look that older pages keep. Omit on update to keep the stored value."
37256
37426
  }
37257
37427
  }
37258
37428
  }
@@ -37279,17 +37449,40 @@
37279
37449
  "version": {
37280
37450
  "type": "integer",
37281
37451
  "minimum": 1
37452
+ },
37453
+ "ignoredTokens": {
37454
+ "type": "array",
37455
+ "items": {
37456
+ "type": "string"
37457
+ },
37458
+ "description": "Theme tokens the importer ignored. A bare name is outside the token contract. Other entries give the reason, for example --font-sans (references --font-geist-sans) or --ring (in .card). Absent when none were ignored."
37459
+ },
37460
+ "designVersion": {
37461
+ "type": "integer",
37462
+ "minimum": 1,
37463
+ "description": "The design version the page has after the update. An omitted designVersion keeps the stored one, so an older page stays on 1."
37282
37464
  }
37283
37465
  },
37284
37466
  "required": [
37285
37467
  "id",
37286
37468
  "key",
37287
- "version"
37469
+ "version",
37470
+ "designVersion"
37288
37471
  ]
37289
37472
  }
37290
37473
  }
37291
37474
  }
37292
37475
  },
37476
+ "400": {
37477
+ "description": "Unknown theme or invalid themeTokens",
37478
+ "content": {
37479
+ "application/json": {
37480
+ "schema": {
37481
+ "$ref": "#/components/schemas/ErrorResponse"
37482
+ }
37483
+ }
37484
+ }
37485
+ },
37293
37486
  "404": {
37294
37487
  "description": "Page not found",
37295
37488
  "content": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@desplega.ai/agent-swarm",
3
- "version": "2.7.6",
3
+ "version": "2.7.7",
4
4
  "description": "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
5
5
  "keywords": [
6
6
  "agent-swarm.dev",
@@ -183,8 +183,8 @@
183
183
  "@desplega/model-catalog": "workspace:*",
184
184
  "@desplega/model-routing": "workspace:*",
185
185
  "@faker-js/faker": "^10.4.0",
186
- "@opencode/plugin": "2.2.3",
187
- "@opencode/sdk": "2.2.3",
186
+ "@opencode/plugin": "2.2.5",
187
+ "@opencode/sdk": "2.2.5",
188
188
  "@oxlint/plugins": "1.78.0",
189
189
  "@types/bun": "latest",
190
190
  "dependency-cruiser": "^18.0.0",
@@ -204,7 +204,7 @@
204
204
  "dependencies": {
205
205
  "@agentclientprotocol/sdk": "2.2.0",
206
206
  "@ai-sdk/openai": "^3.0.41",
207
- "@anthropic-ai/claude-agent-sdk": "0.3.314",
207
+ "@anthropic-ai/claude-agent-sdk": "0.3.316",
208
208
  "@anthropic-ai/sdk": "^1.3.0",
209
209
  "@asteasolutions/zod-to-openapi": "^8.0.0",
210
210
  "@aws-sdk/client-bedrock": "3.1048.0",
@@ -214,7 +214,7 @@
214
214
  "@chat-adapter/teams": "4.41.1",
215
215
  "@chat-adapter/telegram": "4.41.1",
216
216
  "@cursor/sdk": "1.2.0",
217
- "@desplega.ai/agent-fs-just-bash": "0.18.13",
217
+ "@desplega.ai/agent-fs-just-bash": "0.18.14",
218
218
  "@desplega.ai/business-use": "^0.4.2",
219
219
  "@earendil-works/pi-agent-core": "^1.4.0",
220
220
  "@earendil-works/pi-ai": "^1.4.0",
@@ -446,11 +446,12 @@ export const AppElementsSchema = z.record(AppNameSchema, AppElementSchema);
446
446
 
447
447
  /**
448
448
  * Preset theme id applied to the app's rendered surface. The catalog of
449
- * presets lives in the dashboard (`apps/ui/src/lib/themes.ts`) — the server
450
- * validates shape only, and the renderer resolves unknown ids to its default
451
- * theme, so definitions stay portable across dashboard versions whose preset
452
- * catalogs differ. Viewers can override it per-user via the reserved
453
- * `$theme` user-config key (see `user-config.ts`).
449
+ * presets lives in `src/themes/presets.ts` (the dashboard re-exports it from
450
+ * `apps/ui/src/lib/themes.ts`). App definitions are validated by shape only,
451
+ * and the renderer resolves unknown ids to its default theme, so definitions
452
+ * stay portable across dashboard versions whose preset catalogs differ.
453
+ * Viewers can override it per-user via the reserved `$theme` user-config key
454
+ * (see `user-config.ts`).
454
455
  */
455
456
  export const AppThemeIdSchema = z.string().regex(/^[a-z][a-z0-9-]{0,39}$/, {
456
457
  message: "must be a lowercase slug (letters, digits, dashes)",
@@ -0,0 +1,12 @@
1
+ import { type Page, PageThemeTokensSchema } from "../../types";
2
+
3
+ /** Stored `theme_tokens` JSON, or null when the column is empty, is not JSON, or has the wrong shape. */
4
+ export function parsePageThemeTokens(raw: string | null): Page["themeTokens"] {
5
+ if (!raw) return null;
6
+ try {
7
+ const parsed = PageThemeTokensSchema.safeParse(JSON.parse(raw));
8
+ return parsed.success ? parsed.data : null;
9
+ } catch {
10
+ return null;
11
+ }
12
+ }
@@ -1023,6 +1023,14 @@ export async function getAllTasks(
1023
1023
  params.push(filters.requestedByUserId);
1024
1024
  }
1025
1025
 
1026
+ // Without selective filters, tiny LIMITs can make SQLite choose a full
1027
+ // scan and sort when ANALYZE statistics are absent. Keep filtered pages
1028
+ // planner-controlled so they can use their selective indexes.
1029
+ const pageIndex =
1030
+ conditions.length === 0 && !filters?.readableBy && filters?.orderBy !== "createdAt"
1031
+ ? "INDEXED BY idx_agent_tasks_last_updated"
1032
+ : "";
1033
+
1026
1034
  // Exclude system/heartbeat tasks by default. The flag is still called
1027
1035
  // `includeHeartbeat` for backward compat with existing API callers, but we
1028
1036
  // also gate boot-triage + heartbeat-checklist behind it since those are
@@ -1056,7 +1064,7 @@ export async function getAllTasks(
1056
1064
  // lastUpdatedAt index for a full scan. The outer sort adds it only to fix
1057
1065
  // the order of exact ties inside the page.
1058
1066
  const query = `WITH page AS (
1059
- SELECT rowid AS rid FROM agent_tasks ${whereClause}
1067
+ SELECT rowid AS rid FROM agent_tasks ${pageIndex} ${whereClause}
1060
1068
  ORDER BY ${orderColumns.join(", ")} LIMIT ${limit} OFFSET ${offset}
1061
1069
  )
1062
1070
  SELECT ${LIST_COLUMNS[fields]},
@@ -394,6 +394,25 @@ export async function updateTaskTitle(
394
394
  return row ? rowToAgentTask(row) : null;
395
395
  }
396
396
 
397
+ /**
398
+ * Sets a generated display title only while the task has none. A rename that
399
+ * landed first (a person, or another API replica) wins: the row is left alone
400
+ * and `null` comes back. Like `updateTaskTitle`, it does not bump
401
+ * `lastUpdatedAt`.
402
+ */
403
+ export async function setTaskTitleIfUnset(
404
+ taskId: string,
405
+ title: string,
406
+ ): Promise<AgentTask | null> {
407
+ const normalized = title.trim();
408
+ if (!normalized) return null;
409
+ const row = await getDbClient().get<AgentTaskRow>(
410
+ "UPDATE agent_tasks SET title = ? WHERE id = ? AND title IS NULL RETURNING *",
411
+ [normalized, taskId],
412
+ );
413
+ return row ? rowToAgentTask(row) : null;
414
+ }
415
+
397
416
  export async function completeTask(
398
417
  id: string,
399
418
  output?: string,