@desplega.ai/agent-swarm 1.173.0 → 2.1.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-kr4abrsk.js} +17 -16
- package/dist/{actions-sgeyv08k.js → actions-eh4g6w2r.js} +39 -34
- package/dist/{amp-adapter-gpxp3kc9.js → amp-adapter-7h7wdt8q.js} +8 -7
- package/dist/{app-km9qnv2f.js → app-7k8s9w5p.js} +18 -14
- package/dist/{assistant-5r8tcvvd.js → assistant-wswt2y7p.js} +40 -35
- package/dist/{boot-reembed-16rv9843.js → boot-reembed-9apm9qw6.js} +10 -9
- package/dist/{boot-reembed-swwzdgd7.js → boot-reembed-whzbdthj.js} +10 -9
- package/dist/{boot-scrub-sweep-zkr6vkqb.js → boot-scrub-sweep-ndzmvmgt.js} +11 -10
- package/dist/{boot-seeds-d8sp49t2.js → boot-seeds-e9sta0yt.js} +16 -13
- package/dist/{claude-adapter-yzzzh8jp.js → claude-adapter-4mqd3r6r.js} +19 -18
- package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-9wswb52m.js} +7 -5
- package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-tpe1effx.js} +6 -4
- package/dist/{claude-sdk-session-4whxere4.js → claude-sdk-session-q49ghmh9.js} +12402 -11850
- package/dist/{cli-ne7smj1b.js → cli-01xvj1rq.js} +10 -10
- package/dist/{cli-nwrdx840.js → cli-035vekcw.js} +3 -3
- package/dist/{cli-9xf7fdtp.js → cli-0pd8hzhc.js} +29 -6
- package/dist/{cli-tmhsxhb8.js → cli-0veb92a3.js} +28 -6
- package/dist/{cli-c3rk1v0x.js → cli-10jesr25.js} +3 -3
- package/dist/{cli-6thk4jz3.js → cli-1y7yywmj.js} +6 -6
- package/dist/{cli-6r2f7edk.js → cli-20krdhz5.js} +47 -19
- package/dist/{cli-rfs4vddv.js → cli-29rja109.js} +39 -20
- package/dist/cli-2m1ktfzz.js +17795 -0
- package/dist/{cli-na2pxe4f.js → cli-2pwa0q4d.js} +15 -4
- package/dist/{cli-7a93cv8c.js → cli-4mengw46.js} +441 -43
- package/dist/{cli-94b48jhk.js → cli-5twdke5x.js} +16 -14
- package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
- package/dist/cli-6cvfxs8r.js +47 -0
- package/dist/{cli-w1apjecb.js → cli-711vwbxn.js} +2 -2
- package/dist/{cli-r4fqfpwf.js → cli-78vv7446.js} +50 -27
- package/dist/{cli-srqq3gc5.js → cli-7n6s5man.js} +5 -5
- package/dist/{cli-m89t9jdf.js → cli-7x0g4sn1.js} +15416 -16024
- package/dist/{cli-2bw3w47j.js → cli-8wwxw8a3.js} +1 -1
- package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
- package/dist/{cli-ywm1azg9.js → cli-9jzdj90z.js} +8 -4
- package/dist/cli-9traj3dn.js +638 -0
- package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
- package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
- package/dist/cli-cvv9k0hh.js +10143 -0
- package/dist/{cli-anzdk0z4.js → cli-d9286m9h.js} +2 -2
- package/dist/cli-e3g5mbkz.js +776 -0
- package/dist/cli-f527ce74.js +781 -0
- package/dist/{cli-gmdajfw5.js → cli-gxzkg1de.js} +5020 -1729
- package/dist/{cli-451ks6aw.js → cli-h1arqn31.js} +1 -1
- package/dist/cli-hjwmhcg1.js +10622 -0
- package/dist/{cli-jpc4r224.js → cli-hqr88ew6.js} +19 -3
- package/dist/{cli-h7k0xtry.js → cli-hvqbtna4.js} +4 -1256
- package/dist/{cli-cd0hv9nh.js → cli-j67mh2vg.js} +2 -2
- package/dist/cli-jta2eyzc.js +619 -0
- package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
- package/dist/cli-kceah1eh.js +92 -0
- package/dist/{cli-d603qf86.js → cli-ksphgh48.js} +10 -8
- package/dist/{cli-3nxdmjrc.js → cli-mgz4nbgg.js} +4 -4
- package/dist/{cli-saqyage0.js → cli-mz5as5ha.js} +179 -27
- package/dist/cli-n2wq4j7m.js +6985 -0
- package/dist/{cli-ppy4nnnh.js → cli-n8ndw8j7.js} +2 -2
- package/dist/{cli-1w0vj3gw.js → cli-naqzr17j.js} +7 -7
- package/dist/{cli-0a7mm3zp.js → cli-nm1p8jfr.js} +25 -21
- package/dist/{cli-wrh08zjd.js → cli-p3zbc1rw.js} +5 -18
- package/dist/{cli-hsem16hb.js → cli-pe05f8yk.js} +29 -6
- package/dist/{cli-5wpw4rab.js → cli-qmzsbkvy.js} +5 -5
- package/dist/{cli-bv2etw2y.js → cli-qnm4e9e4.js} +99 -590
- package/dist/{cli-1x7da0de.js → cli-qqy4q48b.js} +8 -8
- package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
- package/dist/{cli-5er5gjbm.js → cli-r35rw5de.js} +15 -15
- package/dist/{cli-v3zhnxsb.js → cli-r610p9bs.js} +2 -2
- package/dist/{cli-7jykv7ef.js → cli-rc6pf5kv.js} +1 -1
- package/dist/{cli-x119kdba.js → cli-rdxm77k3.js} +1 -1
- package/dist/cli-rhs9pz33.js +294 -0
- package/dist/{cli-0p3enk35.js → cli-s69nfyeh.js} +9 -1
- package/dist/{cli-0kxf81jj.js → cli-sawv63e8.js} +2 -2
- package/dist/{cli-e3pmyt39.js → cli-sg19gbf0.js} +1 -1
- package/dist/{cli-d161g69q.js → cli-shk7r5cs.js} +57 -6
- package/dist/{cli-7pz3b7x5.js → cli-sksetb2q.js} +36 -1
- package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
- package/dist/{cli-db3m6zdt.js → cli-t02z59f2.js} +1 -1
- package/dist/{cli-b07hr3bt.js → cli-txqb9s38.js} +2 -2
- package/dist/{cli-s8z6x4b4.js → cli-v7g551te.js} +225 -113
- package/dist/{cli-rfz2ve55.js → cli-vgqzp4em.js} +3341 -955
- package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
- package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
- package/dist/cli-wfnemr1t.js +86 -0
- package/dist/cli-wmgrkscj.js +23254 -0
- package/dist/{cli-qm1448f9.js → cli-wms6x9db.js} +8 -8
- package/dist/{cli-tadfgd0t.js → cli-x1r545x8.js} +33 -4
- package/dist/{cli-xc7p7s3g.js → cli-xczsgshn.js} +6 -6
- package/dist/{cli-fmhj1ehj.js → cli-y3167wt1.js} +882 -271
- package/dist/{cli-r0byd61h.js → cli-yjmqpxt3.js} +17 -16
- package/dist/{cli-81r1wjyv.js → cli-z780ec7c.js} +1 -1
- package/dist/{cli-phcqp1b9.js → cli-zm9t2vde.js} +2 -2
- package/dist/cli.js +34 -49
- package/dist/{codex-adapter-r3dn4fp5.js → codex-adapter-4z16v9n0.js} +15 -14
- package/dist/{codex-login-841kv5fk.js → codex-login-pkepy2j1.js} +3 -2
- package/dist/{codex-session-runner-fwt793h4.js → codex-session-runner-rvms9y2x.js} +15 -14
- package/dist/{commands-z8fq9qna.js → commands-2a9rtyat.js} +11 -10
- package/dist/{controller-hq5ggpcp.js → controller-3k3madbn.js} +5 -4
- package/dist/{controllers-connect-3mf2btyj.js → controllers-connect-v9yn8zb9.js} +42 -37
- package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-98gbhyzn.js} +7 -6
- package/dist/{db-qfpq4bt7.js → db-eywwsnjw.js} +30 -9
- package/dist/{db-yyhqqrbf.js → db-ncypk9np.js} +12 -11
- package/dist/{devin-adapter-xgtj680j.js → devin-adapter-zeq8b9gz.js} +3 -2
- package/dist/{dispatcher-x0x7qfcq.js → dispatcher-w94kc575.js} +38 -33
- package/dist/{docker-f503k9p0.js → docker-b1e4cqab.js} +3 -2
- package/dist/{dsh-adapter-34etvb5m.js → dsh-adapter-47ztej36.js} +7 -6
- package/dist/{e2b-66xra4az.js → e2b-bbt8ey45.js} +4 -3
- package/dist/{e2b-xwhyj8cw.js → e2b-dp804sen.js} +4 -3
- package/dist/{event-bus-vjtv82gm.js → event-bus-j2jdg3qb.js} +3 -2
- package/dist/{external-channel-h1fjecwe.js → external-channel-zrkg8ar9.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-s9ncp9vy.js} +18 -17
- package/dist/{handlers-znb9n7d4.js → handlers-kqftvjgw.js} +41 -36
- package/dist/{heartbeat-bm4qkn8d.js → heartbeat-9q96p8v9.js} +43 -38
- package/dist/{hook-254r4mza.js → hook-56qe10dp.js} +11 -23
- package/dist/{hook-xaa3q80s.js → hook-yy6rw42k.js} +12 -11
- package/dist/{http-3dgrgp8y.js → http-r2dnb8f8.js} +2411 -275
- package/dist/{index-fx3jqq1e.js → index-3gtmkhc6.js} +38 -33
- package/dist/{index-bdsqa799.js → index-3k5hkz7r.js} +43 -38
- package/dist/index-52j1aja4.js +3465 -0
- package/dist/{index-g2byveez.js → index-5e101240.js} +38 -33
- package/dist/{index-2ybk7khy.js → index-5wyfjc2c.js} +845 -683
- 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-jd7sejm2.js → index-vxvhxxbn.js} +10 -9
- package/dist/index-we27kd31.js +12810 -0
- package/dist/{keepalive-6ywhpja1.js → keepalive-psj6j54c.js} +12 -11
- package/dist/{lead-cw45n21s.js → lead-hajz4688.js} +61 -56
- package/dist/{maintenance-ss1a1ge9.js → maintenance-ps02sb5m.js} +10 -9
- package/dist/{node-fkajaq96.js → node-mwb5r697.js} +2 -1
- package/dist/{oauth-refresh-sweep-3c6f8vyy.js → oauth-refresh-sweep-0284h93b.js} +11 -10
- package/dist/{onboard-8hzdhc1k.js → onboard-rbf6bg01.js} +11 -3
- package/dist/{opencode-adapter-qbchbcfz.js → opencode-adapter-13dcatgq.js} +18 -13
- package/dist/{otel-impl-e6mnvc4v.js → otel-impl-zvqcbhp7.js} +242 -868
- package/dist/{pi-mono-adapter-3c9g9snh.js → pi-mono-adapter-xxy47q4v.js} +244 -106
- package/dist/{pricing-refresh-gedkjdw0.js → pricing-refresh-kefx9v3t.js} +12 -11
- package/dist/{rbac-roles-dt4vh1yy.js → rbac-roles-3m36rxm2.js} +11 -10
- package/dist/{rbac-roles-eszdg6pm.js → rbac-roles-z76xv0hq.js} +12 -11
- package/dist/{render-v2-907cy6sa.js → render-v2-wz73bs25.js} +18 -14
- package/dist/{resume-42stcaz0.js → resume-k4wzge8w.js} +25 -21
- package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
- package/dist/{setup-adbc1c10.js → setup-2fp2pypp.js} +2 -2
- package/dist/{virtual-modules-rtmt494q.js → virtual-modules-9gkxqrap.js} +6 -5
- package/dist/{work-objects-wpj8ck95.js → work-objects-6k0ywz3m.js} +41 -36
- package/dist/{worker-bzdra9rf.js → worker-5v3rxsdh.js} +61 -56
- package/dist/{x-qfmygqqv.js → x-4mtdeym1.js} +3 -2
- package/openapi.json +1279 -329
- package/package.json +15 -15
- package/src/agentmail/handlers.ts +21 -11
- package/src/apps/definition.ts +16 -0
- package/src/azure-devops/api.ts +52 -2
- package/src/azure-devops/boards-sync.ts +50 -20
- package/src/azure-devops/index.ts +1 -0
- package/src/azure-devops/outbound.ts +95 -0
- package/src/be/boot-seeds.ts +11 -0
- package/src/be/config-refs.ts +60 -0
- package/src/be/db/model-profiles.ts +315 -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 +237 -0
- package/src/be/db/tasks/write.ts +7 -0
- package/src/be/db.ts +87 -36
- 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/migrations/219_relabel_pi_context_compactions.sql +22 -0
- package/src/be/migrations/220_model_profiles.sql +137 -0
- package/src/be/model-catalog-store.ts +5 -1
- package/src/be/model-tier-resolution.ts +155 -10
- package/src/be/model-validation.ts +12 -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 +22 -8
- package/src/be/secret-registry.ts +6 -2
- 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-model-profiles.ts +41 -0
- package/src/be/seed-pricing.ts +19 -2
- package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +368 -0
- 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-scripts/index.ts +9 -0
- 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 +53 -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 +193 -71
- package/src/e2b/env.ts +5 -0
- package/src/extensions/catalog.generated.json +17 -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/loader.ts +10 -5
- package/src/extensions/post-bridge.ts +40 -0
- package/src/github/handlers.ts +11 -4
- package/src/heartbeat/heartbeat.ts +2 -1
- package/src/heartbeat/templates.ts +8 -5
- package/src/hooks/hook.ts +0 -26
- package/src/http/agents.ts +49 -2
- package/src/http/all-routes.ts +1 -1
- package/src/http/apps.ts +30 -3
- package/src/http/config.ts +62 -19
- package/src/http/core.ts +8 -0
- package/src/http/index.ts +25 -3
- package/src/http/integrations.ts +88 -1
- package/src/http/mcp.ts +15 -5
- package/src/http/model-profiles.ts +303 -0
- package/src/http/page-proxy.ts +2 -4
- package/src/http/pages-public.ts +13 -7
- package/src/http/pages.ts +3 -13
- package/src/http/poll.ts +42 -71
- package/src/http/requested-by.ts +54 -0
- package/src/http/script-runs.ts +1 -1
- package/src/http/scripts.ts +26 -2
- package/src/http/stats.ts +1 -30
- package/src/http/tasks.ts +79 -5
- package/src/http/utils.ts +14 -0
- package/src/http/webhooks.ts +160 -3
- 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/{artifact-sdk → pages}/feedback-overlay.ts +65 -6
- 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 +56 -3
- 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/pi-mono-extension.ts +17 -3
- package/src/providers/pricing-sources.md +33 -2
- package/src/providers/reasoning-effort.ts +37 -0
- package/src/providers/types.ts +6 -2
- package/src/rbac/legacy-policy.ts +16 -2
- package/src/rbac/permissions.ts +26 -0
- package/src/scheduler/deferred-task-waits.ts +18 -5
- package/src/scheduler/scheduler.ts +11 -3
- package/src/scripts-runtime/executors/quickjs-prelude.ts +75 -6
- package/src/scripts-runtime/executors/quickjs-runner.ts +85 -8
- package/src/scripts-runtime/executors/quickjs-web-shims.ts +1041 -0
- package/src/scripts-runtime/extract-args-schema.ts +9 -8
- package/src/scripts-runtime/loader.ts +19 -7
- package/src/scripts-runtime/quickjs-compat.ts +464 -0
- package/src/scripts-runtime/sdk-allowlist.ts +12 -6
- package/src/scripts-runtime/swarm-sdk.ts +0 -11
- package/src/scripts-runtime/types/stdlib.d.ts +39 -15
- package/src/scripts-runtime/types/swarm-extension.d.ts +66 -1
- package/src/scripts-runtime/types/swarm-sdk.d.ts +39 -15
- package/src/server.ts +62 -19
- package/src/slack/blocks.ts +4 -2
- package/src/slack/event-dedup.ts +1 -1
- package/src/slack/reaction-shortcode.ts +14 -0
- package/src/slack/render-v2.ts +12 -7
- package/src/slack/responses.ts +5 -4
- package/src/slack/thread-buffer.ts +41 -22
- 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 +15 -33
- package/src/tests/acp-adapter.test.ts +42 -0
- package/src/tests/agentmail-filters.test.ts +47 -0
- package/src/tests/api-drain-worker-e2e.test.ts +1 -6
- package/src/tests/apps-spike2.test.ts +35 -0
- package/src/tests/azure-devops-outbound.test.ts +420 -0
- 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 +22 -0
- package/src/tests/db-task-write-contract.test.ts +11 -0
- package/src/tests/deferred-task-wake.test.ts +78 -1
- 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/env-flag.test.ts +1 -0
- package/src/tests/explicit-model-validation.test.ts +105 -1
- package/src/tests/extensions-catalog.test.ts +1 -0
- package/src/tests/extensions-example-comms-adherence-gate.test.ts +413 -0
- package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
- package/src/tests/extensions-loader.test.ts +15 -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/heartbeat-jev-gate-credentials.test.ts +168 -0
- package/src/tests/heartbeat-jev-gate.test.ts +385 -0
- 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-profile-backcompat.test.ts +327 -0
- package/src/tests/model-profile-providers.test.ts +302 -0
- package/src/tests/model-profile-runtime-secrets.test.ts +223 -0
- package/src/tests/model-profiles-api.test.ts +614 -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-keys.test.ts +121 -0
- package/src/tests/pages-feedback.test.ts +4 -1
- package/src/tests/paused-tasks-requested-by.test.ts +102 -0
- package/src/tests/pi-context-compaction.test.ts +193 -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/profile-claim.test.ts +269 -0
- package/src/tests/prompt-template-remaining.test.ts +35 -0
- package/src/tests/quickjs-compat.test.ts +213 -0
- package/src/tests/rbac-engine.test.ts +32 -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 +6 -0
- package/src/tests/script-executor-conformance.test.ts +252 -1
- package/src/tests/script-executor-quickjs.test.ts +96 -0
- package/src/tests/script-runs-http.test.ts +89 -0
- package/src/tests/scripts-http.test.ts +217 -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 +96 -0
- package/src/tests/seed-model-profiles.test.ts +174 -0
- package/src/tests/seed-scripts.test.ts +2 -2
- 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/skill-invocations.test.ts +4 -2
- package/src/tests/slack-blocks.test.ts +36 -0
- package/src/tests/slack-inline-output.test.ts +14 -0
- package/src/tests/slack-reaction-config.test.ts +20 -0
- package/src/tests/slack-render-v2.test.ts +37 -0
- package/src/tests/slack-thread-buffer.test.ts +98 -1
- 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-llm.test.ts +61 -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/model-profiles/list-model-profiles.ts +54 -0
- package/src/tools/register-chat-channel.ts +139 -0
- package/src/tools/request-human-input.ts +11 -3
- package/src/tools/script-apis.ts +5 -1
- package/src/tools/script-upsert.ts +4 -1
- package/src/tools/send-task.ts +48 -1
- 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/system-one-decide.ts +104 -0
- package/src/tools/task-action.ts +22 -1
- package/src/tools/tool-config.ts +14 -6
- package/src/types.ts +48 -3
- 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 +86 -10
- package/src/utils/task-tool-manifest.ts +19 -2
- package/src/utils/vcs-repo-match.ts +29 -0
- package/src/workflows/executors/raw-llm.ts +8 -3
- package/src/workflows/executors/swarm-script.ts +1 -0
- package/src/workflows/executors/system-one-decision.ts +21 -11
- package/src/workflows/executors/workflow-llm.ts +22 -0
- package/src/workflows/index.ts +21 -12
- package/templates/extensions/README.md +1 -0
- package/templates/extensions/comms-adherence-gate/README.md +88 -0
- package/templates/extensions/comms-adherence-gate/hooks.ts +489 -0
- package/templates/extensions/comms-adherence-gate/manifest.json +8 -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-42qhyvwx.js +0 -33
- 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
|
@@ -329,6 +329,8 @@ declare module "swarm-sdk" {
|
|
|
329
329
|
key?: string;
|
|
330
330
|
includeSecrets?: boolean;
|
|
331
331
|
}): Promise<unknown>;
|
|
332
|
+
// --- model profiles ---
|
|
333
|
+
modelProfile_list(args?: { harness?: string }): Promise<unknown>;
|
|
332
334
|
// --- slack ---
|
|
333
335
|
slack_read(args?: {
|
|
334
336
|
inboxMessageId?: string;
|
|
@@ -342,6 +344,8 @@ declare module "swarm-sdk" {
|
|
|
342
344
|
types?: Array<"public" | "private" | "dm" | "mpim">;
|
|
343
345
|
limit?: number;
|
|
344
346
|
}): Promise<unknown>;
|
|
347
|
+
// --- chat sdk ---
|
|
348
|
+
chat_readThread(args: { threadId: string; limit?: number }): Promise<unknown>;
|
|
345
349
|
// --- messaging ---
|
|
346
350
|
message_read(args?: {
|
|
347
351
|
channel?: string;
|
|
@@ -351,13 +355,6 @@ declare module "swarm-sdk" {
|
|
|
351
355
|
mentionsOnly?: boolean;
|
|
352
356
|
markAsRead?: boolean;
|
|
353
357
|
}): 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
358
|
// --- context / profiles ---
|
|
362
359
|
context_history(args?: {
|
|
363
360
|
agentId?: string;
|
|
@@ -452,6 +449,7 @@ declare module "swarm-sdk" {
|
|
|
452
449
|
scope?: "global" | "agent" | "repo";
|
|
453
450
|
scopeId?: string;
|
|
454
451
|
isSecret?: boolean;
|
|
452
|
+
exportToEnv?: boolean;
|
|
455
453
|
}): Promise<unknown>;
|
|
456
454
|
config_delete(args: { id: string }): Promise<unknown>;
|
|
457
455
|
|
|
@@ -492,20 +490,36 @@ declare module "swarm-sdk" {
|
|
|
492
490
|
slack_delete(args: { channelId: string; messageTs: string }): Promise<unknown>;
|
|
493
491
|
slack_update(args: { channelId: string; messageTs: string; message: string }): Promise<unknown>;
|
|
494
492
|
|
|
493
|
+
// --- write: chat sdk ---
|
|
494
|
+
chat_reply(args: { text: string }): Promise<unknown>;
|
|
495
|
+
chat_post(args: {
|
|
496
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
497
|
+
threadId?: string;
|
|
498
|
+
channelId?: string;
|
|
499
|
+
text: string;
|
|
500
|
+
}): Promise<unknown>;
|
|
501
|
+
chat_openDm(args: {
|
|
502
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
503
|
+
userId: string;
|
|
504
|
+
}): Promise<unknown>;
|
|
505
|
+
chat_registerChannel(args: {
|
|
506
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
507
|
+
channelId: string;
|
|
508
|
+
agentId?: string;
|
|
509
|
+
workflowId?: string;
|
|
510
|
+
name?: string;
|
|
511
|
+
}): Promise<unknown>;
|
|
512
|
+
chat_unregisterChannel(args: {
|
|
513
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
514
|
+
channelId: string;
|
|
515
|
+
}): Promise<unknown>;
|
|
516
|
+
|
|
495
517
|
// --- write: messaging (internal) ---
|
|
496
518
|
message_post(args: { channel?: string; content: string; to?: string }): Promise<unknown>;
|
|
497
519
|
|
|
498
520
|
// --- write: profiles ---
|
|
499
521
|
profile_update(args: Record<string, unknown>): Promise<unknown>;
|
|
500
522
|
|
|
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
523
|
// --- write: schedules ---
|
|
510
524
|
schedule_create(args: Record<string, unknown>): Promise<unknown>;
|
|
511
525
|
schedule_update(args: Record<string, unknown>): Promise<unknown>;
|
|
@@ -666,6 +680,16 @@ declare module "swarm-sdk" {
|
|
|
666
680
|
// --- human input ---
|
|
667
681
|
request_humanInput(args: Record<string, unknown>): Promise<unknown>;
|
|
668
682
|
approval_cancel(args: { requestId: string; reason?: string }): Promise<unknown>;
|
|
683
|
+
|
|
684
|
+
// --- decisions ---
|
|
685
|
+
systemOne_decide(args: {
|
|
686
|
+
provider?: "typesafe" | "openrouter" | "laya" | "openai" | "cloudflare";
|
|
687
|
+
model?: string;
|
|
688
|
+
state: string | string[] | Record<string, unknown>;
|
|
689
|
+
questions: Record<string, Record<string, unknown>>;
|
|
690
|
+
timeoutMs?: number;
|
|
691
|
+
maxRetries?: number;
|
|
692
|
+
}): Promise<unknown>;
|
|
669
693
|
}
|
|
670
694
|
|
|
671
695
|
export interface ScriptStdlib {
|
|
@@ -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"
|
|
@@ -59,6 +60,7 @@ declare module "swarm-extension" {
|
|
|
59
60
|
model?: string | undefined;
|
|
60
61
|
modelTier?: "smol" | "regular" | "smart" | "ultra" | undefined;
|
|
61
62
|
effort?: "off" | "low" | "medium" | "high" | "xhigh" | "max" | undefined;
|
|
63
|
+
profile?: string | undefined;
|
|
62
64
|
scheduleId?: string | undefined;
|
|
63
65
|
workflowRunId?: string | undefined;
|
|
64
66
|
workflowRunStepId?: string | undefined;
|
|
@@ -132,7 +134,8 @@ declare module "swarm-extension" {
|
|
|
132
134
|
| "system"
|
|
133
135
|
| "linear"
|
|
134
136
|
| "jira"
|
|
135
|
-
| "comb"
|
|
137
|
+
| "comb"
|
|
138
|
+
| "chat";
|
|
136
139
|
tags: string[];
|
|
137
140
|
priority: number;
|
|
138
141
|
dependsOn: string[];
|
|
@@ -191,6 +194,9 @@ declare module "swarm-extension" {
|
|
|
191
194
|
resolvedModel?: string | undefined;
|
|
192
195
|
modelSource?: string | undefined;
|
|
193
196
|
modelAlias?: string | undefined;
|
|
197
|
+
resolvedEffort?: "off" | "low" | "medium" | "high" | "xhigh" | "max" | undefined;
|
|
198
|
+
profile?: string | undefined;
|
|
199
|
+
resolvedProfile?: string | undefined;
|
|
194
200
|
scheduleId?: string | undefined;
|
|
195
201
|
workflowRunId?: string | null | undefined;
|
|
196
202
|
workflowRunStepId?: string | null | undefined;
|
|
@@ -467,6 +473,43 @@ declare module "swarm-extension" {
|
|
|
467
473
|
kind: "broadcast";
|
|
468
474
|
};
|
|
469
475
|
}
|
|
476
|
+
/** A Chat SDK message after its thread buffer flushed, before routing. */
|
|
477
|
+
export interface ChatRouteEvent {
|
|
478
|
+
/** Adapter name, such as `telegram` or `slack`. */
|
|
479
|
+
adapter: string;
|
|
480
|
+
channelId: string;
|
|
481
|
+
/** The Chat SDK thread id, prefixed with the adapter name. */
|
|
482
|
+
threadId: string;
|
|
483
|
+
/** The first buffered sender. */
|
|
484
|
+
userId: string;
|
|
485
|
+
userName?: string;
|
|
486
|
+
/** The buffered messages, joined. */
|
|
487
|
+
text: string;
|
|
488
|
+
botMentioned: boolean;
|
|
489
|
+
isDirectMessage: boolean;
|
|
490
|
+
/** Set when earlier swarm tasks exist in this thread. */
|
|
491
|
+
threadContext?: {
|
|
492
|
+
adapter: string;
|
|
493
|
+
threadId: string;
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
export interface ChatRouteModify {
|
|
497
|
+
target:
|
|
498
|
+
| {
|
|
499
|
+
kind: "agent";
|
|
500
|
+
agentId: string;
|
|
501
|
+
}
|
|
502
|
+
| {
|
|
503
|
+
kind: "lead";
|
|
504
|
+
}
|
|
505
|
+
| {
|
|
506
|
+
kind: "broadcast";
|
|
507
|
+
}
|
|
508
|
+
| {
|
|
509
|
+
kind: "workflow";
|
|
510
|
+
workflowId: string;
|
|
511
|
+
};
|
|
512
|
+
}
|
|
470
513
|
export type HeartbeatClassification = "no-session" | "stale-session" | "fresh-stalled";
|
|
471
514
|
export type HeartbeatAction = "supersede-resume" | "fail" | "record";
|
|
472
515
|
export interface HeartbeatRemediateEvent {
|
|
@@ -511,6 +554,18 @@ declare module "swarm-extension" {
|
|
|
511
554
|
threadTs?: string;
|
|
512
555
|
taskId?: string;
|
|
513
556
|
}
|
|
557
|
+
/** A Chat SDK message the swarm received or sent. */
|
|
558
|
+
export interface ChatMessageEvent {
|
|
559
|
+
adapter: string;
|
|
560
|
+
channelId: string;
|
|
561
|
+
threadId: string;
|
|
562
|
+
/** The sender, for an inbound message. */
|
|
563
|
+
userId?: string;
|
|
564
|
+
text: string;
|
|
565
|
+
direction: "inbound" | "outbound";
|
|
566
|
+
taskId?: string;
|
|
567
|
+
messageId?: string;
|
|
568
|
+
}
|
|
514
569
|
/**
|
|
515
570
|
* A person answered an approval request. Fires for workflow and standalone
|
|
516
571
|
* requests. Timeouts and cancellations do not emit it today.
|
|
@@ -619,6 +674,11 @@ declare module "swarm-extension" {
|
|
|
619
674
|
modify: SlackRouteModify;
|
|
620
675
|
result: PreResult<SlackRouteModify>;
|
|
621
676
|
};
|
|
677
|
+
"pre.chat.route": {
|
|
678
|
+
event: ChatRouteEvent;
|
|
679
|
+
modify: ChatRouteModify;
|
|
680
|
+
result: PreResult<ChatRouteModify>;
|
|
681
|
+
};
|
|
622
682
|
"pre.heartbeat.remediate": {
|
|
623
683
|
event: HeartbeatRemediateEvent;
|
|
624
684
|
modify: HeartbeatRemediateModify;
|
|
@@ -664,6 +724,11 @@ declare module "swarm-extension" {
|
|
|
664
724
|
modify: never;
|
|
665
725
|
result: void;
|
|
666
726
|
};
|
|
727
|
+
"post.chat.message": {
|
|
728
|
+
event: ChatMessageEvent;
|
|
729
|
+
modify: never;
|
|
730
|
+
result: void;
|
|
731
|
+
};
|
|
667
732
|
"post.approval.resolved": {
|
|
668
733
|
event: ApprovalResolvedEvent;
|
|
669
734
|
modify: never;
|
|
@@ -311,6 +311,8 @@ declare module "swarm-sdk" {
|
|
|
311
311
|
key?: string;
|
|
312
312
|
includeSecrets?: boolean;
|
|
313
313
|
}): Promise<unknown>;
|
|
314
|
+
// --- model profiles ---
|
|
315
|
+
modelProfile_list(args?: { harness?: string }): Promise<unknown>;
|
|
314
316
|
// --- slack ---
|
|
315
317
|
slack_read(args?: {
|
|
316
318
|
inboxMessageId?: string;
|
|
@@ -324,6 +326,8 @@ declare module "swarm-sdk" {
|
|
|
324
326
|
types?: Array<"public" | "private" | "dm" | "mpim">;
|
|
325
327
|
limit?: number;
|
|
326
328
|
}): Promise<unknown>;
|
|
329
|
+
// --- chat sdk ---
|
|
330
|
+
chat_readThread(args: { threadId: string; limit?: number }): Promise<unknown>;
|
|
327
331
|
// --- messaging ---
|
|
328
332
|
message_read(args?: {
|
|
329
333
|
channel?: string;
|
|
@@ -333,13 +337,6 @@ declare module "swarm-sdk" {
|
|
|
333
337
|
mentionsOnly?: boolean;
|
|
334
338
|
markAsRead?: boolean;
|
|
335
339
|
}): 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
340
|
// --- context / profiles ---
|
|
344
341
|
context_history(args?: {
|
|
345
342
|
agentId?: string;
|
|
@@ -434,6 +431,7 @@ declare module "swarm-sdk" {
|
|
|
434
431
|
scope?: "global" | "agent" | "repo";
|
|
435
432
|
scopeId?: string;
|
|
436
433
|
isSecret?: boolean;
|
|
434
|
+
exportToEnv?: boolean;
|
|
437
435
|
}): Promise<unknown>;
|
|
438
436
|
config_delete(args: { id: string }): Promise<unknown>;
|
|
439
437
|
|
|
@@ -474,20 +472,36 @@ declare module "swarm-sdk" {
|
|
|
474
472
|
slack_delete(args: { channelId: string; messageTs: string }): Promise<unknown>;
|
|
475
473
|
slack_update(args: { channelId: string; messageTs: string; message: string }): Promise<unknown>;
|
|
476
474
|
|
|
475
|
+
// --- write: chat sdk ---
|
|
476
|
+
chat_reply(args: { text: string }): Promise<unknown>;
|
|
477
|
+
chat_post(args: {
|
|
478
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
479
|
+
threadId?: string;
|
|
480
|
+
channelId?: string;
|
|
481
|
+
text: string;
|
|
482
|
+
}): Promise<unknown>;
|
|
483
|
+
chat_openDm(args: {
|
|
484
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
485
|
+
userId: string;
|
|
486
|
+
}): Promise<unknown>;
|
|
487
|
+
chat_registerChannel(args: {
|
|
488
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
489
|
+
channelId: string;
|
|
490
|
+
agentId?: string;
|
|
491
|
+
workflowId?: string;
|
|
492
|
+
name?: string;
|
|
493
|
+
}): Promise<unknown>;
|
|
494
|
+
chat_unregisterChannel(args: {
|
|
495
|
+
adapter: "telegram" | "slack" | "discord" | "teams";
|
|
496
|
+
channelId: string;
|
|
497
|
+
}): Promise<unknown>;
|
|
498
|
+
|
|
477
499
|
// --- write: messaging (internal) ---
|
|
478
500
|
message_post(args: { channel?: string; content: string; to?: string }): Promise<unknown>;
|
|
479
501
|
|
|
480
502
|
// --- write: profiles ---
|
|
481
503
|
profile_update(args: Record<string, unknown>): Promise<unknown>;
|
|
482
504
|
|
|
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
505
|
// --- write: schedules ---
|
|
492
506
|
schedule_create(args: Record<string, unknown>): Promise<unknown>;
|
|
493
507
|
schedule_update(args: Record<string, unknown>): Promise<unknown>;
|
|
@@ -648,6 +662,16 @@ declare module "swarm-sdk" {
|
|
|
648
662
|
// --- human input ---
|
|
649
663
|
request_humanInput(args: Record<string, unknown>): Promise<unknown>;
|
|
650
664
|
approval_cancel(args: { requestId: string; reason?: string }): Promise<unknown>;
|
|
665
|
+
|
|
666
|
+
// --- decisions ---
|
|
667
|
+
systemOne_decide(args: {
|
|
668
|
+
provider?: "typesafe" | "openrouter" | "laya" | "openai" | "cloudflare";
|
|
669
|
+
model?: string;
|
|
670
|
+
state: string | string[] | Record<string, unknown>;
|
|
671
|
+
questions: Record<string, Record<string, unknown>>;
|
|
672
|
+
timeoutMs?: number;
|
|
673
|
+
maxRetries?: number;
|
|
674
|
+
}): Promise<unknown>;
|
|
651
675
|
}
|
|
652
676
|
|
|
653
677
|
export interface ScriptStdlib {
|
package/src/server.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import pkg from "../package.json";
|
|
3
|
-
import { ensurePricingSeeded, ensureRbacSeeded } from "./be/boot-seeds";
|
|
3
|
+
import { ensureModelProfilesSeeded, ensurePricingSeeded, ensureRbacSeeded } from "./be/boot-seeds";
|
|
4
4
|
import { initDb } from "./be/db";
|
|
5
5
|
import { startPricingRefreshLoop } from "./be/pricing-refresh";
|
|
6
6
|
import { isSteeringEnabled } from "./be/steering";
|
|
7
7
|
import { registerGithubTaskReactions } from "./github/task-reactions";
|
|
8
8
|
import { loadGlobalConfigsIntoEnv } from "./http/core";
|
|
9
|
+
import { isChatSdkEnabled } from "./integrations/chat-sdk/config";
|
|
9
10
|
import { resolveTemplate } from "./prompts/resolver";
|
|
10
11
|
import { isRbacEnabled } from "./rbac";
|
|
11
12
|
import { getSlackConfiguration } from "./slack/config";
|
|
@@ -21,6 +22,10 @@ import { registerAppSyncTool } from "./tools/app-sync";
|
|
|
21
22
|
import { registerAppUpsertTool } from "./tools/app-upsert";
|
|
22
23
|
import { registerCancelApprovalRequestTool } from "./tools/cancel-approval-request";
|
|
23
24
|
import { registerCancelTaskTool } from "./tools/cancel-task";
|
|
25
|
+
import { registerChatOpenDmTool } from "./tools/chat-open-dm";
|
|
26
|
+
import { registerChatPostTool } from "./tools/chat-post";
|
|
27
|
+
import { registerChatReadThreadTool } from "./tools/chat-read-thread";
|
|
28
|
+
import { registerChatReplyTool } from "./tools/chat-reply";
|
|
24
29
|
import { registerContextDiffTool } from "./tools/context-diff";
|
|
25
30
|
import { registerContextHistoryTool } from "./tools/context-history";
|
|
26
31
|
import { registerCreateChannelTool } from "./tools/create-channel";
|
|
@@ -54,7 +59,6 @@ import {
|
|
|
54
59
|
} from "./tools/kv";
|
|
55
60
|
// Messaging capability
|
|
56
61
|
import { registerListChannelsTool } from "./tools/list-channels";
|
|
57
|
-
import { registerListServicesTool } from "./tools/list-services";
|
|
58
62
|
import { registerManageUserTool } from "./tools/manage-user";
|
|
59
63
|
// MCP Servers capability
|
|
60
64
|
import {
|
|
@@ -77,6 +81,7 @@ import {
|
|
|
77
81
|
registerModelCatalogOverlayUpsertTool,
|
|
78
82
|
registerModelCatalogRefreshTool,
|
|
79
83
|
} from "./tools/model-catalog";
|
|
84
|
+
import { registerListModelProfilesTool } from "./tools/model-profiles/list-model-profiles";
|
|
80
85
|
import { registerMyAgentInfoTool } from "./tools/my-agent-info";
|
|
81
86
|
import { registerGetOauthAccessTokenTool } from "./tools/oauth-access-token";
|
|
82
87
|
import { registerPollTaskTool } from "./tools/poll-task";
|
|
@@ -91,12 +96,15 @@ import {
|
|
|
91
96
|
} from "./tools/prompt-templates";
|
|
92
97
|
import { registerReadMessagesTool } from "./tools/read-messages";
|
|
93
98
|
import { registerRegisterAgentmailInboxTool } from "./tools/register-agentmail-inbox";
|
|
99
|
+
import {
|
|
100
|
+
registerRegisterChatChannelTool,
|
|
101
|
+
registerUnregisterChatChannelTool,
|
|
102
|
+
} from "./tools/register-chat-channel";
|
|
94
103
|
import {
|
|
95
104
|
registerRegisterKapsoNumberTool,
|
|
96
105
|
registerUnregisterKapsoNumberTool,
|
|
97
106
|
} from "./tools/register-kapso-number";
|
|
98
107
|
// Services capability
|
|
99
|
-
import { registerRegisterServiceTool } from "./tools/register-service";
|
|
100
108
|
// Repo management tools
|
|
101
109
|
import { registerGetReposTool, registerUpdateRepoTool } from "./tools/repos";
|
|
102
110
|
import { registerRequestHumanInputTool } from "./tools/request-human-input";
|
|
@@ -169,6 +177,7 @@ import {
|
|
|
169
177
|
} from "./tools/swarm-config";
|
|
170
178
|
import { registerSwarmXTool } from "./tools/swarm-x";
|
|
171
179
|
// Task pool capability
|
|
180
|
+
import { registerSystemOneDecideTool } from "./tools/system-one-decide";
|
|
172
181
|
import { registerTaskActionTool } from "./tools/task-action";
|
|
173
182
|
// Tracker capability
|
|
174
183
|
import {
|
|
@@ -178,10 +187,8 @@ import {
|
|
|
178
187
|
registerTrackerSyncStatusTool,
|
|
179
188
|
registerTrackerUnlinkTool,
|
|
180
189
|
} from "./tools/tracker";
|
|
181
|
-
import { registerUnregisterServiceTool } from "./tools/unregister-service";
|
|
182
190
|
// Profiles capability
|
|
183
191
|
import { registerUpdateProfileTool } from "./tools/update-profile";
|
|
184
|
-
import { registerUpdateServiceStatusTool } from "./tools/update-service-status";
|
|
185
192
|
import { setPreloadedTools } from "./tools/utils";
|
|
186
193
|
import {
|
|
187
194
|
registerReplyWhatsappMessageTool,
|
|
@@ -216,7 +223,6 @@ export const ALL_CAPABILITIES = [
|
|
|
216
223
|
"prompt-templates",
|
|
217
224
|
"mcp",
|
|
218
225
|
"profiles",
|
|
219
|
-
"services",
|
|
220
226
|
"scheduling",
|
|
221
227
|
"memory",
|
|
222
228
|
"workflows",
|
|
@@ -230,6 +236,7 @@ export const ALL_CAPABILITIES = [
|
|
|
230
236
|
"repo",
|
|
231
237
|
"agentmail",
|
|
232
238
|
"kapso",
|
|
239
|
+
"chat-sdk",
|
|
233
240
|
"swarm-x",
|
|
234
241
|
] as const;
|
|
235
242
|
|
|
@@ -256,12 +263,12 @@ const DEFAULT_CAPABILITIES: string = [
|
|
|
256
263
|
//
|
|
257
264
|
// Disabled by default
|
|
258
265
|
//
|
|
259
|
-
// "services",
|
|
260
266
|
// "prompt-templates",
|
|
261
267
|
// "messaging",
|
|
262
268
|
// "swarm-x",
|
|
263
269
|
// "agentmail",
|
|
264
270
|
// "kapso",
|
|
271
|
+
// "chat-sdk", (added by getEnabledCapabilities when CHAT_SDK_ENABLED is true)
|
|
265
272
|
].join(",");
|
|
266
273
|
|
|
267
274
|
// Note: unknown names are kept (they never match hasCapability); workers
|
|
@@ -280,11 +287,22 @@ export function hasCapability(cap: CAPABILITIES_T): boolean {
|
|
|
280
287
|
return getCapabilities().has(cap);
|
|
281
288
|
}
|
|
282
289
|
|
|
290
|
+
const KNOWN_CAPABILITIES: ReadonlySet<string> = new Set(ALL_CAPABILITIES);
|
|
291
|
+
|
|
283
292
|
export function getEnabledCapabilities(): CAPABILITIES_T[] {
|
|
284
|
-
|
|
293
|
+
// Only known flags: the register response validates against ALL_CAPABILITIES,
|
|
294
|
+
// so a retired name still listed in CAPABILITIES (e.g. `services`) would
|
|
295
|
+
// otherwise turn every agent registration into a 500.
|
|
296
|
+
const capabilities: CAPABILITIES_T[] = Array.from(getCapabilities()).filter(
|
|
297
|
+
(capability) => KNOWN_CAPABILITIES.has(capability) && capability !== "chat-sdk",
|
|
298
|
+
);
|
|
299
|
+
// The Chat SDK channel follows CHAT_SDK_ENABLED, not the CAPABILITIES list.
|
|
300
|
+
if (isChatSdkEnabled()) capabilities.push("chat-sdk");
|
|
285
301
|
// Phase 1 has no HTTP receiver. Do not advertise usable Slack tools to
|
|
286
|
-
// workers when HTTP (or an invalid transport) was selected
|
|
287
|
-
|
|
302
|
+
// workers when HTTP (or an invalid transport) was selected, or when the
|
|
303
|
+
// built-in Slack app is off (SLACK_DISABLE, required by the Chat SDK Slack adapter).
|
|
304
|
+
const slack = getSlackConfiguration();
|
|
305
|
+
return slack.mode === "socket" && !slack.disabled
|
|
288
306
|
? capabilities
|
|
289
307
|
: capabilities.filter((capability) => capability !== "slack");
|
|
290
308
|
}
|
|
@@ -344,6 +362,13 @@ function applyToolAllowlist(server: McpServer, allowlist: readonly string[]): vo
|
|
|
344
362
|
}
|
|
345
363
|
}
|
|
346
364
|
|
|
365
|
+
function removeTools(server: McpServer, names: readonly string[]): void {
|
|
366
|
+
// oxlint-disable-next-line anti-slop/no-chained-type-assertions -- the MCP SDK keeps its tool registry private.
|
|
367
|
+
const tools = (server as unknown as { _registeredTools: Record<string, { remove(): void }> })
|
|
368
|
+
._registeredTools;
|
|
369
|
+
for (const name of names) tools[name]?.remove();
|
|
370
|
+
}
|
|
371
|
+
|
|
347
372
|
export async function createServer(
|
|
348
373
|
opts: {
|
|
349
374
|
scriptsOnly?: boolean;
|
|
@@ -351,6 +376,8 @@ export async function createServer(
|
|
|
351
376
|
preloadedTools?: readonly string[];
|
|
352
377
|
/** Raw SWARM_ENABLED_TOOLS value for this session; defaults to the env. */
|
|
353
378
|
enabledTools?: string;
|
|
379
|
+
/** Tool names removed from this session after registration (task-context filters). */
|
|
380
|
+
excludedTools?: readonly string[];
|
|
354
381
|
} = {},
|
|
355
382
|
) {
|
|
356
383
|
// Reload env
|
|
@@ -368,8 +395,12 @@ export async function createServer(
|
|
|
368
395
|
// fullSurface to register every tool group regardless of CAPABILITIES.
|
|
369
396
|
// An allowlist also registers every group, then prunes to the listed names.
|
|
370
397
|
// This shadows the module-level hasCapability for the registrations below.
|
|
398
|
+
// `chat-sdk` follows CHAT_SDK_ENABLED (as in getEnabledCapabilities), not
|
|
399
|
+
// the CAPABILITIES list.
|
|
371
400
|
const hasCapability = (cap: CAPABILITIES_T): boolean =>
|
|
372
|
-
opts.fullSurface === true ||
|
|
401
|
+
opts.fullSurface === true ||
|
|
402
|
+
toolAllowlist !== undefined ||
|
|
403
|
+
(cap === "chat-sdk" ? isChatSdkEnabled() : getCapabilities().has(cap));
|
|
373
404
|
|
|
374
405
|
// Initialize database with WAL mode
|
|
375
406
|
// Uses DATABASE_PATH env var for Docker volume compatibility (WAL needs .sqlite, .sqlite-wal, .sqlite-shm on same filesystem)
|
|
@@ -385,6 +416,11 @@ export async function createServer(
|
|
|
385
416
|
// manual-override constants for runtime-fee / ACU pricing.
|
|
386
417
|
ensurePricingSeeded();
|
|
387
418
|
startPricingRefreshLoop();
|
|
419
|
+
try {
|
|
420
|
+
await ensureModelProfilesSeeded();
|
|
421
|
+
} catch (err) {
|
|
422
|
+
console.error("[server] Failed to seed model profiles:", err);
|
|
423
|
+
}
|
|
388
424
|
|
|
389
425
|
try {
|
|
390
426
|
ensureRbacSeeded();
|
|
@@ -448,6 +484,7 @@ export async function createServer(
|
|
|
448
484
|
registerGetTasksTool(server);
|
|
449
485
|
registerGetMetricsTool(server);
|
|
450
486
|
registerSendTaskTool(server);
|
|
487
|
+
registerListModelProfilesTool(server);
|
|
451
488
|
registerGetTaskDetailsTool(server);
|
|
452
489
|
registerStoreProgressTool(server);
|
|
453
490
|
registerMyAgentInfoTool(server);
|
|
@@ -582,6 +619,7 @@ export async function createServer(
|
|
|
582
619
|
registerGetWorkflowRunTool(server);
|
|
583
620
|
registerRetryWorkflowRunTool(server);
|
|
584
621
|
registerCancelWorkflowRunTool(server);
|
|
622
|
+
registerSystemOneDecideTool(server);
|
|
585
623
|
registerRequestHumanInputTool(server);
|
|
586
624
|
registerCancelApprovalRequestTool(server);
|
|
587
625
|
}
|
|
@@ -677,6 +715,16 @@ export async function createServer(
|
|
|
677
715
|
registerReplyWhatsappMessageTool(server);
|
|
678
716
|
}
|
|
679
717
|
|
|
718
|
+
// Chat SDK capability - Telegram/Slack/Discord/Teams through the Chat SDK channel (reply, post, DM, read, channel routes)
|
|
719
|
+
if (hasCapability("chat-sdk")) {
|
|
720
|
+
registerChatReplyTool(server);
|
|
721
|
+
registerChatPostTool(server);
|
|
722
|
+
registerChatOpenDmTool(server);
|
|
723
|
+
registerChatReadThreadTool(server);
|
|
724
|
+
registerRegisterChatChannelTool(server);
|
|
725
|
+
registerUnregisterChatChannelTool(server);
|
|
726
|
+
}
|
|
727
|
+
|
|
680
728
|
// Swarm-x capability - external command routes mirroring the `agent-swarm x ...` CLI surface
|
|
681
729
|
if (hasCapability("swarm-x")) {
|
|
682
730
|
registerSwarmXTool(server);
|
|
@@ -693,15 +741,10 @@ export async function createServer(
|
|
|
693
741
|
registerDeleteChannelTool(server);
|
|
694
742
|
}
|
|
695
743
|
|
|
696
|
-
// Services capability - PM2/background service registry
|
|
697
|
-
if (hasCapability("services")) {
|
|
698
|
-
registerRegisterServiceTool(server);
|
|
699
|
-
registerUnregisterServiceTool(server);
|
|
700
|
-
registerListServicesTool(server);
|
|
701
|
-
registerUpdateServiceStatusTool(server);
|
|
702
|
-
}
|
|
703
|
-
|
|
704
744
|
if (toolAllowlist) applyToolAllowlist(server, toolAllowlist);
|
|
745
|
+
if (opts.fullSurface !== true && opts.excludedTools?.length) {
|
|
746
|
+
removeTools(server, opts.excludedTools);
|
|
747
|
+
}
|
|
705
748
|
|
|
706
749
|
return server;
|
|
707
750
|
}
|
package/src/slack/blocks.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import type { AgentTaskStatus, TaskAttachment } from "../types";
|
|
9
9
|
import { getAppUrl } from "../utils/constants";
|
|
10
10
|
import { taskAttachmentDisplayUrl } from "../utils/task-attachment-links";
|
|
11
|
+
import { completedStatusIcon } from "./reaction-shortcode";
|
|
11
12
|
|
|
12
13
|
// Slack limits section text to 3000 chars; we use 2900 for safety.
|
|
13
14
|
export const MAX_SECTION_LENGTH = 2900;
|
|
@@ -294,7 +295,7 @@ export function buildCompletedBlocks(opts: {
|
|
|
294
295
|
trailer?: string;
|
|
295
296
|
}): SlackBlock[] {
|
|
296
297
|
const taskLink = getTaskLink(opts.taskId);
|
|
297
|
-
let line =
|
|
298
|
+
let line = `${completedStatusIcon()} *${opts.agentName}* (${taskLink})`;
|
|
298
299
|
if (opts.duration) line += ` · ${opts.duration}`;
|
|
299
300
|
|
|
300
301
|
const blocks: SlackBlock[] = [sectionBlock(line)];
|
|
@@ -479,7 +480,8 @@ export function isTreeOutputTruncated(text: string): boolean {
|
|
|
479
480
|
* Render a single node line: icon + bold name + task link + optional duration.
|
|
480
481
|
*/
|
|
481
482
|
function renderNodeLine(node: TreeNode): string {
|
|
482
|
-
const icon =
|
|
483
|
+
const icon =
|
|
484
|
+
node.status === "completed" ? completedStatusIcon() : (STATUS_ICON[node.status] ?? "•");
|
|
483
485
|
const taskLink = getTaskLink(node.taskId);
|
|
484
486
|
let line = `${icon} *${node.agentName}* (${taskLink})`;
|
|
485
487
|
if (node.duration) line += ` · ${node.duration}`;
|
package/src/slack/event-dedup.ts
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* safe-but-tight bound.
|
|
19
19
|
*
|
|
20
20
|
* Single-pod-only. The API server (which owns the Slack socket) runs as a
|
|
21
|
-
* single
|
|
21
|
+
* single API process; if that ever changes, swap this for a DB-backed table.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
const DEFAULT_TTL_MS = 300_000; // 5 minutes
|
|
@@ -43,3 +43,17 @@ export function reactionName(event: SlackReactionEvent): string {
|
|
|
43
43
|
const normalized = normalizeSlackReactionShortcode(raw);
|
|
44
44
|
return normalized ?? SLACK_REACTION_DEFAULTS[event];
|
|
45
45
|
}
|
|
46
|
+
|
|
47
|
+
export const SLACK_STATUS_ICON_COMPLETED_KEY = "SLACK_STATUS_ICON_COMPLETED";
|
|
48
|
+
export const SLACK_STATUS_ICON_COMPLETED_DEFAULT = "✅";
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The "done" glyph in thread text (task tree, thread header, outcome cards).
|
|
52
|
+
* Read per call so a global config write, which reloads `process.env`, takes
|
|
53
|
+
* effect without a restart. Unlike a reaction there is no `invalid_name`
|
|
54
|
+
* fallback in text: a name the workspace lacks renders as literal `:name:`.
|
|
55
|
+
*/
|
|
56
|
+
export function completedStatusIcon(): string {
|
|
57
|
+
const normalized = normalizeSlackReactionShortcode(process.env[SLACK_STATUS_ICON_COMPLETED_KEY]);
|
|
58
|
+
return normalized ? `:${normalized}:` : SLACK_STATUS_ICON_COMPLETED_DEFAULT;
|
|
59
|
+
}
|
package/src/slack/render-v2.ts
CHANGED
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
splitSlackSectionText,
|
|
52
52
|
} from "./blocks";
|
|
53
53
|
import { buildAskClosure, type ClosureState, closureState } from "./closure";
|
|
54
|
-
import { reactionName, type SlackReactionEvent } from "./reaction-shortcode";
|
|
54
|
+
import { completedStatusIcon, reactionName, type SlackReactionEvent } from "./reaction-shortcode";
|
|
55
55
|
import { getAgentDisplayName, getAgentEmoji } from "./responses";
|
|
56
56
|
import {
|
|
57
57
|
_resetSlackSessionStatusForTests,
|
|
@@ -346,7 +346,7 @@ async function taskStateGlyph(
|
|
|
346
346
|
case "paused":
|
|
347
347
|
return "⏸️";
|
|
348
348
|
case "completed":
|
|
349
|
-
return
|
|
349
|
+
return completedStatusIcon();
|
|
350
350
|
case "failed":
|
|
351
351
|
return "❌";
|
|
352
352
|
case "cancelled":
|
|
@@ -496,7 +496,9 @@ function threadHeaderText(tasks: AgentTask[], now: Date, duration: string): stri
|
|
|
496
496
|
// A parked deferral is stored `completed`, but the ask is not answered yet.
|
|
497
497
|
if (tasks.some((task) => isAwaitingWake(task, tasks))) return `🧵 ⏳ waiting — ${duration}`;
|
|
498
498
|
const hasFailure = tasks.some((task) => task.status === "failed");
|
|
499
|
-
return hasFailure
|
|
499
|
+
return hasFailure
|
|
500
|
+
? `🧵 ❌ done with failures — ${duration}`
|
|
501
|
+
: `🧵 ${completedStatusIcon()} done — ${duration}`;
|
|
500
502
|
}
|
|
501
503
|
|
|
502
504
|
export async function renderThreadTree(
|
|
@@ -909,7 +911,7 @@ async function outcomeContent(task: AgentTask, slackReplySent: boolean): Promise
|
|
|
909
911
|
const agentName = task.agentId
|
|
910
912
|
? ((await getAgentById(task.agentId))?.name ?? "Agent")
|
|
911
913
|
: "Agent";
|
|
912
|
-
return
|
|
914
|
+
return `${completedStatusIcon()} ${agentName} completed`;
|
|
913
915
|
}
|
|
914
916
|
// A deferral is `completed` in the database but unfinished to a human: the
|
|
915
917
|
// work resumes in a wake-up task. Rendering it ✅ told the thread the ask
|
|
@@ -917,7 +919,10 @@ async function outcomeContent(task: AgentTask, slackReplySent: boolean): Promise
|
|
|
917
919
|
if (isDeferred) {
|
|
918
920
|
return withStatusLead("⏳", outcomeText(slackTaskOutput(task), "Deferred."));
|
|
919
921
|
}
|
|
920
|
-
return withStatusLead(
|
|
922
|
+
return withStatusLead(
|
|
923
|
+
completedStatusIcon(),
|
|
924
|
+
outcomeText(slackTaskOutput(task), "Task completed."),
|
|
925
|
+
);
|
|
921
926
|
}
|
|
922
927
|
|
|
923
928
|
async function agentDisplayNameFor(task: AgentTask): Promise<string> {
|
|
@@ -947,7 +952,7 @@ export async function childOutcomeContent(
|
|
|
947
952
|
);
|
|
948
953
|
}
|
|
949
954
|
if (slackReplySent && !isDeferredTask(task)) {
|
|
950
|
-
return `↳
|
|
955
|
+
return `↳ ${completedStatusIcon()} ${agentName} completed`;
|
|
951
956
|
}
|
|
952
957
|
if (isDeferredTask(task)) {
|
|
953
958
|
return withStatusLead(
|
|
@@ -956,7 +961,7 @@ export async function childOutcomeContent(
|
|
|
956
961
|
);
|
|
957
962
|
}
|
|
958
963
|
return withStatusLead(
|
|
959
|
-
`↳
|
|
964
|
+
`↳ ${completedStatusIcon()} ${agentName} — result:`,
|
|
960
965
|
outcomeText(slackTaskOutput(task), "Task completed."),
|
|
961
966
|
);
|
|
962
967
|
}
|