@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.
- package/LICENSE +661 -21
- package/README.md +212 -37
- package/dist/child-command.d.ts +5 -8
- package/dist/child-command.d.ts.map +1 -1
- package/dist/child-command.js +10 -14
- package/dist/child-command.js.map +1 -1
- package/dist/child-environment.d.ts +19 -0
- package/dist/child-environment.d.ts.map +1 -0
- package/dist/child-environment.js +18 -0
- package/dist/child-environment.js.map +1 -0
- package/dist/claude-login-lock.d.ts +9 -0
- package/dist/claude-login-lock.d.ts.map +1 -0
- package/dist/claude-login-lock.js +15 -0
- package/dist/claude-login-lock.js.map +1 -0
- package/dist/cloudflare/client.d.ts +50 -0
- package/dist/cloudflare/client.d.ts.map +1 -0
- package/dist/cloudflare/client.js +108 -0
- package/dist/cloudflare/client.js.map +1 -0
- package/dist/cloudflare/cloudflare.d.ts +17 -0
- package/dist/cloudflare/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare/cloudflare.js +704 -0
- package/dist/cloudflare/cloudflare.js.map +1 -0
- package/dist/cloudflare/model.d.ts +42 -0
- package/dist/cloudflare/model.d.ts.map +1 -0
- package/dist/cloudflare/model.js +2 -0
- package/dist/cloudflare/model.js.map +1 -0
- package/dist/cloudflare/shell/environment.d.ts +12 -0
- package/dist/cloudflare/shell/environment.d.ts.map +1 -0
- package/dist/cloudflare/shell/environment.js +12 -0
- package/dist/cloudflare/shell/environment.js.map +1 -0
- package/dist/cloudflare/shell/shell.d.ts +2 -0
- package/dist/cloudflare/shell/shell.d.ts.map +1 -0
- package/dist/cloudflare/shell/shell.js +155 -0
- package/dist/cloudflare/shell/shell.js.map +1 -0
- package/dist/credential-environment.d.ts +20 -0
- package/dist/credential-environment.d.ts.map +1 -0
- package/dist/credential-environment.js +20 -0
- package/dist/credential-environment.js.map +1 -0
- package/dist/durable-session.d.ts +81 -0
- package/dist/durable-session.d.ts.map +1 -0
- package/dist/durable-session.js +550 -0
- package/dist/durable-session.js.map +1 -0
- package/dist/exe-dev/commands.d.ts +23 -13
- package/dist/exe-dev/commands.d.ts.map +1 -1
- package/dist/exe-dev/commands.js +11 -57
- package/dist/exe-dev/commands.js.map +1 -1
- package/dist/exe-dev/exe-dev.d.ts +9 -3
- package/dist/exe-dev/exe-dev.d.ts.map +1 -1
- package/dist/exe-dev/exe-dev.js +61 -128
- package/dist/exe-dev/exe-dev.js.map +1 -1
- package/dist/exe-dev/grants.d.ts.map +1 -1
- package/dist/exe-dev/grants.js +35 -15
- package/dist/exe-dev/grants.js.map +1 -1
- package/dist/exe-dev/model.d.ts +15 -19
- package/dist/exe-dev/model.d.ts.map +1 -1
- package/dist/exe-dev/model.js +9 -12
- package/dist/exe-dev/model.js.map +1 -1
- package/dist/exe-dev/preflight.d.ts +8 -4
- package/dist/exe-dev/preflight.d.ts.map +1 -1
- package/dist/exe-dev/preflight.js +26 -35
- package/dist/exe-dev/preflight.js.map +1 -1
- package/dist/executor.d.ts +292 -44
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +187 -19
- package/dist/executor.js.map +1 -1
- package/dist/guard.d.ts +57 -7
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +274 -59
- package/dist/guard.js.map +1 -1
- package/dist/harness-preflight.d.ts +27 -5
- package/dist/harness-preflight.d.ts.map +1 -1
- package/dist/harness-preflight.js +32 -31
- package/dist/harness-preflight.js.map +1 -1
- package/dist/keyed-lock.d.ts +2 -3
- package/dist/keyed-lock.d.ts.map +1 -1
- package/dist/keyed-lock.js +2 -3
- package/dist/keyed-lock.js.map +1 -1
- package/dist/leftovers.d.ts +9 -0
- package/dist/leftovers.d.ts.map +1 -0
- package/dist/leftovers.js +14 -0
- package/dist/leftovers.js.map +1 -0
- package/dist/local/credentials.d.ts +21 -0
- package/dist/local/credentials.d.ts.map +1 -0
- package/dist/local/credentials.js +39 -0
- package/dist/local/credentials.js.map +1 -0
- package/dist/local/leftovers.d.ts +8 -0
- package/dist/local/leftovers.d.ts.map +1 -0
- package/dist/local/leftovers.js +23 -0
- package/dist/local/leftovers.js.map +1 -0
- package/dist/local/local.d.ts +17 -11
- package/dist/local/local.d.ts.map +1 -1
- package/dist/local/local.js +205 -132
- package/dist/local/local.js.map +1 -1
- package/dist/memory-preflight.d.ts +27 -0
- package/dist/memory-preflight.d.ts.map +1 -0
- package/dist/memory-preflight.js +83 -0
- package/dist/memory-preflight.js.map +1 -0
- package/dist/pre-push-hook.d.ts +20 -0
- package/dist/pre-push-hook.d.ts.map +1 -0
- package/dist/pre-push-hook.js +33 -0
- package/dist/pre-push-hook.js.map +1 -0
- package/dist/prepared-attempt.d.ts +41 -3
- package/dist/prepared-attempt.d.ts.map +1 -1
- package/dist/prepared-attempt.js +109 -31
- package/dist/prepared-attempt.js.map +1 -1
- package/dist/provision.d.ts +129 -15
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +428 -69
- package/dist/provision.js.map +1 -1
- package/dist/remote/commands.d.ts +51 -0
- package/dist/remote/commands.d.ts.map +1 -0
- package/dist/remote/commands.js +94 -0
- package/dist/remote/commands.js.map +1 -0
- package/dist/remote/container.d.ts +90 -0
- package/dist/remote/container.d.ts.map +1 -0
- package/dist/remote/container.js +480 -0
- package/dist/remote/container.js.map +1 -0
- package/dist/remote/leftovers.d.ts +14 -0
- package/dist/remote/leftovers.d.ts.map +1 -0
- package/dist/remote/leftovers.js +22 -0
- package/dist/remote/leftovers.js.map +1 -0
- package/dist/remote/liveness.d.ts +33 -0
- package/dist/remote/liveness.d.ts.map +1 -0
- package/dist/remote/liveness.js +196 -0
- package/dist/remote/liveness.js.map +1 -0
- package/dist/remote/machine.d.ts +110 -0
- package/dist/remote/machine.d.ts.map +1 -0
- package/dist/remote/machine.js +2 -0
- package/dist/remote/machine.js.map +1 -0
- package/dist/remote/remote.d.ts +28 -0
- package/dist/remote/remote.d.ts.map +1 -0
- package/dist/remote/remote.js +556 -0
- package/dist/remote/remote.js.map +1 -0
- package/dist/remote/sweep.d.ts +17 -0
- package/dist/remote/sweep.d.ts.map +1 -0
- package/dist/remote/sweep.js +117 -0
- package/dist/remote/sweep.js.map +1 -0
- package/dist/renewable-credential.d.ts +17 -0
- package/dist/renewable-credential.d.ts.map +1 -0
- package/dist/renewable-credential.js +58 -0
- package/dist/renewable-credential.js.map +1 -0
- package/dist/salvage.d.ts +38 -0
- package/dist/salvage.d.ts.map +1 -0
- package/dist/salvage.js +198 -0
- package/dist/salvage.js.map +1 -0
- package/dist/ssh/api-keys.d.ts +36 -0
- package/dist/ssh/api-keys.d.ts.map +1 -0
- package/dist/ssh/api-keys.js +72 -0
- package/dist/ssh/api-keys.js.map +1 -0
- package/dist/ssh/codex-homes.d.ts +21 -0
- package/dist/ssh/codex-homes.d.ts.map +1 -0
- package/dist/ssh/codex-homes.js +78 -0
- package/dist/ssh/codex-homes.js.map +1 -0
- package/dist/ssh/container.d.ts +32 -0
- package/dist/ssh/container.d.ts.map +1 -0
- package/dist/ssh/container.js +282 -0
- package/dist/ssh/container.js.map +1 -0
- package/dist/ssh/credentials.d.ts +43 -0
- package/dist/ssh/credentials.d.ts.map +1 -0
- package/dist/ssh/credentials.js +86 -0
- package/dist/ssh/credentials.js.map +1 -0
- package/dist/ssh/gateway/admin.d.ts +45 -0
- package/dist/ssh/gateway/admin.d.ts.map +1 -0
- package/dist/ssh/gateway/admin.js +129 -0
- package/dist/ssh/gateway/admin.js.map +1 -0
- package/dist/ssh/gateway/attachments.d.ts +31 -0
- package/dist/ssh/gateway/attachments.d.ts.map +1 -0
- package/dist/ssh/gateway/attachments.js +168 -0
- package/dist/ssh/gateway/attachments.js.map +1 -0
- package/dist/ssh/gateway/environment.d.ts +71 -0
- package/dist/ssh/gateway/environment.d.ts.map +1 -0
- package/dist/ssh/gateway/environment.js +148 -0
- package/dist/ssh/gateway/environment.js.map +1 -0
- package/dist/ssh/gateway/forward.d.ts +74 -0
- package/dist/ssh/gateway/forward.d.ts.map +1 -0
- package/dist/ssh/gateway/forward.js +247 -0
- package/dist/ssh/gateway/forward.js.map +1 -0
- package/dist/ssh/gateway/preflight.d.ts +67 -0
- package/dist/ssh/gateway/preflight.d.ts.map +1 -0
- package/dist/ssh/gateway/preflight.js +320 -0
- package/dist/ssh/gateway/preflight.js.map +1 -0
- package/dist/ssh/limits.d.ts +60 -0
- package/dist/ssh/limits.d.ts.map +1 -0
- package/dist/ssh/limits.js +84 -0
- package/dist/ssh/limits.js.map +1 -0
- package/dist/ssh/model.d.ts +153 -0
- package/dist/ssh/model.d.ts.map +1 -0
- package/dist/ssh/model.js +2 -0
- package/dist/ssh/model.js.map +1 -0
- package/dist/ssh/preflight.d.ts +35 -0
- package/dist/ssh/preflight.d.ts.map +1 -0
- package/dist/ssh/preflight.js +87 -0
- package/dist/ssh/preflight.js.map +1 -0
- package/dist/ssh/provisioner/boat.d.ts +33 -0
- package/dist/ssh/provisioner/boat.d.ts.map +1 -0
- package/dist/ssh/provisioner/boat.js +247 -0
- package/dist/ssh/provisioner/boat.js.map +1 -0
- package/dist/ssh/provisioner/hetzner.d.ts +32 -0
- package/dist/ssh/provisioner/hetzner.d.ts.map +1 -0
- package/dist/ssh/provisioner/hetzner.js +337 -0
- package/dist/ssh/provisioner/hetzner.js.map +1 -0
- package/dist/ssh/provisioner/host-key.d.ts +11 -0
- package/dist/ssh/provisioner/host-key.d.ts.map +1 -0
- package/dist/ssh/provisioner/host-key.js +57 -0
- package/dist/ssh/provisioner/host-key.js.map +1 -0
- package/dist/ssh/provisioner/http.d.ts +45 -0
- package/dist/ssh/provisioner/http.d.ts.map +1 -0
- package/dist/ssh/provisioner/http.js +72 -0
- package/dist/ssh/provisioner/http.js.map +1 -0
- package/dist/ssh/provisioner/machines.d.ts +48 -0
- package/dist/ssh/provisioner/machines.d.ts.map +1 -0
- package/dist/ssh/provisioner/machines.js +686 -0
- package/dist/ssh/provisioner/machines.js.map +1 -0
- package/dist/ssh/provisioner/model.d.ts +92 -0
- package/dist/ssh/provisioner/model.d.ts.map +1 -0
- package/dist/ssh/provisioner/model.js +37 -0
- package/dist/ssh/provisioner/model.js.map +1 -0
- package/dist/ssh/ssh.d.ts +23 -0
- package/dist/ssh/ssh.d.ts.map +1 -0
- package/dist/ssh/ssh.js +145 -0
- package/dist/ssh/ssh.js.map +1 -0
- package/dist/ssh/worker-records.d.ts +18 -0
- package/dist/ssh/worker-records.d.ts.map +1 -0
- package/dist/ssh/worker-records.js +100 -0
- package/dist/ssh/worker-records.js.map +1 -0
- package/dist/ssh/workers.d.ts +80 -0
- package/dist/ssh/workers.d.ts.map +1 -0
- package/dist/ssh/workers.js +247 -0
- package/dist/ssh/workers.js.map +1 -0
- package/package.json +25 -9
- package/dist/exe-dev/channel.d.ts +0 -12
- package/dist/exe-dev/channel.d.ts.map +0 -1
- package/dist/exe-dev/channel.js +0 -42
- package/dist/exe-dev/channel.js.map +0 -1
- package/dist/exe-dev/shell.d.ts +0 -12
- package/dist/exe-dev/shell.d.ts.map +0 -1
- package/dist/exe-dev/shell.js +0 -31
- package/dist/exe-dev/shell.js.map +0 -1
- package/dist/exe-dev/sweep.d.ts +0 -10
- package/dist/exe-dev/sweep.d.ts.map +0 -1
- package/dist/exe-dev/sweep.js +0 -117
- package/dist/exe-dev/sweep.js.map +0 -1
- package/dist/invalid-frame.d.ts +0 -17
- package/dist/invalid-frame.d.ts.map +0 -1
- package/dist/invalid-frame.js +0 -111
- package/dist/invalid-frame.js.map +0 -1
- package/dist/run-host-session.d.ts +0 -27
- package/dist/run-host-session.d.ts.map +0 -1
- package/dist/run-host-session.js +0 -303
- 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 {
|
|
3
|
-
import {
|
|
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
|
-
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
-
*
|
|
19
|
-
*
|
|
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
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
87
|
-
//
|
|
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: "
|
|
338
|
+
message: "Git returned an invalid object ID",
|
|
119
339
|
cause,
|
|
120
340
|
})));
|
|
121
|
-
yield*
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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
|
package/dist/provision.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.js","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provision.js","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|