@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.
Files changed (151) hide show
  1. package/README.md +473 -0
  2. package/SPECS.md +303 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +172 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/defaults.d.ts +17 -0
  8. package/dist/config/defaults.d.ts.map +1 -0
  9. package/dist/config/defaults.js +17 -0
  10. package/dist/config/defaults.js.map +1 -0
  11. package/dist/config/find-config.d.ts +9 -0
  12. package/dist/config/find-config.d.ts.map +1 -0
  13. package/dist/config/find-config.js +25 -0
  14. package/dist/config/find-config.js.map +1 -0
  15. package/dist/config/home.d.ts +17 -0
  16. package/dist/config/home.d.ts.map +1 -0
  17. package/dist/config/home.js +23 -0
  18. package/dist/config/home.js.map +1 -0
  19. package/dist/config/load-config.d.ts +13 -0
  20. package/dist/config/load-config.d.ts.map +1 -0
  21. package/dist/config/load-config.js +537 -0
  22. package/dist/config/load-config.js.map +1 -0
  23. package/dist/config/parse-args.d.ts +25 -0
  24. package/dist/config/parse-args.d.ts.map +1 -0
  25. package/dist/config/parse-args.js +478 -0
  26. package/dist/config/parse-args.js.map +1 -0
  27. package/dist/config/types.d.ts +144 -0
  28. package/dist/config/types.d.ts.map +1 -0
  29. package/dist/config/types.js +2 -0
  30. package/dist/config/types.js.map +1 -0
  31. package/dist/index.d.ts +30 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +16 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/loop/authority.d.ts +51 -0
  36. package/dist/loop/authority.d.ts.map +1 -0
  37. package/dist/loop/authority.js +166 -0
  38. package/dist/loop/authority.js.map +1 -0
  39. package/dist/loop/context.d.ts +44 -0
  40. package/dist/loop/context.d.ts.map +1 -0
  41. package/dist/loop/context.js +2 -0
  42. package/dist/loop/context.js.map +1 -0
  43. package/dist/loop/cursor.d.ts +4 -0
  44. package/dist/loop/cursor.d.ts.map +1 -0
  45. package/dist/loop/cursor.js +20 -0
  46. package/dist/loop/cursor.js.map +1 -0
  47. package/dist/loop/deliveries.d.ts +22 -0
  48. package/dist/loop/deliveries.d.ts.map +1 -0
  49. package/dist/loop/deliveries.js +240 -0
  50. package/dist/loop/deliveries.js.map +1 -0
  51. package/dist/loop/describe.d.ts +40 -0
  52. package/dist/loop/describe.d.ts.map +1 -0
  53. package/dist/loop/describe.js +48 -0
  54. package/dist/loop/describe.js.map +1 -0
  55. package/dist/loop/drive.d.ts +15 -0
  56. package/dist/loop/drive.d.ts.map +1 -0
  57. package/dist/loop/drive.js +42 -0
  58. package/dist/loop/drive.js.map +1 -0
  59. package/dist/loop/journal.d.ts +22 -0
  60. package/dist/loop/journal.d.ts.map +1 -0
  61. package/dist/loop/journal.js +49 -0
  62. package/dist/loop/journal.js.map +1 -0
  63. package/dist/loop/lock.d.ts +11 -0
  64. package/dist/loop/lock.d.ts.map +1 -0
  65. package/dist/loop/lock.js +60 -0
  66. package/dist/loop/lock.js.map +1 -0
  67. package/dist/loop/message.d.ts +34 -0
  68. package/dist/loop/message.d.ts.map +1 -0
  69. package/dist/loop/message.js +48 -0
  70. package/dist/loop/message.js.map +1 -0
  71. package/dist/loop/open-host.d.ts +13 -0
  72. package/dist/loop/open-host.d.ts.map +1 -0
  73. package/dist/loop/open-host.js +180 -0
  74. package/dist/loop/open-host.js.map +1 -0
  75. package/dist/loop/probe.d.ts +9 -0
  76. package/dist/loop/probe.d.ts.map +1 -0
  77. package/dist/loop/probe.js +57 -0
  78. package/dist/loop/probe.js.map +1 -0
  79. package/dist/loop/report.d.ts +26 -0
  80. package/dist/loop/report.d.ts.map +1 -0
  81. package/dist/loop/report.js +328 -0
  82. package/dist/loop/report.js.map +1 -0
  83. package/dist/loop/tick.d.ts +24 -0
  84. package/dist/loop/tick.d.ts.map +1 -0
  85. package/dist/loop/tick.js +169 -0
  86. package/dist/loop/tick.js.map +1 -0
  87. package/dist/loop/trace.d.ts +16 -0
  88. package/dist/loop/trace.d.ts.map +1 -0
  89. package/dist/loop/trace.js +49 -0
  90. package/dist/loop/trace.js.map +1 -0
  91. package/dist/loop/transformers.d.ts +27 -0
  92. package/dist/loop/transformers.d.ts.map +1 -0
  93. package/dist/loop/transformers.js +229 -0
  94. package/dist/loop/transformers.js.map +1 -0
  95. package/dist/loop/work-line.d.ts +73 -0
  96. package/dist/loop/work-line.d.ts.map +1 -0
  97. package/dist/loop/work-line.js +109 -0
  98. package/dist/loop/work-line.js.map +1 -0
  99. package/dist/operator/board.d.ts +31 -0
  100. package/dist/operator/board.d.ts.map +1 -0
  101. package/dist/operator/board.js +67 -0
  102. package/dist/operator/board.js.map +1 -0
  103. package/dist/operator/cancel.d.ts +19 -0
  104. package/dist/operator/cancel.d.ts.map +1 -0
  105. package/dist/operator/cancel.js +70 -0
  106. package/dist/operator/cancel.js.map +1 -0
  107. package/dist/operator/doctor.d.ts +15 -0
  108. package/dist/operator/doctor.d.ts.map +1 -0
  109. package/dist/operator/doctor.js +416 -0
  110. package/dist/operator/doctor.js.map +1 -0
  111. package/dist/operator/git-remote.d.ts +39 -0
  112. package/dist/operator/git-remote.d.ts.map +1 -0
  113. package/dist/operator/git-remote.js +78 -0
  114. package/dist/operator/git-remote.js.map +1 -0
  115. package/dist/operator/init.d.ts +28 -0
  116. package/dist/operator/init.d.ts.map +1 -0
  117. package/dist/operator/init.js +522 -0
  118. package/dist/operator/init.js.map +1 -0
  119. package/dist/operator/live.d.ts +19 -0
  120. package/dist/operator/live.d.ts.map +1 -0
  121. package/dist/operator/live.js +149 -0
  122. package/dist/operator/live.js.map +1 -0
  123. package/dist/operator/prompt.d.ts +35 -0
  124. package/dist/operator/prompt.d.ts.map +1 -0
  125. package/dist/operator/prompt.js +125 -0
  126. package/dist/operator/prompt.js.map +1 -0
  127. package/dist/operator/setup.d.ts +18 -0
  128. package/dist/operator/setup.d.ts.map +1 -0
  129. package/dist/operator/setup.js +62 -0
  130. package/dist/operator/setup.js.map +1 -0
  131. package/dist/plugins/discover.d.ts +13 -0
  132. package/dist/plugins/discover.d.ts.map +1 -0
  133. package/dist/plugins/discover.js +81 -0
  134. package/dist/plugins/discover.js.map +1 -0
  135. package/dist/plugins/isolation.d.ts +78 -0
  136. package/dist/plugins/isolation.d.ts.map +1 -0
  137. package/dist/plugins/isolation.js +64 -0
  138. package/dist/plugins/isolation.js.map +1 -0
  139. package/dist/plugins/load.d.ts +35 -0
  140. package/dist/plugins/load.d.ts.map +1 -0
  141. package/dist/plugins/load.js +109 -0
  142. package/dist/plugins/load.js.map +1 -0
  143. package/dist/plugins/manager.d.ts +43 -0
  144. package/dist/plugins/manager.d.ts.map +1 -0
  145. package/dist/plugins/manager.js +47 -0
  146. package/dist/plugins/manager.js.map +1 -0
  147. package/dist/plugins/persist.d.ts +33 -0
  148. package/dist/plugins/persist.d.ts.map +1 -0
  149. package/dist/plugins/persist.js +26 -0
  150. package/dist/plugins/persist.js.map +1 -0
  151. package/package.json +66 -0
@@ -0,0 +1,522 @@
1
+ import { existsSync, writeFileSync } from "node:fs";
2
+ import { isAbsolute, relative, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { PRODUCT } from "@bluewombat/manager-kit";
5
+ import { BOOTSTRAP_PLANNER, ISOLATION_COPY, ISOLATION_GIT } from "../config/defaults.js";
6
+ import { CONFIG_FILENAME } from "../config/find-config.js";
7
+ import { DEFAULT_HOME, inHome } from "../config/home.js";
8
+ import { inspectWorkLine } from "../loop/work-line.js";
9
+ import { discoverManagers } from "../plugins/discover.js";
10
+ import { contextOf, loadManagerModule } from "../plugins/manager.js";
11
+ import { cloneWorkLine, remoteBranches, remoteHead } from "./git-remote.js";
12
+ import { askChoice, askText, askYesNo, PromptAbandoned } from "./prompt.js";
13
+ import { runSetup } from "./setup.js";
14
+ const BUILDER_FILENAME = `${PRODUCT}-builder.mjs`;
15
+ const DEFAULT_WORK_LINE = "./work-line-stable";
16
+ const DURATION_MS = 600_000;
17
+ /** A producer's ceiling. Required, so `init` writes one rather than leaving it out. */
18
+ const BUILDER_TIMEOUT_MS = 600_000;
19
+ /** What a Gate takes when it names none of its own. */
20
+ const GATE_TIMEOUT_MS = 120_000;
21
+ const PLANNER_IN_PROJECT = `./node_modules/${BOOTSTRAP_PLANNER}`;
22
+ const BUILDER_STUB = `#!/usr/bin/env node
23
+ // The Builder slot. ${PRODUCT} spawns it in the Subtask workspace with --id,
24
+ // --attempt, --intention and --definition-of-done, and reads the exit code:
25
+ // 0 means the Gates may run. Replace it with your producer — an agent CLI,
26
+ // a script, anything that writes the work into the current directory.
27
+ // Leave that work uncommitted: it is what the Gates read and what ${PRODUCT} folds.
28
+ process.stderr.write("${PRODUCT}: no Builder yet. Edit ${BUILDER_FILENAME}.\\n");
29
+ process.exit(1);
30
+ `;
31
+ /**
32
+ * Set a working directory up, in one pass.
33
+ *
34
+ * With `ask`, it walks the questions — which manager, what that manager needs,
35
+ * where WorkLineStable is — then writes the files and carries straight on into
36
+ * `setup`, so nothing has to be re-run by hand. With flags only, it writes the
37
+ * same files and asks nothing, which is what a script wants.
38
+ */
39
+ export async function runInit(input) {
40
+ try {
41
+ return await init(input);
42
+ }
43
+ catch (error) {
44
+ if (error instanceof PromptAbandoned) {
45
+ return { ok: false, reason: error.message, exitCode: 130 };
46
+ }
47
+ throw error;
48
+ }
49
+ }
50
+ async function init(input) {
51
+ const flags = parseInitFlags(input.argv, input.ask !== undefined);
52
+ if (!flags.ok) {
53
+ return flags;
54
+ }
55
+ const path = resolve(input.cwd, CONFIG_FILENAME);
56
+ const env = input.env ?? {};
57
+ if (existsSync(path) && !flags.force) {
58
+ if (input.ask === undefined) {
59
+ return { ok: false, reason: `${CONFIG_FILENAME} already exists. Pass --force to overwrite.` };
60
+ }
61
+ input.write(`${CONFIG_FILENAME} already exists here.\n`);
62
+ if (!(await askYesNo(input.ask, "Overwrite it?", false, input.write))) {
63
+ return { ok: false, reason: "Left the existing config alone.", exitCode: 0 };
64
+ }
65
+ }
66
+ const manager = await chooseManager(input, flags.manager);
67
+ if (manager.ok === false) {
68
+ return manager;
69
+ }
70
+ const request = {
71
+ manager: manager.name,
72
+ managerOptions: flags.managerOptions,
73
+ configDir: input.cwd,
74
+ durationMs: DURATION_MS,
75
+ interruptFlag: { interrupted: false },
76
+ env,
77
+ };
78
+ const loaded = await loadManagerModule(request);
79
+ if (!loaded.ok && input.ask !== undefined) {
80
+ return {
81
+ ok: false,
82
+ reason: `${manager.name} is not installed here. Run: npm install ${manager.name}`,
83
+ };
84
+ }
85
+ let scaffold = loaded.ok
86
+ ? { options: {}, nextSteps: [] }
87
+ : { options: {}, nextSteps: [`npm install ${manager.name}`] };
88
+ if (loaded.ok && loaded.module.scaffoldManager !== undefined) {
89
+ scaffold = await loaded.module.scaffoldManager(contextOf(request));
90
+ }
91
+ let questions = [];
92
+ if (loaded.ok && loaded.module.questionsManager !== undefined) {
93
+ questions = await loaded.module.questionsManager(contextOf({ ...request, managerOptions: { ...scaffold.options, ...flags.managerOptions } }));
94
+ }
95
+ // A flag goes through the same reader the question would have used, so
96
+ // `--manager-option labels=mason` and the typed answer land as one shape,
97
+ // and a malformed one is refused here rather than at the first run.
98
+ const fromFlags = readFlagOptions(questions, flags.managerOptions);
99
+ if (fromFlags.ok === false) {
100
+ return fromFlags;
101
+ }
102
+ let managerOptions = { ...scaffold.options, ...fromFlags.options };
103
+ if (input.ask !== undefined) {
104
+ // Only a flag silences a question. A scaffold value is a default for the
105
+ // keys nobody asks about, not an answer already given.
106
+ const answered = await askQuestions(input.ask, input.write, questions, flags.managerOptions);
107
+ managerOptions = { ...scaffold.options, ...answered, ...fromFlags.options };
108
+ // Asked again with the answers in hand, so its next steps do not still
109
+ // demand what was just typed in.
110
+ if (loaded.ok && loaded.module.scaffoldManager !== undefined) {
111
+ scaffold = await loaded.module.scaffoldManager(contextOf({ ...request, managerOptions }));
112
+ managerOptions = { ...scaffold.options, ...answered, ...fromFlags.options };
113
+ }
114
+ }
115
+ // A manager that names a reference work line leaves nothing to ask: Host
116
+ // keeps its own copy, fetched on the first run. Only a manager with none
117
+ // makes the directory the operator's to choose and to fill.
118
+ const reference = loaded.ok && loaded.module.referenceManager !== undefined
119
+ ? loaded.module.referenceManager(contextOf({ ...request, managerOptions }))
120
+ : undefined;
121
+ let workLine;
122
+ if (reference !== undefined) {
123
+ workLine = { isolation: ISOLATION_GIT };
124
+ input.write(` Work line: ${manager.name} names the reference; Host keeps a copy under ${inHome(DEFAULT_HOME, "workLine")}\n`);
125
+ }
126
+ else {
127
+ const chosen = await chooseWorkLine(input, flags);
128
+ if (chosen.ok === false) {
129
+ return chosen;
130
+ }
131
+ const workLineState = inspectWorkLine(resolve(input.cwd, chosen.path));
132
+ workLine = {
133
+ stable: chosen.path,
134
+ isolation: workLineState.kind === "git" ? ISOLATION_GIT : ISOLATION_COPY,
135
+ };
136
+ }
137
+ const config = {
138
+ manager: manager.name,
139
+ managerOptions,
140
+ workLine,
141
+ // No `home`, `workspaceRoot` or `ledger`: the defaults put all of it under
142
+ // `.mason`, and a key that repeats a default is one more thing to keep true.
143
+ planner: { cmd: ["node", plannerPath(input.cwd)], timeoutMs: DURATION_MS },
144
+ // Both passes name the same stub, and both are written out: a repair runs
145
+ // its own agent or it runs nothing, never the first pass by default.
146
+ builder: {
147
+ producer: { cmd: ["node", `./${BUILDER_FILENAME}`], timeoutMs: BUILDER_TIMEOUT_MS },
148
+ repair: { cmd: ["node", `./${BUILDER_FILENAME}`], timeoutMs: BUILDER_TIMEOUT_MS },
149
+ maxAttempts: 3,
150
+ gates: { defaultTimeoutMs: GATE_TIMEOUT_MS, gates: [] },
151
+ },
152
+ // No fix here: that command only runs on a Submission an Authority sent
153
+ // back, and this Project offers nothing yet.
154
+ assembly: { gates: { defaultTimeoutMs: GATE_TIMEOUT_MS, gates: [] } },
155
+ authority: { enabled: false },
156
+ timeoutMs: DURATION_MS,
157
+ pollIntervalMs: 30_000,
158
+ };
159
+ writeFileSync(path, `${JSON.stringify(config, null, 2)}\n`, "utf8");
160
+ const builderPath = resolve(input.cwd, BUILDER_FILENAME);
161
+ if (!existsSync(builderPath)) {
162
+ writeFileSync(builderPath, BUILDER_STUB, { encoding: "utf8", mode: 0o755 });
163
+ }
164
+ scaffold.prepare?.(input.cwd);
165
+ input.write(`\nWrote ${CONFIG_FILENAME} and ${BUILDER_FILENAME}.\n`);
166
+ const exitCode = await carryOnIntoSetup(input, loaded.ok && loaded.module.setupManager !== undefined);
167
+ input.write("\nStill yours to write:\n");
168
+ for (const step of [...scaffold.nextSteps, ...hostNextSteps()]) {
169
+ input.write(` - ${step}\n`);
170
+ }
171
+ input.write(`\nThen: ${PRODUCT} doctor, and ${PRODUCT} run\n`);
172
+ return { ok: true, path, exitCode };
173
+ }
174
+ /**
175
+ * `setup` right here beats telling somebody to run it next.
176
+ *
177
+ * A plan never decides this command's exit code: `init` wrote its files, and
178
+ * `mason init && mason setup --apply` must not stop because a token is not
179
+ * exported yet. Only a failed *apply* is reported as a failure.
180
+ */
181
+ async function carryOnIntoSetup(input, hasSetup) {
182
+ if (!hasSetup) {
183
+ return 0;
184
+ }
185
+ input.write("\nChecking what the tracker still needs.\n\n");
186
+ const plan = await runSetup({
187
+ cwd: input.cwd,
188
+ argv: [],
189
+ env: input.env ?? {},
190
+ write: input.write,
191
+ });
192
+ if (input.ask === undefined || plan !== 0) {
193
+ return 0;
194
+ }
195
+ if (!(await askYesNo(input.ask, "\nApply those steps now?", true, input.write))) {
196
+ return 0;
197
+ }
198
+ input.write("\n");
199
+ return await runSetup({
200
+ cwd: input.cwd,
201
+ argv: ["--apply"],
202
+ env: input.env ?? {},
203
+ write: input.write,
204
+ });
205
+ }
206
+ async function chooseManager(input, named) {
207
+ if (named.length > 0) {
208
+ return { ok: true, name: named };
209
+ }
210
+ if (input.ask === undefined) {
211
+ return { ok: false, reason: "Missing --manager. Name a package that exports createManager." };
212
+ }
213
+ const installed = discoverManagers(input.cwd);
214
+ if (installed.length === 0) {
215
+ return {
216
+ ok: false,
217
+ reason: "No FeatureManager package is installed here.\n" +
218
+ `Install one, then run ${PRODUCT} init again — for GitHub Issues:\n` +
219
+ " npm install @bluewombat/manager-github",
220
+ };
221
+ }
222
+ const only = installed[0];
223
+ if (installed.length === 1 && only !== undefined) {
224
+ // Picking it silently reads as "this tool only does GitHub". One keypress
225
+ // says which tracker is about to ask the questions, and leaves a way out.
226
+ input.write(`Manager: ${only.name}\n`);
227
+ if (only.description !== undefined) {
228
+ input.write(` ${only.description}\n`);
229
+ }
230
+ if (await askYesNo(input.ask, "Use it?", true, input.write)) {
231
+ return { ok: true, name: only.name };
232
+ }
233
+ const typed = await askText(input.ask, "Manager package", {
234
+ required: true,
235
+ write: input.write,
236
+ });
237
+ return typed.length === 0
238
+ ? { ok: false, reason: "No manager chosen." }
239
+ : { ok: true, name: typed };
240
+ }
241
+ input.write("Which FeatureManager?\n");
242
+ const index = await askChoice(input.ask, input.write, "Manager", installed.map(describe));
243
+ const picked = installed[index];
244
+ return picked === undefined
245
+ ? { ok: false, reason: "No manager chosen." }
246
+ : { ok: true, name: picked.name };
247
+ }
248
+ function describe(entry) {
249
+ return entry.description === undefined ? entry.name : `${entry.name} — ${entry.description}`;
250
+ }
251
+ /**
252
+ * Run each question's own reader over the value its key was given as a flag.
253
+ * A key with no question, or a value that arrived as an array from a repeated
254
+ * flag, is passed through untouched.
255
+ */
256
+ function readFlagOptions(questions, given) {
257
+ const options = { ...given };
258
+ for (const question of questions) {
259
+ const value = options[question.key];
260
+ if (question.parse === undefined || typeof value !== "string") {
261
+ continue;
262
+ }
263
+ const parsed = question.parse(value);
264
+ if (!parsed.ok) {
265
+ return { ok: false, reason: `--manager-option ${question.key}: ${parsed.reason}` };
266
+ }
267
+ options[question.key] = parsed.value;
268
+ }
269
+ return { ok: true, options };
270
+ }
271
+ /** `given` holds the flags: a key already passed there is not asked about. */
272
+ async function askQuestions(ask, write, questions, given) {
273
+ const answers = {};
274
+ for (const question of questions) {
275
+ // A value already given on the command line is not asked for again.
276
+ if (given[question.key] !== undefined) {
277
+ continue;
278
+ }
279
+ for (let tries = 0; tries < 3; tries += 1) {
280
+ const options = {};
281
+ if (question.fallback !== undefined) {
282
+ options.fallback = question.fallback;
283
+ }
284
+ if (question.required !== undefined) {
285
+ options.required = question.required;
286
+ }
287
+ const answer = await askText(ask, question.prompt, options);
288
+ if (answer.length === 0) {
289
+ break;
290
+ }
291
+ if (question.parse === undefined) {
292
+ answers[question.key] = answer;
293
+ break;
294
+ }
295
+ const parsed = question.parse(answer);
296
+ if (parsed.ok) {
297
+ answers[question.key] = parsed.value;
298
+ break;
299
+ }
300
+ write(` ${parsed.reason}\n`);
301
+ }
302
+ }
303
+ return answers;
304
+ }
305
+ /**
306
+ * WorkLineStable must exist before a run: nothing downstream creates it. The
307
+ * wizard may clone it, but only after the branch has been shown to exist.
308
+ */
309
+ async function chooseWorkLine(input, flags) {
310
+ const fallback = flags.workLineStable ?? DEFAULT_WORK_LINE;
311
+ const chosen = input.ask === undefined
312
+ ? fallback
313
+ : await askText(input.ask, `Directory ${PRODUCT} folds the work into`, { fallback });
314
+ const absolute = resolve(input.cwd, chosen);
315
+ const state = inspectWorkLine(absolute);
316
+ const say = input.ask === undefined ? () => { } : input.write;
317
+ if (state.kind === "not-a-directory") {
318
+ return { ok: false, reason: `${absolute} exists and is not a directory.` };
319
+ }
320
+ if (state.kind === "git") {
321
+ say(` ${absolute} — git, on branch ${state.branch}\n`);
322
+ return { ok: true, path: chosen };
323
+ }
324
+ if (state.kind === "plain") {
325
+ say(` ${absolute} — no .git, so the work is folded in by copy, not by merge\n`);
326
+ return { ok: true, path: chosen };
327
+ }
328
+ // Missing. `--clone` answers for the wizard's question too, so a script and a
329
+ // session reach the same place by the same code.
330
+ if (flags.clone !== undefined) {
331
+ const cloned = cloneChecked(input, flags.clone, flags.branch, absolute);
332
+ return cloned.ok ? { ok: true, path: chosen } : cloned;
333
+ }
334
+ if (input.ask === undefined) {
335
+ return { ok: true, path: chosen };
336
+ }
337
+ input.write(` ${absolute} does not exist yet.\n`);
338
+ if (!(await askYesNo(input.ask, " Clone it from a git remote?", true, input.write))) {
339
+ input.write(` Create it before running ${PRODUCT}.\n`);
340
+ return { ok: true, path: chosen };
341
+ }
342
+ const cloned = await cloneAsked(input, absolute);
343
+ return cloned.ok ? { ok: true, path: chosen } : cloned;
344
+ }
345
+ /**
346
+ * Clone, having first shown that the branch is really there.
347
+ *
348
+ * A `git clone --branch` that misses fails with a message about a repository,
349
+ * not about the name that was wrong — so the branch is checked separately and
350
+ * the alternatives are listed.
351
+ */
352
+ function cloneChecked(input, remote, branch, absolute) {
353
+ const listed = remoteBranches(remote);
354
+ if (!listed.ok) {
355
+ return { ok: false, reason: listed.reason };
356
+ }
357
+ if (listed.names.length === 0) {
358
+ return { ok: false, reason: `${remote} has no branches.` };
359
+ }
360
+ const wanted = branch ?? remoteHead(remote);
361
+ if (wanted === undefined) {
362
+ return {
363
+ ok: false,
364
+ reason: `${remote} has no default branch. Name one with --branch. It has: ${listed.names.join(", ")}`,
365
+ };
366
+ }
367
+ if (!listed.names.includes(wanted)) {
368
+ return {
369
+ ok: false,
370
+ reason: `${remote} has no branch "${wanted}". It has: ${listed.names.join(", ")}`,
371
+ };
372
+ }
373
+ const cloned = cloneWorkLine(remote, wanted, absolute);
374
+ if (!cloned.ok) {
375
+ return { ok: false, reason: cloned.reason };
376
+ }
377
+ input.write(` Cloned ${remote} (${wanted}) into ${absolute}\n`);
378
+ return { ok: true, path: absolute };
379
+ }
380
+ async function cloneAsked(input, absolute) {
381
+ const ask = input.ask;
382
+ if (ask === undefined) {
383
+ return { ok: true, path: absolute };
384
+ }
385
+ // Empty means "I will put it there myself" — not a reason to abandon init.
386
+ const remote = await askText(ask, " Git remote (empty to skip)");
387
+ if (remote.length === 0) {
388
+ input.write(` Skipped. Create ${absolute} before running ${PRODUCT}.\n`);
389
+ return { ok: true, path: absolute };
390
+ }
391
+ const listed = remoteBranches(remote);
392
+ if (!listed.ok) {
393
+ return { ok: false, reason: ` ${listed.reason}` };
394
+ }
395
+ if (listed.names.length === 0) {
396
+ return { ok: false, reason: ` ${remote} has no branches.` };
397
+ }
398
+ const suggested = remoteHead(remote);
399
+ let branch = "";
400
+ for (let tries = 0; tries < 3; tries += 1) {
401
+ const options = {
402
+ required: true,
403
+ write: input.write,
404
+ };
405
+ if (suggested !== undefined) {
406
+ options.fallback = suggested;
407
+ }
408
+ branch = await askText(ask, " Branch", options);
409
+ if (listed.names.includes(branch)) {
410
+ break;
411
+ }
412
+ input.write(` ${remote} has no branch "${branch}". It has: ${listed.names.join(", ")}\n`);
413
+ }
414
+ return cloneChecked(input, remote, branch, absolute);
415
+ }
416
+ function parseInitFlags(argv, interactive) {
417
+ const flags = {
418
+ ok: true,
419
+ manager: "",
420
+ managerOptions: {},
421
+ workLineStable: undefined,
422
+ clone: undefined,
423
+ branch: undefined,
424
+ force: false,
425
+ };
426
+ let i = 0;
427
+ while (i < argv.length) {
428
+ const token = argv[i];
429
+ if (token === "--interactive") {
430
+ i += 1;
431
+ continue;
432
+ }
433
+ if (token === "--force" || token === "--yes") {
434
+ flags.force = true;
435
+ i += 1;
436
+ continue;
437
+ }
438
+ const value = argv[i + 1];
439
+ if (value === undefined || value.startsWith("--")) {
440
+ return { ok: false, reason: `Missing value for ${token}.` };
441
+ }
442
+ switch (token) {
443
+ case "--manager":
444
+ flags.manager = value;
445
+ break;
446
+ case "--manager-option": {
447
+ const added = addManagerOption(flags.managerOptions, value);
448
+ if (!added.ok) {
449
+ return added;
450
+ }
451
+ break;
452
+ }
453
+ case "--work-line-stable":
454
+ flags.workLineStable = value;
455
+ break;
456
+ case "--clone":
457
+ flags.clone = value;
458
+ break;
459
+ case "--branch":
460
+ flags.branch = value;
461
+ break;
462
+ default:
463
+ return { ok: false, reason: `Unknown argument "${token}".` };
464
+ }
465
+ i += 2;
466
+ }
467
+ if (!interactive && flags.manager.trim().length === 0) {
468
+ return {
469
+ ok: false,
470
+ reason: "Missing --manager. Name a package that exports createManager.",
471
+ };
472
+ }
473
+ return flags;
474
+ }
475
+ function addManagerOption(options, raw) {
476
+ const separator = raw.indexOf("=");
477
+ if (separator < 1) {
478
+ return { ok: false, reason: "--manager-option must be key=value." };
479
+ }
480
+ const key = raw.slice(0, separator).trim();
481
+ const value = raw.slice(separator + 1);
482
+ if (key.length === 0) {
483
+ return { ok: false, reason: "--manager-option must be key=value." };
484
+ }
485
+ const existing = options[key];
486
+ if (existing === undefined) {
487
+ options[key] = value;
488
+ }
489
+ else if (Array.isArray(existing)) {
490
+ existing.push(value);
491
+ }
492
+ else {
493
+ options[key] = [existing, value];
494
+ }
495
+ return { ok: true };
496
+ }
497
+ function hostNextSteps() {
498
+ return [
499
+ `${BUILDER_FILENAME} — your producer; or point builder.producer at @bluewombat/slots/builders/producer.mjs and builder.repair at builders/repair.mjs, with an agent after --`,
500
+ `builder.gates.gates in ${CONFIG_FILENAME} — start with workspace-changed (examples in @bluewombat/slots/gates/)`,
501
+ `authority.enabled in ${CONFIG_FILENAME} — true to offer the assembled feature outside, which then needs assembly.fix`,
502
+ ];
503
+ }
504
+ /**
505
+ * The bootstrap Planner from `@bluewombat/slots`.
506
+ *
507
+ * The Project's own copy answers first, named the way every example names it.
508
+ * Resolving instead would follow a `npm link` symlink to its realpath and write
509
+ * the path of some clone on this machine into a config meant to be committed.
510
+ *
511
+ * Only a Project without that copy falls through to resolution — the slots are
512
+ * their own package, and where an installer put them is its business.
513
+ */
514
+ function plannerPath(cwd) {
515
+ if (existsSync(resolve(cwd, PLANNER_IN_PROJECT))) {
516
+ return PLANNER_IN_PROJECT;
517
+ }
518
+ const absolutePath = fileURLToPath(import.meta.resolve(BOOTSTRAP_PLANNER));
519
+ const nearby = relative(cwd, absolutePath);
520
+ return nearby.startsWith("..") || isAbsolute(nearby) ? absolutePath : `./${nearby}`;
521
+ }
522
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/operator/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type LiveInput = {
2
+ cwd: string;
3
+ argv: string[];
4
+ write: (line: string) => void;
5
+ interruptFlag: {
6
+ interrupted: boolean;
7
+ };
8
+ /** Watch follows; status does not. */
9
+ follow: boolean;
10
+ /** How often to look for new journal lines. Tests shrink this. */
11
+ pollMs?: number;
12
+ };
13
+ /**
14
+ * Snapshot the ledger, then optionally follow the journal.
15
+ *
16
+ * Does not open Host, a manager, or Conductor. The worker owns those.
17
+ */
18
+ export declare function runLive(input: LiveInput): Promise<number>;
19
+ //# sourceMappingURL=live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/operator/live.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,aAAa,EAAE;QAAE,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACxC,sCAAsC;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC/D"}