@usine/config 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 +32 -18
- package/dist/agent.d.ts +2 -3
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +2 -3
- package/dist/agent.js.map +1 -1
- package/dist/board.d.ts +11 -6
- package/dist/board.d.ts.map +1 -1
- package/dist/board.js +11 -6
- package/dist/board.js.map +1 -1
- package/dist/checks.d.ts +3 -0
- package/dist/checks.d.ts.map +1 -1
- package/dist/checks.js +3 -0
- package/dist/checks.js.map +1 -1
- package/dist/factory.d.ts +258 -22
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +270 -30
- package/dist/factory.js.map +1 -1
- package/dist/file.d.ts +3 -3
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +3 -3
- package/dist/file.js.map +1 -1
- package/dist/frontmatter.d.ts +1 -1
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +1 -1
- package/dist/frontmatter.js.map +1 -1
- package/dist/instance/diagnostics.d.ts +1 -1
- package/dist/instance/diagnostics.d.ts.map +1 -1
- package/dist/instance/diagnostics.js +1 -1
- package/dist/instance/diagnostics.js.map +1 -1
- package/dist/instance/instance.d.ts +1 -1
- package/dist/instance/instance.d.ts.map +1 -1
- package/dist/instance/instance.js +2 -2
- package/dist/instance/instance.js.map +1 -1
- package/dist/instance/references.d.ts +5 -6
- package/dist/instance/references.d.ts.map +1 -1
- package/dist/instance/references.js +9 -9
- package/dist/instance/references.js.map +1 -1
- package/dist/instance-folder.d.ts +1 -1
- package/dist/instance-folder.d.ts.map +1 -1
- package/dist/instance-folder.js +13 -1
- package/dist/instance-folder.js.map +1 -1
- package/dist/label.d.ts +5 -5
- package/dist/label.d.ts.map +1 -1
- package/dist/label.js +5 -5
- package/dist/label.js.map +1 -1
- package/dist/loop.d.ts +12 -3
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +14 -6
- package/dist/loop.js.map +1 -1
- package/dist/parser.d.ts +6 -6
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +30 -11
- package/dist/parser.js.map +1 -1
- package/dist/payload-slices.d.ts +4 -7
- package/dist/payload-slices.d.ts.map +1 -1
- package/dist/payload-slices.js +30 -25
- package/dist/payload-slices.js.map +1 -1
- package/dist/selector.d.ts +6 -3
- package/dist/selector.d.ts.map +1 -1
- package/dist/selector.js +10 -6
- package/dist/selector.js.map +1 -1
- package/dist/trigger.d.ts +4 -7
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +6 -9
- package/dist/trigger.js.map +1 -1
- package/dist/yaml/document.d.ts +2 -2
- package/dist/yaml/document.js +3 -3
- package/dist/yaml/document.js.map +1 -1
- package/dist/yaml/writer.d.ts +4 -4
- package/dist/yaml/writer.d.ts.map +1 -1
- package/dist/yaml/writer.js +5 -6
- package/dist/yaml/writer.js.map +1 -1
- package/package.json +12 -11
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAkB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAc,IAAI,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,kDAAkD;AAClD,eAAO,MAAM,WAAW,4CAEvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;;;;;;AA6BlD,qBAAa,WAAY,SAAQ,gBAM/B;CAAG;;;;;;AAIL,iEAAiE;AACjE,qBAAa,WAAY,SAAQ,gBAI/B;CAAG;;;;;;AAEL,qDAAqD;AACrD,qBAAa,YAAa,SAAQ,iBAIhC;CAAG;;;;;;;;AAQL;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,SAAQ,kBAQjC;CAAG;;;;;;;AAEL;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,oBAOpC;CAAG;;;;;AAEJ;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,oBAKpC;CAAG;;;;;;;;;;;;;;AAMJ;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAmB,SAAQ,uBActC;CAAG;;;;;;;AAEL;;;;;;;;;;GAUG;AACH,qBAAa,eAAgB,SAAQ,oBAOpC;CAAG;AAEJ,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,4EAAsD,CAAC;AACrF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAe9D;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,cAsB7B;CAAG;;;;;AAuCL;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,6BAK5C;CAAG;;;;;;;;;;;;;;AAOL;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,SAAQ,qBAkBpC;CAAG;AAEL,uDAAuD;AACvD,eAAO,MAAM,MAAM,6GAAyE,CAAC;AAC7F,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC;;IAGtC,8DAA8D;;IAE9D,oFAAoF;;IAEpF,4EAA4E;;IAE5E,gGAAgG;;IAEhG,gFAAgF;;IAEhF,iGAAiG;;;AAXnG,qBAAa,QAAS,SAAQ,aAa5B;CAAG;AAEL,uGAAuG;AACvG,eAAO,MAAM,QAAQ;;;;;;;;;IAMnB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;;IAc1C;;;OAGG;;IAEH,oEAAoE;;;AAPtE,6CAA6C;AAC7C,qBAAa,OAAQ,SAAQ,YAU3B;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCL,gCAAgC;AAChC,qBAAa,WAAY,SAAQ,gBAa/B;CAAG"}
|
package/dist/factory.js
CHANGED
|
@@ -1,28 +1,24 @@
|
|
|
1
1
|
import { Effort, ModelId } from "@usine/core/agent/brain";
|
|
2
2
|
import { ChildSessionBudget } from "@usine/core/agent/session";
|
|
3
|
+
import { OperatorLogin } from "@usine/core/operator";
|
|
3
4
|
import { RepositoryName } from "@usine/core/repository";
|
|
4
|
-
import { WorkerName,
|
|
5
|
-
import { Effect, Schema } from "effect";
|
|
6
|
-
import { nonBlankString } from "./checks.js";
|
|
5
|
+
import { BoatSize, CloudflareImageName, CloudflareInstanceType, CloudflareLlmProvider, ContainerCpus, ContainerImage, ContainerMemoryMib, ContainerPids, GatewayAdminPort, GatewayDomain, GatewayLlmProvider, HetznerImage, HetznerLabels, HetznerLocation, HetznerResourceName, HetznerServerType, SshDestination, SshIdentityFile, SshPort, SshUser, WorkerName, WorkerRoot, } from "@usine/core/worker";
|
|
6
|
+
import { Effect, Option, Schema } from "effect";
|
|
7
|
+
import { nonBlankString, uniqueRepositoryNames } from "./checks.js";
|
|
7
8
|
import { LaneSource, Lane } from "./board.js";
|
|
8
9
|
import { canonicalLabelName, DeclaredLabel } from "./label.js";
|
|
9
|
-
/** A
|
|
10
|
+
/** A repository tag that Loop selectors match. */
|
|
10
11
|
export const RegistryTag = nonBlankString("Expected a non-blank registry tag").pipe(Schema.brand("RegistryTag"));
|
|
11
|
-
/** GitHub login identifying the human operator for this factory. */
|
|
12
|
-
export const OperatorLogin = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?$/u, {
|
|
13
|
-
message: "Expected a GitHub login",
|
|
14
|
-
})).pipe(Schema.brand("OperatorLogin"));
|
|
15
12
|
const PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
|
|
16
13
|
const uniqueNames = Schema.makeFilter((values) => new Set(values.map(({ name }) => name)).size === values.length, { message: "Expected unique names" });
|
|
17
|
-
const laneSourceKey = (source) => "label" in source ? `label:${source.label}` : `state:${source.state}`;
|
|
14
|
+
const laneSourceKey = (source) => "label" in source ? `label:${canonicalLabelName(source.label)}` : `state:${source.state}`;
|
|
18
15
|
const uniqueLaneSources = Schema.makeFilter((lanes) => {
|
|
19
16
|
const keys = lanes.flatMap(({ sources }) => sources.map(laneSourceKey));
|
|
20
17
|
return new Set(keys).size === keys.length;
|
|
21
|
-
}, { message: "Expected
|
|
18
|
+
}, { message: "Expected each lane source in only one lane" });
|
|
22
19
|
const Lanes = Schema.Array(Lane).check(uniqueNames, uniqueLaneSources);
|
|
23
20
|
const uniqueLabelNames = Schema.makeFilter((values) => new Set(values.map(({ name }) => canonicalLabelName(name))).size === values.length, { message: "Expected unique GitHub label names" });
|
|
24
21
|
const DeclaredLabels = Schema.Array(DeclaredLabel).check(uniqueLabelNames);
|
|
25
|
-
/** A repository the factory manages, with its selector tags and configured Board lanes. */
|
|
26
22
|
export class ManagedRepo extends Schema.Class("@usine/config/ManagedRepo")({
|
|
27
23
|
name: RepositoryName,
|
|
28
24
|
tags: Schema.Array(RegistryTag)
|
|
@@ -31,37 +27,265 @@ export class ManagedRepo extends Schema.Class("@usine/config/ManagedRepo")({
|
|
|
31
27
|
lanes: Lanes.pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
|
|
32
28
|
}) {
|
|
33
29
|
}
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
const MaxConcurrentAttempts = PositiveInt.pipe(Schema.withDecodingDefaultKey(Effect.succeed(1)));
|
|
31
|
+
/** A Worker that runs Attempts on the orchestrator's machine. */
|
|
32
|
+
export class LocalWorker extends Schema.Class("@usine/config/LocalWorker")({
|
|
36
33
|
name: WorkerName,
|
|
37
|
-
kind:
|
|
38
|
-
maxConcurrentAttempts:
|
|
34
|
+
kind: Schema.Literal("local"),
|
|
35
|
+
maxConcurrentAttempts: MaxConcurrentAttempts,
|
|
39
36
|
}) {
|
|
40
37
|
}
|
|
41
|
-
/**
|
|
38
|
+
/** A Worker on the exe.dev VM with the same name. */
|
|
39
|
+
export class ExeDevWorker extends Schema.Class("@usine/config/ExeDevWorker")({
|
|
40
|
+
name: WorkerName,
|
|
41
|
+
kind: Schema.Literal("exe.dev"),
|
|
42
|
+
maxConcurrentAttempts: MaxConcurrentAttempts,
|
|
43
|
+
}) {
|
|
44
|
+
}
|
|
45
|
+
const EnvironmentVariableName = Schema.String.check(Schema.isPattern(/^[A-Za-z_][A-Za-z0-9_]*$/u, {
|
|
46
|
+
message: "Expected an environment variable name",
|
|
47
|
+
})).pipe(Schema.brand("EnvironmentVariableName"));
|
|
48
|
+
/**
|
|
49
|
+
* The Gateway in front of an SSH Worker's machine on a private network (ADR 0027).
|
|
50
|
+
*
|
|
51
|
+
* - `domain`: the Gateway's private DNS domain.
|
|
52
|
+
* - `destination`: the Gateway's `ssh` destination, usually the Host alias in the Worker's
|
|
53
|
+
* `ProxyJump`. The executor forwards through it to the admin API at `adminPort` on the
|
|
54
|
+
* Gateway's loopback interface.
|
|
55
|
+
* - `adminTokenEnv`: the orchestrator environment variable with the admin token, read when
|
|
56
|
+
* `usine up` starts or a reload adds the Worker.
|
|
57
|
+
* - `llmProviders`: the providers whose credential the Gateway injects: `anthropic` for Claude
|
|
58
|
+
* Code, `openai` for Codex. Harnesses for other providers use the operator's login on the
|
|
59
|
+
* Worker through the forward proxy.
|
|
60
|
+
*/
|
|
61
|
+
export class WorkerGateway extends Schema.Class("@usine/config/WorkerGateway")({
|
|
62
|
+
domain: GatewayDomain,
|
|
63
|
+
destination: SshDestination,
|
|
64
|
+
adminPort: GatewayAdminPort.pipe(Schema.withDecodingDefaultKey(Effect.succeed(7070))),
|
|
65
|
+
adminTokenEnv: EnvironmentVariableName,
|
|
66
|
+
llmProviders: Schema.Array(GatewayLlmProvider)
|
|
67
|
+
.check(Schema.isUnique())
|
|
68
|
+
.pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
|
|
69
|
+
}) {
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The container that each Attempt on an SSH Worker runs in, if the machine has Docker.
|
|
73
|
+
*
|
|
74
|
+
* - `image`: the image to run. If `None`, the executor's image for the harness versions of this
|
|
75
|
+
* release.
|
|
76
|
+
* - `cpus`, `memoryMib`, and `pids`: the limits of each Attempt's container. If `None`, the
|
|
77
|
+
* executor derives the limit from the machine at preflight: the machine's total less a reserve
|
|
78
|
+
* for its own processes, divided by `maxConcurrentAttempts`.
|
|
79
|
+
*/
|
|
80
|
+
export class WorkerContainer extends Schema.Class("@usine/config/WorkerContainer")({
|
|
81
|
+
image: Schema.OptionFromOptionalKey(ContainerImage),
|
|
82
|
+
cpus: Schema.OptionFromOptionalKey(ContainerCpus),
|
|
83
|
+
memoryMib: Schema.OptionFromOptionalKey(ContainerMemoryMib),
|
|
84
|
+
pids: Schema.OptionFromOptionalKey(ContainerPids),
|
|
85
|
+
}) {
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The orchestrator environment variables with the LLM provider API keys that each Attempt on a
|
|
89
|
+
* provisioned Worker gets in its environment, read when `usine up` starts or a reload adds the
|
|
90
|
+
* Worker. `anthropic` becomes `ANTHROPIC_API_KEY` for Claude Code, and `openai` becomes
|
|
91
|
+
* `OPENAI_API_KEY` for Codex.
|
|
92
|
+
*/
|
|
93
|
+
export class ProviderApiKeys extends Schema.Class("@usine/config/ProviderApiKeys")({
|
|
94
|
+
anthropic: Schema.OptionFromOptionalKey(EnvironmentVariableName),
|
|
95
|
+
openai: Schema.OptionFromOptionalKey(EnvironmentVariableName),
|
|
96
|
+
}) {
|
|
97
|
+
}
|
|
98
|
+
const ProviderApiKeysFromYaml = ProviderApiKeys.pipe(Schema.withDecodingDefaultKey(Effect.succeed({})));
|
|
99
|
+
/**
|
|
100
|
+
* Creates one Hetzner Cloud server per Attempt from a snapshot, and deletes it after the
|
|
101
|
+
* Attempt (#550).
|
|
102
|
+
*
|
|
103
|
+
* - `tokenEnv`: the orchestrator environment variable with a Hetzner Cloud API token with read
|
|
104
|
+
* and write access to the project.
|
|
105
|
+
* - `serverType` and `location`: each server's type and location.
|
|
106
|
+
* - `image`: the snapshot's ID or description, which `infra/hetzner/snapshot.sh` prints.
|
|
107
|
+
* - `network`: the private network to attach each server to. With a Gateway, it's the Gateway's
|
|
108
|
+
* network and the server gets no public address.
|
|
109
|
+
* - `firewall`: the project's firewall to apply to each server, such as one that admits SSH only
|
|
110
|
+
* from the orchestrator's address to a server with a public address.
|
|
111
|
+
* - `sshKey`: the name of the SSH key in the project that each server authorizes.
|
|
112
|
+
* - `sshUser`: the user the executor connects as.
|
|
113
|
+
* - `labels`: extra labels for each server.
|
|
114
|
+
* - `apiKeys`: provider API keys for each Attempt, for harnesses whose credential the Gateway
|
|
115
|
+
* doesn't have.
|
|
116
|
+
*/
|
|
117
|
+
export class HetznerProvisioner extends Schema.Class("@usine/config/HetznerProvisioner")({
|
|
118
|
+
provider: Schema.Literal("hetzner"),
|
|
119
|
+
tokenEnv: EnvironmentVariableName,
|
|
120
|
+
serverType: HetznerServerType,
|
|
121
|
+
location: HetznerLocation,
|
|
122
|
+
image: HetznerImage,
|
|
123
|
+
network: Schema.OptionFromOptionalKey(HetznerResourceName),
|
|
124
|
+
firewall: Schema.OptionFromOptionalKey(HetznerResourceName),
|
|
125
|
+
sshKey: HetznerResourceName,
|
|
126
|
+
sshUser: SshUser.pipe(Schema.withDecodingDefaultKey(Effect.succeed("usine"))),
|
|
127
|
+
labels: HetznerLabels.pipe(Schema.withDecodingDefaultKey(Effect.succeed({}))),
|
|
128
|
+
apiKeys: ProviderApiKeysFromYaml,
|
|
129
|
+
}) {
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Creates one Boat sandbox per Attempt and deletes it after the Attempt (#550). Boat has no
|
|
133
|
+
* network rules, so a Boat Worker has no Gateway, and each Attempt's GitHub token is on its
|
|
134
|
+
* machine (ADR 0026). Boat documents no region choice; its machines are in Germany, Finland, and
|
|
135
|
+
* France.
|
|
136
|
+
*
|
|
137
|
+
* - `tokenEnv`: the orchestrator environment variable with a Boat API key.
|
|
138
|
+
* - `size`: each sandbox's Boat machine type.
|
|
139
|
+
* - `apiKeys`: provider API keys for each Attempt. A harness without one can't authenticate,
|
|
140
|
+
* because a subscription login needs a Gateway.
|
|
141
|
+
*/
|
|
142
|
+
export class BoatProvisioner extends Schema.Class("@usine/config/BoatProvisioner")({
|
|
143
|
+
provider: Schema.Literal("boat"),
|
|
144
|
+
tokenEnv: EnvironmentVariableName,
|
|
145
|
+
size: BoatSize.pipe(Schema.withDecodingDefaultKey(Effect.succeed("default"))),
|
|
146
|
+
apiKeys: ProviderApiKeysFromYaml,
|
|
147
|
+
}) {
|
|
148
|
+
}
|
|
149
|
+
/** The provider that creates one machine per Attempt for an SSH Worker; `provider` selects it. */
|
|
150
|
+
export const WorkerProvisioner = Schema.Union([HetznerProvisioner, BoatProvisioner]);
|
|
151
|
+
const WorkerProvisionerFromYaml = Schema.Union([
|
|
152
|
+
HetznerProvisioner.pipe(Schema.encodeKeys({
|
|
153
|
+
tokenEnv: "token_env",
|
|
154
|
+
serverType: "server_type",
|
|
155
|
+
sshKey: "ssh_key",
|
|
156
|
+
sshUser: "ssh_user",
|
|
157
|
+
apiKeys: "api_keys",
|
|
158
|
+
})),
|
|
159
|
+
BoatProvisioner.pipe(Schema.encodeKeys({ tokenEnv: "token_env", apiKeys: "api_keys" })),
|
|
160
|
+
]);
|
|
161
|
+
/**
|
|
162
|
+
* A Linux machine reached with `ssh`, with Worker state under `<root>/workers/<name>`. If
|
|
163
|
+
* `gateway` is set, the machine stores no GitHub token; the executor sends each Attempt's token
|
|
164
|
+
* to the Gateway. A Worker sets either `destination`, for one long-lived machine, or
|
|
165
|
+
* `provisioner`, for one machine per Attempt; `maxConcurrentAttempts` then caps the machines in
|
|
166
|
+
* flight.
|
|
167
|
+
*/
|
|
168
|
+
export class SshWorker extends Schema.Class("@usine/config/SshWorker")({
|
|
169
|
+
name: WorkerName,
|
|
170
|
+
kind: Schema.Literal("ssh"),
|
|
171
|
+
maxConcurrentAttempts: MaxConcurrentAttempts,
|
|
172
|
+
destination: Schema.OptionFromOptionalKey(SshDestination),
|
|
173
|
+
provisioner: Schema.OptionFromOptionalKey(WorkerProvisionerFromYaml),
|
|
174
|
+
identityFile: Schema.OptionFromOptionalKey(SshIdentityFile),
|
|
175
|
+
port: Schema.OptionFromOptionalKey(SshPort),
|
|
176
|
+
root: WorkerRoot,
|
|
177
|
+
gateway: Schema.OptionFromOptionalKey(WorkerGateway.pipe(Schema.encodeKeys({
|
|
178
|
+
adminPort: "admin_port",
|
|
179
|
+
adminTokenEnv: "admin_token_env",
|
|
180
|
+
llmProviders: "llm_providers",
|
|
181
|
+
}))),
|
|
182
|
+
container: WorkerContainer.pipe(Schema.encodeKeys({ memoryMib: "memory_mib" }), Schema.withDecodingDefaultKey(Effect.succeed({}))),
|
|
183
|
+
}) {
|
|
184
|
+
}
|
|
185
|
+
/** Returns the reason an SSH Worker's machine settings conflict, or `undefined` if they don't. */
|
|
186
|
+
const sshMachineConflict = (worker) => {
|
|
187
|
+
const provisioner = Option.getOrUndefined(worker.provisioner);
|
|
188
|
+
if (provisioner === undefined)
|
|
189
|
+
return Option.isNone(worker.destination)
|
|
190
|
+
? `SSH worker "${worker.name}" needs a destination or a provisioner`
|
|
191
|
+
: undefined;
|
|
192
|
+
if (Option.isSome(worker.destination))
|
|
193
|
+
return `SSH worker "${worker.name}" sets both destination and provisioner; a provisioned worker creates its machines, so remove destination`;
|
|
194
|
+
if (Option.isSome(worker.port))
|
|
195
|
+
return `SSH worker "${worker.name}" sets port, which a provisioned worker takes from its provider`;
|
|
196
|
+
switch (provisioner.provider) {
|
|
197
|
+
case "hetzner":
|
|
198
|
+
return Option.isSome(worker.gateway) && Option.isNone(provisioner.network)
|
|
199
|
+
? `SSH worker "${worker.name}" has a gateway, so its provisioner needs the gateway's private network in network`
|
|
200
|
+
: undefined;
|
|
201
|
+
case "boat":
|
|
202
|
+
if (Option.isSome(worker.gateway))
|
|
203
|
+
return `SSH worker "${worker.name}" has a Boat provisioner and a gateway; Boat has no network rules, so no gateway can be its machines' only way out. Remove gateway.`;
|
|
204
|
+
return Option.isNone(worker.identityFile)
|
|
205
|
+
? `SSH worker "${worker.name}" has a Boat provisioner and needs identity_file, whose .pub file usine adds to each sandbox`
|
|
206
|
+
: undefined;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
const HttpsUrl = Schema.URLFromString.check(Schema.makeFilter((url) => url.protocol === "https:", { message: "Expected an https URL" }), Schema.makeFilter((url) => url.username === "" &&
|
|
210
|
+
url.password === "" &&
|
|
211
|
+
url.search === "" &&
|
|
212
|
+
url.hash === "" &&
|
|
213
|
+
url.pathname === "/", { message: "Expected the Worker's origin, without a path, credentials, or query string" }));
|
|
214
|
+
/**
|
|
215
|
+
* An LLM provider whose API key the Cloudflare Worker's outbound handlers hold for each Attempt.
|
|
216
|
+
* `apiKeyEnv` is the orchestrator environment variable with the key, read when `usine up` starts.
|
|
217
|
+
*/
|
|
218
|
+
export class CloudflareLlmProviderKey extends Schema.Class("@usine/config/CloudflareLlmProviderKey")({
|
|
219
|
+
provider: CloudflareLlmProvider,
|
|
220
|
+
apiKeyEnv: EnvironmentVariableName,
|
|
221
|
+
}) {
|
|
222
|
+
}
|
|
223
|
+
const uniqueProviders = Schema.makeFilter((values) => new Set(values.map(({ provider }) => provider)).size === values.length, { message: "Expected each provider once" });
|
|
224
|
+
/**
|
|
225
|
+
* A Worker that runs each Attempt in its own Cloudflare sandbox, through the Worker that the
|
|
226
|
+
* operator deploys from `@usine/cloudflare`.
|
|
227
|
+
*
|
|
228
|
+
* - `workerUrl`: the deployed Worker's origin.
|
|
229
|
+
* - `accessClientIdEnv` and `accessClientSecretEnv`: the orchestrator environment variables with
|
|
230
|
+
* the Cloudflare Access service token that the Worker accepts, read when `usine up` starts.
|
|
231
|
+
* - `image`: the name of the image in the Worker's `containers[].images`.
|
|
232
|
+
* - `instanceType`: the container instance type of each sandbox.
|
|
233
|
+
* - `llmProviders`: the providers whose API key the Worker's outbound handlers inject. Claude Code
|
|
234
|
+
* needs `anthropic` and Codex needs `openai`; a sandbox holds no harness login.
|
|
235
|
+
*/
|
|
236
|
+
export class CloudflareWorker extends Schema.Class("@usine/config/CloudflareWorker")({
|
|
237
|
+
name: WorkerName,
|
|
238
|
+
kind: Schema.Literal("cloudflare"),
|
|
239
|
+
maxConcurrentAttempts: MaxConcurrentAttempts,
|
|
240
|
+
workerUrl: HttpsUrl,
|
|
241
|
+
accessClientIdEnv: EnvironmentVariableName,
|
|
242
|
+
accessClientSecretEnv: EnvironmentVariableName,
|
|
243
|
+
image: CloudflareImageName,
|
|
244
|
+
instanceType: CloudflareInstanceType.pipe(Schema.withDecodingDefaultKey(Effect.succeed("standard-4"))),
|
|
245
|
+
llmProviders: Schema.Array(CloudflareLlmProviderKey.pipe(Schema.encodeKeys({ apiKeyEnv: "api_key_env" })))
|
|
246
|
+
.check(uniqueProviders)
|
|
247
|
+
.pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
|
|
248
|
+
}) {
|
|
249
|
+
}
|
|
250
|
+
/** A configured Worker; `kind` selects the adapter. */
|
|
251
|
+
export const Worker = Schema.Union([LocalWorker, ExeDevWorker, SshWorker, CloudflareWorker]);
|
|
42
252
|
export class Settings extends Schema.Class("@usine/config/Settings")({
|
|
43
|
-
/**
|
|
253
|
+
/** The interval between GitHub polling cycles, in seconds. */
|
|
44
254
|
pollInterval: PositiveInt.pipe(Schema.withDecodingDefaultKey(Effect.succeed(60))),
|
|
45
|
-
/**
|
|
255
|
+
/** The maximum number of child sessions per Attempt, counting sequential spawns. */
|
|
46
256
|
maxChildren: ChildSessionBudget.pipe(Schema.withDecodingDefaultKey(Effect.succeed(4))),
|
|
47
|
-
/**
|
|
48
|
-
maxAttemptMinutes:
|
|
49
|
-
/**
|
|
50
|
-
maxAttemptTokens:
|
|
51
|
-
/**
|
|
257
|
+
/** The wall-clock limit per Attempt, in minutes, or `None` for no limit. */
|
|
258
|
+
maxAttemptMinutes: Schema.OptionFromOptionalKey(PositiveInt),
|
|
259
|
+
/** The token limit per Attempt, counting the parent and every child, or `None` for no limit. */
|
|
260
|
+
maxAttemptTokens: Schema.OptionFromOptionalKey(PositiveInt),
|
|
261
|
+
/** The parent model for Agents that set none, or `None` to let Pi select it. */
|
|
52
262
|
parentModel: Schema.OptionFromOptionalKey(ModelId),
|
|
53
|
-
/**
|
|
263
|
+
/** The parent reasoning effort for Agents that set none, or `None` to use the child's effort. */
|
|
54
264
|
parentEffort: Schema.OptionFromOptionalKey(Effort),
|
|
55
265
|
}) {
|
|
56
266
|
}
|
|
57
|
-
/**
|
|
267
|
+
/** The source of GitHub webhook events that trigger an early poll; polling continues in every mode. */
|
|
58
268
|
export const Webhooks = Schema.Union([
|
|
59
269
|
Schema.Struct({ mode: Schema.Literal("off") }),
|
|
60
270
|
Schema.Struct({ mode: Schema.Literal("deliveries") }),
|
|
61
271
|
Schema.Struct({ mode: Schema.Literal("endpoint"), publicUrl: Schema.URLFromString }).pipe(Schema.encodeKeys({ publicUrl: "public_url" })),
|
|
62
272
|
]);
|
|
63
|
-
|
|
64
|
-
|
|
273
|
+
const OtlpUrl = Schema.URLFromString.check(Schema.makeFilter((url) => url.protocol === "http:" || url.protocol === "https:", {
|
|
274
|
+
message: "Expected an http or https URL",
|
|
275
|
+
}), Schema.makeFilter((url) => url.username === "" && url.password === "" && url.search === "", {
|
|
276
|
+
message: "Expected a URL without a username, password, or query string; authenticate in a collector next to usine up",
|
|
277
|
+
}));
|
|
278
|
+
/** Span export over OTLP/HTTP (ADR 0028). */
|
|
279
|
+
export class Tracing extends Schema.Class("@usine/config/Tracing")({
|
|
280
|
+
/**
|
|
281
|
+
* The collector's OTLP/HTTP traces endpoint, used as given, such as
|
|
282
|
+
* `http://localhost:4318/v1/traces`. It has no credentials or query string.
|
|
283
|
+
*/
|
|
284
|
+
otlpUrl: OtlpUrl,
|
|
285
|
+
/** The `service.name` resource attribute of every exported span. */
|
|
286
|
+
serviceName: nonBlankString("Expected a non-blank service name").pipe(Schema.withDecodingDefaultKey(Effect.succeed("usine"))),
|
|
287
|
+
}) {
|
|
288
|
+
}
|
|
65
289
|
const SettingsFromYaml = Settings.pipe(Schema.encodeKeys({
|
|
66
290
|
pollInterval: "poll_interval",
|
|
67
291
|
maxChildren: "max_children",
|
|
@@ -70,10 +294,25 @@ const SettingsFromYaml = Settings.pipe(Schema.encodeKeys({
|
|
|
70
294
|
parentModel: "parent_model",
|
|
71
295
|
parentEffort: "parent_effort",
|
|
72
296
|
}));
|
|
73
|
-
const WorkerFromYaml =
|
|
74
|
-
|
|
297
|
+
const WorkerFromYaml = Schema.Union([
|
|
298
|
+
LocalWorker.pipe(Schema.encodeKeys({ maxConcurrentAttempts: "max_concurrent_attempts" })),
|
|
299
|
+
ExeDevWorker.pipe(Schema.encodeKeys({ maxConcurrentAttempts: "max_concurrent_attempts" })),
|
|
300
|
+
SshWorker.pipe(Schema.encodeKeys({
|
|
301
|
+
maxConcurrentAttempts: "max_concurrent_attempts",
|
|
302
|
+
identityFile: "identity_file",
|
|
303
|
+
})).check(Schema.makeFilter((worker) => sshMachineConflict(worker) ?? true)),
|
|
304
|
+
CloudflareWorker.pipe(Schema.encodeKeys({
|
|
305
|
+
maxConcurrentAttempts: "max_concurrent_attempts",
|
|
306
|
+
workerUrl: "worker_url",
|
|
307
|
+
accessClientIdEnv: "access_client_id_env",
|
|
308
|
+
accessClientSecretEnv: "access_client_secret_env",
|
|
309
|
+
instanceType: "instance_type",
|
|
310
|
+
llmProviders: "llm_providers",
|
|
311
|
+
})),
|
|
312
|
+
]);
|
|
313
|
+
const ManagedRepos = Schema.Array(ManagedRepo).check(uniqueRepositoryNames((repo) => repo.name));
|
|
75
314
|
const Workers = Schema.Array(WorkerFromYaml).check(Schema.isNonEmpty(), uniqueNames);
|
|
76
|
-
/** The
|
|
315
|
+
/** The decoded `usine.yaml`. */
|
|
77
316
|
export class UsineConfig extends Schema.Class("@usine/config/UsineConfig")({
|
|
78
317
|
version: Schema.Literal(1),
|
|
79
318
|
labels: DeclaredLabels.pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
|
|
@@ -82,6 +321,7 @@ export class UsineConfig extends Schema.Class("@usine/config/UsineConfig")({
|
|
|
82
321
|
workers: Workers.pipe(Schema.withDecodingDefaultKey(Effect.succeed([{ name: "local", kind: "local" }]))),
|
|
83
322
|
webhooks: Webhooks.pipe(Schema.withDecodingDefaultKey(Effect.succeed({ mode: "off" }))),
|
|
84
323
|
operator: Schema.OptionFromOptionalKey(OperatorLogin),
|
|
324
|
+
tracing: Schema.OptionFromOptionalKey(Tracing.pipe(Schema.encodeKeys({ otlpUrl: "otlp_url", serviceName: "service_name" }))),
|
|
85
325
|
}) {
|
|
86
326
|
}
|
|
87
327
|
//# sourceMappingURL=factory.js.map
|
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/file.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
/**
|
|
2
|
+
/** A file path relative to the instance folder. */
|
|
3
3
|
export declare const InstancePath: Schema.brand<Schema.NonEmptyString, "InstancePath">;
|
|
4
4
|
export type InstancePath = typeof InstancePath.Type;
|
|
5
5
|
export declare const FileStage: Schema.Literals<readonly ["expression", "frontmatter", "read", "reference", "schema", "yaml"]>;
|
|
@@ -10,7 +10,7 @@ declare const ConfigFileError_base: Schema.Class<ConfigFileError, Schema.TaggedS
|
|
|
10
10
|
readonly expression: Schema.OptionFromOptionalKey<Schema.brand<Schema.String, "ExpressionSource">>;
|
|
11
11
|
readonly message: Schema.NonEmptyString;
|
|
12
12
|
}>, import("effect/Cause").YieldableError>;
|
|
13
|
-
/**
|
|
13
|
+
/** An error in one file at one parse stage; only that file is quarantined. */
|
|
14
14
|
export declare class ConfigFileError extends ConfigFileError_base {
|
|
15
15
|
}
|
|
16
16
|
declare const FactoryConfigError_base: Schema.Class<FactoryConfigError, Schema.TaggedStruct<"FactoryConfigError", {
|
|
@@ -18,7 +18,7 @@ declare const FactoryConfigError_base: Schema.Class<FactoryConfigError, Schema.T
|
|
|
18
18
|
readonly stage: Schema.Literals<readonly ["expression", "frontmatter", "read", "reference", "schema", "yaml"]>;
|
|
19
19
|
readonly message: Schema.NonEmptyString;
|
|
20
20
|
}>, import("effect/Cause").YieldableError>;
|
|
21
|
-
/**
|
|
21
|
+
/** An error loading the registry or settings, which fails the whole instance load. */
|
|
22
22
|
export declare class FactoryConfigError extends FactoryConfigError_base {
|
|
23
23
|
}
|
|
24
24
|
export declare const ConfigError: Schema.Union<readonly [typeof ConfigFileError, typeof FactoryConfigError]>;
|
package/dist/file.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,mDAAmD;AACnD,eAAO,MAAM,YAAY,qDAA2D,CAAC;AAErF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAC;AAEpD,eAAO,MAAM,SAAS,gGAOpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;;;;;;;AAE9C,8EAA8E;AAC9E,qBAAa,eAAgB,SAAQ,oBAOnC;CAAG;;;;;;AAEL,sFAAsF;AACtF,qBAAa,kBAAmB,SAAQ,uBAMtC;CAAG;AAEL,eAAO,MAAM,WAAW,4EAAsD,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC"}
|
package/dist/file.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Source } from "@usine/expression/expression-engine";
|
|
2
2
|
import { Schema } from "effect";
|
|
3
|
-
/**
|
|
3
|
+
/** A file path relative to the instance folder. */
|
|
4
4
|
export const InstancePath = Schema.NonEmptyString.pipe(Schema.brand("InstancePath"));
|
|
5
5
|
export const FileStage = Schema.Literals([
|
|
6
6
|
"expression",
|
|
@@ -10,7 +10,7 @@ export const FileStage = Schema.Literals([
|
|
|
10
10
|
"schema",
|
|
11
11
|
"yaml",
|
|
12
12
|
]);
|
|
13
|
-
/**
|
|
13
|
+
/** An error in one file at one parse stage; only that file is quarantined. */
|
|
14
14
|
export class ConfigFileError extends Schema.TaggedError("@usine/config/ConfigFileError")("ConfigFileError", {
|
|
15
15
|
file: InstancePath,
|
|
16
16
|
stage: FileStage,
|
|
@@ -18,7 +18,7 @@ export class ConfigFileError extends Schema.TaggedError("@usine/config/ConfigFil
|
|
|
18
18
|
message: Schema.NonEmptyString,
|
|
19
19
|
}) {
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
21
|
+
/** An error loading the registry or settings, which fails the whole instance load. */
|
|
22
22
|
export class FactoryConfigError extends Schema.TaggedError("@usine/config/FactoryConfigError")("FactoryConfigError", {
|
|
23
23
|
file: InstancePath,
|
|
24
24
|
stage: FileStage,
|
package/dist/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AAIrF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;IACvC,YAAY;IACZ,aAAa;IACb,MAAM;IACN,WAAW;IACX,QAAQ;IACR,MAAM;CACP,CAAC,CAAC;AAIH,8EAA8E;AAC9E,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,CACrD,+BAA+B,CAChC,CAAC,iBAAiB,EAAE;IACnB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG;AAEL,sFAAsF;AACtF,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,CACxD,kCAAkC,CACnC,CAAC,oBAAoB,EAAE;IACtB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG;AAEL,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAC"}
|
package/dist/frontmatter.d.ts
CHANGED
|
@@ -5,6 +5,6 @@ export interface MarkdownParts {
|
|
|
5
5
|
readonly body: string;
|
|
6
6
|
readonly newline: "\n" | "\r\n";
|
|
7
7
|
}
|
|
8
|
-
/** Splits a Markdown file into
|
|
8
|
+
/** Splits a Markdown file into YAML frontmatter and body without parsing either. */
|
|
9
9
|
export declare const splitMarkdown: (file: InstancePath, source: string) => Effect.Effect<MarkdownParts, ConfigFileError>;
|
|
10
10
|
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;CACjC;AAeD,
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;CACjC;AAeD,oFAAoF;AACpF,eAAO,MAAM,aAAa,SAClB,YAAY,UACV,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAoC9C,CAAC"}
|
package/dist/frontmatter.js
CHANGED
|
@@ -12,7 +12,7 @@ const closingDelimiterAt = (source, newline, from) => {
|
|
|
12
12
|
}
|
|
13
13
|
return -1;
|
|
14
14
|
};
|
|
15
|
-
/** Splits a Markdown file into
|
|
15
|
+
/** Splits a Markdown file into YAML frontmatter and body without parsing either. */
|
|
16
16
|
export const splitMarkdown = (file, source) => {
|
|
17
17
|
const newline = source.startsWith("---\r\n")
|
|
18
18
|
? "\r\n"
|
package/dist/frontmatter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,eAAe,EAAqB,MAAM,WAAW,CAAC;AAQ/D,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,OAAsB,EAAE,IAAY,EAAU,EAAE;IAC1F,MAAM,SAAS,GAAG,GAAG,OAAO,KAAK,CAAC;IAClC,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAChD,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;QACpD,IAAI,cAAc,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;YACnF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,eAAe,EAAqB,MAAM,WAAW,CAAC;AAQ/D,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,OAAsB,EAAE,IAAY,EAAU,EAAE;IAC1F,MAAM,SAAS,GAAG,GAAG,OAAO,KAAK,CAAC;IAClC,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAChD,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;QACpD,IAAI,cAAc,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;YACnF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF,oFAAoF;AACpF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,IAAkB,EAClB,MAAc,EACiC,EAAE;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAC1C,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;YAC1B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,IAAI,eAAe,CAAC;YACzB,IAAI;YACJ,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;YACzB,OAAO,EAAE,oEAAoE;SAC9E,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACrC,MAAM,gBAAgB,GAAG,GAAG,OAAO,KAAK,CAAC;IACzC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,eAAe,CAAC;YACzB,IAAI;YACJ,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE;YACzB,OAAO,EAAE,qDAAqD;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC;QAC1D,CAAC,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM;QACjC,CAAC,CAAC,cAAc,CAAC;IACnB,OAAO,MAAM,CAAC,OAAO,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QACtC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7B,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -12,7 +12,7 @@ declare const UndeclaredTriggerLabelWarning_base: Schema.Class<UndeclaredTrigger
|
|
|
12
12
|
}>, {}>;
|
|
13
13
|
export declare class UndeclaredTriggerLabelWarning extends UndeclaredTriggerLabelWarning_base {
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
15
|
+
/** The diagnostics that don't block a load. */
|
|
16
16
|
export declare const ConfigWarning: Schema.Union<readonly [typeof UndeclaredLaneLabelWarning, typeof UndeclaredTriggerLabelWarning]>;
|
|
17
17
|
export type ConfigWarning = typeof ConfigWarning.Type;
|
|
18
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/instance/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AAKhC,qBAAa,0BAA2B,SAAQ,+BAM9C;CAAG;;;;;AAEL,qBAAa,6BAA8B,SAAQ,kCAKjD;CAAG;AAEL
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/instance/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AAKhC,qBAAa,0BAA2B,SAAQ,+BAM9C;CAAG;;;;;AAEL,qBAAa,6BAA8B,SAAQ,kCAKjD;CAAG;AAEL,+CAA+C;AAC/C,eAAO,MAAM,aAAa,kGAGxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC"}
|
|
@@ -14,7 +14,7 @@ export class UndeclaredTriggerLabelWarning extends Schema.TaggedClass("@usine/co
|
|
|
14
14
|
label: GitHubLabelName,
|
|
15
15
|
}) {
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
17
|
+
/** The diagnostics that don't block a load. */
|
|
18
18
|
export const ConfigWarning = Schema.Union([
|
|
19
19
|
UndeclaredLaneLabelWarning,
|
|
20
20
|
UndeclaredTriggerLabelWarning,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/instance/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,OAAO,0BAA2B,SAAQ,MAAM,CAAC,WAAW,CAChE,0CAA0C,CAC3C,CAAC,4BAA4B,EAAE;IAC9B,UAAU,EAAE,cAAc;IAC1B,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,eAAe;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,6BAA8B,SAAQ,MAAM,CAAC,WAAW,CACnE,6CAA6C,CAC9C,CAAC,+BAA+B,EAAE;IACjC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI;IAC1B,KAAK,EAAE,eAAe;CACvB,CAAC;CAAG;AAEL
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/instance/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,OAAO,0BAA2B,SAAQ,MAAM,CAAC,WAAW,CAChE,0CAA0C,CAC3C,CAAC,4BAA4B,EAAE;IAC9B,UAAU,EAAE,cAAc;IAC1B,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,eAAe;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,6BAA8B,SAAQ,MAAM,CAAC,WAAW,CACnE,6CAA6C,CAC9C,CAAC,+BAA+B,EAAE;IACjC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI;IAC1B,KAAK,EAAE,eAAe;CACvB,CAAC;CAAG;AAEL,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IACxC,0BAA0B;IAC1B,6BAA6B;CAC9B,CAAC,CAAC"}
|
|
@@ -10,7 +10,7 @@ declare const LoadedInstance_base: Schema.Class<LoadedInstance, Schema.Struct<{
|
|
|
10
10
|
readonly quarantinedLoops: Schema.$Array<typeof QuarantinedLoop>;
|
|
11
11
|
readonly warnings: Schema.$Array<Schema.Union<readonly [typeof import("./diagnostics.ts").UndeclaredLaneLabelWarning, typeof import("./diagnostics.ts").UndeclaredTriggerLabelWarning]>>;
|
|
12
12
|
}>, {}>;
|
|
13
|
-
/**
|
|
13
|
+
/** A snapshot of an instance folder. Construction fails if a loop references an unknown agent or selector entry. */
|
|
14
14
|
export declare class LoadedInstance extends LoadedInstance_base {
|
|
15
15
|
}
|
|
16
16
|
export { UndeclaredLaneLabelWarning, UndeclaredTriggerLabelWarning, ConfigWarning, } from "./diagnostics.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/instance/instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAY,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;;;;;;;;;AAItD,
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/instance/instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAY,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;;;;;;;;;AAItD,oHAAoH;AACpH,qBAAa,cAAe,SAAQ,mBAmBnC;CAAG;AAEJ,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,aAAa,GACd,MAAM,kBAAkB,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { LoopFile, QuarantinedLoop, loopPath } from "../loop.js";
|
|
|
4
4
|
import { AgentFile, InvalidAgent } from "../agent.js";
|
|
5
5
|
import { ConfigWarning } from "./diagnostics.js";
|
|
6
6
|
import { referenceIndex, loopReferenceFailure } from "./references.js";
|
|
7
|
-
/**
|
|
7
|
+
/** A snapshot of an instance folder. Construction fails if a loop references an unknown agent or selector entry. */
|
|
8
8
|
export class LoadedInstance extends Schema.Class("@usine/config/LoadedInstance")(Schema.Struct({
|
|
9
9
|
config: UsineConfig,
|
|
10
10
|
agents: Schema.Array(AgentFile),
|
|
@@ -15,7 +15,7 @@ export class LoadedInstance extends Schema.Class("@usine/config/LoadedInstance")
|
|
|
15
15
|
}).check(Schema.makeFilter(({ agents, config, loops }) => {
|
|
16
16
|
const references = referenceIndex(config, agents);
|
|
17
17
|
return loops.every((loop) => Option.isNone(loopReferenceFailure(loopPath(loop.name), loop, references)));
|
|
18
|
-
}, { message: "Expected every loop to reference
|
|
18
|
+
}, { message: "Expected every loop to reference only loaded agents and registry entries" }))) {
|
|
19
19
|
}
|
|
20
20
|
export { UndeclaredLaneLabelWarning, UndeclaredTriggerLabelWarning, ConfigWarning, } from "./diagnostics.js";
|
|
21
21
|
//# sourceMappingURL=instance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/instance/instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/instance/instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,oHAAoH;AACpH,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,KAAK,CAAiB,8BAA8B,CAAC,CAC9F,MAAM,CAAC,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;CACtC,CAAC,CAAC,KAAK,CACN,MAAM,CAAC,UAAU,CACf,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5B,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAC3E,CAAC;AACJ,CAAC,EACD,EAAE,OAAO,EAAE,0EAA0E,EAAE,CACxF,CACF,CACF;CAAG;AAEJ,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,aAAa,GACd,MAAM,kBAAkB,CAAC"}
|