@desplega.ai/agent-swarm 1.149.1 → 1.151.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 +18 -3
- package/dist/{acp-adapter-vhkzfpjg.js → acp-adapter-ex8hzjfc.js} +5 -5
- package/dist/{actions-9d2694yk.js → actions-2bgpyhww.js} +39 -11
- package/dist/{app-fq2ggynt.js → app-1706zhr1.js} +7 -7
- package/dist/{artifact-gj9arwrr.js → artifact-td4q4dch.js} +1 -1
- package/dist/{assistant-edb6n9nn.js → assistant-bavke5p7.js} +44 -20
- package/dist/{azure-openai-responses-cqar64rc.js → azure-openai-responses-f38x2avq.js} +13 -13
- package/dist/{boot-reembed-msweabbp.js → boot-reembed-3cmrrmpa.js} +9 -9
- package/dist/{boot-reembed-q5wd3tha.js → boot-reembed-nafcmmmc.js} +14 -16
- package/dist/{boot-scrub-logs-3g1az933.js → boot-scrub-logs-cd6a2sq0.js} +5 -5
- package/dist/{claude-adapter-v3rnzsdc.js → claude-adapter-wfp2gzvz.js} +15 -16
- package/dist/{claude-managed-adapter-qvsmh6mv.js → claude-managed-adapter-dsmkcrjy.js} +3 -3
- package/dist/{claude-sdk-session-qxrpsna1.js → claude-sdk-session-bht9jjak.js} +15 -16
- package/dist/{cli-5m0qmvdp.js → cli-0qb1z6s2.js} +1 -1
- package/dist/{cli-9d8ntetj.js → cli-2658f6at.js} +1 -1
- package/dist/{cli-7evafqvy.js → cli-2tbvf1z1.js} +85 -69
- package/dist/{cli-k351hv5k.js → cli-3v9xhjcn.js} +24 -12
- package/dist/{cli-1ebpar1q.js → cli-4wppfkcm.js} +350 -20
- package/dist/{cli-4260r1tg.js → cli-5jd2z7av.js} +97 -84
- package/dist/{cli-cv7s5zdq.js → cli-5tpgq60f.js} +9865 -715
- package/dist/{cli-6skz3rk8.js → cli-7tgcstn2.js} +9 -4
- package/dist/{cli-01g3x1ca.js → cli-9004vfdf.js} +108 -56
- package/dist/{cli-1c94wvcw.js → cli-a1z3h107.js} +124 -99
- package/dist/{cli-9br8ypfv.js → cli-czjtgfys.js} +2 -2
- package/dist/{cli-5my3bjsd.js → cli-d3p82erb.js} +7 -7
- package/dist/{cli-e29gmdmw.js → cli-dv6cdjs2.js} +2 -1
- package/dist/{cli-wby1xnnb.js → cli-f1wky6zp.js} +1 -1
- package/dist/{cli-zvz62chv.js → cli-fm4ytsdk.js} +4 -4
- package/dist/{cli-tg8qj8ee.js → cli-frcta2w4.js} +6 -6
- package/dist/{cli-7xx10h0a.js → cli-g69fdc9g.js} +2 -2
- package/dist/{cli-cmp8g3sw.js → cli-gbfwcd3k.js} +44 -9
- package/dist/{handlers-nsg0bcye.js → cli-gjyvhmmh.js} +97 -45
- package/dist/{cli-08b07b4r.js → cli-ht5rs63n.js} +1 -1
- package/dist/{cli-jecc01cb.js → cli-j4nv2wqy.js} +2 -4
- package/dist/{cli-cd60fv6j.js → cli-j9xczhaq.js} +1 -1
- package/dist/cli-pf9q3696.js +172 -0
- package/dist/{cli-xm87hzbw.js → cli-pgj4a5fb.js} +1 -1
- package/dist/{cli-jezx9b9c.js → cli-ppm4975n.js} +9 -3
- package/dist/{cli-3z634pqe.js → cli-q88st9aj.js} +2 -2
- package/dist/{cli-3sysyjve.js → cli-r2q6pevn.js} +142 -49
- package/dist/{cli-07jd68a1.js → cli-re8z5p8p.js} +1 -1
- package/dist/{cli-qgd4sqz5.js → cli-s14agm5s.js} +121 -14
- package/dist/{cli-svbrpf5q.js → cli-sjaae6ff.js} +9872 -424
- package/dist/{cli-73gq0zxn.js → cli-vwm416m6.js} +13 -13
- package/dist/{cli-4wtq5jjv.js → cli-wbyk465z.js} +1 -1
- package/dist/{cli-3apbzgyk.js → cli-z61ykvam.js} +19 -14
- package/dist/{cli-e06a8a7y.js → cli-zkxymas5.js} +4 -3
- package/dist/cli.js +26 -25
- package/dist/{codex-adapter-jyw7a91z.js → codex-adapter-jjjk8w4m.js} +8 -9
- package/dist/{codex-hook-hfrt9shr.js → codex-hook-8jexc34x.js} +3 -3
- package/dist/{codex-session-runner-bmngj0s5.js → codex-session-runner-nd6ayxkx.js} +8 -9
- package/dist/{commands-n755g391.js → commands-9v4psyq1.js} +5 -5
- package/dist/{db-s1cgh5gv.js → db-wnt58tpe.js} +5 -5
- package/dist/dispatcher-05jh1aqk.js +74 -0
- package/dist/{e2b-p04vmtx0.js → e2b-413b8t4v.js} +1 -1
- package/dist/{google-generative-ai-tsskx7te.js → google-generative-ai-ndjmj5fa.js} +7 -7
- package/dist/{google-vertex-ppw8ydpa.js → google-vertex-fr665tqs.js} +10 -10
- package/dist/handlers-tw90pkh5.js +65 -0
- package/dist/{hook-jf0xe8zh.js → hook-123e2scb.js} +11 -12
- package/dist/{hook-h9cqrm8q.js → hook-sxe3r349.js} +11 -12
- package/dist/{http-nc6pydw5.js → http-ecsar8ez.js} +1442 -581
- package/dist/{index-ezxkds2n.js → index-16js521z.js} +335 -107
- package/dist/{index-769nc012.js → index-hw26vj40.js} +25 -19
- package/dist/{index-0wdy6gwc.js → index-nnrbpcjp.js} +25 -17
- package/dist/index-ymn7em0p.js +25 -0
- package/dist/{index-x1zcj09z.js → index-zj518gf9.js} +26 -20
- package/dist/{keepalive-nesm3xb6.js → keepalive-asqtcm4y.js} +7 -7
- package/dist/{lead-bwy6t2za.js → lead-xbfr7fvt.js} +40 -48
- package/dist/{maintenance-8w393zf0.js → maintenance-qma55qvw.js} +9 -9
- package/dist/{oauth-refresh-sweep-sh8xjy08.js → oauth-refresh-sweep-3s04c6qw.js} +6 -6
- package/dist/{onboard-25ps29h1.js → onboard-drskd386.js} +13 -4
- package/dist/{openai-codex-responses-g7w48y30.js → openai-codex-responses-wy6a43wd.js} +13 -13
- package/dist/{openai-responses-nmeyptke.js → openai-responses-6xwf7bzg.js} +19 -19
- package/dist/{opencode-adapter-dce4wskd.js → opencode-adapter-28axqa09.js} +4 -4
- package/dist/{otel-impl-b93gxnz5.js → otel-impl-943c96er.js} +1 -1
- package/dist/{pi-mono-adapter-zvshk5cj.js → pi-mono-adapter-jcqt71cg.js} +17 -19
- package/dist/{pricing-refresh-5v56x7gb.js → pricing-refresh-mx51az05.js} +7 -7
- package/dist/{rbac-roles-x55cnezn.js → rbac-roles-78baecqd.js} +13 -9
- package/dist/{rbac-roles-0p0s6pbj.js → rbac-roles-wcmrg6sv.js} +7 -7
- package/dist/{render-v2-hyd45w8b.js → render-v2-8zjntgf5.js} +7 -7
- package/dist/{seed-pricing-49gbgn96.js → seed-pricing-jqjs6cws.js} +6 -6
- package/dist/{setup-qvq64vzq.js → setup-4pks0vfk.js} +2 -2
- package/dist/work-objects-wangt792.js +165 -0
- package/dist/{worker-scj60cxg.js → worker-p2mr422x.js} +40 -48
- package/openapi.json +1365 -268
- package/package.json +4 -3
- package/src/agentmail/handlers.ts +95 -66
- package/src/be/budget-refusal-notify.ts +1 -0
- package/src/be/db/tasks/read.ts +3 -0
- package/src/be/db/tasks/write.ts +13 -1
- package/src/be/db-client.ts +5 -0
- package/src/be/db.ts +15 -5
- package/src/be/extensions/db.ts +461 -0
- package/src/be/extensions/validate.ts +107 -0
- package/src/be/memory/boot-reembed.ts +17 -12
- package/src/be/memory/index.ts +12 -0
- package/src/be/memory/providers/openai-embedding.ts +4 -0
- package/src/be/memory/types.ts +2 -0
- package/src/be/migrations/153_deferred_task_wait_members.sql +25 -0
- package/src/be/migrations/154_routing_source.sql +3 -0
- package/src/be/migrations/155_extensions.sql +66 -0
- package/src/be/migrations/156_inbox_item_state_read_at.sql +7 -0
- package/src/be/rbac-roles.ts +3 -2
- package/src/be/scripts/typecheck.ts +59 -41
- package/src/be/seed/schedules-seeder.ts +25 -2
- package/src/be/seed/workflows-seeder.ts +17 -0
- package/src/be/seed-scripts/catalog/delegate.ts +3 -1
- package/src/be/seed-skills/bundled-files.generated.json +1 -1
- package/src/be/seed-skills/index.ts +7 -0
- package/src/be/steering.ts +1 -0
- package/src/be/swarm-config-guard.ts +3 -1
- package/src/commands/credential-refresh.ts +70 -0
- package/src/commands/onboard/compose-generator.ts +14 -2
- package/src/commands/onboard/env-generator.ts +7 -0
- package/src/commands/provider-credentials.ts +2 -25
- package/src/commands/runner.ts +24 -57
- package/src/extensions/apply-task-create.ts +135 -0
- package/src/extensions/bundle-path.ts +10 -0
- package/src/extensions/contract-runtime.ts +7 -0
- package/src/extensions/contract-types.generated.ts +4 -0
- package/src/extensions/contract.ts +270 -0
- package/src/extensions/ctx.ts +186 -0
- package/src/extensions/dispatcher.ts +479 -0
- package/src/extensions/identity.ts +44 -0
- package/src/extensions/lifecycle.ts +281 -0
- package/src/extensions/loader.ts +207 -0
- package/src/extensions/post-bridge.ts +161 -0
- package/src/github/handlers.ts +185 -140
- package/src/gitlab/handlers.ts +97 -77
- package/src/heartbeat/heartbeat.ts +155 -83
- package/src/http/agents.ts +1 -1
- package/src/http/all-routes.ts +1 -0
- package/src/http/approval-requests.ts +1 -0
- package/src/http/apps.ts +14 -9
- package/src/http/config.ts +4 -1
- package/src/http/core.ts +38 -2
- package/src/http/extensions.ts +547 -0
- package/src/http/inbox-state.ts +2 -0
- package/src/http/index.ts +41 -3
- package/src/http/mcp-bridge.ts +96 -62
- package/src/http/mcp.ts +1 -1
- package/src/http/script-runs.ts +5 -0
- package/src/http/status.ts +6 -4
- package/src/http/tasks.ts +51 -30
- package/src/integrations/kapso/inbound.ts +15 -10
- package/src/jira/sync.ts +26 -16
- package/src/linear/sync.ts +26 -16
- package/src/prompts/session-templates.ts +18 -13
- package/src/providers/claude-adapter.ts +21 -8
- package/src/rbac/admission.ts +1 -1
- package/src/rbac/elevated-agents.ts +24 -0
- package/src/rbac/legacy-policy.ts +35 -6
- package/src/rbac/permissions.ts +8 -0
- package/src/scheduler/deferred-task-waits.ts +138 -27
- package/src/scheduler/schedule-task.ts +54 -24
- package/src/scheduler/scheduler.ts +108 -125
- package/src/scripts-runtime/executors/native.ts +5 -1
- package/src/scripts-runtime/executors/types.ts +5 -0
- package/src/scripts-runtime/import-allowlist.ts +79 -19
- package/src/scripts-runtime/sdk-allowlist.ts +4 -0
- package/src/scripts-runtime/swarm-config.ts +8 -0
- package/src/scripts-runtime/swarm-sdk.ts +3 -0
- package/src/scripts-runtime/types/stdlib.d.ts +16 -3
- package/src/scripts-runtime/types/swarm-extension.d.ts +562 -0
- package/src/scripts-runtime/types/swarm-sdk.d.ts +16 -3
- package/src/server.ts +6 -0
- package/src/slack/HEURISTICS.md +3 -1
- package/src/slack/actions.ts +21 -16
- package/src/slack/app.ts +2 -0
- package/src/slack/assistant.ts +4 -12
- package/src/slack/blocks.ts +1 -1
- package/src/slack/handlers.ts +107 -19
- package/src/slack/inbound-files.ts +9 -5
- package/src/slack/render-v2.ts +188 -38
- package/src/slack/router.ts +13 -3
- package/src/slack/steering.ts +3 -3
- package/src/slack/thread-buffer.ts +66 -23
- package/src/slack/work-objects.test.ts +252 -0
- package/src/slack/work-objects.ts +118 -0
- package/src/tasks/errors.ts +9 -0
- package/src/tasks/sibling-awareness.ts +35 -1
- package/src/tasks/worker-follow-up.ts +67 -11
- package/src/tests/acp-adapter.test.ts +10 -10
- package/src/tests/agent-fs-live-url.test.ts +40 -0
- package/src/tests/agent-fs-provision-seeder.test.ts +12 -12
- package/src/tests/api-key-tracking.test.ts +18 -18
- package/src/tests/api-key.test.ts +4 -2
- package/src/tests/apps-rbac.test.ts +1 -1
- package/src/tests/apps-spike5.test.ts +1 -1
- package/src/tests/apps-sync-engine.test.ts +8 -8
- package/src/tests/apps-user-config.test.ts +1 -1
- package/src/tests/artifact-sdk.test.ts +8 -8
- package/src/tests/asset-key-mcp.test.ts +2 -0
- package/src/tests/automation-preflight-alert.test.ts +1 -1
- package/src/tests/base-prompt.test.ts +7 -6
- package/src/tests/budget-user-scope.test.ts +1 -1
- package/src/tests/budgets-routes.test.ts +1 -1
- package/src/tests/claude-adapter-binary.test.ts +22 -40
- package/src/tests/claude-adapter-otel.test.ts +13 -7
- package/src/tests/claude-adapter.test.ts +8 -6
- package/src/tests/claude-hook-credentials.test.ts +3 -3
- package/src/tests/claude-managed-adapter.test.ts +4 -4
- package/src/tests/claude-managed-setup.test.ts +3 -3
- package/src/tests/claude-sdk-lifecycle.test.ts +1 -1
- package/src/tests/claude-sdk-transport.test.ts +6 -6
- package/src/tests/claude-stop-hook.test.ts +8 -8
- package/src/tests/claude-worker-parity.test.ts +3 -3
- package/src/tests/codex-adapter-pool-auth-revalidate.test.ts +5 -5
- package/src/tests/codex-adapter.test.ts +7 -5
- package/src/tests/codex-app-server.test.ts +2 -2
- package/src/tests/codex-login.test.ts +15 -15
- package/src/tests/codex-oauth-credential-info.test.ts +4 -4
- package/src/tests/codex-oauth-keep-warm.test.ts +4 -4
- package/src/tests/codex-oauth-refresh-lock.test.ts +1 -1
- package/src/tests/codex-oauth-storage.test.ts +7 -7
- package/src/tests/codex-pool.test.ts +1 -1
- package/src/tests/codex-steering-hook.test.ts +1 -1
- package/src/tests/codex-swarm-events.test.ts +1 -1
- package/src/tests/config-api-only-keys.test.ts +1 -1
- package/src/tests/config-session-auth.test.ts +2 -2
- package/src/tests/connection-embedded-auth.test.ts +20 -18
- package/src/tests/core-auth.test.ts +1 -1
- package/src/tests/create-page-tool.test.ts +3 -3
- package/src/tests/credential-refresh.test.ts +115 -0
- package/src/tests/credential-wait.test.ts +2 -2
- package/src/tests/credentials.test.ts +6 -4
- package/src/tests/db-queries-oauth.test.ts +40 -40
- package/src/tests/defer-task.test.ts +73 -8
- package/src/tests/deferred-task-wait-migration.test.ts +64 -0
- package/src/tests/deferred-task-wake.test.ts +349 -8
- package/src/tests/devin-adapter.test.ts +1 -1
- package/src/tests/devin-api.test.ts +1 -1
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/e2b-dispatch.test.ts +21 -19
- package/src/tests/e2e-claude-transport.test.ts +3 -3
- package/src/tests/e2e-redact.test.ts +6 -6
- package/src/tests/ensure-token.test.ts +68 -68
- package/src/tests/entrypoint-api-readiness.test.ts +1 -1
- package/src/tests/entrypoint-codex-oauth-seed.test.ts +13 -13
- package/src/tests/env-flag.test.ts +1 -0
- package/src/tests/events-http.test.ts +1 -1
- package/src/tests/extensions-db.test.ts +216 -0
- package/src/tests/extensions-dispatcher.test.ts +275 -0
- package/src/tests/extensions-example-heartbeat-remediate.test.ts +69 -0
- package/src/tests/extensions-example-mcp-install.test.ts +63 -0
- package/src/tests/extensions-example-no-exclamation-marks.test.ts +72 -0
- package/src/tests/extensions-example-rewrite-and-suppress.test.ts +70 -0
- package/src/tests/extensions-example-route-slack-channel.test.ts +217 -0
- package/src/tests/extensions-heartbeat.test.ts +291 -0
- package/src/tests/extensions-http.test.ts +431 -0
- package/src/tests/extensions-lead-equivalence.test.ts +49 -0
- package/src/tests/extensions-lifecycle.test.ts +209 -0
- package/src/tests/extensions-loader.test.ts +95 -0
- package/src/tests/extensions-mcp-tools.test.ts +245 -0
- package/src/tests/extensions-pre-task.test.ts +487 -0
- package/src/tests/extensions-run-context.test.ts +41 -0
- package/src/tests/extensions-tool-call.test.ts +288 -0
- package/src/tests/extensions-validate.test.ts +196 -0
- package/src/tests/fixtures/extensions/bad-import/hooks.ts +8 -0
- package/src/tests/fixtures/extensions/bad-import/manifest.json +9 -0
- package/src/tests/fixtures/extensions/bad-return-shape/hooks.ts +10 -0
- package/src/tests/fixtures/extensions/bad-return-shape/manifest.json +9 -0
- package/src/tests/fixtures/extensions/block-tasks-from-source/hooks.ts +22 -0
- package/src/tests/fixtures/extensions/block-tasks-from-source/manifest.json +9 -0
- package/src/tests/fixtures/extensions/ignore-channel/hooks.ts +22 -0
- package/src/tests/fixtures/extensions/ignore-channel/manifest.json +9 -0
- package/src/tests/fixtures/extensions/load.ts +10 -0
- package/src/tests/fixtures/extensions/minimal/hooks.ts +7 -0
- package/src/tests/fixtures/extensions/minimal/manifest.json +9 -0
- package/src/tests/fixtures/extensions/never-fail-long-tasks/hooks.ts +11 -0
- package/src/tests/fixtures/extensions/never-fail-long-tasks/manifest.json +9 -0
- package/src/tests/fixtures/extensions/no-exclamation-marks/hooks.ts +23 -0
- package/src/tests/fixtures/extensions/no-exclamation-marks/manifest.json +9 -0
- package/src/tests/fixtures/extensions/post-logger/hooks.ts +9 -0
- package/src/tests/fixtures/extensions/post-logger/manifest.json +9 -0
- package/src/tests/fixtures/extensions/priority-a/hooks.ts +7 -0
- package/src/tests/fixtures/extensions/priority-a/manifest.json +9 -0
- package/src/tests/fixtures/extensions/priority-b/hooks.ts +7 -0
- package/src/tests/fixtures/extensions/priority-b/manifest.json +9 -0
- package/src/tests/fixtures/extensions/record-only-on-tag/hooks.ts +16 -0
- package/src/tests/fixtures/extensions/record-only-on-tag/manifest.json +9 -0
- package/src/tests/fixtures/extensions/reserved-assets/hooks.ts +5 -0
- package/src/tests/fixtures/extensions/reserved-assets/manifest.json +10 -0
- package/src/tests/fixtures/extensions/rewrite-progress-prefix/hooks.ts +22 -0
- package/src/tests/fixtures/extensions/rewrite-progress-prefix/manifest.json +9 -0
- package/src/tests/fixtures/extensions/rewrite-task-priority/hooks.ts +7 -0
- package/src/tests/fixtures/extensions/rewrite-task-priority/manifest.json +9 -0
- package/src/tests/fixtures/extensions/route-channel-to-agent/hooks.ts +26 -0
- package/src/tests/fixtures/extensions/route-channel-to-agent/manifest.json +9 -0
- package/src/tests/fixtures/extensions/slow/hooks.ts +10 -0
- package/src/tests/fixtures/extensions/slow/manifest.json +9 -0
- package/src/tests/fixtures/extensions/suppress-lead-follow-up/hooks.ts +12 -0
- package/src/tests/fixtures/extensions/suppress-lead-follow-up/manifest.json +9 -0
- package/src/tests/fixtures/extensions/throws/hooks.ts +12 -0
- package/src/tests/fixtures/extensions/throws/manifest.json +9 -0
- package/src/tests/fixtures/extensions/worker-runtime/hooks.ts +5 -0
- package/src/tests/fixtures/extensions/worker-runtime/manifest.json +9 -0
- package/src/tests/fs-routes.test.ts +1 -1
- package/src/tests/gitlab-auth.test.ts +10 -10
- package/src/tests/harness-provider-resolution.test.ts +8 -5
- package/src/tests/heartbeat-reroute-decision.test.ts +1 -0
- package/src/tests/helper-credentials.test.ts +137 -0
- package/src/tests/http/context-routes.test.ts +2 -2
- package/src/tests/http-api-integration.test.ts +5 -2
- package/src/tests/http-users.test.ts +1 -1
- package/src/tests/identity-refresh.test.ts +2 -2
- package/src/tests/internal-ai/complete-structured.test.ts +2 -2
- package/src/tests/internal-ai/credentials.test.ts +19 -17
- package/src/tests/jira-metadata.test.ts +1 -1
- package/src/tests/jira-oauth.test.ts +5 -5
- package/src/tests/jira-sync.test.ts +1 -1
- package/src/tests/jira-webhook-lifecycle.test.ts +3 -3
- package/src/tests/jira-webhook.test.ts +2 -2
- package/src/tests/kapso-inbound.test.ts +2 -2
- package/src/tests/kv-http.test.ts +1 -1
- package/src/tests/kv-namespace-resolution.test.ts +1 -1
- package/src/tests/kv-page-proxy.test.ts +2 -2
- package/src/tests/launch-password-rejection.test.ts +2 -2
- package/src/tests/linear-webhook.test.ts +1 -1
- package/src/tests/mcp-oauth-dcr-reuse.test.ts +6 -6
- package/src/tests/mcp-oauth-ensure-token.test.ts +28 -22
- package/src/tests/mcp-oauth-manual-client.test.ts +16 -12
- package/src/tests/mcp-oauth-queries.test.ts +35 -32
- package/src/tests/mcp-oauth-resolve-secrets.test.ts +8 -8
- package/src/tests/mcp-oauth-wrapper.test.ts +20 -20
- package/src/tests/mcp-user-route.test.ts +1 -1
- package/src/tests/memory-edges.test.ts +1 -1
- package/src/tests/memory-edit-authorization.test.ts +32 -0
- package/src/tests/memory-rate-endpoint.test.ts +1 -1
- package/src/tests/memory-rate-tool.test.ts +2 -2
- package/src/tests/memory-rater-e2e.test.ts +1 -1
- package/src/tests/memory-rater-llm-summarizer.test.ts +3 -3
- package/src/tests/memory-rater-llm.test.ts +1 -1
- package/src/tests/model-control.test.ts +3 -0
- package/src/tests/multi-runtime-enabled-stats.test.ts +2 -2
- package/src/tests/multi-runtime-registration.test.ts +111 -17
- package/src/tests/oauth-access-token-tool.test.ts +18 -18
- package/src/tests/oauth-callback-flow.test.ts +8 -8
- package/src/tests/oauth-credential-bindings.test.ts +29 -27
- package/src/tests/oauth-keepalive.test.ts +10 -10
- package/src/tests/oauth-presets.test.ts +13 -5
- package/src/tests/oauth-refresh-failure.test.ts +9 -9
- package/src/tests/oauth-refresh-sweep.test.ts +20 -13
- package/src/tests/oauth-wrapper.test.ts +1 -1
- package/src/tests/onboard-compose.test.ts +47 -3
- package/src/tests/onboard-env.test.ts +26 -26
- package/src/tests/onboard-non-interactive.test.ts +4 -4
- package/src/tests/opencode-adapter.test.ts +1 -1
- package/src/tests/opencode-plugin.test.ts +2 -2
- package/src/tests/otel-session-cost-metrics.test.ts +1 -1
- package/src/tests/page-proxy-authed.test.ts +2 -2
- package/src/tests/page-proxy.test.ts +2 -2
- package/src/tests/page-session.test.ts +7 -7
- package/src/tests/page-viewer-auth.test.ts +2 -2
- package/src/tests/pages-authed-mode.test.ts +1 -1
- package/src/tests/pages-http.test.ts +1 -1
- package/src/tests/pages-password-mode.test.ts +1 -1
- package/src/tests/pages-public-authed-401.test.ts +1 -1
- package/src/tests/pages-public-html.test.ts +2 -2
- package/src/tests/pages-view-count.test.ts +1 -1
- package/src/tests/pi-mono-adapter.test.ts +10 -10
- package/src/tests/pi-mono-extension.test.ts +2 -2
- package/src/tests/preload.ts +5 -0
- package/src/tests/pricing-routes.test.ts +1 -1
- package/src/tests/profile-sync-warning.test.ts +8 -8
- package/src/tests/profile-sync.test.ts +8 -8
- package/src/tests/prompt-template-session.test.ts +36 -5
- package/src/tests/provider-process-group.test.ts +95 -4
- package/src/tests/providers/pi-cost.test.ts +1 -1
- package/src/tests/queue-stall-alarm.test.ts +1 -1
- package/src/tests/rbac-admission.test.ts +19 -4
- package/src/tests/rbac-charact-http.test.ts +1 -1
- package/src/tests/rbac-e2e-helpers.ts +1 -1
- package/src/tests/rbac-engine.test.ts +39 -0
- package/src/tests/realtime-room-auth.test.ts +1 -1
- package/src/tests/realtime-room-surfaces.test.ts +1 -1
- package/src/tests/reload-config.test.ts +45 -1
- package/src/tests/routing-affinity-inventory.test.ts +1 -1
- package/src/tests/routing-reason-contract.test.ts +76 -3
- package/src/tests/routing-reason-inventory.test.ts +11 -6
- package/src/tests/routing-source.test.ts +53 -0
- package/src/tests/runner-agent-fs-provision-retry.test.ts +1 -1
- package/src/tests/runner-context-preamble.test.ts +1 -1
- package/src/tests/runner-deployment-resume.test.ts +1 -1
- package/src/tests/runner-fallback-output.test.ts +1 -1
- package/src/tests/runner-identity-refresh.test.ts +1 -1
- package/src/tests/runner-skills-refresh.test.ts +1 -1
- package/src/tests/schedule-target-type.test.ts +3 -3
- package/src/tests/scheduled-tasks.test.ts +14 -5
- package/src/tests/scheduler-occurrence.test.ts +347 -0
- package/src/tests/script-apis-mcp.test.ts +1 -1
- package/src/tests/script-connections-http.test.ts +61 -58
- package/src/tests/script-connections-mcp.test.ts +1 -1
- package/src/tests/script-connections.test.ts +3 -1
- package/src/tests/script-runs-http.test.ts +15 -7
- package/src/tests/script-workflows-runtime-e2e.test.ts +1 -1
- package/src/tests/scripts-boot-reembed.test.ts +4 -0
- package/src/tests/scripts-embeddings.test.ts +4 -0
- package/src/tests/scripts-external-api.test.ts +1 -1
- package/src/tests/scripts-http.test.ts +1 -1
- package/src/tests/scripts-import-allowlist.test.ts +44 -1
- package/src/tests/scripts-mcp-e2e.test.ts +81 -1
- package/src/tests/scripts-only-gating.test.ts +4 -2
- package/src/tests/scripts-retention.test.ts +1 -1
- package/src/tests/scripts-runtime-identity.test.ts +2 -2
- package/src/tests/scripts-runtime-secret-egress.test.ts +1 -1
- package/src/tests/scripts-runtime.test.ts +6 -4
- package/src/tests/scripts-typecheck.test.ts +21 -0
- package/src/tests/sdk-allowlist.test.ts +1 -1
- package/src/tests/secret-scrubber.test.ts +38 -31
- package/src/tests/seed-registry.test.ts +46 -8
- package/src/tests/seed-schedules.test.ts +44 -9
- package/src/tests/seed-workflows.test.ts +21 -9
- package/src/tests/send-task-output-schema.test.ts +9 -1
- package/src/tests/send-task-requested-by.test.ts +1 -0
- package/src/tests/send-task-slack-routing-guard.test.ts +2 -0
- package/src/tests/session-costs-codex-recompute.test.ts +1 -1
- package/src/tests/session-costs-golden.test.ts +2 -2
- package/src/tests/session-costs-model-key-normalize.test.ts +2 -2
- package/src/tests/session-costs-recompute-all-providers.test.ts +1 -1
- package/src/tests/session-tokens.test.ts +1 -1
- package/src/tests/shutdown-error-scrubbing.test.ts +1 -1
- package/src/tests/slack-blocks.test.ts +12 -1
- package/src/tests/slack-file-tools-attachments.test.ts +1 -1
- package/src/tests/slack-inbound-files.test.ts +222 -86
- package/src/tests/slack-reaction-config.test.ts +5 -4
- package/src/tests/slack-read-boundaries.test.ts +1 -1
- package/src/tests/slack-render-v2.test.ts +196 -4
- package/src/tests/slack-router.test.ts +17 -2
- package/src/tests/slack-steering.test.ts +19 -0
- package/src/tests/status.test.ts +19 -7
- package/src/tests/steering-core.test.ts +1 -1
- package/src/tests/steering-enabled.test.ts +6 -8
- package/src/tests/steering-transport.test.ts +4 -4
- package/src/tests/store-progress-output-guidance.test.ts +34 -0
- package/src/tests/swarm-tool-result-gate.test.ts +11 -11
- package/src/tests/swarm-x-tool.test.ts +7 -5
- package/src/tests/sync-ai-toolbox-skills.test.ts +19 -0
- package/src/tests/task-supersede-resume.test.ts +1 -1
- package/src/tests/task-tool-preload-mcp.test.ts +4 -1
- package/src/tests/task-tools-ctx.test.ts +2 -0
- package/src/tests/tasks-requested-by-filter.test.ts +2 -2
- package/src/tests/telemetry-init.test.ts +11 -3
- package/src/tests/tool-annotations.test.ts +1 -1
- package/src/tests/tool-output-agent-id.test.ts +1 -0
- package/src/tests/tool-registrar-no-input.test.ts +42 -1
- package/src/tests/tracker-fold.test.ts +7 -7
- package/src/tests/tracker-tools.test.ts +3 -3
- package/src/tests/ui-followup-lead-delegation.test.ts +1 -0
- package/src/tests/unified-oauth-migration.test.ts +5 -5
- package/src/tests/user-token-rest-auth.test.ts +1 -1
- package/src/tests/user-token-routes.test.ts +1 -1
- package/src/tests/whoami-route.test.ts +1 -1
- package/src/tests/workflow-agent-task.test.ts +15 -13
- package/src/tests/workflow-ctx.test.ts +1 -1
- package/src/tests/workflow-e2e.test.ts +1 -1
- package/src/tests/workflow-engine-v2.test.ts +3 -1
- package/src/tests/workflow-executors.test.ts +2 -2
- package/src/tests/workflow-http-v2.test.ts +8 -6
- package/src/tests/workflow-input-redaction.test.ts +7 -5
- package/src/tests/workflow-integration-io.test.ts +2 -2
- package/src/tests/workflow-llm.test.ts +5 -5
- package/src/tests/workflow-registry.test.ts +1 -1
- package/src/tests/workflow-swarm-script.test.ts +1 -1
- package/src/tests/workflow-triggers-v2.test.ts +23 -21
- package/src/tests/x-composio.test.ts +9 -7
- package/src/tests/x402-client.test.ts +1 -1
- package/src/tests/x402-config.test.ts +28 -41
- package/src/tools/defer-task.ts +156 -24
- package/src/tools/extension-common.ts +84 -0
- package/src/tools/extension-install.ts +65 -0
- package/src/tools/extension-list.ts +66 -0
- package/src/tools/script-common.ts +43 -18
- package/src/tools/send-task.ts +87 -105
- package/src/tools/skills/skill-publish.ts +1 -0
- package/src/tools/store-progress.ts +1 -1
- package/src/tools/task-action.ts +43 -22
- package/src/tools/task-tool-ctx.ts +2 -0
- package/src/tools/templates.ts +2 -1
- package/src/tools/tool-config.ts +3 -1
- package/src/tools/utils.ts +140 -16
- package/src/types.ts +144 -0
- package/src/utils/constants.ts +7 -1
- package/src/utils/credentials.test.ts +16 -16
- package/src/utils/multi-runtime.ts +2 -2
- package/src/utils/steering-enabled.ts +4 -4
- package/src/workflows/executors/agent-task.ts +18 -3
- package/templates/ai-toolbox.manifest.json +7 -1
- package/templates/extensions/README.md +17 -0
- package/templates/extensions/notify-on-complete/README.md +11 -0
- package/templates/extensions/notify-on-complete/hooks.ts +61 -0
- package/templates/extensions/notify-on-complete/manifest.json +7 -0
- package/templates/extensions/require-ticket-ref/README.md +11 -0
- package/templates/extensions/require-ticket-ref/hooks.ts +30 -0
- package/templates/extensions/require-ticket-ref/manifest.json +7 -0
- package/templates/extensions/require-verification-note/README.md +11 -0
- package/templates/extensions/require-verification-note/hooks.ts +32 -0
- package/templates/extensions/require-verification-note/manifest.json +7 -0
- package/templates/schedules/daily-hn-briefing/config.json +1 -1
- package/templates/schedules/gtm-weekly-review/config.json +1 -1
- package/templates/schedules/weekly-code-health-reports/config.json +1 -1
- package/templates/schedules/weekly-dependabot-triage/config.json +1 -1
- package/templates/schedules/weekly-dora-metrics/config.json +1 -1
- package/templates/schedules/weekly-harness-upgrade-check/config.json +1 -1
- package/templates/skills/delegate-work/files/scripts/codex-exec.sh +1 -1
- package/templates/skills/scheduling/content.md +2 -0
- package/templates/skills/serply-search/SKILL.md +95 -0
- package/templates/skills/serply-search/config.json +13 -0
- package/templates/skills/serply-search/content.md +90 -0
- package/templates/skills/swarm-extensions/config.json +14 -0
- package/templates/skills/swarm-extensions/content.md +120 -0
- package/templates/skills/swarm-scripts/SKILL.md +2 -2
- package/templates/skills/swarm-scripts/content.md +2 -2
- package/templates/workflows/claude-code-changelog-watch/config.json +1 -1
- package/templates/workflows/gsc-topic-miner/config.json +1 -1
- package/templates/workflows/linear-drain-loop/config.json +1 -1
- package/templates/workflows/llm-safe-release-context/config.json +1 -1
- package/templates/workflows/ralph-loop/config.json +1 -1
- package/dist/cli-7fehefdf.js +0 -562
- package/dist/cli-ayvy5kde.js +0 -164
- package/dist/cli-ddfw1mc4.js +0 -4322
- package/dist/cli-hzqmgcm2.js +0 -3066
- package/dist/cli-j4d4f6hv.js +0 -338
- package/dist/cli-qgm2pfpq.js +0 -6377
- package/dist/cli-sdzq01t9.js +0 -823
- package/dist/cli-xvkmedgn.js +0 -332
- package/dist/cli-y3pq4v9g.js +0 -664
- package/dist/{anthropic-messages-vs2rabzp.js → anthropic-messages-2y8nktar.js} +19 -19
- package/dist/{claude-managed-setup-f5pmsyrp.js → claude-managed-setup-48dwg9bv.js} +3 -3
- package/dist/{cli-81r683bv.js → cli-ch38q5z4.js} +0 -0
- package/dist/{cli-6664w7y4.js → cli-kj76p1ez.js} +8 -8
- package/dist/{cli-c71mg51n.js → cli-r2fpe7cx.js} +5 -5
- package/dist/{cli-4xz3pmrq.js → cli-y6x0gqtg.js} +16 -16
- package/dist/{index-aa3sa6s8.js → index-2wsdsnmm.js} +1 -1
- package/dist/{mistral-conversations-4ryk7h83.js → mistral-conversations-qhr84ph3.js} +9 -9
- package/dist/{openai-completions-0bqmsajw.js → openai-completions-32rdwmze.js} +19 -19
- package/dist/{openrouter-images-qx18fyp8.js → openrouter-images-9f9ek4rw.js} +3 -3
- package/dist/{pi-messages-79jvzz1d.js → pi-messages-b1mbr6gp.js} +4 -4
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// src/prompts/memories.ts
|
|
2
|
+
var SIMILARITY_THRESHOLD = 0.4;
|
|
3
|
+
var RATE_TOOL_HINT = `
|
|
4
|
+
|
|
5
|
+
When a memory above genuinely helps you solve this task — or actively
|
|
6
|
+
misleads you — call \`memory_rate\` with the memory id and useful=true/false.
|
|
7
|
+
This trains the swarm to surface better memories next time. Use sparingly:
|
|
8
|
+
2-5 ratings per task is plenty.`;
|
|
9
|
+
function renderMemoriesPrompt(memories) {
|
|
10
|
+
const useful = memories.filter((m) => m.similarity > SIMILARITY_THRESHOLD);
|
|
11
|
+
if (useful.length === 0)
|
|
12
|
+
return null;
|
|
13
|
+
const memoryContext = useful.map((m) => `- **${m.name}** (id: ${m.id}): ${m.content.substring(0, 300)}`).join(`
|
|
14
|
+
`);
|
|
15
|
+
let prompt = `
|
|
16
|
+
|
|
17
|
+
### Relevant Past Knowledge
|
|
18
|
+
|
|
19
|
+
These memories from your previous sessions may be useful. Use \`memory-get\` with the memory ID to retrieve full details.
|
|
20
|
+
|
|
21
|
+
${memoryContext}
|
|
22
|
+
`;
|
|
23
|
+
if (isExplicitSelfRaterEnabled()) {
|
|
24
|
+
prompt += RATE_TOOL_HINT;
|
|
25
|
+
}
|
|
26
|
+
return prompt;
|
|
27
|
+
}
|
|
28
|
+
function isExplicitSelfRaterEnabled() {
|
|
29
|
+
const ratersEnabled = (process.env.MEMORY_RATERS ?? "").split(",").map((s) => s.trim()).filter(Boolean);
|
|
30
|
+
return ratersEnabled.includes("explicit-self");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// src/utils/skill-fs-writer.ts
|
|
34
|
+
import { existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
35
|
+
import { dirname, join } from "node:path";
|
|
36
|
+
var SWARM_MARKER_FILE = ".swarm-managed";
|
|
37
|
+
function reconcileManagedSkillFiles(skillDir, currentRelativeFiles) {
|
|
38
|
+
if (!existsSync(join(skillDir, SWARM_MARKER_FILE)))
|
|
39
|
+
return 0;
|
|
40
|
+
let removed = 0;
|
|
41
|
+
const walk = (dir, relativeDir = "") => {
|
|
42
|
+
let entries;
|
|
43
|
+
try {
|
|
44
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
45
|
+
} catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
let hasEntries = false;
|
|
49
|
+
for (const entry of entries) {
|
|
50
|
+
const relativePath = relativeDir ? `${relativeDir}/${entry.name}` : entry.name;
|
|
51
|
+
const fullPath = join(dir, entry.name);
|
|
52
|
+
if (entry.isDirectory()) {
|
|
53
|
+
const childHasEntries = walk(fullPath, relativePath);
|
|
54
|
+
if (!childHasEntries) {
|
|
55
|
+
try {
|
|
56
|
+
rmSync(fullPath, { recursive: true, force: true });
|
|
57
|
+
} catch {
|
|
58
|
+
hasEntries = true;
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
hasEntries = true;
|
|
62
|
+
}
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (relativePath === "SKILL.md" || relativePath === SWARM_MARKER_FILE || currentRelativeFiles.has(relativePath)) {
|
|
66
|
+
hasEntries = true;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
rmSync(fullPath, { force: true });
|
|
71
|
+
removed++;
|
|
72
|
+
} catch {
|
|
73
|
+
hasEntries = true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return hasEntries;
|
|
77
|
+
};
|
|
78
|
+
walk(skillDir);
|
|
79
|
+
return removed;
|
|
80
|
+
}
|
|
81
|
+
function writeSkillsToFilesystem(entries, harnessType = "all", home) {
|
|
82
|
+
const errors = [];
|
|
83
|
+
let synced = 0;
|
|
84
|
+
let removed = 0;
|
|
85
|
+
const skillDirs = [];
|
|
86
|
+
if (harnessType === "claude" || harnessType === "all") {
|
|
87
|
+
skillDirs.push(join(home, ".claude", "skills"));
|
|
88
|
+
}
|
|
89
|
+
if (harnessType === "pi" || harnessType === "all") {
|
|
90
|
+
skillDirs.push(join(home, ".pi", "agent", "skills"));
|
|
91
|
+
}
|
|
92
|
+
if (harnessType === "codex" || harnessType === "all") {
|
|
93
|
+
skillDirs.push(join(home, ".codex", "skills"));
|
|
94
|
+
}
|
|
95
|
+
if (harnessType === "opencode" || harnessType === "all") {
|
|
96
|
+
skillDirs.push(join(home, ".opencode", "skills"));
|
|
97
|
+
}
|
|
98
|
+
if (harnessType === "agents" || harnessType === "all") {
|
|
99
|
+
skillDirs.push(join(home, ".agents", "skills"));
|
|
100
|
+
}
|
|
101
|
+
for (const dir of skillDirs) {
|
|
102
|
+
mkdirSync(dir, { recursive: true });
|
|
103
|
+
}
|
|
104
|
+
const writtenNames = new Set;
|
|
105
|
+
for (const skill of entries) {
|
|
106
|
+
if (!skill.isActive || !skill.isEnabled)
|
|
107
|
+
continue;
|
|
108
|
+
if (skill.isComplex && skill.files.length === 0)
|
|
109
|
+
continue;
|
|
110
|
+
if (!skill.content)
|
|
111
|
+
continue;
|
|
112
|
+
const safeName = skill.name.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
113
|
+
if (!safeName)
|
|
114
|
+
continue;
|
|
115
|
+
writtenNames.add(safeName);
|
|
116
|
+
const currentBundledFilePaths = new Set(skill.files.filter((file) => !file.isBinary).map((file) => file.path));
|
|
117
|
+
for (const baseDir of skillDirs) {
|
|
118
|
+
const skillDir = join(baseDir, safeName);
|
|
119
|
+
const skillFile = join(skillDir, "SKILL.md");
|
|
120
|
+
const markerFile = join(skillDir, SWARM_MARKER_FILE);
|
|
121
|
+
try {
|
|
122
|
+
mkdirSync(skillDir, { recursive: true });
|
|
123
|
+
removed += reconcileManagedSkillFiles(skillDir, currentBundledFilePaths);
|
|
124
|
+
writeFileSync(skillFile, skill.content, "utf-8");
|
|
125
|
+
writeFileSync(markerFile, "", "utf-8");
|
|
126
|
+
synced++;
|
|
127
|
+
} catch (err) {
|
|
128
|
+
const msg = err instanceof Error ? err.message : "Unknown error";
|
|
129
|
+
errors.push(`${skill.name} -> ${skillDir}: ${msg}`);
|
|
130
|
+
console.error(`[skill-fs-writer] Failed to write SKILL.md for ${skill.name} to ${skillDir}: ${msg}`);
|
|
131
|
+
}
|
|
132
|
+
for (const file of skill.files) {
|
|
133
|
+
if (file.isBinary) {
|
|
134
|
+
console.log(`[skill-fs-writer] Skipping binary skill file ${skill.name}/${file.path}`);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const targetPath = join(skillDir, file.path);
|
|
138
|
+
try {
|
|
139
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
140
|
+
writeFileSync(targetPath, file.content, "utf-8");
|
|
141
|
+
} catch (err) {
|
|
142
|
+
const msg = err instanceof Error ? err.message : "Unknown error";
|
|
143
|
+
errors.push(`${skill.name}/${file.path} -> ${targetPath}: ${msg}`);
|
|
144
|
+
console.error(`[skill-fs-writer] Failed to write bundled file ${skill.name}/${file.path} to ${targetPath}: ${msg}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
for (const baseDir of skillDirs) {
|
|
150
|
+
if (!existsSync(baseDir))
|
|
151
|
+
continue;
|
|
152
|
+
try {
|
|
153
|
+
const existing = readdirSync(baseDir, { withFileTypes: true });
|
|
154
|
+
for (const entry of existing) {
|
|
155
|
+
if (!entry.isDirectory())
|
|
156
|
+
continue;
|
|
157
|
+
if (writtenNames.has(entry.name))
|
|
158
|
+
continue;
|
|
159
|
+
const skillDir = join(baseDir, entry.name);
|
|
160
|
+
if (!existsSync(join(skillDir, SWARM_MARKER_FILE)))
|
|
161
|
+
continue;
|
|
162
|
+
try {
|
|
163
|
+
rmSync(skillDir, { recursive: true, force: true });
|
|
164
|
+
removed++;
|
|
165
|
+
} catch {}
|
|
166
|
+
}
|
|
167
|
+
} catch {}
|
|
168
|
+
}
|
|
169
|
+
return { synced, removed, errors };
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export { SIMILARITY_THRESHOLD, renderMemoriesPrompt, writeSkillsToFilesystem };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
contentSha256,
|
|
3
3
|
init_profile_sync
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-fm4ytsdk.js";
|
|
5
5
|
import {
|
|
6
6
|
OpenAI,
|
|
7
7
|
init_openai
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
getDbClient,
|
|
12
12
|
init_db,
|
|
13
13
|
isSqliteVecAvailable
|
|
14
|
-
} from "./cli-
|
|
14
|
+
} from "./cli-s14agm5s.js";
|
|
15
15
|
import {
|
|
16
16
|
__esm,
|
|
17
17
|
__export,
|
|
@@ -93,6 +93,9 @@ class OpenAIEmbeddingProvider {
|
|
|
93
93
|
this.dimensions = config?.dimensions ?? EMBEDDING_DIMENSIONS;
|
|
94
94
|
this.name = config?.model ? `openai/${config.model}` : process.env.EMBEDDING_MODEL ?? DEFAULT_EMBEDDING_MODEL;
|
|
95
95
|
}
|
|
96
|
+
isConfigured() {
|
|
97
|
+
return !!this.apiKey;
|
|
98
|
+
}
|
|
96
99
|
getClient() {
|
|
97
100
|
if (!this.apiKey)
|
|
98
101
|
return null;
|
|
@@ -1082,6 +1085,9 @@ function getEmbeddingProvider() {
|
|
|
1082
1085
|
}
|
|
1083
1086
|
return embeddingProvider;
|
|
1084
1087
|
}
|
|
1088
|
+
function resetEmbeddingProvider() {
|
|
1089
|
+
embeddingProvider = null;
|
|
1090
|
+
}
|
|
1085
1091
|
function getMemoryStore() {
|
|
1086
1092
|
if (!memoryStore) {
|
|
1087
1093
|
const { SqliteMemoryStore: SqliteMemoryStore2 } = (init_sqlite_store(), __toCommonJS(exports_sqlite_store));
|
|
@@ -1090,4 +1096,4 @@ function getMemoryStore() {
|
|
|
1090
1096
|
return memoryStore;
|
|
1091
1097
|
}
|
|
1092
1098
|
|
|
1093
|
-
export {
|
|
1099
|
+
export { CANDIDATE_SET_MULTIPLIER, isGraphExpansionEnabled, EMBEDDING_DIMENSIONS, init_constants, cosineSimilarity, serializeEmbedding, deserializeEmbedding, init_embedding, computeScore, rerank, init_reranker, rowToCandidate, init_sqlite_store, getEmbeddingProvider, resetEmbeddingProvider, getMemoryStore };
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
getEmbeddingProvider,
|
|
5
5
|
init_embedding,
|
|
6
6
|
serializeEmbedding
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-ppm4975n.js";
|
|
8
8
|
import {
|
|
9
9
|
getDbClient,
|
|
10
10
|
init_db
|
|
11
|
-
} from "./cli-
|
|
11
|
+
} from "./cli-s14agm5s.js";
|
|
12
12
|
import {
|
|
13
13
|
init_secret_scrubber,
|
|
14
14
|
scrubSecrets
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
require_follow_redirects
|
|
3
3
|
} from "./cli-q51yprfq.js";
|
|
4
|
-
import {
|
|
5
|
-
init_task_attachment_links,
|
|
6
|
-
taskAttachmentDisplayUrl
|
|
7
|
-
} from "./cli-9d8ntetj.js";
|
|
8
4
|
import {
|
|
9
5
|
require_jws,
|
|
10
6
|
require_p_retry
|
|
11
7
|
} from "./cli-yatxqynm.js";
|
|
8
|
+
import {
|
|
9
|
+
init_task_attachment_links,
|
|
10
|
+
taskAttachmentDisplayUrl
|
|
11
|
+
} from "./cli-2658f6at.js";
|
|
12
12
|
import {
|
|
13
13
|
SLACK_REACTION_CONFIG_KEYS,
|
|
14
14
|
SLACK_REACTION_DEFAULTS,
|
|
@@ -49,11 +49,11 @@ import {
|
|
|
49
49
|
setSlackMessageTracking,
|
|
50
50
|
slackContextKey,
|
|
51
51
|
updateSlackMessageRecord
|
|
52
|
-
} from "./cli-
|
|
52
|
+
} from "./cli-s14agm5s.js";
|
|
53
53
|
import {
|
|
54
54
|
getAppUrl,
|
|
55
55
|
init_constants
|
|
56
|
-
} from "./cli-
|
|
56
|
+
} from "./cli-dv6cdjs2.js";
|
|
57
57
|
import {
|
|
58
58
|
init_env_flag,
|
|
59
59
|
isEnvFlagEnabled
|
|
@@ -54475,7 +54475,7 @@ async function initOtel(serviceRole = process.env.AGENT_ROLE || "api") {
|
|
|
54475
54475
|
return;
|
|
54476
54476
|
initialized = true;
|
|
54477
54477
|
try {
|
|
54478
|
-
const impl = await import("./otel-impl-
|
|
54478
|
+
const impl = await import("./otel-impl-943c96er.js");
|
|
54479
54479
|
await impl.boot(serviceRole);
|
|
54480
54480
|
realWithSpan = impl.withSpan;
|
|
54481
54481
|
realStartSpan = impl.startSpan;
|
|
@@ -54845,9 +54845,9 @@ function collectAttachmentNodes(roots) {
|
|
|
54845
54845
|
function buildTreeBlocks(roots) {
|
|
54846
54846
|
console.log(`[Slack] Building tree blocks for ${roots.length} root(s): ${roots.map((r) => r.taskId.slice(0, 8)).join(", ")}`);
|
|
54847
54847
|
const treeTexts = roots.map(renderTree);
|
|
54848
|
-
const blocks = [sectionBlock(treeTexts.join(`
|
|
54848
|
+
const blocks = treeTexts.length > 0 ? [sectionBlock(treeTexts.join(`
|
|
54849
54849
|
|
|
54850
|
-
`))];
|
|
54850
|
+
`))] : [];
|
|
54851
54851
|
const attachmentNodes = collectAttachmentNodes(roots);
|
|
54852
54852
|
const visibleAttachmentNodes = attachmentNodes.slice(0, SLACK_TREE_ATTACHMENT_BLOCKS_MAX);
|
|
54853
54853
|
for (const node of visibleAttachmentNodes) {
|
|
@@ -55793,13 +55793,15 @@ async function initSlackApp() {
|
|
|
55793
55793
|
logLevel: import_bolt.LogLevel.DEBUG,
|
|
55794
55794
|
...slackApiUrl ? { clientOptions: { slackApiUrl } } : {}
|
|
55795
55795
|
});
|
|
55796
|
-
const { registerMessageHandler } = await import("./handlers-
|
|
55797
|
-
const { registerCommandHandler } = await import("./commands-
|
|
55798
|
-
const { registerActionHandlers } = await import("./actions-
|
|
55796
|
+
const { registerMessageHandler } = await import("./handlers-tw90pkh5.js");
|
|
55797
|
+
const { registerCommandHandler } = await import("./commands-9v4psyq1.js");
|
|
55798
|
+
const { registerActionHandlers } = await import("./actions-2bgpyhww.js");
|
|
55799
|
+
const { registerWorkObjectHandlers } = await import("./work-objects-wangt792.js");
|
|
55799
55800
|
registerMessageHandler(app);
|
|
55800
55801
|
registerCommandHandler(app);
|
|
55801
55802
|
registerActionHandlers(app);
|
|
55802
|
-
|
|
55803
|
+
registerWorkObjectHandlers(app);
|
|
55804
|
+
const { createAssistant } = await import("./assistant-bavke5p7.js");
|
|
55803
55805
|
app.assistant(createAssistant());
|
|
55804
55806
|
return app;
|
|
55805
55807
|
}
|
|
@@ -55808,7 +55810,7 @@ async function startSlackApp() {
|
|
|
55808
55810
|
await initSlackApp();
|
|
55809
55811
|
}
|
|
55810
55812
|
if (app) {
|
|
55811
|
-
const { isSlackRenderV2Enabled: isSlackRenderV2Enabled2 } = await import("./render-v2-
|
|
55813
|
+
const { isSlackRenderV2Enabled: isSlackRenderV2Enabled2 } = await import("./render-v2-8zjntgf5.js");
|
|
55812
55814
|
if (isSlackRenderV2Enabled2())
|
|
55813
55815
|
await ensureSlackRenderV2Activation();
|
|
55814
55816
|
await app.start();
|
|
@@ -55982,7 +55984,7 @@ var lastTreeText = new Map;
|
|
|
55982
55984
|
var lastTreeUpdateAt = new Map;
|
|
55983
55985
|
var cachedTeamId;
|
|
55984
55986
|
function isSlackRenderV2Enabled() {
|
|
55985
|
-
return isEnvFlagEnabled("SLACK_RENDER_V2",
|
|
55987
|
+
return isEnvFlagEnabled("SLACK_RENDER_V2", true);
|
|
55986
55988
|
}
|
|
55987
55989
|
function isSlackDelegationEnabled() {
|
|
55988
55990
|
return isEnvFlagEnabled("SLACK_RENDER_V2_DELEGATION", false);
|
|
@@ -56011,6 +56013,61 @@ async function callSlackWithRetry(client, method, payload) {
|
|
|
56011
56013
|
}
|
|
56012
56014
|
}
|
|
56013
56015
|
}
|
|
56016
|
+
var OUTCOME_DELIVERY_MAX_ATTEMPTS = 5;
|
|
56017
|
+
var OUTCOME_DELIVERY_BASE_DELAY_MS = 30000;
|
|
56018
|
+
var OUTCOME_DELIVERY_MAX_DELAY_MS = 30 * 60000;
|
|
56019
|
+
var outcomeDeliveryFailures = new Map;
|
|
56020
|
+
function outcomeDeliveryGate(taskId) {
|
|
56021
|
+
const state = outcomeDeliveryFailures.get(taskId);
|
|
56022
|
+
if (!state)
|
|
56023
|
+
return true;
|
|
56024
|
+
if (state.count >= OUTCOME_DELIVERY_MAX_ATTEMPTS)
|
|
56025
|
+
return false;
|
|
56026
|
+
return Date.now() >= state.nextAttemptAt;
|
|
56027
|
+
}
|
|
56028
|
+
function noteOutcomeDeliverySuccess(taskId) {
|
|
56029
|
+
outcomeDeliveryFailures.delete(taskId);
|
|
56030
|
+
}
|
|
56031
|
+
async function noteOutcomeDeliveryFailure(task, error) {
|
|
56032
|
+
const state = outcomeDeliveryFailures.get(task.id) ?? { count: 0, nextAttemptAt: 0 };
|
|
56033
|
+
state.count += 1;
|
|
56034
|
+
const delay = Math.min(OUTCOME_DELIVERY_BASE_DELAY_MS * 2 ** (state.count - 1), OUTCOME_DELIVERY_MAX_DELAY_MS);
|
|
56035
|
+
state.nextAttemptAt = Date.now() + delay;
|
|
56036
|
+
outcomeDeliveryFailures.set(task.id, state);
|
|
56037
|
+
console.error(`[Slack] Outcome delivery failed for task ${task.id} (attempt ${state.count}/${OUTCOME_DELIVERY_MAX_ATTEMPTS}):`, error);
|
|
56038
|
+
if (state.count >= OUTCOME_DELIVERY_MAX_ATTEMPTS) {
|
|
56039
|
+
console.error(`[Slack] Giving up on outcome delivery for task ${task.id} after ${state.count} attempts; surfacing failure and clearing the working indicator`);
|
|
56040
|
+
await surfaceOutcomeDeliveryGiveUp(task, error);
|
|
56041
|
+
}
|
|
56042
|
+
}
|
|
56043
|
+
async function surfaceOutcomeDeliveryGiveUp(task, error) {
|
|
56044
|
+
const app2 = getSlackApp();
|
|
56045
|
+
if (!app2 || !task.slackChannelId || !task.slackThreadTs)
|
|
56046
|
+
return;
|
|
56047
|
+
try {
|
|
56048
|
+
await app2.client.apiCall("chat.postMessage", {
|
|
56049
|
+
channel: task.slackChannelId,
|
|
56050
|
+
thread_ts: task.slackThreadTs,
|
|
56051
|
+
text: `⚠️ Couldn't deliver this task's reply after ${OUTCOME_DELIVERY_MAX_ATTEMPTS} attempts (${error instanceof Error ? error.message : String(error)}). See task ${getTaskLink(task.id)} for the result.`
|
|
56052
|
+
});
|
|
56053
|
+
} catch (postError) {
|
|
56054
|
+
console.error(`[Slack] Give-up notice failed to post for task ${task.id}:`, postError);
|
|
56055
|
+
}
|
|
56056
|
+
await clearAssistantStatus(app2.client, task.slackChannelId, task.slackThreadTs);
|
|
56057
|
+
}
|
|
56058
|
+
async function clearAssistantStatus(client, channelId, threadTs) {
|
|
56059
|
+
if (!channelId.startsWith("D"))
|
|
56060
|
+
return;
|
|
56061
|
+
try {
|
|
56062
|
+
await client.apiCall("assistant.threads.setStatus", {
|
|
56063
|
+
channel_id: channelId,
|
|
56064
|
+
thread_ts: threadTs,
|
|
56065
|
+
status: ""
|
|
56066
|
+
});
|
|
56067
|
+
} catch (error) {
|
|
56068
|
+
console.warn(`[Slack] Failed to clear assistant status for ${channelId}/${threadTs}:`, error);
|
|
56069
|
+
}
|
|
56070
|
+
}
|
|
56014
56071
|
function slackTreeStallMinutes() {
|
|
56015
56072
|
return Number(process.env.SLACK_TREE_STALL_MIN) || 15;
|
|
56016
56073
|
}
|
|
@@ -56449,7 +56506,8 @@ ${outcomeText(task.failureReason, "Task failed.")}`;
|
|
|
56449
56506
|
|
|
56450
56507
|
${outcomeText(task.failureReason, "Task was cancelled.")}`;
|
|
56451
56508
|
}
|
|
56452
|
-
|
|
56509
|
+
const isDeferred = task.tags?.includes("deferred");
|
|
56510
|
+
if (slackReplySent && task.status === "completed" && !isDeferred) {
|
|
56453
56511
|
const agentName = task.agentId ? (await getAgentById(task.agentId))?.name ?? "Agent" : "Agent";
|
|
56454
56512
|
return `✅ ${agentName} completed`;
|
|
56455
56513
|
}
|
|
@@ -56467,18 +56525,21 @@ async function childOutcomeContent(task, slackReplySent) {
|
|
|
56467
56525
|
|
|
56468
56526
|
${outcomeText(task.failureReason, "Task failed.")}`;
|
|
56469
56527
|
}
|
|
56470
|
-
if (slackReplySent) {
|
|
56528
|
+
if (slackReplySent && !task.tags?.includes("deferred")) {
|
|
56471
56529
|
return `↳ ✅ ${agentName} completed`;
|
|
56472
56530
|
}
|
|
56473
56531
|
return `↳ ✅ ${agentName} — result
|
|
56474
56532
|
|
|
56475
56533
|
${outcomeText(task.output, "Task completed.")}`;
|
|
56476
56534
|
}
|
|
56535
|
+
function isSlackContinuation(task) {
|
|
56536
|
+
return task.source === "schedule" && task.taskType === "deferred" && !!task.slackChannelId && !!task.slackThreadTs;
|
|
56537
|
+
}
|
|
56477
56538
|
function isChildCardCandidate(task, delegationActivatedAt) {
|
|
56478
|
-
return task.source !== "slack" && !!task.slackChannelId && !!task.slackThreadTs && (task.status === "completed" || task.status === "failed") && task.taskType !== "follow-up" && task.taskType !== "reroute-decision" && task.createdAt >= delegationActivatedAt;
|
|
56539
|
+
return task.source !== "slack" && !isSlackContinuation(task) && !!task.slackChannelId && !!task.slackThreadTs && (task.status === "completed" || task.status === "failed") && task.taskType !== "follow-up" && task.taskType !== "reroute-decision" && task.createdAt >= delegationActivatedAt;
|
|
56479
56540
|
}
|
|
56480
|
-
function
|
|
56481
|
-
return task.source === "slack" && isAskOutcomeStatus(task.status) && task.createdAt >= activatedAt;
|
|
56541
|
+
function taskNeedsDirectOutcome(task, activatedAt) {
|
|
56542
|
+
return (task.source === "slack" && isAskOutcomeStatus(task.status) || isSlackContinuation(task) && isOutcomeStatus(task.status)) && task.createdAt >= activatedAt;
|
|
56482
56543
|
}
|
|
56483
56544
|
async function conclusionResultsLines(closure) {
|
|
56484
56545
|
const lines = [];
|
|
@@ -56564,7 +56625,11 @@ function attachmentLine(attachments) {
|
|
|
56564
56625
|
if (!attachment)
|
|
56565
56626
|
return;
|
|
56566
56627
|
const url = taskAttachmentDisplayUrl(attachment);
|
|
56567
|
-
|
|
56628
|
+
if (!/^https?:\/\//.test(url))
|
|
56629
|
+
return;
|
|
56630
|
+
const label = attachment.name.replace(/\s+/g, " ").trim().replace(/[\\[\]()]/g, "\\$&");
|
|
56631
|
+
const destination = url.replace(/[\s\\<>]/g, encodeURIComponent).replace(/\(/g, "%28").replace(/\)/g, "%29");
|
|
56632
|
+
return `\uD83D\uDCCE [${label}](${destination})`;
|
|
56568
56633
|
}
|
|
56569
56634
|
function fenceAt(line) {
|
|
56570
56635
|
const match = line.match(/^[ \t]{0,3}(`{3,}|~{3,})/);
|
|
@@ -56700,10 +56765,26 @@ async function streamOutcomeCard(task, tree, options) {
|
|
|
56700
56765
|
reservationWasCreated = reserved.created;
|
|
56701
56766
|
}
|
|
56702
56767
|
let streamedFreshContent = false;
|
|
56768
|
+
let deliveredViaFallback = false;
|
|
56703
56769
|
if (isPendingSlackMessage(outcome)) {
|
|
56704
56770
|
const reconciled = reservationWasCreated ? undefined : await findReservedSlackMessage(app2.client, outcome, presentation);
|
|
56705
56771
|
streamedFreshContent = !reconciled;
|
|
56706
|
-
|
|
56772
|
+
let started = reconciled;
|
|
56773
|
+
if (!started) {
|
|
56774
|
+
try {
|
|
56775
|
+
started = await callSlackWithRetry(app2.client, "chat.startStream", startPayload);
|
|
56776
|
+
} catch (error) {
|
|
56777
|
+
console.error(`[Slack] chat.startStream failed for task ${task.id}; falling back to chat.postMessage:`, error);
|
|
56778
|
+
started = await callSlackWithRetry(app2.client, "chat.postMessage", {
|
|
56779
|
+
channel: task.slackChannelId,
|
|
56780
|
+
thread_ts: task.slackThreadTs,
|
|
56781
|
+
text: presentation,
|
|
56782
|
+
...startPayload.username ? { username: startPayload.username } : {},
|
|
56783
|
+
...startPayload.icon_emoji ? { icon_emoji: startPayload.icon_emoji } : {}
|
|
56784
|
+
});
|
|
56785
|
+
deliveredViaFallback = true;
|
|
56786
|
+
}
|
|
56787
|
+
}
|
|
56707
56788
|
if (typeof started.ts !== "string" || !started.ts) {
|
|
56708
56789
|
throw new Error("Slack did not return a timestamp for the outcome stream");
|
|
56709
56790
|
}
|
|
@@ -56714,23 +56795,26 @@ async function streamOutcomeCard(task, tree, options) {
|
|
|
56714
56795
|
throw new Error("Failed to persist the outcome stream timestamp");
|
|
56715
56796
|
outcome = persisted;
|
|
56716
56797
|
}
|
|
56717
|
-
if (!
|
|
56718
|
-
|
|
56719
|
-
|
|
56720
|
-
|
|
56721
|
-
|
|
56722
|
-
|
|
56723
|
-
|
|
56724
|
-
|
|
56725
|
-
|
|
56726
|
-
|
|
56727
|
-
|
|
56728
|
-
|
|
56729
|
-
|
|
56730
|
-
|
|
56731
|
-
|
|
56732
|
-
|
|
56798
|
+
if (!deliveredViaFallback) {
|
|
56799
|
+
if (!streamedFreshContent) {
|
|
56800
|
+
await callSlackWithRetry(app2.client, "chat.update", {
|
|
56801
|
+
channel: task.slackChannelId,
|
|
56802
|
+
ts: outcome.ts,
|
|
56803
|
+
text: presentation
|
|
56804
|
+
});
|
|
56805
|
+
}
|
|
56806
|
+
try {
|
|
56807
|
+
await callSlackWithRetry(app2.client, "chat.stopStream", {
|
|
56808
|
+
channel: task.slackChannelId,
|
|
56809
|
+
ts: outcome.ts,
|
|
56810
|
+
blocks: await outcomeFooter(task, tasks, duration)
|
|
56811
|
+
});
|
|
56812
|
+
} catch (error) {
|
|
56813
|
+
if (!isStreamAlreadyStopped(error))
|
|
56814
|
+
throw error;
|
|
56815
|
+
}
|
|
56733
56816
|
}
|
|
56817
|
+
await clearAssistantStatus(app2.client, task.slackChannelId, task.slackThreadTs);
|
|
56734
56818
|
const permalink = await resolvePermalink(app2.client, task.slackChannelId, outcome.ts);
|
|
56735
56819
|
return await updateSlackMessageRecord(outcome.id, {
|
|
56736
56820
|
permalink,
|
|
@@ -56793,9 +56877,9 @@ async function processSlackRenderV2() {
|
|
|
56793
56877
|
for (const task of tasks) {
|
|
56794
56878
|
if ((await getSlackOutcomeMessage(task.id))?.finalizedAt)
|
|
56795
56879
|
continue;
|
|
56796
|
-
const
|
|
56880
|
+
const isDirectCandidate = taskNeedsDirectOutcome(task, activatedAt) && isOutcomeStatus(task.status);
|
|
56797
56881
|
const isChildCandidate = delegationEnabled && delegationActivatedAt !== null && isChildCardCandidate(task, delegationActivatedAt) && !task.slackReplySent;
|
|
56798
|
-
if (
|
|
56882
|
+
if (isDirectCandidate || isChildCandidate) {
|
|
56799
56883
|
needsOutcome = true;
|
|
56800
56884
|
break;
|
|
56801
56885
|
}
|
|
@@ -56869,9 +56953,12 @@ async function processSlackRenderV2() {
|
|
|
56869
56953
|
continue;
|
|
56870
56954
|
if (askId && await childCardCountFor(askId) >= CHILD_CARDS_PER_ASK)
|
|
56871
56955
|
continue;
|
|
56956
|
+
if (!outcomeDeliveryGate(task.id))
|
|
56957
|
+
continue;
|
|
56872
56958
|
try {
|
|
56873
56959
|
const outcome = await streamOutcomeCard(task, tree, { buildContent: childOutcomeContent });
|
|
56874
56960
|
if (outcome) {
|
|
56961
|
+
noteOutcomeDeliverySuccess(task.id);
|
|
56875
56962
|
childCardsThisTick++;
|
|
56876
56963
|
if (askId)
|
|
56877
56964
|
childCardCounts.set(askId, (childCardCounts.get(askId) ?? 0) + 1);
|
|
@@ -56879,27 +56966,29 @@ async function processSlackRenderV2() {
|
|
|
56879
56966
|
}
|
|
56880
56967
|
outcomeCreated ||= !!outcome;
|
|
56881
56968
|
} catch (error) {
|
|
56882
|
-
|
|
56969
|
+
await noteOutcomeDeliveryFailure(task, error);
|
|
56883
56970
|
}
|
|
56884
56971
|
}
|
|
56885
56972
|
for (const task of tasks) {
|
|
56886
56973
|
if (!isSlackRenderV2Enabled())
|
|
56887
56974
|
return;
|
|
56888
|
-
if (task
|
|
56975
|
+
if (!taskNeedsDirectOutcome(task, activatedAt))
|
|
56889
56976
|
continue;
|
|
56890
56977
|
if ((await getSlackOutcomeMessage(task.id))?.finalizedAt)
|
|
56891
56978
|
continue;
|
|
56892
|
-
|
|
56893
|
-
continue;
|
|
56894
|
-
const deferByClosure = delegationEnabled && delegationActivatedAt !== null && task.createdAt >= delegationActivatedAt;
|
|
56979
|
+
const deferByClosure = task.source === "slack" && delegationEnabled && delegationActivatedAt !== null && task.createdAt >= delegationActivatedAt;
|
|
56895
56980
|
if (!deferByClosure) {
|
|
56981
|
+
if (!outcomeDeliveryGate(task.id))
|
|
56982
|
+
continue;
|
|
56896
56983
|
try {
|
|
56897
56984
|
const outcome = await streamOutcomeCard(task, tree);
|
|
56898
|
-
if (outcome)
|
|
56985
|
+
if (outcome) {
|
|
56986
|
+
noteOutcomeDeliverySuccess(task.id);
|
|
56899
56987
|
await finalizeTerminalSlackReactions([task]);
|
|
56988
|
+
}
|
|
56900
56989
|
outcomeCreated ||= !!outcome;
|
|
56901
56990
|
} catch (error) {
|
|
56902
|
-
|
|
56991
|
+
await noteOutcomeDeliveryFailure(task, error);
|
|
56903
56992
|
}
|
|
56904
56993
|
continue;
|
|
56905
56994
|
}
|
|
@@ -56921,12 +57010,15 @@ async function processSlackRenderV2() {
|
|
|
56921
57010
|
const state = closureState(task, closure, new Date, settleSec, timeoutMin);
|
|
56922
57011
|
if (state === "open")
|
|
56923
57012
|
continue;
|
|
57013
|
+
if (!outcomeDeliveryGate(task.id))
|
|
57014
|
+
continue;
|
|
56924
57015
|
try {
|
|
56925
57016
|
const outcome = await streamOutcomeCard(task, tree, {
|
|
56926
57017
|
buildContent: (_t, slackReplySent) => askConclusionContent(task, closure, state, slackReplySent),
|
|
56927
57018
|
conclusionKind: state === "timedOut" ? "timeout" : "complete"
|
|
56928
57019
|
});
|
|
56929
57020
|
if (outcome) {
|
|
57021
|
+
noteOutcomeDeliverySuccess(task.id);
|
|
56930
57022
|
const app3 = getSlackApp();
|
|
56931
57023
|
if (app3 && task.slackChannelId && task.slackTriggerMessageTs) {
|
|
56932
57024
|
const reaction = conclusionReactionChoice(state, task, closure);
|
|
@@ -56937,7 +57029,7 @@ async function processSlackRenderV2() {
|
|
|
56937
57029
|
}
|
|
56938
57030
|
outcomeCreated ||= !!outcome;
|
|
56939
57031
|
} catch (error) {
|
|
56940
|
-
|
|
57032
|
+
await noteOutcomeDeliveryFailure(task, error);
|
|
56941
57033
|
}
|
|
56942
57034
|
}
|
|
56943
57035
|
try {
|
|
@@ -56956,6 +57048,7 @@ function _resetSlackRenderV2ForTests() {
|
|
|
56956
57048
|
lastTreeUpdateAt.clear();
|
|
56957
57049
|
treeUpdateTails.clear();
|
|
56958
57050
|
cachedTeamId = undefined;
|
|
57051
|
+
outcomeDeliveryFailures.clear();
|
|
56959
57052
|
}
|
|
56960
57053
|
|
|
56961
|
-
export { initialize, ensure,
|
|
57054
|
+
export { initialize, ensure, isPollTracingEnabled, initOtel, withSpan, startSpan, withSpanContext, withRemoteContext, injectTraceContext, recordSessionCost, recordDbRetentionSweep, recordDbRetentionStatement, require_dist7 as require_dist, ackSlackMessage, getTaskLink, getTaskUrl, markdownToSlack, buildCancelledBlocks, buildBufferFlushBlocks, buildTreeBlocks, getAgentDisplayName, getAgentEmoji, isSlackRenderV2Enabled, isSlackDelegationEnabled, callSlackWithRetry, formatV2Duration, renderThreadTree, ensureSlackThreadTree, childOutcomeContent, streamOutcomeCard, processSlackRenderV2, _resetSlackRenderV2ForTests, registerTreeMessage, getSlackApp, initSlackApp, startSlackApp, stopSlackApp };
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
// src/utils/multi-runtime.ts
|
|
7
7
|
init_env_flag();
|
|
8
8
|
function isMultiRuntimeEnabled(env = process.env) {
|
|
9
|
-
return parseEnvFlag(env.MULTI_RUNTIME_ENABLED,
|
|
9
|
+
return parseEnvFlag(env.MULTI_RUNTIME_ENABLED, true);
|
|
10
10
|
}
|
|
11
11
|
function swarmRuntimeInstanceId(env = process.env) {
|
|
12
12
|
return env.SWARM_RUNTIME_INSTANCE_ID || undefined;
|