@usine/orchestrator 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 +174 -52
- package/dist/board/items.d.ts +22 -3
- package/dist/board/items.d.ts.map +1 -1
- package/dist/board/items.js +44 -4
- package/dist/board/items.js.map +1 -1
- package/dist/board/projection.d.ts +8 -1
- package/dist/board/projection.d.ts.map +1 -1
- package/dist/board/projection.js +63 -14
- package/dist/board/projection.js.map +1 -1
- package/dist/board/tasks.d.ts +15 -3
- package/dist/board/tasks.d.ts.map +1 -1
- package/dist/board/tasks.js +28 -9
- package/dist/board/tasks.js.map +1 -1
- package/dist/cloudflare.d.ts +32 -0
- package/dist/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare.js +68 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/credentials.d.ts +5 -6
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +22 -15
- package/dist/credentials.js.map +1 -1
- package/dist/current-instance/changes.d.ts +87 -0
- package/dist/current-instance/changes.d.ts.map +1 -0
- package/dist/current-instance/changes.js +141 -0
- package/dist/current-instance/changes.js.map +1 -0
- package/dist/current-instance/current-instance.d.ts +89 -0
- package/dist/current-instance/current-instance.d.ts.map +1 -0
- package/dist/current-instance/current-instance.js +163 -0
- package/dist/current-instance/current-instance.js.map +1 -0
- package/dist/exe-dev.d.ts +6 -2
- package/dist/exe-dev.d.ts.map +1 -1
- package/dist/exe-dev.js +10 -9
- package/dist/exe-dev.js.map +1 -1
- package/dist/http-client.d.ts +8 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +8 -0
- package/dist/http-client.js.map +1 -0
- package/dist/idle-triggers.d.ts +1 -1
- package/dist/idle-triggers.d.ts.map +1 -1
- package/dist/idle-triggers.js +1 -1
- package/dist/idle-triggers.js.map +1 -1
- package/dist/label-reconciler.d.ts +5 -2
- package/dist/label-reconciler.d.ts.map +1 -1
- package/dist/label-reconciler.js.map +1 -1
- package/dist/lease-order.d.ts +60 -0
- package/dist/lease-order.d.ts.map +1 -0
- package/dist/lease-order.js +76 -0
- package/dist/lease-order.js.map +1 -0
- package/dist/local.d.ts +4 -18
- package/dist/local.d.ts.map +1 -1
- package/dist/local.js +9 -45
- package/dist/local.js.map +1 -1
- package/dist/loop-matches.d.ts +28 -0
- package/dist/loop-matches.d.ts.map +1 -0
- package/dist/loop-matches.js +74 -0
- package/dist/loop-matches.js.map +1 -0
- package/dist/operator/attempt.d.ts +76 -10
- package/dist/operator/attempt.d.ts.map +1 -1
- package/dist/operator/attempt.js +69 -11
- package/dist/operator/attempt.js.map +1 -1
- package/dist/operator/board.d.ts +48 -16
- package/dist/operator/board.d.ts.map +1 -1
- package/dist/operator/board.js +48 -17
- package/dist/operator/board.js.map +1 -1
- package/dist/operator/configuration.d.ts +314 -0
- package/dist/operator/configuration.d.ts.map +1 -0
- package/dist/operator/configuration.js +490 -0
- package/dist/operator/configuration.js.map +1 -0
- package/dist/operator/desk.d.ts +206 -0
- package/dist/operator/desk.d.ts.map +1 -0
- package/dist/operator/desk.js +525 -0
- package/dist/operator/desk.js.map +1 -0
- package/dist/operator/github-changes.d.ts +88 -0
- package/dist/operator/github-changes.d.ts.map +1 -0
- package/dist/operator/github-changes.js +266 -0
- package/dist/operator/github-changes.js.map +1 -0
- package/dist/operator/http.d.ts +135 -105
- package/dist/operator/http.d.ts.map +1 -1
- package/dist/operator/http.js +155 -30
- package/dist/operator/http.js.map +1 -1
- package/dist/operator/machines.d.ts +71 -0
- package/dist/operator/machines.d.ts.map +1 -0
- package/dist/operator/machines.js +103 -0
- package/dist/operator/machines.js.map +1 -0
- package/dist/operator/need.d.ts +58 -11
- package/dist/operator/need.d.ts.map +1 -1
- package/dist/operator/need.js +61 -9
- package/dist/operator/need.js.map +1 -1
- package/dist/operator/operator.d.ts +135 -29
- package/dist/operator/operator.d.ts.map +1 -1
- package/dist/operator/operator.js +370 -63
- package/dist/operator/operator.js.map +1 -1
- package/dist/operator/overview.d.ts +7 -7
- package/dist/operator/overview.d.ts.map +1 -1
- package/dist/operator/overview.js +5 -5
- package/dist/operator/overview.js.map +1 -1
- package/dist/operator/projection.d.ts +56 -5
- package/dist/operator/projection.d.ts.map +1 -1
- package/dist/operator/projection.js +108 -9
- package/dist/operator/projection.js.map +1 -1
- package/dist/operator/run.d.ts +101 -6
- package/dist/operator/run.d.ts.map +1 -1
- package/dist/operator/run.js +100 -7
- package/dist/operator/run.js.map +1 -1
- package/dist/operator/statistics/cache.d.ts +7 -0
- package/dist/operator/statistics/cache.d.ts.map +1 -0
- package/dist/operator/statistics/cache.js +40 -0
- package/dist/operator/statistics/cache.js.map +1 -0
- package/dist/operator/statistics/runs.d.ts +36 -0
- package/dist/operator/statistics/runs.d.ts.map +1 -0
- package/dist/operator/statistics/runs.js +284 -0
- package/dist/operator/statistics/runs.js.map +1 -0
- package/dist/operator/statistics/statistics.d.ts +20 -0
- package/dist/operator/statistics/statistics.d.ts.map +1 -0
- package/dist/operator/statistics/statistics.js +138 -0
- package/dist/operator/statistics/statistics.js.map +1 -0
- package/dist/operator/statistics/tasks.d.ts +30 -0
- package/dist/operator/statistics/tasks.d.ts.map +1 -0
- package/dist/operator/statistics/tasks.js +244 -0
- package/dist/operator/statistics/tasks.js.map +1 -0
- package/dist/operator/statistics/view.d.ts +302 -0
- package/dist/operator/statistics/view.d.ts.map +1 -0
- package/dist/operator/statistics/view.js +243 -0
- package/dist/operator/statistics/view.js.map +1 -0
- package/dist/operator/statistics/window.d.ts +24 -0
- package/dist/operator/statistics/window.d.ts.map +1 -0
- package/dist/operator/statistics/window.js +47 -0
- package/dist/operator/statistics/window.js.map +1 -0
- package/dist/operator/task.d.ts +94 -0
- package/dist/operator/task.d.ts.map +1 -0
- package/dist/operator/task.js +204 -0
- package/dist/operator/task.js.map +1 -0
- package/dist/operator/transcript.d.ts +12 -12
- package/dist/operator/transcript.d.ts.map +1 -1
- package/dist/operator/transcript.js +11 -9
- package/dist/operator/transcript.js.map +1 -1
- package/dist/operator/usage.d.ts +103 -0
- package/dist/operator/usage.d.ts.map +1 -0
- package/dist/operator/usage.js +234 -0
- package/dist/operator/usage.js.map +1 -0
- package/dist/orchestrator.d.ts +8 -5
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +4 -2
- package/dist/orchestrator.js.map +1 -1
- package/dist/polling/closed-item-asks.d.ts +8 -0
- package/dist/polling/closed-item-asks.d.ts.map +1 -0
- package/dist/polling/closed-item-asks.js +28 -0
- package/dist/polling/closed-item-asks.js.map +1 -0
- package/dist/polling/cycle.d.ts +28 -10
- package/dist/polling/cycle.d.ts.map +1 -1
- package/dist/polling/cycle.js +20 -6
- package/dist/polling/cycle.js.map +1 -1
- package/dist/polling/evaluation-failures.d.ts +42 -0
- package/dist/polling/evaluation-failures.d.ts.map +1 -0
- package/dist/polling/evaluation-failures.js +103 -0
- package/dist/polling/evaluation-failures.js.map +1 -0
- package/dist/polling/hints.d.ts +2 -2
- package/dist/polling/hints.d.ts.map +1 -1
- package/dist/polling/hints.js +2 -2
- package/dist/polling/hints.js.map +1 -1
- package/dist/polling/loop-evaluation.d.ts +21 -11
- package/dist/polling/loop-evaluation.d.ts.map +1 -1
- package/dist/polling/loop-evaluation.js +70 -27
- package/dist/polling/loop-evaluation.js.map +1 -1
- package/dist/polling/open-issues.d.ts +23 -0
- package/dist/polling/open-issues.d.ts.map +1 -0
- package/dist/polling/open-issues.js +77 -0
- package/dist/polling/open-issues.js.map +1 -0
- package/dist/polling/open-pull-requests.d.ts +28 -0
- package/dist/polling/open-pull-requests.d.ts.map +1 -0
- package/dist/polling/open-pull-requests.js +131 -0
- package/dist/polling/open-pull-requests.js.map +1 -0
- package/dist/polling/polling.d.ts +20 -11
- package/dist/polling/polling.d.ts.map +1 -1
- package/dist/polling/polling.js +215 -52
- package/dist/polling/polling.js.map +1 -1
- package/dist/polling/repository-sync.d.ts +21 -14
- package/dist/polling/repository-sync.d.ts.map +1 -1
- package/dist/polling/repository-sync.js +35 -28
- package/dist/polling/repository-sync.js.map +1 -1
- package/dist/polling-triggers.d.ts +1 -1
- package/dist/polling-triggers.d.ts.map +1 -1
- package/dist/polling-triggers.js +1 -1
- package/dist/polling-triggers.js.map +1 -1
- package/dist/reloads.d.ts +14 -0
- package/dist/reloads.d.ts.map +1 -0
- package/dist/reloads.js +7 -0
- package/dist/reloads.js.map +1 -0
- package/dist/runtime.d.ts +24 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +58 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schedule-triggers.d.ts +14 -10
- package/dist/schedule-triggers.d.ts.map +1 -1
- package/dist/schedule-triggers.js +36 -31
- package/dist/schedule-triggers.js.map +1 -1
- package/dist/scheduler.d.ts +45 -5
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +587 -44
- package/dist/scheduler.js.map +1 -1
- package/dist/ssh.d.ts +103 -0
- package/dist/ssh.d.ts.map +1 -0
- package/dist/ssh.js +144 -0
- package/dist/ssh.js.map +1 -0
- package/dist/trigger-condition.d.ts +12 -0
- package/dist/trigger-condition.d.ts.map +1 -0
- package/dist/trigger-condition.js +88 -0
- package/dist/trigger-condition.js.map +1 -0
- package/dist/trigger-submission.d.ts +16 -13
- package/dist/trigger-submission.d.ts.map +1 -1
- package/dist/trigger-submission.js +19 -14
- package/dist/trigger-submission.js.map +1 -1
- package/dist/worker-engine.d.ts +13 -0
- package/dist/worker-engine.d.ts.map +1 -0
- package/dist/worker-engine.js +56 -0
- package/dist/worker-engine.js.map +1 -0
- package/dist/worker-status.d.ts +140 -0
- package/dist/worker-status.d.ts.map +1 -0
- package/dist/worker-status.js +76 -0
- package/dist/worker-status.js.map +1 -0
- package/package.json +47 -22
|
@@ -8,16 +8,19 @@ import { LoopName } from "@usine/core/loop";
|
|
|
8
8
|
import { RepositoryRevision } from "@usine/core/repository";
|
|
9
9
|
import { Submission } from "@usine/engine/engine";
|
|
10
10
|
import { Effect, Match, Option, Result, Schema } from "effect";
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* The revision for issue and schedule Attempts, which resolve the remote's default branch at
|
|
13
|
+
* prepare time.
|
|
14
|
+
*/
|
|
12
15
|
export const DEFAULT_BRANCH_REVISION = RepositoryRevision.make("HEAD");
|
|
13
|
-
/** The
|
|
16
|
+
/** The Agent of a loaded Loop is no longer in the roster. */
|
|
14
17
|
export class LoopAgentResolutionError extends Schema.TaggedError("@usine/orchestrator/LoopAgentResolutionError")("LoopAgentResolutionError", {
|
|
15
18
|
loop: LoopName,
|
|
16
19
|
agent: AgentName,
|
|
17
20
|
message: Schema.NonEmptyString,
|
|
18
21
|
}) {
|
|
19
22
|
}
|
|
20
|
-
/** Resolves one
|
|
23
|
+
/** Resolves one Loop's roster Agent and effective parent model. */
|
|
21
24
|
export const resolveTriggerLoop = Effect.fn("TriggerRouting.resolveLoop")(function* (instance, loop) {
|
|
22
25
|
yield* Effect.annotateCurrentSpan({ loop: loop.name, agent: loop.agent });
|
|
23
26
|
const roster = new Map(instance.agents.map((agent) => [agent.name, agent]));
|
|
@@ -26,7 +29,7 @@ export const resolveTriggerLoop = Effect.fn("TriggerRouting.resolveLoop")(functi
|
|
|
26
29
|
return yield* new LoopAgentResolutionError({
|
|
27
30
|
loop: loop.name,
|
|
28
31
|
agent: loop.agent,
|
|
29
|
-
message: `Loop ${loop.name} references
|
|
32
|
+
message: `Loop "${loop.name}" references agent "${loop.agent}", which is not in the roster`,
|
|
30
33
|
});
|
|
31
34
|
}
|
|
32
35
|
const agent = loaded.agent;
|
|
@@ -36,12 +39,7 @@ export const resolveTriggerLoop = Effect.fn("TriggerRouting.resolveLoop")(functi
|
|
|
36
39
|
parentModel: resolveParentModel(agent, instance.config.settings.parentModel),
|
|
37
40
|
};
|
|
38
41
|
});
|
|
39
|
-
/**
|
|
40
|
-
* Resolves every loaded loop's agent. `InstanceFolder.load` already quarantines
|
|
41
|
-
* loops that name unknown agents, so a miss here means a hand-assembled
|
|
42
|
-
* instance drifted: the loop is skipped with a log each cycle and its siblings
|
|
43
|
-
* keep running.
|
|
44
|
-
*/
|
|
42
|
+
/** Resolves every loaded Loop's Agent, skipping and logging each Loop whose Agent is missing. */
|
|
45
43
|
export const resolveTriggerLoops = Effect.fn("TriggerRouting.resolveLoops")(function* (instance) {
|
|
46
44
|
const resolved = [];
|
|
47
45
|
for (const loop of instance.loops) {
|
|
@@ -59,7 +57,9 @@ export const resolveTriggerLoops = Effect.fn("TriggerRouting.resolveLoops")(func
|
|
|
59
57
|
}
|
|
60
58
|
return resolved;
|
|
61
59
|
});
|
|
62
|
-
/**
|
|
60
|
+
/** Returns the Loop's `max_cycles`, or `None` for a schedule Loop, whose Runs no budget counts. */
|
|
61
|
+
export const cycleLimitOf = (loop) => loop.trigger.on === "schedule" ? Option.none() : Option.some(loop.maxCycles);
|
|
62
|
+
/** Builds the Submission that every trigger stream sends to the engine. */
|
|
63
63
|
export const triggerSubmission = (options) => new Submission({
|
|
64
64
|
event: new Event({
|
|
65
65
|
id: EventId.make(options.dedupKey),
|
|
@@ -72,21 +72,26 @@ export const triggerSubmission = (options) => new Submission({
|
|
|
72
72
|
loop: options.loop.name,
|
|
73
73
|
step: options.loop.step,
|
|
74
74
|
approval: options.loop.approval,
|
|
75
|
-
|
|
75
|
+
permissions: options.loop.permissions,
|
|
76
|
+
cycleLimit: cycleLimitOf(options.loop),
|
|
76
77
|
repository: options.repository.name,
|
|
77
78
|
revision: options.revision,
|
|
78
79
|
task: options.task,
|
|
79
80
|
agent: options.agent,
|
|
80
81
|
parentModel: options.parentModel,
|
|
81
82
|
});
|
|
82
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Returns the log fields for a submission outcome: the Run ID for a claim or suppression, the
|
|
85
|
+
* reason for an ignore.
|
|
86
|
+
*/
|
|
83
87
|
export const submissionLogFields = (submission) => Match.valueTags(submission, {
|
|
84
88
|
Claimed: ({ runId }) => ({ runId }),
|
|
85
89
|
Queued: () => ({}),
|
|
90
|
+
Suppressed: ({ runId }) => ({ suppressedBy: runId }),
|
|
86
91
|
Ignored: ({ reason }) => ({ reason }),
|
|
87
92
|
CycleBlocked: ({ ask }) => ({ askId: ask.id, reason: "cycle-budget-exhausted" }),
|
|
88
93
|
});
|
|
89
|
-
/**
|
|
94
|
+
/** Returns the log fields for a config failure during triggering. */
|
|
90
95
|
export const configFileErrorLogFields = (error) => Option.match(error.expression, {
|
|
91
96
|
onNone: () => ({ configFile: error.file, configStage: error.stage }),
|
|
92
97
|
onSome: (expression) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-submission.js","sourceRoot":"","sources":["../src/trigger-submission.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"trigger-submission.js","sourceRoot":"","sources":["../src/trigger-submission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { UsineConfig } from "@usine/config/factory";
|
|
2
|
+
import type { BrainSpec } from "@usine/core/agent/brain";
|
|
3
|
+
import type { InstanceDirectory, InstanceId } from "@usine/core/instance";
|
|
4
|
+
import { GitHubCredentials } from "@usine/github/github-app";
|
|
5
|
+
import { Layer } from "effect";
|
|
6
|
+
/**
|
|
7
|
+
* Provides the engine for the Workers in `config`: the SSH executor if every Worker is `ssh`, the
|
|
8
|
+
* Cloudflare executor if every Worker is `cloudflare`, otherwise the local one. Fails at startup
|
|
9
|
+
* with `UnsupportedWorkerError` on any other mix. The SSH executor labels its Attempt containers
|
|
10
|
+
* with `instanceId`, so that instances that share the GitHub App and a machine keep each other's.
|
|
11
|
+
*/
|
|
12
|
+
export declare const workerEngineLayer: (instanceDirectory: InstanceDirectory, instanceId: InstanceId, config: UsineConfig, brains: ReadonlyArray<BrainSpec>) => Layer.Layer<import("@usine/engine/board-moves").BoardMoves | import("@usine/engine/cursor").CursorStore | import("@usine/engine/cycle-budget").CycleBudgets | import("@usine/engine/item-projection").ItemProjectionReader | import("@usine/engine/item-projection").ItemProjectionWriter | import("@usine/engine/loop-control").LoopControl | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionReader | import("@usine/engine/repository-label-projection").RepositoryLabelProjectionWriter | import("@usine/engine/engine").RunEngine | import("@usine/engine/run-reader").RunReader | import("@usine/engine/step-executor").StepExecutor | import("@usine/engine/engine").UnconfirmedStops | import("./worker-status.ts").WorkerStatus, import("@usine/engine/engine").AttemptCancellationError | import("@usine/executor").CredentialUnavailableError | import("@usine/engine/engine").EnginePersistenceError | import("@usine/executor").ExecutorOperationError | import("@usine/engine/engine").RunInterventionRejectedError | import("@usine/engine/engine").RunNotFoundError | import("@usine/engine/engine").RunOperationRejectedError | import("@usine/engine/engine").RunRetryBlockedError | import("./scheduler.ts").UnsupportedWorkerError | import("@usine/executor").WorkerCapabilityError, import("@usine/durable/attempt-runtime").AttemptRuntime | import("@usine/agents/runtime").ClaudeLoginLock | import("@usine/executor").CredentialProvider | import("./current-instance/current-instance.ts").CurrentInstance | import("@usine/github/github-app").GitHubApp | GitHubCredentials | import("@usine/engine/trigger-condition").TriggerCondition>;
|
|
13
|
+
//# sourceMappingURL=worker-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-engine.d.ts","sourceRoot":"","sources":["../src/worker-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAc/C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,sBACT,iBAAiB,cACxB,UAAU,UACd,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,wmDA+C/B,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { GitHubCredentials } from "@usine/github/github-app";
|
|
2
|
+
import { Effect, Layer, Option } from "effect";
|
|
3
|
+
import { cloudflareWorkerAddressesOf, cloudflareWorkersOf, layer as cloudflareLayer, } from "./cloudflare.js";
|
|
4
|
+
import { layer as localLayer } from "./local.js";
|
|
5
|
+
import { layer as sshLayer, sshWorkerAddressesOf, sshWorkerRecordsDirectory, sshWorkersOf, } from "./ssh.js";
|
|
6
|
+
/**
|
|
7
|
+
* Provides the engine for the Workers in `config`: the SSH executor if every Worker is `ssh`, the
|
|
8
|
+
* Cloudflare executor if every Worker is `cloudflare`, otherwise the local one. Fails at startup
|
|
9
|
+
* with `UnsupportedWorkerError` on any other mix. The SSH executor labels its Attempt containers
|
|
10
|
+
* with `instanceId`, so that instances that share the GitHub App and a machine keep each other's.
|
|
11
|
+
*/
|
|
12
|
+
export const workerEngineLayer = (instanceDirectory, instanceId, config, brains) => Layer.unwrap(Effect.gen(function* () {
|
|
13
|
+
const ssh = sshWorkersOf(config);
|
|
14
|
+
const workers = config.workers.map(({ name }) => name).join(",");
|
|
15
|
+
if (ssh.length === config.workers.length) {
|
|
16
|
+
const addresses = yield* sshWorkerAddressesOf(config);
|
|
17
|
+
// The GitHub App is the instance's identity (ADR 0011).
|
|
18
|
+
const { appId } = yield* GitHubCredentials;
|
|
19
|
+
const instance = `github-app-${String(appId)}`;
|
|
20
|
+
yield* Effect.logInfo("Running Attempts on SSH Workers", {
|
|
21
|
+
workers,
|
|
22
|
+
instance,
|
|
23
|
+
instanceId,
|
|
24
|
+
behindGateway: addresses
|
|
25
|
+
.filter(({ gateway }) => Option.isSome(gateway))
|
|
26
|
+
.map(({ name }) => name)
|
|
27
|
+
.join(","),
|
|
28
|
+
provisioned: addresses
|
|
29
|
+
.filter(({ machine }) => machine._tag === "Provisioned")
|
|
30
|
+
.map(({ name }) => name)
|
|
31
|
+
.join(","),
|
|
32
|
+
});
|
|
33
|
+
return sshLayer(instanceDirectory, config, brains, {
|
|
34
|
+
workers: addresses,
|
|
35
|
+
instance,
|
|
36
|
+
instanceId,
|
|
37
|
+
knownHostsDirectory: `${instanceDirectory}/.usine/known-hosts`,
|
|
38
|
+
workerRecordsDirectory: sshWorkerRecordsDirectory(instanceDirectory),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (cloudflareWorkersOf(config).length === config.workers.length) {
|
|
42
|
+
const addresses = yield* cloudflareWorkerAddressesOf(config);
|
|
43
|
+
// The GitHub App is the instance's identity (ADR 0011).
|
|
44
|
+
const { appId } = yield* GitHubCredentials;
|
|
45
|
+
const instance = `github-app-${String(appId)}`;
|
|
46
|
+
yield* Effect.logInfo("Running Attempts in Cloudflare sandboxes", {
|
|
47
|
+
workers,
|
|
48
|
+
instance,
|
|
49
|
+
workerUrls: addresses.map(({ workerUrl }) => workerUrl.origin).join(","),
|
|
50
|
+
});
|
|
51
|
+
return cloudflareLayer(instanceDirectory, config, brains, { workers: addresses, instance });
|
|
52
|
+
}
|
|
53
|
+
yield* Effect.logInfo("Running Attempts with the local executor", { workers });
|
|
54
|
+
return localLayer(instanceDirectory, config, brains, {});
|
|
55
|
+
}));
|
|
56
|
+
//# sourceMappingURL=worker-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-engine.js","sourceRoot":"","sources":["../src/worker-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { BrainSpec, Harness } from "@usine/core/agent/brain";
|
|
2
|
+
import type { ItemKey } from "@usine/core/item";
|
|
3
|
+
import type { LoopName } from "@usine/core/loop";
|
|
4
|
+
import type { RunId } from "@usine/core/run";
|
|
5
|
+
import type { ContainerLimits, WorkerName } from "@usine/core/worker";
|
|
6
|
+
import type { ExecutorError, MachineStatus, MachineUnavailableReason, PreflightReport, WorkerCapability } from "@usine/executor";
|
|
7
|
+
import { Context, type DateTime, Effect, Layer, Option, Result } from "effect";
|
|
8
|
+
import type { PipelinePosition } from "./lease-order.ts";
|
|
9
|
+
/** A Worker's current slot usage in the scheduler. */
|
|
10
|
+
export interface WorkerSlots {
|
|
11
|
+
readonly worker: WorkerName;
|
|
12
|
+
/** The maximum concurrent Attempts, or zero after a reload removed the Worker. */
|
|
13
|
+
readonly capacity: number;
|
|
14
|
+
/** The number of Attempts with a slot, which can exceed `capacity` after a reload lowered it. */
|
|
15
|
+
readonly leased: number;
|
|
16
|
+
}
|
|
17
|
+
/** A Run that waits for a Worker slot. */
|
|
18
|
+
export interface QueuedRun {
|
|
19
|
+
readonly runId: RunId;
|
|
20
|
+
readonly loop: LoopName;
|
|
21
|
+
readonly itemKey: ItemKey;
|
|
22
|
+
readonly position: PipelinePosition;
|
|
23
|
+
/**
|
|
24
|
+
* The fewest queued Runs that take a Worker slot before this one. Of the Runs that wait for their
|
|
25
|
+
* reattached Attempt's Worker, a Run that can take any Worker's slot counts only those of the
|
|
26
|
+
* Worker with the fewest, among the Workers that take new Attempts.
|
|
27
|
+
*/
|
|
28
|
+
readonly ahead: number;
|
|
29
|
+
}
|
|
30
|
+
/** A passed preflight check. */
|
|
31
|
+
export interface PreflightPassed {
|
|
32
|
+
readonly _tag: "Passed";
|
|
33
|
+
readonly checkedAt: DateTime.Utc;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A passed check of a Worker's own prerequisites that found it running Attempts without a
|
|
37
|
+
* capability that keeps them apart, such as an SSH Worker without Docker.
|
|
38
|
+
*/
|
|
39
|
+
export interface PreflightDegraded {
|
|
40
|
+
readonly _tag: "Degraded";
|
|
41
|
+
readonly checkedAt: DateTime.Utc;
|
|
42
|
+
/** The executor's summary for operators. */
|
|
43
|
+
readonly message: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A check that the preflight left for later, such as a provisioned Worker's harness checks,
|
|
47
|
+
* which run on its first machine each day.
|
|
48
|
+
*/
|
|
49
|
+
export interface PreflightDeferred {
|
|
50
|
+
readonly _tag: "Deferred";
|
|
51
|
+
readonly checkedAt: DateTime.Utc;
|
|
52
|
+
/** When the check runs instead, for operators. */
|
|
53
|
+
readonly message: string;
|
|
54
|
+
}
|
|
55
|
+
/** A preflight check that found a missing prerequisite or couldn't run. */
|
|
56
|
+
export interface PreflightFailed {
|
|
57
|
+
readonly _tag: "Failed";
|
|
58
|
+
readonly checkedAt: DateTime.Utc;
|
|
59
|
+
/** The missing prerequisite, or `None` if the check itself failed, such as a timed-out probe. */
|
|
60
|
+
readonly capability: Option.Option<WorkerCapability>;
|
|
61
|
+
/** The executor's summary for operators. */
|
|
62
|
+
readonly message: string;
|
|
63
|
+
}
|
|
64
|
+
/** The last outcome of one preflight check and when it ended. */
|
|
65
|
+
export type PreflightCheck = PreflightPassed | PreflightDegraded | PreflightDeferred | PreflightFailed;
|
|
66
|
+
/**
|
|
67
|
+
* A provisioned Worker that couldn't create a machine, and when it tries again. The Runs it
|
|
68
|
+
* would serve keep waiting.
|
|
69
|
+
*/
|
|
70
|
+
export interface ProvisioningPause {
|
|
71
|
+
readonly worker: WorkerName;
|
|
72
|
+
/** Why the creation failed, or `check` if the first machine of the day failed its preflight. */
|
|
73
|
+
readonly reason: MachineUnavailableReason | "check";
|
|
74
|
+
readonly message: string;
|
|
75
|
+
/** The number of failed creations in a row. */
|
|
76
|
+
readonly failures: number;
|
|
77
|
+
readonly failedAt: DateTime.Utc;
|
|
78
|
+
readonly retryAt: DateTime.Utc;
|
|
79
|
+
/** Whether the Worker still waits for `retryAt` before it creates a machine. */
|
|
80
|
+
readonly blocked: boolean;
|
|
81
|
+
}
|
|
82
|
+
/** The last preflight of one harness on a Worker. */
|
|
83
|
+
export interface HarnessPreflight {
|
|
84
|
+
readonly harness: Harness;
|
|
85
|
+
readonly check: PreflightCheck;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The last preflight of a Worker: its own prerequisites (machine, Git, memory, Gateway, and
|
|
89
|
+
* credentials), each checked harness, and the limits of its Attempt containers.
|
|
90
|
+
*/
|
|
91
|
+
export interface WorkerPreflight {
|
|
92
|
+
readonly worker: WorkerName;
|
|
93
|
+
/** `None` until a preflight checked the Worker's own prerequisites. */
|
|
94
|
+
readonly prerequisites: Option.Option<PreflightCheck>;
|
|
95
|
+
/** In harness name order. */
|
|
96
|
+
readonly harnesses: ReadonlyArray<HarnessPreflight>;
|
|
97
|
+
/**
|
|
98
|
+
* The limits of each Attempt container from the last passed preflight that checked the
|
|
99
|
+
* Worker's machine. `None` before one, or if that machine had no Docker.
|
|
100
|
+
*/
|
|
101
|
+
readonly containerLimits: Option.Option<ContainerLimits>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Returns `previous` updated with one preflight of `brains`. A degraded report passes every
|
|
105
|
+
* harness and records the prerequisites as degraded, and a deferred report records every
|
|
106
|
+
* harness as deferred and keeps the container limits, since it checked no machine. An
|
|
107
|
+
* unavailable harness fails that harness and passes the ones checked before it; any other
|
|
108
|
+
* failure fails only the prerequisites.
|
|
109
|
+
*/
|
|
110
|
+
export declare const recordPreflight: (previous: WorkerPreflight, brains: ReadonlyArray<BrainSpec>, checkedAt: DateTime.Utc, outcome: Result.Result<PreflightReport, ExecutorError>) => WorkerPreflight;
|
|
111
|
+
/** Returns the preflight record of a Worker that no preflight has checked. */
|
|
112
|
+
export declare const unchecked: (worker: WorkerName) => WorkerPreflight;
|
|
113
|
+
declare const WorkerStatus_base: Context.ServiceClass<WorkerStatus, "@usine/orchestrator/WorkerStatus", {
|
|
114
|
+
/**
|
|
115
|
+
* The slots of each Worker in `usine.yaml` order, then of each removed Worker until its last
|
|
116
|
+
* Attempt ends.
|
|
117
|
+
*/
|
|
118
|
+
readonly slots: Effect.Effect<ReadonlyArray<WorkerSlots>>;
|
|
119
|
+
/** The Runs that wait for a Worker slot, in the order they take one (`leaseOrder`). */
|
|
120
|
+
readonly queue: Effect.Effect<ReadonlyArray<QueuedRun>>;
|
|
121
|
+
/**
|
|
122
|
+
* The last preflight of each Worker checked since startup, including a refused reload's
|
|
123
|
+
* preflight.
|
|
124
|
+
*/
|
|
125
|
+
readonly preflights: Effect.Effect<ReadonlyArray<WorkerPreflight>>;
|
|
126
|
+
/** The machines of the provisioned Workers in flight, oldest first. */
|
|
127
|
+
readonly machines: Effect.Effect<ReadonlyArray<MachineStatus>>;
|
|
128
|
+
/** The provisioned Workers whose last machine creation failed. */
|
|
129
|
+
readonly provisioning: Effect.Effect<ReadonlyArray<ProvisioningPause>>;
|
|
130
|
+
}>;
|
|
131
|
+
/**
|
|
132
|
+
* The scheduler's current slot usage, queued Runs, last preflight of each Worker, and the
|
|
133
|
+
* provisioned Workers' machines and pauses.
|
|
134
|
+
*/
|
|
135
|
+
export declare class WorkerStatus extends WorkerStatus_base {
|
|
136
|
+
/** A status with no Workers, no queued Runs, and no preflights, as in setup mode. */
|
|
137
|
+
static readonly idle: Layer.Layer<WorkerStatus, never, never>;
|
|
138
|
+
}
|
|
139
|
+
export {};
|
|
140
|
+
//# sourceMappingURL=worker-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-status.d.ts","sourceRoot":"","sources":["../src/worker-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { HarnessUnavailableError } from "@usine/core/agent/capability";
|
|
2
|
+
import { Array as Arr, Context, Effect, Layer, Option, Order, Result, Schema, } from "effect";
|
|
3
|
+
const isHarnessUnavailable = Schema.is(HarnessUnavailableError);
|
|
4
|
+
const byHarness = Order.mapInput(Order.String, ({ harness }) => harness);
|
|
5
|
+
const withHarnesses = (harnesses, checked, check) => Arr.sort([
|
|
6
|
+
...harnesses.filter(({ harness }) => !checked.includes(harness)),
|
|
7
|
+
...checked.map((harness) => ({ harness, check })),
|
|
8
|
+
], byHarness);
|
|
9
|
+
/**
|
|
10
|
+
* Returns `previous` updated with one preflight of `brains`. A degraded report passes every
|
|
11
|
+
* harness and records the prerequisites as degraded, and a deferred report records every
|
|
12
|
+
* harness as deferred and keeps the container limits, since it checked no machine. An
|
|
13
|
+
* unavailable harness fails that harness and passes the ones checked before it; any other
|
|
14
|
+
* failure fails only the prerequisites.
|
|
15
|
+
*/
|
|
16
|
+
export const recordPreflight = (previous, brains, checkedAt, outcome) => {
|
|
17
|
+
const harnesses = Arr.dedupe(brains.map(({ harness }) => harness));
|
|
18
|
+
if (Result.isSuccess(outcome)) {
|
|
19
|
+
const passed = { _tag: "Passed", checkedAt };
|
|
20
|
+
return {
|
|
21
|
+
worker: previous.worker,
|
|
22
|
+
prerequisites: Option.some(Option.match(outcome.success.degraded, {
|
|
23
|
+
onNone: () => passed,
|
|
24
|
+
onSome: (message) => ({ _tag: "Degraded", checkedAt, message }),
|
|
25
|
+
})),
|
|
26
|
+
harnesses: withHarnesses(previous.harnesses, harnesses, Option.match(outcome.success.deferred, {
|
|
27
|
+
onNone: () => passed,
|
|
28
|
+
onSome: (message) => ({ _tag: "Deferred", checkedAt, message }),
|
|
29
|
+
})),
|
|
30
|
+
containerLimits: Option.isSome(outcome.success.deferred)
|
|
31
|
+
? previous.containerLimits
|
|
32
|
+
: outcome.success.containerLimits,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const error = outcome.failure;
|
|
36
|
+
const capability = error._tag === "WorkerCapabilityError" ? Option.some(error.capability) : Option.none();
|
|
37
|
+
const failed = { _tag: "Failed", checkedAt, capability, message: error.message };
|
|
38
|
+
if (error._tag === "WorkerCapabilityError" && isHarnessUnavailable(error.cause)) {
|
|
39
|
+
const unavailable = error.cause.harness;
|
|
40
|
+
const before = Arr.dedupe(Arr.takeWhile(brains, ({ harness }) => harness !== unavailable).map(({ harness }) => harness));
|
|
41
|
+
return {
|
|
42
|
+
worker: previous.worker,
|
|
43
|
+
prerequisites: previous.prerequisites,
|
|
44
|
+
harnesses: withHarnesses(withHarnesses(previous.harnesses, before, { _tag: "Passed", checkedAt }), [unavailable], failed),
|
|
45
|
+
containerLimits: previous.containerLimits,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
worker: previous.worker,
|
|
50
|
+
prerequisites: Option.some(failed),
|
|
51
|
+
harnesses: previous.harnesses,
|
|
52
|
+
containerLimits: previous.containerLimits,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
/** Returns the preflight record of a Worker that no preflight has checked. */
|
|
56
|
+
export const unchecked = (worker) => ({
|
|
57
|
+
worker,
|
|
58
|
+
prerequisites: Option.none(),
|
|
59
|
+
harnesses: [],
|
|
60
|
+
containerLimits: Option.none(),
|
|
61
|
+
});
|
|
62
|
+
/**
|
|
63
|
+
* The scheduler's current slot usage, queued Runs, last preflight of each Worker, and the
|
|
64
|
+
* provisioned Workers' machines and pauses.
|
|
65
|
+
*/
|
|
66
|
+
export class WorkerStatus extends Context.Service()("@usine/orchestrator/WorkerStatus") {
|
|
67
|
+
/** A status with no Workers, no queued Runs, and no preflights, as in setup mode. */
|
|
68
|
+
static idle = Layer.succeed(WorkerStatus)({
|
|
69
|
+
slots: Effect.succeed([]),
|
|
70
|
+
queue: Effect.succeed([]),
|
|
71
|
+
preflights: Effect.succeed([]),
|
|
72
|
+
machines: Effect.succeed([]),
|
|
73
|
+
provisioning: Effect.succeed([]),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=worker-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-status.js","sourceRoot":"","sources":["../src/worker-status.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usine/orchestrator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "The embeddable usine composition: the full engine as an Effect layer, startable in-process.",
|
|
5
|
-
"license": "
|
|
5
|
+
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git+https://github.com/basaltbytes/usine.git",
|
|
9
9
|
"directory": "packages/orchestrator"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
|
-
"dist"
|
|
12
|
+
"dist",
|
|
13
|
+
"!dist/tsconfig.tsbuildinfo"
|
|
13
14
|
],
|
|
14
15
|
"type": "module",
|
|
15
16
|
"sideEffects": false,
|
|
@@ -18,10 +19,18 @@
|
|
|
18
19
|
"types": "./dist/board/projection.d.ts",
|
|
19
20
|
"default": "./dist/board/projection.js"
|
|
20
21
|
},
|
|
22
|
+
"./cloudflare": {
|
|
23
|
+
"types": "./dist/cloudflare.d.ts",
|
|
24
|
+
"default": "./dist/cloudflare.js"
|
|
25
|
+
},
|
|
21
26
|
"./credentials": {
|
|
22
27
|
"types": "./dist/credentials.d.ts",
|
|
23
28
|
"default": "./dist/credentials.js"
|
|
24
29
|
},
|
|
30
|
+
"./current-instance": {
|
|
31
|
+
"types": "./dist/current-instance/current-instance.d.ts",
|
|
32
|
+
"default": "./dist/current-instance/current-instance.js"
|
|
33
|
+
},
|
|
25
34
|
"./exe-dev": {
|
|
26
35
|
"types": "./dist/exe-dev.d.ts",
|
|
27
36
|
"default": "./dist/exe-dev.js"
|
|
@@ -38,6 +47,14 @@
|
|
|
38
47
|
"types": "./dist/local.d.ts",
|
|
39
48
|
"default": "./dist/local.js"
|
|
40
49
|
},
|
|
50
|
+
"./operator": {
|
|
51
|
+
"types": "./dist/operator/operator.d.ts",
|
|
52
|
+
"default": "./dist/operator/operator.js"
|
|
53
|
+
},
|
|
54
|
+
"./operator/http": {
|
|
55
|
+
"types": "./dist/operator/http.d.ts",
|
|
56
|
+
"default": "./dist/operator/http.js"
|
|
57
|
+
},
|
|
41
58
|
"./orchestrator": {
|
|
42
59
|
"types": "./dist/orchestrator.d.ts",
|
|
43
60
|
"default": "./dist/orchestrator.js"
|
|
@@ -46,6 +63,10 @@
|
|
|
46
63
|
"types": "./dist/polling-triggers.d.ts",
|
|
47
64
|
"default": "./dist/polling-triggers.js"
|
|
48
65
|
},
|
|
66
|
+
"./runtime": {
|
|
67
|
+
"types": "./dist/runtime.d.ts",
|
|
68
|
+
"default": "./dist/runtime.js"
|
|
69
|
+
},
|
|
49
70
|
"./schedule-triggers": {
|
|
50
71
|
"types": "./dist/schedule-triggers.d.ts",
|
|
51
72
|
"default": "./dist/schedule-triggers.js"
|
|
@@ -54,37 +75,40 @@
|
|
|
54
75
|
"types": "./dist/scheduler.d.ts",
|
|
55
76
|
"default": "./dist/scheduler.js"
|
|
56
77
|
},
|
|
57
|
-
"./
|
|
58
|
-
"types": "./dist/
|
|
59
|
-
"default": "./dist/
|
|
78
|
+
"./ssh": {
|
|
79
|
+
"types": "./dist/ssh.d.ts",
|
|
80
|
+
"default": "./dist/ssh.js"
|
|
60
81
|
},
|
|
61
|
-
"./
|
|
62
|
-
"types": "./dist/
|
|
63
|
-
"default": "./dist/
|
|
82
|
+
"./worker-status": {
|
|
83
|
+
"types": "./dist/worker-status.d.ts",
|
|
84
|
+
"default": "./dist/worker-status.js"
|
|
64
85
|
}
|
|
65
86
|
},
|
|
66
87
|
"publishConfig": {
|
|
67
88
|
"access": "public"
|
|
68
89
|
},
|
|
69
90
|
"dependencies": {
|
|
70
|
-
"@effect/platform-node": "4.0.
|
|
71
|
-
"@
|
|
72
|
-
"@usine/
|
|
73
|
-
"@usine/
|
|
74
|
-
"@usine/
|
|
75
|
-
"@usine/
|
|
76
|
-
"@usine/
|
|
77
|
-
"@usine/
|
|
91
|
+
"@effect/platform-node": "4.0.6",
|
|
92
|
+
"@effect/platform-node-shared": "4.0.6",
|
|
93
|
+
"@usine/agents": "0.5.0",
|
|
94
|
+
"@usine/core": "0.5.0",
|
|
95
|
+
"@usine/config": "0.4.0",
|
|
96
|
+
"@usine/durable": "0.2.0",
|
|
97
|
+
"@usine/engine": "0.5.0",
|
|
98
|
+
"@usine/github": "0.3.0",
|
|
99
|
+
"@usine/executor": "0.4.0",
|
|
100
|
+
"@usine/expression": "0.4.0"
|
|
78
101
|
},
|
|
79
102
|
"devDependencies": {
|
|
80
|
-
"@effect/vitest": "4.0.
|
|
81
|
-
"effect": "4.0.
|
|
103
|
+
"@effect/vitest": "4.0.6",
|
|
104
|
+
"effect": "4.0.6",
|
|
82
105
|
"typescript": "7.0.2",
|
|
83
|
-
"vitest": "
|
|
106
|
+
"vitest": "5.0.5",
|
|
107
|
+
"@usine/gateway": "0.2.0",
|
|
84
108
|
"@usine/tsconfig": "0.0.0"
|
|
85
109
|
},
|
|
86
110
|
"peerDependencies": {
|
|
87
|
-
"effect": "4.0.
|
|
111
|
+
"effect": "4.0.6"
|
|
88
112
|
},
|
|
89
113
|
"engines": {
|
|
90
114
|
"node": ">=22"
|
|
@@ -95,6 +119,7 @@
|
|
|
95
119
|
"test": "vitest run --exclude 'test/integration/**'",
|
|
96
120
|
"test:integration": "vitest run test/integration/polling-triggers.test.ts",
|
|
97
121
|
"test:integration:agent": "vitest run test/integration/agent-run.test.ts",
|
|
98
|
-
"test:exe-dev": "vitest run test/integration/exe-dev-worker.test.ts"
|
|
122
|
+
"test:exe-dev": "vitest run test/integration/exe-dev-worker.test.ts",
|
|
123
|
+
"test:ssh": "vitest run --disable-console-intercept test/integration/ssh-worker.test.ts"
|
|
99
124
|
}
|
|
100
125
|
}
|