@desplega.ai/agent-swarm 1.152.2 → 1.154.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.
- package/README.md +2 -2
- package/dist/{acp-adapter-pfeje2v5.js → acp-adapter-eb2aj8xy.js} +4 -4
- package/dist/{actions-0sttc7f5.js → actions-kpnwp1kz.js} +31 -27
- package/dist/{anthropic-messages-2y8nktar.js → anthropic-messages-9vqsbznt.js} +112 -84
- package/dist/{app-p8teva95.js → app-zk1apkf6.js} +10 -7
- package/dist/{assistant-r45jnsrt.js → assistant-kwq4y50q.js} +32 -28
- package/dist/{azure-openai-responses-f38x2avq.js → azure-openai-responses-04qwdwfq.js} +27 -13
- package/dist/{boot-reembed-je26h5y7.js → boot-reembed-22hd3jjn.js} +9 -7
- package/dist/{boot-reembed-1qmybsd4.js → boot-reembed-qe168424.js} +10 -8
- package/dist/{boot-scrub-logs-gte3h1mm.js → boot-scrub-logs-pkdpsrjd.js} +7 -5
- package/dist/{claude-adapter-csc1mzka.js → claude-adapter-3fx90nww.js} +18 -16
- package/dist/{claude-managed-adapter-dsmkcrjy.js → claude-managed-adapter-ea2aga6w.js} +3 -3
- package/dist/{claude-sdk-session-fcd6f078.js → claude-sdk-session-z7fahf1k.js} +18 -16
- package/dist/{cli-r2fpe7cx.js → cli-00w2c66p.js} +61 -55
- package/dist/{cli-wbyk465z.js → cli-09y3tjxz.js} +1 -1
- package/dist/{cli-ht5rs63n.js → cli-0e31nm4n.js} +16 -7
- package/dist/cli-0x5qzvkg.js +4279 -0
- package/dist/{cli-d3p82erb.js → cli-18amys3y.js} +9 -9
- package/dist/{cli-4ahpr4sw.js → cli-1jpjafw4.js} +5 -5
- package/dist/{cli-jbmc0r7r.js → cli-243tzws8.js} +1 -1
- package/dist/{cli-ch38q5z4.js → cli-24k806sc.js} +6789 -2542
- package/dist/cli-3bkz2p7j.js +2828 -0
- package/dist/cli-3er6gcsn.js +1849 -0
- package/dist/cli-4k7jazkq.js +3339 -0
- package/dist/{cli-c4eeb5q2.js → cli-5b6b62tz.js} +1 -1
- package/dist/{cli-qd65dvr6.js → cli-5vs0nh43.js} +65 -44
- package/dist/{cli-z3wkng35.js → cli-6r3cgpk2.js} +224 -156
- package/dist/{cli-pgj4a5fb.js → cli-71cj99hx.js} +4 -3
- package/dist/cli-8sea27q4.js +14075 -0
- package/dist/{cli-jvy9qgjs.js → cli-913yakhv.js} +22 -7
- package/dist/{cli-pf9q3696.js → cli-927erqqt.js} +5 -2
- package/dist/cli-95jnpnqg.js +230 -0
- package/dist/{cli-wpv5rgg2.js → cli-abp3g4ax.js} +15 -2
- package/dist/{cli-ckz5t2hb.js → cli-acy6bfhr.js} +10 -7
- package/dist/{cli-4yc5d8fk.js → cli-avkd6mqv.js} +50 -0
- package/dist/{cli-8wrympd7.js → cli-bzr0ftht.js} +26 -7
- package/dist/{cli-qn042eh7.js → cli-c1v10xb2.js} +194 -1913
- package/dist/cli-cgj4hc12.js +18902 -0
- package/dist/{cli-2nnd56zt.js → cli-e0pg4zeh.js} +3 -2
- package/dist/{cli-r84ctdxn.js → cli-e31ehqwy.js} +2 -2
- package/dist/{cli-gphgnvpf.js → cli-e3229na9.js} +3 -3
- package/dist/{cli-gpqcs935.js → cli-e3cyf59d.js} +2 -2
- package/dist/{cli-s25avqg9.js → cli-e781c6f9.js} +1 -0
- package/dist/{cli-s2qjdd6z.js → cli-eetrvv91.js} +1 -1
- package/dist/{cli-j4nv2wqy.js → cli-fdzg6jhf.js} +10 -4
- package/dist/{cli-fm4ytsdk.js → cli-g2h29qar.js} +2 -2
- package/dist/{cli-zvgj5zg8.js → cli-ge67p080.js} +302 -3497
- package/dist/cli-h38x0qhg.js +6912 -0
- package/dist/{cli-9xvdm3bx.js → cli-h60qfasa.js} +742 -278
- package/dist/{cli-jew3jda5.js → cli-hws0vn86.js} +2 -2
- package/dist/{cli-j8dggbcr.js → cli-k0g1sjzm.js} +23 -31
- package/dist/{cli-xw7vak96.js → cli-kp3qs53m.js} +5 -5
- package/dist/{cli-rgvp6r2x.js → cli-mcnhgnn1.js} +193 -4
- package/dist/{cli-zvkq5csn.js → cli-myaxtgh8.js} +7 -6
- package/dist/{cli-56h18ng2.js → cli-n62atwh9.js} +1 -1
- package/dist/cli-n7h1kqpf.js +29 -0
- package/dist/{cli-fmy65jdn.js → cli-pf1v8xhb.js} +7 -5
- package/dist/{cli-xy1cchaf.js → cli-q85qhckh.js} +238 -11
- package/dist/{cli-3bpzj8me.js → cli-r1d3dzt6.js} +2 -2
- package/dist/{pi-mono-adapter-jcqt71cg.js → cli-rxkqvngf.js} +67343 -101083
- package/dist/{cli-kj76p1ez.js → cli-scwq51gn.js} +13 -7
- package/dist/{cli-b9dd0h3k.js → cli-stwsmd6k.js} +3 -2
- package/dist/{cli-c2mk1kgf.js → cli-v4en75c5.js} +8 -1
- package/dist/{cli-z61ykvam.js → cli-wg04s9kr.js} +4 -3
- package/dist/cli-yn0a417a.js +4069 -0
- package/dist/{cli-zfzznn7c.js → cli-ytxs7mn1.js} +26 -2
- package/dist/{cli-4j8k1m4w.js → cli-zt1227k1.js} +1162 -192
- package/dist/cli.js +28 -35
- package/dist/{codex-adapter-fxmpsabw.js → codex-adapter-ttdm995v.js} +12 -11
- package/dist/{codex-hook-8jexc34x.js → codex-hook-8gx7bcz0.js} +3 -3
- package/dist/{codex-session-runner-rr1e47ea.js → codex-session-runner-3v8nh4c8.js} +12 -11
- package/dist/{commands-0f5rxz51.js → commands-1cxwbhhq.js} +7 -5
- package/dist/{db-r3jxf3wy.js → db-y9zwsr79.js} +25 -5
- package/dist/{dispatcher-06vph6q4.js → dispatcher-9m9zss36.js} +30 -26
- package/dist/dsh-adapter-gsb2qqf9.js +19 -0
- package/dist/{e2b-413b8t4v.js → e2b-93x1k0j5.js} +6 -7
- package/dist/{google-generative-ai-ndjmj5fa.js → google-generative-ai-gwwrnzqn.js} +33 -73
- package/dist/{google-vertex-fr665tqs.js → google-vertex-5wfawpwz.js} +38 -68
- package/dist/{handlers-0hgtc910.js → handlers-36fm1bwn.js} +33 -29
- package/dist/{hook-9kvrv1er.js → hook-pntw4r8h.js} +12 -10
- package/dist/{hook-fbfhkat3.js → hook-vwq8y26p.js} +13 -11
- package/dist/{http-xbyx8k5j.js → http-20jesakk.js} +357 -261
- package/dist/{index-jsw3aynb.js → index-6artrehg.js} +30 -26
- package/dist/{cli-pdz9qde4.js → index-9ch1n761.js} +10 -11
- package/dist/{index-rnyahfn5.js → index-9n5z2492.js} +30 -26
- package/dist/{index-66xz5e9j.js → index-h5gs261z.js} +521 -9
- package/dist/{index-tfsdxyv6.js → index-j5wrf1yw.js} +40 -25
- package/dist/{index-2sp0384z.js → index-kkeftv5h.js} +738 -21
- package/dist/{index-sgk50mbg.js → index-m2xqpz5r.js} +31 -27
- package/dist/{index-gpfn1741.js → index-m9ks8a7t.js} +9 -7
- package/dist/index-w097eg0x.js +5 -0
- package/dist/jiti-loader-b4837mtm.js +34 -0
- package/dist/jiti-static-loader-q2g5ds0y.js +31267 -0
- package/dist/{keepalive-s3xpr7sw.js → keepalive-pwxvxd2c.js} +9 -7
- package/dist/{lead-rq4n5r16.js → lead-m789wqa3.js} +46 -41
- package/dist/{maintenance-f0atj1ab.js → maintenance-bvg6w7e2.js} +10 -8
- package/dist/{mistral-conversations-qhr84ph3.js → mistral-conversations-zx0kn554.js} +24 -18
- package/dist/{node-x1g4v0pq.js → node-5qtycf6a.js} +16 -11
- package/dist/{oauth-refresh-sweep-q0t3bxre.js → oauth-refresh-sweep-6v4bd737.js} +8 -6
- package/dist/{onboard-br5j1kch.js → onboard-snckpcj1.js} +115 -35
- package/dist/{openai-codex-responses-wy6a43wd.js → openai-codex-responses-4vjqzvjp.js} +33 -27
- package/dist/{openai-completions-32rdwmze.js → openai-completions-pxsmym7g.js} +52 -64
- package/dist/{openai-responses-6xwf7bzg.js → openai-responses-tmn0rqp0.js} +23 -24
- package/dist/{opencode-adapter-28axqa09.js → opencode-adapter-qbmv4tpy.js} +6 -6
- package/dist/{otel-impl-vdqge2nt.js → otel-impl-e0ytens5.js} +4 -4
- package/dist/{pi-messages-b1mbr6gp.js → pi-messages-txpjj39q.js} +3 -3
- package/dist/pi-mono-adapter-c4ggemhz.js +1316 -0
- package/dist/{pricing-refresh-hb3691fd.js → pricing-refresh-52g2ywrw.js} +9 -7
- package/dist/{rbac-roles-t78xt39b.js → rbac-roles-5455kfdn.js} +8 -6
- package/dist/{rbac-roles-jh280k9g.js → rbac-roles-hbf0xa52.js} +9 -7
- package/dist/{render-v2-7p8r2ymg.js → render-v2-npm8xdzh.js} +16 -9
- package/dist/{seed-pricing-hf889enh.js → seed-pricing-650wbr1n.js} +8 -6
- package/dist/{setup-w6mb03jv.js → setup-k1mew5rf.js} +4 -5
- package/dist/virtual-modules-2q5b2pk4.js +54 -0
- package/dist/{work-objects-nt8gy1kj.js → work-objects-2ea3kvwg.js} +33 -29
- package/dist/{worker-dwy617t0.js → worker-ec6hvc4m.js} +46 -41
- package/openapi.json +109 -16
- package/package.json +7 -6
- package/plugin/opencode-plugins/lib/memory-raters.ts +7 -0
- package/src/be/automation-preflight.ts +6 -4
- package/src/be/db/agents.ts +75 -2
- package/src/be/db/tasks/read.ts +2 -0
- package/src/be/db/tasks/write.ts +7 -1
- package/src/be/db.ts +140 -18
- package/src/be/extensions/db.ts +35 -4
- package/src/be/memory/raters/llm.ts +2 -6
- package/src/be/memory/raters/noop.ts +2 -3
- package/src/be/memory/raters/registry.ts +4 -10
- package/src/be/migrations/157_defer_provenance_and_marker.sql +27 -0
- package/src/be/models-catalog.ts +2 -0
- package/src/be/modelsdev-cache.json +213 -0
- package/src/be/rbac-audit.ts +2 -0
- package/src/be/seed/agent-fs-provision.ts +23 -0
- package/src/be/seed-pricing.ts +3 -1
- package/src/be/swarm-config-guard.ts +1 -0
- package/src/commands/onboard/compose-generator.ts +16 -1
- package/src/commands/onboard/env-generator.ts +14 -1
- package/src/commands/onboard/manifest.ts +1 -0
- package/src/commands/onboard/steps/integration-slack.tsx +56 -16
- package/src/commands/onboard/steps/review.tsx +5 -0
- package/src/commands/onboard/types.ts +6 -0
- package/src/commands/onboard.tsx +5 -1
- package/src/commands/provider-credentials.ts +14 -2
- package/src/commands/runner.ts +18 -2
- package/src/extensions/identity.ts +15 -7
- package/src/extensions/lifecycle.ts +15 -21
- package/src/hooks/codex-hook.ts +7 -1
- package/src/http/agents.ts +12 -4
- package/src/http/config.ts +1 -1
- package/src/http/core.ts +5 -3
- package/src/http/extensions.ts +108 -34
- package/src/http/poll.ts +7 -0
- package/src/http/schedules.ts +10 -0
- package/src/http/script-runs.ts +35 -26
- package/src/http/status.ts +24 -11
- package/src/http/tasks.ts +6 -1
- package/src/prompts/base-prompt.ts +15 -7
- package/src/prompts/memories.ts +5 -7
- package/src/prompts/session-templates.ts +3 -2
- package/src/prompts/steering-delivery.ts +2 -0
- package/src/providers/claude-managed-models.ts +8 -0
- package/src/providers/codex-adapter.ts +3 -6
- package/src/providers/codex-models.ts +15 -1
- package/src/providers/dsh-adapter.ts +248 -0
- package/src/providers/index.ts +5 -1
- package/src/providers/modelsdev-reasoning.json +50 -0
- package/src/providers/pi-mono-extension.ts +2 -5
- package/src/rbac/legacy-policy.ts +15 -1
- package/src/rbac/types.ts +2 -0
- package/src/server.ts +7 -1
- package/src/slack/ack.ts +43 -8
- package/src/slack/app.ts +32 -10
- package/src/slack/config.ts +29 -0
- package/src/slack/handlers.ts +7 -1
- package/src/slack/render-v2.ts +186 -17
- package/src/slack/responses.ts +1 -3
- package/src/slack/task-output.ts +66 -8
- package/src/slack/thread-buffer.ts +27 -3
- package/src/telemetry.ts +2 -3
- package/src/tests/agent-fs-provision-seeder.test.ts +56 -2
- package/src/tests/agents-harness-provider.test.ts +19 -0
- package/src/tests/agents-list-model-display.test.ts +60 -1
- package/src/tests/base-prompt.test.ts +25 -0
- package/src/tests/claude-managed-adapter.test.ts +6 -0
- package/src/tests/codex-gpt6-release.test.ts +97 -0
- package/src/tests/codex-steering-hook.test.ts +2 -2
- package/src/tests/config-api-only-keys.test.ts +9 -0
- package/src/tests/context-window.test.ts +1 -0
- package/src/tests/db-task-read-contract.test.ts +9 -0
- package/src/tests/db-task-write-contract.test.ts +9 -0
- package/src/tests/defer-task.test.ts +115 -16
- package/src/tests/dsh-adapter.test.ts +276 -0
- package/src/tests/e2e-nightly-report.test.ts +3 -3
- package/src/tests/e2e-redact.test.ts +2 -0
- package/src/tests/env-flag.test.ts +6 -0
- package/src/tests/extension-agent-visibility.test.ts +474 -0
- package/src/tests/extensions-db.test.ts +41 -0
- package/src/tests/extensions-http.test.ts +148 -4
- package/src/tests/extensions-lifecycle.test.ts +21 -1
- package/src/tests/extensions-mcp-tools.test.ts +9 -5
- package/src/tests/fetch-resolved-env.test.ts +43 -0
- package/src/tests/internal-ai/complete-structured.test.ts +32 -9
- package/src/tests/internal-ai/credentials.test.ts +4 -4
- package/src/tests/internal-ai/models.test.ts +20 -0
- package/src/tests/memory-rate-tool.test.ts +7 -10
- package/src/tests/memory-rater-defaults.test.ts +23 -0
- package/src/tests/memory-rater-e2e.test.ts +2 -3
- package/src/tests/migration-046-budgets.test.ts +2 -0
- package/src/tests/model-control.test.ts +2 -2
- package/src/tests/onboard-compose.test.ts +14 -0
- package/src/tests/onboard-env.test.ts +17 -0
- package/src/tests/onboard-manifest.test.ts +12 -0
- package/src/tests/opus-5-5-registry.test.ts +48 -0
- package/src/tests/pricing-refresh.test.ts +1 -1
- package/src/tests/pricing-routes.test.ts +15 -3
- package/src/tests/provider-registration.test.ts +5 -2
- package/src/tests/rbac-admission-e2e.test.ts +54 -0
- package/src/tests/rbac-e2e-helpers.ts +2 -0
- package/src/tests/rbac-engine.test.ts +32 -0
- package/src/tests/rbac-wire-e2e.test.ts +33 -0
- package/src/tests/reasoning-effort.test.ts +8 -0
- package/src/tests/reload-config.test.ts +33 -0
- package/src/tests/script-connections.test.ts +3 -0
- package/src/tests/session-costs-model-key-normalize.test.ts +1 -0
- package/src/tests/slack-config.test.ts +136 -0
- package/src/tests/slack-mode-lifecycle.test.ts +69 -0
- package/src/tests/slack-render-v2.test.ts +446 -16
- package/src/tests/slack-steering.test.ts +69 -1
- package/src/tests/slack-task-output.test.ts +33 -12
- package/src/tests/status.test.ts +22 -2
- package/src/tests/steering-core.test.ts +35 -0
- package/src/tests/steering-delivery.test.ts +39 -0
- package/src/tests/steering-transport.test.ts +2 -2
- package/src/tests/task-tool-preload-mcp.test.ts +3 -1
- package/src/tests/telemetry-init.test.ts +18 -0
- package/src/tests/workflow-live-recovery.test.ts +126 -0
- package/src/tests/workflow-llm.test.ts +3 -3
- package/src/tools/defer-task.ts +64 -26
- package/src/tools/extension-common.ts +4 -0
- package/src/tools/extension-install.ts +1 -1
- package/src/tools/extension-list.ts +4 -3
- package/src/tools/join-swarm.ts +1 -1
- package/src/tools/schedules/create-schedule.ts +11 -1
- package/src/tools/schedules/patch-schedule.ts +5 -0
- package/src/tools/schedules/update-schedule.ts +5 -0
- package/src/tools/send-task.ts +6 -0
- package/src/tools/utils.ts +1 -1
- package/src/types.ts +30 -8
- package/src/utils/context-window.ts +1 -0
- package/src/utils/credentials.ts +8 -0
- package/src/utils/internal-ai/complete-structured.ts +8 -0
- package/src/utils/internal-ai/models.ts +5 -5
- package/src/utils/memory-raters.ts +3 -0
- package/src/workflows/engine.ts +28 -0
- package/src/workflows/recovery.ts +7 -4
- package/templates/schedules/daily-status-report/content.md +25 -12
- package/templates/schedules/daily-workflow-health-audit/content.md +1 -1
- package/templates/skills/swarm-extensions/content.md +9 -5
- package/dist/cli-4wppfkcm.js +0 -16384
- package/dist/cli-55qrx3q8.js +0 -6041
- package/dist/cli-cg4vnyh4.js +0 -305
- package/dist/cli-jyetr64j.js +0 -52
- package/dist/cli-pp9ax9pa.js +0 -520
- package/dist/cli-qa66qaf0.js +0 -6076
- package/dist/cli-qghpvca2.js +0 -590
- package/dist/cli-rembwgt8.js +0 -861
- package/dist/cli-tcvj7j2r.js +0 -1971
- package/dist/cli-vfcth11k.js +0 -36
- package/dist/cli-w1d1bgkk.js +0 -1422
- package/dist/cli-y6x0gqtg.js +0 -5977
- package/dist/es5-tj3tn4jj.js +0 -844
- package/dist/index-1kq5hw2p.js +0 -467
- package/dist/index-1p8wdstt.js +0 -7
- package/dist/index-8fdjzb2f.js +0 -100
- package/dist/index-bxmwzbgw.js +0 -365
- package/dist/index-nzerxd5z.js +0 -7
- package/dist/index-pyymnzat.js +0 -1168
- package/dist/index-qv6atbab.js +0 -619
- package/dist/index-rja32qa7.js +0 -801
- package/dist/index-tzg5srfp.js +0 -211
- package/dist/index-vhncw983.js +0 -90
- package/dist/index-xk036zsk.js +0 -859
- package/dist/index-zyazbzcb.js +0 -6
- package/dist/{claude-managed-setup-48dwg9bv.js → claude-managed-setup-f5pmsyrp.js} +3 -3
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": "1.
|
|
5
|
+
"version": "1.154.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": [
|
|
@@ -391,6 +391,10 @@
|
|
|
391
391
|
"type": "boolean",
|
|
392
392
|
"default": false
|
|
393
393
|
},
|
|
394
|
+
"deferredAt": {
|
|
395
|
+
"type": "string",
|
|
396
|
+
"format": "date-time"
|
|
397
|
+
},
|
|
394
398
|
"compactionCount": {
|
|
395
399
|
"type": "integer",
|
|
396
400
|
"minimum": 0
|
|
@@ -429,7 +433,8 @@
|
|
|
429
433
|
"devin",
|
|
430
434
|
"claude-managed",
|
|
431
435
|
"opencode",
|
|
432
|
-
"acp"
|
|
436
|
+
"acp",
|
|
437
|
+
"dsh"
|
|
433
438
|
]
|
|
434
439
|
},
|
|
435
440
|
"providerMeta": {
|
|
@@ -499,7 +504,8 @@
|
|
|
499
504
|
"devin",
|
|
500
505
|
"claude-managed",
|
|
501
506
|
"opencode",
|
|
502
|
-
"acp"
|
|
507
|
+
"acp",
|
|
508
|
+
"dsh"
|
|
503
509
|
]
|
|
504
510
|
},
|
|
505
511
|
"capabilities": {
|
|
@@ -646,6 +652,7 @@
|
|
|
646
652
|
"claude-managed",
|
|
647
653
|
"opencode",
|
|
648
654
|
"acp",
|
|
655
|
+
"dsh",
|
|
649
656
|
null
|
|
650
657
|
],
|
|
651
658
|
"default": null
|
|
@@ -976,7 +983,8 @@
|
|
|
976
983
|
"devin",
|
|
977
984
|
"claude-managed",
|
|
978
985
|
"opencode",
|
|
979
|
-
"acp"
|
|
986
|
+
"acp",
|
|
987
|
+
"dsh"
|
|
980
988
|
]
|
|
981
989
|
},
|
|
982
990
|
"harnessProvider": {
|
|
@@ -992,6 +1000,7 @@
|
|
|
992
1000
|
"claude-managed",
|
|
993
1001
|
"opencode",
|
|
994
1002
|
"acp",
|
|
1003
|
+
"dsh",
|
|
995
1004
|
null
|
|
996
1005
|
]
|
|
997
1006
|
},
|
|
@@ -4202,6 +4211,9 @@
|
|
|
4202
4211
|
"api"
|
|
4203
4212
|
]
|
|
4204
4213
|
},
|
|
4214
|
+
"senderLabel": {
|
|
4215
|
+
"type": "string"
|
|
4216
|
+
},
|
|
4205
4217
|
"createdByKind": {
|
|
4206
4218
|
"type": "string",
|
|
4207
4219
|
"enum": [
|
|
@@ -9400,7 +9412,8 @@
|
|
|
9400
9412
|
"devin",
|
|
9401
9413
|
"claude-managed",
|
|
9402
9414
|
"opencode",
|
|
9403
|
-
"acp"
|
|
9415
|
+
"acp",
|
|
9416
|
+
"dsh"
|
|
9404
9417
|
]
|
|
9405
9418
|
},
|
|
9406
9419
|
"harness_provider": {
|
|
@@ -9412,7 +9425,8 @@
|
|
|
9412
9425
|
"devin",
|
|
9413
9426
|
"claude-managed",
|
|
9414
9427
|
"opencode",
|
|
9415
|
-
"acp"
|
|
9428
|
+
"acp",
|
|
9429
|
+
"dsh"
|
|
9416
9430
|
]
|
|
9417
9431
|
},
|
|
9418
9432
|
"runtimeInstanceId": {
|
|
@@ -9546,7 +9560,7 @@
|
|
|
9546
9560
|
},
|
|
9547
9561
|
"get": {
|
|
9548
9562
|
"summary": "List all agents",
|
|
9549
|
-
"description": "Returns agents WITHOUT the six identity-markdown blobs (`claudeMd`/`soulMd`/`identityMd`/`toolsMd`/`heartbeatMd`/`setupScript`) by default — they bloat the list by ~16 KB/agent and the overview never renders them. Pass `fields=full` to restore them, or fetch a single agent via `GET /api/agents/{id}`.",
|
|
9563
|
+
"description": "Returns agents WITHOUT the six identity-markdown blobs (`claudeMd`/`soulMd`/`identityMd`/`toolsMd`/`heartbeatMd`/`setupScript`) by default — they bloat the list by ~16 KB/agent and the overview never renders them. Pass `fields=full` to restore them, or fetch a single agent via `GET /api/agents/{id}`. Extension identities (`ext:<name>`, role `extension`) are never listed; they are API principals, not workers.",
|
|
9550
9564
|
"tags": [
|
|
9551
9565
|
"Agents"
|
|
9552
9566
|
],
|
|
@@ -9687,7 +9701,8 @@
|
|
|
9687
9701
|
"devin",
|
|
9688
9702
|
"claude-managed",
|
|
9689
9703
|
"opencode",
|
|
9690
|
-
"acp"
|
|
9704
|
+
"acp",
|
|
9705
|
+
"dsh"
|
|
9691
9706
|
]
|
|
9692
9707
|
}
|
|
9693
9708
|
},
|
|
@@ -9902,7 +9917,8 @@
|
|
|
9902
9917
|
"codex",
|
|
9903
9918
|
"pi",
|
|
9904
9919
|
"opencode",
|
|
9905
|
-
"acp"
|
|
9920
|
+
"acp",
|
|
9921
|
+
"dsh"
|
|
9906
9922
|
]
|
|
9907
9923
|
},
|
|
9908
9924
|
"model": {
|
|
@@ -10921,6 +10937,7 @@
|
|
|
10921
10937
|
"claude-managed",
|
|
10922
10938
|
"opencode",
|
|
10923
10939
|
"acp",
|
|
10940
|
+
"dsh",
|
|
10924
10941
|
null
|
|
10925
10942
|
]
|
|
10926
10943
|
},
|
|
@@ -10937,6 +10954,7 @@
|
|
|
10937
10954
|
"claude-managed",
|
|
10938
10955
|
"opencode",
|
|
10939
10956
|
"acp",
|
|
10957
|
+
"dsh",
|
|
10940
10958
|
null
|
|
10941
10959
|
]
|
|
10942
10960
|
},
|
|
@@ -11055,6 +11073,7 @@
|
|
|
11055
11073
|
"claude-managed",
|
|
11056
11074
|
"opencode",
|
|
11057
11075
|
"acp",
|
|
11076
|
+
"dsh",
|
|
11058
11077
|
null
|
|
11059
11078
|
]
|
|
11060
11079
|
},
|
|
@@ -11071,6 +11090,7 @@
|
|
|
11071
11090
|
"claude-managed",
|
|
11072
11091
|
"opencode",
|
|
11073
11092
|
"acp",
|
|
11093
|
+
"dsh",
|
|
11074
11094
|
null
|
|
11075
11095
|
]
|
|
11076
11096
|
},
|
|
@@ -15976,6 +15996,7 @@
|
|
|
15976
15996
|
"post": {
|
|
15977
15997
|
"operationId": "extensions_install",
|
|
15978
15998
|
"summary": "Validate and install an extension bundle",
|
|
15999
|
+
"description": "Any authenticated agent can install a disabled draft owned by its agent ID. Workers can update only their own bundles; activation remains lead/operator-only.",
|
|
15979
16000
|
"tags": [
|
|
15980
16001
|
"Extensions"
|
|
15981
16002
|
],
|
|
@@ -16167,6 +16188,7 @@
|
|
|
16167
16188
|
"patch": {
|
|
16168
16189
|
"operationId": "extensions_update",
|
|
16169
16190
|
"summary": "Update extension priority, config, or description",
|
|
16191
|
+
"description": "Workers may edit their own disabled extensions. Leads, operators, and dashboard users retain access to all extensions.",
|
|
16170
16192
|
"tags": [
|
|
16171
16193
|
"Extensions"
|
|
16172
16194
|
],
|
|
@@ -16262,6 +16284,7 @@
|
|
|
16262
16284
|
"delete": {
|
|
16263
16285
|
"operationId": "extensions_delete",
|
|
16264
16286
|
"summary": "Uninstall a disabled extension",
|
|
16287
|
+
"description": "Workers may uninstall their own disabled extensions. Leads, operators, and dashboard users retain access to all extensions.",
|
|
16265
16288
|
"tags": [
|
|
16266
16289
|
"Extensions"
|
|
16267
16290
|
],
|
|
@@ -26676,6 +26699,14 @@
|
|
|
26676
26699
|
"parentTaskId": {
|
|
26677
26700
|
"type": "string"
|
|
26678
26701
|
},
|
|
26702
|
+
"requestedDelayMs": {
|
|
26703
|
+
"type": "integer",
|
|
26704
|
+
"exclusiveMinimum": 0
|
|
26705
|
+
},
|
|
26706
|
+
"requestedRunAt": {
|
|
26707
|
+
"type": "string",
|
|
26708
|
+
"format": "date-time"
|
|
26709
|
+
},
|
|
26679
26710
|
"timezone": {
|
|
26680
26711
|
"type": "string",
|
|
26681
26712
|
"default": "UTC"
|
|
@@ -27033,6 +27064,14 @@
|
|
|
27033
27064
|
"parentTaskId": {
|
|
27034
27065
|
"type": "string"
|
|
27035
27066
|
},
|
|
27067
|
+
"requestedDelayMs": {
|
|
27068
|
+
"type": "integer",
|
|
27069
|
+
"exclusiveMinimum": 0
|
|
27070
|
+
},
|
|
27071
|
+
"requestedRunAt": {
|
|
27072
|
+
"type": "string",
|
|
27073
|
+
"format": "date-time"
|
|
27074
|
+
},
|
|
27036
27075
|
"timezone": {
|
|
27037
27076
|
"type": "string",
|
|
27038
27077
|
"default": "UTC"
|
|
@@ -27217,6 +27256,14 @@
|
|
|
27217
27256
|
"parentTaskId": {
|
|
27218
27257
|
"type": "string"
|
|
27219
27258
|
},
|
|
27259
|
+
"requestedDelayMs": {
|
|
27260
|
+
"type": "integer",
|
|
27261
|
+
"exclusiveMinimum": 0
|
|
27262
|
+
},
|
|
27263
|
+
"requestedRunAt": {
|
|
27264
|
+
"type": "string",
|
|
27265
|
+
"format": "date-time"
|
|
27266
|
+
},
|
|
27220
27267
|
"timezone": {
|
|
27221
27268
|
"type": "string",
|
|
27222
27269
|
"default": "UTC"
|
|
@@ -27444,6 +27491,14 @@
|
|
|
27444
27491
|
"parentTaskId": {
|
|
27445
27492
|
"type": "string"
|
|
27446
27493
|
},
|
|
27494
|
+
"requestedDelayMs": {
|
|
27495
|
+
"type": "integer",
|
|
27496
|
+
"exclusiveMinimum": 0
|
|
27497
|
+
},
|
|
27498
|
+
"requestedRunAt": {
|
|
27499
|
+
"type": "string",
|
|
27500
|
+
"format": "date-time"
|
|
27501
|
+
},
|
|
27447
27502
|
"timezone": {
|
|
27448
27503
|
"type": "string",
|
|
27449
27504
|
"default": "UTC"
|
|
@@ -27686,6 +27741,14 @@
|
|
|
27686
27741
|
"parentTaskId": {
|
|
27687
27742
|
"type": "string"
|
|
27688
27743
|
},
|
|
27744
|
+
"requestedDelayMs": {
|
|
27745
|
+
"type": "integer",
|
|
27746
|
+
"exclusiveMinimum": 0
|
|
27747
|
+
},
|
|
27748
|
+
"requestedRunAt": {
|
|
27749
|
+
"type": "string",
|
|
27750
|
+
"format": "date-time"
|
|
27751
|
+
},
|
|
27689
27752
|
"timezone": {
|
|
27690
27753
|
"type": "string",
|
|
27691
27754
|
"default": "UTC"
|
|
@@ -28048,6 +28111,14 @@
|
|
|
28048
28111
|
"parentTaskId": {
|
|
28049
28112
|
"type": "string"
|
|
28050
28113
|
},
|
|
28114
|
+
"requestedDelayMs": {
|
|
28115
|
+
"type": "integer",
|
|
28116
|
+
"exclusiveMinimum": 0
|
|
28117
|
+
},
|
|
28118
|
+
"requestedRunAt": {
|
|
28119
|
+
"type": "string",
|
|
28120
|
+
"format": "date-time"
|
|
28121
|
+
},
|
|
28051
28122
|
"timezone": {
|
|
28052
28123
|
"type": "string",
|
|
28053
28124
|
"default": "UTC"
|
|
@@ -28431,6 +28502,14 @@
|
|
|
28431
28502
|
"parentTaskId": {
|
|
28432
28503
|
"type": "string"
|
|
28433
28504
|
},
|
|
28505
|
+
"requestedDelayMs": {
|
|
28506
|
+
"type": "integer",
|
|
28507
|
+
"exclusiveMinimum": 0
|
|
28508
|
+
},
|
|
28509
|
+
"requestedRunAt": {
|
|
28510
|
+
"type": "string",
|
|
28511
|
+
"format": "date-time"
|
|
28512
|
+
},
|
|
28434
28513
|
"timezone": {
|
|
28435
28514
|
"type": "string",
|
|
28436
28515
|
"default": "UTC"
|
|
@@ -35819,7 +35898,8 @@
|
|
|
35819
35898
|
"devin",
|
|
35820
35899
|
"claude-managed",
|
|
35821
35900
|
"opencode",
|
|
35822
|
-
"acp"
|
|
35901
|
+
"acp",
|
|
35902
|
+
"dsh"
|
|
35823
35903
|
]
|
|
35824
35904
|
},
|
|
35825
35905
|
"requestedByUserId": {
|
|
@@ -40126,6 +40206,14 @@
|
|
|
40126
40206
|
"parentTaskId": {
|
|
40127
40207
|
"type": "string"
|
|
40128
40208
|
},
|
|
40209
|
+
"requestedDelayMs": {
|
|
40210
|
+
"type": "integer",
|
|
40211
|
+
"exclusiveMinimum": 0
|
|
40212
|
+
},
|
|
40213
|
+
"requestedRunAt": {
|
|
40214
|
+
"type": "string",
|
|
40215
|
+
"format": "date-time"
|
|
40216
|
+
},
|
|
40129
40217
|
"timezone": {
|
|
40130
40218
|
"type": "string",
|
|
40131
40219
|
"default": "UTC"
|
|
@@ -40525,7 +40613,8 @@
|
|
|
40525
40613
|
"devin",
|
|
40526
40614
|
"claude-managed",
|
|
40527
40615
|
"opencode",
|
|
40528
|
-
"acp"
|
|
40616
|
+
"acp",
|
|
40617
|
+
"dsh"
|
|
40529
40618
|
]
|
|
40530
40619
|
},
|
|
40531
40620
|
"providers": {
|
|
@@ -40542,7 +40631,8 @@
|
|
|
40542
40631
|
"devin",
|
|
40543
40632
|
"claude-managed",
|
|
40544
40633
|
"opencode",
|
|
40545
|
-
"acp"
|
|
40634
|
+
"acp",
|
|
40635
|
+
"dsh"
|
|
40546
40636
|
]
|
|
40547
40637
|
},
|
|
40548
40638
|
"state": {
|
|
@@ -40813,7 +40903,8 @@
|
|
|
40813
40903
|
"devin",
|
|
40814
40904
|
"claude-managed",
|
|
40815
40905
|
"opencode",
|
|
40816
|
-
"acp"
|
|
40906
|
+
"acp",
|
|
40907
|
+
"dsh"
|
|
40817
40908
|
]
|
|
40818
40909
|
}
|
|
40819
40910
|
},
|
|
@@ -41188,7 +41279,8 @@
|
|
|
41188
41279
|
"devin",
|
|
41189
41280
|
"claude-managed",
|
|
41190
41281
|
"opencode",
|
|
41191
|
-
"acp"
|
|
41282
|
+
"acp",
|
|
41283
|
+
"dsh"
|
|
41192
41284
|
]
|
|
41193
41285
|
},
|
|
41194
41286
|
"requestedByUserId": {
|
|
@@ -41401,7 +41493,7 @@
|
|
|
41401
41493
|
}
|
|
41402
41494
|
},
|
|
41403
41495
|
"400": {
|
|
41404
|
-
"description": "Validation error",
|
|
41496
|
+
"description": "Validation error, or agentId/offeredTo targets an extension identity",
|
|
41405
41497
|
"content": {
|
|
41406
41498
|
"application/json": {
|
|
41407
41499
|
"schema": {
|
|
@@ -41584,7 +41676,8 @@
|
|
|
41584
41676
|
"pi",
|
|
41585
41677
|
"claude-managed",
|
|
41586
41678
|
"opencode",
|
|
41587
|
-
"acp"
|
|
41679
|
+
"acp",
|
|
41680
|
+
"dsh"
|
|
41588
41681
|
]
|
|
41589
41682
|
},
|
|
41590
41683
|
"model": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@desplega.ai/agent-swarm",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.154.0",
|
|
4
4
|
"description": "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-swarm.dev",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"plugin/commands/",
|
|
42
42
|
"plugin/agents/",
|
|
43
43
|
"plugin/pi-skills/",
|
|
44
|
+
"plugin/opencode-plugins/lib/memory-raters.ts",
|
|
44
45
|
"templates/",
|
|
45
46
|
"vendored-openapi/",
|
|
46
47
|
"openapi.json"
|
|
@@ -188,14 +189,14 @@
|
|
|
188
189
|
"@aws-sdk/client-bedrock": "3.1048.0",
|
|
189
190
|
"@desplega.ai/business-use": "^0.4.2",
|
|
190
191
|
"@desplega.ai/localtunnel": "^2.2.0",
|
|
191
|
-
"@earendil-works/pi-agent-core": "^0.
|
|
192
|
-
"@earendil-works/pi-ai": "^0.
|
|
193
|
-
"@earendil-works/pi-coding-agent": "^0.
|
|
192
|
+
"@earendil-works/pi-agent-core": "^0.87.1",
|
|
193
|
+
"@earendil-works/pi-ai": "^0.87.1",
|
|
194
|
+
"@earendil-works/pi-coding-agent": "^0.87.1",
|
|
194
195
|
"@inkjs/ui": "^2.0.0",
|
|
195
196
|
"@linear/sdk": "^77.0.0",
|
|
196
197
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
197
|
-
"@openai/codex": "0.
|
|
198
|
-
"@opencode-ai/sdk": "^1.18.
|
|
198
|
+
"@openai/codex": "0.156.1",
|
|
199
|
+
"@opencode-ai/sdk": "^1.18.32",
|
|
199
200
|
"@openfort/openfort-node": "^0.9.1",
|
|
200
201
|
"@opentelemetry/api": "^1.9.1",
|
|
201
202
|
"@opentelemetry/exporter-metrics-otlp-http": "^0.218.0",
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Unset enables citation ratings and self-rating hints; an explicitly empty value disables all raters. */
|
|
2
|
+
export function getMemoryRaterNames(): string[] {
|
|
3
|
+
return (process.env.MEMORY_RATERS ?? "implicit-citation,explicit-self")
|
|
4
|
+
.split(",")
|
|
5
|
+
.map((name) => name.trim())
|
|
6
|
+
.filter(Boolean);
|
|
7
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AutomationIntegrationId, ScheduledTask, Workflow } from "@/types";
|
|
2
|
+
import { getSlackConfiguration, isSlackConfigured } from "../slack/config";
|
|
2
3
|
import { getDbClient } from "./db";
|
|
3
4
|
import { getOAuthApp, getOAuthTokens } from "./db-queries/oauth";
|
|
4
5
|
|
|
@@ -281,11 +282,12 @@ export async function getAutomationSetupStates(): Promise<AutomationSetupStates>
|
|
|
281
282
|
present(process.env.GSC_SERVICE_ACCOUNT_JSON);
|
|
282
283
|
|
|
283
284
|
return {
|
|
285
|
+
// Credential presence is configuration evidence, not proof that inbound
|
|
286
|
+
// Slack traffic has been observed successfully.
|
|
287
|
+
// HTTP credentials alone cannot run Slack automations before its receiver lands.
|
|
284
288
|
slack:
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
present(process.env.SLACK_APP_TOKEN)
|
|
288
|
-
? "verified"
|
|
289
|
+
getSlackConfiguration().mode === "socket" && isSlackConfigured()
|
|
290
|
+
? "configured"
|
|
289
291
|
: "unverified",
|
|
290
292
|
github:
|
|
291
293
|
present(process.env.GITHUB_WEBHOOK_SECRET) &&
|
package/src/be/db/agents.ts
CHANGED
|
@@ -206,8 +206,79 @@ export async function getAgentById(id: string): Promise<Agent | null> {
|
|
|
206
206
|
return row ? rowToAgent(row) : null;
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
-
|
|
210
|
-
|
|
209
|
+
/**
|
|
210
|
+
* Role stamped on the `ext:<name>` agent row an extension authenticates as
|
|
211
|
+
* (`src/extensions/identity.ts`). These rows are API identities, not workers:
|
|
212
|
+
* they are hidden from agent listings and can never be assigned, offered, or
|
|
213
|
+
* claim tasks. The rows themselves are kept so the extension can keep calling
|
|
214
|
+
* the API and re-enabling it finds the same identity.
|
|
215
|
+
*/
|
|
216
|
+
export const EXTENSION_AGENT_ROLE = "extension";
|
|
217
|
+
|
|
218
|
+
/** SQL predicate that drops extension-identity rows from an `agents` scan. */
|
|
219
|
+
export const NOT_EXTENSION_AGENT_SQL = `COALESCE(role, '') != '${EXTENSION_AGENT_ROLE}'`;
|
|
220
|
+
|
|
221
|
+
export function isExtensionAgent(agent: Pick<Agent, "role"> | null | undefined): boolean {
|
|
222
|
+
return agent?.role === EXTENSION_AGENT_ROLE;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export function extensionAgentAssignmentError(agent: Pick<Agent, "id" | "name">): string {
|
|
226
|
+
return `Agent "${agent.name}" (${agent.id}) is an extension identity and cannot be assigned, offered, or scheduled tasks. Target a worker or lead agent instead.`;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Thrown when an ordinary registration or profile update tries to grant the
|
|
231
|
+
* reserved extension role, or to strip it from an extension identity. Only
|
|
232
|
+
* `ensureExtensionAgent` may set it.
|
|
233
|
+
*/
|
|
234
|
+
export class ReservedAgentRoleError extends Error {
|
|
235
|
+
constructor(message: string) {
|
|
236
|
+
super(message);
|
|
237
|
+
this.name = "ReservedAgentRoleError";
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Returns the reason a role change is refused, or null when it is allowed.
|
|
243
|
+
* `allowExtensionRole` is passed only by the extension identity lifecycle.
|
|
244
|
+
*/
|
|
245
|
+
export function reservedRoleViolation(
|
|
246
|
+
currentRole: string | null | undefined,
|
|
247
|
+
nextRole: string | undefined,
|
|
248
|
+
opts?: { allowExtensionRole?: boolean },
|
|
249
|
+
): string | null {
|
|
250
|
+
if (nextRole === undefined || nextRole === currentRole) return null;
|
|
251
|
+
if (currentRole === EXTENSION_AGENT_ROLE) {
|
|
252
|
+
return `Extension identities keep the "${EXTENSION_AGENT_ROLE}" role; it cannot be changed.`;
|
|
253
|
+
}
|
|
254
|
+
if (nextRole === EXTENSION_AGENT_ROLE && !opts?.allowExtensionRole) {
|
|
255
|
+
return `Role "${EXTENSION_AGENT_ROLE}" is reserved for extension identities.`;
|
|
256
|
+
}
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/** Thrown by task creation when the assignee or offer target is an extension identity. */
|
|
261
|
+
export class ExtensionAgentAssignmentError extends Error {
|
|
262
|
+
constructor(agent: Pick<Agent, "id" | "name">) {
|
|
263
|
+
super(extensionAgentAssignmentError(agent));
|
|
264
|
+
this.name = "ExtensionAgentAssignmentError";
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Lists agents ordered by name. Extension identities are excluded unless
|
|
270
|
+
* `includeExtensions` is set; only the extension identity lifecycle and
|
|
271
|
+
* name-collision checks need them.
|
|
272
|
+
*/
|
|
273
|
+
export async function getAllAgents(opts?: {
|
|
274
|
+
slim?: boolean;
|
|
275
|
+
includeExtensions?: boolean;
|
|
276
|
+
}): Promise<Agent[]> {
|
|
277
|
+
const rows = await getDbClient().query<AgentRow>(
|
|
278
|
+
opts?.includeExtensions
|
|
279
|
+
? "SELECT * FROM agents ORDER BY name"
|
|
280
|
+
: `SELECT * FROM agents WHERE ${NOT_EXTENSION_AGENT_SQL} ORDER BY name`,
|
|
281
|
+
);
|
|
211
282
|
return rows.map((row) => rowToAgent(row, opts?.slim ?? false));
|
|
212
283
|
}
|
|
213
284
|
|
|
@@ -529,6 +600,8 @@ export function isAgentEligibleForTask(
|
|
|
529
600
|
agent: Pick<Agent, "id" | "isLead" | "role" | "capabilities">,
|
|
530
601
|
task: Pick<AgentTask, "routingAffinity" | "routingAffinityInvalid">,
|
|
531
602
|
): boolean {
|
|
603
|
+
// Extension identities are API principals, never task executors.
|
|
604
|
+
if (isExtensionAgent(agent)) return false;
|
|
532
605
|
const affinity = task.routingAffinity;
|
|
533
606
|
// A malformed persisted blob is a security boundary failure, not an
|
|
534
607
|
// untagged task. Quarantine it from every assignment/claim path.
|
package/src/be/db/tasks/read.ts
CHANGED
|
@@ -103,6 +103,7 @@ export type AgentTaskRow = {
|
|
|
103
103
|
peakContextTokens: number | null;
|
|
104
104
|
contextWindowSize: number | null;
|
|
105
105
|
was_paused: number;
|
|
106
|
+
deferredAt: string | null;
|
|
106
107
|
credentialKeySuffix: string | null;
|
|
107
108
|
credentialKeyType: string | null;
|
|
108
109
|
requestedByUserId: string | null;
|
|
@@ -228,6 +229,7 @@ export function rowToAgentTask(row: AgentTaskRow): AgentTask {
|
|
|
228
229
|
output: row.output ?? undefined,
|
|
229
230
|
progress: row.progress ?? undefined,
|
|
230
231
|
wasPaused: !!row.was_paused,
|
|
232
|
+
deferredAt: row.deferredAt ?? undefined,
|
|
231
233
|
credentialKeySuffix: row.credentialKeySuffix ?? undefined,
|
|
232
234
|
credentialKeyType: row.credentialKeyType ?? undefined,
|
|
233
235
|
requestedByUserId: row.requestedByUserId ?? undefined,
|
package/src/be/db/tasks/write.ts
CHANGED
|
@@ -326,7 +326,7 @@ export async function updateTaskTitle(
|
|
|
326
326
|
export async function completeTask(
|
|
327
327
|
id: string,
|
|
328
328
|
output?: string,
|
|
329
|
-
options?: { addTags?: string[] },
|
|
329
|
+
options?: { addTags?: string[]; deferredAt?: string },
|
|
330
330
|
): Promise<AgentTask | null> {
|
|
331
331
|
const oldTask = await getTaskById(id);
|
|
332
332
|
if (!oldTask) return null;
|
|
@@ -364,6 +364,12 @@ export async function completeTask(
|
|
|
364
364
|
[JSON.stringify(nextTags), id],
|
|
365
365
|
);
|
|
366
366
|
}
|
|
367
|
+
if (completed && options?.deferredAt) {
|
|
368
|
+
completed = await getDbClient().get<AgentTaskRow>(
|
|
369
|
+
"UPDATE agent_tasks SET deferredAt = ?, lastUpdatedAt = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ? RETURNING *",
|
|
370
|
+
[options.deferredAt, id],
|
|
371
|
+
);
|
|
372
|
+
}
|
|
367
373
|
if (completed) {
|
|
368
374
|
await dependencies.reconcileTaskPullRequestAttachments(id, completed.agentId, [
|
|
369
375
|
completed.output,
|