@desplega.ai/agent-swarm 1.173.0 → 2.0.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-ccm9xrep.js → acp-adapter-sj2g0m84.js} +17 -16
- package/dist/{actions-sgeyv08k.js → actions-fegk44gr.js} +39 -34
- package/dist/{amp-adapter-gpxp3kc9.js → amp-adapter-ad8ft89x.js} +8 -7
- package/dist/{app-km9qnv2f.js → app-kfvgbvzy.js} +18 -14
- package/dist/{assistant-5r8tcvvd.js → assistant-z7zdy9ja.js} +40 -35
- package/dist/{boot-reembed-swwzdgd7.js → boot-reembed-5c2z0mbe.js} +10 -9
- package/dist/{boot-reembed-16rv9843.js → boot-reembed-j8xa181e.js} +10 -9
- package/dist/{boot-scrub-sweep-zkr6vkqb.js → boot-scrub-sweep-hnkn3rgt.js} +11 -10
- package/dist/{boot-seeds-d8sp49t2.js → boot-seeds-kwjq4d2z.js} +14 -13
- package/dist/{claude-adapter-yzzzh8jp.js → claude-adapter-9vmvpvgd.js} +19 -18
- package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-k9qae05j.js} +7 -5
- package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-q54zx5q2.js} +6 -4
- package/dist/{claude-sdk-session-4whxere4.js → claude-sdk-session-9jye6cxr.js} +11881 -11472
- package/dist/{cli-94b48jhk.js → cli-03gedhng.js} +16 -14
- package/dist/{cli-1w0vj3gw.js → cli-1e4b6bzh.js} +7 -7
- package/dist/{cli-d603qf86.js → cli-29jc5q7w.js} +10 -8
- package/dist/cli-2m1ktfzz.js +17795 -0
- package/dist/{cli-x119kdba.js → cli-3dj8k4vy.js} +1 -1
- package/dist/{cli-srqq3gc5.js → cli-3fbmmawm.js} +5 -5
- package/dist/{cli-gmdajfw5.js → cli-4jxm2qtz.js} +4987 -1708
- package/dist/{cli-tadfgd0t.js → cli-5hkm7whv.js} +33 -4
- package/dist/{cli-42qhyvwx.js → cli-5t4f29ez.js} +3 -3
- package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
- package/dist/cli-6cvfxs8r.js +47 -0
- package/dist/{cli-0kxf81jj.js → cli-6jyj59nb.js} +2 -2
- package/dist/{cli-w1apjecb.js → cli-6razj6t4.js} +2 -2
- package/dist/{cli-anzdk0z4.js → cli-74ahz61x.js} +2 -2
- package/dist/{cli-m89t9jdf.js → cli-7x0g4sn1.js} +15416 -16024
- package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
- package/dist/{cli-81r1wjyv.js → cli-9nfx44eh.js} +1 -1
- package/dist/cli-9traj3dn.js +638 -0
- package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
- package/dist/{cli-na2pxe4f.js → cli-apx87jne.js} +2 -2
- package/dist/{cli-rfz2ve55.js → cli-bzszjf2p.js} +2855 -862
- package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
- package/dist/{cli-hsem16hb.js → cli-cgtksawx.js} +7 -4
- package/dist/{cli-db3m6zdt.js → cli-d2qr7aj4.js} +1 -1
- package/dist/{cli-rfs4vddv.js → cli-d5f9ed5c.js} +5 -5
- package/dist/cli-e3g5mbkz.js +776 -0
- package/dist/{cli-7jykv7ef.js → cli-e6mpjhed.js} +1 -1
- package/dist/{cli-7a93cv8c.js → cli-ee9gtz70.js} +98 -23
- package/dist/{cli-3nxdmjrc.js → cli-eejsgvm4.js} +4 -4
- package/dist/{cli-fmhj1ehj.js → cli-ef1hg1wv.js} +470 -51
- package/dist/cli-f527ce74.js +781 -0
- package/dist/{cli-ppy4nnnh.js → cli-f7kr7svz.js} +2 -2
- package/dist/cli-hjwmhcg1.js +10622 -0
- package/dist/{cli-2bw3w47j.js → cli-hnhtk6cj.js} +1 -1
- package/dist/{cli-ywm1azg9.js → cli-hnmhtzvh.js} +6 -4
- package/dist/{cli-h7k0xtry.js → cli-hvqbtna4.js} +4 -1256
- package/dist/{cli-s8z6x4b4.js → cli-j0pfptdp.js} +218 -102
- package/dist/cli-jta2eyzc.js +619 -0
- package/dist/{cli-5er5gjbm.js → cli-k382tshb.js} +10 -11
- package/dist/{cli-v3zhnxsb.js → cli-k3dp5tpf.js} +2 -2
- package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
- package/dist/cli-kceah1eh.js +92 -0
- package/dist/{cli-ne7smj1b.js → cli-ke896fcf.js} +10 -10
- package/dist/{cli-xc7p7s3g.js → cli-kt6zqg0e.js} +6 -6
- package/dist/{cli-wrh08zjd.js → cli-m50t4309.js} +5 -18
- package/dist/cli-n2wq4j7m.js +6985 -0
- package/dist/{cli-bv2etw2y.js → cli-n3hzg89b.js} +46 -15
- package/dist/{cli-tmhsxhb8.js → cli-n5vwg842.js} +23 -6
- package/dist/{cli-qm1448f9.js → cli-ne236afy.js} +8 -8
- package/dist/{cli-d161g69q.js → cli-p1x85d2t.js} +50 -2
- package/dist/{cli-7pz3b7x5.js → cli-przpmdgr.js} +25 -0
- package/dist/{cli-0a7mm3zp.js → cli-q0ke1yww.js} +25 -21
- package/dist/{cli-e3pmyt39.js → cli-q50942rs.js} +1 -1
- package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
- package/dist/{cli-phcqp1b9.js → cli-r2pnvj8g.js} +2 -2
- package/dist/{cli-jpc4r224.js → cli-r62a35ea.js} +19 -3
- package/dist/{cli-cd0hv9nh.js → cli-ra0xzggj.js} +2 -2
- package/dist/cli-rhs9pz33.js +294 -0
- package/dist/{cli-r4fqfpwf.js → cli-s2sp957d.js} +50 -27
- package/dist/{cli-1x7da0de.js → cli-s4setq91.js} +8 -8
- package/dist/{cli-6thk4jz3.js → cli-se8w6wny.js} +6 -6
- package/dist/cli-skxvvpap.js +10140 -0
- package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
- package/dist/{cli-0p3enk35.js → cli-tqaazemc.js} +9 -1
- package/dist/{cli-nwrdx840.js → cli-tr4sxp68.js} +3 -3
- package/dist/{cli-r0byd61h.js → cli-tsde1hdr.js} +15 -15
- package/dist/{cli-b07hr3bt.js → cli-txqb9s38.js} +2 -2
- package/dist/{cli-6r2f7edk.js → cli-v1yb0rqb.js} +6 -6
- package/dist/{cli-saqyage0.js → cli-vatyhshy.js} +179 -27
- package/dist/{cli-5wpw4rab.js → cli-vdach5a9.js} +5 -5
- package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
- package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
- package/dist/{cli-c3rk1v0x.js → cli-wayw93nt.js} +3 -3
- package/dist/cli-wmgrkscj.js +23254 -0
- package/dist/{cli-9xf7fdtp.js → cli-z5jjpaxw.js} +29 -6
- package/dist/{cli-451ks6aw.js → cli-zkpks3r3.js} +1 -1
- package/dist/cli.js +29 -45
- package/dist/{codex-adapter-r3dn4fp5.js → codex-adapter-y81sssk0.js} +15 -14
- package/dist/{codex-login-841kv5fk.js → codex-login-f2rcfpp9.js} +3 -2
- package/dist/{codex-session-runner-fwt793h4.js → codex-session-runner-8vx4j6a9.js} +15 -14
- package/dist/{commands-z8fq9qna.js → commands-kcpvpcrr.js} +11 -10
- package/dist/{controller-hq5ggpcp.js → controller-ywrmt6yd.js} +5 -4
- package/dist/{controllers-connect-3mf2btyj.js → controllers-connect-kwpvj3rf.js} +42 -37
- package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-cehv1qns.js} +7 -6
- package/dist/{db-yyhqqrbf.js → db-k8ankj20.js} +12 -11
- package/dist/{db-qfpq4bt7.js → db-ww5d7jq3.js} +28 -9
- package/dist/{devin-adapter-xgtj680j.js → devin-adapter-x1022qb1.js} +3 -2
- package/dist/{dispatcher-x0x7qfcq.js → dispatcher-e8gq5m68.js} +38 -33
- package/dist/{docker-f503k9p0.js → docker-ff6y1190.js} +3 -2
- package/dist/{dsh-adapter-34etvb5m.js → dsh-adapter-3epjm3af.js} +7 -6
- package/dist/{e2b-66xra4az.js → e2b-8ygwhg0f.js} +4 -3
- package/dist/{e2b-xwhyj8cw.js → e2b-swhnpw3n.js} +4 -3
- package/dist/{event-bus-vjtv82gm.js → event-bus-6axnngdj.js} +3 -2
- package/dist/{external-channel-h1fjecwe.js → external-channel-h3359cwn.js} +11 -10
- package/dist/{google-generative-ai-szdxbpqg.js → google-generative-ai-g8db7x0f.js} +4 -2
- package/dist/{google-vertex-qzw3p36d.js → google-vertex-r2692q0r.js} +4 -2
- package/dist/{grok-adapter-e7mr287e.js → grok-adapter-0d4x7gkx.js} +18 -17
- package/dist/{handlers-znb9n7d4.js → handlers-an1gzv21.js} +41 -36
- package/dist/{heartbeat-bm4qkn8d.js → heartbeat-6dakeb61.js} +43 -38
- package/dist/{hook-254r4mza.js → hook-6v6cv6d5.js} +11 -23
- package/dist/{hook-xaa3q80s.js → hook-sa5xye4y.js} +12 -11
- package/dist/{http-3dgrgp8y.js → http-r7f3eky0.js} +1499 -251
- package/dist/index-52j1aja4.js +3465 -0
- package/dist/{index-fx3jqq1e.js → index-7ep4gzdk.js} +38 -33
- package/dist/index-9gw58n4k.js +193 -0
- package/dist/index-9j87mcm8.js +56305 -0
- package/dist/index-bsmcresk.js +79424 -0
- package/dist/index-mh85qhec.js +475 -0
- package/dist/{index-g2byveez.js → index-rmpw9a8q.js} +38 -33
- package/dist/{index-2ybk7khy.js → index-s2wxgzr0.js} +468 -683
- package/dist/{index-bdsqa799.js → index-v1v6n7hg.js} +43 -38
- package/dist/index-we27kd31.js +12810 -0
- package/dist/{index-jd7sejm2.js → index-zk96aq1k.js} +10 -9
- package/dist/{keepalive-6ywhpja1.js → keepalive-be9vwy5h.js} +12 -11
- package/dist/{lead-cw45n21s.js → lead-0861cwrf.js} +61 -56
- package/dist/{maintenance-ss1a1ge9.js → maintenance-mzzgc8bn.js} +10 -9
- package/dist/{node-fkajaq96.js → node-mn1zs7an.js} +2 -1
- package/dist/{oauth-refresh-sweep-3c6f8vyy.js → oauth-refresh-sweep-cpdnfwdj.js} +11 -10
- package/dist/{onboard-8hzdhc1k.js → onboard-fh8qs4r3.js} +11 -3
- package/dist/{opencode-adapter-qbchbcfz.js → opencode-adapter-nm42wwj8.js} +18 -13
- package/dist/{otel-impl-e6mnvc4v.js → otel-impl-x6c1c9g4.js} +242 -868
- package/dist/{pi-mono-adapter-3c9g9snh.js → pi-mono-adapter-9n2ya240.js} +244 -106
- package/dist/{pricing-refresh-gedkjdw0.js → pricing-refresh-qb0rv0ap.js} +12 -11
- package/dist/{rbac-roles-dt4vh1yy.js → rbac-roles-1gzdwbh1.js} +11 -10
- package/dist/{rbac-roles-eszdg6pm.js → rbac-roles-3mraey52.js} +12 -11
- package/dist/{render-v2-907cy6sa.js → render-v2-agpa45zz.js} +18 -14
- package/dist/{resume-42stcaz0.js → resume-x0ydy9s9.js} +25 -21
- package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
- package/dist/{setup-adbc1c10.js → setup-as9ga0d6.js} +2 -2
- package/dist/{virtual-modules-rtmt494q.js → virtual-modules-9gkxqrap.js} +6 -5
- package/dist/{work-objects-wpj8ck95.js → work-objects-y5g1y7ev.js} +41 -36
- package/dist/{worker-bzdra9rf.js → worker-860c3e38.js} +61 -56
- package/dist/{x-qfmygqqv.js → x-m477fr0h.js} +3 -2
- package/openapi.json +523 -344
- package/package.json +10 -11
- package/src/be/config-refs.ts +60 -0
- package/src/be/db/page-versions.ts +15 -0
- package/src/be/db/runtime.ts +35 -8
- package/src/be/db/skill-name-resolution.ts +36 -0
- package/src/be/db/tasks/read.ts +230 -0
- package/src/be/db/tasks/write.ts +7 -0
- package/src/be/db.ts +52 -7
- package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
- package/src/be/migrations/216_task_resolved_effort.sql +5 -0
- package/src/be/migrations/217_chat_sdk_state.sql +104 -0
- package/src/be/model-catalog-store.ts +5 -1
- package/src/be/model-tier-resolution.ts +12 -1
- package/src/be/model-validation.ts +5 -2
- package/src/be/models-catalog.ts +26 -1
- package/src/be/modelsdev-cache.json +198 -63
- package/src/be/modelsdev-cache.ts +9 -1
- package/src/be/script-credential-broker.ts +39 -2
- package/src/be/scripts/run-saved.ts +1 -0
- package/src/be/scripts/typecheck.ts +10 -8
- package/src/be/seed/runner.ts +13 -1
- package/src/be/seed/state-db.ts +5 -0
- package/src/be/seed/types.ts +6 -0
- package/src/be/seed-pricing.ts +19 -2
- package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
- package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
- package/src/be/seed-skills/bundled-files.generated.json +0 -18
- package/src/be/seed-skills/index.ts +104 -3
- package/src/be/swarm-config-guard.ts +52 -0
- package/src/cli.tsx +0 -16
- package/src/commands/onboard/non-interactive.ts +4 -2
- package/src/commands/provider-credentials.ts +52 -6
- package/src/commands/runner.ts +190 -54
- package/src/e2b/env.ts +5 -0
- package/src/extensions/contract-types.generated.ts +1 -1
- package/src/extensions/contract.ts +45 -0
- package/src/extensions/dispatcher.ts +7 -0
- package/src/extensions/post-bridge.ts +40 -0
- package/src/github/handlers.ts +11 -4
- package/src/heartbeat/templates.ts +8 -5
- package/src/hooks/hook.ts +0 -26
- package/src/http/all-routes.ts +0 -1
- package/src/http/config.ts +36 -17
- package/src/http/core.ts +4 -0
- package/src/http/index.ts +14 -2
- package/src/http/integrations.ts +88 -1
- package/src/http/mcp.ts +15 -5
- package/src/http/page-proxy.ts +2 -4
- package/src/http/pages-public.ts +3 -3
- package/src/http/pages.ts +3 -13
- package/src/http/poll.ts +28 -68
- package/src/http/requested-by.ts +54 -0
- package/src/http/scripts.ts +1 -0
- package/src/http/stats.ts +1 -30
- package/src/http/tasks.ts +61 -5
- package/src/http/utils.ts +14 -0
- package/src/http/webhooks.ts +159 -1
- package/src/http/x.ts +1 -0
- package/src/integrations/chat-sdk/adapters.ts +129 -0
- package/src/integrations/chat-sdk/attachments.ts +232 -0
- package/src/integrations/chat-sdk/background.ts +36 -0
- package/src/integrations/chat-sdk/commands.ts +194 -0
- package/src/integrations/chat-sdk/config.ts +198 -0
- package/src/integrations/chat-sdk/discord-api.ts +63 -0
- package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
- package/src/integrations/chat-sdk/handlers.ts +28 -0
- package/src/integrations/chat-sdk/inbound.ts +426 -0
- package/src/integrations/chat-sdk/limits.ts +48 -0
- package/src/integrations/chat-sdk/logger.ts +81 -0
- package/src/integrations/chat-sdk/outbound.ts +123 -0
- package/src/integrations/chat-sdk/relay.ts +172 -0
- package/src/integrations/chat-sdk/router.ts +169 -0
- package/src/integrations/chat-sdk/runtime.ts +351 -0
- package/src/integrations/chat-sdk/schema.ts +245 -0
- package/src/integrations/chat-sdk/state.ts +243 -0
- package/src/integrations/chat-sdk/status.ts +244 -0
- package/src/integrations/chat-sdk/steering.ts +58 -0
- package/src/integrations/chat-sdk/teams-origin.ts +77 -0
- package/src/integrations/chat-sdk/telegram-api.ts +56 -0
- package/src/integrations/chat-sdk/templates.ts +16 -0
- package/src/integrations/chat-sdk/test-hooks.ts +37 -0
- package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
- package/src/integrations/chat-sdk/typing.ts +65 -0
- package/src/pages/version.ts +4 -5
- package/src/prompts/base-prompt.ts +111 -45
- package/src/providers/acp-target-catalog.ts +6 -0
- package/src/providers/acp-targets.ts +55 -2
- package/src/providers/amp-adapter.ts +1 -1
- package/src/providers/claude-adapter.ts +1 -1
- package/src/providers/claude-flag-settings.ts +17 -5
- package/src/providers/claude-managed-adapter.ts +1 -1
- package/src/providers/claude-session-events.ts +6 -1
- package/src/providers/dsh-adapter.ts +1 -1
- package/src/providers/opencode-adapter.ts +243 -26
- package/src/providers/opencode-swarm-plugin.ts +31 -0
- package/src/providers/pi-mono-adapter.ts +398 -153
- package/src/providers/pricing-sources.md +33 -2
- package/src/providers/reasoning-effort.ts +27 -0
- package/src/providers/types.ts +6 -2
- package/src/rbac/legacy-policy.ts +8 -2
- package/src/rbac/permissions.ts +21 -0
- package/src/scheduler/scheduler.ts +4 -2
- package/src/scripts-runtime/loader.ts +19 -7
- package/src/scripts-runtime/sdk-allowlist.ts +8 -6
- package/src/scripts-runtime/swarm-sdk.ts +0 -11
- package/src/scripts-runtime/types/stdlib.d.ts +27 -15
- package/src/scripts-runtime/types/swarm-extension.d.ts +63 -1
- package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -15
- package/src/server.ts +52 -18
- package/src/slack/event-dedup.ts +1 -1
- package/src/tasks/additive-buffer.ts +4 -2
- package/src/tasks/context-key.ts +60 -1
- package/src/tasks/model-pin.ts +67 -0
- package/src/tasks/worker-follow-up.ts +4 -31
- package/src/tests/acp-adapter.test.ts +42 -0
- package/src/tests/api-drain-worker-e2e.test.ts +1 -6
- package/src/tests/base-prompt.test.ts +58 -54
- package/src/tests/chat-sdk-commands.test.ts +191 -0
- package/src/tests/chat-sdk-config.test.ts +334 -0
- package/src/tests/chat-sdk-discord-api.test.ts +68 -0
- package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
- package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
- package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
- package/src/tests/chat-sdk-harness.ts +146 -0
- package/src/tests/chat-sdk-inbound.test.ts +363 -0
- package/src/tests/chat-sdk-relay.test.ts +470 -0
- package/src/tests/chat-sdk-reload.test.ts +128 -0
- package/src/tests/chat-sdk-shutdown.test.ts +220 -0
- package/src/tests/chat-sdk-slack.test.ts +268 -0
- package/src/tests/chat-sdk-state.test.ts +163 -0
- package/src/tests/chat-sdk-status-route.test.ts +382 -0
- package/src/tests/chat-sdk-teams.test.ts +277 -0
- package/src/tests/chat-sdk-tools.test.ts +520 -0
- package/src/tests/chat-sdk-typing.test.ts +120 -0
- package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
- package/src/tests/claude-adapter-binary.test.ts +9 -4
- package/src/tests/claude-flag-settings.test.ts +11 -3
- package/src/tests/claude-managed-adapter.test.ts +1 -1
- package/src/tests/claude-sdk-lifecycle.test.ts +9 -3
- package/src/tests/claude-thinking-tokens.test.ts +57 -0
- package/src/tests/claude-worker-parity.test.ts +2 -7
- package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
- package/src/tests/config-refs.test.ts +66 -0
- package/src/tests/context-key.test.ts +19 -0
- package/src/tests/cors-allowlist.test.ts +25 -0
- package/src/tests/create-page-tool.test.ts +18 -0
- package/src/tests/credential-check.test.ts +139 -0
- package/src/tests/credentials.test.ts +21 -0
- package/src/tests/db-runtime.test.ts +61 -0
- package/src/tests/db-task-read-contract.test.ts +20 -0
- package/src/tests/db-task-write-contract.test.ts +10 -0
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/dsh-adapter.test.ts +1 -1
- package/src/tests/enabled-capabilities.test.ts +20 -0
- package/src/tests/entrypoint-api-readiness.test.ts +14 -8
- package/src/tests/entrypoint-config-env-export.test.ts +5 -2
- package/src/tests/entrypoint-export-to-env.test.ts +78 -0
- package/src/tests/explicit-model-validation.test.ts +105 -1
- package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
- package/src/tests/extensions-post-bridge.test.ts +51 -0
- package/src/tests/fetch-resolved-env.test.ts +128 -0
- package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
- package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
- package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
- package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
- package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
- package/src/tests/github-handlers.test.ts +35 -0
- package/src/tests/harness-provider-resolution.test.ts +12 -0
- package/src/tests/heartbeat-checklist.test.ts +3 -2
- package/src/tests/hook-runtime-close.test.ts +0 -2
- package/src/tests/http-api-integration.test.ts +0 -25
- package/src/tests/migration-046-budgets.test.ts +17 -16
- package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
- package/src/tests/model-tier-resolution.test.ts +93 -0
- package/src/tests/models-catalog.test.ts +42 -1
- package/src/tests/openai-compatible-providers.test.ts +134 -0
- package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
- package/src/tests/opencode-adapter.test.ts +216 -2
- package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
- package/src/tests/opencode-shell-env.test.ts +145 -0
- package/src/tests/openrouter-base-url.test.ts +101 -151
- package/src/tests/page-proxy.test.ts +1 -1
- package/src/tests/pages-browser-sdk.test.ts +76 -0
- package/src/tests/pages-feedback.test.ts +1 -1
- package/src/tests/paused-tasks-requested-by.test.ts +102 -0
- package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
- package/src/tests/pi-mono-adapter.test.ts +385 -5
- package/src/tests/pi-shell-env.test.ts +170 -0
- package/src/tests/prompt-template-remaining.test.ts +35 -0
- package/src/tests/rbac-engine.test.ts +11 -3
- package/src/tests/runner-exit-after-tasks.test.ts +0 -4
- package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
- package/src/tests/script-connections.test.ts +2 -0
- package/src/tests/scripts-http.test.ts +201 -1
- package/src/tests/scripts-only-gating.test.ts +2 -3
- package/src/tests/scripts-runtime.test.ts +58 -40
- package/src/tests/secret-scrubber.test.ts +86 -0
- package/src/tests/seed-skills-bundled-files.test.ts +45 -53
- package/src/tests/seed-skills-retire.test.ts +182 -0
- package/src/tests/send-task-requester-gate.test.ts +58 -0
- package/src/tests/session-cost-recompute-unit.test.ts +46 -0
- package/src/tests/skill-get-name-resolution.test.ts +137 -0
- package/src/tests/sonnet-5-5-registry.test.ts +9 -1
- package/src/tests/swarm-config-export-to-env.test.ts +267 -0
- package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
- package/src/tests/swarm-diff.test.ts +1 -1
- package/src/tests/task-model-effort-rerun.test.ts +164 -0
- package/src/tests/task-session-prompts.test.ts +132 -0
- package/src/tests/task-tool-manifest.test.ts +14 -0
- package/src/tests/task-tools-ctx.test.ts +2 -0
- package/src/tests/tool-annotations.test.ts +6 -6
- package/src/tests/ui-logs-parser.test.ts +43 -0
- package/src/tests/used-by-route.test.ts +6 -0
- package/src/tests/vercel-ai-gateway.test.ts +149 -0
- package/src/tests/workflow-swarm-script.test.ts +38 -0
- package/src/tests/workflow-wait-filter.test.ts +5 -3
- package/src/tools/chat-access.ts +41 -0
- package/src/tools/chat-open-dm.ts +59 -0
- package/src/tools/chat-post.ts +74 -0
- package/src/tools/chat-read-thread.ts +100 -0
- package/src/tools/chat-reply.ts +75 -0
- package/src/tools/create-page.ts +3 -13
- package/src/tools/model-catalog/index.ts +2 -1
- package/src/tools/register-chat-channel.ts +139 -0
- package/src/tools/send-task.ts +24 -0
- package/src/tools/skills/skill-get.ts +17 -9
- package/src/tools/swarm-config/get-config.ts +2 -1
- package/src/tools/swarm-config/list-config.ts +2 -1
- package/src/tools/swarm-config/set-config.ts +16 -3
- package/src/tools/tool-config.ts +8 -6
- package/src/types.ts +12 -2
- package/src/utils/config-env-export.ts +74 -0
- package/src/utils/credentials.test.ts +92 -0
- package/src/utils/credentials.ts +52 -4
- package/src/utils/harness-provider.ts +15 -6
- package/src/utils/runtime-model-catalog.ts +11 -1
- package/src/utils/secret-scrubber.ts +71 -2
- package/src/utils/task-tool-manifest.ts +19 -2
- package/src/workflows/executors/swarm-script.ts +1 -0
- package/templates/skills/agent-browser/SKILL.md +1 -1
- package/templates/skills/agent-browser/content.md +1 -1
- package/templates/skills/apps/SKILL.md +8 -1
- package/templates/skills/apps/content.md +8 -1
- package/templates/skills/chat-sdk/config.json +14 -0
- package/templates/skills/chat-sdk/content.md +84 -0
- package/templates/skills/composio-gmail/content.md +7 -0
- package/templates/skills/composio-google-docs/content.md +1 -1
- package/templates/skills/email-domain-health/config.json +14 -0
- package/templates/skills/email-domain-health/content.md +131 -0
- package/templates/skills/kv-storage/content.md +2 -2
- package/templates/skills/pages/content.md +8 -10
- package/templates/skills/swarm-extensions/content.md +2 -0
- package/templates/skills/swarm-scripts/SKILL.md +4 -2
- package/templates/skills/swarm-scripts/config.json +1 -1
- package/templates/skills/swarm-scripts/content.md +4 -2
- package/templates/skills/workflow-iterate/content.md +38 -0
- package/dist/artifact-eczsknc3.js +0 -3843
- package/dist/cli-bd957dgb.js +0 -153
- package/dist/cli-q51yprfq.js +0 -1104
- package/dist/cli-t1ze64h3.js +0 -811
- package/dist/cli-tcc4wd5d.js +0 -56471
- package/dist/index-9ch1n761.js +0 -1102
- package/src/artifact-sdk/index.ts +0 -2
- package/src/artifact-sdk/localtunnel.d.ts +0 -20
- package/src/artifact-sdk/port.ts +0 -12
- package/src/artifact-sdk/server.ts +0 -183
- package/src/artifact-sdk/tunnel.ts +0 -19
- package/src/commands/artifact.ts +0 -249
- package/src/http/ecosystem.ts +0 -77
- package/src/tests/artifact-commands.test.ts +0 -92
- package/src/tests/artifact-sdk.test.ts +0 -793
- package/src/tests/register-service-security.test.ts +0 -194
- package/src/tools/list-services.ts +0 -107
- package/src/tools/register-service.ts +0 -177
- package/src/tools/unregister-service.ts +0 -73
- package/src/tools/update-service-status.ts +0 -96
- package/templates/skills/artifacts/config.json +0 -14
- package/templates/skills/artifacts/content.md +0 -344
- package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
- package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
- package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
- package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
- /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
- /package/src/{artifact-sdk → pages}/feedback-overlay.ts +0 -0
|
@@ -6,7 +6,12 @@ import {
|
|
|
6
6
|
init_secret_scrubber,
|
|
7
7
|
isSensitiveKey,
|
|
8
8
|
scrubSecrets
|
|
9
|
-
} from "./cli-
|
|
9
|
+
} from "./cli-p1x85d2t.js";
|
|
10
|
+
import {
|
|
11
|
+
init_src,
|
|
12
|
+
openAICompatibleBaseUrlVars,
|
|
13
|
+
openAICompatibleKeyVars
|
|
14
|
+
} from "./cli-e3g5mbkz.js";
|
|
10
15
|
import {
|
|
11
16
|
__esm
|
|
12
17
|
} from "./cli-bc05qbss.js";
|
|
@@ -147,6 +152,7 @@ function absolutePath(path, cwd = process.cwd()) {
|
|
|
147
152
|
}
|
|
148
153
|
var DEFAULT_E2B_API_BASE = "https://api.e2b.app", DEFAULT_E2B_TEMPLATE_NAMES, DEFAULT_E2B_FORWARD_KEYS;
|
|
149
154
|
var init_env = __esm(() => {
|
|
155
|
+
init_src();
|
|
150
156
|
init_api_key();
|
|
151
157
|
init_secret_scrubber();
|
|
152
158
|
DEFAULT_E2B_TEMPLATE_NAMES = {
|
|
@@ -161,6 +167,8 @@ var init_env = __esm(() => {
|
|
|
161
167
|
"CLAUDE_CODE_OAUTH_TOKEN",
|
|
162
168
|
"OPENAI_API_KEY",
|
|
163
169
|
"OPENROUTER_API_KEY",
|
|
170
|
+
...openAICompatibleKeyVars(),
|
|
171
|
+
...openAICompatibleBaseUrlVars(),
|
|
164
172
|
"GITHUB_TOKEN",
|
|
165
173
|
"GITLAB_TOKEN",
|
|
166
174
|
"AZURE_DEVOPS_TOKEN",
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
parseModelStr,
|
|
8
8
|
resolveCredential
|
|
9
|
-
} from "./cli-
|
|
9
|
+
} from "./cli-se8w6wny.js";
|
|
10
10
|
import {
|
|
11
11
|
complete,
|
|
12
12
|
getBuiltinModel
|
|
13
|
-
} from "./cli-
|
|
13
|
+
} from "./cli-txqb9s38.js";
|
|
14
14
|
import {
|
|
15
15
|
exports_typebox
|
|
16
16
|
} from "./cli-h6vtvt5c.js";
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
import {
|
|
30
30
|
init_secret_scrubber,
|
|
31
31
|
scrubSecrets
|
|
32
|
-
} from "./cli-
|
|
32
|
+
} from "./cli-p1x85d2t.js";
|
|
33
33
|
|
|
34
34
|
// src/utils/internal-ai/complete-structured.ts
|
|
35
35
|
init_zod();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
remediateStalledRuntime
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-ke896fcf.js";
|
|
4
4
|
import {
|
|
5
5
|
REBOOT_RETRY_PIN_TAG,
|
|
6
6
|
agentsWithLiveRuntime,
|
|
@@ -25,22 +25,22 @@ import {
|
|
|
25
25
|
repointTrackerSyncBySwarmId,
|
|
26
26
|
resolveLeadOnlyRecoveryAssignment,
|
|
27
27
|
runtimeStaleThresholdMinutes
|
|
28
|
-
} from "./cli-
|
|
28
|
+
} from "./cli-bzszjf2p.js";
|
|
29
29
|
import {
|
|
30
30
|
isMultiRuntimeEnabled
|
|
31
31
|
} from "./cli-re8z5p8p.js";
|
|
32
32
|
import {
|
|
33
33
|
runSavedScriptAsAgent
|
|
34
|
-
} from "./cli-
|
|
34
|
+
} from "./cli-ee9gtz70.js";
|
|
35
35
|
import {
|
|
36
36
|
createApprovalFollowUpTask
|
|
37
|
-
} from "./cli-
|
|
37
|
+
} from "./cli-v1yb0rqb.js";
|
|
38
38
|
import {
|
|
39
39
|
init_db as init_db2,
|
|
40
40
|
init_users,
|
|
41
41
|
listRuntimePools,
|
|
42
42
|
mintToken
|
|
43
|
-
} from "./cli-
|
|
43
|
+
} from "./cli-eejsgvm4.js";
|
|
44
44
|
import {
|
|
45
45
|
MAX_EMPTY_POLLS,
|
|
46
46
|
assignUnassignedTaskPending,
|
|
@@ -98,11 +98,11 @@ import {
|
|
|
98
98
|
settleSupersededTaskDependents,
|
|
99
99
|
supersedeTask,
|
|
100
100
|
updateAgentStatus
|
|
101
|
-
} from "./cli-
|
|
101
|
+
} from "./cli-ef1hg1wv.js";
|
|
102
102
|
import {
|
|
103
103
|
TERMINAL_TASK_STATUSES,
|
|
104
104
|
init_types
|
|
105
|
-
} from "./cli-
|
|
105
|
+
} from "./cli-cgtksawx.js";
|
|
106
106
|
import {
|
|
107
107
|
init_registry,
|
|
108
108
|
init_resolver,
|
|
@@ -112,11 +112,11 @@ import {
|
|
|
112
112
|
import {
|
|
113
113
|
init_package,
|
|
114
114
|
package_default
|
|
115
|
-
} from "./cli-
|
|
115
|
+
} from "./cli-k382tshb.js";
|
|
116
116
|
import {
|
|
117
117
|
init_event_bus,
|
|
118
118
|
workflowEventBus
|
|
119
|
-
} from "./cli-
|
|
119
|
+
} from "./cli-9nfx44eh.js";
|
|
120
120
|
import {
|
|
121
121
|
init_env_flag,
|
|
122
122
|
isEnvFlagEnabled
|
|
@@ -124,7 +124,7 @@ import {
|
|
|
124
124
|
import {
|
|
125
125
|
init_secret_scrubber,
|
|
126
126
|
scrubSecrets
|
|
127
|
-
} from "./cli-
|
|
127
|
+
} from "./cli-p1x85d2t.js";
|
|
128
128
|
|
|
129
129
|
// src/heartbeat/heartbeat.ts
|
|
130
130
|
init_package();
|
|
@@ -477,9 +477,6 @@ registerTemplate({
|
|
|
477
477
|
defaultBody: `Task Type: Heartbeat Checklist
|
|
478
478
|
Goal: Review system status and your standing orders, take action if needed.
|
|
479
479
|
|
|
480
|
-
## Current System Status [auto-generated]
|
|
481
|
-
{{system_status}}
|
|
482
|
-
|
|
483
480
|
## Your Standing Orders (snapshot from HEARTBEAT.md)
|
|
484
481
|
{{heartbeat_content}}
|
|
485
482
|
|
|
@@ -489,7 +486,7 @@ Goal: Review system status and your standing orders, take action if needed.
|
|
|
489
486
|
1. **Read your HEARTBEAT.md** — run \`read /workspace/HEARTBEAT.md\` to get the latest standing orders (the snapshot above may be slightly stale).
|
|
490
487
|
2. **Prune tracked HEARTBEAT items FIRST.** Active Blockers + Watch Items + Open Discussion combined must stay at ≤10 items; 20 is the absolute max only when genuinely super busy. This cap does not apply to evergreen Standing Orders / Governance / Playbook-index reference sections. Before adding anything, re-check every tracked item against its lift trigger and remove anything resolved, stale, or past its trigger date. Lift incident detail to memory; never keep it inline in HEARTBEAT.md. Every new tracked item must include an explicit lift trigger + date; if it has no removal condition, do not add it. If the tracked list is already at/over cap, prune before (or instead of) adding — the cap is binding.
|
|
491
488
|
3. **Run seeded heartbeat data-gathering.** Use \`script-run\` with the global scripts \`schedule-health\` and \`task-failure-audit\`, both with args \`{ "days": 1, "publishPage": false }\`. They report failing schedules and failure clusters. Check any other standing order in HEARTBEAT.md yourself. Scripts can read Slack too (\`ctx.swarm.slack_read\` or the seeded \`slack-thread-flatten\` script), so a recurring Slack check can be scripted.
|
|
492
|
-
4. Review the system status
|
|
489
|
+
4. Review the system status below plus the script results for anything that needs attention (stalled tasks, idle workers with available work, anomalies).
|
|
493
490
|
5. **CRITICAL — Reboot failure triage:** Failures with reason "worker session not found" or "worker session heartbeat is stale" indicate tasks that were INTERRUPTED by a server restart. These are NOT "expected auto-cleanup" — they represent work that was lost mid-execution. For each such failure:
|
|
494
491
|
- Check what the task was (via \`get-task-details\` with the task ID from the failure)
|
|
495
492
|
- If a retry task was auto-created (tagged \`reboot-retry\`), verify it is progressing
|
|
@@ -499,7 +496,10 @@ Goal: Review system status and your standing orders, take action if needed.
|
|
|
499
496
|
7. If something needs attention — take action now using your available tools (create tasks, post to Slack, cancel stuck tasks, etc.).
|
|
500
497
|
8. If everything looks healthy and no standing orders are actionable — complete this task with a brief "All clear" summary. You may NOT say "All clear" if reboot-related failures exist that haven't been triaged.
|
|
501
498
|
9. Do NOT create another heartbeat-checklist task — the system handles scheduling.
|
|
502
|
-
10. **Update HEARTBEAT.md only after pruning.** Keep it current, but keep tracked items capped: remove resolved items, add only dated lift-triggered items, and lift detail to memory instead of growing the file
|
|
499
|
+
10. **Update HEARTBEAT.md only after pruning.** Keep it current, but keep tracked items capped: remove resolved items, add only dated lift-triggered items, and lift detail to memory instead of growing the file.
|
|
500
|
+
|
|
501
|
+
## Current System Status [auto-generated]
|
|
502
|
+
{{system_status}}`,
|
|
503
503
|
variables: [
|
|
504
504
|
{
|
|
505
505
|
name: "system_status",
|
|
@@ -5870,7 +5870,7 @@ function githubCopilotProvider() {
|
|
|
5870
5870
|
}
|
|
5871
5871
|
|
|
5872
5872
|
// node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.lazy.js
|
|
5873
|
-
var googleGenerativeAIApi = () => lazyApi(() => import("./google-generative-ai-
|
|
5873
|
+
var googleGenerativeAIApi = () => lazyApi(() => import("./google-generative-ai-g8db7x0f.js"));
|
|
5874
5874
|
|
|
5875
5875
|
// node_modules/@earendil-works/pi-ai/dist/providers/google.js
|
|
5876
5876
|
function googleProvider() {
|
|
@@ -5885,7 +5885,7 @@ function googleProvider() {
|
|
|
5885
5885
|
}
|
|
5886
5886
|
|
|
5887
5887
|
// node_modules/@earendil-works/pi-ai/dist/api/google-vertex.lazy.js
|
|
5888
|
-
var googleVertexApi = () => lazyApi(() => import("./google-vertex-
|
|
5888
|
+
var googleVertexApi = () => lazyApi(() => import("./google-vertex-r2692q0r.js"));
|
|
5889
5889
|
|
|
5890
5890
|
// node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js
|
|
5891
5891
|
var VERTEX_ADC_PATH = "~/.config/gcloud/application_default_credentials.json";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DEFAULT_MODEL,
|
|
3
3
|
resolveCredential
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-se8w6wny.js";
|
|
5
5
|
import {
|
|
6
6
|
getSlackApp
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-skxvvpap.js";
|
|
8
8
|
import {
|
|
9
9
|
claimApprovalCancellationNotification,
|
|
10
10
|
completeApprovalCancellationNotificationClaim,
|
|
@@ -12,11 +12,11 @@ import {
|
|
|
12
12
|
getTaskById,
|
|
13
13
|
init_db1 as init_db,
|
|
14
14
|
releaseApprovalCancellationNotificationClaim
|
|
15
|
-
} from "./cli-
|
|
15
|
+
} from "./cli-ef1hg1wv.js";
|
|
16
16
|
import {
|
|
17
17
|
TERMINAL_TASK_STATUSES,
|
|
18
18
|
init_types
|
|
19
|
-
} from "./cli-
|
|
19
|
+
} from "./cli-cgtksawx.js";
|
|
20
20
|
import {
|
|
21
21
|
init_resolver,
|
|
22
22
|
resolveTemplate
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
import {
|
|
41
41
|
init_secret_scrubber,
|
|
42
42
|
scrubSecrets
|
|
43
|
-
} from "./cli-
|
|
43
|
+
} from "./cli-p1x85d2t.js";
|
|
44
44
|
import {
|
|
45
45
|
__require
|
|
46
46
|
} from "./cli-bc05qbss.js";
|
|
@@ -433,7 +433,7 @@ class HumanInTheLoopExecutor extends BaseExecutor {
|
|
|
433
433
|
}
|
|
434
434
|
if (notification.channel === "slack") {
|
|
435
435
|
try {
|
|
436
|
-
const { getSlackApp: getSlackApp2 } = await import("./app-
|
|
436
|
+
const { getSlackApp: getSlackApp2 } = await import("./app-kfvgbvzy.js");
|
|
437
437
|
const slackApp = getSlackApp2();
|
|
438
438
|
if (!slackApp) {
|
|
439
439
|
console.warn("[HITL] Slack not initialized — cannot send notification");
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
renderGoalReminder,
|
|
10
10
|
summarizeTranscript,
|
|
11
11
|
syncIdentityFilesToServer
|
|
12
|
-
} from "./cli-
|
|
12
|
+
} from "./cli-apx87jne.js";
|
|
13
13
|
import {
|
|
14
14
|
fetchInstalledMcpServers
|
|
15
15
|
} from "./cli-tng3131n.js";
|
|
@@ -23,17 +23,19 @@ import {
|
|
|
23
23
|
CONTEXT_FORMULA,
|
|
24
24
|
clampContextPercent,
|
|
25
25
|
getContextWindowSize
|
|
26
|
-
} from "./cli-
|
|
26
|
+
} from "./cli-w1q7h2r2.js";
|
|
27
27
|
import {
|
|
28
28
|
applyReasoningEffort
|
|
29
|
-
} from "./cli-
|
|
29
|
+
} from "./cli-n5vwg842.js";
|
|
30
30
|
import {
|
|
31
31
|
swarmRuntimeInstanceId
|
|
32
32
|
} from "./cli-re8z5p8p.js";
|
|
33
33
|
import {
|
|
34
34
|
init_credentials,
|
|
35
|
+
openAICompatibleKeyLabels,
|
|
36
|
+
splitCredentialPool,
|
|
35
37
|
validateOpencodeCredentials
|
|
36
|
-
} from "./cli-
|
|
38
|
+
} from "./cli-5hkm7whv.js";
|
|
37
39
|
import {
|
|
38
40
|
DEFAULT_OPENROUTER_BASE_URL,
|
|
39
41
|
getOpenRouterAttributionHeaders,
|
|
@@ -46,10 +48,23 @@ import {
|
|
|
46
48
|
} from "./cli-ej6gbxfb.js";
|
|
47
49
|
import {
|
|
48
50
|
init_secret_scrubber,
|
|
51
|
+
registerVolatileSecret,
|
|
49
52
|
scrubSecrets
|
|
50
|
-
} from "./cli-
|
|
53
|
+
} from "./cli-p1x85d2t.js";
|
|
54
|
+
import {
|
|
55
|
+
baseUrlOverride,
|
|
56
|
+
ignoredBaseUrlVar,
|
|
57
|
+
init_src,
|
|
58
|
+
openAICompatibleKeyVars,
|
|
59
|
+
openAICompatibleProvider,
|
|
60
|
+
openAICompatibleProviders,
|
|
61
|
+
providerBaseUrl,
|
|
62
|
+
providerForKeyVar,
|
|
63
|
+
providerKeyVars
|
|
64
|
+
} from "./cli-e3g5mbkz.js";
|
|
51
65
|
|
|
52
66
|
// src/providers/opencode-adapter.ts
|
|
67
|
+
init_src();
|
|
53
68
|
import { existsSync, readFileSync } from "node:fs";
|
|
54
69
|
import { dirname, join } from "node:path";
|
|
55
70
|
init_credentials();
|
|
@@ -117,11 +132,29 @@ class OpenRouterBilling {
|
|
|
117
132
|
}
|
|
118
133
|
|
|
119
134
|
// src/providers/opencode-swarm-plugin.ts
|
|
135
|
+
var OPENCODE_SHELL_ENV_KEYS = ["TERM", "OPENCODE_TERMINAL"];
|
|
136
|
+
function applyOpencodeShellEnv(callEnv, sessionEnv) {
|
|
137
|
+
const keep = new Set(OPENCODE_SHELL_ENV_KEYS);
|
|
138
|
+
for (const key of Object.keys(callEnv)) {
|
|
139
|
+
if (!keep.has(key))
|
|
140
|
+
delete callEnv[key];
|
|
141
|
+
}
|
|
142
|
+
for (const [key, value] of Object.entries(sessionEnv)) {
|
|
143
|
+
if (value !== undefined && !keep.has(key))
|
|
144
|
+
callEnv[key] = value;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
120
147
|
function createOpencodeSwarmPlugin(config, options = {}) {
|
|
121
148
|
return {
|
|
122
149
|
id: "agent-swarm",
|
|
123
150
|
async setup(ctx) {
|
|
124
151
|
options.onToolRegistry?.(() => ctx.tool.list());
|
|
152
|
+
const sessionEnv = config.env;
|
|
153
|
+
if (sessionEnv) {
|
|
154
|
+
await ctx.shell.hook("create.before", (event) => {
|
|
155
|
+
applyOpencodeShellEnv(event.env, sessionEnv);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
125
158
|
await ctx.tool.hook("execute.before", async (event) => {
|
|
126
159
|
if (!config.isLead && config.taskId) {
|
|
127
160
|
const { cancelled, reason } = await isTaskCancelled(config);
|
|
@@ -184,9 +217,22 @@ function opencodeModelToCredKey(modelStr) {
|
|
|
184
217
|
return "OPENROUTER_API_KEY";
|
|
185
218
|
if (provider === "openai")
|
|
186
219
|
return "OPENAI_API_KEY";
|
|
220
|
+
const direct = openAICompatibleProvider(provider);
|
|
221
|
+
if (direct)
|
|
222
|
+
return direct.envVar;
|
|
187
223
|
}
|
|
188
224
|
return null;
|
|
189
225
|
}
|
|
226
|
+
function credKeyNames(requiredKey) {
|
|
227
|
+
const direct = providerForKeyVar(requiredKey);
|
|
228
|
+
return direct ? providerKeyVars(direct) : [requiredKey];
|
|
229
|
+
}
|
|
230
|
+
var OPENCODE_ANY_KEY_VARS = [
|
|
231
|
+
"OPENROUTER_API_KEY",
|
|
232
|
+
"ANTHROPIC_API_KEY",
|
|
233
|
+
"OPENAI_API_KEY",
|
|
234
|
+
...openAICompatibleKeyVars()
|
|
235
|
+
];
|
|
190
236
|
function checkOpencodeCredentials(env, opts = {}) {
|
|
191
237
|
const homeDir = opts.homeDir ?? env.HOME ?? "/root";
|
|
192
238
|
const probe = opts.fs?.existsSync ?? existsSync;
|
|
@@ -196,7 +242,7 @@ function checkOpencodeCredentials(env, opts = {}) {
|
|
|
196
242
|
}
|
|
197
243
|
const requiredKey = opencodeModelToCredKey(env.MODEL_OVERRIDE);
|
|
198
244
|
if (requiredKey) {
|
|
199
|
-
if (env[
|
|
245
|
+
if (credKeyNames(requiredKey).some((name) => env[name])) {
|
|
200
246
|
return { ready: true, missing: [], satisfiedBy: "env" };
|
|
201
247
|
}
|
|
202
248
|
return {
|
|
@@ -205,13 +251,24 @@ function checkOpencodeCredentials(env, opts = {}) {
|
|
|
205
251
|
hint: `MODEL_OVERRIDE=${env.MODEL_OVERRIDE} requires ${requiredKey}; or run \`opencode auth login\` to create ${authFile}.`
|
|
206
252
|
};
|
|
207
253
|
}
|
|
208
|
-
if (
|
|
254
|
+
if (OPENCODE_ANY_KEY_VARS.some((name) => env[name])) {
|
|
209
255
|
return { ready: true, missing: [], satisfiedBy: "env" };
|
|
210
256
|
}
|
|
211
257
|
return {
|
|
212
258
|
ready: false,
|
|
213
|
-
missing: [
|
|
214
|
-
|
|
259
|
+
missing: [
|
|
260
|
+
"OPENROUTER_API_KEY",
|
|
261
|
+
"ANTHROPIC_API_KEY",
|
|
262
|
+
"OPENAI_API_KEY",
|
|
263
|
+
...openAICompatibleProviders().map((p) => p.envVar),
|
|
264
|
+
authFile
|
|
265
|
+
],
|
|
266
|
+
hint: `Set one of ${[
|
|
267
|
+
"OPENROUTER_API_KEY",
|
|
268
|
+
"ANTHROPIC_API_KEY",
|
|
269
|
+
"OPENAI_API_KEY",
|
|
270
|
+
...openAICompatibleKeyLabels()
|
|
271
|
+
].join(" / ")} (any one suffices), or run \`opencode auth login\` to create ~/.local/share/opencode/auth.json.`
|
|
215
272
|
};
|
|
216
273
|
}
|
|
217
274
|
function defaultOpencodeSkillsDir() {
|
|
@@ -275,6 +332,92 @@ function applyOpenRouterBaseUrlOverride(opencodeConfig, env = process.env) {
|
|
|
275
332
|
}
|
|
276
333
|
};
|
|
277
334
|
}
|
|
335
|
+
function buildOpenAICompatibleProviderBlock(provider, apiKey, modelId, baseUrl = provider.baseUrl) {
|
|
336
|
+
const models = {};
|
|
337
|
+
for (const m of provider.models) {
|
|
338
|
+
models[m.id] = {
|
|
339
|
+
name: m.name,
|
|
340
|
+
tool_call: true,
|
|
341
|
+
reasoning: m.reasoning,
|
|
342
|
+
limit: { context: m.contextWindow, output: m.maxOutputTokens }
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
if (modelId && !models[modelId])
|
|
346
|
+
models[modelId] = { name: modelId, tool_call: true };
|
|
347
|
+
return {
|
|
348
|
+
npm: provider.npm,
|
|
349
|
+
name: provider.displayName,
|
|
350
|
+
env: [],
|
|
351
|
+
options: { baseURL: baseUrl, apiKey },
|
|
352
|
+
models
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
function envBoundKeyVars(providerId) {
|
|
356
|
+
if (providerId === "openrouter")
|
|
357
|
+
return ["OPENROUTER_API_KEY"];
|
|
358
|
+
const direct = openAICompatibleProvider(providerId);
|
|
359
|
+
return direct?.catalog === "models.dev" ? providerKeyVars(direct) : undefined;
|
|
360
|
+
}
|
|
361
|
+
function customBlockProvider(providerId) {
|
|
362
|
+
const direct = openAICompatibleProvider(providerId);
|
|
363
|
+
return direct?.catalog === "registry" ? direct : undefined;
|
|
364
|
+
}
|
|
365
|
+
function pickProviderKey(env, names) {
|
|
366
|
+
for (const name of names) {
|
|
367
|
+
const value = env[name]?.trim();
|
|
368
|
+
if (!value)
|
|
369
|
+
continue;
|
|
370
|
+
const key = splitCredentialPool(value)[0];
|
|
371
|
+
if (key)
|
|
372
|
+
return { key, name };
|
|
373
|
+
}
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
function applyProviderKeySplice(opencodeConfig, model, env) {
|
|
377
|
+
const slash = model?.indexOf("/") ?? -1;
|
|
378
|
+
if (!model || slash <= 0)
|
|
379
|
+
return;
|
|
380
|
+
const providerId = model.slice(0, slash);
|
|
381
|
+
const existing = opencodeConfig.provider?.[providerId];
|
|
382
|
+
const custom = customBlockProvider(providerId);
|
|
383
|
+
if (custom) {
|
|
384
|
+
const picked2 = pickProviderKey(env, providerKeyVars(custom));
|
|
385
|
+
if (!picked2)
|
|
386
|
+
return;
|
|
387
|
+
const block = buildOpenAICompatibleProviderBlock(custom, picked2.key, model.slice(slash + 1), providerBaseUrl(custom, env));
|
|
388
|
+
opencodeConfig.provider = {
|
|
389
|
+
...opencodeConfig.provider,
|
|
390
|
+
[providerId]: {
|
|
391
|
+
...existing,
|
|
392
|
+
...block,
|
|
393
|
+
options: { ...existing?.options, ...block.options },
|
|
394
|
+
models: { ...existing?.models, ...block.models }
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
return picked2;
|
|
398
|
+
}
|
|
399
|
+
const names = envBoundKeyVars(providerId);
|
|
400
|
+
if (!names)
|
|
401
|
+
return;
|
|
402
|
+
const picked = pickProviderKey(env, names);
|
|
403
|
+
if (!picked)
|
|
404
|
+
return;
|
|
405
|
+
const direct = openAICompatibleProvider(providerId);
|
|
406
|
+
const baseURL = direct ? baseUrlOverride(direct, env) : undefined;
|
|
407
|
+
const options = { ...existing?.options, ...baseURL ? { baseURL } : {}, apiKey: picked.key };
|
|
408
|
+
if (direct?.baseUrlLocked) {
|
|
409
|
+
const ignored = ignoredBaseUrlVar(direct, env);
|
|
410
|
+
if (ignored || options.baseURL !== undefined) {
|
|
411
|
+
console.warn(`[opencode] ${ignored ?? `provider.${providerId}.options.baseURL`} is ignored: ${direct.displayName} uses its built-in endpoint`);
|
|
412
|
+
}
|
|
413
|
+
delete options.baseURL;
|
|
414
|
+
}
|
|
415
|
+
opencodeConfig.provider = {
|
|
416
|
+
...opencodeConfig.provider,
|
|
417
|
+
[providerId]: { ...existing, env: [], options }
|
|
418
|
+
};
|
|
419
|
+
return picked;
|
|
420
|
+
}
|
|
278
421
|
var SWARM_AGENT_NAME = "swarm";
|
|
279
422
|
var TRANSCRIPT_TAIL_CHARS = 20000;
|
|
280
423
|
var TOOL_RESULT_PREVIEW_CHARS = 500;
|
|
@@ -531,9 +674,10 @@ class OpencodeSession {
|
|
|
531
674
|
autoIndexMemoryFile(this.swarm, path);
|
|
532
675
|
}
|
|
533
676
|
}
|
|
534
|
-
fail(
|
|
677
|
+
fail(rawMessage) {
|
|
535
678
|
if (this.aborted || this.completed)
|
|
536
679
|
return;
|
|
680
|
+
const message = scrubSecrets(rawMessage);
|
|
537
681
|
this.emit({ type: "error", message });
|
|
538
682
|
this.finish(async () => ({
|
|
539
683
|
exitCode: 1,
|
|
@@ -681,6 +825,9 @@ class OpencodeAdapter {
|
|
|
681
825
|
[SWARM_AGENT_NAME]: { mode: "primary", prompt: config.systemPrompt ?? "" }
|
|
682
826
|
}
|
|
683
827
|
};
|
|
828
|
+
const splicedKey = applyProviderKeySplice(opencodeConfig, config.model, env);
|
|
829
|
+
if (splicedKey)
|
|
830
|
+
registerVolatileSecret(splicedKey.key, splicedKey.name);
|
|
684
831
|
const reasoningApplication = applyReasoningEffort("opencode", config.model, config.reasoningEffort);
|
|
685
832
|
const appliedReasoningEffort = reasoningApplication.kind === "opencode-options" ? config.reasoningEffort ?? null : null;
|
|
686
833
|
if (reasoningApplication.kind === "opencode-options") {
|
|
@@ -712,21 +859,26 @@ class OpencodeAdapter {
|
|
|
712
859
|
const { sdk, version: opencodeVersion } = await loadOpencodeSdkImpl();
|
|
713
860
|
let listTools;
|
|
714
861
|
const billing = config.model.startsWith("openrouter/") ? new OpenRouterBilling : undefined;
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
862
|
+
let host;
|
|
863
|
+
try {
|
|
864
|
+
host = await sdk.OpenCode.create({
|
|
865
|
+
config: { content: JSON.stringify(opencodeConfig) },
|
|
866
|
+
plugins: [
|
|
867
|
+
createOpencodeSwarmPlugin(swarm, {
|
|
868
|
+
onToolRegistry: (lister) => {
|
|
869
|
+
listTools = lister;
|
|
870
|
+
},
|
|
871
|
+
...billing ? { onOpenRouterResponse: (response) => billing.observe(response) } : {}
|
|
872
|
+
})
|
|
873
|
+
],
|
|
874
|
+
log: {
|
|
875
|
+
level: "warn",
|
|
876
|
+
emit: (entry) => console.warn(scrubSecrets(`[opencode] ${entry.message}`))
|
|
877
|
+
}
|
|
878
|
+
});
|
|
879
|
+
} catch (err) {
|
|
880
|
+
throw new Error(scrubSecrets(`opencode host failed to start: ${errorMessage(err, "")}`));
|
|
881
|
+
}
|
|
730
882
|
let sessionId;
|
|
731
883
|
try {
|
|
732
884
|
const created = await host.sessions.create({
|
|
@@ -736,7 +888,7 @@ class OpencodeAdapter {
|
|
|
736
888
|
sessionId = created.id;
|
|
737
889
|
} catch (err) {
|
|
738
890
|
await host.close().catch(() => {});
|
|
739
|
-
throw err;
|
|
891
|
+
throw new Error(scrubSecrets(`opencode session create failed: ${errorMessage(err, "")}`));
|
|
740
892
|
}
|
|
741
893
|
const session = new OpencodeSession(host, sessionId, config.model, swarm, config.cwd, appliedReasoningEffort, billing);
|
|
742
894
|
session.emitSessionInit(opencodeVersion ? { version: opencodeVersion } : undefined);
|
|
@@ -779,4 +931,4 @@ class OpencodeAdapter {
|
|
|
779
931
|
}
|
|
780
932
|
}
|
|
781
933
|
|
|
782
|
-
export { checkOpencodeCredentials, resolveOpencodeSdkSpecifier, _setOpencodeSdkLoaderForTests, applyOpenRouterBaseUrlOverride, _setOpencodeSessionHooksForTests, checkSwarmMcpAdmission, OpencodeSession, OpencodeAdapter };
|
|
934
|
+
export { checkOpencodeCredentials, resolveOpencodeSdkSpecifier, _setOpencodeSdkLoaderForTests, applyOpenRouterBaseUrlOverride, buildOpenAICompatibleProviderBlock, applyProviderKeySplice, _setOpencodeSessionHooksForTests, checkSwarmMcpAdmission, OpencodeSession, OpencodeAdapter };
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
CONTEXT_FORMULA,
|
|
6
6
|
clampContextPercent,
|
|
7
7
|
computeContextUsedUnified
|
|
8
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-w1q7h2r2.js";
|
|
9
9
|
import {
|
|
10
10
|
applyReasoningEffort
|
|
11
|
-
} from "./cli-
|
|
11
|
+
} from "./cli-n5vwg842.js";
|
|
12
12
|
import {
|
|
13
13
|
ampBillsCacheWrites,
|
|
14
14
|
resolveAmpModel
|
|
15
|
-
} from "./cli-
|
|
15
|
+
} from "./cli-hnhtk6cj.js";
|
|
16
16
|
import {
|
|
17
17
|
swarmRuntimeInstanceId
|
|
18
18
|
} from "./cli-re8z5p8p.js";
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
init_secret_scrubber,
|
|
29
29
|
registerVolatileSecret,
|
|
30
30
|
scrubSecrets
|
|
31
|
-
} from "./cli-
|
|
31
|
+
} from "./cli-p1x85d2t.js";
|
|
32
32
|
|
|
33
33
|
// src/providers/amp-adapter.ts
|
|
34
34
|
import { existsSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
@@ -36,7 +36,7 @@ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
|
36
36
|
import { tmpdir } from "node:os";
|
|
37
37
|
import { join } from "node:path";
|
|
38
38
|
init_secret_scrubber();
|
|
39
|
-
var AMP_PACKAGE = "@ampcode/cli@0.0.
|
|
39
|
+
var AMP_PACKAGE = "@ampcode/cli@0.0.1792065649-g5a30fc";
|
|
40
40
|
var AMP_MCP_SERVER_NAME = "agent-swarm";
|
|
41
41
|
var AMP_PLUGIN_MODE_KEY = "agent-swarm";
|
|
42
42
|
var AMP_LIVE_TEST_TIMEOUT_MS = 5000;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
-
buildClaudeShortnameMap,
|
|
3
2
|
init_runtime_model_catalog,
|
|
4
|
-
init_src,
|
|
5
3
|
runtimeCatalogModel,
|
|
6
4
|
runtimeCatalogSection
|
|
7
|
-
} from "./cli-
|
|
5
|
+
} from "./cli-stfs0k5s.js";
|
|
6
|
+
import {
|
|
7
|
+
buildClaudeShortnameMap,
|
|
8
|
+
init_src
|
|
9
|
+
} from "./cli-e3g5mbkz.js";
|
|
8
10
|
|
|
9
11
|
// src/utils/context-window.ts
|
|
10
12
|
init_src();
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
recordUnmappedIdentity,
|
|
3
3
|
resolveIdentity
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-bzszjf2p.js";
|
|
5
5
|
import {
|
|
6
6
|
findOrCreateUserByEmail,
|
|
7
7
|
findUserByExternalId,
|
|
8
8
|
init_users,
|
|
9
9
|
linkIdentity
|
|
10
|
-
} from "./cli-
|
|
10
|
+
} from "./cli-eejsgvm4.js";
|
|
11
11
|
import {
|
|
12
12
|
getKv,
|
|
13
13
|
init_db1 as init_db,
|
|
14
14
|
upsertKv
|
|
15
|
-
} from "./cli-
|
|
15
|
+
} from "./cli-ef1hg1wv.js";
|
|
16
16
|
|
|
17
17
|
// src/slack/enrich.ts
|
|
18
18
|
init_db();
|