@usine/executor 0.3.0 → 0.4.1-next.240.g158c84b
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 +661 -21
- package/README.md +116 -19
- package/dist/child-command.d.ts +1 -1
- package/dist/child-command.d.ts.map +1 -1
- package/dist/child-command.js +6 -4
- package/dist/child-command.js.map +1 -1
- package/dist/child-environment.d.ts +19 -0
- package/dist/child-environment.d.ts.map +1 -0
- package/dist/child-environment.js +18 -0
- package/dist/child-environment.js.map +1 -0
- package/dist/claude-login-lock.d.ts +3 -2
- package/dist/claude-login-lock.d.ts.map +1 -1
- package/dist/claude-login-lock.js +10 -4
- package/dist/claude-login-lock.js.map +1 -1
- package/dist/cloudflare/client.d.ts +50 -0
- package/dist/cloudflare/client.d.ts.map +1 -0
- package/dist/cloudflare/client.js +108 -0
- package/dist/cloudflare/client.js.map +1 -0
- package/dist/cloudflare/cloudflare.d.ts +17 -0
- package/dist/cloudflare/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare/cloudflare.js +704 -0
- package/dist/cloudflare/cloudflare.js.map +1 -0
- package/dist/cloudflare/model.d.ts +42 -0
- package/dist/cloudflare/model.d.ts.map +1 -0
- package/dist/cloudflare/model.js +2 -0
- package/dist/cloudflare/model.js.map +1 -0
- package/dist/cloudflare/shell/environment.d.ts +12 -0
- package/dist/cloudflare/shell/environment.d.ts.map +1 -0
- package/dist/cloudflare/shell/environment.js +12 -0
- package/dist/cloudflare/shell/environment.js.map +1 -0
- package/dist/cloudflare/shell/shell.d.ts +2 -0
- package/dist/cloudflare/shell/shell.d.ts.map +1 -0
- package/dist/cloudflare/shell/shell.js +155 -0
- package/dist/cloudflare/shell/shell.js.map +1 -0
- package/dist/durable-session.d.ts +21 -3
- package/dist/durable-session.d.ts.map +1 -1
- package/dist/durable-session.js +69 -10
- package/dist/durable-session.js.map +1 -1
- package/dist/exe-dev/commands.d.ts +1 -1
- package/dist/exe-dev/commands.d.ts.map +1 -1
- package/dist/exe-dev/exe-dev.d.ts +1 -1
- package/dist/exe-dev/exe-dev.d.ts.map +1 -1
- package/dist/exe-dev/exe-dev.js +9 -1
- package/dist/exe-dev/exe-dev.js.map +1 -1
- package/dist/exe-dev/preflight.d.ts +2 -2
- package/dist/exe-dev/preflight.d.ts.map +1 -1
- package/dist/exe-dev/preflight.js +5 -4
- package/dist/exe-dev/preflight.js.map +1 -1
- package/dist/executor.d.ts +164 -15
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +100 -3
- package/dist/executor.js.map +1 -1
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +1 -0
- package/dist/guard.js.map +1 -1
- package/dist/harness-preflight.d.ts +9 -8
- package/dist/harness-preflight.d.ts.map +1 -1
- package/dist/harness-preflight.js +15 -10
- package/dist/harness-preflight.js.map +1 -1
- package/dist/local/local.d.ts +1 -1
- package/dist/local/local.d.ts.map +1 -1
- package/dist/local/local.js +76 -37
- package/dist/local/local.js.map +1 -1
- package/dist/memory-preflight.d.ts +3 -1
- package/dist/memory-preflight.d.ts.map +1 -1
- package/dist/memory-preflight.js +1 -1
- package/dist/memory-preflight.js.map +1 -1
- package/dist/pre-push-hook.d.ts +1 -1
- package/dist/pre-push-hook.js +1 -1
- package/dist/prepared-attempt.d.ts +8 -0
- package/dist/prepared-attempt.d.ts.map +1 -1
- package/dist/prepared-attempt.js.map +1 -1
- package/dist/provision.d.ts +64 -13
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +99 -42
- package/dist/provision.js.map +1 -1
- package/dist/remote/commands.d.ts +1 -1
- package/dist/remote/commands.d.ts.map +1 -1
- package/dist/remote/commands.js +1 -1
- package/dist/remote/commands.js.map +1 -1
- package/dist/remote/container.d.ts +90 -0
- package/dist/remote/container.d.ts.map +1 -0
- package/dist/remote/container.js +480 -0
- package/dist/remote/container.js.map +1 -0
- package/dist/remote/liveness.d.ts +1 -1
- package/dist/remote/liveness.d.ts.map +1 -1
- package/dist/remote/liveness.js +6 -4
- package/dist/remote/liveness.js.map +1 -1
- package/dist/remote/machine.d.ts +52 -6
- package/dist/remote/machine.d.ts.map +1 -1
- package/dist/remote/remote.d.ts +11 -7
- package/dist/remote/remote.d.ts.map +1 -1
- package/dist/remote/remote.js +340 -92
- package/dist/remote/remote.js.map +1 -1
- package/dist/remote/sweep.d.ts +3 -1
- package/dist/remote/sweep.d.ts.map +1 -1
- package/dist/remote/sweep.js +2 -1
- package/dist/remote/sweep.js.map +1 -1
- package/dist/salvage.d.ts +18 -10
- package/dist/salvage.d.ts.map +1 -1
- package/dist/salvage.js +123 -29
- package/dist/salvage.js.map +1 -1
- package/dist/ssh/api-keys.d.ts +36 -0
- package/dist/ssh/api-keys.d.ts.map +1 -0
- package/dist/ssh/api-keys.js +72 -0
- package/dist/ssh/api-keys.js.map +1 -0
- package/dist/ssh/codex-homes.d.ts +21 -0
- package/dist/ssh/codex-homes.d.ts.map +1 -0
- package/dist/ssh/codex-homes.js +78 -0
- package/dist/ssh/codex-homes.js.map +1 -0
- package/dist/ssh/container.d.ts +32 -0
- package/dist/ssh/container.d.ts.map +1 -0
- package/dist/ssh/container.js +282 -0
- package/dist/ssh/container.js.map +1 -0
- package/dist/ssh/credentials.d.ts +3 -0
- package/dist/ssh/credentials.d.ts.map +1 -1
- package/dist/ssh/credentials.js +3 -0
- package/dist/ssh/credentials.js.map +1 -1
- package/dist/ssh/gateway/admin.d.ts +1 -1
- package/dist/ssh/gateway/admin.d.ts.map +1 -1
- package/dist/ssh/gateway/admin.js +2 -2
- package/dist/ssh/gateway/admin.js.map +1 -1
- package/dist/ssh/gateway/attachments.d.ts +15 -6
- package/dist/ssh/gateway/attachments.d.ts.map +1 -1
- package/dist/ssh/gateway/attachments.js +39 -25
- package/dist/ssh/gateway/attachments.js.map +1 -1
- package/dist/ssh/gateway/environment.d.ts +21 -2
- package/dist/ssh/gateway/environment.d.ts.map +1 -1
- package/dist/ssh/gateway/environment.js +76 -6
- package/dist/ssh/gateway/environment.js.map +1 -1
- package/dist/ssh/gateway/forward.d.ts +1 -1
- package/dist/ssh/gateway/forward.d.ts.map +1 -1
- package/dist/ssh/gateway/forward.js +1 -1
- package/dist/ssh/gateway/forward.js.map +1 -1
- package/dist/ssh/gateway/preflight.d.ts +51 -12
- package/dist/ssh/gateway/preflight.d.ts.map +1 -1
- package/dist/ssh/gateway/preflight.js +155 -69
- package/dist/ssh/gateway/preflight.js.map +1 -1
- package/dist/ssh/limits.d.ts +60 -0
- package/dist/ssh/limits.d.ts.map +1 -0
- package/dist/ssh/limits.js +84 -0
- package/dist/ssh/limits.js.map +1 -0
- package/dist/ssh/model.d.ts +97 -9
- package/dist/ssh/model.d.ts.map +1 -1
- package/dist/ssh/preflight.d.ts +26 -7
- package/dist/ssh/preflight.d.ts.map +1 -1
- package/dist/ssh/preflight.js +50 -10
- package/dist/ssh/preflight.js.map +1 -1
- package/dist/ssh/provisioner/boat.d.ts +33 -0
- package/dist/ssh/provisioner/boat.d.ts.map +1 -0
- package/dist/ssh/provisioner/boat.js +247 -0
- package/dist/ssh/provisioner/boat.js.map +1 -0
- package/dist/ssh/provisioner/hetzner.d.ts +32 -0
- package/dist/ssh/provisioner/hetzner.d.ts.map +1 -0
- package/dist/ssh/provisioner/hetzner.js +337 -0
- package/dist/ssh/provisioner/hetzner.js.map +1 -0
- package/dist/ssh/provisioner/host-key.d.ts +11 -0
- package/dist/ssh/provisioner/host-key.d.ts.map +1 -0
- package/dist/ssh/provisioner/host-key.js +57 -0
- package/dist/ssh/provisioner/host-key.js.map +1 -0
- package/dist/ssh/provisioner/http.d.ts +45 -0
- package/dist/ssh/provisioner/http.d.ts.map +1 -0
- package/dist/ssh/provisioner/http.js +72 -0
- package/dist/ssh/provisioner/http.js.map +1 -0
- package/dist/ssh/provisioner/machines.d.ts +48 -0
- package/dist/ssh/provisioner/machines.d.ts.map +1 -0
- package/dist/ssh/provisioner/machines.js +686 -0
- package/dist/ssh/provisioner/machines.js.map +1 -0
- package/dist/ssh/provisioner/model.d.ts +92 -0
- package/dist/ssh/provisioner/model.d.ts.map +1 -0
- package/dist/ssh/provisioner/model.js +37 -0
- package/dist/ssh/provisioner/model.js.map +1 -0
- package/dist/ssh/ssh.d.ts +14 -11
- package/dist/ssh/ssh.d.ts.map +1 -1
- package/dist/ssh/ssh.js +94 -27
- package/dist/ssh/ssh.js.map +1 -1
- package/dist/ssh/worker-records.d.ts +18 -0
- package/dist/ssh/worker-records.d.ts.map +1 -0
- package/dist/ssh/worker-records.js +100 -0
- package/dist/ssh/worker-records.js.map +1 -0
- package/dist/ssh/workers.d.ts +34 -7
- package/dist/ssh/workers.d.ts.map +1 -1
- package/dist/ssh/workers.js +92 -18
- package/dist/ssh/workers.js.map +1 -1
- package/package.json +19 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/cloudflare/cloudflare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { SshCommand } from "@usine/agents/child-host";
|
|
2
|
+
import type { CloudflareImageName, CloudflareInstanceType, CloudflareLlmProvider, WorkerName } from "@usine/core/worker";
|
|
3
|
+
import type { Duration, Effect, Redacted } from "effect";
|
|
4
|
+
/** A provider API key that the Worker's outbound handler holds for each Attempt. */
|
|
5
|
+
export interface CloudflareProviderKey {
|
|
6
|
+
readonly provider: CloudflareLlmProvider;
|
|
7
|
+
readonly apiKey: Redacted.Redacted<string>;
|
|
8
|
+
}
|
|
9
|
+
/** How the executor reaches one `cloudflare` Worker's deployed Worker and what it runs there. */
|
|
10
|
+
export interface CloudflareWorkerAddress {
|
|
11
|
+
readonly name: WorkerName;
|
|
12
|
+
/** The deployed Worker's origin. */
|
|
13
|
+
readonly workerUrl: URL;
|
|
14
|
+
readonly accessClientId: Redacted.Redacted<string>;
|
|
15
|
+
readonly accessClientSecret: Redacted.Redacted<string>;
|
|
16
|
+
readonly image: CloudflareImageName;
|
|
17
|
+
readonly instanceType: CloudflareInstanceType;
|
|
18
|
+
/** At most one key per provider. */
|
|
19
|
+
readonly providers: ReadonlyArray<CloudflareProviderKey>;
|
|
20
|
+
}
|
|
21
|
+
export interface CloudflareExecutorOptions {
|
|
22
|
+
readonly workers: ReadonlyArray<CloudflareWorkerAddress>;
|
|
23
|
+
/**
|
|
24
|
+
* The identity of this usine instance, in kebab case, such as `github-app-123`. It's part of
|
|
25
|
+
* each sandbox's owner and name, so that orphan cleanup removes only this instance's sandboxes
|
|
26
|
+
* when instances share a deployed Worker.
|
|
27
|
+
*/
|
|
28
|
+
readonly instance: string;
|
|
29
|
+
/**
|
|
30
|
+
* The local command that runs one command in a sandbox, with the arguments of an SSH client.
|
|
31
|
+
* Defaults to this package's `shell.js` under the running Node.js.
|
|
32
|
+
*/
|
|
33
|
+
readonly shell?: SshCommand;
|
|
34
|
+
/** The timeout for the parent task's cancellation, then separately for the Attempt to finish. Defaults to 10 seconds. */
|
|
35
|
+
readonly interruptGrace?: Parameters<typeof Effect.timeoutOption>[1];
|
|
36
|
+
/**
|
|
37
|
+
* How often a running Attempt asks the Worker whether the platform is stopping its sandbox's
|
|
38
|
+
* container, which it does up to 15 minutes after SIGTERM. Defaults to 30 seconds.
|
|
39
|
+
*/
|
|
40
|
+
readonly drainPollInterval?: Duration.Input;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/cloudflare/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEzD,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,iGAAiG;AACjG,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAC9C,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,yHAAyH;IACzH,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/cloudflare/model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The variables of the sandbox shell's process environment: the Worker's origin and the Access
|
|
3
|
+
* service token. They never appear in its arguments, so process listings don't show the token.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SHELL_ENVIRONMENT: {
|
|
6
|
+
readonly workerUrl: "USINE_SANDBOX_WORKER_URL";
|
|
7
|
+
readonly accessClientId: "USINE_SANDBOX_ACCESS_CLIENT_ID";
|
|
8
|
+
readonly accessClientSecret: "USINE_SANDBOX_ACCESS_CLIENT_SECRET";
|
|
9
|
+
};
|
|
10
|
+
/** The exit code of the sandbox shell when it can't reach the sandbox or follow its command, as OpenSSH uses it. */
|
|
11
|
+
export declare const SHELL_FAILURE = 255;
|
|
12
|
+
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/cloudflare/shell/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,iBAAiB;aAC5B,SAAS,EAAE,0BAA0B;aACrC,cAAc,EAAE,gCAAgC;aAChD,kBAAkB,EAAE,oCAAoC;CAChD,CAAC;AAEX,oHAAoH;AACpH,eAAO,MAAM,aAAa,MAAM,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The variables of the sandbox shell's process environment: the Worker's origin and the Access
|
|
3
|
+
* service token. They never appear in its arguments, so process listings don't show the token.
|
|
4
|
+
*/
|
|
5
|
+
export const SHELL_ENVIRONMENT = {
|
|
6
|
+
workerUrl: "USINE_SANDBOX_WORKER_URL",
|
|
7
|
+
accessClientId: "USINE_SANDBOX_ACCESS_CLIENT_ID",
|
|
8
|
+
accessClientSecret: "USINE_SANDBOX_ACCESS_CLIENT_SECRET",
|
|
9
|
+
};
|
|
10
|
+
/** The exit code of the sandbox shell when it can't reach the sandbox or follow its command, as OpenSSH uses it. */
|
|
11
|
+
export const SHELL_FAILURE = 255;
|
|
12
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/cloudflare/shell/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS,EAAE,0BAA0B;IACrC,cAAc,EAAE,gCAAgC;IAChD,kBAAkB,EAAE,oCAAoC;CAChD,CAAC;AAEX,oHAAoH;AACpH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/cloudflare/shell/shell.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sandbox shell: a stand-in for `ssh` that runs one command in a Cloudflare sandbox through
|
|
3
|
+
* the Worker's exec stream. It takes an SSH client's arguments, `[options] <sandbox> -- <command>`,
|
|
4
|
+
* relays stdin, stdout, and stderr, and exits with the command's exit code, or 255 if it can't
|
|
5
|
+
* reach the sandbox or follow the command. The executor uses it as a `RemoteShell`'s SSH command,
|
|
6
|
+
* so children and git commands run in a sandbox as they run over SSH.
|
|
7
|
+
*
|
|
8
|
+
* If the stream drops after the command started, it attaches to the command's output from the
|
|
9
|
+
* bytes it already wrote, a few times, so a short network failure doesn't lose an exit code. The
|
|
10
|
+
* command's stdin is closed at that point, as it is when an SSH connection drops.
|
|
11
|
+
*/
|
|
12
|
+
// Imports only light modules: this program starts once per command in a sandbox.
|
|
13
|
+
import { ACCESS_CLIENT_ID_HEADER, ACCESS_CLIENT_SECRET_HEADER, attachPath, decodeOutputFrame, decodeServerMessage, encodeClientMessage, ExecStart, execPath, SandboxName, StdinEnd, } from "@usine/cloudflare/stream";
|
|
14
|
+
import * as Option from "effect/Option";
|
|
15
|
+
import * as Schema from "effect/Schema";
|
|
16
|
+
import { SHELL_ENVIRONMENT, SHELL_FAILURE } from "./environment.js";
|
|
17
|
+
const Settings = Schema.Struct({
|
|
18
|
+
[SHELL_ENVIRONMENT.workerUrl]: Schema.URLFromString,
|
|
19
|
+
[SHELL_ENVIRONMENT.accessClientId]: Schema.NonEmptyString,
|
|
20
|
+
[SHELL_ENVIRONMENT.accessClientSecret]: Schema.NonEmptyString,
|
|
21
|
+
});
|
|
22
|
+
/** The delays before each attach to a command whose stream dropped, in milliseconds. */
|
|
23
|
+
const REATTACH_DELAYS = [500, 1_000, 2_000, 4_000, 8_000];
|
|
24
|
+
/** The time a stream has to open, in milliseconds. */
|
|
25
|
+
const OPEN_TIMEOUT = 30_000;
|
|
26
|
+
const openSocket = (url, init) =>
|
|
27
|
+
// SAFETY: Node.js's global WebSocket (undici) takes a WebSocketInit with headers as its second
|
|
28
|
+
// argument from Node.js 22; lib.dom's declaration lists only subprotocols there.
|
|
29
|
+
new WebSocket(url, init);
|
|
30
|
+
const finish = (code, message) => {
|
|
31
|
+
if (message !== undefined)
|
|
32
|
+
process.stderr.write(`usine sandbox shell: ${message}\n`);
|
|
33
|
+
process.stdout.write("", () => process.stderr.write("", () => process.exit(code)));
|
|
34
|
+
};
|
|
35
|
+
const separator = process.argv.indexOf("--");
|
|
36
|
+
const destination = Schema.decodeUnknownOption(SandboxName)(process.argv[separator - 1]);
|
|
37
|
+
const command = process.argv[separator + 1];
|
|
38
|
+
const settings = Schema.decodeUnknownOption(Settings)(process.env);
|
|
39
|
+
if (separator < 0 || Option.isNone(destination) || command === undefined || command === "")
|
|
40
|
+
finish(SHELL_FAILURE, "expected [options] <sandbox> -- <command>");
|
|
41
|
+
else if (Option.isNone(settings))
|
|
42
|
+
finish(SHELL_FAILURE, `set ${Object.values(SHELL_ENVIRONMENT).join(", ")} in the environment`);
|
|
43
|
+
else {
|
|
44
|
+
const { [SHELL_ENVIRONMENT.workerUrl]: worker } = settings.value;
|
|
45
|
+
const init = {
|
|
46
|
+
headers: {
|
|
47
|
+
[ACCESS_CLIENT_ID_HEADER]: settings.value[SHELL_ENVIRONMENT.accessClientId],
|
|
48
|
+
[ACCESS_CLIENT_SECRET_HEADER]: settings.value[SHELL_ENVIRONMENT.accessClientSecret],
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
const written = { stdout: 0, stderr: 0 };
|
|
52
|
+
let stdinOpen = true;
|
|
53
|
+
/**
|
|
54
|
+
* Where stdin goes: buffered until the exec stream opens, then to it. Once that stream ends,
|
|
55
|
+
* stdin is dropped, as a dropped SSH connection drops it.
|
|
56
|
+
*/
|
|
57
|
+
let stdinTarget = { _tag: "Buffering", chunks: [] };
|
|
58
|
+
process.stdin.on("data", (chunk) => {
|
|
59
|
+
const bytes = new Uint8Array(chunk);
|
|
60
|
+
if (stdinTarget._tag === "Buffering")
|
|
61
|
+
stdinTarget.chunks.push(bytes);
|
|
62
|
+
if (stdinTarget._tag === "Streaming")
|
|
63
|
+
stdinTarget.socket.send(bytes);
|
|
64
|
+
});
|
|
65
|
+
process.stdin.on("end", () => {
|
|
66
|
+
stdinOpen = false;
|
|
67
|
+
if (stdinTarget._tag === "Streaming")
|
|
68
|
+
stdinTarget.socket.send(encodeClientMessage(new StdinEnd()));
|
|
69
|
+
});
|
|
70
|
+
/** Opens one exec or attach stream and resolves when it ends. */
|
|
71
|
+
const stream = (url, start) => new Promise((resolve) => {
|
|
72
|
+
const socket = openSocket(new URL(url.href.replace(/^http/u, "ws")), init);
|
|
73
|
+
socket.binaryType = "arraybuffer";
|
|
74
|
+
let process_ = Option.none();
|
|
75
|
+
let settled = false;
|
|
76
|
+
const settle = (outcome) => {
|
|
77
|
+
if (settled)
|
|
78
|
+
return;
|
|
79
|
+
settled = true;
|
|
80
|
+
clearTimeout(timer);
|
|
81
|
+
if (start._tag === "Some")
|
|
82
|
+
stdinTarget = { _tag: "Dropped" };
|
|
83
|
+
resolve(outcome);
|
|
84
|
+
socket.close();
|
|
85
|
+
};
|
|
86
|
+
const timer = setTimeout(() => settle({ _tag: "Dropped", process: process_, reason: "the stream didn't open in time" }), OPEN_TIMEOUT);
|
|
87
|
+
socket.addEventListener("open", () => {
|
|
88
|
+
clearTimeout(timer);
|
|
89
|
+
Option.match(start, {
|
|
90
|
+
onNone: () => undefined,
|
|
91
|
+
onSome: (line) => {
|
|
92
|
+
socket.send(encodeClientMessage(new ExecStart({ command: line })));
|
|
93
|
+
if (stdinTarget._tag === "Buffering")
|
|
94
|
+
for (const chunk of stdinTarget.chunks)
|
|
95
|
+
socket.send(chunk);
|
|
96
|
+
stdinTarget = { _tag: "Streaming", socket };
|
|
97
|
+
if (!stdinOpen)
|
|
98
|
+
socket.send(encodeClientMessage(new StdinEnd()));
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
socket.addEventListener("message", (event) => {
|
|
103
|
+
if (event.data instanceof ArrayBuffer) {
|
|
104
|
+
Option.map(decodeOutputFrame(new Uint8Array(event.data)), ({ channel, bytes }) => {
|
|
105
|
+
written[channel] += bytes.length;
|
|
106
|
+
(channel === "stdout" ? process.stdout : process.stderr).write(bytes);
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
Option.map(decodeServerMessage(String(event.data)), (message) => {
|
|
111
|
+
switch (message._tag) {
|
|
112
|
+
case "Started":
|
|
113
|
+
process_ = Option.some(message.process);
|
|
114
|
+
return;
|
|
115
|
+
case "Exited":
|
|
116
|
+
return settle({ _tag: "Exited", exitCode: message.exitCode });
|
|
117
|
+
case "StreamFailed":
|
|
118
|
+
return settle({ _tag: "Failed", message: message.message });
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
socket.addEventListener("close", (event) => settle({
|
|
123
|
+
_tag: "Dropped",
|
|
124
|
+
process: process_,
|
|
125
|
+
reason: `the stream closed with code ${String(event.code)}`,
|
|
126
|
+
}));
|
|
127
|
+
socket.addEventListener("error", () => settle({ _tag: "Dropped", process: process_, reason: "the stream failed" }));
|
|
128
|
+
});
|
|
129
|
+
const main = async () => {
|
|
130
|
+
const name = destination.value;
|
|
131
|
+
let outcome = await stream(new URL(execPath(name), worker), Option.some(command));
|
|
132
|
+
for (const delay of REATTACH_DELAYS) {
|
|
133
|
+
if (outcome._tag !== "Dropped" || Option.isNone(outcome.process))
|
|
134
|
+
break;
|
|
135
|
+
const process = outcome.process.value;
|
|
136
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
137
|
+
const url = new URL(attachPath(name, process), worker);
|
|
138
|
+
url.searchParams.set("stdout", String(written.stdout));
|
|
139
|
+
url.searchParams.set("stderr", String(written.stderr));
|
|
140
|
+
const attached = await stream(url, Option.none());
|
|
141
|
+
outcome =
|
|
142
|
+
attached._tag === "Dropped" ? { ...attached, process: Option.some(process) } : attached;
|
|
143
|
+
}
|
|
144
|
+
switch (outcome._tag) {
|
|
145
|
+
case "Exited":
|
|
146
|
+
return finish(outcome.exitCode);
|
|
147
|
+
case "Failed":
|
|
148
|
+
return finish(SHELL_FAILURE, outcome.message);
|
|
149
|
+
case "Dropped":
|
|
150
|
+
return finish(SHELL_FAILURE, `lost sandbox ${name}: ${outcome.reason}`);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
void main();
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cloudflare/shell/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { ChildHost } from "@usine/agents/child-host";
|
|
|
2
2
|
import * as AttemptChannel from "@usine/core/attempt/channel";
|
|
3
3
|
import { AgentFailure, type AttemptFailure, InfraFailure, RunawayFailure } from "@usine/core/attempt/failure";
|
|
4
4
|
import type { AttemptRecovery, RecoverySink } from "@usine/core/attempt/salvage";
|
|
5
|
-
import type { GatewayCredentialKind } from "@usine/core/worker";
|
|
5
|
+
import type { GatewayCredentialKind, MachineId } from "@usine/core/worker";
|
|
6
6
|
import type { AttemptWindowsRead, HarvestSpec } from "@usine/core/step/harvest";
|
|
7
7
|
import type { Comment, StepResult, StepResultFact } from "@usine/core/step/result";
|
|
8
8
|
import { AttemptRuntime } from "@usine/durable/attempt-runtime";
|
|
@@ -12,6 +12,11 @@ import { type AcquiredAttempt } from "./prepared-attempt.ts";
|
|
|
12
12
|
export interface DurableCheckout {
|
|
13
13
|
/** The host with the checkout, where the children run. */
|
|
14
14
|
readonly host: ChildHost;
|
|
15
|
+
/**
|
|
16
|
+
* The provider's ID of the machine that a provisioned Worker created for the Attempt, or `None`
|
|
17
|
+
* on other Workers.
|
|
18
|
+
*/
|
|
19
|
+
readonly machine: Option.Option<MachineId>;
|
|
15
20
|
/** The complete environment for the children and harvesting commands (ADR 0011). */
|
|
16
21
|
readonly environment: Record<string, string>;
|
|
17
22
|
/**
|
|
@@ -32,6 +37,17 @@ export interface DurableCheckout {
|
|
|
32
37
|
readonly harvestComments: (windows: AttemptWindowsRead<AttemptFailure>) => Effect.Effect<ReadonlyArray<Comment>>;
|
|
33
38
|
/** Keeps the checkout on disk so a restart can reattach the parent or repeat an unrecorded harvest. */
|
|
34
39
|
readonly keepForReattach: Effect.Effect<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Keeps the checkout on disk, without salvage, while the parent task may still run in it.
|
|
42
|
+
* `reconcileKept` salvages it once a stop is confirmed.
|
|
43
|
+
*/
|
|
44
|
+
readonly keepUntilStopped: Effect.Effect<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Salvages the checkout that `keepUntilStopped` kept with a new credential, records the salvage
|
|
47
|
+
* through `record`, and removes the checkout once its work is pushed. Does nothing if the
|
|
48
|
+
* checkout is gone.
|
|
49
|
+
*/
|
|
50
|
+
readonly reconcileKept: (record: AttemptChannel.Sink["salvage"]) => Effect.Effect<void, ExecutorError | AttemptFailure>;
|
|
35
51
|
}
|
|
36
52
|
/**
|
|
37
53
|
* A function that returns the comments the Attempt described by `spec` posted on its Item, read
|
|
@@ -47,12 +63,14 @@ export interface DurableSessionOptions {
|
|
|
47
63
|
* Returns the session that runs Attempts whose Pi parent is a durable task in this process
|
|
48
64
|
* (`AttemptRuntime`), for every Worker kind. If a launch is interrupted without a stop, the
|
|
49
65
|
* parent task stays live and the checkout stays on disk for reattachment after restart; every
|
|
50
|
-
* other ending stops the parent task.
|
|
66
|
+
* other ending stops the parent task. If that stop can't be confirmed, the checkout stays on disk
|
|
67
|
+
* until a `cancel` confirms it (#523).
|
|
51
68
|
*/
|
|
52
69
|
export declare const durableSessionFor: (options: DurableSessionOptions) => Effect.Effect<{
|
|
53
70
|
readonly launch: (prepared: AttemptWorkspace, io: AttemptChannel.Sink, checkout: DurableCheckout) => Effect.Effect<StepResult, AgentFailure | import("@usine/core/attempt/failure").BlockedFailure | import("@usine/core/attempt/failure").ChildSessionBudgetFailure | import("@usine/core/attempt/failure").DefectFailure | InfraFailure | import("@usine/core/attempt/failure").QuestionFailure | RunawayFailure, never>;
|
|
54
71
|
readonly prepare: (acquire: Effect.Effect<AcquiredAttempt, ExecutorError, Scope.Scope>, request: CheckoutRequest) => Effect.Effect<import("./executor.ts").PreparedAttempt, import("./executor.ts").CredentialUnavailableError | ExecutorOperationError | import("./executor.ts").WorkerCapabilityError, Scope.Scope>;
|
|
55
|
-
readonly cancel: (attemptId: string & import("effect/Brand").Brand<"AttemptId"
|
|
72
|
+
readonly cancel: (attemptId: string & import("effect/Brand").Brand<"AttemptId">, reason: "cancel" | "failed" | "startup") => Effect.Effect<void, import("./executor.ts").CredentialUnavailableError | ExecutorOperationError | import("./executor.ts").WorkerCapabilityError, never>;
|
|
73
|
+
readonly drain: (attemptId: string & import("effect/Brand").Brand<"AttemptId">, message: string) => Effect.Effect<boolean, ExecutorOperationError, never>;
|
|
56
74
|
readonly intervene: (attemptId: string & import("effect/Brand").Brand<"AttemptId">, intervention: AttemptChannel.Intervention) => Effect.Effect<undefined, AgentFailure | import("@usine/core/attempt/failure").BlockedFailure | import("@usine/core/attempt/failure").ChildSessionBudgetFailure | import("@usine/core/attempt/failure").DefectFailure | InfraFailure | import("@usine/core/attempt/failure").QuestionFailure | RunawayFailure, never>;
|
|
57
75
|
readonly isLive: (attemptId: string & import("effect/Brand").Brand<"AttemptId">) => Effect.Effect<boolean, AgentFailure | import("@usine/core/attempt/failure").BlockedFailure | import("@usine/core/attempt/failure").ChildSessionBudgetFailure | import("@usine/core/attempt/failure").DefectFailure | InfraFailure | import("@usine/core/attempt/failure").QuestionFailure | RunawayFailure, never>;
|
|
58
76
|
readonly outcome: (attemptId: string & import("effect/Brand").Brand<"AttemptId">) => Effect.Effect<Option.Option<Result.Result<StepResult, AgentFailure | import("@usine/core/attempt/failure").BlockedFailure | import("@usine/core/attempt/failure").ChildSessionBudgetFailure | import("@usine/core/attempt/failure").DefectFailure | InfraFailure | import("@usine/core/attempt/failure").QuestionFailure | RunawayFailure>>, AgentFailure | import("@usine/core/attempt/failure").BlockedFailure | import("@usine/core/attempt/failure").ChildSessionBudgetFailure | import("@usine/core/attempt/failure").DefectFailure | InfraFailure | import("@usine/core/attempt/failure").QuestionFailure | RunawayFailure, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-session.d.ts","sourceRoot":"","sources":["../src/durable-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EACL,YAAY,EACZ,KAAK,cAAc,EACnB,YAAY,EACZ,cAAc,EACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"durable-session.d.ts","sourceRoot":"","sources":["../src/durable-session.ts"],"names":[],"mappings":"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"}
|
package/dist/durable-session.js
CHANGED
|
@@ -10,15 +10,27 @@ const cancelError = (attemptId, cause) => new ExecutorOperationError({
|
|
|
10
10
|
message: `Can't cancel attempt ${attemptId}`,
|
|
11
11
|
cause,
|
|
12
12
|
});
|
|
13
|
+
/** The reason that the log of each engine-requested stop gives. */
|
|
14
|
+
const stopReasons = {
|
|
15
|
+
cancel: "the Attempt was canceled",
|
|
16
|
+
failed: "the Attempt failed",
|
|
17
|
+
startup: "a restart found the Attempt closed or not reattached",
|
|
18
|
+
};
|
|
13
19
|
/**
|
|
14
20
|
* Returns the session that runs Attempts whose Pi parent is a durable task in this process
|
|
15
21
|
* (`AttemptRuntime`), for every Worker kind. If a launch is interrupted without a stop, the
|
|
16
22
|
* parent task stays live and the checkout stays on disk for reattachment after restart; every
|
|
17
|
-
* other ending stops the parent task.
|
|
23
|
+
* other ending stops the parent task. If that stop can't be confirmed, the checkout stays on disk
|
|
24
|
+
* until a `cancel` confirms it (#523).
|
|
18
25
|
*/
|
|
19
26
|
export const durableSessionFor = Effect.fn("DurableSession.for")(function* (options) {
|
|
20
27
|
const runtime = yield* AttemptRuntime;
|
|
21
28
|
const attempts = new Map();
|
|
29
|
+
/**
|
|
30
|
+
* The reconciliation of each checkout kept while its parent task isn't confirmed stopped, by
|
|
31
|
+
* Attempt. The `cancel` that confirms the stop runs it.
|
|
32
|
+
*/
|
|
33
|
+
const unstopped = new Map();
|
|
22
34
|
/** Completed by each launch after it adds its Attempt to `attempts`. */
|
|
23
35
|
const registrations = new Map();
|
|
24
36
|
const registration = (attemptId) => {
|
|
@@ -98,6 +110,18 @@ export const durableSessionFor = Effect.fn("DurableSession.for")(function* (opti
|
|
|
98
110
|
yield* Effect.annotateCurrentSpan({ attemptId });
|
|
99
111
|
yield* recordComments(attemptId, yield* checkout.harvestComments(io.windows), io.comments);
|
|
100
112
|
});
|
|
113
|
+
/**
|
|
114
|
+
* Keeps the checkout of an Attempt whose parent task may still run in it, so neither salvage nor
|
|
115
|
+
* removal runs under the task, and registers its reconciliation for the `cancel` that confirms
|
|
116
|
+
* the stop (#523).
|
|
117
|
+
*/
|
|
118
|
+
const keepUntilStopped = Effect.fn("DurableSession.keepUntilStopped")(function* (attemptId, worker, checkout, io) {
|
|
119
|
+
const fields = { attemptId, worker };
|
|
120
|
+
yield* Effect.annotateCurrentSpan(fields);
|
|
121
|
+
yield* checkout.keepUntilStopped;
|
|
122
|
+
unstopped.set(attemptId, checkout.reconcileKept(io.salvage).pipe(Effect.tap(() => Effect.logInfo("Reconciled the checkout kept while the Attempt's parent task was not confirmed stopped", fields)), Effect.tapError((error) => Effect.logError("Could not reconcile the checkout kept while the Attempt's parent task was not confirmed stopped; the checkout stays until the next start reconciles it", { ...fields, errorTag: error._tag, message: String(error) })), Effect.ignore));
|
|
123
|
+
yield* Effect.logWarning("The Attempt's parent task may still run in its checkout; the checkout stays, without salvage, until a stop is confirmed", fields);
|
|
124
|
+
});
|
|
101
125
|
const launch = Effect.fn("DurableSession.launch")(function* (prepared, io, checkout) {
|
|
102
126
|
const spec = prepared.spec;
|
|
103
127
|
const attemptId = spec.attemptId;
|
|
@@ -127,6 +151,7 @@ export const durableSessionFor = Effect.fn("DurableSession.for")(function* (opti
|
|
|
127
151
|
worker: prepared.worker,
|
|
128
152
|
cwd: prepared.worktree,
|
|
129
153
|
host: checkout.host,
|
|
154
|
+
machine: checkout.machine,
|
|
130
155
|
environment: checkout.environment,
|
|
131
156
|
gatewayCredential: checkout.gatewayCredential,
|
|
132
157
|
}), io)
|
|
@@ -136,6 +161,11 @@ export const durableSessionFor = Effect.fn("DurableSession.for")(function* (opti
|
|
|
136
161
|
const stop = yield* Ref.get(stopping);
|
|
137
162
|
if (Option.isSome(stop) && stop.value._tag === "Runaway")
|
|
138
163
|
return yield* new RunawayFailure({ ceiling: stop.value.ceiling });
|
|
164
|
+
if (Option.isSome(stop) && stop.value._tag === "Drain")
|
|
165
|
+
return yield* new InfraFailure({
|
|
166
|
+
message: stop.value.message,
|
|
167
|
+
cause: new Error(stop.value.message),
|
|
168
|
+
});
|
|
139
169
|
if (Option.isSome(stop) &&
|
|
140
170
|
Exit.isFailure(executed) &&
|
|
141
171
|
Cause.hasInterruptsOnly(executed.cause))
|
|
@@ -169,11 +199,18 @@ export const durableSessionFor = Effect.fn("DurableSession.for")(function* (opti
|
|
|
169
199
|
yield* checkout.keepForReattach;
|
|
170
200
|
}
|
|
171
201
|
else {
|
|
172
|
-
// stopTask logs its own failure; the Attempt's result is unchanged.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
202
|
+
// stopTask logs its own failure; the Attempt's result is unchanged. The engine then
|
|
203
|
+
// confirms the stop through `cancel` before it frees the Worker slot.
|
|
204
|
+
const stopped = yield* stopTask(attemptId, Option.match(stop, {
|
|
205
|
+
onNone: () => stopReasons.failed,
|
|
206
|
+
onSome: (reason) => Match.valueTags(reason, {
|
|
207
|
+
Cancel: () => stopReasons.cancel,
|
|
208
|
+
Runaway: () => "a ceiling tripped",
|
|
209
|
+
Drain: () => "the Worker is losing the Attempt's machine",
|
|
210
|
+
}),
|
|
211
|
+
})).pipe(Effect.result);
|
|
212
|
+
if (Result.isFailure(stopped))
|
|
213
|
+
yield* keepUntilStopped(attemptId, prepared.worker, checkout, io);
|
|
177
214
|
yield* recordPostedComments(attemptId, checkout, io);
|
|
178
215
|
}
|
|
179
216
|
}
|
|
@@ -359,13 +396,34 @@ export const durableSessionFor = Effect.fn("DurableSession.for")(function* (opti
|
|
|
359
396
|
stopTask(request.attemptId, "its reattachment could not be prepared").pipe(Effect.ignore)
|
|
360
397
|
: Effect.void));
|
|
361
398
|
/**
|
|
362
|
-
*
|
|
363
|
-
*
|
|
399
|
+
* Stops the launched Attempt because the Worker is losing its machine, such as a sandbox whose
|
|
400
|
+
* host the platform restarts. The launch fails with a retryable `InfraFailure` with `message`,
|
|
401
|
+
* and its release salvages the checkout, so the next Attempt resumes from the salvage. Returns
|
|
402
|
+
* whether the Attempt ran here.
|
|
364
403
|
*/
|
|
365
|
-
const
|
|
404
|
+
const drain = Effect.fn("DurableSession.drain")(function* (attemptId, message) {
|
|
366
405
|
yield* Effect.annotateCurrentSpan({ attemptId });
|
|
406
|
+
yield* Effect.logWarning("Draining the Attempt before the Worker loses its machine", {
|
|
407
|
+
attemptId,
|
|
408
|
+
message,
|
|
409
|
+
});
|
|
410
|
+
return yield* stop(attemptId, { _tag: "Drain", message });
|
|
411
|
+
});
|
|
412
|
+
/**
|
|
413
|
+
* Cancels the Attempt at any stage, then stops a live parent task this process didn't launch,
|
|
414
|
+
* for example one awaiting reattachment. Fails if that task can't be confirmed stopped. Once it
|
|
415
|
+
* is, reconciles the checkout that a launch kept while the stop was unconfirmed.
|
|
416
|
+
*/
|
|
417
|
+
const cancel = Effect.fn("DurableSession.cancel")(function* (attemptId, reason) {
|
|
418
|
+
yield* Effect.annotateCurrentSpan({ attemptId, reason });
|
|
367
419
|
yield* prepared.cancel(attemptId);
|
|
368
|
-
yield* stopTask(attemptId,
|
|
420
|
+
yield* stopTask(attemptId, stopReasons[reason]);
|
|
421
|
+
const kept = unstopped.get(attemptId);
|
|
422
|
+
if (kept === undefined)
|
|
423
|
+
return;
|
|
424
|
+
unstopped.delete(attemptId);
|
|
425
|
+
yield* Effect.logInfo("The Attempt's parent task is confirmed stopped; reconciling the checkout kept while it was not", { attemptId, reason });
|
|
426
|
+
yield* kept;
|
|
369
427
|
});
|
|
370
428
|
/**
|
|
371
429
|
* Returns whether the open Attempt's parent task is running or reported success without a
|
|
@@ -480,6 +538,7 @@ export const durableSessionFor = Effect.fn("DurableSession.for")(function* (opti
|
|
|
480
538
|
launch,
|
|
481
539
|
prepare,
|
|
482
540
|
cancel,
|
|
541
|
+
drain,
|
|
483
542
|
intervene,
|
|
484
543
|
isLive,
|
|
485
544
|
outcome,
|