@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.
Files changed (222) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +174 -52
  3. package/dist/board/items.d.ts +22 -3
  4. package/dist/board/items.d.ts.map +1 -1
  5. package/dist/board/items.js +44 -4
  6. package/dist/board/items.js.map +1 -1
  7. package/dist/board/projection.d.ts +8 -1
  8. package/dist/board/projection.d.ts.map +1 -1
  9. package/dist/board/projection.js +63 -14
  10. package/dist/board/projection.js.map +1 -1
  11. package/dist/board/tasks.d.ts +15 -3
  12. package/dist/board/tasks.d.ts.map +1 -1
  13. package/dist/board/tasks.js +28 -9
  14. package/dist/board/tasks.js.map +1 -1
  15. package/dist/cloudflare.d.ts +32 -0
  16. package/dist/cloudflare.d.ts.map +1 -0
  17. package/dist/cloudflare.js +68 -0
  18. package/dist/cloudflare.js.map +1 -0
  19. package/dist/credentials.d.ts +5 -6
  20. package/dist/credentials.d.ts.map +1 -1
  21. package/dist/credentials.js +22 -15
  22. package/dist/credentials.js.map +1 -1
  23. package/dist/current-instance/changes.d.ts +87 -0
  24. package/dist/current-instance/changes.d.ts.map +1 -0
  25. package/dist/current-instance/changes.js +141 -0
  26. package/dist/current-instance/changes.js.map +1 -0
  27. package/dist/current-instance/current-instance.d.ts +89 -0
  28. package/dist/current-instance/current-instance.d.ts.map +1 -0
  29. package/dist/current-instance/current-instance.js +163 -0
  30. package/dist/current-instance/current-instance.js.map +1 -0
  31. package/dist/exe-dev.d.ts +6 -2
  32. package/dist/exe-dev.d.ts.map +1 -1
  33. package/dist/exe-dev.js +10 -9
  34. package/dist/exe-dev.js.map +1 -1
  35. package/dist/http-client.d.ts +8 -0
  36. package/dist/http-client.d.ts.map +1 -0
  37. package/dist/http-client.js +8 -0
  38. package/dist/http-client.js.map +1 -0
  39. package/dist/idle-triggers.d.ts +1 -1
  40. package/dist/idle-triggers.d.ts.map +1 -1
  41. package/dist/idle-triggers.js +1 -1
  42. package/dist/idle-triggers.js.map +1 -1
  43. package/dist/label-reconciler.d.ts +5 -2
  44. package/dist/label-reconciler.d.ts.map +1 -1
  45. package/dist/label-reconciler.js.map +1 -1
  46. package/dist/lease-order.d.ts +60 -0
  47. package/dist/lease-order.d.ts.map +1 -0
  48. package/dist/lease-order.js +76 -0
  49. package/dist/lease-order.js.map +1 -0
  50. package/dist/local.d.ts +4 -18
  51. package/dist/local.d.ts.map +1 -1
  52. package/dist/local.js +9 -45
  53. package/dist/local.js.map +1 -1
  54. package/dist/loop-matches.d.ts +28 -0
  55. package/dist/loop-matches.d.ts.map +1 -0
  56. package/dist/loop-matches.js +74 -0
  57. package/dist/loop-matches.js.map +1 -0
  58. package/dist/operator/attempt.d.ts +76 -10
  59. package/dist/operator/attempt.d.ts.map +1 -1
  60. package/dist/operator/attempt.js +69 -11
  61. package/dist/operator/attempt.js.map +1 -1
  62. package/dist/operator/board.d.ts +48 -16
  63. package/dist/operator/board.d.ts.map +1 -1
  64. package/dist/operator/board.js +48 -17
  65. package/dist/operator/board.js.map +1 -1
  66. package/dist/operator/configuration.d.ts +314 -0
  67. package/dist/operator/configuration.d.ts.map +1 -0
  68. package/dist/operator/configuration.js +490 -0
  69. package/dist/operator/configuration.js.map +1 -0
  70. package/dist/operator/desk.d.ts +206 -0
  71. package/dist/operator/desk.d.ts.map +1 -0
  72. package/dist/operator/desk.js +525 -0
  73. package/dist/operator/desk.js.map +1 -0
  74. package/dist/operator/github-changes.d.ts +88 -0
  75. package/dist/operator/github-changes.d.ts.map +1 -0
  76. package/dist/operator/github-changes.js +266 -0
  77. package/dist/operator/github-changes.js.map +1 -0
  78. package/dist/operator/http.d.ts +135 -105
  79. package/dist/operator/http.d.ts.map +1 -1
  80. package/dist/operator/http.js +155 -30
  81. package/dist/operator/http.js.map +1 -1
  82. package/dist/operator/machines.d.ts +71 -0
  83. package/dist/operator/machines.d.ts.map +1 -0
  84. package/dist/operator/machines.js +103 -0
  85. package/dist/operator/machines.js.map +1 -0
  86. package/dist/operator/need.d.ts +58 -11
  87. package/dist/operator/need.d.ts.map +1 -1
  88. package/dist/operator/need.js +61 -9
  89. package/dist/operator/need.js.map +1 -1
  90. package/dist/operator/operator.d.ts +135 -29
  91. package/dist/operator/operator.d.ts.map +1 -1
  92. package/dist/operator/operator.js +370 -63
  93. package/dist/operator/operator.js.map +1 -1
  94. package/dist/operator/overview.d.ts +7 -7
  95. package/dist/operator/overview.d.ts.map +1 -1
  96. package/dist/operator/overview.js +5 -5
  97. package/dist/operator/overview.js.map +1 -1
  98. package/dist/operator/projection.d.ts +56 -5
  99. package/dist/operator/projection.d.ts.map +1 -1
  100. package/dist/operator/projection.js +108 -9
  101. package/dist/operator/projection.js.map +1 -1
  102. package/dist/operator/run.d.ts +101 -6
  103. package/dist/operator/run.d.ts.map +1 -1
  104. package/dist/operator/run.js +100 -7
  105. package/dist/operator/run.js.map +1 -1
  106. package/dist/operator/statistics/cache.d.ts +7 -0
  107. package/dist/operator/statistics/cache.d.ts.map +1 -0
  108. package/dist/operator/statistics/cache.js +40 -0
  109. package/dist/operator/statistics/cache.js.map +1 -0
  110. package/dist/operator/statistics/runs.d.ts +36 -0
  111. package/dist/operator/statistics/runs.d.ts.map +1 -0
  112. package/dist/operator/statistics/runs.js +284 -0
  113. package/dist/operator/statistics/runs.js.map +1 -0
  114. package/dist/operator/statistics/statistics.d.ts +20 -0
  115. package/dist/operator/statistics/statistics.d.ts.map +1 -0
  116. package/dist/operator/statistics/statistics.js +138 -0
  117. package/dist/operator/statistics/statistics.js.map +1 -0
  118. package/dist/operator/statistics/tasks.d.ts +30 -0
  119. package/dist/operator/statistics/tasks.d.ts.map +1 -0
  120. package/dist/operator/statistics/tasks.js +244 -0
  121. package/dist/operator/statistics/tasks.js.map +1 -0
  122. package/dist/operator/statistics/view.d.ts +302 -0
  123. package/dist/operator/statistics/view.d.ts.map +1 -0
  124. package/dist/operator/statistics/view.js +243 -0
  125. package/dist/operator/statistics/view.js.map +1 -0
  126. package/dist/operator/statistics/window.d.ts +24 -0
  127. package/dist/operator/statistics/window.d.ts.map +1 -0
  128. package/dist/operator/statistics/window.js +47 -0
  129. package/dist/operator/statistics/window.js.map +1 -0
  130. package/dist/operator/task.d.ts +94 -0
  131. package/dist/operator/task.d.ts.map +1 -0
  132. package/dist/operator/task.js +204 -0
  133. package/dist/operator/task.js.map +1 -0
  134. package/dist/operator/transcript.d.ts +12 -12
  135. package/dist/operator/transcript.d.ts.map +1 -1
  136. package/dist/operator/transcript.js +11 -9
  137. package/dist/operator/transcript.js.map +1 -1
  138. package/dist/operator/usage.d.ts +103 -0
  139. package/dist/operator/usage.d.ts.map +1 -0
  140. package/dist/operator/usage.js +234 -0
  141. package/dist/operator/usage.js.map +1 -0
  142. package/dist/orchestrator.d.ts +8 -5
  143. package/dist/orchestrator.d.ts.map +1 -1
  144. package/dist/orchestrator.js +4 -2
  145. package/dist/orchestrator.js.map +1 -1
  146. package/dist/polling/closed-item-asks.d.ts +8 -0
  147. package/dist/polling/closed-item-asks.d.ts.map +1 -0
  148. package/dist/polling/closed-item-asks.js +28 -0
  149. package/dist/polling/closed-item-asks.js.map +1 -0
  150. package/dist/polling/cycle.d.ts +28 -10
  151. package/dist/polling/cycle.d.ts.map +1 -1
  152. package/dist/polling/cycle.js +20 -6
  153. package/dist/polling/cycle.js.map +1 -1
  154. package/dist/polling/evaluation-failures.d.ts +42 -0
  155. package/dist/polling/evaluation-failures.d.ts.map +1 -0
  156. package/dist/polling/evaluation-failures.js +103 -0
  157. package/dist/polling/evaluation-failures.js.map +1 -0
  158. package/dist/polling/hints.d.ts +2 -2
  159. package/dist/polling/hints.d.ts.map +1 -1
  160. package/dist/polling/hints.js +2 -2
  161. package/dist/polling/hints.js.map +1 -1
  162. package/dist/polling/loop-evaluation.d.ts +21 -11
  163. package/dist/polling/loop-evaluation.d.ts.map +1 -1
  164. package/dist/polling/loop-evaluation.js +70 -27
  165. package/dist/polling/loop-evaluation.js.map +1 -1
  166. package/dist/polling/open-issues.d.ts +23 -0
  167. package/dist/polling/open-issues.d.ts.map +1 -0
  168. package/dist/polling/open-issues.js +77 -0
  169. package/dist/polling/open-issues.js.map +1 -0
  170. package/dist/polling/open-pull-requests.d.ts +28 -0
  171. package/dist/polling/open-pull-requests.d.ts.map +1 -0
  172. package/dist/polling/open-pull-requests.js +131 -0
  173. package/dist/polling/open-pull-requests.js.map +1 -0
  174. package/dist/polling/polling.d.ts +20 -11
  175. package/dist/polling/polling.d.ts.map +1 -1
  176. package/dist/polling/polling.js +215 -52
  177. package/dist/polling/polling.js.map +1 -1
  178. package/dist/polling/repository-sync.d.ts +21 -14
  179. package/dist/polling/repository-sync.d.ts.map +1 -1
  180. package/dist/polling/repository-sync.js +35 -28
  181. package/dist/polling/repository-sync.js.map +1 -1
  182. package/dist/polling-triggers.d.ts +1 -1
  183. package/dist/polling-triggers.d.ts.map +1 -1
  184. package/dist/polling-triggers.js +1 -1
  185. package/dist/polling-triggers.js.map +1 -1
  186. package/dist/reloads.d.ts +14 -0
  187. package/dist/reloads.d.ts.map +1 -0
  188. package/dist/reloads.js +7 -0
  189. package/dist/reloads.js.map +1 -0
  190. package/dist/runtime.d.ts +24 -0
  191. package/dist/runtime.d.ts.map +1 -0
  192. package/dist/runtime.js +58 -0
  193. package/dist/runtime.js.map +1 -0
  194. package/dist/schedule-triggers.d.ts +14 -10
  195. package/dist/schedule-triggers.d.ts.map +1 -1
  196. package/dist/schedule-triggers.js +36 -31
  197. package/dist/schedule-triggers.js.map +1 -1
  198. package/dist/scheduler.d.ts +45 -5
  199. package/dist/scheduler.d.ts.map +1 -1
  200. package/dist/scheduler.js +587 -44
  201. package/dist/scheduler.js.map +1 -1
  202. package/dist/ssh.d.ts +103 -0
  203. package/dist/ssh.d.ts.map +1 -0
  204. package/dist/ssh.js +144 -0
  205. package/dist/ssh.js.map +1 -0
  206. package/dist/trigger-condition.d.ts +12 -0
  207. package/dist/trigger-condition.d.ts.map +1 -0
  208. package/dist/trigger-condition.js +88 -0
  209. package/dist/trigger-condition.js.map +1 -0
  210. package/dist/trigger-submission.d.ts +16 -13
  211. package/dist/trigger-submission.d.ts.map +1 -1
  212. package/dist/trigger-submission.js +19 -14
  213. package/dist/trigger-submission.js.map +1 -1
  214. package/dist/worker-engine.d.ts +13 -0
  215. package/dist/worker-engine.d.ts.map +1 -0
  216. package/dist/worker-engine.js +56 -0
  217. package/dist/worker-engine.js.map +1 -0
  218. package/dist/worker-status.d.ts +140 -0
  219. package/dist/worker-status.d.ts.map +1 -0
  220. package/dist/worker-status.js +76 -0
  221. package/dist/worker-status.js.map +1 -0
  222. 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
- /** The full engine composition for a local orchestrator driving exe.dev Workers; brains are the instance roster checked at startup. */
7
- export declare const layer: (instanceDirectory: InstanceDirectory, config: UsineConfig, brains: ReadonlyArray<BrainSpec>, options: ExeDevExecutorOptions) => Layer.Layer<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/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("./scheduler.ts").UnsupportedWorkerError | import("@usine/executor").WorkerCapabilityError, never>;
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
@@ -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;AAE9D,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/B,uIAAuI;AACvI,eAAO,MAAM,KAAK,sBACG,iBAAiB,UAC5B,WAAW,UACX,aAAa,CAAC,SAAS,CAAC,WACvB,qBAAqB,whCAU/B,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
- /** The full engine composition for a local orchestrator driving exe.dev Workers; brains are the instance roster checked at startup. */
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
- ...options,
11
- credentialGrantMinutes: options.credentialGrantMinutes ??
12
- CredentialGrantMinutes.make(config.settings.maxAttemptMinutes + 5),
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
@@ -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,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAA8B,MAAM,yBAAyB,CAAC;AAC7F,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;AAEnD,uIAAuI;AACvI,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,iBAAoC,EACpC,MAAmB,EACnB,MAAgC,EAChC,OAA8B,EAC9B,EAAE;IACF,MAAM,QAAQ,GAAG,mBAAmB,CAAC;QACnC,GAAG,OAAO;QACV,sBAAsB,EACpB,OAAO,CAAC,sBAAsB;YAC9B,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;KACrE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC"}
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"}
@@ -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 observing an instance that still needs setup. */
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,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,+DAkC7B,CAAC"}
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"}
@@ -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 observing an instance that still needs setup. */
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,kGAAkG;AAClG,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"}
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
- /** True when a label was created, so the poll cursor must drop its catalog ETag. */
17
+ /** Whether a label was created, so the poll cursor must drop its catalog ETag. */
18
18
  readonly catalogChanged: boolean;
19
- /** When a creation rate limit asks the next cycle to wait; this cycle's triggers still run. */
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,oFAAoF;IACpF,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,+FAA+F;IAC/F,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
+ {"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":"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"}
1
+ {"version":3,"file":"label-reconciler.js","sourceRoot":"","sources":["../src/label-reconciler.ts"],"names":[],"mappings":"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"}