@cursor/july 0.1.107 → 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 +30 -8
- 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/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.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/ab.html +4 -4
- package/dist/docs/assets/{app.CtuckIiL.js → app.BASKM3M4.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BHZYsNVi.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.Bkkhnu8K.js → VPLocalSearchBox.BOKxlYGP.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DhpIe0Pa.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_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_cli.md.Dm67hd2D.js → reference_cli.md.Ca26u0Es.js} +6 -6
- package/dist/docs/assets/{reference_cli.md.Dm67hd2D.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/troubleshooting.md.CYEAO9bM.js +1 -0
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +4 -4
- package/dist/docs/deployment.html +7 -7
- package/dist/docs/deployment.md +7 -2
- package/dist/docs/evals.html +6 -6
- package/dist/docs/evals.md +3 -2
- package/dist/docs/guides/agent-to-agent.html +4 -4
- 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 +5 -5
- package/dist/docs/guides/github.md +2 -1
- 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 +6 -6
- package/dist/docs/guides/slack.md +2 -1
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +4 -0
- package/dist/docs/llms-full.txt +158 -33
- package/dist/docs/llms.txt +1 -0
- 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 +4 -4
- package/dist/docs/reference/cli.html +10 -10
- package/dist/docs/reference/cli.md +18 -11
- package/dist/docs/reference/connections.html +6 -6
- package/dist/docs/reference/connections.md +2 -1
- package/dist/docs/reference/extensions.html +6 -6
- package/dist/docs/reference/extensions.md +2 -0
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +4 -4
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +4 -4
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/result.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +4 -4
- 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/ab.html +4 -4
- 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/evals.html +6 -6
- package/dist/docs/skills/evals.md +1 -1
- package/dist/docs/skills/framework-map.html +5 -5
- package/dist/docs/skills/framework-map.md +4 -2
- 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 +4 -4
- 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 +4 -4
- 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/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 +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/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/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/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/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 +57 -56
- package/dist/internal/session-engine.d.ts +2 -6
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +95 -67
- package/dist/playground/assets/{index-Bq2HpEQB.js → index-BMDqAeXu.js} +28 -28
- package/dist/playground/assets/index-LUgJoWdL.css +1 -0
- package/dist/playground/index.html +2 -2
- 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 +33 -5
- 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/slack.md +2 -1
- package/docs/reference/agent-config.md +5 -2
- package/docs/reference/cli.md +18 -11
- 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 +8 -1
- 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/src/bin/agent-serve.ts +27 -2
- package/src/channels/github/github-channel.ts +8 -8
- package/src/channels/github/types.ts +5 -0
- package/src/channels/origin/origin-channel.ts +29 -13
- package/src/channels/origin/types.ts +5 -0
- 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/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 +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/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/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/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/sdk-runner.ts +2 -1
- package/src/internal/server.ts +89 -79
- package/src/internal/session-engine.ts +141 -83
- package/src/storage-backends/cursor-hosted.ts +40 -1
- package/src/types.ts +39 -6
- package/dist/docs/assets/chunks/@localSearchIndexroot.DXXZxiMv.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-CZKKNlmb.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/{troubleshooting.md.Cus_YZga.lean.js → troubleshooting.md.CYEAO9bM.lean.js} +0 -0
|
@@ -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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { DeployApiError, } from "./deploy-client.js";
|
|
11
|
+
/**
|
|
12
|
+
* Classify a hosted slug by probing the v2 control plane.
|
|
13
|
+
*
|
|
14
|
+
* Only HTTP 404 means “not v2.” Auth, 5xx, and transport errors fail closed
|
|
15
|
+
* so a v2 slug cannot fall through to `/internal/agent-serve`. That probe
|
|
16
|
+
* shares the factory microlith path used by secrets; a factory outage will
|
|
17
|
+
* also block legacy `--prod` until it recovers.
|
|
18
|
+
*/
|
|
19
|
+
export function deploymentArchitecture(args) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
try {
|
|
22
|
+
yield args.client.getAgentkitDeploy({
|
|
23
|
+
teamId: args.teamId,
|
|
24
|
+
slug: args.slug,
|
|
25
|
+
});
|
|
26
|
+
return "v2";
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error instanceof DeployApiError && error.status === 404) {
|
|
30
|
+
return "v1";
|
|
31
|
+
}
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function unsupportedV2LegacyCommandError(slug) {
|
|
37
|
+
return new DeployApiError(`This command is not supported for architecture v2 deployment "${slug}". The command stopped before calling the legacy v1 deployment API.`, 409);
|
|
38
|
+
}
|
|
39
|
+
export function isUnsupportedV2LegacyCommandError(error) {
|
|
40
|
+
return (error instanceof DeployApiError &&
|
|
41
|
+
error.status === 409 &&
|
|
42
|
+
error.message.includes("not supported for architecture v2"));
|
|
43
|
+
}
|
|
44
|
+
export function rejectV2ForLegacyCommand(args) {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const architecture = yield deploymentArchitecture(args);
|
|
47
|
+
if (architecture === "v2") {
|
|
48
|
+
throw unsupportedV2LegacyCommandError(args.slug);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* The control plane owns reminder *documents* and clocks. The kit only
|
|
8
8
|
* executes fires.
|
|
9
9
|
*/
|
|
10
|
+
import { type ReminderControlPlane } from "./reminder-control-plane-protocol.js";
|
|
10
11
|
import { type ReminderRecord } from "./reminder-store.js";
|
|
11
12
|
export interface PlatformTimers {
|
|
12
13
|
upsertSchedule(input: {
|
|
@@ -25,4 +26,10 @@ export interface CursorHostedPlatformTimersOptions {
|
|
|
25
26
|
fetch?: typeof fetch;
|
|
26
27
|
}
|
|
27
28
|
export declare function createCursorHostedPlatformTimers(options?: CursorHostedPlatformTimersOptions): PlatformTimers;
|
|
29
|
+
/**
|
|
30
|
+
* Cursor-hosted HTTP ReminderControlPlane for architecture v2.
|
|
31
|
+
* Speaks factory `/internal/agentsdk/reminders` (ELB → factory ECS).
|
|
32
|
+
* CP owns ids and time. v1 PUT/DELETE reminders stay on timed-work.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createCursorHostedReminderControlPlane(options?: CursorHostedPlatformTimersOptions): ReminderControlPlane;
|
|
28
35
|
//# sourceMappingURL=platform-timers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-timers.d.ts","sourceRoot":"","sources":["../../src/internal/platform-timers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI5E,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAC7D,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAqED,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,iCAAsC,GAC9C,cAAc,CA0EhB"}
|
|
1
|
+
{"version":3,"file":"platform-timers.d.ts","sourceRoot":"","sources":["../../src/internal/platform-timers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,oBAAoB,EAK1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI5E,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAC7D,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAqED,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,iCAAsC,GAC9C,cAAc,CA0EhB;AA0DD;;;;GAIG;AACH,wBAAgB,sCAAsC,CACpD,OAAO,GAAE,iCAAsC,GAC9C,oBAAoB,CAsHtB"}
|
|
@@ -16,6 +16,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
16
16
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
17
|
});
|
|
18
18
|
};
|
|
19
|
+
import { REMINDER_CP_PROTOCOL_VERSION, } from "./reminder-control-plane-protocol.js";
|
|
19
20
|
import { isReminderRecord } from "./reminder-store.js";
|
|
20
21
|
const DEFAULT_CURSOR_EXTERNAL_API_URL = "https://api.cursor.com";
|
|
21
22
|
function resolveApiKey(options) {
|
|
@@ -118,3 +119,141 @@ export function createCursorHostedPlatformTimers(options = {}) {
|
|
|
118
119
|
},
|
|
119
120
|
};
|
|
120
121
|
}
|
|
122
|
+
/** v2 reminder CP is factory ECS (`/internal/agentsdk/*`), not timed-work. */
|
|
123
|
+
const AGENTSDK_REMINDERS_PREFIX = "/internal/agentsdk";
|
|
124
|
+
/**
|
|
125
|
+
* Bounded retries for idempotent CP outcome writes after the guest handler
|
|
126
|
+
* has already run. Delivery is at-least-once: a transient apply failure may
|
|
127
|
+
* re-enter the handler on the next Temporal admission. Do not claim
|
|
128
|
+
* exactly-once handler execution.
|
|
129
|
+
*/
|
|
130
|
+
const APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS = 3;
|
|
131
|
+
const APPLY_REMINDER_OUTCOME_RETRY_DELAY_MS = 50;
|
|
132
|
+
function sleepMs(ms) {
|
|
133
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
yield new Promise((resolve) => setTimeout(resolve, ms));
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
function withBoundedApplyRetries(run) {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
let lastError;
|
|
140
|
+
for (let attempt = 1; attempt <= APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS; attempt++) {
|
|
141
|
+
try {
|
|
142
|
+
return yield run();
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
lastError = error;
|
|
146
|
+
if (attempt >= APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS) {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
yield sleepMs(APPLY_REMINDER_OUTCOME_RETRY_DELAY_MS * attempt);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
throw lastError;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function timedWorkJsonFetch(options, method, path, body) {
|
|
156
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
var _a;
|
|
158
|
+
const fetchImpl = (_a = options.fetch) !== null && _a !== void 0 ? _a : globalThis.fetch;
|
|
159
|
+
if (typeof fetchImpl !== "function") {
|
|
160
|
+
throw new Error("reminder control plane requires fetch");
|
|
161
|
+
}
|
|
162
|
+
return fetchImpl(`${resolveBaseUrl(options)}${path}`, Object.assign({ method, headers: Object.assign({ Authorization: `Bearer ${resolveApiKey(options)}` }, (body === undefined ? {} : { "Content-Type": "application/json" })) }, (body === undefined ? {} : { body: JSON.stringify(body) })));
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Cursor-hosted HTTP ReminderControlPlane for architecture v2.
|
|
167
|
+
* Speaks factory `/internal/agentsdk/reminders` (ELB → factory ECS).
|
|
168
|
+
* CP owns ids and time. v1 PUT/DELETE reminders stay on timed-work.
|
|
169
|
+
*/
|
|
170
|
+
export function createCursorHostedReminderControlPlane(options = {}) {
|
|
171
|
+
return {
|
|
172
|
+
protocolVersion: REMINDER_CP_PROTOCOL_VERSION,
|
|
173
|
+
createReminder(intent) {
|
|
174
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
175
|
+
const response = yield timedWorkJsonFetch(options, "POST", `${AGENTSDK_REMINDERS_PREFIX}/reminders`, intent);
|
|
176
|
+
if (!response.ok) {
|
|
177
|
+
const text = yield response.text();
|
|
178
|
+
throw new Error(`reminder CP create failed: HTTP ${response.status} ${text}`);
|
|
179
|
+
}
|
|
180
|
+
const parsed = yield response.json();
|
|
181
|
+
if (!isReminderRecord(parsed)) {
|
|
182
|
+
throw new Error("reminder CP create returned invalid record");
|
|
183
|
+
}
|
|
184
|
+
return parsed;
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
getReminder(id) {
|
|
188
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
189
|
+
const response = yield timedWorkJsonFetch(options, "GET", `${AGENTSDK_REMINDERS_PREFIX}/reminders/${encodeURIComponent(id)}`);
|
|
190
|
+
if (response.status === 404) {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
if (!response.ok) {
|
|
194
|
+
throw new Error(`reminder CP get failed: HTTP ${response.status}`);
|
|
195
|
+
}
|
|
196
|
+
const parsed = yield response.json();
|
|
197
|
+
return isReminderRecord(parsed) ? parsed : undefined;
|
|
198
|
+
});
|
|
199
|
+
},
|
|
200
|
+
listReminders() {
|
|
201
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
202
|
+
const response = yield timedWorkJsonFetch(options, "GET", `${AGENTSDK_REMINDERS_PREFIX}/reminders`);
|
|
203
|
+
if (!response.ok) {
|
|
204
|
+
throw new Error(`reminder CP list failed: HTTP ${response.status}`);
|
|
205
|
+
}
|
|
206
|
+
const parsed = yield response.json();
|
|
207
|
+
if (parsed === null ||
|
|
208
|
+
typeof parsed !== "object" ||
|
|
209
|
+
!("reminders" in parsed) ||
|
|
210
|
+
!Array.isArray(parsed.reminders)) {
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
return parsed.reminders.filter(isReminderRecord);
|
|
214
|
+
});
|
|
215
|
+
},
|
|
216
|
+
cancelReminder(id, reason) {
|
|
217
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
218
|
+
const response = yield timedWorkJsonFetch(options, "POST", `${AGENTSDK_REMINDERS_PREFIX}/reminders/${encodeURIComponent(id)}/cancel`, reason === undefined ? {} : { reason });
|
|
219
|
+
if (response.status === 404) {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
if (!response.ok) {
|
|
223
|
+
throw new Error(`reminder CP cancel failed: HTTP ${response.status}`);
|
|
224
|
+
}
|
|
225
|
+
const parsed = yield response.json();
|
|
226
|
+
return isReminderRecord(parsed) ? parsed : undefined;
|
|
227
|
+
});
|
|
228
|
+
},
|
|
229
|
+
rekeyReminders(channelId, oldToken, newToken) {
|
|
230
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
231
|
+
const response = yield timedWorkJsonFetch(options, "POST", `${AGENTSDK_REMINDERS_PREFIX}/reminders/rekey`, { channelId, oldToken, newToken });
|
|
232
|
+
if (!response.ok) {
|
|
233
|
+
throw new Error(`reminder CP rekey failed: HTTP ${response.status}`);
|
|
234
|
+
}
|
|
235
|
+
const parsed = yield response.json();
|
|
236
|
+
if (parsed === null ||
|
|
237
|
+
typeof parsed !== "object" ||
|
|
238
|
+
typeof parsed.count !== "number") {
|
|
239
|
+
throw new Error("reminder CP rekey returned invalid body");
|
|
240
|
+
}
|
|
241
|
+
return parsed.count;
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
applyReminderOutcome(claim, outcome) {
|
|
245
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
246
|
+
// Handler side effects may already have run; retry only the idempotent
|
|
247
|
+
// CP write. Exhausted failures stay thrown so Temporal can re-admit
|
|
248
|
+
// (at-least-once — not exactly-once).
|
|
249
|
+
return yield withBoundedApplyRetries(() => __awaiter(this, void 0, void 0, function* () {
|
|
250
|
+
const response = yield timedWorkJsonFetch(options, "POST", `${AGENTSDK_REMINDERS_PREFIX}/reminders/outcome`, { claim, outcome });
|
|
251
|
+
if (!response.ok) {
|
|
252
|
+
throw new Error(`reminder CP outcome apply failed: HTTP ${response.status}`);
|
|
253
|
+
}
|
|
254
|
+
return (yield response.json());
|
|
255
|
+
}));
|
|
256
|
+
});
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
}
|
|
@@ -13,6 +13,8 @@ import type { JsonObject, ReminderBusyPolicy, ReminderScheduleKind } from "../ty
|
|
|
13
13
|
import type { ReminderRecord } from "./reminder-store.js";
|
|
14
14
|
/** Wire / persistence version for this control-plane protocol. */
|
|
15
15
|
export declare const REMINDER_CP_PROTOCOL_VERSION: 1;
|
|
16
|
+
/** Each recurring/retry fire can spend a model turn and create hosted work. */
|
|
17
|
+
export declare const REMINDER_CP_MIN_RECURRING_INTERVAL_MS: 60000;
|
|
16
18
|
export type ReminderCpProtocolVersion = typeof REMINDER_CP_PROTOCOL_VERSION;
|
|
17
19
|
/**
|
|
18
20
|
* Normalized raw schedule for create intents (JSON-safe).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminder-control-plane-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-control-plane-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAQrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,EAAG,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"reminder-control-plane-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-control-plane-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@ import { parseDuration } from "./duration.js";
|
|
|
14
14
|
import { nextCronFireMs, ReminderValidationError, resolveSchedule, } from "./reminder-schedule.js";
|
|
15
15
|
/** Wire / persistence version for this control-plane protocol. */
|
|
16
16
|
export const REMINDER_CP_PROTOCOL_VERSION = 1;
|
|
17
|
+
/** Each recurring/retry fire can spend a model turn and create hosted work. */
|
|
18
|
+
export const REMINDER_CP_MIN_RECURRING_INTERVAL_MS = 60000;
|
|
17
19
|
export function newReminderId() {
|
|
18
20
|
return `rem_${randomBytes(8).toString("hex")}`;
|
|
19
21
|
}
|
|
@@ -101,10 +103,15 @@ export function toWireReschedule(reschedule) {
|
|
|
101
103
|
* via {@link resolveSchedule}; pass `nowMs` for deterministic tests.
|
|
102
104
|
*/
|
|
103
105
|
export function intentToNewRecord(intent, nowMs = Date.now()) {
|
|
106
|
+
var _a;
|
|
104
107
|
if (intent.protocolVersion !== REMINDER_CP_PROTOCOL_VERSION) {
|
|
105
108
|
throw new ReminderValidationError(`Unsupported reminder CP protocol version ${String(intent.protocolVersion)}`);
|
|
106
109
|
}
|
|
107
110
|
const resolved = resolveSchedule(scheduleSpecToCreateFields(intent.schedule), nowMs);
|
|
111
|
+
if (resolved.kind === "every" &&
|
|
112
|
+
((_a = resolved.intervalMs) !== null && _a !== void 0 ? _a : 0) < REMINDER_CP_MIN_RECURRING_INTERVAL_MS) {
|
|
113
|
+
throw new ReminderValidationError(`every must be >= 1m (got ${intent.schedule.kind === "every" ? intent.schedule.every : ""})`);
|
|
114
|
+
}
|
|
108
115
|
const nowIso = new Date(nowMs).toISOString();
|
|
109
116
|
return {
|
|
110
117
|
version: 1,
|
|
@@ -216,8 +223,8 @@ export function applyOutcomeToRecord(record, claim, outcome, nowMs = Date.now())
|
|
|
216
223
|
}
|
|
217
224
|
const nowIso = new Date(nowMs).toISOString();
|
|
218
225
|
if (outcome.kind === "retry") {
|
|
219
|
-
const delayMs = (_a = outcome.delayMs) !== null && _a !== void 0 ? _a :
|
|
220
|
-
const updated = Object.assign(Object.assign({}, record), { status: "armed", nextFireAtMs: nowMs +
|
|
226
|
+
const delayMs = Math.max(REMINDER_CP_MIN_RECURRING_INTERVAL_MS, (_a = outcome.delayMs) !== null && _a !== void 0 ? _a : REMINDER_CP_MIN_RECURRING_INTERVAL_MS);
|
|
227
|
+
const updated = Object.assign(Object.assign({}, record), { status: "armed", nextFireAtMs: nowMs + delayMs,
|
|
221
228
|
// Same fireCount; bump generation so a second apply of the old claim is stale.
|
|
222
229
|
generation: recordGeneration(record) + 1, updatedAt: nowIso });
|
|
223
230
|
return { applied: true, record: updated };
|
|
@@ -112,6 +112,14 @@ export declare class ReminderRunner {
|
|
|
112
112
|
*/
|
|
113
113
|
private resolveFollowupAuth;
|
|
114
114
|
private deliverPrompt;
|
|
115
|
+
/**
|
|
116
|
+
* Join the reminder's existing session. Control-plane (`/v2`) channels
|
|
117
|
+
* refuse authored `continuationToken`; pass the stored key as
|
|
118
|
+
* {@link EngineSendOptions.mailboxContinuation} so the engine reuses the
|
|
119
|
+
* CP-selected identity without channel admission.
|
|
120
|
+
*/
|
|
121
|
+
private followupSendOptions;
|
|
122
|
+
private channelUsesControlPlaneContinuation;
|
|
115
123
|
private sendFollowup;
|
|
116
124
|
private buildFireContext;
|
|
117
125
|
private buildUntilContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAEV,kBAAkB,EAGlB,mBAAmB,EAInB,YAAY,EACZ,cAAc,EAEf,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,12 +13,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
13
13
|
});
|
|
14
14
|
};
|
|
15
15
|
import { randomBytes } from "node:crypto";
|
|
16
|
+
import { channelContinuationIdentity, httpContinuationIdentity, } from "./continuation-channel.js";
|
|
17
|
+
import { continuationSource } from "./continuation-identity.js";
|
|
16
18
|
import { NAME_PATTERN } from "./discovery/names.js";
|
|
17
19
|
import { parseDuration } from "./duration.js";
|
|
18
20
|
import { REMINDER_CP_PROTOCOL_VERSION, scheduleSpecFromCreateInput, toWireReschedule, } from "./reminder-control-plane-protocol.js";
|
|
19
21
|
import { defaultBusyPolicy, MAX_TIMER_MS, nextCronFireMs, ReminderValidationError, resolveSchedule, } from "./reminder-schedule.js";
|
|
20
22
|
import { APP_AUTH } from "./schedule-runner.js";
|
|
21
|
-
import { SessionBusyError } from "./session-engine.js";
|
|
23
|
+
import { HTTP_CHANNEL_ID, SessionBusyError, } from "./session-engine.js";
|
|
22
24
|
export { ReminderValidationError } from "./reminder-schedule.js";
|
|
23
25
|
/** Max UTF-8 byte length of `JSON.stringify(args)` on named-handler create. */
|
|
24
26
|
export const REMINDER_ARGS_MAX_BYTES = 32 * 1024;
|
|
@@ -827,13 +829,41 @@ export class ReminderRunner {
|
|
|
827
829
|
return this.sendFollowup(record, buildFirePrompt(record), auth);
|
|
828
830
|
});
|
|
829
831
|
}
|
|
832
|
+
/**
|
|
833
|
+
* Join the reminder's existing session. Control-plane (`/v2`) channels
|
|
834
|
+
* refuse authored `continuationToken`; pass the stored key as
|
|
835
|
+
* {@link EngineSendOptions.mailboxContinuation} so the engine reuses the
|
|
836
|
+
* CP-selected identity without channel admission.
|
|
837
|
+
*/
|
|
838
|
+
followupSendOptions(record, auth) {
|
|
839
|
+
if (this.channelUsesControlPlaneContinuation(record.channelId)) {
|
|
840
|
+
return {
|
|
841
|
+
auth,
|
|
842
|
+
mailboxContinuation: { key: record.continuationToken },
|
|
843
|
+
};
|
|
844
|
+
}
|
|
845
|
+
return {
|
|
846
|
+
auth,
|
|
847
|
+
continuationToken: record.continuationToken,
|
|
848
|
+
};
|
|
849
|
+
}
|
|
850
|
+
channelUsesControlPlaneContinuation(channelId) {
|
|
851
|
+
var _a;
|
|
852
|
+
const project = this.engine.project;
|
|
853
|
+
// Test doubles may omit `project`; keep the legacy continuationToken path.
|
|
854
|
+
if (project === undefined) {
|
|
855
|
+
return false;
|
|
856
|
+
}
|
|
857
|
+
const identity = channelId === HTTP_CHANNEL_ID
|
|
858
|
+
? httpContinuationIdentity(project.httpChannel)
|
|
859
|
+
: channelContinuationIdentity((_a = project.channels.find((channel) => channel.id === channelId)) === null || _a === void 0 ? void 0 : _a.definition);
|
|
860
|
+
return continuationSource(identity) === "control-plane";
|
|
861
|
+
}
|
|
830
862
|
sendFollowup(record, message, auth) {
|
|
831
863
|
return __awaiter(this, void 0, void 0, function* () {
|
|
864
|
+
const sendOptions = this.followupSendOptions(record, auth);
|
|
832
865
|
try {
|
|
833
|
-
const session = yield this.engine.send(record.channelId, message,
|
|
834
|
-
auth,
|
|
835
|
-
continuationToken: record.continuationToken,
|
|
836
|
-
});
|
|
866
|
+
const session = yield this.engine.send(record.channelId, message, sendOptions);
|
|
837
867
|
this.engine.trackBackground(this.engine.waitForCompletion(session.id));
|
|
838
868
|
return { action: "delivered" };
|
|
839
869
|
}
|
|
@@ -844,10 +874,7 @@ export class ReminderRunner {
|
|
|
844
874
|
}
|
|
845
875
|
yield this.whenSessionIdle(record.channelId, record.continuationToken);
|
|
846
876
|
try {
|
|
847
|
-
const session = yield this.engine.send(record.channelId, message,
|
|
848
|
-
auth,
|
|
849
|
-
continuationToken: record.continuationToken,
|
|
850
|
-
});
|
|
877
|
+
const session = yield this.engine.send(record.channelId, message, sendOptions);
|
|
851
878
|
this.engine.trackBackground(this.engine.waitForCompletion(session.id));
|
|
852
879
|
return { action: "delivered" };
|
|
853
880
|
}
|
|
@@ -21,6 +21,8 @@ export interface ResolveProdTargetOptions {
|
|
|
21
21
|
apiKey?: string;
|
|
22
22
|
fetchImpl?: typeof fetch;
|
|
23
23
|
err?: (text: string) => void;
|
|
24
|
+
/** Skip when the caller already ran {@link rejectV2ForLegacyCommand}. */
|
|
25
|
+
skipLegacyArchitectureCheck?: boolean;
|
|
24
26
|
/** Test seam for reachability-retry backoff. */
|
|
25
27
|
sleep?: (ms: number) => Promise<void>;
|
|
26
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-prod-target.d.ts","sourceRoot":"","sources":["../../src/internal/resolve-prod-target.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"resolve-prod-target.d.ts","sourceRoot":"","sources":["../../src/internal/resolve-prod-target.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGrE,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,yEAAyE;IACzE,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,gDAAgD;IAChD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAGtC,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;IAFxD,YACE,OAAO,EAAE,MAAM,EACN,OAAO,GAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAiB,EAItE;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;CACF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAiG7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,wBAAwB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,OAAO,CAAC,2BAA2B,CAAC,CA8DtC;AAWD,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAgBT"}
|
|
@@ -19,6 +19,7 @@ import { basename, resolve } from "node:path";
|
|
|
19
19
|
import { resolveDeployAuth } from "./cli-deploy.js";
|
|
20
20
|
import { DeployApiError, slugFromDirectoryName, validateDeploymentSlug, } from "./deploy-client.js";
|
|
21
21
|
import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
|
|
22
|
+
import { rejectV2ForLegacyCommand } from "./legacy-command-guard.js";
|
|
22
23
|
import { sleep as defaultSleep } from "./sleep.js";
|
|
23
24
|
import { stderrPalette } from "./terminal-style.js";
|
|
24
25
|
/**
|
|
@@ -68,6 +69,13 @@ export function resolveProdTarget(options) {
|
|
|
68
69
|
// without any flag.
|
|
69
70
|
throw new Error(`Could not resolve Cursor credentials/team for the hosted deployment (see above).`);
|
|
70
71
|
}
|
|
72
|
+
if (options.skipLegacyArchitectureCheck !== true) {
|
|
73
|
+
yield rejectV2ForLegacyCommand({
|
|
74
|
+
client: auth.client,
|
|
75
|
+
teamId: auth.teamId,
|
|
76
|
+
slug,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
71
79
|
// A hibernated engine can briefly omit engineAccess while getPod fails
|
|
72
80
|
// during wake. Retry a few times before surfacing "not reachable yet".
|
|
73
81
|
const maxReachabilityAttempts = 5;
|
|
@@ -142,6 +150,11 @@ export function resolveProdAliasPlaygroundUrl(options) {
|
|
|
142
150
|
if (typeof auth === "number") {
|
|
143
151
|
throw new Error(`Could not resolve Cursor credentials/team for the hosted deployment (see above).`);
|
|
144
152
|
}
|
|
153
|
+
yield rejectV2ForLegacyCommand({
|
|
154
|
+
client: auth.client,
|
|
155
|
+
teamId: auth.teamId,
|
|
156
|
+
slug,
|
|
157
|
+
});
|
|
145
158
|
let detail;
|
|
146
159
|
try {
|
|
147
160
|
detail = yield auth.client.getDeployment({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAMnE,gFAAgF;AAChF,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE1E,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,KAAK,CAAC,CAAC,OAAO,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7B;;;;;OAKG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,iBAAiB,EACf,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,OAAO,GACP,iBAAiB,GACjB,YAAY,GACZ,mBAAmB,GACnB,WAAW,GACX,OAAO,CACV,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAcxD;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAA4B,CAAC;AAE7E;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE;IACxD,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,MAAM,GAAG,SAAS,CAYrB;AAED,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAwBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKvE;AAwBD,qBAAa,eAAgB,YAAW,WAAW;IAMrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAElE,YAA6B,OAAO,GAAE,sBAA2B,EAShE;IAEK,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAwC9D;YAEa,cAAc;IA8HtB,KAAK,CAAC,OAAO,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,eAAe,CAAC,CAiB3B;IAED;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAepE;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMpC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAY7B;IAED,OAAO,CAAC,QAAQ;IA0BhB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,GAAG;IAIX;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAmB1B;;;OAGG;YACW,iBAAiB;YA6BjB,SAAS;YAOT,cAAc;YAsCd,cAAc;IA6C5B,OAAO,CAAC,YAAY;IAQpB;;;OAGG;YACW,mBAAmB;IAoBjC,OAAO,CAAC,QAAQ;CAajB;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAMT;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAQpE;
|
|
1
|
+
{"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"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"}
|