@cursor/july 0.1.96 → 0.1.99
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/AGENTS.md +1 -1
- package/README.md +3 -2
- package/dist/bin/agent-serve.js +13 -3
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +16 -0
- package/dist/channels/origin/api.d.ts +15 -4
- package/dist/channels/origin/api.d.ts.map +1 -1
- package/dist/channels/origin/api.js +19 -3
- package/dist/channels/origin/binding.d.ts +11 -0
- package/dist/channels/origin/binding.d.ts.map +1 -1
- package/dist/channels/origin/binding.js +41 -25
- package/dist/channels/origin/index.d.ts +1 -0
- package/dist/channels/origin/index.d.ts.map +1 -1
- package/dist/channels/origin/index.js +1 -0
- package/dist/channels/origin/origin-channel.d.ts +2 -0
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +40 -4
- package/dist/channels/origin/reactions.d.ts +56 -0
- package/dist/channels/origin/reactions.d.ts.map +1 -0
- package/dist/channels/origin/reactions.js +67 -0
- package/dist/channels/origin/types.d.ts +11 -0
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/approvals.d.ts +16 -0
- package/dist/channels/slack/approvals.d.ts.map +1 -1
- package/dist/channels/slack/approvals.js +86 -0
- package/dist/channels/slack/cli-project.d.ts +19 -0
- package/dist/channels/slack/cli-project.d.ts.map +1 -0
- package/dist/channels/slack/cli-project.js +234 -0
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +142 -63
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +1 -1
- package/dist/channels/slack/init.d.ts +3 -2
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +5 -5
- package/dist/channels/slack/interactive.d.ts +2 -1
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +15 -4
- package/dist/channels/slack/live-delivery.d.ts +1 -1
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +4 -2
- package/dist/channels/slack/manifest.d.ts +1 -1
- package/dist/channels/slack/manifest.js +1 -1
- package/dist/channels/slack/progress-delivery.d.ts +28 -0
- package/dist/channels/slack/progress-delivery.d.ts.map +1 -0
- package/dist/channels/slack/progress-delivery.js +115 -0
- package/dist/channels/slack/setup.d.ts +1 -1
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +10 -6
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +1 -0
- package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
- package/dist/channels/slack/tool-approval-events.js +91 -1
- package/dist/channels/slack/types.d.ts +9 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.jXleCmOc.js → app.BplEAZ3S.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DpuI4i7Z.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.8LhyglIT.js → VPLocalSearchBox.CHXyv4wP.js} +1 -1
- package/dist/docs/assets/chunks/{theme.9ged-pr2.js → theme.BTcsZmjQ.js} +2 -2
- package/dist/docs/assets/{deployment.md.D9msOFOW.js → deployment.md.MFPKqsqI.js} +2 -2
- package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.js → guides_mcp-oauth.md.CN-6YmTJ.js} +4 -4
- package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.lean.js → guides_mcp-oauth.md.CN-6YmTJ.lean.js} +1 -1
- package/dist/docs/assets/guides_slack.md.VDXQV3ja.js +22 -0
- package/dist/docs/assets/guides_slack.md.VDXQV3ja.lean.js +1 -0
- package/dist/docs/assets/index.md.CVeRUOeZ.js +5 -0
- package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.js → reference_agent-config.md.BHeYMgme.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.CCnG-nJx.js → reference_cli.md.DfoeyvL0.js} +9 -6
- package/dist/docs/assets/{reference_cli.md.CCnG-nJx.lean.js → reference_cli.md.DfoeyvL0.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.js → reference_connections.md.DxldvyIB.js} +4 -3
- package/dist/docs/assets/{reference_http-api.md.D89k1mdm.js → reference_http-api.md.BEJx9XVj.js} +2 -2
- package/dist/docs/assets/reference_sessions.md.NxFP_CAC.js +1 -0
- package/dist/docs/assets/{reference_tools.md.BHeXn2id.js → reference_tools.md.CvAHsdSp.js} +10 -2
- package/dist/docs/assets/{reference_tools.md.BHeXn2id.lean.js → reference_tools.md.CvAHsdSp.lean.js} +1 -1
- package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +2 -0
- package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +1 -0
- package/dist/docs/assets/troubleshooting.md.DCiPBhYs.js +1 -0
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +4 -4
- package/dist/docs/deployment.html +7 -7
- package/dist/docs/deployment.md +5 -4
- package/dist/docs/design/runtime-abstraction.md +1757 -0
- package/dist/docs/evals.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +4 -4
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +4 -4
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +8 -8
- package/dist/docs/guides/mcp-oauth.md +26 -8
- package/dist/docs/guides/opentelemetry.html +4 -4
- package/dist/docs/guides/slack.html +17 -33
- package/dist/docs/guides/slack.md +92 -201
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +5 -3
- package/dist/docs/llms-full.txt +2065 -637
- package/dist/docs/llms.txt +3 -2
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +6 -6
- package/dist/docs/reference/agent-config.md +2 -2
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +4 -4
- package/dist/docs/reference/cli.html +13 -10
- package/dist/docs/reference/cli.md +32 -16
- package/dist/docs/reference/connections.html +9 -8
- package/dist/docs/reference/connections.md +6 -3
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +7 -7
- package/dist/docs/reference/http-api.md +3 -1
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +4 -4
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +5 -5
- package/dist/docs/reference/sessions.md +4 -2
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +15 -7
- package/dist/docs/reference/tools.md +34 -2
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +28 -0
- package/dist/docs/templates/agents-md.md +105 -0
- package/dist/docs/templates/code-wiki.html +5 -5
- package/dist/docs/templates/demo.html +4 -4
- package/dist/docs/templates/pr-autofixer.html +4 -4
- package/dist/docs/templates/security-help.html +4 -4
- package/dist/docs/templates/security-reviewer.html +5 -5
- package/dist/docs/templates/triage.html +4 -4
- package/dist/docs/troubleshooting.html +5 -5
- package/dist/docs/troubleshooting.md +2 -2
- package/dist/evals/run-facts.d.ts.map +1 -1
- package/dist/evals/run-facts.js +27 -0
- package/dist/files-backends/cursor-hosted.d.ts +3 -2
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +3 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +15 -9
- package/dist/internal/approval-gate.d.ts +12 -13
- package/dist/internal/approval-gate.d.ts.map +1 -1
- package/dist/internal/approval-gate.js +16 -21
- package/dist/internal/as-of.d.ts +19 -0
- package/dist/internal/as-of.d.ts.map +1 -0
- package/dist/internal/as-of.js +82 -0
- package/dist/internal/chat-client.js +10 -0
- package/dist/internal/cli-deploy.d.ts +6 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +149 -21
- package/dist/internal/cli-mcp-oauth.js +8 -18
- package/dist/internal/cli-slack-manual.d.ts +24 -2
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +251 -20
- package/dist/internal/cli-slack.d.ts +9 -2
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +29 -82
- package/dist/internal/cursor/account-mcp.d.ts +1 -0
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +17 -0
- package/dist/internal/cursor-agent-template.d.ts +1 -1
- package/dist/internal/cursor-agent-template.d.ts.map +1 -1
- package/dist/internal/cursor-agent-template.js +1 -0
- package/dist/internal/cursor-event-relay.d.ts.map +1 -1
- package/dist/internal/cursor-event-relay.js +5 -6
- package/dist/internal/deploy-client.d.ts +17 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +31 -10
- package/dist/internal/env-file.d.ts +19 -0
- package/dist/internal/env-file.d.ts.map +1 -0
- package/dist/internal/env-file.js +90 -0
- package/dist/internal/framework-file-storage.d.ts +11 -17
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +17 -40
- package/dist/internal/framework-storage-selection.d.ts +13 -11
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +37 -26
- package/dist/internal/hosted-admission-adapter.d.ts +28 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -0
- package/dist/internal/hosted-admission-adapter.js +7 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +13 -1
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +8 -1
- package/dist/internal/hosted-delivery.d.ts +21 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +101 -34
- package/dist/internal/hosted-execution-diag.d.ts +59 -0
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -0
- package/dist/internal/hosted-execution-diag.js +187 -0
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +85 -2
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +2 -0
- package/dist/internal/logs-client.d.ts +5 -0
- package/dist/internal/logs-client.d.ts.map +1 -1
- package/dist/internal/logs-client.js +5 -0
- package/dist/internal/mcp-endpoint.js +2 -3
- package/dist/internal/mcp-host.d.ts +10 -0
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +57 -8
- package/dist/internal/mcp-oauth-on-demand.d.ts +68 -0
- package/dist/internal/mcp-oauth-on-demand.d.ts.map +1 -0
- package/dist/internal/mcp-oauth-on-demand.js +287 -0
- package/dist/internal/mcp-oauth-persist.d.ts +42 -0
- package/dist/internal/mcp-oauth-persist.d.ts.map +1 -0
- package/dist/internal/mcp-oauth-persist.js +92 -0
- package/dist/internal/mcp-oauth.d.ts +1 -0
- package/dist/internal/mcp-oauth.d.ts.map +1 -1
- package/dist/internal/mcp-oauth.js +10 -2
- package/dist/internal/null-kv-storage.d.ts +48 -0
- package/dist/internal/null-kv-storage.d.ts.map +1 -0
- package/dist/internal/null-kv-storage.js +58 -0
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +22 -9
- package/dist/internal/server.d.ts +6 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +123 -33
- package/dist/internal/session-engine.d.ts +88 -3
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +538 -46
- package/dist/internal/session-run-log.d.ts +120 -0
- package/dist/internal/session-run-log.d.ts.map +1 -0
- package/dist/internal/session-run-log.js +359 -0
- package/dist/internal/sessions-client.d.ts +9 -7
- package/dist/internal/sessions-client.d.ts.map +1 -1
- package/dist/internal/sessions-client.js +3 -1
- package/dist/internal/storage-coordinator.d.ts +13 -0
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +37 -6
- package/dist/internal/storage-roles.d.ts +5 -0
- package/dist/internal/storage-roles.d.ts.map +1 -1
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +10 -0
- package/dist/internal/tool-policy.d.ts +29 -9
- package/dist/internal/tool-policy.d.ts.map +1 -1
- package/dist/internal/tool-policy.js +24 -0
- package/dist/internal/trajectory.d.ts.map +1 -1
- package/dist/internal/trajectory.js +10 -0
- package/dist/internal/turn-outbox.d.ts +24 -0
- package/dist/internal/turn-outbox.d.ts.map +1 -0
- package/dist/internal/turn-outbox.js +80 -0
- package/dist/playground/assets/index-D7rGZNjy.css +1 -0
- package/dist/playground/assets/index-jzNbJENa.js +69 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted.d.ts +1 -1
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +12 -0
- package/dist/storage-protocol.d.ts +8 -0
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +8 -0
- package/dist/storage.d.ts +8 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/tools.d.ts +12 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/types.d.ts +88 -7
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +5 -3
- package/docs/deployment.md +5 -4
- package/docs/design/runtime-abstraction.md +1757 -0
- package/docs/guides/mcp-oauth.md +26 -8
- package/docs/guides/slack.md +93 -202
- package/docs/reference/agent-config.md +2 -2
- package/docs/reference/cli.md +32 -16
- package/docs/reference/connections.md +6 -3
- package/docs/reference/http-api.md +3 -1
- package/docs/reference/sessions.md +4 -2
- package/docs/reference/tools.md +34 -2
- package/docs/templates/agents-md.md +110 -0
- package/docs/troubleshooting.md +2 -2
- package/package.json +1 -1
- package/skills/create-agent/SKILL.md +2 -1
- package/skills/mcp-auth/SKILL.md +6 -3
- package/skills/setup-slack/SKILL.md +23 -13
- package/src/bin/agent-serve.ts +12 -1
- package/src/channels/github/github-channel.ts +17 -0
- package/src/channels/origin/api.ts +24 -5
- package/src/channels/origin/binding.ts +55 -26
- package/src/channels/origin/index.ts +1 -0
- package/src/channels/origin/origin-channel.ts +78 -10
- package/src/channels/origin/reactions.ts +82 -0
- package/src/channels/origin/types.ts +11 -0
- package/src/channels/slack/approvals.ts +105 -0
- package/src/channels/slack/cli-project.ts +267 -0
- package/src/channels/slack/defaults.ts +165 -74
- package/src/channels/slack/dispatch.ts +2 -0
- package/src/channels/slack/init.ts +10 -5
- package/src/channels/slack/interactive.ts +35 -9
- package/src/channels/slack/live-delivery.ts +5 -3
- package/src/channels/slack/manifest.ts +1 -1
- package/src/channels/slack/progress-delivery.ts +133 -0
- package/src/channels/slack/setup.ts +10 -6
- package/src/channels/slack/slack-channel.ts +1 -0
- package/src/channels/slack/tool-approval-events.ts +93 -0
- package/src/channels/slack/types.ts +9 -1
- package/src/evals/run-facts.ts +32 -0
- package/src/files-backends/cursor-hosted.ts +3 -2
- package/src/index.ts +4 -0
- package/src/internal/advertise-tools.ts +31 -10
- package/src/internal/approval-gate.ts +20 -29
- package/src/internal/as-of.ts +107 -0
- package/src/internal/chat-client.ts +19 -0
- package/src/internal/cli-deploy.ts +203 -13
- package/src/internal/cli-mcp-oauth.ts +7 -21
- package/src/internal/cli-slack-manual.ts +350 -18
- package/src/internal/cli-slack.ts +40 -84
- package/src/internal/cursor/account-mcp.ts +21 -0
- package/src/internal/cursor-agent-template.ts +1 -0
- package/src/internal/cursor-event-relay.ts +5 -6
- package/src/internal/deploy-client.ts +43 -0
- package/src/internal/env-file.ts +84 -0
- package/src/internal/framework-file-storage.ts +18 -46
- package/src/internal/framework-storage-selection.ts +41 -25
- package/src/internal/hosted-admission-adapter.ts +42 -0
- package/src/internal/hosted-delivery-protocol.ts +14 -2
- package/src/internal/hosted-delivery.ts +169 -44
- package/src/internal/hosted-execution-diag.ts +252 -0
- package/src/internal/http-channel.ts +107 -0
- package/src/internal/init-project.ts +2 -0
- package/src/internal/logs-client.ts +5 -0
- package/src/internal/mcp-endpoint.ts +13 -4
- package/src/internal/mcp-host.ts +77 -11
- package/src/internal/mcp-oauth-on-demand.ts +352 -0
- package/src/internal/mcp-oauth-persist.ts +127 -0
- package/src/internal/mcp-oauth.ts +17 -1
- package/src/internal/null-kv-storage.ts +74 -0
- package/src/internal/otel/collector.ts +30 -0
- package/src/internal/server.ts +159 -11
- package/src/internal/session-engine.ts +691 -57
- package/src/internal/session-run-log.ts +584 -0
- package/src/internal/sessions-client.ts +17 -8
- package/src/internal/storage-coordinator.ts +49 -9
- package/src/internal/storage-roles.ts +7 -0
- package/src/internal/stream-progress.ts +19 -0
- package/src/internal/tool-policy.ts +49 -9
- package/src/internal/trajectory.ts +10 -0
- package/src/internal/turn-outbox.ts +85 -0
- package/src/storage-backends/cursor-hosted.ts +13 -1
- package/src/storage-protocol.ts +10 -0
- package/src/storage.ts +12 -0
- package/src/tools.ts +12 -2
- package/src/types.ts +93 -8
- package/templates/agents-md/README.md +39 -0
- package/templates/agents-md/agent/agent.ts +8 -0
- package/templates/agents-md/agent/channels/github.ts +10 -0
- package/templates/agents-md/agent/channels/queue.ts +28 -0
- package/templates/agents-md/agent/channels/slack.ts +9 -0
- package/templates/agents-md/agent/instructions.md +39 -0
- package/templates/agents-md/agent/lib/collect.ts +439 -0
- package/templates/agents-md/agent/lib/config.ts +8 -0
- package/templates/agents-md/agent/lib/paths.ts +51 -0
- package/templates/agents-md/agent/schedules/weekly.ts +17 -0
- package/templates/agents-md/agent/tools/apply_agents.ts +226 -0
- package/templates/agents-md/evals/agents.eval.ts +135 -0
- package/templates/agents-md/evals/evals.config.ts +5 -0
- package/templates/agents-md/init.json +38 -0
- package/templates/agents-md/package.json +18 -0
- package/templates/agents-md/tsconfig.json +12 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.DFoGuETX.js +0 -1
- package/dist/docs/assets/guides_slack.md.C32HsdKk.js +0 -38
- package/dist/docs/assets/guides_slack.md.C32HsdKk.lean.js +0 -1
- package/dist/docs/assets/index.md.CI93Ltlb.js +0 -5
- package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Ctv3T8C2.js +0 -1
- package/dist/docs/design/agsh.md +0 -406
- package/dist/playground/assets/index-B1DDvBeC.css +0 -1
- package/dist/playground/assets/index-Cx9CclK_.js +0 -88
- package/docs/design/agsh.md +0 -406
- /package/dist/docs/assets/{deployment.md.D9msOFOW.lean.js → deployment.md.MFPKqsqI.lean.js} +0 -0
- /package/dist/docs/assets/{index.md.CI93Ltlb.lean.js → index.md.CVeRUOeZ.lean.js} +0 -0
- /package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.lean.js → reference_agent-config.md.BHeYMgme.lean.js} +0 -0
- /package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.lean.js → reference_connections.md.DxldvyIB.lean.js} +0 -0
- /package/dist/docs/assets/{reference_http-api.md.D89k1mdm.lean.js → reference_http-api.md.BEJx9XVj.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.D0mIh4KK.lean.js → reference_sessions.md.NxFP_CAC.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.Ctv3T8C2.lean.js → troubleshooting.md.DCiPBhYs.lean.js} +0 -0
|
@@ -16,6 +16,7 @@ import { defaultSlackAuth } from "./auth.js";
|
|
|
16
16
|
import { SLACK_DEFAULT_LOADING_MESSAGES, SLACK_TYPING_MIN_GROWTH, SLACK_TYPING_MIN_INTERVAL_MS, } from "./constants.js";
|
|
17
17
|
import { createStreamDeliveryStrategy } from "./live-delivery.js";
|
|
18
18
|
import { defaultSlackLog } from "./log.js";
|
|
19
|
+
import { createProgressDelivery } from "./progress-delivery.js";
|
|
19
20
|
import { buildTaskChunkForResult, buildTaskChunksForCalls } from "./stream.js";
|
|
20
21
|
const SLACK_TURN_FAILURE_FALLBACK = "I hit an error while handling your request. Please try again or rephrase.";
|
|
21
22
|
const SLACK_TURN_FAILURE_MAX_CHARS = 400;
|
|
@@ -106,6 +107,8 @@ export function buildDefaultEvents(options = {}) {
|
|
|
106
107
|
const botToken = credentials === null || credentials === void 0 ? void 0 : credentials.botToken;
|
|
107
108
|
const getLog = (_b = options.getLog) !== null && _b !== void 0 ? _b : (() => defaultSlackLog);
|
|
108
109
|
const strategy = createStreamDeliveryStrategy({ botToken, getLog });
|
|
110
|
+
const progress = createProgressDelivery({ botToken, getLog });
|
|
111
|
+
const streamLive = (state) => streaming && !state.streamingUnavailable;
|
|
109
112
|
const clearWorkingStatus = (channelId, threadTs) => __awaiter(this, void 0, void 0, function* () {
|
|
110
113
|
const result = yield setThreadStatus({
|
|
111
114
|
botToken,
|
|
@@ -121,16 +124,109 @@ export function buildDefaultEvents(options = {}) {
|
|
|
121
124
|
});
|
|
122
125
|
}
|
|
123
126
|
});
|
|
127
|
+
const finishProgress = (args) => __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
const log = getLog();
|
|
129
|
+
const state = args.channel.state;
|
|
130
|
+
if (state.channelId === null ||
|
|
131
|
+
state.threadTs === null ||
|
|
132
|
+
args.text === "") {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (yield progress.replace({ channel: args.channel, text: args.text })) {
|
|
136
|
+
log.info("reply delivered via progress update", {
|
|
137
|
+
channel: state.channelId,
|
|
138
|
+
thread_ts: state.threadTs,
|
|
139
|
+
session: args.sessionId,
|
|
140
|
+
chars: args.text.length,
|
|
141
|
+
});
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
yield progress.clear({ channel: args.channel });
|
|
145
|
+
try {
|
|
146
|
+
const posted = yield postMessage({
|
|
147
|
+
botToken,
|
|
148
|
+
channel: state.channelId,
|
|
149
|
+
text: args.text,
|
|
150
|
+
threadTs: state.threadTs,
|
|
151
|
+
});
|
|
152
|
+
state.lastPostedText = args.text;
|
|
153
|
+
state.lastBotMessageTs = posted.ts;
|
|
154
|
+
log.info("reply delivered via postMessage", {
|
|
155
|
+
channel: state.channelId,
|
|
156
|
+
thread_ts: state.threadTs,
|
|
157
|
+
message_ts: posted.ts,
|
|
158
|
+
session: args.sessionId,
|
|
159
|
+
chars: args.text.length,
|
|
160
|
+
});
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
log.error(`postMessage failed: ${error instanceof Error ? error.message : String(error)}`, {
|
|
165
|
+
channel: state.channelId,
|
|
166
|
+
thread_ts: state.threadTs,
|
|
167
|
+
session: args.sessionId,
|
|
168
|
+
});
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
/**
|
|
173
|
+
* Deliver assistant text to the bound Slack thread. Used by a stop-reason
|
|
174
|
+
* `message.completed` and by `turn.completed` when the last assistant
|
|
175
|
+
* block was `finishReason: "tool_call"` (answer then `tag_artifact`,
|
|
176
|
+
* etc.) so the playground result still reaches Slack.
|
|
177
|
+
*/
|
|
178
|
+
const deliverReplyText = (args) => __awaiter(this, void 0, void 0, function* () {
|
|
179
|
+
var _a, _b;
|
|
180
|
+
const state = args.channel.state;
|
|
181
|
+
if (state.channelId === null ||
|
|
182
|
+
state.threadTs === null ||
|
|
183
|
+
args.text === "") {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
if (state.lastPostedText === args.text) {
|
|
187
|
+
// Stream append sets this watermark while chat.stopStream is still
|
|
188
|
+
// pending. Treat a match as "already on Slack", not "already finalized".
|
|
189
|
+
const streamTs = state.streamTs;
|
|
190
|
+
if (streamTs !== null && streamTs !== "") {
|
|
191
|
+
if (streamLive(state)) {
|
|
192
|
+
yield strategy.finalize({
|
|
193
|
+
channel: args.channel,
|
|
194
|
+
channelId: (_a = state.streamChannelId) !== null && _a !== void 0 ? _a : state.channelId,
|
|
195
|
+
text: args.text,
|
|
196
|
+
sessionId: args.sessionId,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
yield strategy.cleanupOrphan({ channel: args.channel });
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
if (streamLive(state)) {
|
|
206
|
+
const { delivered } = yield strategy.finalize({
|
|
207
|
+
channel: args.channel,
|
|
208
|
+
channelId: (_b = state.streamChannelId) !== null && _b !== void 0 ? _b : state.channelId,
|
|
209
|
+
text: args.text,
|
|
210
|
+
sessionId: args.sessionId,
|
|
211
|
+
});
|
|
212
|
+
if (delivered) {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return finishProgress(args);
|
|
217
|
+
});
|
|
124
218
|
return {
|
|
125
219
|
"turn.started"(event, channel) {
|
|
126
220
|
return __awaiter(this, void 0, void 0, function* () {
|
|
127
221
|
const log = getLog();
|
|
222
|
+
yield progress.clear({ channel });
|
|
128
223
|
channel.state.pendingToolCallMessage = null;
|
|
129
224
|
channel.state.lastReasoningTypingAtMs = null;
|
|
130
225
|
channel.state.lastReasoningTypingStatus = null;
|
|
131
226
|
channel.state.streamTs = null;
|
|
132
227
|
channel.state.streamChannelId = null;
|
|
133
228
|
channel.state.lastPostedText = null;
|
|
229
|
+
channel.state.streamBlockText = null;
|
|
134
230
|
// Keep lastBotMessageTs across turns — warm delta watermark.
|
|
135
231
|
channel.state.approvalMessageByCallId = {};
|
|
136
232
|
const state = channel.state;
|
|
@@ -155,7 +251,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
155
251
|
"message.appended"(event, channel) {
|
|
156
252
|
return __awaiter(this, void 0, void 0, function* () {
|
|
157
253
|
var _a;
|
|
158
|
-
if (!
|
|
254
|
+
if (!streamLive(channel.state)) {
|
|
159
255
|
return;
|
|
160
256
|
}
|
|
161
257
|
const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
|
|
@@ -218,8 +314,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
218
314
|
: truncateTypingStatus(`Running ${names.join(", ")}…`);
|
|
219
315
|
if (strategy.inlineToolSteps &&
|
|
220
316
|
thinkingSteps &&
|
|
221
|
-
|
|
222
|
-
channel.state.streamingUnavailable !== true) {
|
|
317
|
+
streamLive(channel.state)) {
|
|
223
318
|
const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
|
|
224
319
|
const threadTs = channel.state.threadTs;
|
|
225
320
|
if (channelId !== null && channelId !== "" && threadTs !== null) {
|
|
@@ -251,18 +346,23 @@ export function buildDefaultEvents(options = {}) {
|
|
|
251
346
|
threadTs: channel.state.threadTs,
|
|
252
347
|
status: statusText,
|
|
253
348
|
});
|
|
349
|
+
if (thinkingSteps &&
|
|
350
|
+
channel.state.streamingUnavailable === true &&
|
|
351
|
+
(channel.state.streamTs === null || channel.state.streamTs === "")) {
|
|
352
|
+
yield progress.upsert({ channel, text: statusText });
|
|
353
|
+
}
|
|
254
354
|
}
|
|
255
355
|
});
|
|
256
356
|
},
|
|
257
357
|
"action.result"(event, channel) {
|
|
258
358
|
return __awaiter(this, void 0, void 0, function* () {
|
|
259
359
|
var _a;
|
|
360
|
+
const streamTs = channel.state.streamTs;
|
|
260
361
|
if (!strategy.inlineToolSteps ||
|
|
261
362
|
!thinkingSteps ||
|
|
262
|
-
!
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
channel.state.streamTs === "") {
|
|
363
|
+
!streamLive(channel.state) ||
|
|
364
|
+
streamTs === null ||
|
|
365
|
+
streamTs === "") {
|
|
266
366
|
return;
|
|
267
367
|
}
|
|
268
368
|
const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
|
|
@@ -277,17 +377,19 @@ export function buildDefaultEvents(options = {}) {
|
|
|
277
377
|
yield appendChatStream({
|
|
278
378
|
botToken,
|
|
279
379
|
channel: channelId,
|
|
280
|
-
ts:
|
|
380
|
+
ts: streamTs,
|
|
281
381
|
chunks: [chunk],
|
|
282
382
|
});
|
|
283
383
|
});
|
|
284
384
|
},
|
|
285
385
|
"message.completed"(event, channel) {
|
|
286
386
|
return __awaiter(this, void 0, void 0, function* () {
|
|
287
|
-
var _a
|
|
288
|
-
const log = getLog();
|
|
387
|
+
var _a;
|
|
289
388
|
if (event.data.finishReason === "tool_call") {
|
|
290
389
|
channel.state.pendingToolCallMessage = (_a = firstNonEmptyLine(event.data.text)) !== null && _a !== void 0 ? _a : null;
|
|
390
|
+
// The harness restarts its cumulative text after a tool call, so the
|
|
391
|
+
// next block appends in full instead of diffing against this one.
|
|
392
|
+
channel.state.streamBlockText = null;
|
|
291
393
|
return;
|
|
292
394
|
}
|
|
293
395
|
channel.state.pendingToolCallMessage = null;
|
|
@@ -299,46 +401,15 @@ export function buildDefaultEvents(options = {}) {
|
|
|
299
401
|
// and clear typing.
|
|
300
402
|
if (event.data.text === "") {
|
|
301
403
|
yield strategy.finalizeEmpty({ channel });
|
|
404
|
+
yield progress.clear({ channel });
|
|
302
405
|
yield clearWorkingStatus(state.channelId, state.threadTs);
|
|
303
406
|
return;
|
|
304
407
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
text: event.data.text,
|
|
311
|
-
sessionId: event.sessionId,
|
|
312
|
-
});
|
|
313
|
-
if (delivered) {
|
|
314
|
-
yield clearWorkingStatus(state.channelId, state.threadTs);
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
try {
|
|
319
|
-
const posted = yield postMessage({
|
|
320
|
-
botToken,
|
|
321
|
-
channel: state.channelId,
|
|
322
|
-
text: event.data.text,
|
|
323
|
-
threadTs: state.threadTs,
|
|
324
|
-
});
|
|
325
|
-
channel.state.lastPostedText = event.data.text;
|
|
326
|
-
channel.state.lastBotMessageTs = posted.ts;
|
|
327
|
-
log.info("reply delivered via postMessage", {
|
|
328
|
-
channel: state.channelId,
|
|
329
|
-
thread_ts: state.threadTs,
|
|
330
|
-
message_ts: posted.ts,
|
|
331
|
-
session: event.sessionId,
|
|
332
|
-
chars: event.data.text.length,
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
catch (error) {
|
|
336
|
-
log.error(`postMessage failed: ${error instanceof Error ? error.message : String(error)}`, {
|
|
337
|
-
channel: state.channelId,
|
|
338
|
-
thread_ts: state.threadTs,
|
|
339
|
-
session: event.sessionId,
|
|
340
|
-
});
|
|
341
|
-
}
|
|
408
|
+
yield deliverReplyText({
|
|
409
|
+
channel,
|
|
410
|
+
text: event.data.text,
|
|
411
|
+
sessionId: event.sessionId,
|
|
412
|
+
});
|
|
342
413
|
yield clearWorkingStatus(state.channelId, state.threadTs);
|
|
343
414
|
});
|
|
344
415
|
},
|
|
@@ -351,7 +422,25 @@ export function buildDefaultEvents(options = {}) {
|
|
|
351
422
|
channel: channel.state.channelId,
|
|
352
423
|
thread_ts: channel.state.threadTs,
|
|
353
424
|
});
|
|
425
|
+
// Mid-turn `tool_call` text is held as status, not posted. If the
|
|
426
|
+
// turn ends without a later `finishReason: "stop"` block, the
|
|
427
|
+
// playground still has `result` (last assistant text) and Slack
|
|
428
|
+
// would otherwise stay silent.
|
|
429
|
+
const result = event.data.result;
|
|
430
|
+
const unpublished = typeof result === "string" &&
|
|
431
|
+
result !== "" &&
|
|
432
|
+
result !== channel.state.lastPostedText;
|
|
433
|
+
if (unpublished) {
|
|
434
|
+
yield deliverReplyText({
|
|
435
|
+
channel,
|
|
436
|
+
text: result,
|
|
437
|
+
sessionId: event.sessionId,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
// Always close leftovers. deliverReplyText may fall through to
|
|
441
|
+
// postMessage when streaming is unavailable and leave streamTs open.
|
|
354
442
|
yield strategy.cleanupOrphan({ channel });
|
|
443
|
+
yield progress.clear({ channel });
|
|
355
444
|
// Always drop the assistant chip. message.completed already clears
|
|
356
445
|
// after a normal reply, but a tool-call-only finish (or a missed
|
|
357
446
|
// final assistant message) never hits that path — leaving
|
|
@@ -386,7 +475,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
386
475
|
}
|
|
387
476
|
const errorText = formatSlackTurnFailureMessage(event.data.message);
|
|
388
477
|
let delivered = false;
|
|
389
|
-
if (
|
|
478
|
+
if (streamLive(state)) {
|
|
390
479
|
({ delivered } = yield strategy.fail({
|
|
391
480
|
channel,
|
|
392
481
|
channelId: (_a = state.streamChannelId) !== null && _a !== void 0 ? _a : state.channelId,
|
|
@@ -395,21 +484,11 @@ export function buildDefaultEvents(options = {}) {
|
|
|
395
484
|
}));
|
|
396
485
|
}
|
|
397
486
|
if (!delivered) {
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
threadTs: state.threadTs,
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
catch (error) {
|
|
407
|
-
log.error(`turn.failed postMessage failed: ${error instanceof Error ? error.message : String(error)}`, {
|
|
408
|
-
channel: state.channelId,
|
|
409
|
-
thread_ts: state.threadTs,
|
|
410
|
-
session: event.sessionId,
|
|
411
|
-
});
|
|
412
|
-
}
|
|
487
|
+
yield finishProgress({
|
|
488
|
+
channel,
|
|
489
|
+
text: errorText,
|
|
490
|
+
sessionId: event.sessionId,
|
|
491
|
+
});
|
|
413
492
|
}
|
|
414
493
|
yield clearWorkingStatus(state.channelId, state.threadTs);
|
|
415
494
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/dispatch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,yCAAyC,CAAC;AAGjD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAEX,aAAa,EACd,MAAM,gBAAgB,CAAC;AAYxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAK7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU1D,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAM1D,OAAO,KAAK,EAEV,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAEhB,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAqDpB,uCAAuC;AACvC,wBAAgB,sBAAsB,CACpC,KAAK,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACrC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/dispatch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,yCAAyC,CAAC;AAGjD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAEX,aAAa,EACd,MAAM,gBAAgB,CAAC;AAYxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAK7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU1D,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAM1D,OAAO,KAAK,EAEV,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAEhB,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAqDpB,uCAAuC;AACvC,wBAAgB,sBAAsB,CACpC,KAAK,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACrC,iBAAiB,CAmBnB;AAED,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACvE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/C,YAAY,EAAE,mBAAmB,CAAC;IAClC,eAAe,EAAE,mBAAmB,CAAC;IACrC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,WAAW,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC1C,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,6EAA6E;IAC7E,SAAS,EAAE,YAAY,CAAC;IACxB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,qDAAqD;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gEAAgE;IAChE,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAoDD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,IAAI,EACA,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,gBAAgB,GAChB,cAAc,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC1C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,sBAAsB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,+BAA+B,CAAC,EAAE,CAChC,iBAAiB,EAAE,MAAM,KACtB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,+EAA+E;IAC/E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgVhB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAiMT"}
|
|
@@ -56,7 +56,7 @@ function slackTurnMedia(args) {
|
|
|
56
56
|
}
|
|
57
57
|
/** Blank per-session adapter state. */
|
|
58
58
|
export function emptySlackChannelState(patch = {}) {
|
|
59
|
-
return Object.assign({ channelId: null, threadTs: null, teamId: null, triggeringUserId: null, pendingToolCallMessage: null, lastReasoningTypingAtMs: null, lastReasoningTypingStatus: null, streamTs: null, streamChannelId: null, lastPostedText: null, lastBotMessageTs: null, streamingUnavailable: false, approvalMessageByCallId: {} }, patch);
|
|
59
|
+
return Object.assign({ channelId: null, threadTs: null, teamId: null, triggeringUserId: null, pendingToolCallMessage: null, lastReasoningTypingAtMs: null, lastReasoningTypingStatus: null, streamTs: null, streamChannelId: null, lastPostedText: null, streamBlockText: null, lastBotMessageTs: null, streamingUnavailable: false, progressTs: null, approvalMessageByCallId: {} }, patch);
|
|
60
60
|
}
|
|
61
61
|
function triggeringMergeMessage(message) {
|
|
62
62
|
var _a, _b;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Scaffold a Slack channel into an agent-serve project.
|
|
3
3
|
*
|
|
4
4
|
* `initSlackChannel` is the create-safe writer: `agent/channels/slack.ts`
|
|
5
|
-
* only. DIY manifests
|
|
5
|
+
* only. DIY manifests + Slack CLI `.slack/` live in
|
|
6
6
|
* {@link initSlackManual} so `slack create` cannot reach them.
|
|
7
7
|
*/
|
|
8
8
|
export interface InitSlackOptions {
|
|
@@ -38,7 +38,8 @@ export interface InitSlackResult {
|
|
|
38
38
|
export declare function initSlackChannel(options: InitSlackOptions): Promise<InitSlackResult>;
|
|
39
39
|
/**
|
|
40
40
|
* `slack init --manual`: channel file plus DIY manifests
|
|
41
|
-
* (`managedByCursor: false`), env.example,
|
|
41
|
+
* (`managedByCursor: false`), Slack CLI `.slack/` project, env.example,
|
|
42
|
+
* and setup-status.json.
|
|
42
43
|
*/
|
|
43
44
|
export declare function initSlackManual(options: InitSlackManualOptions): Promise<InitSlackResult>;
|
|
44
45
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/init.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/init.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAoED,yDAAyD;AACzD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAa1B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAmD1B"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Scaffold a Slack channel into an agent-serve project.
|
|
3
3
|
*
|
|
4
4
|
* `initSlackChannel` is the create-safe writer: `agent/channels/slack.ts`
|
|
5
|
-
* only. DIY manifests
|
|
5
|
+
* only. DIY manifests + Slack CLI `.slack/` live in
|
|
6
6
|
* {@link initSlackManual} so `slack create` cannot reach them.
|
|
7
7
|
*/
|
|
8
8
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
@@ -17,6 +17,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
17
17
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
18
18
|
import { basename, join, resolve } from "node:path";
|
|
19
19
|
import { PACKAGE_NAME } from "../../internal/distribution.js";
|
|
20
|
+
import { writeSlackCliProject } from "./cli-project.js";
|
|
20
21
|
import { envPrefixFromName, slackEnvKeys } from "./credentials.js";
|
|
21
22
|
import { buildSlackManifestPair, slackManifestFileEntries, } from "./manifest.js";
|
|
22
23
|
import { initialSlackSetupStatus } from "./setup.js";
|
|
@@ -83,7 +84,8 @@ export function initSlackChannel(options) {
|
|
|
83
84
|
}
|
|
84
85
|
/**
|
|
85
86
|
* `slack init --manual`: channel file plus DIY manifests
|
|
86
|
-
* (`managedByCursor: false`), env.example,
|
|
87
|
+
* (`managedByCursor: false`), Slack CLI `.slack/` project, env.example,
|
|
88
|
+
* and setup-status.json.
|
|
87
89
|
*/
|
|
88
90
|
export function initSlackManual(options) {
|
|
89
91
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -100,9 +102,6 @@ export function initSlackManual(options) {
|
|
|
100
102
|
description: options.description,
|
|
101
103
|
channelPosts: options.channelPosts,
|
|
102
104
|
});
|
|
103
|
-
for (const file of slackManifestFileEntries(pair)) {
|
|
104
|
-
yield write(`.agent-serve/slack/${file.name}`, file.contents);
|
|
105
|
-
}
|
|
106
105
|
yield write(".agent-serve/slack/env.example", `# Copy to .env.local (or export in your shell). Use the *dev* Slack app
|
|
107
106
|
# for local development; use the Prod app tokens in deployment secrets.
|
|
108
107
|
#
|
|
@@ -115,6 +114,7 @@ ${target.envKeys.app}=xapp-...
|
|
|
115
114
|
envPrefix: target.envPrefix,
|
|
116
115
|
envKeys: target.envKeys,
|
|
117
116
|
}), null, 2)}\n`);
|
|
117
|
+
files.push(...(yield writeSlackCliProject(target.rootDir, slackManifestFileEntries(pair))));
|
|
118
118
|
return {
|
|
119
119
|
rootDir: target.rootDir,
|
|
120
120
|
files,
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
* `slackChannel({ onBlockAction })`).
|
|
8
8
|
*/
|
|
9
9
|
import type { ContinuationIdentity } from "../../internal/continuation-identity.js";
|
|
10
|
-
import type { ApprovalDecision, ArtifactsApi, AuthContext, ChannelSession, HostContext, PendingApproval, SendMessageFn } from "../../types.js";
|
|
10
|
+
import type { ApprovalDecision, ArtifactsApi, AuthContext, ChannelSession, HostContext, PendingApproval, PendingAuth, SendMessageFn } from "../../types.js";
|
|
11
11
|
import { type SlackLog } from "./log.js";
|
|
12
12
|
import type { SlackBlockAction, SlackBlockActionHandler, SlackBotToken, SlackContinuationProbes, SlackCredentials } from "./types.js";
|
|
13
13
|
export interface SlackInteractiveDispatchDeps {
|
|
14
14
|
credentials: SlackCredentials | undefined;
|
|
15
15
|
getSession: (sessionId: string) => Promise<ChannelSession | null>;
|
|
16
16
|
resolveApproval: (sessionId: string, callId: string, decision: ApprovalDecision, auth: AuthContext | null) => Promise<PendingApproval>;
|
|
17
|
+
resolveAuth: (sessionId: string, callId: string, decision: ApprovalDecision, auth: AuthContext | null) => Promise<PendingAuth>;
|
|
17
18
|
waitUntil: (promise: Promise<unknown>) => void;
|
|
18
19
|
log?: SlackLog;
|
|
19
20
|
/** Defaults to true. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,WAAW,EACX,eAAe,EACf,aAAa,EACd,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,WAAW,EACX,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,gBAAgB,CAAC;AAUxB,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC1C,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClE,eAAe,EAAE,CACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,WAAW,GAAG,IAAI,KACrB,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9B,WAAW,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,WAAW,GAAG,IAAI,KACrB,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/C,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,wBAAwB;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,OAAO,CAAC,CAgIlB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,GACf,gBAAgB,GAAG,IAAI,CAoFzB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBnB;AAED,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E,OAAO,EAAE,uBAAuB,CAAC;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,WAAW,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC1C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,wBAAwB;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA4BD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,OAAO,CAAC,CAoDlB"}
|
|
@@ -16,7 +16,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
16
16
|
});
|
|
17
17
|
};
|
|
18
18
|
import { updateMessage } from "./api.js";
|
|
19
|
-
import { decisionFromActionId, parseApprovalActionValue } from "./approvals.js";
|
|
19
|
+
import { decisionFromActionId, decisionFromAuthActionId, parseApprovalActionValue, } from "./approvals.js";
|
|
20
20
|
import { buildSlackInteractiveApprovalAuth } from "./auth.js";
|
|
21
21
|
import { dispatchInboundMessage } from "./dispatch.js";
|
|
22
22
|
import { isExternalSlackSender } from "./external-policy.js";
|
|
@@ -34,11 +34,17 @@ export function dispatchInteractiveFromPayload(payload, deps) {
|
|
|
34
34
|
if (parsed === null) {
|
|
35
35
|
return false;
|
|
36
36
|
}
|
|
37
|
-
const
|
|
37
|
+
const approvalDecision = decisionFromActionId(parsed.actionId);
|
|
38
|
+
const authDecision = decisionFromAuthActionId(parsed.actionId);
|
|
38
39
|
const value = parseApprovalActionValue(parsed.value);
|
|
39
|
-
if (
|
|
40
|
+
if (value === null || (approvalDecision === null && authDecision === null)) {
|
|
40
41
|
return false;
|
|
41
42
|
}
|
|
43
|
+
const decision = approvalDecision !== null && approvalDecision !== void 0 ? approvalDecision : authDecision;
|
|
44
|
+
if (decision === null) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
const kind = approvalDecision !== null ? "approval" : "auth";
|
|
42
48
|
log.info("interactive approval", {
|
|
43
49
|
decision,
|
|
44
50
|
session: value.sessionId,
|
|
@@ -113,7 +119,12 @@ export function dispatchInteractiveFromPayload(payload, deps) {
|
|
|
113
119
|
clickingUserId: parsed.userId,
|
|
114
120
|
});
|
|
115
121
|
try {
|
|
116
|
-
|
|
122
|
+
if (kind === "auth") {
|
|
123
|
+
yield deps.resolveAuth(value.sessionId, value.callId, decision, clickingAuth);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
yield deps.resolveApproval(value.sessionId, value.callId, decision, clickingAuth);
|
|
127
|
+
}
|
|
117
128
|
}
|
|
118
129
|
catch (error) {
|
|
119
130
|
log.warn("interactive approval resolve failed", {
|
|
@@ -34,7 +34,7 @@ type StreamArgs = {
|
|
|
34
34
|
/**
|
|
35
35
|
* How the default handlers deliver an in-progress reply. Methods write live
|
|
36
36
|
* delivery state (`streamTs`, `streamChannelId`, `lastPostedText`,
|
|
37
|
-
* `streamingUnavailable`) on `channel.state` directly.
|
|
37
|
+
* `streamBlockText`, `streamingUnavailable`) on `channel.state` directly.
|
|
38
38
|
*/
|
|
39
39
|
export interface LiveDeliveryStrategy {
|
|
40
40
|
readonly inlineToolSteps: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/live-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB;AAED,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,yEAAyE;IACzE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,CACV,IAAI,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,GAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB;;;OAGG;IACH,QAAQ,CACN,IAAI,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAClC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,CACF,IAAI,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GACvC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpC;AAmBD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,gBAAgB,GACrB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"live-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/live-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB;AAED,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,yEAAyE;IACzE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,CACV,IAAI,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,GAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB;;;OAGG;IACH,QAAQ,CACN,IAAI,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAClC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,CACF,IAAI,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GACvC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpC;AAmBD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,gBAAgB,GACrB,oBAAoB,CA4PtB"}
|
|
@@ -60,6 +60,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
60
60
|
channel.state.streamTs = started.ts;
|
|
61
61
|
channel.state.streamChannelId = started.channel;
|
|
62
62
|
channel.state.lastPostedText = hasMarkdown ? (markdown_text !== null && markdown_text !== void 0 ? markdown_text : "") : "";
|
|
63
|
+
channel.state.streamBlockText = channel.state.lastPostedText;
|
|
63
64
|
log.info("chat.startStream ok", {
|
|
64
65
|
channel: started.channel,
|
|
65
66
|
stream_ts: started.ts,
|
|
@@ -87,7 +88,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
87
88
|
return opened ? activeStreamTs(args.channel) : null;
|
|
88
89
|
});
|
|
89
90
|
const stopWithSuffix = (args) => __awaiter(this, void 0, void 0, function* () {
|
|
90
|
-
const appendText = computeStreamAppend(args.channel.state.
|
|
91
|
+
const appendText = computeStreamAppend(args.channel.state.streamBlockText, args.text);
|
|
91
92
|
const stopped = yield stopChatStream({
|
|
92
93
|
botToken,
|
|
93
94
|
channel: args.channelId,
|
|
@@ -129,7 +130,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
129
130
|
if (ts === null) {
|
|
130
131
|
return;
|
|
131
132
|
}
|
|
132
|
-
const appendText = computeStreamAppend(channel.state.
|
|
133
|
+
const appendText = computeStreamAppend(channel.state.streamBlockText, text);
|
|
133
134
|
if (appendText === "") {
|
|
134
135
|
return;
|
|
135
136
|
}
|
|
@@ -152,6 +153,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
152
153
|
return;
|
|
153
154
|
}
|
|
154
155
|
channel.state.lastPostedText = text;
|
|
156
|
+
channel.state.streamBlockText = text;
|
|
155
157
|
});
|
|
156
158
|
},
|
|
157
159
|
appendChunks(_a) {
|
|
@@ -69,7 +69,7 @@ export declare function buildSlackManifestPair(options: Omit<SlackManifestOption
|
|
|
69
69
|
dev: SlackAppManifest;
|
|
70
70
|
prod: SlackAppManifest;
|
|
71
71
|
};
|
|
72
|
-
/**
|
|
72
|
+
/** Manifest filenames written under `.slack/`. */
|
|
73
73
|
export declare function slackManifestFileEntries(pair: {
|
|
74
74
|
dev: SlackAppManifest;
|
|
75
75
|
prod: SlackAppManifest;
|
|
@@ -145,7 +145,7 @@ export function buildSlackManifestPair(options) {
|
|
|
145
145
|
prod: buildSlackManifest(Object.assign(Object.assign({}, options), { env: "prod" })),
|
|
146
146
|
};
|
|
147
147
|
}
|
|
148
|
-
/**
|
|
148
|
+
/** Manifest filenames written under `.slack/`. */
|
|
149
149
|
export function slackManifestFileEntries(pair, env = "both") {
|
|
150
150
|
const files = [];
|
|
151
151
|
if (env === "dev" || env === "both") {
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mid-turn thread progress when `chat.startStream` is unavailable.
|
|
3
|
+
* One editable message; `setThreadStatus` stays on the caller.
|
|
4
|
+
*/
|
|
5
|
+
import type { ChannelEventContext } from "../../types.js";
|
|
6
|
+
import type { SlackLog } from "./log.js";
|
|
7
|
+
import type { SlackBotToken, SlackChannelState } from "./types.js";
|
|
8
|
+
type SlackChannel = ChannelEventContext<SlackChannelState>;
|
|
9
|
+
export interface ProgressDeliveryDeps {
|
|
10
|
+
botToken: SlackBotToken | undefined;
|
|
11
|
+
getLog: () => SlackLog;
|
|
12
|
+
}
|
|
13
|
+
export interface ProgressDelivery {
|
|
14
|
+
upsert(args: {
|
|
15
|
+
channel: SlackChannel;
|
|
16
|
+
text: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
replace(args: {
|
|
19
|
+
channel: SlackChannel;
|
|
20
|
+
text: string;
|
|
21
|
+
}): Promise<boolean>;
|
|
22
|
+
clear(args: {
|
|
23
|
+
channel: SlackChannel;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare function createProgressDelivery(deps: ProgressDeliveryDeps): ProgressDelivery;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=progress-delivery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/progress-delivery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB;AAOD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,oBAAoB,GACzB,gBAAgB,CAsGlB"}
|