@usine/executor 0.2.1 → 0.3.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/README.md +115 -37
- package/dist/child-command.d.ts +4 -7
- package/dist/child-command.d.ts.map +1 -1
- package/dist/child-command.js +6 -12
- package/dist/child-command.js.map +1 -1
- package/dist/claude-login-lock.d.ts +8 -0
- package/dist/claude-login-lock.d.ts.map +1 -0
- package/dist/claude-login-lock.js +9 -0
- package/dist/claude-login-lock.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 +63 -0
- package/dist/durable-session.d.ts.map +1 -0
- package/dist/durable-session.js +491 -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 +53 -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 +23 -33
- package/dist/exe-dev/preflight.js.map +1 -1
- package/dist/executor.d.ts +140 -41
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +90 -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 +273 -59
- package/dist/guard.js.map +1 -1
- package/dist/harness-preflight.d.ts +25 -4
- package/dist/harness-preflight.d.ts.map +1 -1
- package/dist/harness-preflight.js +25 -29
- 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 +16 -10
- package/dist/local/local.d.ts.map +1 -1
- package/dist/local/local.js +163 -129
- package/dist/local/local.js.map +1 -1
- package/dist/memory-preflight.d.ts +25 -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 +33 -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 +77 -14
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +357 -55
- 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/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 +194 -0
- package/dist/remote/liveness.js.map +1 -0
- package/dist/remote/machine.d.ts +64 -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 +24 -0
- package/dist/remote/remote.d.ts.map +1 -0
- package/dist/remote/remote.js +308 -0
- package/dist/remote/remote.js.map +1 -0
- package/dist/remote/sweep.d.ts +15 -0
- package/dist/remote/sweep.d.ts.map +1 -0
- package/dist/remote/sweep.js +116 -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 +30 -0
- package/dist/salvage.d.ts.map +1 -0
- package/dist/salvage.js +104 -0
- package/dist/salvage.js.map +1 -0
- package/dist/ssh/credentials.d.ts +40 -0
- package/dist/ssh/credentials.d.ts.map +1 -0
- package/dist/ssh/credentials.js +83 -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 +22 -0
- package/dist/ssh/gateway/attachments.d.ts.map +1 -0
- package/dist/ssh/gateway/attachments.js +154 -0
- package/dist/ssh/gateway/attachments.js.map +1 -0
- package/dist/ssh/gateway/environment.d.ts +52 -0
- package/dist/ssh/gateway/environment.d.ts.map +1 -0
- package/dist/ssh/gateway/environment.js +78 -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 +28 -0
- package/dist/ssh/gateway/preflight.d.ts.map +1 -0
- package/dist/ssh/gateway/preflight.js +234 -0
- package/dist/ssh/gateway/preflight.js.map +1 -0
- package/dist/ssh/model.d.ts +65 -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 +16 -0
- package/dist/ssh/preflight.d.ts.map +1 -0
- package/dist/ssh/preflight.js +47 -0
- package/dist/ssh/preflight.js.map +1 -0
- package/dist/ssh/ssh.d.ts +20 -0
- package/dist/ssh/ssh.d.ts.map +1 -0
- package/dist/ssh/ssh.js +78 -0
- package/dist/ssh/ssh.js.map +1 -0
- package/dist/ssh/workers.d.ts +53 -0
- package/dist/ssh/workers.d.ts.map +1 -0
- package/dist/ssh/workers.js +173 -0
- package/dist/ssh/workers.js.map +1 -0
- package/package.json +12 -4
- 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/keyed-lock.d.ts
CHANGED
|
@@ -3,9 +3,8 @@ export interface KeyedLock<in K> {
|
|
|
3
3
|
readonly withLock: (key: K) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* `make({ permits: 1 })` serializes every key behind a single global permit.
|
|
6
|
+
* Returns one mutex per key. `PartitionedSemaphore` doesn't provide this: its `permits` is one
|
|
7
|
+
* shared pool, so `make({ permits: 1 })` serializes every key.
|
|
9
8
|
*/
|
|
10
9
|
export declare const keyedLockFor: <K>() => Effect.Effect<KeyedLock<K>>;
|
|
11
10
|
//# sourceMappingURL=keyed-lock.d.ts.map
|
package/dist/keyed-lock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyed-lock.d.ts","sourceRoot":"","sources":["../src/keyed-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,QAAQ,CAAC;AAEhD,MAAM,WAAW,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CACjB,GAAG,EAAE,CAAC,KACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAC1E;AAED
|
|
1
|
+
{"version":3,"file":"keyed-lock.d.ts","sourceRoot":"","sources":["../src/keyed-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,QAAQ,CAAC;AAEhD,MAAM,WAAW,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CACjB,GAAG,EAAE,CAAC,KACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAC1E;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,OAAK,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAcxD,CAAC"}
|
package/dist/keyed-lock.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Effect, Ref, Semaphore } from "effect";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* `make({ permits: 1 })` serializes every key behind a single global permit.
|
|
3
|
+
* Returns one mutex per key. `PartitionedSemaphore` doesn't provide this: its `permits` is one
|
|
4
|
+
* shared pool, so `make({ permits: 1 })` serializes every key.
|
|
6
5
|
*/
|
|
7
6
|
export const keyedLockFor = () => Effect.map(Ref.make(new Map()), (locks) => ({
|
|
8
7
|
withLock: (key) => {
|
package/dist/keyed-lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyed-lock.js","sourceRoot":"","sources":["../src/keyed-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAQhD
|
|
1
|
+
{"version":3,"file":"keyed-lock.js","sourceRoot":"","sources":["../src/keyed-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAQhD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAmC,EAAE,CAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClE,QAAQ,EAAE,CAAC,GAAM,EAAE,EAAE;QACnB,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;YAChE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAU,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,OAAO,CAAU,MAA8B,EAA0B,EAAE,CACzE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,CAAC;CACF,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { WorkerName } from "@usine/core/worker";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
/**
|
|
4
|
+
* Caches `list` per Worker for the life of one executor; concurrent callers share one listing.
|
|
5
|
+
* Failures are cached too, so an unreachable Worker is listed once and its checkouts stay until
|
|
6
|
+
* the next start.
|
|
7
|
+
*/
|
|
8
|
+
export declare const listedOncePerWorker: <A, E>(list: (worker: WorkerName) => Effect.Effect<A, E>) => Effect.Effect<(worker: WorkerName) => Effect.Effect<A, E, never>, never, never>;
|
|
9
|
+
//# sourceMappingURL=leftovers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leftovers.d.ts","sourceRoot":"","sources":["../src/leftovers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAS,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAwD,CAAC,EAAE,CAAC,iBAC3E,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,4BAcjC,UAAU,8CAC1B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Cache, Effect } from "effect";
|
|
2
|
+
/**
|
|
3
|
+
* Caches `list` per Worker for the life of one executor; concurrent callers share one listing.
|
|
4
|
+
* Failures are cached too, so an unreachable Worker is listed once and its checkouts stay until
|
|
5
|
+
* the next start.
|
|
6
|
+
*/
|
|
7
|
+
export const listedOncePerWorker = Effect.fn("Executor.listedOncePerWorker")(function* (list) {
|
|
8
|
+
const listed = yield* Cache.make({
|
|
9
|
+
capacity: Number.POSITIVE_INFINITY,
|
|
10
|
+
lookup: (worker) => list(worker).pipe(Effect.tapError((error) => Effect.logWarning("Could not list leftover checkouts; this Worker is not reconciled until the next start", { worker, message: String(error) }))),
|
|
11
|
+
});
|
|
12
|
+
return (worker) => Cache.get(listed, worker);
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=leftovers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leftovers.js","sourceRoot":"","sources":["../src/leftovers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,EACpF,IAAiD;IAEjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,iBAAiB;QAClC,MAAM,EAAE,CAAC,MAAkB,EAAE,EAAE,CAC7B,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACf,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,UAAU,CACf,uFAAuF,EACvF,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CACnC,CACF,CACF;KACJ,CAAC,CAAC;IACH,OAAO,CAAC,MAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Effect, FileSystem } from "effect";
|
|
2
|
+
import { CredentialProvider, ExecutorOperationError } from "../executor.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Writes the Attempt's renewed credential to a private temporary directory outside the
|
|
5
|
+
* checkout, removed when the Attempt scope closes.
|
|
6
|
+
*/
|
|
7
|
+
export declare const localCredentialsFor: Effect.Effect<(repository: string & import("effect/Brand").Brand<"RepositoryName">, attemptId: string & import("effect/Brand").Brand<"AttemptId">, permissions: "read" | "write", baseEnvironment: Record<string, string>) => Effect.Effect<{
|
|
8
|
+
refresh: () => Effect.Effect<void, import("../executor.ts").CredentialUnavailableError | import("effect/PlatformError").PlatformError, never>;
|
|
9
|
+
scrub: (text: string) => string;
|
|
10
|
+
environment: {
|
|
11
|
+
GH_CONFIG_DIR: string;
|
|
12
|
+
GH_PROMPT_DISABLED: string;
|
|
13
|
+
USINE_GITHUB_TOKEN_FILE: string;
|
|
14
|
+
GIT_CONFIG_COUNT: string;
|
|
15
|
+
GIT_CONFIG_KEY_0: string;
|
|
16
|
+
GIT_CONFIG_VALUE_0: string;
|
|
17
|
+
GIT_CONFIG_KEY_1: string;
|
|
18
|
+
GIT_CONFIG_VALUE_1: string;
|
|
19
|
+
};
|
|
20
|
+
}, import("../executor.ts").CredentialUnavailableError | ExecutorOperationError, import("effect/Scope").Scope>, never, CredentialProvider | FileSystem.FileSystem>;
|
|
21
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/local/credentials.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAY,MAAM,QAAQ,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAyB,MAAM,gBAAgB,CAAC;AAGnG;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;kKAsD9B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Effect, FileSystem, Redacted } from "effect";
|
|
2
|
+
import { credentialEnvironment, GH_CONFIG, ghHostsConfig } from "../credential-environment.js";
|
|
3
|
+
import { CredentialProvider, ExecutorOperationError } from "../executor.js";
|
|
4
|
+
import { renewableCredential } from "../renewable-credential.js";
|
|
5
|
+
/**
|
|
6
|
+
* Writes the Attempt's renewed credential to a private temporary directory outside the
|
|
7
|
+
* checkout, removed when the Attempt scope closes.
|
|
8
|
+
*/
|
|
9
|
+
export const localCredentialsFor = Effect.gen(function* () {
|
|
10
|
+
const provider = yield* CredentialProvider;
|
|
11
|
+
const fs = yield* FileSystem.FileSystem;
|
|
12
|
+
return Effect.fn("LocalExecutor.credentials")(function* (repository, attemptId, permissions, baseEnvironment) {
|
|
13
|
+
yield* Effect.annotateCurrentSpan({ repository, attemptId, permissions });
|
|
14
|
+
const directory = yield* fs.makeTempDirectoryScoped({ prefix: "usine-credentials-" });
|
|
15
|
+
yield* fs.chmod(directory, 0o700);
|
|
16
|
+
yield* fs.writeFileString(`${directory}/config.yml`, GH_CONFIG, { mode: 0o600 });
|
|
17
|
+
const { refresh, scrub } = yield* renewableCredential(provider.issue, repository, attemptId, permissions, Effect.fn("LocalExecutor.writeCredential")(function* ({ value }) {
|
|
18
|
+
// Writes then renames so readers never see a partial token.
|
|
19
|
+
yield* fs.writeFileString(`${directory}/token.next`, Redacted.value(value), {
|
|
20
|
+
mode: 0o600,
|
|
21
|
+
});
|
|
22
|
+
yield* fs.rename(`${directory}/token.next`, `${directory}/token`);
|
|
23
|
+
yield* fs.writeFileString(`${directory}/hosts.next`, ghHostsConfig(Redacted.value(value)), {
|
|
24
|
+
mode: 0o600,
|
|
25
|
+
});
|
|
26
|
+
yield* fs.rename(`${directory}/hosts.next`, `${directory}/hosts.yml`);
|
|
27
|
+
}));
|
|
28
|
+
return {
|
|
29
|
+
refresh,
|
|
30
|
+
scrub,
|
|
31
|
+
environment: { ...baseEnvironment, ...credentialEnvironment(directory) },
|
|
32
|
+
};
|
|
33
|
+
}, (effect) => effect.pipe(Effect.catchTag("PlatformError", (cause) => Effect.fail(new ExecutorOperationError({
|
|
34
|
+
operation: "prepare",
|
|
35
|
+
message: "Can't write the attempt's credential files",
|
|
36
|
+
cause,
|
|
37
|
+
})))));
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/local/credentials.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAyB,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC;IAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,OAAO,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAC3C,QAAQ,CAAC,EACP,UAA0B,EAC1B,SAAoB,EACpB,WAA4B,EAC5B,eAAuC;QAEvC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACtF,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAClC,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,SAAS,aAAa,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,mBAAmB,CACnD,QAAQ,CAAC,KAAK,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,MAAM,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAoB;YAC/E,4DAA4D;YAC5D,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,SAAS,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC1E,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,SAAS,aAAa,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;YAClE,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CACvB,GAAG,SAAS,aAAa,EACzB,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EACpC;gBACE,IAAI,EAAE,KAAK;aACZ,CACF,CAAC;YACF,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,SAAS,aAAa,EAAE,GAAG,SAAS,YAAY,CAAC,CAAC;QACxE,CAAC,CAAC,CACH,CAAC;QACF,OAAO;YACL,OAAO;YACP,KAAK;YACL,WAAW,EAAE,EAAE,GAAG,eAAe,EAAE,GAAG,qBAAqB,CAAC,SAAS,CAAC,EAAE;SACzE,CAAC;IACJ,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CACzC,MAAM,CAAC,IAAI,CACT,IAAI,sBAAsB,CAAC;QACzB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,4CAA4C;QACrD,KAAK;KACN,CAAC,CACH,CACF,CACF,CACJ,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { WorkerName } from "@usine/core/worker";
|
|
2
|
+
import { Effect, FileSystem, Path } from "effect";
|
|
3
|
+
/**
|
|
4
|
+
* Lists checkout paths under each local Worker's `attempts` directory, once per Worker per
|
|
5
|
+
* executor. Returns an empty set if the directory doesn't exist.
|
|
6
|
+
*/
|
|
7
|
+
export declare const workerLeftoversFor: (workersRoot: string) => Effect.Effect<(worker: WorkerName) => Effect.Effect<ReadonlySet<string>, import("effect/PlatformError").PlatformError, never>, never, FileSystem.FileSystem | Path.Path>;
|
|
8
|
+
//# sourceMappingURL=leftovers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leftovers.d.ts","sourceRoot":"","sources":["../../src/local/leftovers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,mMAqB7B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Effect, FileSystem, Path } from "effect";
|
|
2
|
+
import { listedOncePerWorker } from "../leftovers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Lists checkout paths under each local Worker's `attempts` directory, once per Worker per
|
|
5
|
+
* executor. Returns an empty set if the directory doesn't exist.
|
|
6
|
+
*/
|
|
7
|
+
export const workerLeftoversFor = Effect.fn("LocalExecutor.workerLeftoversFor")(function* (workersRoot) {
|
|
8
|
+
const fileSystem = yield* FileSystem.FileSystem;
|
|
9
|
+
const path = yield* Path.Path;
|
|
10
|
+
return yield* listedOncePerWorker(Effect.fn("LocalExecutor.listWorkerLeftovers")(function* (worker) {
|
|
11
|
+
yield* Effect.annotateCurrentSpan({ worker, host: "local" });
|
|
12
|
+
const root = path.join(workersRoot, worker, "attempts");
|
|
13
|
+
const entries = (yield* fileSystem.exists(root)) ? yield* fileSystem.readDirectory(root) : [];
|
|
14
|
+
const checkouts = new Set(entries.map((entry) => path.join(root, entry)));
|
|
15
|
+
yield* Effect.logInfo("Listed local checkouts left for reconciliation", {
|
|
16
|
+
worker,
|
|
17
|
+
host: "local",
|
|
18
|
+
checkouts: checkouts.size,
|
|
19
|
+
});
|
|
20
|
+
return checkouts;
|
|
21
|
+
}));
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=leftovers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leftovers.js","sourceRoot":"","sources":["../../src/local/leftovers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,EACvF,WAAmB;IAEnB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAC/B,MAAM,CAAC,EAAE,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAkB;QAC1E,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,SAAS,GAAwB,IAAI,GAAG,CAC5C,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAC/C,CAAC;QACF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gDAAgD,EAAE;YACtE,MAAM;YACN,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,SAAS,CAAC,IAAI;SAC1B,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/dist/local/local.d.ts
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
|
+
import { ClaudeLoginLock } from "@usine/agents/runtime";
|
|
1
2
|
import { RepositoryName } from "@usine/core/repository";
|
|
2
3
|
import { InstanceDirectory } from "@usine/core/instance";
|
|
4
|
+
import type { AttemptRuntime } from "@usine/durable/attempt-runtime";
|
|
3
5
|
import { Effect, FileSystem, Layer, Path } from "effect";
|
|
4
6
|
import { ChildProcessSpawner } from "effect/unstable/process";
|
|
5
|
-
import { CredentialProvider, Executor
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
import { CredentialProvider, Executor } from "../executor.ts";
|
|
8
|
+
import { type HarnessProbe } from "../harness-preflight.ts";
|
|
9
|
+
export type { HarnessProbe } from "../harness-preflight.ts";
|
|
8
10
|
export interface LocalExecutorOptions {
|
|
9
|
-
/**
|
|
11
|
+
/** The directory for local Worker caches and Attempt checkouts. */
|
|
10
12
|
readonly instanceDirectory: InstanceDirectory;
|
|
11
|
-
/**
|
|
12
|
-
readonly runHost: RunHostCommand;
|
|
13
|
-
/** Repository fetch URL override, for example a local mirror; defaults to the GitHub HTTPS clone URL. */
|
|
13
|
+
/** Returns the fetch URL for `repository`, for example a local mirror. Defaults to the GitHub HTTPS clone URL. */
|
|
14
14
|
readonly repositoryUrl?: (repository: RepositoryName) => string;
|
|
15
|
-
/**
|
|
15
|
+
/** The timeout for the parent task's cancellation, then separately for the Attempt to finish. Defaults to two seconds. */
|
|
16
16
|
readonly interruptGrace?: Parameters<typeof Effect.timeoutOption>[1];
|
|
17
|
+
/** Defaults to the `@usine/agents/preflight` checks, which send no prompt. */
|
|
18
|
+
readonly harnessReadiness?: HarnessProbe;
|
|
17
19
|
}
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
+
/**
|
|
21
|
+
* The executor for the local machine. Each Attempt runs in its own checkout with its Pi parent
|
|
22
|
+
* as a durable task in this process (`AttemptRuntime`), so a live Attempt reattaches after an
|
|
23
|
+
* orchestrator restart. Requires Node.
|
|
24
|
+
*/
|
|
25
|
+
export declare const layer: (options: LocalExecutorOptions) => Layer.Layer<Executor, never, AttemptRuntime | ClaudeLoginLock | CredentialProvider | FileSystem.FileSystem | Path.Path | ChildProcessSpawner.ChildProcessSpawner>;
|
|
20
26
|
//# sourceMappingURL=local.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/local/local.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/local/local.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD,OAAO,EAAE,cAAc,EAAe,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAMzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,MAAM,EACN,UAAU,EACV,KAAK,EAEL,IAAI,EAIL,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAqB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAIjF,OAAO,EAGL,kBAAkB,EAClB,QAAQ,EAMT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,yBAAyB,CAAC;AAkBjC,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,kHAAkH;IAClH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,MAAM,CAAC;IAChE,0HAA0H;IAC1H,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,8EAA8E;IAC9E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,CAAC;CAC1C;AAgcD;;;;GAIG;AACH,eAAO,MAAM,KAAK,YACP,oBAAoB,KAC5B,KAAK,CAAC,KAAK,CACZ,QAAQ,EACR,KAAK,EACH,cAAc,GACd,eAAe,GACf,kBAAkB,GAClB,UAAU,CAAC,UAAU,GACrB,IAAI,CAAC,IAAI,GACT,mBAAmB,CAAC,mBAAmB,CACY,CAAC"}
|