@cursor/bdk 0.2.11 → 0.2.12
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/dist/bin/agent-serve.js +28 -26
- package/dist/channels/bitbucket/api.js +8 -8
- package/dist/channels/bitbucket/binding.js +4 -4
- package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +1 -1
- package/dist/channels/bitbucket/checks.js +1 -1
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/events.js +1 -1
- package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
- package/dist/channels/checks.js +2 -2
- package/dist/channels/deployments/deployments-channel.js +1 -1
- package/dist/channels/github/cursor-account.js +3 -3
- package/dist/channels/github/defaults.js +3 -3
- package/dist/channels/github/events.js +1 -1
- package/dist/channels/github/forward.js +8 -8
- package/dist/channels/github/github-channel.js +2 -2
- package/dist/channels/gitlab/binding.js +4 -4
- package/dist/channels/gitlab/checks.js +1 -1
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/events.js +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +1 -1
- package/dist/channels/gitlab/replay.js +2 -2
- package/dist/channels/origin/binding.js +3 -3
- package/dist/channels/origin/checks.js +1 -1
- package/dist/channels/origin/cursor-account.js +1 -1
- package/dist/channels/origin/events.js +1 -1
- package/dist/channels/origin/origin-channel.js +1 -1
- package/dist/channels/origin/origin-webhook.js +2 -2
- package/dist/channels/slack/agentic-delivery.js +3 -3
- package/dist/channels/slack/agentic-signals.js +1 -1
- package/dist/channels/slack/api.js +5 -5
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/attachments.js +3 -3
- package/dist/channels/slack/blocks.js +3 -3
- package/dist/channels/slack/bot-mentions.js +4 -4
- package/dist/channels/slack/channel-watch.js +4 -4
- package/dist/channels/slack/cli-project.js +3 -3
- package/dist/channels/slack/dispatch.js +1 -1
- package/dist/channels/slack/doctor.js +1 -1
- package/dist/channels/slack/eval-directive.js +1 -1
- package/dist/channels/slack/footer.js +1 -1
- package/dist/channels/slack/interactive.js +2 -2
- package/dist/channels/slack/log.d.ts.map +1 -1
- package/dist/channels/slack/log.js +1 -1
- package/dist/channels/slack/manifest.js +1 -1
- package/dist/channels/slack/nudge-carrier.js +1 -1
- package/dist/channels/slack/nudge-store.js +2 -2
- package/dist/channels/slack/recording-sink.js +6 -6
- package/dist/channels/slack/reply-options.js +6 -6
- package/dist/channels/slack/self-identity.d.ts +7 -4
- package/dist/channels/slack/self-identity.d.ts.map +1 -1
- package/dist/channels/slack/self-identity.js +17 -8
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +2 -6
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/slack-channel.js +2 -2
- package/dist/channels/slack/socket-mode.js +2 -2
- package/dist/channels/slack/thread-context.js +8 -8
- package/dist/channels/slack/tool-cards.js +1 -1
- package/dist/channels/slack/user-info.d.ts +2 -1
- package/dist/channels/slack/user-info.d.ts.map +1 -1
- package/dist/channels/slack/user-info.js +16 -1
- package/dist/channels.js +1 -1
- package/dist/docs/404.html +3 -3
- package/dist/docs/assets/{app.DXI7bwox.js → app.CKta5zX1.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.DtlCe4t6.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BrbO5mEe.js → VPLocalSearchBox.4vRM3EDG.js} +2 -2
- package/dist/docs/assets/chunks/{arc.BOG1yms8.js → arc.CofbA8tA.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.C0hsMZnZ.js → architectureDiagram-Q4EWVU46.Mt2UV5M-.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.H044KjKs.js → baseUniq.C_W0Aqp4.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BsRW6GoB.js → blockDiagram-DXYQGD6D.dAc4goE-.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.B9HV5PFR.js → c4Diagram-AHTNJAMY.dnbRC3Dm.js} +1 -1
- package/dist/docs/assets/chunks/channel.DpljPUVU.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CPoT_ajl.js → chunk-4BX2VUAB.B42ltSTd.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DZBwWuCL.js → chunk-4TB4RGXK.2GbAul_E.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.CZ3yTiyq.js → chunk-55IACEB6.pjzY-v-B.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.6DfvHSd8.js → chunk-EDXVE4YY.BB1GXLj2.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CpBj8HfK.js → chunk-FMBD7UC4.B2WxZkoA.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.BdKo8YqS.js → chunk-OYMX7WX6.BMvb2w73.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnXNyxJx.js → chunk-QZHKN3VN.Bmu_2lNr.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.Cg1OcF8G.js → chunk-YZCP3GAM.Cth65EaC.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DFNHq2OM.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DFNHq2OM.js +1 -0
- package/dist/docs/assets/chunks/clone.DssygCzX.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.1SP8al9c.js → cose-bilkent-S5V4N54A.CrfA7Iw_.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DS1L6hJt.js → dagre-KV5264BT.PCD6KQDb.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.ChsausbG.js → diagram-5BDNPKRD.CGNlYlP1.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.3XsptNWj.js → diagram-G4DWMVQ6.C0cvryPD.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DPA9Dk_P.js → diagram-MMDJMWI5.DHlkZHNV.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.BVswXWrB.js → diagram-TYMM5635.DDGqH_4B.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.BSak5OSP.js → erDiagram-SMLLAGMA.4gOY_C3v.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CQgN4TTz.js → flowDiagram-DWJPFMVM.8i7zsxuh.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.GrT0kA4a.js → ganttDiagram-T4ZO3ILL.BEKHYdM-.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CdS7Ucll.js → gitGraphDiagram-UUTBAWPF.ACzeLGiB.js} +1 -1
- package/dist/docs/assets/chunks/{graph.BVqKRmRo.js → graph.08C3hS6m.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.C3C9FRto.js → infoDiagram-42DDH7IO.D8R9obOH.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js → ishikawaDiagram-UXIWVN3A.CmgYpCWL.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CaHMfK4b.js → journeyDiagram-VCZTEJTY.DUzjGfoZ.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CjhIUwcA.js → kanban-definition-6JOO6SKY.DbcW2iZ0.js} +1 -1
- package/dist/docs/assets/chunks/{layout.CGU3gfSf.js → layout.BaDEpJzu.js} +1 -1
- package/dist/docs/assets/chunks/{linear.DaihpW_n.js → linear.B_zRQgCU.js} +1 -1
- package/dist/docs/assets/chunks/{min.BS-j8kHQ.js → min.BYscCdSu.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BVJ1Bbnk.js → mindmap-definition-QFDTVHPH.Ggu0jg86.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.Cz1WIv9r.js → pieDiagram-DEJITSTG.D_q4SVDT.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DKLFxcjy.js → quadrantDiagram-34T5L4WZ.D3zGj5ok.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.BHegiK7x.js → requirementDiagram-MS252O5E.DVTg7zr2.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DYkY6yPc.js → sankeyDiagram-XADWPNL6.D3X8jm57.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DYQ1QUrI.js → sequenceDiagram-FGHM5R23.Dpjai9YP.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.Iru8BsFo.js → stateDiagram-FHFEXIEX.D_AbQBuP.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CWKWRxRx.js +1 -0
- package/dist/docs/assets/chunks/{theme.DaplWQhQ.js → theme.BcgOnbZ6.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BwFA8hiX.js → timeline-definition-GMOUNBTQ.Cp3DKBe2.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CZ60W1C_.js → vennDiagram-DHZGUBPP.Bcvg-Aqu.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.CCpdcUSq.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.B69D2r8-.js → wardleyDiagram-NUSXRM2D.L0yehCc5.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CLPZEIU9.js → xychartDiagram-5P7HB3ND.Cw8-tJmw.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Bljpve-y.js → reference_connections.md.DLrgAd5f.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.js → reference_hooks.md.B-eGa2km.js} +3 -3
- package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.lean.js → reference_hooks.md.B-eGa2km.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.js → reference_sessions.md.CyM7ARz1.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.v3SXVSs_.js → reference_tools.md.DzIY9JzY.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.v3SXVSs_.lean.js → reference_tools.md.DzIY9JzY.lean.js} +1 -1
- package/dist/docs/assets/{style.C130MVnH.css → style.Dwls12uf.css} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/evals.html +37 -37
- package/dist/docs/guides/agent-to-agent.html +37 -37
- package/dist/docs/guides/bitbucket.html +37 -37
- package/dist/docs/guides/cloud-agents.html +37 -37
- package/dist/docs/guides/convert-automation.html +37 -37
- package/dist/docs/guides/github.html +37 -37
- package/dist/docs/guides/gitlab.html +37 -37
- package/dist/docs/guides/grokbot-agents.html +37 -37
- package/dist/docs/guides/hooks.html +37 -37
- package/dist/docs/guides/improve.html +37 -37
- package/dist/docs/guides/jev.html +37 -37
- package/dist/docs/guides/mcp-oauth.html +37 -37
- package/dist/docs/guides/migrate.html +37 -37
- package/dist/docs/guides/opentelemetry.html +37 -37
- package/dist/docs/guides/slack.html +37 -37
- package/dist/docs/guides/webhooks.html +37 -37
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +37 -37
- package/dist/docs/index.html +37 -37
- package/dist/docs/llms-full.txt +15 -2
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/channels.html +37 -37
- package/dist/docs/reference/cli.html +37 -37
- package/dist/docs/reference/connections.html +39 -39
- package/dist/docs/reference/connections.md +2 -1
- package/dist/docs/reference/evals.html +37 -37
- package/dist/docs/reference/extensions.html +37 -37
- package/dist/docs/reference/hooks.html +39 -39
- package/dist/docs/reference/hooks.md +1 -0
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +37 -37
- package/dist/docs/reference/playground.html +36 -36
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +37 -37
- package/dist/docs/reference/sessions.html +37 -37
- package/dist/docs/reference/sessions.md +1 -1
- package/dist/docs/reference/skills.html +37 -37
- package/dist/docs/reference/subagents.html +37 -37
- package/dist/docs/reference/tools.html +39 -39
- package/dist/docs/reference/tools.md +11 -0
- package/dist/docs/templates/agentic-owners.html +37 -37
- package/dist/docs/templates/grokbot-agents.html +37 -37
- package/dist/docs/templates/security-reviewer.html +37 -37
- package/dist/docs/templates/thermo-quality-review.html +37 -37
- package/dist/docs/templates/thermo-review.html +37 -37
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/evals/assertions.d.ts.map +1 -1
- package/dist/evals/assertions.js +21 -19
- package/dist/evals/expect.js +1 -1
- package/dist/evals/judge.js +1 -1
- package/dist/evals/reporters.js +8 -8
- package/dist/evals/run-facts.js +2 -2
- package/dist/evals.js +6 -6
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +16 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +44 -3
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts +23 -0
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.js +32 -0
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +2 -2
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
- package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -8
- package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/extension.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +4 -4
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
- package/dist/extensions/improve/skills/yourself.js +1 -1
- package/dist/extensions/jev/extension.js +2 -2
- package/dist/extensions/jev/tools/evaluate.js +1 -1
- package/dist/extensions/slack-communication/tools/react.js +1 -1
- package/dist/files-backends/cursor-hosted.js +8 -8
- package/dist/files-backends/local-fs.js +1 -1
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +15 -15
- package/dist/internal/advertise-tools.d.ts +3 -2
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +11 -9
- package/dist/internal/approval-gate.js +1 -1
- package/dist/internal/artifacts-store.js +13 -13
- package/dist/internal/as-of.js +2 -2
- package/dist/internal/authored-alias-hooks.js +1 -1
- package/dist/internal/builtin-tools/reminders.js +2 -2
- package/dist/internal/chat-client.js +5 -5
- package/dist/internal/cli-ax.js +14 -14
- package/dist/internal/cli-bitbucket.js +10 -10
- package/dist/internal/cli-convert-automation.js +2 -2
- package/dist/internal/cli-cursor.js +2 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +40 -40
- package/dist/internal/cli-docs.js +5 -5
- package/dist/internal/cli-github.js +15 -15
- package/dist/internal/cli-gitlab.js +10 -10
- package/dist/internal/cli-images.js +16 -16
- package/dist/internal/cli-manifest.js +1 -1
- package/dist/internal/cli-mcp-oauth.js +5 -5
- package/dist/internal/cli-mcp.js +3 -3
- package/dist/internal/cli-migrate.js +1 -1
- package/dist/internal/cli-skills.js +2 -2
- package/dist/internal/cli-slack.js +5 -5
- package/dist/internal/cloud-turn-cost.js +1 -1
- package/dist/internal/continuation-identity.js +6 -6
- package/dist/internal/conversation-mirror.js +5 -5
- package/dist/internal/convert-automation/convert-workflow.js +24 -24
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +20 -20
- package/dist/internal/cursor/backend-client.js +6 -6
- package/dist/internal/cursor/credentials.js +1 -1
- package/dist/internal/cursor/store-api-client.js +1 -1
- package/dist/internal/cursor-account-mcp-auth.js +9 -9
- package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
- package/dist/internal/cursor-deployment-relay.js +9 -9
- package/dist/internal/cursor-event-relay.js +10 -10
- package/dist/internal/cursor-relay-core.js +2 -2
- package/dist/internal/deploy-manifest.js +10 -10
- package/dist/internal/discovery/agent-config.js +2 -2
- package/dist/internal/discovery/agent.js +6 -6
- package/dist/internal/discovery/connections.js +5 -5
- package/dist/internal/discovery/cursor-plugin.js +12 -12
- package/dist/internal/discovery/extension-overlay.js +3 -3
- package/dist/internal/discovery/extensions.js +6 -6
- package/dist/internal/discovery/info.js +9 -9
- package/dist/internal/discovery/instructions.js +1 -1
- package/dist/internal/discovery/project.js +3 -3
- package/dist/internal/discovery/services.js +1 -1
- package/dist/internal/discovery/tools.js +1 -1
- package/dist/internal/docs-site.js +2 -2
- package/dist/internal/env-file.js +1 -1
- package/dist/internal/eval-run-store.js +7 -7
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +14 -14
- package/dist/internal/eval-transport.js +1 -1
- package/dist/internal/evals-client.js +4 -4
- package/dist/internal/event-log.js +8 -8
- package/dist/internal/event-mapper.js +13 -13
- package/dist/internal/expected-delivery-failure.js +2 -2
- package/dist/internal/filesystem/format.js +2 -2
- package/dist/internal/filesystem/nearest.js +3 -3
- package/dist/internal/filesystem/scratch.js +3 -3
- package/dist/internal/filesystem/tools.js +6 -6
- package/dist/internal/filesystem/walk.d.ts.map +1 -1
- package/dist/internal/filesystem/walk.js +2 -2
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +6 -5
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +4 -2
- package/dist/internal/github-fanout.d.ts.map +1 -1
- package/dist/internal/github-fanout.js +3 -3
- package/dist/internal/guest-network.js +4 -4
- package/dist/internal/host-files.js +1 -1
- package/dist/internal/host-kv.js +2 -2
- package/dist/internal/hosted-catch-protocol.js +1 -1
- package/dist/internal/hosted-catch.js +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +14 -14
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +23 -9
- package/dist/internal/hosted-eval-cases.js +4 -4
- package/dist/internal/hosted-execution-diag.js +3 -3
- package/dist/internal/hosting.js +1 -1
- package/dist/internal/http-channel.js +1 -1
- package/dist/internal/http-control-plane-session.js +2 -2
- package/dist/internal/init-interview.js +7 -7
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +12 -12
- package/dist/internal/inline-stdio-mcp.js +2 -2
- package/dist/internal/install-cursor-skills.js +11 -11
- package/dist/internal/json-schema.js +1 -1
- package/dist/internal/local-control-plane.js +3 -3
- package/dist/internal/local-env.js +3 -3
- package/dist/internal/log-ring.js +1 -1
- package/dist/internal/logs-client.js +1 -1
- package/dist/internal/mcp-endpoint.js +8 -8
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +5 -5
- package/dist/internal/mcp-oauth-on-demand.js +3 -3
- package/dist/internal/mcp-oauth.js +5 -5
- package/dist/internal/net.js +2 -2
- package/dist/internal/otel/config.js +3 -3
- package/dist/internal/otel/runtime.js +13 -13
- package/dist/internal/peer-connections.js +2 -2
- package/dist/internal/persistent-stage-log-mirror.d.ts +57 -0
- package/dist/internal/persistent-stage-log-mirror.d.ts.map +1 -0
- package/dist/internal/persistent-stage-log-mirror.js +231 -0
- package/dist/internal/platform-schedule-sync.js +1 -1
- package/dist/internal/platform-timers.js +1 -1
- package/dist/internal/playground/static.js +2 -2
- package/dist/internal/playground/toolchain.js +2 -2
- package/dist/internal/playground-proxy.js +3 -3
- package/dist/internal/process-memory-telemetry.js +1 -1
- package/dist/internal/reminder-runner.d.ts +1 -1
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +14 -16
- package/dist/internal/reminder-store.js +1 -1
- package/dist/internal/resolved-connections.js +8 -8
- package/dist/internal/router.js +4 -4
- package/dist/internal/run-client.js +2 -2
- package/dist/internal/schedule-runner.js +6 -6
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +6 -6
- package/dist/internal/serve-restart.js +1 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +93 -72
- package/dist/internal/session-cost.js +3 -3
- package/dist/internal/session-engine.d.ts +8 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +183 -118
- package/dist/internal/session-live-publisher.d.ts +46 -0
- package/dist/internal/session-live-publisher.d.ts.map +1 -0
- package/dist/internal/session-live-publisher.js +352 -0
- package/dist/internal/session-run-log.js +6 -6
- package/dist/internal/sessions-client.js +3 -3
- package/dist/internal/skill-catalog.js +2 -2
- package/dist/internal/sleep.js +1 -1
- package/dist/internal/start-log-store.d.ts +5 -1
- package/dist/internal/start-log-store.d.ts.map +1 -1
- package/dist/internal/start-log-store.js +5 -3
- package/dist/internal/storage-coordinator.js +12 -12
- package/dist/internal/store-api-protocol.d.ts +51 -0
- package/dist/internal/store-api-protocol.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.js +39 -2
- package/dist/internal/store-mirror.js +4 -4
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +4 -0
- package/dist/internal/terminal-style.js +2 -2
- package/dist/internal/tool-call-retry.d.ts +87 -0
- package/dist/internal/tool-call-retry.d.ts.map +1 -0
- package/dist/internal/tool-call-retry.js +387 -0
- package/dist/internal/tool-result.js +3 -3
- package/dist/internal/trajectory.js +7 -7
- package/dist/internal/turn-governor.js +2 -2
- package/dist/internal/turn-outbox.js +1 -1
- package/dist/internal/update-check.d.ts.map +1 -1
- package/dist/internal/update-check.js +4 -2
- package/dist/internal/v2-hosting.d.ts +6 -0
- package/dist/internal/v2-hosting.d.ts.map +1 -1
- package/dist/internal/v2-hosting.js +7 -1
- package/dist/internal/workspace.js +4 -4
- package/dist/kv/memory-kv.js +3 -3
- package/dist/playground/assets/{index-Be0-1hw2.js → index-HN5lOuAX.js} +42 -42
- package/dist/playground/assets/index-JY1wKCMg.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +1 -1
- package/dist/storage-backends/cursor-hosted-v2.js +2 -2
- package/dist/storage-backends/file-kv.js +7 -7
- package/dist/storage-protocol.d.ts +7 -0
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +7 -0
- package/dist/storage.js +3 -3
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -4
- package/docs/reference/connections.md +2 -1
- package/docs/reference/hooks.md +1 -0
- package/docs/reference/sessions.md +1 -1
- package/docs/reference/tools.md +11 -0
- package/package.json +6 -6
- package/templates/agentic-owners/bot/channels/github.ts +2 -2
- package/templates/agentic-owners/bot/lib/github.ts +7 -5
- package/templates/agentic-owners/bot/lib/owners/decision.ts +9 -9
- package/templates/agentic-owners/bot/lib/owners/handles.ts +2 -2
- package/templates/agentic-owners/bot/lib/owners/match.ts +5 -3
- package/templates/agentic-owners/bot/lib/owners/matching.ts +1 -1
- package/templates/agentic-owners/bot/lib/owners/parse.ts +4 -4
- package/templates/agentic-owners/bot/lib/owners/prompt.ts +1 -1
- package/templates/agentic-owners/bot/lib/review.ts +18 -17
- package/templates/agentic-owners/evals/owners.eval.ts +2 -2
- package/templates/agents-md/bot/lib/collect.ts +6 -6
- package/templates/agents-md/bot/lib/config.ts +1 -1
- package/templates/agents-md/bot/tools/apply_agents.ts +4 -4
- package/templates/code-wiki/bot/channels/github.ts +3 -3
- package/templates/code-wiki/bot/lib/repos.ts +1 -1
- package/templates/code-wiki/bot/tools/apply_wiki.ts +2 -2
- package/templates/demo/bot/lib/collect.ts +1 -1
- package/templates/demo/bot/lib/repos.ts +1 -1
- package/templates/demo/bot/tools/record_demo.ts +1 -1
- package/templates/pr-autofixer/bot/channels/github.ts +2 -2
- package/templates/pr-autofixer/bot/lib/merge-watch.ts +2 -2
- package/templates/pr-autofixer/bot/lib/repos.ts +2 -2
- package/templates/pr-autofixer/bot/lib/webhook-routing.ts +1 -1
- package/templates/security-help/bot/lib/repos.ts +1 -1
- package/templates/security-reviewer/bot/lib/repos.ts +1 -1
- package/templates/triage/bot/lib/actuate.ts +15 -15
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +0 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +0 -1
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +0 -162
- package/dist/playground/assets/index-Clz6uHj9.css +0 -1
- /package/dist/docs/assets/{reference_connections.md.Bljpve-y.lean.js → reference_connections.md.DLrgAd5f.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.lean.js → reference_sessions.md.CyM7ARz1.lean.js} +0 -0
|
@@ -56,8 +56,8 @@ export function verifyV1edWebhookPayload(args) {
|
|
|
56
56
|
}), "utf8");
|
|
57
57
|
const candidateSignatures = signatureHeader
|
|
58
58
|
.split(/\s+/)
|
|
59
|
-
.filter(entry => entry.startsWith(`${V1ED_SIGNATURE_VERSION},`))
|
|
60
|
-
.map(entry => entry.slice(V1ED_SIGNATURE_VERSION.length + 1))
|
|
59
|
+
.filter((entry) => entry.startsWith(`${V1ED_SIGNATURE_VERSION},`))
|
|
60
|
+
.map((entry) => entry.slice(V1ED_SIGNATURE_VERSION.length + 1))
|
|
61
61
|
.slice(0, MAX_V1ED_CANDIDATE_SIGNATURES);
|
|
62
62
|
if (candidateSignatures.length === 0) {
|
|
63
63
|
return false;
|
|
@@ -221,7 +221,7 @@ export function buildAgenticEvents(options) {
|
|
|
221
221
|
if (skip(event, ctx.session.dryRun)) {
|
|
222
222
|
return;
|
|
223
223
|
}
|
|
224
|
-
const calls = event.data.calls.filter(call => !isOwnedSignal(call.toolName));
|
|
224
|
+
const calls = event.data.calls.filter((call) => !isOwnedSignal(call.toolName));
|
|
225
225
|
const line = takeToolChipLine(channel.state, status.tools, calls);
|
|
226
226
|
if (line === undefined) {
|
|
227
227
|
return;
|
|
@@ -439,7 +439,7 @@ async function applyEdit(args) {
|
|
|
439
439
|
ts,
|
|
440
440
|
text: edit.message,
|
|
441
441
|
}),
|
|
442
|
-
ok: slackTs => {
|
|
442
|
+
ok: (slackTs) => {
|
|
443
443
|
setPostedText(args.sessionId, slackTs, edit.message);
|
|
444
444
|
},
|
|
445
445
|
});
|
|
@@ -461,7 +461,7 @@ async function applyDelete(args) {
|
|
|
461
461
|
channel: channelId,
|
|
462
462
|
ts,
|
|
463
463
|
}),
|
|
464
|
-
ok: slackTs => {
|
|
464
|
+
ok: (slackTs) => {
|
|
465
465
|
remove(args.sessionId, removed.ts);
|
|
466
466
|
if (args.channel.state.lastBotMessageTs === slackTs) {
|
|
467
467
|
args.channel.state.lastBotMessageTs = latest(args.sessionId) ?? null;
|
|
@@ -34,7 +34,7 @@ export function isSignal(toolName, signal) {
|
|
|
34
34
|
return toolName === signal || toolName.endsWith(`__${signal}`);
|
|
35
35
|
}
|
|
36
36
|
export function isOwnedSignal(toolName) {
|
|
37
|
-
return OWNED_SIGNALS.some(signal => isSignal(toolName, signal));
|
|
37
|
+
return OWNED_SIGNALS.some((signal) => isSignal(toolName, signal));
|
|
38
38
|
}
|
|
39
39
|
function asObject(output) {
|
|
40
40
|
if (typeof output === "string") {
|
|
@@ -104,8 +104,8 @@ export function truncateTypingStatus(status, max) {
|
|
|
104
104
|
*/
|
|
105
105
|
export function truncateLoadingMessages(messages, nowMs = Date.now()) {
|
|
106
106
|
const cleaned = messages
|
|
107
|
-
.map(message => truncateTypingStatus(message, SLACK_LOADING_MESSAGE_MAX_LEN))
|
|
108
|
-
.filter(message => message.length > 0);
|
|
107
|
+
.map((message) => truncateTypingStatus(message, SLACK_LOADING_MESSAGE_MAX_LEN))
|
|
108
|
+
.filter((message) => message.length > 0);
|
|
109
109
|
if (cleaned.length <= SLACK_LOADING_MESSAGES_MAX) {
|
|
110
110
|
return cleaned;
|
|
111
111
|
}
|
|
@@ -158,7 +158,7 @@ export async function setThreadStatus(args) {
|
|
|
158
158
|
if (status.length > 0) {
|
|
159
159
|
const loadingRaw = args.loadingMessages !== undefined && args.loadingMessages.length > 0
|
|
160
160
|
? args.loadingMessages
|
|
161
|
-
: [status, ...SLACK_DEFAULT_LOADING_MESSAGES.filter(m => m !== status)];
|
|
161
|
+
: [status, ...SLACK_DEFAULT_LOADING_MESSAGES.filter((m) => m !== status)];
|
|
162
162
|
const loading_messages = truncateLoadingMessages(loadingRaw);
|
|
163
163
|
if (loading_messages.length > 0) {
|
|
164
164
|
body.loading_messages = loading_messages;
|
|
@@ -205,7 +205,7 @@ export async function setThreadTitle(args) {
|
|
|
205
205
|
export async function setSuggestedPrompts(args) {
|
|
206
206
|
const body = {
|
|
207
207
|
channel_id: args.channelId,
|
|
208
|
-
prompts: args.prompts.map(p => ({
|
|
208
|
+
prompts: args.prompts.map((p) => ({
|
|
209
209
|
title: p.title,
|
|
210
210
|
message: p.message,
|
|
211
211
|
})),
|
|
@@ -304,7 +304,7 @@ const SLACK_MRKDWN_LINK_PATTERN = /<https?:\/\/[^|>]+\|/;
|
|
|
304
304
|
export function markdownToSlackMrkdwn(markdown) {
|
|
305
305
|
const literals = [];
|
|
306
306
|
const placeholder = (index) => `\ue000SLACK_LITERAL_${index}\ue001`;
|
|
307
|
-
const protectedMarkdown = markdown.replace(SLACK_MRKDWN_LITERAL_PATTERN, literal => {
|
|
307
|
+
const protectedMarkdown = markdown.replace(SLACK_MRKDWN_LITERAL_PATTERN, (literal) => {
|
|
308
308
|
const index = literals.push(literal) - 1;
|
|
309
309
|
return placeholder(index);
|
|
310
310
|
});
|
|
@@ -61,7 +61,7 @@ export function redactSensitiveValues(value) {
|
|
|
61
61
|
return value;
|
|
62
62
|
}
|
|
63
63
|
if (Array.isArray(value)) {
|
|
64
|
-
return value.map(item => redactSensitiveValues(item));
|
|
64
|
+
return value.map((item) => redactSensitiveValues(item));
|
|
65
65
|
}
|
|
66
66
|
if (typeof value === "object") {
|
|
67
67
|
const out = {};
|
|
@@ -364,9 +364,9 @@ export async function prepareSlackAttachments(options) {
|
|
|
364
364
|
const maxFileBytes = options.maxFileBytes ?? DEFAULT_MAX_FILE_BYTES;
|
|
365
365
|
const maxTotalBytes = options.maxTotalBytes ?? DEFAULT_MAX_TOTAL_BYTES;
|
|
366
366
|
const downloadTimeoutMs = options.downloadTimeoutMs ?? DEFAULT_DOWNLOAD_TIMEOUT_MS;
|
|
367
|
-
const messageFileIds = new Set(options.files.map(file => file.id));
|
|
368
|
-
const threadFiles = (options.threadFiles ?? []).filter(file => !messageFileIds.has(file.id));
|
|
369
|
-
const threadFileIds = new Set(threadFiles.map(file => file.id));
|
|
367
|
+
const messageFileIds = new Set(options.files.map((file) => file.id));
|
|
368
|
+
const threadFiles = (options.threadFiles ?? []).filter((file) => !messageFileIds.has(file.id));
|
|
369
|
+
const threadFileIds = new Set(threadFiles.map((file) => file.id));
|
|
370
370
|
const loaded = await Promise.all([...options.files, ...threadFiles].slice(0, maxFiles).map(async (file) => {
|
|
371
371
|
const classification = classifySlackFile(file);
|
|
372
372
|
if (classification === undefined) {
|
|
@@ -35,7 +35,7 @@ export function mrkdwnSections(lines) {
|
|
|
35
35
|
if (current !== "") {
|
|
36
36
|
texts.push(current);
|
|
37
37
|
}
|
|
38
|
-
return texts.map(text => ({
|
|
38
|
+
return texts.map((text) => ({
|
|
39
39
|
type: "section",
|
|
40
40
|
text: { type: "mrkdwn", text },
|
|
41
41
|
}));
|
|
@@ -78,10 +78,10 @@ export function slackTableBlock(args) {
|
|
|
78
78
|
throw new Error(`slackTableBlock: row ${index} has ${row.length} cells; expected ${columnCount}`);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
const headerRow = args.headers.map(header => slackRawTextCell(header));
|
|
81
|
+
const headerRow = args.headers.map((header) => slackRawTextCell(header));
|
|
82
82
|
const block = {
|
|
83
83
|
type: "table",
|
|
84
|
-
rows: [headerRow, ...args.rows.map(row => [...row])],
|
|
84
|
+
rows: [headerRow, ...args.rows.map((row) => [...row])],
|
|
85
85
|
};
|
|
86
86
|
if (args.columnSettings !== undefined && args.columnSettings.length > 0) {
|
|
87
87
|
block.column_settings = [...args.columnSettings];
|
|
@@ -79,7 +79,7 @@ export function buildDelegationMetadata(args) {
|
|
|
79
79
|
* construction (fail at definition time) and the gate (fail at start).
|
|
80
80
|
*/
|
|
81
81
|
export function normalizeBotMentionAllowlist(allowFrom) {
|
|
82
|
-
const entries = allowFrom.map(entry => entry.trim()).filter(entry => entry !== "");
|
|
82
|
+
const entries = allowFrom.map((entry) => entry.trim()).filter((entry) => entry !== "");
|
|
83
83
|
if (entries.length === 0) {
|
|
84
84
|
throw new Error("slackChannel engagement.botMentions.allowFrom must list at least one bot id (B…) or bot user id (U…); there is no wildcard.");
|
|
85
85
|
}
|
|
@@ -98,8 +98,8 @@ export function normalizeBotMentionAllowlist(allowFrom) {
|
|
|
98
98
|
export function botMentionsFromEnv(envVar = "AGENT_DELEGATOR_SLACK_BOT_IDS") {
|
|
99
99
|
const allowFrom = (process.env[envVar] ?? "")
|
|
100
100
|
.split(",")
|
|
101
|
-
.map(entry => entry.trim())
|
|
102
|
-
.filter(entry => entry !== "");
|
|
101
|
+
.map((entry) => entry.trim())
|
|
102
|
+
.filter((entry) => entry !== "");
|
|
103
103
|
return allowFrom.length === 0 ? undefined : { allowFrom };
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
@@ -179,7 +179,7 @@ export class SlackBotMentionGate {
|
|
|
179
179
|
recent: [],
|
|
180
180
|
lastAtMs: nowMs,
|
|
181
181
|
};
|
|
182
|
-
budget.recent = budget.recent.filter(atMs => atMs > nowMs - this.windowMs);
|
|
182
|
+
budget.recent = budget.recent.filter((atMs) => atMs > nowMs - this.windowMs);
|
|
183
183
|
if (budget.total >= this.maxPerThreadTotal) {
|
|
184
184
|
return {
|
|
185
185
|
allow: false,
|
|
@@ -32,8 +32,8 @@ export const CHANNEL_POSTS_MAX_CHANNEL_IDS = 10;
|
|
|
32
32
|
* started. Top-level posts do not match it (`posts: "replies"`).
|
|
33
33
|
*/
|
|
34
34
|
export function channelPostsWatchEverywhere(entries) {
|
|
35
|
-
const trimmed = entries.map(entry => entry.trim()).filter(entry => entry !== "");
|
|
36
|
-
return trimmed.length > 0 && trimmed.every(entry => entry === "*");
|
|
35
|
+
const trimmed = entries.map((entry) => entry.trim()).filter((entry) => entry !== "");
|
|
36
|
+
return trimmed.length > 0 && trimmed.every((entry) => entry === "*");
|
|
37
37
|
}
|
|
38
38
|
/** The channel-id (`C…`/`G…`) entries of an allowlist, deduped. */
|
|
39
39
|
export function channelPostIdEntries(entries) {
|
|
@@ -54,7 +54,7 @@ export function validateChannelPostsAllow(entries) {
|
|
|
54
54
|
if (channelPostsWatchEverywhere(entries)) {
|
|
55
55
|
return undefined;
|
|
56
56
|
}
|
|
57
|
-
if (entries.some(entry => entry.trim() === "*")) {
|
|
57
|
+
if (entries.some((entry) => entry.trim() === "*")) {
|
|
58
58
|
return ('must not mix "*": a lone "*" watches every channel the bot is in, ' +
|
|
59
59
|
"thread replies only. Otherwise list channel ids (C…/G…), up to " +
|
|
60
60
|
`${CHANNEL_POSTS_MAX_CHANNEL_IDS} channels.`);
|
|
@@ -119,7 +119,7 @@ export class SlackChannelAllowlist {
|
|
|
119
119
|
* returns whatever resolved; the caller logs names that stayed unresolved.
|
|
120
120
|
*/
|
|
121
121
|
export async function resolveChannelNames(client, names, log = defaultSlackLog) {
|
|
122
|
-
const wanted = new Set(names.map(name => name.toLowerCase()));
|
|
122
|
+
const wanted = new Set(names.map((name) => name.toLowerCase()));
|
|
123
123
|
const resolved = new Map();
|
|
124
124
|
if (wanted.size === 0) {
|
|
125
125
|
return resolved;
|
|
@@ -126,9 +126,9 @@ async function mergeGitignore(path) {
|
|
|
126
126
|
}
|
|
127
127
|
const have = new Set(existing
|
|
128
128
|
.split(/\r?\n/)
|
|
129
|
-
.map(line => line.trim())
|
|
130
|
-
.filter(line => line !== ""));
|
|
131
|
-
const missing = lines.filter(line => !have.has(line));
|
|
129
|
+
.map((line) => line.trim())
|
|
130
|
+
.filter((line) => line !== ""));
|
|
131
|
+
const missing = lines.filter((line) => !have.has(line));
|
|
132
132
|
if (missing.length === 0) {
|
|
133
133
|
return false;
|
|
134
134
|
}
|
|
@@ -508,7 +508,7 @@ export async function dispatchInboundMessage(args) {
|
|
|
508
508
|
"",
|
|
509
509
|
media.userText,
|
|
510
510
|
]
|
|
511
|
-
.filter(part => part.length > 0)
|
|
511
|
+
.filter((part) => part.length > 0)
|
|
512
512
|
.join("\n");
|
|
513
513
|
const paintedStart = painted !== undefined;
|
|
514
514
|
const placeholderLine = args.placeholder;
|
|
@@ -35,7 +35,7 @@ export function parseSlackEvalDirective(text) {
|
|
|
35
35
|
if (body.length === 0) {
|
|
36
36
|
return null;
|
|
37
37
|
}
|
|
38
|
-
const tokens = body.split(/\s+/).filter(t => t.length > 0);
|
|
38
|
+
const tokens = body.split(/\s+/).filter((t) => t.length > 0);
|
|
39
39
|
if (tokens.length === 0 || !/^eval$/i.test(tokens[0] ?? "")) {
|
|
40
40
|
return null;
|
|
41
41
|
}
|
|
@@ -62,7 +62,7 @@ export async function paintSlackFooter(args) {
|
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
export function slackSessionFooter(opts) {
|
|
65
|
-
return ctx => {
|
|
65
|
+
return (ctx) => {
|
|
66
66
|
const url = dashboardSessionUrl(ctx.sessionId, { slug: opts?.slug });
|
|
67
67
|
if (url === undefined) {
|
|
68
68
|
return undefined;
|
|
@@ -223,7 +223,7 @@ export async function resolveBlockActionCard(args) {
|
|
|
223
223
|
ts: action.messageTs,
|
|
224
224
|
text: note,
|
|
225
225
|
blocks: [
|
|
226
|
-
...action.messageBlocks.filter(block => !clicked(block)),
|
|
226
|
+
...action.messageBlocks.filter((block) => !clicked(block)),
|
|
227
227
|
{ type: "context", elements: [{ type: "mrkdwn", text: note }] },
|
|
228
228
|
],
|
|
229
229
|
});
|
|
@@ -288,7 +288,7 @@ export async function dispatchBlockAction(payload, deps) {
|
|
|
288
288
|
await dispatchInboundMessage({
|
|
289
289
|
kind: "block_action",
|
|
290
290
|
message: blockActionAsMessage(action, deps.installTeamId),
|
|
291
|
-
handler: ctx => deps.handler(ctx, action),
|
|
291
|
+
handler: (ctx) => deps.handler(ctx, action),
|
|
292
292
|
send: deps.send,
|
|
293
293
|
credentials: deps.credentials,
|
|
294
294
|
host: deps.host,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/log.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE1F,MAAM,WAAW,QAAQ;IACvB,gEAAgE;IAChE,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3D;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAcpE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/log.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE1F,MAAM,WAAW,QAAQ;IACvB,gEAAgE;IAChE,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3D;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAcpE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,aAA2C,GAAG,QAAQ,CAe9F;AAED,sDAAsD;AACtD,eAAO,MAAM,eAAe,EAAE,QAA8B,CAAC"}
|
|
@@ -25,7 +25,7 @@ export function formatSlackLogLine(level, message, fields) {
|
|
|
25
25
|
const levelTag = level === "info" ? "" : `${level} `;
|
|
26
26
|
return `${SLACK_LOG_PREFIX} ${levelTag}${message}${formatSlackLogFields(fields)}`;
|
|
27
27
|
}
|
|
28
|
-
export function createSlackLogger(write = line => console.log(line)) {
|
|
28
|
+
export function createSlackLogger(write = (line) => console.log(line)) {
|
|
29
29
|
const emit = (level, message, fields) => {
|
|
30
30
|
write(formatSlackLogLine(level, message, fields));
|
|
31
31
|
};
|
|
@@ -101,7 +101,7 @@ export function buildSlackManifest(options) {
|
|
|
101
101
|
const includeAgentView = options.assistant !== false;
|
|
102
102
|
const botScopes = includeAgentView
|
|
103
103
|
? [...BOT_SCOPES]
|
|
104
|
-
: BOT_SCOPES.filter(scope => scope !== "assistant:write");
|
|
104
|
+
: BOT_SCOPES.filter((scope) => scope !== "assistant:write");
|
|
105
105
|
const suggested = options.suggestedPrompts !== undefined ? options.suggestedPrompts : [];
|
|
106
106
|
return {
|
|
107
107
|
display_information: {
|
|
@@ -189,7 +189,7 @@ export async function materializeSlackNudgeCarrier(args) {
|
|
|
189
189
|
const hooks = { ...(existing.hooks ?? {}) };
|
|
190
190
|
const command = `node ${SLACK_NUDGE_CARRIER_REL}`;
|
|
191
191
|
for (const step of ["preToolUse", "postToolUse"]) {
|
|
192
|
-
const list = [...(hooks[step] ?? [])].filter(entry => !entry.command.includes("slack-nudge-carrier"));
|
|
192
|
+
const list = [...(hooks[step] ?? [])].filter((entry) => !entry.command.includes("slack-nudge-carrier"));
|
|
193
193
|
list.push({ command, failClosed: false });
|
|
194
194
|
hooks[step] = list;
|
|
195
195
|
}
|
|
@@ -82,7 +82,7 @@ export class SlackNudgeStore {
|
|
|
82
82
|
}
|
|
83
83
|
const pending = await this.listPending(continuationKey);
|
|
84
84
|
const hash = contentHash(text);
|
|
85
|
-
if (pending.some(item => item.sourceTs === sourceTs || item.contentHash === hash)) {
|
|
85
|
+
if (pending.some((item) => item.sourceTs === sourceTs || item.contentHash === hash)) {
|
|
86
86
|
return false;
|
|
87
87
|
}
|
|
88
88
|
const record = {
|
|
@@ -212,7 +212,7 @@ export class SlackNudgeStore {
|
|
|
212
212
|
return;
|
|
213
213
|
}
|
|
214
214
|
const pending = await this.listPending(key);
|
|
215
|
-
const record = pending.find(item => item.sourceTs === ts);
|
|
215
|
+
const record = pending.find((item) => item.sourceTs === ts);
|
|
216
216
|
await mkdir(this.deliveredDir(key), { recursive: true });
|
|
217
217
|
const dest = this.deliveredPath(key, ts);
|
|
218
218
|
const tmp = `${dest}.${process.pid}.tmp`;
|
|
@@ -54,7 +54,7 @@ export function createRecordingSlackSink(options = {}) {
|
|
|
54
54
|
const holdMethods = Array.isArray(options.hold) ? new Set(options.hold) : undefined;
|
|
55
55
|
const gated = holdAll || holdMethods !== undefined;
|
|
56
56
|
const gate = gated
|
|
57
|
-
? new Promise(resolve => {
|
|
57
|
+
? new Promise((resolve) => {
|
|
58
58
|
releaseHeld = resolve;
|
|
59
59
|
})
|
|
60
60
|
: Promise.resolve();
|
|
@@ -108,14 +108,14 @@ export function createRecordingSlackSink(options = {}) {
|
|
|
108
108
|
return {
|
|
109
109
|
transport,
|
|
110
110
|
calls,
|
|
111
|
-
methods: () => calls.map(call => call.method),
|
|
111
|
+
methods: () => calls.map((call) => call.method),
|
|
112
112
|
texts: () => calls
|
|
113
|
-
.filter(call => readableCall(call) !== undefined)
|
|
114
|
-
.map(call => textOf(call.args))
|
|
115
|
-
.filter(text => text !== ""),
|
|
113
|
+
.filter((call) => readableCall(call) !== undefined)
|
|
114
|
+
.map((call) => textOf(call.args))
|
|
115
|
+
.filter((text) => text !== ""),
|
|
116
116
|
firstReadable: () => firstReadableCall(calls),
|
|
117
117
|
lastReadable: () => lastReadableCall(calls),
|
|
118
|
-
chunks: () => calls.flatMap(call => {
|
|
118
|
+
chunks: () => calls.flatMap((call) => {
|
|
119
119
|
const chunks = call.args.chunks;
|
|
120
120
|
return Array.isArray(chunks) ? chunks : [];
|
|
121
121
|
}),
|
|
@@ -36,22 +36,22 @@ export const DEFAULT_REASONING_CARD_TITLE = "Thinking";
|
|
|
36
36
|
export const DEFAULT_REASONING_CARD_MAX_CHARS = 1500;
|
|
37
37
|
function resolveToolLabel(labels) {
|
|
38
38
|
if (labels === undefined) {
|
|
39
|
-
return toolName => toolName;
|
|
39
|
+
return (toolName) => toolName;
|
|
40
40
|
}
|
|
41
41
|
const lookup = typeof labels === "function" ? labels : (name) => labels[name];
|
|
42
|
-
return toolName => {
|
|
42
|
+
return (toolName) => {
|
|
43
43
|
const label = lookup(toolName);
|
|
44
44
|
return label === undefined || label === "" ? toolName : label;
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
47
|
function defaultToolStatusLine(toolLabel) {
|
|
48
|
-
return calls => {
|
|
49
|
-
const names = [...new Set(calls.map(call => toolLabel(call.toolName)))];
|
|
48
|
+
return (calls) => {
|
|
49
|
+
const names = [...new Set(calls.map((call) => toolLabel(call.toolName)))];
|
|
50
50
|
return `Running ${names.join(", ")}…`;
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
function resolveIdle(idle) {
|
|
54
|
-
const cleaned = (idle ?? []).filter(line => line.trim() !== "");
|
|
54
|
+
const cleaned = (idle ?? []).filter((line) => line.trim() !== "");
|
|
55
55
|
return cleaned.length > 0 ? cleaned : [...SLACK_DEFAULT_LOADING_MESSAGES];
|
|
56
56
|
}
|
|
57
57
|
function resolveReasoningCard(option) {
|
|
@@ -131,7 +131,7 @@ export function resolveSlackReply(options) {
|
|
|
131
131
|
if (options.reply !== undefined) {
|
|
132
132
|
reply = options.reply;
|
|
133
133
|
if (legacy !== null) {
|
|
134
|
-
const ignored = ["streaming", "thinkingSteps", "loadingMessages"].filter(key => options[key] !== undefined);
|
|
134
|
+
const ignored = ["streaming", "thinkingSteps", "loadingMessages"].filter((key) => options[key] !== undefined);
|
|
135
135
|
deprecations.push(`slackChannel({ ${ignored.join(", ")} }) is ignored because reply is set; remove the deprecated option${ignored.length === 1 ? "" : "s"}.`);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The agent's own Slack identity
|
|
3
|
-
*
|
|
2
|
+
* The agent's own Slack identity. A turn's prompt carries it so the model
|
|
3
|
+
* can tell which `<@U…>` mention is itself.
|
|
4
4
|
*/
|
|
5
5
|
import type { SlackBotToken } from "./types.js";
|
|
6
6
|
export interface SlackSelfIdentity {
|
|
7
7
|
/** The app's bot *user* id (`U…`) — what `<@…>` mentions carry. */
|
|
8
8
|
userId: string;
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Name Slack shows for this app: the profile name from `users.info`, or
|
|
11
|
+
* the `auth.test` handle when that lookup yields nothing.
|
|
12
|
+
*/
|
|
10
13
|
name?: string;
|
|
11
14
|
}
|
|
12
15
|
export declare function resetSlackSelfIdentityCache(): void;
|
|
13
|
-
/** Cached per token. A missing token or any failure resolves to undefined. */
|
|
16
|
+
/** Cached per token. A missing token or any `auth.test` failure resolves to undefined. */
|
|
14
17
|
export declare function resolveSlackSelfIdentity(botToken: SlackBotToken | undefined): Promise<SlackSelfIdentity | undefined>;
|
|
15
18
|
//# sourceMappingURL=self-identity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-identity.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/self-identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"self-identity.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/self-identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAYD,0FAA0F;AAC1F,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA0BxC"}
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The agent's own Slack identity
|
|
3
|
-
*
|
|
2
|
+
* The agent's own Slack identity. A turn's prompt carries it so the model
|
|
3
|
+
* can tell which `<@U…>` mention is itself.
|
|
4
4
|
*/
|
|
5
5
|
import { callSlackApi } from "./api.js";
|
|
6
|
+
import { fetchSlackUserInfo, slackUserName } from "./user-info.js";
|
|
6
7
|
const identities = new Map();
|
|
7
8
|
export function resetSlackSelfIdentityCache() {
|
|
8
9
|
identities.clear();
|
|
9
10
|
}
|
|
10
|
-
/**
|
|
11
|
+
/** Undefined when `users.info` fails, so the caller keeps the `auth.test` handle. */
|
|
12
|
+
async function profileName(botToken, userId) {
|
|
13
|
+
try {
|
|
14
|
+
const user = await fetchSlackUserInfo({ botToken, userId });
|
|
15
|
+
return user === undefined ? undefined : slackUserName(user);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Cached per token. A missing token or any `auth.test` failure resolves to undefined. */
|
|
11
22
|
export async function resolveSlackSelfIdentity(botToken) {
|
|
12
23
|
if (botToken === undefined) {
|
|
13
24
|
return undefined;
|
|
@@ -26,11 +37,9 @@ export async function resolveSlackSelfIdentity(botToken) {
|
|
|
26
37
|
if (result.ok !== true || userId === "") {
|
|
27
38
|
return undefined;
|
|
28
39
|
}
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
...(name === undefined ? {} : { name }),
|
|
33
|
-
};
|
|
40
|
+
const handle = typeof result.user === "string" && result.user !== "" ? result.user : undefined;
|
|
41
|
+
const name = (await profileName(botToken, userId)) ?? handle;
|
|
42
|
+
const identity = { userId, name };
|
|
34
43
|
identities.set(botToken, identity);
|
|
35
44
|
return identity;
|
|
36
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender-name.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/sender-name.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK7D,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAYD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;
|
|
1
|
+
{"version":3,"file":"sender-name.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/sender-name.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK7D,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAYD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAiCD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC,GAAG,OAAO,CAAC,WAAW,CAAC,CAqBvB;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE9B"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `bot_id`. The same `users.info` record gives a person's IANA timezone.
|
|
6
6
|
*/
|
|
7
7
|
import { callSlackApi } from "./api.js";
|
|
8
|
-
import { fetchSlackUserInfo } from "./user-info.js";
|
|
8
|
+
import { fetchSlackUserInfo, slackUserName } from "./user-info.js";
|
|
9
9
|
const botNames = new Map();
|
|
10
10
|
export function resetSlackSenderNameCache() {
|
|
11
11
|
botNames.clear();
|
|
@@ -23,12 +23,8 @@ async function userSender(botToken, author) {
|
|
|
23
23
|
if (user === undefined) {
|
|
24
24
|
return {};
|
|
25
25
|
}
|
|
26
|
-
const profile = record(user.profile);
|
|
27
26
|
return {
|
|
28
|
-
name:
|
|
29
|
-
text(profile?.real_name) ??
|
|
30
|
-
text(user.real_name) ??
|
|
31
|
-
text(user.name),
|
|
27
|
+
name: slackUserName(user),
|
|
32
28
|
tz: author.isBot ? undefined : text(user.tz),
|
|
33
29
|
};
|
|
34
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/setup.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA6D/C,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/setup.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA6D/C,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAUA;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAyB9C"}
|
|
@@ -68,7 +68,7 @@ export function initialSlackSetupStatus(options) {
|
|
|
68
68
|
updatedAt: new Date().toISOString(),
|
|
69
69
|
envPrefix: options.envPrefix ?? null,
|
|
70
70
|
envKeys: options.envKeys,
|
|
71
|
-
phases: Object.fromEntries(SLACK_SETUP_PHASES.map(phase => [phase.id, phase.id === completed])),
|
|
71
|
+
phases: Object.fromEntries(SLACK_SETUP_PHASES.map((phase) => [phase.id, phase.id === completed])),
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
export function formatSlackSetupGuide() {
|
|
@@ -537,8 +537,8 @@ export function slackChannel(authored = {}) {
|
|
|
537
537
|
}
|
|
538
538
|
const socketOptions = {
|
|
539
539
|
appToken,
|
|
540
|
-
logger: line => getLog().write(line),
|
|
541
|
-
onEvent: payload => {
|
|
540
|
+
logger: (line) => getLog().write(line),
|
|
541
|
+
onEvent: (payload) => {
|
|
542
542
|
dispatchInboundFromEventBody(payload, inboundDeps({
|
|
543
543
|
send: args.send,
|
|
544
544
|
waitUntil: args.waitUntil,
|
|
@@ -18,7 +18,7 @@ function createBridgeLogger(write) {
|
|
|
18
18
|
if (rank[msgLevel] > rank[level]) {
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
|
-
const text = msgs.map(m => (typeof m === "string" ? m : JSON.stringify(m))).join(" ");
|
|
21
|
+
const text = msgs.map((m) => (typeof m === "string" ? m : JSON.stringify(m))).join(" ");
|
|
22
22
|
write(`${SLACK_LOG_PREFIX} Socket Mode ${text}`);
|
|
23
23
|
};
|
|
24
24
|
return {
|
|
@@ -39,7 +39,7 @@ function invokeHandler(log, label, handler, payload) {
|
|
|
39
39
|
try {
|
|
40
40
|
const result = handler(payload);
|
|
41
41
|
if (result !== undefined && typeof result.then === "function") {
|
|
42
|
-
void Promise.resolve(result).catch(error => {
|
|
42
|
+
void Promise.resolve(result).catch((error) => {
|
|
43
43
|
log(`${SLACK_LOG_PREFIX} Socket Mode ${label} failed: ${errorMessage(error)}`);
|
|
44
44
|
});
|
|
45
45
|
}
|
|
@@ -34,7 +34,7 @@ function excludeTimestampSet(excludeTs) {
|
|
|
34
34
|
/** Keep the thread root plus the newest replies when over the fetch cap. */
|
|
35
35
|
export function trimThreadMessagesForPrompt(messages, options) {
|
|
36
36
|
const exclude = excludeTimestampSet(options.excludeTs);
|
|
37
|
-
const filtered = messages.filter(message => {
|
|
37
|
+
const filtered = messages.filter((message) => {
|
|
38
38
|
const ts = asString(message.ts);
|
|
39
39
|
if (ts === undefined || ts === "") {
|
|
40
40
|
return false;
|
|
@@ -47,14 +47,14 @@ export function trimThreadMessagesForPrompt(messages, options) {
|
|
|
47
47
|
if (filtered.length <= options.limit) {
|
|
48
48
|
return filtered;
|
|
49
49
|
}
|
|
50
|
-
const parentIndex = filtered.findIndex(message => asString(message.ts) === options.threadTs);
|
|
50
|
+
const parentIndex = filtered.findIndex((message) => asString(message.ts) === options.threadTs);
|
|
51
51
|
const parent = parentIndex >= 0 ? filtered[parentIndex] : undefined;
|
|
52
52
|
const withoutParent = parentIndex >= 0 ? filtered.filter((_message, index) => index !== parentIndex) : filtered;
|
|
53
53
|
const tail = withoutParent.slice(Math.max(0, withoutParent.length - (options.limit - (parent === undefined ? 0 : 1))));
|
|
54
54
|
if (parent === undefined) {
|
|
55
55
|
return tail;
|
|
56
56
|
}
|
|
57
|
-
if (tail.some(message => asString(message.ts) === options.threadTs)) {
|
|
57
|
+
if (tail.some((message) => asString(message.ts) === options.threadTs)) {
|
|
58
58
|
return tail;
|
|
59
59
|
}
|
|
60
60
|
return [parent, ...tail];
|
|
@@ -88,7 +88,7 @@ function formatThreadEntry(message, role) {
|
|
|
88
88
|
lines.push(body);
|
|
89
89
|
}
|
|
90
90
|
if (files !== undefined) {
|
|
91
|
-
lines.push(`files: ${files.map(file => sanitizeSlackFilename(file.name ?? file.title ?? file.id)).join(", ")}`);
|
|
91
|
+
lines.push(`files: ${files.map((file) => sanitizeSlackFilename(file.name ?? file.title ?? file.id)).join(", ")}`);
|
|
92
92
|
}
|
|
93
93
|
if (lines.length === 1) {
|
|
94
94
|
lines.push("(empty)");
|
|
@@ -98,9 +98,9 @@ function formatThreadEntry(message, role) {
|
|
|
98
98
|
export function slackThreadFilesByPriority(messages, threadTs) {
|
|
99
99
|
const parent = threadTs === undefined
|
|
100
100
|
? undefined
|
|
101
|
-
: messages.find(message => asString(message.ts) === threadTs);
|
|
101
|
+
: messages.find((message) => asString(message.ts) === threadTs);
|
|
102
102
|
const replies = messages
|
|
103
|
-
.filter(message => parent === undefined || asString(message.ts) !== threadTs)
|
|
103
|
+
.filter((message) => parent === undefined || asString(message.ts) !== threadTs)
|
|
104
104
|
.reverse();
|
|
105
105
|
const ordered = parent === undefined ? replies : [parent, ...replies];
|
|
106
106
|
const seen = new Set();
|
|
@@ -200,7 +200,7 @@ export function findLastBotMessageTs(messages, options) {
|
|
|
200
200
|
export function selectThreadDeltaMessages(messages, options) {
|
|
201
201
|
const exclude = excludeTimestampSet(options.excludeTs);
|
|
202
202
|
const afterTs = options.afterTs?.trim() ?? "";
|
|
203
|
-
return messages.filter(message => {
|
|
203
|
+
return messages.filter((message) => {
|
|
204
204
|
const ts = asString(message.ts);
|
|
205
205
|
if (ts === undefined || ts === "") {
|
|
206
206
|
return false;
|
|
@@ -223,7 +223,7 @@ export function formatSlackThreadContextBlock(messages, options) {
|
|
|
223
223
|
limit: DEFAULT_REPLY_LIMIT,
|
|
224
224
|
excludeTs: options?.excludeTs,
|
|
225
225
|
})
|
|
226
|
-
: messages.filter(message => {
|
|
226
|
+
: messages.filter((message) => {
|
|
227
227
|
const ts = asString(message.ts);
|
|
228
228
|
if (ts === undefined || ts === "") {
|
|
229
229
|
return false;
|
|
@@ -138,7 +138,7 @@ export function createToolCards(cards, toolLabel) {
|
|
|
138
138
|
title: title(group[0].toolName, tally.started),
|
|
139
139
|
status: "in_progress",
|
|
140
140
|
};
|
|
141
|
-
const details = appendLines(tally, "details", group.map(call => cards.details?.(call)).filter(present));
|
|
141
|
+
const details = appendLines(tally, "details", group.map((call) => cards.details?.(call)).filter(present));
|
|
142
142
|
if (details !== undefined) {
|
|
143
143
|
chunk.details = details;
|
|
144
144
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `users.info` records, cached per token. Shared by everything that needs a
|
|
3
|
-
*
|
|
3
|
+
* user's record — externality and display name — and the in-flight request
|
|
4
4
|
* is what is cached, so two of them in one turn still cost one call.
|
|
5
5
|
*/
|
|
6
6
|
import type { SlackBotToken } from "./types.js";
|
|
7
7
|
type SlackUserRecord = Record<string, unknown>;
|
|
8
|
+
export declare function slackUserName(user: SlackUserRecord): string | undefined;
|
|
8
9
|
export declare function resetSlackUserInfoCache(): void;
|
|
9
10
|
/** Undefined when the lookup fails; failures are not cached. */
|
|
10
11
|
export declare function fetchSlackUserInfo(args: {
|