@desplega.ai/agent-swarm 1.157.0 → 1.158.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 (256) hide show
  1. package/dist/{acp-adapter-qhqrk4q0.js → acp-adapter-xaq4n6pc.js} +1 -1
  2. package/dist/{actions-9rrg0zxm.js → actions-p9hz5yat.js} +15 -15
  3. package/dist/{app-enysy1zd.js → app-g26wdcz6.js} +4 -4
  4. package/dist/{artifact-td4q4dch.js → artifact-3v5t9jtg.js} +1 -1
  5. package/dist/{assistant-zegamy48.js → assistant-wydfqkb3.js} +16 -16
  6. package/dist/{boot-reembed-r6shx5qx.js → boot-reembed-g5ckg9yb.js} +6 -6
  7. package/dist/{boot-reembed-zfxb937k.js → boot-reembed-se8zmdcp.js} +5 -5
  8. package/dist/{boot-scrub-logs-k5y0se6r.js → boot-scrub-logs-wfxqan61.js} +3 -3
  9. package/dist/{seed-pricing-vqxa06qf.js → boot-seeds-s3q01xj3.js} +10 -10
  10. package/dist/{claude-adapter-5yc7hxwv.js → claude-adapter-tv2x4f36.js} +7 -7
  11. package/dist/{claude-managed-adapter-ea2aga6w.js → claude-managed-adapter-41b2s7fd.js} +2 -2
  12. package/dist/{claude-sdk-session-j4ywn3xf.js → claude-sdk-session-t442qz6f.js} +8 -8
  13. package/dist/{cli-e781c6f9.js → cli-0xjkj1j7.js} +1 -0
  14. package/dist/{cli-58rgvkt4.js → cli-1hkrch3k.js} +2 -2
  15. package/dist/{cli-yscm6cv8.js → cli-20cj37vt.js} +1866 -9
  16. package/dist/{cli-h0wdadsx.js → cli-4198qc9v.js} +7 -3
  17. package/dist/{cli-awwphhcs.js → cli-47m6dkd3.js} +362 -126
  18. package/dist/{cli-wb2zvbfg.js → cli-53sz8gkz.js} +1 -1
  19. package/dist/{cli-005pze6s.js → cli-5d10vd2m.js} +1 -1
  20. package/dist/{cli-v53rbqp3.js → cli-65hjmev5.js} +57 -17
  21. package/dist/{cli-scwq51gn.js → cli-68w09sjw.js} +7 -1
  22. package/dist/{cli-s98skd5r.js → cli-7gtvvpbh.js} +4 -4
  23. package/dist/{cli-y3nxwx0t.js → cli-7s3syk22.js} +18 -11
  24. package/dist/{cli-74h6f2bp.js → cli-8qmme6vd.js} +2 -2
  25. package/dist/{cli-wsed24mk.js → cli-987hg0aa.js} +2 -2
  26. package/dist/{cli-9n76jszt.js → cli-9httdpyq.js} +1 -1
  27. package/dist/{cli-f3va018d.js → cli-aky8tctm.js} +26 -93
  28. package/dist/{cli-sgyqyyxe.js → cli-c07r9a2m.js} +2 -1
  29. package/dist/{cli-c41wjx0r.js → cli-fgqxwrpv.js} +291 -12
  30. package/dist/{cli-01vfmq8c.js → cli-ftfvggzx.js} +607 -164
  31. package/dist/{cli-ytxs7mn1.js → cli-g8djp6qe.js} +17 -0
  32. package/dist/{cli-avkd6mqv.js → cli-h967nb6r.js} +551 -0
  33. package/dist/{cli-r9ee9c4w.js → cli-j55n64b6.js} +23 -22
  34. package/dist/{cli-9p33cz9h.js → cli-j57qkrpq.js} +86 -28
  35. package/dist/{cli-tjmghmm5.js → cli-q67y4wzm.js} +6 -3
  36. package/dist/{cli-n6zq3kbd.js → cli-rj19hc34.js} +1 -1
  37. package/dist/{cli-jytrw2na.js → cli-rjehvrts.js} +4 -4
  38. package/dist/{cli-tpv97m71.js → cli-rqz8qbw7.js} +245 -75
  39. package/dist/{cli-p37sg0a9.js → cli-s8eet254.js} +1 -1
  40. package/dist/cli-t1ze64h3.js +811 -0
  41. package/dist/{cli-6jjzxv3b.js → cli-ws6rqycm.js} +3 -2
  42. package/dist/{cli-xf5b7y1f.js → cli-wscdvcqz.js} +13 -5
  43. package/dist/{cli-5j7bm4tb.js → cli-x24pshtq.js} +5 -5
  44. package/dist/{cli-nbp6m6gp.js → cli-xberxa1r.js} +51 -26
  45. package/dist/{cli-vx9p3qdt.js → cli-xhaeg2nc.js} +1 -1
  46. package/dist/cli.js +29 -15
  47. package/dist/{codex-adapter-gns3s6c3.js → codex-adapter-cnm8wk11.js} +5 -5
  48. package/dist/{codex-session-runner-gqnxys5w.js → codex-session-runner-gfg547zj.js} +5 -5
  49. package/dist/{commands-hxy2y2sp.js → commands-e3bn0p75.js} +3 -3
  50. package/dist/{db-w8ghhsgf.js → db-03v9kzr2.js} +17 -3
  51. package/dist/{dispatcher-cp1rknjz.js → dispatcher-nrmg8yht.js} +14 -14
  52. package/dist/{dsh-adapter-1dwg97zv.js → dsh-adapter-k03nfqa6.js} +2 -2
  53. package/dist/{handlers-egfhr351.js → handlers-aqcedbyb.js} +17 -17
  54. package/dist/{hook-x4kftwzt.js → hook-7vkskkre.js} +19 -11
  55. package/dist/{hook-fbxjqfjz.js → hook-ybvmrmhq.js} +4 -4
  56. package/dist/{http-c7jfx990.js → http-2eqa8t24.js} +432 -195
  57. package/dist/{index-4k9hct21.js → index-1yks3qcr.js} +14 -14
  58. package/dist/{index-jtvpgb8f.js → index-a3vn96n8.js} +30 -27
  59. package/dist/{index-dc2ek6bw.js → index-c6zsv1bd.js} +5 -5
  60. package/dist/{index-yy07ef2s.js → index-chgdkq36.js} +14 -14
  61. package/dist/{index-r6bty6tb.js → index-x71bvq0p.js} +15 -15
  62. package/dist/{keepalive-f7ekefyc.js → keepalive-vtkf5n99.js} +5 -5
  63. package/dist/{lead-h053syts.js → lead-h3sp357x.js} +26 -26
  64. package/dist/{maintenance-a3w6zs54.js → maintenance-jzeqtk3q.js} +6 -6
  65. package/dist/{oauth-refresh-sweep-vra1dhkd.js → oauth-refresh-sweep-qp3dzmdp.js} +4 -4
  66. package/dist/{onboard-mfgzeqxs.js → onboard-tmsp0qbz.js} +278 -81
  67. package/dist/{opencode-adapter-z64xjzec.js → opencode-adapter-x6x2da1z.js} +3 -3
  68. package/dist/{otel-impl-2ez6xk57.js → otel-impl-9mz73q65.js} +416 -301
  69. package/dist/{pi-mono-adapter-2b7mw16r.js → pi-mono-adapter-m6dvv0dz.js} +2 -2
  70. package/dist/{pricing-refresh-6sw65tck.js → pricing-refresh-v1cbr9te.js} +5 -5
  71. package/dist/{rbac-roles-nm6924sy.js → rbac-roles-c9wqz83x.js} +4 -4
  72. package/dist/{render-v2-f026j6c4.js → render-v2-gryrh9h8.js} +4 -4
  73. package/dist/{setup-w606fr1q.js → setup-q9720bt6.js} +2 -2
  74. package/dist/{virtual-modules-8qheft18.js → virtual-modules-3htpgn8x.js} +1 -1
  75. package/dist/{work-objects-ezmggdne.js → work-objects-b76x7deb.js} +17 -17
  76. package/dist/{worker-1mbyv29k.js → worker-6vrxbv41.js} +26 -26
  77. package/openapi.json +1626 -629
  78. package/package.json +2 -1
  79. package/src/apps/catalog.generated.json +229 -0
  80. package/src/apps/page-validator.ts +71 -16
  81. package/src/apps/row-store.ts +66 -11
  82. package/src/apps/sync.ts +59 -17
  83. package/src/artifact-sdk/browser-sdk.ts +436 -2
  84. package/src/be/approval-sweeps.ts +109 -0
  85. package/src/be/boot-seeds.ts +40 -0
  86. package/src/be/chunking.ts +1 -1
  87. package/src/be/db/agents.ts +20 -0
  88. package/src/be/db/approvals.ts +78 -0
  89. package/src/be/db/tasks/read.ts +197 -39
  90. package/src/be/db/tasks/write.ts +41 -9
  91. package/src/be/db-client.ts +107 -48
  92. package/src/be/db.ts +219 -76
  93. package/src/be/events.ts +33 -1
  94. package/src/be/memory/graph-expansion.ts +10 -3
  95. package/src/be/memory/providers/sqlite-store.ts +55 -13
  96. package/src/be/memory/raters/retrieval.ts +5 -2
  97. package/src/be/memory/reranker.ts +26 -2
  98. package/src/be/memory/types.ts +2 -0
  99. package/src/be/migrations/166_approval_request_auto_cancellation.sql +9 -0
  100. package/src/be/migrations/171_memory_retrieval_relevance.sql +8 -0
  101. package/src/be/migrations/175_workflow_runs_list_index.sql +11 -0
  102. package/src/be/migrations/177_events_event_agent_created_index.sql +11 -0
  103. package/src/be/models-catalog.ts +2 -0
  104. package/src/be/modelsdev-cache.json +1857 -0
  105. package/src/be/modelsdev-cache.ts +14 -1
  106. package/src/be/pricing-normalize.ts +2 -0
  107. package/src/be/scripts/typecheck.ts +1 -0
  108. package/src/be/seed-pricing.ts +3 -1
  109. package/src/be/seed-skills/bundled-files.generated.json +1 -1
  110. package/src/be/steering.ts +53 -3
  111. package/src/be/swarm-config-guard.ts +3 -0
  112. package/src/be/task-citations.ts +29 -0
  113. package/src/cli.tsx +14 -1
  114. package/src/commands/onboard/compose-generator.ts +8 -3
  115. package/src/commands/onboard/container-engine.ts +220 -0
  116. package/src/commands/onboard/manifest.ts +1 -0
  117. package/src/commands/onboard/steps/health-check.tsx +4 -1
  118. package/src/commands/onboard/steps/prereq-check.tsx +50 -54
  119. package/src/commands/onboard/steps/start.tsx +31 -16
  120. package/src/commands/onboard/types.ts +7 -2
  121. package/src/commands/onboard.tsx +39 -4
  122. package/src/commands/profile-sync.ts +79 -26
  123. package/src/commands/runner.ts +8 -1
  124. package/src/extensions/catalog.generated.json +17 -0
  125. package/src/extensions/contract-types.generated.ts +1 -1
  126. package/src/heartbeat/heartbeat.ts +263 -103
  127. package/src/hooks/hook.ts +21 -12
  128. package/src/http/agents.ts +35 -0
  129. package/src/http/approval-requests.ts +136 -64
  130. package/src/http/apps.ts +14 -3
  131. package/src/http/config.ts +15 -1
  132. package/src/http/events.ts +62 -2
  133. package/src/http/index.ts +6 -4
  134. package/src/http/memory.ts +21 -7
  135. package/src/http/schedules.ts +1 -1
  136. package/src/http/session-data.ts +9 -4
  137. package/src/http/sessions.ts +25 -18
  138. package/src/http/stats.ts +19 -7
  139. package/src/http/status.ts +11 -1
  140. package/src/http/tasks.ts +40 -8
  141. package/src/http/webhooks.ts +67 -46
  142. package/src/http/workflows.ts +15 -20
  143. package/src/linear/outbound.ts +37 -15
  144. package/src/otel-impl.ts +151 -1
  145. package/src/otel.ts +14 -3
  146. package/src/prompts/memories.ts +19 -2
  147. package/src/providers/claude-managed-models.ts +8 -0
  148. package/src/providers/modelsdev-reasoning.json +551 -0
  149. package/src/rbac/legacy-policy.ts +16 -0
  150. package/src/rbac/permissions.ts +4 -0
  151. package/src/scheduler/schedule-task.ts +3 -0
  152. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  153. package/src/scripts-runtime/swarm-sdk.ts +9 -0
  154. package/src/scripts-runtime/types/stdlib.d.ts +1 -0
  155. package/src/scripts-runtime/types/swarm-extension.d.ts +1 -0
  156. package/src/scripts-runtime/types/swarm-sdk.d.ts +1 -0
  157. package/src/server.ts +12 -7
  158. package/src/slack/app.ts +35 -4
  159. package/src/slack/connection-state.ts +17 -0
  160. package/src/tasks/context-key.ts +1 -0
  161. package/src/tasks/worker-follow-up.ts +6 -2
  162. package/src/tests/agent-task-activity.test.ts +74 -0
  163. package/src/tests/agents-list-model-display.test.ts +6 -1
  164. package/src/tests/approval-auto-cancellation-migration.test.ts +104 -0
  165. package/src/tests/approval-requests.test.ts +395 -0
  166. package/src/tests/approval-sweeps-config.test.ts +47 -0
  167. package/src/tests/approval-sweeps.test.ts +508 -0
  168. package/src/tests/apps-kibo-blocks.test.ts +77 -0
  169. package/src/tests/apps-spike.test.ts +56 -1
  170. package/src/tests/apps-sync-engine.test.ts +20 -9
  171. package/src/tests/boot-seeds.test.ts +170 -0
  172. package/src/tests/cancel-approval-request-tool.test.ts +115 -0
  173. package/src/tests/claude-managed-adapter.test.ts +6 -0
  174. package/src/tests/config-key-filter.test.ts +80 -0
  175. package/src/tests/context-window.test.ts +1 -0
  176. package/src/tests/db-client-busy-retry.test.ts +96 -0
  177. package/src/tests/db-client.test.ts +60 -1
  178. package/src/tests/db-task-read-contract.test.ts +10 -0
  179. package/src/tests/db-task-write-contract.test.ts +9 -0
  180. package/src/tests/docs-index-footprint.test.js +3 -3
  181. package/src/tests/events-http.test.ts +103 -0
  182. package/src/tests/extensions-catalog.test.ts +22 -17
  183. package/src/tests/extensions-pre-task.test.ts +107 -0
  184. package/src/tests/fixtures/kibo-blocks-definition.json.txt +105 -0
  185. package/src/tests/follow-up-config-inheritance.test.ts +260 -0
  186. package/src/tests/heartbeat-orphan-resume.test.ts +84 -0
  187. package/src/tests/heartbeat-reboot-live.test.ts +95 -0
  188. package/src/tests/heartbeat-stall-cas.test.ts +80 -0
  189. package/src/tests/heartbeat.test.ts +99 -3
  190. package/src/tests/hook-mcp-config.test.ts +29 -0
  191. package/src/tests/http-api-integration.test.ts +16 -2
  192. package/src/tests/kv-storage.test.ts +62 -0
  193. package/src/tests/linear-outbound-sync.test.ts +120 -5
  194. package/src/tests/list-endpoint-slimming.test.ts +91 -0
  195. package/src/tests/memory-graph-organic-route.test.ts +155 -0
  196. package/src/tests/memory-http-recall-gating.test.ts +14 -4
  197. package/src/tests/memory-hybrid.test.ts +161 -1
  198. package/src/tests/memory-prompt-recall-crowdout.test.ts +297 -0
  199. package/src/tests/memory.test.ts +22 -0
  200. package/src/tests/onboard-container-engine.test.ts +240 -0
  201. package/src/tests/otel-event-loop-and-logs.test.ts +99 -0
  202. package/src/tests/pricing-routes.test.ts +14 -0
  203. package/src/tests/profile-sync-warning.test.ts +8 -4
  204. package/src/tests/promote-draft-task-route.test.ts +19 -0
  205. package/src/tests/provider-registration.test.ts +296 -42
  206. package/src/tests/rbac-engine.test.ts +30 -0
  207. package/src/tests/reasoning-effort.test.ts +8 -0
  208. package/src/tests/script-connections.test.ts +7 -0
  209. package/src/tests/sdk-allowlist.test.ts +39 -0
  210. package/src/tests/session-costs-model-key-normalize.test.ts +1 -0
  211. package/src/tests/sessions-detail-batch.test.ts +250 -0
  212. package/src/tests/sessions.test.ts +118 -0
  213. package/src/tests/slack-config.test.ts +22 -0
  214. package/src/tests/sonnet-5-5-registry.test.ts +44 -0
  215. package/src/tests/status.test.ts +36 -1
  216. package/src/tests/swarm-diff.test.ts +316 -10
  217. package/src/tests/task-completion-idempotency.test.ts +2 -1
  218. package/src/tests/tasks-requested-by-filter.test.ts +3 -1
  219. package/src/tests/tool-annotations.test.ts +1 -1
  220. package/src/tests/ui-list-slim-projections.test.ts +158 -0
  221. package/src/tests/webhooks-task-blocked.test.ts +127 -0
  222. package/src/tests/workflow-approval-recovery.test.ts +203 -0
  223. package/src/tests/workflow-hitl-routing.test.ts +22 -1
  224. package/src/tests/workflow-hitl-slack-card.test.ts +52 -0
  225. package/src/tests/workflow-http-v2.test.ts +99 -8
  226. package/src/tests/workflow-retry-validation.test.ts +56 -0
  227. package/src/tests/workflow-tla-races.test.ts +389 -0
  228. package/src/tests/workflow-validation-port-routing.test.ts +113 -1
  229. package/src/tools/cancel-approval-request.ts +57 -0
  230. package/src/tools/memory-search.ts +1 -0
  231. package/src/tools/request-human-input.ts +4 -2
  232. package/src/tools/send-task.ts +4 -0
  233. package/src/tools/templates.ts +19 -0
  234. package/src/tools/tool-config.ts +2 -1
  235. package/src/tools/workflows/list-workflow-runs.ts +1 -0
  236. package/src/types.ts +38 -0
  237. package/src/utils/context-window.ts +1 -0
  238. package/src/workflows/approval-cancel.ts +152 -0
  239. package/src/workflows/approval-notifications.ts +84 -0
  240. package/src/workflows/checkpoint.ts +10 -5
  241. package/src/workflows/definition.ts +21 -0
  242. package/src/workflows/engine.ts +152 -21
  243. package/src/workflows/executors/human-in-the-loop.ts +1 -1
  244. package/src/workflows/recovery.ts +100 -45
  245. package/src/workflows/resume.ts +49 -18
  246. package/src/workflows/retry-poller.ts +71 -21
  247. package/templates/extensions/README.md +1 -0
  248. package/templates/extensions/github-sender-allowlist/README.md +18 -0
  249. package/templates/extensions/github-sender-allowlist/hooks.ts +55 -0
  250. package/templates/extensions/github-sender-allowlist/manifest.json +8 -0
  251. package/templates/skills/apps/content.md +20 -1
  252. package/templates/skills/code-quality/content.md +26 -1
  253. package/templates/skills/pages/content.md +16 -4
  254. package/templates/skills/pages/files/examples/multiplayer-board.html +3 -12
  255. package/dist/cli-2daksqps.js +0 -378
  256. package/dist/rbac-roles-3gxmnb20.js +0 -37
@@ -1,5 +1,21 @@
1
1
  {
2
2
  "anthropic": {
3
+ "claude-sonnet-5-5": {
4
+ "id": "claude-sonnet-5-5",
5
+ "reasoning": true,
6
+ "reasoningOptions": [
7
+ {
8
+ "type": "effort",
9
+ "values": [
10
+ "low",
11
+ "medium",
12
+ "high",
13
+ "xhigh",
14
+ "max"
15
+ ]
16
+ }
17
+ ]
18
+ },
3
19
  "claude-opus-5-5": {
4
20
  "id": "claude-opus-5-5",
5
21
  "reasoning": true,
@@ -969,6 +985,40 @@
969
985
  ]
970
986
  }
971
987
  ]
988
+ },
989
+ "gpt-daybreak-blue-latest": {
990
+ "id": "gpt-daybreak-blue-latest",
991
+ "reasoning": true,
992
+ "reasoningOptions": [
993
+ {
994
+ "type": "effort",
995
+ "values": [
996
+ "none",
997
+ "low",
998
+ "medium",
999
+ "high",
1000
+ "xhigh",
1001
+ "max"
1002
+ ]
1003
+ }
1004
+ ]
1005
+ },
1006
+ "gpt-daybreak-red-latest": {
1007
+ "id": "gpt-daybreak-red-latest",
1008
+ "reasoning": true,
1009
+ "reasoningOptions": [
1010
+ {
1011
+ "type": "effort",
1012
+ "values": [
1013
+ "none",
1014
+ "low",
1015
+ "medium",
1016
+ "high",
1017
+ "xhigh",
1018
+ "max"
1019
+ ]
1020
+ }
1021
+ ]
972
1022
  }
973
1023
  },
974
1024
  "openrouter": {
@@ -4572,6 +4622,507 @@
4572
4622
  "nousresearch/hermes-3-llama-3.1-405b:free": {
4573
4623
  "id": "nousresearch/hermes-3-llama-3.1-405b:free",
4574
4624
  "reasoning": false
4625
+ },
4626
+ "stealth/space-bunny-alpha": {
4627
+ "id": "stealth/space-bunny-alpha",
4628
+ "reasoning": true,
4629
+ "reasoningOptions": [
4630
+ {
4631
+ "type": "effort",
4632
+ "values": [
4633
+ "low",
4634
+ "medium",
4635
+ "high",
4636
+ "xhigh",
4637
+ "max"
4638
+ ]
4639
+ }
4640
+ ]
4641
+ },
4642
+ "prism-ml/ternary-bonsai-2-27b": {
4643
+ "id": "prism-ml/ternary-bonsai-2-27b",
4644
+ "reasoning": true,
4645
+ "reasoningOptions": [
4646
+ {
4647
+ "type": "toggle"
4648
+ },
4649
+ {
4650
+ "type": "effort",
4651
+ "values": [
4652
+ "medium",
4653
+ "xhigh"
4654
+ ]
4655
+ }
4656
+ ]
4657
+ },
4658
+ "anthropic/claude-opus-5.5": {
4659
+ "id": "anthropic/claude-opus-5.5",
4660
+ "reasoning": true,
4661
+ "reasoningOptions": [
4662
+ {
4663
+ "type": "effort",
4664
+ "values": [
4665
+ "low",
4666
+ "medium",
4667
+ "high",
4668
+ "xhigh",
4669
+ "max"
4670
+ ]
4671
+ }
4672
+ ]
4673
+ },
4674
+ "cohere/command-a-plus": {
4675
+ "id": "cohere/command-a-plus",
4676
+ "reasoning": true,
4677
+ "reasoningOptions": [
4678
+ {
4679
+ "type": "toggle"
4680
+ }
4681
+ ]
4682
+ },
4683
+ "deepseek/deepseek-v4.1-flash": {
4684
+ "id": "deepseek/deepseek-v4.1-flash",
4685
+ "reasoning": true,
4686
+ "reasoningOptions": [
4687
+ {
4688
+ "type": "toggle"
4689
+ },
4690
+ {
4691
+ "type": "effort",
4692
+ "values": [
4693
+ "low",
4694
+ "high",
4695
+ "max"
4696
+ ]
4697
+ }
4698
+ ]
4699
+ },
4700
+ "unbiased/pareto": {
4701
+ "id": "unbiased/pareto",
4702
+ "reasoning": false
4703
+ },
4704
+ "perceptron/perceptron-mk1.5": {
4705
+ "id": "perceptron/perceptron-mk1.5",
4706
+ "reasoning": true,
4707
+ "reasoningOptions": [
4708
+ {
4709
+ "type": "effort",
4710
+ "values": [
4711
+ "none",
4712
+ "minimal",
4713
+ "low",
4714
+ "medium",
4715
+ "high"
4716
+ ]
4717
+ }
4718
+ ]
4719
+ },
4720
+ "z-ai/glm-5.3-prime": {
4721
+ "id": "z-ai/glm-5.3-prime",
4722
+ "reasoning": true,
4723
+ "reasoningOptions": [
4724
+ {
4725
+ "type": "effort",
4726
+ "values": [
4727
+ "low",
4728
+ "high",
4729
+ "max"
4730
+ ]
4731
+ }
4732
+ ]
4733
+ },
4734
+ "z-ai/glm-5.3-flashx": {
4735
+ "id": "z-ai/glm-5.3-flashx",
4736
+ "reasoning": true,
4737
+ "reasoningOptions": [
4738
+ {
4739
+ "type": "effort",
4740
+ "values": [
4741
+ "low",
4742
+ "high",
4743
+ "max"
4744
+ ]
4745
+ }
4746
+ ]
4747
+ },
4748
+ "inference-net/schematron-v2-small": {
4749
+ "id": "inference-net/schematron-v2-small",
4750
+ "reasoning": false
4751
+ },
4752
+ "inference-net/schematron-v2-turbo": {
4753
+ "id": "inference-net/schematron-v2-turbo",
4754
+ "reasoning": false
4755
+ },
4756
+ "~openai/gpt-terra-latest": {
4757
+ "id": "~openai/gpt-terra-latest",
4758
+ "reasoning": true,
4759
+ "reasoningOptions": [
4760
+ {
4761
+ "type": "effort",
4762
+ "values": [
4763
+ "none",
4764
+ "low",
4765
+ "medium",
4766
+ "high",
4767
+ "xhigh",
4768
+ "max"
4769
+ ]
4770
+ }
4771
+ ]
4772
+ },
4773
+ "~openai/gpt-luna-latest": {
4774
+ "id": "~openai/gpt-luna-latest",
4775
+ "reasoning": true,
4776
+ "reasoningOptions": [
4777
+ {
4778
+ "type": "effort",
4779
+ "values": [
4780
+ "none",
4781
+ "low",
4782
+ "medium",
4783
+ "high",
4784
+ "xhigh",
4785
+ "max"
4786
+ ]
4787
+ }
4788
+ ]
4789
+ },
4790
+ "~openai/gpt-sol-latest": {
4791
+ "id": "~openai/gpt-sol-latest",
4792
+ "reasoning": true,
4793
+ "reasoningOptions": [
4794
+ {
4795
+ "type": "effort",
4796
+ "values": [
4797
+ "none",
4798
+ "low",
4799
+ "medium",
4800
+ "high",
4801
+ "xhigh",
4802
+ "max"
4803
+ ]
4804
+ }
4805
+ ]
4806
+ },
4807
+ "~openai/gpt-astra-latest": {
4808
+ "id": "~openai/gpt-astra-latest",
4809
+ "reasoning": true,
4810
+ "reasoningOptions": [
4811
+ {
4812
+ "type": "effort",
4813
+ "values": [
4814
+ "low",
4815
+ "medium",
4816
+ "high",
4817
+ "xhigh",
4818
+ "max"
4819
+ ]
4820
+ }
4821
+ ]
4822
+ },
4823
+ "x-ai/grok-4.7": {
4824
+ "id": "x-ai/grok-4.7",
4825
+ "reasoning": true,
4826
+ "reasoningOptions": [
4827
+ {
4828
+ "type": "effort",
4829
+ "values": [
4830
+ "low",
4831
+ "medium",
4832
+ "high",
4833
+ "xhigh"
4834
+ ]
4835
+ }
4836
+ ]
4837
+ },
4838
+ "upstage/solar-mini4": {
4839
+ "id": "upstage/solar-mini4",
4840
+ "reasoning": true,
4841
+ "reasoningOptions": [
4842
+ {
4843
+ "type": "effort",
4844
+ "values": [
4845
+ "none",
4846
+ "minimal",
4847
+ "low",
4848
+ "medium",
4849
+ "high",
4850
+ "xhigh",
4851
+ "max"
4852
+ ]
4853
+ }
4854
+ ]
4855
+ },
4856
+ "~deepseek/deepseek-flash-latest": {
4857
+ "id": "~deepseek/deepseek-flash-latest",
4858
+ "reasoning": true,
4859
+ "reasoningOptions": [
4860
+ {
4861
+ "type": "toggle"
4862
+ },
4863
+ {
4864
+ "type": "effort",
4865
+ "values": [
4866
+ "low",
4867
+ "high",
4868
+ "max"
4869
+ ]
4870
+ }
4871
+ ]
4872
+ },
4873
+ "~deepseek/deepseek-pro-latest": {
4874
+ "id": "~deepseek/deepseek-pro-latest",
4875
+ "reasoning": true,
4876
+ "reasoningOptions": [
4877
+ {
4878
+ "type": "toggle"
4879
+ },
4880
+ {
4881
+ "type": "effort",
4882
+ "values": [
4883
+ "low",
4884
+ "high",
4885
+ "max"
4886
+ ]
4887
+ }
4888
+ ]
4889
+ },
4890
+ "fireworks/ember-1": {
4891
+ "id": "fireworks/ember-1",
4892
+ "reasoning": true,
4893
+ "reasoningOptions": [
4894
+ {
4895
+ "type": "toggle"
4896
+ },
4897
+ {
4898
+ "type": "effort",
4899
+ "values": [
4900
+ "low",
4901
+ "high",
4902
+ "max"
4903
+ ]
4904
+ }
4905
+ ]
4906
+ },
4907
+ "sakana/fugu-max": {
4908
+ "id": "sakana/fugu-max",
4909
+ "reasoning": true,
4910
+ "reasoningOptions": [
4911
+ {
4912
+ "type": "effort",
4913
+ "values": [
4914
+ "high",
4915
+ "xhigh",
4916
+ "max"
4917
+ ]
4918
+ }
4919
+ ]
4920
+ },
4921
+ "sakana/fugu-ultra-v2": {
4922
+ "id": "sakana/fugu-ultra-v2",
4923
+ "reasoning": true,
4924
+ "reasoningOptions": [
4925
+ {
4926
+ "type": "effort",
4927
+ "values": [
4928
+ "high",
4929
+ "xhigh",
4930
+ "max"
4931
+ ]
4932
+ }
4933
+ ]
4934
+ },
4935
+ "inclusionai/ling-3.0-flash-vl": {
4936
+ "id": "inclusionai/ling-3.0-flash-vl",
4937
+ "reasoning": true,
4938
+ "reasoningOptions": [
4939
+ {
4940
+ "type": "toggle"
4941
+ }
4942
+ ]
4943
+ },
4944
+ "xiaomi/mimo-v2.6-pro": {
4945
+ "id": "xiaomi/mimo-v2.6-pro",
4946
+ "reasoning": true,
4947
+ "reasoningOptions": [
4948
+ {
4949
+ "type": "toggle"
4950
+ }
4951
+ ]
4952
+ },
4953
+ "xiaomi/mimo-v2.6-pro-ultraspeed": {
4954
+ "id": "xiaomi/mimo-v2.6-pro-ultraspeed",
4955
+ "reasoning": true,
4956
+ "reasoningOptions": [
4957
+ {
4958
+ "type": "toggle"
4959
+ }
4960
+ ]
4961
+ },
4962
+ "xiaomi/mimo-v2.6-flash": {
4963
+ "id": "xiaomi/mimo-v2.6-flash",
4964
+ "reasoning": true,
4965
+ "reasoningOptions": [
4966
+ {
4967
+ "type": "toggle"
4968
+ }
4969
+ ]
4970
+ },
4971
+ "inception/mercury-2.5": {
4972
+ "id": "inception/mercury-2.5",
4973
+ "reasoning": true,
4974
+ "reasoningOptions": [
4975
+ {
4976
+ "type": "effort",
4977
+ "values": [
4978
+ "none",
4979
+ "low",
4980
+ "medium",
4981
+ "high"
4982
+ ]
4983
+ }
4984
+ ]
4985
+ },
4986
+ "aion-labs/aion-3.5": {
4987
+ "id": "aion-labs/aion-3.5",
4988
+ "reasoning": true,
4989
+ "reasoningOptions": [
4990
+ {
4991
+ "type": "effort",
4992
+ "values": [
4993
+ "low",
4994
+ "high",
4995
+ "max"
4996
+ ]
4997
+ }
4998
+ ]
4999
+ },
5000
+ "aion-labs/aion-3.5-mini": {
5001
+ "id": "aion-labs/aion-3.5-mini",
5002
+ "reasoning": true,
5003
+ "reasoningOptions": [
5004
+ {
5005
+ "type": "effort",
5006
+ "values": [
5007
+ "low",
5008
+ "high",
5009
+ "max"
5010
+ ]
5011
+ }
5012
+ ]
5013
+ },
5014
+ "qwen/qwen3.8-omni-flash": {
5015
+ "id": "qwen/qwen3.8-omni-flash",
5016
+ "reasoning": true,
5017
+ "reasoningOptions": [
5018
+ {
5019
+ "type": "toggle"
5020
+ },
5021
+ {
5022
+ "type": "budget_tokens"
5023
+ }
5024
+ ]
5025
+ },
5026
+ "qwen/qwen3.8-max-prime": {
5027
+ "id": "qwen/qwen3.8-max-prime",
5028
+ "reasoning": true,
5029
+ "reasoningOptions": [
5030
+ {
5031
+ "type": "effort",
5032
+ "values": [
5033
+ "minimal",
5034
+ "low",
5035
+ "medium",
5036
+ "high",
5037
+ "xhigh"
5038
+ ]
5039
+ }
5040
+ ]
5041
+ },
5042
+ "qwen/qwen3.8-27b:free": {
5043
+ "id": "qwen/qwen3.8-27b:free",
5044
+ "reasoning": true,
5045
+ "reasoningOptions": [
5046
+ {
5047
+ "type": "toggle"
5048
+ },
5049
+ {
5050
+ "type": "effort",
5051
+ "values": [
5052
+ "low",
5053
+ "medium",
5054
+ "xhigh"
5055
+ ]
5056
+ }
5057
+ ]
5058
+ },
5059
+ "openai/gpt-6-sol-pro": {
5060
+ "id": "openai/gpt-6-sol-pro",
5061
+ "reasoning": true,
5062
+ "reasoningOptions": [
5063
+ {
5064
+ "type": "effort",
5065
+ "values": [
5066
+ "none",
5067
+ "low",
5068
+ "medium",
5069
+ "high",
5070
+ "xhigh",
5071
+ "max"
5072
+ ]
5073
+ }
5074
+ ]
5075
+ },
5076
+ "openai/gpt-6-luna": {
5077
+ "id": "openai/gpt-6-luna",
5078
+ "reasoning": true,
5079
+ "reasoningOptions": [
5080
+ {
5081
+ "type": "effort",
5082
+ "values": [
5083
+ "none",
5084
+ "low",
5085
+ "medium",
5086
+ "high",
5087
+ "xhigh",
5088
+ "max"
5089
+ ]
5090
+ }
5091
+ ]
5092
+ },
5093
+ "openai/gpt-6-luna-pro": {
5094
+ "id": "openai/gpt-6-luna-pro",
5095
+ "reasoning": true,
5096
+ "reasoningOptions": [
5097
+ {
5098
+ "type": "effort",
5099
+ "values": [
5100
+ "none",
5101
+ "low",
5102
+ "medium",
5103
+ "high",
5104
+ "xhigh",
5105
+ "max"
5106
+ ]
5107
+ }
5108
+ ]
5109
+ },
5110
+ "openai/gpt-6-sol": {
5111
+ "id": "openai/gpt-6-sol",
5112
+ "reasoning": true,
5113
+ "reasoningOptions": [
5114
+ {
5115
+ "type": "effort",
5116
+ "values": [
5117
+ "none",
5118
+ "low",
5119
+ "medium",
5120
+ "high",
5121
+ "xhigh",
5122
+ "max"
5123
+ ]
5124
+ }
5125
+ ]
4575
5126
  }
4576
5127
  },
4577
5128
  "amazon-bedrock": {
@@ -109,6 +109,20 @@ const leadOrResourceOwner: LegacyRule = {
109
109
  },
110
110
  };
111
111
 
112
+ const humanOrLeadOrResourceOwner: LegacyRule = {
113
+ name: "human-or-lead-or-resource-owner",
114
+ denyReason: "requires a human, the operator, a lead agent, or the resource owner",
115
+ evaluate: (principal, resource) => {
116
+ if (principal.kind === "operator" || principal.kind === "user") return true;
117
+ if (actsAsLead(principal)) return true;
118
+ return (
119
+ resource?.kind === "owned" &&
120
+ resource.ownerAgentId != null &&
121
+ resource.ownerAgentId === principal.agentId
122
+ );
123
+ },
124
+ };
125
+
112
126
  const leadOrOwnNamespace: LegacyRule = {
113
127
  name: "lead-or-own-namespace",
114
128
  denyReason: "requires lead agent or your own task:agent: namespace",
@@ -188,6 +202,7 @@ export const LEGACY_RULES = {
188
202
  "lead-only": leadOnly,
189
203
  "lead-or-task-creator": leadOrTaskCreator,
190
204
  "lead-or-resource-owner": leadOrResourceOwner,
205
+ "human-or-lead-or-resource-owner": humanOrLeadOrResourceOwner,
191
206
  "lead-or-own-namespace": leadOrOwnNamespace,
192
207
  "any-authenticated": anyAuthenticated,
193
208
  "requester-owns-task": requesterOwnsTask,
@@ -200,6 +215,7 @@ export const LEGACY_POLICY = {
200
215
  "agent.profile.update.any": leadOnly,
201
216
  "agent.context.read.any": leadOnly,
202
217
  "task.cancel.any": leadOrTaskCreator,
218
+ "approval.cancel.any": humanOrLeadOrResourceOwner,
203
219
  "task.steer.any": leadOrTaskCreator,
204
220
  "task.create.own": anyAuthenticated,
205
221
  "task.read.own": requesterOwnsTask,
@@ -33,6 +33,10 @@ export const PERMISSIONS = {
33
33
  description: "Cancel any task (beyond tasks the caller created).",
34
34
  namespace: "task",
35
35
  },
36
+ "approval.cancel.any": {
37
+ description: "Cancel a pending approval request.",
38
+ namespace: "approval",
39
+ },
36
40
  "task.steer.any": {
37
41
  description: "Steer any task (beyond tasks the caller created).",
38
42
  namespace: "task",
@@ -39,6 +39,9 @@ export async function prepareStandaloneScheduleTask(
39
39
  // auto-wiring (see withSiblingAwareness in src/tasks/sibling-awareness.ts), so
40
40
  // the wake-up run continues the deferred task rather than a random sibling.
41
41
  parentTaskId: schedule.parentTaskId,
42
+ // A defer-task wake-up continues the deferred work, so it keeps the
43
+ // creator's onCompleted/onFailed. Other schedules start new work.
44
+ inheritParentFollowUpConfig: schedule.taskType === "deferred" && !!schedule.parentTaskId,
42
45
  },
43
46
  { origin: "schedule" },
44
47
  );
@@ -176,6 +176,7 @@ export const SDK_TOOL_NAME_MAP = {
176
176
 
177
177
  // ── human input ──
178
178
  request_humanInput: "request-human-input",
179
+ approval_cancel: "cancel-approval-request", // destructive
179
180
  } as const;
180
181
 
181
182
  export const SDK_ALLOWLIST = Object.keys(SDK_TOOL_NAME_MAP) as Array<
@@ -126,6 +126,15 @@ function bridgeRequestFor(name: string, args: unknown): BridgeRequest | null {
126
126
  if (!taskId) throw new Error("task_cancel requires string `taskId`");
127
127
  return { method: "POST", path: `/api/tasks/${encodeURIComponent(taskId)}/cancel` };
128
128
  }
129
+ case "approval_cancel": {
130
+ const requestId = typeof body.requestId === "string" ? body.requestId : undefined;
131
+ if (!requestId) throw new Error("approval_cancel requires string `requestId`");
132
+ return {
133
+ method: "POST",
134
+ path: `/api/approval-requests/${encodeURIComponent(requestId)}/cancel`,
135
+ body: { reason: body.reason },
136
+ };
137
+ }
129
138
 
130
139
  // ── kv ──
131
140
  case "kv_get":
@@ -608,6 +608,7 @@ declare module "swarm-sdk" {
608
608
 
609
609
  // --- human input ---
610
610
  request_humanInput(args: Record<string, unknown>): Promise<unknown>;
611
+ approval_cancel(args: { requestId: string; reason?: string }): Promise<unknown>;
611
612
  }
612
613
 
613
614
  export interface ScriptStdlib {
@@ -64,6 +64,7 @@ declare module "swarm-extension" {
64
64
  outputSchema?: Record<string, unknown> | undefined;
65
65
  inheritParentOutputSchema?: boolean | undefined;
66
66
  inheritParentRoutingAffinity?: boolean | undefined;
67
+ inheritParentFollowUpConfig?: boolean | undefined;
67
68
  followUpConfig?:
68
69
  | {
69
70
  disabled?: boolean | undefined;
@@ -590,6 +590,7 @@ declare module "swarm-sdk" {
590
590
 
591
591
  // --- human input ---
592
592
  request_humanInput(args: Record<string, unknown>): Promise<unknown>;
593
+ approval_cancel(args: { requestId: string; reason?: string }): Promise<unknown>;
593
594
  }
594
595
 
595
596
  export interface ScriptStdlib {