@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
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { InvalidAgent } from "@usine/config/agent";
|
|
2
|
+
import { canonicalLabelName, GitHubLabelName } from "@usine/config/label";
|
|
3
|
+
import { QuarantinedLoop } from "@usine/config/loop";
|
|
4
|
+
import { AgentName } from "@usine/core/agent";
|
|
5
|
+
import { LoopName } from "@usine/core/loop";
|
|
6
|
+
import { canonicalRepositoryName, RepositoryName } from "@usine/core/repository";
|
|
7
|
+
import { WorkerName } from "@usine/core/worker";
|
|
8
|
+
import { Equal, Schema } from "effect";
|
|
9
|
+
const RESTART_BLOCKS = ["workers", "webhooks", "tracing"];
|
|
10
|
+
/**
|
|
11
|
+
* A `usine.yaml` block with changes that apply only when `usine up` starts, so a reload refuses
|
|
12
|
+
* them.
|
|
13
|
+
*/
|
|
14
|
+
export const RestartBlock = Schema.Literals(RESTART_BLOCKS);
|
|
15
|
+
const nameChanges = (name) => Schema.Struct({
|
|
16
|
+
added: Schema.Array(name),
|
|
17
|
+
removed: Schema.Array(name),
|
|
18
|
+
changed: Schema.Array(name),
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* The changes of an accepted reload by name, whether `settings` or the `operator` login changed,
|
|
22
|
+
* and the Loop and Agent files that were left out.
|
|
23
|
+
*/
|
|
24
|
+
export class InstanceReload extends Schema.Class("@usine/orchestrator/InstanceReload")({
|
|
25
|
+
loops: nameChanges(LoopName),
|
|
26
|
+
agents: nameChanges(AgentName),
|
|
27
|
+
labels: nameChanges(GitHubLabelName),
|
|
28
|
+
repos: nameChanges(RepositoryName),
|
|
29
|
+
workers: nameChanges(WorkerName),
|
|
30
|
+
settingsChanged: Schema.Boolean,
|
|
31
|
+
operatorChanged: Schema.Boolean,
|
|
32
|
+
quarantinedLoops: Schema.Array(QuarantinedLoop),
|
|
33
|
+
invalidAgents: Schema.Array(InvalidAgent),
|
|
34
|
+
}) {
|
|
35
|
+
}
|
|
36
|
+
const changesBy = (running, loaded, name, key) => {
|
|
37
|
+
const before = new Map(running.map((value) => [key(value), value]));
|
|
38
|
+
const after = new Set(loaded.map(key));
|
|
39
|
+
return {
|
|
40
|
+
added: loaded.filter((value) => !before.has(key(value))).map(name),
|
|
41
|
+
removed: running.filter((value) => !after.has(key(value))).map(name),
|
|
42
|
+
changed: loaded
|
|
43
|
+
.filter((value) => {
|
|
44
|
+
const previous = before.get(key(value));
|
|
45
|
+
return previous !== undefined && !Equal.equals(previous, value);
|
|
46
|
+
})
|
|
47
|
+
.map(name),
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
/** Compares a newly loaded instance folder with the running instance. */
|
|
51
|
+
export const instanceReload = (running, loaded) => new InstanceReload({
|
|
52
|
+
loops: changesBy(running.loops, loaded.loops, ({ name }) => name, ({ name }) => name),
|
|
53
|
+
agents: changesBy(running.agents, loaded.agents, ({ name }) => name, ({ name }) => name),
|
|
54
|
+
labels: changesBy(running.config.labels, loaded.config.labels, ({ name }) => name, ({ name }) => canonicalLabelName(name)),
|
|
55
|
+
repos: changesBy(running.config.repos, loaded.config.repos, ({ name }) => name, ({ name }) => canonicalRepositoryName(name)),
|
|
56
|
+
workers: changesBy(running.config.workers, loaded.config.workers, ({ name }) => name, ({ name }) => name),
|
|
57
|
+
settingsChanged: !Equal.equals(running.config.settings, loaded.config.settings),
|
|
58
|
+
operatorChanged: !Equal.equals(running.config.operator, loaded.config.operator),
|
|
59
|
+
quarantinedLoops: loaded.quarantinedLoops,
|
|
60
|
+
invalidAgents: loaded.invalidAgents,
|
|
61
|
+
});
|
|
62
|
+
/** Returns the Agents of `loaded` whose brain no running Agent has. */
|
|
63
|
+
export const agentsWithNewBrains = (running, loaded) => {
|
|
64
|
+
const runningBrains = running.agents.map(({ agent }) => agent.brain);
|
|
65
|
+
return loaded.agents.filter(({ agent }) => !runningBrains.some((brain) => Equal.equals(brain, agent.brain)));
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Returns the changes in `loaded` that only a restart applies: a changed `webhooks` or `tracing`
|
|
69
|
+
* block, and a changed `workers` block while no Worker runs Attempts, as in setup mode.
|
|
70
|
+
*/
|
|
71
|
+
export const restartChanges = (running, loaded, workersRun) => [
|
|
72
|
+
...(Equal.equals(running.config.webhooks, loaded.config.webhooks)
|
|
73
|
+
? []
|
|
74
|
+
: [{ block: "webhooks", field: "webhooks", reason: "the webhooks block changed" }]),
|
|
75
|
+
...(Equal.equals(running.config.tracing, loaded.config.tracing)
|
|
76
|
+
? []
|
|
77
|
+
: [{ block: "tracing", field: "tracing", reason: "the tracing block changed" }]),
|
|
78
|
+
...(workersRun || Equal.equals(running.config.workers, loaded.config.workers)
|
|
79
|
+
? []
|
|
80
|
+
: [
|
|
81
|
+
{
|
|
82
|
+
block: "workers",
|
|
83
|
+
field: "workers",
|
|
84
|
+
reason: "the workers block changed while no worker is running",
|
|
85
|
+
},
|
|
86
|
+
]),
|
|
87
|
+
];
|
|
88
|
+
const yamlKey = (field) => field.replace(/[A-Z]/gu, (letter) => `_${letter.toLowerCase()}`);
|
|
89
|
+
/**
|
|
90
|
+
* Returns the keys of a Worker entry, other than `name` and `max_concurrent_attempts`, that differ
|
|
91
|
+
* between `before` and `after`. Returns only `kind` if the kind differs.
|
|
92
|
+
*/
|
|
93
|
+
const changedWorkerSettings = (before, after) => {
|
|
94
|
+
if (before.kind !== after.kind)
|
|
95
|
+
return ["kind"];
|
|
96
|
+
const settings = (worker) => new Map(Object.entries(worker).filter(([key]) => key !== "name" && key !== "maxConcurrentAttempts"));
|
|
97
|
+
const previous = settings(before);
|
|
98
|
+
const next = settings(after);
|
|
99
|
+
return [...new Set([...previous.keys(), ...next.keys()])]
|
|
100
|
+
.filter((key) => !Equal.equals(previous.get(key), next.get(key)))
|
|
101
|
+
.map(yamlKey);
|
|
102
|
+
};
|
|
103
|
+
/** Compares the reloaded `workers` block with the running one. */
|
|
104
|
+
export const workersChange = (running, loaded) => {
|
|
105
|
+
const before = new Map(running.map((worker) => [worker.name, worker]));
|
|
106
|
+
const after = new Set(loaded.map(({ name }) => name));
|
|
107
|
+
const restart = [];
|
|
108
|
+
const resized = [];
|
|
109
|
+
for (const worker of loaded) {
|
|
110
|
+
const previous = before.get(worker.name);
|
|
111
|
+
if (previous === undefined)
|
|
112
|
+
continue;
|
|
113
|
+
const changed = changedWorkerSettings(previous, worker);
|
|
114
|
+
for (const key of changed) {
|
|
115
|
+
restart.push({
|
|
116
|
+
block: "workers",
|
|
117
|
+
field: `workers.${worker.name}.${key}`,
|
|
118
|
+
reason: key === "kind"
|
|
119
|
+
? `worker "${worker.name}" changed kind from ${previous.kind} to ${worker.kind}`
|
|
120
|
+
: `worker "${worker.name}" changed ${key}`,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (changed.length === 0 && previous.maxConcurrentAttempts !== worker.maxConcurrentAttempts) {
|
|
124
|
+
resized.push({ worker, from: previous.maxConcurrentAttempts });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const added = loaded.filter(({ name }) => !before.has(name));
|
|
128
|
+
const removed = running.filter(({ name }) => !after.has(name));
|
|
129
|
+
for (const previous of removed) {
|
|
130
|
+
const renamed = added.find((worker) => changedWorkerSettings(previous, worker).length === 0);
|
|
131
|
+
if (renamed === undefined)
|
|
132
|
+
continue;
|
|
133
|
+
restart.push({
|
|
134
|
+
block: "workers",
|
|
135
|
+
field: `workers.${previous.name}.name`,
|
|
136
|
+
reason: `worker "${previous.name}" was renamed to "${renamed.name}"`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return { resized, added, removed, restart };
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/current-instance/changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { FactoryConfigError } from "@usine/config/file";
|
|
2
|
+
import { InstanceFolder } from "@usine/config/instance-folder";
|
|
3
|
+
import type { LoadedInstance } from "@usine/config/instance";
|
|
4
|
+
import { AgentName } from "@usine/core/agent";
|
|
5
|
+
import type { InstanceDirectory } from "@usine/core/instance";
|
|
6
|
+
import { WorkerName } from "@usine/core/worker";
|
|
7
|
+
import { ExecutorError } from "@usine/executor";
|
|
8
|
+
import { Array as EffectArray, Context, Effect, Layer, Schema, type Scope, type Stream } from "effect";
|
|
9
|
+
import { InstanceReload, type RestartChange } from "./changes.ts";
|
|
10
|
+
declare const RestartRequiredError_base: Schema.Class<RestartRequiredError, Schema.TaggedStruct<"RestartRequiredError", {
|
|
11
|
+
readonly blocks: Schema.NonEmptyArray<Schema.Literals<readonly ["workers", "webhooks", "tracing"]>>;
|
|
12
|
+
/**
|
|
13
|
+
* The changed fields as paths into `usine.yaml`, such as `webhooks` or
|
|
14
|
+
* `workers.build-1.destination`.
|
|
15
|
+
*/
|
|
16
|
+
readonly fields: Schema.NonEmptyArray<Schema.NonEmptyString>;
|
|
17
|
+
/** An operator summary of each change, stating that the running configuration is kept. */
|
|
18
|
+
readonly message: Schema.NonEmptyString;
|
|
19
|
+
}>, import("effect/Cause").YieldableError>;
|
|
20
|
+
/** A reload changed `usine.yaml` in a way that needs a restart, so the running instance is kept. */
|
|
21
|
+
export declare class RestartRequiredError extends RestartRequiredError_base {
|
|
22
|
+
}
|
|
23
|
+
/** Returns the refusal for a reload that makes `changes`. */
|
|
24
|
+
export declare const restartRequired: (changes: EffectArray.NonEmptyReadonlyArray<RestartChange>) => RestartRequiredError;
|
|
25
|
+
declare const ReloadPreflightError_base: Schema.Class<ReloadPreflightError, Schema.TaggedStruct<"ReloadPreflightError", {
|
|
26
|
+
/**
|
|
27
|
+
* The reloaded Agents with brains that no running Agent has, which preflight checked on every
|
|
28
|
+
* Worker.
|
|
29
|
+
*/
|
|
30
|
+
readonly agents: Schema.$Array<Schema.brand<Schema.String, "AgentName">>;
|
|
31
|
+
/**
|
|
32
|
+
* The Workers added or given more slots by the reload, which preflight checked with every
|
|
33
|
+
* rostered brain.
|
|
34
|
+
*/
|
|
35
|
+
readonly workers: Schema.$Array<Schema.brand<Schema.String, "WorkerName">>;
|
|
36
|
+
/**
|
|
37
|
+
* An operator summary of the additions and the failed check, stating that the running
|
|
38
|
+
* configuration is kept.
|
|
39
|
+
*/
|
|
40
|
+
readonly message: Schema.NonEmptyString;
|
|
41
|
+
readonly cause: Schema.Union<readonly [typeof import("@usine/executor").ExecutorOperationError, typeof import("@usine/executor").CredentialUnavailableError, typeof import("@usine/executor").WorkerCapabilityError]>;
|
|
42
|
+
}>, import("effect/Cause").YieldableError>;
|
|
43
|
+
/**
|
|
44
|
+
* A reload adds Workers, slots, or brains that failed Worker preflight, so the running instance is
|
|
45
|
+
* kept.
|
|
46
|
+
*/
|
|
47
|
+
export declare class ReloadPreflightError extends ReloadPreflightError_base {
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns the refusal for a reload whose preflight of `agents` and `workers` failed with `cause`.
|
|
51
|
+
*/
|
|
52
|
+
export declare const reloadPreflightFailed: (agents: ReadonlyArray<AgentName>, workers: ReadonlyArray<WorkerName>, cause: ExecutorError) => ReloadPreflightError;
|
|
53
|
+
/** The reason a reload kept the running instance. */
|
|
54
|
+
export type InstanceReloadError = FactoryConfigError | RestartRequiredError | ReloadPreflightError;
|
|
55
|
+
/**
|
|
56
|
+
* Checks a reload from `running` to `loaded` without changing anything, and returns the effect that
|
|
57
|
+
* applies `loaded`'s `workers` block. Fails on an unsupported `workers` change or a failed
|
|
58
|
+
* preflight.
|
|
59
|
+
*/
|
|
60
|
+
export type WorkerReload = (running: LoadedInstance, loaded: LoadedInstance) => Effect.Effect<Effect.Effect<void>, RestartRequiredError | ReloadPreflightError>;
|
|
61
|
+
declare const CurrentInstance_base: Context.ServiceClass<CurrentInstance, "@usine/orchestrator/CurrentInstance", {
|
|
62
|
+
/** The snapshot that new work reads. */
|
|
63
|
+
readonly get: Effect.Effect<LoadedInstance>;
|
|
64
|
+
/** The current snapshot, then each snapshot an accepted reload installs. */
|
|
65
|
+
readonly changes: Stream.Stream<LoadedInstance>;
|
|
66
|
+
/**
|
|
67
|
+
* Reloads the instance folder, one reload at a time, and returns what changed. Fails and keeps
|
|
68
|
+
* the running snapshot on an invalid `usine.yaml`, a changed `webhooks` or `tracing` block, or
|
|
69
|
+
* a rejected `workers` change.
|
|
70
|
+
*/
|
|
71
|
+
readonly reload: Effect.Effect<InstanceReload, InstanceReloadError>;
|
|
72
|
+
/**
|
|
73
|
+
* Routes each reload through `workers` until the scope closes. Without a registration, as in
|
|
74
|
+
* setup mode, a reload rejects any `workers` change.
|
|
75
|
+
*/
|
|
76
|
+
readonly registerWorkers: (workers: WorkerReload) => Effect.Effect<void, never, Scope.Scope>;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* The instance folder snapshot that the orchestrator runs, replaced by each reload. Consumers read
|
|
80
|
+
* it each time they act; a Run keeps the Agent, task, and parent model it opened with.
|
|
81
|
+
*/
|
|
82
|
+
export declare class CurrentInstance extends CurrentInstance_base {
|
|
83
|
+
/**
|
|
84
|
+
* Starts from `initial`, the folder that `usine up` loaded at startup, and reloads `directory`.
|
|
85
|
+
*/
|
|
86
|
+
static readonly layer: (directory: InstanceDirectory, initial: LoadedInstance) => Layer.Layer<CurrentInstance, never, InstanceFolder>;
|
|
87
|
+
}
|
|
88
|
+
export { InstanceReload, RestartBlock } from "./changes.ts";
|
|
89
|
+
//# sourceMappingURL=current-instance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current-instance.d.ts","sourceRoot":"","sources":["../../src/current-instance/current-instance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,KAAK,IAAI,WAAW,EACpB,OAAO,EACP,MAAM,EACN,KAAK,EAIL,MAAM,EACN,KAAK,KAAK,EAEV,KAAK,MAAM,EAEZ,MAAM,QAAQ,CAAC;AAChB,OAAO,EAEL,cAAc,EAGd,KAAK,aAAa,EAEnB,MAAM,cAAc,CAAC;;;IAOpB;;;OAGG;;IAEH,0FAA0F;;;AAV5F,oGAAoG;AACpG,qBAAa,oBAAqB,SAAQ,yBAWxC;CAAG;AAEL,6DAA6D;AAC7D,eAAO,MAAM,eAAe,YACjB,WAAW,CAAC,qBAAqB,CAAC,aAAa,CAAC,KACxD,oBAKC,CAAC;;IASH;;;OAGG;;IAEH;;;OAGG;;IAEH;;;OAGG;;;;AApBL;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,yBAmBxC;CAAG;AAEL;;GAEG;AACH,eAAO,MAAM,qBAAqB,WACxB,aAAa,CAAC,SAAS,CAAC,WACvB,aAAa,CAAC,UAAU,CAAC,SAC3B,aAAa,KACnB,oBAuBF,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAEnG;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,cAAc,KACnB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,CAAC,CAAC;;IAgCjF,wCAAwC;kBAC1B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;IAC3C,4EAA4E;sBAC1D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;IAC/C;;;;OAIG;qBACc,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC;IACnE;;;OAGG;8BACuB,CAAC,OAAO,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;;AArBhG;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,oBAmBK;IACxC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,cACR,iBAAiB,WACnB,cAAc,KACtB,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,cAAc,CAAC,CAuFlD;CACL;AAED,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { InstanceFolder } from "@usine/config/instance-folder";
|
|
2
|
+
import { AgentName } from "@usine/core/agent";
|
|
3
|
+
import { WorkerName } from "@usine/core/worker";
|
|
4
|
+
import { ExecutorError } from "@usine/executor";
|
|
5
|
+
import { Array as EffectArray, Context, Effect, Layer, Match, Option, Ref, Schema, Semaphore, SubscriptionRef, } from "effect";
|
|
6
|
+
import { agentsWithNewBrains, InstanceReload, instanceReload, RestartBlock, restartChanges, } from "./changes.js";
|
|
7
|
+
/** A reload changed `usine.yaml` in a way that needs a restart, so the running instance is kept. */
|
|
8
|
+
export class RestartRequiredError extends Schema.TaggedError("@usine/orchestrator/RestartRequiredError")("RestartRequiredError", {
|
|
9
|
+
blocks: Schema.NonEmptyArray(RestartBlock),
|
|
10
|
+
/**
|
|
11
|
+
* The changed fields as paths into `usine.yaml`, such as `webhooks` or
|
|
12
|
+
* `workers.build-1.destination`.
|
|
13
|
+
*/
|
|
14
|
+
fields: Schema.NonEmptyArray(Schema.NonEmptyString),
|
|
15
|
+
/** An operator summary of each change, stating that the running configuration is kept. */
|
|
16
|
+
message: Schema.NonEmptyString,
|
|
17
|
+
}) {
|
|
18
|
+
}
|
|
19
|
+
/** Returns the refusal for a reload that makes `changes`. */
|
|
20
|
+
export const restartRequired = (changes) => new RestartRequiredError({
|
|
21
|
+
blocks: EffectArray.dedupe(EffectArray.map(changes, ({ block }) => block)),
|
|
22
|
+
fields: EffectArray.map(changes, ({ field }) => field),
|
|
23
|
+
message: `These usine.yaml changes require a restart: ${changes.map(({ reason }) => reason).join("; ")}. The running configuration is unchanged. Restart usine up to apply them.`,
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* A reload adds Workers, slots, or brains that failed Worker preflight, so the running instance is
|
|
27
|
+
* kept.
|
|
28
|
+
*/
|
|
29
|
+
export class ReloadPreflightError extends Schema.TaggedError("@usine/orchestrator/ReloadPreflightError")("ReloadPreflightError", {
|
|
30
|
+
/**
|
|
31
|
+
* The reloaded Agents with brains that no running Agent has, which preflight checked on every
|
|
32
|
+
* Worker.
|
|
33
|
+
*/
|
|
34
|
+
agents: Schema.Array(AgentName),
|
|
35
|
+
/**
|
|
36
|
+
* The Workers added or given more slots by the reload, which preflight checked with every
|
|
37
|
+
* rostered brain.
|
|
38
|
+
*/
|
|
39
|
+
workers: Schema.Array(WorkerName),
|
|
40
|
+
/**
|
|
41
|
+
* An operator summary of the additions and the failed check, stating that the running
|
|
42
|
+
* configuration is kept.
|
|
43
|
+
*/
|
|
44
|
+
message: Schema.NonEmptyString,
|
|
45
|
+
cause: ExecutorError,
|
|
46
|
+
}) {
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns the refusal for a reload whose preflight of `agents` and `workers` failed with `cause`.
|
|
50
|
+
*/
|
|
51
|
+
export const reloadPreflightFailed = (agents, workers, cause) => {
|
|
52
|
+
const quoted = (names) => names.map((name) => `"${name}"`).join(", ");
|
|
53
|
+
const subjects = [
|
|
54
|
+
...(agents.length === 0
|
|
55
|
+
? []
|
|
56
|
+
: [`${agents.length === 1 ? "agent" : "agents"} ${quoted(agents)}`]),
|
|
57
|
+
...(workers.length === 0
|
|
58
|
+
? []
|
|
59
|
+
: [
|
|
60
|
+
`${workers.length === 1 ? "worker" : "workers"} ${quoted(workers)} (added or given more slots by the reload)`,
|
|
61
|
+
]),
|
|
62
|
+
];
|
|
63
|
+
const detail = cause._tag === "WorkerCapabilityError"
|
|
64
|
+
? `Worker "${cause.worker}": ${cause.message}`
|
|
65
|
+
: cause.message;
|
|
66
|
+
const sentence = `${detail.charAt(0).toUpperCase()}${detail.slice(1)}`.replace(/\.$/u, "");
|
|
67
|
+
return new ReloadPreflightError({
|
|
68
|
+
agents,
|
|
69
|
+
workers,
|
|
70
|
+
message: `Worker preflight failed for ${subjects.join(" and ")}. ${sentence}. The running configuration is unchanged. Fix the worker, usine.yaml, or the agent file, then reload again.`,
|
|
71
|
+
cause,
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const rejectionLogFields = (error) => Match.valueTags(error, {
|
|
75
|
+
FactoryConfigError: ({ _tag, file, stage, message }) => ({
|
|
76
|
+
errorTag: _tag,
|
|
77
|
+
file,
|
|
78
|
+
stage,
|
|
79
|
+
message,
|
|
80
|
+
}),
|
|
81
|
+
RestartRequiredError: ({ _tag, blocks, fields, message }) => ({
|
|
82
|
+
errorTag: _tag,
|
|
83
|
+
blocks,
|
|
84
|
+
fields,
|
|
85
|
+
message,
|
|
86
|
+
}),
|
|
87
|
+
ReloadPreflightError: ({ _tag, agents, workers, message, cause }) => ({
|
|
88
|
+
errorTag: _tag,
|
|
89
|
+
agents,
|
|
90
|
+
workers,
|
|
91
|
+
causeTag: cause._tag,
|
|
92
|
+
message,
|
|
93
|
+
}),
|
|
94
|
+
});
|
|
95
|
+
/**
|
|
96
|
+
* The instance folder snapshot that the orchestrator runs, replaced by each reload. Consumers read
|
|
97
|
+
* it each time they act; a Run keeps the Agent, task, and parent model it opened with.
|
|
98
|
+
*/
|
|
99
|
+
export class CurrentInstance extends Context.Service()("@usine/orchestrator/CurrentInstance") {
|
|
100
|
+
/**
|
|
101
|
+
* Starts from `initial`, the folder that `usine up` loaded at startup, and reloads `directory`.
|
|
102
|
+
*/
|
|
103
|
+
static layer = (directory, initial) => Layer.effect(CurrentInstance, Effect.gen(function* () {
|
|
104
|
+
const folder = yield* InstanceFolder;
|
|
105
|
+
const current = yield* SubscriptionRef.make(initial);
|
|
106
|
+
const registered = yield* Ref.make(Option.none());
|
|
107
|
+
const reloading = yield* Semaphore.make(1);
|
|
108
|
+
const beforeWorkersStart = Effect.fn("CurrentInstance.beforeWorkersStart")(function* (running, loaded) {
|
|
109
|
+
const agents = agentsWithNewBrains(running, loaded).map(({ name }) => name);
|
|
110
|
+
if (agents.length > 0) {
|
|
111
|
+
yield* Effect.logInfo("The reload adds brains before the Workers start; their startup preflight checks them", { agents });
|
|
112
|
+
}
|
|
113
|
+
return Effect.void;
|
|
114
|
+
});
|
|
115
|
+
// Once the Workers have prepared the reload, it runs to completion, so their additions are
|
|
116
|
+
// applied.
|
|
117
|
+
const reload = Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
|
|
118
|
+
const running = yield* SubscriptionRef.get(current);
|
|
119
|
+
const loaded = yield* restore(folder.load(directory));
|
|
120
|
+
const workers = yield* Ref.get(registered);
|
|
121
|
+
const restart = restartChanges(running, loaded, Option.isSome(workers));
|
|
122
|
+
if (EffectArray.isReadonlyArrayNonEmpty(restart)) {
|
|
123
|
+
return yield* restartRequired(restart);
|
|
124
|
+
}
|
|
125
|
+
const applyWorkers = yield* restore(Option.isSome(workers)
|
|
126
|
+
? workers.value(running, loaded)
|
|
127
|
+
: beforeWorkersStart(running, loaded));
|
|
128
|
+
const changes = instanceReload(running, loaded);
|
|
129
|
+
yield* SubscriptionRef.set(current, loaded).pipe(Effect.andThen(applyWorkers));
|
|
130
|
+
yield* Effect.logInfo("Instance folder reloaded; new Runs use the new configuration", {
|
|
131
|
+
loopsAdded: changes.loops.added,
|
|
132
|
+
loopsRemoved: changes.loops.removed,
|
|
133
|
+
loopsChanged: changes.loops.changed,
|
|
134
|
+
agentsAdded: changes.agents.added,
|
|
135
|
+
agentsRemoved: changes.agents.removed,
|
|
136
|
+
agentsChanged: changes.agents.changed,
|
|
137
|
+
labelsAdded: changes.labels.added,
|
|
138
|
+
labelsRemoved: changes.labels.removed,
|
|
139
|
+
labelsChanged: changes.labels.changed,
|
|
140
|
+
reposAdded: changes.repos.added,
|
|
141
|
+
reposRemoved: changes.repos.removed,
|
|
142
|
+
reposChanged: changes.repos.changed,
|
|
143
|
+
workersAdded: changes.workers.added,
|
|
144
|
+
workersRemoved: changes.workers.removed,
|
|
145
|
+
workersChanged: changes.workers.changed,
|
|
146
|
+
settingsChanged: changes.settingsChanged,
|
|
147
|
+
operatorChanged: changes.operatorChanged,
|
|
148
|
+
quarantinedLoops: changes.quarantinedLoops.map(({ file }) => file),
|
|
149
|
+
invalidAgents: changes.invalidAgents.map(({ file }) => file),
|
|
150
|
+
});
|
|
151
|
+
return changes;
|
|
152
|
+
})).pipe(Effect.tapError((error) => Effect.logWarning("Instance folder reload rejected; the running configuration is unchanged", rejectionLogFields(error))), reloading.withPermits(1), Effect.withSpan("CurrentInstance.reload", { attributes: { directory } }));
|
|
153
|
+
const registerWorkers = (workers) => Effect.acquireRelease(Ref.set(registered, Option.some(workers)), () => Ref.set(registered, Option.none()));
|
|
154
|
+
return {
|
|
155
|
+
get: SubscriptionRef.get(current),
|
|
156
|
+
changes: SubscriptionRef.changes(current),
|
|
157
|
+
reload,
|
|
158
|
+
registerWorkers,
|
|
159
|
+
};
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
export { InstanceReload, RestartBlock } from "./changes.js";
|
|
163
|
+
//# sourceMappingURL=current-instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current-instance.js","sourceRoot":"","sources":["../../src/current-instance/current-instance.ts"],"names":[],"mappings":"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"}
|
package/dist/exe-dev.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ import type { UsineConfig } from "@usine/config/factory";
|
|
|
3
3
|
import type { InstanceDirectory } from "@usine/core/instance";
|
|
4
4
|
import { type ExeDevExecutorOptions } from "@usine/executor/exe-dev";
|
|
5
5
|
import { Layer } from "effect";
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Provides the full engine and `WorkerStatus` for exe.dev Workers. Requires `GitHubApp`,
|
|
8
|
+
* `TriggerCondition`, `AttemptRuntime` (built before the engine), `ClaudeLoginLock`, and
|
|
9
|
+
* `CurrentInstance`.
|
|
10
|
+
*/
|
|
11
|
+
export declare const layer: (instanceDirectory: InstanceDirectory, config: UsineConfig, brains: ReadonlyArray<BrainSpec>, options: ExeDevExecutorOptions) => 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("./current-instance/current-instance.ts").CurrentInstance | import("@usine/github/github-app").GitHubApp | import("@usine/engine/trigger-condition").TriggerCondition>;
|
|
8
12
|
//# sourceMappingURL=exe-dev.d.ts.map
|
package/dist/exe-dev.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exe-dev.d.ts","sourceRoot":"","sources":["../src/exe-dev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"exe-dev.d.ts","sourceRoot":"","sources":["../src/exe-dev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAgC,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEnG,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAI/B;;;;GAIG;AACH,eAAO,MAAM,KAAK,sBACG,iBAAiB,UAC5B,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,WACvB,qBAAqB,qiDAQ/B,CAAC"}
|
package/dist/exe-dev.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { NodeServices } from "@effect/platform-node";
|
|
2
2
|
import { layer as exeDevExecutorLayer } from "@usine/executor/exe-dev";
|
|
3
|
-
import { CredentialGrantMinutes } from "@usine/executor/exe-dev";
|
|
4
3
|
import { layer as localEngineLayer } from "@usine/engine/local-sqlite";
|
|
5
4
|
import { Layer } from "effect";
|
|
6
5
|
import { stepExecutorLayer } from "./scheduler.js";
|
|
7
|
-
|
|
6
|
+
import { withSshWorkerDiscard } from "./ssh.js";
|
|
7
|
+
/**
|
|
8
|
+
* Provides the full engine and `WorkerStatus` for exe.dev Workers. Requires `GitHubApp`,
|
|
9
|
+
* `TriggerCondition`, `AttemptRuntime` (built before the engine), `ClaudeLoginLock`, and
|
|
10
|
+
* `CurrentInstance`.
|
|
11
|
+
*/
|
|
8
12
|
export const layer = (instanceDirectory, config, brains, options) => {
|
|
9
|
-
const executor = exeDevExecutorLayer(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}).pipe(Layer.provide(NodeServices.layer));
|
|
14
|
-
const stepExecutor = stepExecutorLayer(config, brains).pipe(Layer.provide(executor));
|
|
15
|
-
return localEngineLayer(instanceDirectory).pipe(Layer.provide(stepExecutor));
|
|
13
|
+
const executor = exeDevExecutorLayer(options).pipe(Layer.provide(NodeServices.layer));
|
|
14
|
+
// Discarding leftovers still removes the Codex homes on an SSH Worker that `usine.yaml` dropped.
|
|
15
|
+
const stepExecutor = withSshWorkerDiscard(instanceDirectory, (discard) => stepExecutorLayer(config, brains, { discard })).pipe(Layer.provide(executor));
|
|
16
|
+
return localEngineLayer(instanceDirectory).pipe(Layer.provideMerge(stepExecutor));
|
|
16
17
|
};
|
|
17
18
|
//# sourceMappingURL=exe-dev.js.map
|
package/dist/exe-dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exe-dev.js","sourceRoot":"","sources":["../src/exe-dev.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,KAAK,IAAI,mBAAmB,
|
|
1
|
+
{"version":3,"file":"exe-dev.js","sourceRoot":"","sources":["../src/exe-dev.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,KAAK,IAAI,mBAAmB,EAA8B,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,iBAAoC,EACpC,MAAmB,EACnB,MAAgC,EAChC,OAA8B,EAC9B,EAAE;IACF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,iGAAiG;IACjG,MAAM,YAAY,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CACvE,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAC/C,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChC,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;AACpF,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Layer } from "effect";
|
|
2
|
+
import { HttpClient } from "effect/http";
|
|
3
|
+
/**
|
|
4
|
+
* The fetch HTTP client for GitHub and the Gateways' admin APIs. Each request still gets a client
|
|
5
|
+
* span, but no `traceparent` or `b3` header, because neither service joins usine's traces.
|
|
6
|
+
*/
|
|
7
|
+
export declare const externalHttpClientLayer: Layer.Layer<HttpClient.HttpClient, never, never>;
|
|
8
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAmB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,uBAAuB,kDAQQ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Effect, Layer } from "effect";
|
|
2
|
+
import { FetchHttpClient, HttpClient } from "effect/http";
|
|
3
|
+
/**
|
|
4
|
+
* The fetch HTTP client for GitHub and the Gateways' admin APIs. Each request still gets a client
|
|
5
|
+
* span, but no `traceparent` or `b3` header, because neither service joins usine's traces.
|
|
6
|
+
*/
|
|
7
|
+
export const externalHttpClientLayer = Layer.effect(HttpClient.HttpClient, Effect.map(HttpClient.HttpClient, HttpClient.transform((send) => Effect.provideService(send, HttpClient.TracerPropagationEnabled, false)))).pipe(Layer.provide(FetchHttpClient.layer));
|
|
8
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,MAAM,CACjD,UAAU,CAAC,UAAU,EACrB,MAAM,CAAC,GAAG,CACR,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,wBAAwB,EAAE,KAAK,CAAC,CACxE,CACF,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
package/dist/idle-triggers.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Layer } from "effect";
|
|
2
2
|
import { PollingTriggers } from "./polling-triggers.ts";
|
|
3
3
|
import { ScheduleTriggers } from "./schedule-triggers.ts";
|
|
4
|
-
/** Trigger services that never poll or tick, for
|
|
4
|
+
/** Trigger services that never poll or tick, for an instance that still needs setup. */
|
|
5
5
|
export declare const idleTriggersLayer: Layer.Layer<PollingTriggers | ScheduleTriggers, never, never>;
|
|
6
6
|
//# sourceMappingURL=idle-triggers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-triggers.d.ts","sourceRoot":"","sources":["../src/idle-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAa,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAiB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,
|
|
1
|
+
{"version":3,"file":"idle-triggers.d.ts","sourceRoot":"","sources":["../src/idle-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAa,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAiB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,+DAkC7B,CAAC"}
|
package/dist/idle-triggers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect, Layer, Option } from "effect";
|
|
2
2
|
import { PollCycle, PollingTriggers } from "./polling-triggers.js";
|
|
3
3
|
import { ScheduleCycle, ScheduleTriggers } from "./schedule-triggers.js";
|
|
4
|
-
/** Trigger services that never poll or tick, for
|
|
4
|
+
/** Trigger services that never poll or tick, for an instance that still needs setup. */
|
|
5
5
|
export const idleTriggersLayer = Layer.mergeAll(Layer.succeed(PollingTriggers)({
|
|
6
6
|
hint: () => Effect.void,
|
|
7
7
|
latest: Effect.succeed(Option.none()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-triggers.js","sourceRoot":"","sources":["../src/idle-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,
|
|
1
|
+
{"version":3,"file":"idle-triggers.js","sourceRoot":"","sources":["../src/idle-triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,wFAAwF;AACxF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAC7C,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;IACvB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,OAAO,CACZ,IAAI,SAAS,CAAC;QACZ,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;KAC1B,CAAC,CACH;IACH,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;CACxB,CAAC,EACF,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,OAAO,CACZ,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;KAC1B,CAAC,CACH;IACH,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK;CACxB,CAAC,CACH,CAAC"}
|
|
@@ -14,9 +14,12 @@ export declare class LabelPreflightFinding extends LabelPreflightFinding_base {
|
|
|
14
14
|
export interface LabelReconciliation {
|
|
15
15
|
readonly labels: ReadonlyArray<StoredRepositoryLabel>;
|
|
16
16
|
readonly findings: ReadonlyArray<LabelPreflightFinding>;
|
|
17
|
-
/**
|
|
17
|
+
/** Whether a label was created, so the poll cursor must drop its catalog ETag. */
|
|
18
18
|
readonly catalogChanged: boolean;
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* The time a creation rate limit asks the next cycle to wait until. This cycle's triggers still
|
|
21
|
+
* run.
|
|
22
|
+
*/
|
|
20
23
|
readonly nextPollAt: Option.Option<DateTime.Utc>;
|
|
21
24
|
}
|
|
22
25
|
declare const LabelReconciler_base: Context.ServiceClass<LabelReconciler, "@usine/orchestrator/LabelReconciler", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label-reconciler.d.ts","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAsB,MAAM,4BAA4B,CAAC;AAEnF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;;AAElF,qBAAa,qBAAsB,SAAQ,0BAOzC;CAAG;AAEL,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD,
|
|
1
|
+
{"version":3,"file":"label-reconciler.d.ts","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAsB,MAAM,4BAA4B,CAAC;AAEnF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;;AAElF,qBAAa,qBAAsB,SAAQ,0BAOzC;CAAG;AAEL,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD,kFAAkF;IAClF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;CAClD;;wBA2CuB,CAClB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,EACtC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,KAC3C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;;AAR3C,wFAAwF;AACxF,qBAAa,eAAgB,SAAQ,oBASK;IACxC,MAAM,CAAC,QAAQ,CAAC,KAAK,yDAkGnB;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label-reconciler.js","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAsB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAElF,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,KAAK,CACrD,2CAA2C,CAC5C,CAAC;IACA,UAAU,EAAE,cAAc;IAC1B,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,MAAM,CAAC,cAAc;IAC/B,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG;
|
|
1
|
+
{"version":3,"file":"label-reconciler.js","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"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"}
|