@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
|
@@ -22,8 +22,8 @@ rate by hand should also update this file.
|
|
|
22
22
|
- **Runtime module**: `src/be/models-catalog.ts`; route in
|
|
23
23
|
`src/http/models-catalog.ts`.
|
|
24
24
|
- Every successful models.dev fetch in the runtime refresh above also updates
|
|
25
|
-
an in-memory slim catalog (openrouter / anthropic / openai / amazon-bedrock
|
|
26
|
-
only, picker-relevant fields only). The UI model picker
|
|
25
|
+
an in-memory slim catalog (openrouter / anthropic / openai / amazon-bedrock /
|
|
26
|
+
nan / helmcode only, picker-relevant fields only). The UI model picker
|
|
27
27
|
(`apps/ui/src/lib/agent-runtime-models.ts` via `useModelsCatalog()`) prefers
|
|
28
28
|
this over its build-time snapshot, so new models appear without a deploy.
|
|
29
29
|
- Pinned limited-availability entries (`PINNED_MODELSDEV_ENTRIES`) are
|
|
@@ -84,6 +84,25 @@ rate by hand should also update this file.
|
|
|
84
84
|
`inputTokens`, clamped to zero, so fresh input is priced separately.
|
|
85
85
|
Cursor's own models are not in models.dev: see
|
|
86
86
|
`CURSOR_FIRST_PARTY_PRICING` below.
|
|
87
|
+
- OpenAI-compatible registry providers: NaN models (models.dev `nan`
|
|
88
|
+
section) and Helmcode models (the registry-synthesized `helmcode`
|
|
89
|
+
section, below) → rows under `provider='pi'` and
|
|
90
|
+
`provider='opencode'`, keyed `nan/<id>` and `helmcode/<id>`, at $0 input
|
|
91
|
+
and $0 output. Both providers bill a flat rate per key, so a session's
|
|
92
|
+
marginal cost is $0. `buildModelsDevSeedRows()` projects them, so the rows
|
|
93
|
+
land at boot seed and on refresh, and sessions record $0 with
|
|
94
|
+
`costSource: "pricing-table"` rather than `unpriced`.
|
|
95
|
+
|
|
96
|
+
- **Registry-synthesized `helmcode` section**: Helmcode is not on models.dev.
|
|
97
|
+
Its five agent models (`deepseek-v4-flash`, `glm5.3`, `glm5.3-flash`,
|
|
98
|
+
`qwen3.6`, `gemma4`) live in the provider registry
|
|
99
|
+
(`packages/model-catalog/src/openai-compatible-providers.ts`,
|
|
100
|
+
`catalog: "registry"`). `withRegistryCatalogSections` adds the section,
|
|
101
|
+
at $0, to the snapshot loader (`loadModelsDevCache`), the worker runtime
|
|
102
|
+
catalog and the dashboard bundle, and the live catalog refills it
|
|
103
|
+
(`setLiveModelsCatalog`). Model limits are copied from Helmcode's own
|
|
104
|
+
opencode and pi config pages. Helmcode's resold Claude, GPT and Gemini
|
|
105
|
+
models are not included.
|
|
87
106
|
|
|
88
107
|
- **Snapshot refresh procedure**:
|
|
89
108
|
- Run `bun run scripts/refresh-modelsdev-pricing.ts` (Phase 2 — adds the
|
|
@@ -167,6 +186,18 @@ and heartbeat-classified roots are omitted, and the metrics remain separate.
|
|
|
167
186
|
scheduled increase to $3/M input and $15/M output on 2026-09-01. Claude
|
|
168
187
|
Code's bundled local rate table may be stale-high, so treat its reported USD
|
|
169
188
|
as advisory and use the server-recomputed row for the canonical total.
|
|
189
|
+
- **Claude 5.5 cache reads:** Opus 5.5 and Sonnet 5.5 cache hits cost 0.05x
|
|
190
|
+
input ($0.20/M and $0.10/M), not the usual 0.1x. Claude Code builds in use
|
|
191
|
+
around 2026-10-09 still priced Sonnet 5.5 hits at $0.20/M, so their
|
|
192
|
+
`harnessCostUsd` runs high by `cacheReadTokens × $0.10/M`.
|
|
193
|
+
- **Claude Haiku 5.5 context tier:** a request whose prompt (input + cache
|
|
194
|
+
reads + cache writes) is over 100k tokens bills every class at 5x: $0.50/M
|
|
195
|
+
input, $0.05/M cache hit, $0.625/M 5m write, $1/M 1h write, $2.50/M output.
|
|
196
|
+
It is the only Claude 5.x model with a long-context tier; the others bill the
|
|
197
|
+
full 1M window at standard rates. The recompute prices Haiku 5.5 at the base
|
|
198
|
+
tier, so sessions with over-100k requests under-count, and the harness total
|
|
199
|
+
is the closer figure for them. Same per-request accounting gap as GPT-5.6
|
|
200
|
+
below.
|
|
170
201
|
- **GPT-5.6 context tier:** above 272k context, the GPT-5.6 family bills
|
|
171
202
|
2× input/cache rates and 1.5× output rates. The current recompute receives
|
|
172
203
|
aggregate session token counts, not enough per-request context information
|
|
@@ -245,3 +245,30 @@ export function applyReasoningEffort(
|
|
|
245
245
|
}
|
|
246
246
|
}
|
|
247
247
|
}
|
|
248
|
+
|
|
249
|
+
const REASONING_HARNESSES: ReadonlySet<string> = new Set<ReasoningHarness>([
|
|
250
|
+
"claude",
|
|
251
|
+
"codex",
|
|
252
|
+
"pi",
|
|
253
|
+
"opencode",
|
|
254
|
+
"dsh",
|
|
255
|
+
"cursor",
|
|
256
|
+
"amp",
|
|
257
|
+
"grok",
|
|
258
|
+
]);
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* The effort a session on this harness and model actually runs at: `level`
|
|
262
|
+
* when the adapter applies it, null when it is unset or dropped (the harness
|
|
263
|
+
* default applies). Same decision the adapters make in `applyReasoningEffort`.
|
|
264
|
+
*/
|
|
265
|
+
export function effectiveReasoningEffort(
|
|
266
|
+
harness: string,
|
|
267
|
+
model: string,
|
|
268
|
+
level: ReasoningEffort | undefined,
|
|
269
|
+
): ReasoningEffort | null {
|
|
270
|
+
if (!level || !REASONING_HARNESSES.has(harness)) return null;
|
|
271
|
+
return applyReasoningEffort(harness as ReasoningHarness, model, level).kind === "noop"
|
|
272
|
+
? null
|
|
273
|
+
: level;
|
|
274
|
+
}
|
package/src/providers/types.ts
CHANGED
|
@@ -33,7 +33,11 @@ export interface CostData {
|
|
|
33
33
|
cacheWrite1hTokens?: number;
|
|
34
34
|
/** Migration 063: codex reasoning_output_tokens (and similar) for reasoning models. */
|
|
35
35
|
reasoningOutputTokens?: number;
|
|
36
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Migration 063: claude extended-thinking tokens from the result line's
|
|
38
|
+
* `usage.output_tokens_details.thinking_tokens`. Informational: they are a
|
|
39
|
+
* subset of `outputTokens` and already priced there.
|
|
40
|
+
*/
|
|
37
41
|
thinkingTokens?: number;
|
|
38
42
|
/** Complete per-model usage, including sidechain/subagent tokens when available. */
|
|
39
43
|
models?: CostModelUsage[];
|
|
@@ -263,7 +267,7 @@ export interface ProviderTraits {
|
|
|
263
267
|
* agent never learns they exist. Defaults to true when omitted.
|
|
264
268
|
*/
|
|
265
269
|
nativeSkillDiscovery?: boolean;
|
|
266
|
-
/** Provider runs in the local Docker container with /workspace, identity files, agent-fs,
|
|
270
|
+
/** Provider runs in the local Docker container with /workspace, identity files, agent-fs, etc. */
|
|
267
271
|
hasLocalEnvironment: boolean;
|
|
268
272
|
/** Live steering modes supported by this provider. Absent means none. */
|
|
269
273
|
steerModes?: SteerMode[];
|
|
@@ -206,8 +206,9 @@ const memoryDelete: LegacyRule = {
|
|
|
206
206
|
};
|
|
207
207
|
|
|
208
208
|
/**
|
|
209
|
-
* task.fs.mutate
|
|
210
|
-
* (src/http/fs.ts canMutateTask
|
|
209
|
+
* task.fs.mutate and task.parent.attach: operator OR user OR lead OR
|
|
210
|
+
* task-assignee OR task-creator (src/http/fs.ts canMutateTask; send-task and
|
|
211
|
+
* POST /api/tasks for a parentTaskId). Order-independent OR: today's early
|
|
211
212
|
* operator/user returns short-circuit before agent identity, but no input
|
|
212
213
|
* satisfies one branch while failing another, so a flat OR is equivalent
|
|
213
214
|
* (plan Appendix A row 36 note).
|
|
@@ -276,6 +277,7 @@ export const LEGACY_POLICY = {
|
|
|
276
277
|
"task.steer.own": requesterOwnsTask,
|
|
277
278
|
"task.action.own": requesterOwnsTask,
|
|
278
279
|
"task.fs.mutate": taskFsMutate,
|
|
280
|
+
"task.parent.attach": taskFsMutate,
|
|
279
281
|
"task.progress.write": taskProgressWrite,
|
|
280
282
|
"favorite.write.own": anyAuthenticated,
|
|
281
283
|
"memory.learning.inject": leadOnly,
|
|
@@ -286,6 +288,10 @@ export const LEGACY_POLICY = {
|
|
|
286
288
|
"channel.delete": leadOnly,
|
|
287
289
|
"repo.merge-policy.write": leadOrOperatorOrUser,
|
|
288
290
|
"integration.kapso.manage": leadOnly,
|
|
291
|
+
"integration.chat.manage": leadOnly,
|
|
292
|
+
"integration.chat.post": leadOnly,
|
|
293
|
+
"integration.chat.read": leadOnly,
|
|
294
|
+
"integration.chat.dm": leadOnly,
|
|
289
295
|
"integration.slack.post": leadOnly,
|
|
290
296
|
"integration.slack.read": leadOnly,
|
|
291
297
|
"integration.slack.thread.start": leadOnly,
|
package/src/rbac/permissions.ts
CHANGED
|
@@ -79,6 +79,11 @@ export const PERMISSIONS = {
|
|
|
79
79
|
description: "Mutate a task's filesystem artifacts and attachments.",
|
|
80
80
|
namespace: "task",
|
|
81
81
|
},
|
|
82
|
+
"task.parent.attach": {
|
|
83
|
+
description:
|
|
84
|
+
"Create a task under an existing parent task. The child inherits the parent's thread context (contextKey, Slack thread, requester).",
|
|
85
|
+
namespace: "task",
|
|
86
|
+
},
|
|
82
87
|
"task.progress.write": {
|
|
83
88
|
description:
|
|
84
89
|
"Write a task's progress, status, or output (its assignee, a lead, a human, or anyone while unassigned).",
|
|
@@ -124,6 +129,22 @@ export const PERMISSIONS = {
|
|
|
124
129
|
description: "Register or unregister a Kapso inbound number.",
|
|
125
130
|
namespace: "integration",
|
|
126
131
|
},
|
|
132
|
+
"integration.chat.manage": {
|
|
133
|
+
description: "Register or unregister a Chat SDK channel route.",
|
|
134
|
+
namespace: "integration",
|
|
135
|
+
},
|
|
136
|
+
"integration.chat.post": {
|
|
137
|
+
description: "Post to a Chat SDK thread or channel other than the thread of the current task.",
|
|
138
|
+
namespace: "integration",
|
|
139
|
+
},
|
|
140
|
+
"integration.chat.read": {
|
|
141
|
+
description: "Read a Chat SDK thread other than the thread of the current task.",
|
|
142
|
+
namespace: "integration",
|
|
143
|
+
},
|
|
144
|
+
"integration.chat.dm": {
|
|
145
|
+
description: "Open a direct-message thread with a user on a Chat SDK adapter.",
|
|
146
|
+
namespace: "integration",
|
|
147
|
+
},
|
|
127
148
|
"integration.slack.post": {
|
|
128
149
|
description: "Post to a direct Slack channel.",
|
|
129
150
|
namespace: "integration",
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
getScriptApiConnectionDescriptors,
|
|
24
24
|
getScriptMcpConnectionDescriptors,
|
|
25
25
|
} from "@/be/script-connections";
|
|
26
|
-
import {
|
|
26
|
+
import { buildScriptCredentialBindingsWithFailures } from "@/be/script-credential-broker";
|
|
27
27
|
import { getScript } from "@/be/scripts/db";
|
|
28
28
|
import { runScript } from "@/scripts-runtime/loader";
|
|
29
29
|
import { telemetry } from "@/telemetry";
|
|
@@ -99,12 +99,14 @@ async function executeScheduleScript(schedule: ScheduledTask): Promise<void> {
|
|
|
99
99
|
|
|
100
100
|
let output: Awaited<ReturnType<typeof runScript>>;
|
|
101
101
|
try {
|
|
102
|
+
const credentials = await buildScriptCredentialBindingsWithFailures({ agentId });
|
|
102
103
|
output = await runScript({
|
|
103
104
|
source: script.source,
|
|
104
105
|
args,
|
|
105
106
|
fsMode: "none",
|
|
106
107
|
agentId,
|
|
107
|
-
egressSecrets:
|
|
108
|
+
egressSecrets: credentials.egressSecrets,
|
|
109
|
+
userConfig: credentials.userConfig,
|
|
108
110
|
apiConnections: getScriptApiConnectionDescriptors({ agentId }),
|
|
109
111
|
mcpConnections: getScriptMcpConnectionDescriptors({ agentId }),
|
|
110
112
|
timeoutMs: 60_000,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getApiKey } from "../utils/api-key";
|
|
2
|
-
import {
|
|
2
|
+
import { getMcpBaseUrl } from "../utils/constants";
|
|
3
|
+
import { createValueScrubber, scrubObject, scrubSecrets } from "../utils/secret-scrubber";
|
|
3
4
|
import type { ScriptApiConnectionDescriptor, ScriptMcpConnectionDescriptor } from "./api-types";
|
|
4
5
|
import type { FailedCredentialBinding } from "./credential-broker";
|
|
5
6
|
import { buildEgressSecrets } from "./egress-secrets";
|
|
@@ -66,7 +67,7 @@ async function buildConfigPayload(input: RunScriptInput): Promise<SwarmConfigPay
|
|
|
66
67
|
apiKey: { value: apiKey, isSecret: true },
|
|
67
68
|
agentId: { value: input.agentId, isSecret: false },
|
|
68
69
|
mcpBaseUrl: {
|
|
69
|
-
value: input.mcpBaseUrl ??
|
|
70
|
+
value: input.mcpBaseUrl ?? getMcpBaseUrl(),
|
|
70
71
|
isSecret: false,
|
|
71
72
|
},
|
|
72
73
|
...(input.runtimeInstanceId
|
|
@@ -94,12 +95,21 @@ export async function runScript(input: RunScriptInput): Promise<RunScriptOutput>
|
|
|
94
95
|
};
|
|
95
96
|
}
|
|
96
97
|
|
|
98
|
+
// The global scrubber skips values under its length floor, so this run's own
|
|
99
|
+
// secret config is redacted here at any length before the global pass. Built
|
|
100
|
+
// before the import check: its diagnostic quotes source, which can hold a value.
|
|
101
|
+
const runSecrets = createValueScrubber(
|
|
102
|
+
Object.entries(input.userConfig ?? {})
|
|
103
|
+
.filter(([, entry]) => entry.isSecret)
|
|
104
|
+
.map(([key, entry]) => ({ value: entry.value, name: `config:${key}` })),
|
|
105
|
+
);
|
|
106
|
+
|
|
97
107
|
const imports = validateScriptImports(input.source);
|
|
98
108
|
if (!imports.ok) {
|
|
99
109
|
return {
|
|
100
110
|
result: undefined,
|
|
101
111
|
stdout: "",
|
|
102
|
-
stderr: imports.diagnostic,
|
|
112
|
+
stderr: scrubSecrets(runSecrets.text(imports.diagnostic)),
|
|
103
113
|
truncated: { stdout: false, stderr: false },
|
|
104
114
|
durationMs: 0,
|
|
105
115
|
exitCode: 1,
|
|
@@ -133,9 +143,11 @@ export async function runScript(input: RunScriptInput): Promise<RunScriptOutput>
|
|
|
133
143
|
|
|
134
144
|
return {
|
|
135
145
|
...output,
|
|
136
|
-
result: scrubObject(output.result),
|
|
137
|
-
stdout: scrubSecrets(output.stdout),
|
|
138
|
-
stderr: scrubSecrets(output.stderr),
|
|
139
|
-
...(output.runtimeError
|
|
146
|
+
result: scrubObject(runSecrets.object(output.result)),
|
|
147
|
+
stdout: scrubSecrets(runSecrets.text(output.stdout)),
|
|
148
|
+
stderr: scrubSecrets(runSecrets.text(output.stderr)),
|
|
149
|
+
...(output.runtimeError
|
|
150
|
+
? { runtimeError: scrubObject(runSecrets.object(output.runtimeError)) }
|
|
151
|
+
: {}),
|
|
140
152
|
};
|
|
141
153
|
}
|
|
@@ -104,6 +104,14 @@ export const SDK_TOOL_NAME_MAP = {
|
|
|
104
104
|
slack_delete: "slack-delete", // external: mutates Slack, destructive
|
|
105
105
|
slack_update: "slack-update", // external: mutates Slack
|
|
106
106
|
|
|
107
|
+
// ── chat sdk ──
|
|
108
|
+
chat_reply: "chat-reply", // external: sends to the task's chat thread
|
|
109
|
+
chat_post: "chat-post", // external: sends to a chat platform
|
|
110
|
+
chat_openDm: "chat-open-dm", // external: opens a platform DM
|
|
111
|
+
chat_readThread: "chat-read-thread",
|
|
112
|
+
chat_registerChannel: "register-chat-channel",
|
|
113
|
+
chat_unregisterChannel: "unregister-chat-channel", // destructive
|
|
114
|
+
|
|
107
115
|
// ── messaging (internal) ──
|
|
108
116
|
message_read: "read-messages",
|
|
109
117
|
message_post: "post-message",
|
|
@@ -115,12 +123,6 @@ export const SDK_TOOL_NAME_MAP = {
|
|
|
115
123
|
context_history: "context-history",
|
|
116
124
|
context_diff: "context-diff",
|
|
117
125
|
|
|
118
|
-
// ── services ──
|
|
119
|
-
service_list: "list-services",
|
|
120
|
-
service_register: "register-service",
|
|
121
|
-
service_unregister: "unregister-service", // destructive
|
|
122
|
-
service_updateStatus: "update-service-status",
|
|
123
|
-
|
|
124
126
|
// ── workflows ──
|
|
125
127
|
workflow_list: "list-workflows",
|
|
126
128
|
workflow_get: "get-workflow",
|
|
@@ -280,17 +280,6 @@ function bridgeRequestFor(name: string, args: unknown): BridgeRequest | null {
|
|
|
280
280
|
return { method: "DELETE", path: `/api/config/${encodeURIComponent(id)}` };
|
|
281
281
|
}
|
|
282
282
|
|
|
283
|
-
// ── services ──
|
|
284
|
-
case "service_list":
|
|
285
|
-
return {
|
|
286
|
-
method: "GET",
|
|
287
|
-
path: appendQuery("/api/services", {
|
|
288
|
-
agentId: body.agentId,
|
|
289
|
-
name: body.name,
|
|
290
|
-
status: body.status,
|
|
291
|
-
}),
|
|
292
|
-
};
|
|
293
|
-
|
|
294
283
|
// ── workflows ──
|
|
295
284
|
case "workflow_list":
|
|
296
285
|
return {
|
|
@@ -342,6 +342,8 @@ declare module "swarm-sdk" {
|
|
|
342
342
|
types?: Array<"public" | "private" | "dm" | "mpim">;
|
|
343
343
|
limit?: number;
|
|
344
344
|
}): Promise<unknown>;
|
|
345
|
+
// --- chat sdk ---
|
|
346
|
+
chat_readThread(args: { threadId: string; limit?: number }): Promise<unknown>;
|
|
345
347
|
// --- messaging ---
|
|
346
348
|
message_read(args?: {
|
|
347
349
|
channel?: string;
|
|
@@ -351,13 +353,6 @@ declare module "swarm-sdk" {
|
|
|
351
353
|
mentionsOnly?: boolean;
|
|
352
354
|
markAsRead?: boolean;
|
|
353
355
|
}): Promise<unknown>;
|
|
354
|
-
// --- services ---
|
|
355
|
-
service_list(args?: {
|
|
356
|
-
agentId?: string;
|
|
357
|
-
name?: string;
|
|
358
|
-
status?: "starting" | "healthy" | "unhealthy" | "stopped";
|
|
359
|
-
includeOwn?: boolean;
|
|
360
|
-
}): Promise<unknown>;
|
|
361
356
|
// --- context / profiles ---
|
|
362
357
|
context_history(args?: {
|
|
363
358
|
agentId?: string;
|
|
@@ -452,6 +447,7 @@ declare module "swarm-sdk" {
|
|
|
452
447
|
scope?: "global" | "agent" | "repo";
|
|
453
448
|
scopeId?: string;
|
|
454
449
|
isSecret?: boolean;
|
|
450
|
+
exportToEnv?: boolean;
|
|
455
451
|
}): Promise<unknown>;
|
|
456
452
|
config_delete(args: { id: string }): Promise<unknown>;
|
|
457
453
|
|
|
@@ -492,20 +488,36 @@ declare module "swarm-sdk" {
|
|
|
492
488
|
slack_delete(args: { channelId: string; messageTs: string }): Promise<unknown>;
|
|
493
489
|
slack_update(args: { channelId: string; messageTs: string; message: string }): Promise<unknown>;
|
|
494
490
|
|
|
491
|
+
// --- write: chat sdk ---
|
|
492
|
+
chat_reply(args: { text: string }): Promise<unknown>;
|
|
493
|
+
chat_post(args: {
|
|
494
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
495
|
+
threadId?: string;
|
|
496
|
+
channelId?: string;
|
|
497
|
+
text: string;
|
|
498
|
+
}): Promise<unknown>;
|
|
499
|
+
chat_openDm(args: {
|
|
500
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
501
|
+
userId: string;
|
|
502
|
+
}): Promise<unknown>;
|
|
503
|
+
chat_registerChannel(args: {
|
|
504
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
505
|
+
channelId: string;
|
|
506
|
+
agentId?: string;
|
|
507
|
+
workflowId?: string;
|
|
508
|
+
name?: string;
|
|
509
|
+
}): Promise<unknown>;
|
|
510
|
+
chat_unregisterChannel(args: {
|
|
511
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
512
|
+
channelId: string;
|
|
513
|
+
}): Promise<unknown>;
|
|
514
|
+
|
|
495
515
|
// --- write: messaging (internal) ---
|
|
496
516
|
message_post(args: { channel?: string; content: string; to?: string }): Promise<unknown>;
|
|
497
517
|
|
|
498
518
|
// --- write: profiles ---
|
|
499
519
|
profile_update(args: Record<string, unknown>): Promise<unknown>;
|
|
500
520
|
|
|
501
|
-
// --- write: services ---
|
|
502
|
-
service_register(args: Record<string, unknown>): Promise<unknown>;
|
|
503
|
-
service_unregister(args: { name: string }): Promise<unknown>;
|
|
504
|
-
service_updateStatus(args: {
|
|
505
|
-
name: string;
|
|
506
|
-
status: "starting" | "healthy" | "unhealthy" | "stopped";
|
|
507
|
-
}): Promise<unknown>;
|
|
508
|
-
|
|
509
521
|
// --- write: schedules ---
|
|
510
522
|
schedule_create(args: Record<string, unknown>): Promise<unknown>;
|
|
511
523
|
schedule_update(args: Record<string, unknown>): Promise<unknown>;
|
|
@@ -19,6 +19,7 @@ declare module "swarm-extension" {
|
|
|
19
19
|
| "linear"
|
|
20
20
|
| "jira"
|
|
21
21
|
| "comb"
|
|
22
|
+
| "chat"
|
|
22
23
|
| undefined;
|
|
23
24
|
routingReason?:
|
|
24
25
|
| "skill"
|
|
@@ -132,7 +133,8 @@ declare module "swarm-extension" {
|
|
|
132
133
|
| "system"
|
|
133
134
|
| "linear"
|
|
134
135
|
| "jira"
|
|
135
|
-
| "comb"
|
|
136
|
+
| "comb"
|
|
137
|
+
| "chat";
|
|
136
138
|
tags: string[];
|
|
137
139
|
priority: number;
|
|
138
140
|
dependsOn: string[];
|
|
@@ -191,6 +193,7 @@ declare module "swarm-extension" {
|
|
|
191
193
|
resolvedModel?: string | undefined;
|
|
192
194
|
modelSource?: string | undefined;
|
|
193
195
|
modelAlias?: string | undefined;
|
|
196
|
+
resolvedEffort?: "off" | "low" | "medium" | "high" | "xhigh" | "max" | undefined;
|
|
194
197
|
scheduleId?: string | undefined;
|
|
195
198
|
workflowRunId?: string | null | undefined;
|
|
196
199
|
workflowRunStepId?: string | null | undefined;
|
|
@@ -467,6 +470,43 @@ declare module "swarm-extension" {
|
|
|
467
470
|
kind: "broadcast";
|
|
468
471
|
};
|
|
469
472
|
}
|
|
473
|
+
/** A Chat SDK message after its thread buffer flushed, before routing. */
|
|
474
|
+
export interface ChatRouteEvent {
|
|
475
|
+
/** Adapter name, such as `telegram` or `slack`. */
|
|
476
|
+
adapter: string;
|
|
477
|
+
channelId: string;
|
|
478
|
+
/** The Chat SDK thread id, prefixed with the adapter name. */
|
|
479
|
+
threadId: string;
|
|
480
|
+
/** The first buffered sender. */
|
|
481
|
+
userId: string;
|
|
482
|
+
userName?: string;
|
|
483
|
+
/** The buffered messages, joined. */
|
|
484
|
+
text: string;
|
|
485
|
+
botMentioned: boolean;
|
|
486
|
+
isDirectMessage: boolean;
|
|
487
|
+
/** Set when earlier swarm tasks exist in this thread. */
|
|
488
|
+
threadContext?: {
|
|
489
|
+
adapter: string;
|
|
490
|
+
threadId: string;
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
export interface ChatRouteModify {
|
|
494
|
+
target:
|
|
495
|
+
| {
|
|
496
|
+
kind: "agent";
|
|
497
|
+
agentId: string;
|
|
498
|
+
}
|
|
499
|
+
| {
|
|
500
|
+
kind: "lead";
|
|
501
|
+
}
|
|
502
|
+
| {
|
|
503
|
+
kind: "broadcast";
|
|
504
|
+
}
|
|
505
|
+
| {
|
|
506
|
+
kind: "workflow";
|
|
507
|
+
workflowId: string;
|
|
508
|
+
};
|
|
509
|
+
}
|
|
470
510
|
export type HeartbeatClassification = "no-session" | "stale-session" | "fresh-stalled";
|
|
471
511
|
export type HeartbeatAction = "supersede-resume" | "fail" | "record";
|
|
472
512
|
export interface HeartbeatRemediateEvent {
|
|
@@ -511,6 +551,18 @@ declare module "swarm-extension" {
|
|
|
511
551
|
threadTs?: string;
|
|
512
552
|
taskId?: string;
|
|
513
553
|
}
|
|
554
|
+
/** A Chat SDK message the swarm received or sent. */
|
|
555
|
+
export interface ChatMessageEvent {
|
|
556
|
+
adapter: string;
|
|
557
|
+
channelId: string;
|
|
558
|
+
threadId: string;
|
|
559
|
+
/** The sender, for an inbound message. */
|
|
560
|
+
userId?: string;
|
|
561
|
+
text: string;
|
|
562
|
+
direction: "inbound" | "outbound";
|
|
563
|
+
taskId?: string;
|
|
564
|
+
messageId?: string;
|
|
565
|
+
}
|
|
514
566
|
/**
|
|
515
567
|
* A person answered an approval request. Fires for workflow and standalone
|
|
516
568
|
* requests. Timeouts and cancellations do not emit it today.
|
|
@@ -619,6 +671,11 @@ declare module "swarm-extension" {
|
|
|
619
671
|
modify: SlackRouteModify;
|
|
620
672
|
result: PreResult<SlackRouteModify>;
|
|
621
673
|
};
|
|
674
|
+
"pre.chat.route": {
|
|
675
|
+
event: ChatRouteEvent;
|
|
676
|
+
modify: ChatRouteModify;
|
|
677
|
+
result: PreResult<ChatRouteModify>;
|
|
678
|
+
};
|
|
622
679
|
"pre.heartbeat.remediate": {
|
|
623
680
|
event: HeartbeatRemediateEvent;
|
|
624
681
|
modify: HeartbeatRemediateModify;
|
|
@@ -664,6 +721,11 @@ declare module "swarm-extension" {
|
|
|
664
721
|
modify: never;
|
|
665
722
|
result: void;
|
|
666
723
|
};
|
|
724
|
+
"post.chat.message": {
|
|
725
|
+
event: ChatMessageEvent;
|
|
726
|
+
modify: never;
|
|
727
|
+
result: void;
|
|
728
|
+
};
|
|
667
729
|
"post.approval.resolved": {
|
|
668
730
|
event: ApprovalResolvedEvent;
|
|
669
731
|
modify: never;
|
|
@@ -324,6 +324,8 @@ declare module "swarm-sdk" {
|
|
|
324
324
|
types?: Array<"public" | "private" | "dm" | "mpim">;
|
|
325
325
|
limit?: number;
|
|
326
326
|
}): Promise<unknown>;
|
|
327
|
+
// --- chat sdk ---
|
|
328
|
+
chat_readThread(args: { threadId: string; limit?: number }): Promise<unknown>;
|
|
327
329
|
// --- messaging ---
|
|
328
330
|
message_read(args?: {
|
|
329
331
|
channel?: string;
|
|
@@ -333,13 +335,6 @@ declare module "swarm-sdk" {
|
|
|
333
335
|
mentionsOnly?: boolean;
|
|
334
336
|
markAsRead?: boolean;
|
|
335
337
|
}): Promise<unknown>;
|
|
336
|
-
// --- services ---
|
|
337
|
-
service_list(args?: {
|
|
338
|
-
agentId?: string;
|
|
339
|
-
name?: string;
|
|
340
|
-
status?: "starting" | "healthy" | "unhealthy" | "stopped";
|
|
341
|
-
includeOwn?: boolean;
|
|
342
|
-
}): Promise<unknown>;
|
|
343
338
|
// --- context / profiles ---
|
|
344
339
|
context_history(args?: {
|
|
345
340
|
agentId?: string;
|
|
@@ -434,6 +429,7 @@ declare module "swarm-sdk" {
|
|
|
434
429
|
scope?: "global" | "agent" | "repo";
|
|
435
430
|
scopeId?: string;
|
|
436
431
|
isSecret?: boolean;
|
|
432
|
+
exportToEnv?: boolean;
|
|
437
433
|
}): Promise<unknown>;
|
|
438
434
|
config_delete(args: { id: string }): Promise<unknown>;
|
|
439
435
|
|
|
@@ -474,20 +470,36 @@ declare module "swarm-sdk" {
|
|
|
474
470
|
slack_delete(args: { channelId: string; messageTs: string }): Promise<unknown>;
|
|
475
471
|
slack_update(args: { channelId: string; messageTs: string; message: string }): Promise<unknown>;
|
|
476
472
|
|
|
473
|
+
// --- write: chat sdk ---
|
|
474
|
+
chat_reply(args: { text: string }): Promise<unknown>;
|
|
475
|
+
chat_post(args: {
|
|
476
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
477
|
+
threadId?: string;
|
|
478
|
+
channelId?: string;
|
|
479
|
+
text: string;
|
|
480
|
+
}): Promise<unknown>;
|
|
481
|
+
chat_openDm(args: {
|
|
482
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
483
|
+
userId: string;
|
|
484
|
+
}): Promise<unknown>;
|
|
485
|
+
chat_registerChannel(args: {
|
|
486
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
487
|
+
channelId: string;
|
|
488
|
+
agentId?: string;
|
|
489
|
+
workflowId?: string;
|
|
490
|
+
name?: string;
|
|
491
|
+
}): Promise<unknown>;
|
|
492
|
+
chat_unregisterChannel(args: {
|
|
493
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
494
|
+
channelId: string;
|
|
495
|
+
}): Promise<unknown>;
|
|
496
|
+
|
|
477
497
|
// --- write: messaging (internal) ---
|
|
478
498
|
message_post(args: { channel?: string; content: string; to?: string }): Promise<unknown>;
|
|
479
499
|
|
|
480
500
|
// --- write: profiles ---
|
|
481
501
|
profile_update(args: Record<string, unknown>): Promise<unknown>;
|
|
482
502
|
|
|
483
|
-
// --- write: services ---
|
|
484
|
-
service_register(args: Record<string, unknown>): Promise<unknown>;
|
|
485
|
-
service_unregister(args: { name: string }): Promise<unknown>;
|
|
486
|
-
service_updateStatus(args: {
|
|
487
|
-
name: string;
|
|
488
|
-
status: "starting" | "healthy" | "unhealthy" | "stopped";
|
|
489
|
-
}): Promise<unknown>;
|
|
490
|
-
|
|
491
503
|
// --- write: schedules ---
|
|
492
504
|
schedule_create(args: Record<string, unknown>): Promise<unknown>;
|
|
493
505
|
schedule_update(args: Record<string, unknown>): Promise<unknown>;
|