@desplega.ai/agent-swarm 1.158.0 → 1.160.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 +1 -1
- package/dist/{acp-adapter-xaq4n6pc.js → acp-adapter-2mjwcsfh.js} +124 -27
- package/dist/{actions-p9hz5yat.js → actions-e43rxskr.js} +35 -30
- package/dist/{anthropic-messages-51pz26qe.js → anthropic-messages-5qx80j9k.js} +106 -16
- package/dist/{app-g26wdcz6.js → app-mc7xfagn.js} +12 -10
- package/dist/{assistant-wydfqkb3.js → assistant-sedkzv3b.js} +42 -31
- package/dist/{azure-openai-responses-8gksqtmz.js → azure-openai-responses-nfb21z9a.js} +13 -14
- package/dist/{boot-reembed-se8zmdcp.js → boot-reembed-cqz9swn5.js} +13 -12
- package/dist/{boot-reembed-g5ckg9yb.js → boot-reembed-m3656j2n.js} +14 -13
- package/dist/{boot-scrub-logs-wfxqan61.js → boot-scrub-logs-xbxf5d7w.js} +11 -9
- package/dist/boot-seeds-gsetbs5y.js +28 -0
- package/dist/{claude-adapter-tv2x4f36.js → claude-adapter-dc6289mc.js} +28 -23
- package/dist/{claude-managed-adapter-41b2s7fd.js → claude-managed-adapter-naaw51me.js} +4 -3
- package/dist/{claude-managed-setup-60g8aazx.js → claude-managed-setup-eacvchx0.js} +12 -3
- package/dist/claude-sdk-session-bqp2xvym.js +29722 -0
- package/dist/{cli-987hg0aa.js → cli-0jwe9034.js} +2 -2
- package/dist/{cli-vj6h9kc2.js → cli-0m7wct0d.js} +59 -1
- package/dist/{cli-c07r9a2m.js → cli-0q3avq3s.js} +12 -11
- package/dist/{cli-19jenss3.js → cli-0wgxmwf6.js} +31 -10
- package/dist/cli-0x01kwrd.js +491 -0
- package/dist/cli-0xqde53b.js +176 -0
- package/dist/cli-10nhj6xq.js +8355 -0
- package/dist/{cli-tt9k8r35.js → cli-12tszpk9.js} +479 -910
- package/dist/{cli-5b6b62tz.js → cli-13hw4z91.js} +1 -1
- package/dist/{cli-cqt19wg6.js → cli-1a2j50m0.js} +11 -2
- package/dist/{cli-xberxa1r.js → cli-25fcq4b4.js} +2 -2
- package/dist/{cli-npssxgaz.js → cli-2pdaysab.js} +52 -2
- package/dist/cli-3qhyh31j.js +166 -0
- package/dist/cli-447dt1h3.js +3828 -0
- package/dist/cli-4derpgyk.js +115 -0
- package/dist/{cli-00w2c66p.js → cli-523679eh.js} +13 -2
- package/dist/{cli-y95wp3tg.js → cli-58e8yr0d.js} +1 -1
- package/dist/{cli-24k806sc.js → cli-5nbmpy8w.js} +3 -3
- package/dist/{cli-53sz8gkz.js → cli-6cs6wzxt.js} +1 -1
- package/dist/cli-741yb0xx.js +1027 -0
- package/dist/cli-74h9hscv.js +69 -0
- package/dist/cli-7cxw8b60.js +14910 -0
- package/dist/{cli-xhaeg2nc.js → cli-7e398j1h.js} +1 -1
- package/dist/cli-7kyk9jr3.js +22 -0
- package/dist/cli-89s4ngw3.js +183 -0
- package/dist/{cli-9b13ggd1.js → cli-89v6kyq7.js} +1 -0
- package/dist/{cli-ftfvggzx.js → cli-9hsgwz4w.js} +1045 -581
- package/dist/{cli-rqz8qbw7.js → cli-a8dvhzrt.js} +59 -20
- package/dist/{cli-j57qkrpq.js → cli-azhgzetg.js} +395 -56
- package/dist/cli-br0qdrnp.js +2150 -0
- package/dist/{cli-rj19hc34.js → cli-btfv8y88.js} +1 -1
- package/dist/{cli-8qmme6vd.js → cli-c8a36vcc.js} +2 -2
- package/dist/cli-cpvsaqsw.js +333 -0
- package/dist/cli-d5czme6m.js +17805 -0
- package/dist/{cli-h38x0qhg.js → cli-et8m9xsv.js} +4 -3
- package/dist/{cli-x24pshtq.js → cli-evvtk35y.js} +6 -6
- package/dist/{cli-7s3syk22.js → cli-f8gy6r2r.js} +5 -5
- package/dist/{cli-zt1227k1.js → cli-fkqhbg8g.js} +5 -3
- package/dist/{cli-9httdpyq.js → cli-g2whhdrf.js} +1 -1
- package/dist/cli-gt4hxb8p.js +99 -0
- package/dist/{cli-s8eet254.js → cli-jajnsm8q.js} +37184 -53838
- package/dist/{cli-7gtvvpbh.js → cli-jayjpjmb.js} +21 -12
- package/dist/{cli-68w09sjw.js → cli-jyk0ynw2.js} +27 -89
- package/dist/{cli-aehm1rbq.js → cli-jz4w45qt.js} +1152 -61
- package/dist/cli-kmcpfwn2.js +333856 -0
- package/dist/{cli-4198qc9v.js → cli-ktmyrtpn.js} +19 -3
- package/dist/{cli-j55n64b6.js → cli-mfe5btp9.js} +505 -189
- package/dist/{cli-q67y4wzm.js → cli-phsaj4xq.js} +24 -2
- package/dist/{cli-1hkrch3k.js → cli-pm1rst0h.js} +46 -7
- package/dist/{cli-pw9rj5t9.js → cli-pqetb83f.js} +1 -176
- package/dist/{cli-ggm92wcn.js → cli-ptr8h7kp.js} +20 -1
- package/dist/{cli-s8s499xy.js → cli-qbksc292.js} +3 -2
- package/dist/{cli-47m6dkd3.js → cli-qydf22qq.js} +597 -346
- package/dist/{cli-3gmcwfyx.js → cli-r1mxd1xh.js} +13 -6
- package/dist/cli-rb9m6rpe.js +4980 -0
- package/dist/cli-rykfmgwg.js +102 -0
- package/dist/{cli-5d10vd2m.js → cli-shkxm1vn.js} +6 -5
- package/dist/{cli-eetrvv91.js → cli-t3p77qk1.js} +1 -1
- package/dist/cli-tfky2838.js +756 -0
- package/dist/{cli-g8djp6qe.js → cli-tmqt7dpj.js} +40 -0
- package/dist/{cli-fgqxwrpv.js → cli-tpq83z89.js} +1631 -127
- package/dist/cli-trc24wk2.js +143 -0
- package/dist/{cli-aky8tctm.js → cli-tzx2ke1v.js} +3 -3
- package/dist/cli-v7fn5gms.js +1425 -0
- package/dist/{cli-wscdvcqz.js → cli-vctdqs5h.js} +1 -1
- package/dist/{cli-cw9zck8j.js → cli-xjcywfsf.js} +8 -4
- package/dist/{cli-k0g1sjzm.js → cli-ybgv4kw2.js} +18 -11
- package/dist/{cli-rjehvrts.js → cli-ydmcgve1.js} +8 -8
- package/dist/{cli-vhjwh6cz.js → cli-ygwm91nt.js} +1 -1
- package/dist/{cli-mcnhgnn1.js → cli-ykk5jaax.js} +184 -26
- package/dist/{cli-de1396j2.js → cli-ywybs5as.js} +7 -1
- package/dist/cli-zpep9q5e.js +491 -0
- package/dist/cli.js +41 -32
- package/dist/cloudflare-workers-ai-system-one-k6fbxw9d.js +46 -0
- package/dist/{codex-adapter-cnm8wk11.js → codex-adapter-nmxcatww.js} +26 -17
- package/dist/{codex-hook-9hptmdhj.js → codex-hook-20me6byw.js} +2 -2
- package/dist/{codex-login-x3jk4etn.js → codex-login-w6fz4xbz.js} +50 -5
- package/dist/{codex-session-runner-gfg547zj.js → codex-session-runner-90aa80ev.js} +24 -17
- package/dist/{commands-e3bn0p75.js → commands-8wcq1kn7.js} +11 -9
- package/dist/{db-03v9kzr2.js → db-j40kc4se.js} +25 -11
- package/dist/{devin-adapter-8vgkwh29.js → devin-adapter-dpsv6hd9.js} +1 -1
- package/dist/{dispatcher-nrmg8yht.js → dispatcher-4zqy768d.js} +34 -29
- package/dist/{dsh-adapter-k03nfqa6.js → dsh-adapter-mpnzgztj.js} +3 -3
- package/dist/{e2b-93x1k0j5.js → e2b-ez07znam.js} +4 -3
- package/dist/execute-6e7qeyk4.js +1017 -0
- package/dist/{google-generative-ai-bxmv50nc.js → google-generative-ai-k6n5nbpp.js} +6 -5
- package/dist/{google-vertex-809af514.js → google-vertex-44xxtcvp.js} +6 -5
- package/dist/{handlers-aqcedbyb.js → handlers-kjdce1w5.js} +37 -32
- package/dist/{hook-ybvmrmhq.js → hook-czx13n12.js} +19 -15
- package/dist/{hook-7vkskkre.js → hook-r2t4bqfg.js} +18 -14
- package/dist/{http-2eqa8t24.js → http-3bbb19be.js} +900 -145
- package/dist/{index-f6cryxwe.js → index-4a5njnm1.js} +2 -59
- package/dist/{index-x71bvq0p.js → index-668me3f0.js} +35 -30
- package/dist/{index-c6zsv1bd.js → index-7aj368tw.js} +13 -12
- package/dist/{index-1yks3qcr.js → index-fg0dsp6c.js} +34 -29
- package/dist/{index-chgdkq36.js → index-kkv84jq9.js} +34 -29
- package/dist/{index-a3vn96n8.js → index-zg7vp46x.js} +198 -54
- package/dist/{keepalive-vtkf5n99.js → keepalive-yra8dy57.js} +13 -11
- package/dist/{lead-h3sp357x.js → lead-va0pad2c.js} +54 -49
- package/dist/llama-cpp-classify-tgj35k8d.js +335 -0
- package/dist/{maintenance-jzeqtk3q.js → maintenance-hqewtmyg.js} +14 -13
- package/dist/{mistral-conversations-zx0kn554.js → mistral-conversations-pc3ntnxt.js} +14 -17
- package/dist/{oauth-refresh-sweep-qp3dzmdp.js → oauth-refresh-sweep-7rdt1m9n.js} +12 -10
- package/dist/{onboard-tmsp0qbz.js → onboard-j6ms6d0x.js} +6 -5
- package/dist/{openai-codex-responses-4vjqzvjp.js → openai-codex-responses-bbancrr0.js} +21 -8
- package/dist/{openai-completions-9hjrqbw8.js → openai-completions-jpaj5g2b.js} +9 -12
- package/dist/{openai-responses-7b1pn0xt.js → openai-responses-200k1wx4.js} +23 -18
- package/dist/{opencode-adapter-x6x2da1z.js → opencode-adapter-89rabkw2.js} +8 -7
- package/dist/{openrouter-images-9f9ek4rw.js → openrouter-images-8yx3487g.js} +5 -7
- package/dist/{otel-impl-9mz73q65.js → otel-impl-a792rjz0.js} +1 -1
- package/dist/{pi-messages-txpjj39q.js → pi-messages-vxdt8v7j.js} +2 -1
- package/dist/{pi-mono-adapter-m6dvv0dz.js → pi-mono-adapter-g7qzvr3v.js} +295 -70
- package/dist/pricing-refresh-wx0tp7cb.js +39 -0
- package/dist/quickjs-r1pq2107.wasm +0 -0
- package/dist/{rbac-roles-c9wqz83x.js → rbac-roles-8tzawacv.js} +12 -10
- package/dist/{render-v2-gryrh9h8.js → render-v2-mm7zswb8.js} +12 -10
- package/dist/runtime-zyssgse0.js +24 -0
- package/dist/{setup-q9720bt6.js → setup-8y70ys6t.js} +6 -5
- package/dist/typesafe-system-one-2ef30pec.js +27 -0
- package/dist/{virtual-modules-3htpgn8x.js → virtual-modules-6nmk7h3n.js} +22 -13
- package/dist/{work-objects-b76x7deb.js → work-objects-fg6xkb0n.js} +37 -32
- package/dist/{worker-6vrxbv41.js → worker-wmwhxsph.js} +54 -49
- package/openapi.json +1314 -91
- package/package.json +12 -11
- package/src/be/db/agents.ts +20 -0
- package/src/be/db/api-keys.ts +70 -0
- package/src/be/db/tasks/human-free.ts +442 -0
- package/src/be/db/tasks/read.ts +56 -1
- package/src/be/db/tasks/write.ts +107 -11
- package/src/be/db.ts +274 -188
- package/src/be/harness-model-support.ts +182 -0
- package/src/be/human-free-drain.ts +67 -0
- package/src/be/memory/providers/sqlite-store.ts +51 -15
- package/src/be/migrations/182_task_human_free_flag.sql +63 -0
- package/src/be/migrations/183_human_free_reclassify_queue.sql +25 -0
- package/src/be/migrations/184_model_catalog.sql +120 -0
- package/src/be/migrations/185_api_key_auth_failures.sql +6 -0
- package/src/be/migrations/186_api_key_seat_mismatch.sql +8 -0
- package/src/be/model-catalog-store.ts +644 -0
- package/src/be/model-tier-keys.ts +46 -0
- package/src/be/model-tier-resolution.ts +534 -0
- package/src/be/model-validation.ts +188 -0
- package/src/be/models-catalog.ts +61 -7
- package/src/be/modelsdev-cache.json +82 -0
- package/src/be/modelsdev-cache.ts +2 -0
- package/src/be/pricing-refresh.ts +154 -12
- package/src/be/scripts/typecheck.ts +15 -0
- package/src/be/seed/runner.ts +18 -12
- package/src/be/seed/types.ts +1 -0
- package/src/be/seed-scripts/catalog/task-failure-audit.ts +61 -9
- package/src/be/swarm-config-guard.ts +8 -0
- package/src/cli.tsx +10 -0
- package/src/commands/claude-managed-setup.ts +3 -1
- package/src/commands/codex-login.ts +67 -0
- package/src/commands/credential-outcome-report.ts +191 -0
- package/src/commands/rate-limit-outcome.ts +34 -4
- package/src/commands/runner.ts +357 -186
- package/src/commands/seat-mismatch-report.ts +46 -0
- package/src/extensions/apply-task-create.ts +27 -1
- package/src/extensions/contract-types.generated.ts +1 -1
- package/src/heartbeat/heartbeat.ts +79 -17
- package/src/heartbeat/templates.ts +2 -2
- package/src/http/agents.ts +62 -1
- package/src/http/api-keys.ts +140 -2
- package/src/http/codex-oauth-keep-warm.ts +3 -5
- package/src/http/index.ts +8 -0
- package/src/http/memory.ts +12 -5
- package/src/http/models-catalog.ts +357 -8
- package/src/http/poll.ts +54 -3
- package/src/http/schedules.ts +51 -6
- package/src/http/script-runs.ts +12 -0
- package/src/http/session-data.ts +2 -5
- package/src/http/stats.ts +6 -8
- package/src/http/status.ts +15 -1
- package/src/http/tasks.ts +90 -7
- package/src/http/usage-cache.ts +56 -15
- package/src/http/workflows.ts +46 -8
- package/src/mcp-client/http-client.ts +5 -0
- package/src/memory/recall-query.ts +74 -0
- package/src/prompts/base-prompt.ts +15 -4
- package/src/prompts/session-templates.ts +23 -1
- package/src/providers/acp-adapter.ts +1 -0
- package/src/providers/claude-adapter.ts +14 -5
- package/src/providers/claude-managed-adapter.ts +1 -0
- package/src/providers/claude-managed-models.ts +47 -161
- package/src/providers/claude-sdk-session.ts +3 -1
- package/src/providers/codex-adapter.ts +14 -14
- package/src/providers/codex-models.ts +65 -198
- package/src/providers/devin-adapter.ts +1 -0
- package/src/providers/dsh-adapter.ts +2 -1
- package/src/providers/harness-version.ts +83 -7
- package/src/providers/opencode-adapter.ts +53 -1
- package/src/providers/pi-binary-root/src/extensions/codemode/worker.ts +11 -0
- package/src/providers/pi-codemode-runtime.ts +17 -0
- package/src/providers/pi-mono-adapter.ts +361 -83
- package/src/providers/pi-mono-extension.ts +16 -1
- package/src/providers/reasoning-effort.ts +44 -140
- package/src/providers/types.ts +8 -0
- package/src/rbac/legacy-policy.ts +43 -0
- package/src/rbac/permissions.ts +15 -0
- package/src/scripts-runtime/sdk-allowlist.ts +4 -0
- package/src/scripts-runtime/types/stdlib.d.ts +15 -0
- package/src/scripts-runtime/types/swarm-extension.d.ts +3 -0
- package/src/scripts-runtime/types/swarm-sdk.d.ts +15 -0
- package/src/server.ts +6 -0
- package/src/slack/assistant.ts +13 -0
- package/src/slack/message-text.ts +56 -2
- package/src/slack/render-v2.ts +87 -37
- package/src/slack/session-status.ts +541 -0
- package/src/slack/thread-buffer.ts +10 -2
- package/src/tasks/sibling-awareness.ts +3 -2
- package/src/telemetry.ts +5 -4
- package/src/templates.d.ts +6 -0
- package/src/tests/agents-list-model-display.test.ts +4 -6
- package/src/tests/api-key-auth-failure-route.test.ts +142 -0
- package/src/tests/api-key-tracking.test.ts +368 -1
- package/src/tests/base-prompt.test.ts +43 -2
- package/src/tests/claude-adapter.test.ts +68 -0
- package/src/tests/claude-managed-adapter.test.ts +12 -18
- package/src/tests/codex-adapter.test.ts +2 -1
- package/src/tests/codex-auth-failure.test.ts +52 -0
- package/src/tests/codex-gpt6-release.test.ts +66 -5
- package/src/tests/codex-login.test.ts +116 -0
- package/src/tests/context-window.test.ts +7 -5
- package/src/tests/credential-exhaustion-policy.test.ts +118 -3
- package/src/tests/credential-outcome-report.test.ts +171 -0
- package/src/tests/credential-status-api.test.ts +103 -2
- package/src/tests/db-extraction-contract.test.ts +1 -0
- package/src/tests/db-task-read-contract.test.ts +10 -1
- package/src/tests/db-task-write-contract.test.ts +535 -2
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/dokploy-deploy.test.ts +315 -0
- package/src/tests/dsh-adapter.test.ts +1 -1
- package/src/tests/explicit-model-validation.test.ts +583 -0
- package/src/tests/extensions-pre-task.test.ts +73 -0
- package/src/tests/fetch-resolved-env.test.ts +46 -0
- package/src/tests/hang-watchdog-worker.ts +47 -0
- package/src/tests/hang-watchdog.test.ts +45 -0
- package/src/tests/hang-watchdog.ts +30 -0
- package/src/tests/harness-model-guard.test.ts +123 -0
- package/src/tests/harness-model-support.test.ts +374 -0
- package/src/tests/harness-version.test.ts +70 -3
- package/src/tests/heartbeat-checklist-config.test.ts +71 -0
- package/src/tests/heartbeat-checklist.test.ts +4 -2
- package/src/tests/heartbeat-orphan-resume.test.ts +48 -0
- package/src/tests/http-task-write-ownership.test.ts +172 -0
- package/src/tests/human-free-flag.test.ts +279 -0
- package/src/tests/human-free-oracle.ts +57 -0
- package/src/tests/human-free-reclassify.test.ts +669 -0
- package/src/tests/memory-fts-populate.test.ts +139 -0
- package/src/tests/memory-http-recall-gating.test.ts +125 -1
- package/src/tests/migration-046-budgets.test.ts +3 -3
- package/src/tests/model-catalog-migration.test.ts +134 -0
- package/src/tests/model-catalog-table.test.ts +249 -0
- package/src/tests/model-catalog-write-access.test.ts +387 -0
- package/src/tests/model-rate-limit-windows.test.ts +19 -0
- package/src/tests/model-tier-resolution.test.ts +611 -0
- package/src/tests/models-catalog.test.ts +1 -1
- package/src/tests/multi-runtime-enabled-stats.test.ts +65 -1
- package/src/tests/opencode-adapter.test.ts +157 -2
- package/src/tests/package-publish.test.ts +137 -36
- package/src/tests/pi-codemode.test.ts +246 -0
- package/src/tests/pi-mono-adapter.test.ts +3 -0
- package/src/tests/pi-native-mcp.test.ts +193 -0
- package/src/tests/pi-tool-exposure.test.ts +374 -0
- package/src/tests/preload.ts +3 -0
- package/src/tests/pricing-routes.test.ts +2 -2
- package/src/tests/prompt-template-session.test.ts +5 -3
- package/src/tests/rate-limit-event.test.ts +65 -0
- package/src/tests/rate-limit-outcome.test.ts +90 -0
- package/src/tests/rbac-engine.test.ts +77 -3
- package/src/tests/reasoning-effort.test.ts +109 -0
- package/src/tests/refresh-modelsdev-carryforward.test.ts +5 -5
- package/src/tests/runner-key-completion-outcome.test.ts +112 -0
- package/src/tests/runner-key-outcome-late-reset.test.ts +224 -0
- package/src/tests/runner-registration-retry.test.ts +149 -0
- package/src/tests/runtime-model-catalog.test.ts +86 -0
- package/src/tests/script-connections.test.ts +9 -0
- package/src/tests/seat-mismatch-report.test.ts +85 -0
- package/src/tests/seed-scripts.test.ts +138 -0
- package/src/tests/seed.test.ts +25 -0
- package/src/tests/session-costs.test.ts +14 -11
- package/src/tests/slack-message-text.test.ts +101 -0
- package/src/tests/slack-render-v2.test.ts +96 -0
- package/src/tests/slack-session-status.test.ts +626 -0
- package/src/tests/slack-thread-buffer-context.test.ts +93 -0
- package/src/tests/status.test.ts +29 -0
- package/src/tests/steering-promotion.test.ts +51 -0
- package/src/tests/store-progress-ownership.test.ts +136 -0
- package/src/tests/subscription-plans.test.ts +28 -0
- package/src/tests/task-cascade-fail.test.ts +148 -2
- package/src/tests/task-citations.test.ts +3 -2
- package/src/tests/tool-annotations.test.ts +1 -1
- package/src/tests/usage-cache.test.ts +166 -0
- package/src/tests/workflow-agent-task.test.ts +30 -0
- package/src/tests/workflow-executors.test.ts +5 -2
- package/src/tests/workflow-system-one-decision-review.test.ts +1021 -0
- package/src/tests/workflow-system-one-decision-save-warnings.test.ts +365 -0
- package/src/tests/workflow-system-one-decision.test.ts +2063 -0
- package/src/tests/workflow-triggers-v2.test.ts +320 -0
- package/src/tools/model-catalog/index.ts +137 -0
- package/src/tools/schedules/create-schedule.ts +17 -2
- package/src/tools/schedules/patch-schedule.ts +31 -1
- package/src/tools/schedules/update-schedule.ts +31 -1
- package/src/tools/send-task.ts +18 -1
- package/src/tools/store-progress.ts +49 -4
- package/src/tools/task-action.ts +14 -1
- package/src/tools/tool-config.ts +3 -1
- package/src/tools/workflows/create-workflow.ts +17 -4
- package/src/tools/workflows/patch-workflow-node.ts +17 -7
- package/src/tools/workflows/patch-workflow.ts +9 -2
- package/src/tools/workflows/update-workflow.ts +17 -4
- package/src/types.ts +41 -1
- package/src/utils/codex-auth-failure.ts +34 -0
- package/src/utils/context-window.ts +47 -53
- package/src/utils/credentials.ts +72 -30
- package/src/utils/error-tracker.ts +80 -0
- package/src/utils/harness-cli-version.ts +115 -0
- package/src/utils/harness-model-error.ts +33 -0
- package/src/utils/model-rate-limit-windows.ts +12 -0
- package/src/utils/runtime-model-catalog.ts +152 -0
- package/src/utils/spawn-model-guard.ts +43 -0
- package/src/utils/subscription-plans.ts +22 -0
- package/src/workflows/approval-resolution.ts +39 -0
- package/src/workflows/definition.ts +7 -0
- package/src/workflows/engine.ts +69 -1
- package/src/workflows/executors/agent-task.ts +16 -6
- package/src/workflows/executors/base.ts +53 -0
- package/src/workflows/executors/human-in-the-loop.ts +8 -8
- package/src/workflows/executors/index.ts +1 -0
- package/src/workflows/executors/registry.ts +2 -0
- package/src/workflows/executors/system-one-decision.ts +1232 -0
- package/src/workflows/executors/system-one-providers.ts +301 -0
- package/src/workflows/executors/workflow-llm.ts +13 -1
- package/src/workflows/model-validation.ts +45 -0
- package/src/workflows/patch-definition.ts +5 -0
- package/src/workflows/readiness.ts +86 -0
- package/src/workflows/recovery.ts +12 -12
- package/src/workflows/resume.ts +23 -9
- package/src/workflows/triggers.ts +85 -0
- package/templates/schedules/daily-blocker-digest/content.md +4 -5
- package/templates/skills/agent-browser/SKILL.md +6 -5
- package/templates/skills/agent-browser/content.md +6 -5
- package/templates/skills/heartbeat-runbook/config.json +1 -1
- package/templates/skills/heartbeat-runbook/content.md +2 -2
- package/templates/skills/swarm-scripts/SKILL.md +1 -1
- package/templates/skills/swarm-scripts/content.md +1 -1
- package/templates/skills/workflow-iterate/content.md +82 -1
- package/templates/workflows/claude-code-changelog-watch/content.md +2 -0
- package/templates/workflows/pr-review-status-sweep/content.md +2 -0
- package/dist/boot-seeds-s3q01xj3.js +0 -26
- package/dist/claude-sdk-session-t442qz6f.js +0 -39108
- package/dist/cli-0xjkj1j7.js +0 -61
- package/dist/cli-20cj37vt.js +0 -335561
- package/dist/cli-2djtr51b.js +0 -48
- package/dist/cli-65hjmev5.js +0 -1141
- package/dist/cli-aw1jwp1r.js +0 -14075
- package/dist/cli-h967nb6r.js +0 -6603
- package/dist/cli-vapyk8sw.js +0 -20
- package/dist/cli-ws6rqycm.js +0 -247
- package/dist/pricing-refresh-v1cbr9te.js +0 -27
- package/src/providers/modelsdev-reasoning.json +0 -6453
- package/dist/{index-f24115ge.js → index-2wsdsnmm.js} +3 -3
package/src/be/db/tasks/read.ts
CHANGED
|
@@ -86,6 +86,9 @@ export type AgentTaskRow = {
|
|
|
86
86
|
model: string | null;
|
|
87
87
|
modelTier: string | null;
|
|
88
88
|
effort: string | null;
|
|
89
|
+
resolvedModel?: string | null;
|
|
90
|
+
modelSource?: string | null;
|
|
91
|
+
modelAlias?: string | null;
|
|
89
92
|
scheduleId: string | null;
|
|
90
93
|
workflowRunId: string | null;
|
|
91
94
|
workflowRunStepId: string | null;
|
|
@@ -146,6 +149,9 @@ type AgentTaskSummaryRow = Pick<
|
|
|
146
149
|
| "scheduleId"
|
|
147
150
|
| "model"
|
|
148
151
|
| "modelTier"
|
|
152
|
+
| "resolvedModel"
|
|
153
|
+
| "modelSource"
|
|
154
|
+
| "modelAlias"
|
|
149
155
|
| "effort"
|
|
150
156
|
| "provider"
|
|
151
157
|
| "requestedByUserId"
|
|
@@ -198,7 +204,8 @@ const LIST_COLUMNS = {
|
|
|
198
204
|
${TASK_PREVIEW_SQL}, agent_tasks.title, agent_tasks.status, agent_tasks.source,
|
|
199
205
|
agent_tasks.taskType, agent_tasks.tags, agent_tasks.priority, agent_tasks.dependsOn,
|
|
200
206
|
agent_tasks.offeredTo, agent_tasks.acceptedAt, agent_tasks.parentTaskId,
|
|
201
|
-
agent_tasks.scheduleId, agent_tasks.model, agent_tasks.modelTier,
|
|
207
|
+
agent_tasks.scheduleId, agent_tasks.model, agent_tasks.modelTier,
|
|
208
|
+
agent_tasks.resolvedModel, agent_tasks.modelSource, agent_tasks.modelAlias, agent_tasks.effort,
|
|
202
209
|
agent_tasks.provider, agent_tasks.requestedByUserId, agent_tasks.progress,
|
|
203
210
|
agent_tasks.createdAt, agent_tasks.lastUpdatedAt, agent_tasks.finishedAt,
|
|
204
211
|
agent_tasks.peakContextPercent`,
|
|
@@ -300,6 +307,9 @@ export function rowToAgentTask(row: AgentTaskRow): AgentTask {
|
|
|
300
307
|
claudeSessionId: row.claudeSessionId ?? undefined,
|
|
301
308
|
model: row.model ?? undefined,
|
|
302
309
|
modelTier: parseModelTier(row.modelTier) ?? undefined,
|
|
310
|
+
resolvedModel: row.resolvedModel ?? undefined,
|
|
311
|
+
modelSource: row.modelSource ?? undefined,
|
|
312
|
+
modelAlias: row.modelAlias ?? undefined,
|
|
303
313
|
effort: ReasoningEffortSchema.safeParse(row.effort).success
|
|
304
314
|
? (row.effort as ReasoningEffort)
|
|
305
315
|
: undefined,
|
|
@@ -363,6 +373,9 @@ export function rowToAgentTaskSummary(row: AgentTaskSummaryRow): AgentTaskSummar
|
|
|
363
373
|
scheduleId: row.scheduleId ?? undefined,
|
|
364
374
|
model: row.model ?? undefined,
|
|
365
375
|
modelTier: parseModelTier(row.modelTier) ?? undefined,
|
|
376
|
+
resolvedModel: row.resolvedModel ?? undefined,
|
|
377
|
+
modelSource: row.modelSource ?? undefined,
|
|
378
|
+
modelAlias: row.modelAlias ?? undefined,
|
|
366
379
|
effort: ReasoningEffortSchema.safeParse(row.effort).success
|
|
367
380
|
? (row.effort as ReasoningEffort)
|
|
368
381
|
: undefined,
|
|
@@ -458,6 +471,48 @@ export async function getSupersededTasksWithoutResume(
|
|
|
458
471
|
return rows.map(rowToAgentTask);
|
|
459
472
|
}
|
|
460
473
|
|
|
474
|
+
/** Statuses a dependent can hold before it ever started running. */
|
|
475
|
+
export const NEVER_STARTED_TASK_STATUSES = [
|
|
476
|
+
"draft",
|
|
477
|
+
"backlog",
|
|
478
|
+
"unassigned",
|
|
479
|
+
"offered",
|
|
480
|
+
"reviewing",
|
|
481
|
+
"pending",
|
|
482
|
+
];
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Superseded tasks that already have a resume child but still have
|
|
486
|
+
* never-started dependents waiting on them, paired with their latest resume.
|
|
487
|
+
* A crash after the resume is created but before
|
|
488
|
+
* `backfillSupersedeTaskResumeTaskId` leaves this state, and
|
|
489
|
+
* {@link getSupersededTasksWithoutResume} no longer sees it.
|
|
490
|
+
*/
|
|
491
|
+
export async function getSupersededTasksWithUnsettledDependents(
|
|
492
|
+
finishedBefore: string,
|
|
493
|
+
finishedAfter: string,
|
|
494
|
+
): Promise<{ taskId: string; resumeTaskId: string }[]> {
|
|
495
|
+
const placeholders = NEVER_STARTED_TASK_STATUSES.map(() => "?").join(", ");
|
|
496
|
+
return getDbClient().query<{ taskId: string; resumeTaskId: string }>(
|
|
497
|
+
`SELECT taskId, resumeTaskId FROM (
|
|
498
|
+
SELECT t.id AS taskId, t.finishedAt AS finishedAt,
|
|
499
|
+
(SELECT c.id FROM agent_tasks c
|
|
500
|
+
WHERE c.parentTaskId = t.id AND c.taskType = 'resume'
|
|
501
|
+
ORDER BY c.createdAt DESC LIMIT 1) AS resumeTaskId
|
|
502
|
+
FROM agent_tasks t
|
|
503
|
+
WHERE t.status = 'superseded'
|
|
504
|
+
AND t.finishedAt < ?
|
|
505
|
+
AND t.finishedAt > ?
|
|
506
|
+
AND EXISTS (
|
|
507
|
+
SELECT 1 FROM agent_tasks d, json_each(d.dependsOn) AS j
|
|
508
|
+
WHERE j.value = t.id AND d.status IN (${placeholders})
|
|
509
|
+
))
|
|
510
|
+
WHERE resumeTaskId IS NOT NULL
|
|
511
|
+
ORDER BY finishedAt ASC`,
|
|
512
|
+
[finishedBefore, finishedAfter, ...NEVER_STARTED_TASK_STATUSES],
|
|
513
|
+
);
|
|
514
|
+
}
|
|
515
|
+
|
|
461
516
|
/**
|
|
462
517
|
* True when a non-terminal `reroute-decision` child exists for `parentId`.
|
|
463
518
|
*
|
package/src/be/db/tasks/write.ts
CHANGED
|
@@ -15,7 +15,17 @@ import { scrubSecrets } from "../../../utils/secret-scrubber";
|
|
|
15
15
|
import { emitTaskStarted } from "../../task-lifecycle-events";
|
|
16
16
|
import { getAgentById, isAgentEligibleForTask } from "../agents";
|
|
17
17
|
import { getDbClient } from "../runtime";
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
classifyTaskHumanFree,
|
|
20
|
+
reclassifyTaskHumanFree,
|
|
21
|
+
tagWriteChangesHumanFree,
|
|
22
|
+
} from "./human-free";
|
|
23
|
+
import {
|
|
24
|
+
type AgentTaskRow,
|
|
25
|
+
getTaskById,
|
|
26
|
+
NEVER_STARTED_TASK_STATUSES,
|
|
27
|
+
rowToAgentTask,
|
|
28
|
+
} from "./read";
|
|
19
29
|
|
|
20
30
|
type TaskWriteDependencies = {
|
|
21
31
|
createLogEntry: (entry: {
|
|
@@ -68,9 +78,10 @@ export async function createTask(
|
|
|
68
78
|
): Promise<AgentTask> {
|
|
69
79
|
const id = crypto.randomUUID();
|
|
70
80
|
const source = options?.source ?? "mcp";
|
|
81
|
+
const isHumanFree = await classifyTaskHumanFree({ source });
|
|
71
82
|
const row = await getDbClient().get<AgentTaskRow>(
|
|
72
|
-
`INSERT INTO agent_tasks (id, "key", agentId, task, status, source, slackChannelId, slackThreadTs, slackUserId, swarmVersion, createdAt, lastUpdatedAt)
|
|
73
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) RETURNING *`,
|
|
83
|
+
`INSERT INTO agent_tasks (id, "key", agentId, task, status, source, slackChannelId, slackThreadTs, slackUserId, swarmVersion, isHumanFree, createdAt, lastUpdatedAt)
|
|
84
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) RETURNING *`,
|
|
74
85
|
[
|
|
75
86
|
id,
|
|
76
87
|
defaultAssetKey("task", id),
|
|
@@ -82,6 +93,7 @@ export async function createTask(
|
|
|
82
93
|
options?.slackThreadTs ?? null,
|
|
83
94
|
options?.slackUserId ?? null,
|
|
84
95
|
pkg.version,
|
|
96
|
+
isHumanFree ? 1 : 0,
|
|
85
97
|
],
|
|
86
98
|
);
|
|
87
99
|
if (!row) throw new Error("Failed to create task");
|
|
@@ -359,10 +371,17 @@ export async function completeTask(
|
|
|
359
371
|
if (completed && options?.addTags?.length) {
|
|
360
372
|
const existingTags: string[] = completed.tags ? JSON.parse(completed.tags) : [];
|
|
361
373
|
const nextTags = Array.from(new Set([...existingTags, ...options.addTags]));
|
|
374
|
+
const previousTagsJson = completed.tags;
|
|
375
|
+
const nextTagsJson = JSON.stringify(nextTags);
|
|
362
376
|
completed = await getDbClient().get<AgentTaskRow>(
|
|
363
377
|
"UPDATE agent_tasks SET tags = ?, lastUpdatedAt = strftime('%Y-%m-%dT%H:%M:%fZ', 'now') WHERE id = ? RETURNING *",
|
|
364
|
-
[
|
|
378
|
+
[nextTagsJson, id],
|
|
365
379
|
);
|
|
380
|
+
// Only a tag the classifier reads (e.g. "heartbeat") can flip the flag;
|
|
381
|
+
// a "deferred" write must not walk the task's whole subtree.
|
|
382
|
+
if (tagWriteChangesHumanFree(previousTagsJson, nextTagsJson)) {
|
|
383
|
+
await reclassifyTaskHumanFree([id]);
|
|
384
|
+
}
|
|
366
385
|
}
|
|
367
386
|
if (completed && options?.deferredAt) {
|
|
368
387
|
completed = await getDbClient().get<AgentTaskRow>(
|
|
@@ -752,20 +771,88 @@ export async function supersedeTask(
|
|
|
752
771
|
);
|
|
753
772
|
});
|
|
754
773
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
774
|
+
// Without a resume id the dependents wait: every caller supersedes first,
|
|
775
|
+
// creates the resume, then calls `backfillSupersedeTaskResumeTaskId`, which
|
|
776
|
+
// settles them. Cascading here would fail work the resume is about to carry.
|
|
777
|
+
// A caller whose resume is not created settles with `null`; heartbeat
|
|
778
|
+
// repair settles whatever a crash left in between.
|
|
779
|
+
if (args.resumeTaskId) await settleSupersededTaskDependents(id, args.resumeTaskId);
|
|
760
780
|
}
|
|
761
781
|
|
|
762
782
|
return row ? rowToAgentTask(row) : null;
|
|
763
783
|
}
|
|
764
784
|
|
|
785
|
+
/**
|
|
786
|
+
* Settle the dependents of a superseded task. With a resume id, every
|
|
787
|
+
* never-started dependent has the superseded id in `dependsOn` replaced by the
|
|
788
|
+
* resume id, so it waits on the resume instead of dying with
|
|
789
|
+
* `Blocked dependency … was superseded`. Anything still depending on the
|
|
790
|
+
* superseded task afterwards (a dependent that already started, or every
|
|
791
|
+
* dependent when there is no resume) cascade-fails. Idempotent.
|
|
792
|
+
*/
|
|
793
|
+
export async function settleSupersededTaskDependents(
|
|
794
|
+
supersededId: string,
|
|
795
|
+
resumeTaskId: string | null,
|
|
796
|
+
): Promise<void> {
|
|
797
|
+
try {
|
|
798
|
+
if (resumeTaskId) {
|
|
799
|
+
const placeholders = NEVER_STARTED_TASK_STATUSES.map(() => "?").join(", ");
|
|
800
|
+
// One statement: the new array is built from the row's current
|
|
801
|
+
// `dependsOn`, so settlements of a shared dependent compose, and the
|
|
802
|
+
// status predicate is evaluated at write time, so a claim into
|
|
803
|
+
// `in_progress` is skipped while offered -> reviewing/pending is not.
|
|
804
|
+
const repointed = await getDbClient().query<{ id: string; agentId: string | null }>(
|
|
805
|
+
`UPDATE agent_tasks
|
|
806
|
+
SET dependsOn = (
|
|
807
|
+
SELECT json_group_array(value ORDER BY k) FROM (
|
|
808
|
+
SELECT CASE WHEN j.value = ? THEN ? ELSE j.value END AS value,
|
|
809
|
+
MIN(j.key) AS k
|
|
810
|
+
FROM json_each(agent_tasks.dependsOn) AS j
|
|
811
|
+
GROUP BY 1)),
|
|
812
|
+
lastUpdatedAt = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
813
|
+
WHERE status IN (${placeholders})
|
|
814
|
+
AND EXISTS (SELECT 1 FROM json_each(agent_tasks.dependsOn) WHERE value = ?)
|
|
815
|
+
RETURNING id, agentId`,
|
|
816
|
+
[supersededId, resumeTaskId, ...NEVER_STARTED_TASK_STATUSES, supersededId],
|
|
817
|
+
);
|
|
818
|
+
for (const dep of repointed) {
|
|
819
|
+
try {
|
|
820
|
+
await dependencies.createLogEntry({
|
|
821
|
+
eventType: "task_dependency_repointed",
|
|
822
|
+
taskId: dep.id,
|
|
823
|
+
agentId: dep.agentId ?? undefined,
|
|
824
|
+
oldValue: supersededId,
|
|
825
|
+
newValue: resumeTaskId,
|
|
826
|
+
metadata: { reason: "supersede_resume" },
|
|
827
|
+
});
|
|
828
|
+
} catch {}
|
|
829
|
+
}
|
|
830
|
+
// Repair can settle onto a resume that already failed; its own cascade
|
|
831
|
+
// ran before these dependents pointed at it.
|
|
832
|
+
const resume = await getTaskById(resumeTaskId);
|
|
833
|
+
if (repointed.length > 0 && (resume?.status === "failed" || resume?.status === "cancelled")) {
|
|
834
|
+
await dependencies.cascadeFailDependents(resumeTaskId, resume.status);
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
await dependencies.cascadeFailDependents(supersededId, "superseded");
|
|
838
|
+
} catch (err) {
|
|
839
|
+
console.error("[supersedeTask] settling dependents error:", err);
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
* Attach the resume id to the task's `task_superseded` log entry, then settle
|
|
845
|
+
* the dependents `supersedeTask` left waiting (re-point to the resume, cascade
|
|
846
|
+
* the rest).
|
|
847
|
+
*/
|
|
765
848
|
export async function backfillSupersedeTaskResumeTaskId(
|
|
766
849
|
taskId: string,
|
|
767
850
|
resumeTaskId: string,
|
|
768
851
|
): Promise<boolean> {
|
|
852
|
+
if ((await getTaskById(taskId))?.status === "superseded") {
|
|
853
|
+
await settleSupersededTaskDependents(taskId, resumeTaskId);
|
|
854
|
+
}
|
|
855
|
+
|
|
769
856
|
const row = await getDbClient().get<{ id: string; metadata: string | null }>(
|
|
770
857
|
`SELECT id, metadata
|
|
771
858
|
FROM agent_log
|
|
@@ -960,8 +1047,17 @@ export async function getRecentlyCancelledTasksForAgent(agentId: string): Promis
|
|
|
960
1047
|
}
|
|
961
1048
|
|
|
962
1049
|
export async function deleteTask(id: string): Promise<boolean> {
|
|
963
|
-
|
|
964
|
-
|
|
1050
|
+
return await getDbClient().transaction(async (tx) => {
|
|
1051
|
+
// `parentTaskId` has no foreign key, so children survive with a dangling
|
|
1052
|
+
// parent. The human-free rule reads the parent row, so they are reclassified
|
|
1053
|
+
// once it is gone.
|
|
1054
|
+
const childIds = (
|
|
1055
|
+
await tx.query<{ id: string }>("SELECT id FROM agent_tasks WHERE parentTaskId = ?", [id])
|
|
1056
|
+
).map((row) => row.id);
|
|
1057
|
+
const result = await tx.run("DELETE FROM agent_tasks WHERE id = ?", [id]);
|
|
1058
|
+
await reclassifyTaskHumanFree(childIds);
|
|
1059
|
+
return result.changes > 0;
|
|
1060
|
+
});
|
|
965
1061
|
}
|
|
966
1062
|
|
|
967
1063
|
export async function updateTaskProgress(id: string, progress: string): Promise<AgentTask | null> {
|