@desplega.ai/agent-swarm 2.4.0 → 2.4.2

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 (239) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-kedstxx6.js → acp-adapter-dv7hmx4r.js} +9 -9
  3. package/dist/{actions-vget6r1k.js → actions-51nc1gny.js} +21 -21
  4. package/dist/{amp-adapter-xeb5mktv.js → amp-adapter-abp5tdx8.js} +4 -4
  5. package/dist/{app-mqap8t8m.js → app-9h14qvr6.js} +3 -3
  6. package/dist/{assistant-h0gv97mv.js → assistant-wv1gz3mt.js} +22 -22
  7. package/dist/{boot-reembed-qr8a894z.js → boot-reembed-6yn53ms9.js} +1 -1
  8. package/dist/{boot-reembed-rj85jjhw.js → boot-reembed-7fcka4z5.js} +1 -1
  9. package/dist/{boot-scrub-sweep-eyfvn6v9.js → boot-scrub-sweep-pm1580ax.js} +4 -4
  10. package/dist/{boot-seeds-xs9a8dx1.js → boot-seeds-g5hfc1x8.js} +4 -4
  11. package/dist/{claude-adapter-bm23cye7.js → claude-adapter-gf3kxhf0.js} +9 -9
  12. package/dist/{claude-managed-adapter-1mwrsm9d.js → claude-managed-adapter-h2y889ge.js} +2 -2
  13. package/dist/{claude-managed-setup-gkfgks4j.js → claude-managed-setup-h00hsgtz.js} +2 -2
  14. package/dist/{claude-sdk-session-apb4ypz3.js → claude-sdk-session-s2k1qd8y.js} +13 -13
  15. package/dist/{cli-tj4j2ts4.js → cli-02qm7src.js} +8 -8
  16. package/dist/{cli-1cevz46c.js → cli-0qvtffe9.js} +6 -6
  17. package/dist/{cli-avmqhatn.js → cli-10hhg0km.js} +8 -8
  18. package/dist/{cli-7gh7020n.js → cli-1dmcq2eh.js} +1 -1
  19. package/dist/{cli-kz116kvw.js → cli-239yjk27.js} +7 -7
  20. package/dist/{cli-7ayprxp7.js → cli-2dfbv8qr.js} +8 -0
  21. package/dist/{cli-a49vpbf3.js → cli-5kqnemen.js} +1 -1
  22. package/dist/{cli-x719j3vs.js → cli-5rk36sjf.js} +442 -205
  23. package/dist/{cli-fb6t92v8.js → cli-6x9ma5w5.js} +1 -1
  24. package/dist/{cli-c8fwpgqb.js → cli-7225gwj7.js} +2 -2
  25. package/dist/{cli-5s5hx57y.js → cli-7awf1fp8.js} +1 -1
  26. package/dist/{cli-bn26xbcs.js → cli-8nyhf7za.js} +1 -1
  27. package/dist/{cli-ywyrffff.js → cli-8sxqsbbq.js} +1 -1
  28. package/dist/{cli-rsd7ga7v.js → cli-8zwe9mpk.js} +11 -11
  29. package/dist/{cli-y83zk5sb.js → cli-a0kcty51.js} +4 -4
  30. package/dist/{cli-8b9wvjps.js → cli-a4gvwttf.js} +4 -4
  31. package/dist/{cli-jhp7w1fy.js → cli-a5ebc95n.js} +2 -2
  32. package/dist/{cli-mvg2hf8p.js → cli-ahtpy9kf.js} +14 -7
  33. package/dist/{cli-x1p5dhq2.js → cli-bcj753sq.js} +3 -3
  34. package/dist/{cli-p22zdvnt.js → cli-bn0rewsy.js} +3 -3
  35. package/dist/{cli-p1m2b6gc.js → cli-d2mb5s8a.js} +7 -7
  36. package/dist/{cli-rg7ntypm.js → cli-d3qqdy4c.js} +456 -94
  37. package/dist/{cli-c5sbmw1v.js → cli-d82btycs.js} +94 -15
  38. package/dist/{cli-02vhhssk.js → cli-efaqv1c7.js} +5 -5
  39. package/dist/{cli-vjfpshn3.js → cli-ejs3m1sx.js} +1 -1
  40. package/dist/{cli-kk2r80n5.js → cli-faypxz7q.js} +4 -4
  41. package/dist/{cli-a1esmmee.js → cli-fpmsqq59.js} +7 -2
  42. package/dist/{cli-wrv09v7q.js → cli-ftyypbg5.js} +1 -1
  43. package/dist/{cli-zvze9rbm.js → cli-fyzjmseb.js} +3 -3
  44. package/dist/{cli-8rwvksbc.js → cli-g0hgtz4p.js} +5 -5
  45. package/dist/{cli-nrrg0fvy.js → cli-h38rjv87.js} +133 -12
  46. package/dist/{cli-tg9ksbn8.js → cli-h93c9vb3.js} +2 -2
  47. package/dist/{cli-eqgfs202.js → cli-hqhzg1qq.js} +2 -2
  48. package/dist/{cli-bhwa8rzc.js → cli-hyfw2j1e.js} +13 -12
  49. package/dist/{cli-3wjs22x3.js → cli-j4rqdf2n.js} +2 -2
  50. package/dist/{cli-6ftrrwm1.js → cli-n85dqg6d.js} +5 -5
  51. package/dist/{cli-8cxkw1f5.js → cli-nmqdc2t3.js} +2 -2
  52. package/dist/{cli-4fhyq711.js → cli-nn47d7e8.js} +13 -13
  53. package/dist/{cli-x3en6ct3.js → cli-nwyw3zhg.js} +1 -1
  54. package/dist/{cli-3avfh5az.js → cli-pemywhfq.js} +2 -2
  55. package/dist/{cli-xfe63zx3.js → cli-pkht5hap.js} +2 -2
  56. package/dist/{cli-sppc0cmw.js → cli-pnp2j5zg.js} +2 -2
  57. package/dist/{cli-wk8ccrz6.js → cli-pw7v69vp.js} +2 -2
  58. package/dist/{cli-tgvpmnwz.js → cli-r99kc9yq.js} +5 -5
  59. package/dist/{cli-bfc3k1x5.js → cli-rdyw3mct.js} +9 -9
  60. package/dist/{cli-b80a1100.js → cli-s6vr7r2d.js} +2 -2
  61. package/dist/{cli-zv4vy2b0.js → cli-s95dknxh.js} +1 -1
  62. package/dist/{cli-ttaz6c7m.js → cli-saw9a6f6.js} +6 -5
  63. package/dist/{cli-mz1ezzzh.js → cli-shvfedvm.js} +3 -3
  64. package/dist/{cli-rdr166ht.js → cli-smvcw9z5.js} +1 -1
  65. package/dist/{cli-2rwet3r7.js → cli-sv5gb0yb.js} +1 -1
  66. package/dist/{cli-5ff2sjyt.js → cli-t30yj95q.js} +2 -2
  67. package/dist/{cli-ptkpaqfy.js → cli-wt645v7q.js} +1 -1
  68. package/dist/{cli-f3nx1h8z.js → cli-wxbn3yfx.js} +2 -2
  69. package/dist/{cli-wyrr38xm.js → cli-x5mq1fyq.js} +1 -1
  70. package/dist/{cli-ccn0eybf.js → cli-xbzvet96.js} +6 -6
  71. package/dist/{cli-4mkvwgzr.js → cli-xf234ws8.js} +1 -1
  72. package/dist/{cli-nme7wery.js → cli-y2x52gs2.js} +46 -13
  73. package/dist/{cli-ffbrkh1r.js → cli-y8n5k515.js} +46 -38
  74. package/dist/{cli-ecshf504.js → cli-z4wd2ftv.js} +7 -7
  75. package/dist/{cli-dsgj3e7a.js → cli-zfg9enh9.js} +2 -2
  76. package/dist/{cli-yxqag76b.js → cli-zw88zjba.js} +1 -1
  77. package/dist/cli.js +20 -20
  78. package/dist/{codex-adapter-pp2gq8gr.js → codex-adapter-ttygw382.js} +6 -6
  79. package/dist/{codex-hook-qwzccd64.js → codex-hook-x7nejyrr.js} +7 -4
  80. package/dist/{codex-login-35p4sk85.js → codex-login-m819c41r.js} +1 -1
  81. package/dist/{codex-session-runner-0vzn09t8.js → codex-session-runner-60b58vv3.js} +7 -7
  82. package/dist/{commands-psqhkttb.js → commands-edmdwa4x.js} +2 -2
  83. package/dist/{controller-t20vz2k8.js → controller-m263fg43.js} +4 -4
  84. package/dist/{controllers-connect-gkxmqw9d.js → controllers-connect-5fym8sw1.js} +23 -23
  85. package/dist/{cursor-adapter-3v542qe5.js → cursor-adapter-cz6nm6mj.js} +3 -3
  86. package/dist/{db-nc1rd869.js → db-2y0mgstc.js} +3 -3
  87. package/dist/{db-2xbyenjr.js → db-nn0hcmx5.js} +6 -2
  88. package/dist/{devin-adapter-7egzmt0k.js → devin-adapter-zgqadvnm.js} +1 -1
  89. package/dist/{dispatcher-ewceb8ts.js → dispatcher-0a9wwjcx.js} +20 -20
  90. package/dist/{docker-njavd3fb.js → docker-fkgtr75t.js} +2 -2
  91. package/dist/{dsh-adapter-75xwh78t.js → dsh-adapter-3n3net33.js} +3 -3
  92. package/dist/{e2b-5r6a5jeb.js → e2b-7am6tmq6.js} +2 -2
  93. package/dist/{e2b-pw1nvtmh.js → e2b-thdcxtjd.js} +2 -2
  94. package/dist/{easter-egg-3d-xsc47jwf.js → easter-egg-3d-5cgynaja.js} +1 -1
  95. package/dist/{event-bus-101fenkh.js → event-bus-9vpk8gmq.js} +1 -1
  96. package/dist/{execute-gzmw1mnw.js → execute-t4e6m3rw.js} +1 -1
  97. package/dist/{external-channel-a5dsmxn4.js → external-channel-zhvt95n3.js} +2 -2
  98. package/dist/{grok-adapter-vj88xr23.js → grok-adapter-qnr1hp2y.js} +10 -10
  99. package/dist/handlers-dkcarkd0.js +39 -0
  100. package/dist/{heartbeat-t2m9r3wa.js → heartbeat-gz97r7ac.js} +23 -23
  101. package/dist/{hook-xa677f8r.js → hook-1mmdgjqs.js} +16 -9
  102. package/dist/{hook-8femx1bg.js → hook-x8rthca4.js} +6 -6
  103. package/dist/{http-xpmmq028.js → http-r8f85xr9.js} +274 -160
  104. package/dist/index-5jecgp3n.js +41 -0
  105. package/dist/index-aex0eba9.js +40 -0
  106. package/dist/{index-syztqdt6.js → index-g6tbb6ve.js} +1 -1
  107. package/dist/{index-cdzyfrsp.js → index-smxyk04s.js} +1 -1
  108. package/dist/{index-dg2tmj99.js → index-vzvfqzfj.js} +20 -20
  109. package/dist/{index-s7ckdajq.js → index-y7rbcrc1.js} +10 -10
  110. package/dist/{keepalive-3nr4st3r.js → keepalive-64c0f34c.js} +4 -4
  111. package/dist/lead-b1da0f97.js +78 -0
  112. package/dist/{maintenance-verwpe2c.js → maintenance-mnxpar12.js} +1 -1
  113. package/dist/{oauth-refresh-sweep-9q2t0y3q.js → oauth-refresh-sweep-36hs2v4h.js} +3 -3
  114. package/dist/{onboard-aytqedmq.js → onboard-xes8de61.js} +3 -3
  115. package/dist/{opencode-adapter-f4hryjny.js → opencode-adapter-3s7ax02e.js} +7 -7
  116. package/dist/{otel-impl-hckw4wt1.js → otel-impl-fzc57kcq.js} +2 -2
  117. package/dist/{pi-mono-adapter-hxby0ce1.js → pi-mono-adapter-ytp7gz8b.js} +22 -11
  118. package/dist/{pricing-refresh-5nvme3sm.js → pricing-refresh-1nek2w7b.js} +3 -3
  119. package/dist/{rbac-roles-vbpy21mg.js → rbac-roles-sqefb5hw.js} +2 -2
  120. package/dist/{rbac-roles-pd8c26m1.js → rbac-roles-ttyfaep2.js} +1 -1
  121. package/dist/{render-v2-7nqgvk2q.js → render-v2-vb527jwn.js} +3 -3
  122. package/dist/{resume-b6djcj3c.js → resume-jcdzg1bn.js} +10 -8
  123. package/dist/{runtime-txrxc9za.js → runtime-xe3aqy4x.js} +1 -1
  124. package/dist/{session-access-fc3f9y12.js → session-access-zsp4wsp0.js} +4 -4
  125. package/dist/{setup-n39szm6b.js → setup-1nb2zqd3.js} +1 -1
  126. package/dist/{virtual-modules-wyp2k6z3.js → virtual-modules-4r3zkc20.js} +2 -2
  127. package/dist/{work-objects-jem2fre0.js → work-objects-61w08fwr.js} +23 -23
  128. package/dist/worker-c1e68hpa.js +78 -0
  129. package/dist/{x-8ewt8gxn.js → x-y45mthwn.js} +2 -2
  130. package/openapi.json +491 -52
  131. package/package.json +3 -3
  132. package/src/apps/action-runner.ts +146 -0
  133. package/src/apps/catalog.generated.json +3 -2
  134. package/src/apps/definition.ts +152 -4
  135. package/src/apps/row-store.ts +23 -9
  136. package/src/apps/schema-migrate.ts +14 -6
  137. package/src/apps/script-types.ts +2 -1
  138. package/src/apps/sync.ts +20 -19
  139. package/src/be/db/tasks/read.ts +112 -0
  140. package/src/be/db.ts +16 -4
  141. package/src/be/fleet-benchmark-stats.ts +10 -5
  142. package/src/be/models-catalog.ts +4 -0
  143. package/src/be/onboarding.ts +6 -0
  144. package/src/be/scripts/typecheck.ts +13 -0
  145. package/src/be/swarm-config-guard.ts +25 -1
  146. package/src/be/telemetry-enable.ts +1 -1
  147. package/src/commands/provider-credentials.ts +12 -2
  148. package/src/commands/runner.ts +3 -0
  149. package/src/heartbeat/heartbeat.ts +2 -2
  150. package/src/hooks/codex-hook.ts +6 -2
  151. package/src/hooks/hook.ts +7 -0
  152. package/src/hooks/pr-body-guard.ts +38 -11
  153. package/src/hooks/pr-room-guard.ts +88 -0
  154. package/src/http/agents.ts +1 -0
  155. package/src/http/apps.ts +99 -183
  156. package/src/http/fleet-benchmark.ts +79 -30
  157. package/src/http/global-config.ts +7 -0
  158. package/src/http/ranking.ts +24 -40
  159. package/src/http/status.ts +49 -43
  160. package/src/http/tasks.ts +49 -1
  161. package/src/http/telemetry-ui.ts +1 -1
  162. package/src/http/used-by.ts +55 -19
  163. package/src/http/users.ts +2 -2
  164. package/src/providers/acp-targets.ts +1 -1
  165. package/src/providers/amp-adapter.ts +1 -1
  166. package/src/providers/pi-mono-adapter.ts +15 -0
  167. package/src/providers/reasoning-effort.ts +2 -1
  168. package/src/providers/types.ts +2 -0
  169. package/src/ranking/telemetry-ranking.ts +5 -33
  170. package/src/scripts-runtime/sdk-allowlist.ts +7 -0
  171. package/src/scripts-runtime/types/stdlib.d.ts +31 -0
  172. package/src/scripts-runtime/types/swarm-sdk.d.ts +31 -0
  173. package/src/server.ts +4 -0
  174. package/src/telemetry-context.ts +19 -1
  175. package/src/telemetry-contract/EVENTS.md +42 -8
  176. package/src/telemetry-contract/SOURCE.json +6 -5
  177. package/src/telemetry-contract/catalog.json +225 -5
  178. package/src/telemetry-contract/ranking/fixtures/valid/no-claim.json +10 -0
  179. package/src/telemetry-contract/ranking/listing.v1.schema.json +2 -2
  180. package/src/telemetry-contract/types.gen.ts +225 -27
  181. package/src/telemetry-identity.ts +47 -9
  182. package/src/telemetry-snapshot.ts +9 -1
  183. package/src/telemetry-ui-events.ts +9 -2
  184. package/src/telemetry.ts +29 -6
  185. package/src/tests/app-action-run-tool.test.ts +178 -0
  186. package/src/tests/app-row-tools.test.ts +385 -0
  187. package/src/tests/apps-json-column.test.ts +611 -0
  188. package/src/tests/apps-script-types.test.ts +2 -0
  189. package/src/tests/apps-sync-engine.test.ts +42 -0
  190. package/src/tests/check-pr-body.test.ts +0 -23
  191. package/src/tests/credential-check.test.ts +38 -0
  192. package/src/tests/db-task-read-contract.test.ts +4 -0
  193. package/src/tests/db-task-write-contract.test.ts +2 -0
  194. package/src/tests/docs-index-footprint.test.js +2 -2
  195. package/src/tests/fleet-benchmark.test.ts +122 -2
  196. package/src/tests/http-users.test.ts +62 -1
  197. package/src/tests/model-catalog-table.test.ts +63 -0
  198. package/src/tests/model-profiles-api.test.ts +19 -7
  199. package/src/tests/models-catalog.test.ts +50 -0
  200. package/src/tests/onboarding.test.ts +21 -0
  201. package/src/tests/org-website.test.ts +62 -0
  202. package/src/tests/pi-mono-adapter.test.ts +23 -0
  203. package/src/tests/pr-body-leaks.test.ts +4 -0
  204. package/src/tests/pr-room-guard.test.ts +242 -0
  205. package/src/tests/ranking-listing.test.ts +8 -23
  206. package/src/tests/ranking-route.test.ts +49 -47
  207. package/src/tests/reasoning-effort.test.ts +39 -3
  208. package/src/tests/runner-harness-telemetry-env.test.ts +62 -1
  209. package/src/tests/status.test.ts +158 -9
  210. package/src/tests/swarm-tool-result-gate.test.ts +2 -4
  211. package/src/tests/task-lineage.test.ts +180 -0
  212. package/src/tests/telemetry-context.test.ts +128 -2
  213. package/src/tests/telemetry-init.test.ts +62 -5
  214. package/src/tests/telemetry-ui-route.test.ts +123 -0
  215. package/src/tests/tool-annotations.test.ts +3 -2
  216. package/src/tests/used-by-route.test.ts +144 -10
  217. package/src/tests/user-token-rest-auth.test.ts +38 -0
  218. package/src/tests/workflow-agent-task-retry.test.ts +130 -4
  219. package/src/tests/workflow-wait-recovery.test.ts +116 -4
  220. package/src/tools/app-action-run.ts +63 -0
  221. package/src/tools/app-rows.ts +239 -0
  222. package/src/tools/model-catalog/index.ts +1 -1
  223. package/src/tools/tool-config.ts +8 -0
  224. package/src/tools/utils.ts +1 -1
  225. package/src/tools/workflows/retry-workflow-run.ts +1 -1
  226. package/src/types.ts +17 -0
  227. package/src/utils/company-profile.ts +24 -0
  228. package/src/utils/org-website.ts +58 -21
  229. package/src/workflows/recovery.ts +10 -22
  230. package/src/workflows/resume.ts +16 -0
  231. package/src/workflows/task-step-routing.ts +47 -7
  232. package/templates/skills/apps/SKILL.md +44 -4
  233. package/templates/skills/apps/content.md +44 -4
  234. package/dist/handlers-zbs90bny.js +0 -39
  235. package/dist/index-8pwc1jc8.js +0 -40
  236. package/dist/index-nxa6me0q.js +0 -41
  237. package/dist/lead-td8h2sfn.js +0 -78
  238. package/dist/worker-wr6xgfr2.js +0 -78
  239. package/src/tests/check-ranking-entry.test.ts +0 -146
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.4.0",
5
+ "version": "2.4.2",
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": [
@@ -613,6 +613,9 @@
613
613
  "bedrock": {
614
614
  "$ref": "#/components/schemas/AgentBedrockStatus"
615
615
  },
616
+ "opencodeGo": {
617
+ "$ref": "#/components/schemas/AgentOpencodeGoStatus"
618
+ },
616
619
  "acp": {
617
620
  "$ref": "#/components/schemas/AgentAcpStatus"
618
621
  }
@@ -766,6 +769,28 @@
766
769
  "ready"
767
770
  ]
768
771
  },
772
+ "AgentOpencodeGoStatus": {
773
+ "type": [
774
+ "object",
775
+ "null"
776
+ ],
777
+ "properties": {
778
+ "probedAt": {
779
+ "type": "number"
780
+ },
781
+ "models": {
782
+ "type": "array",
783
+ "items": {
784
+ "type": "string"
785
+ },
786
+ "default": []
787
+ }
788
+ },
789
+ "default": null,
790
+ "required": [
791
+ "probedAt"
792
+ ]
793
+ },
769
794
  "AgentAcpStatus": {
770
795
  "type": [
771
796
  "object",
@@ -7502,6 +7527,14 @@
7502
7527
  },
7503
7528
  {
7504
7529
  "type": "boolean"
7530
+ },
7531
+ {
7532
+ "type": "object",
7533
+ "additionalProperties": {}
7534
+ },
7535
+ {
7536
+ "type": "array",
7537
+ "items": {}
7505
7538
  }
7506
7539
  ]
7507
7540
  }
@@ -7530,6 +7563,14 @@
7530
7563
  },
7531
7564
  {
7532
7565
  "type": "boolean"
7566
+ },
7567
+ {
7568
+ "type": "object",
7569
+ "additionalProperties": {}
7570
+ },
7571
+ {
7572
+ "type": "array",
7573
+ "items": {}
7533
7574
  }
7534
7575
  ]
7535
7576
  }
@@ -7545,6 +7586,14 @@
7545
7586
  {
7546
7587
  "type": "boolean"
7547
7588
  },
7589
+ {
7590
+ "type": "object",
7591
+ "additionalProperties": {}
7592
+ },
7593
+ {
7594
+ "type": "array",
7595
+ "items": {}
7596
+ },
7548
7597
  {
7549
7598
  "type": "null"
7550
7599
  }
@@ -7576,6 +7625,14 @@
7576
7625
  {
7577
7626
  "type": "boolean"
7578
7627
  },
7628
+ {
7629
+ "type": "object",
7630
+ "additionalProperties": {}
7631
+ },
7632
+ {
7633
+ "type": "array",
7634
+ "items": {}
7635
+ },
7579
7636
  {
7580
7637
  "type": "null"
7581
7638
  }
@@ -8030,6 +8087,14 @@
8030
8087
  },
8031
8088
  {
8032
8089
  "type": "boolean"
8090
+ },
8091
+ {
8092
+ "type": "object",
8093
+ "additionalProperties": {}
8094
+ },
8095
+ {
8096
+ "type": "array",
8097
+ "items": {}
8033
8098
  }
8034
8099
  ]
8035
8100
  }
@@ -8058,6 +8123,14 @@
8058
8123
  },
8059
8124
  {
8060
8125
  "type": "boolean"
8126
+ },
8127
+ {
8128
+ "type": "object",
8129
+ "additionalProperties": {}
8130
+ },
8131
+ {
8132
+ "type": "array",
8133
+ "items": {}
8061
8134
  }
8062
8135
  ]
8063
8136
  }
@@ -8073,6 +8146,14 @@
8073
8146
  {
8074
8147
  "type": "boolean"
8075
8148
  },
8149
+ {
8150
+ "type": "object",
8151
+ "additionalProperties": {}
8152
+ },
8153
+ {
8154
+ "type": "array",
8155
+ "items": {}
8156
+ },
8076
8157
  {
8077
8158
  "type": "null"
8078
8159
  }
@@ -8104,6 +8185,14 @@
8104
8185
  {
8105
8186
  "type": "boolean"
8106
8187
  },
8188
+ {
8189
+ "type": "object",
8190
+ "additionalProperties": {}
8191
+ },
8192
+ {
8193
+ "type": "array",
8194
+ "items": {}
8195
+ },
8107
8196
  {
8108
8197
  "type": "null"
8109
8198
  }
@@ -8391,6 +8480,14 @@
8391
8480
  },
8392
8481
  {
8393
8482
  "type": "boolean"
8483
+ },
8484
+ {
8485
+ "type": "object",
8486
+ "additionalProperties": {}
8487
+ },
8488
+ {
8489
+ "type": "array",
8490
+ "items": {}
8394
8491
  }
8395
8492
  ]
8396
8493
  }
@@ -8419,6 +8516,14 @@
8419
8516
  },
8420
8517
  {
8421
8518
  "type": "boolean"
8519
+ },
8520
+ {
8521
+ "type": "object",
8522
+ "additionalProperties": {}
8523
+ },
8524
+ {
8525
+ "type": "array",
8526
+ "items": {}
8422
8527
  }
8423
8528
  ]
8424
8529
  }
@@ -8434,6 +8539,14 @@
8434
8539
  {
8435
8540
  "type": "boolean"
8436
8541
  },
8542
+ {
8543
+ "type": "object",
8544
+ "additionalProperties": {}
8545
+ },
8546
+ {
8547
+ "type": "array",
8548
+ "items": {}
8549
+ },
8437
8550
  {
8438
8551
  "type": "null"
8439
8552
  }
@@ -8465,6 +8578,14 @@
8465
8578
  {
8466
8579
  "type": "boolean"
8467
8580
  },
8581
+ {
8582
+ "type": "object",
8583
+ "additionalProperties": {}
8584
+ },
8585
+ {
8586
+ "type": "array",
8587
+ "items": {}
8588
+ },
8468
8589
  {
8469
8590
  "type": "null"
8470
8591
  }
@@ -15336,7 +15457,7 @@
15336
15457
  "/api/used-by": {
15337
15458
  "post": {
15338
15459
  "summary": "Grant or revoke the 'used by' logo consent",
15339
- "description": "Records whether agent-swarm.dev may show this organization's logo as a company that uses Agent Swarm. Sends the organization name and website to the telemetry proxy, where a person approves each logo by hand. An explicit admin action, so it is not gated by the telemetry opt-out.",
15460
+ "description": "Records consent to show the organization's logo on agent-swarm.dev. A grant requires a valid contact email. It sends organization identity, contact details, and an optional quote to the proxy for manual review. This explicit admin action works when telemetry is off. A revoke clears the stored contact details and quote.",
15340
15461
  "tags": [
15341
15462
  "Telemetry"
15342
15463
  ],
@@ -15353,6 +15474,26 @@
15353
15474
  "properties": {
15354
15475
  "granted": {
15355
15476
  "type": "boolean"
15477
+ },
15478
+ "contactEmail": {
15479
+ "type": "string",
15480
+ "maxLength": 320,
15481
+ "format": "email"
15482
+ },
15483
+ "contactFunction": {
15484
+ "type": "string",
15485
+ "enum": [
15486
+ "engineer",
15487
+ "eng_lead",
15488
+ "founder",
15489
+ "product",
15490
+ "ops",
15491
+ "other"
15492
+ ]
15493
+ },
15494
+ "quote": {
15495
+ "type": "string",
15496
+ "maxLength": 280
15356
15497
  }
15357
15498
  },
15358
15499
  "required": [
@@ -15386,7 +15527,7 @@
15386
15527
  }
15387
15528
  },
15388
15529
  "400": {
15389
- "description": "Organization name or website is not set (a revoke falls back to the identity of the last grant)",
15530
+ "description": "Invalid contact details, or missing organization name or website",
15390
15531
  "content": {
15391
15532
  "application/json": {
15392
15533
  "schema": {
@@ -15431,7 +15572,7 @@
15431
15572
  "/api/ranking": {
15432
15573
  "get": {
15433
15574
  "summary": "Public ranking state",
15434
- "description": "Whether this install can join the public agent-swarm.dev ranking (telemetry on, organization name and website set), whether it is opted in, and its stored listing. The listing carries the private ranking claim, so only a config admin can read it.",
15575
+ "description": "Whether this install can join the public agent-swarm.dev ranking (telemetry on, organization name and website set), whether it is opted in, and its stored listing. Only a config admin can read it.",
15435
15576
  "tags": [
15436
15577
  "Telemetry"
15437
15578
  ],
@@ -15491,9 +15632,6 @@
15491
15632
  1
15492
15633
  ]
15493
15634
  },
15494
- "claim": {
15495
- "type": "string"
15496
- },
15497
15635
  "name": {
15498
15636
  "type": "string"
15499
15637
  },
@@ -15535,7 +15673,6 @@
15535
15673
  },
15536
15674
  "required": [
15537
15675
  "v",
15538
- "claim",
15539
15676
  "name",
15540
15677
  "domain",
15541
15678
  "category",
@@ -15548,18 +15685,6 @@
15548
15685
  "listingMatchesDomain": {
15549
15686
  "type": "boolean"
15550
15687
  },
15551
- "fileJson": {
15552
- "type": [
15553
- "string",
15554
- "null"
15555
- ]
15556
- },
15557
- "prUrl": {
15558
- "type": [
15559
- "string",
15560
- "null"
15561
- ]
15562
- },
15563
15688
  "verifyUrl": {
15564
15689
  "type": [
15565
15690
  "string",
@@ -15576,8 +15701,6 @@
15576
15701
  "domain",
15577
15702
  "listing",
15578
15703
  "listingMatchesDomain",
15579
- "fileJson",
15580
- "prUrl",
15581
15704
  "verifyUrl"
15582
15705
  ]
15583
15706
  }
@@ -15610,7 +15733,7 @@
15610
15733
  "/api/ranking/opt-in": {
15611
15734
  "post": {
15612
15735
  "summary": "Opt this install into the public ranking",
15613
- "description": "Builds the telemetry_ranking listing from the organization name and website plus the chosen category, stores it, turns PUBLIC_RANKING_ENABLED on and sends ranking.opted_in. The install is ranked only after a ranking PR with the returned file is merged into desplega-ai/agent-swarm.",
15736
+ "description": "Builds the telemetry_ranking listing from the organization name and website plus the chosen category, stores it, turns PUBLIC_RANKING_ENABLED on and sends ranking.opted_in. That is the whole opt-in: the install shows on agent-swarm.dev/ranking at the next hourly refresh.",
15614
15737
  "tags": [
15615
15738
  "Telemetry"
15616
15739
  ],
@@ -15673,9 +15796,6 @@
15673
15796
  "domain": {
15674
15797
  "type": "string"
15675
15798
  },
15676
- "claim": {
15677
- "type": "string"
15678
- },
15679
15799
  "listing": {
15680
15800
  "type": "object",
15681
15801
  "properties": {
@@ -15685,9 +15805,6 @@
15685
15805
  1
15686
15806
  ]
15687
15807
  },
15688
- "claim": {
15689
- "type": "string"
15690
- },
15691
15808
  "name": {
15692
15809
  "type": "string"
15693
15810
  },
@@ -15729,7 +15846,6 @@
15729
15846
  },
15730
15847
  "required": [
15731
15848
  "v",
15732
- "claim",
15733
15849
  "name",
15734
15850
  "domain",
15735
15851
  "category",
@@ -15739,22 +15855,13 @@
15739
15855
  "updatedAt"
15740
15856
  ]
15741
15857
  },
15742
- "fileJson": {
15743
- "type": "string"
15744
- },
15745
- "prUrl": {
15746
- "type": "string"
15747
- },
15748
15858
  "verifyUrl": {
15749
15859
  "type": "string"
15750
15860
  }
15751
15861
  },
15752
15862
  "required": [
15753
15863
  "domain",
15754
- "claim",
15755
15864
  "listing",
15756
- "fileJson",
15757
- "prUrl",
15758
15865
  "verifyUrl"
15759
15866
  ]
15760
15867
  }
@@ -15807,7 +15914,7 @@
15807
15914
  "/api/ranking/opt-out": {
15808
15915
  "post": {
15809
15916
  "summary": "Leave the public ranking",
15810
- "description": "Turns PUBLIC_RANKING_ENABLED off and sends ranking.opted_out, so workers stop sending ranking.usage. Returns the GitHub page that deletes the ranking entry.",
15917
+ "description": "Turns PUBLIC_RANKING_ENABLED off and sends ranking.opted_out, so workers stop sending ranking.usage. The install leaves agent-swarm.dev/ranking at the next hourly refresh.",
15811
15918
  "tags": [
15812
15919
  "Telemetry"
15813
15920
  ],
@@ -15829,17 +15936,10 @@
15829
15936
  "enum": [
15830
15937
  false
15831
15938
  ]
15832
- },
15833
- "leaveUrl": {
15834
- "type": [
15835
- "string",
15836
- "null"
15837
- ]
15838
15939
  }
15839
15940
  },
15840
15941
  "required": [
15841
- "enabled",
15842
- "leaveUrl"
15942
+ "enabled"
15843
15943
  ]
15844
15944
  }
15845
15945
  }
@@ -32912,6 +33012,302 @@
32912
33012
  }
32913
33013
  }
32914
33014
  },
33015
+ "/api/tasks/{id}/lineage": {
33016
+ "get": {
33017
+ "summary": "Get the tree a task belongs to (ancestors and descendants)",
33018
+ "description": "Follows `parentTaskId` up to the topmost ancestor, then returns every descendant of that root as slim task rows, the task's own subtree first. Bounded: at most 50 hops up, `maxDepth` levels down and about twice `maxNodes` rows; `truncated` is true when any task in the tree is missing from the response.",
33019
+ "tags": [
33020
+ "Tasks"
33021
+ ],
33022
+ "security": [
33023
+ {
33024
+ "bearerAuth": []
33025
+ }
33026
+ ],
33027
+ "parameters": [
33028
+ {
33029
+ "schema": {
33030
+ "type": "string"
33031
+ },
33032
+ "required": true,
33033
+ "name": "id",
33034
+ "in": "path"
33035
+ },
33036
+ {
33037
+ "schema": {
33038
+ "type": "integer",
33039
+ "minimum": 1,
33040
+ "maximum": 500
33041
+ },
33042
+ "required": false,
33043
+ "name": "maxNodes",
33044
+ "in": "query"
33045
+ },
33046
+ {
33047
+ "schema": {
33048
+ "type": "integer",
33049
+ "minimum": 1,
33050
+ "maximum": 30
33051
+ },
33052
+ "required": false,
33053
+ "name": "maxDepth",
33054
+ "in": "query"
33055
+ }
33056
+ ],
33057
+ "responses": {
33058
+ "200": {
33059
+ "description": "The lineage tree as a flat list linked by `parentTaskId`",
33060
+ "content": {
33061
+ "application/json": {
33062
+ "schema": {
33063
+ "type": "object",
33064
+ "properties": {
33065
+ "rootTaskId": {
33066
+ "type": "string"
33067
+ },
33068
+ "tasks": {
33069
+ "type": "array",
33070
+ "items": {
33071
+ "type": "object",
33072
+ "properties": {
33073
+ "id": {
33074
+ "type": "string",
33075
+ "format": "uuid"
33076
+ },
33077
+ "key": {
33078
+ "type": "string",
33079
+ "minLength": 1,
33080
+ "maxLength": 255,
33081
+ "description": "Non-unique asset directory namespace (for example shared/ or personal/<user-id>/drafts/). Runtime write boundaries normalize and validate the canonical form."
33082
+ },
33083
+ "agentId": {
33084
+ "type": [
33085
+ "string",
33086
+ "null"
33087
+ ]
33088
+ },
33089
+ "creatorAgentId": {
33090
+ "type": "string"
33091
+ },
33092
+ "task": {
33093
+ "type": "string",
33094
+ "minLength": 1
33095
+ },
33096
+ "title": {
33097
+ "type": "string"
33098
+ },
33099
+ "status": {
33100
+ "type": "string",
33101
+ "enum": [
33102
+ "draft",
33103
+ "backlog",
33104
+ "unassigned",
33105
+ "offered",
33106
+ "reviewing",
33107
+ "pending",
33108
+ "in_progress",
33109
+ "paused",
33110
+ "completed",
33111
+ "failed",
33112
+ "cancelled",
33113
+ "superseded"
33114
+ ]
33115
+ },
33116
+ "source": {
33117
+ "type": "string",
33118
+ "enum": [
33119
+ "mcp",
33120
+ "slack",
33121
+ "api",
33122
+ "ui",
33123
+ "github",
33124
+ "gitlab",
33125
+ "azure-devops",
33126
+ "agentmail",
33127
+ "system",
33128
+ "schedule",
33129
+ "workflow",
33130
+ "linear",
33131
+ "jira",
33132
+ "comb",
33133
+ "chat"
33134
+ ],
33135
+ "default": "mcp"
33136
+ },
33137
+ "taskType": {
33138
+ "type": "string",
33139
+ "maxLength": 50
33140
+ },
33141
+ "tags": {
33142
+ "type": "array",
33143
+ "items": {
33144
+ "type": "string"
33145
+ },
33146
+ "default": []
33147
+ },
33148
+ "priority": {
33149
+ "type": "integer",
33150
+ "minimum": 0,
33151
+ "maximum": 100,
33152
+ "default": 50
33153
+ },
33154
+ "dependsOn": {
33155
+ "type": "array",
33156
+ "items": {
33157
+ "type": "string"
33158
+ },
33159
+ "default": []
33160
+ },
33161
+ "offeredTo": {
33162
+ "type": "string"
33163
+ },
33164
+ "acceptedAt": {
33165
+ "type": "string",
33166
+ "format": "date-time"
33167
+ },
33168
+ "parentTaskId": {
33169
+ "type": "string"
33170
+ },
33171
+ "scheduleId": {
33172
+ "type": "string"
33173
+ },
33174
+ "model": {
33175
+ "type": "string"
33176
+ },
33177
+ "modelTier": {
33178
+ "type": "string",
33179
+ "enum": [
33180
+ "smol",
33181
+ "regular",
33182
+ "smart",
33183
+ "ultra"
33184
+ ]
33185
+ },
33186
+ "resolvedModel": {
33187
+ "type": "string"
33188
+ },
33189
+ "modelSource": {
33190
+ "type": "string"
33191
+ },
33192
+ "modelAlias": {
33193
+ "type": "string"
33194
+ },
33195
+ "effort": {
33196
+ "type": "string",
33197
+ "enum": [
33198
+ "off",
33199
+ "low",
33200
+ "medium",
33201
+ "high",
33202
+ "xhigh",
33203
+ "max"
33204
+ ]
33205
+ },
33206
+ "resolvedEffort": {
33207
+ "type": "string",
33208
+ "enum": [
33209
+ "off",
33210
+ "low",
33211
+ "medium",
33212
+ "high",
33213
+ "xhigh",
33214
+ "max"
33215
+ ]
33216
+ },
33217
+ "provider": {
33218
+ "type": "string",
33219
+ "enum": [
33220
+ "claude",
33221
+ "codex",
33222
+ "pi",
33223
+ "devin",
33224
+ "claude-managed",
33225
+ "opencode",
33226
+ "acp",
33227
+ "dsh",
33228
+ "amp",
33229
+ "cursor",
33230
+ "grok"
33231
+ ]
33232
+ },
33233
+ "requestedByUserId": {
33234
+ "type": "string"
33235
+ },
33236
+ "progress": {
33237
+ "type": "string"
33238
+ },
33239
+ "createdAt": {
33240
+ "type": "string",
33241
+ "format": "date-time"
33242
+ },
33243
+ "lastUpdatedAt": {
33244
+ "type": "string",
33245
+ "format": "date-time"
33246
+ },
33247
+ "finishedAt": {
33248
+ "type": "string",
33249
+ "format": "date-time"
33250
+ },
33251
+ "peakContextPercent": {
33252
+ "type": "number",
33253
+ "minimum": 0,
33254
+ "maximum": 100
33255
+ },
33256
+ "totalCostUsd": {
33257
+ "type": "number",
33258
+ "minimum": 0
33259
+ },
33260
+ "workflowRunId": {
33261
+ "type": "string"
33262
+ }
33263
+ },
33264
+ "required": [
33265
+ "id",
33266
+ "key",
33267
+ "agentId",
33268
+ "task",
33269
+ "status",
33270
+ "createdAt",
33271
+ "lastUpdatedAt"
33272
+ ]
33273
+ }
33274
+ },
33275
+ "truncated": {
33276
+ "type": "boolean"
33277
+ }
33278
+ },
33279
+ "required": [
33280
+ "rootTaskId",
33281
+ "tasks",
33282
+ "truncated"
33283
+ ]
33284
+ }
33285
+ }
33286
+ }
33287
+ },
33288
+ "403": {
33289
+ "description": "A user caller cannot read the task's session",
33290
+ "content": {
33291
+ "application/json": {
33292
+ "schema": {
33293
+ "$ref": "#/components/schemas/ErrorResponse"
33294
+ }
33295
+ }
33296
+ }
33297
+ },
33298
+ "404": {
33299
+ "description": "Task not found",
33300
+ "content": {
33301
+ "application/json": {
33302
+ "schema": {
33303
+ "$ref": "#/components/schemas/ErrorResponse"
33304
+ }
33305
+ }
33306
+ }
33307
+ }
33308
+ }
33309
+ }
33310
+ },
32915
33311
  "/api/tasks/{id}/progress": {
32916
33312
  "post": {
32917
33313
  "summary": "Update task progress text",
@@ -54216,7 +54612,8 @@
54216
54612
  "type": "string",
54217
54613
  "enum": [
54218
54614
  "banner",
54219
- "settings"
54615
+ "settings",
54616
+ "benchmark"
54220
54617
  ],
54221
54618
  "default": "banner"
54222
54619
  }
@@ -55323,7 +55720,7 @@
55323
55720
  "/api/fleet-benchmark": {
55324
55721
  "get": {
55325
55722
  "summary": "Compare this swarm with similar swarms",
55326
- "description": "Places this swarm's tasks per week and task success rate (last 30 days) in the fleet percentiles published by the telemetry proxy, against swarms with the same agent count when enough exist. Needs telemetry on and an organization name; otherwise `state` says what is missing and the proxy is not called. `unavailable` also covers an install whose first event the proxy saw cannot be established locally (until 30 days after the first accepted event). The fleet numbers are cached for a day.",
55723
+ "description": "Compares local task volume and success rate with fleet percentiles over the last 30 days. Comparisons require telemetry, an organization name, and a known proxy ingest date. A website, team size, and use case enable full comparisons with peer filters. The response includes the proxy's peer group when available. With telemetry off, it returns local DB counts without a proxy request. The fleet cache key includes the peer filters.",
55327
55724
  "tags": [
55328
55725
  "Telemetry"
55329
55726
  ],
@@ -55350,6 +55747,41 @@
55350
55747
  "unavailable"
55351
55748
  ]
55352
55749
  },
55750
+ "level": {
55751
+ "type": "string",
55752
+ "enum": [
55753
+ "basic",
55754
+ "full"
55755
+ ]
55756
+ },
55757
+ "peerGroup": {
55758
+ "type": [
55759
+ "object",
55760
+ "null"
55761
+ ],
55762
+ "properties": {
55763
+ "teamSize": {
55764
+ "type": [
55765
+ "string",
55766
+ "null"
55767
+ ]
55768
+ },
55769
+ "useCase": {
55770
+ "type": [
55771
+ "string",
55772
+ "null"
55773
+ ]
55774
+ },
55775
+ "orgs": {
55776
+ "type": "integer"
55777
+ }
55778
+ },
55779
+ "required": [
55780
+ "teamSize",
55781
+ "useCase",
55782
+ "orgs"
55783
+ ]
55784
+ },
55353
55785
  "local": {
55354
55786
  "type": [
55355
55787
  "object",
@@ -55455,6 +55887,8 @@
55455
55887
  },
55456
55888
  "required": [
55457
55889
  "state",
55890
+ "level",
55891
+ "peerGroup",
55458
55892
  "local",
55459
55893
  "minFinishedTasks",
55460
55894
  "generatedAt",
@@ -55744,7 +56178,8 @@
55744
56178
  "minLength": 1
55745
56179
  },
55746
56180
  "email": {
55747
- "type": "string"
56181
+ "type": "string",
56182
+ "format": "email"
55748
56183
  },
55749
56184
  "role": {
55750
56185
  "type": "string"
@@ -56524,7 +56959,11 @@
56524
56959
  "minLength": 1
56525
56960
  },
56526
56961
  "email": {
56527
- "type": "string"
56962
+ "type": [
56963
+ "string",
56964
+ "null"
56965
+ ],
56966
+ "format": "email"
56528
56967
  },
56529
56968
  "role": {
56530
56969
  "type": "string"