@orkestrel/scaffold 0.0.98 → 0.0.100

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 (49) hide show
  1. package/dist/agents/skills/orkestrel-scout/scripts/map.js +14 -3
  2. package/dist/bin/main.js +74 -19
  3. package/dist/bin/main.js.map +1 -1
  4. package/dist/host/agents/orchestration.md +43 -40
  5. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +3 -3
  6. package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +1 -1
  7. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +1 -1
  8. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +1 -1
  9. package/dist/host/agents/skills/orkestrel-scout/SKILL.md +4 -4
  10. package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +14 -3
  11. package/dist/host/agents/transports/claude-cli.md +2 -2
  12. package/dist/host/agents/transports/codex.md +4 -4
  13. package/dist/host/agents/transports/cursor.md +1 -1
  14. package/dist/host/claude/AGENTS.md +2 -2
  15. package/dist/host/claude/agents/grok.md +1 -1
  16. package/dist/host/claude/agents/scout.md +4 -2
  17. package/dist/host/claude/rules/documentation.md +3 -3
  18. package/dist/host/claude/rules/styles.md +3 -0
  19. package/dist/host/codex/agents/builder.toml +1 -1
  20. package/dist/host/codex/agents/grok.toml +2 -2
  21. package/dist/host/codex/agents/opus.toml +19 -15
  22. package/dist/host/codex/agents/orkestrel.toml +1 -1
  23. package/dist/host/codex/agents/planner.toml +17 -12
  24. package/dist/host/codex/agents/reviewer.toml +22 -12
  25. package/dist/host/codex/agents/scout.toml +4 -2
  26. package/dist/host/codex/agents/verifier.toml +1 -1
  27. package/dist/host/codex/config.toml +6 -7
  28. package/dist/host/cursor/rules/orchestration.mdc +1 -1
  29. package/dist/host/guides/scaffold.md +26 -4
  30. package/dist/host/manifest.json +27 -27
  31. package/dist/host/scripts/browsers.sh +0 -0
  32. package/dist/host/scripts/codex.sh +0 -0
  33. package/dist/host/scripts/cursor.sh +0 -0
  34. package/dist/host/scripts/deps.sh +0 -0
  35. package/dist/host/scripts/npm.sh +0 -0
  36. package/dist/host/scripts/ollama.sh +0 -0
  37. package/dist/src/core/index.cjs +103 -4
  38. package/dist/src/core/index.cjs.map +1 -1
  39. package/dist/src/core/index.d.cts +40 -1
  40. package/dist/src/core/index.d.ts +40 -1
  41. package/dist/src/core/index.js +101 -5
  42. package/dist/src/core/index.js.map +1 -1
  43. package/dist/src/server/index.cjs +9 -3
  44. package/dist/src/server/index.cjs.map +1 -1
  45. package/dist/src/server/index.d.cts +7 -1
  46. package/dist/src/server/index.d.ts +7 -1
  47. package/dist/src/server/index.js +11 -5
  48. package/dist/src/server/index.js.map +1 -1
  49. package/package.json +1 -1
@@ -1,10 +1,12 @@
1
1
  name = "scout"
2
- description = "Read-only repository reconnaissance: locate files, symbols, seams, and structures before a brief is written; returns file:line pointers and a shape summary; never reads at depth, edits, or judges."
2
+ description = "Read-only exact bounded lookup of files, symbols, and seams; returns file:line pointers and a shape summary; refuses broad mapping, context absorption, and exploratory or fishing reads; never edits or judges."
3
3
  model = "gpt-6-luna"
4
4
  model_reasoning_effort = "low"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
7
- Locate. Do not read at depth, edit, or judge.
7
+ Perform an exact bounded lookup. Refuse broad mapping, context absorption, distillation, and
8
+ exploratory or fishing reads; refer the dispatch to .agents/orchestration.md § Routing.
9
+ Do not read at depth, edit, or judge.
8
10
 
9
11
  Take one bounded question: what to find and where to stop. Read the map the dispatch supplies (the
10
12
  Orchestrator runs the orkestrel-scout skill's map.ts and names its path); then search by name,
@@ -1,6 +1,6 @@
1
1
  name = "verifier"
2
2
  description = "Independent gate runner that runs the exact commands the dispatch names, scoped first, and reports exit-code truth with exact failure excerpts without fixing anything."
3
- model = "gpt-6-sol"
3
+ model = "gpt-6-luna"
4
4
  model_reasoning_effort = "medium"
5
5
  sandbox_mode = "workspace-write"
6
6
  developer_instructions = """
@@ -14,13 +14,12 @@ Codex loads AGENTS.md itself. Read each .claude/rules/*.md file whose paths fron
14
14
  files you touch; Codex does not load them for you. Follow a skill under .agents/skills when its
15
15
  trigger fires.
16
16
 
17
- Engine mapping for the roles in .agents/orchestration.md:
18
- - Astra: this session, analyst, astra.
19
- - Cursor Grok: the grok driver, read-only, through .agents/transports/cursor.md.
20
- - Claude Opus 5.5: the planner and reviewer drivers (read-only) and the opus driver (writes),
21
- through .agents/transports/claude-cli.md.
22
- - Luna: distiller, researcher, scout, checker.
23
- - Sol: drivers and fully specified units (builder, verifier, orkestrel).
17
+ Use the canonical Codex role mapping in .agents/orchestration.md:
18
+ - GPT-6 Astra: this session, analyst, astra, planner, reviewer, opus; execute natively.
19
+ - GPT-6.1 Sol: builder, orkestrel.
20
+ - GPT-6 Luna: grok, checker, verifier, scout, distiller, researcher.
21
+ - The grok driver reaches Cursor Grok 4.7 Extra High read-only through .agents/transports/cursor.md;
22
+ apply .agents/orchestration.md § Routing for the reading boundary.
24
23
 
25
24
  Hooks: .codex/hooks.json runs the orkestrel-dispatch sweep script (node
26
25
  .agents/skills/orkestrel-dispatch/scripts/sweep.ts --report) on SessionStart and git diff --check
@@ -16,7 +16,7 @@ alwaysApply: true
16
16
 
17
17
  - Reach Opus 5.5 through the `claude` MCP server (`claude mcp serve`) in `.cursor/mcp.json` for a short exchange, and through `claude -p` per `.agents/transports/claude-cli.md` for a unit.
18
18
  - Reach Astra through `codex exec` per `.agents/transports/codex.md`. `codex mcp-server` no longer exists.
19
- - Never select another provider's model from Cursor's own model list; Cursor is the Grok bench.
19
+ - Never select another harness family's model from Cursor's own model list; Cursor is the Grok 4.7 Extra High bench.
20
20
  - Approve the `claude` MCP server once per machine with `agent mcp enable claude`.
21
21
 
22
22
  ## Rules and skills
@@ -185,7 +185,8 @@ Exported from `@orkestrel/scaffold`, and reachable from
185
185
  | `SERVICE_TEST_INCLUDE` | const | Names the include the live-service project covers, which is a directory rather than one proof. |
186
186
  | `SHEET_ENTRY_NAME` | const | Names the build entry beside each stylesheet marker. |
187
187
  | `SHOWCASE_CONFIG_PATH` | const | Names the Vite wrapper whose presence makes a workspace `showcase`. |
188
- | `SHOWCASE_DEV_DEPENDENCIES` | const | Names the development dependency used only by the optional single-file showcase build. |
188
+ | `SHOWCASE_DEV_DEPENDENCIES` | const | Names the tested dependency pair selected by the optional single-file showcase build. |
189
+ | `SHOWCASE_OVERRIDES` | const | Names the scoped npm override required by the tested showcase plugin. |
189
190
  | `SHOWCASE_PAGES_PATH` | const | Names the physical showcase output directory. |
190
191
  | `SKILLS_CONFIG_PATH` | const | Names the TypeScript wrapper whose presence makes a workspace `skills`. |
191
192
  | `SOURCE_BROWSER_DEV_DEPENDENCIES` | const | Lists the development dependencies a published browser `src` environment adds. |
@@ -295,6 +296,7 @@ Exported from `@orkestrel/scaffold`, and reachable from
295
296
  | `blueprintToHostArtifacts` | function | Compiles the vendored host artifacts a workspace plans. |
296
297
  | `blueprintToMachinery` | function | Derives the host-specific machinery a generated root Vite configuration carries. |
297
298
  | `blueprintToManifest` | function | Compiles a blueprint into its `package.json` content. |
299
+ | `blueprintToManifestOverrides` | function | Projects the scoped npm overrides required by a selected browser showcase. |
298
300
  | `blueprintToOrchestrationArtifacts` | function | Compiles the blueprint-dependent orchestration artifacts. |
299
301
  | `blueprintToQuestions` | function | Measures a blueprint against every law its own fields decide. |
300
302
  | `blueprintToRootTsconfig` | function | Compiles the root TypeScript configuration for a blueprint. |
@@ -313,6 +315,7 @@ Exported from `@orkestrel/scaffold`, and reachable from
313
315
  | `planToFindings` | function | Compares a plan against a target's current content. |
314
316
  | `planToHash` | function | Computes a plan's content identity. |
315
317
  | `replaceManifestRanges` | function | Replaces the runtime and development dependency ranges in package manifest text, and never a peer range. |
318
+ | `replaceManifestOverrides` | function | Replaces selected npm override leaves while preserving every byte outside the edited path. |
316
319
  | `replaceManifestScripts` | function | Replaces named script values in package manifest text. |
317
320
  | `replacePlanRanges` | function | Replaces dependency ranges in a plan's manifest and recomputes its identity. |
318
321
  | `srcToEntry` | function | Projects a published selection into the manifest's entry fields. |
@@ -1776,15 +1779,34 @@ lookup verdict records why the registry row could not enter a layer.
1776
1779
 
1777
1780
  ## Dependency floors
1778
1781
 
1779
- Every scaffold-owned runtime or development range is a floor: a caret over a whole
1782
+ Except for the selected showcase policy, every scaffold-owned runtime or development range is a floor: a caret over a whole
1780
1783
  `major.minor.patch` version. The triple is the newest release the registry served when that floor
1781
1784
  was last raised, so a workspace generated with no network still receives the latest floor scaffold
1782
1785
  knew rather than a bare `major.0.0`. A `Blueprint.peers` row is written during creation into a
1783
1786
  vacant target. After creation, peer declarations and `peerDependenciesMeta` are caller-owned:
1784
1787
  `audit`, `repair`, `catalog`, and `overwrite` do not invent, rewrite, insert, or remove them. Caller
1785
- extras also pass through unchanged. Extras follow `EXTRA_RANGE_PATTERN`; fleet peers follow
1788
+ extras pass through unchanged except for the selected showcase pair. Extras follow `EXTRA_RANGE_PATTERN`; fleet peers follow
1786
1789
  `ORKESTREL_RANGE_PATTERN`; foreign peers follow `FLOOR_RANGE_PATTERN`.
1787
1790
 
1791
+ A browser application with `showcase: true`, including its Vue face, selects exact
1792
+ `vite-plugin-singlefile: 2.3.3`, Vite `^8.3.4` from scaffold's manifest, and the npm override
1793
+ `"vite-plugin-singlefile@2.3.3": { "micromatch": "npm:picomatch@2.3.2" }`. This policy applies
1794
+ after extras. Online resolution excludes this pair from ordinary foreign-major updates; other
1795
+ dependencies retain their usual resolution. Repair preserves each package's runtime or development
1796
+ section. Audit reports pin drift and override-only drift. Overwrite lands the pair and override in
1797
+ its offline half, including missing planned dependencies, before the catalog read.
1798
+
1799
+ `blueprintToManifestOverrides(blueprint: Blueprint): Readonly<Record<string, Readonly<Record<string, string>>>>`
1800
+ projects this metadata for a selected showcase and returns an empty map otherwise.
1801
+ `replaceManifestOverrides(manifest: string, overrides: Readonly<Record<string, Readonly<Record<string, string>>>>): string | undefined`
1802
+ inserts missing ancestors or leaves and replaces stale string leaves without changing unrelated
1803
+ bytes. Aligned text is returned unchanged. Invalid JSON, duplicate selected keys, malformed
1804
+ ancestors, and non-string owned leaves return `undefined`; repair and overwrite refuse these
1805
+ structures before writing configuration. `ManifestRegionSet.overrides` carries the same optional
1806
+ map into `Materializer.declare`, independently of the artifact replacements in `Blueprint.overrides`.
1807
+ Like other manifest-region writes, repair and overwrite apply this policy with any `--groups`
1808
+ selection. `replaceManifestRanges` continues to ignore npm overrides.
1809
+
1788
1810
  The distribution project packs a caller-owned peer beside a co-peer witness that requires an exact
1789
1811
  version. The real npm resolver accepts the preserved range. Its narrowed-range control reports
1790
1812
  `ERESOLVE`.
@@ -1800,7 +1822,7 @@ row entering or leaving the manifest moves a test rather than passing unnoticed.
1800
1822
  of `STYLES_DEV_DEPENDENCIES`, is a seed as well: it carries the `^1.105.1` range the
1801
1823
  `@orkestrel/veneer` checkout declared on 2026-09-30, and that test names it in the seeded set.
1802
1824
 
1803
- A newer major is never crossed for you. `audit` reports one as a non-blocking `dependencies`
1825
+ Outside the selected showcase pair, a newer major is never crossed for you. `audit` reports one as a non-blocking `dependencies`
1804
1826
  question, and a person decides whether the generated toolchain supports it. Inside the declared
1805
1827
  major the verbs raise the floor themselves, which is what makes the caret's own width beside the
1806
1828
  point: `^0.64.0` admits no `0.65.0`, and `repair` rewrites the range to `^0.65.0` rather than
@@ -16,7 +16,7 @@
16
16
  "storage": "agents/orchestration.md",
17
17
  "destination": ".agents/orchestration.md",
18
18
  "executable": false,
19
- "digest": "a2bdb3a85e41d8f2761f646da0f09f2a8dce8f48aadd1d68a1fc53e06dd57ec4"
19
+ "digest": "8e4da9963c7e33a3fc58f6bf5c70d98aacf9a0cb451da8e1a0868034345ed04c"
20
20
  },
21
21
  {
22
22
  "storage": "agents/skills/enterprise-bootstrap/SKILL.md",
@@ -136,7 +136,7 @@
136
136
  "storage": "agents/skills/orkestrel-debrief/references/instruction-audit.md",
137
137
  "destination": ".agents/skills/orkestrel-debrief/references/instruction-audit.md",
138
138
  "executable": false,
139
- "digest": "594e06e58d17e08206e1cac7a08469903e4b9a7575aaba38607c572d08955d5a"
139
+ "digest": "c7002c36743cdb4f1edc8ca75d9686607a6713c5c733a98c41d082041ab5779b"
140
140
  },
141
141
  {
142
142
  "storage": "agents/skills/orkestrel-debrief/references/retention.md",
@@ -160,7 +160,7 @@
160
160
  "storage": "agents/skills/orkestrel-dispatch/references/bench.md",
161
161
  "destination": ".agents/skills/orkestrel-dispatch/references/bench.md",
162
162
  "executable": false,
163
- "digest": "63481819027b239adf3ce1bcbd879c440e7ee12c3d56ee10a1c439d4a1f58ce8"
163
+ "digest": "cad78c5ac41116d86740306f905582a322a26e279da7b733d9b95a80c16cabeb"
164
164
  },
165
165
  {
166
166
  "storage": "agents/skills/orkestrel-dispatch/references/launch.md",
@@ -220,7 +220,7 @@
220
220
  "storage": "agents/skills/orkestrel-falsify/SKILL.md",
221
221
  "destination": ".agents/skills/orkestrel-falsify/SKILL.md",
222
222
  "executable": false,
223
- "digest": "257ac6f56380decb55cb0ab7f2c2285f34474ba1a4b2944609c04218f4c9d013"
223
+ "digest": "d7d60fb440c3a66f8c913a4ed4f1c527f53ee4e5e8e5151b1c403677baa61c70"
224
224
  },
225
225
  {
226
226
  "storage": "agents/skills/orkestrel-falsify/agents/openai.yaml",
@@ -238,7 +238,7 @@
238
238
  "storage": "agents/skills/orkestrel-falsify/references/reconcile.md",
239
239
  "destination": ".agents/skills/orkestrel-falsify/references/reconcile.md",
240
240
  "executable": false,
241
- "digest": "53a48ef8c9913bfcd965b1de2234ebe4b7f71e6e7a6e81fdbb55dca4ac744d87"
241
+ "digest": "4b7de68d05a28d50380cfbccdda27abbe230df249ea9d7f49ca875f41ea9ba35"
242
242
  },
243
243
  {
244
244
  "storage": "agents/skills/orkestrel-harden/SKILL.md",
@@ -406,7 +406,7 @@
406
406
  "storage": "agents/skills/orkestrel-scout/SKILL.md",
407
407
  "destination": ".agents/skills/orkestrel-scout/SKILL.md",
408
408
  "executable": false,
409
- "digest": "e42e0b06a0cc647b8f13f7bf033ed6b2800e13e61298e9a0d2f2d22688e5011a"
409
+ "digest": "17854ecdcb08c097b4d1e741764d535da8707267f560de16485fb758ee851302"
410
410
  },
411
411
  {
412
412
  "storage": "agents/skills/orkestrel-scout/agents/openai.yaml",
@@ -418,7 +418,7 @@
418
418
  "storage": "agents/skills/orkestrel-scout/scripts/map.ts",
419
419
  "destination": ".agents/skills/orkestrel-scout/scripts/map.ts",
420
420
  "executable": false,
421
- "digest": "a9572e59598a9db3a6725861475e84459c620affa584933eb6cc59b2f8f4bbe3"
421
+ "digest": "45185a31d410513654547166e3d38f3da75c64d55c964b9eff95c39531451f0d"
422
422
  },
423
423
  {
424
424
  "storage": "agents/templates/brief.md",
@@ -430,25 +430,25 @@
430
430
  "storage": "agents/transports/claude-cli.md",
431
431
  "destination": ".agents/transports/claude-cli.md",
432
432
  "executable": false,
433
- "digest": "d3d1243353ab48bce96bf9199997e494f7314d28cf8217ab79b6631936891ba3"
433
+ "digest": "2f5edf8c3395b29670d60e01aaf43eacd4f73c0a2b745f1e6f24da98f829af0a"
434
434
  },
435
435
  {
436
436
  "storage": "agents/transports/codex.md",
437
437
  "destination": ".agents/transports/codex.md",
438
438
  "executable": false,
439
- "digest": "d3c725c68b9260112fd15b3e724c581c223b6ddc80cb1436d3727a860749bce8"
439
+ "digest": "aa6c00f677ca4c1c40a402770aa21ec739ed7266e15f5d0e6cb8a8ca9e914e80"
440
440
  },
441
441
  {
442
442
  "storage": "agents/transports/cursor.md",
443
443
  "destination": ".agents/transports/cursor.md",
444
444
  "executable": false,
445
- "digest": "c87663ca4b7f4f51aa9facab0dccdc8ee9dff673c9e15cadb722bdf7e89e5222"
445
+ "digest": "aac0d62e222e2b193fe08fb69efbe016a8cf3ddde29c4c493c84428c947c3167"
446
446
  },
447
447
  {
448
448
  "storage": "claude/AGENTS.md",
449
449
  "destination": ".claude/AGENTS.md",
450
450
  "executable": false,
451
- "digest": "5c5aa380ad393c1b222d08adc3c465b4dc3ec3cdc55f4847c57de0fd323e815e"
451
+ "digest": "ab0a30f3dcf2b470ec2d85544b128587841a610217aa058aab09c10947915a98"
452
452
  },
453
453
  {
454
454
  "storage": "claude/agents/analyst.md",
@@ -484,7 +484,7 @@
484
484
  "storage": "claude/agents/grok.md",
485
485
  "destination": ".claude/agents/grok.md",
486
486
  "executable": false,
487
- "digest": "2ebe0e4621c92abdd88d90d4ec5745f4db90cf61d796cf666dc91951e78138a9"
487
+ "digest": "6f6a46a001f7cf32ecaa2395b2cad58bf1d9cee211f6da197e7fc593a9982df2"
488
488
  },
489
489
  {
490
490
  "storage": "claude/agents/opus.md",
@@ -520,7 +520,7 @@
520
520
  "storage": "claude/agents/scout.md",
521
521
  "destination": ".claude/agents/scout.md",
522
522
  "executable": false,
523
- "digest": "9a0d995068a8c0706b768677de09da77a2e5155cdebd8efd482837596e1a82e5"
523
+ "digest": "eb95a12c4f03a66a5214d3a558414967062cb1fadd78082c8f19f65c6af18f5e"
524
524
  },
525
525
  {
526
526
  "storage": "claude/agents/verifier.md",
@@ -550,7 +550,7 @@
550
550
  "storage": "claude/rules/documentation.md",
551
551
  "destination": ".claude/rules/documentation.md",
552
552
  "executable": false,
553
- "digest": "51571aca137dc8ca10e5820c29c6607b289146c2feeaa78956c0075ceaa68abb"
553
+ "digest": "d9d745b54e3d4388be8982193568ec5a196fc777f1586007e22e0ed0234adbb7"
554
554
  },
555
555
  {
556
556
  "storage": "claude/rules/names.md",
@@ -580,7 +580,7 @@
580
580
  "storage": "claude/rules/styles.md",
581
581
  "destination": ".claude/rules/styles.md",
582
582
  "executable": false,
583
- "digest": "9f59e22a0ca422e6e65b5adb0e7f3d92069a19dbd8b48b4c7ff5edfe4a39aab5"
583
+ "digest": "23197503f78e95abc6f367f4208318faa7b2d4e6f56dae7084cf5b947d9ce95f"
584
584
  },
585
585
  {
586
586
  "storage": "claude/rules/tests.md",
@@ -694,7 +694,7 @@
694
694
  "storage": "codex/agents/builder.toml",
695
695
  "destination": ".codex/agents/builder.toml",
696
696
  "executable": false,
697
- "digest": "dbf512595d6d4308003170c55252d4d9461daeeaca9f19a7e93026e1516d4be4"
697
+ "digest": "866d9aac668f1843b713a17da28877663e05141b6e754f27734de20d55a96ffd"
698
698
  },
699
699
  {
700
700
  "storage": "codex/agents/checker.toml",
@@ -712,25 +712,25 @@
712
712
  "storage": "codex/agents/grok.toml",
713
713
  "destination": ".codex/agents/grok.toml",
714
714
  "executable": false,
715
- "digest": "820e7067d21b5ef598c3ad13e4e9d34bbfb4b51a99eed4063b477ef813d96d55"
715
+ "digest": "cd860a838499a2da64cbd5d04296e282a647ad8a0d4b3f39f94239966b7c4d81"
716
716
  },
717
717
  {
718
718
  "storage": "codex/agents/opus.toml",
719
719
  "destination": ".codex/agents/opus.toml",
720
720
  "executable": false,
721
- "digest": "a4b8bf109dabb72988d533914c0c791124c39dd0955485cbea92af5b679e4e10"
721
+ "digest": "590137fde723c90e8384eb8883cc6a80a7cb0a128ee0338c7c25e590b080e2c4"
722
722
  },
723
723
  {
724
724
  "storage": "codex/agents/orkestrel.toml",
725
725
  "destination": ".codex/agents/orkestrel.toml",
726
726
  "executable": false,
727
- "digest": "e423df1e601a5f5520a82d499dd9fe43e5460fc562e456360a5bbf6c615e54d7"
727
+ "digest": "6f6902e5b6836861cadc07703fb389dc1ba7cebdc63f17835e648e356cb3be95"
728
728
  },
729
729
  {
730
730
  "storage": "codex/agents/planner.toml",
731
731
  "destination": ".codex/agents/planner.toml",
732
732
  "executable": false,
733
- "digest": "57f982acb141a1c5f7b636baac140942cd5b96a44db426f44cae2b832318ba2a"
733
+ "digest": "280c61e14d3e538b683748258fa16c2754b9c0a5f8dd5cd9466d3aa86ed2d647"
734
734
  },
735
735
  {
736
736
  "storage": "codex/agents/researcher.toml",
@@ -742,25 +742,25 @@
742
742
  "storage": "codex/agents/reviewer.toml",
743
743
  "destination": ".codex/agents/reviewer.toml",
744
744
  "executable": false,
745
- "digest": "b9732634676fef76de37d5d5d4327cd56c55177229782c1740a01beabffa0b2d"
745
+ "digest": "aea14e86192faea546d22d83dc79899dbe536af27f23ae5c9968829433a5450f"
746
746
  },
747
747
  {
748
748
  "storage": "codex/agents/scout.toml",
749
749
  "destination": ".codex/agents/scout.toml",
750
750
  "executable": false,
751
- "digest": "b79ed6467954fc01d83fb66d687cb2cd7e10ba2ee061c3a3b8946a5540222298"
751
+ "digest": "35e40dbb60dc3be7cd1aa73877ad3c80fc7e3bdae16a7c0be0ed17134acb7fc5"
752
752
  },
753
753
  {
754
754
  "storage": "codex/agents/verifier.toml",
755
755
  "destination": ".codex/agents/verifier.toml",
756
756
  "executable": false,
757
- "digest": "d2219ea560e960bb78f5180cb409e4d332382fdc2db3d646d5e8664698219f54"
757
+ "digest": "c143e57dbc715066e388c0682db90fc9c5908ece618a6f59b0005d0d5a3d69b4"
758
758
  },
759
759
  {
760
760
  "storage": "codex/config.toml",
761
761
  "destination": ".codex/config.toml",
762
762
  "executable": false,
763
- "digest": "753042a95fc6e441f96927d42029117cb481a814f7018562e284950e8f687e47"
763
+ "digest": "e22ac4e8cc9c6c41a9463dbaad3100a73f9fddc54fff1d9f8b8efd3357e34438"
764
764
  },
765
765
  {
766
766
  "storage": "configs/helpers.ts",
@@ -784,7 +784,7 @@
784
784
  "storage": "cursor/rules/orchestration.mdc",
785
785
  "destination": ".cursor/rules/orchestration.mdc",
786
786
  "executable": false,
787
- "digest": "cec5fa84af278f780922ac084b15187126f22c6fee78ac425c172b3b1326d41c"
787
+ "digest": "4fe403040ef6dffc9bc68b6b84770d6d5ac89a90e1ebb04c580286411c6ffa2e"
788
788
  },
789
789
  {
790
790
  "storage": "dotfiles/editorconfig",
@@ -1042,7 +1042,7 @@
1042
1042
  "storage": "guides/scaffold.md",
1043
1043
  "destination": "guides/scaffold.md",
1044
1044
  "executable": false,
1045
- "digest": "92391c5adfa7652ce6c4b34b4b78176f152d0c4398f28dc7da04797b64e2e973"
1045
+ "digest": "d0a34d3e2fce85649ad48e6ab59da0a0098bd9945bac33168412410d5f0b8ad4"
1046
1046
  },
1047
1047
  {
1048
1048
  "storage": "guides/sea.md",
@@ -2120,5 +2120,5 @@
2120
2120
  ]
2121
2121
  }
2122
2122
  ],
2123
- "digest": "ce09377c0924a0c47243e4558f2afd3784c71a9a69ff20a481dfc87331921452"
2123
+ "digest": "2eb5a827baa67b121d77f333051acf59bd11b1572c9f26f7364444b1b4d9a9f4"
2124
2124
  }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -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.98",
7
+ version: "0.0.100",
8
8
  description: "Scaffold workspaces with commands: new, audit, repair, catalog, and overwrite.",
9
9
  keywords: [
10
10
  "audit",
@@ -710,7 +710,7 @@ var APP_BROWSER_DEV_DEPENDENCIES = Object.freeze({
710
710
  "@orkestrel/html": package_default.devDependencies["@orkestrel/html"]
711
711
  });
712
712
  /**
713
- * Names the development dependency used only by the optional single-file showcase build.
713
+ * Names the tested dependency pair selected by the optional single-file showcase build.
714
714
  *
715
715
  * @example
716
716
  * ```ts
@@ -719,7 +719,12 @@ var APP_BROWSER_DEV_DEPENDENCIES = Object.freeze({
719
719
  * SHOWCASE_DEV_DEPENDENCIES['vite-plugin-singlefile'] // the showcase plugin range
720
720
  * ```
721
721
  */
722
- var SHOWCASE_DEV_DEPENDENCIES = Object.freeze({ "vite-plugin-singlefile": "^2.3.3" });
722
+ var SHOWCASE_DEV_DEPENDENCIES = Object.freeze({
723
+ "vite-plugin-singlefile": "2.3.3",
724
+ vite: package_default.devDependencies.vite
725
+ });
726
+ /** Names the scoped npm override required by the tested showcase plugin. */
727
+ var SHOWCASE_OVERRIDES = Object.freeze({ [`vite-plugin-singlefile@${SHOWCASE_DEV_DEPENDENCIES["vite-plugin-singlefile"]}`]: Object.freeze({ micromatch: "npm:picomatch@2.3.2" }) });
723
728
  /** Lists the development dependencies a private server application adds. */
724
729
  var APP_SERVER_DEV_DEPENDENCIES = Object.freeze({
725
730
  "@orkestrel/emitter": package_default.dependencies["@orkestrel/emitter"],
@@ -5765,16 +5770,106 @@ function blueprintToDevDependencies(blueprint) {
5765
5770
  ...blueprint.src.includes("browser") || blueprint.setup.includes("browser") || sheets ? SOURCE_BROWSER_DEV_DEPENDENCIES : {},
5766
5771
  ...blueprint.app.length > 0 ? APP_DEV_DEPENDENCIES : {},
5767
5772
  ...blueprint.app.includes("browser") ? APP_BROWSER_DEV_DEPENDENCIES : {},
5768
- ...blueprint.showcase && blueprint.app.includes("browser") ? SHOWCASE_DEV_DEPENDENCIES : {},
5769
5773
  ...blueprint.app.includes("server") ? APP_SERVER_DEV_DEPENDENCIES : {}
5770
5774
  };
5771
5775
  for (const framework of blueprintToMachinery(blueprint).frameworks) Object.assign(merged, FRAMEWORK_MATRIX[framework].dependencies);
5772
5776
  for (const extra of blueprint.extras) merged[extra.name] = extra.range;
5777
+ if (blueprint.showcase && blueprint.app.includes("browser")) Object.assign(merged, SHOWCASE_DEV_DEPENDENCIES);
5773
5778
  for (const peer of blueprint.peers) if (!Object.hasOwn(merged, peer.name)) merged[peer.name] = peer.range;
5774
5779
  const runtime = new Set(blueprint.dependencies.map((dependency) => dependency.name));
5775
5780
  return Object.fromEntries(Object.entries(merged).filter(([name]) => name !== own && !runtime.has(name)).sort(([left], [right]) => (0, _orkestrel_contract.compareValues)(left, right)));
5776
5781
  }
5777
5782
  /**
5783
+ * Projects the scoped npm overrides required by a selected browser showcase.
5784
+ *
5785
+ * @param blueprint - The workspace specification.
5786
+ * @returns The showcase override map, or an empty map for other workspaces.
5787
+ * @example
5788
+ * ```ts
5789
+ * import { blueprintToManifestOverrides, createBlueprint } from '@orkestrel/scaffold'
5790
+ * blueprintToManifestOverrides(createBlueprint('desk', { app: ['browser'], showcase: true }))
5791
+ * // { 'vite-plugin-singlefile@2.3.3': { micromatch: 'npm:picomatch@2.3.2' } }
5792
+ * ```
5793
+ */
5794
+ function blueprintToManifestOverrides(blueprint) {
5795
+ return blueprint.showcase && blueprint.app.includes("browser") ? SHOWCASE_OVERRIDES : {};
5796
+ }
5797
+ /**
5798
+ * Replaces selected npm override leaves while preserving every byte outside the edited path.
5799
+ *
5800
+ * @param manifest - The JSON package manifest text.
5801
+ * @param overrides - The scoped selectors and string leaves to write.
5802
+ * @returns The aligned text, or `undefined` for invalid JSON, duplicate selected keys, malformed ancestors, or non-string owned leaves.
5803
+ * @remarks
5804
+ * Absent ancestors and leaves are inserted. Aligned strings retain their original spelling.
5805
+ * Unrelated overrides remain caller-owned. Artifact replacements in `Blueprint.overrides` are independent.
5806
+ * @example
5807
+ * ```ts
5808
+ * import { replaceManifestOverrides } from '@orkestrel/scaffold'
5809
+ * replaceManifestOverrides('{}', { 'plugin@1.0.0': { child: '2.0.0' } })
5810
+ * // '{"overrides":{"plugin@1.0.0":{"child":"2.0.0"}}}'
5811
+ * ```
5812
+ */
5813
+ function replaceManifestOverrides(manifest, overrides) {
5814
+ if (!(0, _orkestrel_contract.isRecord)((0, _orkestrel_contract.parseJSON)(manifest))) return void 0;
5815
+ let compiled = manifest;
5816
+ for (const [selector, children] of Object.entries(overrides)) for (const [child, range] of Object.entries(children)) {
5817
+ const path = [
5818
+ "overrides",
5819
+ selector,
5820
+ child
5821
+ ];
5822
+ let open = compiled.indexOf("{");
5823
+ for (let level = 0; level < path.length; level += 1) {
5824
+ const key = path[level];
5825
+ let depth = 0;
5826
+ let close = -1;
5827
+ let start = -1;
5828
+ let end = -1;
5829
+ let count = 0;
5830
+ for (const token of compiled.slice(open).matchAll(/"(?:\\[\s\S]|[^"\\])*"|[{}[\]]/gu)) {
5831
+ const position = open + token.index;
5832
+ const text = token[0];
5833
+ if (text === "{" || text === "[") depth += 1;
5834
+ else if (text === "}" || text === "]") {
5835
+ depth -= 1;
5836
+ if (depth === 1 && start >= 0 && end < 0) end = position + 1;
5837
+ if (depth === 0) {
5838
+ close = position;
5839
+ break;
5840
+ }
5841
+ } else if (depth === 1) {
5842
+ if (position === start) end = position + text.length;
5843
+ let colon = position + text.length;
5844
+ while (/\s/u.test(compiled.charAt(colon))) colon += 1;
5845
+ if (compiled.charAt(colon) !== ":" || (0, _orkestrel_contract.parseJSON)(text) !== key) continue;
5846
+ count += 1;
5847
+ start = colon + 1;
5848
+ while (/\s/u.test(compiled.charAt(start))) start += 1;
5849
+ end = -1;
5850
+ }
5851
+ }
5852
+ if (close < 0 || count > 1) return void 0;
5853
+ if (count === 0) {
5854
+ let insertion = JSON.stringify(range);
5855
+ for (const name of path.slice(level).reverse()) insertion = `{${JSON.stringify(name)}:${insertion}}`;
5856
+ let tail = close - 1;
5857
+ while (tail > open && /\s/u.test(compiled.charAt(tail))) tail -= 1;
5858
+ compiled = compiled.slice(0, tail + 1) + (tail === open ? "" : ",") + insertion.slice(1, -1) + compiled.slice(tail + 1);
5859
+ break;
5860
+ }
5861
+ if (level < path.length - 1) {
5862
+ if (compiled.charAt(start) !== "{") return void 0;
5863
+ open = start;
5864
+ } else {
5865
+ if (compiled.charAt(start) !== "\"" || end < 0) return void 0;
5866
+ if ((0, _orkestrel_contract.parseJSON)(compiled.slice(start, end)) !== range) compiled = compiled.slice(0, start) + JSON.stringify(range) + compiled.slice(end);
5867
+ }
5868
+ }
5869
+ }
5870
+ return compiled;
5871
+ }
5872
+ /**
5778
5873
  * Projects a blueprint into the scripts its manifest declares.
5779
5874
  *
5780
5875
  * @param blueprint - The workspace specification.
@@ -6107,6 +6202,7 @@ function blueprintToManifest(blueprint) {
6107
6202
  scripts: blueprintToScripts(blueprint),
6108
6203
  dependencies,
6109
6204
  devDependencies: blueprintToDevDependencies(blueprint),
6205
+ ...Object.keys(blueprintToManifestOverrides(blueprint)).length > 0 ? { overrides: blueprintToManifestOverrides(blueprint) } : {},
6110
6206
  ...Object.keys(peerDependencies).length > 0 ? { peerDependencies } : {},
6111
6207
  ...Object.keys(peerDependenciesMeta).length > 0 ? { peerDependenciesMeta } : {},
6112
6208
  devEngines: WORKSPACE_DEV_ENGINES,
@@ -8778,6 +8874,7 @@ exports.SERVICE_TEST_INCLUDE = SERVICE_TEST_INCLUDE;
8778
8874
  exports.SHEET_ENTRY_NAME = SHEET_ENTRY_NAME;
8779
8875
  exports.SHOWCASE_CONFIG_PATH = SHOWCASE_CONFIG_PATH;
8780
8876
  exports.SHOWCASE_DEV_DEPENDENCIES = SHOWCASE_DEV_DEPENDENCIES;
8877
+ exports.SHOWCASE_OVERRIDES = SHOWCASE_OVERRIDES;
8781
8878
  exports.SHOWCASE_PAGES_PATH = SHOWCASE_PAGES_PATH;
8782
8879
  exports.SKILLS_CONFIG_PATH = SKILLS_CONFIG_PATH;
8783
8880
  exports.SOURCE_BROWSER_DEV_DEPENDENCIES = SOURCE_BROWSER_DEV_DEPENDENCIES;
@@ -8806,6 +8903,7 @@ exports.blueprintToGuideArtifacts = blueprintToGuideArtifacts;
8806
8903
  exports.blueprintToHostArtifacts = blueprintToHostArtifacts;
8807
8904
  exports.blueprintToMachinery = blueprintToMachinery;
8808
8905
  exports.blueprintToManifest = blueprintToManifest;
8906
+ exports.blueprintToManifestOverrides = blueprintToManifestOverrides;
8809
8907
  exports.blueprintToOptimizedDependencies = blueprintToOptimizedDependencies;
8810
8908
  exports.blueprintToOrchestrationArtifacts = blueprintToOrchestrationArtifacts;
8811
8909
  exports.blueprintToProjects = blueprintToProjects;
@@ -8882,6 +8980,7 @@ exports.planToFindings = planToFindings;
8882
8980
  exports.planToHash = planToHash;
8883
8981
  exports.planToSummary = planToSummary;
8884
8982
  exports.renderSkillPointer = renderSkillPointer;
8983
+ exports.replaceManifestOverrides = replaceManifestOverrides;
8885
8984
  exports.replaceManifestRanges = replaceManifestRanges;
8886
8985
  exports.replaceManifestScripts = replaceManifestScripts;
8887
8986
  exports.replacePlanRanges = replacePlanRanges;