@usine/executor 0.3.0 → 0.4.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.
Files changed (185) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +116 -19
  3. package/dist/child-command.d.ts +1 -1
  4. package/dist/child-command.d.ts.map +1 -1
  5. package/dist/child-command.js +6 -4
  6. package/dist/child-command.js.map +1 -1
  7. package/dist/child-environment.d.ts +19 -0
  8. package/dist/child-environment.d.ts.map +1 -0
  9. package/dist/child-environment.js +18 -0
  10. package/dist/child-environment.js.map +1 -0
  11. package/dist/claude-login-lock.d.ts +3 -2
  12. package/dist/claude-login-lock.d.ts.map +1 -1
  13. package/dist/claude-login-lock.js +10 -4
  14. package/dist/claude-login-lock.js.map +1 -1
  15. package/dist/cloudflare/client.d.ts +50 -0
  16. package/dist/cloudflare/client.d.ts.map +1 -0
  17. package/dist/cloudflare/client.js +108 -0
  18. package/dist/cloudflare/client.js.map +1 -0
  19. package/dist/cloudflare/cloudflare.d.ts +17 -0
  20. package/dist/cloudflare/cloudflare.d.ts.map +1 -0
  21. package/dist/cloudflare/cloudflare.js +704 -0
  22. package/dist/cloudflare/cloudflare.js.map +1 -0
  23. package/dist/cloudflare/model.d.ts +42 -0
  24. package/dist/cloudflare/model.d.ts.map +1 -0
  25. package/dist/cloudflare/model.js +2 -0
  26. package/dist/cloudflare/model.js.map +1 -0
  27. package/dist/cloudflare/shell/environment.d.ts +12 -0
  28. package/dist/cloudflare/shell/environment.d.ts.map +1 -0
  29. package/dist/cloudflare/shell/environment.js +12 -0
  30. package/dist/cloudflare/shell/environment.js.map +1 -0
  31. package/dist/cloudflare/shell/shell.d.ts +2 -0
  32. package/dist/cloudflare/shell/shell.d.ts.map +1 -0
  33. package/dist/cloudflare/shell/shell.js +155 -0
  34. package/dist/cloudflare/shell/shell.js.map +1 -0
  35. package/dist/durable-session.d.ts +21 -3
  36. package/dist/durable-session.d.ts.map +1 -1
  37. package/dist/durable-session.js +69 -10
  38. package/dist/durable-session.js.map +1 -1
  39. package/dist/exe-dev/commands.d.ts +1 -1
  40. package/dist/exe-dev/commands.d.ts.map +1 -1
  41. package/dist/exe-dev/exe-dev.d.ts +1 -1
  42. package/dist/exe-dev/exe-dev.d.ts.map +1 -1
  43. package/dist/exe-dev/exe-dev.js +9 -1
  44. package/dist/exe-dev/exe-dev.js.map +1 -1
  45. package/dist/exe-dev/preflight.d.ts +2 -2
  46. package/dist/exe-dev/preflight.d.ts.map +1 -1
  47. package/dist/exe-dev/preflight.js +5 -4
  48. package/dist/exe-dev/preflight.js.map +1 -1
  49. package/dist/executor.d.ts +164 -15
  50. package/dist/executor.d.ts.map +1 -1
  51. package/dist/executor.js +100 -3
  52. package/dist/executor.js.map +1 -1
  53. package/dist/guard.d.ts.map +1 -1
  54. package/dist/guard.js +1 -0
  55. package/dist/guard.js.map +1 -1
  56. package/dist/harness-preflight.d.ts +9 -8
  57. package/dist/harness-preflight.d.ts.map +1 -1
  58. package/dist/harness-preflight.js +15 -10
  59. package/dist/harness-preflight.js.map +1 -1
  60. package/dist/local/local.d.ts +1 -1
  61. package/dist/local/local.d.ts.map +1 -1
  62. package/dist/local/local.js +76 -37
  63. package/dist/local/local.js.map +1 -1
  64. package/dist/memory-preflight.d.ts +3 -1
  65. package/dist/memory-preflight.d.ts.map +1 -1
  66. package/dist/memory-preflight.js +1 -1
  67. package/dist/memory-preflight.js.map +1 -1
  68. package/dist/pre-push-hook.d.ts +1 -1
  69. package/dist/pre-push-hook.js +1 -1
  70. package/dist/prepared-attempt.d.ts +8 -0
  71. package/dist/prepared-attempt.d.ts.map +1 -1
  72. package/dist/prepared-attempt.js.map +1 -1
  73. package/dist/provision.d.ts +64 -13
  74. package/dist/provision.d.ts.map +1 -1
  75. package/dist/provision.js +99 -42
  76. package/dist/provision.js.map +1 -1
  77. package/dist/remote/commands.d.ts +1 -1
  78. package/dist/remote/commands.d.ts.map +1 -1
  79. package/dist/remote/commands.js +1 -1
  80. package/dist/remote/commands.js.map +1 -1
  81. package/dist/remote/container.d.ts +90 -0
  82. package/dist/remote/container.d.ts.map +1 -0
  83. package/dist/remote/container.js +480 -0
  84. package/dist/remote/container.js.map +1 -0
  85. package/dist/remote/liveness.d.ts +1 -1
  86. package/dist/remote/liveness.d.ts.map +1 -1
  87. package/dist/remote/liveness.js +6 -4
  88. package/dist/remote/liveness.js.map +1 -1
  89. package/dist/remote/machine.d.ts +52 -6
  90. package/dist/remote/machine.d.ts.map +1 -1
  91. package/dist/remote/remote.d.ts +11 -7
  92. package/dist/remote/remote.d.ts.map +1 -1
  93. package/dist/remote/remote.js +340 -92
  94. package/dist/remote/remote.js.map +1 -1
  95. package/dist/remote/sweep.d.ts +3 -1
  96. package/dist/remote/sweep.d.ts.map +1 -1
  97. package/dist/remote/sweep.js +2 -1
  98. package/dist/remote/sweep.js.map +1 -1
  99. package/dist/salvage.d.ts +18 -10
  100. package/dist/salvage.d.ts.map +1 -1
  101. package/dist/salvage.js +123 -29
  102. package/dist/salvage.js.map +1 -1
  103. package/dist/ssh/api-keys.d.ts +36 -0
  104. package/dist/ssh/api-keys.d.ts.map +1 -0
  105. package/dist/ssh/api-keys.js +72 -0
  106. package/dist/ssh/api-keys.js.map +1 -0
  107. package/dist/ssh/codex-homes.d.ts +21 -0
  108. package/dist/ssh/codex-homes.d.ts.map +1 -0
  109. package/dist/ssh/codex-homes.js +78 -0
  110. package/dist/ssh/codex-homes.js.map +1 -0
  111. package/dist/ssh/container.d.ts +32 -0
  112. package/dist/ssh/container.d.ts.map +1 -0
  113. package/dist/ssh/container.js +282 -0
  114. package/dist/ssh/container.js.map +1 -0
  115. package/dist/ssh/credentials.d.ts +3 -0
  116. package/dist/ssh/credentials.d.ts.map +1 -1
  117. package/dist/ssh/credentials.js +3 -0
  118. package/dist/ssh/credentials.js.map +1 -1
  119. package/dist/ssh/gateway/admin.d.ts +1 -1
  120. package/dist/ssh/gateway/admin.d.ts.map +1 -1
  121. package/dist/ssh/gateway/admin.js +2 -2
  122. package/dist/ssh/gateway/admin.js.map +1 -1
  123. package/dist/ssh/gateway/attachments.d.ts +15 -6
  124. package/dist/ssh/gateway/attachments.d.ts.map +1 -1
  125. package/dist/ssh/gateway/attachments.js +39 -25
  126. package/dist/ssh/gateway/attachments.js.map +1 -1
  127. package/dist/ssh/gateway/environment.d.ts +21 -2
  128. package/dist/ssh/gateway/environment.d.ts.map +1 -1
  129. package/dist/ssh/gateway/environment.js +76 -6
  130. package/dist/ssh/gateway/environment.js.map +1 -1
  131. package/dist/ssh/gateway/forward.d.ts +1 -1
  132. package/dist/ssh/gateway/forward.d.ts.map +1 -1
  133. package/dist/ssh/gateway/forward.js +1 -1
  134. package/dist/ssh/gateway/forward.js.map +1 -1
  135. package/dist/ssh/gateway/preflight.d.ts +51 -12
  136. package/dist/ssh/gateway/preflight.d.ts.map +1 -1
  137. package/dist/ssh/gateway/preflight.js +155 -69
  138. package/dist/ssh/gateway/preflight.js.map +1 -1
  139. package/dist/ssh/limits.d.ts +60 -0
  140. package/dist/ssh/limits.d.ts.map +1 -0
  141. package/dist/ssh/limits.js +84 -0
  142. package/dist/ssh/limits.js.map +1 -0
  143. package/dist/ssh/model.d.ts +97 -9
  144. package/dist/ssh/model.d.ts.map +1 -1
  145. package/dist/ssh/preflight.d.ts +26 -7
  146. package/dist/ssh/preflight.d.ts.map +1 -1
  147. package/dist/ssh/preflight.js +50 -10
  148. package/dist/ssh/preflight.js.map +1 -1
  149. package/dist/ssh/provisioner/boat.d.ts +33 -0
  150. package/dist/ssh/provisioner/boat.d.ts.map +1 -0
  151. package/dist/ssh/provisioner/boat.js +247 -0
  152. package/dist/ssh/provisioner/boat.js.map +1 -0
  153. package/dist/ssh/provisioner/hetzner.d.ts +32 -0
  154. package/dist/ssh/provisioner/hetzner.d.ts.map +1 -0
  155. package/dist/ssh/provisioner/hetzner.js +337 -0
  156. package/dist/ssh/provisioner/hetzner.js.map +1 -0
  157. package/dist/ssh/provisioner/host-key.d.ts +11 -0
  158. package/dist/ssh/provisioner/host-key.d.ts.map +1 -0
  159. package/dist/ssh/provisioner/host-key.js +57 -0
  160. package/dist/ssh/provisioner/host-key.js.map +1 -0
  161. package/dist/ssh/provisioner/http.d.ts +45 -0
  162. package/dist/ssh/provisioner/http.d.ts.map +1 -0
  163. package/dist/ssh/provisioner/http.js +72 -0
  164. package/dist/ssh/provisioner/http.js.map +1 -0
  165. package/dist/ssh/provisioner/machines.d.ts +48 -0
  166. package/dist/ssh/provisioner/machines.d.ts.map +1 -0
  167. package/dist/ssh/provisioner/machines.js +686 -0
  168. package/dist/ssh/provisioner/machines.js.map +1 -0
  169. package/dist/ssh/provisioner/model.d.ts +92 -0
  170. package/dist/ssh/provisioner/model.d.ts.map +1 -0
  171. package/dist/ssh/provisioner/model.js +37 -0
  172. package/dist/ssh/provisioner/model.js.map +1 -0
  173. package/dist/ssh/ssh.d.ts +14 -11
  174. package/dist/ssh/ssh.d.ts.map +1 -1
  175. package/dist/ssh/ssh.js +94 -27
  176. package/dist/ssh/ssh.js.map +1 -1
  177. package/dist/ssh/worker-records.d.ts +18 -0
  178. package/dist/ssh/worker-records.d.ts.map +1 -0
  179. package/dist/ssh/worker-records.js +100 -0
  180. package/dist/ssh/worker-records.js.map +1 -0
  181. package/dist/ssh/workers.d.ts +34 -7
  182. package/dist/ssh/workers.d.ts.map +1 -1
  183. package/dist/ssh/workers.js +92 -18
  184. package/dist/ssh/workers.js.map +1 -1
  185. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shell.d.ts.map
@@ -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">) => Effect.Effect<void, import("./executor.ts").CredentialUnavailableError | ExecutorOperationError | import("./executor.ts").WorkerCapabilityError, never>;
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;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAGL,cAAc,EAEf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAIL,MAAM,EAIN,MAAM,EAEN,MAAM,EACN,KAAK,KAAK,EACX,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,sBAAsB,EACvB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,eAAe,EAAyC,MAAM,uBAAuB,CAAC;AAcpG,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChF;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,CAChB,OAAO,EAAE,kBAAkB,CAAC,cAAc,CAAC,KACxC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC;IAClE;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,CACxB,OAAO,EAAE,kBAAkB,CAAC,cAAc,CAAC,KACxC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,uGAAuG;IACvG,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,EACpC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,gGAAgG;IAChG,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;CACrE;AASD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;gCA8bjB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,WAC1D,eAAe;;;;;;qCAmGiE,CAAC;;yBAmG5F,CAAC"}
1
+ {"version":3,"file":"durable-session.d.ts","sourceRoot":"","sources":["../src/durable-session.ts"],"names":[],"mappings":"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"}
@@ -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
- yield* stopTask(attemptId, Option.match(stop, {
174
- onNone: () => "the Attempt failed",
175
- onSome: (reason) => reason._tag === "Cancel" ? "the Attempt was canceled" : "a ceiling tripped",
176
- })).pipe(Effect.ignore);
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
- * Cancels the Attempt at any stage, then stops a live parent task this process didn't launch,
363
- * for example one awaiting reattachment. Fails if that task can't be confirmed stopped.
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 cancel = Effect.fn("DurableSession.cancel")(function* (attemptId) {
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, "the Attempt was canceled");
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,