@cursor/july 0.1.105 → 0.1.108
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/README.md +10 -5
- package/dist/bin/agent-serve.js +31 -16
- package/dist/channels/bitbucket/types.d.ts +2 -4
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/deployments/types.d.ts +5 -8
- package/dist/channels/deployments/types.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +8 -5
- package/dist/channels/github/types.d.ts +7 -5
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/types.d.ts +2 -5
- package/dist/channels/gitlab/types.d.ts.map +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 +7 -4
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +3 -0
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +1 -1
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +48 -11
- package/dist/channels/slack/types.d.ts +4 -3
- package/dist/channels/slack/types.d.ts.map +1 -1
- 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 +3 -3
- package/dist/docs/ab.html +6 -6
- package/dist/docs/assets/{app.BVwaffdK.js → app.BASKM3M4.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BHZYsNVi.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.WuWTZ1x8.js → VPLocalSearchBox.BOKxlYGP.js} +2 -2
- package/dist/docs/assets/chunks/{theme.BYdI_6sF.js → theme.DbDZW-zb.js} +2 -2
- 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.CbMoebP1.js → evals.md.C1ekS3k2.js} +1 -1
- 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.BH33UEBJ.js} +1 -1
- 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_opentelemetry.md.COh9jFVg.js → guides_opentelemetry.md.SCRMskno.js} +3 -3
- package/dist/docs/assets/{guides_opentelemetry.md.COh9jFVg.lean.js → guides_opentelemetry.md.SCRMskno.lean.js} +1 -1
- 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/index.md.BjH1w2ZW.js +5 -0
- 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.DBGcaB7m.js → reference_channels.md.D-qTqwcq.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.DBGcaB7m.lean.js → reference_channels.md.D-qTqwcq.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.C6Lo8SEd.js → reference_cli.md.Ca26u0Es.js} +6 -6
- package/dist/docs/assets/{reference_cli.md.C6Lo8SEd.lean.js → reference_cli.md.Ca26u0Es.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.CPWt00ds.js} +1 -1
- 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_evals.md.723kpUmA.js → skills_evals.md.BhovOvrl.js} +1 -1
- package/dist/docs/assets/skills_framework-map.md.D-tFZhFS.js +1 -0
- package/dist/docs/assets/{skills_framework-map.md.haibFyoB.lean.js → skills_framework-map.md.D-tFZhFS.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_otel.md.CqhobH3B.js → skills_otel.md.B5Ddv1xH.js} +1 -1
- package/dist/docs/assets/{style.BRuM8477.css → style.DCD_zyg3.css} +1 -1
- package/dist/docs/assets/troubleshooting.md.CYEAO9bM.js +1 -0
- package/dist/docs/building-with-agents.html +6 -6
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/deployment.html +9 -9
- package/dist/docs/deployment.md +7 -2
- package/dist/docs/evals.html +8 -8
- package/dist/docs/evals.md +3 -2
- package/dist/docs/guides/agent-to-agent.html +6 -6
- package/dist/docs/guides/cloud-agents.html +7 -7
- package/dist/docs/guides/cloud-agents.md +4 -3
- package/dist/docs/guides/convert-automation.html +6 -6
- package/dist/docs/guides/github.html +7 -7
- package/dist/docs/guides/github.md +2 -1
- package/dist/docs/guides/grokbot-agents.html +7 -7
- package/dist/docs/guides/grokbot-agents.md +2 -2
- package/dist/docs/guides/human-in-the-loop.html +6 -6
- package/dist/docs/guides/improve.html +40 -0
- package/dist/docs/guides/improve.md +91 -0
- package/dist/docs/guides/mcp-oauth.html +6 -6
- package/dist/docs/guides/opentelemetry.html +8 -8
- package/dist/docs/guides/opentelemetry.md +3 -4
- package/dist/docs/guides/slack.html +8 -8
- package/dist/docs/guides/slack.md +2 -1
- package/dist/docs/guides/webhooks.html +6 -6
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +6 -6
- package/dist/docs/index.html +8 -8
- package/dist/docs/index.md +4 -0
- package/dist/docs/llms-full.txt +180 -61
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +6 -6
- package/dist/docs/reference/agent-config.html +7 -7
- package/dist/docs/reference/agent-config.md +5 -2
- package/dist/docs/reference/artifacts.html +6 -6
- package/dist/docs/reference/channels.html +7 -7
- package/dist/docs/reference/channels.md +11 -19
- package/dist/docs/reference/cli.html +11 -11
- package/dist/docs/reference/cli.md +23 -13
- package/dist/docs/reference/connections.html +8 -8
- package/dist/docs/reference/connections.md +2 -1
- package/dist/docs/reference/extensions.html +7 -7
- package/dist/docs/reference/extensions.md +2 -0
- package/dist/docs/reference/hooks.html +6 -6
- package/dist/docs/reference/http-api.html +6 -6
- package/dist/docs/reference/instructions.html +6 -6
- package/dist/docs/reference/playground.html +5 -5
- package/dist/docs/reference/project-layout.html +6 -6
- package/dist/docs/reference/prompt.html +6 -6
- package/dist/docs/reference/result.html +6 -6
- package/dist/docs/reference/schedules.html +6 -6
- package/dist/docs/reference/sessions.html +5 -5
- package/dist/docs/reference/skills.html +6 -6
- package/dist/docs/reference/subagents.html +6 -6
- package/dist/docs/reference/tools.html +6 -6
- package/dist/docs/scaffolding-agents.html +6 -6
- package/dist/docs/scaffolding-agents.md +2 -1
- package/dist/docs/skills/ab.html +6 -6
- package/dist/docs/skills/create-agent.html +8 -8
- package/dist/docs/skills/create-agent.md +1 -1
- package/dist/docs/skills/debug.html +6 -6
- package/dist/docs/skills/debug.md +1 -1
- package/dist/docs/skills/evals.html +8 -8
- package/dist/docs/skills/evals.md +1 -1
- package/dist/docs/skills/framework-map.html +6 -6
- package/dist/docs/skills/framework-map.md +4 -2
- package/dist/docs/skills/github.html +8 -8
- package/dist/docs/skills/github.md +1 -1
- package/dist/docs/skills/hillclimb.html +6 -6
- package/dist/docs/skills/index.html +5 -5
- package/dist/docs/skills/mcp-auth.html +6 -6
- package/dist/docs/skills/otel.html +8 -8
- package/dist/docs/skills/otel.md +3 -3
- package/dist/docs/skills/setup-slack.html +6 -6
- package/dist/docs/storage.html +6 -6
- package/dist/docs/templates/agentic-owners.html +6 -6
- package/dist/docs/templates/agents-md.html +6 -6
- package/dist/docs/templates/code-wiki.html +6 -6
- package/dist/docs/templates/demo.html +6 -6
- package/dist/docs/templates/grokbot-agents.html +6 -6
- package/dist/docs/templates/pr-autofixer.html +6 -6
- package/dist/docs/templates/security-help.html +6 -6
- package/dist/docs/templates/security-reviewer.html +6 -6
- package/dist/docs/templates/triage.html +6 -6
- package/dist/docs/troubleshooting.html +6 -6
- 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/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- 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 +7 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +99 -1
- 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 +61 -25
- 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/cursor/backend-client.d.ts +25 -0
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +57 -2
- 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 +35 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +46 -0
- package/dist/internal/deploy-manifest.d.ts +26 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +99 -13
- 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.map +1 -1
- package/dist/internal/discovery/agent.js +1 -0
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +7 -3
- package/dist/internal/discovery/modules.d.ts +1 -1
- package/dist/internal/discovery/modules.d.ts.map +1 -1
- package/dist/internal/discovery/modules.js +1 -0
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +3 -0
- package/dist/internal/discovery/reminders.d.ts +7 -0
- package/dist/internal/discovery/reminders.d.ts.map +1 -0
- package/dist/internal/discovery/reminders.js +65 -0
- package/dist/internal/discovery/subagent.js +1 -0
- package/dist/internal/distribution.d.ts +5 -0
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +17 -0
- package/dist/internal/framework-storage-selection.d.ts +14 -3
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +36 -6
- 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 +44 -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 +89 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +309 -0
- package/dist/internal/hosted-delivery.d.ts +20 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +179 -36
- 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/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/local-control-plane.d.ts +18 -2
- package/dist/internal/local-control-plane.d.ts.map +1 -1
- package/dist/internal/local-control-plane.js +199 -17
- 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 +189 -0
- package/dist/internal/reminder-control-plane-protocol.d.ts.map +1 -0
- package/dist/internal/reminder-control-plane-protocol.js +251 -0
- package/dist/internal/reminder-runner.d.ts +56 -6
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +372 -57
- package/dist/internal/reminder-schedule.d.ts +5 -2
- package/dist/internal/reminder-schedule.d.ts.map +1 -1
- package/dist/internal/reminder-schedule.js +8 -6
- package/dist/internal/reminder-store.d.ts +24 -7
- package/dist/internal/reminder-store.d.ts.map +1 -1
- package/dist/internal/reminder-store.js +6 -5
- package/dist/internal/request-error-status.d.ts +2 -0
- package/dist/internal/request-error-status.d.ts.map +1 -1
- package/dist/internal/request-error-status.js +22 -3
- 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/scm/pr-url.d.ts +40 -0
- package/dist/internal/scm/pr-url.d.ts.map +1 -1
- package/dist/internal/scm/pr-url.js +93 -14
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +4 -3
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +118 -77
- package/dist/internal/session-engine.d.ts +6 -6
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +100 -67
- package/dist/playground/assets/{index-BaQzjaNK.js → index-BMDqAeXu.js} +34 -34
- package/dist/playground/assets/index-LUgJoWdL.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/reminders.d.ts +24 -5
- package/dist/reminders.d.ts.map +1 -1
- package/dist/reminders.js +28 -5
- package/dist/storage-backends/cursor-hosted.d.ts +6 -0
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +29 -1
- package/dist/types.d.ts +122 -25
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +4 -0
- package/docs/deployment.md +7 -2
- package/docs/evals.md +3 -2
- package/docs/guides/cloud-agents.md +4 -3
- package/docs/guides/github.md +2 -1
- package/docs/guides/grokbot-agents.md +2 -2
- package/docs/guides/improve.md +96 -0
- package/docs/guides/opentelemetry.md +3 -4
- package/docs/guides/slack.md +2 -1
- package/docs/reference/agent-config.md +5 -2
- package/docs/reference/channels.md +11 -19
- package/docs/reference/cli.md +23 -13
- package/docs/reference/connections.md +2 -1
- package/docs/reference/extensions.md +2 -0
- package/docs/scaffolding-agents.md +2 -1
- package/docs/troubleshooting.md +1 -1
- package/package.json +10 -3
- package/skills/create-agent/SKILL.md +1 -1
- package/skills/debug/SKILL.md +1 -1
- package/skills/evals/SKILL.md +1 -1
- package/skills/framework-map/SKILL.md +4 -2
- package/skills/github/SKILL.md +1 -1
- package/skills/otel/SKILL.md +3 -3
- package/src/bin/agent-serve.ts +28 -11
- package/src/channels/bitbucket/types.ts +2 -4
- package/src/channels/deployments/types.ts +5 -8
- package/src/channels/github/github-channel.ts +8 -8
- package/src/channels/github/types.ts +7 -4
- package/src/channels/gitlab/types.ts +2 -5
- package/src/channels/origin/origin-channel.ts +29 -13
- package/src/channels/origin/types.ts +7 -3
- package/src/channels/slack/defaults.ts +3 -0
- package/src/channels/slack/dispatch.ts +1 -0
- package/src/channels/slack/live-delivery.ts +53 -12
- package/src/channels/slack/types.ts +4 -3
- 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/index.ts +6 -3
- 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 +110 -1
- package/src/internal/cli-cursor.ts +4 -1
- package/src/internal/cli-deploy.ts +80 -22
- 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/cursor/backend-client.ts +90 -2
- package/src/internal/cursor/credentials.ts +35 -7
- package/src/internal/deploy-client.ts +70 -0
- package/src/internal/deploy-manifest.ts +131 -12
- package/src/internal/describe-error.ts +28 -0
- package/src/internal/discovery/agent.ts +1 -0
- package/src/internal/discovery/info.ts +6 -0
- package/src/internal/discovery/modules.ts +2 -4
- package/src/internal/discovery/project.ts +3 -0
- package/src/internal/discovery/reminders.ts +65 -0
- package/src/internal/discovery/subagent.ts +1 -0
- package/src/internal/distribution.ts +20 -0
- package/src/internal/framework-storage-selection.ts +43 -6
- package/src/internal/guest-network.ts +46 -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 +483 -0
- package/src/internal/hosted-delivery.ts +303 -43
- 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/legacy-command-guard.ts +59 -0
- package/src/internal/local-control-plane.ts +281 -22
- package/src/internal/platform-timers.ts +191 -0
- package/src/internal/reminder-control-plane-protocol.ts +512 -0
- package/src/internal/reminder-runner.ts +481 -57
- package/src/internal/reminder-schedule.ts +11 -6
- package/src/internal/reminder-store.ts +27 -7
- package/src/internal/request-error-status.ts +27 -3
- package/src/internal/resolve-prod-target.ts +15 -0
- package/src/internal/scm/pr-url.ts +167 -20
- package/src/internal/sdk-runner.ts +2 -1
- package/src/internal/server.ts +151 -88
- package/src/internal/session-engine.ts +146 -83
- package/src/reminders.ts +35 -4
- package/src/storage-backends/cursor-hosted.ts +40 -1
- package/src/types.ts +134 -26
- package/dist/docs/assets/chunks/@localSearchIndexroot.CJxMklAy.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/skills_framework-map.md.haibFyoB.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Cus_YZga.js +0 -1
- package/dist/playground/assets/index-CceqnLTX.css +0 -1
- /package/dist/docs/assets/{evals.md.CbMoebP1.lean.js → evals.md.C1ekS3k2.lean.js} +0 -0
- /package/dist/docs/assets/{guides_github.md.c0gdGJ-D.lean.js → guides_github.md.BH33UEBJ.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/{index.md.BW_6tOgR.lean.js → index.md.BjH1w2ZW.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.CPWt00ds.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_evals.md.723kpUmA.lean.js → skills_evals.md.BhovOvrl.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/{skills_otel.md.CqhobH3B.lean.js → skills_otel.md.B5Ddv1xH.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.Cus_YZga.lean.js → troubleshooting.md.CYEAO9bM.lean.js} +0 -0
|
@@ -11,16 +11,17 @@ import { randomBytes } from "node:crypto";
|
|
|
11
11
|
import { dispatchOutcome } from "./channel-dispatch.js";
|
|
12
12
|
import { consumeHostedBoundSecrets, } from "./cursor/hosted-bound-secrets.js";
|
|
13
13
|
import { createDeferredChannelSession, DeferredChannelSessionError, } from "./deferred-channel-session.js";
|
|
14
|
-
import { formatGuestNetworkServerTiming, GUEST_CONNECT_STALLED, GUEST_NETWORK_UNAVAILABLE, GuestNetworkUnavailableError,
|
|
14
|
+
import { formatGuestNetworkServerTiming, GUEST_CONNECT_STALLED, GUEST_NETWORK_UNAVAILABLE, GuestNetworkUnavailableError, waitForGuestNetworkReady, } from "./guest-network.js";
|
|
15
15
|
import { getHostedAdmissionAdapter, } from "./hosted-admission-adapter.js";
|
|
16
16
|
import { HostedAdmissionLocalSendError, runDuringHostedAdmission, } from "./hosted-admission-context.js";
|
|
17
|
-
import { HOSTED_ADMISSION_PATH, HOSTED_DELIVERY_HEADER, HOSTED_DELIVERY_PROTOCOL_VERSION, HOSTED_EXECUTION_PATH, parseHostedAdmission, parseHostedExecution, } from "./hosted-delivery-protocol.js";
|
|
17
|
+
import { HOSTED_ADMISSION_PATH, HOSTED_DELIVERY_HEADER, HOSTED_DELIVERY_PROTOCOL_VERSION, HOSTED_EXECUTION_PATH, HOSTED_GUEST_RETRY_TERMINAL, HOSTED_GUEST_RETRY_TRANSIENT, hostedFailureClassification, hostedGuestErrorResponse, isHostedReminderAdmission, parseHostedAdmission, parseHostedExecution, parseHostedReminderFireDescriptorPayload, parseHostedReminderFirePayload, } from "./hosted-delivery-protocol.js";
|
|
18
18
|
import { abortReasonFromTurnStatus, HOSTED_EXECUTION_DIAG_RUNNING_STATUS, hostedExecutionDiagId, } from "./hosted-execution-diag.js";
|
|
19
19
|
import { flushHostedExecutionRecord, } from "./hosted-execution-flush.js";
|
|
20
20
|
import { recordHostedManagedAutomation } from "./hosted-managed-automation.js";
|
|
21
|
-
import {
|
|
21
|
+
import { readJsonObject } from "./http-channel.js";
|
|
22
22
|
import { endActiveHttpSpan } from "./otel/http.js";
|
|
23
|
-
import {
|
|
23
|
+
import { ReminderValidationError, UnknownReminderError, } from "./reminder-runner.js";
|
|
24
|
+
import { mapThrownRequestError, statusForThrownRequestError, } from "./request-error-status.js";
|
|
24
25
|
/**
|
|
25
26
|
* A second `send()` in one delivery is a deterministic authored bug — the
|
|
26
27
|
* wire protocol carries exactly one pending send per delivery — so it must
|
|
@@ -44,6 +45,22 @@ function boundedMessage(text) {
|
|
|
44
45
|
? `${text.slice(0, MAX_ERROR_MESSAGE_LENGTH)}…`
|
|
45
46
|
: text;
|
|
46
47
|
}
|
|
48
|
+
function terminalHostedError(status, error, message) {
|
|
49
|
+
return hostedGuestErrorResponse({
|
|
50
|
+
status,
|
|
51
|
+
error,
|
|
52
|
+
retry: HOSTED_GUEST_RETRY_TERMINAL,
|
|
53
|
+
message,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function transientHostedError(status, error, message) {
|
|
57
|
+
return hostedGuestErrorResponse({
|
|
58
|
+
status,
|
|
59
|
+
error,
|
|
60
|
+
retry: HOSTED_GUEST_RETRY_TRANSIENT,
|
|
61
|
+
message,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
47
64
|
/**
|
|
48
65
|
* Classify deterministic authored protocol violations as non-retryable 422
|
|
49
66
|
* admissions. Anything else returns `undefined` so callers fall through to
|
|
@@ -61,7 +78,31 @@ function nonRetryableRejection(error) {
|
|
|
61
78
|
return undefined;
|
|
62
79
|
}
|
|
63
80
|
return {
|
|
64
|
-
response:
|
|
81
|
+
response: terminalHostedError(422, code, boundedMessage(error.message)),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Prefer the shared throw → HTTP mapper (guest network / connect stall /
|
|
86
|
+
* session busy / …) before collapsing into agent_admission_threw or
|
|
87
|
+
* background_dispatch_failed. Those agent codes otherwise hide typed
|
|
88
|
+
* transient failures that the outer handleRequest boundary never sees.
|
|
89
|
+
*/
|
|
90
|
+
function mappedAdmissionFailure(error) {
|
|
91
|
+
const rejected = nonRetryableRejection(error);
|
|
92
|
+
if (rejected !== undefined) {
|
|
93
|
+
return rejected;
|
|
94
|
+
}
|
|
95
|
+
const mapped = mapThrownRequestError(error);
|
|
96
|
+
if (mapped === undefined) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
response: hostedGuestErrorResponse({
|
|
101
|
+
status: mapped.status,
|
|
102
|
+
error: mapped.code,
|
|
103
|
+
retry: mapped.retry,
|
|
104
|
+
message: boundedMessage(mapped.message),
|
|
105
|
+
}),
|
|
65
106
|
};
|
|
66
107
|
}
|
|
67
108
|
/**
|
|
@@ -79,7 +120,7 @@ export function dispatchHostedAdmission(input) {
|
|
|
79
120
|
const adapter = getHostedAdmissionAdapter(input.definition);
|
|
80
121
|
if (adapter === undefined || adapter.kind !== input.delivery.channelKind) {
|
|
81
122
|
return {
|
|
82
|
-
response:
|
|
123
|
+
response: terminalHostedError(422, "channel_kind_mismatch"),
|
|
83
124
|
};
|
|
84
125
|
}
|
|
85
126
|
// The admission window marker follows the async graph into task bodies so
|
|
@@ -87,6 +128,66 @@ export function dispatchHostedAdmission(input) {
|
|
|
87
128
|
return runDuringHostedAdmission(() => runAdmission(input, adapter));
|
|
88
129
|
});
|
|
89
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Reserved reminder admission: parse the compact payload and invoke
|
|
133
|
+
* ReminderRunner.dispatch. Returns a standard hosted outcome (`task` /
|
|
134
|
+
* `skip`) and never opens the send-capture / model-session path here —
|
|
135
|
+
* prompt-form fires still follow up inside the runner.
|
|
136
|
+
*/
|
|
137
|
+
function dispatchHostedReminderAdmission(input, delivery) {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
const descriptor = parseHostedReminderFireDescriptorPayload(delivery.payload);
|
|
140
|
+
if (descriptor !== undefined) {
|
|
141
|
+
if (input.executeReminderDescriptor === undefined) {
|
|
142
|
+
return transientHostedError(503, "reminder_dispatch_unavailable", "This guest has no reminder CP executor wired for hosted admission.");
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const result = yield input.executeReminderDescriptor(descriptor);
|
|
146
|
+
const outcome = result.outcome === "noop" ? "skip" : "task";
|
|
147
|
+
return Response.json({
|
|
148
|
+
ok: true,
|
|
149
|
+
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
150
|
+
outcome,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
if (error instanceof UnknownReminderError) {
|
|
155
|
+
return terminalHostedError(404, "unknown_reminder", boundedMessage(error.message));
|
|
156
|
+
}
|
|
157
|
+
if (error instanceof ReminderValidationError) {
|
|
158
|
+
return terminalHostedError(400, "invalid_reminder", boundedMessage(error.message));
|
|
159
|
+
}
|
|
160
|
+
// Transient CP apply/fetch failures must remain retryable.
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (input.fireReminder === undefined) {
|
|
165
|
+
return transientHostedError(503, "reminder_dispatch_unavailable", "This guest has no reminder runner wired for hosted admission.");
|
|
166
|
+
}
|
|
167
|
+
const payload = parseHostedReminderFirePayload(delivery.payload);
|
|
168
|
+
if (payload === undefined) {
|
|
169
|
+
return terminalHostedError(400, "invalid_reminder_payload", "Expected reminder descriptor or legacy payload { reminderId, fireCount }.");
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
const result = yield input.fireReminder(payload.reminderId, payload.fireCount);
|
|
173
|
+
const outcome = result.outcome === "noop" ? "skip" : "task";
|
|
174
|
+
return Response.json({
|
|
175
|
+
ok: true,
|
|
176
|
+
v: HOSTED_DELIVERY_PROTOCOL_VERSION,
|
|
177
|
+
outcome,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
if (error instanceof UnknownReminderError) {
|
|
182
|
+
return terminalHostedError(404, "unknown_reminder", boundedMessage(error.message));
|
|
183
|
+
}
|
|
184
|
+
if (error instanceof ReminderValidationError) {
|
|
185
|
+
return terminalHostedError(400, "invalid_reminder", boundedMessage(error.message));
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
90
191
|
function runAdmission(input, adapter) {
|
|
91
192
|
return __awaiter(this, void 0, void 0, function* () {
|
|
92
193
|
var _a;
|
|
@@ -106,6 +207,7 @@ function runAdmission(input, adapter) {
|
|
|
106
207
|
let dispatched;
|
|
107
208
|
try {
|
|
108
209
|
dispatched = yield adapter.dispatch({
|
|
210
|
+
channelId: input.delivery.channelId,
|
|
109
211
|
eventType: input.delivery.eventType,
|
|
110
212
|
payload: input.delivery.payload,
|
|
111
213
|
deliveryId: input.delivery.deliveryId,
|
|
@@ -113,27 +215,29 @@ function runAdmission(input, adapter) {
|
|
|
113
215
|
});
|
|
114
216
|
}
|
|
115
217
|
catch (error) {
|
|
116
|
-
const
|
|
117
|
-
if (
|
|
118
|
-
return
|
|
218
|
+
const mapped = mappedAdmissionFailure(error);
|
|
219
|
+
if (mapped !== undefined) {
|
|
220
|
+
return mapped;
|
|
119
221
|
}
|
|
120
|
-
|
|
222
|
+
return {
|
|
223
|
+
response: terminalHostedError(500, "agent_admission_threw", boundedMessage(error instanceof Error ? error.message : String(error))),
|
|
224
|
+
};
|
|
121
225
|
}
|
|
122
226
|
if (!dispatched.ok) {
|
|
123
227
|
return {
|
|
124
|
-
response:
|
|
228
|
+
response: terminalHostedError(dispatched.status >= 400 ? dispatched.status : 502, "channel_dispatch_failed"),
|
|
125
229
|
};
|
|
126
230
|
}
|
|
127
231
|
try {
|
|
128
232
|
yield Promise.all(background);
|
|
129
233
|
}
|
|
130
234
|
catch (error) {
|
|
131
|
-
const
|
|
132
|
-
if (
|
|
133
|
-
return
|
|
235
|
+
const mapped = mappedAdmissionFailure(error);
|
|
236
|
+
if (mapped !== undefined) {
|
|
237
|
+
return mapped;
|
|
134
238
|
}
|
|
135
239
|
return {
|
|
136
|
-
response:
|
|
240
|
+
response: terminalHostedError(503, "background_dispatch_failed", boundedMessage(error instanceof Error ? error.message : String(error))),
|
|
137
241
|
};
|
|
138
242
|
}
|
|
139
243
|
if (captured !== undefined) {
|
|
@@ -156,7 +260,7 @@ function runAdmission(input, adapter) {
|
|
|
156
260
|
const outcome = dispatchOutcome(dispatched);
|
|
157
261
|
if (outcome === undefined || outcome === "send") {
|
|
158
262
|
return {
|
|
159
|
-
response:
|
|
263
|
+
response: terminalHostedError(502, "channel_outcome_missing"),
|
|
160
264
|
};
|
|
161
265
|
}
|
|
162
266
|
return {
|
|
@@ -234,7 +338,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
234
338
|
const consumed = consumeBoundSecrets();
|
|
235
339
|
return consumed.ok
|
|
236
340
|
? undefined
|
|
237
|
-
:
|
|
341
|
+
: transientHostedError(503, consumed.code, boundedMessage(consumed.message));
|
|
238
342
|
};
|
|
239
343
|
const finishNetworkWait = (phase) => __awaiter(this, void 0, void 0, function* () {
|
|
240
344
|
try {
|
|
@@ -252,7 +356,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
252
356
|
: "Guest network is not ready for outbound requests.";
|
|
253
357
|
return {
|
|
254
358
|
timing,
|
|
255
|
-
response:
|
|
359
|
+
response: transientHostedError(503, GUEST_NETWORK_UNAVAILABLE, boundedMessage(message)),
|
|
256
360
|
};
|
|
257
361
|
}
|
|
258
362
|
});
|
|
@@ -298,13 +402,21 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
298
402
|
? Object.keys(rawAdmission)
|
|
299
403
|
: [];
|
|
300
404
|
console.info(`[agent-sdk] hosted admission rejected: envelope failed to parse keys=${JSON.stringify(rawKeys)} hasManagedAutomation=${String(rawKeys.includes("managedAutomation"))}`);
|
|
301
|
-
return finish(
|
|
405
|
+
return finish(terminalHostedError(400, "invalid_hosted_admission", "Expected a supported Agent SDK hosted-admission envelope."));
|
|
302
406
|
}
|
|
303
407
|
console.info(`[agent-sdk] hosted admission received deliveryId=${delivery.deliveryId} channelId=${delivery.channelId} channelKind=${delivery.channelKind} eventType=${delivery.eventType} sessionMode=${delivery.sessionMode} managedAutomation=${delivery.managedAutomation === undefined ? "<absent>" : `automationUuid=${delivery.managedAutomation.automationUuid} mcpServerNames=${String(delivery.managedAutomation.mcpServerNames.length)} slackChannels=${delivery.managedAutomation.slackChannels === undefined ? "<absent>" : JSON.stringify(delivery.managedAutomation.slackChannels)}`}`);
|
|
304
408
|
recordHostedManagedAutomation(delivery);
|
|
409
|
+
if (isHostedReminderAdmission(delivery)) {
|
|
410
|
+
const network = yield finishNetworkWait("admission");
|
|
411
|
+
guestNetwork = network.timing;
|
|
412
|
+
if (network.response !== undefined) {
|
|
413
|
+
return finish(network.response);
|
|
414
|
+
}
|
|
415
|
+
return finish(yield dispatchHostedReminderAdmission(input, delivery));
|
|
416
|
+
}
|
|
305
417
|
const channel = input.channels.find((candidate) => candidate.id === delivery.channelId);
|
|
306
418
|
if (channel === undefined) {
|
|
307
|
-
return finish(
|
|
419
|
+
return finish(terminalHostedError(404, "channel_not_found", `No channel named "${delivery.channelId}" is mounted.`));
|
|
308
420
|
}
|
|
309
421
|
const network = yield finishNetworkWait("admission");
|
|
310
422
|
guestNetwork = network.timing;
|
|
@@ -350,16 +462,16 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
350
462
|
}
|
|
351
463
|
const execution = parseHostedExecution(yield readJsonObject(request));
|
|
352
464
|
if (execution === undefined) {
|
|
353
|
-
return finish(
|
|
465
|
+
return finish(terminalHostedError(400, "invalid_hosted_execution", "Expected a supported Agent SDK hosted-execution envelope."));
|
|
354
466
|
}
|
|
355
467
|
pruneExpired();
|
|
356
468
|
const admitted = pending.get(execution.admissionToken);
|
|
357
469
|
if (admitted === undefined) {
|
|
358
|
-
return finish(
|
|
470
|
+
return finish(transientHostedError(409, "hosted_admission_unavailable", "The hosted admission token is missing or expired."));
|
|
359
471
|
}
|
|
360
472
|
if (admitted.sessionPublicId !== undefined &&
|
|
361
473
|
admitted.sessionPublicId !== execution.sessionPublicId) {
|
|
362
|
-
return finish(
|
|
474
|
+
return finish(transientHostedError(409, "hosted_admission_session_mismatch", "The hosted admission token is already bound to another session."));
|
|
363
475
|
}
|
|
364
476
|
const network = yield finishNetworkWait("execution");
|
|
365
477
|
guestNetwork = network.timing;
|
|
@@ -381,11 +493,14 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
381
493
|
? {}
|
|
382
494
|
: { snapshotLogs: input.snapshotLogs }));
|
|
383
495
|
const writeDiag = (fields) => __awaiter(this, void 0, void 0, function* () {
|
|
384
|
-
|
|
496
|
+
const classification = fields.failureCode === undefined
|
|
497
|
+
? undefined
|
|
498
|
+
: hostedFailureClassification(fields.failureCode);
|
|
499
|
+
yield flushHostedExecutionRecord(sinks, Object.assign(Object.assign(Object.assign(Object.assign({ executionId, sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: Math.max(0, Math.round(performance.now() - startedAt)) }, (fields.message === undefined
|
|
385
500
|
? {}
|
|
386
501
|
: { message: fields.message })), (fields.abortReason === undefined
|
|
387
502
|
? {}
|
|
388
|
-
: { abortReason: fields.abortReason })), (fields.error === undefined ? {} : { error: fields.error })));
|
|
503
|
+
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode, classification }), (fields.error === undefined ? {} : { error: fields.error })));
|
|
389
504
|
});
|
|
390
505
|
// Claim the file before the turn runs. The host reads it after its
|
|
391
506
|
// own POST returns, which for a 9-minute timeout is while this turn
|
|
@@ -410,21 +525,24 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
410
525
|
// as soon as the POST returns. A leftover SDK handle freezes a
|
|
411
526
|
// dead Connect/HTTP2 session that the next wake then reuses.
|
|
412
527
|
evictHostedSdkSessions(input.evictSdkSession, session.id, execution.sessionPublicId);
|
|
528
|
+
const hostedFailure = outcome.status === "finished"
|
|
529
|
+
? undefined
|
|
530
|
+
: hostedFailureForUnfinishedTurn(outcome);
|
|
413
531
|
yield writeDiag({
|
|
414
532
|
sessionId: session.id,
|
|
415
533
|
turnStatus: outcome.status,
|
|
416
534
|
message: outcome.errorMessage,
|
|
417
|
-
abortReason: abortReasonFromTurnStatus(outcome.status, outcome.
|
|
535
|
+
abortReason: abortReasonFromTurnStatus(outcome.status, outcome.cancellationReason),
|
|
536
|
+
failureCode: hostedFailure === null || hostedFailure === void 0 ? void 0 : hostedFailure.error,
|
|
418
537
|
});
|
|
419
|
-
if (
|
|
420
|
-
// waitForCompletion resolves (does not throw) on a quiet
|
|
421
|
-
// Connect abort. Map that to guest_connect_stalled so TAS
|
|
422
|
-
// retries the same pod. Real runner failures stay turn_failed.
|
|
538
|
+
if (hostedFailure !== undefined) {
|
|
423
539
|
return {
|
|
424
540
|
status: 503,
|
|
425
541
|
body: {
|
|
426
542
|
ok: false,
|
|
427
|
-
error:
|
|
543
|
+
error: hostedFailure.error,
|
|
544
|
+
retry: hostedFailure.retry,
|
|
545
|
+
classification: hostedFailureClassification(hostedFailure.error),
|
|
428
546
|
turnStatus: outcome.status,
|
|
429
547
|
message: outcome.errorMessage,
|
|
430
548
|
},
|
|
@@ -446,6 +564,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
446
564
|
turnStatus: "error",
|
|
447
565
|
message: error instanceof Error ? error.message : String(error),
|
|
448
566
|
abortReason: "execute_throw",
|
|
567
|
+
failureCode: "internal_error",
|
|
449
568
|
error,
|
|
450
569
|
});
|
|
451
570
|
throw error;
|
|
@@ -470,12 +589,36 @@ function evictHostedSdkSessions(evict, ...ids) {
|
|
|
470
589
|
evict(id);
|
|
471
590
|
}
|
|
472
591
|
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
592
|
+
const TRANSIENT_TURN_ERROR_CODES = new Set([
|
|
593
|
+
"ABORT_ERR",
|
|
594
|
+
"UND_ERR_BODY_TIMEOUT",
|
|
595
|
+
"UND_ERR_HEADERS_TIMEOUT",
|
|
596
|
+
"canceled",
|
|
597
|
+
"unavailable",
|
|
598
|
+
"unknown",
|
|
599
|
+
]);
|
|
600
|
+
function hostedFailureForUnfinishedTurn(outcome) {
|
|
601
|
+
if (outcome.errorCode === "agent_dependency_failed") {
|
|
602
|
+
return {
|
|
603
|
+
error: "agent_dependency_failed",
|
|
604
|
+
retry: HOSTED_GUEST_RETRY_TERMINAL,
|
|
605
|
+
};
|
|
606
|
+
}
|
|
607
|
+
if (outcome.status === "error" &&
|
|
608
|
+
outcome.errorCode !== undefined &&
|
|
609
|
+
TRANSIENT_TURN_ERROR_CODES.has(outcome.errorCode)) {
|
|
610
|
+
return {
|
|
611
|
+
error: GUEST_CONNECT_STALLED,
|
|
612
|
+
retry: HOSTED_GUEST_RETRY_TRANSIENT,
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
if (outcome.status === "cancelled") {
|
|
616
|
+
return {
|
|
617
|
+
error: "turn_cancelled",
|
|
618
|
+
retry: HOSTED_GUEST_RETRY_TERMINAL,
|
|
619
|
+
};
|
|
477
620
|
}
|
|
478
|
-
return "turn_failed";
|
|
621
|
+
return { error: "turn_failed", retry: HOSTED_GUEST_RETRY_TERMINAL };
|
|
479
622
|
}
|
|
480
623
|
function afterHostedWork(flushOtel, work) {
|
|
481
624
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* session-run document and the `start.log` tee by
|
|
4
4
|
* `hosted-execution-flush.ts`.
|
|
5
5
|
*/
|
|
6
|
+
import { type HostedFailureClassification } from "./hosted-delivery-protocol.js";
|
|
6
7
|
export declare const HOSTED_EXECUTION_DIAG_VERSION = 1;
|
|
7
8
|
/** Cap so a runaway message cannot fill the guest disk or the host log. */
|
|
8
9
|
export declare const HOSTED_EXECUTION_DIAG_MAX_BYTES = 4096;
|
|
@@ -41,6 +42,8 @@ export type HostedExecutionDiag = {
|
|
|
41
42
|
signalAborted?: boolean;
|
|
42
43
|
requestId?: string;
|
|
43
44
|
abortReason?: HostedExecutionDiagAbortReason;
|
|
45
|
+
failureCode?: string;
|
|
46
|
+
classification?: HostedFailureClassification;
|
|
44
47
|
};
|
|
45
48
|
/** Written before the turn starts so a stalled execution still has a record. */
|
|
46
49
|
export declare const HOSTED_EXECUTION_DIAG_RUNNING_STATUS = "running";
|
|
@@ -54,7 +57,7 @@ export declare const HOSTED_ERROR_SNIPPET_MAX_CHARS = 700;
|
|
|
54
57
|
*/
|
|
55
58
|
export declare function hostedErrorStackSnippet(error: unknown): string;
|
|
56
59
|
export declare function hostedExecutionDiagPath(stateRoot: string): string;
|
|
57
|
-
export declare function abortReasonFromTurnStatus(status: string,
|
|
60
|
+
export declare function abortReasonFromTurnStatus(status: string, cancellationReason: "signal" | "runner" | undefined): HostedExecutionDiagAbortReason | undefined;
|
|
58
61
|
export declare function parseHostedExecutionDiag(raw: string): HostedExecutionDiag | undefined;
|
|
59
62
|
/**
|
|
60
63
|
* Overwrite the per-execution diag file. Soft-fail: a write error must not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-execution-diag.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-diag.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"hosted-execution-diag.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-diag.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2EAA2E;AAC3E,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,eAAe,CAAC;AAEpB;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACxC,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,8BAA8B,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAC9C,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,oCAAoC,YAAY,CAAC;AAqC9D,iFAAiF;AACjF,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAyB9D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAClD,8BAA8B,GAAG,SAAS,CAU5C;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,GACV,mBAAmB,GAAG,SAAS,CAqFjC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -15,7 +15,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
15
15
|
import { createHash, randomBytes } from "node:crypto";
|
|
16
16
|
import { mkdir, rename, unlink, writeFile } from "node:fs/promises";
|
|
17
17
|
import { join } from "node:path";
|
|
18
|
-
import { HOSTED_EXECUTION_DIAG_FILENAME } from "./hosted-delivery-protocol.js";
|
|
18
|
+
import { HOSTED_EXECUTION_DIAG_FILENAME, parseHostedFailureClassification, } from "./hosted-delivery-protocol.js";
|
|
19
19
|
export const HOSTED_EXECUTION_DIAG_VERSION = 1;
|
|
20
20
|
/** Cap so a runaway message cannot fill the guest disk or the host log. */
|
|
21
21
|
export const HOSTED_EXECUTION_DIAG_MAX_BYTES = 4096;
|
|
@@ -49,6 +49,8 @@ const DIAG_KEYS = new Set([
|
|
|
49
49
|
"signalAborted",
|
|
50
50
|
"requestId",
|
|
51
51
|
"abortReason",
|
|
52
|
+
"failureCode",
|
|
53
|
+
"classification",
|
|
52
54
|
]);
|
|
53
55
|
const ABORT_REASONS = new Set([
|
|
54
56
|
"signal_abort",
|
|
@@ -101,12 +103,12 @@ export function hostedErrorStackSnippet(error) {
|
|
|
101
103
|
export function hostedExecutionDiagPath(stateRoot) {
|
|
102
104
|
return join(stateRoot, HOSTED_EXECUTION_DIAG_FILENAME);
|
|
103
105
|
}
|
|
104
|
-
export function abortReasonFromTurnStatus(status,
|
|
106
|
+
export function abortReasonFromTurnStatus(status, cancellationReason) {
|
|
105
107
|
if (status === "finished") {
|
|
106
108
|
return undefined;
|
|
107
109
|
}
|
|
108
110
|
if (status === "cancelled") {
|
|
109
|
-
return
|
|
111
|
+
return cancellationReason === "signal"
|
|
110
112
|
? "signal_abort"
|
|
111
113
|
: "runner_cancelled";
|
|
112
114
|
}
|
|
@@ -153,6 +155,13 @@ export function parseHostedExecutionDiag(raw) {
|
|
|
153
155
|
const message = boundedOptionalString(body.message, 1024);
|
|
154
156
|
const stack = boundedOptionalString(body.stack, HOSTED_ERROR_SNIPPET_MAX_CHARS);
|
|
155
157
|
const requestId = boundedOptionalString(body.requestId, 128);
|
|
158
|
+
const failureCode = boundedOptionalString(body.failureCode, 64);
|
|
159
|
+
const classification = body.classification === undefined
|
|
160
|
+
? undefined
|
|
161
|
+
: parseHostedFailureClassification(body.classification);
|
|
162
|
+
if (body.classification !== undefined && classification === undefined) {
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
156
165
|
const abortReason = body.abortReason === undefined
|
|
157
166
|
? undefined
|
|
158
167
|
: typeof body.abortReason === "string" &&
|
|
@@ -166,7 +175,7 @@ export function parseHostedExecutionDiag(raw) {
|
|
|
166
175
|
typeof body.signalAborted !== "boolean") {
|
|
167
176
|
return undefined;
|
|
168
177
|
}
|
|
169
|
-
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: HOSTED_EXECUTION_DIAG_VERSION, executionId: body.executionId, writtenAt: body.writtenAt, sessionPublicId: body.sessionPublicId, sessionId: body.sessionId, turnStatus: body.turnStatus, durationMs: body.durationMs }, (message === undefined ? {} : { message })), (stack === undefined ? {} : { stack })), (body.signalAborted === true ? { signalAborted: true } : {})), (requestId === undefined ? {} : { requestId })), (abortReason === undefined ? {} : { abortReason }));
|
|
178
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: HOSTED_EXECUTION_DIAG_VERSION, executionId: body.executionId, writtenAt: body.writtenAt, sessionPublicId: body.sessionPublicId, sessionId: body.sessionId, turnStatus: body.turnStatus, durationMs: body.durationMs }, (message === undefined ? {} : { message })), (stack === undefined ? {} : { stack })), (body.signalAborted === true ? { signalAborted: true } : {})), (requestId === undefined ? {} : { requestId })), (abortReason === undefined ? {} : { abortReason })), (failureCode === undefined ? {} : { failureCode })), (classification === undefined ? {} : { classification }));
|
|
170
179
|
}
|
|
171
180
|
/**
|
|
172
181
|
* Overwrite the per-execution diag file. Soft-fail: a write error must not
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* durable document and re-snapshots the tee; the local json stays `running`
|
|
9
9
|
* so TAS does not treat a previous delivery's terminal record as this one.
|
|
10
10
|
*/
|
|
11
|
+
import type { HostedFailureClassification } from "./hosted-delivery-protocol.js";
|
|
11
12
|
import { type HostedExecutionDiagAbortReason } from "./hosted-execution-diag.js";
|
|
12
13
|
import type { LogRingEntry } from "./log-ring.js";
|
|
13
14
|
import { type SessionRunAbortReason, type SessionRunExecutionWrite } from "./session-run-log.js";
|
|
@@ -26,6 +27,8 @@ export type HostedExecutionFlushFields = {
|
|
|
26
27
|
durationMs: number;
|
|
27
28
|
message?: string;
|
|
28
29
|
abortReason?: HostedExecutionDiagAbortReason;
|
|
30
|
+
failureCode?: string;
|
|
31
|
+
classification?: HostedFailureClassification;
|
|
29
32
|
error?: unknown;
|
|
30
33
|
};
|
|
31
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-execution-flush.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-flush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,KAAK,8BAA8B,EAGpC,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAG9B,MAAM,sBAAsB,CAAC;AAU9B,MAAM,MAAM,yBAAyB,GAAG;IACtC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,8BAA8B,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,yBAAyB,EAChC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CA0Df;AAED;;GAEG;AACH,wBAAsB,gCAAgC,CAAC,IAAI,EAAE;IAC3D,iBAAiB,EAAE,CACjB,MAAM,EAAE,OAAO,CACb,qBAAqB,EACrB,cAAc,GAAG,oBAAoB,GAAG,qBAAqB,CAC9D,EACD,KAAK,CAAC,EAAE,OAAO,KACZ,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CACb,qBAAqB,EACrB,cAAc,GAAG,oBAAoB,GAAG,qBAAqB,CAC9D,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB"}
|
|
1
|
+
{"version":3,"file":"hosted-execution-flush.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-execution-flush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EACL,KAAK,8BAA8B,EAGpC,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAG9B,MAAM,sBAAsB,CAAC;AAU9B,MAAM,MAAM,yBAAyB,GAAG;IACtC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,8BAA8B,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,yBAAyB,EAChC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CA0Df;AAED;;GAEG;AACH,wBAAsB,gCAAgC,CAAC,IAAI,EAAE;IAC3D,iBAAiB,EAAE,CACjB,MAAM,EAAE,OAAO,CACb,qBAAqB,EACrB,cAAc,GAAG,oBAAoB,GAAG,qBAAqB,CAC9D,EACD,KAAK,CAAC,EAAE,OAAO,KACZ,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CACb,qBAAqB,EACrB,cAAc,GAAG,oBAAoB,GAAG,qBAAqB,CAC9D,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB"}
|
|
@@ -39,11 +39,9 @@ export function flushHostedExecutionRecord(sinks, fields) {
|
|
|
39
39
|
? undefined
|
|
40
40
|
: hostedErrorStackSnippet(fields.error);
|
|
41
41
|
if (sinks.stateRoot !== undefined) {
|
|
42
|
-
yield writeHostedExecutionDiag(sinks.stateRoot, Object.assign(Object.assign(Object.assign(Object.assign({ v: 1, executionId: fields.executionId, writtenAt, sessionPublicId: fields.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: fields.durationMs }, (message === undefined ? {} : { message })), (stack === undefined || stack.length === 0 ? {} : { stack })),
|
|
43
|
-
? { signalAborted: true }
|
|
44
|
-
: {})), (fields.abortReason === undefined
|
|
42
|
+
yield writeHostedExecutionDiag(sinks.stateRoot, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: 1, executionId: fields.executionId, writtenAt, sessionPublicId: fields.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: fields.durationMs }, (message === undefined ? {} : { message })), (stack === undefined || stack.length === 0 ? {} : { stack })), { signalAborted: fields.abortReason === "signal_abort" ? true : undefined }), (fields.abortReason === undefined
|
|
45
43
|
? {}
|
|
46
|
-
: { abortReason: fields.abortReason })));
|
|
44
|
+
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode, classification: fields.classification }));
|
|
47
45
|
}
|
|
48
46
|
if (sinks.persistSessionRun !== undefined) {
|
|
49
47
|
const error = fields.error === undefined
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in HTTP channel admission for control-plane session starts.
|
|
3
|
+
*
|
|
4
|
+
* `agent-sdk run --prod` reaches the authenticated CP start route, which
|
|
5
|
+
* delivers `agentsdk.session` to the built-in `http` channel of every v2
|
|
6
|
+
* agent. The wake is `send(message, { dryRun, asOf })`; the session id, when
|
|
7
|
+
* the caller resumed an explicit `ses_…`, arrives through the hosted
|
|
8
|
+
* execution (never through this payload), so authored code cannot pick one.
|
|
9
|
+
*/
|
|
10
|
+
import type { ChannelHandlerArgs, HttpChannelDefinition } from "../types.js";
|
|
11
|
+
export type ControlPlaneSessionPayload = {
|
|
12
|
+
message: string;
|
|
13
|
+
dryRun?: boolean | undefined;
|
|
14
|
+
asOf?: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
export declare function parseControlPlaneSessionPayload(payload: unknown): {
|
|
17
|
+
ok: true;
|
|
18
|
+
data: ControlPlaneSessionPayload;
|
|
19
|
+
} | {
|
|
20
|
+
ok: false;
|
|
21
|
+
error: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function dispatchHttpControlPlaneSession(input: {
|
|
24
|
+
eventType: string;
|
|
25
|
+
payload: unknown;
|
|
26
|
+
args: ChannelHandlerArgs;
|
|
27
|
+
onMessage?: HttpChannelDefinition["onMessage"];
|
|
28
|
+
}): Promise<Response>;
|
|
29
|
+
export declare function attachHttpControlPlaneAdmission(definition: HttpChannelDefinition): void;
|
|
30
|
+
//# sourceMappingURL=http-control-plane-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-control-plane-session.d.ts","sourceRoot":"","sources":["../../src/internal/http-control-plane-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAQ7E,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AASF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,OAAO,GAEd;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,0BAA0B,CAAA;CAAE,GAC9C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA6B/B;AAED,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,CAAC,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;CAChD,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiBpB;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,qBAAqB,GAChC,IAAI,CAWN"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in HTTP channel admission for control-plane session starts.
|
|
3
|
+
*
|
|
4
|
+
* `agent-sdk run --prod` reaches the authenticated CP start route, which
|
|
5
|
+
* delivers `agentsdk.session` to the built-in `http` channel of every v2
|
|
6
|
+
* agent. The wake is `send(message, { dryRun, asOf })`; the session id, when
|
|
7
|
+
* the caller resumed an explicit `ses_…`, arrives through the hosted
|
|
8
|
+
* execution (never through this payload), so authored code cannot pick one.
|
|
9
|
+
*/
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
import { skipped, turnStarted } from "./channel-dispatch.js";
|
|
20
|
+
import { attachHostedAdmissionAdapter } from "./hosted-admission-adapter.js";
|
|
21
|
+
import { AGENT_SDK_HTTP_CHANNEL_KIND, AGENT_SDK_SESSION_EVENT_TYPE, } from "./hosted-catch-protocol.js";
|
|
22
|
+
const PAYLOAD_KEYS = new Set(["message", "dryRun", "asOf"]);
|
|
23
|
+
const MAX_MESSAGE_CHARS = 64 * 1024;
|
|
24
|
+
function isRecord(value) {
|
|
25
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
26
|
+
}
|
|
27
|
+
export function parseControlPlaneSessionPayload(payload) {
|
|
28
|
+
if (!isRecord(payload)) {
|
|
29
|
+
return { ok: false, error: "payload must be an object" };
|
|
30
|
+
}
|
|
31
|
+
if (Object.keys(payload).some((key) => !PAYLOAD_KEYS.has(key))) {
|
|
32
|
+
return { ok: false, error: "payload carries an unsupported field" };
|
|
33
|
+
}
|
|
34
|
+
const message = typeof payload.message === "string" ? payload.message.trim() : "";
|
|
35
|
+
if (message.length === 0 || message.length > MAX_MESSAGE_CHARS) {
|
|
36
|
+
return { ok: false, error: "payload.message is required" };
|
|
37
|
+
}
|
|
38
|
+
if (payload.dryRun !== undefined && typeof payload.dryRun !== "boolean") {
|
|
39
|
+
return { ok: false, error: "payload.dryRun must be a boolean" };
|
|
40
|
+
}
|
|
41
|
+
if (payload.asOf !== undefined &&
|
|
42
|
+
(typeof payload.asOf !== "string" || payload.asOf.trim().length === 0)) {
|
|
43
|
+
return { ok: false, error: "payload.asOf must be a non-empty string" };
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
ok: true,
|
|
47
|
+
data: {
|
|
48
|
+
message,
|
|
49
|
+
dryRun: payload.dryRun === true ? true : undefined,
|
|
50
|
+
asOf: typeof payload.asOf === "string" ? payload.asOf.trim() : undefined,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function dispatchHttpControlPlaneSession(input) {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
if (input.eventType !== AGENT_SDK_SESSION_EVENT_TYPE) {
|
|
57
|
+
return skipped("not a control-plane session");
|
|
58
|
+
}
|
|
59
|
+
const parsed = parseControlPlaneSessionPayload(input.payload);
|
|
60
|
+
if (!parsed.ok) {
|
|
61
|
+
return Response.json({ ok: false, error: parsed.error }, { status: 400 });
|
|
62
|
+
}
|
|
63
|
+
const message = input.onMessage === undefined
|
|
64
|
+
? parsed.data.message
|
|
65
|
+
: yield input.onMessage(parsed.data.message, { auth: null });
|
|
66
|
+
const session = yield input.args.send(message, {
|
|
67
|
+
dryRun: parsed.data.dryRun,
|
|
68
|
+
asOf: parsed.data.asOf,
|
|
69
|
+
});
|
|
70
|
+
return turnStarted(session);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export function attachHttpControlPlaneAdmission(definition) {
|
|
74
|
+
attachHostedAdmissionAdapter(definition, {
|
|
75
|
+
kind: AGENT_SDK_HTTP_CHANNEL_KIND,
|
|
76
|
+
dispatch: ({ eventType, payload, args }) => dispatchHttpControlPlaneSession({
|
|
77
|
+
eventType,
|
|
78
|
+
payload,
|
|
79
|
+
args,
|
|
80
|
+
onMessage: definition.onMessage,
|
|
81
|
+
}),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type AgentServeDeployClient, DeployApiError } from "./deploy-client.js";
|
|
2
|
+
/**
|
|
3
|
+
* Classify a hosted slug by probing the v2 control plane.
|
|
4
|
+
*
|
|
5
|
+
* Only HTTP 404 means “not v2.” Auth, 5xx, and transport errors fail closed
|
|
6
|
+
* so a v2 slug cannot fall through to `/internal/agent-serve`. That probe
|
|
7
|
+
* shares the factory microlith path used by secrets; a factory outage will
|
|
8
|
+
* also block legacy `--prod` until it recovers.
|
|
9
|
+
*/
|
|
10
|
+
export declare function deploymentArchitecture(args: {
|
|
11
|
+
client: AgentServeDeployClient;
|
|
12
|
+
teamId: number;
|
|
13
|
+
slug: string;
|
|
14
|
+
}): Promise<"v1" | "v2">;
|
|
15
|
+
export declare function unsupportedV2LegacyCommandError(slug: string): DeployApiError;
|
|
16
|
+
export declare function isUnsupportedV2LegacyCommandError(error: unknown): error is DeployApiError;
|
|
17
|
+
export declare function rejectV2ForLegacyCommand(args: {
|
|
18
|
+
client: AgentServeDeployClient;
|
|
19
|
+
teamId: number;
|
|
20
|
+
slug: string;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=legacy-command-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-command-guard.d.ts","sourceRoot":"","sources":["../../src/internal/legacy-command-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAavB;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAK5E;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,cAAc,CAMzB;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB"}
|