@cursor/july 0.1.95 → 0.1.97
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 +3 -4
- package/README.md +3 -2
- package/dist/bin/agent-serve.js +14 -3
- package/dist/channels/deployments/types.d.ts +1 -1
- package/dist/channels/deployments/types.d.ts.map +1 -1
- package/dist/channels/deployments/types.js +1 -0
- package/dist/channels/origin/api.d.ts +72 -15
- package/dist/channels/origin/api.d.ts.map +1 -1
- package/dist/channels/origin/api.js +185 -28
- package/dist/channels/origin/binding.d.ts +13 -2
- package/dist/channels/origin/binding.d.ts.map +1 -1
- package/dist/channels/origin/binding.js +41 -25
- package/dist/channels/origin/checks.d.ts +6 -6
- package/dist/channels/origin/checks.js +6 -6
- package/dist/channels/origin/cursor-account.d.ts +5 -3
- package/dist/channels/origin/cursor-account.d.ts.map +1 -1
- package/dist/channels/origin/cursor-account.js +5 -3
- 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.map +1 -1
- package/dist/channels/origin/origin-channel.js +3 -0
- 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/api.d.ts +9 -0
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +36 -5
- 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 +110 -81
- package/dist/channels/slack/dispatch.d.ts +7 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +47 -23
- package/dist/channels/slack/inbound.d.ts +8 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +32 -0
- 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 +26 -29
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +172 -73
- package/dist/channels/slack/manifest.d.ts +1 -1
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +6 -2
- package/dist/channels/slack/nudge-carrier.d.ts +2 -0
- package/dist/channels/slack/nudge-carrier.d.ts.map +1 -1
- package/dist/channels/slack/nudge-carrier.js +48 -1
- 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 +3 -2
- package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
- package/dist/channels/slack/tool-approval-events.js +91 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.BBj0klBO.js → app.B3rWNYE1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CUEXpL78.js → VPLocalSearchBox.C1lhqJJR.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DabmQnia.js → theme.B40_SXuv.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/{index.md.BoHaMdeZ.lean.js → index.md.CVeRUOeZ.lean.js} +1 -1
- 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.BsMOxDvh.js → reference_cli.md.RyZf5OTE.js} +10 -6
- package/dist/docs/assets/{reference_cli.md.BsMOxDvh.lean.js → reference_cli.md.RyZf5OTE.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.5zOAbV86.js} +1 -1
- package/dist/docs/assets/reference_sessions.md.NxFP_CAC.js +1 -0
- package/dist/docs/assets/{reference_tools.md.BHeXn2id.js → reference_tools.md.B84gw9Ii.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/templates_code-wiki.md.CDYZIBFN.js +2 -0
- package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.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/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 +7 -3
- package/dist/docs/llms-full.txt +398 -653
- 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 +14 -10
- package/dist/docs/reference/cli.md +39 -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 +6 -6
- package/dist/docs/reference/http-api.md +2 -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 +6 -6
- package/dist/docs/reference/tools.md +9 -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 +28 -0
- package/dist/docs/templates/code-wiki.md +91 -0
- package/dist/docs/templates/demo.html +5 -5
- 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 +26 -4
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +32 -4
- package/dist/internal/advertise-tools.d.ts +2 -0
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +30 -10
- 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/bounded.d.ts +7 -0
- package/dist/internal/bounded.d.ts.map +1 -0
- package/dist/internal/bounded.js +32 -0
- package/dist/internal/chat-client.js +10 -0
- package/dist/internal/cli-deploy.d.ts +5 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +57 -18
- 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/conversation-mirror.d.ts +11 -8
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +116 -55
- 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/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +22 -48
- package/dist/internal/cursor/session-token.d.ts +45 -0
- package/dist/internal/cursor/session-token.d.ts.map +1 -0
- package/dist/internal/cursor/session-token.js +99 -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 +2 -0
- 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 +61 -0
- package/dist/internal/framework-file-storage.d.ts.map +1 -0
- package/dist/internal/framework-file-storage.js +210 -0
- package/dist/internal/framework-storage-selection.d.ts +11 -5
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +38 -11
- package/dist/internal/hosted-delivery-protocol.d.ts +7 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +7 -0
- package/dist/internal/hosted-delivery.d.ts +13 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +64 -19
- package/dist/internal/hosted-execution-diag.d.ts +48 -0
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -0
- package/dist/internal/hosted-execution-diag.js +150 -0
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +81 -1
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +4 -0
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +1 -3
- 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/managed-delivery.d.ts +80 -0
- package/dist/internal/managed-delivery.d.ts.map +1 -0
- package/dist/internal/managed-delivery.js +86 -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/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +22 -9
- package/dist/internal/runtime-dispatch-runner.d.ts +5 -1
- package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
- package/dist/internal/runtime-dispatch-runner.js +7 -0
- package/dist/internal/sdk-runner.d.ts +11 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +39 -8
- package/dist/internal/server.d.ts +3 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +49 -21
- package/dist/internal/session-engine.d.ts +101 -3
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +577 -46
- 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/steering.d.ts +15 -0
- package/dist/internal/steering.d.ts.map +1 -0
- package/dist/internal/steering.js +18 -0
- package/dist/internal/storage-coordinator.d.ts +7 -0
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +28 -5
- 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 +9 -1
- package/dist/internal/tool-policy.d.ts.map +1 -1
- package/dist/internal/tool-policy.js +13 -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-CZA1uEWA.js → index-DrkI6y5O.js} +51 -51
- package/dist/playground/assets/index-DzNGwm7q.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted.d.ts +9 -6
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +16 -3
- package/dist/storage.d.ts +8 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/types.d.ts +65 -8
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +7 -3
- package/docs/deployment.md +5 -4
- 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 +39 -16
- package/docs/reference/connections.md +6 -3
- package/docs/reference/http-api.md +2 -1
- package/docs/reference/sessions.md +4 -2
- package/docs/reference/tools.md +9 -2
- package/docs/templates/agents-md.md +110 -0
- package/docs/templates/code-wiki.md +96 -0
- package/docs/troubleshooting.md +2 -2
- package/package.json +2 -2
- package/skills/ab/SKILL.md +13 -97
- package/skills/create-agent/SKILL.md +124 -223
- package/skills/debug/SKILL.md +34 -68
- package/skills/evals/SKILL.md +55 -180
- package/skills/framework-map/SKILL.md +83 -145
- package/skills/github/SKILL.md +53 -111
- package/skills/hillclimb/SKILL.md +40 -163
- package/skills/mcp-auth/SKILL.md +51 -107
- package/skills/otel/SKILL.md +22 -68
- package/skills/setup-slack/SKILL.md +91 -212
- package/src/bin/agent-serve.ts +13 -1
- package/src/channels/deployments/types.ts +1 -0
- package/src/channels/origin/api.ts +264 -33
- package/src/channels/origin/binding.ts +57 -28
- package/src/channels/origin/checks.ts +6 -6
- package/src/channels/origin/cursor-account.ts +5 -3
- package/src/channels/origin/index.ts +1 -0
- package/src/channels/origin/origin-channel.ts +4 -0
- package/src/channels/origin/reactions.ts +82 -0
- package/src/channels/origin/types.ts +11 -0
- package/src/channels/slack/api.ts +41 -5
- package/src/channels/slack/approvals.ts +105 -0
- package/src/channels/slack/cli-project.ts +267 -0
- package/src/channels/slack/defaults.ts +122 -93
- package/src/channels/slack/dispatch.ts +56 -22
- package/src/channels/slack/inbound.ts +43 -0
- package/src/channels/slack/init.ts +10 -5
- package/src/channels/slack/interactive.ts +35 -9
- package/src/channels/slack/live-delivery.ts +235 -114
- package/src/channels/slack/manifest.ts +6 -2
- package/src/channels/slack/nudge-carrier.ts +48 -1
- package/src/channels/slack/setup.ts +10 -6
- package/src/channels/slack/slack-channel.ts +3 -0
- package/src/channels/slack/tool-approval-events.ts +93 -0
- package/src/evals/run-facts.ts +32 -0
- package/src/files-backends/cursor-hosted.ts +40 -7
- package/src/internal/advertise-tools.ts +49 -12
- package/src/internal/approval-gate.ts +20 -29
- package/src/internal/bounded.ts +28 -0
- package/src/internal/chat-client.ts +19 -0
- package/src/internal/cli-deploy.ts +91 -9
- 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/conversation-mirror.ts +145 -69
- package/src/internal/cursor/account-mcp.ts +21 -0
- package/src/internal/cursor/backend-client.ts +34 -58
- package/src/internal/cursor/session-token.ts +115 -0
- package/src/internal/cursor-agent-template.ts +2 -0
- package/src/internal/deploy-client.ts +43 -0
- package/src/internal/env-file.ts +84 -0
- package/src/internal/framework-file-storage.ts +228 -0
- package/src/internal/framework-storage-selection.ts +51 -11
- package/src/internal/hosted-delivery-protocol.ts +7 -0
- package/src/internal/hosted-delivery.ts +107 -24
- package/src/internal/hosted-execution-diag.ts +207 -0
- package/src/internal/http-channel.ts +99 -0
- package/src/internal/init-project.ts +4 -0
- package/src/internal/install-cursor-skills.ts +1 -4
- package/src/internal/logs-client.ts +5 -0
- package/src/internal/managed-delivery.ts +125 -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/otel/collector.ts +30 -0
- package/src/internal/runtime-dispatch-runner.ts +10 -0
- package/src/internal/sdk-runner.ts +56 -8
- package/src/internal/server.ts +61 -9
- package/src/internal/session-engine.ts +723 -60
- package/src/internal/sessions-client.ts +17 -8
- package/src/internal/steering.ts +17 -0
- package/src/internal/storage-coordinator.ts +38 -8
- package/src/internal/storage-roles.ts +7 -0
- package/src/internal/stream-progress.ts +19 -0
- package/src/internal/tool-policy.ts +18 -0
- package/src/internal/trajectory.ts +10 -0
- package/src/internal/turn-outbox.ts +85 -0
- package/src/storage-backends/cursor-hosted.ts +22 -8
- package/src/storage.ts +12 -0
- package/src/types.ts +70 -9
- 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/templates/code-wiki/README.md +34 -0
- package/templates/code-wiki/agent/agent.ts +8 -0
- package/templates/code-wiki/agent/channels/github.ts +144 -0
- package/templates/code-wiki/agent/instructions.md +39 -0
- package/templates/code-wiki/agent/lib/repos.ts +5 -0
- package/templates/code-wiki/agent/lib/wiki.ts +22 -0
- package/templates/code-wiki/agent/tools/apply_wiki.ts +219 -0
- package/templates/code-wiki/evals/evals.config.ts +5 -0
- package/templates/code-wiki/evals/wiki.eval.ts +132 -0
- package/templates/code-wiki/init.json +25 -0
- package/templates/code-wiki/package.json +18 -0
- package/templates/code-wiki/tsconfig.json +12 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.oqPawjiD.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.BoHaMdeZ.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/internal/deployment-scm-event-stream.d.ts +0 -116
- package/dist/internal/deployment-scm-event-stream.d.ts.map +0 -1
- package/dist/internal/deployment-scm-event-stream.js +0 -474
- package/dist/playground/assets/index-CF7hUDnQ.css +0 -1
- package/docs/design/agsh.md +0 -406
- package/src/internal/deployment-scm-event-stream.ts +0 -593
- /package/dist/docs/assets/{deployment.md.D9msOFOW.lean.js → deployment.md.MFPKqsqI.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.5zOAbV86.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/{reference_tools.md.BHeXn2id.lean.js → reference_tools.md.B84gw9Ii.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.Ctv3T8C2.lean.js → troubleshooting.md.DCiPBhYs.lean.js} +0 -0
|
@@ -12,12 +12,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
12
12
|
};
|
|
13
13
|
import { continuationSource, normalizeIdentity, } from "../../internal/continuation-identity.js";
|
|
14
14
|
import { routeLocalIngressContinuation } from "../../internal/local-ingress.js";
|
|
15
|
+
import { steeringEnabled } from "../../internal/steering.js";
|
|
15
16
|
import { buildSlackBinding, slackContinuationKey } from "./api.js";
|
|
16
|
-
import { firstLineTitle, maybeSetThreadTitle } from "./assistant.js";
|
|
17
|
+
import { firstLineTitle, maybeSetSuggestedPrompts, maybeSetThreadTitle, } from "./assistant.js";
|
|
17
18
|
import { appendSlackAttachmentAnnotations, prepareSlackAttachments, SLACK_ATTACHMENT_ONLY_PROMPT, } from "./attachments.js";
|
|
18
19
|
import { handleSlackEvalDirective, parseSlackEvalDirective, } from "./eval-directive.js";
|
|
19
20
|
import { isExternalSlackSender } from "./external-policy.js";
|
|
20
|
-
import { formatSlackContextBlock, parseAppMentionEvent, parseChannelMessageEvent, parseDirectMessageEvent, parseReactionAddedEvent, } from "./inbound.js";
|
|
21
|
+
import { formatSlackContextBlock, parseAppMentionEvent, parseAssistantThreadStarted, parseChannelMessageEvent, parseDirectMessageEvent, parseReactionAddedEvent, } from "./inbound.js";
|
|
21
22
|
import { defaultSlackLog } from "./log.js";
|
|
22
23
|
import { isWholeMessageStop } from "./stop.js";
|
|
23
24
|
import { loadSlackThreadContextBlock, loadSlackThreadDeltaBlock, } from "./thread-context.js";
|
|
@@ -311,22 +312,24 @@ export function dispatchInboundMessage(args) {
|
|
|
311
312
|
continuation,
|
|
312
313
|
event_id: args.eventId,
|
|
313
314
|
});
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
315
|
+
if (!steeringEnabled()) {
|
|
316
|
+
try {
|
|
317
|
+
yield (_r = args.host.slackNudges) === null || _r === void 0 ? void 0 : _r.append({
|
|
318
|
+
continuationKey: continuation,
|
|
319
|
+
sourceTs: message.ts,
|
|
320
|
+
text: media.userText,
|
|
321
|
+
author: (_s = message.author) === null || _s === void 0 ? void 0 : _s.userName,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
catch (nudgeError) {
|
|
325
|
+
log.warn("nudge append failed", {
|
|
326
|
+
error: nudgeError instanceof Error
|
|
327
|
+
? nudgeError.message
|
|
328
|
+
: String(nudgeError),
|
|
329
|
+
continuation,
|
|
330
|
+
event_id: args.eventId,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
330
333
|
}
|
|
331
334
|
try {
|
|
332
335
|
if (args.followUpStatus !== false) {
|
|
@@ -361,9 +364,9 @@ export function dispatchInboundMessage(args) {
|
|
|
361
364
|
* present. Returns true when a handler was scheduled.
|
|
362
365
|
*/
|
|
363
366
|
export function dispatchInboundFromEventBody(body, deps) {
|
|
364
|
-
var _a, _b;
|
|
365
|
-
var
|
|
366
|
-
const log = (
|
|
367
|
+
var _a, _b, _c;
|
|
368
|
+
var _d, _e, _f, _g;
|
|
369
|
+
const log = (_d = deps.log) !== null && _d !== void 0 ? _d : defaultSlackLog;
|
|
367
370
|
let eventId;
|
|
368
371
|
if (body !== null && typeof body === "object" && !Array.isArray(body)) {
|
|
369
372
|
const root = body;
|
|
@@ -386,7 +389,7 @@ export function dispatchInboundFromEventBody(body, deps) {
|
|
|
386
389
|
if (((_a = mention.author) === null || _a === void 0 ? void 0 : _a.isBot) === true) {
|
|
387
390
|
// Parse only admits bot-authored mentions when a gate exists, so the
|
|
388
391
|
// fallback is defensive.
|
|
389
|
-
const verdict = (
|
|
392
|
+
const verdict = (_e = (_b = deps.botMentionGate) === null || _b === void 0 ? void 0 : _b.evaluate(mention)) !== null && _e !== void 0 ? _e : {
|
|
390
393
|
allow: false,
|
|
391
394
|
reason: "bot mentions not enabled",
|
|
392
395
|
};
|
|
@@ -395,7 +398,7 @@ export function dispatchInboundFromEventBody(body, deps) {
|
|
|
395
398
|
event_id: eventId,
|
|
396
399
|
channel: mention.channelId,
|
|
397
400
|
thread_ts: mention.threadTs,
|
|
398
|
-
from_bot: (
|
|
401
|
+
from_bot: (_f = mention.author.botId) !== null && _f !== void 0 ? _f : mention.author.userId,
|
|
399
402
|
reason: verdict.reason,
|
|
400
403
|
});
|
|
401
404
|
return false;
|
|
@@ -450,6 +453,27 @@ export function dispatchInboundFromEventBody(body, deps) {
|
|
|
450
453
|
: { interruptContinuation: deps.interruptContinuation })), (eventId === undefined ? {} : { eventId }))));
|
|
451
454
|
return true;
|
|
452
455
|
}
|
|
456
|
+
const assistantThread = parseAssistantThreadStarted(body);
|
|
457
|
+
if (assistantThread !== null) {
|
|
458
|
+
const prompts = (_g = deps.suggestedPrompts) !== null && _g !== void 0 ? _g : [];
|
|
459
|
+
log.info("assistant thread started", {
|
|
460
|
+
channel: assistantThread.channelId,
|
|
461
|
+
thread_ts: assistantThread.threadTs,
|
|
462
|
+
user: assistantThread.userId,
|
|
463
|
+
event_id: eventId,
|
|
464
|
+
});
|
|
465
|
+
if (prompts.length > 0) {
|
|
466
|
+
deps.waitUntil(maybeSetSuggestedPrompts({
|
|
467
|
+
botToken: (_c = deps.credentials) === null || _c === void 0 ? void 0 : _c.botToken,
|
|
468
|
+
channelId: assistantThread.channelId,
|
|
469
|
+
threadTs: assistantThread.threadTs,
|
|
470
|
+
prompts,
|
|
471
|
+
title: deps.suggestedPromptsTitle,
|
|
472
|
+
log,
|
|
473
|
+
}));
|
|
474
|
+
}
|
|
475
|
+
return true;
|
|
476
|
+
}
|
|
453
477
|
if (deps.channelWatch !== undefined) {
|
|
454
478
|
// Parse keeps bot-authored posts; the watcher enforces the per-channel
|
|
455
479
|
// policy (includeBotPosts, own-post loop safety) with skip logging.
|
|
@@ -14,6 +14,14 @@ export interface ParseAppMentionOptions {
|
|
|
14
14
|
includeBotAuthored?: boolean;
|
|
15
15
|
}
|
|
16
16
|
export declare function parseAppMentionEvent(body: unknown, options?: ParseAppMentionOptions): SlackMessage | null;
|
|
17
|
+
export interface SlackAssistantThreadStarted {
|
|
18
|
+
channelId: string;
|
|
19
|
+
threadTs: string;
|
|
20
|
+
userId?: string;
|
|
21
|
+
teamId?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Slack fires this when a user opens the assistant pane. No model turn. */
|
|
24
|
+
export declare function parseAssistantThreadStarted(body: unknown): SlackAssistantThreadStarted | null;
|
|
17
25
|
/**
|
|
18
26
|
* Parse DM / IM messages. More generous than a strict channel_type check:
|
|
19
27
|
* accepts `channel_type === "im"` or channel ids starting with `D`, and
|
|
@@ -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,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASxD;AAsDD,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;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CA8B1E;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,CA4DjC;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;CACjB,GAAG,MAAM,CAYT"}
|
|
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,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASxD;AAsDD,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,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,CACzC,IAAI,EAAE,OAAO,GACZ,2BAA2B,GAAG,IAAI,CA+BpC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CA8B1E;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,CA4DjC;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;CACjB,GAAG,MAAM,CAYT"}
|
|
@@ -79,6 +79,38 @@ export function parseAppMentionEvent(body, options) {
|
|
|
79
79
|
const delegation = parseDelegationMetadata(event);
|
|
80
80
|
return delegation === undefined ? message : Object.assign(Object.assign({}, message), { delegation });
|
|
81
81
|
}
|
|
82
|
+
/** Slack fires this when a user opens the assistant pane. No model turn. */
|
|
83
|
+
export function parseAssistantThreadStarted(body) {
|
|
84
|
+
var _a;
|
|
85
|
+
const root = asRecord(body);
|
|
86
|
+
if (root === null || root.type !== "event_callback") {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
const event = asRecord(root.event);
|
|
90
|
+
if (event === null || event.type !== "assistant_thread_started") {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const thread = asRecord(event.assistant_thread);
|
|
94
|
+
if (thread === null) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const channelId = asString(thread.channel_id);
|
|
98
|
+
const threadTs = asString(thread.thread_ts);
|
|
99
|
+
if (channelId === undefined ||
|
|
100
|
+
channelId === "" ||
|
|
101
|
+
threadTs === undefined ||
|
|
102
|
+
threadTs === "") {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
const userId = asString(thread.user_id);
|
|
106
|
+
const teamId = (_a = asString(root.team_id)) !== null && _a !== void 0 ? _a : asString(event.team_id);
|
|
107
|
+
return {
|
|
108
|
+
channelId,
|
|
109
|
+
threadTs,
|
|
110
|
+
userId: userId === undefined || userId === "" ? undefined : userId,
|
|
111
|
+
teamId: teamId === undefined || teamId === "" ? undefined : teamId,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
82
114
|
/**
|
|
83
115
|
* Parse DM / IM messages. More generous than a strict channel_type check:
|
|
84
116
|
* accepts `channel_type === "im"` or channel ids starting with `D`, and
|
|
@@ -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", {
|
|
@@ -4,68 +4,65 @@
|
|
|
4
4
|
* Cursor-account channels do not use this path — they reply with a single
|
|
5
5
|
* final `chat.postMessage` and put thinking on `assistant.threads.setStatus`
|
|
6
6
|
* (no message edits).
|
|
7
|
+
*
|
|
8
|
+
* Assistant-pane threads only render stream APIs. Start lazily with the
|
|
9
|
+
* first real markdown/chunks plus recipient ids — empty startStream is
|
|
10
|
+
* rejected or never attaches.
|
|
7
11
|
*/
|
|
8
12
|
import type { ChannelEventContext } from "../../types.js";
|
|
9
13
|
import type { SlackLog } from "./log.js";
|
|
14
|
+
import { type StreamTaskChunk } from "./stream.js";
|
|
10
15
|
import type { SlackBotToken, SlackChannelState } from "./types.js";
|
|
11
16
|
type SlackChannel = ChannelEventContext<SlackChannelState>;
|
|
12
17
|
export interface LiveDeliveryDeps {
|
|
13
18
|
botToken: SlackBotToken | undefined;
|
|
14
19
|
getLog: () => SlackLog;
|
|
15
20
|
}
|
|
21
|
+
type OpenArgs = {
|
|
22
|
+
channel: SlackChannel;
|
|
23
|
+
channelId: string;
|
|
24
|
+
threadTs: string;
|
|
25
|
+
sessionId: string;
|
|
26
|
+
markdown_text?: string;
|
|
27
|
+
chunks?: StreamTaskChunk[];
|
|
28
|
+
};
|
|
29
|
+
type StreamArgs = {
|
|
30
|
+
channel: SlackChannel;
|
|
31
|
+
channelId: string;
|
|
32
|
+
sessionId: string;
|
|
33
|
+
};
|
|
16
34
|
/**
|
|
17
35
|
* How the default handlers deliver an in-progress reply. Methods write live
|
|
18
36
|
* delivery state (`streamTs`, `streamChannelId`, `lastPostedText`,
|
|
19
37
|
* `streamingUnavailable`) on `channel.state` directly.
|
|
20
38
|
*/
|
|
21
39
|
export interface LiveDeliveryStrategy {
|
|
22
|
-
/** True when tool-call thinking steps can be appended to the live message. */
|
|
23
40
|
readonly inlineToolSteps: boolean;
|
|
24
|
-
/** Open the live message
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
channelId: string;
|
|
28
|
-
threadTs: string;
|
|
29
|
-
sessionId: string;
|
|
30
|
-
}): Promise<void>;
|
|
31
|
-
/** Push the latest cumulative text to the live message (throttled). */
|
|
32
|
-
append(args: {
|
|
33
|
-
channel: SlackChannel;
|
|
34
|
-
channelId: string;
|
|
35
|
-
streamTs: string;
|
|
41
|
+
/** Open the live message with the first real markdown or task chunks. */
|
|
42
|
+
open(args: OpenArgs): Promise<boolean>;
|
|
43
|
+
append(args: StreamArgs & {
|
|
36
44
|
text: string;
|
|
37
|
-
sessionId: string;
|
|
38
45
|
}): Promise<void>;
|
|
46
|
+
appendChunks(args: StreamArgs & {
|
|
47
|
+
chunks: StreamTaskChunk[];
|
|
48
|
+
}): Promise<boolean>;
|
|
39
49
|
/**
|
|
40
50
|
* Flush the final reply text. `delivered` is false only when the caller must
|
|
41
51
|
* post the full reply as a fresh message (finalize failed on partial text).
|
|
42
52
|
*/
|
|
43
|
-
finalize(args: {
|
|
44
|
-
channel: SlackChannel;
|
|
45
|
-
channelId: string;
|
|
46
|
-
streamTs: string;
|
|
53
|
+
finalize(args: StreamArgs & {
|
|
47
54
|
text: string;
|
|
48
|
-
sessionId: string;
|
|
49
55
|
}): Promise<{
|
|
50
56
|
delivered: boolean;
|
|
51
57
|
}>;
|
|
52
|
-
/** Close the live message when the turn produced no final text. */
|
|
53
58
|
finalizeEmpty(args: {
|
|
54
59
|
channel: SlackChannel;
|
|
55
|
-
channelId: string;
|
|
56
|
-
streamTs: string;
|
|
57
60
|
}): Promise<void>;
|
|
58
|
-
/** Best-effort remove a live message left open after the turn ended. */
|
|
59
61
|
cleanupOrphan(args: {
|
|
60
62
|
channel: SlackChannel;
|
|
61
63
|
}): Promise<void>;
|
|
62
|
-
|
|
63
|
-
fail(args: {
|
|
64
|
-
channel: SlackChannel;
|
|
65
|
-
channelId: string;
|
|
66
|
-
streamTs: string;
|
|
64
|
+
fail(args: StreamArgs & {
|
|
67
65
|
errorText: string;
|
|
68
|
-
sessionId: string;
|
|
69
66
|
}): Promise<{
|
|
70
67
|
delivered: boolean;
|
|
71
68
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/live-delivery.ts"],"names":[],"mappings":"AAAA
|
|
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,CA0PtB"}
|