@cursor/bdk 0.2.6 → 0.2.7
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 +52 -57
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +34 -8
- package/dist/channels/github/types.d.ts +6 -0
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +37 -29
- package/dist/channels/slack/external-policy.d.ts.map +1 -1
- package/dist/channels/slack/external-policy.js +6 -6
- package/dist/channels/slack/inbound.d.ts +5 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +13 -0
- package/dist/channels/slack/index.d.ts +3 -0
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +3 -0
- package/dist/channels/slack/log.d.ts +1 -1
- package/dist/channels/slack/log.js +1 -1
- package/dist/channels/slack/self-identity.d.ts +15 -0
- package/dist/channels/slack/self-identity.d.ts.map +1 -0
- package/dist/channels/slack/self-identity.js +48 -0
- package/dist/channels/slack/sender-name.d.ts +17 -0
- package/dist/channels/slack/sender-name.d.ts.map +1 -0
- package/dist/channels/slack/sender-name.js +87 -0
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/user-info.d.ts +15 -0
- package/dist/channels/slack/user-info.d.ts.map +1 -0
- package/dist/channels/slack/user-info.js +57 -0
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.CJLKDVza.js → app.oyjtOr3W.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.BW9mrQmq.js → VPLocalSearchBox.D0P6J_UJ.js} +1 -1
- package/dist/docs/assets/chunks/{arc.D8ZOvM1m.js → arc.B0LY1J1h.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CXEKhLW-.js → architectureDiagram-Q4EWVU46.dPduLUxY.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.BJkVKblr.js → baseUniq.B_Ohm21h.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DQDbHxor.js → blockDiagram-DXYQGD6D.B4zcanaJ.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.ByMD6LYM.js → c4Diagram-AHTNJAMY.D9Iw21nx.js} +1 -1
- package/dist/docs/assets/chunks/channel.CRUyWDV-.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.Dtq1aVI9.js → chunk-4BX2VUAB.DDVwRShI.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BL_XrkoQ.js → chunk-4TB4RGXK.DsYcdn1i.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.BDPXu94_.js → chunk-55IACEB6.BzzQvcYp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DhGOQj4k.js → chunk-EDXVE4YY.BMiXZ7FX.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DSF5nr8v.js → chunk-FMBD7UC4.D_mBcLoc.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Day7wayw.js → chunk-OYMX7WX6.CMVjWVMx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.CpBEC0zA.js → chunk-QZHKN3VN.BG-FrPv9.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.X_7rY1rx.js → chunk-YZCP3GAM.CkFE1ap3.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +1 -0
- package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVRmi2ko.js → cose-bilkent-S5V4N54A.BVNnCTvY.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Dei9oslB.js → dagre-KV5264BT.CDN5PR9l.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD._M-efGt7.js → diagram-5BDNPKRD.DQRUlT-i.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.D1Vmhfsj.js → diagram-G4DWMVQ6.CoeblYQT.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.cE1bmvAC.js → diagram-MMDJMWI5.DW3ymjl0.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.DkXAfznP.js → diagram-TYMM5635.BP0uN4Jw.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DH_pSwPg.js → erDiagram-SMLLAGMA.DVFUWEn4.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.kAWVN9j1.js → flowDiagram-DWJPFMVM.HU-eHspv.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.8r0w49-p.js → ganttDiagram-T4ZO3ILL.DHNhXijY.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.BDa7Bi1i.js → gitGraphDiagram-UUTBAWPF.DkISXcO3.js} +1 -1
- package/dist/docs/assets/chunks/{graph.BMPXHz_B.js → graph.CCV0fuRR.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.BmlcqewS.js → infoDiagram-42DDH7IO.bgILzOoc.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CVSEQSul.js → ishikawaDiagram-UXIWVN3A.CuryXC0F.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BpeWJ5n-.js → journeyDiagram-VCZTEJTY.BL1Pr-wu.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.DHbDXuxB.js → kanban-definition-6JOO6SKY.BbGjvk4l.js} +1 -1
- package/dist/docs/assets/chunks/{layout.CzrCDgkP.js → layout.C4PfdldS.js} +1 -1
- package/dist/docs/assets/chunks/{linear.HwBsflwN.js → linear.C3xD1T6X.js} +1 -1
- package/dist/docs/assets/chunks/{min.DqGHolT3.js → min.CzgRAQ9c.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.ZYGlOawh.js → mindmap-definition-QFDTVHPH.CA9rSWum.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.C2KRXlNR.js → pieDiagram-DEJITSTG.B8MprgJu.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CHj3Qefp.js → quadrantDiagram-34T5L4WZ.DndDwbKT.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.B1L4Tf7k.js → requirementDiagram-MS252O5E.Zhfgwlnn.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.dNR2yi1B.js → sankeyDiagram-XADWPNL6.B6RRm6N5.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BrvQ3C6m.js → sequenceDiagram-FGHM5R23.Bfmz-1PN.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BtehEykA.js → stateDiagram-FHFEXIEX.gbrdNqgj.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +1 -0
- package/dist/docs/assets/chunks/{theme.BDHBZUkP.js → theme.gpWjytMh.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bn7nhqEN.js → timeline-definition-GMOUNBTQ.Bl1l7M1f.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.DKhc38sz.js → vennDiagram-DHZGUBPP.Dfle4U0d.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.DOXQ0w8J.js → wardley-RL74JXVD.BJrCW6xc.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.Bbq5B2Ic.js → wardleyDiagram-NUSXRM2D.CM_4lmvZ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B77HE1K8.js → xychartDiagram-5P7HB3ND.CHT5X28R.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.BsgDqYPh.js → reference_cli.md.GwugN3n-.js} +5 -5
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +35 -35
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +35 -35
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +35 -35
- package/dist/docs/guides/gitlab.html +35 -35
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +20 -9
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -39
- package/dist/docs/reference/cli.md +20 -9
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +38 -38
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +35 -35
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +14 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +5 -0
- package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts +17 -0
- package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +99 -0
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts +19 -0
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +71 -0
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +9 -5
- package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +3 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -2
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +1 -1
- package/dist/files-backends/cursor-hosted.d.ts +22 -83
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +46 -160
- package/dist/files.d.ts +9 -32
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +7 -32
- package/dist/internal/artifacts-store.d.ts +13 -25
- package/dist/internal/artifacts-store.d.ts.map +1 -1
- package/dist/internal/artifacts-store.js +25 -46
- package/dist/internal/cli-ax.d.ts +10 -17
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +87 -155
- package/dist/internal/cli-bitbucket.js +5 -5
- package/dist/internal/cli-deploy.d.ts +4 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +117 -20
- package/dist/internal/cli-github.js +13 -13
- package/dist/internal/cli-gitlab.js +5 -5
- package/dist/internal/continuation-identity.d.ts +2 -0
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +4 -0
- package/dist/internal/conversation-mirror.d.ts +9 -38
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +62 -68
- package/dist/internal/cursor/account-mcp.d.ts +1 -1
- package/dist/internal/cursor/account-mcp.js +1 -1
- package/dist/internal/cursor/backend-client.js +1 -1
- package/dist/internal/cursor/github-credentials.js +3 -3
- package/dist/internal/cursor/hosted-bound-secrets.d.ts +6 -2
- package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-bound-secrets.js +13 -2
- package/dist/internal/cursor/hosted-store-secrets.d.ts +13 -37
- package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +13 -37
- package/dist/internal/cursor/store-api-client.d.ts +17 -39
- package/dist/internal/cursor/store-api-client.d.ts.map +1 -1
- package/dist/internal/cursor/store-api-client.js +15 -37
- package/dist/internal/cursor-deployment-relay.js +3 -3
- package/dist/internal/cursor-event-relay.js +1 -1
- package/dist/internal/cursor-relay-core.d.ts +1 -1
- package/dist/internal/cursor-relay-core.d.ts.map +1 -1
- package/dist/internal/deploy-client.d.ts +55 -63
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +48 -28
- package/dist/internal/discovery/agent.d.ts +1 -1
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +4 -0
- package/dist/internal/discovery/extensions.d.ts +2 -1
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +11 -1
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +1 -0
- package/dist/internal/distribution.d.ts +2 -2
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +3 -3
- package/dist/internal/eval-run-store.js +8 -8
- package/dist/internal/framework-file-storage.d.ts +10 -34
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +12 -39
- package/dist/internal/framework-storage-selection.d.ts +10 -46
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +15 -64
- package/dist/internal/github-fanout.js +2 -2
- package/dist/internal/handleAgentServeTrigger.d.ts +5 -8
- package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
- package/dist/internal/handleAgentServeTrigger.js +5 -8
- package/dist/internal/host-files.js +6 -9
- package/dist/internal/host-platforms.js +5 -5
- package/dist/internal/hosted-catch.d.ts +3 -2
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +27 -9
- package/dist/internal/hosted-delivery-protocol.d.ts +31 -8
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +102 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +32 -12
- package/dist/internal/hosted-execution-diag.d.ts +13 -24
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +11 -20
- package/dist/internal/hosted-execution-flush.d.ts +22 -10
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
- package/dist/internal/hosted-execution-flush.js +45 -9
- package/dist/internal/hosted-managed-automation.js +5 -5
- package/dist/internal/hosting.d.ts +5 -10
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +5 -10
- package/dist/internal/legacy-command-guard.d.ts +1 -4
- package/dist/internal/legacy-command-guard.d.ts.map +1 -1
- package/dist/internal/legacy-command-guard.js +2 -11
- package/dist/internal/listen-port.js +1 -1
- package/dist/internal/local-control-plane.js +6 -6
- package/dist/internal/logs-client.d.ts +20 -1
- package/dist/internal/logs-client.d.ts.map +1 -1
- package/dist/internal/logs-client.js +89 -1
- package/dist/internal/mcp-endpoint.js +1 -1
- package/dist/internal/otel/collector.js +1 -1
- package/dist/internal/otel/runtime.js +13 -13
- package/dist/internal/platform-schedule-sync.js +2 -2
- package/dist/internal/playground/toolchain.js +6 -6
- package/dist/internal/process-memory-telemetry.js +2 -2
- package/dist/internal/reminder-runner.d.ts +8 -3
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +51 -52
- package/dist/internal/resolve-prod-target.d.ts +1 -12
- package/dist/internal/resolve-prod-target.d.ts.map +1 -1
- package/dist/internal/resolve-prod-target.js +2 -32
- package/dist/internal/resolved-connections.js +8 -8
- package/dist/internal/run-client.d.ts +4 -3
- package/dist/internal/run-client.d.ts.map +1 -1
- package/dist/internal/run-client.js +98 -61
- package/dist/internal/runtime-dispatch-runner.d.ts +1 -0
- package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
- package/dist/internal/runtime-dispatch-runner.js +7 -1
- package/dist/internal/schedule-runner.js +1 -1
- package/dist/internal/sdk-runner.d.ts +4 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +37 -22
- package/dist/internal/server.d.ts +2 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +39 -38
- package/dist/internal/session-engine.d.ts +31 -44
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +67 -83
- package/dist/internal/session-run-log.d.ts +10 -24
- package/dist/internal/session-run-log.d.ts.map +1 -1
- package/dist/internal/session-run-log.js +13 -27
- package/dist/internal/sessions-client.d.ts.map +1 -1
- package/dist/internal/sessions-client.js +6 -3
- package/dist/internal/skills-sync.d.ts +3 -5
- package/dist/internal/skills-sync.d.ts.map +1 -1
- package/dist/internal/skills-sync.js +3 -5
- package/dist/internal/start-log-store.d.ts +7 -18
- package/dist/internal/start-log-store.d.ts.map +1 -1
- package/dist/internal/start-log-store.js +47 -24
- package/dist/internal/storage-coordinator.d.ts +7 -10
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +18 -20
- package/dist/internal/storage-roles.d.ts +5 -0
- package/dist/internal/storage-roles.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.d.ts +12 -33
- package/dist/internal/store-api-protocol.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.js +6 -22
- package/dist/internal/store-mirror.d.ts +4 -5
- package/dist/internal/store-mirror.d.ts.map +1 -1
- package/dist/internal/store-mirror.js +6 -8
- package/dist/internal/turn-lease-store.d.ts +12 -5
- package/dist/internal/turn-lease-store.d.ts.map +1 -1
- package/dist/internal/turn-lease-store.js +61 -8
- package/dist/internal/v2-hosting.d.ts +4 -7
- package/dist/internal/v2-hosting.d.ts.map +1 -1
- package/dist/internal/v2-hosting.js +4 -7
- package/dist/internal/workspace-sync.d.ts +3 -6
- package/dist/internal/workspace-sync.d.ts.map +1 -1
- package/dist/internal/workspace-sync.js +3 -6
- package/dist/internal/workspace.d.ts +10 -16
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +9 -14
- package/dist/memory.d.ts +17 -43
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +34 -80
- package/dist/playground/assets/index-DPKLl4C_.css +1 -0
- package/dist/playground/assets/index-MijLHTbB.js +71 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted-v2.d.ts +8 -36
- package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted-v2.js +9 -37
- package/dist/storage-backends/cursor-hosted.d.ts +17 -30
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +14 -27
- package/dist/storage-protocol.d.ts +13 -38
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +14 -39
- package/dist/types.d.ts +29 -30
- package/dist/types.d.ts.map +1 -1
- package/docs/reference/cli.md +20 -9
- package/package.json +1 -1
- package/templates/pr-autofixer/bot/instructions.md +3 -3
- package/dist/docs/assets/chunks/@localSearchIndexroot.Bq-pxRXm.js +0 -1
- package/dist/docs/assets/chunks/channel.DCU8W1RP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DwpXsM06.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DwpXsM06.js +0 -1
- package/dist/docs/assets/chunks/clone.DH6Mx2zB.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.kzD0-U89.js +0 -1
- package/dist/docs/assets/reference_cli.md.BsgDqYPh.lean.js +0 -1
- package/dist/playground/assets/index-6BbTPnaT.css +0 -1
- package/dist/playground/assets/index-CI7FAmOP.js +0 -71
- /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
|
@@ -25,6 +25,8 @@ import { describeSlackEventShape, formatSlackContextBlock, parseAppHomeOpened, p
|
|
|
25
25
|
import { defaultSlackLog } from "./log.js";
|
|
26
26
|
import { paintTurnStart, retractTurnStart } from "./paint-start.js";
|
|
27
27
|
import { adoptPlaceholder, retractPlaceholderMessage, retractPlaceholderSlot, startPlaceholder, } from "./placeholder.js";
|
|
28
|
+
import { resolveSlackSelfIdentity } from "./self-identity.js";
|
|
29
|
+
import { resolveSlackSenderName } from "./sender-name.js";
|
|
28
30
|
import { isWholeMessageStop } from "./stop.js";
|
|
29
31
|
import { EMPTY_SLACK_THREAD_CONTEXT, loadSlackThreadContext, loadSlackThreadDelta, } from "./thread-context.js";
|
|
30
32
|
const FOLLOWUP_TYPING = "Saw your follow-up…";
|
|
@@ -126,10 +128,10 @@ function slackSessionContinuation(identity, channelId, threadTs) {
|
|
|
126
128
|
}
|
|
127
129
|
export function dispatchInboundMessage(args) {
|
|
128
130
|
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
|
|
130
|
-
var
|
|
131
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
|
|
132
|
+
var _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20;
|
|
131
133
|
const { message, kind } = args;
|
|
132
|
-
const log = (
|
|
134
|
+
const log = (_6 = args.log) !== null && _6 !== void 0 ? _6 : defaultSlackLog;
|
|
133
135
|
const binding = buildSlackBinding({
|
|
134
136
|
botToken: (_a = args.credentials) === null || _a === void 0 ? void 0 : _a.botToken,
|
|
135
137
|
channelId: message.channelId,
|
|
@@ -210,7 +212,7 @@ export function dispatchInboundMessage(args) {
|
|
|
210
212
|
log,
|
|
211
213
|
});
|
|
212
214
|
});
|
|
213
|
-
const userId = (
|
|
215
|
+
const userId = (_7 = (_d = message.author) === null || _d === void 0 ? void 0 : _d.userId) !== null && _7 !== void 0 ? _7 : "";
|
|
214
216
|
const teamId = message.teamId;
|
|
215
217
|
let membership;
|
|
216
218
|
if (args.blockExternals !== false && ((_e = message.author) === null || _e === void 0 ? void 0 : _e.isBot) !== true) {
|
|
@@ -268,7 +270,7 @@ export function dispatchInboundMessage(args) {
|
|
|
268
270
|
try {
|
|
269
271
|
yield binding.thread.startTyping(interrupted ? "Stopped." : "Nothing to stop.");
|
|
270
272
|
}
|
|
271
|
-
catch (
|
|
273
|
+
catch (_21) {
|
|
272
274
|
// best-effort status
|
|
273
275
|
}
|
|
274
276
|
yield retractUnadoptedHandoff();
|
|
@@ -279,7 +281,7 @@ export function dispatchInboundMessage(args) {
|
|
|
279
281
|
// whatever it says, and may open with `eval` while talking to someone else.
|
|
280
282
|
const evalCommandsEnabled = args.evalCommandsEnabled !== false && (kind === "app_mention" || kind === "direct_message");
|
|
281
283
|
const evalDirective = evalCommandsEnabled && args.host.evals !== undefined
|
|
282
|
-
? ((
|
|
284
|
+
? ((_8 = parseSlackEvalDirective(message.text)) !== null && _8 !== void 0 ? _8 : parseSlackEvalDirective(message.markdown))
|
|
283
285
|
: null;
|
|
284
286
|
if (evalDirective !== null && args.host.evals !== undefined) {
|
|
285
287
|
if (membership !== undefined && (yield membership)) {
|
|
@@ -370,7 +372,7 @@ export function dispatchInboundMessage(args) {
|
|
|
370
372
|
const excludeThreadTimestamps = [
|
|
371
373
|
message.ts,
|
|
372
374
|
...(handoffInThread === undefined ? [] : [handoffInThread.messageTs]),
|
|
373
|
-
...((
|
|
375
|
+
...((_9 = decision.excludeThreadTimestamps) !== null && _9 !== void 0 ? _9 : []),
|
|
374
376
|
];
|
|
375
377
|
const mergeMessages = [triggeringMergeMessage(message)];
|
|
376
378
|
const continuationExists = existsP === undefined ? false : yield existsP;
|
|
@@ -378,14 +380,19 @@ export function dispatchInboundMessage(args) {
|
|
|
378
380
|
const afterTs = loadThread && hasSession && args.getContinuationLastBotMessageTs !== undefined
|
|
379
381
|
? yield args.getContinuationLastBotMessageTs(continuation)
|
|
380
382
|
: undefined;
|
|
383
|
+
const selfIdentity = resolveSlackSelfIdentity((_m = args.credentials) === null || _m === void 0 ? void 0 : _m.botToken);
|
|
384
|
+
const senderName = resolveSlackSenderName({
|
|
385
|
+
botToken: (_o = args.credentials) === null || _o === void 0 ? void 0 : _o.botToken,
|
|
386
|
+
author: message.author,
|
|
387
|
+
});
|
|
381
388
|
// Channel mentions: cold <slack_thread>, warm <slack_thread_delta>.
|
|
382
389
|
const threadTask = !loadThread
|
|
383
390
|
? Promise.resolve(EMPTY_SLACK_THREAD_CONTEXT)
|
|
384
391
|
: hasSession
|
|
385
|
-
? loadSlackThreadDelta(Object.assign(Object.assign({ botToken: (
|
|
392
|
+
? loadSlackThreadDelta(Object.assign(Object.assign({ botToken: (_p = args.credentials) === null || _p === void 0 ? void 0 : _p.botToken, channelId: message.channelId, threadTs: message.threadTs }, (afterTs === undefined ? {} : { afterTs })), { excludeTs: excludeThreadTimestamps, mergeMessages,
|
|
386
393
|
log }))
|
|
387
394
|
: loadSlackThreadContext({
|
|
388
|
-
botToken: (
|
|
395
|
+
botToken: (_q = args.credentials) === null || _q === void 0 ? void 0 : _q.botToken,
|
|
389
396
|
channelId: message.channelId,
|
|
390
397
|
threadTs: message.threadTs,
|
|
391
398
|
excludeTs: excludeThreadTimestamps,
|
|
@@ -398,14 +405,14 @@ export function dispatchInboundMessage(args) {
|
|
|
398
405
|
if (painted !== undefined) {
|
|
399
406
|
yield painted;
|
|
400
407
|
yield retractTurnStart({
|
|
401
|
-
botToken: (
|
|
408
|
+
botToken: (_r = args.credentials) === null || _r === void 0 ? void 0 : _r.botToken,
|
|
402
409
|
channelId: message.channelId,
|
|
403
410
|
threadTs: message.threadTs,
|
|
404
|
-
ack: (
|
|
411
|
+
ack: (_10 = args.ack) !== null && _10 !== void 0 ? _10 : "",
|
|
405
412
|
log,
|
|
406
413
|
});
|
|
407
414
|
}
|
|
408
|
-
yield (
|
|
415
|
+
yield (_s = args.host.slackNudges) === null || _s === void 0 ? void 0 : _s.releaseAsk(message.channelId, message.ts);
|
|
409
416
|
yield retractAdoptedPlaceholder();
|
|
410
417
|
return;
|
|
411
418
|
}
|
|
@@ -415,7 +422,7 @@ export function dispatchInboundMessage(args) {
|
|
|
415
422
|
message,
|
|
416
423
|
threadFiles: thread.files,
|
|
417
424
|
decision,
|
|
418
|
-
botToken: (
|
|
425
|
+
botToken: (_t = args.credentials) === null || _t === void 0 ? void 0 : _t.botToken,
|
|
419
426
|
log,
|
|
420
427
|
});
|
|
421
428
|
if ((message.files !== undefined && message.files.length > 0) || threadFileCount > 0) {
|
|
@@ -424,18 +431,19 @@ export function dispatchInboundMessage(args) {
|
|
|
424
431
|
channel: message.channelId,
|
|
425
432
|
thread_ts: message.threadTs,
|
|
426
433
|
thread_files: threadFileCount,
|
|
427
|
-
images: (
|
|
428
|
-
workspace_files: Object.keys((
|
|
434
|
+
images: (_11 = (_u = media.images) === null || _u === void 0 ? void 0 : _u.length) !== null && _11 !== void 0 ? _11 : 0,
|
|
435
|
+
workspace_files: Object.keys((_12 = media.workspaceFiles) !== null && _12 !== void 0 ? _12 : {}).length,
|
|
429
436
|
event_id: args.eventId,
|
|
430
437
|
});
|
|
431
438
|
}
|
|
432
439
|
if (threadContext !== undefined) {
|
|
433
440
|
log.info(hasSession ? "thread delta loaded" : "thread context loaded", Object.assign({ kind, channel: message.channelId, thread_ts: message.threadTs, chars: threadContext.length, event_id: args.eventId }, (afterTs === undefined ? {} : { after_ts: afterTs })));
|
|
434
441
|
}
|
|
442
|
+
const [self, userName] = yield Promise.all([selfIdentity, senderName]);
|
|
435
443
|
const prompt = [
|
|
436
|
-
formatSlackContextBlock(Object.assign(Object.assign({ userId: (
|
|
444
|
+
formatSlackContextBlock(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ userId: (_13 = (_v = message.author) === null || _v === void 0 ? void 0 : _v.userId) !== null && _13 !== void 0 ? _13 : "", channelId: message.channelId, threadTs: message.threadTs }, (userName === undefined ? {} : { userName })), (((_w = message.author) === null || _w === void 0 ? void 0 : _w.isBot) === true ? { userIsBot: true } : {})), (((_x = message.author) === null || _x === void 0 ? void 0 : _x.botId) === undefined ? {} : { userBotId: message.author.botId })), (message.teamId === undefined ? {} : { teamId: message.teamId })), (self === undefined ? {} : { selfUserId: self.userId })), ((self === null || self === void 0 ? void 0 : self.name) === undefined ? {} : { selfName: self.name }))),
|
|
437
445
|
...(threadContext === undefined ? [] : [threadContext]),
|
|
438
|
-
...((
|
|
446
|
+
...((_14 = decision.context) !== null && _14 !== void 0 ? _14 : []),
|
|
439
447
|
"",
|
|
440
448
|
media.userText,
|
|
441
449
|
]
|
|
@@ -450,11 +458,11 @@ export function dispatchInboundMessage(args) {
|
|
|
450
458
|
const placeholder = !adoptedPlaceholder && hasPlaceholder && (!hosted || hostedFollowup)
|
|
451
459
|
? startPlaceholder({
|
|
452
460
|
line: placeholderLine,
|
|
453
|
-
botToken: (
|
|
461
|
+
botToken: (_y = args.credentials) === null || _y === void 0 ? void 0 : _y.botToken,
|
|
454
462
|
channelId: message.channelId,
|
|
455
463
|
threadTs: message.threadTs,
|
|
456
464
|
log,
|
|
457
|
-
recipientUserId: (
|
|
465
|
+
recipientUserId: (_z = message.author) === null || _z === void 0 ? void 0 : _z.userId,
|
|
458
466
|
recipientTeamId: message.teamId,
|
|
459
467
|
})
|
|
460
468
|
: undefined;
|
|
@@ -462,19 +470,19 @@ export function dispatchInboundMessage(args) {
|
|
|
462
470
|
const state = emptySlackChannelState({
|
|
463
471
|
channelId: message.channelId,
|
|
464
472
|
threadTs: message.threadTs,
|
|
465
|
-
teamId: (
|
|
466
|
-
triggeringUserId: (
|
|
473
|
+
teamId: (_15 = message.teamId) !== null && _15 !== void 0 ? _15 : null,
|
|
474
|
+
triggeringUserId: (_16 = (_0 = message.author) === null || _0 === void 0 ? void 0 : _0.userId) !== null && _16 !== void 0 ? _16 : null,
|
|
467
475
|
startPainted: paintedStart,
|
|
468
476
|
placeholderPosted: posted,
|
|
469
477
|
});
|
|
470
478
|
const sendOptions = Object.assign(Object.assign({ auth: decision.auth }, sendPatch), { admission: "coalesce", coalesceSourceTs: message.ts, state: state, refreshState: slackWakeChannelState({
|
|
471
479
|
channelId: message.channelId,
|
|
472
480
|
threadTs: message.threadTs,
|
|
473
|
-
teamId: (
|
|
474
|
-
triggeringUserId: (
|
|
481
|
+
teamId: (_17 = message.teamId) !== null && _17 !== void 0 ? _17 : null,
|
|
482
|
+
triggeringUserId: (_18 = (_1 = message.author) === null || _1 === void 0 ? void 0 : _1.userId) !== null && _18 !== void 0 ? _18 : null,
|
|
475
483
|
startPainted: paintedStart,
|
|
476
484
|
placeholderPosted: posted,
|
|
477
|
-
}), title: (
|
|
485
|
+
}), title: (_19 = decision.title) !== null && _19 !== void 0 ? _19 : `slack:${message.channelId}:${message.threadTs}`, workspaceDir: decision.workspaceDir, workspaceFiles: media.workspaceFiles, images: media.images, cloud: decision.cloud, sdkAgentId: decision.sdkAgentId });
|
|
478
486
|
try {
|
|
479
487
|
const session = yield args.send(prompt, sendOptions);
|
|
480
488
|
if (isDeferredChannelSession(session)) {
|
|
@@ -511,11 +519,11 @@ export function dispatchInboundMessage(args) {
|
|
|
511
519
|
});
|
|
512
520
|
if (!steeringEnabled()) {
|
|
513
521
|
try {
|
|
514
|
-
yield (
|
|
522
|
+
yield (_2 = args.host.slackNudges) === null || _2 === void 0 ? void 0 : _2.append({
|
|
515
523
|
continuationKey: continuation,
|
|
516
524
|
sourceTs: message.ts,
|
|
517
525
|
text: media.userText,
|
|
518
|
-
author: (
|
|
526
|
+
author: (_3 = message.author) === null || _3 === void 0 ? void 0 : _3.userName,
|
|
519
527
|
});
|
|
520
528
|
}
|
|
521
529
|
catch (nudgeError) {
|
|
@@ -541,7 +549,7 @@ export function dispatchInboundMessage(args) {
|
|
|
541
549
|
}
|
|
542
550
|
}
|
|
543
551
|
catch (error) {
|
|
544
|
-
yield (
|
|
552
|
+
yield (_4 = args.host.slackNudges) === null || _4 === void 0 ? void 0 : _4.releaseAsk(message.channelId, message.ts);
|
|
545
553
|
if (placeholder !== undefined) {
|
|
546
554
|
yield placeholder.retract();
|
|
547
555
|
}
|
|
@@ -549,10 +557,10 @@ export function dispatchInboundMessage(args) {
|
|
|
549
557
|
if (painted !== undefined) {
|
|
550
558
|
yield painted;
|
|
551
559
|
yield retractTurnStart({
|
|
552
|
-
botToken: (
|
|
560
|
+
botToken: (_5 = args.credentials) === null || _5 === void 0 ? void 0 : _5.botToken,
|
|
553
561
|
channelId: message.channelId,
|
|
554
562
|
threadTs: message.threadTs,
|
|
555
|
-
ack: (
|
|
563
|
+
ack: (_20 = args.ack) !== null && _20 !== void 0 ? _20 : "",
|
|
556
564
|
log,
|
|
557
565
|
});
|
|
558
566
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-policy.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/external-policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"external-policy.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/external-policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,KAAK,aAAa,GAAG;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACxC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;CACrB,GAAG,OAAO,CAcV;AAID,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C;AAED,4EAA4E;AAC5E,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BnB"}
|
|
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
12
|
});
|
|
13
13
|
};
|
|
14
|
-
import {
|
|
14
|
+
import { fetchSlackUserInfo, resetSlackUserInfoCache } from "./user-info.js";
|
|
15
15
|
/** Pure classifier over a `users.info` user object. Fails open to external. */
|
|
16
16
|
export function classifySlackUserExternality(args) {
|
|
17
17
|
var _a;
|
|
@@ -29,6 +29,7 @@ export function classifySlackUserExternality(args) {
|
|
|
29
29
|
const classified = new Map();
|
|
30
30
|
export function resetExternalSenderCache() {
|
|
31
31
|
classified.clear();
|
|
32
|
+
resetSlackUserInfoCache();
|
|
32
33
|
}
|
|
33
34
|
/** Lookup + classify. Empty userId / API failure → external. Hits cache. */
|
|
34
35
|
export function isExternalSlackSender(args) {
|
|
@@ -42,17 +43,16 @@ export function isExternalSlackSender(args) {
|
|
|
42
43
|
return cached;
|
|
43
44
|
}
|
|
44
45
|
try {
|
|
45
|
-
const
|
|
46
|
+
const user = yield fetchSlackUserInfo({
|
|
46
47
|
botToken: args.botToken,
|
|
47
|
-
|
|
48
|
-
body: { user: args.userId },
|
|
48
|
+
userId: args.userId,
|
|
49
49
|
});
|
|
50
|
-
if (
|
|
50
|
+
if (user === undefined) {
|
|
51
51
|
return true;
|
|
52
52
|
}
|
|
53
53
|
const external = classifySlackUserExternality({
|
|
54
54
|
slackTeamId: args.slackTeamId,
|
|
55
|
-
user:
|
|
55
|
+
user: user,
|
|
56
56
|
});
|
|
57
57
|
classified.set(key, external);
|
|
58
58
|
return external;
|
|
@@ -88,11 +88,16 @@ export interface ParseChannelMessageOptions {
|
|
|
88
88
|
* pending dispatch.
|
|
89
89
|
*/
|
|
90
90
|
export declare function parseChannelMessageEvent(body: unknown, options?: ParseChannelMessageOptions): SlackChannelMessageEvent | null;
|
|
91
|
+
/** `user_*` is whoever wrote the message, person or bot; `self_*` is the agent reading it. */
|
|
91
92
|
export declare function formatSlackContextBlock(args: {
|
|
92
93
|
userId: string;
|
|
93
94
|
userName?: string;
|
|
95
|
+
userIsBot?: boolean;
|
|
96
|
+
userBotId?: string;
|
|
94
97
|
channelId: string;
|
|
95
98
|
threadTs: string;
|
|
96
99
|
teamId?: string;
|
|
100
|
+
selfUserId?: string;
|
|
101
|
+
selfName?: string;
|
|
97
102
|
}): string;
|
|
98
103
|
//# sourceMappingURL=inbound.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/inbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAe5D;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAOA;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASxD;AA8CD,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,sBAAsB,GAC/B,YAAY,GAAG,IAAI,CAsBrB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAsB3E;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,2BAA2B,GAAG,IAAI,CA0B7F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBzE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CA4B1E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAkD1E;AAED,4EAA4E;AAC5E,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,0BAA0B,GACnC,wBAAwB,GAAG,IAAI,CAoDjC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/inbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAe5D;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAOA;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASxD;AA8CD,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,sBAAsB,GAC/B,YAAY,GAAG,IAAI,CAsBrB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAsB3E;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,2BAA2B,GAAG,IAAI,CA0B7F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBzE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CA4B1E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAkD1E;AAED,4EAA4E;AAC5E,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,0BAA0B,GACnC,wBAAwB,GAAG,IAAI,CAoDjC;AAED,8FAA8F;AAC9F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAwBT"}
|
|
@@ -299,16 +299,29 @@ export function parseChannelMessageEvent(body, options) {
|
|
|
299
299
|
const message = buildSlackMessage(event, teamId);
|
|
300
300
|
return message === null ? null : { kind: "post", message };
|
|
301
301
|
}
|
|
302
|
+
/** `user_*` is whoever wrote the message, person or bot; `self_*` is the agent reading it. */
|
|
302
303
|
export function formatSlackContextBlock(args) {
|
|
303
304
|
const lines = ["<slack_context>", `user_id: ${args.userId}`];
|
|
304
305
|
if (args.userName !== undefined) {
|
|
305
306
|
lines.push(`user_name: ${args.userName}`);
|
|
306
307
|
}
|
|
308
|
+
if (args.userIsBot === true) {
|
|
309
|
+
lines.push("user_is_bot: true");
|
|
310
|
+
}
|
|
311
|
+
if (args.userBotId !== undefined) {
|
|
312
|
+
lines.push(`user_bot_id: ${args.userBotId}`);
|
|
313
|
+
}
|
|
307
314
|
lines.push(`channel_id: ${args.channelId}`);
|
|
308
315
|
lines.push(`thread_ts: ${args.threadTs}`);
|
|
309
316
|
if (args.teamId !== undefined) {
|
|
310
317
|
lines.push(`team_id: ${args.teamId}`);
|
|
311
318
|
}
|
|
319
|
+
if (args.selfUserId !== undefined) {
|
|
320
|
+
lines.push(`self_user_id: ${args.selfUserId}`);
|
|
321
|
+
}
|
|
322
|
+
if (args.selfName !== undefined) {
|
|
323
|
+
lines.push(`self_name: ${args.selfName}`);
|
|
324
|
+
}
|
|
312
325
|
lines.push("</slack_context>");
|
|
313
326
|
return lines.join("\n");
|
|
314
327
|
}
|
|
@@ -41,6 +41,8 @@ export * from "./message-body.js";
|
|
|
41
41
|
export * from "./nudge-carrier.js";
|
|
42
42
|
export * from "./nudge-store.js";
|
|
43
43
|
export * from "./pr-ref.js";
|
|
44
|
+
export * from "./self-identity.js";
|
|
45
|
+
export * from "./sender-name.js";
|
|
44
46
|
export * from "./setup.js";
|
|
45
47
|
export * from "./slack-channel.js";
|
|
46
48
|
export * from "./socket-mode.js";
|
|
@@ -50,4 +52,5 @@ export * from "./thread-context.js";
|
|
|
50
52
|
export * from "./tool-approval-events.js";
|
|
51
53
|
export { defaultToolCardDetails } from "./tool-cards.js";
|
|
52
54
|
export * from "./types.js";
|
|
55
|
+
export * from "./user-info.js";
|
|
53
56
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
@@ -41,6 +41,8 @@ export * from "./message-body.js";
|
|
|
41
41
|
export * from "./nudge-carrier.js";
|
|
42
42
|
export * from "./nudge-store.js";
|
|
43
43
|
export * from "./pr-ref.js";
|
|
44
|
+
export * from "./self-identity.js";
|
|
45
|
+
export * from "./sender-name.js";
|
|
44
46
|
export * from "./setup.js";
|
|
45
47
|
export * from "./slack-channel.js";
|
|
46
48
|
export * from "./socket-mode.js";
|
|
@@ -50,3 +52,4 @@ export * from "./thread-context.js";
|
|
|
50
52
|
export * from "./tool-approval-events.js";
|
|
51
53
|
export { defaultToolCardDetails } from "./tool-cards.js";
|
|
52
54
|
export * from "./types.js";
|
|
55
|
+
export * from "./user-info.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shared logging for the Slack channel pack.
|
|
3
3
|
*
|
|
4
4
|
* Uses the same `(line: string) => void` contract as ServeOptions.logger.
|
|
5
|
-
* Lines always start with `[
|
|
5
|
+
* Lines always start with `[bdk/slack]` so Socket Mode docs and greps
|
|
6
6
|
* keep working. Optional key=value fields carry correlation ids.
|
|
7
7
|
*/
|
|
8
8
|
export type SlackLogWrite = (line: string) => void;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shared logging for the Slack channel pack.
|
|
3
3
|
*
|
|
4
4
|
* Uses the same `(line: string) => void` contract as ServeOptions.logger.
|
|
5
|
-
* Lines always start with `[
|
|
5
|
+
* Lines always start with `[bdk/slack]` so Socket Mode docs and greps
|
|
6
6
|
* keep working. Optional key=value fields carry correlation ids.
|
|
7
7
|
*/
|
|
8
8
|
import { SLACK_LOG_PREFIX } from "../../internal/distribution.js";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The agent's own Slack identity, from `auth.test`. A turn's prompt carries
|
|
3
|
+
* it so the model can tell which `<@U…>` mention is itself.
|
|
4
|
+
*/
|
|
5
|
+
import type { SlackBotToken } from "./types.js";
|
|
6
|
+
export interface SlackSelfIdentity {
|
|
7
|
+
/** The app's bot *user* id (`U…`) — what `<@…>` mentions carry. */
|
|
8
|
+
userId: string;
|
|
9
|
+
/** The app's handle, e.g. `debug` for `@debug`. */
|
|
10
|
+
name?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function resetSlackSelfIdentityCache(): void;
|
|
13
|
+
/** Cached per token. A missing token or any failure resolves to undefined. */
|
|
14
|
+
export declare function resolveSlackSelfIdentity(botToken: SlackBotToken | undefined): Promise<SlackSelfIdentity | undefined>;
|
|
15
|
+
//# sourceMappingURL=self-identity.d.ts.map
|
|
@@ -0,0 +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;AAEhD,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED,8EAA8E;AAC9E,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA4BxC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The agent's own Slack identity, from `auth.test`. A turn's prompt carries
|
|
3
|
+
* it so the model can tell which `<@U…>` mention is itself.
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
import { callSlackApi } from "./api.js";
|
|
15
|
+
const identities = new Map();
|
|
16
|
+
export function resetSlackSelfIdentityCache() {
|
|
17
|
+
identities.clear();
|
|
18
|
+
}
|
|
19
|
+
/** Cached per token. A missing token or any failure resolves to undefined. */
|
|
20
|
+
export function resolveSlackSelfIdentity(botToken) {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
if (botToken === undefined) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const cached = identities.get(botToken);
|
|
26
|
+
if (cached !== undefined) {
|
|
27
|
+
return cached;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const result = yield callSlackApi({
|
|
31
|
+
botToken,
|
|
32
|
+
operation: "auth.test",
|
|
33
|
+
body: {},
|
|
34
|
+
});
|
|
35
|
+
const userId = typeof result.user_id === "string" ? result.user_id : "";
|
|
36
|
+
if (result.ok !== true || userId === "") {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const name = typeof result.user === "string" && result.user !== "" ? result.user : undefined;
|
|
40
|
+
const identity = Object.assign({ userId }, (name === undefined ? {} : { name }));
|
|
41
|
+
identities.set(botToken, identity);
|
|
42
|
+
return identity;
|
|
43
|
+
}
|
|
44
|
+
catch (_a) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The display name behind a message's author, so the turn header describes a
|
|
3
|
+
* person and a bot the same way: the sender's `users.info` record for anyone
|
|
4
|
+
* with a user id, `bots.info` for webhook-style posts that carry only a
|
|
5
|
+
* `bot_id`.
|
|
6
|
+
*/
|
|
7
|
+
import type { SlackAuthor, SlackBotToken } from "./types.js";
|
|
8
|
+
export declare function resetSlackSenderNameCache(): void;
|
|
9
|
+
/**
|
|
10
|
+
* Cached per token. A name Slack already sent with the event wins; any
|
|
11
|
+
* failure resolves to undefined and leaves the sender described by id alone.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveSlackSenderName(args: {
|
|
14
|
+
botToken: SlackBotToken | undefined;
|
|
15
|
+
author: SlackAuthor | undefined;
|
|
16
|
+
}): Promise<string | undefined>;
|
|
17
|
+
//# sourceMappingURL=sender-name.d.ts.map
|
|
@@ -0,0 +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;AA8CD;;;GAGG;AACH,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,CAgB9B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The display name behind a message's author, so the turn header describes a
|
|
3
|
+
* person and a bot the same way: the sender's `users.info` record for anyone
|
|
4
|
+
* with a user id, `bots.info` for webhook-style posts that carry only a
|
|
5
|
+
* `bot_id`.
|
|
6
|
+
*/
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { callSlackApi } from "./api.js";
|
|
17
|
+
import { fetchSlackUserInfo } from "./user-info.js";
|
|
18
|
+
const botNames = new Map();
|
|
19
|
+
export function resetSlackSenderNameCache() {
|
|
20
|
+
botNames.clear();
|
|
21
|
+
}
|
|
22
|
+
function text(value) {
|
|
23
|
+
return typeof value === "string" && value !== "" ? value : undefined;
|
|
24
|
+
}
|
|
25
|
+
function record(value) {
|
|
26
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
27
|
+
? value
|
|
28
|
+
: undefined;
|
|
29
|
+
}
|
|
30
|
+
function userName(botToken, userId) {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
var _a, _b, _c;
|
|
33
|
+
const user = yield fetchSlackUserInfo({ botToken, userId });
|
|
34
|
+
if (user === undefined) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const profile = record(user.profile);
|
|
38
|
+
return ((_c = (_b = (_a = text(profile === null || profile === void 0 ? void 0 : profile.display_name)) !== null && _a !== void 0 ? _a : text(profile === null || profile === void 0 ? void 0 : profile.real_name)) !== null && _b !== void 0 ? _b : text(user.real_name)) !== null && _c !== void 0 ? _c : text(user.name));
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function botName(botToken, botId) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
var _a;
|
|
44
|
+
var _b;
|
|
45
|
+
const perToken = (_b = botNames.get(botToken)) !== null && _b !== void 0 ? _b : new Map();
|
|
46
|
+
const cached = perToken.get(botId);
|
|
47
|
+
if (cached !== undefined) {
|
|
48
|
+
return cached;
|
|
49
|
+
}
|
|
50
|
+
const result = yield callSlackApi({
|
|
51
|
+
botToken,
|
|
52
|
+
operation: "bots.info",
|
|
53
|
+
body: { bot: botId },
|
|
54
|
+
});
|
|
55
|
+
const name = result.ok === true ? text((_a = record(result.bot)) === null || _a === void 0 ? void 0 : _a.name) : undefined;
|
|
56
|
+
if (name === undefined) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
perToken.set(botId, name);
|
|
60
|
+
botNames.set(botToken, perToken);
|
|
61
|
+
return name;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Cached per token. A name Slack already sent with the event wins; any
|
|
66
|
+
* failure resolves to undefined and leaves the sender described by id alone.
|
|
67
|
+
*/
|
|
68
|
+
export function resolveSlackSenderName(args) {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const { author, botToken } = args;
|
|
71
|
+
if ((author === null || author === void 0 ? void 0 : author.userName) !== undefined && author.userName !== "") {
|
|
72
|
+
return author.userName;
|
|
73
|
+
}
|
|
74
|
+
if (author === undefined || botToken === undefined) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
if (author.userId !== "") {
|
|
79
|
+
return yield userName(botToken, author.userId);
|
|
80
|
+
}
|
|
81
|
+
return author.botId === undefined ? undefined : yield botName(botToken, author.botId);
|
|
82
|
+
}
|
|
83
|
+
catch (_a) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
@@ -47,7 +47,7 @@ export const SLACK_SETUP_PHASES = [
|
|
|
47
47
|
id: "serve",
|
|
48
48
|
actor: "agent",
|
|
49
49
|
title: "Serve",
|
|
50
|
-
steps: [`${CLI} serve --dir . --dev`, "Confirm log: [
|
|
50
|
+
steps: [`${CLI} serve --dir . --dev`, "Confirm log: [bdk/slack] Socket Mode connected"],
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
id: "smoke",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `users.info` records, cached per token. Shared by everything that needs a
|
|
3
|
+
* sender's record — externality and display name — and the in-flight request
|
|
4
|
+
* is what is cached, so two of them in one turn still cost one call.
|
|
5
|
+
*/
|
|
6
|
+
import type { SlackBotToken } from "./types.js";
|
|
7
|
+
type SlackUserRecord = Record<string, unknown>;
|
|
8
|
+
export declare function resetSlackUserInfoCache(): void;
|
|
9
|
+
/** Undefined when the lookup fails; failures are not cached. */
|
|
10
|
+
export declare function fetchSlackUserInfo(args: {
|
|
11
|
+
botToken: SlackBotToken | undefined;
|
|
12
|
+
userId: string;
|
|
13
|
+
}): Promise<SlackUserRecord | undefined>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=user-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-info.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/user-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAO/C,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAiBD,gEAAgE;AAChE,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAoBvC"}
|