@bluewombat/runtime 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +473 -0
- package/SPECS.md +303 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +172 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +17 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +17 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/find-config.d.ts +9 -0
- package/dist/config/find-config.d.ts.map +1 -0
- package/dist/config/find-config.js +25 -0
- package/dist/config/find-config.js.map +1 -0
- package/dist/config/home.d.ts +17 -0
- package/dist/config/home.d.ts.map +1 -0
- package/dist/config/home.js +23 -0
- package/dist/config/home.js.map +1 -0
- package/dist/config/load-config.d.ts +13 -0
- package/dist/config/load-config.d.ts.map +1 -0
- package/dist/config/load-config.js +537 -0
- package/dist/config/load-config.js.map +1 -0
- package/dist/config/parse-args.d.ts +25 -0
- package/dist/config/parse-args.d.ts.map +1 -0
- package/dist/config/parse-args.js +478 -0
- package/dist/config/parse-args.js.map +1 -0
- package/dist/config/types.d.ts +144 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/loop/authority.d.ts +51 -0
- package/dist/loop/authority.d.ts.map +1 -0
- package/dist/loop/authority.js +166 -0
- package/dist/loop/authority.js.map +1 -0
- package/dist/loop/context.d.ts +44 -0
- package/dist/loop/context.d.ts.map +1 -0
- package/dist/loop/context.js +2 -0
- package/dist/loop/context.js.map +1 -0
- package/dist/loop/cursor.d.ts +4 -0
- package/dist/loop/cursor.d.ts.map +1 -0
- package/dist/loop/cursor.js +20 -0
- package/dist/loop/cursor.js.map +1 -0
- package/dist/loop/deliveries.d.ts +22 -0
- package/dist/loop/deliveries.d.ts.map +1 -0
- package/dist/loop/deliveries.js +240 -0
- package/dist/loop/deliveries.js.map +1 -0
- package/dist/loop/describe.d.ts +40 -0
- package/dist/loop/describe.d.ts.map +1 -0
- package/dist/loop/describe.js +48 -0
- package/dist/loop/describe.js.map +1 -0
- package/dist/loop/drive.d.ts +15 -0
- package/dist/loop/drive.d.ts.map +1 -0
- package/dist/loop/drive.js +42 -0
- package/dist/loop/drive.js.map +1 -0
- package/dist/loop/journal.d.ts +22 -0
- package/dist/loop/journal.d.ts.map +1 -0
- package/dist/loop/journal.js +49 -0
- package/dist/loop/journal.js.map +1 -0
- package/dist/loop/lock.d.ts +11 -0
- package/dist/loop/lock.d.ts.map +1 -0
- package/dist/loop/lock.js +60 -0
- package/dist/loop/lock.js.map +1 -0
- package/dist/loop/message.d.ts +34 -0
- package/dist/loop/message.d.ts.map +1 -0
- package/dist/loop/message.js +48 -0
- package/dist/loop/message.js.map +1 -0
- package/dist/loop/open-host.d.ts +13 -0
- package/dist/loop/open-host.d.ts.map +1 -0
- package/dist/loop/open-host.js +180 -0
- package/dist/loop/open-host.js.map +1 -0
- package/dist/loop/probe.d.ts +9 -0
- package/dist/loop/probe.d.ts.map +1 -0
- package/dist/loop/probe.js +57 -0
- package/dist/loop/probe.js.map +1 -0
- package/dist/loop/report.d.ts +26 -0
- package/dist/loop/report.d.ts.map +1 -0
- package/dist/loop/report.js +328 -0
- package/dist/loop/report.js.map +1 -0
- package/dist/loop/tick.d.ts +24 -0
- package/dist/loop/tick.d.ts.map +1 -0
- package/dist/loop/tick.js +169 -0
- package/dist/loop/tick.js.map +1 -0
- package/dist/loop/trace.d.ts +16 -0
- package/dist/loop/trace.d.ts.map +1 -0
- package/dist/loop/trace.js +49 -0
- package/dist/loop/trace.js.map +1 -0
- package/dist/loop/transformers.d.ts +27 -0
- package/dist/loop/transformers.d.ts.map +1 -0
- package/dist/loop/transformers.js +229 -0
- package/dist/loop/transformers.js.map +1 -0
- package/dist/loop/work-line.d.ts +73 -0
- package/dist/loop/work-line.d.ts.map +1 -0
- package/dist/loop/work-line.js +109 -0
- package/dist/loop/work-line.js.map +1 -0
- package/dist/operator/board.d.ts +31 -0
- package/dist/operator/board.d.ts.map +1 -0
- package/dist/operator/board.js +67 -0
- package/dist/operator/board.js.map +1 -0
- package/dist/operator/cancel.d.ts +19 -0
- package/dist/operator/cancel.d.ts.map +1 -0
- package/dist/operator/cancel.js +70 -0
- package/dist/operator/cancel.js.map +1 -0
- package/dist/operator/doctor.d.ts +15 -0
- package/dist/operator/doctor.d.ts.map +1 -0
- package/dist/operator/doctor.js +416 -0
- package/dist/operator/doctor.js.map +1 -0
- package/dist/operator/git-remote.d.ts +39 -0
- package/dist/operator/git-remote.d.ts.map +1 -0
- package/dist/operator/git-remote.js +78 -0
- package/dist/operator/git-remote.js.map +1 -0
- package/dist/operator/init.d.ts +28 -0
- package/dist/operator/init.d.ts.map +1 -0
- package/dist/operator/init.js +522 -0
- package/dist/operator/init.js.map +1 -0
- package/dist/operator/live.d.ts +19 -0
- package/dist/operator/live.d.ts.map +1 -0
- package/dist/operator/live.js +149 -0
- package/dist/operator/live.js.map +1 -0
- package/dist/operator/prompt.d.ts +35 -0
- package/dist/operator/prompt.d.ts.map +1 -0
- package/dist/operator/prompt.js +125 -0
- package/dist/operator/prompt.js.map +1 -0
- package/dist/operator/setup.d.ts +18 -0
- package/dist/operator/setup.d.ts.map +1 -0
- package/dist/operator/setup.js +62 -0
- package/dist/operator/setup.js.map +1 -0
- package/dist/plugins/discover.d.ts +13 -0
- package/dist/plugins/discover.d.ts.map +1 -0
- package/dist/plugins/discover.js +81 -0
- package/dist/plugins/discover.js.map +1 -0
- package/dist/plugins/isolation.d.ts +78 -0
- package/dist/plugins/isolation.d.ts.map +1 -0
- package/dist/plugins/isolation.js +64 -0
- package/dist/plugins/isolation.js.map +1 -0
- package/dist/plugins/load.d.ts +35 -0
- package/dist/plugins/load.d.ts.map +1 -0
- package/dist/plugins/load.js +109 -0
- package/dist/plugins/load.js.map +1 -0
- package/dist/plugins/manager.d.ts +43 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +47 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/persist.d.ts +33 -0
- package/dist/plugins/persist.d.ts.map +1 -0
- package/dist/plugins/persist.js +26 -0
- package/dist/plugins/persist.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { HostInvocation } from "./types.js";
|
|
2
|
+
export type LoadedConfig = {
|
|
3
|
+
ok: true;
|
|
4
|
+
invocation: Partial<HostInvocation>;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
reason: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Read one JSON object and resolve relative paths against the file's directory.
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadConfig(path: string): LoadedConfig;
|
|
13
|
+
//# sourceMappingURL=load-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA+B,cAAc,EAAuB,MAAM,YAAY,CAAC;AA0BnG,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,GACjD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAyJrD"}
|
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
const KNOWN_KEYS = new Set([
|
|
4
|
+
"manager",
|
|
5
|
+
"managerOptions",
|
|
6
|
+
"home",
|
|
7
|
+
"workLine",
|
|
8
|
+
"workspaceRoot",
|
|
9
|
+
"ledger",
|
|
10
|
+
"persist",
|
|
11
|
+
"planner",
|
|
12
|
+
"builder",
|
|
13
|
+
"assembly",
|
|
14
|
+
"authority",
|
|
15
|
+
"timeoutMs",
|
|
16
|
+
"maxRefusals",
|
|
17
|
+
"pollIntervalMs",
|
|
18
|
+
]);
|
|
19
|
+
const WORK_LINE_KEYS = new Set(["stable", "branch", "isolation", "isolationOptions"]);
|
|
20
|
+
const PASS_KEYS = new Set(["cmd", "timeoutMs"]);
|
|
21
|
+
const STAGE_KEYS = new Set(["producer", "repair", "maxAttempts", "gates"]);
|
|
22
|
+
const ASSEMBLY_KEYS = new Set(["fix", "maxAttempts", "gates"]);
|
|
23
|
+
const GATES_KEYS = new Set(["defaultTimeoutMs", "gates"]);
|
|
24
|
+
const AUTHORITY_KEYS = new Set(["enabled", "publish", "refresh", "describe"]);
|
|
25
|
+
/**
|
|
26
|
+
* Read one JSON object and resolve relative paths against the file's directory.
|
|
27
|
+
*/
|
|
28
|
+
export function loadConfig(path) {
|
|
29
|
+
const file = resolve(path);
|
|
30
|
+
let raw;
|
|
31
|
+
try {
|
|
32
|
+
raw = readFileSync(file, "utf8");
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return { ok: false, reason: `Cannot read config file: ${file}` };
|
|
36
|
+
}
|
|
37
|
+
let parsed;
|
|
38
|
+
try {
|
|
39
|
+
parsed = JSON.parse(raw);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return { ok: false, reason: `Config is not valid JSON: ${file}` };
|
|
43
|
+
}
|
|
44
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
45
|
+
return { ok: false, reason: `Config must be a JSON object: ${file}` };
|
|
46
|
+
}
|
|
47
|
+
const object = parsed;
|
|
48
|
+
for (const key of Object.keys(object)) {
|
|
49
|
+
if (!KNOWN_KEYS.has(key)) {
|
|
50
|
+
return { ok: false, reason: `Config has unknown key "${key}".` };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const configDir = dirname(file);
|
|
54
|
+
const invocation = { configDir };
|
|
55
|
+
const manager = stringField(object, "manager");
|
|
56
|
+
if (manager.ok === false) {
|
|
57
|
+
return manager;
|
|
58
|
+
}
|
|
59
|
+
if (manager.value !== undefined) {
|
|
60
|
+
invocation.manager = manager.value;
|
|
61
|
+
}
|
|
62
|
+
if (object.managerOptions !== undefined) {
|
|
63
|
+
const options = object.managerOptions;
|
|
64
|
+
if (options === null || typeof options !== "object" || Array.isArray(options)) {
|
|
65
|
+
return { ok: false, reason: 'Config "managerOptions" must be a JSON object.' };
|
|
66
|
+
}
|
|
67
|
+
invocation.managerOptions = { ...options };
|
|
68
|
+
}
|
|
69
|
+
const home = stringField(object, "home");
|
|
70
|
+
if (home.ok === false) {
|
|
71
|
+
return home;
|
|
72
|
+
}
|
|
73
|
+
if (home.value !== undefined) {
|
|
74
|
+
invocation.home = resolve(configDir, home.value);
|
|
75
|
+
}
|
|
76
|
+
if (object.workLine !== undefined) {
|
|
77
|
+
const workLine = readWorkLine(object.workLine, configDir);
|
|
78
|
+
if (workLine.ok === false) {
|
|
79
|
+
return workLine;
|
|
80
|
+
}
|
|
81
|
+
if (workLine.stable !== undefined) {
|
|
82
|
+
invocation.workLineStable = workLine.stable;
|
|
83
|
+
}
|
|
84
|
+
if (workLine.branch !== undefined) {
|
|
85
|
+
invocation.workLineBranch = workLine.branch;
|
|
86
|
+
}
|
|
87
|
+
if (workLine.isolation !== undefined) {
|
|
88
|
+
invocation.workLineIsolation = workLine.isolation;
|
|
89
|
+
}
|
|
90
|
+
if (workLine.isolationOptions !== undefined) {
|
|
91
|
+
invocation.workLineIsolationOptions = workLine.isolationOptions;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const workspaceRoot = stringField(object, "workspaceRoot");
|
|
95
|
+
if (workspaceRoot.ok === false) {
|
|
96
|
+
return workspaceRoot;
|
|
97
|
+
}
|
|
98
|
+
if (workspaceRoot.value !== undefined) {
|
|
99
|
+
invocation.workspaceRoot = resolve(configDir, workspaceRoot.value);
|
|
100
|
+
}
|
|
101
|
+
const ledger = stringField(object, "ledger");
|
|
102
|
+
if (ledger.ok === false) {
|
|
103
|
+
return ledger;
|
|
104
|
+
}
|
|
105
|
+
if (ledger.value !== undefined) {
|
|
106
|
+
invocation.ledgerRoot = resolve(configDir, ledger.value);
|
|
107
|
+
}
|
|
108
|
+
const persist = stringField(object, "persist");
|
|
109
|
+
if (persist.ok === false) {
|
|
110
|
+
return persist;
|
|
111
|
+
}
|
|
112
|
+
if (persist.value !== undefined) {
|
|
113
|
+
invocation.persist = persist.value;
|
|
114
|
+
}
|
|
115
|
+
if (object.planner !== undefined) {
|
|
116
|
+
const planner = readPass(object.planner, configDir, "planner");
|
|
117
|
+
if (planner.ok === false) {
|
|
118
|
+
return planner;
|
|
119
|
+
}
|
|
120
|
+
invocation.planner = planner.value;
|
|
121
|
+
}
|
|
122
|
+
if (object.builder !== undefined) {
|
|
123
|
+
const builder = readBuilder(object.builder, configDir);
|
|
124
|
+
if (builder.ok === false) {
|
|
125
|
+
return builder;
|
|
126
|
+
}
|
|
127
|
+
invocation.builder = builder.value;
|
|
128
|
+
}
|
|
129
|
+
if (object.assembly !== undefined) {
|
|
130
|
+
const assembly = readAssembly(object.assembly, configDir);
|
|
131
|
+
if (assembly.ok === false) {
|
|
132
|
+
return assembly;
|
|
133
|
+
}
|
|
134
|
+
invocation.assembly = assembly.value;
|
|
135
|
+
}
|
|
136
|
+
if (object.authority !== undefined) {
|
|
137
|
+
const authority = readAuthority(object.authority, configDir);
|
|
138
|
+
if (authority.ok === false) {
|
|
139
|
+
return authority;
|
|
140
|
+
}
|
|
141
|
+
invocation.authority = authority.value;
|
|
142
|
+
}
|
|
143
|
+
const timeoutMs = positiveIntField(object, "timeoutMs");
|
|
144
|
+
if (timeoutMs.ok === false) {
|
|
145
|
+
return timeoutMs;
|
|
146
|
+
}
|
|
147
|
+
if (timeoutMs.value !== undefined) {
|
|
148
|
+
invocation.timeoutMs = timeoutMs.value;
|
|
149
|
+
}
|
|
150
|
+
for (const key of ["maxRefusals"]) {
|
|
151
|
+
const read = positiveIntField(object, key);
|
|
152
|
+
if (read.ok === false) {
|
|
153
|
+
return read;
|
|
154
|
+
}
|
|
155
|
+
if (read.value !== undefined) {
|
|
156
|
+
invocation[key] = read.value;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const pollIntervalMs = positiveIntField(object, "pollIntervalMs");
|
|
160
|
+
if (pollIntervalMs.ok === false) {
|
|
161
|
+
return pollIntervalMs;
|
|
162
|
+
}
|
|
163
|
+
if (pollIntervalMs.value !== undefined) {
|
|
164
|
+
invocation.pollIntervalMs = pollIntervalMs.value;
|
|
165
|
+
}
|
|
166
|
+
return { ok: true, invocation };
|
|
167
|
+
}
|
|
168
|
+
function stringField(object, key) {
|
|
169
|
+
const value = object[key];
|
|
170
|
+
if (value === undefined) {
|
|
171
|
+
return { ok: true, value: undefined };
|
|
172
|
+
}
|
|
173
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
174
|
+
return { ok: false, reason: `Config "${key}" must be a non-empty string.` };
|
|
175
|
+
}
|
|
176
|
+
return { ok: true, value };
|
|
177
|
+
}
|
|
178
|
+
function stringArrayField(object, key) {
|
|
179
|
+
const value = object[key];
|
|
180
|
+
if (value === undefined) {
|
|
181
|
+
return { ok: true, value: undefined };
|
|
182
|
+
}
|
|
183
|
+
if (!Array.isArray(value) ||
|
|
184
|
+
value.length === 0 ||
|
|
185
|
+
value.some((entry) => typeof entry !== "string")) {
|
|
186
|
+
return { ok: false, reason: `Config "${key}" must be a non-empty array of strings.` };
|
|
187
|
+
}
|
|
188
|
+
return { ok: true, value: value };
|
|
189
|
+
}
|
|
190
|
+
function positiveIntField(object, key) {
|
|
191
|
+
const value = object[key];
|
|
192
|
+
if (value === undefined) {
|
|
193
|
+
return { ok: true, value: undefined };
|
|
194
|
+
}
|
|
195
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1) {
|
|
196
|
+
return { ok: false, reason: `Config "${key}" must be a positive integer.` };
|
|
197
|
+
}
|
|
198
|
+
return { ok: true, value };
|
|
199
|
+
}
|
|
200
|
+
function readWorkLine(value, configDir) {
|
|
201
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
202
|
+
return { ok: false, reason: 'Config "workLine" must be a JSON object.' };
|
|
203
|
+
}
|
|
204
|
+
const object = value;
|
|
205
|
+
for (const key of Object.keys(object)) {
|
|
206
|
+
if (!WORK_LINE_KEYS.has(key)) {
|
|
207
|
+
return { ok: false, reason: `Config "workLine" has unknown key "${key}".` };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const stable = stringField(object, "stable");
|
|
211
|
+
if (stable.ok === false) {
|
|
212
|
+
return { ok: false, reason: `Config "workLine.stable" must be a non-empty string.` };
|
|
213
|
+
}
|
|
214
|
+
const branch = stringField(object, "branch");
|
|
215
|
+
if (branch.ok === false) {
|
|
216
|
+
return { ok: false, reason: `Config "workLine.branch" must be a non-empty string.` };
|
|
217
|
+
}
|
|
218
|
+
const isolation = stringField(object, "isolation");
|
|
219
|
+
if (isolation.ok === false) {
|
|
220
|
+
return {
|
|
221
|
+
ok: false,
|
|
222
|
+
reason: `Config "workLine.isolation" must be a non-empty package name or path.`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
const isolationOptions = object.isolationOptions;
|
|
226
|
+
if (isolationOptions !== undefined &&
|
|
227
|
+
(isolationOptions === null ||
|
|
228
|
+
typeof isolationOptions !== "object" ||
|
|
229
|
+
Array.isArray(isolationOptions))) {
|
|
230
|
+
return { ok: false, reason: 'Config "workLine.isolationOptions" must be a JSON object.' };
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
ok: true,
|
|
234
|
+
...(stable.value === undefined ? {} : { stable: resolve(configDir, stable.value) }),
|
|
235
|
+
...(branch.value === undefined ? {} : { branch: branch.value }),
|
|
236
|
+
...(isolation.value === undefined ? {} : { isolation: isolation.value }),
|
|
237
|
+
...(isolationOptions === undefined
|
|
238
|
+
? {}
|
|
239
|
+
: { isolationOptions: isolationOptions }),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* One Gate sequence: the ceiling a Gate takes when it names none, and the Gates.
|
|
244
|
+
*
|
|
245
|
+
* A Gate without a ceiling is refused rather than given one from somewhere
|
|
246
|
+
* else. Nothing in a Task is bounded by what another child left behind, so a
|
|
247
|
+
* Gate that names none and has no sequence default is a Gate nothing would
|
|
248
|
+
* stop.
|
|
249
|
+
*/
|
|
250
|
+
/**
|
|
251
|
+
* The Authority block: whether there is an outside judge, and the slot that
|
|
252
|
+
* puts the work in front of it.
|
|
253
|
+
*
|
|
254
|
+
* `enabled` is required rather than defaulted. A Project that publishes to a
|
|
255
|
+
* shared work line and one that keeps every fold local are different products,
|
|
256
|
+
* and neither is the obvious one to assume.
|
|
257
|
+
*/
|
|
258
|
+
function readAuthority(value, configDir) {
|
|
259
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
260
|
+
return { ok: false, reason: 'Config "authority" must be a JSON object.' };
|
|
261
|
+
}
|
|
262
|
+
const object = value;
|
|
263
|
+
for (const name of Object.keys(object)) {
|
|
264
|
+
if (!AUTHORITY_KEYS.has(name)) {
|
|
265
|
+
return { ok: false, reason: `Config "authority" has unknown key "${name}".` };
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const enabled = object.enabled;
|
|
269
|
+
if (typeof enabled !== "boolean") {
|
|
270
|
+
return { ok: false, reason: 'Config "authority.enabled" must be true or false.' };
|
|
271
|
+
}
|
|
272
|
+
if (!enabled) {
|
|
273
|
+
return { ok: true, value: { enabled: false, publishArgv: [], refreshArgv: [] } };
|
|
274
|
+
}
|
|
275
|
+
const slots = {};
|
|
276
|
+
for (const [key, why] of [
|
|
277
|
+
["publish", "publishes the work"],
|
|
278
|
+
["refresh", "reads back what the Authority accepted"],
|
|
279
|
+
]) {
|
|
280
|
+
const value = object[key];
|
|
281
|
+
if (value === undefined) {
|
|
282
|
+
return {
|
|
283
|
+
ok: false,
|
|
284
|
+
reason: `Config "authority.enabled" is true, so "authority.${key}" must name the command that ${why}.`,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
if (!Array.isArray(value) ||
|
|
288
|
+
value.length === 0 ||
|
|
289
|
+
value.some((token) => typeof token !== "string")) {
|
|
290
|
+
return {
|
|
291
|
+
ok: false,
|
|
292
|
+
reason: `Config "authority.${key}" must be a non-empty array of strings.`,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
slots[key] = resolveArgv(value, configDir);
|
|
296
|
+
}
|
|
297
|
+
const spec = {
|
|
298
|
+
enabled,
|
|
299
|
+
publishArgv: slots.publish ?? [],
|
|
300
|
+
refreshArgv: slots.refresh ?? [],
|
|
301
|
+
};
|
|
302
|
+
// Optional: the Project's own words for what it submits.
|
|
303
|
+
const describe = object.describe;
|
|
304
|
+
if (describe !== undefined) {
|
|
305
|
+
if (!Array.isArray(describe) ||
|
|
306
|
+
describe.length === 0 ||
|
|
307
|
+
describe.some((token) => typeof token !== "string")) {
|
|
308
|
+
return {
|
|
309
|
+
ok: false,
|
|
310
|
+
reason: 'Config "authority.describe" must be a non-empty array of strings.',
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
spec.describeArgv = resolveArgv(describe, configDir);
|
|
314
|
+
}
|
|
315
|
+
return { ok: true, value: spec };
|
|
316
|
+
}
|
|
317
|
+
function readGates(value, configDir, key) {
|
|
318
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
319
|
+
return { ok: false, reason: `Config "${key}" must be a JSON object with "gates".` };
|
|
320
|
+
}
|
|
321
|
+
const object = value;
|
|
322
|
+
for (const name of Object.keys(object)) {
|
|
323
|
+
if (!GATES_KEYS.has(name)) {
|
|
324
|
+
return { ok: false, reason: `Config "${key}" has unknown key "${name}".` };
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
const fallback = positiveIntField(object, "defaultTimeoutMs");
|
|
328
|
+
if (fallback.ok === false) {
|
|
329
|
+
return { ok: false, reason: `Config "${key}.defaultTimeoutMs" must be a positive integer.` };
|
|
330
|
+
}
|
|
331
|
+
const entries = object.gates;
|
|
332
|
+
if (entries === undefined) {
|
|
333
|
+
return { ok: true, value: [] };
|
|
334
|
+
}
|
|
335
|
+
if (!Array.isArray(entries)) {
|
|
336
|
+
return { ok: false, reason: `Config "${key}.gates" must be an array.` };
|
|
337
|
+
}
|
|
338
|
+
const gates = [];
|
|
339
|
+
for (const entry of entries) {
|
|
340
|
+
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) {
|
|
341
|
+
return {
|
|
342
|
+
ok: false,
|
|
343
|
+
reason: `Config "${key}.gates" entries must be objects with "id" and "argv".`,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
const id = entry.id;
|
|
347
|
+
const argv = entry.argv;
|
|
348
|
+
if (typeof id !== "string" || id.trim().length === 0) {
|
|
349
|
+
return { ok: false, reason: `Config "${key}.gates" entry is missing a non-empty "id".` };
|
|
350
|
+
}
|
|
351
|
+
if (!Array.isArray(argv) ||
|
|
352
|
+
argv.length === 0 ||
|
|
353
|
+
argv.some((token) => typeof token !== "string")) {
|
|
354
|
+
return {
|
|
355
|
+
ok: false,
|
|
356
|
+
reason: `Config "${key}.gates" entry "${id}" needs a non-empty "argv" array of strings.`,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
const own = entry.timeoutMs;
|
|
360
|
+
if (own !== undefined && (typeof own !== "number" || !Number.isInteger(own) || own <= 0)) {
|
|
361
|
+
return { ok: false, reason: `Config gate "${id}" has a non-positive "timeoutMs".` };
|
|
362
|
+
}
|
|
363
|
+
const timeoutMs = own ?? fallback.value;
|
|
364
|
+
if (timeoutMs === undefined) {
|
|
365
|
+
return {
|
|
366
|
+
ok: false,
|
|
367
|
+
reason: `Config gate "${id}" has no "timeoutMs", and "${key}" names no "defaultTimeoutMs".`,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
gates.push({ id, argv: resolveArgv(argv, configDir), timeoutMs });
|
|
371
|
+
}
|
|
372
|
+
return { ok: true, value: gates };
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* The producer, and the two passes that are not a first one.
|
|
376
|
+
*
|
|
377
|
+
* `timeoutMs` is required: without it nothing bounds an agent, and an agent
|
|
378
|
+
* that never returns is the failure this shape exists to prevent. `repair` and
|
|
379
|
+
* `assembly` inherit both the command and the ceiling, so a Project with one
|
|
380
|
+
* agent writes one command.
|
|
381
|
+
*/
|
|
382
|
+
function readPass(value, configDir, key) {
|
|
383
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
384
|
+
return {
|
|
385
|
+
ok: false,
|
|
386
|
+
reason: `Config "${key}" must be a JSON object with "cmd" and "timeoutMs".`,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
const object = value;
|
|
390
|
+
for (const name of Object.keys(object)) {
|
|
391
|
+
if (!PASS_KEYS.has(name)) {
|
|
392
|
+
return { ok: false, reason: `Config "${key}" has unknown key "${name}".` };
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
const cmd = stringArrayField(object, "cmd");
|
|
396
|
+
if (cmd.ok === false || cmd.value === undefined) {
|
|
397
|
+
return { ok: false, reason: `Config "${key}.cmd" must be a non-empty array of strings.` };
|
|
398
|
+
}
|
|
399
|
+
const timeoutMs = positiveIntField(object, "timeoutMs");
|
|
400
|
+
if (timeoutMs.ok === false || timeoutMs.value === undefined) {
|
|
401
|
+
return {
|
|
402
|
+
ok: false,
|
|
403
|
+
reason: `Config "${key}" needs a positive "timeoutMs": nothing else bounds a command.`,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
return {
|
|
407
|
+
ok: true,
|
|
408
|
+
value: { cmd: resolveArgv(cmd.value, configDir), timeoutMs: timeoutMs.value },
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Making a Subtask: both passes named, neither borrowing the other's command.
|
|
413
|
+
*/
|
|
414
|
+
function readBuilder(value, configDir) {
|
|
415
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
416
|
+
return { ok: false, reason: 'Config "builder" must be a JSON object.' };
|
|
417
|
+
}
|
|
418
|
+
const object = value;
|
|
419
|
+
for (const name of Object.keys(object)) {
|
|
420
|
+
if (!STAGE_KEYS.has(name)) {
|
|
421
|
+
return { ok: false, reason: `Config "builder" has unknown key "${name}".` };
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
if (object.producer === undefined) {
|
|
425
|
+
return { ok: false, reason: 'Config "builder" needs a "producer".' };
|
|
426
|
+
}
|
|
427
|
+
if (object.repair === undefined) {
|
|
428
|
+
return { ok: false, reason: 'Config "builder" needs a "repair".' };
|
|
429
|
+
}
|
|
430
|
+
const readProducer = readPass(object.producer, configDir, "builder.producer");
|
|
431
|
+
if (readProducer.ok === false) {
|
|
432
|
+
return readProducer;
|
|
433
|
+
}
|
|
434
|
+
const readRepair = readPass(object.repair, configDir, "builder.repair");
|
|
435
|
+
if (readRepair.ok === false) {
|
|
436
|
+
return readRepair;
|
|
437
|
+
}
|
|
438
|
+
const spec = {
|
|
439
|
+
producer: readProducer.value,
|
|
440
|
+
repair: readRepair.value,
|
|
441
|
+
gates: [],
|
|
442
|
+
};
|
|
443
|
+
const maxAttempts = positiveIntField(object, "maxAttempts");
|
|
444
|
+
if (maxAttempts.ok === false) {
|
|
445
|
+
return { ok: false, reason: 'Config "builder.maxAttempts" must be a positive integer.' };
|
|
446
|
+
}
|
|
447
|
+
if (maxAttempts.value !== undefined) {
|
|
448
|
+
spec.maxAttempts = maxAttempts.value;
|
|
449
|
+
}
|
|
450
|
+
if (object.gates !== undefined) {
|
|
451
|
+
const gates = readGates(object.gates, configDir, "builder.gates");
|
|
452
|
+
if (gates.ok === false) {
|
|
453
|
+
return gates;
|
|
454
|
+
}
|
|
455
|
+
spec.gates = gates.value;
|
|
456
|
+
}
|
|
457
|
+
return { ok: true, value: spec };
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Judging the assembled feature. A command here is a fix of what a judgement
|
|
461
|
+
* refused, not a second first-pass of the request.
|
|
462
|
+
*/
|
|
463
|
+
function readAssembly(value, configDir) {
|
|
464
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
465
|
+
return { ok: false, reason: 'Config "assembly" must be a JSON object.' };
|
|
466
|
+
}
|
|
467
|
+
const object = value;
|
|
468
|
+
for (const name of Object.keys(object)) {
|
|
469
|
+
if (name === "producer" || name === "repair") {
|
|
470
|
+
return {
|
|
471
|
+
ok: false,
|
|
472
|
+
reason: `Config "assembly" has no "${name}". The assembled feature is judged ` +
|
|
473
|
+
'("assembly.gates"); a refusal is "assembly.fix".',
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
if (!ASSEMBLY_KEYS.has(name)) {
|
|
477
|
+
return { ok: false, reason: `Config "assembly" has unknown key "${name}".` };
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
const spec = { gates: [] };
|
|
481
|
+
if (object.fix !== undefined) {
|
|
482
|
+
const read = readPass(object.fix, configDir, "assembly.fix");
|
|
483
|
+
if (read.ok === false) {
|
|
484
|
+
return read;
|
|
485
|
+
}
|
|
486
|
+
spec.fix = read.value;
|
|
487
|
+
}
|
|
488
|
+
const maxAttempts = positiveIntField(object, "maxAttempts");
|
|
489
|
+
if (maxAttempts.ok === false) {
|
|
490
|
+
return { ok: false, reason: 'Config "assembly.maxAttempts" must be a positive integer.' };
|
|
491
|
+
}
|
|
492
|
+
if (maxAttempts.value !== undefined) {
|
|
493
|
+
spec.maxAttempts = maxAttempts.value;
|
|
494
|
+
}
|
|
495
|
+
if (object.gates !== undefined) {
|
|
496
|
+
const gates = readGates(object.gates, configDir, "assembly.gates");
|
|
497
|
+
if (gates.ok === false) {
|
|
498
|
+
return gates;
|
|
499
|
+
}
|
|
500
|
+
spec.gates = gates.value;
|
|
501
|
+
}
|
|
502
|
+
return { ok: true, value: spec };
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Flags whose value is a path this system writes to.
|
|
506
|
+
*
|
|
507
|
+
* `resolveMaybePath` only resolves what already exists, which is right for an
|
|
508
|
+
* input — a word that happens to look like a path stays a word. An output has
|
|
509
|
+
* not been written yet, so that rule leaves it relative, and it is then
|
|
510
|
+
* resolved against the slot's working directory, which is the Task workspace.
|
|
511
|
+
* A workspace is a git worktree that is published and then destroyed: output
|
|
512
|
+
* left there is committed into the work first, and lost after.
|
|
513
|
+
*/
|
|
514
|
+
const WRITTEN_PATH_FLAGS = new Set(["--transcript-dir"]);
|
|
515
|
+
function resolveArgv(argv, configDir) {
|
|
516
|
+
return argv.map((token, at) => WRITTEN_PATH_FLAGS.has(argv[at - 1] ?? "")
|
|
517
|
+
? resolve(configDir, token)
|
|
518
|
+
: resolveMaybePath(token, configDir));
|
|
519
|
+
}
|
|
520
|
+
/** A token that names a file next to the config is a path; anything else is a word. */
|
|
521
|
+
function resolveMaybePath(value, configDir) {
|
|
522
|
+
if (value.startsWith("-")) {
|
|
523
|
+
return value;
|
|
524
|
+
}
|
|
525
|
+
const candidate = resolve(configDir, value);
|
|
526
|
+
try {
|
|
527
|
+
if (existsSync(candidate) &&
|
|
528
|
+
(statSync(candidate).isFile() || statSync(candidate).isDirectory())) {
|
|
529
|
+
return candidate;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
return value;
|
|
534
|
+
}
|
|
535
|
+
return value;
|
|
536
|
+
}
|
|
537
|
+
//# sourceMappingURL=load-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { HostInvocation } from "./types.js";
|
|
2
|
+
export type ParseResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
invocation: HostInvocation;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
reason: string;
|
|
8
|
+
};
|
|
9
|
+
export type ParseInput = {
|
|
10
|
+
/** Where a relative flag path and the config search start. */
|
|
11
|
+
cwd?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Whether a named directory must already exist. `mason doctor` turns this
|
|
14
|
+
* off so one missing path does not hide every other check.
|
|
15
|
+
*/
|
|
16
|
+
checkPaths?: boolean;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Parse `mason run` argv (without node/script/`run`).
|
|
20
|
+
*
|
|
21
|
+
* The nearest `mason.config.json` is read when `--config` is absent, so a
|
|
22
|
+
* project that has one needs no flag at all. Flags override the file.
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseArgs(argv: string[], input?: ParseInput): ParseResult;
|
|
25
|
+
//# sourceMappingURL=parse-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../../src/config/parse-args.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAgB,cAAc,EAAY,MAAM,YAAY,CAAC;AA4CzE,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG,MAAM,MAAM,UAAU,GAAG;IACvB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAwZF;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,UAAe,GAAG,WAAW,CAkB7E"}
|