@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `agent-serve slack …` CLI — doctor, destroy/icon, `create` as a
|
|
3
3
|
* dashboard-wizard launcher (`slack-provision-client.ts`), and
|
|
4
|
-
* `init --manual` for
|
|
4
|
+
* `init --manual` for Slack CLI / paste-at-api.slack.com manifests.
|
|
5
5
|
*/
|
|
6
6
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7
7
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
@@ -12,16 +12,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
12
12
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
13
|
});
|
|
14
14
|
};
|
|
15
|
-
import { access,
|
|
15
|
+
import { access, readFile } from "node:fs/promises";
|
|
16
16
|
import { basename, extname, join, resolve as resolvePath } from "node:path";
|
|
17
17
|
import { envPrefixFromName, formatSlackSetupGuide, initSlackChannel, runSlackDoctor, slackEnvKeys, } from "../channels/slack/index.js";
|
|
18
18
|
import { resolveDeployAuth } from "./cli-deploy.js";
|
|
19
|
-
import { cmdSlackInit, runSlackManifest } from "./cli-slack-manual.js";
|
|
19
|
+
import { cmdSlackInit, runSlackManifest, } from "./cli-slack-manual.js";
|
|
20
20
|
import { cursorExternalApiUrl } from "./cursor/credentials.js";
|
|
21
21
|
import { slugFromDirectoryName } from "./deploy-client.js";
|
|
22
22
|
import { inferDeployGitSource } from "./deploy-source.js";
|
|
23
23
|
import { describeError } from "./describe-error.js";
|
|
24
24
|
import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
|
|
25
|
+
import { ensureEnvLocalGitignored, upsertEnvFile } from "./env-file.js";
|
|
25
26
|
import { loadAgentLocalEnv } from "./local-env.js";
|
|
26
27
|
import { openBrowser } from "./open-browser.js";
|
|
27
28
|
import { AgentServeSlackClient, SlackProvisionApiError, } from "./slack-provision-client.js";
|
|
@@ -39,6 +40,8 @@ Usage:
|
|
|
39
40
|
[--prod] [--team <id>] [--json]
|
|
40
41
|
${CLI} slack init --manual [--dir .] [--name NAME]
|
|
41
42
|
[--prefix PREFIX | --no-prefix] [--channel-posts]
|
|
43
|
+
[--install | --no-install]
|
|
44
|
+
[--slack-team T0123ABCD] [--prod]
|
|
42
45
|
${CLI} slack manifest --env dev|prod|both [--dir .] [--name NAME]
|
|
43
46
|
[--print]
|
|
44
47
|
${CLI} slack doctor [--dir .] [--prefix PREFIX | --no-prefix] [--json]
|
|
@@ -56,8 +59,13 @@ create/destroy/icon — dedicated Socket Mode app via the Cursor dashboard:
|
|
|
56
59
|
png/jpg/gif file (at most 512KB).
|
|
57
60
|
|
|
58
61
|
\`slack init\` without --manual is not the first-run path. Use \`slack create\`.
|
|
59
|
-
\`slack init --manual\` writes the channel file, manifests
|
|
60
|
-
|
|
62
|
+
\`slack init --manual\` writes the channel file, manifests, a Slack CLI
|
|
63
|
+
\`.slack/\` project (get-manifest → those JSON files), env.example, and
|
|
64
|
+
setup-status.json. When \`~/.slack/bin/slack\` is logged in, it installs
|
|
65
|
+
the app. Otherwise \`next\` asks the user to install it. \`--install\`
|
|
66
|
+
requires that install. \`--no-install\` skips it. \`--prod\` selects the
|
|
67
|
+
deployed app. Paste at api.slack.com is the fallback. Do not
|
|
68
|
+
\`slack deploy\`.
|
|
61
69
|
|
|
62
70
|
Env tokens:
|
|
63
71
|
single agent: SLACK_BOT_TOKEN + SLACK_APP_TOKEN
|
|
@@ -86,7 +94,22 @@ export function cmdSlack(subcommand, options) {
|
|
|
86
94
|
case "icon":
|
|
87
95
|
return cmdSlackIcon(options);
|
|
88
96
|
case "init":
|
|
89
|
-
return cmdSlackInit(
|
|
97
|
+
return cmdSlackInit({
|
|
98
|
+
dir: options.dir,
|
|
99
|
+
name: options.name,
|
|
100
|
+
prefix: options.prefix,
|
|
101
|
+
noPrefix: options.noPrefix,
|
|
102
|
+
channelPosts: options.channelPosts,
|
|
103
|
+
manual: options.manual,
|
|
104
|
+
install: options.install,
|
|
105
|
+
noInstall: options.noInstall,
|
|
106
|
+
slackTeam: options.slackTeam,
|
|
107
|
+
detectSlackCli: options.detectSlackCli,
|
|
108
|
+
runSlackCli: options.runSlackCli,
|
|
109
|
+
prod: options.prod,
|
|
110
|
+
out: options.out,
|
|
111
|
+
err: options.err,
|
|
112
|
+
});
|
|
90
113
|
case "manifest":
|
|
91
114
|
return runSlackManifest(options);
|
|
92
115
|
case "doctor":
|
|
@@ -606,82 +629,6 @@ function scaffoldSlackChannelFiles(target) {
|
|
|
606
629
|
}
|
|
607
630
|
});
|
|
608
631
|
}
|
|
609
|
-
/**
|
|
610
|
-
* Append `KEY=value` lines to an env file, replacing every existing line
|
|
611
|
-
* for the same key instead of appending duplicates. Creates the file when
|
|
612
|
-
* missing.
|
|
613
|
-
*/
|
|
614
|
-
function upsertEnvFile(path, entries) {
|
|
615
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
616
|
-
var _a;
|
|
617
|
-
let existing = "";
|
|
618
|
-
try {
|
|
619
|
-
existing = yield readFile(path, "utf8");
|
|
620
|
-
}
|
|
621
|
-
catch (error) {
|
|
622
|
-
if (!isErrnoException(error) || error.code !== "ENOENT") {
|
|
623
|
-
throw error;
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
const lines = existing === "" ? [] : existing.replace(/\r?\n$/, "").split(/\r?\n/);
|
|
627
|
-
// A stale `export KEY=…` line would shadow or duplicate the bare line
|
|
628
|
-
// under some loaders; treat both spellings as the same entry.
|
|
629
|
-
const matchesKey = (line, key) => line.startsWith(`${key}=`) || line.startsWith(`export ${key}=`);
|
|
630
|
-
for (const { key, value } of entries) {
|
|
631
|
-
const next = `${key}=${value}`;
|
|
632
|
-
let replaced = false;
|
|
633
|
-
for (let i = 0; i < lines.length;) {
|
|
634
|
-
if (!matchesKey((_a = lines[i]) !== null && _a !== void 0 ? _a : "", key)) {
|
|
635
|
-
i += 1;
|
|
636
|
-
continue;
|
|
637
|
-
}
|
|
638
|
-
if (replaced) {
|
|
639
|
-
lines.splice(i, 1);
|
|
640
|
-
continue;
|
|
641
|
-
}
|
|
642
|
-
lines[i] = next;
|
|
643
|
-
replaced = true;
|
|
644
|
-
i += 1;
|
|
645
|
-
}
|
|
646
|
-
if (!replaced) {
|
|
647
|
-
lines.push(next);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
// writeFile's mode only applies on create; clamp pre-existing files too.
|
|
651
|
-
yield writeFile(path, `${lines.join("\n")}\n`, { mode: 0o600 });
|
|
652
|
-
yield chmod(path, 0o600);
|
|
653
|
-
});
|
|
654
|
-
}
|
|
655
|
-
/**
|
|
656
|
-
* Ensure the agent directory's .gitignore covers .env.local (create or
|
|
657
|
-
* append). A bare `.env` line does not count — that pattern matches only
|
|
658
|
-
* the file literally named .env.
|
|
659
|
-
*/
|
|
660
|
-
function ensureEnvLocalGitignored(dir) {
|
|
661
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
662
|
-
const path = join(dir, ".gitignore");
|
|
663
|
-
let existing = "";
|
|
664
|
-
try {
|
|
665
|
-
existing = yield readFile(path, "utf8");
|
|
666
|
-
}
|
|
667
|
-
catch (error) {
|
|
668
|
-
if (!isErrnoException(error) || error.code !== "ENOENT") {
|
|
669
|
-
throw error;
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
const covered = existing
|
|
673
|
-
.split(/\r?\n/)
|
|
674
|
-
.some((line) => /^\.env(\.local\*?|\.\*|\*)$/.test(line.trim()));
|
|
675
|
-
if (covered) {
|
|
676
|
-
return false;
|
|
677
|
-
}
|
|
678
|
-
const next = existing === "" || existing.endsWith("\n")
|
|
679
|
-
? `${existing}.env.local\n`
|
|
680
|
-
: `${existing}\n.env.local\n`;
|
|
681
|
-
yield writeFile(path, next);
|
|
682
|
-
return true;
|
|
683
|
-
});
|
|
684
|
-
}
|
|
685
632
|
function renderDoctorReport(result) {
|
|
686
633
|
var _a;
|
|
687
634
|
let text = `env: ${result.envKeys.bot} / ${result.envKeys.app}\n`;
|
|
@@ -12,12 +12,13 @@
|
|
|
12
12
|
* This module mirrors the conversation through the SDK's own store APIs —
|
|
13
13
|
* the agent document (which carries `sdkMetadata.blobEncryptionKey`, without
|
|
14
14
|
* which the checkpoint blobs cannot be decrypted) plus its content-addressed
|
|
15
|
-
* checkpoint blobs — into the deployment's
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
15
|
+
* checkpoint blobs — into the deployment's **framework-level** file store
|
|
16
|
+
* (`AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID`), alongside session records and
|
|
17
|
+
* transcripts and apart from the author-facing user store. The store is an
|
|
18
|
+
* Agent Store reached over `/v0/agent-serve-files` presigned URLs — **not
|
|
19
|
+
* mounted** as a filesystem in the engine VM (the FUSE mount at
|
|
20
|
+
* {@link DEPLOYMENT_STORE_MOUNT_PATH} exists only on cloud-runtime VMs) —
|
|
21
|
+
* so the mirror moves bytes through the {@link FileSink} contract instead.
|
|
21
22
|
*
|
|
22
23
|
* Going through the store APIs rather than copying `store.db` files sidesteps
|
|
23
24
|
* WAL consistency and the shared `index.db` (per-session raw copies would
|
|
@@ -71,8 +72,10 @@ export declare function createConversationMirror(options: CreateConversationMirr
|
|
|
71
72
|
*
|
|
72
73
|
* Selected for architecture-v2 agents on Cursor-managed hosting — the same
|
|
73
74
|
* generation signal as framework-storage-selection.ts, plus a provisioned
|
|
74
|
-
*
|
|
75
|
-
*
|
|
75
|
+
* **framework-level** file store: conversation state is engine-owned, so it
|
|
76
|
+
* lives with session records and transcripts, never on the author-facing
|
|
77
|
+
* user store. Self-hosted v2 keeps everything on the state root (the
|
|
78
|
+
* operator owns the disk), and v1 keeps today's behavior while it runs.
|
|
76
79
|
*/
|
|
77
80
|
export declare function selectConversationMirror(input: {
|
|
78
81
|
project: AgentProject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-mirror.d.ts","sourceRoot":"","sources":["../../src/internal/conversation-mirror.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"conversation-mirror.d.ts","sourceRoot":"","sources":["../../src/internal/conversation-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAYD,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,QAAQ,CAAC;IACf,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,kEAAkE;AAClE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,+BAA+B,GACvC,kBAAkB,CAqMpB;AA6ED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,GAAG,kBAAkB,GAAG,SAAS,CAyBjC"}
|
|
@@ -12,12 +12,13 @@
|
|
|
12
12
|
* This module mirrors the conversation through the SDK's own store APIs —
|
|
13
13
|
* the agent document (which carries `sdkMetadata.blobEncryptionKey`, without
|
|
14
14
|
* which the checkpoint blobs cannot be decrypted) plus its content-addressed
|
|
15
|
-
* checkpoint blobs — into the deployment's
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
15
|
+
* checkpoint blobs — into the deployment's **framework-level** file store
|
|
16
|
+
* (`AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID`), alongside session records and
|
|
17
|
+
* transcripts and apart from the author-facing user store. The store is an
|
|
18
|
+
* Agent Store reached over `/v0/agent-serve-files` presigned URLs — **not
|
|
19
|
+
* mounted** as a filesystem in the engine VM (the FUSE mount at
|
|
20
|
+
* {@link DEPLOYMENT_STORE_MOUNT_PATH} exists only on cloud-runtime VMs) —
|
|
21
|
+
* so the mirror moves bytes through the {@link FileSink} contract instead.
|
|
21
22
|
*
|
|
22
23
|
* Going through the store APIs rather than copying `store.db` files sidesteps
|
|
23
24
|
* WAL consistency and the shared `index.db` (per-session raw copies would
|
|
@@ -44,7 +45,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
44
45
|
});
|
|
45
46
|
};
|
|
46
47
|
import { agentStoreKeys } from "../files.js";
|
|
47
|
-
import {
|
|
48
|
+
import { cursorFrameworkStoreSourceId, cursorHostedFiles, } from "../files-backends/cursor-hosted.js";
|
|
49
|
+
import { mapBounded } from "./bounded.js";
|
|
48
50
|
import { resolveApiKeySync } from "./cursor/credentials.js";
|
|
49
51
|
import { AGENT_SERVE_GENERATION_ENV_VAR } from "./cursor-relay-core.js";
|
|
50
52
|
import { describeError } from "./describe-error.js";
|
|
@@ -53,41 +55,66 @@ export function createConversationMirror(options) {
|
|
|
53
55
|
var _a;
|
|
54
56
|
const { sink, agentName } = options;
|
|
55
57
|
const logger = (_a = options.logger) !== null && _a !== void 0 ? _a : (() => { });
|
|
56
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Blob ids known to be in the sink, per SDK agent id (upload dedupe).
|
|
60
|
+
* Bounded oldest-out like the files backend's etag cache: a resident
|
|
61
|
+
* engine touches an unbounded number of conversations over its lifetime,
|
|
62
|
+
* and a miss costs one manifest read, never correctness.
|
|
63
|
+
*/
|
|
57
64
|
const mirrored = new Map();
|
|
65
|
+
const rememberMirrored = (sdkAgentId, blobIds) => {
|
|
66
|
+
if (!mirrored.has(sdkAgentId) &&
|
|
67
|
+
mirrored.size >= MAX_TRACKED_CONVERSATIONS) {
|
|
68
|
+
const oldest = mirrored.keys().next();
|
|
69
|
+
if (!oldest.done) {
|
|
70
|
+
mirrored.delete(oldest.value);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
mirrored.set(sdkAgentId, blobIds);
|
|
74
|
+
};
|
|
58
75
|
/**
|
|
59
76
|
* Per-conversation serialization so a persist cannot interleave with a
|
|
60
|
-
* hydrate (or another persist) for the same conversation.
|
|
77
|
+
* hydrate (or another persist) for the same conversation. Entries are
|
|
78
|
+
* removed once their chain settles as the tail, so the map tracks only
|
|
79
|
+
* conversations with work in flight.
|
|
61
80
|
*/
|
|
62
81
|
const chains = new Map();
|
|
63
82
|
function serialize(sdkAgentId, run) {
|
|
64
83
|
var _a;
|
|
65
84
|
const previous = (_a = chains.get(sdkAgentId)) !== null && _a !== void 0 ? _a : Promise.resolve();
|
|
66
85
|
const next = previous.then(run, run);
|
|
67
|
-
|
|
86
|
+
const stored = next
|
|
87
|
+
.catch(() => { })
|
|
88
|
+
.then(() => {
|
|
89
|
+
if (chains.get(sdkAgentId) === stored) {
|
|
90
|
+
chains.delete(sdkAgentId);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
chains.set(sdkAgentId, stored);
|
|
68
94
|
return next;
|
|
69
95
|
}
|
|
70
96
|
function mirroredBlobIds(sdkAgentId) {
|
|
71
97
|
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
var _a;
|
|
73
98
|
const cached = mirrored.get(sdkAgentId);
|
|
74
99
|
if (cached !== undefined) {
|
|
75
100
|
return cached;
|
|
76
101
|
}
|
|
77
102
|
// Seed from the previous manifest so a fresh pod does not re-upload the
|
|
78
|
-
// whole history on its first persist. A miss
|
|
79
|
-
// empty — re-uploading is wasteful, never wrong.
|
|
103
|
+
// whole history on its first persist. A miss, an unusable manifest, or
|
|
104
|
+
// a failed read seeds empty — re-uploading is wasteful, never wrong.
|
|
80
105
|
const seeded = new Set();
|
|
81
106
|
try {
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
107
|
+
const read = yield readManifest(sink, agentName, sdkAgentId);
|
|
108
|
+
if (read.outcome === "found") {
|
|
109
|
+
for (const blobId of read.manifest.blobIds) {
|
|
110
|
+
seeded.add(blobId);
|
|
111
|
+
}
|
|
85
112
|
}
|
|
86
113
|
}
|
|
87
114
|
catch (error) {
|
|
88
115
|
logger(`[agent-sdk] conversation mirror: could not read the prior manifest for ${sdkAgentId} (${describeError(error)}); re-uploading blobs`);
|
|
89
116
|
}
|
|
90
|
-
|
|
117
|
+
rememberMirrored(sdkAgentId, seeded);
|
|
91
118
|
return seeded;
|
|
92
119
|
});
|
|
93
120
|
}
|
|
@@ -135,75 +162,105 @@ export function createConversationMirror(options) {
|
|
|
135
162
|
if (existing !== null) {
|
|
136
163
|
return false;
|
|
137
164
|
}
|
|
138
|
-
const
|
|
139
|
-
if (
|
|
165
|
+
const read = yield readManifest(sink, agentName, sdkAgentId);
|
|
166
|
+
if (read.outcome === "miss") {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
if (read.outcome === "unusable") {
|
|
170
|
+
// Definitive, non-transient state (a future manifest version
|
|
171
|
+
// during a rolling redeploy, or corruption): retrying would fail
|
|
172
|
+
// identically forever, so fall through to the caller's
|
|
173
|
+
// fresh-conversation path instead of wedging the session.
|
|
174
|
+
logger(`[agent-sdk] conversation mirror: the manifest for ${sdkAgentId} is unusable (${read.reason}); treating the conversation as unrestorable`);
|
|
140
175
|
return false;
|
|
141
176
|
}
|
|
177
|
+
const manifest = read.manifest;
|
|
142
178
|
const rootBlobId = (_a = manifest.agent.latestCheckpoint) === null || _a === void 0 ? void 0 : _a.rootBlobId;
|
|
179
|
+
if (rootBlobId === undefined ||
|
|
180
|
+
!manifest.blobIds.includes(rootBlobId)) {
|
|
181
|
+
logger(`[agent-sdk] conversation mirror: the manifest for ${sdkAgentId} does not list its root checkpoint blob; treating the conversation as unrestorable`);
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
// Bounded-parallel downloads: this sits on the resume critical path
|
|
185
|
+
// (a presign plus an object GET per blob against the hosted sink).
|
|
186
|
+
const bodies = yield mapBounded(manifest.blobIds, HYDRATE_DOWNLOAD_CONCURRENCY, (blobId) => __awaiter(this, void 0, void 0, function* () {
|
|
187
|
+
return ({
|
|
188
|
+
blobId,
|
|
189
|
+
body: yield sink.get(agentStoreKeys.conversationBlob(agentName, sdkAgentId, blobId)),
|
|
190
|
+
});
|
|
191
|
+
}));
|
|
192
|
+
const missing = bodies.filter((entry) => entry.body === undefined);
|
|
193
|
+
if (missing.length > 0) {
|
|
194
|
+
// The manifest lists exactly what a previous persist uploaded, so
|
|
195
|
+
// any definitive absence is store loss — and the checkpoint graph
|
|
196
|
+
// may reach any listed blob, not just the root. Restoring a
|
|
197
|
+
// partial graph would create an agent row whose resume succeeds
|
|
198
|
+
// and whose checkpoint walk then fails unrecoverably.
|
|
199
|
+
logger(`[agent-sdk] conversation mirror: ${missing.length} checkpoint blob(s) for ${sdkAgentId} are missing from the sink; treating the conversation as unrestorable`);
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
143
202
|
const restored = new Set();
|
|
144
|
-
for (const
|
|
145
|
-
const body =
|
|
146
|
-
const bytes = body
|
|
147
|
-
|
|
148
|
-
:
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (bytes === undefined) {
|
|
152
|
-
// Definitive absence (never uploaded, or deleted). A missing
|
|
153
|
-
// root blob makes the conversation unrestorable — fall through
|
|
154
|
-
// to the caller's fresh-conversation path rather than creating
|
|
155
|
-
// an agent row whose checkpoint cannot load.
|
|
156
|
-
if (blobId === rootBlobId) {
|
|
157
|
-
logger(`[agent-sdk] conversation mirror: the root checkpoint blob for ${sdkAgentId} is missing from the sink; treating the conversation as unrestorable`);
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
if ((yield store.checkpoints.get({ agentId: sdkAgentId, blobId })) ===
|
|
163
|
-
null) {
|
|
203
|
+
for (const entry of bodies) {
|
|
204
|
+
const body = entry.body;
|
|
205
|
+
const bytes = body instanceof Uint8Array ? body : body.body;
|
|
206
|
+
if ((yield store.checkpoints.get({
|
|
207
|
+
agentId: sdkAgentId,
|
|
208
|
+
blobId: entry.blobId,
|
|
209
|
+
})) === null) {
|
|
164
210
|
yield store.checkpoints.create({
|
|
165
211
|
agentId: sdkAgentId,
|
|
166
|
-
blobId,
|
|
212
|
+
blobId: entry.blobId,
|
|
167
213
|
data: bytes,
|
|
168
214
|
});
|
|
169
215
|
}
|
|
170
|
-
restored.add(blobId);
|
|
171
|
-
}
|
|
172
|
-
if (rootBlobId !== undefined && !restored.has(rootBlobId)) {
|
|
173
|
-
logger(`[agent-sdk] conversation mirror: the manifest for ${sdkAgentId} does not list its root checkpoint blob; treating the conversation as unrestorable`);
|
|
174
|
-
return false;
|
|
216
|
+
restored.add(entry.blobId);
|
|
175
217
|
}
|
|
176
218
|
yield store.agents.create({
|
|
177
219
|
agent: Object.assign(Object.assign({}, manifest.agent), { activeRunId: null }),
|
|
178
220
|
});
|
|
179
|
-
|
|
221
|
+
rememberMirrored(sdkAgentId, restored);
|
|
180
222
|
logger(`[agent-sdk] conversation mirror: restored the conversation for ${sdkAgentId} (${restored.size} checkpoint blob(s))`);
|
|
181
223
|
return true;
|
|
182
224
|
}));
|
|
183
225
|
},
|
|
184
226
|
};
|
|
185
227
|
}
|
|
228
|
+
/** Oldest-out cap on the per-conversation upload-dedupe cache. */
|
|
229
|
+
const MAX_TRACKED_CONVERSATIONS = 1000;
|
|
230
|
+
/** Parallel blob downloads during hydrate (resume critical path). */
|
|
231
|
+
const HYDRATE_DOWNLOAD_CONCURRENCY = 8;
|
|
232
|
+
/**
|
|
233
|
+
* Read the persisted manifest. Sink transport failures propagate (an
|
|
234
|
+
* outage must fail the follow-up, not fork the thread); everything the
|
|
235
|
+
* bytes themselves can be wrong about is reported as `unusable`.
|
|
236
|
+
*/
|
|
186
237
|
function readManifest(sink, agentName, sdkAgentId) {
|
|
187
238
|
return __awaiter(this, void 0, void 0, function* () {
|
|
188
239
|
const body = yield sink.get(agentStoreKeys.conversationManifest(agentName, sdkAgentId));
|
|
189
240
|
if (body === undefined) {
|
|
190
|
-
return
|
|
241
|
+
return { outcome: "miss" };
|
|
191
242
|
}
|
|
192
243
|
const bytes = body instanceof Uint8Array ? body : body.body;
|
|
193
|
-
|
|
244
|
+
let parsed;
|
|
245
|
+
try {
|
|
246
|
+
parsed = JSON.parse(new TextDecoder().decode(bytes));
|
|
247
|
+
}
|
|
248
|
+
catch (_a) {
|
|
249
|
+
return { outcome: "unusable", reason: "not JSON" };
|
|
250
|
+
}
|
|
194
251
|
if (parsed === null ||
|
|
195
252
|
typeof parsed !== "object" ||
|
|
196
253
|
parsed.v !== 1) {
|
|
197
|
-
|
|
254
|
+
return { outcome: "unusable", reason: "unsupported manifest version" };
|
|
198
255
|
}
|
|
199
256
|
const manifest = parsed;
|
|
200
257
|
if (manifest.agent === null ||
|
|
201
258
|
typeof manifest.agent !== "object" ||
|
|
202
259
|
manifest.agent.agentId !== sdkAgentId ||
|
|
203
260
|
!Array.isArray(manifest.blobIds)) {
|
|
204
|
-
|
|
261
|
+
return { outcome: "unusable", reason: "malformed manifest" };
|
|
205
262
|
}
|
|
206
|
-
return manifest;
|
|
263
|
+
return { outcome: "found", manifest };
|
|
207
264
|
});
|
|
208
265
|
}
|
|
209
266
|
function listCheckpointBlobIds(store, sdkAgentId) {
|
|
@@ -225,8 +282,10 @@ function listCheckpointBlobIds(store, sdkAgentId) {
|
|
|
225
282
|
*
|
|
226
283
|
* Selected for architecture-v2 agents on Cursor-managed hosting — the same
|
|
227
284
|
* generation signal as framework-storage-selection.ts, plus a provisioned
|
|
228
|
-
*
|
|
229
|
-
*
|
|
285
|
+
* **framework-level** file store: conversation state is engine-owned, so it
|
|
286
|
+
* lives with session records and transcripts, never on the author-facing
|
|
287
|
+
* user store. Self-hosted v2 keeps everything on the state root (the
|
|
288
|
+
* operator owns the disk), and v1 keeps today's behavior while it runs.
|
|
230
289
|
*/
|
|
231
290
|
export function selectConversationMirror(input) {
|
|
232
291
|
var _a;
|
|
@@ -234,16 +293,18 @@ export function selectConversationMirror(input) {
|
|
|
234
293
|
return undefined;
|
|
235
294
|
}
|
|
236
295
|
const env = (_a = input.env) !== null && _a !== void 0 ? _a : process.env;
|
|
296
|
+
const frameworkStoreId = cursorFrameworkStoreSourceId(env);
|
|
237
297
|
if (env[AGENT_SERVE_GENERATION_ENV_VAR] === undefined ||
|
|
238
|
-
|
|
298
|
+
frameworkStoreId === undefined) {
|
|
239
299
|
return undefined;
|
|
240
300
|
}
|
|
241
301
|
return createConversationMirror({
|
|
242
302
|
sink: cursorHostedFiles({
|
|
303
|
+
storeSourceId: frameworkStoreId,
|
|
243
304
|
// Full chain (env → key file → stored login): frozen engines listen
|
|
244
305
|
// unsigned and bind CURSOR_API_KEY_FILE at task time, after this sink
|
|
245
306
|
// is constructed.
|
|
246
|
-
|
|
307
|
+
resolveApiKey: () => { var _a; return (_a = resolveApiKeySync()) === null || _a === void 0 ? void 0 : _a.apiKey; },
|
|
247
308
|
}),
|
|
248
309
|
agentName: input.project.name,
|
|
249
310
|
logger: input.logger,
|
|
@@ -93,6 +93,7 @@ export declare class CursorAccountMcpBridge {
|
|
|
93
93
|
* Returns a promise that settles when every ref's log lines are written —
|
|
94
94
|
* callers may ignore it; tests can await it.
|
|
95
95
|
*/
|
|
96
|
+
probeAuthUrl(ref: CursorAccountConnectionRef): Promise<string | undefined>;
|
|
96
97
|
logPreflight(refs: CursorAccountConnectionRef[]): Promise<void>;
|
|
97
98
|
private runPreflight;
|
|
98
99
|
private buildServer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-mcp.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/account-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EAEX,MAAM,gBAAgB,CAAC;AAUxB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAU7B,0EAA0E;AAC1E,eAAO,MAAM,gCAAgC,8CACA,CAAC;AAC9C,2EAA2E;AAC3E,eAAO,MAAM,oCAAoC,yDACO,CAAC;AAMzD,MAAM,WAAW,0BAA0B;IACzC,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,GACrD,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAuB3C;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,IAAI,EAAE,0BAA0B,EAAE,CAAC;IACnC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,wBAAwB,EAAE,CAkB7B;AAqCD,qBAAa,sBAAsB;IACjC,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAE5D,YAAY,IAAI,EAAE;QAChB,MAAM,EAAE,mBAAmB,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,2EAA2E;QAC3E,OAAO,CAAC,EAAE,eAAe,CAAC;QAC1B;;;;WAIG;QACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,EAMA;IAED;;;;OAIG;IACH,UAAU,IAAI,UAAU,CAgBvB;IAED;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,0BAA0B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAO3E;IAED;;;;;;;;OAQG;
|
|
1
|
+
{"version":3,"file":"account-mcp.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/account-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -147,6 +147,23 @@ export class CursorAccountMcpBridge {
|
|
|
147
147
|
* Returns a promise that settles when every ref's log lines are written —
|
|
148
148
|
* callers may ignore it; tests can await it.
|
|
149
149
|
*/
|
|
150
|
+
probeAuthUrl(ref) {
|
|
151
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
152
|
+
const identifiers = ref.servers !== undefined && ref.servers.length > 0
|
|
153
|
+
? [...ref.servers]
|
|
154
|
+
: (yield this.client.getAvailableMcpServers()).map((server) => { var _a; return (_a = server.serverIdentifier) !== null && _a !== void 0 ? _a : server.name; });
|
|
155
|
+
const urls = yield probeConnectorAuthUrls({
|
|
156
|
+
client: this.client,
|
|
157
|
+
identifiers,
|
|
158
|
+
});
|
|
159
|
+
for (const url of urls.values()) {
|
|
160
|
+
if (url !== "") {
|
|
161
|
+
return url;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return undefined;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
150
167
|
logPreflight(refs) {
|
|
151
168
|
return Promise.all(refs.map((ref) => this.runPreflight(ref))).then(() => undefined);
|
|
152
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-client.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/backend-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"backend-client.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/backend-client.ts"],"names":[],"mappings":"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"}
|