@desplega.ai/agent-swarm 2.3.0 → 2.4.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 (332) hide show
  1. package/README.md +1 -0
  2. package/dist/{acp-adapter-v85a2bqy.js → acp-adapter-zvzr538d.js} +9 -9
  3. package/dist/{actions-zgcxfspj.js → actions-jhtqdw69.js} +21 -19
  4. package/dist/{amp-adapter-jw9xfz42.js → amp-adapter-bd84rhs2.js} +4 -4
  5. package/dist/{app-4e1s4675.js → app-kreq1gwg.js} +3 -3
  6. package/dist/{assistant-v238n9dk.js → assistant-3k22sbsq.js} +23 -21
  7. package/dist/{boot-reembed-p666cw5n.js → boot-reembed-e53x6b9v.js} +1 -1
  8. package/dist/{boot-reembed-w6pm64j4.js → boot-reembed-f6z923ny.js} +1 -1
  9. package/dist/{boot-scrub-sweep-jcyjagn3.js → boot-scrub-sweep-0538vsb7.js} +4 -4
  10. package/dist/{boot-seeds-gbedmamp.js → boot-seeds-6wxqkfk2.js} +4 -4
  11. package/dist/{claude-adapter-q7wspzt8.js → claude-adapter-gfts5044.js} +9 -9
  12. package/dist/{claude-managed-adapter-n7ahjyx6.js → claude-managed-adapter-h2y889ge.js} +3 -3
  13. package/dist/{claude-managed-setup-wza784fb.js → claude-managed-setup-h00hsgtz.js} +2 -2
  14. package/dist/{claude-sdk-session-yf400ptr.js → claude-sdk-session-56besmfz.js} +13 -13
  15. package/dist/{cli-65q70v2v.js → cli-0bh477zn.js} +33 -6
  16. package/dist/{cli-4ync7m60.js → cli-0ebey9hg.js} +1 -1
  17. package/dist/{cli-665j3feb.js → cli-0xk505e8.js} +1 -1
  18. package/dist/{cli-7gh7020n.js → cli-1dmcq2eh.js} +1 -1
  19. package/dist/{cli-gzvb3d4a.js → cli-1jx0srjt.js} +3 -3
  20. package/dist/{cli-zj4d6afs.js → cli-1pa3rz69.js} +21 -6
  21. package/dist/{cli-7ayprxp7.js → cli-2dfbv8qr.js} +8 -0
  22. package/dist/{cli-30m5q8mc.js → cli-3kh4kpqy.js} +6 -6
  23. package/dist/{cli-qrwp40st.js → cli-3p8fqcnh.js} +2 -2
  24. package/dist/{cli-y3dvz6ge.js → cli-3r448dqn.js} +3 -3
  25. package/dist/{cli-a17tzmn0.js → cli-3tnpj2bh.js} +7 -7
  26. package/dist/{cli-ea7chd26.js → cli-471qk6s2.js} +93 -46
  27. package/dist/{cli-a49vpbf3.js → cli-5kqnemen.js} +1 -1
  28. package/dist/{cli-0rh20bp3.js → cli-6ncjvx55.js} +3 -3
  29. package/dist/{cli-fb6t92v8.js → cli-6x9ma5w5.js} +1 -1
  30. package/dist/{cli-k28p6xh7.js → cli-7225gwj7.js} +2 -2
  31. package/dist/{cli-8cvvytad.js → cli-8nyhf7za.js} +3 -3
  32. package/dist/{cli-e09hj50q.js → cli-8wkb09q5.js} +11 -11
  33. package/dist/{cli-j0v75y13.js → cli-a0kcty51.js} +4 -4
  34. package/dist/{cli-zes4tsbb.js → cli-a4gvwttf.js} +4 -4
  35. package/dist/{cli-jhp7w1fy.js → cli-a5ebc95n.js} +2 -2
  36. package/dist/{cli-5d1m1qca.js → cli-ash6xxk7.js} +2 -2
  37. package/dist/{cli-fp4xbw07.js → cli-axh29tyr.js} +14 -12
  38. package/dist/{cli-p22zdvnt.js → cli-bn0rewsy.js} +3 -3
  39. package/dist/{cli-hz64bcnj.js → cli-bn5kevnf.js} +11 -373
  40. package/dist/{cli-8jtrekpy.js → cli-d2mb5s8a.js} +7 -7
  41. package/dist/{cli-c5sbmw1v.js → cli-d82btycs.js} +94 -15
  42. package/dist/{cli-vjfpshn3.js → cli-ejs3m1sx.js} +1 -1
  43. package/dist/{cli-yv0vgscc.js → cli-fpmsqq59.js} +18 -2
  44. package/dist/cli-fz9kewbh.js +382 -0
  45. package/dist/{cli-4s1kqrqg.js → cli-g0hgtz4p.js} +6 -6
  46. package/dist/{cli-hn3pftj2.js → cli-gf0kfg81.js} +7 -7
  47. package/dist/{cli-d43xqzbe.js → cli-hqhzg1qq.js} +2 -2
  48. package/dist/{cli-azs9bhc5.js → cli-j4rqdf2n.js} +2 -2
  49. package/dist/{cli-wtg6edvd.js → cli-jh0qcrga.js} +1 -1
  50. package/dist/{cli-kqypty34.js → cli-k9z4zd4p.js} +6 -5
  51. package/dist/{cli-jhmjwqcg.js → cli-kmqgmcnb.js} +47 -14
  52. package/dist/{cli-8qsx817b.js → cli-kr2pmfqx.js} +583 -769
  53. package/dist/{cli-4g629sgr.js → cli-m2qgh5sv.js} +20 -1
  54. package/dist/{cli-9e9kjqsj.js → cli-mfe7f7b5.js} +2 -2
  55. package/dist/{cli-x3en6ct3.js → cli-nwyw3zhg.js} +1 -1
  56. package/dist/{cli-6vcyw6v7.js → cli-nx462e4v.js} +5 -3
  57. package/dist/{cli-tr24eeny.js → cli-p0rakbrk.js} +9 -9
  58. package/dist/{cli-4hmaheb6.js → cli-p6argxh9.js} +9 -9
  59. package/dist/{cli-3avfh5az.js → cli-pemywhfq.js} +2 -2
  60. package/dist/{cli-etvn5ej2.js → cli-pnp2j5zg.js} +2 -2
  61. package/dist/{cli-wk8ccrz6.js → cli-pw7v69vp.js} +2 -2
  62. package/dist/{cli-ka01m5rb.js → cli-rdq7tzwm.js} +17 -14
  63. package/dist/{cli-re4wkbzx.js → cli-rqqsfz30.js} +677 -104
  64. package/dist/{cli-xgn4rwyv.js → cli-s48yvzb8.js} +4 -4
  65. package/dist/{cli-zv4vy2b0.js → cli-s95dknxh.js} +1 -1
  66. package/dist/{cli-g6p7c2my.js → cli-sjyetj21.js} +2 -2
  67. package/dist/{cli-rdr166ht.js → cli-smvcw9z5.js} +1 -1
  68. package/dist/{cli-fhvqt2fp.js → cli-sv5gb0yb.js} +1 -1
  69. package/dist/{cli-yv3n83x8.js → cli-syhq378v.js} +2 -2
  70. package/dist/{cli-q1812jbw.js → cli-tbhwrxpt.js} +9 -9
  71. package/dist/{cli-w7z94e6c.js → cli-tx00c0h6.js} +4 -2
  72. package/dist/{cli-dxwh4j32.js → cli-vy0fay6k.js} +46 -37
  73. package/dist/{cli-ptkpaqfy.js → cli-wt645v7q.js} +1 -1
  74. package/dist/{cli-ppapy34w.js → cli-wxbn3yfx.js} +2 -2
  75. package/dist/{cli-cby329ny.js → cli-x5mq1fyq.js} +3 -3
  76. package/dist/{cli-rc3r0bnh.js → cli-xbzvet96.js} +6 -6
  77. package/dist/{cli-4mkvwgzr.js → cli-xf234ws8.js} +1 -1
  78. package/dist/{cli-6p7ddg72.js → cli-xftrvxag.js} +5 -5
  79. package/dist/cli-z071fb95.js +848 -0
  80. package/dist/{cli-1v8w782f.js → cli-z1ew8vbq.js} +14 -7
  81. package/dist/{cli-9td5ss65.js → cli-zfg9enh9.js} +3 -3
  82. package/dist/{cli-yxqag76b.js → cli-zw88zjba.js} +1 -1
  83. package/dist/cli.js +19 -19
  84. package/dist/{codex-adapter-nhjj2veb.js → codex-adapter-p6rmm7vv.js} +6 -6
  85. package/dist/{codex-hook-x6tm6y5m.js → codex-hook-x7nejyrr.js} +8 -5
  86. package/dist/{codex-login-35p4sk85.js → codex-login-m819c41r.js} +1 -1
  87. package/dist/{codex-session-runner-6hggrjbx.js → codex-session-runner-8vd5t9t0.js} +7 -7
  88. package/dist/{commands-mrw1ph2w.js → commands-7ems2p13.js} +2 -2
  89. package/dist/{controller-pt1zam5w.js → controller-m263fg43.js} +4 -4
  90. package/dist/{controllers-connect-ymw5541d.js → controllers-connect-bg33ae53.js} +28 -24
  91. package/dist/{cursor-adapter-cf4zh5x0.js → cursor-adapter-cz6nm6mj.js} +3 -3
  92. package/dist/{db-hy80219q.js → db-w505dwa8.js} +2 -2
  93. package/dist/{db-hhpy6m4x.js → db-ys2rbdft.js} +3 -2
  94. package/dist/{devin-adapter-7egzmt0k.js → devin-adapter-zgqadvnm.js} +1 -1
  95. package/dist/{dispatcher-6pdjtkr1.js → dispatcher-0s0mckqr.js} +20 -18
  96. package/dist/{docker-njavd3fb.js → docker-fkgtr75t.js} +2 -2
  97. package/dist/{dsh-adapter-fbx06re2.js → dsh-adapter-3n3net33.js} +3 -3
  98. package/dist/{e2b-5r6a5jeb.js → e2b-7am6tmq6.js} +2 -2
  99. package/dist/{e2b-pw1nvtmh.js → e2b-thdcxtjd.js} +2 -2
  100. package/dist/{easter-egg-3d-6hg2r942.js → easter-egg-3d-5cgynaja.js} +1 -1
  101. package/dist/{event-bus-101fenkh.js → event-bus-9vpk8gmq.js} +1 -1
  102. package/dist/{execute-bcqc69a5.js → execute-t4e6m3rw.js} +1 -1
  103. package/dist/{external-channel-j6vb6ya1.js → external-channel-5b23fv8z.js} +2 -2
  104. package/dist/{google-generative-ai-phpmwxvg.js → google-generative-ai-bmq8gkf3.js} +1 -1
  105. package/dist/{google-vertex-es9ybgdy.js → google-vertex-b1rvp52s.js} +1 -1
  106. package/dist/{grok-adapter-1193sprp.js → grok-adapter-q9fghe5q.js} +10 -10
  107. package/dist/handlers-mqrym347.js +39 -0
  108. package/dist/{heartbeat-h1w1ktce.js → heartbeat-tww6yx1w.js} +23 -21
  109. package/dist/{hook-ejja4bpe.js → hook-dx0pkvar.js} +16 -9
  110. package/dist/{hook-skrbja18.js → hook-pvmh9b6m.js} +6 -6
  111. package/dist/{http-mzh41mfj.js → http-k2ejbt05.js} +975 -292
  112. package/dist/{index-6rmnn89d.js → index-2z710v4x.js} +10 -10
  113. package/dist/{index-xmmkyx82.js → index-dgz61nff.js} +20 -18
  114. package/dist/{index-wgsw9xcz.js → index-g6tbb6ve.js} +1 -1
  115. package/dist/index-h2ek08d6.js +40 -0
  116. package/dist/index-pqfwh9nn.js +41 -0
  117. package/dist/{index-epr2gnbw.js → index-x5aktmp8.js} +1 -1
  118. package/dist/{index-x0q2a4f9.js → index-ysd45kgc.js} +1 -1
  119. package/dist/{index-g909y089.js → index-zgvqzjsw.js} +8 -8
  120. package/dist/{keepalive-4djvbm2j.js → keepalive-nhvpw10z.js} +4 -4
  121. package/dist/lead-jb6sf69z.js +78 -0
  122. package/dist/{maintenance-f3xhnjsm.js → maintenance-agakc519.js} +1 -1
  123. package/dist/{oauth-refresh-sweep-fpd6x6rw.js → oauth-refresh-sweep-4dcbhtn0.js} +3 -3
  124. package/dist/{onboard-196tjgyn.js → onboard-4n2kwa4v.js} +3 -3
  125. package/dist/{opencode-adapter-eeesgfqk.js → opencode-adapter-3s7ax02e.js} +7 -7
  126. package/dist/{otel-impl-g8fh4c21.js → otel-impl-tfa12080.js} +2 -2
  127. package/dist/{pi-mono-adapter-zasp3ze3.js → pi-mono-adapter-ytp7gz8b.js} +24 -13
  128. package/dist/{pricing-refresh-sdcf5yaz.js → pricing-refresh-3cqx3f3x.js} +3 -3
  129. package/dist/{rbac-roles-bsp5657v.js → rbac-roles-9fae5rnv.js} +5 -3
  130. package/dist/{rbac-roles-2x4g1wb5.js → rbac-roles-y6zbfzve.js} +2 -2
  131. package/dist/{render-v2-0pyb39bb.js → render-v2-emawjvc4.js} +3 -3
  132. package/dist/{resume-a86tkj6r.js → resume-zhgts7h7.js} +10 -8
  133. package/dist/{runtime-ar8310ba.js → runtime-xe3aqy4x.js} +1 -1
  134. package/dist/session-access-cm823e06.js +25 -0
  135. package/dist/{setup-ypbzcapd.js → setup-tkp99w1e.js} +1 -1
  136. package/dist/{virtual-modules-wzk6jf3a.js → virtual-modules-4r3zkc20.js} +2 -2
  137. package/dist/{work-objects-yjp8de12.js → work-objects-f722h263.js} +23 -21
  138. package/dist/worker-p7f336rq.js +78 -0
  139. package/dist/{x-8ewt8gxn.js → x-y45mthwn.js} +2 -2
  140. package/openapi.json +1086 -305
  141. package/package.json +2 -2
  142. package/src/apps/action-caller.ts +6 -0
  143. package/src/apps/action-runner.ts +146 -0
  144. package/src/apps/row-store.ts +4 -2
  145. package/src/apps/script-types.ts +17 -4
  146. package/src/be/db/active-sessions.ts +5 -0
  147. package/src/be/db/session-visibility.ts +29 -0
  148. package/src/be/db/tasks/read.ts +61 -3
  149. package/src/be/db/tasks/write.ts +15 -6
  150. package/src/be/db.ts +106 -37
  151. package/src/be/events.ts +11 -0
  152. package/src/be/fleet-benchmark-stats.ts +10 -5
  153. package/src/be/migrations/230_session_shares.sql +23 -0
  154. package/src/be/models-catalog.ts +4 -0
  155. package/src/be/onboarding.ts +6 -0
  156. package/src/be/rbac-roles.ts +2 -0
  157. package/src/be/scripts/typecheck.ts +13 -0
  158. package/src/be/session-shares.ts +244 -0
  159. package/src/be/swarm-config-guard.ts +33 -3
  160. package/src/be/telemetry-enable.ts +1 -1
  161. package/src/commands/provider-credentials.ts +12 -2
  162. package/src/commands/runner.ts +14 -0
  163. package/src/heartbeat/heartbeat.ts +2 -2
  164. package/src/hooks/codex-hook.ts +6 -2
  165. package/src/hooks/hook.ts +7 -0
  166. package/src/hooks/pr-body-guard.ts +38 -11
  167. package/src/hooks/pr-room-guard.ts +88 -0
  168. package/src/http/active-sessions.ts +13 -2
  169. package/src/http/agents.ts +11 -3
  170. package/src/http/all-routes.ts +1 -0
  171. package/src/http/api-keys.ts +3 -1
  172. package/src/http/approval-requests.ts +2 -1
  173. package/src/http/apps.ts +118 -190
  174. package/src/http/config.ts +3 -0
  175. package/src/http/context.ts +2 -0
  176. package/src/http/core.ts +39 -2
  177. package/src/http/events.ts +6 -2
  178. package/src/http/favorite-owner.ts +1 -1
  179. package/src/http/fleet-benchmark.ts +79 -30
  180. package/src/http/fs.ts +38 -3
  181. package/src/http/global-config.ts +7 -0
  182. package/src/http/index.ts +3 -1
  183. package/src/http/memory.ts +3 -1
  184. package/src/http/ranking.ts +351 -0
  185. package/src/http/realtime.ts +26 -21
  186. package/src/http/route-def.ts +77 -11
  187. package/src/http/script-runs.ts +2 -1
  188. package/src/http/scripts.ts +8 -0
  189. package/src/http/session-access.ts +179 -0
  190. package/src/http/session-data.ts +10 -2
  191. package/src/http/sessions.ts +212 -12
  192. package/src/http/stats.ts +7 -3
  193. package/src/http/tasks.ts +85 -8
  194. package/src/http/telemetry-ui.ts +1 -1
  195. package/src/http/used-by.ts +64 -20
  196. package/src/http/users.ts +2 -2
  197. package/src/prompts/session-templates.ts +3 -1
  198. package/src/providers/amp-adapter.ts +1 -1
  199. package/src/providers/pi-mono-adapter.ts +15 -0
  200. package/src/providers/reasoning-effort.ts +2 -1
  201. package/src/providers/types.ts +2 -0
  202. package/src/ranking/telemetry-ranking.ts +119 -0
  203. package/src/ranking/usage.ts +57 -0
  204. package/src/rbac/admission.ts +22 -7
  205. package/src/rbac/legacy-policy.ts +2 -0
  206. package/src/rbac/permissions.ts +9 -0
  207. package/src/realtime/auth.ts +69 -0
  208. package/src/realtime/tickets.ts +4 -1
  209. package/src/realtime/transport.ts +77 -9
  210. package/src/scripts-runtime/sdk-allowlist.ts +7 -0
  211. package/src/scripts-runtime/types/stdlib.d.ts +31 -0
  212. package/src/scripts-runtime/types/swarm-sdk.d.ts +31 -0
  213. package/src/server.ts +4 -0
  214. package/src/slack/blocks.ts +18 -0
  215. package/src/slack/dm.ts +29 -0
  216. package/src/telemetry-context.ts +19 -1
  217. package/src/telemetry-contract/EVENTS.md +45 -8
  218. package/src/telemetry-contract/SOURCE.json +38 -4
  219. package/src/telemetry-contract/catalog.json +294 -5
  220. package/src/telemetry-contract/ranking/fixtures/expected.json +30 -0
  221. package/src/telemetry-contract/ranking/fixtures/invalid/bad-category.json +11 -0
  222. package/src/telemetry-contract/ranking/fixtures/invalid/bad-claim.json +11 -0
  223. package/src/telemetry-contract/ranking/fixtures/invalid/blank-description.json +11 -0
  224. package/src/telemetry-contract/ranking/fixtures/invalid/blank-name.json +11 -0
  225. package/src/telemetry-contract/ranking/fixtures/invalid/description-too-long.json +11 -0
  226. package/src/telemetry-contract/ranking/fixtures/invalid/domain-uppercase.json +11 -0
  227. package/src/telemetry-contract/ranking/fixtures/invalid/domain-with-scheme.json +11 -0
  228. package/src/telemetry-contract/ranking/fixtures/invalid/domain-with-www.json +11 -0
  229. package/src/telemetry-contract/ranking/fixtures/invalid/http-source-url.json +11 -0
  230. package/src/telemetry-contract/ranking/fixtures/invalid/missing-description.json +10 -0
  231. package/src/telemetry-contract/ranking/fixtures/invalid/missing-version.json +10 -0
  232. package/src/telemetry-contract/ranking/fixtures/invalid/name-not-string.json +11 -0
  233. package/src/telemetry-contract/ranking/fixtures/invalid/name-too-long.json +11 -0
  234. package/src/telemetry-contract/ranking/fixtures/invalid/not-object.json +1 -0
  235. package/src/telemetry-contract/ranking/fixtures/invalid/null.json +1 -0
  236. package/src/telemetry-contract/ranking/fixtures/invalid/other-with-subcategory.json +11 -0
  237. package/src/telemetry-contract/ranking/fixtures/invalid/oversize.json +1 -0
  238. package/src/telemetry-contract/ranking/fixtures/invalid/short-claim.json +11 -0
  239. package/src/telemetry-contract/ranking/fixtures/invalid/subcategory-other-category.json +11 -0
  240. package/src/telemetry-contract/ranking/fixtures/invalid/trailing-data.json +1 -0
  241. package/src/telemetry-contract/ranking/fixtures/invalid/unknown-field.json +12 -0
  242. package/src/telemetry-contract/ranking/fixtures/invalid/unsupported-version.json +11 -0
  243. package/src/telemetry-contract/ranking/fixtures/invalid/updated-at-not-date.json +11 -0
  244. package/src/telemetry-contract/ranking/fixtures/invalid/updated-at-offset.json +11 -0
  245. package/src/telemetry-contract/ranking/fixtures/invalid/wrong-case-field.json +11 -0
  246. package/src/telemetry-contract/ranking/fixtures/valid/category-without-subcategory.json +11 -0
  247. package/src/telemetry-contract/ranking/fixtures/valid/full.json +11 -0
  248. package/src/telemetry-contract/ranking/fixtures/valid/minimal.json +11 -0
  249. package/src/telemetry-contract/ranking/fixtures/valid/no-claim.json +10 -0
  250. package/src/telemetry-contract/ranking/fixtures/valid/padded-text.json +11 -0
  251. package/src/telemetry-contract/ranking/fixtures/valid/unicode-name.json +11 -0
  252. package/src/telemetry-contract/ranking/listing.v1.schema.json +61 -0
  253. package/src/telemetry-contract/ranking/taxonomy.json +8 -0
  254. package/src/telemetry-contract/ranking-taxonomy.gen.ts +11 -0
  255. package/src/telemetry-contract/types.gen.ts +963 -58
  256. package/src/telemetry-identity.ts +47 -9
  257. package/src/telemetry-snapshot.ts +9 -1
  258. package/src/telemetry-ui-events.ts +9 -2
  259. package/src/telemetry.ts +40 -5
  260. package/src/tests/app-action-run-tool.test.ts +178 -0
  261. package/src/tests/app-row-tools.test.ts +360 -0
  262. package/src/tests/apps-rbac.test.ts +189 -2
  263. package/src/tests/apps-script-types.test.ts +16 -3
  264. package/src/tests/credential-check.test.ts +38 -0
  265. package/src/tests/db-extraction-contract.test.ts +1 -0
  266. package/src/tests/db-task-read-contract.test.ts +1 -0
  267. package/src/tests/docs-index-footprint.test.js +2 -2
  268. package/src/tests/fleet-benchmark.test.ts +122 -2
  269. package/src/tests/http-users.test.ts +62 -1
  270. package/src/tests/model-catalog-table.test.ts +63 -0
  271. package/src/tests/model-profiles-api.test.ts +19 -7
  272. package/src/tests/models-catalog.test.ts +50 -0
  273. package/src/tests/onboarding.test.ts +21 -0
  274. package/src/tests/org-identity.test.ts +44 -0
  275. package/src/tests/org-website.test.ts +62 -0
  276. package/src/tests/pi-mono-adapter.test.ts +23 -0
  277. package/src/tests/pr-body-leaks.test.ts +4 -0
  278. package/src/tests/pr-room-guard.test.ts +242 -0
  279. package/src/tests/ranking-listing.test.ts +97 -0
  280. package/src/tests/ranking-route.test.ts +321 -0
  281. package/src/tests/ranking-usage.test.ts +50 -0
  282. package/src/tests/rbac-admission-e2e.test.ts +8 -0
  283. package/src/tests/rbac-admission.test.ts +38 -0
  284. package/src/tests/rbac-charact-http.test.ts +4 -3
  285. package/src/tests/rbac-engine.test.ts +2 -0
  286. package/src/tests/rbac-roles.test.ts +2 -0
  287. package/src/tests/realtime-room-surfaces.test.ts +3 -1
  288. package/src/tests/realtime-session-join-race.test.ts +142 -0
  289. package/src/tests/realtime-tickets.test.ts +24 -17
  290. package/src/tests/realtime-transport.test.ts +91 -0
  291. package/src/tests/reasoning-effort.test.ts +39 -3
  292. package/src/tests/runner-harness-telemetry-env.test.ts +56 -1
  293. package/src/tests/session-route-posture.test.ts +639 -0
  294. package/src/tests/session-sharing-routes.test.ts +282 -0
  295. package/src/tests/session-sharing.test.ts +526 -0
  296. package/src/tests/sessions-detail-batch.test.ts +7 -1
  297. package/src/tests/slack-tool-blocks.test.ts +101 -0
  298. package/src/tests/slack-update.test.ts +55 -0
  299. package/src/tests/slack-user-dm.test.ts +177 -0
  300. package/src/tests/swarm-tool-result-gate.test.ts +2 -4
  301. package/src/tests/telemetry-context.test.ts +128 -2
  302. package/src/tests/telemetry-ui-route.test.ts +123 -0
  303. package/src/tests/tool-annotations.test.ts +3 -2
  304. package/src/tests/used-by-route.test.ts +153 -9
  305. package/src/tests/workflow-agent-task-retry.test.ts +130 -4
  306. package/src/tests/workflow-wait-recovery.test.ts +116 -4
  307. package/src/tools/app-action-run.ts +63 -0
  308. package/src/tools/app-rows.ts +234 -0
  309. package/src/tools/model-catalog/index.ts +1 -1
  310. package/src/tools/slack-post.ts +18 -12
  311. package/src/tools/slack-read.ts +13 -1
  312. package/src/tools/slack-reply.ts +7 -10
  313. package/src/tools/slack-start-thread.ts +18 -11
  314. package/src/tools/slack-update.ts +2 -9
  315. package/src/tools/tool-config.ts +8 -0
  316. package/src/tools/utils.ts +1 -1
  317. package/src/tools/workflows/retry-workflow-run.ts +1 -1
  318. package/src/types.ts +52 -0
  319. package/src/utils/company-profile.ts +24 -0
  320. package/src/utils/org-identity.ts +33 -0
  321. package/src/utils/org-website.ts +58 -21
  322. package/src/workflows/recovery.ts +10 -22
  323. package/src/workflows/resume.ts +16 -0
  324. package/src/workflows/task-step-routing.ts +47 -7
  325. package/templates/skills/apps/SKILL.md +58 -2
  326. package/templates/skills/apps/content.md +58 -2
  327. package/dist/handlers-tb3xgjnm.js +0 -37
  328. package/dist/index-nyfcdpky.js +0 -39
  329. package/dist/index-vjn3wbzf.js +0 -38
  330. package/dist/lead-61kqp604.js +0 -76
  331. package/dist/worker-4ptnn1ge.js +0 -76
  332. package/dist/{cli-n5mrsg0f.js → cli-60cgh1rv.js} +3 -3
@@ -49,6 +49,147 @@ export interface paths {
49
49
  patch?: never;
50
50
  trace?: never;
51
51
  };
52
+ "/v1/used-by": {
53
+ parameters: {
54
+ query?: never;
55
+ header?: never;
56
+ path?: never;
57
+ cookie?: never;
58
+ };
59
+ get?: never;
60
+ put?: never;
61
+ /**
62
+ * Record a "used by" logo consent change
63
+ * @description Stores one grant or revoke of an install's consent to show its org's logo
64
+ * on agent-swarm.dev, then posts it to the feedback Slack channel. Nothing is
65
+ * published automatically: a human approves each logo by hand. Called
66
+ * server-to-server by the agent-swarm API; there is no read endpoint. The
67
+ * JSON body must not exceed 4 KB.
68
+ */
69
+ post: operations["submitUsedByConsent"];
70
+ delete?: never;
71
+ options?: never;
72
+ head?: never;
73
+ patch?: never;
74
+ trace?: never;
75
+ };
76
+ "/v1/logo": {
77
+ parameters: {
78
+ query?: never;
79
+ header?: never;
80
+ path?: never;
81
+ cookie?: never;
82
+ };
83
+ /**
84
+ * Fetch an org logo by website hostname
85
+ * @description Returns a 128 px PNG logo for `domain`, fetched from logo.dev with a key held
86
+ * only by this service, so dashboards (self-hosted included) can show their
87
+ * org's logo without the key reaching their config or UI bundle. Unknown
88
+ * domains get logo.dev's generated monogram. Answers are cached in memory for a
89
+ * day (a 404 for an hour), and browsers may cache the image for a day. Rate
90
+ * limited per IP: a burst of 60, then one per second.
91
+ */
92
+ get: operations["getOrgLogo"];
93
+ put?: never;
94
+ post?: never;
95
+ delete?: never;
96
+ options?: never;
97
+ head?: never;
98
+ patch?: never;
99
+ trace?: never;
100
+ };
101
+ "/v1/fleet/benchmarks": {
102
+ parameters: {
103
+ query?: never;
104
+ header?: never;
105
+ path?: never;
106
+ cookie?: never;
107
+ };
108
+ /**
109
+ * Fleet percentiles for tasks per week and task success rate
110
+ * @description Percentiles over production agent-swarm installs with at least 10 finished
111
+ * tasks in the last 30 days, overall and by agent count (`1`, `2-5`, `6+`).
112
+ * Internal, QA, test and E2B installs are excluded. Aggregates only: no install
113
+ * ID or org name. Whole-fleet buckets require 20 installs. Optional profile
114
+ * filters select orgs by their latest API server or UI context. Both filters
115
+ * must be present. A peer group requires 20 contributing orgs. Smaller groups fall back to the whole fleet with
116
+ * `peer_group: null`. Peer buckets also require 20 distinct orgs. Recomputed hourly from `raw_events`; the request carries no install
117
+ * ID. Called server to server by agent-swarm API servers, so the response sends
118
+ * no CORS headers. Rate limited per IP: a burst of 10, then 10 per minute.
119
+ */
120
+ get: operations["getFleetBenchmarks"];
121
+ put?: never;
122
+ post?: never;
123
+ delete?: never;
124
+ options?: never;
125
+ head?: never;
126
+ patch?: never;
127
+ trace?: never;
128
+ };
129
+ "/v1/ranking": {
130
+ parameters: {
131
+ query?: never;
132
+ header?: never;
133
+ path?: never;
134
+ cookie?: never;
135
+ };
136
+ /**
137
+ * Opted-in agent-swarm installs ranked by tokens
138
+ * @description Copies OpenRouter's app-ranking category response
139
+ * (`/api/frontend/v1/apps/marketplace/category`) key for key, so an
140
+ * OpenRouter-style client reads it unchanged, and adds the other OpenRouter
141
+ * app pages' fields under their OpenRouter names. Without `domain`:
142
+ * `chart` and `titleMap` (the category chart, stacked by app) and
143
+ * `trending` (the index page's fastest growing apps). With `domain`: `chart`
144
+ * stacked by model, `totalTokens`, `rank`, `modelsUsed` and
145
+ * `appModelAnalytics` (the app page). Tokens are the only metric served:
146
+ * `total_requests` is always 0. Telemetry alone lists an install: it sent a
147
+ * valid `ranking.opted_in` listing for the domain, has not opted out since,
148
+ * is not an internal, test, E2B or non-production install, sent telemetry in
149
+ * the last 7 days with the domain as its newest `org_website`, and its
150
+ * `ranking.usage` for the domain has tokens in the period. A domain on the
151
+ * proxy's denylist is never listed. When several installs list one domain,
152
+ * the one whose listing was ingested first holds it (ties go to the lower
153
+ * install ID) while it qualifies; the next in that order takes over when it
154
+ * stops. Recomputed hourly. Called server to server by the landing, so the response sends no
155
+ * CORS headers. Rate limited per IP: a burst of 10, then 10 per minute.
156
+ */
157
+ get: operations["getRanking"];
158
+ put?: never;
159
+ post?: never;
160
+ delete?: never;
161
+ options?: never;
162
+ head?: never;
163
+ patch?: never;
164
+ trace?: never;
165
+ };
166
+ "/v1/ranking/verify": {
167
+ parameters: {
168
+ query?: never;
169
+ header?: never;
170
+ path?: never;
171
+ cookie?: never;
172
+ };
173
+ /**
174
+ * Check whether a domain would be ranked
175
+ * @description Reads the telemetry store live (no cache) and applies the ranking's rules
176
+ * to the domain: it is not denylisted (reason `denylisted`), and an install
177
+ * that listed it has not opted out since, is not excluded, sent telemetry in
178
+ * the last 7 days, and still declares this domain as its website. `listing`
179
+ * and the flags describe the install that would hold the domain or, when
180
+ * none may, the first install that listed it. `listing` never includes a
181
+ * claim. Sends no CORS headers. Rate limited per IP: a burst of 10, then 10 per
182
+ * minute.
183
+ */
184
+ get: operations["verifyRankingEntry"];
185
+ put?: never;
186
+ post?: never;
187
+ delete?: never;
188
+ options?: never;
189
+ head?: never;
190
+ patch?: never;
191
+ trace?: never;
192
+ };
52
193
  }
53
194
  export type webhooks = Record<string, never>;
54
195
  export interface components {
@@ -101,6 +242,16 @@ export interface components {
101
242
  [key: string]: unknown;
102
243
  };
103
244
  };
245
+ /** @enum {string|null} */
246
+ TeamSize: "1" | "2-10" | "11-50" | "51+" | null;
247
+ /** @enum {string|null} */
248
+ UseCase: "features" | "bugs" | "review" | "ops" | "docs" | "data" | null;
249
+ /** @enum {string|null} */
250
+ AcquisitionSource: "search" | "github" | "social" | "colleague" | "newsletter" | "event" | "ai_assistant" | "hacker_news" | "other" | null;
251
+ /** @enum {string|null} */
252
+ UserFunction: "engineer" | "eng_lead" | "founder" | "product" | "ops" | "other" | null;
253
+ /** @enum {string|null} */
254
+ NotificationMoment: "task_failed" | "first_workflow" | "default" | null;
104
255
  /**
105
256
  * @description Identity envelope for schema version 2. Pseudonymous by design: no email or
106
257
  * user name is accepted, and `is_internal` is set only by the proxy.
@@ -124,7 +275,10 @@ export interface components {
124
275
  swarm_version: string;
125
276
  install_method?: string | null;
126
277
  install_preset?: string | null;
127
- acquisition_source?: string | null;
278
+ acquisition_source?: components["schemas"]["AcquisitionSource"];
279
+ team_size?: components["schemas"]["TeamSize"];
280
+ use_case?: components["schemas"]["UseCase"];
281
+ user_function?: components["schemas"]["UserFunction"];
128
282
  };
129
283
  EventEnvelope: {
130
284
  /** @description Product or service emitting the telemetry event. */
@@ -224,6 +378,40 @@ export interface components {
224
378
  * @description Required RFC3339 submission timestamp.
225
379
  */
226
380
  submitted_at: string;
381
+ user_function?: components["schemas"]["UserFunction"];
382
+ team_size?: components["schemas"]["TeamSize"];
383
+ use_case?: components["schemas"]["UseCase"];
384
+ acquisition_source?: components["schemas"]["AcquisitionSource"];
385
+ moment?: components["schemas"]["NotificationMoment"];
386
+ /** @description Optional description of the submitter's current work. */
387
+ working_on?: string | null;
388
+ };
389
+ UsedByConsent: {
390
+ /** @description Agent-swarm installation identifier. Omit it when the install has none (telemetry off). */
391
+ install_id?: string | null;
392
+ org_name: string;
393
+ /** @description Lowercase hostname the admin declared, without scheme, `www.`, path or port. */
394
+ org_website: string;
395
+ /** @description The admin's email domain. The Slack post says whether it matches `org_website`. */
396
+ org_domain?: string | null;
397
+ /** @description true grants consent, false revokes it. */
398
+ granted: boolean;
399
+ /**
400
+ * Format: date-time
401
+ * @description When the admin changed the setting (RFC3339).
402
+ */
403
+ changed_at: string;
404
+ /**
405
+ * Format: email
406
+ * @description Current clients require a valid contact email when consent is granted. Older clients may omit it.
407
+ */
408
+ contact_email?: string | null;
409
+ contact_function?: components["schemas"]["UserFunction"];
410
+ quote?: string | null;
411
+ };
412
+ UsedByAcceptedResponse: {
413
+ /** @constant */
414
+ status: "accepted";
227
415
  };
228
416
  FeedbackAcceptedResponse: {
229
417
  /** @constant */
@@ -242,6 +430,150 @@ export interface components {
242
430
  /** @description Human-readable detail, such as the offending property name. */
243
431
  message: string;
244
432
  };
433
+ FleetBenchmarks: {
434
+ /** @enum {string} */
435
+ window: "30d";
436
+ /** Format: date-time */
437
+ generatedAt: string;
438
+ /** @description k-anonymity floor in installs for the whole fleet, or distinct orgs for a peer group. */
439
+ minInstallsPerBucket: number;
440
+ /** @description An install needs this many completed or failed tasks in the window to count. */
441
+ minFinishedTasks: number;
442
+ overall: components["schemas"]["FleetBenchmarkBlock"];
443
+ /** @description Keyed by `1`, `2-5` or `6+`. A bucket below `minInstallsPerBucket` is absent. The floor counts installs for the whole fleet and distinct orgs for peers. */
444
+ byAgentCount: {
445
+ [key: string]: components["schemas"]["FleetBenchmarkBlock"];
446
+ };
447
+ peer_group?: components["schemas"]["FleetPeerGroup"];
448
+ };
449
+ FleetPeerGroup: {
450
+ team_size: components["schemas"]["TeamSize"];
451
+ use_case: components["schemas"]["UseCase"];
452
+ orgs: number;
453
+ } | null;
454
+ FleetBenchmarkBlock: {
455
+ installs: number;
456
+ tasksPerWeek: components["schemas"]["FleetMetric"];
457
+ taskSuccessRate: components["schemas"]["FleetMetric"];
458
+ };
459
+ /** @description Linear-interpolated percentiles. Below the floor, only `n` and `omitted` are present. */
460
+ FleetMetric: {
461
+ /** @description Installs contributing to this metric. */
462
+ n: number;
463
+ p25?: number;
464
+ p50?: number;
465
+ p75?: number;
466
+ p90?: number;
467
+ omitted?: string;
468
+ };
469
+ RankingResponse: {
470
+ data: {
471
+ apps: components["schemas"]["RankingRow"][];
472
+ /** @description The `group` query value, or `agent-swarm` for every category. */
473
+ group: string;
474
+ /** @description The `subcategory` query value, or null. */
475
+ subcategory: string | null;
476
+ /** @description Subcategories in the group with 3 or more listed entries in the period, most entries first. */
477
+ subcategories: string[];
478
+ /** @description Subcategories in the group with 1 or 2 listed entries in the period. */
479
+ lowCountSubcategories: string[];
480
+ chart?: components["schemas"]["RankingChart"];
481
+ /** @description Without `domain`. The title of every `app_id` key in `chart`, like OpenRouter's category-chart `titleMap`. */
482
+ titleMap?: {
483
+ [key: string]: string;
484
+ };
485
+ /** @description Without `domain`. Listed apps (within `group` and `subcategory`) whose period tokens grew against the previous period of the same length, most tokens gained first. An app with no tokens in the previous period has no baseline and is left out. */
486
+ trending?: components["schemas"]["RankingTrending"][];
487
+ /** @description With `domain`. Every counted day's tokens (held days excluded). */
488
+ totalTokens?: number;
489
+ /** @description With `domain`. The daily global rank (`period=day`), or null with no tokens today. */
490
+ rank?: number | null;
491
+ /** @description With `domain`. Models with tokens in the last 30 days, `unknown` included; may exceed the length of `appModelAnalytics`. */
492
+ modelsUsed?: number;
493
+ /** @description With `domain`. Tokens per model over the last 30 days, most first. */
494
+ appModelAnalytics?: components["schemas"]["RankingModelAnalytics"][];
495
+ };
496
+ };
497
+ RankingTrending: {
498
+ appAnalytics: components["schemas"]["RankingRow"];
499
+ /** @description Period tokens against the previous period of the same length, as a rounded percent increase. */
500
+ growthPercent: number;
501
+ };
502
+ RankingModelAnalytics: {
503
+ /**
504
+ * Format: date
505
+ * @description Today (UTC), the end of the 30-day window.
506
+ */
507
+ date: string;
508
+ /** @description The `ranking.usage` model, or `unknown`. */
509
+ model_permaslug: string;
510
+ /** @description Not an OpenRouter field. The provider that carried most of the model's tokens, or `unknown`. */
511
+ provider: string;
512
+ total_tokens: number;
513
+ };
514
+ RankingRow: {
515
+ /** @description Stable entry ID derived from the domain. Never an install or org ID. */
516
+ app_id: number;
517
+ /** @description Sum of `ranking.usage.totalTokens` in the period, as a decimal string like OpenRouter's. */
518
+ total_tokens: string;
519
+ /**
520
+ * @description Always 0. Tokens are the only public metric; the key stays for OpenRouter schema parity.
521
+ * @constant
522
+ */
523
+ total_requests: 0;
524
+ /** @description Position by tokens among every listed entry in the period, without gaps. A filtered list keeps the global rank. */
525
+ rank: number;
526
+ app: components["schemas"]["RankingApp"];
527
+ };
528
+ RankingApp: {
529
+ id: number;
530
+ /**
531
+ * Format: date-time
532
+ * @description When the entry was first served.
533
+ */
534
+ created_at: string;
535
+ description: string | null;
536
+ /** @description The listing name (the install's SWARM_ORG_NAME). */
537
+ title: string;
538
+ main_url: string | null;
539
+ origin_url: string | null;
540
+ /** @description The entry's domain. */
541
+ slug: string | null;
542
+ source_code_url: string | null;
543
+ icon_class_name: string;
544
+ /** @description This service's `GET /v1/logo` for the domain. */
545
+ favicon_url: string;
546
+ /** @description The listing subcategory, or empty. */
547
+ categories: string[];
548
+ related_apps: number[];
549
+ };
550
+ /** @description OpenRouter's `{x, ys}` chart, oldest point first. `daily` is today and the 30 days before, with `x` as `YYYY-MM-DD 00:00:00`. `weekly` is Monday-based with `x` as `YYYY-MM-DD`: 52 weeks without `domain`, and from the entry's first week (first served or first counted day) with `domain`, at most 52. With `domain`, `ys` keys are models (the top 10 of the point); without it, `app_id`s as strings (the top 9). The rest sum into `Others`. A series with no tokens is left out, so `ys` can be empty. An unknown or hidden `domain` gets empty `daily` and `weekly`. */
551
+ RankingChart: {
552
+ daily: components["schemas"]["RankingChartPoint"][];
553
+ weekly: components["schemas"]["RankingChartPoint"][];
554
+ };
555
+ RankingChartPoint: {
556
+ x: string;
557
+ ys: {
558
+ [key: string]: number;
559
+ };
560
+ };
561
+ RankingVerification: {
562
+ verified: boolean;
563
+ reasons: ("no_listing" | "denylisted" | "opted_out" | "excluded_install" | "telemetry_inactive_7d" | "website_mismatch")[];
564
+ telemetryActive7d: boolean;
565
+ /** @description The install's newest event declares this domain as its org_website. */
566
+ websiteMatchesDomain: boolean;
567
+ listing: components["schemas"]["RankingPublicListing"] | null;
568
+ };
569
+ RankingPublicListing: {
570
+ name: string;
571
+ domain: string;
572
+ category: string;
573
+ subcategory: string | null;
574
+ description: string | null;
575
+ sourceCodeUrl: string | null;
576
+ };
245
577
  ProblemResponse: {
246
578
  code: string;
247
579
  message: string;
@@ -376,6 +708,7 @@ export interface components {
376
708
  properties: components["schemas"]["AgentSwarmCompactionTriggeredProperties"];
377
709
  };
378
710
  AgentSwarmFeatureUsedProperties: {
711
+ /** @description Feature identifier, including health_popover and kickoff_call_opened. Existing identifiers remain accepted. */
379
712
  feature: string;
380
713
  /** @description An email channel is configured. */
381
714
  has_email_channel?: boolean;
@@ -405,6 +738,37 @@ export interface components {
405
738
  product: "agent-swarm";
406
739
  properties: components["schemas"]["AgentSwarmFeatureUsedProperties"];
407
740
  };
741
+ AgentSwarmFleetBenchmarkUnlockedProperties: {
742
+ /** @description Profile fields supplied, never their values. */
743
+ fields: ("website" | "team_size" | "use_case")[];
744
+ /** @description An email channel is configured. */
745
+ has_email_channel?: boolean;
746
+ /** @description An embedding API key is configured. */
747
+ has_embedding_key?: boolean;
748
+ /** @description A notification channel is configured. */
749
+ has_notification_channel?: boolean;
750
+ /** @description A Slack channel is configured. */
751
+ has_slack_channel?: boolean;
752
+ /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
753
+ install_method?: string;
754
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
755
+ is_cloud?: boolean;
756
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
757
+ is_e2b?: boolean;
758
+ /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
759
+ swarmVersion?: string;
760
+ };
761
+ /** @description An admin supplied the company profile fields for the full benchmark. (emitter: ui, since 2026-10-18) */
762
+ AgentSwarmFleetBenchmarkUnlockedEvent: {
763
+ /**
764
+ * @description discriminator enum property added by openapi-typescript
765
+ * @enum {string}
766
+ */
767
+ event: "fleet_benchmark.unlocked";
768
+ /** @constant */
769
+ product: "agent-swarm";
770
+ properties: components["schemas"]["AgentSwarmFleetBenchmarkUnlockedProperties"];
771
+ };
408
772
  AgentSwarmFleetBenchmarkViewedProperties: {
409
773
  /** @description An email channel is configured. */
410
774
  has_email_channel?: boolean;
@@ -421,6 +785,8 @@ export interface components {
421
785
  is_cloud?: boolean;
422
786
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
423
787
  is_e2b?: boolean;
788
+ /** @enum {string} */
789
+ level?: "basic" | "full";
424
790
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
425
791
  swarmVersion?: string;
426
792
  };
@@ -435,6 +801,71 @@ export interface components {
435
801
  product: "agent-swarm";
436
802
  properties: components["schemas"]["AgentSwarmFleetBenchmarkViewedProperties"];
437
803
  };
804
+ AgentSwarmIdentityLookupProperties: {
805
+ /** @description An email channel is configured. */
806
+ has_email_channel?: boolean;
807
+ /** @description An embedding API key is configured. */
808
+ has_embedding_key?: boolean;
809
+ /** @description A notification channel is configured. */
810
+ has_notification_channel?: boolean;
811
+ /** @description A Slack channel is configured. */
812
+ has_slack_channel?: boolean;
813
+ /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
814
+ install_method?: string;
815
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
816
+ is_cloud?: boolean;
817
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
818
+ is_e2b?: boolean;
819
+ matched: boolean;
820
+ /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
821
+ swarmVersion?: string;
822
+ };
823
+ /** @description A dashboard identity lookup matched an existing user or found no match. (emitter: ui, since 2026-10-18) */
824
+ AgentSwarmIdentityLookupEvent: {
825
+ /**
826
+ * @description discriminator enum property added by openapi-typescript
827
+ * @enum {string}
828
+ */
829
+ event: "identity.lookup";
830
+ /** @constant */
831
+ product: "agent-swarm";
832
+ properties: components["schemas"]["AgentSwarmIdentityLookupProperties"];
833
+ };
834
+ AgentSwarmIdentityUserCreatedProperties: {
835
+ /** @enum {string} */
836
+ email_kind: "work" | "personal";
837
+ has_company: boolean;
838
+ /** @description An email channel is configured. */
839
+ has_email_channel?: boolean;
840
+ /** @description An embedding API key is configured. */
841
+ has_embedding_key?: boolean;
842
+ has_function: boolean;
843
+ /** @description A notification channel is configured. */
844
+ has_notification_channel?: boolean;
845
+ /** @description A Slack channel is configured. */
846
+ has_slack_channel?: boolean;
847
+ /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
848
+ install_method?: string;
849
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
850
+ is_cloud?: boolean;
851
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
852
+ is_e2b?: boolean;
853
+ /** @enum {string} */
854
+ surface: "identity_modal" | "setup";
855
+ /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
856
+ swarmVersion?: string;
857
+ };
858
+ /** @description A user created a dashboard identity. Email and personal names stay out of telemetry. (emitter: ui, since 2026-10-18) */
859
+ AgentSwarmIdentityUserCreatedEvent: {
860
+ /**
861
+ * @description discriminator enum property added by openapi-typescript
862
+ * @enum {string}
863
+ */
864
+ event: "identity.user_created";
865
+ /** @constant */
866
+ product: "agent-swarm";
867
+ properties: components["schemas"]["AgentSwarmIdentityUserCreatedProperties"];
868
+ };
438
869
  AgentSwarmIntegrationConnectedProperties: {
439
870
  first_of_type: boolean;
440
871
  /** @description An email channel is configured. */
@@ -468,6 +899,7 @@ export interface components {
468
899
  properties: components["schemas"]["AgentSwarmIntegrationConnectedProperties"];
469
900
  };
470
901
  AgentSwarmLeadCapturedProperties: {
902
+ /** @description Lead channel, including setup_help and fleet_report. Existing channels remain accepted. */
471
903
  channel: string;
472
904
  consent: boolean;
473
905
  /** @description An email channel is configured. */
@@ -499,6 +931,11 @@ export interface components {
499
931
  product: "agent-swarm";
500
932
  properties: components["schemas"]["AgentSwarmLeadCapturedProperties"];
501
933
  };
934
+ /**
935
+ * @description Moment that made the Slack Connect invite relevant.
936
+ * @enum {string}
937
+ */
938
+ "schemas-NotificationMoment": "task_failed" | "first_workflow" | "default";
502
939
  AgentSwarmNotificationDismissedProperties: {
503
940
  /** @description An email channel is configured. */
504
941
  has_email_channel?: boolean;
@@ -515,6 +952,7 @@ export interface components {
515
952
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
516
953
  is_e2b?: boolean;
517
954
  key: string;
955
+ moment?: components["schemas"]["schemas-NotificationMoment"];
518
956
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
519
957
  swarmVersion?: string;
520
958
  };
@@ -529,6 +967,11 @@ export interface components {
529
967
  product: "agent-swarm";
530
968
  properties: components["schemas"]["AgentSwarmNotificationDismissedProperties"];
531
969
  };
970
+ /**
971
+ * @description Job function of a user, separate from the RBAC user_role.
972
+ * @enum {string}
973
+ */
974
+ "schemas-UserFunction": "engineer" | "eng_lead" | "founder" | "product" | "ops" | "other";
532
975
  AgentSwarmNotificationSubmittedProperties: {
533
976
  /** @description Domain of the email typed into the item, never the address. */
534
977
  email_domain?: string;
@@ -547,8 +990,10 @@ export interface components {
547
990
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
548
991
  is_e2b?: boolean;
549
992
  key: string;
993
+ moment?: components["schemas"]["schemas-NotificationMoment"];
550
994
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
551
995
  swarmVersion?: string;
996
+ user_function?: components["schemas"]["schemas-UserFunction"];
552
997
  };
553
998
  /** @description A notification-centre item was submitted. (emitter: ui, since 2026-09-30) */
554
999
  AgentSwarmNotificationSubmittedEvent: {
@@ -577,6 +1022,7 @@ export interface components {
577
1022
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
578
1023
  is_e2b?: boolean;
579
1024
  key: string;
1025
+ moment?: components["schemas"]["schemas-NotificationMoment"];
580
1026
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
581
1027
  swarmVersion?: string;
582
1028
  };
@@ -849,8 +1295,8 @@ export interface components {
849
1295
  properties: components["schemas"]["AgentSwarmOnboardingStepViewedProperties"];
850
1296
  };
851
1297
  AgentSwarmOrgProfileUpdatedProperties: {
852
- /** @description Changed field names: name, website. */
853
- fields: unknown[];
1298
+ /** @description Changed profile field names, never their values. */
1299
+ fields: ("name" | "website" | "team_size" | "use_case" | "acquisition_source")[];
854
1300
  /** @description An email channel is configured. */
855
1301
  has_email_channel?: boolean;
856
1302
  /** @description An embedding API key is configured. */
@@ -869,7 +1315,7 @@ export interface components {
869
1315
  * @description Where the change was made. Not trigger_surface: that key fills the raw_events.trigger_surface column.
870
1316
  * @enum {string}
871
1317
  */
872
- surface: "prompt" | "setup" | "settings";
1318
+ surface: "prompt" | "setup" | "settings" | "org_name_popup" | "feedback" | "fleet_benchmark" | "telemetry_banner" | "identity_modal";
873
1319
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
874
1320
  swarmVersion?: string;
875
1321
  };
@@ -1041,6 +1487,8 @@ export interface components {
1041
1487
  properties: components["schemas"]["AgentSwarmPopupShownProperties"];
1042
1488
  };
1043
1489
  AgentSwarmPopupSubmittedProperties: {
1490
+ /** @description Number of profile follow-up questions answered, never their values. */
1491
+ answered?: number;
1044
1492
  /** @description A name or email was left. The values go to /v1/feedback, never here. */
1045
1493
  has_contact: boolean;
1046
1494
  /** @description An email channel is configured. */
@@ -1058,6 +1506,8 @@ export interface components {
1058
1506
  is_cloud?: boolean;
1059
1507
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1060
1508
  is_e2b?: boolean;
1509
+ /** @description Perks the admin explicitly selected. */
1510
+ perks?: ("used_by" | "slack_connect")[];
1061
1511
  popup: components["schemas"]["Popup"];
1062
1512
  /** @description Feedback pop-up only: the 0-10 score. /v1/feedback enforces the upper bound. */
1063
1513
  score?: number;
@@ -1075,8 +1525,7 @@ export interface components {
1075
1525
  product: "agent-swarm";
1076
1526
  properties: components["schemas"]["AgentSwarmPopupSubmittedProperties"];
1077
1527
  };
1078
- AgentSwarmScheduleErrorProperties: {
1079
- consecutiveErrors: number;
1528
+ AgentSwarmRankingOptedInProperties: {
1080
1529
  /** @description An email channel is configured. */
1081
1530
  has_email_channel?: boolean;
1082
1531
  /** @description An embedding API key is configured. */
@@ -1091,24 +1540,25 @@ export interface components {
1091
1540
  is_cloud?: boolean;
1092
1541
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1093
1542
  is_e2b?: boolean;
1094
- scheduleType: string;
1543
+ /** @description The stringified telemetry_ranking listing (contracts/telemetry/ranking/listing.v1.schema.json). The ingest also requires its name and domain to equal context.org_name and context.org_website. */
1544
+ listing: string;
1095
1545
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1096
1546
  swarmVersion?: string;
1097
- triggeredWorkflows: boolean;
1098
- wasRecovered: boolean;
1099
1547
  };
1100
- /** @description A schedule failed to fire. (emitter: api-server, since 2026-09-30) */
1101
- AgentSwarmScheduleErrorEvent: {
1548
+ /** @description An admin opted the install into the public ranking, or the API rebuilt its listing after an org identity change. (emitter: api-server, since 2026-10-18) */
1549
+ AgentSwarmRankingOptedInEvent: {
1102
1550
  /**
1103
1551
  * @description discriminator enum property added by openapi-typescript
1104
1552
  * @enum {string}
1105
1553
  */
1106
- event: "schedule.error";
1554
+ event: "ranking.opted_in";
1107
1555
  /** @constant */
1108
1556
  product: "agent-swarm";
1109
- properties: components["schemas"]["AgentSwarmScheduleErrorProperties"];
1557
+ properties: components["schemas"]["AgentSwarmRankingOptedInProperties"];
1110
1558
  };
1111
- AgentSwarmScheduleExecutedProperties: {
1559
+ AgentSwarmRankingOptedOutProperties: {
1560
+ /** @description The listing domain that leaves the ranking: a lowercase hostname. */
1561
+ domain: string;
1112
1562
  /** @description An email channel is configured. */
1113
1563
  has_email_channel?: boolean;
1114
1564
  /** @description An embedding API key is configured. */
@@ -1123,24 +1573,23 @@ export interface components {
1123
1573
  is_cloud?: boolean;
1124
1574
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1125
1575
  is_e2b?: boolean;
1126
- scheduleType: string;
1127
1576
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1128
1577
  swarmVersion?: string;
1129
- triggeredWorkflows: boolean;
1130
- wasRecovered: boolean;
1131
1578
  };
1132
- /** @description A schedule fired. (emitter: api-server, since 2026-09-30) */
1133
- AgentSwarmScheduleExecutedEvent: {
1579
+ /** @description The install left the public ranking: the admin turned it off, or the org name or website was cleared or changed. (emitter: api-server, since 2026-10-18) */
1580
+ AgentSwarmRankingOptedOutEvent: {
1134
1581
  /**
1135
1582
  * @description discriminator enum property added by openapi-typescript
1136
1583
  * @enum {string}
1137
1584
  */
1138
- event: "schedule.executed";
1585
+ event: "ranking.opted_out";
1139
1586
  /** @constant */
1140
1587
  product: "agent-swarm";
1141
- properties: components["schemas"]["AgentSwarmScheduleExecutedProperties"];
1588
+ properties: components["schemas"]["AgentSwarmRankingOptedOutProperties"];
1142
1589
  };
1143
- AgentSwarmServerShutdownProperties: {
1590
+ AgentSwarmRankingUsageProperties: {
1591
+ cacheReadTokens?: number;
1592
+ cacheWriteTokens?: number;
1144
1593
  /** @description An email channel is configured. */
1145
1594
  has_email_channel?: boolean;
1146
1595
  /** @description An embedding API key is configured. */
@@ -1149,30 +1598,36 @@ export interface components {
1149
1598
  has_notification_channel?: boolean;
1150
1599
  /** @description A Slack channel is configured. */
1151
1600
  has_slack_channel?: boolean;
1601
+ inputTokens: number;
1152
1602
  /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
1153
1603
  install_method?: string;
1154
1604
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1155
1605
  is_cloud?: boolean;
1156
1606
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1157
1607
  is_e2b?: boolean;
1158
- sessionsProcessed: number;
1159
- signal: string;
1608
+ /** @description The session's model, the same value as session.cost.model. Usage without it, or with a value the ranking does not accept, is shown as the model unknown. */
1609
+ model?: string;
1610
+ outputTokens: number;
1611
+ /** @description The session's provider, the same value as session.cost.provider. Missing means unknown. */
1612
+ provider?: string;
1160
1613
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1161
1614
  swarmVersion?: string;
1162
- uptimeMs: number;
1615
+ /** @description inputTokens + cacheReadTokens + cacheWriteTokens + outputTokens. The ranking sums this. */
1616
+ totalTokens: number;
1163
1617
  };
1164
- /** @description The API server shut down. (emitter: api-server, since 2026-09-30) */
1165
- AgentSwarmServerShutdownEvent: {
1618
+ /** @description Token usage of one session on an install opted into the public ranking. Sent next to session.cost. (emitter: worker, since 2026-10-18) */
1619
+ AgentSwarmRankingUsageEvent: {
1166
1620
  /**
1167
1621
  * @description discriminator enum property added by openapi-typescript
1168
1622
  * @enum {string}
1169
1623
  */
1170
- event: "server.shutdown";
1624
+ event: "ranking.usage";
1171
1625
  /** @constant */
1172
1626
  product: "agent-swarm";
1173
- properties: components["schemas"]["AgentSwarmServerShutdownProperties"];
1627
+ properties: components["schemas"]["AgentSwarmRankingUsageProperties"];
1174
1628
  };
1175
- AgentSwarmServerStartedProperties: {
1629
+ AgentSwarmScheduleErrorProperties: {
1630
+ consecutiveErrors: number;
1176
1631
  /** @description An email channel is configured. */
1177
1632
  has_email_channel?: boolean;
1178
1633
  /** @description An embedding API key is configured. */
@@ -1187,30 +1642,24 @@ export interface components {
1187
1642
  is_cloud?: boolean;
1188
1643
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1189
1644
  is_e2b?: boolean;
1190
- port: number;
1645
+ scheduleType: string;
1191
1646
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1192
1647
  swarmVersion?: string;
1648
+ triggeredWorkflows: boolean;
1649
+ wasRecovered: boolean;
1193
1650
  };
1194
- /** @description The API server started. (emitter: api-server, since 2026-09-30) */
1195
- AgentSwarmServerStartedEvent: {
1651
+ /** @description A schedule failed to fire. (emitter: api-server, since 2026-09-30) */
1652
+ AgentSwarmScheduleErrorEvent: {
1196
1653
  /**
1197
1654
  * @description discriminator enum property added by openapi-typescript
1198
1655
  * @enum {string}
1199
1656
  */
1200
- event: "server.started";
1657
+ event: "schedule.error";
1201
1658
  /** @constant */
1202
1659
  product: "agent-swarm";
1203
- properties: components["schemas"]["AgentSwarmServerStartedProperties"];
1660
+ properties: components["schemas"]["AgentSwarmScheduleErrorProperties"];
1204
1661
  };
1205
- /**
1206
- * @description Surface that started a chain of work: agent-swarm's AgentTaskSourceSchema values plus other.
1207
- * @enum {string}
1208
- */
1209
- TriggerSurface: "slack" | "ui" | "api" | "mcp" | "github" | "gitlab" | "linear" | "jira" | "agentmail" | "schedule" | "workflow" | "system" | "other";
1210
- AgentSwarmSessionCancelledProperties: {
1211
- agentId: string;
1212
- durationMs: number;
1213
- errorCategory: string;
1662
+ AgentSwarmScheduleExecutedProperties: {
1214
1663
  /** @description An email channel is configured. */
1215
1664
  has_email_channel?: boolean;
1216
1665
  /** @description An embedding API key is configured. */
@@ -1225,28 +1674,130 @@ export interface components {
1225
1674
  is_cloud?: boolean;
1226
1675
  /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1227
1676
  is_e2b?: boolean;
1228
- model: string;
1229
- provider: string;
1677
+ scheduleType: string;
1230
1678
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1231
1679
  swarmVersion?: string;
1232
- /** @description Task the session ran, or null for a session with no task. */
1233
- taskId: string | null;
1234
- /** @description Root surface of the task, or null for a session with no task. */
1235
- trigger_surface: components["schemas"]["TriggerSurface"] | null;
1236
- wasRateLimited: boolean;
1680
+ triggeredWorkflows: boolean;
1681
+ wasRecovered: boolean;
1237
1682
  };
1238
- /** @description A session was cancelled. (emitter: worker, since 2026-09-30) */
1239
- AgentSwarmSessionCancelledEvent: {
1683
+ /** @description A schedule fired. (emitter: api-server, since 2026-09-30) */
1684
+ AgentSwarmScheduleExecutedEvent: {
1240
1685
  /**
1241
1686
  * @description discriminator enum property added by openapi-typescript
1242
1687
  * @enum {string}
1243
1688
  */
1244
- event: "session.cancelled";
1689
+ event: "schedule.executed";
1245
1690
  /** @constant */
1246
1691
  product: "agent-swarm";
1247
- properties: components["schemas"]["AgentSwarmSessionCancelledProperties"];
1692
+ properties: components["schemas"]["AgentSwarmScheduleExecutedProperties"];
1248
1693
  };
1249
- AgentSwarmSessionCostProperties: {
1694
+ AgentSwarmServerShutdownProperties: {
1695
+ /** @description An email channel is configured. */
1696
+ has_email_channel?: boolean;
1697
+ /** @description An embedding API key is configured. */
1698
+ has_embedding_key?: boolean;
1699
+ /** @description A notification channel is configured. */
1700
+ has_notification_channel?: boolean;
1701
+ /** @description A Slack channel is configured. */
1702
+ has_slack_channel?: boolean;
1703
+ /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
1704
+ install_method?: string;
1705
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1706
+ is_cloud?: boolean;
1707
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1708
+ is_e2b?: boolean;
1709
+ sessionsProcessed: number;
1710
+ signal: string;
1711
+ /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1712
+ swarmVersion?: string;
1713
+ uptimeMs: number;
1714
+ };
1715
+ /** @description The API server shut down. (emitter: api-server, since 2026-09-30) */
1716
+ AgentSwarmServerShutdownEvent: {
1717
+ /**
1718
+ * @description discriminator enum property added by openapi-typescript
1719
+ * @enum {string}
1720
+ */
1721
+ event: "server.shutdown";
1722
+ /** @constant */
1723
+ product: "agent-swarm";
1724
+ properties: components["schemas"]["AgentSwarmServerShutdownProperties"];
1725
+ };
1726
+ AgentSwarmServerStartedProperties: {
1727
+ /** @description An email channel is configured. */
1728
+ has_email_channel?: boolean;
1729
+ /** @description An embedding API key is configured. */
1730
+ has_embedding_key?: boolean;
1731
+ /** @description A notification channel is configured. */
1732
+ has_notification_channel?: boolean;
1733
+ /** @description A Slack channel is configured. */
1734
+ has_slack_channel?: boolean;
1735
+ /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
1736
+ install_method?: string;
1737
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1738
+ is_cloud?: boolean;
1739
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1740
+ is_e2b?: boolean;
1741
+ port: number;
1742
+ /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1743
+ swarmVersion?: string;
1744
+ };
1745
+ /** @description The API server started. (emitter: api-server, since 2026-09-30) */
1746
+ AgentSwarmServerStartedEvent: {
1747
+ /**
1748
+ * @description discriminator enum property added by openapi-typescript
1749
+ * @enum {string}
1750
+ */
1751
+ event: "server.started";
1752
+ /** @constant */
1753
+ product: "agent-swarm";
1754
+ properties: components["schemas"]["AgentSwarmServerStartedProperties"];
1755
+ };
1756
+ /**
1757
+ * @description Surface that started a chain of work: agent-swarm's AgentTaskSourceSchema values plus other.
1758
+ * @enum {string}
1759
+ */
1760
+ TriggerSurface: "slack" | "ui" | "api" | "mcp" | "github" | "gitlab" | "linear" | "jira" | "agentmail" | "schedule" | "workflow" | "system" | "other";
1761
+ AgentSwarmSessionCancelledProperties: {
1762
+ agentId: string;
1763
+ durationMs: number;
1764
+ errorCategory: string;
1765
+ /** @description An email channel is configured. */
1766
+ has_email_channel?: boolean;
1767
+ /** @description An embedding API key is configured. */
1768
+ has_embedding_key?: boolean;
1769
+ /** @description A notification channel is configured. */
1770
+ has_notification_channel?: boolean;
1771
+ /** @description A Slack channel is configured. */
1772
+ has_slack_channel?: boolean;
1773
+ /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
1774
+ install_method?: string;
1775
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1776
+ is_cloud?: boolean;
1777
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
1778
+ is_e2b?: boolean;
1779
+ model: string;
1780
+ provider: string;
1781
+ /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1782
+ swarmVersion?: string;
1783
+ /** @description Task the session ran, or null for a session with no task. */
1784
+ taskId: string | null;
1785
+ /** @description Root surface of the task, or null for a session with no task. */
1786
+ trigger_surface: components["schemas"]["TriggerSurface"] | null;
1787
+ wasRateLimited: boolean;
1788
+ };
1789
+ /** @description A session was cancelled. (emitter: worker, since 2026-09-30) */
1790
+ AgentSwarmSessionCancelledEvent: {
1791
+ /**
1792
+ * @description discriminator enum property added by openapi-typescript
1793
+ * @enum {string}
1794
+ */
1795
+ event: "session.cancelled";
1796
+ /** @constant */
1797
+ product: "agent-swarm";
1798
+ properties: components["schemas"]["AgentSwarmSessionCancelledProperties"];
1799
+ };
1800
+ AgentSwarmSessionCostProperties: {
1250
1801
  agentId: string;
1251
1802
  cacheReadTokens?: number;
1252
1803
  cacheWriteTokens?: number;
@@ -1436,6 +1987,39 @@ export interface components {
1436
1987
  product: "agent-swarm";
1437
1988
  properties: components["schemas"]["AgentSwarmSessionSteeredProperties"];
1438
1989
  };
1990
+ AgentSwarmSetupWorkerCommandCopiedProperties: {
1991
+ /** @enum {string} */
1992
+ harness: "claude" | "codex" | "pi" | "devin" | "claude-managed" | "opencode" | "acp" | "dsh" | "amp" | "cursor" | "grok";
1993
+ /** @description An email channel is configured. */
1994
+ has_email_channel?: boolean;
1995
+ /** @description An embedding API key is configured. */
1996
+ has_embedding_key?: boolean;
1997
+ /** @description A notification channel is configured. */
1998
+ has_notification_channel?: boolean;
1999
+ /** @description A Slack channel is configured. */
2000
+ has_slack_channel?: boolean;
2001
+ /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
2002
+ install_method?: string;
2003
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
2004
+ is_cloud?: boolean;
2005
+ /** @description Legacy key kept during the v1 window; v2 carries context.deployment. */
2006
+ is_e2b?: boolean;
2007
+ /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
2008
+ swarmVersion?: string;
2009
+ /** @enum {string} */
2010
+ target: "compose" | "docker" | "kubernetes";
2011
+ };
2012
+ /** @description An admin copied a worker command from the setup health popover. (emitter: ui, since 2026-10-18) */
2013
+ AgentSwarmSetupWorkerCommandCopiedEvent: {
2014
+ /**
2015
+ * @description discriminator enum property added by openapi-typescript
2016
+ * @enum {string}
2017
+ */
2018
+ event: "setup.worker_command_copied";
2019
+ /** @constant */
2020
+ product: "agent-swarm";
2021
+ properties: components["schemas"]["AgentSwarmSetupWorkerCommandCopiedProperties"];
2022
+ };
1439
2023
  AgentSwarmSkillInvokedProperties: {
1440
2024
  /** @description An email channel is configured. */
1441
2025
  has_email_channel?: boolean;
@@ -1793,7 +2377,7 @@ export interface components {
1793
2377
  /** @description agent-swarm version. Legacy key kept during the v1 window; v2 carries context.swarm_version. */
1794
2378
  swarmVersion?: string;
1795
2379
  /** @enum {string} */
1796
- via: "banner" | "settings" | "env";
2380
+ via: "banner" | "settings" | "env" | "benchmark";
1797
2381
  };
1798
2382
  /** @description Telemetry was turned on. Sent once, on the first boot or re-init after opting in. (emitter: api-server, since 2026-10-12) */
1799
2383
  AgentSwarmTelemetryEnabledEvent: {
@@ -1841,8 +2425,10 @@ export interface components {
1841
2425
  has_email_channel?: boolean;
1842
2426
  /** @description An embedding API key is configured. */
1843
2427
  has_embedding_key?: boolean;
2428
+ has_function?: boolean;
1844
2429
  /** @description A notification channel is configured. */
1845
2430
  has_notification_channel?: boolean;
2431
+ has_quote?: boolean;
1846
2432
  /** @description A Slack channel is configured. */
1847
2433
  has_slack_channel?: boolean;
1848
2434
  /** @description Legacy key kept during the v1 window; v2 carries context.install_method. */
@@ -2034,7 +2620,7 @@ export interface components {
2034
2620
  product: "agent-swarm";
2035
2621
  properties: components["schemas"]["AgentSwarmWorkflowStartedProperties"];
2036
2622
  };
2037
- AgentSwarmCatalogEvent: components["schemas"]["AgentSwarmAgentRegisteredEvent"] | components["schemas"]["AgentSwarmCompactionTriggeredEvent"] | components["schemas"]["AgentSwarmFeatureUsedEvent"] | components["schemas"]["AgentSwarmFleetBenchmarkViewedEvent"] | components["schemas"]["AgentSwarmIntegrationConnectedEvent"] | components["schemas"]["AgentSwarmLeadCapturedEvent"] | components["schemas"]["AgentSwarmNotificationDismissedEvent"] | components["schemas"]["AgentSwarmNotificationSubmittedEvent"] | components["schemas"]["AgentSwarmNotificationViewedEvent"] | components["schemas"]["AgentSwarmOnboardingCompletedEvent"] | components["schemas"]["AgentSwarmOnboardingDismissedEvent"] | components["schemas"]["AgentSwarmOnboardingFirstTaskCompletedEvent"] | components["schemas"]["AgentSwarmOnboardingStartedEvent"] | components["schemas"]["AgentSwarmOnboardingStepCompletedEvent"] | components["schemas"]["AgentSwarmOnboardingStepFailedEvent"] | components["schemas"]["AgentSwarmOnboardingStepSkippedEvent"] | components["schemas"]["AgentSwarmOnboardingStepViewedEvent"] | components["schemas"]["AgentSwarmOrgProfileUpdatedEvent"] | components["schemas"]["AgentSwarmOrgSnapshotEvent"] | components["schemas"]["AgentSwarmPageViewedEvent"] | components["schemas"]["AgentSwarmPopupDismissedEvent"] | components["schemas"]["AgentSwarmPopupShownEvent"] | components["schemas"]["AgentSwarmPopupSubmittedEvent"] | components["schemas"]["AgentSwarmScheduleErrorEvent"] | components["schemas"]["AgentSwarmScheduleExecutedEvent"] | components["schemas"]["AgentSwarmServerShutdownEvent"] | components["schemas"]["AgentSwarmServerStartedEvent"] | components["schemas"]["AgentSwarmSessionCancelledEvent"] | components["schemas"]["AgentSwarmSessionCostEvent"] | components["schemas"]["AgentSwarmSessionEndedEvent"] | components["schemas"]["AgentSwarmSessionFailureEvent"] | components["schemas"]["AgentSwarmSessionStartedEvent"] | components["schemas"]["AgentSwarmSessionSteeredEvent"] | components["schemas"]["AgentSwarmSkillInvokedEvent"] | components["schemas"]["AgentSwarmTaskCancelledEvent"] | components["schemas"]["AgentSwarmTaskClaimedEvent"] | components["schemas"]["AgentSwarmTaskCompletedEvent"] | components["schemas"]["AgentSwarmTaskCreatedEvent"] | components["schemas"]["AgentSwarmTaskFailedEvent"] | components["schemas"]["AgentSwarmTaskSessionCompletedEvent"] | components["schemas"]["AgentSwarmTaskStartedEvent"] | components["schemas"]["AgentSwarmTaskSupersededEvent"] | components["schemas"]["AgentSwarmTelemetryEnabledEvent"] | components["schemas"]["AgentSwarmUiSessionStartedEvent"] | components["schemas"]["AgentSwarmUsedByConsentChangedEvent"] | components["schemas"]["AgentSwarmWorkflowCompletedEvent"] | components["schemas"]["AgentSwarmWorkflowCreatedEvent"] | components["schemas"]["AgentSwarmWorkflowDeletedEvent"] | components["schemas"]["AgentSwarmWorkflowFailedEvent"] | components["schemas"]["AgentSwarmWorkflowStartedEvent"];
2623
+ AgentSwarmCatalogEvent: components["schemas"]["AgentSwarmAgentRegisteredEvent"] | components["schemas"]["AgentSwarmCompactionTriggeredEvent"] | components["schemas"]["AgentSwarmFeatureUsedEvent"] | components["schemas"]["AgentSwarmFleetBenchmarkUnlockedEvent"] | components["schemas"]["AgentSwarmFleetBenchmarkViewedEvent"] | components["schemas"]["AgentSwarmIdentityLookupEvent"] | components["schemas"]["AgentSwarmIdentityUserCreatedEvent"] | components["schemas"]["AgentSwarmIntegrationConnectedEvent"] | components["schemas"]["AgentSwarmLeadCapturedEvent"] | components["schemas"]["AgentSwarmNotificationDismissedEvent"] | components["schemas"]["AgentSwarmNotificationSubmittedEvent"] | components["schemas"]["AgentSwarmNotificationViewedEvent"] | components["schemas"]["AgentSwarmOnboardingCompletedEvent"] | components["schemas"]["AgentSwarmOnboardingDismissedEvent"] | components["schemas"]["AgentSwarmOnboardingFirstTaskCompletedEvent"] | components["schemas"]["AgentSwarmOnboardingStartedEvent"] | components["schemas"]["AgentSwarmOnboardingStepCompletedEvent"] | components["schemas"]["AgentSwarmOnboardingStepFailedEvent"] | components["schemas"]["AgentSwarmOnboardingStepSkippedEvent"] | components["schemas"]["AgentSwarmOnboardingStepViewedEvent"] | components["schemas"]["AgentSwarmOrgProfileUpdatedEvent"] | components["schemas"]["AgentSwarmOrgSnapshotEvent"] | components["schemas"]["AgentSwarmPageViewedEvent"] | components["schemas"]["AgentSwarmPopupDismissedEvent"] | components["schemas"]["AgentSwarmPopupShownEvent"] | components["schemas"]["AgentSwarmPopupSubmittedEvent"] | components["schemas"]["AgentSwarmRankingOptedInEvent"] | components["schemas"]["AgentSwarmRankingOptedOutEvent"] | components["schemas"]["AgentSwarmRankingUsageEvent"] | components["schemas"]["AgentSwarmScheduleErrorEvent"] | components["schemas"]["AgentSwarmScheduleExecutedEvent"] | components["schemas"]["AgentSwarmServerShutdownEvent"] | components["schemas"]["AgentSwarmServerStartedEvent"] | components["schemas"]["AgentSwarmSessionCancelledEvent"] | components["schemas"]["AgentSwarmSessionCostEvent"] | components["schemas"]["AgentSwarmSessionEndedEvent"] | components["schemas"]["AgentSwarmSessionFailureEvent"] | components["schemas"]["AgentSwarmSessionStartedEvent"] | components["schemas"]["AgentSwarmSessionSteeredEvent"] | components["schemas"]["AgentSwarmSetupWorkerCommandCopiedEvent"] | components["schemas"]["AgentSwarmSkillInvokedEvent"] | components["schemas"]["AgentSwarmTaskCancelledEvent"] | components["schemas"]["AgentSwarmTaskClaimedEvent"] | components["schemas"]["AgentSwarmTaskCompletedEvent"] | components["schemas"]["AgentSwarmTaskCreatedEvent"] | components["schemas"]["AgentSwarmTaskFailedEvent"] | components["schemas"]["AgentSwarmTaskSessionCompletedEvent"] | components["schemas"]["AgentSwarmTaskStartedEvent"] | components["schemas"]["AgentSwarmTaskSupersededEvent"] | components["schemas"]["AgentSwarmTelemetryEnabledEvent"] | components["schemas"]["AgentSwarmUiSessionStartedEvent"] | components["schemas"]["AgentSwarmUsedByConsentChangedEvent"] | components["schemas"]["AgentSwarmWorkflowCompletedEvent"] | components["schemas"]["AgentSwarmWorkflowCreatedEvent"] | components["schemas"]["AgentSwarmWorkflowDeletedEvent"] | components["schemas"]["AgentSwarmWorkflowFailedEvent"] | components["schemas"]["AgentSwarmWorkflowStartedEvent"];
2038
2624
  /** @description Every catalogued (product, event) pair with its property schema. Generated from contracts/telemetry/catalog/events.json. */
2039
2625
  CatalogEvent: components["schemas"]["AgentFsCatalogEvent"] | components["schemas"]["AgentSwarmCatalogEvent"];
2040
2626
  };
@@ -2212,4 +2798,323 @@ export interface operations {
2212
2798
  204: components["responses"]["CORSPreflightResponse"];
2213
2799
  };
2214
2800
  };
2801
+ submitUsedByConsent: {
2802
+ parameters: {
2803
+ query?: never;
2804
+ header?: never;
2805
+ path?: never;
2806
+ cookie?: never;
2807
+ };
2808
+ requestBody: {
2809
+ content: {
2810
+ "application/json": components["schemas"]["UsedByConsent"];
2811
+ };
2812
+ };
2813
+ responses: {
2814
+ /** @description Consent change persisted; the Slack post is best-effort. */
2815
+ 202: {
2816
+ headers: {
2817
+ [name: string]: unknown;
2818
+ };
2819
+ content: {
2820
+ "application/json": components["schemas"]["UsedByAcceptedResponse"];
2821
+ };
2822
+ };
2823
+ /** @description Request body is invalid JSON or failed field validation. */
2824
+ 400: {
2825
+ headers: {
2826
+ [name: string]: unknown;
2827
+ };
2828
+ content: {
2829
+ "application/json": components["schemas"]["ProblemResponse"];
2830
+ };
2831
+ };
2832
+ /** @description Request body exceeds 4 KB. */
2833
+ 413: {
2834
+ headers: {
2835
+ [name: string]: unknown;
2836
+ };
2837
+ content: {
2838
+ "application/json": components["schemas"]["ProblemResponse"];
2839
+ };
2840
+ };
2841
+ /** @description The source IP exceeded 5 requests per minute. */
2842
+ 429: {
2843
+ headers: {
2844
+ /** @description Seconds to wait before retrying. */
2845
+ "Retry-After"?: string;
2846
+ [name: string]: unknown;
2847
+ };
2848
+ content: {
2849
+ "application/json": components["schemas"]["ProblemResponse"];
2850
+ };
2851
+ };
2852
+ /** @description The consent change could not be persisted. */
2853
+ 500: {
2854
+ headers: {
2855
+ [name: string]: unknown;
2856
+ };
2857
+ content: {
2858
+ "application/json": components["schemas"]["ProblemResponse"];
2859
+ };
2860
+ };
2861
+ /** @description Used-by storage is not configured. */
2862
+ 503: {
2863
+ headers: {
2864
+ [name: string]: unknown;
2865
+ };
2866
+ content: {
2867
+ "application/json": components["schemas"]["ProblemResponse"];
2868
+ };
2869
+ };
2870
+ };
2871
+ };
2872
+ getOrgLogo: {
2873
+ parameters: {
2874
+ query: {
2875
+ /** @description Lowercase website hostname, without scheme, `www.`, path or port. IP literals are refused. */
2876
+ domain: string;
2877
+ };
2878
+ header?: never;
2879
+ path?: never;
2880
+ cookie?: never;
2881
+ };
2882
+ requestBody?: never;
2883
+ responses: {
2884
+ /** @description The logo image. */
2885
+ 200: {
2886
+ headers: {
2887
+ /** @description `public, max-age=86400`. */
2888
+ "Cache-Control"?: string;
2889
+ [name: string]: unknown;
2890
+ };
2891
+ content: {
2892
+ "image/png": string;
2893
+ };
2894
+ };
2895
+ /** @description `domain` is missing or not a hostname (code `invalid_domain`). */
2896
+ 400: {
2897
+ headers: {
2898
+ [name: string]: unknown;
2899
+ };
2900
+ content: {
2901
+ "application/json": components["schemas"]["ProblemResponse"];
2902
+ };
2903
+ };
2904
+ /** @description logo.dev has no image for this domain (code `logo_not_found`). */
2905
+ 404: {
2906
+ headers: {
2907
+ [name: string]: unknown;
2908
+ };
2909
+ content: {
2910
+ "application/json": components["schemas"]["ProblemResponse"];
2911
+ };
2912
+ };
2913
+ /** @description The source IP exceeded the logo rate limit. */
2914
+ 429: {
2915
+ headers: {
2916
+ /** @description Seconds to wait before retrying. */
2917
+ "Retry-After"?: string;
2918
+ [name: string]: unknown;
2919
+ };
2920
+ content: {
2921
+ "application/json": components["schemas"]["ProblemResponse"];
2922
+ };
2923
+ };
2924
+ /** @description logo.dev failed or returned something other than a raster image under 256 KB (code `logo_upstream_failed`). Not cached. */
2925
+ 502: {
2926
+ headers: {
2927
+ [name: string]: unknown;
2928
+ };
2929
+ content: {
2930
+ "application/json": components["schemas"]["ProblemResponse"];
2931
+ };
2932
+ };
2933
+ /** @description `LOGO_DEV_TOKEN` is not set (code `logo_unavailable`). */
2934
+ 503: {
2935
+ headers: {
2936
+ [name: string]: unknown;
2937
+ };
2938
+ content: {
2939
+ "application/json": components["schemas"]["ProblemResponse"];
2940
+ };
2941
+ };
2942
+ };
2943
+ };
2944
+ getFleetBenchmarks: {
2945
+ parameters: {
2946
+ query?: {
2947
+ /** @description Only `30d` is supported. */
2948
+ window?: "30d";
2949
+ team_size?: "1" | "2-10" | "11-50" | "51+";
2950
+ use_case?: "features" | "bugs" | "review" | "ops" | "docs" | "data";
2951
+ };
2952
+ header?: never;
2953
+ path?: never;
2954
+ cookie?: never;
2955
+ };
2956
+ requestBody?: never;
2957
+ responses: {
2958
+ /** @description The latest computed benchmark. */
2959
+ 200: {
2960
+ headers: {
2961
+ /** @description `public, max-age=3600`. */
2962
+ "Cache-Control"?: string;
2963
+ [name: string]: unknown;
2964
+ };
2965
+ content: {
2966
+ "application/json": components["schemas"]["FleetBenchmarks"];
2967
+ };
2968
+ };
2969
+ /** @description Invalid window or profile filter (invalid_window, invalid_team_size, invalid_use_case). */
2970
+ 400: {
2971
+ headers: {
2972
+ [name: string]: unknown;
2973
+ };
2974
+ content: {
2975
+ "application/json": components["schemas"]["ProblemResponse"];
2976
+ };
2977
+ };
2978
+ /** @description The source IP exceeded the benchmark rate limit. */
2979
+ 429: {
2980
+ headers: {
2981
+ /** @description Seconds to wait before retrying. */
2982
+ "Retry-After"?: string;
2983
+ [name: string]: unknown;
2984
+ };
2985
+ content: {
2986
+ "application/json": components["schemas"]["ProblemResponse"];
2987
+ };
2988
+ };
2989
+ /** @description No benchmark has been computed yet, for example right after boot (code `benchmarks_unavailable`). */
2990
+ 503: {
2991
+ headers: {
2992
+ [name: string]: unknown;
2993
+ };
2994
+ content: {
2995
+ "application/json": components["schemas"]["ProblemResponse"];
2996
+ };
2997
+ };
2998
+ };
2999
+ };
3000
+ getRanking: {
3001
+ parameters: {
3002
+ query?: {
3003
+ /** @description The last 1, 7 or 30 UTC days, today included. */
3004
+ period?: "day" | "week" | "month";
3005
+ /** @description A category from `contracts/telemetry/ranking/taxonomy.json`. `agent-swarm` or absent means every category. */
3006
+ group?: string;
3007
+ /** @description A subcategory from the taxonomy, inside `group` when one is given. */
3008
+ subcategory?: string;
3009
+ /** @description Return only this entry and its app page fields. An unknown or hidden domain returns an empty `apps` list, an empty chart, zero totals and a null `rank`. */
3010
+ domain?: string;
3011
+ /** @description Accepted for parity with OpenRouter's collector. Only `tokens` is supported. */
3012
+ sortBy?: "tokens";
3013
+ };
3014
+ header?: never;
3015
+ path?: never;
3016
+ cookie?: never;
3017
+ };
3018
+ requestBody?: never;
3019
+ responses: {
3020
+ /** @description The ranking for the period and filters. */
3021
+ 200: {
3022
+ headers: {
3023
+ /** @description `public, max-age=3600`. */
3024
+ "Cache-Control"?: string;
3025
+ [name: string]: unknown;
3026
+ };
3027
+ content: {
3028
+ "application/json": components["schemas"]["RankingResponse"];
3029
+ };
3030
+ };
3031
+ /** @description A query value is not allowed (codes `invalid_period`, `invalid_group`, `invalid_subcategory`, `invalid_domain`, `invalid_sort`). */
3032
+ 400: {
3033
+ headers: {
3034
+ [name: string]: unknown;
3035
+ };
3036
+ content: {
3037
+ "application/json": components["schemas"]["ProblemResponse"];
3038
+ };
3039
+ };
3040
+ /** @description The source IP exceeded the ranking rate limit. */
3041
+ 429: {
3042
+ headers: {
3043
+ /** @description Seconds to wait before retrying. */
3044
+ "Retry-After"?: string;
3045
+ [name: string]: unknown;
3046
+ };
3047
+ content: {
3048
+ "application/json": components["schemas"]["ProblemResponse"];
3049
+ };
3050
+ };
3051
+ /** @description The ranking has not been computed yet, for example right after boot (code `ranking_unavailable`). */
3052
+ 503: {
3053
+ headers: {
3054
+ [name: string]: unknown;
3055
+ };
3056
+ content: {
3057
+ "application/json": components["schemas"]["ProblemResponse"];
3058
+ };
3059
+ };
3060
+ };
3061
+ };
3062
+ verifyRankingEntry: {
3063
+ parameters: {
3064
+ query: {
3065
+ domain: string;
3066
+ /**
3067
+ * @deprecated
3068
+ * @description Sent by agent-swarm v2.4.0's PR check. Ignored.
3069
+ */
3070
+ claim?: string;
3071
+ };
3072
+ header?: never;
3073
+ path?: never;
3074
+ cookie?: never;
3075
+ };
3076
+ requestBody?: never;
3077
+ responses: {
3078
+ /** @description The verification result. A failed check is still a 200 with `verified` false. */
3079
+ 200: {
3080
+ headers: {
3081
+ /** @description `no-store`. */
3082
+ "Cache-Control"?: string;
3083
+ [name: string]: unknown;
3084
+ };
3085
+ content: {
3086
+ "application/json": components["schemas"]["RankingVerification"];
3087
+ };
3088
+ };
3089
+ /** @description `domain` is malformed (code `invalid_domain`). */
3090
+ 400: {
3091
+ headers: {
3092
+ [name: string]: unknown;
3093
+ };
3094
+ content: {
3095
+ "application/json": components["schemas"]["ProblemResponse"];
3096
+ };
3097
+ };
3098
+ /** @description The source IP exceeded the verify rate limit. */
3099
+ 429: {
3100
+ headers: {
3101
+ /** @description Seconds to wait before retrying. */
3102
+ "Retry-After"?: string;
3103
+ [name: string]: unknown;
3104
+ };
3105
+ content: {
3106
+ "application/json": components["schemas"]["ProblemResponse"];
3107
+ };
3108
+ };
3109
+ /** @description The telemetry store could not be read (code `ranking_unavailable`). */
3110
+ 503: {
3111
+ headers: {
3112
+ [name: string]: unknown;
3113
+ };
3114
+ content: {
3115
+ "application/json": components["schemas"]["ProblemResponse"];
3116
+ };
3117
+ };
3118
+ };
3119
+ };
2215
3120
  }