@bluewombat/runtime 0.1.2 → 0.3.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 +81 -32
- package/SPECS.md +86 -9
- package/dist/cli.js +19 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/find-config.d.ts +2 -2
- package/dist/config/find-config.js +2 -2
- package/dist/config/load-config.d.ts +1 -1
- package/dist/config/load-config.d.ts.map +1 -1
- package/dist/config/load-config.js +95 -13
- package/dist/config/load-config.js.map +1 -1
- package/dist/config/parse-args.d.ts.map +1 -1
- package/dist/config/parse-args.js +40 -2
- package/dist/config/parse-args.js.map +1 -1
- package/dist/config/types.d.ts +35 -4
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/loop/authority.d.ts.map +1 -1
- package/dist/loop/authority.js +16 -1
- package/dist/loop/authority.js.map +1 -1
- package/dist/loop/context.d.ts +3 -0
- package/dist/loop/context.d.ts.map +1 -1
- package/dist/loop/describe.d.ts.map +1 -1
- package/dist/loop/describe.js +5 -0
- package/dist/loop/describe.js.map +1 -1
- package/dist/loop/drive.d.ts +8 -6
- package/dist/loop/drive.d.ts.map +1 -1
- package/dist/loop/drive.js +17 -7
- package/dist/loop/drive.js.map +1 -1
- package/dist/loop/journal.d.ts +27 -0
- package/dist/loop/journal.d.ts.map +1 -1
- package/dist/loop/journal.js +68 -0
- package/dist/loop/journal.js.map +1 -1
- package/dist/loop/open-host.d.ts.map +1 -1
- package/dist/loop/open-host.js +60 -3
- package/dist/loop/open-host.js.map +1 -1
- package/dist/loop/report.d.ts.map +1 -1
- package/dist/loop/report.js +48 -6
- package/dist/loop/report.js.map +1 -1
- package/dist/loop/streams.d.ts +61 -0
- package/dist/loop/streams.d.ts.map +1 -0
- package/dist/loop/streams.js +156 -0
- package/dist/loop/streams.js.map +1 -0
- package/dist/loop/trace.d.ts +7 -0
- package/dist/loop/trace.d.ts.map +1 -1
- package/dist/loop/trace.js +40 -1
- package/dist/loop/trace.js.map +1 -1
- package/dist/loop/transformers.d.ts +7 -1
- package/dist/loop/transformers.d.ts.map +1 -1
- package/dist/loop/transformers.js +44 -11
- package/dist/loop/transformers.js.map +1 -1
- package/dist/operator/board.d.ts +4 -0
- package/dist/operator/board.d.ts.map +1 -1
- package/dist/operator/board.js +6 -0
- package/dist/operator/board.js.map +1 -1
- package/dist/operator/doctor.d.ts.map +1 -1
- package/dist/operator/doctor.js +45 -22
- package/dist/operator/doctor.js.map +1 -1
- package/dist/operator/film.d.ts +28 -0
- package/dist/operator/film.d.ts.map +1 -0
- package/dist/operator/film.js +211 -0
- package/dist/operator/film.js.map +1 -0
- package/dist/operator/init.d.ts.map +1 -1
- package/dist/operator/init.js +3 -2
- package/dist/operator/init.js.map +1 -1
- package/dist/operator/live.d.ts.map +1 -1
- package/dist/operator/live.js +3 -1
- package/dist/operator/live.js.map +1 -1
- package/dist/operator/log.d.ts +13 -0
- package/dist/operator/log.d.ts.map +1 -0
- package/dist/operator/log.js +238 -0
- package/dist/operator/log.js.map +1 -0
- package/package.json +16 -15
package/README.md
CHANGED
|
@@ -55,6 +55,7 @@ package's README — Host does not grow a `--repo` flag for it.
|
|
|
55
55
|
| `mason run` | Drain the FeatureManager, run Conductor, report |
|
|
56
56
|
| `mason watch` | Snapshot the ledger and follow the journal. Ctrl-C leaves the worker running |
|
|
57
57
|
| `mason status` | Snapshot the ledger, then exit. `--json` for scripts |
|
|
58
|
+
| `mason log` | Replay the journal, with the reason a phase stopped. `--problems` for just those |
|
|
58
59
|
| `mason init` | Set this directory up: asks, writes the config and the Builder stub, then runs `setup` |
|
|
59
60
|
| `mason setup` | Prepare the tracker. A plan by default; `--apply` writes. Exit 1 on a blocked step |
|
|
60
61
|
| `mason doctor` | Check the config, the slots, and the manager. Exit 1 on any failure |
|
|
@@ -83,6 +84,21 @@ of the current step (`submitted` included). It does not talk to the tracker, and
|
|
|
83
84
|
it cannot `ready` or claim. `status` is the same snapshot without the
|
|
84
85
|
follow. `--json` prints that snapshot as JSON.
|
|
85
86
|
|
|
87
|
+
When a run only printed `unavailable:<key>`, the reason is already in the
|
|
88
|
+
journal and `log` is how you read it:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
mason log --problems
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
`--all` keeps the idle polls. `--tail N` limits the text film (`0` shows every
|
|
95
|
+
kept line). `--json` prints every kept line; with `--tail`, a truncated reply
|
|
96
|
+
names how many were kept and how many are shown. The closing tally counts each
|
|
97
|
+
distinct failure. A pause with no planner exit code is counted apart from a
|
|
98
|
+
non-zero exit. If a slot was started with `--transcript-dir`, the newest
|
|
99
|
+
transcript files are named underneath, with the agent exit and duration read
|
|
100
|
+
from the start of each file.
|
|
101
|
+
|
|
86
102
|
To abandon a Feature the tracker can no longer mention (a deleted issue, a
|
|
87
103
|
manager with no `probe`), stop `run` if it holds the ledger lock, then:
|
|
88
104
|
|
|
@@ -95,31 +111,44 @@ crash — the ledger is. The file can grow; there is no rotation yet.
|
|
|
95
111
|
|
|
96
112
|
## Config
|
|
97
113
|
|
|
98
|
-
`mason.config.
|
|
114
|
+
`mason.config.yaml`, found by walking up from the working directory. `--config
|
|
99
115
|
FILE` names another one. Relative paths resolve against the file; relative
|
|
100
116
|
flag paths resolve against the working directory. Flags override the file, and
|
|
101
117
|
`--manager-option` overrides one manager option without dropping the others.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
Parsed with the `yaml` package (YAML 1.2 core schema), so a repeated key is
|
|
119
|
+
refused rather than silently keeping the last one, and `no` / `on` / `off`
|
|
120
|
+
stay plain strings — never coerced to a boolean the way YAML 1.1 would. A
|
|
121
|
+
value that starts with `@`, like every `@bluewombat/...` package name, needs
|
|
122
|
+
quotes: `@` is a reserved YAML indicator at the start of a plain scalar.
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
manager: "@bluewombat/manager-fake"
|
|
126
|
+
managerOptions:
|
|
127
|
+
source: ./.mason/source
|
|
128
|
+
target: ./.mason/threads
|
|
129
|
+
workLine:
|
|
130
|
+
stable: ./work-line-stable
|
|
131
|
+
isolation: "@bluewombat/isolation-copy"
|
|
132
|
+
planner:
|
|
133
|
+
cmd:
|
|
134
|
+
- node
|
|
135
|
+
- ./node_modules/@bluewombat/slots/planners/one-subtask.mjs
|
|
136
|
+
timeoutMs: 600000
|
|
137
|
+
builder:
|
|
138
|
+
producer:
|
|
139
|
+
cmd: [node, ./mason-builder.mjs]
|
|
140
|
+
timeoutMs: 600000
|
|
141
|
+
repair:
|
|
142
|
+
cmd: [node, ./mason-repair.mjs]
|
|
143
|
+
timeoutMs: 600000
|
|
144
|
+
maxAttempts: 3
|
|
145
|
+
gates: { defaultTimeoutMs: 120000, gates: [] }
|
|
146
|
+
assembly:
|
|
147
|
+
gates: { defaultTimeoutMs: 900000, gates: [] }
|
|
148
|
+
authority:
|
|
149
|
+
enabled: false
|
|
150
|
+
timeoutMs: 600000
|
|
151
|
+
pollIntervalMs: 30000
|
|
123
152
|
```
|
|
124
153
|
|
|
125
154
|
| Field | Meaning |
|
|
@@ -140,17 +169,23 @@ flag paths resolve against the working directory. Flags override the file, and
|
|
|
140
169
|
| `builder.repair` | The same, for a pass a Gate refused. **Required**, and never inherited |
|
|
141
170
|
| `builder.maxAttempts` | Attempts one Task may start. Default 3 |
|
|
142
171
|
| `builder.gates` | `defaultTimeoutMs` and `gates`: ordered checks on each Subtask |
|
|
143
|
-
| `assembly.fix` | `cmd` / `timeoutMs`. Spawned when a judgement of the whole refused it
|
|
172
|
+
| `assembly.fix` | `cmd` / `timeoutMs`. Spawned when a judgement of the whole refused it — by an Authority, by `assembly.validate`, or by both |
|
|
173
|
+
| `assembly.validate` | `cmd` / `timeoutMs`. Optional. A local, read-only judge of the assembled feature, run after align, with or without an Authority. A refusal is repaired by `assembly.fix` the same as an Authority's |
|
|
144
174
|
| `assembly.maxAttempts` | Attempts that one fix may start. Default 3 |
|
|
145
175
|
| `assembly.gates` | Ordered checks on the assembled feature. Empty: the Authority judges alone |
|
|
146
176
|
| `timeoutMs` | How long a child **outside** a Task may run: manager, isolations |
|
|
147
|
-
| `maxRefusals` | Times
|
|
177
|
+
| `maxRefusals` | Times the work may be sent back before it escalates, by an Authority, by `assembly.validate`, or by both — one shared budget. Default 3 |
|
|
148
178
|
| `pollIntervalMs` | Set it and the process keeps draining until SIGINT. Absent: one tick |
|
|
179
|
+
| `observability.streams` | `enabled`, `dir`, `keep`. Films what every child says, as it says it — one file per child under `<dir>/<feature>/`, named in the journal by a `stream-opened` line. `dir` resolves against the config file; default `<home>/streams`. `keep` is `stdout` / `stderr`, default both. Off unless `enabled` is true: a stream is the Project's own code and prompts in the clear |
|
|
149
180
|
|
|
150
181
|
Every `cmd` is named where it is used, and nothing falls back to a neighbour: a
|
|
151
182
|
`repair` with no command of its own is refused rather than quietly running the
|
|
152
183
|
first-pass agent again. `builder` makes a Subtask. `assembly` judges the whole
|
|
153
184
|
and, when that judgement refuses it, runs `assembly.fix` — not a second first-pass.
|
|
185
|
+
`assembly.validate`, when declared, is a second, local judge of the whole: it
|
|
186
|
+
runs after align, before the Authority sees the work (or before the final
|
|
187
|
+
fold, with none). Its refusal is repaired by `assembly.fix` exactly as an
|
|
188
|
+
Authority's is, and shares the same `maxRefusals` budget.
|
|
154
189
|
|
|
155
190
|
Every tracker field lives in `managerOptions`. Host does not read them.
|
|
156
191
|
|
|
@@ -206,7 +241,17 @@ feature, which makes nothing.
|
|
|
206
241
|
Spawned in the feature workspace when a judgement of the whole refused it
|
|
207
242
|
(`--report`, `--report-from`). Same argv as a Builder otherwise. Host hands
|
|
208
243
|
Implementer `assembly.fix` as that pass's only agent: there is no first-pass
|
|
209
|
-
producer at this moment.
|
|
244
|
+
producer at this moment. The refusal it repairs may have come from an
|
|
245
|
+
Authority or from `assembly.validate`.
|
|
246
|
+
|
|
247
|
+
### Assembly validate
|
|
248
|
+
|
|
249
|
+
Spawned in the feature workspace after align, with or without an Authority —
|
|
250
|
+
`--intention`, `--id`, `--attempt`, `--context`. No `--report`: it is a
|
|
251
|
+
read-only review, not a repair, and takes nothing a producer would. Optional.
|
|
252
|
+
Its verdict is not the exit code alone: the slot reads what the agent itself
|
|
253
|
+
answered and maps a refusal through the Builder failure contract, so a review
|
|
254
|
+
that completes cleanly but finds a problem is still a refusal.
|
|
210
255
|
|
|
211
256
|
### Gates
|
|
212
257
|
|
|
@@ -330,7 +375,9 @@ it each stop `mason run` at boot, and `mason doctor` reports the same offline
|
|
|
330
375
|
and is the operator's directory, as before.
|
|
331
376
|
|
|
332
377
|
```
|
|
333
|
-
assembled →
|
|
378
|
+
assembled → align → assembly.validate (optional, local)
|
|
379
|
+
refused → assembly.fix, then align again, then validate again
|
|
380
|
+
accepted → Publisher places the work → manager opens the Submission
|
|
334
381
|
→ submitted, and the run comes back to it on each poll
|
|
335
382
|
assembly.gates judge what was published
|
|
336
383
|
refused → assembly.fix, then the same Submission is offered again
|
|
@@ -338,7 +385,9 @@ assembled → Publisher places the work → manager opens the Submission
|
|
|
338
385
|
```
|
|
339
386
|
|
|
340
387
|
Neither half judges: that is what `assembly.gates` are for. The Authority places
|
|
341
|
-
and folds; a Gate says whether the fold may happen.
|
|
388
|
+
and folds; a Gate says whether the fold may happen. `assembly.validate`, when
|
|
389
|
+
declared, judges before either half — the same verdict has the same fate
|
|
390
|
+
whether or not there is an Authority to offer the work to afterwards. After the
|
|
342
391
|
Authority folds, Host brings its copy of the work line up to date with a
|
|
343
392
|
fast-forward — the work line moved where the Authority is, and the next
|
|
344
393
|
Isolation must start from that version, not from a copy left behind.
|
|
@@ -410,10 +459,10 @@ change that breaks it does not merge.
|
|
|
410
459
|
|
|
411
460
|
| Layer | Holds | Does not hold | May import |
|
|
412
461
|
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------------------------------- |
|
|
413
|
-
| `config/` | What a Project wrote: argv, `mason.config.
|
|
462
|
+
| `config/` | What a Project wrote: argv, `mason.config.yaml`, discovery, `HostOptions`. Pure: YAML in, options out | A runtime value (a Journal, a Port, a process handle) | Node, `manager-kit` types |
|
|
414
463
|
| `plugins/` | Load a package by name and check its shape: a manager, an isolation strategy | What to do with the loaded thing | `config` |
|
|
415
464
|
| `loop/` | The process: listen → probe → adapt → admit → run → report; composition (`open-host`, `transformers`, Authority, work line, lock, Cursor, journal, trace) | A command a human types; a string a human reads about the config | `plugins`, `config`, the kernel, Transformers |
|
|
416
|
-
| `operator/` | Tools for a human: `init`, `setup`, `doctor`, `watch` / `status`, `cancel`, `board`, the terminal prompt
|
|
465
|
+
| `operator/` | Tools for a human: `init`, `setup`, `doctor`, `watch` / `status`, `log`, `cancel`, `board`, the terminal prompt | Anything the loop needs — the loop cannot see this layer | everything below |
|
|
417
466
|
| `index.ts`, `cli.ts` | The package surface and the dispatch. Nothing else sits at the top of `src/` | Logic | everything |
|
|
418
467
|
|
|
419
468
|
Host's code names no plugin. A manager, an isolation strategy, a persistence
|
|
@@ -464,10 +513,10 @@ SPECS.md behavioural contract
|
|
|
464
513
|
README.md how to install, configure and run; the layers above
|
|
465
514
|
src/
|
|
466
515
|
index.ts the package surface
|
|
467
|
-
cli.ts mason run | watch | status | cancel | init | setup | doctor
|
|
516
|
+
cli.ts mason run | watch | status | log | cancel | init | setup | doctor
|
|
468
517
|
config/ argv, JSON config, config discovery → HostOptions; defaults: the plugin names Host ships with
|
|
469
518
|
plugins/ load: the one loader; manager, isolation, persist: one shape each; discover
|
|
470
|
-
loop/ open-host (composition), tick (the loop), deliveries, drive, probe, report, authority, work-line, cursor, lock, journal, trace, transformers
|
|
471
|
-
operator/ init, setup, doctor, live (watch / status), cancel, board, prompt, git-remote
|
|
519
|
+
loop/ open-host (composition), tick (the loop), deliveries, drive, probe, report, authority, work-line, cursor, lock, journal (the film), streams (what a child said), trace, transformers
|
|
520
|
+
operator/ init, setup, doctor, live (watch / status), log, film, cancel, board, prompt, git-remote
|
|
472
521
|
fixtures/ stand-in slots for the loop's tests
|
|
473
522
|
```
|
package/SPECS.md
CHANGED
|
@@ -34,10 +34,10 @@ Planner / Builder / Gate argv.
|
|
|
34
34
|
|
|
35
35
|
## 2. Faces
|
|
36
36
|
|
|
37
|
-
| Face | Entry
|
|
38
|
-
| ------ |
|
|
39
|
-
| Import | `openHost(options)` then `runOnce` / `run`
|
|
40
|
-
| CLI | `mason run \| watch \| status \| cancel \| init \| setup \| doctor` | Interpret a FeatureStandard; pick Child paths |
|
|
37
|
+
| Face | Entry | Must not |
|
|
38
|
+
| ------ | -------------------------------------------------------------------------- | --------------------------------------------- |
|
|
39
|
+
| Import | `openHost(options)` then `runOnce` / `run` | Live inside Conductor `src/run/` |
|
|
40
|
+
| CLI | `mason run \| watch \| status \| log \| cancel \| init \| setup \| doctor` | Interpret a FeatureStandard; pick Child paths |
|
|
41
41
|
|
|
42
42
|
`src/loop/` is the process: `open-host.ts` opens packages (composition),
|
|
43
43
|
`tick.ts` runs the listen / probe / Cursor / sweep loop, `deliveries.ts` handles one
|
|
@@ -52,16 +52,23 @@ import rule between them are in [README.md](./README.md) § Layers.
|
|
|
52
52
|
|
|
53
53
|
## 3. Configuration
|
|
54
54
|
|
|
55
|
-
`mason.config.
|
|
55
|
+
`mason.config.yaml`, found by walking up from the working directory, or the
|
|
56
56
|
file `--config` names. Relative paths in the file resolve against the file;
|
|
57
57
|
relative paths in a flag resolve against the working directory. Flags override
|
|
58
58
|
the file. `--manager-option key=value` merges per key, so overriding one option
|
|
59
59
|
does not drop the others; a repeated key becomes an array.
|
|
60
60
|
|
|
61
|
-
Host validates only its own keys
|
|
61
|
+
Host validates only its own keys, against a closed list: an unknown key is a
|
|
62
|
+
refusal, not something ignored. `managerOptions` is copied through untouched:
|
|
62
63
|
a tracker's fields are that package's business, and its errors are that
|
|
63
64
|
package's words.
|
|
64
65
|
|
|
66
|
+
`observability` is the one key that changes nothing about how work is done, only
|
|
67
|
+
what is written down about it. It holds `streams` — `enabled`, `dir`, `keep` —
|
|
68
|
+
and `enabled` is declared rather than defaulted, for the same reason an
|
|
69
|
+
Authority's is: what a stream holds is the Project's own material in the clear.
|
|
70
|
+
See § 8.
|
|
71
|
+
|
|
65
72
|
## 4. Loading a manager
|
|
66
73
|
|
|
67
74
|
`manager` is a package name or a path. Resolution imports the bare specifier
|
|
@@ -95,7 +102,7 @@ not losing an Event.
|
|
|
95
102
|
| `invalid` (new, or the intention changed) | `recordInvalid`, emit `invalid` |
|
|
96
103
|
| `invalid` (same fingerprint as recorded) | leave it; the tracker was told, and telling it is what delivered it again |
|
|
97
104
|
| `upsert` (new/invalid) | `admit`, emit `accepted`, then `runProject` when the Project is free; a Project frozen by an escalation queues the Feature (journal `queued`, one `progress` Event) and the sweep starts it once the Project is free. Post-run Events (`planned` / `done` / `escalated`) are reported on the Feature that was driven, not on the delivered key. `progress` (once per refusal) when the Authority sent the Submission back and a repair is on its way |
|
|
98
|
-
| `upsert` (in-flight / terminal) | leave it; do not restart. In-flight is `planning`, `running`, `escalated`, `integrating`, `submitted`; terminal is `merging`, `done`, `cancelled`. An echo of a Host report (Submitted, a progress comment) is this row: do not admit it
|
|
105
|
+
| `upsert` (in-flight / terminal) | leave it; do not restart. In-flight is `planning`, `running`, `escalated`, `integrating`, `submitted`; terminal is `merging`, `done`, `cancelled`. An echo of a Host report (Submitted, a progress comment) is this row: do not admit it |
|
|
99
106
|
| `upsert` (`received`) | same drive as a new upsert (no second `accepted`) |
|
|
100
107
|
| `upsert` + `signalsReady` while `escalated` | same as `ready` — a poll snapshot has no `labeled` edge |
|
|
101
108
|
| `ready` | `resumeReady`, emit `resumed`, `runProject`, then the same post-run Events |
|
|
@@ -140,6 +147,13 @@ Transformer progress, admitted, reported, queued, idle, a heartbeat while
|
|
|
140
147
|
the ledger is still right. `mason run` still writes a human Trace on stdout.
|
|
141
148
|
The journal is how another process attaches.
|
|
142
149
|
|
|
150
|
+
An offer the work could not get past is journaled `submit-refused`, with the
|
|
151
|
+
Feature's `key`, `by` (`publisher` when the work could not be placed,
|
|
152
|
+
`authority` when the Authority would not open a Submission) and the refuser's
|
|
153
|
+
own `reason`. The same reason becomes the escalation's Trace; the line is so
|
|
154
|
+
`mason log --problems` and a watcher see why a run stopped, not only that it
|
|
155
|
+
did.
|
|
156
|
+
|
|
143
157
|
After listen, if the manager declares `probe` and the listen reached the source
|
|
144
158
|
(`completed`, `listened` — not `source-lost` / `interrupted` / `invalid-invocation`),
|
|
145
159
|
Host asks `probe` of every Feature abandon is still legal for (`received`,
|
|
@@ -157,7 +171,7 @@ and left; the next sweep that finds the Project free claims it. The same set
|
|
|
157
171
|
copy: starting a queued Feature on a copy that was not fast-forwarded this
|
|
158
172
|
tick would build on a version that no longer exists.
|
|
159
173
|
|
|
160
|
-
## 8. init, setup, doctor, watch, status and cancel
|
|
174
|
+
## 8. init, setup, doctor, watch, status, log and cancel
|
|
161
175
|
|
|
162
176
|
`init` writes a config that already runs: the Planner is the bootstrap one from
|
|
163
177
|
`@bluewombat/slots/planners/`, the Builder is a stub that says what to replace
|
|
@@ -172,6 +186,10 @@ other — `workspace-changed` says an Attempt that changed nothing did nothing,
|
|
|
172
186
|
which is true of a Subtask and false of an assembly whose correct outcome is that
|
|
173
187
|
nothing was left to do. The assembly produces nothing unless something refused it
|
|
174
188
|
first: it is a judgement, and a refusal is `assembly.fix`, not a second first-pass.
|
|
189
|
+
Two things may judge it: the Gate sequence (`assembly.gates`, and an Authority's
|
|
190
|
+
own checks on what was published) and, optionally, `assembly.validate` — a local,
|
|
191
|
+
read-only pass that runs before either. Both send a refusal to the same `fix`
|
|
192
|
+
and spend the same `maxRefusals` budget.
|
|
175
193
|
|
|
176
194
|
Every child of a Task carries its own ceiling and no other. Every `cmd` names
|
|
177
195
|
its own `timeoutMs`, and none is inherited from a neighbour — nothing else
|
|
@@ -239,13 +257,67 @@ whether the manager loads, and then the manager's own findings. It parses
|
|
|
239
257
|
without demanding that paths exist, so one missing directory does not hide
|
|
240
258
|
every other check, and it never uses the network.
|
|
241
259
|
|
|
260
|
+
A run names itself. `openHost` mints a `run_id`, stamps it on every journal
|
|
261
|
+
line it writes, and opens the film with `host-started` — pid, Host's version,
|
|
262
|
+
the manager, the ledger root — and closes it with `host-stopped` before the lock
|
|
263
|
+
is released. A journal holds every run that ever wrote to that ledger, and
|
|
264
|
+
without these a reader cannot tell one process's film from the next, nor a run
|
|
265
|
+
that ended from one whose process was killed: the missing `host-stopped` is how
|
|
266
|
+
the second is said. Every line about a Task also carries the Feature it serves,
|
|
267
|
+
as `key`; a line that names a Task and no Feature is a line nothing can join.
|
|
268
|
+
|
|
269
|
+
`observability.streams` films what every child says, as it says it: the
|
|
270
|
+
producers, the Gates, the Planner. One file per child under
|
|
271
|
+
`<dir>/<feature>/<task>-attempt-<n>[-gate-<id>]-<stamp>.ndjson`, one JSON object
|
|
272
|
+
per chunk with its own stamp and which stream it came from, filed under the same
|
|
273
|
+
directory name a transcript uses. Each file is named in the journal by a
|
|
274
|
+
`stream-opened` line, so nothing has to rebuild the path. `dir` resolves against
|
|
275
|
+
the config directory and defaults to `<home>/streams`; `keep` chooses `stdout`,
|
|
276
|
+
`stderr`, or both. `--streams-dir DIR` is the same switch for one run, and there
|
|
277
|
+
is no bare flag: what a stream holds is the Project's own material in the clear,
|
|
278
|
+
and saying where it lands is part of asking for it. Off unless declared.
|
|
279
|
+
|
|
280
|
+
Writing it is asynchronous and may be lost. The ledger is truth, the journal is
|
|
281
|
+
the film and is written synchronously so it lands before the next phase, and
|
|
282
|
+
this is the noise underneath — an agent's stream is large enough that putting it
|
|
283
|
+
on a synchronous path would make visibility able to take a run down. A child
|
|
284
|
+
killed for writing past its output bound is filmed up to the kill: the bound
|
|
285
|
+
protects Host's memory, and that child is the one worth having a film of.
|
|
286
|
+
|
|
287
|
+
A film says what it held as it closes — `stream-closed` with the bytes, the
|
|
288
|
+
chunks and the milliseconds — and a Feature that reaches `done` or `cancelled`
|
|
289
|
+
has its films removed, which the journal records as `streams-discarded` with the
|
|
290
|
+
count and the size. An escalation keeps everything: that is the outcome where
|
|
291
|
+
somebody has to go and look. Nothing prunes transcripts.
|
|
292
|
+
|
|
293
|
+
A pass that listened to nothing and drove nothing is not written as it happens.
|
|
294
|
+
Such passes are held and said as a single `idle` line carrying `passes`, at most
|
|
295
|
+
once a minute, so a `watch` still shows the loop turning without a line every
|
|
296
|
+
poll. A `listen` that did not complete is never held and never hidden.
|
|
297
|
+
|
|
242
298
|
`watch` and `status` are the operator live view. They open the ledger the same
|
|
243
299
|
way `run` does (`openFilesystemPersist` then `openWorkLedger`) and they do not
|
|
244
300
|
open a manager, Conductor, or Host. `status` prints a snapshot of every known
|
|
245
301
|
Feature and exits. `watch` prints that snapshot, then follows new journal lines
|
|
246
302
|
until SIGINT (exit 0). A missing journal is not an error: the snapshot still
|
|
247
303
|
stands. `--json` prints the snapshot as JSON. Ctrl-C on watch leaves the worker
|
|
248
|
-
running. The file can grow without rotation.
|
|
304
|
+
running. The file can grow without rotation. A followed line that records a
|
|
305
|
+
stop includes the child's last words (`detail`, `reason`, a non-zero exit, a
|
|
306
|
+
Gate report that did not pass). `run` prints that same note under the phase
|
|
307
|
+
label.
|
|
308
|
+
|
|
309
|
+
`log` reads that same journal and exits. It does not follow, and it does not
|
|
310
|
+
open a manager or Host. Quiet lines (`idle`, a listen that delivered nothing)
|
|
311
|
+
are hidden. `--all` keeps them. `--problems` keeps only lines that explain a
|
|
312
|
+
stop. `--tail N` keeps the last N of the text film (0 means no limit). `--json`
|
|
313
|
+
prints every kept line, and when `--tail` is also passed and drops lines the
|
|
314
|
+
object names `kept` and `shown`. After the text film it tallies the distinct
|
|
315
|
+
problems. A `result` is counted with the exit code of the `planner-finished`
|
|
316
|
+
just before it. A run that then pauses, with no exit code, is tallied as
|
|
317
|
+
`interrupted`, apart from a non-zero exit that left the same detail. When a
|
|
318
|
+
slot was given `--transcript-dir` it names the newest transcript files with
|
|
319
|
+
the agent exit and duration read from the start of each file. A missing
|
|
320
|
+
journal is not an error. Exit 2 when the config or `--tail` cannot be read.
|
|
249
321
|
|
|
250
322
|
`cancel <key>` abandons one Feature the same way a `cancel` delivery does. The
|
|
251
323
|
team still abandons in the FeatureManager; this is the hatch when the tracker
|
|
@@ -299,5 +371,10 @@ positional: `cancel github:owner/name#19`.
|
|
|
299
371
|
18. A Feature `submitted`, then the same upsert delivered again, then the
|
|
300
372
|
Authority refuses: Host skips the echo, records no `pending_fingerprint`,
|
|
301
373
|
and the next pass repairs. It does not escalate as a plan refusal.
|
|
374
|
+
19. `log` on a journal that recorded `unavailable` with a `detail` prints that
|
|
375
|
+
detail, hides `idle`, and `--problems` drops the phase labels that are not
|
|
376
|
+
themselves the failure. `--json` returns every kept line. A paused run
|
|
377
|
+
with no planner exit code is tallied apart from a non-zero exit. It does
|
|
378
|
+
not import `openHost`.
|
|
302
379
|
|
|
303
380
|
How to install, configure and run: [README.md](./README.md).
|
package/dist/cli.js
CHANGED
|
@@ -8,6 +8,7 @@ import { runCancel } from "./operator/cancel.js";
|
|
|
8
8
|
import { runDoctor } from "./operator/doctor.js";
|
|
9
9
|
import { runInit } from "./operator/init.js";
|
|
10
10
|
import { runLive } from "./operator/live.js";
|
|
11
|
+
import { runLog } from "./operator/log.js";
|
|
11
12
|
import { isInteractive, terminalAsk } from "./operator/prompt.js";
|
|
12
13
|
import { runSetup } from "./operator/setup.js";
|
|
13
14
|
const USAGE = `Usage: ${PRODUCT} <command>
|
|
@@ -15,6 +16,7 @@ const USAGE = `Usage: ${PRODUCT} <command>
|
|
|
15
16
|
run drain the FeatureManager, run Conductor, report
|
|
16
17
|
watch snapshot the ledger and follow the journal
|
|
17
18
|
status snapshot the ledger, then exit
|
|
19
|
+
log replay the journal, including why a phase stopped
|
|
18
20
|
cancel abandon a Feature by key (when the tracker cannot say it is gone)
|
|
19
21
|
init set this directory up — asks, writes, then runs setup
|
|
20
22
|
doctor check the config, the slots, and the manager
|
|
@@ -25,11 +27,13 @@ init flags: --manager PKG --manager-option KEY=VALUE --work-line-stable DIR
|
|
|
25
27
|
|
|
26
28
|
Shared flags: --config FILE --manager NAME --manager-option KEY=VALUE --home DIR
|
|
27
29
|
--work-line-stable DIR --work-line-branch NAME --workspace-root DIR --ledger DIR
|
|
30
|
+
--streams-dir DIR
|
|
28
31
|
--planner -- CMD --planner-timeout-ms N
|
|
29
32
|
--builder -- CMD --builder-timeout-ms N --builder-max-attempts N
|
|
30
33
|
--builder-repair -- CMD --builder-repair-timeout-ms N
|
|
31
34
|
--builder-gate ID -- CMD --builder-gate-timeout-ms N
|
|
32
35
|
--assembly-fix -- CMD --assembly-fix-timeout-ms N --assembly-max-attempts N
|
|
36
|
+
--assembly-validate -- CMD --assembly-validate-timeout-ms N
|
|
33
37
|
--assembly-gate ID -- CMD --assembly-gate-timeout-ms N
|
|
34
38
|
--timeout-ms N --poll-interval-ms N
|
|
35
39
|
|
|
@@ -37,9 +41,17 @@ A gate's --*-gate-timeout-ms comes before the --*-gate it bounds.
|
|
|
37
41
|
|
|
38
42
|
watch / status also take --json (snapshot as JSON).
|
|
39
43
|
|
|
44
|
+
log also takes --problems, --all, and --json (every kept line).
|
|
45
|
+
--tail N limits the text film (0 = no limit). With --json it names kept and shown when it drops lines.
|
|
46
|
+
|
|
40
47
|
Without --config, the nearest ${CONFIG_FILENAME} is used. --home is where Host
|
|
41
48
|
keeps its own files (default ${DEFAULT_HOME}): the ledger, the workspaces, its copy of
|
|
42
49
|
the work line.
|
|
50
|
+
|
|
51
|
+
--streams-dir films what every child says, as it says it, one file per child.
|
|
52
|
+
Naming the directory is what turns it on; the config key "observability.streams"
|
|
53
|
+
is the same switch for good. It is off by default: a stream is the Project's own
|
|
54
|
+
material — its code, its prompts — written down in the clear.
|
|
43
55
|
`;
|
|
44
56
|
function installSignalHandlers(state) {
|
|
45
57
|
const onSignal = () => {
|
|
@@ -85,6 +97,13 @@ async function main(argv) {
|
|
|
85
97
|
if (command === "run") {
|
|
86
98
|
return await run(rest);
|
|
87
99
|
}
|
|
100
|
+
if (command === "log") {
|
|
101
|
+
return await runLog({
|
|
102
|
+
cwd: process.cwd(),
|
|
103
|
+
argv: rest,
|
|
104
|
+
write: (line) => process.stdout.write(line),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
88
107
|
if (command === "watch" || command === "status") {
|
|
89
108
|
const interruptFlag = { interrupted: false };
|
|
90
109
|
const detachSignals = installSignalHandlers(interruptFlag);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,KAAK,GAAG,UAAU,OAAO
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,KAAK,GAAG,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAiCC,eAAe;+BAChB,YAAY;;;;;;;CAO1C,CAAC;AAEF,SAAS,qBAAqB,CAAC,KAA+B;IAC5D,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IAC3B,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAAc;IAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,aAAa,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAgB,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC;IACrE,MAAM,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC3D,IAAI,IAAsD,CAAC;IAC3D,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpF,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC;QACpB,aAAa,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,MAAM,MAAM,CAAC;YAClB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC;gBACnB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3C,aAAa;gBACb,MAAM,EAAE,OAAO,KAAK,OAAO;aAC5B,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,4EAA4E;QAC5E,6DAA6D;QAC7D,MAAM,MAAM,GACV,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;aACzD,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC3C,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,QAAQ,EAAE,KAAK,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC;gBACpB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3C,aAAa;aACd,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,MAAM,SAAS,CAAC;YACrB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC;gBACrB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3C,aAAa;aACd,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export declare const CONFIG_FILENAME = "mason.config.
|
|
1
|
+
export declare const CONFIG_FILENAME = "mason.config.yaml";
|
|
2
2
|
/**
|
|
3
|
-
* The nearest `mason.config.
|
|
3
|
+
* The nearest `mason.config.yaml`, walking up from `startDir`.
|
|
4
4
|
*
|
|
5
5
|
* Running from a subdirectory of the project is the common case, so the file is
|
|
6
6
|
* looked up the way a toolchain config is, not demanded on the command line.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { dirname, join, resolve } from "node:path";
|
|
3
3
|
import { PRODUCT } from "@bluewombat/manager-kit";
|
|
4
|
-
export const CONFIG_FILENAME = `${PRODUCT}.config.
|
|
4
|
+
export const CONFIG_FILENAME = `${PRODUCT}.config.yaml`;
|
|
5
5
|
/**
|
|
6
|
-
* The nearest `mason.config.
|
|
6
|
+
* The nearest `mason.config.yaml`, walking up from `startDir`.
|
|
7
7
|
*
|
|
8
8
|
* Running from a subdirectory of the project is the common case, so the file is
|
|
9
9
|
* looked up the way a toolchain config is, not demanded on the command line.
|
|
@@ -7,7 +7,7 @@ export type LoadedConfig = {
|
|
|
7
7
|
reason: string;
|
|
8
8
|
};
|
|
9
9
|
/**
|
|
10
|
-
* Read one
|
|
10
|
+
* Read one YAML document and resolve relative paths against the file's directory.
|
|
11
11
|
*/
|
|
12
12
|
export declare function loadConfig(path: string): LoadedConfig;
|
|
13
13
|
//# sourceMappingURL=load-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,cAAc,EAIf,MAAM,YAAY,CAAC;AA8BpB,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,CAmKrD"}
|