@cursor/july 0.1.107 → 0.1.109
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 +2 -6
- package/README.md +13 -11
- package/dist/bin/agent-serve.js +30 -8
- package/dist/channels/bitbucket/api.d.ts +41 -0
- package/dist/channels/bitbucket/api.d.ts.map +1 -1
- package/dist/channels/bitbucket/api.js +260 -0
- package/dist/channels/bitbucket/binding.d.ts +4 -0
- package/dist/channels/bitbucket/binding.d.ts.map +1 -1
- package/dist/channels/bitbucket/binding.js +16 -0
- package/dist/channels/bitbucket/index.d.ts +1 -1
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +1 -1
- package/dist/channels/github/github-channel.js +8 -5
- package/dist/channels/github/types.d.ts +5 -1
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.d.ts +27 -0
- package/dist/channels/gitlab/api.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +88 -0
- package/dist/channels/gitlab/binding.d.ts +5 -0
- package/dist/channels/gitlab/binding.d.ts.map +1 -1
- package/dist/channels/gitlab/binding.js +10 -0
- package/dist/channels/gitlab/index.d.ts +1 -1
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +1 -1
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +27 -13
- package/dist/channels/origin/types.d.ts +5 -1
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.d.ts +10 -0
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +20 -3
- package/dist/channels/slack/slack-channel.d.ts +12 -5
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +59 -8
- package/dist/channels.d.ts +45 -0
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +106 -7
- package/dist/connections.d.ts +2 -1
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +2 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.CtuckIiL.js → app.Cr-wVbnB.js} +1 -1
- package/dist/docs/assets/{building-with-agents.md.CUSWxlP_.js → building-with-agents.md.D0KbSkJn.js} +2 -2
- package/dist/docs/assets/{building-with-agents.md.CUSWxlP_.lean.js → building-with-agents.md.D0KbSkJn.lean.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CFVQ4S17.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.Bkkhnu8K.js → VPLocalSearchBox.CVQERt56.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DhpIe0Pa.js → theme.Dnsd3XOn.js} +2 -2
- package/dist/docs/assets/concepts.md.B4o63Gul.js +1 -0
- package/dist/docs/assets/{deployment.md.MFPKqsqI.js → deployment.md.JenwuCCB.js} +4 -4
- package/dist/docs/assets/{deployment.md.MFPKqsqI.lean.js → deployment.md.JenwuCCB.lean.js} +1 -1
- package/dist/docs/assets/evals.md.C7JLjoEP.js +211 -0
- package/dist/docs/assets/evals.md.C7JLjoEP.lean.js +1 -0
- package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.js +10 -0
- package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.lean.js +1 -0
- package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.js +9 -0
- package/dist/docs/assets/{guides_cloud-agents.md.DS8RIjwx.lean.js → guides_cloud-agents.md.BsloyHdY.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.c0gdGJ-D.js → guides_github.md.TZaTZlfz.js} +13 -3
- package/dist/docs/assets/{guides_github.md.c0gdGJ-D.lean.js → guides_github.md.TZaTZlfz.lean.js} +1 -1
- package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.js +14 -0
- package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.lean.js +1 -0
- package/dist/docs/assets/{guides_grokbot-agents.md.DVqdhBKb.js → guides_grokbot-agents.md.DyV-WArv.js} +1 -1
- package/dist/docs/assets/guides_improve.md.BGVk32bK.js +14 -0
- package/dist/docs/assets/guides_improve.md.BGVk32bK.lean.js +1 -0
- package/dist/docs/assets/{guides_slack.md.9oHPye9o.js → guides_slack.md.D4RVMM4G.js} +3 -3
- package/dist/docs/assets/{guides_slack.md.9oHPye9o.lean.js → guides_slack.md.D4RVMM4G.lean.js} +1 -1
- package/dist/docs/assets/{guides_webhooks.md.DKdA43Qm.js → guides_webhooks.md.CJK484ex.js} +2 -2
- package/dist/docs/assets/{hillclimbing.md.CpTGTCle.js → hillclimbing.md.BOiVo1tf.js} +1 -1
- package/dist/docs/assets/index.md.DD9Q2XuJ.js +5 -0
- package/dist/docs/assets/{index.md.BW_6tOgR.lean.js → index.md.DD9Q2XuJ.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CHNpiyp4.js → reference_agent-config.md.CvoL6pof.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.D-qTqwcq.js → reference_channels.md.CAo-iK4j.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.D-qTqwcq.lean.js → reference_channels.md.CAo-iK4j.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.Dm67hd2D.js → reference_cli.md.Deg7849l.js} +7 -7
- package/dist/docs/assets/{reference_cli.md.Dm67hd2D.lean.js → reference_cli.md.Deg7849l.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Di6jJAXF.js → reference_connections.md.BojkC6c5.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.CGmMLblt.js → reference_extensions.md.ZAVUyuEX.js} +3 -3
- package/dist/docs/assets/{reference_hooks.md.Ddt5DdgJ.js → reference_hooks.md.BlM_bOg6.js} +3 -3
- package/dist/docs/assets/{reference_hooks.md.Ddt5DdgJ.lean.js → reference_hooks.md.BlM_bOg6.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.oySXBO8o.js → reference_http-api.md.BwaCo-VO.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.4myJPxrf.js → reference_playground.md.DLnoaczX.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.4myJPxrf.lean.js → reference_playground.md.DLnoaczX.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DuBu9a96.js → reference_project-layout.md.BEU8MtQV.js} +3 -3
- package/dist/docs/assets/{reference_project-layout.md.DuBu9a96.lean.js → reference_project-layout.md.BEU8MtQV.lean.js} +1 -1
- package/dist/docs/assets/reference_sessions.md.CyXV1MUw.js +1 -0
- package/dist/docs/assets/{scaffolding-agents.md.em43xlY1.js → scaffolding-agents.md.Kctn3OVb.js} +1 -1
- package/dist/docs/assets/{skills_create-agent.md.BVoWPcan.js → skills_create-agent.md.Q3h6Je-e.js} +1 -1
- package/dist/docs/assets/{skills_debug.md.CDbPhHfg.js → skills_debug.md.CVjCXMFF.js} +1 -1
- package/dist/docs/assets/{skills_debug.md.CDbPhHfg.lean.js → skills_debug.md.CVjCXMFF.lean.js} +1 -1
- package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.js +35 -0
- package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.lean.js +1 -0
- package/dist/docs/assets/skills_evals.md.DFxYPErF.js +25 -0
- package/dist/docs/assets/skills_evals.md.DFxYPErF.lean.js +1 -0
- package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.js +1 -0
- package/dist/docs/assets/{skills_framework-map.md.haibFyoB.lean.js → skills_framework-map.md.BxLSOhSY.lean.js} +1 -1
- package/dist/docs/assets/{skills_github.md.D0JahM8c.js → skills_github.md.hgFX_oKY.js} +1 -1
- package/dist/docs/assets/skills_index.md.DL7EHaQ-.js +1 -0
- package/dist/docs/assets/skills_index.md.DL7EHaQ-.lean.js +1 -0
- package/dist/docs/assets/{storage.md.BOHeqk2M.js → storage.md.BUrhJ-Zz.js} +4 -4
- package/dist/docs/assets/{storage.md.BOHeqk2M.lean.js → storage.md.BUrhJ-Zz.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.CYEAO9bM.js +1 -0
- package/dist/docs/building-with-agents.html +5 -5
- package/dist/docs/building-with-agents.md +3 -2
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/concepts.md +2 -4
- package/dist/docs/deployment.html +7 -7
- package/dist/docs/deployment.md +7 -2
- package/dist/docs/evals.html +161 -35
- package/dist/docs/evals.md +612 -296
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/bitbucket.html +36 -0
- package/dist/docs/guides/bitbucket.md +84 -0
- package/dist/docs/guides/cloud-agents.html +6 -6
- package/dist/docs/guides/cloud-agents.md +4 -3
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +17 -7
- package/dist/docs/guides/github.md +33 -1
- package/dist/docs/guides/gitlab.html +40 -0
- package/dist/docs/guides/gitlab.md +92 -0
- package/dist/docs/guides/grokbot-agents.html +6 -6
- package/dist/docs/guides/grokbot-agents.md +2 -2
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/improve.html +40 -0
- package/dist/docs/guides/improve.md +91 -0
- package/dist/docs/guides/mcp-oauth.html +4 -4
- package/dist/docs/guides/opentelemetry.html +5 -5
- package/dist/docs/guides/slack.html +7 -7
- package/dist/docs/guides/slack.md +2 -1
- package/dist/docs/guides/webhooks.html +6 -6
- package/dist/docs/guides/webhooks.md +4 -2
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +6 -6
- package/dist/docs/hillclimbing.md +2 -2
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +14 -6
- package/dist/docs/llms-full.txt +1274 -814
- package/dist/docs/llms.txt +7 -5
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +6 -6
- package/dist/docs/reference/agent-config.md +5 -2
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +6 -6
- package/dist/docs/reference/channels.md +16 -3
- package/dist/docs/reference/cli.html +11 -11
- package/dist/docs/reference/cli.md +24 -15
- package/dist/docs/reference/connections.html +6 -6
- package/dist/docs/reference/connections.md +2 -1
- package/dist/docs/reference/extensions.html +8 -8
- package/dist/docs/reference/extensions.md +2 -3
- package/dist/docs/reference/hooks.html +7 -7
- package/dist/docs/reference/hooks.md +9 -12
- package/dist/docs/reference/http-api.html +6 -6
- package/dist/docs/reference/http-api.md +2 -3
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +5 -5
- package/dist/docs/reference/playground.md +0 -4
- package/dist/docs/reference/project-layout.html +7 -7
- package/dist/docs/reference/project-layout.md +1 -8
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/result.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 +1 -2
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +4 -4
- package/dist/docs/scaffolding-agents.html +5 -5
- package/dist/docs/scaffolding-agents.md +2 -1
- package/dist/docs/skills/create-agent.html +6 -6
- package/dist/docs/skills/create-agent.md +1 -1
- package/dist/docs/skills/debug.html +5 -5
- package/dist/docs/skills/debug.md +1 -1
- package/dist/docs/skills/deploy.html +61 -0
- package/dist/docs/skills/deploy.md +161 -0
- package/dist/docs/skills/evals.html +8 -8
- package/dist/docs/skills/evals.md +44 -6
- package/dist/docs/skills/framework-map.html +5 -5
- package/dist/docs/skills/framework-map.md +5 -4
- package/dist/docs/skills/github.html +6 -6
- package/dist/docs/skills/github.md +1 -1
- package/dist/docs/skills/hillclimb.html +4 -4
- package/dist/docs/skills/index.html +6 -6
- package/dist/docs/skills/index.md +1 -1
- package/dist/docs/skills/mcp-auth.html +4 -4
- package/dist/docs/skills/otel.html +4 -4
- package/dist/docs/skills/setup-slack.html +4 -4
- package/dist/docs/storage.html +8 -8
- package/dist/docs/storage.md +15 -24
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +4 -4
- package/dist/docs/templates/code-wiki.html +4 -4
- package/dist/docs/templates/demo.html +4 -4
- package/dist/docs/templates/grokbot-agents.html +4 -4
- package/dist/docs/templates/pr-autofixer.html +4 -4
- package/dist/docs/templates/security-help.html +4 -4
- package/dist/docs/templates/security-reviewer.html +4 -4
- package/dist/docs/templates/triage.html +4 -4
- package/dist/docs/troubleshooting.html +5 -5
- package/dist/docs/troubleshooting.md +1 -1
- package/dist/extensions/improve/extension.d.ts +46 -0
- package/dist/extensions/improve/extension.d.ts.map +1 -0
- package/dist/extensions/improve/extension.js +41 -0
- package/dist/extensions/improve/skills/yourself.d.ts +4 -0
- package/dist/extensions/improve/skills/yourself.d.ts.map +1 -0
- package/dist/extensions/improve/skills/yourself.js +43 -0
- package/dist/extensions.d.ts +2 -3
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +2 -5
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/internal/authored-alias-hooks.d.ts +5 -0
- package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
- package/dist/internal/authored-alias-hooks.js +17 -0
- package/dist/internal/authored-loaders.d.ts +4 -0
- package/dist/internal/authored-loaders.d.ts.map +1 -1
- package/dist/internal/authored-loaders.js +21 -2
- package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
- package/dist/internal/builtin-tools/artifacts.js +2 -3
- package/dist/internal/channel-route-dispatch.d.ts +13 -0
- package/dist/internal/channel-route-dispatch.d.ts.map +1 -0
- package/dist/internal/channel-route-dispatch.js +62 -0
- package/dist/internal/channel-state.d.ts +17 -0
- package/dist/internal/channel-state.d.ts.map +1 -0
- package/dist/internal/channel-state.js +78 -0
- package/dist/internal/cli-ax.d.ts +8 -2
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +100 -3
- package/dist/internal/cli-cursor.d.ts.map +1 -1
- package/dist/internal/cli-cursor.js +2 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +38 -14
- package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
- package/dist/internal/cli-mcp-oauth.js +15 -0
- package/dist/internal/cli-mcp.d.ts.map +1 -1
- package/dist/internal/cli-mcp.js +12 -0
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +8 -2
- package/dist/internal/continuation-channel.d.ts.map +1 -1
- package/dist/internal/continuation-channel.js +2 -2
- package/dist/internal/continuation-identity.js +8 -3
- package/dist/internal/cursor/credentials.d.ts +8 -2
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +27 -5
- package/dist/internal/deploy-client.d.ts +27 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +32 -0
- package/dist/internal/deploy-manifest.d.ts +23 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +84 -1
- package/dist/internal/describe-error.d.ts +1 -0
- package/dist/internal/describe-error.d.ts.map +1 -1
- package/dist/internal/describe-error.js +25 -0
- package/dist/internal/discovery/agent.d.ts +1 -1
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +0 -5
- package/dist/internal/discovery/extension-overlay.d.ts +1 -2
- package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
- package/dist/internal/discovery/extension-overlay.js +0 -14
- package/dist/internal/discovery/extensions.d.ts +1 -2
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +4 -22
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +42 -24
- package/dist/internal/discovery/modules.js +0 -1
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +0 -16
- package/dist/internal/eval-runner.js +0 -1
- package/dist/internal/framework-file-storage.d.ts +4 -5
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +4 -5
- package/dist/internal/framework-storage-selection.d.ts +2 -2
- package/dist/internal/framework-storage-selection.js +2 -2
- package/dist/internal/guest-network.d.ts +4 -10
- package/dist/internal/guest-network.d.ts.map +1 -1
- package/dist/internal/guest-network.js +42 -26
- package/dist/internal/hosted-admission-adapter.d.ts +2 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.d.ts +51 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -0
- package/dist/internal/hosted-catch-protocol.js +103 -0
- package/dist/internal/hosted-catch.d.ts +40 -0
- package/dist/internal/hosted-catch.d.ts.map +1 -0
- package/dist/internal/hosted-catch.js +149 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +41 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +249 -0
- package/dist/internal/hosted-delivery.d.ts +10 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +100 -22
- package/dist/internal/hosted-execution-diag.d.ts +4 -1
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +13 -4
- package/dist/internal/hosted-execution-flush.d.ts +3 -0
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
- package/dist/internal/hosted-execution-flush.js +2 -4
- package/dist/internal/http-control-plane-session.d.ts +30 -0
- package/dist/internal/http-control-plane-session.d.ts.map +1 -0
- package/dist/internal/http-control-plane-session.js +83 -0
- package/dist/internal/init-scaffold.d.ts.map +1 -1
- package/dist/internal/init-scaffold.js +1 -2
- package/dist/internal/install-cursor-skills.d.ts +5 -2
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +25 -5
- package/dist/internal/legacy-command-guard.d.ts +22 -0
- package/dist/internal/legacy-command-guard.d.ts.map +1 -0
- package/dist/internal/legacy-command-guard.js +51 -0
- package/dist/internal/platform-timers.d.ts +7 -0
- package/dist/internal/platform-timers.d.ts.map +1 -1
- package/dist/internal/platform-timers.js +139 -0
- package/dist/internal/reminder-control-plane-protocol.d.ts +2 -0
- package/dist/internal/reminder-control-plane-protocol.d.ts.map +1 -1
- package/dist/internal/reminder-control-plane-protocol.js +9 -2
- package/dist/internal/reminder-runner.d.ts +8 -0
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +36 -9
- package/dist/internal/resolve-prod-target.d.ts +2 -0
- package/dist/internal/resolve-prod-target.d.ts.map +1 -1
- package/dist/internal/resolve-prod-target.js +13 -0
- package/dist/internal/run-client.d.ts +1 -1
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +5 -4
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +57 -70
- package/dist/internal/session-engine.d.ts +7 -41
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +110 -227
- package/dist/internal/storage-coordinator.d.ts +5 -19
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +3 -62
- package/dist/internal/storage-roles.d.ts +4 -9
- package/dist/internal/storage-roles.d.ts.map +1 -1
- package/dist/internal/storage-roles.js +2 -2
- package/dist/playground/assets/index-Bhxzrcf6.css +1 -0
- package/dist/playground/assets/index-CqLX5uF3.js +67 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted-v2.d.ts +4 -5
- package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted-v2.js +4 -5
- package/dist/storage-backends/cursor-hosted.d.ts +7 -2
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +29 -31
- package/dist/storage-backends/file-kv.d.ts +9 -12
- package/dist/storage-backends/file-kv.d.ts.map +1 -1
- package/dist/storage-backends/file-kv.js +11 -47
- package/dist/storage-protocol.d.ts +3 -11
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +3 -11
- package/dist/storage.d.ts +8 -36
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +8 -44
- package/dist/types.d.ts +53 -62
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +14 -6
- package/docs/building-with-agents.md +3 -2
- package/docs/concepts.md +2 -4
- package/docs/deployment.md +7 -2
- package/docs/evals.md +613 -297
- package/docs/guides/bitbucket.md +89 -0
- package/docs/guides/cloud-agents.md +4 -3
- package/docs/guides/github.md +33 -1
- package/docs/guides/gitlab.md +97 -0
- package/docs/guides/grokbot-agents.md +2 -2
- package/docs/guides/improve.md +96 -0
- package/docs/guides/slack.md +2 -1
- package/docs/guides/webhooks.md +4 -2
- package/docs/hillclimbing.md +2 -2
- package/docs/reference/agent-config.md +5 -2
- package/docs/reference/channels.md +16 -3
- package/docs/reference/cli.md +24 -15
- package/docs/reference/connections.md +2 -1
- package/docs/reference/extensions.md +2 -3
- package/docs/reference/hooks.md +9 -12
- package/docs/reference/http-api.md +2 -3
- package/docs/reference/playground.md +0 -4
- package/docs/reference/project-layout.md +1 -8
- package/docs/reference/sessions.md +1 -2
- package/docs/scaffolding-agents.md +2 -1
- package/docs/skills/index.md +2 -2
- package/docs/storage.md +15 -24
- package/docs/troubleshooting.md +1 -1
- package/package.json +8 -7
- package/skills/create-agent/SKILL.md +1 -1
- package/skills/debug/SKILL.md +1 -1
- package/skills/deploy/SKILL.md +169 -0
- package/skills/evals/SKILL.md +45 -8
- package/skills/framework-map/SKILL.md +5 -4
- package/skills/github/SKILL.md +1 -1
- package/src/bin/agent-serve.ts +27 -2
- package/src/channels/bitbucket/api.ts +341 -0
- package/src/channels/bitbucket/binding.ts +25 -0
- package/src/channels/bitbucket/index.ts +2 -0
- package/src/channels/github/github-channel.ts +8 -8
- package/src/channels/github/types.ts +5 -0
- package/src/channels/gitlab/api.ts +123 -0
- package/src/channels/gitlab/binding.ts +12 -0
- package/src/channels/gitlab/index.ts +1 -0
- package/src/channels/origin/origin-channel.ts +29 -13
- package/src/channels/origin/types.ts +5 -0
- package/src/channels/slack/dispatch.ts +30 -0
- package/src/channels/slack/slack-channel.ts +69 -7
- package/src/channels.ts +157 -10
- package/src/connections.ts +2 -1
- package/src/extensions/improve/extension.ts +70 -0
- package/src/extensions/improve/skills/yourself.ts +50 -0
- package/src/extensions.ts +2 -6
- package/src/index.ts +0 -3
- package/src/internal/authored-alias-hooks.ts +32 -0
- package/src/internal/authored-loaders.ts +26 -2
- package/src/internal/builtin-tools/artifacts.ts +2 -3
- package/src/internal/channel-route-dispatch.ts +66 -0
- package/src/internal/channel-state.ts +96 -0
- package/src/internal/cli-ax.ts +111 -3
- package/src/internal/cli-cursor.ts +4 -1
- package/src/internal/cli-deploy.ts +50 -10
- package/src/internal/cli-mcp-oauth.ts +18 -0
- package/src/internal/cli-mcp.ts +11 -0
- package/src/internal/cli-slack.ts +15 -2
- package/src/internal/continuation-channel.ts +2 -1
- package/src/internal/continuation-identity.ts +10 -2
- package/src/internal/cursor/credentials.ts +35 -7
- package/src/internal/deploy-client.ts +54 -0
- package/src/internal/deploy-manifest.ts +115 -1
- package/src/internal/describe-error.ts +28 -0
- package/src/internal/discovery/agent.ts +1 -7
- package/src/internal/discovery/extension-overlay.ts +0 -18
- package/src/internal/discovery/extensions.ts +2 -26
- package/src/internal/discovery/info.ts +3 -13
- package/src/internal/discovery/modules.ts +0 -1
- package/src/internal/discovery/project.ts +0 -16
- package/src/internal/eval-runner.ts +0 -1
- package/src/internal/framework-file-storage.ts +4 -5
- package/src/internal/framework-storage-selection.ts +2 -2
- package/src/internal/guest-network.ts +43 -29
- package/src/internal/hosted-admission-adapter.ts +2 -0
- package/src/internal/hosted-catch-protocol.ts +130 -0
- package/src/internal/hosted-catch.ts +192 -0
- package/src/internal/hosted-delivery-protocol.ts +387 -0
- package/src/internal/hosted-delivery.ts +155 -22
- package/src/internal/hosted-execution-diag.ts +21 -3
- package/src/internal/hosted-execution-flush.ts +6 -3
- package/src/internal/http-control-plane-session.ts +104 -0
- package/src/internal/init-scaffold.ts +1 -2
- package/src/internal/install-cursor-skills.ts +38 -5
- package/src/internal/legacy-command-guard.ts +59 -0
- package/src/internal/platform-timers.ts +191 -0
- package/src/internal/reminder-control-plane-protocol.ts +15 -2
- package/src/internal/reminder-runner.ts +60 -9
- package/src/internal/resolve-prod-target.ts +15 -0
- package/src/internal/run-client.ts +1 -1
- package/src/internal/sdk-runner.ts +3 -2
- package/src/internal/server.ts +89 -95
- package/src/internal/session-engine.ts +155 -285
- package/src/internal/storage-coordinator.ts +5 -76
- package/src/internal/storage-roles.ts +4 -9
- package/src/storage-backends/cursor-hosted-v2.ts +4 -7
- package/src/storage-backends/cursor-hosted.ts +40 -38
- package/src/storage-backends/file-kv.ts +10 -51
- package/src/storage-protocol.ts +3 -17
- package/src/storage.ts +10 -101
- package/src/types.ts +58 -62
- package/templates/demo/README.md +10 -6
- package/templates/demo/agent/channels/github.ts +2 -0
- package/templates/demo/agent/channels/queue.ts +6 -2
- package/templates/demo/agent/lib/repos.ts +5 -0
- package/templates/demo/init.json +25 -0
- package/dist/ab.d.ts +0 -209
- package/dist/ab.d.ts.map +0 -1
- package/dist/ab.js +0 -246
- package/dist/docs/ab.html +0 -80
- package/dist/docs/ab.md +0 -332
- package/dist/docs/assets/ab.md.mlVgqvSk.js +0 -54
- package/dist/docs/assets/ab.md.mlVgqvSk.lean.js +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DXXZxiMv.js +0 -1
- package/dist/docs/assets/concepts.md.DgEcZOfT.js +0 -1
- package/dist/docs/assets/evals.md.CbMoebP1.js +0 -85
- package/dist/docs/assets/evals.md.CbMoebP1.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +0 -9
- package/dist/docs/assets/index.md.BW_6tOgR.js +0 -5
- package/dist/docs/assets/reference_sessions.md.CueyOHSL.js +0 -1
- package/dist/docs/assets/skills_ab.md.CsFNatVx.js +0 -26
- package/dist/docs/assets/skills_ab.md.CsFNatVx.lean.js +0 -1
- package/dist/docs/assets/skills_evals.md.723kpUmA.js +0 -25
- package/dist/docs/assets/skills_evals.md.723kpUmA.lean.js +0 -1
- package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +0 -1
- package/dist/docs/assets/skills_index.md.DKwIxzGg.js +0 -1
- package/dist/docs/assets/skills_index.md.DKwIxzGg.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Cus_YZga.js +0 -1
- package/dist/docs/skills/ab.html +0 -52
- package/dist/docs/skills/ab.md +0 -50
- package/dist/internal/ab-collector.d.ts +0 -44
- package/dist/internal/ab-collector.d.ts.map +0 -1
- package/dist/internal/ab-collector.js +0 -142
- package/dist/internal/ab-fold.d.ts +0 -36
- package/dist/internal/ab-fold.d.ts.map +0 -1
- package/dist/internal/ab-fold.js +0 -175
- package/dist/internal/ab-snapshot.d.ts +0 -68
- package/dist/internal/ab-snapshot.d.ts.map +0 -1
- package/dist/internal/ab-snapshot.js +0 -208
- package/dist/internal/discovery/ab.d.ts +0 -9
- package/dist/internal/discovery/ab.d.ts.map +0 -1
- package/dist/internal/discovery/ab.js +0 -113
- package/dist/playground/assets/index-Bq2HpEQB.js +0 -67
- package/dist/playground/assets/index-CZKKNlmb.css +0 -1
- package/docs/ab.md +0 -337
- package/skills/ab/SKILL.md +0 -58
- package/src/ab.ts +0 -430
- package/src/internal/ab-collector.ts +0 -200
- package/src/internal/ab-fold.ts +0 -232
- package/src/internal/ab-snapshot.ts +0 -331
- package/src/internal/discovery/ab.ts +0 -131
- /package/dist/docs/assets/{concepts.md.DgEcZOfT.lean.js → concepts.md.B4o63Gul.lean.js} +0 -0
- /package/dist/docs/assets/{guides_grokbot-agents.md.DVqdhBKb.lean.js → guides_grokbot-agents.md.DyV-WArv.lean.js} +0 -0
- /package/dist/docs/assets/{guides_webhooks.md.DKdA43Qm.lean.js → guides_webhooks.md.CJK484ex.lean.js} +0 -0
- /package/dist/docs/assets/{hillclimbing.md.CpTGTCle.lean.js → hillclimbing.md.BOiVo1tf.lean.js} +0 -0
- /package/dist/docs/assets/{reference_agent-config.md.CHNpiyp4.lean.js → reference_agent-config.md.CvoL6pof.lean.js} +0 -0
- /package/dist/docs/assets/{reference_connections.md.Di6jJAXF.lean.js → reference_connections.md.BojkC6c5.lean.js} +0 -0
- /package/dist/docs/assets/{reference_extensions.md.CGmMLblt.lean.js → reference_extensions.md.ZAVUyuEX.lean.js} +0 -0
- /package/dist/docs/assets/{reference_http-api.md.oySXBO8o.lean.js → reference_http-api.md.BwaCo-VO.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.CueyOHSL.lean.js → reference_sessions.md.CyXV1MUw.lean.js} +0 -0
- /package/dist/docs/assets/{scaffolding-agents.md.em43xlY1.lean.js → scaffolding-agents.md.Kctn3OVb.lean.js} +0 -0
- /package/dist/docs/assets/{skills_create-agent.md.BVoWPcan.lean.js → skills_create-agent.md.Q3h6Je-e.lean.js} +0 -0
- /package/dist/docs/assets/{skills_github.md.D0JahM8c.lean.js → skills_github.md.hgFX_oKY.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.Cus_YZga.lean.js → troubleshooting.md.CYEAO9bM.lean.js} +0 -0
|
@@ -8,6 +8,14 @@
|
|
|
8
8
|
* executes fires.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import {
|
|
12
|
+
REMINDER_CP_PROTOCOL_VERSION,
|
|
13
|
+
type ReminderControlPlane,
|
|
14
|
+
type ReminderCreateIntent,
|
|
15
|
+
type ReminderExecutionOutcome,
|
|
16
|
+
type ReminderFireClaim,
|
|
17
|
+
type ReminderOutcomeApplyResult,
|
|
18
|
+
} from "./reminder-control-plane-protocol.js";
|
|
11
19
|
import { isReminderRecord, type ReminderRecord } from "./reminder-store.js";
|
|
12
20
|
|
|
13
21
|
const DEFAULT_CURSOR_EXTERNAL_API_URL = "https://api.cursor.com";
|
|
@@ -171,3 +179,186 @@ export function createCursorHostedPlatformTimers(
|
|
|
171
179
|
},
|
|
172
180
|
};
|
|
173
181
|
}
|
|
182
|
+
|
|
183
|
+
/** v2 reminder CP is factory ECS (`/internal/agentsdk/*`), not timed-work. */
|
|
184
|
+
const AGENTSDK_REMINDERS_PREFIX = "/internal/agentsdk";
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Bounded retries for idempotent CP outcome writes after the guest handler
|
|
188
|
+
* has already run. Delivery is at-least-once: a transient apply failure may
|
|
189
|
+
* re-enter the handler on the next Temporal admission. Do not claim
|
|
190
|
+
* exactly-once handler execution.
|
|
191
|
+
*/
|
|
192
|
+
const APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS = 3;
|
|
193
|
+
const APPLY_REMINDER_OUTCOME_RETRY_DELAY_MS = 50;
|
|
194
|
+
|
|
195
|
+
async function sleepMs(ms: number): Promise<void> {
|
|
196
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
async function withBoundedApplyRetries<T>(run: () => Promise<T>): Promise<T> {
|
|
200
|
+
let lastError: unknown;
|
|
201
|
+
for (
|
|
202
|
+
let attempt = 1;
|
|
203
|
+
attempt <= APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS;
|
|
204
|
+
attempt++
|
|
205
|
+
) {
|
|
206
|
+
try {
|
|
207
|
+
return await run();
|
|
208
|
+
} catch (error) {
|
|
209
|
+
lastError = error;
|
|
210
|
+
if (attempt >= APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS) {
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
await sleepMs(APPLY_REMINDER_OUTCOME_RETRY_DELAY_MS * attempt);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
throw lastError;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
async function timedWorkJsonFetch(
|
|
220
|
+
options: CursorHostedPlatformTimersOptions,
|
|
221
|
+
method: "GET" | "POST" | "PUT" | "DELETE",
|
|
222
|
+
path: string,
|
|
223
|
+
body?: unknown
|
|
224
|
+
): Promise<Response> {
|
|
225
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
226
|
+
if (typeof fetchImpl !== "function") {
|
|
227
|
+
throw new Error("reminder control plane requires fetch");
|
|
228
|
+
}
|
|
229
|
+
return fetchImpl(`${resolveBaseUrl(options)}${path}`, {
|
|
230
|
+
method,
|
|
231
|
+
headers: {
|
|
232
|
+
Authorization: `Bearer ${resolveApiKey(options)}`,
|
|
233
|
+
...(body === undefined ? {} : { "Content-Type": "application/json" }),
|
|
234
|
+
},
|
|
235
|
+
...(body === undefined ? {} : { body: JSON.stringify(body) }),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Cursor-hosted HTTP ReminderControlPlane for architecture v2.
|
|
241
|
+
* Speaks factory `/internal/agentsdk/reminders` (ELB → factory ECS).
|
|
242
|
+
* CP owns ids and time. v1 PUT/DELETE reminders stay on timed-work.
|
|
243
|
+
*/
|
|
244
|
+
export function createCursorHostedReminderControlPlane(
|
|
245
|
+
options: CursorHostedPlatformTimersOptions = {}
|
|
246
|
+
): ReminderControlPlane {
|
|
247
|
+
return {
|
|
248
|
+
protocolVersion: REMINDER_CP_PROTOCOL_VERSION,
|
|
249
|
+
async createReminder(intent: ReminderCreateIntent) {
|
|
250
|
+
const response = await timedWorkJsonFetch(
|
|
251
|
+
options,
|
|
252
|
+
"POST",
|
|
253
|
+
`${AGENTSDK_REMINDERS_PREFIX}/reminders`,
|
|
254
|
+
intent
|
|
255
|
+
);
|
|
256
|
+
if (!response.ok) {
|
|
257
|
+
const text = await response.text();
|
|
258
|
+
throw new Error(
|
|
259
|
+
`reminder CP create failed: HTTP ${response.status} ${text}`
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
const parsed: unknown = await response.json();
|
|
263
|
+
if (!isReminderRecord(parsed)) {
|
|
264
|
+
throw new Error("reminder CP create returned invalid record");
|
|
265
|
+
}
|
|
266
|
+
return parsed;
|
|
267
|
+
},
|
|
268
|
+
async getReminder(id) {
|
|
269
|
+
const response = await timedWorkJsonFetch(
|
|
270
|
+
options,
|
|
271
|
+
"GET",
|
|
272
|
+
`${AGENTSDK_REMINDERS_PREFIX}/reminders/${encodeURIComponent(id)}`
|
|
273
|
+
);
|
|
274
|
+
if (response.status === 404) {
|
|
275
|
+
return undefined;
|
|
276
|
+
}
|
|
277
|
+
if (!response.ok) {
|
|
278
|
+
throw new Error(`reminder CP get failed: HTTP ${response.status}`);
|
|
279
|
+
}
|
|
280
|
+
const parsed: unknown = await response.json();
|
|
281
|
+
return isReminderRecord(parsed) ? parsed : undefined;
|
|
282
|
+
},
|
|
283
|
+
async listReminders() {
|
|
284
|
+
const response = await timedWorkJsonFetch(
|
|
285
|
+
options,
|
|
286
|
+
"GET",
|
|
287
|
+
`${AGENTSDK_REMINDERS_PREFIX}/reminders`
|
|
288
|
+
);
|
|
289
|
+
if (!response.ok) {
|
|
290
|
+
throw new Error(`reminder CP list failed: HTTP ${response.status}`);
|
|
291
|
+
}
|
|
292
|
+
const parsed: unknown = await response.json();
|
|
293
|
+
if (
|
|
294
|
+
parsed === null ||
|
|
295
|
+
typeof parsed !== "object" ||
|
|
296
|
+
!("reminders" in parsed) ||
|
|
297
|
+
!Array.isArray((parsed as { reminders: unknown }).reminders)
|
|
298
|
+
) {
|
|
299
|
+
return [];
|
|
300
|
+
}
|
|
301
|
+
return (parsed as { reminders: unknown[] }).reminders.filter(
|
|
302
|
+
isReminderRecord
|
|
303
|
+
);
|
|
304
|
+
},
|
|
305
|
+
async cancelReminder(id, reason) {
|
|
306
|
+
const response = await timedWorkJsonFetch(
|
|
307
|
+
options,
|
|
308
|
+
"POST",
|
|
309
|
+
`${AGENTSDK_REMINDERS_PREFIX}/reminders/${encodeURIComponent(id)}/cancel`,
|
|
310
|
+
reason === undefined ? {} : { reason }
|
|
311
|
+
);
|
|
312
|
+
if (response.status === 404) {
|
|
313
|
+
return undefined;
|
|
314
|
+
}
|
|
315
|
+
if (!response.ok) {
|
|
316
|
+
throw new Error(`reminder CP cancel failed: HTTP ${response.status}`);
|
|
317
|
+
}
|
|
318
|
+
const parsed: unknown = await response.json();
|
|
319
|
+
return isReminderRecord(parsed) ? parsed : undefined;
|
|
320
|
+
},
|
|
321
|
+
async rekeyReminders(channelId, oldToken, newToken) {
|
|
322
|
+
const response = await timedWorkJsonFetch(
|
|
323
|
+
options,
|
|
324
|
+
"POST",
|
|
325
|
+
`${AGENTSDK_REMINDERS_PREFIX}/reminders/rekey`,
|
|
326
|
+
{ channelId, oldToken, newToken }
|
|
327
|
+
);
|
|
328
|
+
if (!response.ok) {
|
|
329
|
+
throw new Error(`reminder CP rekey failed: HTTP ${response.status}`);
|
|
330
|
+
}
|
|
331
|
+
const parsed: unknown = await response.json();
|
|
332
|
+
if (
|
|
333
|
+
parsed === null ||
|
|
334
|
+
typeof parsed !== "object" ||
|
|
335
|
+
typeof (parsed as { count?: unknown }).count !== "number"
|
|
336
|
+
) {
|
|
337
|
+
throw new Error("reminder CP rekey returned invalid body");
|
|
338
|
+
}
|
|
339
|
+
return (parsed as { count: number }).count;
|
|
340
|
+
},
|
|
341
|
+
async applyReminderOutcome(
|
|
342
|
+
claim: ReminderFireClaim,
|
|
343
|
+
outcome: ReminderExecutionOutcome
|
|
344
|
+
): Promise<ReminderOutcomeApplyResult> {
|
|
345
|
+
// Handler side effects may already have run; retry only the idempotent
|
|
346
|
+
// CP write. Exhausted failures stay thrown so Temporal can re-admit
|
|
347
|
+
// (at-least-once — not exactly-once).
|
|
348
|
+
return await withBoundedApplyRetries(async () => {
|
|
349
|
+
const response = await timedWorkJsonFetch(
|
|
350
|
+
options,
|
|
351
|
+
"POST",
|
|
352
|
+
`${AGENTSDK_REMINDERS_PREFIX}/reminders/outcome`,
|
|
353
|
+
{ claim, outcome }
|
|
354
|
+
);
|
|
355
|
+
if (!response.ok) {
|
|
356
|
+
throw new Error(
|
|
357
|
+
`reminder CP outcome apply failed: HTTP ${response.status}`
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
return (await response.json()) as ReminderOutcomeApplyResult;
|
|
361
|
+
});
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
}
|
|
@@ -27,6 +27,8 @@ import type { ReminderRecord } from "./reminder-store.js";
|
|
|
27
27
|
|
|
28
28
|
/** Wire / persistence version for this control-plane protocol. */
|
|
29
29
|
export const REMINDER_CP_PROTOCOL_VERSION = 1 as const;
|
|
30
|
+
/** Each recurring/retry fire can spend a model turn and create hosted work. */
|
|
31
|
+
export const REMINDER_CP_MIN_RECURRING_INTERVAL_MS = 60_000 as const;
|
|
30
32
|
|
|
31
33
|
export type ReminderCpProtocolVersion = typeof REMINDER_CP_PROTOCOL_VERSION;
|
|
32
34
|
|
|
@@ -293,6 +295,14 @@ export function intentToNewRecord(
|
|
|
293
295
|
scheduleSpecToCreateFields(intent.schedule),
|
|
294
296
|
nowMs
|
|
295
297
|
);
|
|
298
|
+
if (
|
|
299
|
+
resolved.kind === "every" &&
|
|
300
|
+
(resolved.intervalMs ?? 0) < REMINDER_CP_MIN_RECURRING_INTERVAL_MS
|
|
301
|
+
) {
|
|
302
|
+
throw new ReminderValidationError(
|
|
303
|
+
`every must be >= 1m (got ${intent.schedule.kind === "every" ? intent.schedule.every : ""})`
|
|
304
|
+
);
|
|
305
|
+
}
|
|
296
306
|
const nowIso = new Date(nowMs).toISOString();
|
|
297
307
|
return {
|
|
298
308
|
version: 1,
|
|
@@ -429,11 +439,14 @@ export function applyOutcomeToRecord(
|
|
|
429
439
|
const nowIso = new Date(nowMs).toISOString();
|
|
430
440
|
|
|
431
441
|
if (outcome.kind === "retry") {
|
|
432
|
-
const delayMs =
|
|
442
|
+
const delayMs = Math.max(
|
|
443
|
+
REMINDER_CP_MIN_RECURRING_INTERVAL_MS,
|
|
444
|
+
outcome.delayMs ?? REMINDER_CP_MIN_RECURRING_INTERVAL_MS
|
|
445
|
+
);
|
|
433
446
|
const updated: ReminderRecord = {
|
|
434
447
|
...record,
|
|
435
448
|
status: "armed",
|
|
436
|
-
nextFireAtMs: nowMs +
|
|
449
|
+
nextFireAtMs: nowMs + delayMs,
|
|
437
450
|
// Same fireCount; bump generation so a second apply of the old claim is stale.
|
|
438
451
|
generation: recordGeneration(record) + 1,
|
|
439
452
|
updatedAt: nowIso,
|
|
@@ -18,6 +18,11 @@ import type {
|
|
|
18
18
|
ReminderStatus,
|
|
19
19
|
ReminderUntilContext,
|
|
20
20
|
} from "../types.js";
|
|
21
|
+
import {
|
|
22
|
+
channelContinuationIdentity,
|
|
23
|
+
httpContinuationIdentity,
|
|
24
|
+
} from "./continuation-channel.js";
|
|
25
|
+
import { continuationSource } from "./continuation-identity.js";
|
|
21
26
|
import { NAME_PATTERN } from "./discovery/names.js";
|
|
22
27
|
import { parseDuration } from "./duration.js";
|
|
23
28
|
import type { PlatformTimers } from "./platform-timers.js";
|
|
@@ -39,7 +44,12 @@ import {
|
|
|
39
44
|
} from "./reminder-schedule.js";
|
|
40
45
|
import type { ReminderBusyPolicy, ReminderRecord } from "./reminder-store.js";
|
|
41
46
|
import { APP_AUTH } from "./schedule-runner.js";
|
|
42
|
-
import {
|
|
47
|
+
import {
|
|
48
|
+
type EngineSendOptions,
|
|
49
|
+
HTTP_CHANNEL_ID,
|
|
50
|
+
SessionBusyError,
|
|
51
|
+
type SessionEngine,
|
|
52
|
+
} from "./session-engine.js";
|
|
43
53
|
|
|
44
54
|
export { ReminderValidationError } from "./reminder-schedule.js";
|
|
45
55
|
|
|
@@ -1040,16 +1050,56 @@ export class ReminderRunner {
|
|
|
1040
1050
|
return this.sendFollowup(record, buildFirePrompt(record), auth);
|
|
1041
1051
|
}
|
|
1042
1052
|
|
|
1053
|
+
/**
|
|
1054
|
+
* Join the reminder's existing session. Control-plane (`/v2`) channels
|
|
1055
|
+
* refuse authored `continuationToken`; pass the stored key as
|
|
1056
|
+
* {@link EngineSendOptions.mailboxContinuation} so the engine reuses the
|
|
1057
|
+
* CP-selected identity without channel admission.
|
|
1058
|
+
*/
|
|
1059
|
+
private followupSendOptions(
|
|
1060
|
+
record: ReminderRecord,
|
|
1061
|
+
auth: AuthContext | null
|
|
1062
|
+
): EngineSendOptions {
|
|
1063
|
+
if (this.channelUsesControlPlaneContinuation(record.channelId)) {
|
|
1064
|
+
return {
|
|
1065
|
+
auth,
|
|
1066
|
+
mailboxContinuation: { key: record.continuationToken },
|
|
1067
|
+
};
|
|
1068
|
+
}
|
|
1069
|
+
return {
|
|
1070
|
+
auth,
|
|
1071
|
+
continuationToken: record.continuationToken,
|
|
1072
|
+
};
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
private channelUsesControlPlaneContinuation(channelId: string): boolean {
|
|
1076
|
+
const project = this.engine.project;
|
|
1077
|
+
// Test doubles may omit `project`; keep the legacy continuationToken path.
|
|
1078
|
+
if (project === undefined) {
|
|
1079
|
+
return false;
|
|
1080
|
+
}
|
|
1081
|
+
const identity =
|
|
1082
|
+
channelId === HTTP_CHANNEL_ID
|
|
1083
|
+
? httpContinuationIdentity(project.httpChannel)
|
|
1084
|
+
: channelContinuationIdentity(
|
|
1085
|
+
project.channels.find((channel) => channel.id === channelId)
|
|
1086
|
+
?.definition
|
|
1087
|
+
);
|
|
1088
|
+
return continuationSource(identity) === "control-plane";
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1043
1091
|
private async sendFollowup(
|
|
1044
1092
|
record: ReminderRecord,
|
|
1045
1093
|
message: string,
|
|
1046
1094
|
auth: AuthContext | null
|
|
1047
1095
|
): Promise<ReminderFireResult> {
|
|
1096
|
+
const sendOptions = this.followupSendOptions(record, auth);
|
|
1048
1097
|
try {
|
|
1049
|
-
const session = await this.engine.send(
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1098
|
+
const session = await this.engine.send(
|
|
1099
|
+
record.channelId,
|
|
1100
|
+
message,
|
|
1101
|
+
sendOptions
|
|
1102
|
+
);
|
|
1053
1103
|
this.engine.trackBackground(this.engine.waitForCompletion(session.id));
|
|
1054
1104
|
return { action: "delivered" };
|
|
1055
1105
|
} catch (error) {
|
|
@@ -1059,10 +1109,11 @@ export class ReminderRunner {
|
|
|
1059
1109
|
}
|
|
1060
1110
|
await this.whenSessionIdle(record.channelId, record.continuationToken);
|
|
1061
1111
|
try {
|
|
1062
|
-
const session = await this.engine.send(
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1112
|
+
const session = await this.engine.send(
|
|
1113
|
+
record.channelId,
|
|
1114
|
+
message,
|
|
1115
|
+
sendOptions
|
|
1116
|
+
);
|
|
1066
1117
|
this.engine.trackBackground(
|
|
1067
1118
|
this.engine.waitForCompletion(session.id)
|
|
1068
1119
|
);
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
validateDeploymentSlug,
|
|
17
17
|
} from "./deploy-client.js";
|
|
18
18
|
import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
|
|
19
|
+
import { rejectV2ForLegacyCommand } from "./legacy-command-guard.js";
|
|
19
20
|
import { sleep as defaultSleep } from "./sleep.js";
|
|
20
21
|
import { stderrPalette } from "./terminal-style.js";
|
|
21
22
|
|
|
@@ -38,6 +39,8 @@ export interface ResolveProdTargetOptions {
|
|
|
38
39
|
apiKey?: string;
|
|
39
40
|
fetchImpl?: typeof fetch;
|
|
40
41
|
err?: (text: string) => void;
|
|
42
|
+
/** Skip when the caller already ran {@link rejectV2ForLegacyCommand}. */
|
|
43
|
+
skipLegacyArchitectureCheck?: boolean;
|
|
41
44
|
/** Test seam for reachability-retry backoff. */
|
|
42
45
|
sleep?: (ms: number) => Promise<void>;
|
|
43
46
|
}
|
|
@@ -95,6 +98,13 @@ export async function resolveProdTarget(
|
|
|
95
98
|
`Could not resolve Cursor credentials/team for the hosted deployment (see above).`
|
|
96
99
|
);
|
|
97
100
|
}
|
|
101
|
+
if (options.skipLegacyArchitectureCheck !== true) {
|
|
102
|
+
await rejectV2ForLegacyCommand({
|
|
103
|
+
client: auth.client,
|
|
104
|
+
teamId: auth.teamId,
|
|
105
|
+
slug,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
98
108
|
|
|
99
109
|
// A hibernated engine can briefly omit engineAccess while getPod fails
|
|
100
110
|
// during wake. Retry a few times before surfacing "not reachable yet".
|
|
@@ -198,6 +208,11 @@ export async function resolveProdAliasPlaygroundUrl(
|
|
|
198
208
|
`Could not resolve Cursor credentials/team for the hosted deployment (see above).`
|
|
199
209
|
);
|
|
200
210
|
}
|
|
211
|
+
await rejectV2ForLegacyCommand({
|
|
212
|
+
client: auth.client,
|
|
213
|
+
teamId: auth.teamId,
|
|
214
|
+
slug,
|
|
215
|
+
});
|
|
201
216
|
|
|
202
217
|
let detail: DeploymentDetail;
|
|
203
218
|
try {
|
|
@@ -34,7 +34,7 @@ export interface RunClientOptions extends RequestAuth {
|
|
|
34
34
|
onEvent?: (event: SessionEvent) => void;
|
|
35
35
|
/**
|
|
36
36
|
* Create-time session purpose. Pass `"eval"` from the eval harness so
|
|
37
|
-
*
|
|
37
|
+
* the session is marked as regression traffic. Default `"live"`.
|
|
38
38
|
*/
|
|
39
39
|
purpose?: SessionPurpose;
|
|
40
40
|
}
|
|
@@ -355,7 +355,7 @@ export class CursorSdkRunner implements AgentRunner {
|
|
|
355
355
|
) {
|
|
356
356
|
// Cloud `wait()` drops usage after stream reconnect / getRun replay,
|
|
357
357
|
// or returns an all-zero stub. `getUsage` still has the run's tokens
|
|
358
|
-
// (eventually); without them traces
|
|
358
|
+
// (eventually); without them traces never record an estimated cost.
|
|
359
359
|
outcome = await fillMissingCloudUsage(agent, result.id, outcome);
|
|
360
360
|
}
|
|
361
361
|
return outcome;
|
|
@@ -518,7 +518,7 @@ export class CursorSdkRunner implements AgentRunner {
|
|
|
518
518
|
const resolved = resolveApiKeySync({ apiKey: this.options.apiKey });
|
|
519
519
|
if (resolved === undefined) {
|
|
520
520
|
throw new Error(
|
|
521
|
-
`The Cursor SDK runner requires a Cursor credential: run \`${CLI} login\`, set CURSOR_API_KEY or CURSOR_API_KEY_FILE, or pass serve({ apiKey }).`
|
|
521
|
+
`The Cursor SDK runner requires a Cursor credential: run \`${CLI} login\`, set CURSOR_API_KEY, CURSOR_SERVICE_ACCOUNT_KEY, or CURSOR_API_KEY_FILE, or pass serve({ apiKey }).`
|
|
522
522
|
);
|
|
523
523
|
}
|
|
524
524
|
return resolved.apiKey;
|
|
@@ -805,6 +805,7 @@ function toTurnOutcome(result: RunResult): TurnOutcome {
|
|
|
805
805
|
...(result.status === "error"
|
|
806
806
|
? { errorMessage: runErrorMessage(result) }
|
|
807
807
|
: {}),
|
|
808
|
+
errorCode: result.status === "error" ? result.error?.code : undefined,
|
|
808
809
|
...(usage === undefined ? {} : { usage }),
|
|
809
810
|
};
|
|
810
811
|
}
|