@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
|
@@ -4,6 +4,10 @@
|
|
|
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
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
13
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
@@ -16,43 +20,115 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
16
20
|
};
|
|
17
21
|
import { appendChatStream, startChatStream, stopChatStream } from "./api.js";
|
|
18
22
|
import { computeStreamAppend } from "./stream.js";
|
|
23
|
+
function streamRecipients(channel) {
|
|
24
|
+
const user = channel.state.triggeringUserId;
|
|
25
|
+
const team = channel.state.teamId;
|
|
26
|
+
return {
|
|
27
|
+
recipient_user_id: user === null || user === "" ? undefined : user,
|
|
28
|
+
recipient_team_id: team === null || team === "" ? undefined : team,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function activeStreamTs(channel) {
|
|
32
|
+
const ts = channel.state.streamTs;
|
|
33
|
+
return ts === null || ts === "" ? null : ts;
|
|
34
|
+
}
|
|
19
35
|
export function createStreamDeliveryStrategy(deps) {
|
|
20
36
|
const { botToken, getLog } = deps;
|
|
37
|
+
const open = (_a) => __awaiter(this, [_a], void 0, function* ({ channel, channelId, threadTs, sessionId, markdown_text, chunks, }) {
|
|
38
|
+
if (activeStreamTs(channel) !== null) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
const hasMarkdown = markdown_text !== undefined && markdown_text !== "";
|
|
42
|
+
const hasChunks = chunks !== undefined && chunks.length > 0;
|
|
43
|
+
if (!hasMarkdown && !hasChunks) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const log = getLog();
|
|
47
|
+
const started = yield startChatStream(Object.assign({ botToken, channel: channelId, thread_ts: threadTs, markdown_text: hasMarkdown ? markdown_text : undefined, chunks: hasChunks ? chunks : undefined }, streamRecipients(channel)));
|
|
48
|
+
if (!started.ok) {
|
|
49
|
+
log.warn("chat.startStream unavailable", {
|
|
50
|
+
error: started.error,
|
|
51
|
+
channel: channelId,
|
|
52
|
+
thread_ts: threadTs,
|
|
53
|
+
session: sessionId,
|
|
54
|
+
});
|
|
55
|
+
if (started.unsupported === true) {
|
|
56
|
+
channel.state.streamingUnavailable = true;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
channel.state.streamTs = started.ts;
|
|
61
|
+
channel.state.streamChannelId = started.channel;
|
|
62
|
+
channel.state.lastPostedText = hasMarkdown ? (markdown_text !== null && markdown_text !== void 0 ? markdown_text : "") : "";
|
|
63
|
+
log.info("chat.startStream ok", {
|
|
64
|
+
channel: started.channel,
|
|
65
|
+
stream_ts: started.ts,
|
|
66
|
+
session: sessionId,
|
|
67
|
+
});
|
|
68
|
+
return true;
|
|
69
|
+
});
|
|
70
|
+
const ensureOpen = (args) => __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
const existing = activeStreamTs(args.channel);
|
|
72
|
+
if (existing !== null) {
|
|
73
|
+
return existing;
|
|
74
|
+
}
|
|
75
|
+
const threadTs = args.channel.state.threadTs;
|
|
76
|
+
if (threadTs === null || threadTs === "") {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const opened = yield open({
|
|
80
|
+
channel: args.channel,
|
|
81
|
+
channelId: args.channelId,
|
|
82
|
+
threadTs,
|
|
83
|
+
sessionId: args.sessionId,
|
|
84
|
+
markdown_text: args.markdown_text,
|
|
85
|
+
chunks: args.chunks,
|
|
86
|
+
});
|
|
87
|
+
return opened ? activeStreamTs(args.channel) : null;
|
|
88
|
+
});
|
|
89
|
+
const stopWithSuffix = (args) => __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
const appendText = computeStreamAppend(args.channel.state.lastPostedText, args.text);
|
|
91
|
+
const stopped = yield stopChatStream({
|
|
92
|
+
botToken,
|
|
93
|
+
channel: args.channelId,
|
|
94
|
+
ts: args.ts,
|
|
95
|
+
markdown_text: appendText === "" ? undefined : appendText,
|
|
96
|
+
});
|
|
97
|
+
args.channel.state.streamTs = null;
|
|
98
|
+
if (stopped.ok) {
|
|
99
|
+
args.channel.state.lastPostedText = args.text;
|
|
100
|
+
args.channel.state.lastBotMessageTs = args.ts;
|
|
101
|
+
return { ok: true };
|
|
102
|
+
}
|
|
103
|
+
if (stopped.unsupported === true) {
|
|
104
|
+
args.channel.state.streamingUnavailable = true;
|
|
105
|
+
}
|
|
106
|
+
return { ok: false, error: stopped.error };
|
|
107
|
+
});
|
|
108
|
+
const closeOrphan = (channel) => __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
var _a;
|
|
110
|
+
const orphanTs = activeStreamTs(channel);
|
|
111
|
+
const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
|
|
112
|
+
if (orphanTs === null || channelId === null || channelId === "") {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
yield stopChatStream({ botToken, channel: channelId, ts: orphanTs });
|
|
116
|
+
channel.state.streamTs = null;
|
|
117
|
+
});
|
|
21
118
|
return {
|
|
22
119
|
inlineToolSteps: true,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
markdown_text:
|
|
120
|
+
open,
|
|
121
|
+
append(_a) {
|
|
122
|
+
return __awaiter(this, arguments, void 0, function* ({ channel, channelId, text, sessionId }) {
|
|
123
|
+
const ts = yield ensureOpen({
|
|
124
|
+
channel,
|
|
125
|
+
channelId,
|
|
126
|
+
sessionId,
|
|
127
|
+
markdown_text: text,
|
|
31
128
|
});
|
|
32
|
-
if (
|
|
33
|
-
log.warn("chat.startStream unavailable", {
|
|
34
|
-
error: started.error,
|
|
35
|
-
channel: channelId,
|
|
36
|
-
thread_ts: threadTs,
|
|
37
|
-
session: sessionId,
|
|
38
|
-
});
|
|
39
|
-
if (started.unsupported === true) {
|
|
40
|
-
channel.state.streamingUnavailable = true;
|
|
41
|
-
}
|
|
129
|
+
if (ts === null) {
|
|
42
130
|
return;
|
|
43
131
|
}
|
|
44
|
-
channel.state.streamTs = started.ts;
|
|
45
|
-
channel.state.streamChannelId = started.channel;
|
|
46
|
-
channel.state.lastPostedText = "";
|
|
47
|
-
log.info("chat.startStream ok", {
|
|
48
|
-
channel: started.channel,
|
|
49
|
-
stream_ts: started.ts,
|
|
50
|
-
session: sessionId,
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
},
|
|
54
|
-
append(_a) {
|
|
55
|
-
return __awaiter(this, arguments, void 0, function* ({ channel, channelId, streamTs, text, sessionId }) {
|
|
56
132
|
const appendText = computeStreamAppend(channel.state.lastPostedText, text);
|
|
57
133
|
if (appendText === "") {
|
|
58
134
|
return;
|
|
@@ -60,14 +136,14 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
60
136
|
const result = yield appendChatStream({
|
|
61
137
|
botToken,
|
|
62
138
|
channel: channelId,
|
|
63
|
-
ts
|
|
139
|
+
ts,
|
|
64
140
|
markdown_text: appendText,
|
|
65
141
|
});
|
|
66
142
|
if (!result.ok) {
|
|
67
143
|
getLog().warn("appendStream failed", {
|
|
68
144
|
error: result.error,
|
|
69
145
|
channel: channelId,
|
|
70
|
-
stream_ts:
|
|
146
|
+
stream_ts: ts,
|
|
71
147
|
session: sessionId,
|
|
72
148
|
});
|
|
73
149
|
if (result.unsupported === true) {
|
|
@@ -78,24 +154,52 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
78
154
|
channel.state.lastPostedText = text;
|
|
79
155
|
});
|
|
80
156
|
},
|
|
81
|
-
|
|
82
|
-
return __awaiter(this, arguments, void 0, function* ({ channel, channelId,
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
157
|
+
appendChunks(_a) {
|
|
158
|
+
return __awaiter(this, arguments, void 0, function* ({ channel, channelId, chunks, sessionId }) {
|
|
159
|
+
const hadStream = activeStreamTs(channel) !== null;
|
|
160
|
+
const ts = yield ensureOpen({
|
|
161
|
+
channel,
|
|
162
|
+
channelId,
|
|
163
|
+
sessionId,
|
|
164
|
+
chunks,
|
|
165
|
+
});
|
|
166
|
+
if (ts === null) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
if (!hadStream) {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
const result = yield appendChatStream({
|
|
87
173
|
botToken,
|
|
88
174
|
channel: channelId,
|
|
89
|
-
ts
|
|
90
|
-
|
|
175
|
+
ts,
|
|
176
|
+
chunks,
|
|
177
|
+
});
|
|
178
|
+
return result.ok;
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
finalize(_a) {
|
|
182
|
+
return __awaiter(this, arguments, void 0, function* ({ channel, channelId, text, sessionId }) {
|
|
183
|
+
const log = getLog();
|
|
184
|
+
const ts = yield ensureOpen({
|
|
185
|
+
channel,
|
|
186
|
+
channelId,
|
|
187
|
+
sessionId,
|
|
188
|
+
markdown_text: text,
|
|
189
|
+
});
|
|
190
|
+
if (ts === null) {
|
|
191
|
+
return { delivered: false };
|
|
192
|
+
}
|
|
193
|
+
const stopped = yield stopWithSuffix({
|
|
194
|
+
channel,
|
|
195
|
+
channelId,
|
|
196
|
+
ts,
|
|
197
|
+
text,
|
|
91
198
|
});
|
|
92
199
|
if (stopped.ok) {
|
|
93
|
-
channel.state.streamTs = null;
|
|
94
|
-
channel.state.lastPostedText = text;
|
|
95
|
-
channel.state.lastBotMessageTs = streamTs;
|
|
96
200
|
log.info("reply delivered via stream", {
|
|
97
201
|
channel: channelId,
|
|
98
|
-
stream_ts:
|
|
202
|
+
stream_ts: ts,
|
|
99
203
|
session: sessionId,
|
|
100
204
|
chars: text.length,
|
|
101
205
|
});
|
|
@@ -104,52 +208,47 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
104
208
|
log.warn("chat.stopStream failed; falling back to postMessage", {
|
|
105
209
|
error: stopped.error,
|
|
106
210
|
channel: channelId,
|
|
107
|
-
stream_ts:
|
|
211
|
+
stream_ts: ts,
|
|
108
212
|
session: sessionId,
|
|
109
213
|
});
|
|
110
|
-
if (stopped.unsupported === true) {
|
|
111
|
-
channel.state.streamingUnavailable = true;
|
|
112
|
-
}
|
|
113
|
-
channel.state.streamTs = null;
|
|
114
|
-
// If we already streamed content, do not post the full reply again.
|
|
115
214
|
const alreadyStreamed = typeof channel.state.lastPostedText === "string" &&
|
|
116
215
|
channel.state.lastPostedText.length > 0;
|
|
117
216
|
return { delivered: alreadyStreamed };
|
|
118
217
|
});
|
|
119
218
|
},
|
|
120
219
|
finalizeEmpty(_a) {
|
|
121
|
-
return __awaiter(this, arguments, void 0, function* ({
|
|
122
|
-
yield
|
|
220
|
+
return __awaiter(this, arguments, void 0, function* ({ channel }) {
|
|
221
|
+
yield closeOrphan(channel);
|
|
123
222
|
});
|
|
124
223
|
},
|
|
125
224
|
cleanupOrphan(_a) {
|
|
126
225
|
return __awaiter(this, arguments, void 0, function* ({ channel }) {
|
|
127
|
-
|
|
128
|
-
// message.completed / turn.failed already stop the stream. If the
|
|
129
|
-
// turn ended without a final assistant message, close it here so
|
|
130
|
-
// Slack does not leave the live reply in a streaming state.
|
|
131
|
-
const streamTs = channel.state.streamTs;
|
|
132
|
-
const channelId = (_b = channel.state.streamChannelId) !== null && _b !== void 0 ? _b : channel.state.channelId;
|
|
133
|
-
if (streamTs === null ||
|
|
134
|
-
streamTs === "" ||
|
|
135
|
-
channelId === null ||
|
|
136
|
-
channelId === "") {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
yield stopChatStream({ botToken, channel: channelId, ts: streamTs });
|
|
140
|
-
channel.state.streamTs = null;
|
|
226
|
+
yield closeOrphan(channel);
|
|
141
227
|
});
|
|
142
228
|
},
|
|
143
229
|
fail(_a) {
|
|
144
|
-
return __awaiter(this, arguments, void 0, function* ({ channel, channelId,
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
230
|
+
return __awaiter(this, arguments, void 0, function* ({ channel, channelId, errorText, sessionId }) {
|
|
231
|
+
const ts = yield ensureOpen({
|
|
232
|
+
channel,
|
|
233
|
+
channelId,
|
|
234
|
+
sessionId,
|
|
149
235
|
markdown_text: errorText,
|
|
150
236
|
});
|
|
151
|
-
|
|
152
|
-
|
|
237
|
+
if (ts === null) {
|
|
238
|
+
return { delivered: false };
|
|
239
|
+
}
|
|
240
|
+
const stopped = yield stopWithSuffix({
|
|
241
|
+
channel,
|
|
242
|
+
channelId,
|
|
243
|
+
ts,
|
|
244
|
+
text: errorText,
|
|
245
|
+
});
|
|
246
|
+
if (stopped.ok) {
|
|
247
|
+
return { delivered: true };
|
|
248
|
+
}
|
|
249
|
+
const alreadyStreamed = typeof channel.state.lastPostedText === "string" &&
|
|
250
|
+
channel.state.lastPostedText.length > 0;
|
|
251
|
+
return { delivered: alreadyStreamed };
|
|
153
252
|
});
|
|
154
253
|
},
|
|
155
254
|
};
|
|
@@ -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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,iDACE,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,YAAY,EAAE,MAAM,CAAC;YACrB,aAAa,EAAE,OAAO,CAAC;SACxB,CAAC;QACF,UAAU,CAAC,EAAE;YACX,iBAAiB,EAAE,MAAM,CAAC;YAC1B,iBAAiB,EAAE,KAAK,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC9D,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,gBAAgB,EAAE,OAAO,CAAC;YAC1B,oBAAoB,EAAE,OAAO,CAAC;YAC9B,8BAA8B,EAAE,OAAO,CAAC;SACzC,CAAC;KACH,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE;YACN,GAAG,EAAE,MAAM,EAAE,CAAC;SACf,CAAC;QACF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE;QACR,mBAAmB,EAAE;YACnB,UAAU,EAAE,MAAM,EAAE,CAAC;SACtB,CAAC;QACF,aAAa,EAAE;YACb,UAAU,EAAE,OAAO,CAAC;SACrB,CAAC;QACF,kBAAkB,EAAE,OAAO,CAAC;QAC5B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;QACxB,oBAAoB,CAAC,EAAE;YACrB,8BAA8B,EAAE,OAAO,CAAC;YACxC,2BAA2B,EAAE,MAAM,CAAC;SACrC,CAAC;KACH,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,iDACE,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,YAAY,EAAE,MAAM,CAAC;YACrB,aAAa,EAAE,OAAO,CAAC;SACxB,CAAC;QACF,UAAU,CAAC,EAAE;YACX,iBAAiB,EAAE,MAAM,CAAC;YAC1B,iBAAiB,EAAE,KAAK,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC9D,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,gBAAgB,EAAE,OAAO,CAAC;YAC1B,oBAAoB,EAAE,OAAO,CAAC;YAC9B,8BAA8B,EAAE,OAAO,CAAC;SACzC,CAAC;KACH,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE;YACN,GAAG,EAAE,MAAM,EAAE,CAAC;SACf,CAAC;QACF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE;QACR,mBAAmB,EAAE;YACnB,UAAU,EAAE,MAAM,EAAE,CAAC;SACtB,CAAC;QACF,aAAa,EAAE;YACb,UAAU,EAAE,OAAO,CAAC;SACrB,CAAC;QACF,kBAAkB,EAAE,OAAO,CAAC;QAC5B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,sBAAsB,EAAE,OAAO,CAAC;QAChC,cAAc,EAAE,OAAO,CAAC;QACxB,oBAAoB,CAAC,EAAE;YACrB,8BAA8B,EAAE,OAAO,CAAC;YACxC,2BAA2B,EAAE,MAAM,CAAC;SACrC,CAAC;KACH,CAAC;CACH;AA6DD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,GAC5B,gBAAgB,CAiFlB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,GACzC;IACD,GAAG,EAAE,gBAAgB,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAKA;AAED,kDAAkD;AAClD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE;IAAE,GAAG,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,EACvD,GAAG,GAAE,KAAK,GAAG,MAAM,GAAG,MAAe,GACpC,aAAa,CAAC;IACf,IAAI,EAAE,mBAAmB,GAAG,oBAAoB,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAkBD"}
|
|
@@ -31,7 +31,11 @@ const BOT_SCOPES = [
|
|
|
31
31
|
"reactions:write",
|
|
32
32
|
"users:read",
|
|
33
33
|
];
|
|
34
|
-
const BOT_EVENTS = [
|
|
34
|
+
const BOT_EVENTS = [
|
|
35
|
+
"app_mention",
|
|
36
|
+
"message.im",
|
|
37
|
+
"assistant_thread_started",
|
|
38
|
+
];
|
|
35
39
|
/** Slack's display_information.description bound. */
|
|
36
40
|
const MAX_DESCRIPTION_LENGTH = 140;
|
|
37
41
|
const DESCRIPTION_SUFFIX = " — an AI agent built with Cursor";
|
|
@@ -141,7 +145,7 @@ export function buildSlackManifestPair(options) {
|
|
|
141
145
|
prod: buildSlackManifest(Object.assign(Object.assign({}, options), { env: "prod" })),
|
|
142
146
|
};
|
|
143
147
|
}
|
|
144
|
-
/**
|
|
148
|
+
/** Manifest filenames written under `.slack/`. */
|
|
145
149
|
export function slackManifestFileEntries(pair, env = "both") {
|
|
146
150
|
const files = [];
|
|
147
151
|
if (env === "dev" || env === "both") {
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
export declare const SLACK_NUDGE_ROOT_REL = ".agent-serve/slack-nudge-root";
|
|
6
6
|
export declare const SLACK_NUDGE_CONTINUATION_REL = ".agent-serve/slack-nudge-continuation";
|
|
7
7
|
export declare const SLACK_NUDGE_CARRIER_REL = ".agent-serve/slack-nudge-carrier.mjs";
|
|
8
|
+
/** Conversation allowed to claim nudges; subagents share the cwd and would otherwise take the parent's. */
|
|
9
|
+
export declare const SLACK_NUDGE_OWNER_REL = ".agent-serve/slack-nudge-owner";
|
|
8
10
|
/** Carrier script body — reads nudge-root + continuation, drains pending. */
|
|
9
11
|
export declare const SLACK_NUDGE_CARRIER_SCRIPT: string;
|
|
10
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nudge-carrier.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/nudge-carrier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,oBAAoB,kCAAkC,CAAC;AACpE,eAAO,MAAM,4BAA4B,0CACA,CAAC;AAC1C,eAAO,MAAM,uBAAuB,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"nudge-carrier.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/nudge-carrier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,oBAAoB,kCAAkC,CAAC;AACpE,eAAO,MAAM,4BAA4B,0CACA,CAAC;AAC1C,eAAO,MAAM,uBAAuB,yCAAyC,CAAC;AAC9E,2GAA2G;AAC3G,eAAO,MAAM,qBAAqB,mCAAmC,CAAC;AAEtE,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B,EAAE,MAyJxC,CAAC;AAOF;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,IAAI,EAAE;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ChB"}
|
|
@@ -11,11 +11,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
12
|
});
|
|
13
13
|
};
|
|
14
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
14
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
15
15
|
import { join } from "node:path";
|
|
16
16
|
export const SLACK_NUDGE_ROOT_REL = ".agent-serve/slack-nudge-root";
|
|
17
17
|
export const SLACK_NUDGE_CONTINUATION_REL = ".agent-serve/slack-nudge-continuation";
|
|
18
18
|
export const SLACK_NUDGE_CARRIER_REL = ".agent-serve/slack-nudge-carrier.mjs";
|
|
19
|
+
/** Conversation allowed to claim nudges; subagents share the cwd and would otherwise take the parent's. */
|
|
20
|
+
export const SLACK_NUDGE_OWNER_REL = ".agent-serve/slack-nudge-owner";
|
|
19
21
|
/** Carrier script body — reads nudge-root + continuation, drains pending. */
|
|
20
22
|
export const SLACK_NUDGE_CARRIER_SCRIPT = `#!/usr/bin/env node
|
|
21
23
|
import { mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
@@ -45,7 +47,46 @@ async function readText(rel) {
|
|
|
45
47
|
}
|
|
46
48
|
}
|
|
47
49
|
|
|
50
|
+
async function readStdin() {
|
|
51
|
+
const chunks = [];
|
|
52
|
+
const read = (async () => {
|
|
53
|
+
for await (const chunk of process.stdin) chunks.push(chunk);
|
|
54
|
+
})().catch(() => {});
|
|
55
|
+
await Promise.race([
|
|
56
|
+
read,
|
|
57
|
+
new Promise((resolve) => setTimeout(resolve, 250).unref?.()),
|
|
58
|
+
]);
|
|
59
|
+
process.stdin.destroy();
|
|
60
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** First caller pins ownership; a subagent cannot call a tool before its parent's Task call. */
|
|
64
|
+
async function ownsStore(caller) {
|
|
65
|
+
if (caller === "") return true;
|
|
66
|
+
const ownerPath = join(workspace, ${JSON.stringify(SLACK_NUDGE_OWNER_REL)});
|
|
67
|
+
try {
|
|
68
|
+
// wx is O_CREAT|O_EXCL, so creating the file is the claim: concurrent hooks cannot both win.
|
|
69
|
+
await writeFile(ownerPath, caller + "\\n", { encoding: "utf8", flag: "wx" });
|
|
70
|
+
return true;
|
|
71
|
+
} catch (error) {
|
|
72
|
+
if (error && error.code !== "EEXIST") return false;
|
|
73
|
+
}
|
|
74
|
+
// Claimed already — the only question left is whether we are the claimant.
|
|
75
|
+
const owner = await readText(${JSON.stringify(SLACK_NUDGE_OWNER_REL)});
|
|
76
|
+
return owner === "" || owner === caller;
|
|
77
|
+
}
|
|
78
|
+
|
|
48
79
|
async function main() {
|
|
80
|
+
const raw = await readStdin();
|
|
81
|
+
let caller = "";
|
|
82
|
+
try {
|
|
83
|
+
const parsed = JSON.parse(raw);
|
|
84
|
+
if (parsed && typeof parsed.conversation_id === "string") {
|
|
85
|
+
caller = parsed.conversation_id.trim();
|
|
86
|
+
}
|
|
87
|
+
} catch {
|
|
88
|
+
// Fail open: an unparseable payload must not strand the follow-up.
|
|
89
|
+
}
|
|
49
90
|
const root = await readText(${JSON.stringify(SLACK_NUDGE_ROOT_REL)});
|
|
50
91
|
const continuation = await readText(
|
|
51
92
|
${JSON.stringify(SLACK_NUDGE_CONTINUATION_REL)}
|
|
@@ -54,6 +95,11 @@ async function main() {
|
|
|
54
95
|
process.stdout.write("{}\\n");
|
|
55
96
|
return;
|
|
56
97
|
}
|
|
98
|
+
// Not ours: leave it pending for the parent or the turn-boundary drain.
|
|
99
|
+
if (!(await ownsStore(caller))) {
|
|
100
|
+
process.stdout.write("{}\\n");
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
57
103
|
const pendingDir = join(root, safeKey(continuation), "pending");
|
|
58
104
|
const deliveredDir = join(root, safeKey(continuation), "delivered");
|
|
59
105
|
let names = [];
|
|
@@ -142,6 +188,7 @@ export function materializeSlackNudgeCarrier(args) {
|
|
|
142
188
|
yield writeFile(join(args.harnessCwd, SLACK_NUDGE_ROOT_REL), `${args.nudgeRootDir}\n`, "utf8");
|
|
143
189
|
yield writeFile(join(args.harnessCwd, SLACK_NUDGE_CONTINUATION_REL), `${args.continuationKey}\n`, "utf8");
|
|
144
190
|
yield writeFile(join(args.harnessCwd, SLACK_NUDGE_CARRIER_REL), SLACK_NUDGE_CARRIER_SCRIPT, "utf8");
|
|
191
|
+
yield rm(join(args.harnessCwd, SLACK_NUDGE_OWNER_REL), { force: true });
|
|
145
192
|
const hooksPath = join(args.harnessCwd, ".cursor", "hooks.json");
|
|
146
193
|
let existing = { version: 1, hooks: {} };
|
|
147
194
|
try {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Slack setup guide printed by `agent-serve slack setup`.
|
|
3
3
|
*
|
|
4
4
|
* Dedicated Socket Mode app via `slack create` (dashboard wizard).
|
|
5
|
-
* `slack init --manual` is the unmanaged paste
|
|
5
|
+
* `slack init --manual` is the unmanaged Slack CLI / paste path.
|
|
6
6
|
* {@link SLACK_SETUP_PHASES} is that checklist; its ids key
|
|
7
7
|
* `.agent-serve/slack/setup-status.json`.
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAgE/C,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAUA;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CA2B9C"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Slack setup guide printed by `agent-serve slack setup`.
|
|
3
3
|
*
|
|
4
4
|
* Dedicated Socket Mode app via `slack create` (dashboard wizard).
|
|
5
|
-
* `slack init --manual` is the unmanaged paste
|
|
5
|
+
* `slack init --manual` is the unmanaged Slack CLI / paste path.
|
|
6
6
|
* {@link SLACK_SETUP_PHASES} is that checklist; its ids key
|
|
7
7
|
* `.agent-serve/slack/setup-status.json`.
|
|
8
8
|
*/
|
|
@@ -13,6 +13,7 @@ export const SLACK_SETUP_PHASES = [
|
|
|
13
13
|
title: "Generate channel + manifests",
|
|
14
14
|
steps: [
|
|
15
15
|
"agent-serve slack init --manual --dir . --name My Agent",
|
|
16
|
+
"Installs the Slack app when Slack CLI is logged in. Otherwise next asks the user to install it.",
|
|
16
17
|
"Manifests default to Socket Mode (no public Request URL).",
|
|
17
18
|
],
|
|
18
19
|
},
|
|
@@ -21,9 +22,11 @@ export const SLACK_SETUP_PHASES = [
|
|
|
21
22
|
actor: "human",
|
|
22
23
|
title: "Create two Slack apps from manifests",
|
|
23
24
|
steps: [
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
25
|
+
"Preferred: Slack CLI at ~/.slack/bin/slack. slack login --no-prompt, then slack app install --environment local --team <T> --force",
|
|
26
|
+
"Prod: SLACK_ENV=deployed slack app install --environment deployed --team <T> --force",
|
|
27
|
+
"Do not slack deploy; Agent SDK serve owns Socket Mode",
|
|
28
|
+
"Fallback: https://api.slack.com/apps -> Create New App from a manifest",
|
|
29
|
+
"Paste .slack/manifest.dev.json, then manifest.prod.json",
|
|
27
30
|
],
|
|
28
31
|
},
|
|
29
32
|
{
|
|
@@ -31,8 +34,9 @@ export const SLACK_SETUP_PHASES = [
|
|
|
31
34
|
actor: "human",
|
|
32
35
|
title: "Install + mint App-Level Token",
|
|
33
36
|
steps: [
|
|
34
|
-
"
|
|
37
|
+
"Slack CLI install leaves tokens in that process only. Copy xoxb from OAuth & Permissions at https://api.slack.com/apps/<appId>",
|
|
35
38
|
"App-Level Tokens: create token with connections:write; copy xapp-...",
|
|
39
|
+
"If Slack CLI wrote SLACK_* to .env, copy them into .env.local using env.example names",
|
|
36
40
|
],
|
|
37
41
|
},
|
|
38
42
|
{
|
|
@@ -88,7 +92,7 @@ export function formatSlackSetupGuide() {
|
|
|
88
92
|
" Finish Slack consent and the bot name there. The CLI writes",
|
|
89
93
|
" tokens into .env.local.",
|
|
90
94
|
"",
|
|
91
|
-
"Manual Slack app: `slack init --manual
|
|
95
|
+
"Manual Slack app: `slack init --manual` (Slack CLI, or paste at api.slack.com).",
|
|
92
96
|
"Goal: importable dev + prod Slack apps over Socket Mode (no public URL).",
|
|
93
97
|
"App-Level Token (xapp-...) + Bot Token (xoxb-...) required.",
|
|
94
98
|
"",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/slack-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAEV,iBAAiB,EAMlB,MAAM,gBAAgB,CAAC;AA2CxB,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,SAAS,CAEjC;AAED,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,aAAa,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,uBAAuB,GAAG,SAAS,CAYrC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,GAAE,mBAAwB,GACjC,iBAAiB,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/slack-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAEV,iBAAiB,EAMlB,MAAM,gBAAgB,CAAC;AA2CxB,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAQpB;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,SAAS,CAEjC;AAED,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,aAAa,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,uBAAuB,GAAG,SAAS,CAYrC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,GAAE,mBAAwB,GACjC,iBAAiB,CAAC,iBAAiB,CAAC,CA4atC"}
|
|
@@ -123,7 +123,7 @@ export function slackChannel(authored = {}) {
|
|
|
123
123
|
let channelWatch;
|
|
124
124
|
let botMentionGate;
|
|
125
125
|
function inboundDeps(args) {
|
|
126
|
-
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ send: args.send, continuation: options.continuation, waitUntil: args.waitUntil, onAppMention,
|
|
126
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ send: args.send, continuation: options.continuation, waitUntil: args.waitUntil, onAppMention,
|
|
127
127
|
onDirectMessage }, (onReactionAdded === undefined ? {} : { onReactionAdded })), { credentials,
|
|
128
128
|
eventIds, host: args.host, artifacts: args.artifacts, log: getLog(), mentionsEnabled,
|
|
129
129
|
directMessagesEnabled,
|
|
@@ -139,7 +139,7 @@ export function slackChannel(authored = {}) {
|
|
|
139
139
|
getContinuationLastBotMessageTs: args.getContinuationLastBotMessageTs,
|
|
140
140
|
})), (args.interruptContinuation === undefined
|
|
141
141
|
? {}
|
|
142
|
-
: { interruptContinuation: args.interruptContinuation })), (channelWatch === undefined ? {} : { channelWatch })), (botMentionGate === undefined ? {} : { botMentionGate }));
|
|
142
|
+
: { interruptContinuation: args.interruptContinuation })), (channelWatch === undefined ? {} : { channelWatch })), (botMentionGate === undefined ? {} : { botMentionGate })), { suggestedPrompts: options.suggestedPrompts, suggestedPromptsTitle: options.suggestedPromptsTitle });
|
|
143
143
|
}
|
|
144
144
|
const definition = defineChannel({
|
|
145
145
|
auth: [allowAll()],
|
|
@@ -318,6 +318,7 @@ export function slackChannel(authored = {}) {
|
|
|
318
318
|
credentials,
|
|
319
319
|
getSession: args.getSession,
|
|
320
320
|
resolveApproval: args.resolveApproval,
|
|
321
|
+
resolveAuth: args.resolveAuth,
|
|
321
322
|
waitUntil: args.waitUntil,
|
|
322
323
|
log: getLog(),
|
|
323
324
|
blockExternals,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-approval-events.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/tool-approval-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-approval-events.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/tool-approval-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAU3D,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,8BAA8B;IAC7C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,oBAAoB,CAAC,iBAAiB,CAAC,CAuLzC"}
|