@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
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ProjectTrustStore,
|
|
3
|
+
addMcpServerConfig,
|
|
4
|
+
getMcpToolExposure,
|
|
5
|
+
loadMcpConfig,
|
|
6
|
+
openBrowser,
|
|
7
|
+
removeMcpServerConfig,
|
|
8
|
+
validateMcpServerConfig
|
|
9
|
+
} from "./cli-0x01kwrd.js";
|
|
10
|
+
import {
|
|
11
|
+
McpOAuthCredentialStore,
|
|
12
|
+
McpServerConnection,
|
|
13
|
+
McpServerLog,
|
|
14
|
+
McpSignInCancelledError,
|
|
15
|
+
createDefaultTransport,
|
|
16
|
+
signInMcpServer
|
|
17
|
+
} from "./cli-v7fn5gms.js";
|
|
18
|
+
import"./cli-447dt1h3.js";
|
|
19
|
+
import {
|
|
20
|
+
APP_NAME,
|
|
21
|
+
CONFIG_DIR_NAME,
|
|
22
|
+
source_default
|
|
23
|
+
} from "./cli-d5czme6m.js";
|
|
24
|
+
import"./cli-5bfdm1ah.js";
|
|
25
|
+
import"./cli-0m7wct0d.js";
|
|
26
|
+
import"./cli-rykfmgwg.js";
|
|
27
|
+
import"./cli-0xqde53b.js";
|
|
28
|
+
import"./cli-pqetb83f.js";
|
|
29
|
+
import"./cli-bc05qbss.js";
|
|
30
|
+
|
|
31
|
+
// node_modules/@earendil-works/pi-coding-agent/dist/extensions/mcp/cli.js
|
|
32
|
+
import { existsSync } from "node:fs";
|
|
33
|
+
import { join } from "node:path";
|
|
34
|
+
import { createInterface } from "node:readline/promises";
|
|
35
|
+
var HELP = `${source_default.bold("Usage:")}
|
|
36
|
+
${APP_NAME} mcp add <server> [options] -- <command> [args...]
|
|
37
|
+
${APP_NAME} mcp add <server> [options] --url <url>
|
|
38
|
+
${APP_NAME} mcp remove <server> [-l]
|
|
39
|
+
${APP_NAME} mcp list [--json]
|
|
40
|
+
${APP_NAME} mcp login <server> [--timeout <seconds>]
|
|
41
|
+
${APP_NAME} mcp logout <server>
|
|
42
|
+
|
|
43
|
+
Configure and check MCP servers and sign in to OAuth servers without starting a session.
|
|
44
|
+
Reads ~/${CONFIG_DIR_NAME}/agent/mcp.json and, in trusted projects, ${CONFIG_DIR_NAME}/mcp.json.
|
|
45
|
+
|
|
46
|
+
Commands:
|
|
47
|
+
add <server> Add or replace a server in mcp.json
|
|
48
|
+
remove <server> Remove a server from mcp.json
|
|
49
|
+
list Show state, tools, and errors (exits 1 on failure)
|
|
50
|
+
login <server> Sign in through the browser
|
|
51
|
+
logout <server> Delete the stored OAuth credentials
|
|
52
|
+
|
|
53
|
+
Options for add and remove:
|
|
54
|
+
-l, --local Use ${CONFIG_DIR_NAME}/mcp.json in the current project instead of the global file
|
|
55
|
+
|
|
56
|
+
Options for add:
|
|
57
|
+
--url <url> Streamable HTTP server URL (instead of a command)
|
|
58
|
+
--env <KEY=VALUE> Environment variable for a stdio server (repeatable)
|
|
59
|
+
--cwd <dir> Working directory for a stdio server
|
|
60
|
+
--header <KEY=VALUE> HTTP header (repeatable)
|
|
61
|
+
--bearer-token-env-var <NAME>
|
|
62
|
+
Send "Authorization: Bearer \${NAME}"
|
|
63
|
+
--oauth-client-id <id> Pre-registered OAuth client id
|
|
64
|
+
--oauth-client-secret <secret>
|
|
65
|
+
OAuth client secret (may be \${NAME} or !command)
|
|
66
|
+
--oauth-callback-port <port>
|
|
67
|
+
Fixed OAuth callback port
|
|
68
|
+
--oauth-client-name <name>
|
|
69
|
+
Client name sent when registering with the OAuth server
|
|
70
|
+
--exposure <mode> codemode (default), deferred, direct, or hidden
|
|
71
|
+
--description <text> What the server offers, shown in the system prompt
|
|
72
|
+
|
|
73
|
+
Other options:
|
|
74
|
+
--json Print the list as JSON
|
|
75
|
+
--timeout <seconds> How long login waits for the browser (default: 300)`;
|
|
76
|
+
var HELP_HINT = source_default.dim(`Use "${APP_NAME} mcp --help" for usage.`);
|
|
77
|
+
var DEFAULT_LOGIN_TIMEOUT_SECONDS = 300;
|
|
78
|
+
function errorMessage(error) {
|
|
79
|
+
return error instanceof Error ? error.message : String(error);
|
|
80
|
+
}
|
|
81
|
+
function describeTransport(entry) {
|
|
82
|
+
const { config } = entry;
|
|
83
|
+
return "url" in config ? config.url : [config.command, ...config.args ?? []].join(" ");
|
|
84
|
+
}
|
|
85
|
+
function createConnection(entry, options, credentials) {
|
|
86
|
+
return new McpServerConnection({
|
|
87
|
+
entry,
|
|
88
|
+
cwd: options.cwd,
|
|
89
|
+
createTransport: createDefaultTransport,
|
|
90
|
+
credentials,
|
|
91
|
+
log: new McpServerLog(join(options.agentDir, "mcp.log")),
|
|
92
|
+
onTools: () => {}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
var OPTION_ALIASES = new Map([["-l", "--local"]]);
|
|
96
|
+
function parseOptions(args, known, error, maxPositionals = Number.POSITIVE_INFINITY) {
|
|
97
|
+
const positional = [];
|
|
98
|
+
const values = new Map;
|
|
99
|
+
const lists = new Map;
|
|
100
|
+
for (let index = 0;index < args.length; index++) {
|
|
101
|
+
const arg = OPTION_ALIASES.get(args[index]) ?? args[index];
|
|
102
|
+
if (arg === "--" || positional.length >= maxPositionals) {
|
|
103
|
+
positional.push(...args.slice(arg === "--" ? index + 1 : index));
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
if (!arg.startsWith("--")) {
|
|
107
|
+
positional.push(arg);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const name = arg.slice(2);
|
|
111
|
+
const kind = known[name];
|
|
112
|
+
if (!kind) {
|
|
113
|
+
error(`Unknown option ${arg}.
|
|
114
|
+
${HELP_HINT}`);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (kind === "flag") {
|
|
118
|
+
values.set(name, true);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const value = args[++index];
|
|
122
|
+
if (value === undefined) {
|
|
123
|
+
error(`${arg} needs a value.`);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (kind === "list")
|
|
127
|
+
lists.set(name, [...lists.get(name) ?? [], value]);
|
|
128
|
+
else
|
|
129
|
+
values.set(name, value);
|
|
130
|
+
}
|
|
131
|
+
return { positional, values, lists };
|
|
132
|
+
}
|
|
133
|
+
async function runMcpCommand(args, options) {
|
|
134
|
+
const log = options.log ?? ((line) => console.log(line));
|
|
135
|
+
const error = options.error ?? ((line) => console.error(line));
|
|
136
|
+
const [command, ...rest] = args;
|
|
137
|
+
if (command === undefined || command === "help" || args.includes("--help") || args.includes("-h")) {
|
|
138
|
+
log(HELP);
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
const projectConfig = join(options.cwd, CONFIG_DIR_NAME, "mcp.json");
|
|
142
|
+
if (command === "add" || command === "remove") {
|
|
143
|
+
return command === "add" ? add(rest, projectConfig, options, log, error) : remove(rest, projectConfig, options, log, error);
|
|
144
|
+
}
|
|
145
|
+
const projectTrusted = new ProjectTrustStore(options.agentDir).get(options.cwd) === true;
|
|
146
|
+
const loaded = loadMcpConfig({ agentDir: options.agentDir, cwd: options.cwd, projectTrusted });
|
|
147
|
+
const untrustedNote = !projectTrusted && existsSync(projectConfig) ? `${projectConfig} is ignored because the project is not trusted. Start ${APP_NAME} in the project to trust it.` : undefined;
|
|
148
|
+
const credentials = options.credentials ?? new McpOAuthCredentialStore;
|
|
149
|
+
switch (command) {
|
|
150
|
+
case "list": {
|
|
151
|
+
const parsed = parseOptions(rest, { json: "flag" }, error);
|
|
152
|
+
if (!parsed)
|
|
153
|
+
return 1;
|
|
154
|
+
if (parsed.positional.length > 0) {
|
|
155
|
+
error(`Usage: ${APP_NAME} mcp list [--json]
|
|
156
|
+
${HELP_HINT}`);
|
|
157
|
+
return 1;
|
|
158
|
+
}
|
|
159
|
+
return list(loaded, parsed.values.has("json"), untrustedNote, options, credentials, log);
|
|
160
|
+
}
|
|
161
|
+
case "login":
|
|
162
|
+
case "logout": {
|
|
163
|
+
const parsed = parseOptions(rest, command === "login" ? { timeout: "value" } : {}, error);
|
|
164
|
+
if (!parsed)
|
|
165
|
+
return 1;
|
|
166
|
+
const [name, ...extra] = parsed.positional;
|
|
167
|
+
if (!name || extra.length > 0) {
|
|
168
|
+
error(`Usage: ${APP_NAME} mcp ${command} <server>
|
|
169
|
+
${HELP_HINT}`);
|
|
170
|
+
return 1;
|
|
171
|
+
}
|
|
172
|
+
const entry = loaded.servers.find((server) => server.name === name);
|
|
173
|
+
if (!entry) {
|
|
174
|
+
error(`No MCP server named "${name}".${untrustedNote ? ` ${untrustedNote}` : ""} Configured: ${loaded.servers.map((server) => server.name).join(", ") || "none"}.`);
|
|
175
|
+
return 1;
|
|
176
|
+
}
|
|
177
|
+
const connection = createConnection(entry, options, credentials);
|
|
178
|
+
const url = connection.oauthUrl;
|
|
179
|
+
if (!url) {
|
|
180
|
+
error(`MCP server "${name}" does not use OAuth. Only HTTP servers without an Authorization header do.`);
|
|
181
|
+
return 1;
|
|
182
|
+
}
|
|
183
|
+
if (command === "logout") {
|
|
184
|
+
const removed = credentials.remove(url);
|
|
185
|
+
log(removed ? `Signed out of MCP server "${name}".` : `No stored credentials for MCP server "${name}".`);
|
|
186
|
+
return 0;
|
|
187
|
+
}
|
|
188
|
+
const timeout = Number(parsed.values.get("timeout") ?? DEFAULT_LOGIN_TIMEOUT_SECONDS);
|
|
189
|
+
if (!Number.isFinite(timeout) || timeout <= 0) {
|
|
190
|
+
error("--timeout must be a positive number of seconds.");
|
|
191
|
+
return 1;
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
return await login(entry, connection, url, timeout * 1000, options, credentials, log, error);
|
|
195
|
+
} finally {
|
|
196
|
+
await connection.close();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
default:
|
|
200
|
+
error(`Unknown mcp command "${command}".
|
|
201
|
+
${HELP_HINT}`);
|
|
202
|
+
return 1;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function parsePairs(option, pairs, error) {
|
|
206
|
+
if (!pairs)
|
|
207
|
+
return {};
|
|
208
|
+
const record = {};
|
|
209
|
+
for (const pair of pairs) {
|
|
210
|
+
const separator = pair.indexOf("=");
|
|
211
|
+
if (separator <= 0) {
|
|
212
|
+
error(`--${option} expects KEY=VALUE, got "${pair}".`);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
record[pair.slice(0, separator)] = pair.slice(separator + 1);
|
|
216
|
+
}
|
|
217
|
+
return record;
|
|
218
|
+
}
|
|
219
|
+
function add(args, projectConfig, options, log, error) {
|
|
220
|
+
const usage = `Usage: ${APP_NAME} mcp add <server> [options] (--url <url> | -- <command> [args...])
|
|
221
|
+
${HELP_HINT}`;
|
|
222
|
+
const parsed = parseOptions(args, {
|
|
223
|
+
local: "flag",
|
|
224
|
+
url: "value",
|
|
225
|
+
env: "list",
|
|
226
|
+
cwd: "value",
|
|
227
|
+
header: "list",
|
|
228
|
+
"bearer-token-env-var": "value",
|
|
229
|
+
"oauth-client-id": "value",
|
|
230
|
+
"oauth-client-secret": "value",
|
|
231
|
+
"oauth-callback-port": "value",
|
|
232
|
+
"oauth-client-name": "value",
|
|
233
|
+
exposure: "value",
|
|
234
|
+
description: "value"
|
|
235
|
+
}, error, 2);
|
|
236
|
+
if (!parsed)
|
|
237
|
+
return 1;
|
|
238
|
+
const { positional, values, lists } = parsed;
|
|
239
|
+
const [name, ...command] = positional;
|
|
240
|
+
const url = values.get("url");
|
|
241
|
+
if (!name || url === undefined === (command.length === 0)) {
|
|
242
|
+
error(usage);
|
|
243
|
+
return 1;
|
|
244
|
+
}
|
|
245
|
+
const value = (option) => {
|
|
246
|
+
const found = values.get(option);
|
|
247
|
+
return typeof found === "string" ? found : undefined;
|
|
248
|
+
};
|
|
249
|
+
const exposure = value("exposure");
|
|
250
|
+
const httpOnly = [
|
|
251
|
+
"header",
|
|
252
|
+
"bearer-token-env-var",
|
|
253
|
+
"oauth-client-id",
|
|
254
|
+
"oauth-client-secret",
|
|
255
|
+
"oauth-callback-port",
|
|
256
|
+
"oauth-client-name"
|
|
257
|
+
];
|
|
258
|
+
const stdioOnly = ["env", "cwd"];
|
|
259
|
+
const misplaced = (url === undefined ? httpOnly : stdioOnly).find((option) => values.has(option) || lists.has(option));
|
|
260
|
+
if (misplaced) {
|
|
261
|
+
error(`--${misplaced} only applies to ${url === undefined ? "HTTP servers (--url)" : "stdio servers"}.`);
|
|
262
|
+
return 1;
|
|
263
|
+
}
|
|
264
|
+
let config;
|
|
265
|
+
if (typeof url === "string") {
|
|
266
|
+
const headers = parsePairs("header", lists.get("header"), error);
|
|
267
|
+
if (!headers)
|
|
268
|
+
return 1;
|
|
269
|
+
const bearer = value("bearer-token-env-var");
|
|
270
|
+
if (bearer !== undefined)
|
|
271
|
+
headers.Authorization = `Bearer \${${bearer}}`;
|
|
272
|
+
const port = value("oauth-callback-port");
|
|
273
|
+
const oauth = {
|
|
274
|
+
...value("oauth-client-id") === undefined ? {} : { clientId: value("oauth-client-id") },
|
|
275
|
+
...value("oauth-client-secret") === undefined ? {} : { clientSecret: value("oauth-client-secret") },
|
|
276
|
+
...port === undefined ? {} : { callbackPort: Number(port) },
|
|
277
|
+
...value("oauth-client-name") === undefined ? {} : { clientName: value("oauth-client-name") }
|
|
278
|
+
};
|
|
279
|
+
config = {
|
|
280
|
+
url,
|
|
281
|
+
...Object.keys(headers).length > 0 ? { headers } : {},
|
|
282
|
+
...Object.keys(oauth).length > 0 ? { oauth } : {}
|
|
283
|
+
};
|
|
284
|
+
} else {
|
|
285
|
+
const env = parsePairs("env", lists.get("env"), error);
|
|
286
|
+
if (!env)
|
|
287
|
+
return 1;
|
|
288
|
+
const [executable, ...commandArgs] = command;
|
|
289
|
+
config = {
|
|
290
|
+
command: executable,
|
|
291
|
+
...commandArgs.length > 0 ? { args: commandArgs } : {},
|
|
292
|
+
...Object.keys(env).length > 0 ? { env } : {},
|
|
293
|
+
...value("cwd") === undefined ? {} : { cwd: value("cwd") }
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
if (exposure !== undefined)
|
|
297
|
+
config.exposure = exposure;
|
|
298
|
+
const description = value("description");
|
|
299
|
+
if (description !== undefined)
|
|
300
|
+
config.description = description;
|
|
301
|
+
const validated = validateMcpServerConfig(name, config);
|
|
302
|
+
if (typeof validated === "string") {
|
|
303
|
+
error(validated);
|
|
304
|
+
return 1;
|
|
305
|
+
}
|
|
306
|
+
const project = values.has("local");
|
|
307
|
+
const path = project ? projectConfig : join(options.agentDir, "mcp.json");
|
|
308
|
+
const scope = project ? "project" : "global";
|
|
309
|
+
let replaced;
|
|
310
|
+
try {
|
|
311
|
+
replaced = addMcpServerConfig(path, name, validated);
|
|
312
|
+
} catch (addError) {
|
|
313
|
+
error(`Could not update ${path}: ${errorMessage(addError)}`);
|
|
314
|
+
return 1;
|
|
315
|
+
}
|
|
316
|
+
log(`${replaced ? "Replaced" : "Added"} ${scope} MCP server "${name}" in ${path}.`);
|
|
317
|
+
if (project && new ProjectTrustStore(options.agentDir).get(options.cwd) !== true) {
|
|
318
|
+
log(`The project is not trusted, so ${path} is ignored until you start ${APP_NAME} in the project and trust it.`);
|
|
319
|
+
}
|
|
320
|
+
const mayNeedSignIn = "url" in validated && !Object.keys(validated.headers ?? {}).some((header) => header.toLowerCase() === "authorization");
|
|
321
|
+
log(`Check it with: ${APP_NAME} mcp list${mayNeedSignIn ? `. If it requires sign-in: ${APP_NAME} mcp login ${name}` : ""}`);
|
|
322
|
+
return 0;
|
|
323
|
+
}
|
|
324
|
+
function remove(args, projectConfig, options, log, error) {
|
|
325
|
+
const parsed = parseOptions(args, { local: "flag" }, error);
|
|
326
|
+
if (!parsed)
|
|
327
|
+
return 1;
|
|
328
|
+
const [name, ...extra] = parsed.positional;
|
|
329
|
+
if (!name || extra.length > 0) {
|
|
330
|
+
error(`Usage: ${APP_NAME} mcp remove <server> [-l]
|
|
331
|
+
${HELP_HINT}`);
|
|
332
|
+
return 1;
|
|
333
|
+
}
|
|
334
|
+
const project = parsed.values.has("local");
|
|
335
|
+
const globalConfig = join(options.agentDir, "mcp.json");
|
|
336
|
+
const path = project ? projectConfig : globalConfig;
|
|
337
|
+
const scope = project ? "project" : "global";
|
|
338
|
+
let removed;
|
|
339
|
+
try {
|
|
340
|
+
removed = removeMcpServerConfig(path, name);
|
|
341
|
+
} catch (removeError) {
|
|
342
|
+
error(`Could not update ${path}: ${errorMessage(removeError)}`);
|
|
343
|
+
return 1;
|
|
344
|
+
}
|
|
345
|
+
if (removed) {
|
|
346
|
+
log(`Removed ${scope} MCP server "${name}" from ${path}.`);
|
|
347
|
+
return 0;
|
|
348
|
+
}
|
|
349
|
+
const other = loadMcpConfig({ agentDir: options.agentDir, cwd: options.cwd, projectTrusted: true }).servers.find((server) => server.name === name && server.scope !== scope);
|
|
350
|
+
error(`No ${scope} MCP server named "${name}" in ${path}.${other ? ` It is defined in ${other.source}${other.scope === "project" ? "; use --local" : "; omit --local"}.` : ""}`);
|
|
351
|
+
return 1;
|
|
352
|
+
}
|
|
353
|
+
async function list(loaded, json, untrustedNote, options, credentials, log) {
|
|
354
|
+
const reports = await Promise.all(loaded.servers.map(async (entry) => {
|
|
355
|
+
const report = {
|
|
356
|
+
name: entry.name,
|
|
357
|
+
scope: entry.scope ?? "global",
|
|
358
|
+
source: entry.source,
|
|
359
|
+
enabled: entry.config.enabled !== false,
|
|
360
|
+
exposure: entry.config.exposure ?? "codemode",
|
|
361
|
+
transport: describeTransport(entry),
|
|
362
|
+
state: "disabled",
|
|
363
|
+
tools: []
|
|
364
|
+
};
|
|
365
|
+
if (!report.enabled)
|
|
366
|
+
return report;
|
|
367
|
+
const connection = createConnection(entry, options, credentials);
|
|
368
|
+
try {
|
|
369
|
+
await connection.getClient();
|
|
370
|
+
} catch {}
|
|
371
|
+
report.state = connection.state;
|
|
372
|
+
report.tools = connection.tools.map((tool) => tool.name);
|
|
373
|
+
const overrides = connection.tools.flatMap((tool) => {
|
|
374
|
+
const exposure = getMcpToolExposure(entry.config, tool.name);
|
|
375
|
+
return exposure === report.exposure ? [] : [[tool.name, exposure]];
|
|
376
|
+
});
|
|
377
|
+
if (overrides.length > 0)
|
|
378
|
+
report.toolExposure = Object.fromEntries(overrides);
|
|
379
|
+
if (connection.hasResources) {
|
|
380
|
+
report.resources = connection.resources.length;
|
|
381
|
+
report.resourceTemplates = connection.resourceTemplates.length;
|
|
382
|
+
}
|
|
383
|
+
if (connection.state !== "connected" && connection.error)
|
|
384
|
+
report.error = connection.error;
|
|
385
|
+
await connection.close();
|
|
386
|
+
return report;
|
|
387
|
+
}));
|
|
388
|
+
const failed = loaded.errors.length > 0 || reports.some((report) => report.enabled && report.state !== "connected");
|
|
389
|
+
if (json) {
|
|
390
|
+
log(JSON.stringify({ servers: reports, errors: loaded.errors, ...untrustedNote ? { note: untrustedNote } : {} }, null, 2));
|
|
391
|
+
return failed ? 1 : 0;
|
|
392
|
+
}
|
|
393
|
+
if (reports.length === 0 && loaded.errors.length === 0) {
|
|
394
|
+
log(`No MCP servers configured. Add them to ${join(options.agentDir, "mcp.json")} or .pi/mcp.json.`);
|
|
395
|
+
}
|
|
396
|
+
for (const report of reports) {
|
|
397
|
+
const state = report.state === "connected" ? `connected, ${report.tools.length} tool${report.tools.length === 1 ? "" : "s"}` : report.state === "needs-auth" ? "needs sign-in" : report.state;
|
|
398
|
+
log(`${report.name}: ${state} (${report.exposure}, ${report.scope})`);
|
|
399
|
+
log(` ${report.transport}`);
|
|
400
|
+
if (report.state === "needs-auth")
|
|
401
|
+
log(` sign in with: ${APP_NAME} mcp login ${report.name}`);
|
|
402
|
+
if (report.tools.length > 0) {
|
|
403
|
+
const tools = report.tools.map((tool) => {
|
|
404
|
+
const exposure = report.toolExposure?.[tool];
|
|
405
|
+
return exposure ? `${tool} [${exposure}]` : tool;
|
|
406
|
+
});
|
|
407
|
+
log(` tools: ${tools.join(", ")}`);
|
|
408
|
+
}
|
|
409
|
+
if (report.resources !== undefined) {
|
|
410
|
+
log(` resources: ${report.resources}, URI templates: ${report.resourceTemplates ?? 0}`);
|
|
411
|
+
}
|
|
412
|
+
if (report.error)
|
|
413
|
+
log(` ${report.error.split(`
|
|
414
|
+
`).join(`
|
|
415
|
+
`)}`);
|
|
416
|
+
}
|
|
417
|
+
for (const configError of loaded.errors)
|
|
418
|
+
log(`config error: ${configError}`);
|
|
419
|
+
if (untrustedNote)
|
|
420
|
+
log(untrustedNote);
|
|
421
|
+
return failed ? 1 : 0;
|
|
422
|
+
}
|
|
423
|
+
async function login(entry, connection, url, timeoutMs, options, credentials, log, error) {
|
|
424
|
+
const { name } = entry;
|
|
425
|
+
try {
|
|
426
|
+
await connection.getClient();
|
|
427
|
+
log(`Already signed in to MCP server "${name}" (${connection.tools.length} tools).`);
|
|
428
|
+
return 0;
|
|
429
|
+
} catch {
|
|
430
|
+
if (connection.state !== "needs-auth") {
|
|
431
|
+
error(`MCP server "${name}" failed to connect: ${connection.error ?? "unknown error"}`);
|
|
432
|
+
return 1;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
const openUrl = options.openUrl ?? openBrowser;
|
|
436
|
+
const interactive = process.stdin.isTTY === true && options.openUrl === undefined;
|
|
437
|
+
try {
|
|
438
|
+
await signInMcpServer({
|
|
439
|
+
serverUrl: url,
|
|
440
|
+
store: credentials.forServer(url),
|
|
441
|
+
settings: connection.oauthSettings(),
|
|
442
|
+
challenge: connection.challenge,
|
|
443
|
+
prompt: {
|
|
444
|
+
showAuthorizationUrl: (authorizationUrl) => {
|
|
445
|
+
log(`Sign in to MCP server "${name}" in your browser:
|
|
446
|
+
${authorizationUrl.href}`);
|
|
447
|
+
openUrl(authorizationUrl.href);
|
|
448
|
+
},
|
|
449
|
+
promptForRedirectUrl: (signal) => waitForRedirectUrl(signal, timeoutMs, interactive)
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
} catch (signInError) {
|
|
453
|
+
error(signInError instanceof McpSignInCancelledError ? `Sign-in to MCP server "${name}" was cancelled or not completed within ${Math.round(timeoutMs / 1000)} seconds.` : `Sign-in to MCP server "${name}" failed: ${errorMessage(signInError)}`);
|
|
454
|
+
return 1;
|
|
455
|
+
}
|
|
456
|
+
connection.challenge = undefined;
|
|
457
|
+
try {
|
|
458
|
+
await connection.reconnect();
|
|
459
|
+
} catch (connectError) {
|
|
460
|
+
error(`Signed in, but ${errorMessage(connectError)}`);
|
|
461
|
+
return 1;
|
|
462
|
+
}
|
|
463
|
+
log(`Signed in to MCP server "${name}" (${connection.tools.length} tools).`);
|
|
464
|
+
return 0;
|
|
465
|
+
}
|
|
466
|
+
async function waitForRedirectUrl(signal, timeoutMs, interactive) {
|
|
467
|
+
const controller = new AbortController;
|
|
468
|
+
const abort = () => controller.abort();
|
|
469
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
470
|
+
const timer = setTimeout(abort, timeoutMs);
|
|
471
|
+
try {
|
|
472
|
+
if (!interactive) {
|
|
473
|
+
await new Promise((resolve) => controller.signal.addEventListener("abort", () => resolve(), { once: true }));
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
const readline = createInterface({ input: process.stdin, output: process.stderr });
|
|
477
|
+
try {
|
|
478
|
+
return await readline.question("If the browser cannot reach this machine, paste the URL it was redirected to: ", { signal: controller.signal });
|
|
479
|
+
} catch {
|
|
480
|
+
return;
|
|
481
|
+
} finally {
|
|
482
|
+
readline.close();
|
|
483
|
+
}
|
|
484
|
+
} finally {
|
|
485
|
+
clearTimeout(timer);
|
|
486
|
+
signal.removeEventListener("abort", abort);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
export {
|
|
490
|
+
runMcpCommand
|
|
491
|
+
};
|
package/dist/cli.js
CHANGED
|
@@ -8,24 +8,25 @@ import {
|
|
|
8
8
|
require_react_development,
|
|
9
9
|
require_react_jsx_dev_runtime_development,
|
|
10
10
|
use_app_default
|
|
11
|
-
} from "./cli-
|
|
12
|
-
import"./cli-
|
|
11
|
+
} from "./cli-fkqhbg8g.js";
|
|
12
|
+
import"./cli-0xqde53b.js";
|
|
13
|
+
import"./cli-pqetb83f.js";
|
|
13
14
|
import {
|
|
14
15
|
bedrockProviderModule
|
|
15
|
-
} from "./cli-
|
|
16
|
+
} from "./cli-et8m9xsv.js";
|
|
16
17
|
import"./cli-yn0a417a.js";
|
|
17
18
|
import"./cli-cgj4hc12.js";
|
|
18
19
|
import"./cli-txgcknmy.js";
|
|
19
20
|
import"./cli-6map995v.js";
|
|
20
|
-
import"./cli-
|
|
21
|
+
import"./cli-ybgv4kw2.js";
|
|
21
22
|
import"./cli-y2apkfe2.js";
|
|
22
|
-
import"./cli-
|
|
23
|
+
import"./cli-7kyk9jr3.js";
|
|
23
24
|
import {
|
|
24
25
|
setBedrockProviderModule
|
|
25
|
-
} from "./cli-
|
|
26
|
+
} from "./cli-13hw4z91.js";
|
|
26
27
|
import"./cli-btbzvq95.js";
|
|
27
28
|
import"./cli-1m2e086m.js";
|
|
28
|
-
import"./cli-
|
|
29
|
+
import"./cli-ykk5jaax.js";
|
|
29
30
|
import"./cli-bzr0ftht.js";
|
|
30
31
|
import"./cli-bd957dgb.js";
|
|
31
32
|
import {
|
|
@@ -57,7 +58,7 @@ var import_react = __toESM(require_react(), 1);
|
|
|
57
58
|
// package.json
|
|
58
59
|
var package_default = {
|
|
59
60
|
name: "@desplega.ai/agent-swarm",
|
|
60
|
-
version: "1.
|
|
61
|
+
version: "1.160.0",
|
|
61
62
|
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.",
|
|
62
63
|
keywords: [
|
|
63
64
|
"agent-swarm.dev",
|
|
@@ -196,8 +197,8 @@ var package_default = {
|
|
|
196
197
|
lint: "biome check src apps/evals packages/ui-e2e",
|
|
197
198
|
"lint:fix": "biome check --write src apps/evals packages/ui-e2e",
|
|
198
199
|
format: "biome format --write src",
|
|
199
|
-
"build:binary": "bun build ./src/cli.tsx --compile --bytecode --format=esm --compile-exec-argv='--expose-gc' --target=bun-linux-x64 --outfile ./dist/agent-swarm",
|
|
200
|
-
"build:binary:arm64": "bun build ./src/cli.tsx --compile --bytecode --format=esm --compile-exec-argv='--expose-gc' --target=bun-linux-arm64 --outfile ./dist/agent-swarm",
|
|
200
|
+
"build:binary": "bun build ./src/cli.tsx ./src/providers/pi-binary-root/src/extensions/codemode/worker.ts --root ./src/providers/pi-binary-root --compile --bytecode --format=esm --compile-exec-argv='--expose-gc' --target=bun-linux-x64 --outfile ./dist/agent-swarm",
|
|
201
|
+
"build:binary:arm64": "bun build ./src/cli.tsx ./src/providers/pi-binary-root/src/extensions/codemode/worker.ts --root ./src/providers/pi-binary-root --compile --bytecode --format=esm --compile-exec-argv='--expose-gc' --target=bun-linux-arm64 --outfile ./dist/agent-swarm",
|
|
201
202
|
"docker:build:api": "docker build -f Dockerfile -t agent-swarm-api:latest .",
|
|
202
203
|
"docker:build:worker": "docker build -f Dockerfile.worker -t agent-swarm-worker:latest .",
|
|
203
204
|
"docker:build:worker:slim": "docker build -f Dockerfile.worker --target worker-slim -t agent-swarm-worker:slim .",
|
|
@@ -226,8 +227,9 @@ var package_default = {
|
|
|
226
227
|
devDependencies: {
|
|
227
228
|
"@biomejs/biome": "^2.3.10",
|
|
228
229
|
"@desplega.ai/slack-mock": "^0.4.0",
|
|
230
|
+
"@desplega/model-catalog": "workspace:*",
|
|
229
231
|
"@faker-js/faker": "^10.4.0",
|
|
230
|
-
"@opencode-ai/plugin": "1.
|
|
232
|
+
"@opencode-ai/plugin": "1.18.34",
|
|
231
233
|
"@types/bun": "latest",
|
|
232
234
|
"dependency-cruiser": "^18.0.0",
|
|
233
235
|
konsistent: "1.0.0-beta.1",
|
|
@@ -242,22 +244,22 @@ var package_default = {
|
|
|
242
244
|
bun: ">=1.3.12"
|
|
243
245
|
},
|
|
244
246
|
dependencies: {
|
|
245
|
-
"@agentclientprotocol/sdk": "1.
|
|
247
|
+
"@agentclientprotocol/sdk": "1.5.1",
|
|
246
248
|
"@ai-sdk/openai": "^3.0.41",
|
|
247
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
249
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.286",
|
|
248
250
|
"@anthropic-ai/sdk": "^0.93.0",
|
|
249
251
|
"@asteasolutions/zod-to-openapi": "^8.0.0",
|
|
250
252
|
"@aws-sdk/client-bedrock": "3.1048.0",
|
|
251
253
|
"@desplega.ai/business-use": "^0.4.2",
|
|
252
254
|
"@desplega.ai/localtunnel": "^2.2.0",
|
|
253
|
-
"@earendil-works/pi-agent-core": "^0.
|
|
254
|
-
"@earendil-works/pi-ai": "^0.
|
|
255
|
-
"@earendil-works/pi-coding-agent": "^0.
|
|
255
|
+
"@earendil-works/pi-agent-core": "^0.99.2",
|
|
256
|
+
"@earendil-works/pi-ai": "^0.99.2",
|
|
257
|
+
"@earendil-works/pi-coding-agent": "^0.99.2",
|
|
256
258
|
"@inkjs/ui": "^2.0.0",
|
|
257
259
|
"@linear/sdk": "^77.0.0",
|
|
258
260
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
259
|
-
"@openai/codex": "0.
|
|
260
|
-
"@opencode-ai/sdk": "^1.18.
|
|
261
|
+
"@openai/codex": "0.159.3",
|
|
262
|
+
"@opencode-ai/sdk": "^1.18.34",
|
|
261
263
|
"@openfort/openfort-node": "^0.9.1",
|
|
262
264
|
"@opentelemetry/api": "^1.9.1",
|
|
263
265
|
"@opentelemetry/api-logs": "^0.218.0",
|
|
@@ -751,7 +753,7 @@ function McpServer({ port, apiKey, dbPath }) {
|
|
|
751
753
|
if (dbPath) {
|
|
752
754
|
process.env.DATABASE_PATH = dbPath;
|
|
753
755
|
}
|
|
754
|
-
import("./http-
|
|
756
|
+
import("./http-3bbb19be.js").then(() => {
|
|
755
757
|
setStatus("running");
|
|
756
758
|
}).catch((err) => {
|
|
757
759
|
setStatus("error");
|
|
@@ -837,7 +839,7 @@ function WorkerRunner({
|
|
|
837
839
|
}) {
|
|
838
840
|
const { exit } = use_app_default();
|
|
839
841
|
import_react.useEffect(() => {
|
|
840
|
-
import("./worker-
|
|
842
|
+
import("./worker-wmwhxsph.js").then(({ runWorker }) => runWorker({
|
|
841
843
|
prompt: prompt || undefined,
|
|
842
844
|
yolo,
|
|
843
845
|
systemPrompt: systemPrompt || undefined,
|
|
@@ -854,7 +856,7 @@ function WorkerRunner({
|
|
|
854
856
|
function LeadRunner({ prompt, yolo, systemPrompt, systemPromptFile, additionalArgs }) {
|
|
855
857
|
const { exit } = use_app_default();
|
|
856
858
|
import_react.useEffect(() => {
|
|
857
|
-
import("./lead-
|
|
859
|
+
import("./lead-va0pad2c.js").then(({ runLead }) => runLead({
|
|
858
860
|
prompt: prompt || undefined,
|
|
859
861
|
yolo,
|
|
860
862
|
systemPrompt: systemPrompt || undefined,
|
|
@@ -894,8 +896,8 @@ function LazyComponent({
|
|
|
894
896
|
}
|
|
895
897
|
return import_react.createElement(Component, props);
|
|
896
898
|
}
|
|
897
|
-
var loadOnboard = () => import("./onboard-
|
|
898
|
-
var loadConnect = () => import("./setup-
|
|
899
|
+
var loadOnboard = () => import("./onboard-j6ms6d0x.js").then(({ Onboard }) => Onboard);
|
|
900
|
+
var loadConnect = () => import("./setup-8y70ys6t.js").then(({ Setup }) => Setup);
|
|
899
901
|
function UnknownCommand({ command }) {
|
|
900
902
|
const { exit } = use_app_default();
|
|
901
903
|
import_react.useEffect(() => {
|
|
@@ -1001,6 +1003,13 @@ if (args.showHelp || args.command === "help" || args.command === undefined) {
|
|
|
1001
1003
|
} else if (args.command === "version") {
|
|
1002
1004
|
console.log(`${binName} v${package_default.version}`);
|
|
1003
1005
|
process.exit(0);
|
|
1006
|
+
} else if (args.command === "onboard" && !process.versions.bun) {
|
|
1007
|
+
const { spawnSync } = await import("child_process");
|
|
1008
|
+
const result = spawnSync("bun", process.argv.slice(1), { stdio: "inherit" });
|
|
1009
|
+
if (result.error) {
|
|
1010
|
+
console.error("Onboarding requires Bun. Install Bun from https://bun.sh, then retry this command.");
|
|
1011
|
+
}
|
|
1012
|
+
process.exit(result.status ?? 1);
|
|
1004
1013
|
} else if (args.command === "docs") {
|
|
1005
1014
|
const docsUrl = "https://docs.agent-swarm.dev";
|
|
1006
1015
|
console.log(`
|
|
@@ -1018,14 +1027,14 @@ ${binName} docs \u2014 v${package_default.version}
|
|
|
1018
1027
|
}
|
|
1019
1028
|
process.exit(0);
|
|
1020
1029
|
} else if (args.command === "hook") {
|
|
1021
|
-
const { runHook } = await import("./hook-
|
|
1030
|
+
const { runHook } = await import("./hook-czx13n12.js");
|
|
1022
1031
|
await runHook();
|
|
1023
1032
|
} else if (args.command === "codex-hook") {
|
|
1024
|
-
const { handleCodexHook } = await import("./codex-hook-
|
|
1033
|
+
const { handleCodexHook } = await import("./codex-hook-20me6byw.js");
|
|
1025
1034
|
await handleCodexHook();
|
|
1026
1035
|
process.exit(0);
|
|
1027
1036
|
} else if (args.command === "session-summary-stdin") {
|
|
1028
|
-
const { runSessionSummaryFromStdin } = await import("./hook-
|
|
1037
|
+
const { runSessionSummaryFromStdin } = await import("./hook-r2t4bqfg.js");
|
|
1029
1038
|
await runSessionSummaryFromStdin();
|
|
1030
1039
|
process.exit(process.exitCode ?? 0);
|
|
1031
1040
|
} else if (args.command === "artifact") {
|
|
@@ -1046,7 +1055,7 @@ ${binName} docs \u2014 v${package_default.version}
|
|
|
1046
1055
|
printHelp("scripts");
|
|
1047
1056
|
process.exit(scriptsArgs[0] === "reembed" || args.showHelp ? 0 : 1);
|
|
1048
1057
|
}
|
|
1049
|
-
const { runScriptsMaintenanceCommand } = await import("./maintenance-
|
|
1058
|
+
const { runScriptsMaintenanceCommand } = await import("./maintenance-hqewtmyg.js");
|
|
1050
1059
|
await runScriptsMaintenanceCommand(scriptsArgs);
|
|
1051
1060
|
console.log("Scripts re-embedded.");
|
|
1052
1061
|
} else if (args.command === "rbac") {
|
|
@@ -1056,21 +1065,21 @@ ${binName} docs \u2014 v${package_default.version}
|
|
|
1056
1065
|
printHelp("rbac");
|
|
1057
1066
|
process.exit(args.showHelp ? 0 : 1);
|
|
1058
1067
|
}
|
|
1059
|
-
const { runRbacCliCommand } = await import("./rbac-roles-
|
|
1068
|
+
const { runRbacCliCommand } = await import("./rbac-roles-8tzawacv.js");
|
|
1060
1069
|
await runRbacCliCommand(rbacArgs);
|
|
1061
1070
|
} else if (args.command === "codex-login") {
|
|
1062
|
-
const { runCodexLogin } = await import("./codex-login-
|
|
1071
|
+
const { runCodexLogin } = await import("./codex-login-w6fz4xbz.js");
|
|
1063
1072
|
const codexLoginArgs = process.argv.slice(process.argv.indexOf("codex-login") + 1);
|
|
1064
1073
|
await runCodexLogin(codexLoginArgs);
|
|
1065
1074
|
} else if (args.command === "codex-session-runner") {
|
|
1066
|
-
const { runCodexSessionRunner } = await import("./codex-session-runner-
|
|
1075
|
+
const { runCodexSessionRunner } = await import("./codex-session-runner-90aa80ev.js");
|
|
1067
1076
|
await runCodexSessionRunner();
|
|
1068
1077
|
} else if (args.command === "claude-managed-setup") {
|
|
1069
|
-
const { runClaudeManagedSetup } = await import("./claude-managed-setup-
|
|
1078
|
+
const { runClaudeManagedSetup } = await import("./claude-managed-setup-eacvchx0.js");
|
|
1070
1079
|
const setupArgs = process.argv.slice(process.argv.indexOf("claude-managed-setup") + 1);
|
|
1071
1080
|
await runClaudeManagedSetup(setupArgs);
|
|
1072
1081
|
} else if (args.command === "e2b") {
|
|
1073
|
-
const { runE2BCommand } = await import("./e2b-
|
|
1082
|
+
const { runE2BCommand } = await import("./e2b-ez07znam.js");
|
|
1074
1083
|
const e2bArgs = process.argv.slice(process.argv.indexOf("e2b") + 1);
|
|
1075
1084
|
await runE2BCommand(e2bArgs);
|
|
1076
1085
|
} else {
|