@orkestrel/scaffold 0.0.18 → 0.0.19

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 (65) hide show
  1. package/dist/host/AGENTS.md +4 -2
  2. package/dist/host/CLAUDE.md +22 -10
  3. package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +267 -0
  4. package/dist/host/agents/skills/enterprise-bootstrap/agents/openai.yaml +4 -0
  5. package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +609 -0
  6. package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +994 -0
  7. package/dist/host/agents/skills/enterprise-bootstrap/references/frontend-design.md +59 -0
  8. package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +312 -0
  9. package/dist/host/agents/skills/orkestrel-align-packages/references/integration.md +4 -13
  10. package/dist/host/agents/skills/orkestrel-build-application/SKILL.md +78 -50
  11. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +81 -0
  12. package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +4 -0
  13. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +75 -0
  14. package/dist/host/agents/skills/orkestrel-harden-package/SKILL.md +11 -9
  15. package/dist/host/agents/skills/orkestrel-harden-package/references/centralization.md +44 -59
  16. package/dist/host/agents/skills/orkestrel-harden-package/references/hardening.md +14 -6
  17. package/dist/host/agents/skills/orkestrel-polish-surface/SKILL.md +113 -0
  18. package/dist/host/agents/skills/orkestrel-polish-surface/agents/openai.yaml +4 -0
  19. package/dist/host/agents/skills/orkestrel-polish-surface/references/capture-harness.md +82 -0
  20. package/dist/host/claude/agents/builder.md +2 -0
  21. package/dist/host/claude/agents/codex.md +33 -26
  22. package/dist/host/claude/agents/grok.md +7 -0
  23. package/dist/host/claude/agents/implementer.md +2 -1
  24. package/dist/host/claude/agents/orkestrel.md +20 -15
  25. package/dist/host/claude/agents/planner.md +2 -1
  26. package/dist/host/claude/agents/reviewer.md +6 -0
  27. package/dist/host/claude/rules/documentation.md +1 -0
  28. package/dist/host/claude/rules/names.md +5 -7
  29. package/dist/host/claude/rules/quality.md +7 -5
  30. package/dist/host/claude/rules/styles.md +1 -0
  31. package/dist/host/claude/rules/tests.md +1 -0
  32. package/dist/host/claude/rules/typescript.md +3 -10
  33. package/dist/host/claude/rules/workspace.md +2 -5
  34. package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +12 -0
  35. package/dist/host/claude/skills/orkestrel-debrief/SKILL.md +12 -0
  36. package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +12 -0
  37. package/dist/host/codex/agents/analyst.toml +6 -3
  38. package/dist/host/codex/agents/builder.toml +3 -2
  39. package/dist/host/codex/agents/checker.toml +4 -2
  40. package/dist/host/codex/agents/grok.toml +3 -1
  41. package/dist/host/codex/agents/implementer.toml +4 -2
  42. package/dist/host/codex/agents/opus.toml +5 -3
  43. package/dist/host/codex/agents/orkestrel.toml +6 -5
  44. package/dist/host/codex/agents/planner.toml +6 -2
  45. package/dist/host/codex/agents/reviewer.toml +7 -2
  46. package/dist/host/codex/config.toml +11 -2
  47. package/dist/host/dotfiles/prettierignore +3 -0
  48. package/dist/host/guides/src/scaffold.md +42 -12
  49. package/dist/host/manifest.json +80 -9
  50. package/dist/src/core/index.cjs +162 -14
  51. package/dist/src/core/index.cjs.map +1 -1
  52. package/dist/src/core/index.d.cts +17 -6
  53. package/dist/src/core/index.d.ts +17 -6
  54. package/dist/src/core/index.js +162 -15
  55. package/dist/src/core/index.js.map +1 -1
  56. package/dist/src/server/index.cjs +9 -3
  57. package/dist/src/server/index.cjs.map +1 -1
  58. package/dist/src/server/index.d.cts +2 -1
  59. package/dist/src/server/index.d.ts +2 -1
  60. package/dist/src/server/index.js +10 -4
  61. package/dist/src/server/index.js.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/host/agents/skills/orkestrel-build-application/references/application.md +0 -129
  64. package/dist/host/claude/agents/application.md +0 -30
  65. package/dist/host/codex/agents/application.toml +0 -25
@@ -1,5 +1,35 @@
1
1
  {
2
2
  "entries": [
3
+ {
4
+ "storage": "agents/skills/enterprise-bootstrap/SKILL.md",
5
+ "destination": ".agents/skills/enterprise-bootstrap/SKILL.md",
6
+ "executable": false
7
+ },
8
+ {
9
+ "storage": "agents/skills/enterprise-bootstrap/agents/openai.yaml",
10
+ "destination": ".agents/skills/enterprise-bootstrap/agents/openai.yaml",
11
+ "executable": false
12
+ },
13
+ {
14
+ "storage": "agents/skills/enterprise-bootstrap/references/bootstrap-reference.md",
15
+ "destination": ".agents/skills/enterprise-bootstrap/references/bootstrap-reference.md",
16
+ "executable": false
17
+ },
18
+ {
19
+ "storage": "agents/skills/enterprise-bootstrap/references/components.md",
20
+ "destination": ".agents/skills/enterprise-bootstrap/references/components.md",
21
+ "executable": false
22
+ },
23
+ {
24
+ "storage": "agents/skills/enterprise-bootstrap/references/frontend-design.md",
25
+ "destination": ".agents/skills/enterprise-bootstrap/references/frontend-design.md",
26
+ "executable": false
27
+ },
28
+ {
29
+ "storage": "agents/skills/enterprise-bootstrap/references/utilities.md",
30
+ "destination": ".agents/skills/enterprise-bootstrap/references/utilities.md",
31
+ "executable": false
32
+ },
3
33
  {
4
34
  "storage": "agents/skills/orkestrel-align-packages/SKILL.md",
5
35
  "destination": ".agents/skills/orkestrel-align-packages/SKILL.md",
@@ -31,8 +61,18 @@
31
61
  "executable": false
32
62
  },
33
63
  {
34
- "storage": "agents/skills/orkestrel-build-application/references/application.md",
35
- "destination": ".agents/skills/orkestrel-build-application/references/application.md",
64
+ "storage": "agents/skills/orkestrel-debrief/SKILL.md",
65
+ "destination": ".agents/skills/orkestrel-debrief/SKILL.md",
66
+ "executable": false
67
+ },
68
+ {
69
+ "storage": "agents/skills/orkestrel-debrief/agents/openai.yaml",
70
+ "destination": ".agents/skills/orkestrel-debrief/agents/openai.yaml",
71
+ "executable": false
72
+ },
73
+ {
74
+ "storage": "agents/skills/orkestrel-debrief/references/field-testing.md",
75
+ "destination": ".agents/skills/orkestrel-debrief/references/field-testing.md",
36
76
  "executable": false
37
77
  },
38
78
  {
@@ -66,8 +106,18 @@
66
106
  "executable": false
67
107
  },
68
108
  {
69
- "storage": "claude/agents/application.md",
70
- "destination": ".claude/agents/application.md",
109
+ "storage": "agents/skills/orkestrel-polish-surface/SKILL.md",
110
+ "destination": ".agents/skills/orkestrel-polish-surface/SKILL.md",
111
+ "executable": false
112
+ },
113
+ {
114
+ "storage": "agents/skills/orkestrel-polish-surface/agents/openai.yaml",
115
+ "destination": ".agents/skills/orkestrel-polish-surface/agents/openai.yaml",
116
+ "executable": false
117
+ },
118
+ {
119
+ "storage": "agents/skills/orkestrel-polish-surface/references/capture-harness.md",
120
+ "destination": ".agents/skills/orkestrel-polish-surface/references/capture-harness.md",
71
121
  "executable": false
72
122
  },
73
123
  {
@@ -175,6 +225,11 @@
175
225
  "destination": ".claude/settings.json",
176
226
  "executable": false
177
227
  },
228
+ {
229
+ "storage": "claude/skills/enterprise-bootstrap/SKILL.md",
230
+ "destination": ".claude/skills/enterprise-bootstrap/SKILL.md",
231
+ "executable": false
232
+ },
178
233
  {
179
234
  "storage": "claude/skills/orkestrel-align-packages/SKILL.md",
180
235
  "destination": ".claude/skills/orkestrel-align-packages/SKILL.md",
@@ -185,19 +240,24 @@
185
240
  "destination": ".claude/skills/orkestrel-build-application/SKILL.md",
186
241
  "executable": false
187
242
  },
243
+ {
244
+ "storage": "claude/skills/orkestrel-debrief/SKILL.md",
245
+ "destination": ".claude/skills/orkestrel-debrief/SKILL.md",
246
+ "executable": false
247
+ },
188
248
  {
189
249
  "storage": "claude/skills/orkestrel-harden-package/SKILL.md",
190
250
  "destination": ".claude/skills/orkestrel-harden-package/SKILL.md",
191
251
  "executable": false
192
252
  },
193
253
  {
194
- "storage": "codex/agents/analyst.toml",
195
- "destination": ".codex/agents/analyst.toml",
254
+ "storage": "claude/skills/orkestrel-polish-surface/SKILL.md",
255
+ "destination": ".claude/skills/orkestrel-polish-surface/SKILL.md",
196
256
  "executable": false
197
257
  },
198
258
  {
199
- "storage": "codex/agents/application.toml",
200
- "destination": ".codex/agents/application.toml",
259
+ "storage": "codex/agents/analyst.toml",
260
+ "destination": ".codex/agents/analyst.toml",
201
261
  "executable": false
202
262
  },
203
263
  {
@@ -349,22 +409,33 @@
349
409
  "roots": [
350
410
  ".agents",
351
411
  ".agents/skills",
412
+ ".agents/skills/enterprise-bootstrap",
413
+ ".agents/skills/enterprise-bootstrap/agents",
414
+ ".agents/skills/enterprise-bootstrap/references",
352
415
  ".agents/skills/orkestrel-align-packages",
353
416
  ".agents/skills/orkestrel-align-packages/agents",
354
417
  ".agents/skills/orkestrel-align-packages/references",
355
418
  ".agents/skills/orkestrel-build-application",
356
419
  ".agents/skills/orkestrel-build-application/agents",
357
- ".agents/skills/orkestrel-build-application/references",
420
+ ".agents/skills/orkestrel-debrief",
421
+ ".agents/skills/orkestrel-debrief/agents",
422
+ ".agents/skills/orkestrel-debrief/references",
358
423
  ".agents/skills/orkestrel-harden-package",
359
424
  ".agents/skills/orkestrel-harden-package/agents",
360
425
  ".agents/skills/orkestrel-harden-package/references",
426
+ ".agents/skills/orkestrel-polish-surface",
427
+ ".agents/skills/orkestrel-polish-surface/agents",
428
+ ".agents/skills/orkestrel-polish-surface/references",
361
429
  ".claude",
362
430
  ".claude/agents",
363
431
  ".claude/rules",
364
432
  ".claude/skills",
433
+ ".claude/skills/enterprise-bootstrap",
365
434
  ".claude/skills/orkestrel-align-packages",
366
435
  ".claude/skills/orkestrel-build-application",
436
+ ".claude/skills/orkestrel-debrief",
367
437
  ".claude/skills/orkestrel-harden-package",
438
+ ".claude/skills/orkestrel-polish-surface",
368
439
  ".codex",
369
440
  ".codex/agents",
370
441
  ".cursor",
@@ -145,6 +145,8 @@ var HOST_PATHS = Object.freeze([
145
145
  var SERVICE_SCRIPT_PATH = "scripts/service.sh";
146
146
  /** The consumer-owned Vitest global-setup module shared by its independently selected projects. */
147
147
  var GLOBAL_SETUP_PATH = "tests/setupGlobal.ts";
148
+ /** The consumer-owned Vite wrapper whose physical presence enables the optional app showcase. */
149
+ var SHOWCASE_CONFIG_PATH = "configs/app/vite.showcase.config.ts";
148
150
  /** The package-name RegExp — lowercase alphanumeric-with-hyphens, letter-first. */
149
151
  var NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
150
152
  /** Maximum bare workspace name length beneath the generated `@orkestrel/` scope. */
@@ -227,7 +229,7 @@ var DEFAULT_VERSION = "0.0.1";
227
229
  /** The `engines.node` range the `blueprint` builder fills. */
228
230
  var DEFAULT_ENGINES = `>=${MINIMUM_NODE_VERSION}`;
229
231
  /** The devDependency range generated packages pin `@orkestrel/scaffold` at. */
230
- var SCAFFOLD_RANGE = "^0.0.18";
232
+ var SCAFFOLD_RANGE = "^0.0.19";
231
233
  /** Tooling versions shared by scaffold and every generated workspace. */
232
234
  var BASE_DEV_DEPENDENCIES = Object.freeze({
233
235
  "@microsoft/api-extractor": "^7.58.12",
@@ -427,7 +429,7 @@ function member(name, category, summary, environment = "core") {
427
429
  * `version` / `engines` default `DEFAULT_VERSION` / `DEFAULT_ENGINES`,
428
430
  * `src` defaults `['core']`, and `app` / `keywords` / `dependencies` /
429
431
  * `peers` / `extras` / `overrides` default `[]`, and `bin` / `integration` /
430
- * `service` / `global` default `false`. `description` is OMITTED entirely
432
+ * `service` / `global` / `showcase` default `false`. `description` is OMITTED entirely
431
433
  * when absent, so the result round-trips the exact-record `Blueprint` guard.
432
434
  * @returns A complete `Blueprint`.
433
435
  *
@@ -453,7 +455,8 @@ function blueprint(name, options) {
453
455
  bin: options?.bin ?? false,
454
456
  integration: options?.integration ?? false,
455
457
  service: options?.service ?? false,
456
- global: options?.global ?? false
458
+ global: options?.global ?? false,
459
+ showcase: options?.showcase ?? false
457
460
  };
458
461
  return options?.description === void 0 ? base : {
459
462
  ...base,
@@ -1361,6 +1364,11 @@ function validateBlueprint(spec) {
1361
1364
  text: "At least one src or app environment is required",
1362
1365
  blocking: true
1363
1366
  });
1367
+ if (spec.showcase && !spec.app.includes("browser")) questions.push({
1368
+ field: "showcase",
1369
+ text: "Showcase requires the app browser environment",
1370
+ blocking: true
1371
+ });
1364
1372
  if (spec.src.length > 0) {
1365
1373
  for (const environment of spec.src) if (!ENVIRONMENTS.includes(environment)) questions.push({
1366
1374
  field: "src",
@@ -1824,7 +1832,8 @@ function blueprintShape() {
1824
1832
  bin: (0, _orkestrel_contract.booleanShape)(),
1825
1833
  integration: (0, _orkestrel_contract.booleanShape)(),
1826
1834
  service: (0, _orkestrel_contract.booleanShape)(),
1827
- global: (0, _orkestrel_contract.booleanShape)()
1835
+ global: (0, _orkestrel_contract.booleanShape)(),
1836
+ showcase: (0, _orkestrel_contract.booleanShape)()
1828
1837
  });
1829
1838
  }
1830
1839
  /**
@@ -5561,6 +5570,7 @@ function devDependenciesFor(spec) {
5561
5570
  ...dependencies,
5562
5571
  ...spec.src.includes("browser") ? SOURCE_BROWSER_DEV_DEPENDENCIES : {},
5563
5572
  ...spec.app.includes("browser") ? APP_BROWSER_DEV_DEPENDENCIES : {},
5573
+ ...spec.showcase ? { "vite-plugin-singlefile": "^2.3.3" } : {},
5564
5574
  ...spec.bin ? { "@vitest/browser-playwright": SOURCE_BROWSER_DEV_DEPENDENCIES["@vitest/browser-playwright"] } : {}
5565
5575
  };
5566
5576
  }
@@ -5644,7 +5654,14 @@ function packageManifest(spec) {
5644
5654
  const runtime = spec.app.filter((environment) => environment !== "core");
5645
5655
  scripts["build:app"] = runtime.length > 0 ? runtime.map((environment) => `npm run build:app:${environment}`).join(" && ") : "npm run check:app:core";
5646
5656
  for (const environment of runtime) scripts[`build:app:${environment}`] = `vite build --config configs/app/vite.${environment}.config.ts`;
5647
- if (spec.app.includes("browser")) scripts.dev = "vite --config configs/app/vite.browser.config.ts";
5657
+ if (spec.app.includes("browser")) {
5658
+ scripts.dev = "vite --config configs/app/vite.browser.config.ts";
5659
+ if (spec.showcase) {
5660
+ scripts.showcase = `vite --config ${SHOWCASE_CONFIG_PATH}`;
5661
+ scripts["build:showcase"] = `vite build --config ${SHOWCASE_CONFIG_PATH}`;
5662
+ scripts.show = "npm run build:showcase && npm run copy dist/showcase/index.html demo/showcase.html";
5663
+ }
5664
+ }
5648
5665
  if (spec.app.includes("server")) {
5649
5666
  scripts.serve = "node dist/app/server/main.cjs";
5650
5667
  scripts["serve:build"] = "npm run build:app:server && npm run serve";
@@ -5762,20 +5779,22 @@ function rootTsconfig(src, app = []) {
5762
5779
  * @param src - The declared published `Environment[]`.
5763
5780
  * @param app - The declared application `Environment[]`, defaulting to none.
5764
5781
  * @param bin - Whether the workspace also builds its own executable.
5782
+ * @param showcase - Whether the workspace carries its optional app showcase.
5765
5783
  * @returns The machinery set the generated header renders.
5766
5784
  *
5767
5785
  * @example
5768
5786
  * ```ts
5769
- * viteMachinery(['core']) // { browser: false, vue: false, output: true }
5770
- * viteMachinery([], ['core']) // { browser: false, vue: false, output: false }
5787
+ * viteMachinery(['core']) // { browser: false, vue: false, output: true, showcase: false }
5788
+ * viteMachinery([], ['core']) // { browser: false, vue: false, output: false, showcase: false }
5771
5789
  * ```
5772
5790
  */
5773
- function viteMachinery(src, app = [], bin = false) {
5791
+ function viteMachinery(src, app = [], bin = false, showcase = false) {
5774
5792
  const unbuilt = src.length === 0 && app.length > 0 && !bin && app.every((environment) => environment === "core");
5775
5793
  return {
5776
5794
  browser: src.includes("browser") || app.includes("browser"),
5777
5795
  vue: app.includes("browser"),
5778
- output: !unbuilt
5796
+ output: !unbuilt,
5797
+ showcase: showcase && app.includes("browser")
5779
5798
  };
5780
5799
  }
5781
5800
  /**
@@ -5889,7 +5908,7 @@ ${renderedRegistrations.map((registration) => ` ${registration},`).join("\n")}
5889
5908
  * ```
5890
5909
  */
5891
5910
  function viteHeader(machinery) {
5892
- const { browser: needsBrowser, vue: needsVue, output: needsOutput } = machinery;
5911
+ const { browser: needsBrowser, vue: needsVue, output: needsOutput, showcase: needsShowcase } = machinery;
5893
5912
  const playwrightTypeImports = needsBrowser ? `import type { PlaywrightProviderOptions } from '@vitest/browser-playwright'
5894
5913
  ` : "";
5895
5914
  const playwrightImports = needsBrowser ? `import { playwright } from '@vitest/browser-playwright'
@@ -5897,6 +5916,8 @@ import { chromium } from 'playwright'
5897
5916
  ` : "";
5898
5917
  const vueImports = needsVue ? `import vue from '@vitejs/plugin-vue'
5899
5918
  import { parse as parseVue } from 'vue/compiler-sfc'
5919
+ ` : "";
5920
+ const showcaseImports = needsShowcase ? `import { viteSingleFile } from 'vite-plugin-singlefile'
5900
5921
  ` : "";
5901
5922
  const viteTypeImports = needsVue ? `import type {
5902
5923
  CSSOptions,
@@ -6956,6 +6977,31 @@ ${EXPORT_KEYWORD} function finalizeHtml(): Plugin {
6956
6977
  }
6957
6978
  }
6958
6979
 
6980
+ ` : ""}${needsShowcase ? `${EXPORT_KEYWORD} ${CONST_KEYWORD} SHOWCASE_SECURITY_POLICY =
6981
+ "base-uri 'none'; object-src 'none'; script-src 'self' 'unsafe-inline'; script-src-attr 'none'; style-src 'self' 'unsafe-inline'"
6982
+
6983
+ ${EXPORT_KEYWORD} function showcaseHtml(): Plugin {
6984
+ return {
6985
+ name: 'orkestrel-showcase-html',
6986
+ enforce: 'post',
6987
+ transformIndexHtml: {
6988
+ order: 'post',
6989
+ handler(html, context) {
6990
+ if (!isBrowserHtmlEntry(context.filename)) return undefined
6991
+ if (!html.includes(HTML_SECURITY_META)) {
6992
+ throw new Error('[orkestrel-showcase] Browser HTML must retain its security policy')
6993
+ }
6994
+ const stamp = new Date().toISOString()
6995
+ return html.replace(
6996
+ HTML_SECURITY_META,
6997
+ HTML_SECURITY_META.replace(HTML_SECURITY_POLICY, SHOWCASE_SECURITY_POLICY) +
6998
+ \`\\n\\t\\t<meta name="build-id" content="\${stamp}" />\`,
6999
+ )
7000
+ },
7001
+ },
7002
+ }
7003
+ }
7004
+
6959
7005
  ` : ""}${EXPORT_KEYWORD} async function environmentAssetSources(
6960
7006
  code: string,
6961
7007
  id: string,
@@ -7267,7 +7313,7 @@ ${needsBrowser ? `import {
7267
7313
  resolve as resolvePath,
7268
7314
  sep,
7269
7315
  } from 'node:path'` : `import { dirname, isAbsolute, relative, resolve as resolvePath, sep } from 'node:path'`}
7270
- ${playwrightImports}${vueImports}${needsBrowser ? `\n/** Chromium executable layouts inside a \`chromium-<revision>\` browsers-directory entry, per platform. */
7316
+ ${playwrightImports}${vueImports}${showcaseImports}${needsBrowser ? `\n/** Chromium executable layouts inside a \`chromium-<revision>\` browsers-directory entry, per platform. */
7271
7317
  ${EXPORT_KEYWORD} ${CONST_KEYWORD} CHROMIUM_LAYOUTS = Object.freeze([
7272
7318
  'chrome-linux/chrome',
7273
7319
  'chrome-linux64/chrome',
@@ -8016,7 +8062,7 @@ ${renderedTest}
8016
8062
  */
8017
8063
  function applicationViteConfig(src, app, facts = {}) {
8018
8064
  const hasSourceCore = src.includes("core");
8019
- const machinery = viteMachinery(src, app, facts.bin === true);
8065
+ const machinery = viteMachinery(src, app, facts.bin === true, facts.showcase === true);
8020
8066
  const header = viteHeader(machinery);
8021
8067
  const blocks = [];
8022
8068
  if (src.includes("core")) blocks.push(`
@@ -8161,8 +8207,98 @@ ${EXPORT_KEYWORD} const appCore = (config?: UserConfig): UserConfig =>
8161
8207
  config ?? {},
8162
8208
  )
8163
8209
  `);
8164
- if (app.includes("browser")) blocks.push(`
8165
- ${EXPORT_KEYWORD} function appBrowser(...config: readonly never[]): UserConfig {
8210
+ if (app.includes("browser")) blocks.push(facts.showcase === true ? `
8211
+ ${FUNCTION_KEYWORD} applicationBrowser(showcase: boolean): UserConfig {
8212
+ const output = showcase ? 'dist/showcase' : 'dist/app/browser'
8213
+ return {
8214
+ resolve,
8215
+ css: ENVIRONMENT_CSS,
8216
+ html: environmentHtml(),
8217
+ plugins: [
8218
+ restoreHtml(),
8219
+ outputBoundary(output),
8220
+ environmentBoundary('app/browser'),
8221
+ vue(),
8222
+ prepareHtml(),
8223
+ finalizeHtml(),
8224
+ ...(showcase
8225
+ ? [
8226
+ viteSingleFile({
8227
+ removeViteModuleLoader: true,
8228
+ useRecommendedBuildConfig: true,
8229
+ }),
8230
+ showcaseHtml(),
8231
+ ]
8232
+ : []),
8233
+ ],
8234
+ root: resolveWorkspacePath('app/browser'),
8235
+ publicDir: false,
8236
+ server: {
8237
+ fs: {
8238
+ strict: true,
8239
+ allow: [...browserServerRoots()],
8240
+ },
8241
+ },
8242
+ build: {
8243
+ ...(showcase
8244
+ ? {
8245
+ cssMinify: 'lightningcss',
8246
+ minify: 'oxc',
8247
+ modulePreload: false,
8248
+ reportCompressedSize: false,
8249
+ sourcemap: false,
8250
+ target: 'esnext',
8251
+ }
8252
+ : { assetsInlineLimit: 0 }),
8253
+ emptyOutDir: true,
8254
+ outDir: resolveWorkspacePath(output),
8255
+ rolldownOptions: {
8256
+ input: resolveWorkspacePath('${APP_MATRIX.browser.entry}'),
8257
+ },
8258
+ },
8259
+ test: {
8260
+ name: { label: '${APP_MATRIX.browser.project}', color: 'blue' },
8261
+ root: resolveWorkspacePath('.'),
8262
+ dir: resolveWorkspacePath('.'),
8263
+ include: ['tests/app/browser/**/*.test.ts'],
8264
+ setupFiles: ['./tests/setup.ts', './tests/setupBrowser.ts'],
8265
+ deps: {
8266
+ optimizer: {
8267
+ client: {
8268
+ enabled: true,
8269
+ include: ['vue', ...BROWSER_TEST_DEPENDENCIES],
8270
+ },
8271
+ },
8272
+ },
8273
+ browser: {
8274
+ enabled: true,
8275
+ provider: playwright(browserOptions),
8276
+ instances: [{ browser: 'chromium', headless: true }],
8277
+ },
8278
+ fileParallelism: false,
8279
+ },
8280
+ }
8281
+ }
8282
+
8283
+ ${EXPORT_KEYWORD} function appBrowser(...config: never[]): UserConfig {
8284
+ if (config.length > 0) {
8285
+ throw new Error(
8286
+ '[orkestrel-environment-boundary] Browser configuration overrides are not permitted by the generated boundary',
8287
+ )
8288
+ }
8289
+ return applicationBrowser(false)
8290
+ }
8291
+
8292
+ ${EXPORT_KEYWORD} function appShowcase(...config: never[]): UserConfig {
8293
+ if (config.length > 0) {
8294
+ throw new Error(
8295
+ '[orkestrel-environment-boundary] Showcase configuration overrides are not permitted by the generated boundary',
8296
+ )
8297
+ }
8298
+ return applicationBrowser(true)
8299
+ }
8300
+ ` : `
8301
+ ${EXPORT_KEYWORD} function appBrowser(...config: never[]): UserConfig {
8166
8302
  if (config.length > 0) {
8167
8303
  throw new Error(
8168
8304
  '[orkestrel-environment-boundary] Browser configuration overrides are not permitted by the generated boundary',
@@ -8642,6 +8778,17 @@ function configArtifacts(spec) {
8642
8778
  });
8643
8779
  }
8644
8780
  }
8781
+ if (spec.showcase) artifacts.push({
8782
+ path: SHOWCASE_CONFIG_PATH,
8783
+ group: "configs",
8784
+ origin: "computed",
8785
+ environment: "browser",
8786
+ content: `import { defineConfig } from 'vite'
8787
+ import { appShowcase } from '../../vite.config.ts'
8788
+
8789
+ export default defineConfig(appShowcase())
8790
+ `
8791
+ });
8645
8792
  return artifacts;
8646
8793
  }
8647
8794
  /**
@@ -9825,6 +9972,7 @@ exports.PlanManager = PlanManager;
9825
9972
  exports.SCAFFOLD_RANGE = SCAFFOLD_RANGE;
9826
9973
  exports.SERVICE_SCRIPT_PATH = SERVICE_SCRIPT_PATH;
9827
9974
  exports.SETUP_NODE_ACTION_SHA = SETUP_NODE_ACTION_SHA;
9975
+ exports.SHOWCASE_CONFIG_PATH = SHOWCASE_CONFIG_PATH;
9828
9976
  exports.SOURCE_BROWSER_DEV_DEPENDENCIES = SOURCE_BROWSER_DEV_DEPENDENCIES;
9829
9977
  exports.SRC_MATRIX = SRC_MATRIX;
9830
9978
  exports.SYNC_BASELINE_PATTERN = SYNC_BASELINE_PATTERN;