@orkestrel/scaffold 0.0.52 → 0.0.53
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/dist/bin/main.js +7 -2
- package/dist/bin/main.js.map +1 -1
- package/dist/host/AGENTS.md +10 -0
- package/dist/host/claude/agents/orkestrel.md +9 -9
- package/dist/host/guides/scaffold.md +18 -5
- package/dist/host/manifest.json +4 -4
- package/dist/src/core/index.cjs +29 -11
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +6 -3
- package/dist/src/core/index.d.ts +6 -3
- package/dist/src/core/index.js +29 -11
- package/dist/src/core/index.js.map +1 -1
- package/package.json +4 -4
package/dist/host/AGENTS.md
CHANGED
|
@@ -148,6 +148,16 @@ Every file in the following table is a normative extension of this root. Read ev
|
|
|
148
148
|
|
|
149
149
|
This governs prose everywhere: chat replies, instruction files, guides, TSDoc, commit messages, and briefs.
|
|
150
150
|
|
|
151
|
+
Follow ISO 24495-1:2023 Plain Language in every response:
|
|
152
|
+
|
|
153
|
+
- Give the reader what they need for the task at hand, and nothing else.
|
|
154
|
+
- Put the key point first, and order the rest so the reader finds each part where they look for it.
|
|
155
|
+
- Word every sentence so the reader understands it on the first read.
|
|
156
|
+
- Shape the response so the reader can act on it without asking a follow-up question.
|
|
157
|
+
|
|
158
|
+
The rules in this section and `.claude/rules/writing.md` implement these principles. Apply the
|
|
159
|
+
principles directly to a case no rule covers.
|
|
160
|
+
|
|
151
161
|
- Write plainly. Say what you mean; mean what you say.
|
|
152
162
|
- Lead with the decision or the finding. Do not build up to it.
|
|
153
163
|
- One idea per sentence. Keep sentences short.
|
|
@@ -42,8 +42,8 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
42
42
|
| Package | Version | Layer | Runtime dependencies |
|
|
43
43
|
| ----------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
44
44
|
| `@orkestrel/abort` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
45
|
-
| `@orkestrel/agent` | `0.0.
|
|
46
|
-
| `@orkestrel/brief` | `0.0.
|
|
45
|
+
| `@orkestrel/agent` | `0.0.18` | L5 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/queue` `^0.0.10`, `@orkestrel/timeout` `^0.0.7`, `@orkestrel/tool` `^0.0.11`, `@orkestrel/workflow` `^0.0.14`, `@orkestrel/workspace` `^0.0.5` |
|
|
46
|
+
| `@orkestrel/brief` | `0.0.6` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/interpret` `^0.0.11`, `@orkestrel/reason` `^0.0.8` |
|
|
47
47
|
| `@orkestrel/browser` | `0.0.12` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/html` `^0.0.4`, `@orkestrel/websocket` `^0.0.9` |
|
|
48
48
|
| `@orkestrel/budget` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
49
49
|
| `@orkestrel/console` | `0.0.10` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8` |
|
|
@@ -53,17 +53,17 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
53
53
|
| `@orkestrel/emitter` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
54
54
|
| `@orkestrel/form` | `0.0.3` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8` |
|
|
55
55
|
| `@orkestrel/guide` | `0.0.13` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/markdown` `^0.0.10` |
|
|
56
|
-
| `@orkestrel/html` | `0.0.
|
|
56
|
+
| `@orkestrel/html` | `0.0.6` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
57
57
|
| `@orkestrel/indexeddb` | `0.0.9` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
58
58
|
| `@orkestrel/interpret` | `0.0.11` | L3 | `@orkestrel/reason` `^0.0.8`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/template` `^0.0.5` |
|
|
59
|
-
| `@orkestrel/markdown` | `0.0.
|
|
60
|
-
| `@orkestrel/mcp` | `0.0.
|
|
59
|
+
| `@orkestrel/markdown` | `0.0.11` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/html` `^0.0.6` |
|
|
60
|
+
| `@orkestrel/mcp` | `0.0.24` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/process` `^0.0.6`, `@orkestrel/sse` `^0.0.5`, `@orkestrel/tool` `^0.0.12`, `@orkestrel/websocket` `^0.0.10` |
|
|
61
61
|
| `@orkestrel/middleware` | `0.0.17` | L2 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/timeout` `^0.0.7` |
|
|
62
62
|
| `@orkestrel/msg` | `0.0.8` | L0 | |
|
|
63
63
|
| `@orkestrel/ndjson` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
64
|
-
| `@orkestrel/ollama` | `0.0.
|
|
64
|
+
| `@orkestrel/ollama` | `0.0.12` | L6 | `@orkestrel/agent` `^0.0.18`, `@orkestrel/budget` `^0.0.8`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/ndjson` `^0.0.8`, `@orkestrel/timeout` `^0.0.8`, `@orkestrel/tool` `^0.0.12` |
|
|
65
65
|
| `@orkestrel/pool` | `0.0.8` | L2 | `@orkestrel/emitter` `^0.0.7` |
|
|
66
|
-
| `@orkestrel/probe` | `0.0.
|
|
66
|
+
| `@orkestrel/probe` | `0.0.6` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/mcp` `^0.0.24`, `@orkestrel/queue` `^0.0.10`, `@orkestrel/timeout` `^0.0.8`, `@orkestrel/tool` `^0.0.12` |
|
|
67
67
|
| `@orkestrel/process` | `0.0.6` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7` |
|
|
68
68
|
| `@orkestrel/program` | `0.0.10` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/qualifier` `^0.0.11`, `@orkestrel/rater` `^0.0.11`, `@orkestrel/reason` `^0.0.7` |
|
|
69
69
|
| `@orkestrel/qualifier` | `0.0.11` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/reason` `^0.0.7` |
|
|
@@ -72,7 +72,7 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
72
72
|
| `@orkestrel/reason` | `0.0.8` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8` |
|
|
73
73
|
| `@orkestrel/relation` | `0.0.10` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.12`, `@orkestrel/emitter` `^0.0.8` |
|
|
74
74
|
| `@orkestrel/router` | `0.0.11` | L2 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7` |
|
|
75
|
-
| `@orkestrel/scaffold` | `0.0.
|
|
75
|
+
| `@orkestrel/scaffold` | `0.0.52` | L3 | `@orkestrel/console` `^0.0.10`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/markdown` `^0.0.10`, `@orkestrel/process` `^0.0.6`, `@orkestrel/template` `^0.0.5` |
|
|
76
76
|
| `@orkestrel/sea` | `0.0.11` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/process` `^0.0.6` |
|
|
77
77
|
| `@orkestrel/server` | `0.0.15` | L3 | `@orkestrel/abort` `^0.0.8`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/router` `^0.0.11`, `@orkestrel/timeout` `^0.0.8` |
|
|
78
78
|
| `@orkestrel/sqlite` | `0.0.9` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
@@ -84,7 +84,7 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
84
84
|
| `@orkestrel/test` | `0.0.11` | L0 | |
|
|
85
85
|
| `@orkestrel/timeout` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
86
86
|
| `@orkestrel/tool` | `0.0.12` | L1 | `@orkestrel/contract` `^0.0.13` |
|
|
87
|
-
| `@orkestrel/toolbox` | `0.0.
|
|
87
|
+
| `@orkestrel/toolbox` | `0.0.9` | L6 | `@orkestrel/agent` `^0.0.18`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/form` `^0.0.2`, `@orkestrel/relation` `^0.0.9`, `@orkestrel/server` `^0.0.14`, `@orkestrel/terminal` `^0.0.11`, `@orkestrel/tool` `^0.0.11`, `@orkestrel/workflow` `^0.0.14`, `@orkestrel/workspace` `^0.0.5` |
|
|
88
88
|
| `@orkestrel/websocket` | `0.0.10` | L2 | `@orkestrel/emitter` `^0.0.8` |
|
|
89
89
|
| `@orkestrel/worker` | `0.0.9` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/pool` `^0.0.8`, `@orkestrel/queue` `^0.0.10` |
|
|
90
90
|
| `@orkestrel/workflow` | `0.0.14` | L4 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/queue` `^0.0.10`, `@orkestrel/timeout` `^0.0.7` |
|
|
@@ -588,7 +588,10 @@ literal absent project, its advisory tells the developer to register the project
|
|
|
588
588
|
script. For a planned project absent from the gate chains, the advisory reads the manifest after a
|
|
589
589
|
writable script projection. The `scripts` question owns an absent direct `test:<project>` line. The
|
|
590
590
|
`projects` question names the direct script and the gate chain that must invoke it when the projected
|
|
591
|
-
region still leaves the project ungated.
|
|
591
|
+
region still leaves the project ungated. Its remedy reads the manifest on disk rather than the
|
|
592
|
+
projection, so it states what the developer's own file holds: a script the manifest declares leaves
|
|
593
|
+
the gate as the only repair, and a script only the projection supplies is named as missing beside
|
|
594
|
+
the gate. When `configs` is selected, `repair` and `overwrite` refuse
|
|
592
595
|
an unregistered or ungated project before writing. Their refusal names the `configs` group, the
|
|
593
596
|
manifest and planned `vite.config.ts` conflict, and the option to exclude `configs` from `--groups`.
|
|
594
597
|
A selection that excludes `configs` proceeds. An advisory alone does not make an aligned target
|
|
@@ -602,8 +605,18 @@ and `copy` gate chains stay maintainer-owned. A declared value is overwritten on
|
|
|
602
605
|
the value being written or is a recognized generated predecessor. The overwrite happens in place,
|
|
603
606
|
so every byte outside the replaced ranges survives. A target's descriptions, keywords, extra
|
|
604
607
|
scripts, and manifest key order survive byte-for-byte. A script the manifest does not declare is
|
|
605
|
-
appended after the last declared
|
|
606
|
-
|
|
608
|
+
appended after the last declared script of its own key family, copying that section's indentation:
|
|
609
|
+
`test:setup` follows the last declared `test:` key rather than the lifecycle scripts that close the
|
|
610
|
+
section. A name carrying no colon has no family, and a family the section declares no member of has
|
|
611
|
+
nothing to follow, so each of those is appended after the last declared script instead. `catalog`
|
|
612
|
+
writes no script region; it names the ranges alone.
|
|
613
|
+
|
|
614
|
+
The range region and the script region are not groups. `package.json` is birth-owned, so the
|
|
615
|
+
`manifest` group creates it when a workspace is first materialized and never rewrites it afterwards,
|
|
616
|
+
and `--groups` narrows the plan rather than the regions. `repair` and `overwrite` therefore
|
|
617
|
+
reconcile the declared ranges and write the script region on every run, whatever the selection
|
|
618
|
+
names. A run scoped to `manifest` for a script write takes the reconciled `@orkestrel/*`
|
|
619
|
+
ranges with it, and a run that excludes `manifest` still takes the ranges and the scripts.
|
|
607
620
|
|
|
608
621
|
A value matching neither is a script the workspace author wrote. The region writer retains that
|
|
609
622
|
value byte-for-byte and reports its name, declared value, and planned value. Each other planned
|
|
@@ -613,8 +626,8 @@ non-string value or a `scripts` field that is not an object still refuses the wh
|
|
|
613
626
|
script byte moving. `audit` reports absent and differing scripts separately in its non-blocking
|
|
614
627
|
`scripts` question, and the terminal audit in `repair` and `overwrite` keeps every retained
|
|
615
628
|
difference visible. Other selected writes still proceed. The `projects` question reports only a
|
|
616
|
-
direct script the
|
|
617
|
-
|
|
629
|
+
direct script the projected region declares and the maintainer-owned gate chain does not invoke, and
|
|
630
|
+
it names that script as declared or as missing according to the manifest on disk.
|
|
618
631
|
|
|
619
632
|
The same plan-reading verbs compare the tooling set the derived blueprint plans against
|
|
620
633
|
`dependencies` and `devDependencies` together. A missing planned package produces one non-blocking
|
package/dist/host/manifest.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"storage": "AGENTS.md",
|
|
5
5
|
"destination": "AGENTS.md",
|
|
6
6
|
"executable": false,
|
|
7
|
-
"digest": "
|
|
7
|
+
"digest": "5dbb143394991882d36f90a8aabd7e6b0874863b45dde4040760fc834e9d942e"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"storage": "CLAUDE.md",
|
|
@@ -310,7 +310,7 @@
|
|
|
310
310
|
"storage": "claude/agents/orkestrel.md",
|
|
311
311
|
"destination": ".claude/agents/orkestrel.md",
|
|
312
312
|
"executable": false,
|
|
313
|
-
"digest": "
|
|
313
|
+
"digest": "3d1d0b4ee196465d831178f5aa1c425325f39d4f9087654aac48b877f728af3d"
|
|
314
314
|
},
|
|
315
315
|
{
|
|
316
316
|
"storage": "claude/agents/planner.md",
|
|
@@ -646,7 +646,7 @@
|
|
|
646
646
|
"storage": "guides/scaffold.md",
|
|
647
647
|
"destination": "guides/scaffold.md",
|
|
648
648
|
"executable": false,
|
|
649
|
-
"digest": "
|
|
649
|
+
"digest": "0a69b1cf0194078be9a54c9c51d88029d7c7d93a41bce63001e038f588f175ce"
|
|
650
650
|
},
|
|
651
651
|
{
|
|
652
652
|
"storage": "scripts/codex.sh",
|
|
@@ -736,5 +736,5 @@
|
|
|
736
736
|
".codex/agents",
|
|
737
737
|
".cursor/rules"
|
|
738
738
|
],
|
|
739
|
-
"digest": "
|
|
739
|
+
"digest": "938ab0fd0dc511cf6d138259d14c58de31eaec665ce65ce2ac4ef62e5f31ae32"
|
|
740
740
|
}
|
package/dist/src/core/index.cjs
CHANGED
|
@@ -4,7 +4,7 @@ let _orkestrel_template = require("@orkestrel/template");
|
|
|
4
4
|
let _orkestrel_emitter = require("@orkestrel/emitter");
|
|
5
5
|
var package_default = {
|
|
6
6
|
name: "@orkestrel/scaffold",
|
|
7
|
-
version: "0.0.
|
|
7
|
+
version: "0.0.53",
|
|
8
8
|
description: "Scaffold workspaces with five commands: new, audit, repair, catalog, and overwrite.",
|
|
9
9
|
keywords: [
|
|
10
10
|
"audit",
|
|
@@ -92,15 +92,15 @@ var package_default = {
|
|
|
92
92
|
"@orkestrel/console": "^0.0.10",
|
|
93
93
|
"@orkestrel/contract": "^0.0.13",
|
|
94
94
|
"@orkestrel/emitter": "^0.0.8",
|
|
95
|
-
"@orkestrel/markdown": "^0.0.
|
|
95
|
+
"@orkestrel/markdown": "^0.0.11",
|
|
96
96
|
"@orkestrel/process": "^0.0.6",
|
|
97
97
|
"@orkestrel/template": "^0.0.5"
|
|
98
98
|
},
|
|
99
99
|
devDependencies: {
|
|
100
100
|
"@microsoft/api-extractor": "^7.59.0",
|
|
101
101
|
"@orkestrel/guide": "^0.0.13",
|
|
102
|
-
"@orkestrel/html": "^0.0.
|
|
103
|
-
"@orkestrel/probe": "^0.0.
|
|
102
|
+
"@orkestrel/html": "^0.0.6",
|
|
103
|
+
"@orkestrel/probe": "^0.0.6",
|
|
104
104
|
"@orkestrel/test": "^0.0.11",
|
|
105
105
|
"@types/node": "^26.2.0",
|
|
106
106
|
"@vitest/browser-playwright": "^4.1.11",
|
|
@@ -5445,9 +5445,12 @@ function replaceManifestRanges(manifest, pins) {
|
|
|
5445
5445
|
* other string is a chain the workspace author customized, so it stays
|
|
5446
5446
|
* byte-identical while the other named scripts are written independently. A
|
|
5447
5447
|
* named script the manifest does not declare is appended after the last
|
|
5448
|
-
* declared script, copying that section's indentation
|
|
5449
|
-
*
|
|
5450
|
-
*
|
|
5448
|
+
* declared script of its own key family, copying that section's indentation:
|
|
5449
|
+
* `test:setup` follows the last declared `test:` key. A name carrying no colon
|
|
5450
|
+
* has no family, and so does a family the section declares no member of, and
|
|
5451
|
+
* each of those is appended after the last declared script instead. A region
|
|
5452
|
+
* declaring nothing takes every named script as its first entries, indented
|
|
5453
|
+
* from the line its own opening brace sits on.
|
|
5451
5454
|
*
|
|
5452
5455
|
* @example
|
|
5453
5456
|
* ```ts
|
|
@@ -5541,6 +5544,7 @@ function replaceManifestScripts(manifest, scripts) {
|
|
|
5541
5544
|
if (start < 0 || end < 0) return void 0;
|
|
5542
5545
|
const edits = [];
|
|
5543
5546
|
const written = /* @__PURE__ */ new Set();
|
|
5547
|
+
const anchors = [];
|
|
5544
5548
|
let first = -1;
|
|
5545
5549
|
let nested = 0;
|
|
5546
5550
|
let scan = start;
|
|
@@ -5593,6 +5597,10 @@ function replaceManifestScripts(manifest, scripts) {
|
|
|
5593
5597
|
if (valueEnd >= end) return void 0;
|
|
5594
5598
|
scan = valueEnd + 1;
|
|
5595
5599
|
const key = (0, _orkestrel_contract.parseJSON)(manifest.slice(keyStart, keyEnd));
|
|
5600
|
+
if ((0, _orkestrel_contract.isString)(key)) anchors.push({
|
|
5601
|
+
name: key,
|
|
5602
|
+
end: valueEnd + 1
|
|
5603
|
+
});
|
|
5596
5604
|
const script = scripts.find((entry) => entry.name === key);
|
|
5597
5605
|
if (script === void 0) continue;
|
|
5598
5606
|
written.add(script.name);
|
|
@@ -5620,15 +5628,25 @@ function replaceManifestScripts(manifest, scripts) {
|
|
|
5620
5628
|
text: `${entries.join(",")}${closing}`
|
|
5621
5629
|
});
|
|
5622
5630
|
} else {
|
|
5623
|
-
let
|
|
5624
|
-
while (
|
|
5631
|
+
let tail = end - 1;
|
|
5632
|
+
while (tail > start && /\s/u.test(manifest.charAt(tail - 1))) tail -= 1;
|
|
5625
5633
|
const newline = manifest.lastIndexOf("\n", first);
|
|
5626
5634
|
const indent = newline < 0 ? "" : manifest.slice(newline + 1, first);
|
|
5627
5635
|
const separator = newline < 0 || /\S/u.test(indent) ? "" : `\n${indent}`;
|
|
5628
|
-
|
|
5636
|
+
const placed = /* @__PURE__ */ new Map();
|
|
5637
|
+
for (const script of missing) {
|
|
5638
|
+
const colon = script.name.indexOf(":");
|
|
5639
|
+
const family = colon < 0 ? void 0 : script.name.slice(0, colon + 1);
|
|
5640
|
+
const anchor = (family === void 0 ? void 0 : anchors.findLast((entry) => entry.name.startsWith(family)))?.end ?? tail;
|
|
5641
|
+
const text = `,${separator}${JSON.stringify(script.name)}: ${JSON.stringify(script.command)}`;
|
|
5642
|
+
const queued = placed.get(anchor);
|
|
5643
|
+
if (queued === void 0) placed.set(anchor, [text]);
|
|
5644
|
+
else queued.push(text);
|
|
5645
|
+
}
|
|
5646
|
+
for (const [anchor, queued] of placed) edits.push({
|
|
5629
5647
|
start: anchor,
|
|
5630
5648
|
end: anchor,
|
|
5631
|
-
text:
|
|
5649
|
+
text: queued.join("")
|
|
5632
5650
|
});
|
|
5633
5651
|
}
|
|
5634
5652
|
}
|