@tickernelz/paperclip-pro-plugin-cloudflare-sandbox 2026.925.0
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/LICENSE +22 -0
- package/README.md +48 -0
- package/bridge-template/Dockerfile +14 -0
- package/bridge-template/README.md +50 -0
- package/bridge-template/package.json +24 -0
- package/bridge-template/src/auth.test.ts +30 -0
- package/bridge-template/src/auth.ts +40 -0
- package/bridge-template/src/exec.test.ts +154 -0
- package/bridge-template/src/exec.ts +148 -0
- package/bridge-template/src/helpers.ts +39 -0
- package/bridge-template/src/index.ts +25 -0
- package/bridge-template/src/routes.test.ts +143 -0
- package/bridge-template/src/routes.ts +480 -0
- package/bridge-template/src/sandboxes.test.ts +32 -0
- package/bridge-template/src/sandboxes.ts +57 -0
- package/bridge-template/src/sessions.ts +84 -0
- package/bridge-template/tsconfig.json +11 -0
- package/bridge-template/vitest.config.ts +8 -0
- package/bridge-template/wrangler.jsonc +28 -0
- package/dist/bridge-client.d.ts +39 -0
- package/dist/bridge-client.d.ts.map +1 -0
- package/dist/bridge-client.js +232 -0
- package/dist/bridge-client.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +71 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +4 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +91 -0
- package/dist/manifest.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +273 -0
- package/dist/plugin.js.map +1 -0
- package/dist/types.d.ts +91 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +5 -0
- package/dist/worker.js.map +1 -0
- package/package.json +44 -0
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const PLUGIN_ID = "paperclip.cloudflare-sandbox-provider";
|
|
2
|
+
const PLUGIN_VERSION = "0.1.0";
|
|
3
|
+
const manifest = {
|
|
4
|
+
id: PLUGIN_ID,
|
|
5
|
+
apiVersion: 1,
|
|
6
|
+
version: PLUGIN_VERSION,
|
|
7
|
+
displayName: "Cloudflare Sandbox Provider",
|
|
8
|
+
description: "First-party sandbox provider plugin that provisions Cloudflare sandboxes through an operator-deployed Worker bridge.",
|
|
9
|
+
author: "Paperclip",
|
|
10
|
+
categories: ["automation"],
|
|
11
|
+
capabilities: ["environment.drivers.register"],
|
|
12
|
+
entrypoints: {
|
|
13
|
+
worker: "./dist/worker.js",
|
|
14
|
+
},
|
|
15
|
+
environmentDrivers: [
|
|
16
|
+
{
|
|
17
|
+
driverKey: "cloudflare",
|
|
18
|
+
kind: "sandbox_provider",
|
|
19
|
+
displayName: "Cloudflare Sandbox",
|
|
20
|
+
description: "Runs Paperclip sandbox environments through a Cloudflare Worker bridge backed by the Sandbox SDK and Durable Objects.",
|
|
21
|
+
configSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
bridgeBaseUrl: {
|
|
25
|
+
type: "string",
|
|
26
|
+
format: "uri",
|
|
27
|
+
description: "Base URL of the operator-deployed Cloudflare Worker bridge.",
|
|
28
|
+
},
|
|
29
|
+
bridgeAuthToken: {
|
|
30
|
+
type: "string",
|
|
31
|
+
format: "secret-ref",
|
|
32
|
+
description: "Bearer token used by the provider plugin when calling the Cloudflare bridge. Pasted values are stored as company secrets.",
|
|
33
|
+
},
|
|
34
|
+
reuseLease: {
|
|
35
|
+
type: "boolean",
|
|
36
|
+
default: false,
|
|
37
|
+
description: "Reuse a sandbox by environment ID instead of creating one per run.",
|
|
38
|
+
},
|
|
39
|
+
keepAlive: {
|
|
40
|
+
type: "boolean",
|
|
41
|
+
default: false,
|
|
42
|
+
description: "Prevent Cloudflare from idling the container between requests.",
|
|
43
|
+
},
|
|
44
|
+
sleepAfter: {
|
|
45
|
+
type: "string",
|
|
46
|
+
default: "1h",
|
|
47
|
+
description: "Idle timeout passed to getSandbox() on lease creation. Defaults to 1 hour so a fresh sandbox survives normal Claude/Codex heartbeats. Ignored when keepAlive is true.",
|
|
48
|
+
},
|
|
49
|
+
normalizeId: {
|
|
50
|
+
type: "boolean",
|
|
51
|
+
default: true,
|
|
52
|
+
description: "Lowercase and normalize sandbox IDs for operator-friendly naming.",
|
|
53
|
+
},
|
|
54
|
+
requestedCwd: {
|
|
55
|
+
type: "string",
|
|
56
|
+
default: "/workspace/paperclip",
|
|
57
|
+
description: "Workspace directory to create inside the sandbox lease.",
|
|
58
|
+
},
|
|
59
|
+
sessionStrategy: {
|
|
60
|
+
type: "string",
|
|
61
|
+
enum: ["named", "default"],
|
|
62
|
+
default: "named",
|
|
63
|
+
description: "Whether to run commands in a stable named session or the default session.",
|
|
64
|
+
},
|
|
65
|
+
sessionId: {
|
|
66
|
+
type: "string",
|
|
67
|
+
default: "paperclip",
|
|
68
|
+
description: "Named Cloudflare session ID used when sessionStrategy is named.",
|
|
69
|
+
},
|
|
70
|
+
timeoutMs: {
|
|
71
|
+
type: "number",
|
|
72
|
+
default: 300000,
|
|
73
|
+
description: "Default per-command timeout passed through to the bridge.",
|
|
74
|
+
},
|
|
75
|
+
bridgeRequestTimeoutMs: {
|
|
76
|
+
type: "number",
|
|
77
|
+
default: 30000,
|
|
78
|
+
description: "HTTP timeout for plugin-to-bridge requests.",
|
|
79
|
+
},
|
|
80
|
+
previewHostname: {
|
|
81
|
+
type: "string",
|
|
82
|
+
description: "Optional hostname reserved for future preview URL support.",
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
required: ["bridgeBaseUrl", "bridgeAuthToken"],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
export default manifest;
|
|
91
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAC1D,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,MAAM,QAAQ,GAA8B;IAC1C,EAAE,EAAE,SAAS;IACb,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EACT,sHAAsH;IACxH,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,CAAC,YAAY,CAAC;IAC1B,YAAY,EAAE,CAAC,8BAA8B,CAAC;IAC9C,WAAW,EAAE;QACX,MAAM,EAAE,kBAAkB;KAC3B;IACD,kBAAkB,EAAE;QAClB;YACE,SAAS,EAAE,YAAY;YACvB,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,oBAAoB;YACjC,WAAW,EACT,uHAAuH;YACzH,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,aAAa,EAAE;wBACb,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,KAAK;wBACb,WAAW,EAAE,6DAA6D;qBAC3E;oBACD,eAAe,EAAE;wBACf,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,YAAY;wBACpB,WAAW,EACT,2HAA2H;qBAC9H;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,KAAK;wBACd,WAAW,EAAE,oEAAoE;qBAClF;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,KAAK;wBACd,WAAW,EAAE,gEAAgE;qBAC9E;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,IAAI;wBACb,WAAW,EACT,uKAAuK;qBAC1K;oBACD,WAAW,EAAE;wBACX,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,IAAI;wBACb,WAAW,EAAE,mEAAmE;qBACjF;oBACD,YAAY,EAAE;wBACZ,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,sBAAsB;wBAC/B,WAAW,EAAE,yDAAyD;qBACvE;oBACD,eAAe,EAAE;wBACf,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;wBAC1B,OAAO,EAAE,OAAO;wBAChB,WAAW,EAAE,2EAA2E;qBACzF;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,WAAW;wBACpB,WAAW,EAAE,iEAAiE;qBAC/E;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,MAAM;wBACf,WAAW,EAAE,2DAA2D;qBACzE;oBACD,sBAAsB,EAAE;wBACtB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,KAAK;wBACd,WAAW,EAAE,6CAA6C;qBAC3D;oBACD,eAAe,EAAE;wBACf,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4DAA4D;qBAC1E;iBACF;gBACD,QAAQ,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC;aAC/C;SACF;KACF;CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAkIA,QAAA,MAAM,MAAM,gEAgOV,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { definePlugin } from "@tickernelz/paperclip-pro-plugin-sdk";
|
|
2
|
+
import { CloudflareBridgeError, createCloudflareBridgeClient } from "./bridge-client.js";
|
|
3
|
+
import { parseCloudflareDriverConfig, validateCloudflareDriverConfig, } from "./config.js";
|
|
4
|
+
const SANDBOX_EXEC_CHANNEL_ENV = "PAPERCLIP_SANDBOX_EXEC_CHANNEL";
|
|
5
|
+
const SANDBOX_EXEC_CHANNEL_BRIDGE = "bridge";
|
|
6
|
+
const CLOUDFLARE_EXEC_STDOUT_PREFIX = "[cloudflare exec stdout]";
|
|
7
|
+
const CLOUDFLARE_EXEC_STDERR_PREFIX = "[cloudflare exec stderr]";
|
|
8
|
+
function isLostLeaseError(error) {
|
|
9
|
+
return error instanceof CloudflareBridgeError && (error.status === 404 || error.status === 409);
|
|
10
|
+
}
|
|
11
|
+
function bridgeClientFor(rawConfig) {
|
|
12
|
+
const config = parseCloudflareDriverConfig(rawConfig);
|
|
13
|
+
return {
|
|
14
|
+
config,
|
|
15
|
+
client: createCloudflareBridgeClient({ config }),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function lostLeaseExecuteResult(error) {
|
|
19
|
+
return {
|
|
20
|
+
exitCode: 1,
|
|
21
|
+
timedOut: false,
|
|
22
|
+
signal: null,
|
|
23
|
+
stdout: "",
|
|
24
|
+
stderr: error.message.trim().length > 0
|
|
25
|
+
? `${error.message}\n`
|
|
26
|
+
: "Cloudflare sandbox lease is no longer available.\n",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function readIssueId(value) {
|
|
30
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
31
|
+
}
|
|
32
|
+
function resolveWorkspaceIssueId(params) {
|
|
33
|
+
const directIssueId = readIssueId(params.issueId);
|
|
34
|
+
if (directIssueId)
|
|
35
|
+
return directIssueId;
|
|
36
|
+
const request = params.workspace.metadata?.workspaceRealizationRequest;
|
|
37
|
+
if (!request || typeof request !== "object" || Array.isArray(request))
|
|
38
|
+
return null;
|
|
39
|
+
return readIssueId(request.issueId);
|
|
40
|
+
}
|
|
41
|
+
function wrapWorkspacePreparationError(remoteCwd, error) {
|
|
42
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
43
|
+
return new Error(`Failed to prepare Cloudflare sandbox workspace at ${remoteCwd}: ${message}`);
|
|
44
|
+
}
|
|
45
|
+
function resolveRemoteCwd(config, params) {
|
|
46
|
+
const leaseRemoteCwd = typeof params.lease.metadata?.remoteCwd === "string" && params.lease.metadata.remoteCwd.trim().length > 0
|
|
47
|
+
? params.lease.metadata.remoteCwd.trim()
|
|
48
|
+
: null;
|
|
49
|
+
return leaseRemoteCwd ?? params.workspace.remotePath ?? params.workspace.localPath ?? config.requestedCwd;
|
|
50
|
+
}
|
|
51
|
+
function resolveExecuteSession(config, env) {
|
|
52
|
+
if (env?.[SANDBOX_EXEC_CHANNEL_ENV] !== SANDBOX_EXEC_CHANNEL_BRIDGE) {
|
|
53
|
+
return {
|
|
54
|
+
sessionStrategy: config.sessionStrategy,
|
|
55
|
+
sessionId: config.sessionId,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const baseSessionId = config.sessionId.trim().length > 0 ? config.sessionId : "paperclip";
|
|
59
|
+
return {
|
|
60
|
+
sessionStrategy: "named",
|
|
61
|
+
sessionId: `${baseSessionId}-bridge`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function sanitizeExecuteEnv(env) {
|
|
65
|
+
if (!env || !(SANDBOX_EXEC_CHANNEL_ENV in env)) {
|
|
66
|
+
return env;
|
|
67
|
+
}
|
|
68
|
+
const nextEnv = { ...env };
|
|
69
|
+
delete nextEnv[SANDBOX_EXEC_CHANNEL_ENV];
|
|
70
|
+
return nextEnv;
|
|
71
|
+
}
|
|
72
|
+
function logCloudflareExecChunk(logger, stream, chunk) {
|
|
73
|
+
if (!logger || chunk.length === 0)
|
|
74
|
+
return;
|
|
75
|
+
const lines = chunk
|
|
76
|
+
.replace(/\r\n/g, "\n")
|
|
77
|
+
.split("\n")
|
|
78
|
+
.filter((line) => line.trim().length > 0);
|
|
79
|
+
for (const line of lines) {
|
|
80
|
+
if (stream === "stderr") {
|
|
81
|
+
logger.warn(`${CLOUDFLARE_EXEC_STDERR_PREFIX} ${line}`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
logger.info(`${CLOUDFLARE_EXEC_STDOUT_PREFIX} ${line}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
let pluginLogger = null;
|
|
89
|
+
const plugin = definePlugin({
|
|
90
|
+
async setup(ctx) {
|
|
91
|
+
pluginLogger = ctx.logger;
|
|
92
|
+
ctx.logger.info("Cloudflare sandbox provider plugin ready");
|
|
93
|
+
},
|
|
94
|
+
async onHealth() {
|
|
95
|
+
return { status: "ok", message: "Cloudflare sandbox provider plugin healthy" };
|
|
96
|
+
},
|
|
97
|
+
async onEnvironmentValidateConfig(params) {
|
|
98
|
+
const config = parseCloudflareDriverConfig(params.config);
|
|
99
|
+
const errors = validateCloudflareDriverConfig(config);
|
|
100
|
+
if (errors.length > 0) {
|
|
101
|
+
return { ok: false, errors };
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
ok: true,
|
|
105
|
+
normalizedConfig: { ...config },
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
async onEnvironmentProbe(params) {
|
|
109
|
+
const { config, client } = bridgeClientFor(params.config);
|
|
110
|
+
try {
|
|
111
|
+
const result = await client.probe({
|
|
112
|
+
requestedCwd: config.requestedCwd,
|
|
113
|
+
keepAlive: config.keepAlive,
|
|
114
|
+
sleepAfter: config.sleepAfter,
|
|
115
|
+
normalizeId: config.normalizeId,
|
|
116
|
+
sessionStrategy: config.sessionStrategy,
|
|
117
|
+
sessionId: config.sessionId,
|
|
118
|
+
timeoutMs: config.timeoutMs,
|
|
119
|
+
}, { environmentId: params.environmentId, issueId: params.issueId });
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
124
|
+
return {
|
|
125
|
+
ok: false,
|
|
126
|
+
summary: "Cloudflare sandbox bridge probe failed.",
|
|
127
|
+
metadata: {
|
|
128
|
+
provider: "cloudflare",
|
|
129
|
+
error: message,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
async onEnvironmentAcquireLease(params) {
|
|
135
|
+
const { config, client } = bridgeClientFor(params.config);
|
|
136
|
+
return await client.acquireLease({
|
|
137
|
+
environmentId: params.environmentId,
|
|
138
|
+
runId: params.runId,
|
|
139
|
+
issueId: params.issueId,
|
|
140
|
+
reuseLease: config.reuseLease,
|
|
141
|
+
keepAlive: config.keepAlive,
|
|
142
|
+
sleepAfter: config.sleepAfter,
|
|
143
|
+
normalizeId: config.normalizeId,
|
|
144
|
+
requestedCwd: params.requestedCwd?.trim() || config.requestedCwd,
|
|
145
|
+
sessionStrategy: config.sessionStrategy,
|
|
146
|
+
sessionId: config.sessionId,
|
|
147
|
+
timeoutMs: config.timeoutMs,
|
|
148
|
+
}, { environmentId: params.environmentId, runId: params.runId, issueId: params.issueId });
|
|
149
|
+
},
|
|
150
|
+
async onEnvironmentResumeLease(params) {
|
|
151
|
+
const { config, client } = bridgeClientFor(params.config);
|
|
152
|
+
try {
|
|
153
|
+
return await client.resumeLease({
|
|
154
|
+
providerLeaseId: params.providerLeaseId,
|
|
155
|
+
requestedCwd: typeof params.leaseMetadata?.remoteCwd === "string" && params.leaseMetadata.remoteCwd.trim().length > 0
|
|
156
|
+
? params.leaseMetadata.remoteCwd.trim()
|
|
157
|
+
: config.requestedCwd,
|
|
158
|
+
sessionStrategy: config.sessionStrategy,
|
|
159
|
+
sessionId: config.sessionId,
|
|
160
|
+
keepAlive: config.keepAlive,
|
|
161
|
+
sleepAfter: config.sleepAfter,
|
|
162
|
+
normalizeId: config.normalizeId,
|
|
163
|
+
timeoutMs: config.timeoutMs,
|
|
164
|
+
}, { environmentId: params.environmentId, issueId: params.issueId });
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
if (isLostLeaseError(error)) {
|
|
168
|
+
return {
|
|
169
|
+
providerLeaseId: null,
|
|
170
|
+
metadata: {
|
|
171
|
+
provider: "cloudflare",
|
|
172
|
+
expired: true,
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
async onEnvironmentReleaseLease(params) {
|
|
180
|
+
if (!params.providerLeaseId)
|
|
181
|
+
return;
|
|
182
|
+
const { config, client } = bridgeClientFor(params.config);
|
|
183
|
+
await client.releaseLease({
|
|
184
|
+
providerLeaseId: params.providerLeaseId,
|
|
185
|
+
reuseLease: config.reuseLease,
|
|
186
|
+
keepAlive: config.keepAlive,
|
|
187
|
+
}, { environmentId: params.environmentId, issueId: params.issueId });
|
|
188
|
+
},
|
|
189
|
+
async onEnvironmentDestroyLease(params) {
|
|
190
|
+
if (!params.providerLeaseId)
|
|
191
|
+
return;
|
|
192
|
+
const { client } = bridgeClientFor(params.config);
|
|
193
|
+
await client.destroyLease(params.providerLeaseId, {
|
|
194
|
+
environmentId: params.environmentId,
|
|
195
|
+
issueId: params.issueId,
|
|
196
|
+
});
|
|
197
|
+
},
|
|
198
|
+
async onEnvironmentRealizeWorkspace(params) {
|
|
199
|
+
const { config, client } = bridgeClientFor(params.config);
|
|
200
|
+
const remoteCwd = resolveRemoteCwd(config, params);
|
|
201
|
+
const issueId = resolveWorkspaceIssueId(params);
|
|
202
|
+
if (params.lease.providerLeaseId) {
|
|
203
|
+
try {
|
|
204
|
+
await client.execute({
|
|
205
|
+
providerLeaseId: params.lease.providerLeaseId,
|
|
206
|
+
command: "mkdir",
|
|
207
|
+
args: ["-p", remoteCwd],
|
|
208
|
+
cwd: "/",
|
|
209
|
+
timeoutMs: config.timeoutMs,
|
|
210
|
+
sessionStrategy: config.sessionStrategy,
|
|
211
|
+
sessionId: config.sessionId,
|
|
212
|
+
}, { environmentId: params.environmentId, issueId });
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
throw wrapWorkspacePreparationError(remoteCwd, error);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
cwd: remoteCwd,
|
|
220
|
+
metadata: {
|
|
221
|
+
provider: "cloudflare",
|
|
222
|
+
remoteCwd,
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
},
|
|
226
|
+
async onEnvironmentExecute(params) {
|
|
227
|
+
if (!params.lease.providerLeaseId) {
|
|
228
|
+
return {
|
|
229
|
+
exitCode: 1,
|
|
230
|
+
timedOut: false,
|
|
231
|
+
signal: null,
|
|
232
|
+
stdout: "",
|
|
233
|
+
stderr: "No provider lease ID available for execution.\n",
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
const { config, client } = bridgeClientFor(params.config);
|
|
237
|
+
const session = resolveExecuteSession(config, params.env);
|
|
238
|
+
try {
|
|
239
|
+
// Bridge-channel commands carry machine-consumed stdout (JSON, base64,
|
|
240
|
+
// file contents). The @cloudflare/sandbox SDK's streaming mode can drop
|
|
241
|
+
// the final stdout chunk when the inner shell exits the same tick as it
|
|
242
|
+
// writes (e.g. `cat ready.json && exit 0`), so we never stream for
|
|
243
|
+
// bridge control traffic — only adapter sessions get live log forwarding.
|
|
244
|
+
const isBridgeChannel = params.env?.[SANDBOX_EXEC_CHANNEL_ENV] === SANDBOX_EXEC_CHANNEL_BRIDGE;
|
|
245
|
+
const streamingOptions = pluginLogger && !isBridgeChannel
|
|
246
|
+
? {
|
|
247
|
+
onOutput: async (stream, chunk) => {
|
|
248
|
+
logCloudflareExecChunk(pluginLogger, stream, chunk);
|
|
249
|
+
},
|
|
250
|
+
}
|
|
251
|
+
: undefined;
|
|
252
|
+
return await client.execute({
|
|
253
|
+
providerLeaseId: params.lease.providerLeaseId,
|
|
254
|
+
command: params.command,
|
|
255
|
+
args: params.args,
|
|
256
|
+
cwd: params.cwd,
|
|
257
|
+
env: sanitizeExecuteEnv(params.env),
|
|
258
|
+
stdin: params.stdin ?? null,
|
|
259
|
+
timeoutMs: params.timeoutMs ?? config.timeoutMs,
|
|
260
|
+
sessionStrategy: session.sessionStrategy,
|
|
261
|
+
sessionId: session.sessionId,
|
|
262
|
+
}, { environmentId: params.environmentId, issueId: params.issueId }, streamingOptions);
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
if (error instanceof CloudflareBridgeError && isLostLeaseError(error)) {
|
|
266
|
+
return lostLeaseExecuteResult(error);
|
|
267
|
+
}
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
export default plugin;
|
|
273
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAiBpE,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AAErB,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAC7C,MAAM,6BAA6B,GAAG,0BAA0B,CAAC;AACjE,MAAM,6BAA6B,GAAG,0BAA0B,CAAC;AAEjE,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,qBAAqB,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,eAAe,CAAC,SAAkC;IACzD,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACtD,OAAO;QACL,MAAM;QACN,MAAM,EAAE,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAA4B;IAC1D,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,EAAE;QACV,MAAM,EACJ,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI;YACtB,CAAC,CAAC,oDAAoD;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA+C;IAC9E,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IACvE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACnF,OAAO,WAAW,CAAE,OAAiC,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,6BAA6B,CAAC,SAAiB,EAAE,KAAc;IACtE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,IAAI,KAAK,CAAC,qDAAqD,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAsD,EACtD,MAA+C;IAE/C,MAAM,cAAc,GAClB,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACvG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;QACxC,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC;AAC5G,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAsD,EACtD,GAAuC;IAEvC,IAAI,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,2BAA2B,EAAE,CAAC;QACpE,OAAO;YACL,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,SAAS,EAAE,MAAM,CAAC,SAAS;SACnB,CAAC;IACb,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1F,OAAO;QACL,eAAe,EAAE,OAAgB;QACjC,SAAS,EAAE,GAAG,aAAa,SAAS;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAuC;IACjE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,wBAAwB,IAAI,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAA2B,EAC3B,MAA2B,EAC3B,KAAa;IAEb,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC1C,MAAM,KAAK,GAAG,KAAK;SAChB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;SACtB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,GAAG,6BAA6B,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,6BAA6B,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,GAAG;QACb,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC/B,MAA6C;QAE7C,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,gBAAgB,EAAE,EAAE,GAAG,MAAM,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAoC;QAEpC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B;gBACE,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,EACD,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CACjE,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,yCAAyC;gBAClD,QAAQ,EAAE;oBACR,QAAQ,EAAE,YAAY;oBACtB,KAAK,EAAE,OAAO;iBACf;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAA2C;QAE3C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,MAAM,MAAM,CAAC,YAAY,CAC9B;YACE,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,YAAY;YAChE,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,EACD,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CACtF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,MAA0C;QAE1C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,WAAW,CAC7B;gBACE,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,YAAY,EACV,OAAO,MAAM,CAAC,aAAa,EAAE,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;oBACrG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE;oBACvC,CAAC,CAAC,MAAM,CAAC,YAAY;gBACzB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,EACD,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CACjE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO;oBACL,eAAe,EAAE,IAAI;oBACrB,QAAQ,EAAE;wBACR,QAAQ,EAAE,YAAY;wBACtB,OAAO,EAAE,IAAI;qBACd;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAA2C;QAE3C,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO;QACpC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,MAAM,CAAC,YAAY,CACvB;YACE,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,EACD,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CACjE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAA2C;QAE3C,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO;QACpC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,EAAE;YAChD,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,6BAA6B,CACjC,MAA+C;QAE/C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,CAClB;oBACE,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe;oBAC7C,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;oBACvB,GAAG,EAAE,GAAG;oBACR,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,EACD,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,CACjD,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,6BAA6B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,OAAO;YACL,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE;gBACR,QAAQ,EAAE,YAAY;gBACtB,SAAS;aACV;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,MAAsC;QAEtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAClC,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,iDAAiD;aAC1D,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,uEAAuE;YACvE,wEAAwE;YACxE,wEAAwE;YACxE,mEAAmE;YACnE,0EAA0E;YAC1E,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,2BAA2B,CAAC;YAC/F,MAAM,gBAAgB,GAAG,YAAY,IAAI,CAAC,eAAe;gBACvD,CAAC,CAAC;oBACE,QAAQ,EAAE,KAAK,EAAE,MAA2B,EAAE,KAAa,EAAE,EAAE;wBAC7D,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;oBACtD,CAAC;iBACF;gBACH,CAAC,CAAC,SAAS,CAAC;YACd,OAAO,MAAM,MAAM,CAAC,OAAO,CACzB;gBACE,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe;gBAC7C,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,GAAG,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC;gBACnC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;gBAC/C,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,EACD,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAChE,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAqB,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export interface CloudflareDriverConfig {
|
|
2
|
+
bridgeBaseUrl: string;
|
|
3
|
+
bridgeAuthToken: string;
|
|
4
|
+
reuseLease: boolean;
|
|
5
|
+
keepAlive: boolean;
|
|
6
|
+
sleepAfter: string;
|
|
7
|
+
normalizeId: boolean;
|
|
8
|
+
requestedCwd: string;
|
|
9
|
+
sessionStrategy: "named" | "default";
|
|
10
|
+
sessionId: string;
|
|
11
|
+
timeoutMs: number;
|
|
12
|
+
bridgeRequestTimeoutMs: number;
|
|
13
|
+
previewHostname: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface CloudflareBridgeHealthResponse {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
provider: "cloudflare";
|
|
18
|
+
bridgeVersion: string;
|
|
19
|
+
capabilities: {
|
|
20
|
+
reuseLease: boolean;
|
|
21
|
+
namedSessions: boolean;
|
|
22
|
+
previewUrls: boolean;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface CloudflareBridgeProbeRequest {
|
|
26
|
+
requestedCwd: string;
|
|
27
|
+
keepAlive: boolean;
|
|
28
|
+
sleepAfter: string;
|
|
29
|
+
normalizeId: boolean;
|
|
30
|
+
sessionStrategy: CloudflareDriverConfig["sessionStrategy"];
|
|
31
|
+
sessionId: string;
|
|
32
|
+
timeoutMs: number;
|
|
33
|
+
}
|
|
34
|
+
export interface CloudflareBridgeProbeResponse {
|
|
35
|
+
ok: boolean;
|
|
36
|
+
summary: string;
|
|
37
|
+
metadata?: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export interface CloudflareBridgeAcquireLeaseRequest {
|
|
40
|
+
environmentId: string;
|
|
41
|
+
runId: string;
|
|
42
|
+
issueId?: string | null;
|
|
43
|
+
reuseLease: boolean;
|
|
44
|
+
keepAlive: boolean;
|
|
45
|
+
sleepAfter: string;
|
|
46
|
+
normalizeId: boolean;
|
|
47
|
+
requestedCwd: string;
|
|
48
|
+
sessionStrategy: CloudflareDriverConfig["sessionStrategy"];
|
|
49
|
+
sessionId: string;
|
|
50
|
+
timeoutMs: number;
|
|
51
|
+
}
|
|
52
|
+
export interface CloudflareBridgeResumeLeaseRequest {
|
|
53
|
+
providerLeaseId: string;
|
|
54
|
+
requestedCwd: string;
|
|
55
|
+
sessionStrategy: CloudflareDriverConfig["sessionStrategy"];
|
|
56
|
+
sessionId: string;
|
|
57
|
+
keepAlive: boolean;
|
|
58
|
+
sleepAfter: string;
|
|
59
|
+
normalizeId: boolean;
|
|
60
|
+
timeoutMs: number;
|
|
61
|
+
}
|
|
62
|
+
export interface CloudflareBridgeReleaseLeaseRequest {
|
|
63
|
+
providerLeaseId: string;
|
|
64
|
+
reuseLease: boolean;
|
|
65
|
+
keepAlive: boolean;
|
|
66
|
+
}
|
|
67
|
+
export interface CloudflareBridgeLeaseResponse {
|
|
68
|
+
providerLeaseId: string;
|
|
69
|
+
metadata?: Record<string, unknown>;
|
|
70
|
+
}
|
|
71
|
+
export interface CloudflareBridgeExecuteRequest {
|
|
72
|
+
providerLeaseId: string;
|
|
73
|
+
command: string;
|
|
74
|
+
args?: string[];
|
|
75
|
+
cwd?: string;
|
|
76
|
+
env?: Record<string, string>;
|
|
77
|
+
stdin?: string | null;
|
|
78
|
+
timeoutMs?: number;
|
|
79
|
+
streamOutput?: boolean;
|
|
80
|
+
sessionStrategy: CloudflareDriverConfig["sessionStrategy"];
|
|
81
|
+
sessionId: string;
|
|
82
|
+
}
|
|
83
|
+
export interface CloudflareBridgeExecuteResponse {
|
|
84
|
+
exitCode: number | null;
|
|
85
|
+
signal?: string | null;
|
|
86
|
+
timedOut: boolean;
|
|
87
|
+
stdout: string;
|
|
88
|
+
stderr: string;
|
|
89
|
+
metadata?: Record<string, unknown>;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/worker.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,eAAe,MAAM,CAAC"}
|
package/dist/worker.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,eAAe,MAAM,CAAC;AACtB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tickernelz/paperclip-pro-plugin-cloudflare-sandbox",
|
|
3
|
+
"version": "2026.925.0",
|
|
4
|
+
"description": "Cloudflare sandbox provider plugin for Paperclip environments",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://github.com/tickernelz/paperclip-pro",
|
|
7
|
+
"bugs": {
|
|
8
|
+
"url": "https://github.com/tickernelz/paperclip-pro/issues"
|
|
9
|
+
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/tickernelz/paperclip-pro",
|
|
13
|
+
"directory": "packages/plugins/sandbox-providers/cloudflare"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"bridge-template"
|
|
30
|
+
],
|
|
31
|
+
"paperclipPlugin": {
|
|
32
|
+
"manifest": "./dist/manifest.js",
|
|
33
|
+
"worker": "./dist/worker.js"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"paperclip",
|
|
37
|
+
"plugin",
|
|
38
|
+
"sandbox",
|
|
39
|
+
"cloudflare"
|
|
40
|
+
],
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@tickernelz/paperclip-pro-plugin-sdk": "2026.925.0"
|
|
43
|
+
}
|
|
44
|
+
}
|