@orkestrel/scaffold 0.0.82 → 0.0.83
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/agents/skills/orkestrel-publish/scripts/wave.js +14 -3
- package/dist/bin/main.js +128 -0
- package/dist/bin/main.js.map +1 -1
- package/dist/host/agents/orchestration.md +1 -0
- package/dist/host/agents/skills/orkestrel-journey/SKILL.md +2 -1
- package/dist/host/agents/skills/orkestrel-journey/references/decide.md +7 -6
- package/dist/host/agents/skills/orkestrel-journey/references/recorded.md +77 -0
- package/dist/host/agents/skills/orkestrel-publish/references/wave.md +4 -0
- package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +22 -4
- package/dist/host/claude/agents/orkestrel.md +10 -10
- package/dist/host/claude/rules/quality.md +5 -0
- package/dist/host/guides/guide.md +4 -1
- package/dist/host/guides/scaffold.md +8 -1
- package/dist/host/manifest.json +16 -10
- package/dist/host/scripts/codex.sh +0 -0
- package/dist/host/scripts/cursor.sh +0 -0
- package/dist/host/scripts/deps.sh +0 -0
- package/dist/host/scripts/ollama.sh +0 -0
- package/dist/src/core/index.cjs +40 -17
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +17 -1
- package/dist/src/core/index.d.ts +17 -1
- package/dist/src/core/index.js +40 -18
- package/dist/src/core/index.js.map +1 -1
- package/package.json +7 -6
|
@@ -105,6 +105,7 @@ Every working file lives under the checkout's gitignored `tmp/`, in the director
|
|
|
105
105
|
| `tmp/probes/` | runtime probes the `probe` Vitest project collects and the `probe` MCP server arms |
|
|
106
106
|
| `tmp/type/` | the type stage's workspace mirror, owned by `@orkestrel/probe` |
|
|
107
107
|
| `tmp/captures/` | screenshots, resolved-style snapshots, and other capture portfolios |
|
|
108
|
+
| `tmp/browsers/` | the journeys a `browse` server saves, their runs and captures, and its profiles under `.profiles/` |
|
|
108
109
|
| `tmp/worktrees/` | worktrees the Orchestrator creates for a parallel writer |
|
|
109
110
|
|
|
110
111
|
## .orkestrel layout
|
|
@@ -14,7 +14,8 @@ description: Prove a browser application the way a person uses it — real keyst
|
|
|
14
14
|
3. [styles.md](references/styles.md) before asserting anything the browser resolved.
|
|
15
15
|
4. [statechart.md](references/statechart.md) before declaring a transition or mounting the harness.
|
|
16
16
|
5. [decide.md](references/decide.md) before routing a question to an instrument.
|
|
17
|
-
6.
|
|
17
|
+
6. [recorded.md](references/recorded.md) before judging a browser recording's run as evidence.
|
|
18
|
+
7. The `*/types.ts` of every environment the journeys drive, plus the application's root component,
|
|
18
19
|
route entry, and store contract.
|
|
19
20
|
|
|
20
21
|
Treat a retained readiness verdict as evidence to re-verify against the current tip, never as a plan
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
Route a question by what judges the claim, before spending a round on it. Report a question no
|
|
4
4
|
instrument here answers as open, and never answer it with the nearest instrument instead.
|
|
5
5
|
|
|
6
|
-
| The claim is judged by
|
|
7
|
-
|
|
|
8
|
-
| A compiler, a linter, or a Node runner
|
|
9
|
-
| A person's eye
|
|
10
|
-
| A person watching a widget move
|
|
11
|
-
| The browser's own resolved value
|
|
6
|
+
| The claim is judged by | Route it to |
|
|
7
|
+
| ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
8
|
+
| A compiler, a linter, or a Node runner | The `prove` tool, with its negative control |
|
|
9
|
+
| A person's eye | The run's written artifact, named by variant |
|
|
10
|
+
| A person watching a widget move | The harness run's frames and its artifact |
|
|
11
|
+
| The browser's own resolved value | The matrix family ([styles.md](styles.md)) |
|
|
12
|
+
| A flow a model drove through the browser toolset | A recorded journey replayed through `@orkestrel/browser`, judged by the run's steps ([recorded.md](recorded.md)), never by the transcript |
|
|
12
13
|
|
|
13
14
|
Never ask `prove` about pixels, and never ask a screenshot about types.
|
|
14
15
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Recorded browser journeys
|
|
2
|
+
|
|
3
|
+
Judge a journey a model recorded through `@orkestrel/browser` by the steps its replay ran, never by
|
|
4
|
+
the transcript of the session that recorded it. Translate those steps into the journey layer before
|
|
5
|
+
a run of them counts toward a family this skill declares.
|
|
6
|
+
|
|
7
|
+
## The vocabulary
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { waitForText } from '@orkestrel/test'
|
|
11
|
+
import {
|
|
12
|
+
clickAccessible,
|
|
13
|
+
fillAccessible,
|
|
14
|
+
pressKeys,
|
|
15
|
+
readPage,
|
|
16
|
+
readPerception,
|
|
17
|
+
} from '@orkestrel/test/browser'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## What a recording holds
|
|
21
|
+
|
|
22
|
+
- Read a recorded journey as one user intent kept as JSON: a `name`, a one-sentence `description`,
|
|
23
|
+
the `parameters` it declares, and `steps` that mirror the browser toolset's own tool calls.
|
|
24
|
+
- Take an acting step's target from its role and exact accessible name. Read its record-time
|
|
25
|
+
`reference` and its `css` selector only as evidence for a refused resolution; a replay reads
|
|
26
|
+
neither, and a translated step carries neither.
|
|
27
|
+
- Name each journey tool for its act: `record` starts a recording, `save` keeps it under its name,
|
|
28
|
+
`journeys` reads the listing, `edit` changes steps by id, `replay` runs, and `forget` discards the
|
|
29
|
+
journey with its runs.
|
|
30
|
+
- Find a `browse` server's files under `tmp/browsers/`: the journey at `NAME/journey.json`, each
|
|
31
|
+
run at `NAME/runs/ID/run.json` beside that run's step captures, and the server's browser profile
|
|
32
|
+
under `.profiles/`. `NAME` is the journey's name and `ID` is the run id the store minted.
|
|
33
|
+
- Register a `browse` server per `.claude/rules/quality.md` § Instruments.
|
|
34
|
+
|
|
35
|
+
## Translate a step
|
|
36
|
+
|
|
37
|
+
Translate each step through the following table. [layer.md](layer.md) owns each verb's contract.
|
|
38
|
+
|
|
39
|
+
| Recorded step | Journey layer |
|
|
40
|
+
| --------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
41
|
+
| `click` | `clickAccessible(role, name)` with the step's role and name |
|
|
42
|
+
| `type` | `fillAccessible(name, text)`, refused for a `combobox` or a `listbox` target |
|
|
43
|
+
| `press` | `pressKeys(keys)`, with the chord translated |
|
|
44
|
+
| `wait` | `waitForText(description, read, text)` |
|
|
45
|
+
| `navigate`, `switch`, `dialog`, a page tool, `unresolved` | Refused |
|
|
46
|
+
|
|
47
|
+
- Refuse a `type` step whose target is a `combobox` or a `listbox`. The toolset selected an option
|
|
48
|
+
there, and `fillAccessible` replaces a field's text.
|
|
49
|
+
- When a `type` step carries `submit`, follow the fill with `pressKeys('{Enter}')` on the same field.
|
|
50
|
+
- Translate a `press` chord into the provider's key syntax: hold each modifier with `{Name>}`, send
|
|
51
|
+
the terminal key, and release the modifiers with `{/Name}` in reverse order. `Enter` becomes
|
|
52
|
+
`{Enter}`, and `Control+Shift+P` becomes `{Control>}{Shift>}P{/Shift}{/Control}`.
|
|
53
|
+
- Scope the reader a `wait` step passes to `waitForText` per [layer.md](layer.md) § The waits:
|
|
54
|
+
`readPerception` over the region the sentence lands in, and `readPage` only where the claim is
|
|
55
|
+
about the whole page.
|
|
56
|
+
- Refuse `navigate`: reach the page through the visible link or control that navigates, per
|
|
57
|
+
[layer.md](layer.md) § The named bans. Refuse `switch`, `dialog`, a page tool, and an `unresolved`
|
|
58
|
+
step, and report each as a step the layer has no verb for.
|
|
59
|
+
|
|
60
|
+
## Judge a run
|
|
61
|
+
|
|
62
|
+
- Feed a run's `steps` and `output` into the variant artifact ([decide.md](decide.md) § The
|
|
63
|
+
rendered artifact) as automation evidence, labelled with the journey name and the run id.
|
|
64
|
+
- Discharge none of this skill's laws with a run until the workspace holds a trusted-input adapter
|
|
65
|
+
that drives the steps through the published verbs. A family stays open until a journey test
|
|
66
|
+
drives the translated steps.
|
|
67
|
+
- Read a run whose `outcome` is `stopped` or `aborted` as the step it stopped at, and never as the
|
|
68
|
+
journey's outcome.
|
|
69
|
+
|
|
70
|
+
## Review a recording
|
|
71
|
+
|
|
72
|
+
Review a model's recording before a replay or a translation. The recorder keeps every action that
|
|
73
|
+
completed, so the recording carries each detour and each repeated submission the model made.
|
|
74
|
+
|
|
75
|
+
1. Read the listing `journeys` returns for the journey.
|
|
76
|
+
2. Remove each detour and each repeated step through `edit` with the `remove` operation, by step id.
|
|
77
|
+
3. Discard a recording that does not carry the intent through `forget`, and record it again.
|
|
@@ -57,6 +57,10 @@ online audit reports the floor-restored files as stale until the release. The `-
|
|
|
57
57
|
skips the catalog step and exits `1` with a note naming that refusal, so run the full
|
|
58
58
|
`scaffold overwrite` after the release.
|
|
59
59
|
|
|
60
|
+
When the target is the `@orkestrel/scaffold` package, expect the runner to record the overwrite step
|
|
61
|
+
as skipped and to read the verify audit's foreign-path findings as expected; never run the `scaffold repair` or `scaffold overwrite` command
|
|
62
|
+
against that checkout.
|
|
63
|
+
|
|
60
64
|
Run visits in parallel slices of disjoint repositories, each slice strictly serial inside itself,
|
|
61
65
|
reporting per target. Refuse a failed target, name it, repair it, and re-run it alone.
|
|
62
66
|
|
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
// re-pin every @orkestrel range to the registry caret and install), commit (`git commit --only` of
|
|
7
7
|
// the manifest and lockfile as the preparation commit), overwrite (`scaffold overwrite --json`, then
|
|
8
8
|
// `scaffold audit` exiting 0; offline, an exit of 1 whose note names the catalog refusal is
|
|
9
|
-
// accepted
|
|
10
|
-
//
|
|
9
|
+
// accepted; on @orkestrel/scaffold itself both are skipped with a note, because the vendored host
|
|
10
|
+
// is staged from that checkout), verify (`scaffold audit --json` prints the releases envelope and
|
|
11
|
+
// every declared range matches the registry; on @orkestrel/scaffold itself an audit exit of 1 is
|
|
12
|
+
// read as the expected foreign-path findings of its own canonical sources), install,
|
|
13
|
+
// pins (the self-pin sweep with --prior or the manifest version and every range the visit moved; hits are reported, not
|
|
11
14
|
// fatal), format, gates (format:check, lint:check, check, build, test), and compare (the rebuilt
|
|
12
15
|
// dist against the published tarball, and the final runtime dependency set against the published
|
|
13
16
|
// manifest `npm view NAME --json` serves; both readings are reported, not fatal). The summary
|
|
@@ -46,6 +49,9 @@ const RUNTIME_FIELDS: readonly string[] = ['dependencies', 'peerDependencies']
|
|
|
46
49
|
const RANGE_FIELDS: readonly string[] = [...RUNTIME_FIELDS, 'devDependencies']
|
|
47
50
|
const CATALOG = '.claude/agents/orkestrel.md'
|
|
48
51
|
const OFFLINE_REFUSAL = "'catalog' does not take --offline"
|
|
52
|
+
// The vendored host is staged from this package's checkout, so overwriting it from the host deletes
|
|
53
|
+
// and replaces its own canon.
|
|
54
|
+
const SCAFFOLD = '@orkestrel/scaffold'
|
|
49
55
|
const VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u
|
|
50
56
|
// The checkout runs the `.ts` sources and a built twin under `dist/agents` runs `.js` siblings.
|
|
51
57
|
const EXTENSION = extname(fileURLToPath(import.meta.url))
|
|
@@ -358,6 +364,7 @@ function runVerify(
|
|
|
358
364
|
scaffoldFile: string,
|
|
359
365
|
scaffoldPrefix: readonly string[],
|
|
360
366
|
offline: readonly string[],
|
|
367
|
+
own: boolean,
|
|
361
368
|
): void {
|
|
362
369
|
const audit = runStep(
|
|
363
370
|
runner,
|
|
@@ -367,6 +374,10 @@ function runVerify(
|
|
|
367
374
|
runner.target,
|
|
368
375
|
)
|
|
369
376
|
if (audit === undefined) return
|
|
377
|
+
// The audit reads the canonical sources of scaffold's own checkout as foreign paths and exits 1.
|
|
378
|
+
if (own && audit.status === 1) {
|
|
379
|
+
replaceLastStep(runner, 0, 'foreign-path findings are expected on the scaffold checkout')
|
|
380
|
+
}
|
|
370
381
|
const releases = readReleases(audit.stdout)
|
|
371
382
|
if (releases === undefined) {
|
|
372
383
|
replaceLastStep(
|
|
@@ -490,10 +501,17 @@ function runVisit(argv: readonly string[]): Visit | undefined {
|
|
|
490
501
|
if (selected.has('pin')) runPin(runner, scaffoldFile, scaffoldPrefix, offline)
|
|
491
502
|
if (selected.has('commit') && !failed(runner)) runCommit(runner)
|
|
492
503
|
if (selected.has('overwrite') && !failed(runner)) {
|
|
493
|
-
|
|
504
|
+
if (name === SCAFFOLD) {
|
|
505
|
+
recordStep(
|
|
506
|
+
runner,
|
|
507
|
+
'overwrite',
|
|
508
|
+
describeCommand(scaffoldFile, [...scaffoldPrefix, 'overwrite', '--json', ...offline]),
|
|
509
|
+
`skipped with its audit: ${SCAFFOLD} is the package whose checkout the vendored host is staged from`,
|
|
510
|
+
)
|
|
511
|
+
} else runOverwrite(runner, scaffoldFile, scaffoldPrefix, offline)
|
|
494
512
|
}
|
|
495
513
|
if (selected.has('verify') && !failed(runner)) {
|
|
496
|
-
runVerify(runner, scaffoldFile, scaffoldPrefix, offline)
|
|
514
|
+
runVerify(runner, scaffoldFile, scaffoldPrefix, offline, name === SCAFFOLD)
|
|
497
515
|
}
|
|
498
516
|
if (selected.has('install') && !failed(runner)) runNpmStep(runner, 'install', ['install'])
|
|
499
517
|
if (selected.has('pins') && !failed(runner)) {
|
|
@@ -48,26 +48,26 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
48
48
|
| `@orkestrel/abort` | `0.0.12` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
49
49
|
| `@orkestrel/agent` | `0.0.25` | L5 | `@orkestrel/tool` `^0.0.17`, `@orkestrel/abort` `^0.0.12`, `@orkestrel/queue` `^0.0.15`, `@orkestrel/budget` `^0.0.12`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/timeout` `^0.0.12`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/database` `^0.0.16`, `@orkestrel/workflow` `^0.0.20`, `@orkestrel/workspace` `^0.0.10` | |
|
|
50
50
|
| `@orkestrel/brief` | `0.0.10` | L4 | `@orkestrel/reason` `^0.0.12`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/interpret` `^0.0.15` | |
|
|
51
|
-
| `@orkestrel/browser` | `0.0.
|
|
51
|
+
| `@orkestrel/browser` | `0.0.20` | L5 | `@orkestrel/mcp` `^0.0.35`, `@orkestrel/html` `^0.0.12`, `@orkestrel/tool` `^0.0.18`, `@orkestrel/router` `^0.0.16`, `@orkestrel/server` `^0.0.22`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/markdown` `^0.0.17`, `@orkestrel/websocket` `^0.0.14` | |
|
|
52
52
|
| `@orkestrel/budget` | `0.0.12` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
53
53
|
| `@orkestrel/codec` | `0.0.5` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
54
54
|
| `@orkestrel/console` | `0.0.15` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
55
|
-
| `@orkestrel/contract` | `0.0.
|
|
55
|
+
| `@orkestrel/contract` | `0.0.19` | L0 | | |
|
|
56
56
|
| `@orkestrel/csv` | `0.0.9` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
57
57
|
| `@orkestrel/database` | `0.0.16` | L2 | `@orkestrel/sqlite` `^0.0.13`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/indexeddb` `^0.0.13` | |
|
|
58
58
|
| `@orkestrel/emitter` | `0.0.11` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
59
59
|
| `@orkestrel/form` | `0.0.8` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
60
|
-
| `@orkestrel/guide` | `0.0.
|
|
61
|
-
| `@orkestrel/html` | `0.0.
|
|
60
|
+
| `@orkestrel/guide` | `0.0.22` | L3 | `@orkestrel/contract` `^0.0.18`, `@orkestrel/markdown` `^0.0.16` | |
|
|
61
|
+
| `@orkestrel/html` | `0.0.12` | L1 | `@orkestrel/contract` `^0.0.19` | |
|
|
62
62
|
| `@orkestrel/indexeddb` | `0.0.13` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
63
63
|
| `@orkestrel/interpret` | `0.0.15` | L3 | `@orkestrel/reason` `^0.0.12`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/template` `^0.0.9` | |
|
|
64
64
|
| `@orkestrel/lsp` | `0.0.10` | L3 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/process` `^0.0.14`, `@orkestrel/contract` `^0.0.18` | |
|
|
65
|
-
| `@orkestrel/markdown` | `0.0.
|
|
66
|
-
| `@orkestrel/mcp` | `0.0.
|
|
65
|
+
| `@orkestrel/markdown` | `0.0.17` | L2 | `@orkestrel/html` `^0.0.12`, `@orkestrel/contract` `^0.0.19` | |
|
|
66
|
+
| `@orkestrel/mcp` | `0.0.35` | L4 | `@orkestrel/sse` `^0.0.9`, `@orkestrel/tool` `^0.0.18`, `@orkestrel/codec` `^0.0.5`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/process` `^0.0.14`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/websocket` `^0.0.14` | `@orkestrel/router` `^0.0.16`, `@orkestrel/server` `^0.0.22` |
|
|
67
67
|
| `@orkestrel/middleware` | `0.0.22` | L4 | `@orkestrel/abort` `^0.0.12`, `@orkestrel/budget` `^0.0.12`, `@orkestrel/timeout` `^0.0.12`, `@orkestrel/contract` `^0.0.18` | `@orkestrel/server` `^0.0.21`, `@orkestrel/database` `^0.0.16` |
|
|
68
68
|
| `@orkestrel/msg` | `0.0.12` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
69
69
|
| `@orkestrel/ndjson` | `0.0.11` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
70
|
-
| `@orkestrel/ollama` | `0.0.
|
|
70
|
+
| `@orkestrel/ollama` | `0.0.20` | L6 | `@orkestrel/tool` `^0.0.18`, `@orkestrel/agent` `^0.0.25`, `@orkestrel/budget` `^0.0.12`, `@orkestrel/ndjson` `^0.0.11`, `@orkestrel/contract` `^0.0.19` | |
|
|
71
71
|
| `@orkestrel/pool` | `0.0.13` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
72
72
|
| `@orkestrel/probe` | `0.0.19` | L5 | `@orkestrel/lsp` `^0.0.10`, `@orkestrel/mcp` `^0.0.33`, `@orkestrel/tool` `^0.0.17`, `@orkestrel/queue` `^0.0.15`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/timeout` `^0.0.12`, `@orkestrel/contract` `^0.0.18` | `vitest` `^4.1.11`, `typescript` `^6.0.3` |
|
|
73
73
|
| `@orkestrel/process` | `0.0.14` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
@@ -78,9 +78,9 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
78
78
|
| `@orkestrel/reason` | `0.0.12` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
79
79
|
| `@orkestrel/relation` | `0.0.14` | L3 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/database` `^0.0.16` | |
|
|
80
80
|
| `@orkestrel/router` | `0.0.16` | L2 | `@orkestrel/abort` `^0.0.12`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
81
|
-
| `@orkestrel/scaffold` | `0.0.
|
|
81
|
+
| `@orkestrel/scaffold` | `0.0.82` | L3 | `@orkestrel/console` `^0.0.15`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/process` `^0.0.14`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/markdown` `^0.0.16`, `@orkestrel/template` `^0.0.9` | |
|
|
82
82
|
| `@orkestrel/sea` | `0.0.18` | L3 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/process` `^0.0.14`, `@orkestrel/contract` `^0.0.18` | |
|
|
83
|
-
| `@orkestrel/server` | `0.0.
|
|
83
|
+
| `@orkestrel/server` | `0.0.22` | L3 | `@orkestrel/abort` `^0.0.12`, `@orkestrel/codec` `^0.0.5`, `@orkestrel/router` `^0.0.16`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/timeout` `^0.0.12`, `@orkestrel/contract` `^0.0.19` | |
|
|
84
84
|
| `@orkestrel/sqlite` | `0.0.13` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
85
85
|
| `@orkestrel/sse` | `0.0.9` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
86
86
|
| `@orkestrel/supervisor` | `0.0.1` | L5 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.9`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/workflow` `^0.0.12` | |
|
|
@@ -89,7 +89,7 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
89
89
|
| `@orkestrel/terminal` | `0.0.17` | L3 | `@orkestrel/sse` `^0.0.9`, `@orkestrel/form` `^0.0.8`, `@orkestrel/console` `^0.0.15`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/database` `^0.0.16` | |
|
|
90
90
|
| `@orkestrel/test` | `0.0.24` | L1 | `@orkestrel/contract` `^0.0.18` | `vitest` `^4.1.11` |
|
|
91
91
|
| `@orkestrel/timeout` | `0.0.12` | L1 | `@orkestrel/contract` `^0.0.18` | |
|
|
92
|
-
| `@orkestrel/tool` | `0.0.
|
|
92
|
+
| `@orkestrel/tool` | `0.0.18` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.19` | |
|
|
93
93
|
| `@orkestrel/toolbox` | `0.0.16` | L6 | `@orkestrel/form` `^0.0.8`, `@orkestrel/tool` `^0.0.17`, `@orkestrel/agent` `^0.0.25`, `@orkestrel/server` `^0.0.21`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/database` `^0.0.16`, `@orkestrel/relation` `^0.0.14`, `@orkestrel/terminal` `^0.0.17`, `@orkestrel/workflow` `^0.0.20`, `@orkestrel/workspace` `^0.0.10` | |
|
|
94
94
|
| `@orkestrel/websocket` | `0.0.14` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
95
95
|
| `@orkestrel/worker` | `0.0.14` | L4 | `@orkestrel/pool` `^0.0.13`, `@orkestrel/queue` `^0.0.15`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/database` `^0.0.16` | |
|
|
@@ -33,6 +33,11 @@ paths:
|
|
|
33
33
|
- When a TypeScript question can name a workspace project, a case (files plus a test), and a control (files, test, the stage it must fail at, and why), call the `prove` tool the `probe` MCP server registers. Quote its closing line (`receipt probe:<digest>:…` or `no receipt`) where the claim is reported. A `no receipt` line leaves the claim unproved; report the stage that refused.
|
|
34
34
|
- When the question supplies no project, no case, or no control, write a probe per `.claude/rules/tests.md` § Probes and report the probe's control and coverage.
|
|
35
35
|
- When no `probe` server is registered, register one outside the repository in the harness's user or local MCP scope, pointing at `node_modules/@orkestrel/probe/dist/bin/main.js`, and start it in the repository whose projects the question names. A scaffold target holds no `.mcp.json`.
|
|
36
|
+
- When a question concerns what a rendered page shows or does, drive the page through the tools the `browse` MCP server registers and read what they return before arguing from source. Accept a surface through journey tests, never through a `browse` session; `.agents/skills/orkestrel-journey/references/recorded.md` rules how a recorded journey counts.
|
|
37
|
+
- When no `browse` server is registered and the workspace declares `@orkestrel/browser`, register one outside the repository in the harness's user or local MCP scope, running `node` with the argument `node_modules/@orkestrel/browser/dist/bin/main.js`, and start it in the repository root. Leave `BROWSE_ROOT` unset so the server writes under `tmp/browsers/`. Set `BROWSE_HEADLESS=false` only while a person watches the window, `BROWSE_READONLY=true` to refuse `record`, `save`, `edit`, and `forget`, and `BROWSE_EXECUTABLE` to a Chromium executable when the server finds none.
|
|
38
|
+
- When the workspace builds the surface into a `showcase/<application>.html` page, serve that page before navigating: run the `build:showcase` script, or the `build:showcase:<framework>` script for a framework mode, then serve the `showcase/` directory with `npx vite preview --config configs/app/vite.showcase.config.ts` and navigate to the page by its file name. Never navigate to a `file:` URL; `browse` refuses every scheme but `http:` and `https:`.
|
|
39
|
+
- When the workspace builds no showcase page for the surface, or the question needs what one HTML file does not carry (a second route, a separately requested asset, or a source edit shown without a rebuild), start the `dev` script, or the `dev:<framework>` script for a framework face, and navigate to the address the script prints.
|
|
40
|
+
- When the surface calls an API, start every server it calls before navigating, each on a port apart from the page's server: a third-party backend by its own start command, and the project's `src/server` or `app/server` surface by the script that starts it, which is the `serve:build` script for `app/server`.
|
|
36
41
|
- Read a receipt as evidence about its claim, never as a gate result.
|
|
37
42
|
- State the instrument's coverage beside its result. Match the instrument to the question: a text search reports on text; a claim about declarations or call sites needs the compiler or a parser.
|
|
38
43
|
- Report a question unanswered rather than answering it with a weaker instrument.
|
|
@@ -125,6 +125,7 @@ directly.
|
|
|
125
125
|
| `computeSymbolKey` | function | `(symbol: SurfaceSymbol) => string` | Computes the bijection key for a surface symbol — `${keyword} ${name}` — so a symbol-set comparison diffs (name, keyword) pairs rather than names alone. |
|
|
126
126
|
| `findMissing` | function | `(names: readonly string[], source: readonly string[]) => readonly string[]` | Finds the names present in `names` but absent from `source` — the set-difference behind a both-directions bijection assertion. |
|
|
127
127
|
| `findMissingSymbols` | function | `(symbols: readonly SurfaceSymbol[], source: readonly SurfaceSymbol[]) => readonly string[]` | Finds the symbol-key set-difference between two symbol lists — `symbols` present but absent from `source`, compared by `computeSymbolKey` so a symbol can drift in neither name nor keyword. |
|
|
128
|
+
| `hasBehaviouralSurface` | function | `(source: SourceInterface) => boolean` | Checks whether a source declares at least one behavioural member — a `class` or `interface` in its surface that carries a call-signature member — so a guide owes a `## Methods` group only where the source has one to document. |
|
|
128
129
|
| `extractSourceLines` | function | `(source: string) => readonly SourceLine[]` | Extracts aligned physical source-line records in one character traversal. Real line and block comments and complete template tokens become spaces in `SourceLine.code`, while ordinary code, quoted strings, and recognized regex literals retain their columns. Genuine JSDoc opened from reflection code is retained span by span at its exact physical column in `SourceLine.jsdoc`; faux openers in comments and templates are excluded. Membership remains each consumer's separate anchored grammar. |
|
|
129
130
|
| `extractExports` | function | `(source: string) => readonly SurfaceSymbol[]` | Extracts the module-scope exports declared in one file's source text — the declaration keys `collectKeys` reports, each split back into the keyword and name that built it, deduped by (keyword, name). |
|
|
130
131
|
| `extractHidden` | function | `(source: string) => readonly SurfaceSymbol[]` | Extracts the module-scope declarations lacking the `export` keyword in one file's source text — the mirror image of `extractExports`'s grammar, anchored the same way (column 0, so an indented inner declaration never matches). |
|
|
@@ -663,7 +664,9 @@ guard so a renamed heading fails loudly instead of passing on an empty extractio
|
|
|
663
664
|
missing; a link naming a fixture directory resolves on the same directory rule. Guard:
|
|
664
665
|
`guide.tests().length > 0`.
|
|
665
666
|
- **NV — Non-vacuousness.** `parseManifest` yields at least one entry; each guide's
|
|
666
|
-
`surface()` and every `MethodGroup` is non-empty — the guard behind every other check.
|
|
667
|
+
`surface()` and every `MethodGroup` is non-empty — the guard behind every other check. A guide
|
|
668
|
+
with no `MethodGroup` at all is reported only where `hasBehaviouralSurface` finds a surface
|
|
669
|
+
`class` or `interface` with a member to document; a source of constants and types owes none.
|
|
667
670
|
- **FL — Fence-language listing.** `findUnlisted(guide.fences(), LANGUAGES)` keeps every fence
|
|
668
671
|
whose language the package did not list, plus every untagged fence. The list is the package's
|
|
669
672
|
own — `Guide` never decides it — so a package documenting `sh` or `sql` examples lists those
|
|
@@ -124,6 +124,7 @@ Exported from `@orkestrel/scaffold`, and reachable from
|
|
|
124
124
|
| `BASE_DEV_DEPENDENCIES` | const | Holds the tooling versions scaffold and every generated workspace share. |
|
|
125
125
|
| `BIN_CONFIGS` | const | Lists the configuration files a workspace that ships its own executable adds, frozen. |
|
|
126
126
|
| `BIN_ENTRY_PATH` | const | Names the executable entry whose presence makes a workspace `bin`. |
|
|
127
|
+
| `BROWSE_DEV_DEPENDENCIES` | const | Names the development dependency a browser or styles surface adds. |
|
|
127
128
|
| `CANON_PATHS` | const | Lists the instruction-canon paths staged for reading rather than for a target, frozen. |
|
|
128
129
|
| `CATALOG_AGENT_PATH` | const | Names the agent file whose marker-bounded package table the catalog verb alone owns. |
|
|
129
130
|
| `CATALOG_CLOSING_MARKER` | const | Names the marker closing the package table inside `CATALOG_AGENT_PATH`. |
|
|
@@ -665,6 +666,10 @@ any of those facts by itself. `tests/distribution.test.ts` selects nothing: the
|
|
|
665
666
|
axis and the sheet faces the target ships already decide the `distribution` project, and the file is
|
|
666
667
|
planned from that.
|
|
667
668
|
|
|
669
|
+
A target whose `package.json` file names the `@orkestrel/scaffold` package is this package's own
|
|
670
|
+
checkout, the source the vendored host is staged from. The `repair` and `overwrite` verbs refuse it
|
|
671
|
+
with the `TARGET` code before either writes, and the `audit` verb reads it like any other target.
|
|
672
|
+
|
|
668
673
|
`vendors` is not reconstructed. Its artifact, `scripts/service.sh`, is a birth-owned inventory
|
|
669
674
|
skeleton rather than a working installer, so edited script text is not a trustworthy declaration of
|
|
670
675
|
a vendor list. A target-reading verb derives no vendor list from a present script. Only an
|
|
@@ -1216,7 +1221,9 @@ Object.keys(exports) // ['./styles', './styles/scss', './styles/themes', './styl
|
|
|
1216
1221
|
```
|
|
1217
1222
|
|
|
1218
1223
|
Each sheet face adds its `check:src:<face>`, `build:src:<face>`, and `test:src:<face>` scripts, and
|
|
1219
|
-
`test:src:<face>` builds the face before it runs the face's project.
|
|
1224
|
+
`test:src:<face>` builds the face before it runs the face's project. The face's
|
|
1225
|
+
`tests/src/<face>/index.test.ts` imports the built `dist/src/<face>/index.css` with `?raw` by a
|
|
1226
|
+
path relative to the test file. With themes, `build:src:styles`
|
|
1220
1227
|
builds the themes target after the base face. The root configuration registers each face's project
|
|
1221
1228
|
by its wrapper, and the wrapper composes it through the root `sheetProject` factory, which runs it
|
|
1222
1229
|
in Playwright Chromium with `isolate: false` and loads `tests/setup.ts`, `tests/setupBrowser.ts`,
|
package/dist/host/manifest.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"storage": "agents/orchestration.md",
|
|
17
17
|
"destination": ".agents/orchestration.md",
|
|
18
18
|
"executable": false,
|
|
19
|
-
"digest": "
|
|
19
|
+
"digest": "92f3b30439a037c611972fd600c88b7c7a22dbf1e12e4d601762c58915e33ec9"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"storage": "agents/skills/enterprise-bootstrap/SKILL.md",
|
|
@@ -286,7 +286,7 @@
|
|
|
286
286
|
"storage": "agents/skills/orkestrel-journey/SKILL.md",
|
|
287
287
|
"destination": ".agents/skills/orkestrel-journey/SKILL.md",
|
|
288
288
|
"executable": false,
|
|
289
|
-
"digest": "
|
|
289
|
+
"digest": "7b36eb185c510415f8a3d4c5f06e3101d51ed4e44f88316bb5494464e32017bf"
|
|
290
290
|
},
|
|
291
291
|
{
|
|
292
292
|
"storage": "agents/skills/orkestrel-journey/agents/openai.yaml",
|
|
@@ -304,7 +304,7 @@
|
|
|
304
304
|
"storage": "agents/skills/orkestrel-journey/references/decide.md",
|
|
305
305
|
"destination": ".agents/skills/orkestrel-journey/references/decide.md",
|
|
306
306
|
"executable": false,
|
|
307
|
-
"digest": "
|
|
307
|
+
"digest": "de4e60c92b7cd209406b25033fced97e5e389c995f7df984a85aca867101da86"
|
|
308
308
|
},
|
|
309
309
|
{
|
|
310
310
|
"storage": "agents/skills/orkestrel-journey/references/layer.md",
|
|
@@ -312,6 +312,12 @@
|
|
|
312
312
|
"executable": false,
|
|
313
313
|
"digest": "1d9120c626e0e716b5c1d908c810de4e9a76ff3ad1de33fca06124bf3f26db32"
|
|
314
314
|
},
|
|
315
|
+
{
|
|
316
|
+
"storage": "agents/skills/orkestrel-journey/references/recorded.md",
|
|
317
|
+
"destination": ".agents/skills/orkestrel-journey/references/recorded.md",
|
|
318
|
+
"executable": false,
|
|
319
|
+
"digest": "bfd1eae3872aee64aea8e49a09ea411bb0f3f9cf8c381d5c25b918c060845dbc"
|
|
320
|
+
},
|
|
315
321
|
{
|
|
316
322
|
"storage": "agents/skills/orkestrel-journey/references/statechart.md",
|
|
317
323
|
"destination": ".agents/skills/orkestrel-journey/references/statechart.md",
|
|
@@ -364,7 +370,7 @@
|
|
|
364
370
|
"storage": "agents/skills/orkestrel-publish/references/wave.md",
|
|
365
371
|
"destination": ".agents/skills/orkestrel-publish/references/wave.md",
|
|
366
372
|
"executable": false,
|
|
367
|
-
"digest": "
|
|
373
|
+
"digest": "d86fc6b60f12eb09a54442cc6c6e6c3e9b901b310af0bdb19b7d3084b010b059"
|
|
368
374
|
},
|
|
369
375
|
{
|
|
370
376
|
"storage": "agents/skills/orkestrel-publish/references/window.md",
|
|
@@ -388,7 +394,7 @@
|
|
|
388
394
|
"storage": "agents/skills/orkestrel-publish/scripts/wave.ts",
|
|
389
395
|
"destination": ".agents/skills/orkestrel-publish/scripts/wave.ts",
|
|
390
396
|
"executable": false,
|
|
391
|
-
"digest": "
|
|
397
|
+
"digest": "53a85584203346325df82b2b2b20a77a86b64dbbf017afc1fdfc58d782e4f85c"
|
|
392
398
|
},
|
|
393
399
|
{
|
|
394
400
|
"storage": "agents/skills/orkestrel-publish/scripts/window.ts",
|
|
@@ -490,7 +496,7 @@
|
|
|
490
496
|
"storage": "claude/agents/orkestrel.md",
|
|
491
497
|
"destination": ".claude/agents/orkestrel.md",
|
|
492
498
|
"executable": false,
|
|
493
|
-
"digest": "
|
|
499
|
+
"digest": "51fd164a22f9f3ea05fa2a2b620f2e69d621c3144fa16f82296399abf7f5d90a"
|
|
494
500
|
},
|
|
495
501
|
{
|
|
496
502
|
"storage": "claude/agents/planner.md",
|
|
@@ -568,7 +574,7 @@
|
|
|
568
574
|
"storage": "claude/rules/quality.md",
|
|
569
575
|
"destination": ".claude/rules/quality.md",
|
|
570
576
|
"executable": false,
|
|
571
|
-
"digest": "
|
|
577
|
+
"digest": "7b8b9b3a4f4ee586d96deeb0cdd4fc9da68da663742cb56c96f64b2230ba89e6"
|
|
572
578
|
},
|
|
573
579
|
{
|
|
574
580
|
"storage": "claude/rules/styles.md",
|
|
@@ -910,7 +916,7 @@
|
|
|
910
916
|
"storage": "guides/guide.md",
|
|
911
917
|
"destination": "guides/guide.md",
|
|
912
918
|
"executable": false,
|
|
913
|
-
"digest": "
|
|
919
|
+
"digest": "1cdcd2e03b005cd8e7e12319f083ef31847a96682b4f9e33a084ea249c6a857c"
|
|
914
920
|
},
|
|
915
921
|
{
|
|
916
922
|
"storage": "guides/html.md",
|
|
@@ -1036,7 +1042,7 @@
|
|
|
1036
1042
|
"storage": "guides/scaffold.md",
|
|
1037
1043
|
"destination": "guides/scaffold.md",
|
|
1038
1044
|
"executable": false,
|
|
1039
|
-
"digest": "
|
|
1045
|
+
"digest": "305071436b4c42fa2ac20b07e9bd2110ec4c5e30d1a62994c12d5a59e2875d4c"
|
|
1040
1046
|
},
|
|
1041
1047
|
{
|
|
1042
1048
|
"storage": "guides/sea.md",
|
|
@@ -2138,5 +2144,5 @@
|
|
|
2138
2144
|
]
|
|
2139
2145
|
}
|
|
2140
2146
|
],
|
|
2141
|
-
"digest": "
|
|
2147
|
+
"digest": "abd3c849c7d840a027f3c5c07e370e40ac41695ebfdc9320fd9cbea334ae0a97"
|
|
2142
2148
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
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.83",
|
|
8
8
|
description: "Scaffold workspaces with commands: new, audit, repair, catalog, and overwrite.",
|
|
9
9
|
keywords: [
|
|
10
10
|
"audit",
|
|
@@ -95,16 +95,17 @@ var package_default = {
|
|
|
95
95
|
},
|
|
96
96
|
dependencies: {
|
|
97
97
|
"@orkestrel/console": "^0.0.15",
|
|
98
|
-
"@orkestrel/contract": "^0.0.
|
|
98
|
+
"@orkestrel/contract": "^0.0.19",
|
|
99
99
|
"@orkestrel/emitter": "^0.0.11",
|
|
100
|
-
"@orkestrel/markdown": "^0.0.
|
|
100
|
+
"@orkestrel/markdown": "^0.0.17",
|
|
101
101
|
"@orkestrel/process": "^0.0.14",
|
|
102
102
|
"@orkestrel/template": "^0.0.9"
|
|
103
103
|
},
|
|
104
104
|
devDependencies: {
|
|
105
105
|
"@microsoft/api-extractor": "^7.59.3",
|
|
106
|
-
"@orkestrel/
|
|
107
|
-
"@orkestrel/
|
|
106
|
+
"@orkestrel/browser": "^0.0.20",
|
|
107
|
+
"@orkestrel/guide": "^0.0.22",
|
|
108
|
+
"@orkestrel/html": "^0.0.12",
|
|
108
109
|
"@orkestrel/probe": "^0.0.19",
|
|
109
110
|
"@orkestrel/test": "^0.0.24",
|
|
110
111
|
"@types/node": "^26.6.3",
|
|
@@ -113,7 +114,7 @@ var package_default = {
|
|
|
113
114
|
"oxlint": "^1.86.0",
|
|
114
115
|
"playwright": "^1.63.0",
|
|
115
116
|
"typescript": "^6.0.3",
|
|
116
|
-
"vite": "^8.3.
|
|
117
|
+
"vite": "^8.3.2",
|
|
117
118
|
"vitest": "^4.1.11"
|
|
118
119
|
},
|
|
119
120
|
engines: { "node": ">=22.18.0" }
|
|
@@ -662,6 +663,15 @@ var SOURCE_BROWSER_DEV_DEPENDENCIES = Object.freeze({
|
|
|
662
663
|
"@vitest/browser-playwright": package_default.devDependencies["@vitest/browser-playwright"],
|
|
663
664
|
playwright: package_default.devDependencies.playwright
|
|
664
665
|
});
|
|
666
|
+
/**
|
|
667
|
+
* Names the development dependency a browser or styles surface adds.
|
|
668
|
+
*
|
|
669
|
+
* @remarks
|
|
670
|
+
* The package ships the `browse` binary, an MCP server that drives a rendered page and records
|
|
671
|
+
* journeys, and `.claude/rules/quality.md` § Instruments names its registration.
|
|
672
|
+
* `blueprintToDevDependencies` names the blueprints that receive it.
|
|
673
|
+
*/
|
|
674
|
+
var BROWSE_DEV_DEPENDENCIES = Object.freeze({ "@orkestrel/browser": package_default.devDependencies["@orkestrel/browser"] });
|
|
665
675
|
/** Names the development dependency every private `app` environment adds. */
|
|
666
676
|
var APP_DEV_DEPENDENCIES = Object.freeze({ "@orkestrel/contract": package_default.dependencies["@orkestrel/contract"] });
|
|
667
677
|
/** Lists the development dependencies a private browser application adds. */
|
|
@@ -2302,7 +2312,7 @@ declare module 'vitest' {
|
|
|
2302
2312
|
}
|
|
2303
2313
|
}
|
|
2304
2314
|
`,
|
|
2305
|
-
sheet: `import sheet from '
|
|
2315
|
+
sheet: `import sheet from '{{root}}dist/src/{{name}}/index.css?raw'
|
|
2306
2316
|
import { describe, expect, it } from 'vitest'
|
|
2307
2317
|
import { adoptSheet, readLayerNames } from '{{setup}}'
|
|
2308
2318
|
|
|
@@ -5635,6 +5645,12 @@ function srcToExports(src) {
|
|
|
5635
5645
|
* the peer's floor states what consumers may supply rather than what this workspace
|
|
5636
5646
|
* develops against.
|
|
5637
5647
|
*
|
|
5648
|
+
* A workspace that renders a surface receives {@link BROWSE_DEV_DEPENDENCIES}: a browser
|
|
5649
|
+
* environment on either axis, a sheet, or themes. A framework face counts without a clause of
|
|
5650
|
+
* its own, because a face is selected only on an axis that carries a browser environment.
|
|
5651
|
+
* A browser setup runtime alone receives nothing, because it renders no surface for `browse`
|
|
5652
|
+
* to drive.
|
|
5653
|
+
*
|
|
5638
5654
|
* A peer is declared here as well as under `peerDependencies`, because a peer is
|
|
5639
5655
|
* not installed by the workspace that declares it and developing against one
|
|
5640
5656
|
* requires it present. A runtime dependency is the opposite case and is removed:
|
|
@@ -5657,8 +5673,10 @@ function srcToExports(src) {
|
|
|
5657
5673
|
*/
|
|
5658
5674
|
function blueprintToDevDependencies(blueprint) {
|
|
5659
5675
|
const sheets = blueprintToSheets(blueprint).length > 0 || blueprint.themes;
|
|
5676
|
+
const rendered = blueprint.src.includes("browser") || blueprint.app.includes("browser") || sheets;
|
|
5660
5677
|
const merged = {
|
|
5661
5678
|
...BASE_DEV_DEPENDENCIES,
|
|
5679
|
+
...rendered ? BROWSE_DEV_DEPENDENCIES : {},
|
|
5662
5680
|
...sheets ? STYLES_DEV_DEPENDENCIES : {},
|
|
5663
5681
|
...blueprint.src.length > 0 || blueprint.bin ? DECLARATION_DEV_DEPENDENCIES : {},
|
|
5664
5682
|
...blueprint.src.includes("browser") || blueprint.setup.includes("browser") || sheets ? SOURCE_BROWSER_DEV_DEPENDENCIES : {},
|
|
@@ -6719,16 +6737,20 @@ function blueprintToTestArtifacts(blueprint) {
|
|
|
6719
6737
|
origin: "template",
|
|
6720
6738
|
content: ARTIFACT_TEMPLATES.tests.styles.proof
|
|
6721
6739
|
});
|
|
6722
|
-
for (const name of sheets)
|
|
6723
|
-
|
|
6724
|
-
|
|
6725
|
-
|
|
6726
|
-
|
|
6727
|
-
|
|
6728
|
-
|
|
6729
|
-
|
|
6730
|
-
|
|
6731
|
-
|
|
6740
|
+
for (const name of sheets) {
|
|
6741
|
+
const tests = "../".repeat(name.split("/").length + 1);
|
|
6742
|
+
artifacts.push({
|
|
6743
|
+
path: `tests/src/${name}/index.test.ts`,
|
|
6744
|
+
group: "tests",
|
|
6745
|
+
ownership: "birth",
|
|
6746
|
+
origin: "template",
|
|
6747
|
+
content: (0, _orkestrel_template.fillTemplate)(ARTIFACT_TEMPLATES.tests.sheet, {
|
|
6748
|
+
name,
|
|
6749
|
+
root: `${tests}../`,
|
|
6750
|
+
setup: `${tests}setupStyles.js`
|
|
6751
|
+
})
|
|
6752
|
+
});
|
|
6753
|
+
}
|
|
6732
6754
|
if (blueprintToMachinery(blueprint).browser) artifacts.push({
|
|
6733
6755
|
path: "tests/setupBrowser.ts",
|
|
6734
6756
|
group: "tests",
|
|
@@ -8407,6 +8429,7 @@ exports.AXES = AXES;
|
|
|
8407
8429
|
exports.BASE_DEV_DEPENDENCIES = BASE_DEV_DEPENDENCIES;
|
|
8408
8430
|
exports.BIN_CONFIGS = BIN_CONFIGS;
|
|
8409
8431
|
exports.BIN_ENTRY_PATH = BIN_ENTRY_PATH;
|
|
8432
|
+
exports.BROWSE_DEV_DEPENDENCIES = BROWSE_DEV_DEPENDENCIES;
|
|
8410
8433
|
exports.CANON_PATHS = CANON_PATHS;
|
|
8411
8434
|
exports.CATALOG_AGENT_PATH = CATALOG_AGENT_PATH;
|
|
8412
8435
|
exports.CATALOG_CLOSING_MARKER = CATALOG_CLOSING_MARKER;
|