@orkestrel/scaffold 0.0.92 → 0.0.93
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 +6 -6
- package/dist/bin/main.js.map +1 -1
- package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +4 -2
- package/dist/host/agents/skills/enterprise-bootstrap/references/responsive-layout.md +1 -1
- package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +3 -3
- package/dist/host/agents/skills/orkestrel-journey/references/statechart.md +1 -1
- package/dist/host/claude/agents/orkestrel.md +5 -5
- package/dist/host/claude/rules/styles.md +5 -0
- package/dist/host/dotfiles/oxlintrc.json +168 -0
- package/dist/host/guides/browser.md +94 -70
- package/dist/host/guides/mcp.md +15 -15
- package/dist/host/guides/pool.md +73 -48
- package/dist/host/guides/probe.md +262 -216
- package/dist/host/guides/router.md +1 -1
- package/dist/host/guides/worker.md +43 -7
- package/dist/host/manifest.json +15 -15
- package/dist/host/tests/config.test.ts +46 -3
- package/dist/src/core/index.cjs +6 -6
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.js +6 -6
- package/dist/src/core/index.js.map +1 -1
- package/package.json +6 -6
|
@@ -294,7 +294,8 @@ $utilities: map-merge(
|
|
|
294
294
|
values: auto pointer grab,
|
|
295
295
|
),
|
|
296
296
|
// Modify an existing utility: make width responsive.
|
|
297
|
-
'width':
|
|
297
|
+
'width':
|
|
298
|
+
map-merge(
|
|
298
299
|
map-get($utilities, 'width'),
|
|
299
300
|
(
|
|
300
301
|
responsive: true,
|
|
@@ -889,7 +890,8 @@ Bootstrap has **no** combobox/autocomplete, date picker, multi-select tags input
|
|
|
889
890
|
$utilities: map-merge(
|
|
890
891
|
$utilities,
|
|
891
892
|
(
|
|
892
|
-
'width':
|
|
893
|
+
'width':
|
|
894
|
+
map-merge(
|
|
893
895
|
map-get($utilities, 'width'),
|
|
894
896
|
(
|
|
895
897
|
responsive: true,
|
|
@@ -109,7 +109,7 @@ the component's own breakpoint class instead
|
|
|
109
109
|
Recipes:
|
|
110
110
|
|
|
111
111
|
- **Table scroller.** `<div class="table-responsive" role="region" aria-label="Invoices"
|
|
112
|
-
tabindex="0">` — the shipped class is `overflow-x: auto` only; the name and `tabindex` make it
|
|
112
|
+
tabindex="0">` — the shipped class is `overflow-x: auto` only; the name and `tabindex` make it
|
|
113
113
|
keyboard-reachable. `table-responsive-{bp}` scrolls only below the breakpoint.
|
|
114
114
|
- **Menus in a scroller.** A scroller clips its `dropdown-menu`. Add
|
|
115
115
|
`data-bs-popper-config='{"strategy":"fixed"}'` to the toggle, or open row actions in a
|
|
@@ -362,7 +362,7 @@ Helpers are single-purpose classes that sit alongside utilities.
|
|
|
362
362
|
Protect titles or marks that must retain height with `flex-shrink-0`. Do not add `overflow-hidden`
|
|
363
363
|
to an ancestor to conceal a layout bug; it can clip menus and focus rings.
|
|
364
364
|
- **Toolbars:** start with `d-grid gap-2` or labelled `row g-2` controls; expand with `d-sm-flex
|
|
365
|
-
flex-sm-wrap` or `col-md-auto` only when the container fits. Do not default to a horizontal
|
|
365
|
+
flex-sm-wrap` or `col-md-auto` only when the container fits. Do not default to a horizontal
|
|
366
366
|
scroller for search or primary actions. Keep matching control sizes and usable hit areas. Align equal-height
|
|
367
367
|
cards only where their content benefits, not to fill empty space.
|
|
368
368
|
- **Responsive content:** follow [responsive-layout.md](responsive-layout.md); unprefixed utilities define the complete narrow task. A class that resolves can still implement the wrong layout. Reflow and prioritize before truncating. Hide a button caption only when
|
|
@@ -397,10 +397,10 @@ flex-sm-wrap` or `col-md-auto` only when the container fits. Do not default to a
|
|
|
397
397
|
take `object-fit-contain` when the whole asset matters. Guard a user upload against bleeding into
|
|
398
398
|
a same-color surface with `border border-black border-opacity-10` — translucent, so it does not
|
|
399
399
|
clash with the photo. Reduce a photo's dynamics before placing text on it: a `bg-dark
|
|
400
|
-
bg-opacity-50` (or `-75`) overlay layer under `card-img-overlay`, measured at every crop. Keep a
|
|
400
|
+
bg-opacity-50` (or `-75`) overlay layer under `card-img-overlay`, measured at every crop. Keep a
|
|
401
401
|
small glyph near 16–24 px inside `rounded-circle bg-primary-subtle p-3` rather than scaling it up.
|
|
402
402
|
Keep useful image detail and icon optical size rather than stretching assets to fill a box.
|
|
403
403
|
- **Lists and quotes:** `list-unstyled` with a meaningful glyph per item (`d-flex gap-2
|
|
404
|
-
align-items-baseline`, glyph `aria-hidden="true"`); `.blockquote` with `.blockquote-footer`.
|
|
404
|
+
align-items-baseline`, glyph `aria-hidden="true"`); `.blockquote` with `.blockquote-footer`.
|
|
405
405
|
- **Print:** mark chrome `d-print-none` and keep results readable; do not hide data merely because
|
|
406
406
|
its interactive controls have no print role.
|
|
@@ -269,7 +269,7 @@ Prove the harness from the browser project, through the object and the markup to
|
|
|
269
269
|
zero, and the passed tally equals the total.
|
|
270
270
|
- Assert the inventory before the tally. A harness that mounted no row would pass every tally
|
|
271
271
|
assertion, and `createHarness` refuses an empty table with `Statechart harness mounted no
|
|
272
|
-
transition`.
|
|
272
|
+
transition`.
|
|
273
273
|
- Name the failing rows from `failures`, which lists each row whose rendered `result` reads failed,
|
|
274
274
|
in table order. A red gate says which transition broke.
|
|
275
275
|
- Read the tally off `harness.root` as well as off the object, so the attribute contract a gate
|
|
@@ -48,7 +48,7 @@ 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.26` | L5 | `@orkestrel/tool` `^0.0.18`, `@orkestrel/abort` `^0.0.12`, `@orkestrel/queue` `^0.0.16`, `@orkestrel/budget` `^0.0.12`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/timeout` `^0.0.12`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/database` `^0.0.17`, `@orkestrel/workflow` `^0.0.21`, `@orkestrel/workspace` `^0.0.11` | |
|
|
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.26` | L5 | `@orkestrel/mcp` `^0.0.36`, `@orkestrel/html` `^0.0.12`, `@orkestrel/pool` `^0.0.16`, `@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` | |
|
|
@@ -68,8 +68,8 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
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
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
|
-
| `@orkestrel/pool` | `0.0.
|
|
72
|
-
| `@orkestrel/probe` | `0.0.
|
|
71
|
+
| `@orkestrel/pool` | `0.0.16` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.19` | |
|
|
72
|
+
| `@orkestrel/probe` | `0.0.21` | L5 | `@orkestrel/lsp` `^0.0.10`, `@orkestrel/mcp` `^0.0.36`, `@orkestrel/pool` `^0.0.16`, `@orkestrel/tool` `^0.0.18`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/timeout` `^0.0.12`, `@orkestrel/contract` `^0.0.19` | `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` | |
|
|
74
74
|
| `@orkestrel/program` | `0.0.15` | L4 | `@orkestrel/rater` `^0.0.16`, `@orkestrel/reason` `^0.0.12`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18`, `@orkestrel/qualifier` `^0.0.16` | |
|
|
75
75
|
| `@orkestrel/qualifier` | `0.0.16` | L3 | `@orkestrel/reason` `^0.0.12`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
@@ -78,7 +78,7 @@ 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.15` | L3 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/database` `^0.0.17` | |
|
|
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.92` | L3 | `@orkestrel/console` `^0.0.15`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/process` `^0.0.14`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/markdown` `^0.0.17`, `@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
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.14` | L1 | `@orkestrel/contract` `^0.0.19` | |
|
|
@@ -92,7 +92,7 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
92
92
|
| `@orkestrel/tool` | `0.0.18` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.19` | |
|
|
93
93
|
| `@orkestrel/toolbox` | `0.0.17` | L6 | `@orkestrel/form` `^0.0.8`, `@orkestrel/tool` `^0.0.18`, `@orkestrel/agent` `^0.0.26`, `@orkestrel/server` `^0.0.22`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/database` `^0.0.17`, `@orkestrel/relation` `^0.0.15`, `@orkestrel/terminal` `^0.0.18`, `@orkestrel/workflow` `^0.0.21`, `@orkestrel/workspace` `^0.0.11` | |
|
|
94
94
|
| `@orkestrel/websocket` | `0.0.14` | L2 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.18` | |
|
|
95
|
-
| `@orkestrel/worker` | `0.0.
|
|
95
|
+
| `@orkestrel/worker` | `0.0.16` | L4 | `@orkestrel/pool` `^0.0.16`, `@orkestrel/queue` `^0.0.16`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/database` `^0.0.17` | |
|
|
96
96
|
| `@orkestrel/workflow` | `0.0.21` | L4 | `@orkestrel/abort` `^0.0.12`, `@orkestrel/queue` `^0.0.16`, `@orkestrel/budget` `^0.0.12`, `@orkestrel/emitter` `^0.0.11`, `@orkestrel/timeout` `^0.0.12`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/database` `^0.0.17` | |
|
|
97
97
|
| `@orkestrel/workspace` | `0.0.11` | L3 | `@orkestrel/emitter` `^0.0.11`, `@orkestrel/contract` `^0.0.19`, `@orkestrel/database` `^0.0.17` | |
|
|
98
98
|
|
|
@@ -74,6 +74,11 @@ SCSS mirrors TypeScript centralization. Concrete token prefixes are project-spec
|
|
|
74
74
|
for that framework and every `!important` declaration outside every layer. A derived build of that
|
|
75
75
|
recreation for a utility library may place the framework's reset rules in `reset` under a switch
|
|
76
76
|
the guide records, keeping every `!important` declaration outside every layer.
|
|
77
|
+
- A derived build of a recreation for a utility library may substitute the framework's token
|
|
78
|
+
literals (colors and scale values) with the utility library's theme values under a switch the guide
|
|
79
|
+
records, when a committed record maps every substituted literal to its source token and resolved
|
|
80
|
+
value and a proof reads the derived sheet against the framework's own compile from the mapped
|
|
81
|
+
bases; the substitution changes no selector, declaration order, or declaration count.
|
|
77
82
|
- Declare cascade-layer order once in the consumer entry before `@import 'tailwindcss'`, so utilities win predictably. When a package publishes several sheets, open every published sheet with the same full order statement, so the order holds whichever sheet loads first.
|
|
78
83
|
- Open `themes/index.scss` with `@use '../tokens'`, whose first emitted rule is the order statement, then `@use 'default'`; Sass refuses a `@use` after another rule, so never write the statement there literally.
|
|
79
84
|
|
|
@@ -226,6 +226,174 @@
|
|
|
226
226
|
]
|
|
227
227
|
}
|
|
228
228
|
},
|
|
229
|
+
{
|
|
230
|
+
"files": ["src/bootstrap/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
|
|
231
|
+
"rules": {
|
|
232
|
+
"no-restricted-imports": [
|
|
233
|
+
"error",
|
|
234
|
+
{
|
|
235
|
+
"patterns": [
|
|
236
|
+
{
|
|
237
|
+
"regex": "^(?:(?:vue|vite)(?:[/?#]|$)|@(?:vue|vitejs)/|@(?:src|app)/vue(?:[/?#]|$)|@orkestrel/[^/]+/vue(?:[/?#]|$)|(?:\\.\\./)+(?:vue|src/vue|app/vue)(?:[/?#]|$))",
|
|
238
|
+
"message": "src/bootstrap must not depend on Vue extension modules"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"regex": "^(?:/|[A-Za-z]:[\\\\/])",
|
|
242
|
+
"message": "imports must not use machine-specific absolute paths"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"regex": "^(?:[A-Za-mo-z][A-Za-z0-9+.-]*|n(?:[A-Za-np-z0-9+.-][A-Za-z0-9+.-]*)?|no(?:[A-Za-ce-z0-9+.-][A-Za-z0-9+.-]*)?|nod(?:[A-Za-df-z0-9+.-][A-Za-z0-9+.-]*)?|node[A-Za-z0-9+.-]+):",
|
|
246
|
+
"message": "imports must not use non-Node URL schemes"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"regex": "(?:^|/)(?:[^/.][^/]*|\\.[^/.][^/]*|\\.\\.[^/]+)/\\.{1,2}(?:/|$)",
|
|
250
|
+
"message": "internal import paths must not contain noncanonical dot segments"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
|
|
254
|
+
"message": "relative import paths must not contain normalized traversal segments"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"regex": "\\\\",
|
|
258
|
+
"message": "import paths must use portable forward slashes"
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"regex": "^typescript(?:[/?#]|$)",
|
|
262
|
+
"message": "the in-process compiler API is not a surface the fleet uses"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"regex": "^(?:@app(?:[/?#]|$)|(?:\\.\\./)+app(?:[/?#]|$))",
|
|
266
|
+
"message": "src environments must not depend on private app modules"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"regex": "^(?:node:|(?:_(?:http_(?:agent|client|common|incoming|outgoing|server)|stream_(?:duplex|passthrough|readable|transform|wrap|writable)|tls_(?:common|wrap))|assert(?:/strict)?|async_hooks|buffer|child_process|cluster|console|constants|crypto|dgram|diagnostics_channel|dns(?:/promises)?|domain|events|fs(?:/promises)?|http|http2|https|inspector(?:/promises)?|module|net|os|path(?:/(?:posix|win32))?|perf_hooks|process|punycode|querystring|readline(?:/promises)?|repl|sqlite|stream(?:/(?:consumers|promises|web))?|string_decoder|sys|timers(?:/promises)?|tls|trace_events|tty|url|util(?:/types)?|v8|vm|wasi|worker_threads|zlib)(?:[/?#]|$)|@src/server(?:[/?#]|$)|@orkestrel/[^/]+/server(?:[/?#]|$)|(?:\\.\\./)+(?:server|src/server|app/server)(?:[/?#]|$))",
|
|
270
|
+
"message": "src/bootstrap must not depend on Node or server-only modules"
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"regex": "^(?:@src/tailwindcss(?:[/?#]|$)|@orkestrel/[^/]+/tailwindcss(?:[/?#]|$)|(?:\\.\\./)+(?:tailwindcss|src/tailwindcss)(?:[/?#]|$))",
|
|
274
|
+
"message": "src/bootstrap must not import another styles face's TypeScript"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"regex": "^(?:@src/styles(?:[/?#]|$)|@orkestrel/[^/]+/styles(?:[/?#]|$)|(?:\\.\\./)+(?:styles|src/styles)(?:[/?#]|$))",
|
|
278
|
+
"message": "src/bootstrap must not import another styles face's TypeScript"
|
|
279
|
+
}
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
]
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"files": ["src/tailwindcss/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
|
|
287
|
+
"rules": {
|
|
288
|
+
"no-restricted-imports": [
|
|
289
|
+
"error",
|
|
290
|
+
{
|
|
291
|
+
"patterns": [
|
|
292
|
+
{
|
|
293
|
+
"regex": "^(?:(?:vue|vite)(?:[/?#]|$)|@(?:vue|vitejs)/|@(?:src|app)/vue(?:[/?#]|$)|@orkestrel/[^/]+/vue(?:[/?#]|$)|(?:\\.\\./)+(?:vue|src/vue|app/vue)(?:[/?#]|$))",
|
|
294
|
+
"message": "src/tailwindcss must not depend on Vue extension modules"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"regex": "^(?:/|[A-Za-z]:[\\\\/])",
|
|
298
|
+
"message": "imports must not use machine-specific absolute paths"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"regex": "^(?:[A-Za-mo-z][A-Za-z0-9+.-]*|n(?:[A-Za-np-z0-9+.-][A-Za-z0-9+.-]*)?|no(?:[A-Za-ce-z0-9+.-][A-Za-z0-9+.-]*)?|nod(?:[A-Za-df-z0-9+.-][A-Za-z0-9+.-]*)?|node[A-Za-z0-9+.-]+):",
|
|
302
|
+
"message": "imports must not use non-Node URL schemes"
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"regex": "(?:^|/)(?:[^/.][^/]*|\\.[^/.][^/]*|\\.\\.[^/]+)/\\.{1,2}(?:/|$)",
|
|
306
|
+
"message": "internal import paths must not contain noncanonical dot segments"
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
|
|
310
|
+
"message": "relative import paths must not contain normalized traversal segments"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"regex": "\\\\",
|
|
314
|
+
"message": "import paths must use portable forward slashes"
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"regex": "^typescript(?:[/?#]|$)",
|
|
318
|
+
"message": "the in-process compiler API is not a surface the fleet uses"
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"regex": "^(?:@app(?:[/?#]|$)|(?:\\.\\./)+app(?:[/?#]|$))",
|
|
322
|
+
"message": "src environments must not depend on private app modules"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"regex": "^(?:node:|(?:_(?:http_(?:agent|client|common|incoming|outgoing|server)|stream_(?:duplex|passthrough|readable|transform|wrap|writable)|tls_(?:common|wrap))|assert(?:/strict)?|async_hooks|buffer|child_process|cluster|console|constants|crypto|dgram|diagnostics_channel|dns(?:/promises)?|domain|events|fs(?:/promises)?|http|http2|https|inspector(?:/promises)?|module|net|os|path(?:/(?:posix|win32))?|perf_hooks|process|punycode|querystring|readline(?:/promises)?|repl|sqlite|stream(?:/(?:consumers|promises|web))?|string_decoder|sys|timers(?:/promises)?|tls|trace_events|tty|url|util(?:/types)?|v8|vm|wasi|worker_threads|zlib)(?:[/?#]|$)|@src/server(?:[/?#]|$)|@orkestrel/[^/]+/server(?:[/?#]|$)|(?:\\.\\./)+(?:server|src/server|app/server)(?:[/?#]|$))",
|
|
326
|
+
"message": "src/tailwindcss must not depend on Node or server-only modules"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"regex": "^(?:@src/bootstrap(?:[/?#]|$)|@orkestrel/[^/]+/bootstrap(?:[/?#]|$)|(?:\\.\\./)+(?:bootstrap|src/bootstrap)(?:[/?#]|$))",
|
|
330
|
+
"message": "src/tailwindcss must not import another styles face's TypeScript"
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"regex": "^(?:@src/styles(?:[/?#]|$)|@orkestrel/[^/]+/styles(?:[/?#]|$)|(?:\\.\\./)+(?:styles|src/styles)(?:[/?#]|$))",
|
|
334
|
+
"message": "src/tailwindcss must not import another styles face's TypeScript"
|
|
335
|
+
}
|
|
336
|
+
]
|
|
337
|
+
}
|
|
338
|
+
]
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"files": ["src/styles/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
|
|
343
|
+
"rules": {
|
|
344
|
+
"no-restricted-imports": [
|
|
345
|
+
"error",
|
|
346
|
+
{
|
|
347
|
+
"patterns": [
|
|
348
|
+
{
|
|
349
|
+
"regex": "^(?:(?:vue|vite)(?:[/?#]|$)|@(?:vue|vitejs)/|@(?:src|app)/vue(?:[/?#]|$)|@orkestrel/[^/]+/vue(?:[/?#]|$)|(?:\\.\\./)+(?:vue|src/vue|app/vue)(?:[/?#]|$))",
|
|
350
|
+
"message": "src/styles must not depend on Vue extension modules"
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"regex": "^(?:/|[A-Za-z]:[\\\\/])",
|
|
354
|
+
"message": "imports must not use machine-specific absolute paths"
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"regex": "^(?:[A-Za-mo-z][A-Za-z0-9+.-]*|n(?:[A-Za-np-z0-9+.-][A-Za-z0-9+.-]*)?|no(?:[A-Za-ce-z0-9+.-][A-Za-z0-9+.-]*)?|nod(?:[A-Za-df-z0-9+.-][A-Za-z0-9+.-]*)?|node[A-Za-z0-9+.-]+):",
|
|
358
|
+
"message": "imports must not use non-Node URL schemes"
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"regex": "(?:^|/)(?:[^/.][^/]*|\\.[^/.][^/]*|\\.\\.[^/]+)/\\.{1,2}(?:/|$)",
|
|
362
|
+
"message": "internal import paths must not contain noncanonical dot segments"
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
|
|
366
|
+
"message": "relative import paths must not contain normalized traversal segments"
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"regex": "\\\\",
|
|
370
|
+
"message": "import paths must use portable forward slashes"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"regex": "^typescript(?:[/?#]|$)",
|
|
374
|
+
"message": "the in-process compiler API is not a surface the fleet uses"
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"regex": "^(?:@app(?:[/?#]|$)|(?:\\.\\./)+app(?:[/?#]|$))",
|
|
378
|
+
"message": "src environments must not depend on private app modules"
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"regex": "^(?:node:|(?:_(?:http_(?:agent|client|common|incoming|outgoing|server)|stream_(?:duplex|passthrough|readable|transform|wrap|writable)|tls_(?:common|wrap))|assert(?:/strict)?|async_hooks|buffer|child_process|cluster|console|constants|crypto|dgram|diagnostics_channel|dns(?:/promises)?|domain|events|fs(?:/promises)?|http|http2|https|inspector(?:/promises)?|module|net|os|path(?:/(?:posix|win32))?|perf_hooks|process|punycode|querystring|readline(?:/promises)?|repl|sqlite|stream(?:/(?:consumers|promises|web))?|string_decoder|sys|timers(?:/promises)?|tls|trace_events|tty|url|util(?:/types)?|v8|vm|wasi|worker_threads|zlib)(?:[/?#]|$)|@src/server(?:[/?#]|$)|@orkestrel/[^/]+/server(?:[/?#]|$)|(?:\\.\\./)+(?:server|src/server|app/server)(?:[/?#]|$))",
|
|
382
|
+
"message": "src/styles must not depend on Node or server-only modules"
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"regex": "^(?:@src/bootstrap(?:[/?#]|$)|@orkestrel/[^/]+/bootstrap(?:[/?#]|$)|(?:\\.\\./)+(?:bootstrap|src/bootstrap)(?:[/?#]|$))",
|
|
386
|
+
"message": "src/styles must not import another styles face's TypeScript"
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"regex": "^(?:@src/tailwindcss(?:[/?#]|$)|@orkestrel/[^/]+/tailwindcss(?:[/?#]|$)|(?:\\.\\./)+(?:tailwindcss|src/tailwindcss)(?:[/?#]|$))",
|
|
390
|
+
"message": "src/styles must not import another styles face's TypeScript"
|
|
391
|
+
}
|
|
392
|
+
]
|
|
393
|
+
}
|
|
394
|
+
]
|
|
395
|
+
}
|
|
396
|
+
},
|
|
229
397
|
{
|
|
230
398
|
"files": ["src/vue/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
|
|
231
399
|
"rules": {
|