@desplega.ai/agent-swarm 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/dist/{acp-adapter-sj2g0m84.js → acp-adapter-kr4abrsk.js} +10 -10
  2. package/dist/{actions-fegk44gr.js → actions-eh4g6w2r.js} +27 -27
  3. package/dist/{amp-adapter-ad8ft89x.js → amp-adapter-7h7wdt8q.js} +5 -5
  4. package/dist/{app-kfvgbvzy.js → app-7k8s9w5p.js} +9 -9
  5. package/dist/{assistant-z7zdy9ja.js → assistant-wswt2y7p.js} +28 -28
  6. package/dist/{boot-reembed-j8xa181e.js → boot-reembed-9apm9qw6.js} +7 -7
  7. package/dist/{boot-reembed-5c2z0mbe.js → boot-reembed-whzbdthj.js} +7 -7
  8. package/dist/{boot-scrub-sweep-hnkn3rgt.js → boot-scrub-sweep-ndzmvmgt.js} +8 -8
  9. package/dist/{boot-seeds-kwjq4d2z.js → boot-seeds-e9sta0yt.js} +13 -11
  10. package/dist/{claude-adapter-9vmvpvgd.js → claude-adapter-4mqd3r6r.js} +11 -11
  11. package/dist/{claude-managed-adapter-k9qae05j.js → claude-managed-adapter-9wswb52m.js} +3 -3
  12. package/dist/{claude-managed-setup-q54zx5q2.js → claude-managed-setup-tpe1effx.js} +4 -4
  13. package/dist/{claude-sdk-session-9jye6cxr.js → claude-sdk-session-q49ghmh9.js} +10340 -10197
  14. package/dist/{cli-ke896fcf.js → cli-01xvj1rq.js} +10 -10
  15. package/dist/{cli-tr4sxp68.js → cli-035vekcw.js} +2 -2
  16. package/dist/{cli-z5jjpaxw.js → cli-0pd8hzhc.js} +3 -3
  17. package/dist/{cli-n5vwg842.js → cli-0veb92a3.js} +6 -1
  18. package/dist/{cli-wayw93nt.js → cli-10jesr25.js} +3 -3
  19. package/dist/{cli-se8w6wny.js → cli-1y7yywmj.js} +1 -1
  20. package/dist/{cli-v1yb0rqb.js → cli-20krdhz5.js} +47 -19
  21. package/dist/{cli-d5f9ed5c.js → cli-29rja109.js} +39 -20
  22. package/dist/{cli-apx87jne.js → cli-2pwa0q4d.js} +15 -4
  23. package/dist/{cli-ee9gtz70.js → cli-4mengw46.js} +348 -25
  24. package/dist/{cli-03gedhng.js → cli-5twdke5x.js} +6 -6
  25. package/dist/{cli-6razj6t4.js → cli-711vwbxn.js} +2 -2
  26. package/dist/{cli-s2sp957d.js → cli-78vv7446.js} +1 -1
  27. package/dist/{cli-3fbmmawm.js → cli-7n6s5man.js} +4 -4
  28. package/dist/{cli-hnhtk6cj.js → cli-8wwxw8a3.js} +1 -1
  29. package/dist/{cli-hnmhtzvh.js → cli-9jzdj90z.js} +2 -0
  30. package/dist/{cli-skxvvpap.js → cli-cvv9k0hh.js} +28 -25
  31. package/dist/{cli-74ahz61x.js → cli-d9286m9h.js} +2 -2
  32. package/dist/{cli-4jxm2qtz.js → cli-gxzkg1de.js} +28 -16
  33. package/dist/{cli-zkpks3r3.js → cli-h1arqn31.js} +1 -1
  34. package/dist/{cli-r62a35ea.js → cli-hqr88ew6.js} +1 -1
  35. package/dist/{cli-ra0xzggj.js → cli-j67mh2vg.js} +2 -2
  36. package/dist/{cli-29jc5q7w.js → cli-ksphgh48.js} +2 -2
  37. package/dist/{cli-eejsgvm4.js → cli-mgz4nbgg.js} +4 -4
  38. package/dist/{cli-vatyhshy.js → cli-mz5as5ha.js} +4 -4
  39. package/dist/{cli-f7kr7svz.js → cli-n8ndw8j7.js} +2 -2
  40. package/dist/{cli-1e4b6bzh.js → cli-naqzr17j.js} +7 -7
  41. package/dist/{cli-q0ke1yww.js → cli-nm1p8jfr.js} +6 -6
  42. package/dist/{cli-m50t4309.js → cli-p3zbc1rw.js} +5 -5
  43. package/dist/{cli-cgtksawx.js → cli-pe05f8yk.js} +23 -3
  44. package/dist/{cli-vdach5a9.js → cli-qmzsbkvy.js} +4 -4
  45. package/dist/{cli-n3hzg89b.js → cli-qnm4e9e4.js} +57 -579
  46. package/dist/{cli-s4setq91.js → cli-qqy4q48b.js} +3 -3
  47. package/dist/{cli-k382tshb.js → cli-r35rw5de.js} +8 -7
  48. package/dist/{cli-k3dp5tpf.js → cli-r610p9bs.js} +2 -2
  49. package/dist/{cli-e6mpjhed.js → cli-rc6pf5kv.js} +1 -1
  50. package/dist/{cli-3dj8k4vy.js → cli-rdxm77k3.js} +1 -1
  51. package/dist/{cli-tqaazemc.js → cli-s69nfyeh.js} +1 -1
  52. package/dist/{cli-6jyj59nb.js → cli-sawv63e8.js} +2 -2
  53. package/dist/{cli-q50942rs.js → cli-sg19gbf0.js} +1 -1
  54. package/dist/{cli-p1x85d2t.js → cli-shk7r5cs.js} +12 -9
  55. package/dist/{cli-przpmdgr.js → cli-sksetb2q.js} +11 -1
  56. package/dist/{cli-d2qr7aj4.js → cli-t02z59f2.js} +1 -1
  57. package/dist/{cli-j0pfptdp.js → cli-v7g551te.js} +39 -43
  58. package/dist/{cli-bzszjf2p.js → cli-vgqzp4em.js} +519 -126
  59. package/dist/cli-wfnemr1t.js +86 -0
  60. package/dist/{cli-ne236afy.js → cli-wms6x9db.js} +8 -8
  61. package/dist/{cli-5hkm7whv.js → cli-x1r545x8.js} +1 -1
  62. package/dist/{cli-kt6zqg0e.js → cli-xczsgshn.js} +2 -2
  63. package/dist/{cli-ef1hg1wv.js → cli-y3167wt1.js} +430 -238
  64. package/dist/{cli-tsde1hdr.js → cli-yjmqpxt3.js} +12 -11
  65. package/dist/{cli-9nfx44eh.js → cli-z780ec7c.js} +1 -1
  66. package/dist/{cli-r2pnvj8g.js → cli-zm9t2vde.js} +2 -2
  67. package/dist/cli.js +24 -23
  68. package/dist/{codex-adapter-y81sssk0.js → codex-adapter-4z16v9n0.js} +8 -8
  69. package/dist/{codex-login-f2rcfpp9.js → codex-login-pkepy2j1.js} +2 -2
  70. package/dist/{codex-session-runner-8vx4j6a9.js → codex-session-runner-rvms9y2x.js} +8 -8
  71. package/dist/{commands-kcpvpcrr.js → commands-2a9rtyat.js} +8 -8
  72. package/dist/{controller-ywrmt6yd.js → controller-3k3madbn.js} +4 -4
  73. package/dist/{controllers-connect-kwpvj3rf.js → controllers-connect-v9yn8zb9.js} +30 -30
  74. package/dist/{cursor-adapter-cehv1qns.js → cursor-adapter-98gbhyzn.js} +4 -4
  75. package/dist/{db-ww5d7jq3.js → db-eywwsnjw.js} +9 -7
  76. package/dist/{db-k8ankj20.js → db-ncypk9np.js} +9 -9
  77. package/dist/{devin-adapter-x1022qb1.js → devin-adapter-zeq8b9gz.js} +2 -2
  78. package/dist/{dispatcher-e8gq5m68.js → dispatcher-w94kc575.js} +26 -26
  79. package/dist/{docker-ff6y1190.js → docker-b1e4cqab.js} +2 -2
  80. package/dist/{dsh-adapter-3epjm3af.js → dsh-adapter-47ztej36.js} +4 -4
  81. package/dist/{e2b-8ygwhg0f.js → e2b-bbt8ey45.js} +3 -3
  82. package/dist/{e2b-swhnpw3n.js → e2b-dp804sen.js} +3 -3
  83. package/dist/{event-bus-6axnngdj.js → event-bus-j2jdg3qb.js} +2 -2
  84. package/dist/{external-channel-h3359cwn.js → external-channel-zrkg8ar9.js} +8 -8
  85. package/dist/{grok-adapter-0d4x7gkx.js → grok-adapter-s9ncp9vy.js} +11 -11
  86. package/dist/{handlers-an1gzv21.js → handlers-kqftvjgw.js} +29 -29
  87. package/dist/{heartbeat-6dakeb61.js → heartbeat-9q96p8v9.js} +31 -31
  88. package/dist/{hook-6v6cv6d5.js → hook-56qe10dp.js} +7 -7
  89. package/dist/{hook-sa5xye4y.js → hook-yy6rw42k.js} +8 -8
  90. package/dist/{http-r7f3eky0.js → http-r2dnb8f8.js} +963 -75
  91. package/dist/{index-7ep4gzdk.js → index-3gtmkhc6.js} +26 -26
  92. package/dist/{index-v1v6n7hg.js → index-3k5hkz7r.js} +31 -31
  93. package/dist/{index-rmpw9a8q.js → index-5e101240.js} +26 -26
  94. package/dist/{index-s2wxgzr0.js → index-5wyfjc2c.js} +392 -15
  95. package/dist/{index-zk96aq1k.js → index-vxvhxxbn.js} +7 -7
  96. package/dist/{keepalive-be9vwy5h.js → keepalive-psj6j54c.js} +9 -9
  97. package/dist/{lead-0861cwrf.js → lead-hajz4688.js} +43 -43
  98. package/dist/{maintenance-mzzgc8bn.js → maintenance-ps02sb5m.js} +7 -7
  99. package/dist/{node-mn1zs7an.js → node-mwb5r697.js} +1 -1
  100. package/dist/{oauth-refresh-sweep-cpdnfwdj.js → oauth-refresh-sweep-0284h93b.js} +8 -8
  101. package/dist/{onboard-fh8qs4r3.js → onboard-rbf6bg01.js} +2 -2
  102. package/dist/{opencode-adapter-nm42wwj8.js → opencode-adapter-13dcatgq.js} +8 -8
  103. package/dist/{otel-impl-x6c1c9g4.js → otel-impl-zvqcbhp7.js} +2 -2
  104. package/dist/{pi-mono-adapter-9n2ya240.js → pi-mono-adapter-xxy47q4v.js} +7 -7
  105. package/dist/{pricing-refresh-qb0rv0ap.js → pricing-refresh-kefx9v3t.js} +9 -9
  106. package/dist/{rbac-roles-1gzdwbh1.js → rbac-roles-3m36rxm2.js} +8 -8
  107. package/dist/{rbac-roles-3mraey52.js → rbac-roles-z76xv0hq.js} +9 -9
  108. package/dist/{render-v2-agpa45zz.js → render-v2-wz73bs25.js} +9 -9
  109. package/dist/{resume-x0ydy9s9.js → resume-k4wzge8w.js} +14 -14
  110. package/dist/{setup-as9ga0d6.js → setup-2fp2pypp.js} +2 -2
  111. package/dist/{work-objects-y5g1y7ev.js → work-objects-6k0ywz3m.js} +29 -29
  112. package/dist/{worker-860c3e38.js → worker-5v3rxsdh.js} +43 -43
  113. package/dist/{x-m477fr0h.js → x-4mtdeym1.js} +2 -2
  114. package/openapi.json +777 -6
  115. package/package.json +8 -7
  116. package/src/agentmail/handlers.ts +21 -11
  117. package/src/apps/definition.ts +16 -0
  118. package/src/azure-devops/api.ts +52 -2
  119. package/src/azure-devops/boards-sync.ts +50 -20
  120. package/src/azure-devops/index.ts +1 -0
  121. package/src/azure-devops/outbound.ts +95 -0
  122. package/src/be/boot-seeds.ts +11 -0
  123. package/src/be/db/model-profiles.ts +315 -0
  124. package/src/be/db/tasks/read.ts +7 -0
  125. package/src/be/db.ts +53 -47
  126. package/src/be/migrations/219_relabel_pi_context_compactions.sql +22 -0
  127. package/src/be/migrations/220_model_profiles.sql +137 -0
  128. package/src/be/model-tier-resolution.ts +145 -11
  129. package/src/be/model-validation.ts +8 -1
  130. package/src/be/scripts/typecheck.ts +12 -0
  131. package/src/be/secret-registry.ts +6 -2
  132. package/src/be/seed-model-profiles.ts +41 -0
  133. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +368 -0
  134. package/src/be/seed-scripts/index.ts +9 -0
  135. package/src/be/swarm-config-guard.ts +1 -0
  136. package/src/commands/runner.ts +3 -17
  137. package/src/extensions/catalog.generated.json +17 -0
  138. package/src/extensions/contract-types.generated.ts +1 -1
  139. package/src/extensions/loader.ts +10 -5
  140. package/src/heartbeat/heartbeat.ts +2 -1
  141. package/src/http/agents.ts +49 -2
  142. package/src/http/all-routes.ts +1 -0
  143. package/src/http/apps.ts +30 -3
  144. package/src/http/config.ts +26 -2
  145. package/src/http/core.ts +4 -0
  146. package/src/http/index.ts +11 -1
  147. package/src/http/model-profiles.ts +303 -0
  148. package/src/http/pages-public.ts +11 -5
  149. package/src/http/poll.ts +16 -5
  150. package/src/http/script-runs.ts +1 -1
  151. package/src/http/scripts.ts +25 -2
  152. package/src/http/tasks.ts +18 -0
  153. package/src/http/webhooks.ts +1 -2
  154. package/src/pages/feedback-overlay.ts +65 -6
  155. package/src/providers/acp-targets.ts +1 -1
  156. package/src/providers/amp-adapter.ts +1 -1
  157. package/src/providers/dsh-adapter.ts +1 -1
  158. package/src/providers/pi-mono-extension.ts +17 -3
  159. package/src/providers/reasoning-effort.ts +10 -0
  160. package/src/rbac/legacy-policy.ts +8 -0
  161. package/src/rbac/permissions.ts +5 -0
  162. package/src/scheduler/deferred-task-waits.ts +18 -5
  163. package/src/scheduler/scheduler.ts +7 -1
  164. package/src/scripts-runtime/executors/quickjs-prelude.ts +75 -6
  165. package/src/scripts-runtime/executors/quickjs-runner.ts +85 -8
  166. package/src/scripts-runtime/executors/quickjs-web-shims.ts +1041 -0
  167. package/src/scripts-runtime/extract-args-schema.ts +9 -8
  168. package/src/scripts-runtime/quickjs-compat.ts +464 -0
  169. package/src/scripts-runtime/sdk-allowlist.ts +4 -0
  170. package/src/scripts-runtime/types/stdlib.d.ts +12 -0
  171. package/src/scripts-runtime/types/swarm-extension.d.ts +3 -0
  172. package/src/scripts-runtime/types/swarm-sdk.d.ts +12 -0
  173. package/src/server.ts +10 -1
  174. package/src/slack/blocks.ts +4 -2
  175. package/src/slack/reaction-shortcode.ts +14 -0
  176. package/src/slack/render-v2.ts +12 -7
  177. package/src/slack/responses.ts +5 -4
  178. package/src/slack/thread-buffer.ts +41 -22
  179. package/src/tasks/worker-follow-up.ts +11 -2
  180. package/src/tests/agentmail-filters.test.ts +47 -0
  181. package/src/tests/apps-spike2.test.ts +35 -0
  182. package/src/tests/azure-devops-outbound.test.ts +420 -0
  183. package/src/tests/db-task-read-contract.test.ts +2 -0
  184. package/src/tests/db-task-write-contract.test.ts +1 -0
  185. package/src/tests/deferred-task-wake.test.ts +78 -1
  186. package/src/tests/docs-index-footprint.test.js +2 -2
  187. package/src/tests/dsh-adapter.test.ts +1 -1
  188. package/src/tests/env-flag.test.ts +1 -0
  189. package/src/tests/extensions-catalog.test.ts +1 -0
  190. package/src/tests/extensions-example-comms-adherence-gate.test.ts +413 -0
  191. package/src/tests/extensions-loader.test.ts +15 -0
  192. package/src/tests/heartbeat-jev-gate-credentials.test.ts +168 -0
  193. package/src/tests/heartbeat-jev-gate.test.ts +385 -0
  194. package/src/tests/model-profile-backcompat.test.ts +327 -0
  195. package/src/tests/model-profile-providers.test.ts +302 -0
  196. package/src/tests/model-profile-runtime-secrets.test.ts +223 -0
  197. package/src/tests/model-profiles-api.test.ts +614 -0
  198. package/src/tests/pages-feedback-keys.test.ts +121 -0
  199. package/src/tests/pages-feedback.test.ts +3 -0
  200. package/src/tests/pi-context-compaction.test.ts +193 -0
  201. package/src/tests/profile-claim.test.ts +269 -0
  202. package/src/tests/quickjs-compat.test.ts +213 -0
  203. package/src/tests/rbac-engine.test.ts +21 -0
  204. package/src/tests/script-connections.test.ts +4 -0
  205. package/src/tests/script-executor-conformance.test.ts +252 -1
  206. package/src/tests/script-executor-quickjs.test.ts +96 -0
  207. package/src/tests/script-runs-http.test.ts +89 -0
  208. package/src/tests/scripts-http.test.ts +16 -0
  209. package/src/tests/secret-scrubber.test.ts +10 -0
  210. package/src/tests/seed-model-profiles.test.ts +174 -0
  211. package/src/tests/seed-scripts.test.ts +2 -2
  212. package/src/tests/skill-invocations.test.ts +4 -2
  213. package/src/tests/slack-blocks.test.ts +36 -0
  214. package/src/tests/slack-inline-output.test.ts +14 -0
  215. package/src/tests/slack-reaction-config.test.ts +20 -0
  216. package/src/tests/slack-render-v2.test.ts +37 -0
  217. package/src/tests/slack-thread-buffer.test.ts +98 -1
  218. package/src/tests/workflow-llm.test.ts +61 -0
  219. package/src/tools/model-profiles/list-model-profiles.ts +54 -0
  220. package/src/tools/request-human-input.ts +11 -3
  221. package/src/tools/script-apis.ts +5 -1
  222. package/src/tools/script-upsert.ts +4 -1
  223. package/src/tools/send-task.ts +24 -1
  224. package/src/tools/system-one-decide.ts +104 -0
  225. package/src/tools/task-action.ts +22 -1
  226. package/src/tools/tool-config.ts +6 -0
  227. package/src/types.ts +36 -1
  228. package/src/utils/secret-scrubber.ts +19 -12
  229. package/src/utils/vcs-repo-match.ts +29 -0
  230. package/src/workflows/executors/raw-llm.ts +8 -3
  231. package/src/workflows/executors/system-one-decision.ts +21 -11
  232. package/src/workflows/executors/workflow-llm.ts +22 -0
  233. package/src/workflows/index.ts +21 -12
  234. package/templates/extensions/README.md +1 -0
  235. package/templates/extensions/comms-adherence-gate/README.md +88 -0
  236. package/templates/extensions/comms-adherence-gate/hooks.ts +489 -0
  237. package/templates/extensions/comms-adherence-gate/manifest.json +8 -0
  238. package/dist/cli-5t4f29ez.js +0 -33
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.0.0",
5
+ "version": "2.1.0",
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": [
@@ -387,6 +387,12 @@
387
387
  "max"
388
388
  ]
389
389
  },
390
+ "profile": {
391
+ "type": "string"
392
+ },
393
+ "resolvedProfile": {
394
+ "type": "string"
395
+ },
390
396
  "scheduleId": {
391
397
  "type": "string"
392
398
  },
@@ -4880,7 +4886,9 @@
4880
4886
  "eventName": {
4881
4887
  "type": "string",
4882
4888
  "enum": [
4883
- "slack.message"
4889
+ "slack.message",
4890
+ "azure-devops.work_item.assigned",
4891
+ "azure-devops.work_item.commented"
4884
4892
  ]
4885
4893
  }
4886
4894
  },
@@ -5557,7 +5565,9 @@
5557
5565
  "eventName": {
5558
5566
  "type": "string",
5559
5567
  "enum": [
5560
- "slack.message"
5568
+ "slack.message",
5569
+ "azure-devops.work_item.assigned",
5570
+ "azure-devops.work_item.commented"
5561
5571
  ]
5562
5572
  }
5563
5573
  },
@@ -7171,6 +7181,13 @@
7171
7181
  "createdAt",
7172
7182
  "updatedAt"
7173
7183
  ]
7184
+ },
7185
+ "warnings": {
7186
+ "type": "array",
7187
+ "items": {
7188
+ "type": "string"
7189
+ },
7190
+ "description": "Advisory quickjs-executor compatibility findings for the app's scripts."
7174
7191
  }
7175
7192
  },
7176
7193
  "required": [
@@ -7677,6 +7694,13 @@
7677
7694
  "orphanFields",
7678
7695
  "userConfigChanged"
7679
7696
  ]
7697
+ },
7698
+ "warnings": {
7699
+ "type": "array",
7700
+ "items": {
7701
+ "type": "string"
7702
+ },
7703
+ "description": "Advisory quickjs-executor compatibility findings for the app's scripts."
7680
7704
  }
7681
7705
  },
7682
7706
  "required": [
@@ -8195,6 +8219,13 @@
8195
8219
  "orphanFields",
8196
8220
  "userConfigChanged"
8197
8221
  ]
8222
+ },
8223
+ "warnings": {
8224
+ "type": "array",
8225
+ "items": {
8226
+ "type": "string"
8227
+ },
8228
+ "description": "Advisory quickjs-executor compatibility findings for the app's scripts."
8198
8229
  }
8199
8230
  },
8200
8231
  "required": [
@@ -8549,6 +8580,13 @@
8549
8580
  "orphanFields",
8550
8581
  "userConfigChanged"
8551
8582
  ]
8583
+ },
8584
+ "warnings": {
8585
+ "type": "array",
8586
+ "items": {
8587
+ "type": "string"
8588
+ },
8589
+ "description": "Advisory quickjs-executor compatibility findings for the app's scripts."
8552
8590
  }
8553
8591
  },
8554
8592
  "required": [
@@ -10621,7 +10659,7 @@
10621
10659
  },
10622
10660
  "patch": {
10623
10661
  "summary": "Update an agent's runtime harness and default model",
10624
- "description": "Updates `agents.harness_provider` and agent-scoped runtime config. The settings apply to future provider sessions. For `model`, `reasoning_effort`, and `claude.transport`: omit the field to leave it unchanged, send `null` to clear the corresponding override, or send a value to set it. A `model` the model catalog does not list is a 400 unless `allow_custom_model` is true. A `latest:` alias is not accepted here (aliases resolve for a task's model and for `MODEL_TIER_*` values); `reasoning_effort` must be one the harness and model support.",
10662
+ "description": "Updates `agents.harness_provider` and agent-scoped runtime config. The settings apply to future provider sessions. For `model`, `reasoning_effort`, and `claude.transport`: omit the field to leave it unchanged, send `null` to clear the corresponding override, or send a value to set it. A `model` the model catalog does not list is a 400 unless `allow_custom_model` is true. A `latest:` alias is not accepted here (aliases resolve for a task's model and for `MODEL_TIER_*` values); `reasoning_effort` must be one the harness and model support. `profile` sets the agent's default model profile (same tri-state): it must exist and run on `harness_provider`, and it cannot be sent with `model`. Sending `model`, or changing the model or effort override by any path, clears the default profile.",
10625
10663
  "tags": [
10626
10664
  "Agents"
10627
10665
  ],
@@ -10694,6 +10732,13 @@
10694
10732
  null
10695
10733
  ]
10696
10734
  },
10735
+ "profile": {
10736
+ "type": [
10737
+ "string",
10738
+ "null"
10739
+ ],
10740
+ "minLength": 1
10741
+ },
10697
10742
  "acp": {
10698
10743
  "type": "object",
10699
10744
  "properties": {
@@ -25228,6 +25273,710 @@
25228
25273
  }
25229
25274
  }
25230
25275
  },
25276
+ "/api/model-profiles": {
25277
+ "get": {
25278
+ "summary": "List model profiles",
25279
+ "description": "Every model profile, ordered by harness then name. Filter by `harness` to see what an agent on that harness can run.",
25280
+ "tags": [
25281
+ "Models"
25282
+ ],
25283
+ "security": [
25284
+ {
25285
+ "bearerAuth": []
25286
+ }
25287
+ ],
25288
+ "parameters": [
25289
+ {
25290
+ "schema": {
25291
+ "type": "string",
25292
+ "enum": [
25293
+ "claude",
25294
+ "codex",
25295
+ "pi",
25296
+ "devin",
25297
+ "claude-managed",
25298
+ "opencode",
25299
+ "acp",
25300
+ "dsh",
25301
+ "amp",
25302
+ "cursor",
25303
+ "grok"
25304
+ ]
25305
+ },
25306
+ "required": false,
25307
+ "name": "harness",
25308
+ "in": "query"
25309
+ }
25310
+ ],
25311
+ "responses": {
25312
+ "200": {
25313
+ "description": "Model profiles",
25314
+ "content": {
25315
+ "application/json": {
25316
+ "schema": {
25317
+ "type": "object",
25318
+ "properties": {
25319
+ "profiles": {
25320
+ "type": "array",
25321
+ "items": {
25322
+ "type": "object",
25323
+ "properties": {
25324
+ "id": {
25325
+ "type": "string"
25326
+ },
25327
+ "name": {
25328
+ "type": "string"
25329
+ },
25330
+ "harness": {
25331
+ "type": "string",
25332
+ "enum": [
25333
+ "claude",
25334
+ "codex",
25335
+ "pi",
25336
+ "devin",
25337
+ "claude-managed",
25338
+ "opencode",
25339
+ "acp",
25340
+ "dsh",
25341
+ "amp",
25342
+ "cursor",
25343
+ "grok"
25344
+ ]
25345
+ },
25346
+ "model": {
25347
+ "type": "string"
25348
+ },
25349
+ "effort": {
25350
+ "type": [
25351
+ "string",
25352
+ "null"
25353
+ ],
25354
+ "enum": [
25355
+ "off",
25356
+ "low",
25357
+ "medium",
25358
+ "high",
25359
+ "xhigh",
25360
+ "max",
25361
+ null
25362
+ ]
25363
+ },
25364
+ "allowCustomModel": {
25365
+ "type": "boolean"
25366
+ },
25367
+ "description": {
25368
+ "type": [
25369
+ "string",
25370
+ "null"
25371
+ ]
25372
+ },
25373
+ "seededFrom": {
25374
+ "type": [
25375
+ "string",
25376
+ "null"
25377
+ ]
25378
+ },
25379
+ "createdAt": {
25380
+ "type": "string"
25381
+ },
25382
+ "lastUpdatedAt": {
25383
+ "type": "string"
25384
+ }
25385
+ },
25386
+ "required": [
25387
+ "id",
25388
+ "name",
25389
+ "harness",
25390
+ "model",
25391
+ "effort",
25392
+ "allowCustomModel",
25393
+ "description",
25394
+ "seededFrom",
25395
+ "createdAt",
25396
+ "lastUpdatedAt"
25397
+ ]
25398
+ }
25399
+ }
25400
+ },
25401
+ "required": [
25402
+ "profiles"
25403
+ ]
25404
+ }
25405
+ }
25406
+ }
25407
+ }
25408
+ }
25409
+ },
25410
+ "post": {
25411
+ "summary": "Create a model profile",
25412
+ "description": "A profile runs on one harness. `model` must run on that harness and be in the model catalog unless `allowCustomModel` is true (a gateway id, a fresh launch); a `latest:` alias is accepted and resolves at claim. `effort` must be a level the harness and model support. Operator only (the shared API key).",
25413
+ "tags": [
25414
+ "Models"
25415
+ ],
25416
+ "security": [
25417
+ {
25418
+ "bearerAuth": []
25419
+ }
25420
+ ],
25421
+ "requestBody": {
25422
+ "content": {
25423
+ "application/json": {
25424
+ "schema": {
25425
+ "type": "object",
25426
+ "properties": {
25427
+ "name": {
25428
+ "type": "string",
25429
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$"
25430
+ },
25431
+ "harness": {
25432
+ "type": "string",
25433
+ "enum": [
25434
+ "claude",
25435
+ "codex",
25436
+ "pi",
25437
+ "devin",
25438
+ "claude-managed",
25439
+ "opencode",
25440
+ "acp",
25441
+ "dsh",
25442
+ "amp",
25443
+ "cursor",
25444
+ "grok"
25445
+ ]
25446
+ },
25447
+ "model": {
25448
+ "type": "string",
25449
+ "minLength": 1
25450
+ },
25451
+ "effort": {
25452
+ "type": [
25453
+ "string",
25454
+ "null"
25455
+ ],
25456
+ "enum": [
25457
+ "off",
25458
+ "low",
25459
+ "medium",
25460
+ "high",
25461
+ "xhigh",
25462
+ "max",
25463
+ null
25464
+ ]
25465
+ },
25466
+ "allowCustomModel": {
25467
+ "type": "boolean",
25468
+ "default": false
25469
+ },
25470
+ "description": {
25471
+ "type": [
25472
+ "string",
25473
+ "null"
25474
+ ],
25475
+ "maxLength": 500
25476
+ }
25477
+ },
25478
+ "required": [
25479
+ "name",
25480
+ "harness",
25481
+ "model"
25482
+ ]
25483
+ }
25484
+ }
25485
+ }
25486
+ },
25487
+ "responses": {
25488
+ "201": {
25489
+ "description": "Profile created",
25490
+ "content": {
25491
+ "application/json": {
25492
+ "schema": {
25493
+ "type": "object",
25494
+ "properties": {
25495
+ "id": {
25496
+ "type": "string"
25497
+ },
25498
+ "name": {
25499
+ "type": "string"
25500
+ },
25501
+ "harness": {
25502
+ "type": "string",
25503
+ "enum": [
25504
+ "claude",
25505
+ "codex",
25506
+ "pi",
25507
+ "devin",
25508
+ "claude-managed",
25509
+ "opencode",
25510
+ "acp",
25511
+ "dsh",
25512
+ "amp",
25513
+ "cursor",
25514
+ "grok"
25515
+ ]
25516
+ },
25517
+ "model": {
25518
+ "type": "string"
25519
+ },
25520
+ "effort": {
25521
+ "type": [
25522
+ "string",
25523
+ "null"
25524
+ ],
25525
+ "enum": [
25526
+ "off",
25527
+ "low",
25528
+ "medium",
25529
+ "high",
25530
+ "xhigh",
25531
+ "max",
25532
+ null
25533
+ ]
25534
+ },
25535
+ "allowCustomModel": {
25536
+ "type": "boolean"
25537
+ },
25538
+ "description": {
25539
+ "type": [
25540
+ "string",
25541
+ "null"
25542
+ ]
25543
+ },
25544
+ "seededFrom": {
25545
+ "type": [
25546
+ "string",
25547
+ "null"
25548
+ ]
25549
+ },
25550
+ "createdAt": {
25551
+ "type": "string"
25552
+ },
25553
+ "lastUpdatedAt": {
25554
+ "type": "string"
25555
+ }
25556
+ },
25557
+ "required": [
25558
+ "id",
25559
+ "name",
25560
+ "harness",
25561
+ "model",
25562
+ "effort",
25563
+ "allowCustomModel",
25564
+ "description",
25565
+ "seededFrom",
25566
+ "createdAt",
25567
+ "lastUpdatedAt"
25568
+ ]
25569
+ }
25570
+ }
25571
+ }
25572
+ },
25573
+ "400": {
25574
+ "description": "Validation error",
25575
+ "content": {
25576
+ "application/json": {
25577
+ "schema": {
25578
+ "$ref": "#/components/schemas/ErrorResponse"
25579
+ }
25580
+ }
25581
+ }
25582
+ },
25583
+ "403": {
25584
+ "description": "Forbidden",
25585
+ "content": {
25586
+ "application/json": {
25587
+ "schema": {
25588
+ "$ref": "#/components/schemas/ErrorResponse"
25589
+ }
25590
+ }
25591
+ }
25592
+ },
25593
+ "409": {
25594
+ "description": "A profile with that name exists",
25595
+ "content": {
25596
+ "application/json": {
25597
+ "schema": {
25598
+ "$ref": "#/components/schemas/ErrorResponse"
25599
+ }
25600
+ }
25601
+ }
25602
+ }
25603
+ }
25604
+ }
25605
+ },
25606
+ "/api/model-profiles/{name}": {
25607
+ "get": {
25608
+ "summary": "Get one model profile",
25609
+ "tags": [
25610
+ "Models"
25611
+ ],
25612
+ "security": [
25613
+ {
25614
+ "bearerAuth": []
25615
+ }
25616
+ ],
25617
+ "parameters": [
25618
+ {
25619
+ "schema": {
25620
+ "type": "string"
25621
+ },
25622
+ "required": true,
25623
+ "name": "name",
25624
+ "in": "path"
25625
+ }
25626
+ ],
25627
+ "responses": {
25628
+ "200": {
25629
+ "description": "The model profile",
25630
+ "content": {
25631
+ "application/json": {
25632
+ "schema": {
25633
+ "type": "object",
25634
+ "properties": {
25635
+ "id": {
25636
+ "type": "string"
25637
+ },
25638
+ "name": {
25639
+ "type": "string"
25640
+ },
25641
+ "harness": {
25642
+ "type": "string",
25643
+ "enum": [
25644
+ "claude",
25645
+ "codex",
25646
+ "pi",
25647
+ "devin",
25648
+ "claude-managed",
25649
+ "opencode",
25650
+ "acp",
25651
+ "dsh",
25652
+ "amp",
25653
+ "cursor",
25654
+ "grok"
25655
+ ]
25656
+ },
25657
+ "model": {
25658
+ "type": "string"
25659
+ },
25660
+ "effort": {
25661
+ "type": [
25662
+ "string",
25663
+ "null"
25664
+ ],
25665
+ "enum": [
25666
+ "off",
25667
+ "low",
25668
+ "medium",
25669
+ "high",
25670
+ "xhigh",
25671
+ "max",
25672
+ null
25673
+ ]
25674
+ },
25675
+ "allowCustomModel": {
25676
+ "type": "boolean"
25677
+ },
25678
+ "description": {
25679
+ "type": [
25680
+ "string",
25681
+ "null"
25682
+ ]
25683
+ },
25684
+ "seededFrom": {
25685
+ "type": [
25686
+ "string",
25687
+ "null"
25688
+ ]
25689
+ },
25690
+ "createdAt": {
25691
+ "type": "string"
25692
+ },
25693
+ "lastUpdatedAt": {
25694
+ "type": "string"
25695
+ }
25696
+ },
25697
+ "required": [
25698
+ "id",
25699
+ "name",
25700
+ "harness",
25701
+ "model",
25702
+ "effort",
25703
+ "allowCustomModel",
25704
+ "description",
25705
+ "seededFrom",
25706
+ "createdAt",
25707
+ "lastUpdatedAt"
25708
+ ]
25709
+ }
25710
+ }
25711
+ }
25712
+ },
25713
+ "404": {
25714
+ "description": "No profile with that name",
25715
+ "content": {
25716
+ "application/json": {
25717
+ "schema": {
25718
+ "$ref": "#/components/schemas/ErrorResponse"
25719
+ }
25720
+ }
25721
+ }
25722
+ }
25723
+ }
25724
+ },
25725
+ "patch": {
25726
+ "summary": "Update a model profile",
25727
+ "description": "Changes the model, effort, custom-model flag or description; the name and harness are fixed. Omit a field to keep it; `effort: null` clears it. Applies to tasks claimed after the change. Operator only (the shared API key).",
25728
+ "tags": [
25729
+ "Models"
25730
+ ],
25731
+ "security": [
25732
+ {
25733
+ "bearerAuth": []
25734
+ }
25735
+ ],
25736
+ "parameters": [
25737
+ {
25738
+ "schema": {
25739
+ "type": "string"
25740
+ },
25741
+ "required": true,
25742
+ "name": "name",
25743
+ "in": "path"
25744
+ }
25745
+ ],
25746
+ "requestBody": {
25747
+ "content": {
25748
+ "application/json": {
25749
+ "schema": {
25750
+ "type": "object",
25751
+ "properties": {
25752
+ "model": {
25753
+ "type": "string",
25754
+ "minLength": 1
25755
+ },
25756
+ "effort": {
25757
+ "type": [
25758
+ "string",
25759
+ "null"
25760
+ ],
25761
+ "enum": [
25762
+ "off",
25763
+ "low",
25764
+ "medium",
25765
+ "high",
25766
+ "xhigh",
25767
+ "max",
25768
+ null
25769
+ ]
25770
+ },
25771
+ "allowCustomModel": {
25772
+ "type": "boolean"
25773
+ },
25774
+ "description": {
25775
+ "type": [
25776
+ "string",
25777
+ "null"
25778
+ ],
25779
+ "maxLength": 500
25780
+ }
25781
+ }
25782
+ }
25783
+ }
25784
+ }
25785
+ },
25786
+ "responses": {
25787
+ "200": {
25788
+ "description": "Profile updated",
25789
+ "content": {
25790
+ "application/json": {
25791
+ "schema": {
25792
+ "type": "object",
25793
+ "properties": {
25794
+ "id": {
25795
+ "type": "string"
25796
+ },
25797
+ "name": {
25798
+ "type": "string"
25799
+ },
25800
+ "harness": {
25801
+ "type": "string",
25802
+ "enum": [
25803
+ "claude",
25804
+ "codex",
25805
+ "pi",
25806
+ "devin",
25807
+ "claude-managed",
25808
+ "opencode",
25809
+ "acp",
25810
+ "dsh",
25811
+ "amp",
25812
+ "cursor",
25813
+ "grok"
25814
+ ]
25815
+ },
25816
+ "model": {
25817
+ "type": "string"
25818
+ },
25819
+ "effort": {
25820
+ "type": [
25821
+ "string",
25822
+ "null"
25823
+ ],
25824
+ "enum": [
25825
+ "off",
25826
+ "low",
25827
+ "medium",
25828
+ "high",
25829
+ "xhigh",
25830
+ "max",
25831
+ null
25832
+ ]
25833
+ },
25834
+ "allowCustomModel": {
25835
+ "type": "boolean"
25836
+ },
25837
+ "description": {
25838
+ "type": [
25839
+ "string",
25840
+ "null"
25841
+ ]
25842
+ },
25843
+ "seededFrom": {
25844
+ "type": [
25845
+ "string",
25846
+ "null"
25847
+ ]
25848
+ },
25849
+ "createdAt": {
25850
+ "type": "string"
25851
+ },
25852
+ "lastUpdatedAt": {
25853
+ "type": "string"
25854
+ }
25855
+ },
25856
+ "required": [
25857
+ "id",
25858
+ "name",
25859
+ "harness",
25860
+ "model",
25861
+ "effort",
25862
+ "allowCustomModel",
25863
+ "description",
25864
+ "seededFrom",
25865
+ "createdAt",
25866
+ "lastUpdatedAt"
25867
+ ]
25868
+ }
25869
+ }
25870
+ }
25871
+ },
25872
+ "400": {
25873
+ "description": "Validation error",
25874
+ "content": {
25875
+ "application/json": {
25876
+ "schema": {
25877
+ "$ref": "#/components/schemas/ErrorResponse"
25878
+ }
25879
+ }
25880
+ }
25881
+ },
25882
+ "403": {
25883
+ "description": "Forbidden",
25884
+ "content": {
25885
+ "application/json": {
25886
+ "schema": {
25887
+ "$ref": "#/components/schemas/ErrorResponse"
25888
+ }
25889
+ }
25890
+ }
25891
+ },
25892
+ "404": {
25893
+ "description": "No profile with that name",
25894
+ "content": {
25895
+ "application/json": {
25896
+ "schema": {
25897
+ "$ref": "#/components/schemas/ErrorResponse"
25898
+ }
25899
+ }
25900
+ }
25901
+ }
25902
+ }
25903
+ },
25904
+ "delete": {
25905
+ "summary": "Delete a model profile",
25906
+ "description": "Refused (409) for a shipped `<harness>-<tier>` seed (edit it instead; it would come back at the next boot), and while an agent has the profile as its default or a task holds it (unfinished, or superseded and still owed its resume). Operator only (the shared API key).",
25907
+ "tags": [
25908
+ "Models"
25909
+ ],
25910
+ "security": [
25911
+ {
25912
+ "bearerAuth": []
25913
+ }
25914
+ ],
25915
+ "parameters": [
25916
+ {
25917
+ "schema": {
25918
+ "type": "string"
25919
+ },
25920
+ "required": true,
25921
+ "name": "name",
25922
+ "in": "path"
25923
+ }
25924
+ ],
25925
+ "responses": {
25926
+ "200": {
25927
+ "description": "Profile deleted",
25928
+ "content": {
25929
+ "application/json": {
25930
+ "schema": {
25931
+ "type": "object",
25932
+ "properties": {
25933
+ "deleted": {
25934
+ "type": "boolean",
25935
+ "enum": [
25936
+ true
25937
+ ]
25938
+ }
25939
+ },
25940
+ "required": [
25941
+ "deleted"
25942
+ ]
25943
+ }
25944
+ }
25945
+ }
25946
+ },
25947
+ "403": {
25948
+ "description": "Forbidden",
25949
+ "content": {
25950
+ "application/json": {
25951
+ "schema": {
25952
+ "$ref": "#/components/schemas/ErrorResponse"
25953
+ }
25954
+ }
25955
+ }
25956
+ },
25957
+ "404": {
25958
+ "description": "No profile with that name",
25959
+ "content": {
25960
+ "application/json": {
25961
+ "schema": {
25962
+ "$ref": "#/components/schemas/ErrorResponse"
25963
+ }
25964
+ }
25965
+ }
25966
+ },
25967
+ "409": {
25968
+ "description": "The profile is a seed or still in use",
25969
+ "content": {
25970
+ "application/json": {
25971
+ "schema": {
25972
+ "$ref": "#/components/schemas/ErrorResponse"
25973
+ }
25974
+ }
25975
+ }
25976
+ }
25977
+ }
25978
+ }
25979
+ },
25231
25980
  "/api/models-catalog": {
25232
25981
  "get": {
25233
25982
  "summary": "Get the live model catalog for the picker-reachable providers",
@@ -30322,6 +31071,10 @@
30322
31071
  "max"
30323
31072
  ]
30324
31073
  },
31074
+ "profile": {
31075
+ "type": "string",
31076
+ "minLength": 1
31077
+ },
30325
31078
  "draft": {
30326
31079
  "type": "boolean"
30327
31080
  }
@@ -48988,6 +49741,13 @@
48988
49741
  },
48989
49742
  "contentDeduped": {
48990
49743
  "type": "boolean"
49744
+ },
49745
+ "warnings": {
49746
+ "type": "array",
49747
+ "items": {
49748
+ "type": "string"
49749
+ },
49750
+ "description": "Advisory quickjs-executor compatibility findings. Never blocks the save."
48991
49751
  }
48992
49752
  },
48993
49753
  "required": [
@@ -50084,6 +50844,13 @@
50084
50844
  "string",
50085
50845
  "null"
50086
50846
  ]
50847
+ },
50848
+ "warnings": {
50849
+ "type": "array",
50850
+ "items": {
50851
+ "type": "string"
50852
+ },
50853
+ "description": "Advisory quickjs-executor compatibility findings for the script."
50087
50854
  }
50088
50855
  },
50089
50856
  "required": [
@@ -57266,7 +58033,9 @@
57266
58033
  "eventName": {
57267
58034
  "type": "string",
57268
58035
  "enum": [
57269
- "slack.message"
58036
+ "slack.message",
58037
+ "azure-devops.work_item.assigned",
58038
+ "azure-devops.work_item.commented"
57270
58039
  ]
57271
58040
  }
57272
58041
  },
@@ -57658,7 +58427,9 @@
57658
58427
  "eventName": {
57659
58428
  "type": "string",
57660
58429
  "enum": [
57661
- "slack.message"
58430
+ "slack.message",
58431
+ "azure-devops.work_item.assigned",
58432
+ "azure-devops.work_item.commented"
57662
58433
  ]
57663
58434
  }
57664
58435
  },