@usine/executor 0.2.1 → 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 (250) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +212 -37
  3. package/dist/child-command.d.ts +5 -8
  4. package/dist/child-command.d.ts.map +1 -1
  5. package/dist/child-command.js +10 -14
  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 +9 -0
  12. package/dist/claude-login-lock.d.ts.map +1 -0
  13. package/dist/claude-login-lock.js +15 -0
  14. package/dist/claude-login-lock.js.map +1 -0
  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/credential-environment.d.ts +20 -0
  36. package/dist/credential-environment.d.ts.map +1 -0
  37. package/dist/credential-environment.js +20 -0
  38. package/dist/credential-environment.js.map +1 -0
  39. package/dist/durable-session.d.ts +81 -0
  40. package/dist/durable-session.d.ts.map +1 -0
  41. package/dist/durable-session.js +550 -0
  42. package/dist/durable-session.js.map +1 -0
  43. package/dist/exe-dev/commands.d.ts +23 -13
  44. package/dist/exe-dev/commands.d.ts.map +1 -1
  45. package/dist/exe-dev/commands.js +11 -57
  46. package/dist/exe-dev/commands.js.map +1 -1
  47. package/dist/exe-dev/exe-dev.d.ts +9 -3
  48. package/dist/exe-dev/exe-dev.d.ts.map +1 -1
  49. package/dist/exe-dev/exe-dev.js +61 -128
  50. package/dist/exe-dev/exe-dev.js.map +1 -1
  51. package/dist/exe-dev/grants.d.ts.map +1 -1
  52. package/dist/exe-dev/grants.js +35 -15
  53. package/dist/exe-dev/grants.js.map +1 -1
  54. package/dist/exe-dev/model.d.ts +15 -19
  55. package/dist/exe-dev/model.d.ts.map +1 -1
  56. package/dist/exe-dev/model.js +9 -12
  57. package/dist/exe-dev/model.js.map +1 -1
  58. package/dist/exe-dev/preflight.d.ts +8 -4
  59. package/dist/exe-dev/preflight.d.ts.map +1 -1
  60. package/dist/exe-dev/preflight.js +26 -35
  61. package/dist/exe-dev/preflight.js.map +1 -1
  62. package/dist/executor.d.ts +292 -44
  63. package/dist/executor.d.ts.map +1 -1
  64. package/dist/executor.js +187 -19
  65. package/dist/executor.js.map +1 -1
  66. package/dist/guard.d.ts +57 -7
  67. package/dist/guard.d.ts.map +1 -1
  68. package/dist/guard.js +274 -59
  69. package/dist/guard.js.map +1 -1
  70. package/dist/harness-preflight.d.ts +27 -5
  71. package/dist/harness-preflight.d.ts.map +1 -1
  72. package/dist/harness-preflight.js +32 -31
  73. package/dist/harness-preflight.js.map +1 -1
  74. package/dist/keyed-lock.d.ts +2 -3
  75. package/dist/keyed-lock.d.ts.map +1 -1
  76. package/dist/keyed-lock.js +2 -3
  77. package/dist/keyed-lock.js.map +1 -1
  78. package/dist/leftovers.d.ts +9 -0
  79. package/dist/leftovers.d.ts.map +1 -0
  80. package/dist/leftovers.js +14 -0
  81. package/dist/leftovers.js.map +1 -0
  82. package/dist/local/credentials.d.ts +21 -0
  83. package/dist/local/credentials.d.ts.map +1 -0
  84. package/dist/local/credentials.js +39 -0
  85. package/dist/local/credentials.js.map +1 -0
  86. package/dist/local/leftovers.d.ts +8 -0
  87. package/dist/local/leftovers.d.ts.map +1 -0
  88. package/dist/local/leftovers.js +23 -0
  89. package/dist/local/leftovers.js.map +1 -0
  90. package/dist/local/local.d.ts +17 -11
  91. package/dist/local/local.d.ts.map +1 -1
  92. package/dist/local/local.js +205 -132
  93. package/dist/local/local.js.map +1 -1
  94. package/dist/memory-preflight.d.ts +27 -0
  95. package/dist/memory-preflight.d.ts.map +1 -0
  96. package/dist/memory-preflight.js +83 -0
  97. package/dist/memory-preflight.js.map +1 -0
  98. package/dist/pre-push-hook.d.ts +20 -0
  99. package/dist/pre-push-hook.d.ts.map +1 -0
  100. package/dist/pre-push-hook.js +33 -0
  101. package/dist/pre-push-hook.js.map +1 -0
  102. package/dist/prepared-attempt.d.ts +41 -3
  103. package/dist/prepared-attempt.d.ts.map +1 -1
  104. package/dist/prepared-attempt.js +109 -31
  105. package/dist/prepared-attempt.js.map +1 -1
  106. package/dist/provision.d.ts +129 -15
  107. package/dist/provision.d.ts.map +1 -1
  108. package/dist/provision.js +428 -69
  109. package/dist/provision.js.map +1 -1
  110. package/dist/remote/commands.d.ts +51 -0
  111. package/dist/remote/commands.d.ts.map +1 -0
  112. package/dist/remote/commands.js +94 -0
  113. package/dist/remote/commands.js.map +1 -0
  114. package/dist/remote/container.d.ts +90 -0
  115. package/dist/remote/container.d.ts.map +1 -0
  116. package/dist/remote/container.js +480 -0
  117. package/dist/remote/container.js.map +1 -0
  118. package/dist/remote/leftovers.d.ts +14 -0
  119. package/dist/remote/leftovers.d.ts.map +1 -0
  120. package/dist/remote/leftovers.js +22 -0
  121. package/dist/remote/leftovers.js.map +1 -0
  122. package/dist/remote/liveness.d.ts +33 -0
  123. package/dist/remote/liveness.d.ts.map +1 -0
  124. package/dist/remote/liveness.js +196 -0
  125. package/dist/remote/liveness.js.map +1 -0
  126. package/dist/remote/machine.d.ts +110 -0
  127. package/dist/remote/machine.d.ts.map +1 -0
  128. package/dist/remote/machine.js +2 -0
  129. package/dist/remote/machine.js.map +1 -0
  130. package/dist/remote/remote.d.ts +28 -0
  131. package/dist/remote/remote.d.ts.map +1 -0
  132. package/dist/remote/remote.js +556 -0
  133. package/dist/remote/remote.js.map +1 -0
  134. package/dist/remote/sweep.d.ts +17 -0
  135. package/dist/remote/sweep.d.ts.map +1 -0
  136. package/dist/remote/sweep.js +117 -0
  137. package/dist/remote/sweep.js.map +1 -0
  138. package/dist/renewable-credential.d.ts +17 -0
  139. package/dist/renewable-credential.d.ts.map +1 -0
  140. package/dist/renewable-credential.js +58 -0
  141. package/dist/renewable-credential.js.map +1 -0
  142. package/dist/salvage.d.ts +38 -0
  143. package/dist/salvage.d.ts.map +1 -0
  144. package/dist/salvage.js +198 -0
  145. package/dist/salvage.js.map +1 -0
  146. package/dist/ssh/api-keys.d.ts +36 -0
  147. package/dist/ssh/api-keys.d.ts.map +1 -0
  148. package/dist/ssh/api-keys.js +72 -0
  149. package/dist/ssh/api-keys.js.map +1 -0
  150. package/dist/ssh/codex-homes.d.ts +21 -0
  151. package/dist/ssh/codex-homes.d.ts.map +1 -0
  152. package/dist/ssh/codex-homes.js +78 -0
  153. package/dist/ssh/codex-homes.js.map +1 -0
  154. package/dist/ssh/container.d.ts +32 -0
  155. package/dist/ssh/container.d.ts.map +1 -0
  156. package/dist/ssh/container.js +282 -0
  157. package/dist/ssh/container.js.map +1 -0
  158. package/dist/ssh/credentials.d.ts +43 -0
  159. package/dist/ssh/credentials.d.ts.map +1 -0
  160. package/dist/ssh/credentials.js +86 -0
  161. package/dist/ssh/credentials.js.map +1 -0
  162. package/dist/ssh/gateway/admin.d.ts +45 -0
  163. package/dist/ssh/gateway/admin.d.ts.map +1 -0
  164. package/dist/ssh/gateway/admin.js +129 -0
  165. package/dist/ssh/gateway/admin.js.map +1 -0
  166. package/dist/ssh/gateway/attachments.d.ts +31 -0
  167. package/dist/ssh/gateway/attachments.d.ts.map +1 -0
  168. package/dist/ssh/gateway/attachments.js +168 -0
  169. package/dist/ssh/gateway/attachments.js.map +1 -0
  170. package/dist/ssh/gateway/environment.d.ts +71 -0
  171. package/dist/ssh/gateway/environment.d.ts.map +1 -0
  172. package/dist/ssh/gateway/environment.js +148 -0
  173. package/dist/ssh/gateway/environment.js.map +1 -0
  174. package/dist/ssh/gateway/forward.d.ts +74 -0
  175. package/dist/ssh/gateway/forward.d.ts.map +1 -0
  176. package/dist/ssh/gateway/forward.js +247 -0
  177. package/dist/ssh/gateway/forward.js.map +1 -0
  178. package/dist/ssh/gateway/preflight.d.ts +67 -0
  179. package/dist/ssh/gateway/preflight.d.ts.map +1 -0
  180. package/dist/ssh/gateway/preflight.js +320 -0
  181. package/dist/ssh/gateway/preflight.js.map +1 -0
  182. package/dist/ssh/limits.d.ts +60 -0
  183. package/dist/ssh/limits.d.ts.map +1 -0
  184. package/dist/ssh/limits.js +84 -0
  185. package/dist/ssh/limits.js.map +1 -0
  186. package/dist/ssh/model.d.ts +153 -0
  187. package/dist/ssh/model.d.ts.map +1 -0
  188. package/dist/ssh/model.js +2 -0
  189. package/dist/ssh/model.js.map +1 -0
  190. package/dist/ssh/preflight.d.ts +35 -0
  191. package/dist/ssh/preflight.d.ts.map +1 -0
  192. package/dist/ssh/preflight.js +87 -0
  193. package/dist/ssh/preflight.js.map +1 -0
  194. package/dist/ssh/provisioner/boat.d.ts +33 -0
  195. package/dist/ssh/provisioner/boat.d.ts.map +1 -0
  196. package/dist/ssh/provisioner/boat.js +247 -0
  197. package/dist/ssh/provisioner/boat.js.map +1 -0
  198. package/dist/ssh/provisioner/hetzner.d.ts +32 -0
  199. package/dist/ssh/provisioner/hetzner.d.ts.map +1 -0
  200. package/dist/ssh/provisioner/hetzner.js +337 -0
  201. package/dist/ssh/provisioner/hetzner.js.map +1 -0
  202. package/dist/ssh/provisioner/host-key.d.ts +11 -0
  203. package/dist/ssh/provisioner/host-key.d.ts.map +1 -0
  204. package/dist/ssh/provisioner/host-key.js +57 -0
  205. package/dist/ssh/provisioner/host-key.js.map +1 -0
  206. package/dist/ssh/provisioner/http.d.ts +45 -0
  207. package/dist/ssh/provisioner/http.d.ts.map +1 -0
  208. package/dist/ssh/provisioner/http.js +72 -0
  209. package/dist/ssh/provisioner/http.js.map +1 -0
  210. package/dist/ssh/provisioner/machines.d.ts +48 -0
  211. package/dist/ssh/provisioner/machines.d.ts.map +1 -0
  212. package/dist/ssh/provisioner/machines.js +686 -0
  213. package/dist/ssh/provisioner/machines.js.map +1 -0
  214. package/dist/ssh/provisioner/model.d.ts +92 -0
  215. package/dist/ssh/provisioner/model.d.ts.map +1 -0
  216. package/dist/ssh/provisioner/model.js +37 -0
  217. package/dist/ssh/provisioner/model.js.map +1 -0
  218. package/dist/ssh/ssh.d.ts +23 -0
  219. package/dist/ssh/ssh.d.ts.map +1 -0
  220. package/dist/ssh/ssh.js +145 -0
  221. package/dist/ssh/ssh.js.map +1 -0
  222. package/dist/ssh/worker-records.d.ts +18 -0
  223. package/dist/ssh/worker-records.d.ts.map +1 -0
  224. package/dist/ssh/worker-records.js +100 -0
  225. package/dist/ssh/worker-records.js.map +1 -0
  226. package/dist/ssh/workers.d.ts +80 -0
  227. package/dist/ssh/workers.d.ts.map +1 -0
  228. package/dist/ssh/workers.js +247 -0
  229. package/dist/ssh/workers.js.map +1 -0
  230. package/package.json +25 -9
  231. package/dist/exe-dev/channel.d.ts +0 -12
  232. package/dist/exe-dev/channel.d.ts.map +0 -1
  233. package/dist/exe-dev/channel.js +0 -42
  234. package/dist/exe-dev/channel.js.map +0 -1
  235. package/dist/exe-dev/shell.d.ts +0 -12
  236. package/dist/exe-dev/shell.d.ts.map +0 -1
  237. package/dist/exe-dev/shell.js +0 -31
  238. package/dist/exe-dev/shell.js.map +0 -1
  239. package/dist/exe-dev/sweep.d.ts +0 -10
  240. package/dist/exe-dev/sweep.d.ts.map +0 -1
  241. package/dist/exe-dev/sweep.js +0 -117
  242. package/dist/exe-dev/sweep.js.map +0 -1
  243. package/dist/invalid-frame.d.ts +0 -17
  244. package/dist/invalid-frame.d.ts.map +0 -1
  245. package/dist/invalid-frame.js +0 -111
  246. package/dist/invalid-frame.js.map +0 -1
  247. package/dist/run-host-session.d.ts +0 -27
  248. package/dist/run-host-session.d.ts.map +0 -1
  249. package/dist/run-host-session.js +0 -303
  250. package/dist/run-host-session.js.map +0 -1
package/dist/provision.js CHANGED
@@ -1,58 +1,47 @@
1
1
  import * as AttemptChannel from "@usine/core/attempt/channel";
2
- import { RepositoryName, CommitSha } from "@usine/core/repository";
3
- import { Effect, Schema } from "effect";
2
+ import { SalvagePushed, } from "@usine/core/attempt/salvage";
3
+ import { RepositoryName, CommitSha, safeSegment } from "@usine/core/repository";
4
+ import { DateTime, Deferred, Effect, Exit, Option, Ref, Result, Schema } from "effect";
4
5
  import { ExecutorOperationError, AttemptWorkspace, WorktreePath, } from "./executor.js";
5
- export const safeSegment = (value) => value.replaceAll(/[^A-Za-z0-9_.-]/gu, "_");
6
+ import { PRE_PUSH_HOOKS_DIRECTORY, prePushHook } from "./pre-push-hook.js";
7
+ import { failureMessage, salvageWorktree } from "./salvage.js";
6
8
  const CACHE_DIRECTORY_SUFFIX = ".git";
7
- /** The bare cache directory name for a repository under `repos/`, shared by every adapter. */
9
+ /** Returns the bare cache directory name for `repository` under `repos/`. */
8
10
  export const cacheDirectoryName = (repository) => `${safeSegment(repository)}${CACHE_DIRECTORY_SUFFIX}`;
9
11
  /**
10
- * Whether a `repos/` entry is one of our bare caches, decided by the name we
11
- * mint rather than by probing contents: a `HEAD` lookup fails with ENOTDIR on
12
- * a stray file, and a `.cloning` leftover or a tool's scratch directory must
13
- * never reach `git worktree prune`.
12
+ * Returns whether a `repos/` entry is a bare cache, by name only. Probing `HEAD` fails with
13
+ * ENOTDIR on a stray file, and a `.cloning` leftover or another tool's directory must never be
14
+ * passed to `git worktree prune`.
14
15
  */
15
16
  export const isCacheDirectoryName = (entry) => entry.length > CACHE_DIRECTORY_SUFFIX.length && entry.endsWith(CACHE_DIRECTORY_SUFFIX);
16
17
  const decodeCommit = Schema.decodeUnknownEffect(CommitSha);
17
18
  /**
18
- * The clone-to-worktree sequence every Executor shares: clone into a staging
19
- * sibling and promote it on success, so an interrupted clone never leaves a
20
- * half-initialized cache that later fetches would poison; then fetch the
21
- * requested revision and check out a detached worktree at the resolved commit.
19
+ * Returns the checkout as a linked worktree of the cached clone, created and removed with
20
+ * `git worktree`. `ops.git` runs every git command, in the checkout too.
22
21
  */
23
- export const provisionWorktree = Effect.fn("Executor.provisionWorktree")(function* (options) {
24
- const { layout, ops, request } = options;
25
- yield* Effect.annotateCurrentSpan({
26
- attemptId: request.attemptId,
27
- worker: request.worker,
28
- host: options.host,
29
- repository: request.repository,
30
- });
31
- const cleanup = (resource, effect) => effect.pipe(Effect.tapError((error) => Effect.logError("Attempt cleanup operation failed", {
32
- attemptId: request.attemptId,
33
- worker: request.worker,
34
- host: options.host,
35
- worktree: layout.worktree,
36
- resource,
37
- message: String(error),
38
- })), Effect.ignore);
39
- // Register before any filesystem mutation. This also covers failed worktree
40
- // creation, which can leave both a directory and a bare-cache registration.
41
- yield* Effect.addFinalizer(Effect.fn("Executor.releaseWorktree")(function* () {
42
- yield* Effect.annotateCurrentSpan({
43
- attemptId: request.attemptId,
44
- worker: request.worker,
45
- repository: request.repository,
46
- host: options.host,
47
- });
48
- yield* Effect.logInfo("Cleaning Attempt workspace", {
49
- attemptId: request.attemptId,
50
- worker: request.worker,
51
- host: options.host,
52
- worktree: layout.worktree,
53
- });
22
+ export const linkedWorktree = (ops, layout, writeExecutable) => ({
23
+ add: (commit) => Effect.asVoid(ops.git("prepare", [
24
+ "--git-dir",
25
+ layout.cache,
26
+ "worktree",
27
+ "add",
28
+ "--detach",
29
+ layout.worktree,
30
+ commit,
31
+ ])),
32
+ discard: Effect.asVoid(ops.git("prepare", [
33
+ "--git-dir",
34
+ layout.cache,
35
+ "worktree",
36
+ "remove",
37
+ "--force",
38
+ layout.worktree,
39
+ ])),
40
+ git: ops.git,
41
+ writeExecutable,
42
+ remove: (cleanup) => Effect.gen(function* () {
54
43
  const cacheExists = yield* ops.cacheExists.pipe(Effect.tapError((error) => Effect.logWarning("Could not inspect cache during cleanup", {
55
- attemptId: request.attemptId,
44
+ worktree: layout.worktree,
56
45
  message: String(error),
57
46
  })), Effect.orElseSucceed(() => false));
58
47
  if (cacheExists) {
@@ -69,7 +58,238 @@ export const provisionWorktree = Effect.fn("Executor.provisionWorktree")(functio
69
58
  if (cacheExists) {
70
59
  yield* cleanup("cache-registration", ops.git("cleanup", ["--git-dir", layout.cache, "worktree", "prune"]));
71
60
  }
61
+ }),
62
+ });
63
+ /** Returns the `CleanupStep` that logs a failed step with the Attempt's fields. */
64
+ const cleanupFor = (options) => (resource, effect) => effect.pipe(Effect.tapError((error) => Effect.logError("Attempt cleanup operation failed", {
65
+ attemptId: options.request.attemptId,
66
+ worker: options.request.worker,
67
+ host: options.host,
68
+ worktree: options.layout.worktree,
69
+ resource,
70
+ message: String(error),
71
+ })), Effect.ignore);
72
+ /**
73
+ * Registers the checkout's finalizer. On a non-success exit, salvages a checked-out worktree
74
+ * before removing it; a worktree with unpreserved work stays on disk. `checkedOut` contains the
75
+ * base commit once a worktree exists.
76
+ */
77
+ const registerRelease = Effect.fn("Executor.registerRelease")(function* (options) {
78
+ const { layout, ops, request } = options;
79
+ const checkedOut = yield* Ref.make(Option.none());
80
+ const salvaged = yield* Deferred.make();
81
+ const recorder = yield* Ref.make(Option.none());
82
+ const cleanup = cleanupFor(options);
83
+ const kept = yield* Ref.make(Option.none());
84
+ // `kept` is checked even after a successful launch: a failed result write keeps the checkout.
85
+ yield* Effect.addFinalizer(Effect.fn("Executor.releaseWorktree")(function* (exit) {
86
+ yield* Effect.annotateCurrentSpan({
87
+ attemptId: request.attemptId,
88
+ worker: request.worker,
89
+ repository: request.repository,
90
+ host: options.host,
91
+ });
92
+ const keptFor = yield* Ref.get(kept);
93
+ if (Option.isSome(keptFor)) {
94
+ yield* Deferred.succeed(salvaged, Option.none());
95
+ yield* Effect.logInfo(keptFor.value === "reattach"
96
+ ? "Leaving the checkout in place for the Attempt's reattachment"
97
+ : "Leaving the checkout in place, without salvage, until the Attempt's parent task is confirmed stopped", {
98
+ attemptId: request.attemptId,
99
+ worker: request.worker,
100
+ host: options.host,
101
+ worktree: layout.worktree,
102
+ });
103
+ return;
104
+ }
105
+ const baseCommit = yield* Ref.get(checkedOut);
106
+ const salvage = Option.isSome(baseCommit) && !Exit.isSuccess(exit)
107
+ ? request.permissions === "read"
108
+ ? yield* Effect.logInfo("The Attempt's Loop has read permissions, so its checkout is removed without salvage", {
109
+ attemptId: request.attemptId,
110
+ worker: request.worker,
111
+ loop: request.loop,
112
+ host: options.host,
113
+ worktree: layout.worktree,
114
+ }).pipe(Effect.as(Option.none()))
115
+ : yield* salvageWorktree({
116
+ attemptId: request.attemptId,
117
+ worker: request.worker,
118
+ host: options.host,
119
+ worktree: layout.worktree,
120
+ baseCommit,
121
+ ref: request.salvageRef,
122
+ rejected: Option.none(),
123
+ git: (args) => ops.checkout.git("cleanup", args),
124
+ })
125
+ : Option.none();
126
+ if (Option.isSome(salvage)) {
127
+ const record = yield* Ref.get(recorder);
128
+ if (Option.isNone(record)) {
129
+ yield* Deferred.succeed(salvaged, salvage);
130
+ yield* Effect.logWarning("Attempt worktree retained; no salvage recorder installed", {
131
+ attemptId: request.attemptId,
132
+ worktree: layout.worktree,
133
+ });
134
+ return;
135
+ }
136
+ const recorded = yield* Effect.result(record.value(salvage.value));
137
+ if (Result.isFailure(recorded)) {
138
+ yield* Deferred.fail(salvaged, recorded.failure);
139
+ yield* Effect.logError("Attempt salvage could not be recorded; checkout retained", {
140
+ attemptId: request.attemptId,
141
+ worktree: layout.worktree,
142
+ errorTag: recorded.failure._tag,
143
+ });
144
+ return;
145
+ }
146
+ }
147
+ yield* Deferred.succeed(salvaged, salvage);
148
+ if (Option.exists(salvage, ({ _tag }) => _tag !== "Pushed")) {
149
+ yield* Effect.logWarning("Attempt worktree retained; salvage did not preserve all work", {
150
+ attemptId: request.attemptId,
151
+ worker: request.worker,
152
+ host: options.host,
153
+ worktree: layout.worktree,
154
+ });
155
+ return;
156
+ }
157
+ yield* Effect.logInfo("Cleaning Attempt workspace", {
158
+ attemptId: request.attemptId,
159
+ worker: request.worker,
160
+ host: options.host,
161
+ worktree: layout.worktree,
162
+ });
163
+ yield* ops.checkout.remove(cleanup);
72
164
  }));
165
+ return {
166
+ checkedOut,
167
+ salvaged: Deferred.await(salvaged),
168
+ recordSalvage: (record) => Ref.set(recorder, Option.some(record)),
169
+ keepForReattach: Ref.set(kept, Option.some("reattach")),
170
+ keepUntilStopped: Ref.set(kept, Option.some("unconfirmed-stop")),
171
+ };
172
+ });
173
+ /**
174
+ * For a `permissions: read` Loop, writes `prePushHook` to a hooks directory inside the
175
+ * checkout's git directory and returns the directory. Returns `None` for `write`.
176
+ */
177
+ const installPrePushHook = Effect.fn("Executor.installPrePushHook")(function* (options) {
178
+ const { layout, ops, request } = options;
179
+ const fields = {
180
+ attemptId: request.attemptId,
181
+ worker: request.worker,
182
+ loop: request.loop,
183
+ permissions: request.permissions,
184
+ host: options.host,
185
+ };
186
+ yield* Effect.annotateCurrentSpan(fields);
187
+ if (request.permissions === "write") {
188
+ yield* Effect.logDebug("The Attempt's Loop may push; its checkout keeps git's own hooks", fields);
189
+ return Option.none();
190
+ }
191
+ const gitDirectory = (yield* ops.checkout.git("prepare", [
192
+ "-C",
193
+ layout.worktree,
194
+ "rev-parse",
195
+ "--absolute-git-dir",
196
+ ])).trim();
197
+ const hooks = `${gitDirectory}/${PRE_PUSH_HOOKS_DIRECTORY}`;
198
+ yield* ops.checkout.writeExecutable(`${hooks}/pre-push`, prePushHook(request.loop));
199
+ yield* Effect.logInfo("The Attempt's Loop has read permissions; its checkout's pre-push hook explains a refused push", { ...fields, hooks });
200
+ return Option.some(hooks);
201
+ });
202
+ const withoutSalvage = { resume: Option.none(), conflicting: Option.none() };
203
+ /**
204
+ * Creates the Attempt's detached worktree at `base`, with the previous Attempt's salvage rebased
205
+ * on top if the request resumes one (#282). A salvage with no changes beyond `base` is dropped;
206
+ * one that doesn't rebase cleanly isn't applied.
207
+ */
208
+ const checkOutWorktree = Effect.fn("Executor.checkOutWorktree")(function* (options, base, salvage) {
209
+ const { layout, ops, request } = options;
210
+ const inCache = (args) => ops.git("prepare", ["--git-dir", layout.cache, ...args]);
211
+ const add = ops.checkout.add;
212
+ if (Option.isNone(salvage)) {
213
+ yield* add(base);
214
+ return withoutSalvage;
215
+ }
216
+ const { ref, commit } = salvage.value;
217
+ const fields = {
218
+ attemptId: request.attemptId,
219
+ worker: request.worker,
220
+ host: options.host,
221
+ ref,
222
+ commit,
223
+ base,
224
+ };
225
+ const setAside = (reason, message) => Effect.gen(function* () {
226
+ yield* Effect.logWarning(reason, { ...fields, message });
227
+ yield* add(base);
228
+ return { resume: Option.none(), conflicting: salvage };
229
+ });
230
+ const forkPoint = yield* inCache(["merge-base", base, commit]).pipe(Effect.map((output) => output.trim()), Effect.result);
231
+ if (Result.isFailure(forkPoint)) {
232
+ return yield* setAside("The previous salvage shares no history with the revision; the Attempt starts from the revision and the salvage stays on its branch", failureMessage(forkPoint.failure));
233
+ }
234
+ const changed = (yield* inCache(["diff", "--name-only", forkPoint.success, commit])).trim();
235
+ if (changed === "") {
236
+ yield* Effect.logInfo("The previous salvage holds no changes beyond the revision; the Attempt starts from the revision", fields);
237
+ yield* add(base);
238
+ return withoutSalvage;
239
+ }
240
+ yield* add(commit);
241
+ if (forkPoint.success === base) {
242
+ yield* Effect.logInfo("Resuming the Attempt from the previous salvage", fields);
243
+ return { resume: salvage, conflicting: Option.none() };
244
+ }
245
+ const rebased = yield* ops.checkout
246
+ .git("prepare", [
247
+ "-C",
248
+ layout.worktree,
249
+ "-c",
250
+ "commit.gpgsign=false",
251
+ "rebase",
252
+ "--no-verify",
253
+ "--onto",
254
+ base,
255
+ forkPoint.success,
256
+ ])
257
+ .pipe(Effect.result);
258
+ if (Result.isFailure(rebased)) {
259
+ yield* ops.checkout.discard;
260
+ return yield* setAside("The previous salvage does not rebase onto the revision; the Attempt starts from the revision and the salvage stays on its branch", failureMessage(rebased.failure));
261
+ }
262
+ const rebasedHead = (yield* ops.checkout.git("prepare", [
263
+ "-C",
264
+ layout.worktree,
265
+ "rev-parse",
266
+ "HEAD",
267
+ ])).trim();
268
+ if (rebasedHead === base) {
269
+ yield* Effect.logInfo("The revision already holds the previous salvage's changes; the Attempt starts from the revision", fields);
270
+ return withoutSalvage;
271
+ }
272
+ yield* Effect.logInfo("Resuming the Attempt from the previous salvage, rebased onto the revision", { ...fields, forkPoint: forkPoint.success, rebasedHead });
273
+ return { resume: salvage, conflicting: Option.none() };
274
+ });
275
+ /**
276
+ * Clones into a staging directory and promotes it on success, fetches the requested revision,
277
+ * and checks out a detached worktree at the resolved commit, applying the previous Attempt's
278
+ * salvage if the request resumes one. Registers the release finalizer before the first
279
+ * filesystem change.
280
+ */
281
+ export const provisionWorktree = Effect.fn("Executor.provisionWorktree")(function* (options) {
282
+ const { layout, ops, request } = options;
283
+ yield* Effect.annotateCurrentSpan({
284
+ attemptId: request.attemptId,
285
+ worker: request.worker,
286
+ host: options.host,
287
+ repository: request.repository,
288
+ });
289
+ // Registered first so a failed worktree creation, which can leave a directory and a
290
+ // bare-cache registration, is also cleaned up.
291
+ const release = yield* registerRelease(options);
292
+ const cleanup = cleanupFor(options);
73
293
  yield* ops.ensureRoots;
74
294
  yield* ops.removePath("prepare", layout.worktree);
75
295
  if (yield* ops.cacheExists) {
@@ -83,8 +303,8 @@ export const provisionWorktree = Effect.fn("Executor.provisionWorktree")(functio
83
303
  ]);
84
304
  }
85
305
  else {
86
- // Staging belongs to this locked clone only. Release it before unlocking,
87
- // including interruption between clone completion and cache promotion.
306
+ // Removes the staging clone before releasing the lock, including on interruption between
307
+ // clone and promotion.
88
308
  yield* Effect.scoped(Effect.gen(function* () {
89
309
  yield* Effect.addFinalizer(() => cleanup("partial-clone", ops.removePath("cleanup", layout.staging)));
90
310
  yield* ops.removePath("prepare", layout.staging);
@@ -115,33 +335,172 @@ export const provisionWorktree = Effect.fn("Executor.provisionWorktree")(functio
115
335
  ])).trim();
116
336
  const baseCommit = yield* decodeCommit(resolved).pipe(Effect.mapError((cause) => new ExecutorOperationError({
117
337
  operation: "prepare",
118
- message: "git returned an invalid object id",
338
+ message: "Git returned an invalid object ID",
119
339
  cause,
120
340
  })));
121
- yield* ops.git("prepare", [
122
- "--git-dir",
123
- layout.cache,
124
- "worktree",
125
- "add",
126
- "--detach",
127
- layout.worktree,
128
- baseCommit,
129
- ]);
130
- return new AttemptWorkspace({
341
+ const salvage = yield* fetchSalvage(options, request.resume);
342
+ const checkout = yield* checkOutWorktree(options, baseCommit, salvage);
343
+ yield* Ref.set(release.checkedOut, Option.some(baseCommit));
344
+ const gitHooks = yield* installPrePushHook(options);
345
+ const preparedAt = yield* DateTime.now;
346
+ return {
347
+ workspace: new AttemptWorkspace({
348
+ worker: request.worker,
349
+ spec: new AttemptChannel.RunSpec({
350
+ attemptId: request.attemptId,
351
+ repository: request.repository,
352
+ revision: request.revision,
353
+ baseCommit,
354
+ payload: request.payload,
355
+ task: request.task,
356
+ agent: request.agent,
357
+ parentModel: request.parentModel,
358
+ maxChildren: request.maxChildren,
359
+ parentEffort: request.parentEffort,
360
+ resume: checkout.resume,
361
+ conflictingSalvage: checkout.conflicting,
362
+ preparedAt: Option.some(preparedAt),
363
+ botLogin: request.botLogin,
364
+ }),
365
+ worktree: WorktreePath.make(layout.worktree),
366
+ }),
367
+ salvaged: release.salvaged,
368
+ recordSalvage: release.recordSalvage,
369
+ keepForReattach: release.keepForReattach,
370
+ keepUntilStopped: release.keepUntilStopped,
371
+ gitHooks,
372
+ };
373
+ });
374
+ /**
375
+ * Reuses an Attempt's checkout after an orchestrator restart without cloning, fetching, or
376
+ * checking out. The same release as a new checkout salvages and removes it when the Attempt
377
+ * ends.
378
+ */
379
+ export const reattachWorktree = Effect.fn("Executor.reattachWorktree")(function* (options) {
380
+ const { layout, request, spec } = options;
381
+ yield* Effect.annotateCurrentSpan({
382
+ attemptId: request.attemptId,
131
383
  worker: request.worker,
132
- spec: new AttemptChannel.RunSpec({
133
- attemptId: request.attemptId,
134
- repository: request.repository,
135
- revision: request.revision,
136
- baseCommit,
137
- payload: request.payload,
138
- task: request.task,
139
- agent: request.agent,
140
- parentModel: request.parentModel,
141
- maxChildren: request.maxChildren,
142
- parentEffort: request.parentEffort,
384
+ host: options.host,
385
+ repository: request.repository,
386
+ });
387
+ const release = yield* registerRelease(options);
388
+ yield* Ref.set(release.checkedOut, Option.some(spec.baseCommit));
389
+ const gitHooks = yield* installPrePushHook(options);
390
+ return {
391
+ workspace: new AttemptWorkspace({
392
+ worker: request.worker,
393
+ spec,
394
+ worktree: WorktreePath.make(layout.worktree),
143
395
  }),
144
- worktree: WorktreePath.make(layout.worktree),
396
+ salvaged: release.salvaged,
397
+ recordSalvage: release.recordSalvage,
398
+ keepForReattach: release.keepForReattach,
399
+ keepUntilStopped: release.keepUntilStopped,
400
+ gitHooks,
401
+ };
402
+ });
403
+ /**
404
+ * Returns the recovery of an unsuccessful Attempt's checkout that its launch kept while the parent
405
+ * task's stop was unconfirmed.
406
+ */
407
+ export const keptCheckoutRecovery = (request) => ({
408
+ attemptId: request.attemptId,
409
+ worker: request.worker,
410
+ repository: request.repository,
411
+ ref: request.salvageRef,
412
+ permissions: request.permissions,
413
+ succeeded: false,
414
+ open: false,
415
+ rejected: Option.none(),
416
+ });
417
+ /** Returns the span and log fields of `attempt`, with whether its recorded salvage was rejected. */
418
+ export const recoveryFields = (attempt) => ({
419
+ ...attempt,
420
+ rejected: Option.isSome(attempt.rejected),
421
+ });
422
+ /**
423
+ * Reconciles a checkout left by an earlier process, or kept while its parent task's stop was
424
+ * unconfirmed: salvages it without a known base, records the result, and removes the worktree
425
+ * only after its work is pushed. Checkouts of succeeded Attempts and of `permissions: read` Loops
426
+ * are removed without salvage.
427
+ */
428
+ export const recoverWorktree = Effect.fn("Executor.recoverWorktree")(function* (options, record) {
429
+ const { attempt, host, worktree } = options;
430
+ const fields = { ...recoveryFields(attempt), host, worktree };
431
+ yield* Effect.annotateCurrentSpan(fields);
432
+ if (attempt.succeeded || attempt.permissions === "read") {
433
+ yield* options.removeCheckout;
434
+ yield* Effect.logInfo(attempt.succeeded
435
+ ? "Released the checkout of a succeeded Attempt"
436
+ : "Released the checkout of an Attempt whose Loop has read permissions, without salvage", fields);
437
+ return;
438
+ }
439
+ const salvage = yield* salvageWorktree({
440
+ ...attempt,
441
+ host,
442
+ worktree,
443
+ baseCommit: Option.none(),
444
+ git: options.git,
145
445
  });
446
+ if (Option.isNone(salvage))
447
+ return;
448
+ yield* record(salvage.value);
449
+ if (salvage.value._tag !== "Pushed")
450
+ return;
451
+ yield* options.removeCheckout;
452
+ yield* Effect.logInfo("Reconciled and released Attempt salvage", fields);
453
+ });
454
+ /**
455
+ * Fetches the previous Attempt's salvage ref into the cache. If the ref no longer exists, logs
456
+ * a warning and the Attempt starts from its base revision.
457
+ */
458
+ const fetchSalvage = Effect.fn("Executor.fetchSalvage")(function* (options, resume) {
459
+ if (Option.isNone(resume))
460
+ return Option.none();
461
+ const { layout, ops, request } = options;
462
+ const fields = {
463
+ attemptId: request.attemptId,
464
+ worker: request.worker,
465
+ host: options.host,
466
+ ref: resume.value.ref,
467
+ };
468
+ yield* Effect.annotateCurrentSpan(fields);
469
+ const ref = `refs/heads/${resume.value.ref}`;
470
+ const advertised = yield* ops.git("prepare", [
471
+ "--git-dir",
472
+ layout.cache,
473
+ "ls-remote",
474
+ "--heads",
475
+ "origin",
476
+ ref,
477
+ ]);
478
+ if (advertised.trim() === "") {
479
+ yield* Effect.logWarning("Salvage ref deleted; the Attempt starts from its base revision", fields);
480
+ return Option.none();
481
+ }
482
+ const fetched = yield* ops
483
+ .git("prepare", [
484
+ "--git-dir",
485
+ layout.cache,
486
+ "fetch",
487
+ "--force",
488
+ "origin",
489
+ `refs/heads/${resume.value.ref}`,
490
+ ])
491
+ .pipe(Effect.andThen(ops.git("prepare", ["--git-dir", layout.cache, "rev-parse", "FETCH_HEAD"])), Effect.flatMap((output) => decodeCommit(output.trim()).pipe(Effect.mapError((cause) => new ExecutorOperationError({
492
+ operation: "prepare",
493
+ message: "Git returned an invalid salvage object ID",
494
+ cause,
495
+ })))));
496
+ if (fetched !== resume.value.commit) {
497
+ yield* Effect.logWarning("Salvage ref moved since it was recorded; resuming from its head", {
498
+ ...fields,
499
+ recorded: resume.value.commit,
500
+ current: fetched,
501
+ });
502
+ }
503
+ yield* Effect.logInfo("Fetched the previous Attempt's salvage", { ...fields, commit: fetched });
504
+ return Option.some(new SalvagePushed({ ref: resume.value.ref, commit: fetched }));
146
505
  });
147
506
  //# sourceMappingURL=provision.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provision.js","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,GAEb,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;AAEjG,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAA0B,EAAU,EAAE,CACvE,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,sBAAsB,EAAE,CAAC;AAExD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAW,EAAE,CAC7D,KAAK,CAAC,MAAM,GAAG,sBAAsB,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AAEzF,MAAM,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AA6B3D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAChF,OAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,CAAI,QAAgB,EAAE,MAA2B,EAAE,EAAE,CACnE,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,QAAQ,CAAC,kCAAkC,EAAE;QAClD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ;QACR,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;KACvB,CAAC,CACH,EACD,MAAM,CAAC,MAAM,CACd,CAAC;IACJ,4EAA4E;IAC5E,4EAA4E;IAC5E,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CACxB,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC;QAC7C,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE;YAClD,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,UAAU,CAAC,wCAAwC,EAAE;YAC1D,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACvB,CAAC,CACH,EACD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAClC,CAAC;QACF,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,CAAC,OAAO,CACZ,cAAc,EACd,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;gBACjB,WAAW;gBACX,MAAM,CAAC,KAAK;gBACZ,UAAU;gBACV,QAAQ;gBACR,SAAS;gBACT,MAAM,CAAC,QAAQ;aAChB,CAAC,CACH,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjF,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,CAAC,OAAO,CACZ,oBAAoB,EACpB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CACrE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;IACvB,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;YACxB,WAAW;YACX,MAAM,CAAC,KAAK;YACZ,QAAQ;YACR,SAAS;YACT,QAAQ;YACR,OAAO,CAAC,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,0EAA0E;QAC1E,uEAAuE;QACvE,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAC9B,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CACpE,CAAC;YACF,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACjD,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;gBACxB,OAAO;gBACP,QAAQ;gBACR,oBAAoB;gBACpB,OAAO,CAAC,GAAG;gBACX,MAAM,CAAC,OAAO;aACf,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;QAC5B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QACxB,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,OAAO;QACP,SAAS;QACT,SAAS;QACT,QAAQ;QACR,OAAO,CAAC,QAAQ;KACjB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QAC1C,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,WAAW;QACX,YAAY;KACb,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACX,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,sBAAsB,CAAC;QACzB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,mCAAmC;QAC5C,KAAK;KACN,CAAC,CACL,CACF,CAAC;IACF,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QACxB,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,UAAU;QACV,KAAK;QACL,UAAU;QACV,MAAM,CAAC,QAAQ;QACf,UAAU;KACX,CAAC,CAAC;IACH,OAAO,IAAI,gBAAgB,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC;YAC/B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;QACF,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"provision.js","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAGL,aAAa,GACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvF,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,GAEb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAA0B,EAAU,EAAE,CACvE,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,sBAAsB,EAAE,CAAC;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAW,EAAE,CAC7D,KAAK,CAAC,MAAM,GAAG,sBAAsB,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AAEzF,MAAM,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAkD3D;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,GAAgE,EAChE,MAAmD,EACnD,eAA0E,EAC1D,EAAE,CAAC,CAAC;IACpB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CACd,MAAM,CAAC,MAAM,CACX,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QACjB,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,UAAU;QACV,KAAK;QACL,UAAU;QACV,MAAM,CAAC,QAAQ;QACf,MAAM;KACP,CAAC,CACH;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,CACpB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QACjB,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,UAAU;QACV,QAAQ;QACR,SAAS;QACT,MAAM,CAAC,QAAQ;KAChB,CAAC,CACH;IACD,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,eAAe;IACf,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,UAAU,CAAC,wCAAwC,EAAE;YAC1D,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACvB,CAAC,CACH,EACD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAClC,CAAC;QACF,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,CAAC,OAAO,CACZ,cAAc,EACd,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;gBACjB,WAAW;gBACX,MAAM,CAAC,KAAK;gBACZ,UAAU;gBACV,QAAQ;gBACR,SAAS;gBACT,MAAM,CAAC,QAAQ;aAChB,CAAC,CACH,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjF,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,CAAC,OAAO,CACZ,oBAAoB,EACpB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CACrE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;CACL,CAAC,CAAC;AA8CH,mFAAmF;AACnF,MAAM,UAAU,GACd,CAAI,OAA+D,EAAkB,EAAE,CACvF,CAAI,QAAgB,EAAE,MAA2B,EAAE,EAAE,CACnD,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,QAAQ,CAAC,kCAAkC,EAAE;IAClD,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;IACpC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;IAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;IACjC,QAAQ;IACR,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;CACvB,CAAC,CACH,EACD,MAAM,CAAC,MAAM,CACd,CAAC;AAEN;;;;GAIG;AACH,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EACrE,OAA0B;IAE1B,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAa,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAiD,CAAC;IACvF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAkC,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAW,CAAC,CAAC;IACrD,8FAA8F;IAC9F,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CACxB,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI;QACnD,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,OAAO,CAAC,KAAK,KAAK,UAAU;gBAC1B,CAAC,CAAC,8DAA8D;gBAChE,CAAC,CAAC,sGAAsG,EAC1G;gBACE,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CACF,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,OAAO,GACX,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAChD,CAAC,CAAC,OAAO,CAAC,WAAW,KAAK,MAAM;gBAC9B,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,qFAAqF,EACrF;oBACE,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CACF,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAkB,CAAC,CAAC;gBAClD,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC;oBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,UAAU;oBACV,GAAG,EAAE,OAAO,CAAC,UAAU;oBACvB,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;oBACvB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;iBACjD,CAAC;YACN,CAAC,CAAC,MAAM,CAAC,IAAI,EAAkB,CAAC;QACpC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC3C,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,0DAA0D,EAAE;oBACnF,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACjD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,0DAA0D,EAAE;oBACjF,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;iBAChC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;QACD,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC5D,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,8DAA8D,EAAE;gBACvF,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE;YAClD,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CACH,CAAC;IACF,OAAO;QACL,UAAU;QACV,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAClC,aAAa,EAAE,CAAC,MAAsC,EAAE,EAAE,CACxD,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAU,UAAU,CAAC,CAAC;QAChE,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAU,kBAAkB,CAAC,CAAC;KAC1E,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,EAAK,OAKjF;IACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC;IACF,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;QACpC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CACpB,iEAAiE,EACjE,MAAM,CACP,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,EAAU,CAAC;IAC/B,CAAC;IACD,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;QACvD,IAAI;QACJ,MAAM,CAAC,QAAQ;QACf,WAAW;QACX,oBAAoB;KACrB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACX,MAAM,KAAK,GAAG,GAAG,YAAY,IAAI,wBAAwB,EAAE,CAAC;IAC5D,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,KAAK,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,+FAA+F,EAC/F,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CACrB,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AASH,MAAM,cAAc,GAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;AAE9F;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EACvE,OAA4B,EAC5B,IAAe,EACf,OAAqC;IAErC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,IAA2B,EAAE,EAAE,CAC9C,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC7B,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IACtC,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG;QACH,MAAM;QACN,IAAI;KACL,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CACnD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAA4B,CAAC;IACnF,CAAC,CAAC,CAAC;IACL,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EACrC,MAAM,CAAC,MAAM,CACd,CAAC;IACF,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,CAAC,QAAQ,CACpB,oIAAoI,EACpI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAClC,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,iGAAiG,EACjG,MAAM,CACP,CAAC;QACF,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,IAAI,SAAS,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gDAAgD,EAAE,MAAM,CAAC,CAAC;QAChF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,EAA4B,CAAC;IACnF,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ;SAChC,GAAG,CAAC,SAAS,EAAE;QACd,IAAI;QACJ,MAAM,CAAC,QAAQ;QACf,IAAI;QACJ,sBAAsB;QACtB,QAAQ;QACR,aAAa;QACb,QAAQ;QACR,IAAI;QACJ,SAAS,CAAC,OAAO;KAClB,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC5B,OAAO,KAAK,CAAC,CAAC,QAAQ,CACpB,kIAAkI,EAClI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAChC,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;QACtD,IAAI;QACJ,MAAM,CAAC,QAAQ;QACf,WAAW;QACX,MAAM;KACP,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACX,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,iGAAiG,EACjG,MAAM,CACP,CAAC;QACF,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,2EAA2E,EAC3E,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,CACzD,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,EAA4B,CAAC;AACnF,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAEhF,OAA4B;IAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,oFAAoF;IACpF,+CAA+C;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;IACvB,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC3B,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;YACxB,WAAW;YACX,MAAM,CAAC,KAAK;YACZ,QAAQ;YACR,SAAS;YACT,QAAQ;YACR,OAAO,CAAC,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,yFAAyF;QACzF,uBAAuB;QACvB,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAC9B,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CACpE,CAAC;YACF,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACjD,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;gBACxB,OAAO;gBACP,QAAQ;gBACR,oBAAoB;gBACpB,OAAO,CAAC,GAAG;gBACX,MAAM,CAAC,OAAO;aACf,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;QAC5B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QACxB,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,OAAO;QACP,SAAS;QACT,SAAS;QACT,QAAQ;QACR,OAAO,CAAC,QAAQ;KACjB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QAC1C,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,WAAW;QACX,YAAY;KACb,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACX,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,sBAAsB,CAAC;QACzB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,mCAAmC;QAC5C,KAAK;KACN,CAAC,CACL,CACF,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACvE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;IACvC,OAAO;QACL,SAAS,EAAE,IAAI,gBAAgB,CAAC;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC;gBAC/B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU;gBACV,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,kBAAkB,EAAE,QAAQ,CAAC,WAAW;gBACxC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YACF,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC7C,CAAC;QACF,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,QAAQ;KACqB,CAAC;AAClC,CAAC,CAAC,CAAC;AAOH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAC9E,OAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAC1C,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChD,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO;QACL,SAAS,EAAE,IAAI,gBAAgB,CAAC;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI;YACJ,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC7C,CAAC;QACF,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,QAAQ;KACqB,CAAC;AAClC,CAAC,CAAC,CAAC;AAeH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAwB,EAAmB,EAAE,CAAC,CAAC;IAClF,SAAS,EAAE,OAAO,CAAC,SAAS;IAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,UAAU,EAAE,OAAO,CAAC,UAAU;IAC9B,GAAG,EAAE,OAAO,CAAC,UAAU;IACvB,WAAW,EAAE,OAAO,CAAC,WAAW;IAChC,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;CACxB,CAAC,CAAC;AAEH,oGAAoG;AACpG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,CAAC;IAC3D,GAAG,OAAO;IACV,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;CAC1C,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAI5E,OAA2B,EAC3B,MAAqE;IAErE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC5C,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9D,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACxD,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QAC9B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,OAAO,CAAC,SAAS;YACf,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,sFAAsF,EAC1F,MAAM,CACP,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC;QACrC,GAAG,OAAO;QACV,IAAI;QACJ,QAAQ;QACR,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;QACzB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO;IACnC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO;IAC5C,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC9B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,yCAAyC,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EAC/D,OAA4B,EAC5B,MAAoC;IAEpC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,EAAiB,CAAC;IAC/D,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;KACtB,CAAC;IACF,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,cAAc,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;QAC3C,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,WAAW;QACX,SAAS;QACT,QAAQ;QACR,GAAG;KACJ,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7B,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,gEAAgE,EAChE,MAAM,CACP,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,EAAiB,CAAC;IACtC,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG;SACvB,GAAG,CAAC,SAAS,EAAE;QACd,WAAW;QACX,MAAM,CAAC,KAAK;QACZ,OAAO;QACP,SAAS;QACT,QAAQ;QACR,cAAc,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;KACjC,CAAC;SACD,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAC1F,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC9B,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,sBAAsB,CAAC;QACzB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,2CAA2C;QACpD,KAAK;KACN,CAAC,CACL,CACF,CACF,CACF,CAAC;IACJ,IAAI,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,iEAAiE,EAAE;YAC1F,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;YAC7B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAChG,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACpF,CAAC,CAAC,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { type HostInvocation, RemoteShell, type SshCommand } from "@usine/agents/child-host";
2
+ import type { SshDestination } from "@usine/core/worker";
3
+ import { Effect, Redacted } from "effect";
4
+ import { ChildProcessSpawner } from "effect/process";
5
+ import { type CommandResult } from "../child-command.ts";
6
+ import type { ExecutorOperation, ExecutorOperationError } from "../executor.ts";
7
+ /**
8
+ * The working directory and extra environment for a remote command. `scrub` is applied to the
9
+ * output first, so a credential printed by git or gh isn't kept in any error, log, or parsed
10
+ * result.
11
+ */
12
+ export interface RemoteContext extends Pick<HostInvocation, "cwd" | "environment"> {
13
+ readonly scrub?: (text: string) => string;
14
+ }
15
+ export interface RemoteCommands {
16
+ /** Returns the shell for one machine, used by the Attempt's children and the commands below. */
17
+ readonly shellFor: (ssh: SshCommand, destination: SshDestination) => RemoteShell;
18
+ /** Runs a local command, such as the exe.dev lobby, with only the SSH client's environment. */
19
+ readonly local: (operation: ExecutorOperation, host: string, command: string, args: ReadonlyArray<string>) => Effect.Effect<string, ExecutorOperationError>;
20
+ /** Runs a remote command and returns its exit code and output without checking the exit code. */
21
+ readonly inspect: (operation: ExecutorOperation, shell: RemoteShell, command: string, args: ReadonlyArray<string>) => Effect.Effect<CommandResult, ExecutorOperationError>;
22
+ /** Runs a remote command and returns its stdout. Fails if it exits non-zero. */
23
+ readonly run: (operation: ExecutorOperation, shell: RemoteShell, command: string, args: ReadonlyArray<string>, context?: RemoteContext) => Effect.Effect<string, ExecutorOperationError>;
24
+ /** Runs a remote command with `input` on stdin, so a secret isn't in the command line or logs. */
25
+ readonly runWithInput: (operation: ExecutorOperation, shell: RemoteShell, command: string, args: ReadonlyArray<string>, input: Redacted.Redacted<string>) => Effect.Effect<string, ExecutorOperationError>;
26
+ }
27
+ /**
28
+ * The variables the local SSH client inherits. GitHub and factory credentials in the
29
+ * orchestrator environment aren't passed to the client or the machine.
30
+ */
31
+ export declare const SSH_ENVIRONMENT_ALLOWLIST: readonly ["HOME", "LANG", "LC_ALL", "PATH", "SHELL", "SSH_AGENT_PID", "SSH_AUTH_SOCK", "TMPDIR", "USER"];
32
+ /**
33
+ * The default SSH client for remote Workers. Its keepalive options make a dead TCP connection
34
+ * exit non-zero instead of hanging.
35
+ */
36
+ export declare const DEFAULT_SSH: SshCommand;
37
+ /**
38
+ * Returns `shell` with `variables` sent through OpenSSH `SendEnv` instead of the command line,
39
+ * so the values aren't in arguments, logs, or process listings. The remote sshd drops names
40
+ * not in its `AcceptEnv`.
41
+ */
42
+ export declare const sendingShell: (shell: RemoteShell, variables: Readonly<Record<string, Redacted.Redacted<string>>>) => RemoteShell;
43
+ /** The `RemoteCommands` that use this process's spawner and the allowlisted SSH environment. */
44
+ export declare const remoteCommandsFor: Effect.Effect<{
45
+ shellFor: (ssh: SshCommand, destination: SshDestination) => RemoteShell;
46
+ local: (operation: "cancel" | "cleanup" | "launch" | "preflight" | "prepare", host: string, command: string, args: readonly string[]) => Effect.Effect<string, ExecutorOperationError, never>;
47
+ inspect: (operation: ExecutorOperation, shell: RemoteShell, command: string, args: ReadonlyArray<string>) => Effect.Effect<CommandResult, ExecutorOperationError>;
48
+ run: (operation: "cancel" | "cleanup" | "launch" | "preflight" | "prepare", shell: RemoteShell, command: string, args: readonly string[], context?: RemoteContext | undefined) => Effect.Effect<string, ExecutorOperationError, never>;
49
+ runWithInput: (operation: "cancel" | "cleanup" | "launch" | "preflight" | "prepare", shell: RemoteShell, command: string, args: readonly string[], input: Redacted.Redacted<string>) => Effect.Effect<string, ExecutorOperationError, never>;
50
+ }, never, ChildProcessSpawner.ChildProcessSpawner>;
51
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/remote/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,KAAK,UAAU,EAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAU,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEhF;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,aAAa,CAAC;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,KAAK,WAAW,CAAC;IACjF,+FAA+F;IAC/F,QAAQ,CAAC,KAAK,EAAE,CACd,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,KACxB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACnD,iGAAiG;IACjG,QAAQ,CAAC,OAAO,EAAE,CAChB,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,KACxB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;IAC1D,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,CACZ,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,OAAO,CAAC,EAAE,aAAa,KACpB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACnD,kGAAkG;IAClG,QAAQ,CAAC,YAAY,EAAE,CACrB,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACpD;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,YACpC,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,EACP,eAAe,EACf,eAAe,EACf,QAAQ,EACR,MAAM,CACE,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,UAGzB,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,YAAY,UAChB,WAAW,aACP,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAC7D,WAcF,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,iBAAiB;oBAIL,UAAU,eAAe,cAAc;;yBA4BjD,iBAAiB,SACrB,WAAW,WACT,MAAM,QACT,aAAa,CAAC,MAAM,CAAC,KAC1B,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;;;kDAuDvD,CAAC"}