@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
|
@@ -5,10 +5,23 @@ export declare const HOSTED_EXECUTION_PATH = "/v1/internal/hosted-execution";
|
|
|
5
5
|
export declare const HOSTED_GUEST_RETRY_TRANSIENT = "transient";
|
|
6
6
|
export declare const HOSTED_GUEST_RETRY_TERMINAL = "terminal";
|
|
7
7
|
export type HostedGuestRetryDisposition = typeof HOSTED_GUEST_RETRY_TRANSIENT | typeof HOSTED_GUEST_RETRY_TERMINAL;
|
|
8
|
+
export declare const HOSTED_FAILURE_CLASSIFICATION_VERSION = 1;
|
|
9
|
+
export type HostedFailureDomain = "configuration" | "protocol" | "platform" | "agent" | "dependency" | "cancellation" | "unknown";
|
|
10
|
+
export type HostedFailureSource = "tas" | "factory" | "anyrun" | "engine" | "agent";
|
|
11
|
+
export type HostedFailureClassification = {
|
|
12
|
+
v: typeof HOSTED_FAILURE_CLASSIFICATION_VERSION;
|
|
13
|
+
domain: HostedFailureDomain;
|
|
14
|
+
source: HostedFailureSource;
|
|
15
|
+
};
|
|
16
|
+
export type HostedFailureCode = "agent_admission_threw" | "agent_dependency_failed" | "background_dispatch_failed" | "bound_secrets_not_consumed" | "channel_dispatch_failed" | "channel_kind_mismatch" | "channel_not_found" | "channel_outcome_missing" | "forbidden" | "guest_connect_stalled" | "guest_network_unavailable" | "hosted_admission_session_mismatch" | "hosted_admission_unavailable" | "hosted_deferred_session_unusable" | "hosted_local_send_rejected" | "hosted_send_limit_exceeded" | "internal_error" | "invalid_hosted_admission" | "invalid_hosted_execution" | "invalid_request" | "method_not_allowed" | "not_found" | "session_busy" | "turn_cancelled" | "turn_failed" | "unauthorized" | "v2_identity_conflict";
|
|
17
|
+
export declare const HOSTED_FAILURE_CLASSIFICATIONS: Record<HostedFailureCode, Omit<HostedFailureClassification, "v">>;
|
|
18
|
+
export declare function hostedFailureClassification(code: string): HostedFailureClassification;
|
|
19
|
+
export declare function parseHostedFailureClassification(value: unknown): HostedFailureClassification | undefined;
|
|
8
20
|
export type HostedGuestError = {
|
|
9
21
|
ok: false;
|
|
10
22
|
error: string;
|
|
11
23
|
retry: HostedGuestRetryDisposition;
|
|
24
|
+
classification: HostedFailureClassification;
|
|
12
25
|
message?: string;
|
|
13
26
|
turnStatus?: string;
|
|
14
27
|
};
|
|
@@ -47,6 +60,29 @@ export type HostedReminderFirePayload = {
|
|
|
47
60
|
reminderId: string;
|
|
48
61
|
fireCount: number;
|
|
49
62
|
};
|
|
63
|
+
/** Protocol v1 immutable fire descriptor (architecture v2 CP path). */
|
|
64
|
+
export type HostedReminderFireDescriptorPayload = {
|
|
65
|
+
protocolVersion: 1;
|
|
66
|
+
id: string;
|
|
67
|
+
fireCount: number;
|
|
68
|
+
generation: number;
|
|
69
|
+
purpose: string;
|
|
70
|
+
channelId: string;
|
|
71
|
+
continuationToken: string;
|
|
72
|
+
target?: Record<string, unknown>;
|
|
73
|
+
scheduleKind: "every" | "cron" | "delay" | "at";
|
|
74
|
+
scheduleValue: string;
|
|
75
|
+
intervalMs?: number;
|
|
76
|
+
prompt?: string;
|
|
77
|
+
handler?: string;
|
|
78
|
+
args?: Record<string, unknown>;
|
|
79
|
+
hasRunHandler: boolean;
|
|
80
|
+
hasUntilFn: boolean;
|
|
81
|
+
untilPrompt?: string;
|
|
82
|
+
busyPolicy: "skipIfBusy" | "queueBehindTurn";
|
|
83
|
+
nextFireAtMs: number;
|
|
84
|
+
claimedAtMs: number;
|
|
85
|
+
};
|
|
50
86
|
export type HostedAdmissionManagedAutomation = {
|
|
51
87
|
automationUuid: string;
|
|
52
88
|
mcpServerNames: string[];
|
|
@@ -105,5 +141,10 @@ export declare function isHostedReminderAdmission(delivery: HostedAdmission): bo
|
|
|
105
141
|
* payload. Rejects unknown keys and non-integer fireCount.
|
|
106
142
|
*/
|
|
107
143
|
export declare function parseHostedReminderFirePayload(value: unknown): HostedReminderFirePayload | undefined;
|
|
144
|
+
/**
|
|
145
|
+
* Parse the immutable CP fire descriptor. Rejects unknown keys, non-enum
|
|
146
|
+
* schedule/busy values, and non-JSON-safe optional object fields.
|
|
147
|
+
*/
|
|
148
|
+
export declare function parseHostedReminderFireDescriptorPayload(value: unknown): HostedReminderFireDescriptorPayload | undefined;
|
|
108
149
|
export declare function parseHostedAdmissionOutcome(value: unknown): HostedAdmissionOutcome | undefined;
|
|
109
150
|
//# sourceMappingURL=hosted-delivery-protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-delivery-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery-protocol.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AACpE,eAAO,MAAM,qBAAqB,kCAAkC,CAAC;AACrE,eAAO,MAAM,qBAAqB,kCAAkC,CAAC;AACrE,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,2BAA2B,aAAa,CAAC;AAEtD,MAAM,MAAM,2BAA2B,GACnC,OAAO,4BAA4B,GACnC,OAAO,2BAA2B,CAAC;AAEvC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,2BAA2B,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,2BAA2B,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"hosted-delivery-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,75 @@ export const HOSTED_ADMISSION_PATH = "/v1/internal/hosted-admission";
|
|
|
4
4
|
export const HOSTED_EXECUTION_PATH = "/v1/internal/hosted-execution";
|
|
5
5
|
export const HOSTED_GUEST_RETRY_TRANSIENT = "transient";
|
|
6
6
|
export const HOSTED_GUEST_RETRY_TERMINAL = "terminal";
|
|
7
|
+
export const HOSTED_FAILURE_CLASSIFICATION_VERSION = 1;
|
|
8
|
+
const HOSTED_FAILURE_DOMAINS = new Set([
|
|
9
|
+
"configuration",
|
|
10
|
+
"protocol",
|
|
11
|
+
"platform",
|
|
12
|
+
"agent",
|
|
13
|
+
"dependency",
|
|
14
|
+
"cancellation",
|
|
15
|
+
"unknown",
|
|
16
|
+
]);
|
|
17
|
+
const HOSTED_FAILURE_SOURCES = new Set([
|
|
18
|
+
"tas",
|
|
19
|
+
"factory",
|
|
20
|
+
"anyrun",
|
|
21
|
+
"engine",
|
|
22
|
+
"agent",
|
|
23
|
+
]);
|
|
24
|
+
export const HOSTED_FAILURE_CLASSIFICATIONS = {
|
|
25
|
+
agent_admission_threw: { domain: "agent", source: "agent" },
|
|
26
|
+
agent_dependency_failed: { domain: "dependency", source: "factory" },
|
|
27
|
+
background_dispatch_failed: { domain: "agent", source: "agent" },
|
|
28
|
+
bound_secrets_not_consumed: { domain: "platform", source: "engine" },
|
|
29
|
+
channel_dispatch_failed: { domain: "agent", source: "agent" },
|
|
30
|
+
channel_kind_mismatch: { domain: "configuration", source: "engine" },
|
|
31
|
+
channel_not_found: { domain: "configuration", source: "engine" },
|
|
32
|
+
channel_outcome_missing: { domain: "protocol", source: "agent" },
|
|
33
|
+
forbidden: { domain: "configuration", source: "engine" },
|
|
34
|
+
guest_connect_stalled: { domain: "platform", source: "engine" },
|
|
35
|
+
guest_network_unavailable: { domain: "platform", source: "anyrun" },
|
|
36
|
+
hosted_admission_session_mismatch: { domain: "protocol", source: "engine" },
|
|
37
|
+
hosted_admission_unavailable: { domain: "platform", source: "engine" },
|
|
38
|
+
hosted_deferred_session_unusable: { domain: "agent", source: "agent" },
|
|
39
|
+
hosted_local_send_rejected: { domain: "agent", source: "agent" },
|
|
40
|
+
hosted_send_limit_exceeded: { domain: "agent", source: "agent" },
|
|
41
|
+
internal_error: { domain: "unknown", source: "engine" },
|
|
42
|
+
invalid_hosted_admission: { domain: "protocol", source: "engine" },
|
|
43
|
+
invalid_hosted_execution: { domain: "protocol", source: "engine" },
|
|
44
|
+
invalid_request: { domain: "protocol", source: "engine" },
|
|
45
|
+
method_not_allowed: { domain: "protocol", source: "engine" },
|
|
46
|
+
not_found: { domain: "protocol", source: "engine" },
|
|
47
|
+
session_busy: { domain: "platform", source: "engine" },
|
|
48
|
+
turn_cancelled: { domain: "cancellation", source: "agent" },
|
|
49
|
+
turn_failed: { domain: "agent", source: "agent" },
|
|
50
|
+
unauthorized: { domain: "configuration", source: "engine" },
|
|
51
|
+
v2_identity_conflict: { domain: "protocol", source: "engine" },
|
|
52
|
+
};
|
|
53
|
+
export function hostedFailureClassification(code) {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
const known = HOSTED_FAILURE_CLASSIFICATIONS[code];
|
|
56
|
+
return {
|
|
57
|
+
v: HOSTED_FAILURE_CLASSIFICATION_VERSION,
|
|
58
|
+
domain: (_a = known === null || known === void 0 ? void 0 : known.domain) !== null && _a !== void 0 ? _a : "unknown",
|
|
59
|
+
source: (_b = known === null || known === void 0 ? void 0 : known.source) !== null && _b !== void 0 ? _b : "engine",
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function parseHostedFailureClassification(value) {
|
|
63
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const body = value;
|
|
67
|
+
if (body.v !== HOSTED_FAILURE_CLASSIFICATION_VERSION ||
|
|
68
|
+
typeof body.domain !== "string" ||
|
|
69
|
+
!HOSTED_FAILURE_DOMAINS.has(body.domain) ||
|
|
70
|
+
typeof body.source !== "string" ||
|
|
71
|
+
!HOSTED_FAILURE_SOURCES.has(body.source)) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
return body;
|
|
75
|
+
}
|
|
7
76
|
/**
|
|
8
77
|
* Hosted delivery is the only HTTP surface whose failures drive Temporal
|
|
9
78
|
* retries. Keep its retry disposition explicit instead of making the shared
|
|
@@ -14,6 +83,7 @@ export function hostedGuestErrorResponse(input) {
|
|
|
14
83
|
ok: false,
|
|
15
84
|
error: input.error,
|
|
16
85
|
retry: input.retry,
|
|
86
|
+
classification: hostedFailureClassification(input.error),
|
|
17
87
|
message: input.message,
|
|
18
88
|
turnStatus: input.turnStatus,
|
|
19
89
|
};
|
|
@@ -163,6 +233,185 @@ export function parseHostedReminderFirePayload(value) {
|
|
|
163
233
|
fireCount: body.fireCount,
|
|
164
234
|
};
|
|
165
235
|
}
|
|
236
|
+
const HOSTED_REMINDER_FIRE_DESCRIPTOR_KEYS = new Set([
|
|
237
|
+
"protocolVersion",
|
|
238
|
+
"id",
|
|
239
|
+
"fireCount",
|
|
240
|
+
"generation",
|
|
241
|
+
"purpose",
|
|
242
|
+
"channelId",
|
|
243
|
+
"continuationToken",
|
|
244
|
+
"target",
|
|
245
|
+
"scheduleKind",
|
|
246
|
+
"scheduleValue",
|
|
247
|
+
"intervalMs",
|
|
248
|
+
"prompt",
|
|
249
|
+
"handler",
|
|
250
|
+
"args",
|
|
251
|
+
"hasRunHandler",
|
|
252
|
+
"hasUntilFn",
|
|
253
|
+
"untilPrompt",
|
|
254
|
+
"busyPolicy",
|
|
255
|
+
"nextFireAtMs",
|
|
256
|
+
"claimedAtMs",
|
|
257
|
+
]);
|
|
258
|
+
const HOSTED_REMINDER_SCHEDULE_KINDS = new Set([
|
|
259
|
+
"every",
|
|
260
|
+
"cron",
|
|
261
|
+
"delay",
|
|
262
|
+
"at",
|
|
263
|
+
]);
|
|
264
|
+
const HOSTED_REMINDER_BUSY_POLICIES = new Set([
|
|
265
|
+
"skipIfBusy",
|
|
266
|
+
"queueBehindTurn",
|
|
267
|
+
]);
|
|
268
|
+
const HOSTED_REMINDER_JSON_MAX_DEPTH = 8;
|
|
269
|
+
/** Reject non-JSON values (NaN/Infinity/undefined/bigint/function/symbol). */
|
|
270
|
+
function isJsonSafeValue(value, depth) {
|
|
271
|
+
if (depth > HOSTED_REMINDER_JSON_MAX_DEPTH) {
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
if (value === null) {
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
const type = typeof value;
|
|
278
|
+
if (type === "string" || type === "boolean") {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
if (type === "number") {
|
|
282
|
+
return Number.isFinite(value);
|
|
283
|
+
}
|
|
284
|
+
if (type !== "object") {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
if (Array.isArray(value)) {
|
|
288
|
+
return value.every((entry) => isJsonSafeValue(entry, depth + 1));
|
|
289
|
+
}
|
|
290
|
+
const proto = Object.getPrototypeOf(value);
|
|
291
|
+
if (proto !== Object.prototype && proto !== null) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
for (const entry of Object.values(value)) {
|
|
295
|
+
if (!isJsonSafeValue(entry, depth + 1)) {
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
function parseOptionalJsonObjectField(value, maxBytes) {
|
|
302
|
+
if (value === undefined) {
|
|
303
|
+
return undefined;
|
|
304
|
+
}
|
|
305
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
if (!isJsonSafeValue(value, 0)) {
|
|
309
|
+
return undefined;
|
|
310
|
+
}
|
|
311
|
+
try {
|
|
312
|
+
const encoded = JSON.stringify(value);
|
|
313
|
+
if (encoded === undefined ||
|
|
314
|
+
Buffer.byteLength(encoded, "utf8") > maxBytes) {
|
|
315
|
+
return undefined;
|
|
316
|
+
}
|
|
317
|
+
const roundTrip = JSON.parse(encoded);
|
|
318
|
+
if (typeof roundTrip !== "object" ||
|
|
319
|
+
roundTrip === null ||
|
|
320
|
+
Array.isArray(roundTrip)) {
|
|
321
|
+
return undefined;
|
|
322
|
+
}
|
|
323
|
+
return roundTrip;
|
|
324
|
+
}
|
|
325
|
+
catch (_a) {
|
|
326
|
+
return undefined;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Parse the immutable CP fire descriptor. Rejects unknown keys, non-enum
|
|
331
|
+
* schedule/busy values, and non-JSON-safe optional object fields.
|
|
332
|
+
*/
|
|
333
|
+
export function parseHostedReminderFireDescriptorPayload(value) {
|
|
334
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
const body = value;
|
|
338
|
+
if (Object.keys(body).some((key) => !HOSTED_REMINDER_FIRE_DESCRIPTOR_KEYS.has(key))) {
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
if (body.protocolVersion !== 1 ||
|
|
342
|
+
typeof body.id !== "string" ||
|
|
343
|
+
body.id.length === 0 ||
|
|
344
|
+
body.id.length > 128 ||
|
|
345
|
+
typeof body.fireCount !== "number" ||
|
|
346
|
+
!Number.isInteger(body.fireCount) ||
|
|
347
|
+
body.fireCount < 0 ||
|
|
348
|
+
typeof body.generation !== "number" ||
|
|
349
|
+
!Number.isInteger(body.generation) ||
|
|
350
|
+
body.generation < 0 ||
|
|
351
|
+
typeof body.purpose !== "string" ||
|
|
352
|
+
body.purpose.length === 0 ||
|
|
353
|
+
body.purpose.length > 512 ||
|
|
354
|
+
typeof body.channelId !== "string" ||
|
|
355
|
+
body.channelId.length === 0 ||
|
|
356
|
+
body.channelId.length > 128 ||
|
|
357
|
+
typeof body.continuationToken !== "string" ||
|
|
358
|
+
body.continuationToken.length === 0 ||
|
|
359
|
+
body.continuationToken.length > 512 ||
|
|
360
|
+
typeof body.scheduleKind !== "string" ||
|
|
361
|
+
!HOSTED_REMINDER_SCHEDULE_KINDS.has(body.scheduleKind) ||
|
|
362
|
+
typeof body.scheduleValue !== "string" ||
|
|
363
|
+
body.scheduleValue.length === 0 ||
|
|
364
|
+
body.scheduleValue.length > 512 ||
|
|
365
|
+
typeof body.hasRunHandler !== "boolean" ||
|
|
366
|
+
typeof body.hasUntilFn !== "boolean" ||
|
|
367
|
+
typeof body.busyPolicy !== "string" ||
|
|
368
|
+
!HOSTED_REMINDER_BUSY_POLICIES.has(body.busyPolicy) ||
|
|
369
|
+
typeof body.nextFireAtMs !== "number" ||
|
|
370
|
+
!Number.isFinite(body.nextFireAtMs) ||
|
|
371
|
+
typeof body.claimedAtMs !== "number" ||
|
|
372
|
+
!Number.isFinite(body.claimedAtMs) ||
|
|
373
|
+
!Number.isInteger(body.claimedAtMs) ||
|
|
374
|
+
body.claimedAtMs < 0) {
|
|
375
|
+
return undefined;
|
|
376
|
+
}
|
|
377
|
+
if (body.intervalMs !== undefined) {
|
|
378
|
+
if (typeof body.intervalMs !== "number" ||
|
|
379
|
+
!Number.isFinite(body.intervalMs) ||
|
|
380
|
+
!Number.isInteger(body.intervalMs) ||
|
|
381
|
+
body.intervalMs <= 0) {
|
|
382
|
+
return undefined;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (body.prompt !== undefined) {
|
|
386
|
+
if (typeof body.prompt !== "string" || body.prompt.length > 8192) {
|
|
387
|
+
return undefined;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (body.handler !== undefined) {
|
|
391
|
+
if (typeof body.handler !== "string" ||
|
|
392
|
+
body.handler.length === 0 ||
|
|
393
|
+
body.handler.length > 128) {
|
|
394
|
+
return undefined;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
if (body.untilPrompt !== undefined) {
|
|
398
|
+
if (typeof body.untilPrompt !== "string" ||
|
|
399
|
+
body.untilPrompt.length > 8192) {
|
|
400
|
+
return undefined;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
const target = parseOptionalJsonObjectField(body.target, 16 * 1024);
|
|
404
|
+
if (body.target !== undefined && target === undefined) {
|
|
405
|
+
return undefined;
|
|
406
|
+
}
|
|
407
|
+
const args = parseOptionalJsonObjectField(body.args, 32 * 1024);
|
|
408
|
+
if (body.args !== undefined && args === undefined) {
|
|
409
|
+
return undefined;
|
|
410
|
+
}
|
|
411
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ protocolVersion: 1, id: body.id, fireCount: body.fireCount, generation: body.generation, purpose: body.purpose, channelId: body.channelId, continuationToken: body.continuationToken }, (target === undefined ? {} : { target })), { scheduleKind: body.scheduleKind, scheduleValue: body.scheduleValue }), (body.intervalMs === undefined ? {} : { intervalMs: body.intervalMs })), (body.prompt === undefined ? {} : { prompt: body.prompt })), (body.handler === undefined ? {} : { handler: body.handler })), (args === undefined ? {} : { args })), { hasRunHandler: body.hasRunHandler, hasUntilFn: body.hasUntilFn }), (body.untilPrompt === undefined
|
|
412
|
+
? {}
|
|
413
|
+
: { untilPrompt: body.untilPrompt })), { busyPolicy: body.busyPolicy, nextFireAtMs: body.nextFireAtMs, claimedAtMs: body.claimedAtMs });
|
|
414
|
+
}
|
|
166
415
|
export function parseHostedAdmissionOutcome(value) {
|
|
167
416
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
168
417
|
return undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ChannelHandlerArgs, SendMessageOptions } from "../types.js";
|
|
2
2
|
import { type HostedBoundSecretsResult } from "./cursor/hosted-bound-secrets.js";
|
|
3
3
|
import { type GuestNetworkWaitResult } from "./guest-network.js";
|
|
4
|
-
import { type HostedAdmission } from "./hosted-delivery-protocol.js";
|
|
4
|
+
import { type HostedAdmission, type HostedReminderFireDescriptorPayload } from "./hosted-delivery-protocol.js";
|
|
5
5
|
import type { LogRingEntry } from "./log-ring.js";
|
|
6
6
|
import type { Router } from "./router.js";
|
|
7
7
|
import type { SessionRunExecutionWrite } from "./session-run-log.js";
|
|
@@ -49,6 +49,15 @@ export declare function registerHostedDeliveryRoute(input: {
|
|
|
49
49
|
outcome: "fired" | "noop";
|
|
50
50
|
reason?: string;
|
|
51
51
|
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Architecture v2: execute an immutable CP fire descriptor and apply the
|
|
54
|
+
* structured outcome via the hosted ReminderControlPlane client.
|
|
55
|
+
*/
|
|
56
|
+
executeReminderDescriptor?(descriptor: HostedReminderFireDescriptorPayload): Promise<{
|
|
57
|
+
reminderId: string;
|
|
58
|
+
outcome: "fired" | "noop";
|
|
59
|
+
reason?: string;
|
|
60
|
+
}>;
|
|
52
61
|
/**
|
|
53
62
|
* Await the session's durable mirror (dispatch chain + storage queue)
|
|
54
63
|
* before the execution reply: the control plane may park the pod the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,kBAAkB,EAClB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,17 +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, HOSTED_GUEST_RETRY_TERMINAL, HOSTED_GUEST_RETRY_TRANSIENT, hostedGuestErrorResponse, isHostedReminderAdmission, parseHostedAdmission, parseHostedExecution, parseHostedReminderFirePayload, } 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
21
|
import { readJsonObject } from "./http-channel.js";
|
|
22
22
|
import { endActiveHttpSpan } from "./otel/http.js";
|
|
23
23
|
import { ReminderValidationError, UnknownReminderError, } from "./reminder-runner.js";
|
|
24
|
-
import { statusForThrownRequestError } from "./request-error-status.js";
|
|
24
|
+
import { mapThrownRequestError, statusForThrownRequestError, } from "./request-error-status.js";
|
|
25
25
|
/**
|
|
26
26
|
* A second `send()` in one delivery is a deterministic authored bug — the
|
|
27
27
|
* wire protocol carries exactly one pending send per delivery — so it must
|
|
@@ -81,6 +81,30 @@ function nonRetryableRejection(error) {
|
|
|
81
81
|
response: terminalHostedError(422, code, boundedMessage(error.message)),
|
|
82
82
|
};
|
|
83
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
|
+
}),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
84
108
|
/**
|
|
85
109
|
* Run authored admission without creating a framework session. Authored
|
|
86
110
|
* `task` callbacks execute as sessionless work; the first `send` is captured
|
|
@@ -112,12 +136,37 @@ export function dispatchHostedAdmission(input) {
|
|
|
112
136
|
*/
|
|
113
137
|
function dispatchHostedReminderAdmission(input, delivery) {
|
|
114
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
|
+
}
|
|
115
164
|
if (input.fireReminder === undefined) {
|
|
116
165
|
return transientHostedError(503, "reminder_dispatch_unavailable", "This guest has no reminder runner wired for hosted admission.");
|
|
117
166
|
}
|
|
118
167
|
const payload = parseHostedReminderFirePayload(delivery.payload);
|
|
119
168
|
if (payload === undefined) {
|
|
120
|
-
return terminalHostedError(400, "invalid_reminder_payload", "Expected reminder payload { reminderId, fireCount }.");
|
|
169
|
+
return terminalHostedError(400, "invalid_reminder_payload", "Expected reminder descriptor or legacy payload { reminderId, fireCount }.");
|
|
121
170
|
}
|
|
122
171
|
try {
|
|
123
172
|
const result = yield input.fireReminder(payload.reminderId, payload.fireCount);
|
|
@@ -158,6 +207,7 @@ function runAdmission(input, adapter) {
|
|
|
158
207
|
let dispatched;
|
|
159
208
|
try {
|
|
160
209
|
dispatched = yield adapter.dispatch({
|
|
210
|
+
channelId: input.delivery.channelId,
|
|
161
211
|
eventType: input.delivery.eventType,
|
|
162
212
|
payload: input.delivery.payload,
|
|
163
213
|
deliveryId: input.delivery.deliveryId,
|
|
@@ -165,11 +215,13 @@ function runAdmission(input, adapter) {
|
|
|
165
215
|
});
|
|
166
216
|
}
|
|
167
217
|
catch (error) {
|
|
168
|
-
const
|
|
169
|
-
if (
|
|
170
|
-
return
|
|
218
|
+
const mapped = mappedAdmissionFailure(error);
|
|
219
|
+
if (mapped !== undefined) {
|
|
220
|
+
return mapped;
|
|
171
221
|
}
|
|
172
|
-
|
|
222
|
+
return {
|
|
223
|
+
response: terminalHostedError(500, "agent_admission_threw", boundedMessage(error instanceof Error ? error.message : String(error))),
|
|
224
|
+
};
|
|
173
225
|
}
|
|
174
226
|
if (!dispatched.ok) {
|
|
175
227
|
return {
|
|
@@ -180,9 +232,9 @@ function runAdmission(input, adapter) {
|
|
|
180
232
|
yield Promise.all(background);
|
|
181
233
|
}
|
|
182
234
|
catch (error) {
|
|
183
|
-
const
|
|
184
|
-
if (
|
|
185
|
-
return
|
|
235
|
+
const mapped = mappedAdmissionFailure(error);
|
|
236
|
+
if (mapped !== undefined) {
|
|
237
|
+
return mapped;
|
|
186
238
|
}
|
|
187
239
|
return {
|
|
188
240
|
response: terminalHostedError(503, "background_dispatch_failed", boundedMessage(error instanceof Error ? error.message : String(error))),
|
|
@@ -441,11 +493,14 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
441
493
|
? {}
|
|
442
494
|
: { snapshotLogs: input.snapshotLogs }));
|
|
443
495
|
const writeDiag = (fields) => __awaiter(this, void 0, void 0, function* () {
|
|
444
|
-
|
|
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
|
|
445
500
|
? {}
|
|
446
501
|
: { message: fields.message })), (fields.abortReason === undefined
|
|
447
502
|
? {}
|
|
448
|
-
: { abortReason: fields.abortReason })), (fields.error === undefined ? {} : { error: fields.error })));
|
|
503
|
+
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode, classification }), (fields.error === undefined ? {} : { error: fields.error })));
|
|
449
504
|
});
|
|
450
505
|
// Claim the file before the turn runs. The host reads it after its
|
|
451
506
|
// own POST returns, which for a 9-minute timeout is while this turn
|
|
@@ -470,23 +525,24 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
470
525
|
// as soon as the POST returns. A leftover SDK handle freezes a
|
|
471
526
|
// dead Connect/HTTP2 session that the next wake then reuses.
|
|
472
527
|
evictHostedSdkSessions(input.evictSdkSession, session.id, execution.sessionPublicId);
|
|
528
|
+
const hostedFailure = outcome.status === "finished"
|
|
529
|
+
? undefined
|
|
530
|
+
: hostedFailureForUnfinishedTurn(outcome);
|
|
473
531
|
yield writeDiag({
|
|
474
532
|
sessionId: session.id,
|
|
475
533
|
turnStatus: outcome.status,
|
|
476
534
|
message: outcome.errorMessage,
|
|
477
|
-
abortReason: abortReasonFromTurnStatus(outcome.status, outcome.
|
|
535
|
+
abortReason: abortReasonFromTurnStatus(outcome.status, outcome.cancellationReason),
|
|
536
|
+
failureCode: hostedFailure === null || hostedFailure === void 0 ? void 0 : hostedFailure.error,
|
|
478
537
|
});
|
|
479
|
-
if (
|
|
480
|
-
// waitForCompletion resolves (does not throw) on a quiet
|
|
481
|
-
// Connect abort. Map that to guest_connect_stalled so TAS
|
|
482
|
-
// retries the same pod. Real runner failures stay turn_failed.
|
|
483
|
-
const hostedFailure = hostedFailureForUnfinishedTurn(outcome.errorMessage);
|
|
538
|
+
if (hostedFailure !== undefined) {
|
|
484
539
|
return {
|
|
485
540
|
status: 503,
|
|
486
541
|
body: {
|
|
487
542
|
ok: false,
|
|
488
543
|
error: hostedFailure.error,
|
|
489
544
|
retry: hostedFailure.retry,
|
|
545
|
+
classification: hostedFailureClassification(hostedFailure.error),
|
|
490
546
|
turnStatus: outcome.status,
|
|
491
547
|
message: outcome.errorMessage,
|
|
492
548
|
},
|
|
@@ -508,6 +564,7 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
508
564
|
turnStatus: "error",
|
|
509
565
|
message: error instanceof Error ? error.message : String(error),
|
|
510
566
|
abortReason: "execute_throw",
|
|
567
|
+
failureCode: "internal_error",
|
|
511
568
|
error,
|
|
512
569
|
});
|
|
513
570
|
throw error;
|
|
@@ -532,14 +589,35 @@ function evictHostedSdkSessions(evict, ...ids) {
|
|
|
532
589
|
evict(id);
|
|
533
590
|
}
|
|
534
591
|
}
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
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)) {
|
|
538
610
|
return {
|
|
539
611
|
error: GUEST_CONNECT_STALLED,
|
|
540
612
|
retry: HOSTED_GUEST_RETRY_TRANSIENT,
|
|
541
613
|
};
|
|
542
614
|
}
|
|
615
|
+
if (outcome.status === "cancelled") {
|
|
616
|
+
return {
|
|
617
|
+
error: "turn_cancelled",
|
|
618
|
+
retry: HOSTED_GUEST_RETRY_TERMINAL,
|
|
619
|
+
};
|
|
620
|
+
}
|
|
543
621
|
return { error: "turn_failed", retry: HOSTED_GUEST_RETRY_TERMINAL };
|
|
544
622
|
}
|
|
545
623
|
function afterHostedWork(flushOtel, work) {
|
|
@@ -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"}
|