@forgeax/engine-devkit 0.1.4 → 0.1.7
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/README.md +162 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/cli-output.unit.test.d.ts +2 -0
- package/dist/__tests__/cli-output.unit.test.d.ts.map +1 -0
- package/dist/__tests__/engine-binding.unit.test.d.ts +2 -0
- package/dist/__tests__/engine-binding.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gltf-source-key-diagnostics.integration.test.d.ts +2 -0
- package/dist/__tests__/gltf-source-key-diagnostics.integration.test.d.ts.map +1 -0
- package/dist/__tests__/preview-port.integration.test.d.ts +2 -0
- package/dist/__tests__/preview-port.integration.test.d.ts.map +1 -0
- package/dist/__tests__/rhi-debug-build-graph.integration.test.d.ts +2 -0
- package/dist/__tests__/rhi-debug-build-graph.integration.test.d.ts.map +1 -0
- package/dist/__tests__/sdk-update.unit.test.d.ts +2 -0
- package/dist/__tests__/sdk-update.unit.test.d.ts.map +1 -0
- package/dist/__tests__/software-browser-session.unit.test.d.ts +2 -0
- package/dist/__tests__/software-browser-session.unit.test.d.ts.map +1 -0
- package/dist/__tests__/software-capture-pixels.unit.test.d.ts +2 -0
- package/dist/__tests__/software-capture-pixels.unit.test.d.ts.map +1 -0
- package/dist/__tests__/software-capture.unit.test.d.ts +2 -0
- package/dist/__tests__/software-capture.unit.test.d.ts.map +1 -0
- package/dist/assets.d.ts.map +1 -1
- package/dist/bootstrap-commands.d.ts.map +1 -1
- package/dist/cli-output.d.ts +4 -0
- package/dist/cli-output.d.ts.map +1 -0
- package/dist/cli.mjs +1863 -819
- package/dist/cli.mjs.map +1 -1
- package/dist/commands.d.ts +2 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/engine-binding.d.ts +58 -0
- package/dist/engine-binding.d.ts.map +1 -0
- package/dist/host/__tests__/bootstrap-root-owner.test-d.d.ts +2 -0
- package/dist/host/__tests__/bootstrap-root-owner.test-d.d.ts.map +1 -0
- package/dist/host/project-bootstrap.d.ts +4 -2
- package/dist/host/project-bootstrap.d.ts.map +1 -1
- package/dist/host/resource-bootstrap.d.ts +5 -3
- package/dist/host/resource-bootstrap.d.ts.map +1 -1
- package/dist/host.d.ts +2 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1714 -862
- package/dist/index.mjs.map +1 -1
- package/dist/project.d.ts +0 -1
- package/dist/project.d.ts.map +1 -1
- package/dist/rhi-debug/cli-context.d.ts.map +1 -1
- package/dist/rhi-debug/operations.d.ts +3 -3
- package/dist/rhi-debug/operations.d.ts.map +1 -1
- package/dist/sdk-bootstrap.d.ts +9 -0
- package/dist/sdk-bootstrap.d.ts.map +1 -1
- package/dist/sdk-cli.mjs +193 -25
- package/dist/sdk-cli.mjs.map +1 -1
- package/dist/sdk-install.d.ts.map +1 -1
- package/dist/sdk-update.d.ts +23 -0
- package/dist/sdk-update.d.ts.map +1 -0
- package/dist/software-capture.d.ts +123 -0
- package/dist/software-capture.d.ts.map +1 -0
- package/dist/tools/benchmark/__tests__/benchmark-vocabulary-owner.test-d.d.ts +2 -0
- package/dist/tools/benchmark/__tests__/benchmark-vocabulary-owner.test-d.d.ts.map +1 -0
- package/dist/tools/benchmark/harness.d.ts.map +1 -1
- package/dist/tools/browser-host.d.ts.map +1 -1
- package/dist/tools/commands.d.ts +5 -0
- package/dist/tools/commands.d.ts.map +1 -1
- package/dist/tools/native-preview.d.ts.map +1 -1
- package/dist/types.d.ts +28 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +32 -31
- package/dist/__tests__/tool-migration.test.d.ts +0 -2
- package/dist/__tests__/tool-migration.test.d.ts.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/archive.ts","../src/dist.ts","../src/host.ts","../src/project.ts","../src/assets.ts","../package.json","../src/init.ts","../src/sdk.ts","../src/sdk-bootstrap.ts","../src/skill-install.ts","../src/bootstrap-commands.ts","../src/plugin-authoring.ts","../../rhi/src/errors.ts","../../rhi-null/src/command-encoder.ts","../../rhi-null/src/bookkeeping.ts","../../rhi-null/src/canvas-context.ts","../../rhi-null/src/shader.ts","../../rhi-null/src/index.ts","../../rhi-null/src/pass-encoders.ts","../../rhi-null/src/device.ts","../../rhi-null/src/queue.ts","../../rhi-null/src/adapter.ts","../src/rhi-debug/cli-context.ts","../src/rhi-debug/operations.ts","../src/sdk-install.ts","../src/shader-check.ts","../src/commands.ts","../src/tools/preview-catalog.ts","../src/tools/catalog.ts","../src/tools/preview-migration.ts","../src/tools/project-tools.ts","../src/tools/offline-analysis.ts","../src/tools/preview-contributions.ts","../src/tools/contributions.ts","../src/tools/runtime.ts","../src/index.ts","../src/tools/benchmark/statistics.ts","../src/tools/benchmark/report.ts","../src/tools/benchmark/harness.ts","../src/tools/bootstrap.ts","../src/tools/cache.ts","../src/tools/carrier-provider.ts","../src/tools/carrier-rendezvous.ts","../src/tools/cli-adapter.ts","../src/tools/client.ts","../src/tools/library.ts","../src/tools/migration.ts","../src/tools/browser-host.ts","../src/tools/preview-host.ts","../src/tools/private-executor.ts","../src/tools/realms.ts","../src/tools/service.ts","../src/tools/service-transport.ts"],"names":["entries","resolve","writeFile","readdir","readFile","relative","sep","moduleSpecifier","stat","devDependencies","dirname","fileURLToPath","mkdir","filesUnder","cp","rm","basename","isAbsolute","execFileAsync","mkdtemp","promisify","execFile","rename","GameProjectSchema","err","ok","RhiErrorClass","init_dist","tmpdir","viteBuild","sha256","createHash","vitePreview","createServer","projectPluginEntries","createToolRuntime","commandFailure","defineTool","buildCommand","pluginInstallCommand","capabilityUnavailableError","missingTool","runProjectTool","createServiceCapability","createTcpServer","validatePreviewArtifactManifest","value","failure","domainFailureError","readJson","reply"],"mappings":"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","file":"index.mjs","sourcesContent":["import { deflateRawSync } from 'node:zlib';\n\nexport interface ZipEntry {\n readonly path: string;\n readonly bytes: Uint8Array;\n}\n\nconst ZIP32_LIMIT = 0xffff_ffff;\nconst ZIP_ENTRY_LIMIT = 0xffff;\nconst UTF8_FLAG = 0x0800;\nconst DEFLATE_METHOD = 8;\nconst DOS_EPOCH_DATE = 0x0021;\n\nconst CRC_TABLE = new Uint32Array(256);\nfor (let index = 0; index < CRC_TABLE.length; index += 1) {\n let value = index;\n for (let bit = 0; bit < 8; bit += 1) value = (value >>> 1) ^ (0xedb8_8320 & -(value & 1));\n CRC_TABLE[index] = value >>> 0;\n}\n\nfunction crc32(bytes: Uint8Array): number {\n let value = 0xffff_ffff;\n for (const byte of bytes) value = (value >>> 8) ^ (CRC_TABLE[(value ^ byte) & 0xff] ?? 0);\n return (value ^ 0xffff_ffff) >>> 0;\n}\n\nfunction assertArchivePath(path: string): void {\n if (\n path.length === 0 ||\n path.startsWith('/') ||\n path.includes('\\\\') ||\n path.split('/').some((segment) => segment.length === 0 || segment === '.' || segment === '..')\n ) {\n throw new TypeError(`invalid ZIP entry path: ${path}`);\n }\n}\n\nexport function createZip(entriesInput: readonly ZipEntry[]): Buffer {\n if (entriesInput.length > ZIP_ENTRY_LIMIT) throw new RangeError('ZIP32 entry limit exceeded');\n const entries = [...entriesInput].sort((left, right) => left.path.localeCompare(right.path));\n const seen = new Set<string>();\n const localParts: Buffer[] = [];\n const centralParts: Buffer[] = [];\n let offset = 0;\n\n for (const entry of entries) {\n assertArchivePath(entry.path);\n if (seen.has(entry.path)) throw new TypeError(`duplicate ZIP entry path: ${entry.path}`);\n seen.add(entry.path);\n const name = Buffer.from(entry.path, 'utf8');\n const source = Buffer.from(entry.bytes);\n const compressed = deflateRawSync(source, { level: 9 });\n if (source.byteLength > ZIP32_LIMIT || compressed.byteLength > ZIP32_LIMIT) {\n throw new RangeError(`ZIP32 file limit exceeded: ${entry.path}`);\n }\n const checksum = crc32(source);\n const local = Buffer.alloc(30);\n local.writeUInt32LE(0x0403_4b50, 0);\n local.writeUInt16LE(20, 4);\n local.writeUInt16LE(UTF8_FLAG, 6);\n local.writeUInt16LE(DEFLATE_METHOD, 8);\n local.writeUInt16LE(0, 10);\n local.writeUInt16LE(DOS_EPOCH_DATE, 12);\n local.writeUInt32LE(checksum, 14);\n local.writeUInt32LE(compressed.byteLength, 18);\n local.writeUInt32LE(source.byteLength, 22);\n local.writeUInt16LE(name.byteLength, 26);\n local.writeUInt16LE(0, 28);\n localParts.push(local, name, compressed);\n\n const central = Buffer.alloc(46);\n central.writeUInt32LE(0x0201_4b50, 0);\n central.writeUInt16LE(20, 4);\n central.writeUInt16LE(20, 6);\n central.writeUInt16LE(UTF8_FLAG, 8);\n central.writeUInt16LE(DEFLATE_METHOD, 10);\n central.writeUInt16LE(0, 12);\n central.writeUInt16LE(DOS_EPOCH_DATE, 14);\n central.writeUInt32LE(checksum, 16);\n central.writeUInt32LE(compressed.byteLength, 20);\n central.writeUInt32LE(source.byteLength, 24);\n central.writeUInt16LE(name.byteLength, 28);\n central.writeUInt16LE(0, 30);\n central.writeUInt16LE(0, 32);\n central.writeUInt16LE(0, 34);\n central.writeUInt16LE(0, 36);\n central.writeUInt32LE(0, 38);\n central.writeUInt32LE(offset, 42);\n centralParts.push(central, name);\n\n offset += local.byteLength + name.byteLength + compressed.byteLength;\n if (offset > ZIP32_LIMIT) throw new RangeError('ZIP32 archive limit exceeded');\n }\n\n const centralDirectory = Buffer.concat(centralParts);\n if (centralDirectory.byteLength > ZIP32_LIMIT)\n throw new RangeError('ZIP32 directory limit exceeded');\n const end = Buffer.alloc(22);\n end.writeUInt32LE(0x0605_4b50, 0);\n end.writeUInt16LE(entries.length, 8);\n end.writeUInt16LE(entries.length, 10);\n end.writeUInt32LE(centralDirectory.byteLength, 12);\n end.writeUInt32LE(offset, 16);\n return Buffer.concat([...localParts, centralDirectory, end]);\n}\n","import { createHash } from 'node:crypto';\nimport { readdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { relative, resolve, sep } from 'node:path';\nimport type { CommandResult, ProjectFacts } from './types.js';\n\ninterface DistArtifact {\n readonly path: string;\n readonly mediaType: string;\n readonly bytes: number;\n readonly sha256: string;\n}\n\nexport interface DistManifest {\n readonly schemaVersion: '1.0.0';\n readonly project: { readonly id: string; readonly name: string };\n readonly base: string;\n readonly runtime: {\n readonly packIndexUrl: string;\n readonly shaderManifestUrl: string;\n };\n readonly artifacts: readonly DistArtifact[];\n}\n\nfunction mediaType(path: string): string {\n if (path.endsWith('.html')) return 'text/html';\n if (path.endsWith('.js') || path.endsWith('.mjs')) return 'text/javascript';\n if (path.endsWith('.json')) return 'application/json';\n if (path.endsWith('.wasm')) return 'application/wasm';\n if (path.endsWith('.png')) return 'image/png';\n if (path.endsWith('.jpg') || path.endsWith('.jpeg')) return 'image/jpeg';\n return 'application/octet-stream';\n}\n\nasync function filesUnder(root: string, directory = root): Promise<string[]> {\n const result: string[] = [];\n for (const name of (await readdir(directory)).sort()) {\n const path = resolve(directory, name);\n const info = await stat(path);\n if (info.isDirectory()) result.push(...(await filesUnder(root, path)));\n else if (info.isFile() && name !== 'forgeax-dist.json') result.push(path);\n }\n return result;\n}\n\nexport async function writeDistManifest(\n facts: ProjectFacts,\n base: string,\n rootInput = resolve(facts.root, 'dist'),\n): Promise<DistManifest> {\n const root = resolve(rootInput);\n const artifacts = await Promise.all(\n (await filesUnder(root)).map(async (path): Promise<DistArtifact> => {\n const bytes = await readFile(path);\n return {\n path: relative(root, path).split(sep).join('/'),\n mediaType: mediaType(path),\n bytes: bytes.byteLength,\n sha256: createHash('sha256').update(bytes).digest('hex'),\n };\n }),\n );\n const manifest: DistManifest = {\n schemaVersion: '1.0.0',\n project: { id: facts.id, name: facts.name },\n base,\n runtime: {\n packIndexUrl: 'pack-index.json',\n shaderManifestUrl: 'shaders/manifest.json',\n },\n artifacts,\n };\n await writeFile(resolve(root, 'forgeax-dist.json'), `${JSON.stringify(manifest, null, 2)}\\n`);\n return manifest;\n}\n\nexport async function verifyDist(rootInput: string): Promise<CommandResult<DistManifest>> {\n const root = resolve(rootInput);\n let manifest: DistManifest;\n try {\n manifest = JSON.parse(\n await readFile(resolve(root, 'forgeax-dist.json'), 'utf8'),\n ) as DistManifest;\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'dist-manifest-unreadable',\n expected: 'a readable dist/forgeax-dist.json',\n hint: 'Run forgeax build and do not edit its derived manifest.',\n detail: { root, reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n if (manifest.schemaVersion !== '1.0.0' || !Array.isArray(manifest.artifacts)) {\n return {\n ok: false,\n error: {\n code: 'dist-manifest-invalid',\n expected: 'forgeax-dist schema 1.0.0',\n hint: 'Rebuild the game with a compatible ForgeaX DevKit.',\n detail: { root },\n },\n };\n }\n const declaredPaths = new Set(manifest.artifacts.map((artifact) => artifact.path));\n if (declaredPaths.size !== manifest.artifacts.length) {\n return {\n ok: false,\n error: {\n code: 'dist-artifact-duplicate',\n expected: 'every dist artifact path to be declared exactly once',\n hint: 'Rebuild the derived dist manifest.',\n detail: { root },\n },\n };\n }\n for (const artifact of manifest.artifacts) {\n const path = resolve(root, artifact.path);\n if (relative(root, path).startsWith('..')) {\n return {\n ok: false,\n error: {\n code: 'dist-path-escape',\n expected: 'every artifact path to remain inside dist',\n hint: 'Rebuild the derived dist manifest.',\n detail: { path: artifact.path },\n },\n };\n }\n try {\n const bytes = await readFile(path);\n const digest = createHash('sha256').update(bytes).digest('hex');\n if (bytes.byteLength !== artifact.bytes || digest !== artifact.sha256) {\n return {\n ok: false,\n error: {\n code: 'dist-artifact-mismatch',\n expected: 'artifact bytes and SHA-256 to match forgeax-dist.json',\n hint: 'Restore the built artifact or rebuild the complete dist.',\n detail: { path: artifact.path },\n },\n };\n }\n } catch {\n return {\n ok: false,\n error: {\n code: 'dist-artifact-missing',\n expected: 'every declared dist artifact to exist',\n hint: 'Restore the built artifact or rebuild the complete dist.',\n detail: { path: artifact.path },\n },\n };\n }\n }\n for (const required of [\n 'index.html',\n manifest.runtime.packIndexUrl,\n manifest.runtime.shaderManifestUrl,\n ]) {\n if (!manifest.artifacts.some((artifact) => artifact.path === required)) {\n return {\n ok: false,\n error: {\n code: 'dist-required-artifact-missing',\n expected: 'HTML, Pack index, and Shader manifest in the dist closure',\n hint: 'Rebuild after repairing the owning producer.',\n detail: { path: required },\n },\n };\n }\n }\n for (const path of await filesUnder(root)) {\n const artifactPath = relative(root, path).split(sep).join('/');\n if (!declaredPaths.has(artifactPath)) {\n return {\n ok: false,\n error: {\n code: 'dist-artifact-undeclared',\n expected: 'every file in dist to be covered by forgeax-dist.json',\n hint: 'Remove the foreign file or rebuild the complete dist.',\n detail: { path: artifactPath },\n },\n };\n }\n }\n return { ok: true, value: manifest };\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport { dirname, relative, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { audioImporter } from '@forgeax/engine-audio-webaudio/audio-importer';\nimport { fbxImporter } from '@forgeax/engine-fbx';\nimport { fontImporter } from '@forgeax/engine-font/font-importer';\nimport { gltfImporter } from '@forgeax/engine-gltf';\nimport { imageImporter } from '@forgeax/engine-image/image-importer';\nimport { BUILTIN_MESH_ASSETS } from '@forgeax/engine-pack/builtin';\nimport { scanInventory } from '@forgeax/engine-pack/scanner';\nimport { validateCanonicalKitReceipt } from '@forgeax/engine-preview';\nimport { createMaterialPackCooker } from '@forgeax/engine-shader-compiler';\nimport { createStandaloneRuntimeAssetBinding, type Importer } from '@forgeax/engine-types';\nimport { createParticleCodeNativeCookerFromRoots } from '@forgeax/engine-vfx-compiler';\nimport { pluginPack, reloadAssetHost } from '@forgeax/engine-vite-plugin-pack';\nimport { forgeaxShader } from '@forgeax/engine-vite-plugin-shader';\nimport type { InlineConfig, Plugin } from 'vite';\nimport type { BootstrapRoot } from './host/base-host.js';\nimport type { ProjectFacts } from './types.js';\n\ninterface CatalogModule {\n readonly name: string;\n readonly realm: 'host' | 'engine';\n}\n\nexport function ignoreDevKitCatalogPath(path: string): boolean {\n const normalized = path.replace(/\\\\/g, '/');\n if (normalized.split('/').includes('shaders')) return true;\n if (!normalized.endsWith('.meta.json')) return false;\n try {\n const meta = JSON.parse(readFileSync(path, 'utf8')) as { importer?: unknown };\n return meta.importer === 'game-default-target-profile';\n } catch {\n return false;\n }\n}\n\nexport function devKitDdcRoots(projectRoot: string): {\n readonly buildCacheRoot: string;\n readonly projectDdcRoot: string;\n} {\n return {\n buildCacheRoot: resolve(projectRoot, '.forgeax', 'ddc', 'build-cache'),\n projectDdcRoot: resolve(projectRoot, '.forgeax', 'ddc', 'v2'),\n };\n}\n\nfunction isResourcePreviewIgnoredPath(path: string): boolean {\n return (\n ignoreDevKitCatalogPath(path) ||\n path.endsWith('.wgsl.meta.json') ||\n path.endsWith('target-profile.json.meta.json')\n );\n}\n\nfunction isProjectSourceIgnoredPath(path: string): boolean {\n return ignoreDevKitCatalogPath(path) || path.endsWith('.wgsl.meta.json');\n}\n\ninterface CanonicalKitLocation {\n readonly root: string;\n readonly guid: string;\n}\n\n/**\n * Materialize the Engine-owned procedural mesh descriptors missing from a\n * standalone project. The project remains the author of any descriptor it\n * explicitly carries (for example, the game-default template); generated\n * rows fill only the GUID closure required by legacy scenes that reference\n * Engine builtins without embedding a duplicate declaration.\n */\nasync function prepareBuiltinPack(\n projectRoots: readonly string[],\n generated: string,\n ignorePath: (path: string) => boolean,\n): Promise<string | undefined> {\n const inventory = await scanInventory(projectRoots, { ignorePath });\n if (!inventory.ok) return undefined;\n const declared = new Set<string>();\n for (const declaration of inventory.value.declarations.values()) {\n if (declaration.format === 'pack.json') {\n for (const asset of declaration.value.assets) declared.add(asset.guid.toLowerCase());\n continue;\n }\n for (const asset of declaration.value.subAssets) declared.add(asset.guid.toLowerCase());\n }\n const missing = BUILTIN_MESH_ASSETS.filter((asset) => !declared.has(asset.guid.toLowerCase()));\n if (missing.length === 0) return undefined;\n const packPath = resolve(generated, 'engine-builtins.pack.json');\n await writeFile(\n packPath,\n `${JSON.stringify(\n {\n schemaVersion: '2.0.0',\n kind: 'internal-text-package',\n assets: missing.map((asset) => ({\n guid: asset.guid,\n kind: 'mesh',\n payload: { geometry: asset.geometry },\n refs: [],\n artifacts: {},\n })),\n },\n null,\n 2,\n )}\\n`,\n 'utf8',\n );\n return packPath;\n}\n\nconst hostRequire = createRequire(import.meta.url);\n\ninterface EngineWorkspacePackage {\n readonly root: string;\n readonly manifest: Readonly<Record<string, unknown>>;\n}\n\ntype PackageExportValue = string | null | { readonly [key: string]: PackageExportValue };\n\nfunction findEngineWorkspaceRoot(): string | undefined {\n let cursor = dirname(fileURLToPath(import.meta.url));\n for (;;) {\n if (existsSync(resolve(cursor, 'pnpm-workspace.yaml'))) return cursor;\n const parent = dirname(cursor);\n if (parent === cursor) return undefined;\n cursor = parent;\n }\n}\n\nlet engineWorkspacePackagesPromise:\n | Promise<ReadonlyMap<string, EngineWorkspacePackage>>\n | undefined;\n\nasync function engineWorkspacePackages(): Promise<ReadonlyMap<string, EngineWorkspacePackage>> {\n if (engineWorkspacePackagesPromise !== undefined) return engineWorkspacePackagesPromise;\n engineWorkspacePackagesPromise = (async () => {\n const workspaceRoot = findEngineWorkspaceRoot();\n if (workspaceRoot === undefined) return new Map<string, EngineWorkspacePackage>();\n const packageRoot = resolve(workspaceRoot, 'packages');\n // A generated game is a pnpm workspace too, but it does not own a local\n // `packages/` tree. Its installed Engine packages are resolved by Node;\n // the workspace resolver is only an SDK/source-checkout fallback.\n if (!existsSync(packageRoot)) return new Map<string, EngineWorkspacePackage>();\n const packages = new Map<string, EngineWorkspacePackage>();\n for (const entry of await readdir(packageRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const root = resolve(packageRoot, entry.name);\n try {\n const manifest = JSON.parse(\n await readFile(resolve(root, 'package.json'), 'utf8'),\n ) as unknown;\n if (manifest === null || typeof manifest !== 'object') continue;\n const name = (manifest as { readonly name?: unknown }).name;\n if (typeof name === 'string' && name.startsWith('@forgeax/engine-')) {\n packages.set(name, { root, manifest: manifest as Readonly<Record<string, unknown>> });\n }\n } catch {\n // A partial SDK/source checkout may omit an unrelated package manifest. The\n // package remains resolvable from the consumer project when available.\n }\n }\n return packages;\n })();\n return engineWorkspacePackagesPromise;\n}\n\nfunction conditionalExport(value: PackageExportValue): string | undefined {\n if (typeof value === 'string') return value;\n if (value === null || Array.isArray(value)) return undefined;\n for (const condition of ['browser', 'import', 'node', 'default']) {\n const candidate = value[condition];\n if (candidate === undefined) continue;\n const selected = conditionalExport(candidate);\n if (selected !== undefined) return selected;\n }\n return undefined;\n}\n\nfunction packageExportTarget(\n manifest: Readonly<Record<string, unknown>>,\n subpath: string,\n): string | undefined {\n const exportsValue = manifest.exports as PackageExportValue | undefined;\n if (exportsValue === undefined) {\n if (subpath.length > 0) return undefined;\n const main = manifest.module ?? manifest.main;\n return typeof main === 'string' ? main : undefined;\n }\n if (typeof exportsValue === 'string' || exportsValue === null) {\n return subpath.length === 0 ? conditionalExport(exportsValue) : undefined;\n }\n const keys = Object.keys(exportsValue);\n const subpathMap = keys.some((key) => key === '.' || key.startsWith('./'));\n if (!subpathMap) return subpath.length === 0 ? conditionalExport(exportsValue) : undefined;\n const requested = subpath.length === 0 ? '.' : `./${subpath}`;\n const exact = exportsValue[requested];\n if (exact !== undefined) return conditionalExport(exact);\n for (const key of keys) {\n const marker = key.indexOf('*');\n if (marker < 0) continue;\n const prefix = key.slice(0, marker);\n const suffix = key.slice(marker + 1);\n if (!requested.startsWith(prefix) || !requested.endsWith(suffix)) continue;\n const replacement = requested.slice(prefix.length, requested.length - suffix.length);\n const exportTarget = exportsValue[key];\n if (exportTarget === undefined) continue;\n const selected = conditionalExport(exportTarget);\n return selected?.replaceAll('*', replacement);\n }\n return undefined;\n}\n\nfunction engineWorkspaceImport(\n source: string,\n packages: ReadonlyMap<string, EngineWorkspacePackage>,\n): string | undefined {\n if (!source.startsWith('@forgeax/engine-')) return undefined;\n const separator = source.indexOf('/', '@forgeax/engine-'.length);\n const packageName = separator < 0 ? source : source.slice(0, separator);\n const subpath = separator < 0 ? '' : source.slice(separator + 1);\n const packageInfo = packages.get(packageName);\n if (packageInfo === undefined) return undefined;\n const target = packageExportTarget(packageInfo.manifest, subpath);\n if (target === undefined) return undefined;\n const absolute = resolve(packageInfo.root, target);\n const inside = relative(packageInfo.root, absolute);\n if (inside === '..' || inside.startsWith(`..${sep}`) || absolute === packageInfo.root) {\n return undefined;\n }\n return absolute;\n}\n\nasync function createEngineWorkspaceResolver(): Promise<Plugin | undefined> {\n const packages = await engineWorkspacePackages();\n if (packages.size === 0) return undefined;\n return {\n name: 'forgeax:devkit-engine-workspace-resolver',\n async resolveId(source, importer) {\n const bareSource = source.split('?', 1)[0] ?? source;\n if (!bareSource.startsWith('@forgeax/engine-')) return null;\n try {\n const resolved = await this.resolve(source, importer, { skipSelf: true });\n if (resolved !== null) return resolved;\n } catch {\n // Fall through to the Engine workspace only when the external project\n // has no installed copy of this package.\n }\n return engineWorkspaceImport(bareSource, packages);\n },\n };\n}\n\nasync function consumerEngineAliases(\n projectRoot: string,\n): Promise<readonly { readonly find: string; readonly replacement: string }[]> {\n const root = resolve(projectRoot, 'node_modules', '.pnpm', 'node_modules', '@forgeax');\n try {\n const entries = await readdir(root, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory() && entry.name.startsWith('engine-'))\n .map((entry) => ({\n find: `@forgeax/${entry.name}`,\n replacement: resolve(root, entry.name),\n }))\n .sort((a, b) => a.find.localeCompare(b.find));\n } catch {\n return [];\n }\n}\n\nasync function resolveCanonicalKit(): Promise<CanonicalKitLocation> {\n const packageJson = hostRequire.resolve('@forgeax/engine-preview/package.json');\n const root = resolve(packageJson, '..', 'assets/canonical-kit');\n if (!existsSync(root)) throw new Error(`canonical preview kit root is missing: ${root}`);\n const receiptPath = resolve(root, 'cook-receipt.json');\n const receipt = validateCanonicalKitReceipt(JSON.parse(await readFile(receiptPath, 'utf8')));\n if (!receipt.ok) {\n throw new Error(`${receipt.error.code}: ${receipt.error.detail.field}`);\n }\n const sourcePath = resolve(root, receipt.value.transport.source);\n const metaPath = resolve(root, receipt.value.transport.meta);\n if (!existsSync(sourcePath) || !existsSync(metaPath)) {\n throw new Error('canonical preview kit source and Meta must be package-owned files');\n }\n return { root, guid: receipt.value.source.guid };\n}\n\nfunction moduleSpecifier(from: string, to: string): string {\n const value = relative(from, to).split(sep).join('/');\n return value.startsWith('.') ? value : `./${value}`;\n}\n\nfunction catalogModules(facts: ProjectFacts): CatalogModule[] {\n const modules = new Map<string, CatalogModule>();\n const visit = (\n entries: ProjectFacts['plugins'],\n inheritedRealm: 'host' | 'engine' | 'build' = 'engine',\n ): void => {\n for (const entry of entries) {\n const realm = entry.realm ?? inheritedRealm;\n if (entry.group === true) {\n visit(entry.config as ProjectFacts['plugins'], realm);\n continue;\n }\n if (entry.name.startsWith('cordis:') || realm === 'build') continue;\n const current = modules.get(entry.name);\n if (current !== undefined && current.realm !== realm) {\n throw new Error(`plugin module ${entry.name} is assigned to multiple realms`);\n }\n modules.set(entry.name, { name: entry.name, realm });\n }\n };\n visit(facts.plugins);\n return [...modules.values()];\n}\n\nfunction catalogImport(facts: ProjectFacts, generated: string, name: string): string {\n const specifier = name.startsWith('.')\n ? moduleSpecifier(generated, resolve(facts.root, name))\n : name;\n return `() => import(${JSON.stringify(specifier)})`;\n}\n\ntype JitiLoader = (id: string) => unknown;\ntype JitiFactory = (filename: string, options: { readonly esmResolve: boolean }) => JitiLoader;\n\nfunction projectImporters(facts: ProjectFacts): readonly Importer[] {\n const specs = facts.assetImporters ?? [];\n if (specs.length === 0) return [];\n const createJiti = hostRequire('jiti') as JitiFactory;\n const load = createJiti(resolve(facts.root, 'package.json'), { esmResolve: true });\n return specs.map((spec) => {\n const separator = spec.lastIndexOf('#');\n const moduleSpecifier = separator < 0 ? spec : spec.slice(0, separator);\n const exportName = separator < 0 ? 'default' : spec.slice(separator + 1);\n const modulePath = moduleSpecifier.startsWith('.')\n ? resolve(facts.root, moduleSpecifier)\n : moduleSpecifier;\n const namespace = load(modulePath);\n if (namespace === null || typeof namespace !== 'object') {\n throw new Error(`project-asset-importer-module-invalid: ${spec}`);\n }\n const factory = (namespace as Record<string, unknown>)[exportName];\n if (typeof factory !== 'function') {\n throw new Error(`project-asset-importer-export-missing: ${spec}`);\n }\n const importer = factory();\n if (importer === null || typeof importer !== 'object') {\n throw new Error(`project-asset-importer-invalid: ${spec}`);\n }\n return importer as Importer;\n });\n}\n\nfunction hostSource(\n facts: ProjectFacts,\n bootstrapRoot: BootstrapRoot,\n canonicalEnvironmentGuid?: string,\n): string {\n const generated = resolve(facts.root, '.forgeax', 'generated');\n const plugins =\n bootstrapRoot === 'resource-bootstrap'\n ? []\n : [\n `webAudioPlugin()`,\n `audioPlugin()`,\n `skinningPlugin()`,\n ...(facts.physics === undefined\n ? []\n : [`physicsPlugin('${facts.physics === '2d' ? 'rapier-2d' : 'rapier-3d'}')`]),\n ];\n const bootstrapPlugin =\n facts.bootstrapEntry === undefined\n ? ''\n : `const bootstrapModule = await import(${JSON.stringify(\n moduleSpecifier(generated, resolve(facts.root, facts.bootstrapEntry)),\n )});\nif (typeof bootstrapModule.bootstrap !== 'function') {\n throw new Error('forgeax: project entry must export bootstrap(world, context)');\n}\nawait app.pluginContext.plugin({\n name: 'project-entry-bootstrap',\n inject: ['gameHost'],\n async apply(ctx) {\n if (ctx.gameHost === undefined) throw new Error('forgeax: gameHost unavailable');\n await bootstrapModule.bootstrap(ctx.gameHost.app.world, ctx.gameHost);\n },\n});`;\n return `import { forgeaxBundlerAdapter } from 'virtual:forgeax/bundler';\nimport { createApp, createToolPreviewHost, createToolPreviewRecipe, fitToolPreviewCameraToAabb, gameHostPlugin, replayToolPreviewCapture } from '@forgeax/engine/app';\nimport { createCatalogSource } from '@forgeax/engine/assets-runtime';\nimport { installCatalogLoader, projectPluginEntries } from '@forgeax/engine/plugin/loader';\nimport { audioPlugin } from '@forgeax/engine/audio';\nimport { webAudioPlugin } from '@forgeax/engine/audio-webaudio';\nimport { physicsPlugin } from '@forgeax/engine/physics';\nimport { skinningPlugin } from '@forgeax/engine/skinning';\nimport { createPrimitiveMesh } from '@forgeax/engine/geometry';\nimport { createDevImportTransport } from '@forgeax/engine/runtime';\nimport { mat4 } from '@forgeax/engine/math';\nimport { CAMERA_PROJECTION_ORTHOGRAPHIC, Camera, DirectionalLight, Materials, MeshFilter, MeshRenderer, Skylight, SkyboxBackground, TONEMAP_NONE, TONEMAP_REINHARD_EXTENDED } from '@forgeax/engine/render';\nimport { projectSceneAsset, Transform, worldInstantiateScene } from '@forgeax/engine/scene';\nimport { createStandaloneRuntimeAssetBinding } from '@forgeax/engine/types';\nimport { ParticleEffectPlayer, vfxGpuEffectContribution } from '@forgeax/engine/vfx';\nimport { createVfxRuntimeHost } from '@forgeax/engine/vfx-render';\n\nconst pluginCatalog = new Map([\n${catalogModules(facts)\n .map(\n ({ name, realm }) =>\n ` [${JSON.stringify(name)}, { realm: ${JSON.stringify(realm)}, load: ${catalogImport(facts, generated, name)} }],`,\n )\n .join('\\n')}\n]);\nconst pluginEntries = ${JSON.stringify(facts.plugins, null, 2)};\nconst bootstrapRoot = ${JSON.stringify(bootstrapRoot)};\nconst canonicalEnvironmentGuid = ${JSON.stringify(canonicalEnvironmentGuid ?? null)};\nconst resourceValue = new URLSearchParams(location.search).get('forgeax-resource-preview');\nconst resource = resourceValue === null ? undefined : JSON.parse(resourceValue);\nconst previewCameraEntities = new WeakMap();\nconst previewCameraTargets = new WeakMap();\nlet previewWorld;\nconst vfxRuntimeHost = resource?.kind === 'vfx'\n ? createVfxRuntimeHost({\n camera: {\n read(world) {\n const cameraEntity = previewCameraEntities.get(world);\n if (cameraEntity === undefined) return undefined;\n const transform = world.get(cameraEntity, Transform);\n const camera = world.get(cameraEntity, Camera);\n if (!transform.ok || !camera.ok) return undefined;\n const position = new Float32Array(transform.value.pos);\n const target = previewCameraTargets.get(world) ?? [0, 0, 0];\n return {\n position,\n right: new Float32Array([1, 0, 0]),\n up: new Float32Array([0, 1, 0]),\n viewProjection: mat4.computeViewProj(\n mat4.create(),\n position,\n target,\n [0, 1, 0],\n camera.value.fov,\n camera.value.aspect,\n camera.value.near,\n camera.value.far,\n ),\n };\n },\n },\n })\n : undefined;\n\nfunction previewVfxBounds(payload) {\n if (payload?.kind !== 'particle-effect' || payload.program?.emitters?.length === 0) return undefined;\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n for (const emitter of payload.program.emitters) {\n const bounds = emitter.bounds;\n if (bounds?.kind === 'sphere' && Array.isArray(bounds.center) && typeof bounds.radius === 'number') {\n const [x, y, z] = bounds.center;\n if (![x, y, z, bounds.radius].every((value) => typeof value === 'number' && Number.isFinite(value)) || bounds.radius < 0) return undefined;\n minX = Math.min(minX, x - bounds.radius);\n minY = Math.min(minY, y - bounds.radius);\n minZ = Math.min(minZ, z - bounds.radius);\n maxX = Math.max(maxX, x + bounds.radius);\n maxY = Math.max(maxY, y + bounds.radius);\n maxZ = Math.max(maxZ, z + bounds.radius);\n continue;\n }\n if (bounds?.kind === 'aabb' && Array.isArray(bounds.min) && Array.isArray(bounds.max)) {\n const [loX, loY, loZ] = bounds.min;\n const [hiX, hiY, hiZ] = bounds.max;\n if (![loX, loY, loZ, hiX, hiY, hiZ].every((value) => typeof value === 'number' && Number.isFinite(value))) return undefined;\n minX = Math.min(minX, loX);\n minY = Math.min(minY, loY);\n minZ = Math.min(minZ, loZ);\n maxX = Math.max(maxX, hiX);\n maxY = Math.max(maxY, hiY);\n maxZ = Math.max(maxZ, hiZ);\n continue;\n }\n return undefined;\n }\n if (![minX, minY, minZ, maxX, maxY, maxZ].every(Number.isFinite)) return undefined;\n const center = [(minX + maxX) / 2, (minY + maxY) / 2, (minZ + maxZ) / 2];\n const radius = Math.max(1, Math.hypot(maxX - minX, maxY - minY, maxZ - minZ));\n return { aabb: [minX, minY, minZ, maxX, maxY, maxZ], center, radius };\n}\n\nconst canvas = document.querySelector('#app');\nif (!(canvas instanceof HTMLCanvasElement)) throw new Error('forgeax: missing canvas');\nconst resizeCanvas = () => {\n const dpr = Math.min(window.devicePixelRatio || 1, 2);\n const width = Math.max(1, Math.round(canvas.clientWidth * dpr));\n const height = Math.max(1, Math.round(canvas.clientHeight * dpr));\n if (canvas.width !== width) canvas.width = width;\n if (canvas.height !== height) canvas.height = height;\n};\nconst resizeObserver = new ResizeObserver(resizeCanvas);\nresizeObserver.observe(canvas);\nresizeCanvas();\nconst runtimeScopeBinding = createStandaloneRuntimeAssetBinding(${JSON.stringify(facts.id)});\nconst assetCatalog = createCatalogSource({\n url: import.meta.env.DEV\n ? runtimeScopeBinding.catalogUrl\n : new URL('pack-index.json', document.baseURI).href,\n expectedScope: runtimeScopeBinding,\n});\nconst bundler = {\n ...forgeaxBundlerAdapter(),\n ...(import.meta.env.DEV ? { importTransport: createDevImportTransport(runtimeScopeBinding) } : {}),\n};\n\nfunction previewStable(value) {\n if (value instanceof ArrayBuffer) return 'ArrayBuffer:' + JSON.stringify(Array.from(new Uint8Array(value)));\n if (ArrayBuffer.isView(value)) return value.constructor.name + ':' + JSON.stringify(Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength)));\n if (Array.isArray(value)) return '[' + value.map(previewStable).join(',') + ']';\n if (value !== null && typeof value === 'object') {\n const record = value;\n return '{' + Object.keys(record).sort().map((key) => JSON.stringify(key) + ':' + previewStable(record[key])).join(',') + '}';\n }\n return JSON.stringify(value) ?? 'null';\n}\n\nasync function previewDigest(value) {\n const bytes = new TextEncoder().encode(previewStable(value));\n const digest = await crypto.subtle.digest('SHA-256', bytes);\n return 'sha256:' + Array.from(new Uint8Array(digest)).map((byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n\nasync function previewOwnerFacts(assets, resource, payload) {\n if (resource.kind === 'material') {\n const primaryPass = Array.isArray(payload.passes) ? payload.passes[0] : undefined;\n const program = primaryPass?.program?.module;\n const pass = primaryPass?.name;\n return {\n subjectDigest: await previewDigest(payload),\n bindingsDigest: await previewDigest(payload.passes),\n closureDigest: await previewDigest(payload.values ?? payload.passes),\n ...(typeof program === 'string' ? { program } : {}),\n ...(typeof pass === 'string' ? { pass } : {}),\n };\n }\n if (resource.kind === 'mesh') {\n return {\n subjectDigest: await previewDigest(payload),\n vertexDigest: await previewDigest(payload.vertices),\n indexDigest: await previewDigest(payload.indices ?? []),\n submeshDigest: await previewDigest(payload.submeshes),\n aabbDigest: await previewDigest(payload.aabb),\n };\n }\n if (resource.kind === 'texture') {\n const mipCount = typeof payload.mipLevelCount === 'number' ? payload.mipLevelCount : 1;\n const filter = 'linear';\n return {\n subjectDigest: await previewDigest(payload),\n boundDigest: await previewDigest({ width: payload.width, height: payload.height, format: payload.format }),\n uvDigest: await previewDigest({ offset: [0, 0], scale: [1, 1], rotation: 0 }),\n bindingDigest: await previewDigest({ format: payload.format, colorSpace: payload.colorSpace, filter, mipCount }),\n format: payload.format,\n colorSpace: payload.colorSpace,\n filter,\n mipCount,\n dimensions: [payload.width, payload.height],\n payloadClass: 'color',\n };\n }\n return undefined;\n}\n\nasync function prepareProject(app) {\npreviewWorld = app.world;\nconst assets = app.assets;\nlet canonicalEnvironment;\nif (resource !== undefined) {\n if (resource.kind !== 'texture') {\n if (canonicalEnvironmentGuid === null) throw new Error('canonical preview environment is unavailable');\n const environment = await assets.load(canonicalEnvironmentGuid, 'equirect');\n if (!environment.ok) throw environment.error;\n if (environment.value.kind !== 'equirect') {\n throw new Error(\\`canonical preview environment expected equirect, received \\${environment.value.kind}\\`);\n }\n if (environment.value.width <= 0 || environment.value.height <= 0 || environment.value.data.byteLength === 0) {\n throw new Error('canonical preview environment must provide decoded equirect pixels');\n }\n canonicalEnvironment = app.world.allocSharedRef('EquirectAsset', environment.value);\n }\n if (resource.kind === 'vfx') {\n if (vfxRuntimeHost === undefined) throw new Error('VFX preview host was not created');\n const attached = await vfxRuntimeHost.attachWorld({ world: app.world, assets });\n if (!attached.ok) throw attached.error;\n }\n const loaded = await assets.load(resource.guid, resource.kind === 'vfx' ? 'particle-effect' : resource.kind);\n if (!loaded.ok) throw loaded.error;\n const payload = loaded.value;\n if (resource.kind === 'vfx' && payload.kind !== 'particle-effect') {\n throw new Error(\\`VFX preview expected ParticleEffectAsset, received \\${payload.kind}\\`);\n }\n const vfxBounds = resource.kind === 'vfx' ? previewVfxBounds(payload) : undefined;\n if (resource.kind === 'vfx' && vfxBounds === undefined) {\n throw new Error('VFX preview owner did not publish finite emitter bounds');\n }\n const meshMaterialHandles = resource.kind === 'mesh' && payload.kind === 'mesh'\n ? await Promise.all(payload.materialSlots.map(async (slot) => {\n if (slot.defaultMaterial === undefined) return 0;\n const material = await assets.load(slot.defaultMaterial, 'material');\n if (!material.ok) throw material.error;\n if (material.value.kind !== 'material') {\n throw new Error('mesh material slot resolved to a non-material asset');\n }\n return app.world.allocSharedRef('MaterialAsset', material.value);\n }))\n : undefined;\n const meshHandle = resource.kind === 'mesh' && payload.kind === 'mesh'\n ? app.world.allocSharedRef('MeshAsset', payload)\n : app.world.internSharedRef(\n 'MeshAsset',\n createPrimitiveMesh(resource.kind === 'texture' ? 'quad' : 'sphere').unwrap(),\n );\n const textureHandle = resource.kind === 'texture' && payload.kind === 'texture'\n ? app.world.allocSharedRef('TextureAsset', payload)\n : undefined;\n if (textureHandle !== undefined && payload.kind === 'texture') {\n const bytes = payload.data instanceof Uint8ClampedArray\n ? new Uint8Array(payload.data.buffer, payload.data.byteOffset, payload.data.byteLength)\n : payload.data;\n const uploaded = await app.renderer.store.uploadTexture(textureHandle, payload, {\n bytes,\n width: payload.width,\n height: payload.height,\n mime: 'image/png',\n colorSpace: payload.colorSpace,\n mipmap: payload.mipmap,\n });\n if (!uploaded.ok) throw uploaded.error;\n }\n const materialPayload = resource.kind === 'texture' && payload.kind === 'texture'\n ? Materials.unlit([1, 1, 1, 1], { baseColorTexture: textureHandle })\n : resource.kind === 'material' && payload.kind === 'material'\n ? payload\n : undefined;\n const materialHandle = materialPayload === undefined\n ? undefined\n : app.world.allocSharedRef('MaterialAsset', materialPayload);\n const materialBindings = resource.kind === 'mesh'\n ? meshMaterialHandles\n : materialHandle === undefined\n ? undefined\n : [materialHandle];\n const rawAabb = payload.kind === 'mesh' ? payload.aabb : undefined;\n const aabb = rawAabb !== undefined && (Array.isArray(rawAabb) || ArrayBuffer.isView(rawAabb)) && rawAabb.length === 6\n ? Array.from(rawAabb)\n : resource.kind === 'mesh' && payload.kind === 'mesh'\n ? (() => { throw new Error('mesh owner did not publish a finite AABB'); })()\n : [-1, -1, -1, 1, 1, 1];\n const meshFrame = resource.kind === 'mesh'\n ? fitToolPreviewCameraToAabb(aabb, { aspect: 1, fov: Math.PI / 4 })\n : undefined;\n const textureWidth = resource.kind === 'texture' && payload.kind === 'texture' && typeof payload.width === 'number'\n ? Math.max(1, payload.width)\n : 1;\n const textureHeight = resource.kind === 'texture' && payload.kind === 'texture' && typeof payload.height === 'number'\n ? Math.max(1, payload.height)\n : 1;\n const textureAspect = textureWidth / textureHeight;\n const textureScale = textureAspect >= 1\n ? [textureAspect, 1, 1]\n : [1, 1 / textureAspect, 1];\n const center = meshFrame?.center ?? vfxBounds?.center ?? [(aabb[0] + aabb[3]) / 2, (aabb[1] + aabb[4]) / 2, (aabb[2] + aabb[5]) / 2];\n const radius = meshFrame?.radius ?? vfxBounds?.radius ?? Math.max(1, Math.hypot(aabb[3] - aabb[0], aabb[4] - aabb[1], aabb[5] - aabb[2]));\n const texturePreview = resource.kind === 'texture';\n if (resource.kind === 'vfx') {\n const effect = app.world.allocSharedRef('ParticleEffectAsset', payload);\n app.world.spawn(\n { component: Transform, data: { pos: center } },\n { component: ParticleEffectPlayer, data: { effect, playing: true, seed: 0, timeScale: 1 } },\n );\n } else {\n app.world.spawn(\n { component: Transform, data: { pos: center, ...(texturePreview ? { scale: textureScale } : {}) } },\n { component: MeshFilter, data: { assetHandle: meshHandle } },\n { component: MeshRenderer, data: materialBindings === undefined ? {} : { materials: materialBindings } },\n );\n }\n const cameraData = texturePreview\n ? {\n fov: 0,\n aspect: 1,\n near: 0.01,\n far: 100,\n projection: CAMERA_PROJECTION_ORTHOGRAPHIC,\n left: -textureScale[0] * 0.6,\n right: textureScale[0] * 0.6,\n bottom: -textureScale[1] * 0.6,\n top: textureScale[1] * 0.6,\n tonemap: TONEMAP_NONE,\n antialias: 0,\n bloom: 0,\n clearColor: [0, 0, 0, 1],\n }\n : {\n fov: Math.PI / 4,\n aspect: 1,\n near: meshFrame?.near ?? 0.01,\n far: meshFrame?.far ?? radius * 8,\n tonemap: TONEMAP_REINHARD_EXTENDED,\n };\n const cameraPosition = texturePreview\n ? [0, 0, 5]\n : [center[0], center[1], center[2] + (meshFrame?.distance ?? radius * 2.5)];\n const cameraEntity = app.world.spawn({ component: Camera, data: cameraData }, { component: Transform, data: { pos: cameraPosition } }).unwrap();\n previewCameraEntities.set(app.world, cameraEntity);\n previewCameraTargets.set(app.world, center);\n if (!texturePreview) {\n app.world.spawn({ component: DirectionalLight, data: { direction: [-0.5, -1, -0.3], intensity: 2 } });\n if (canonicalEnvironment === undefined) throw new Error('canonical preview environment was not loaded');\n app.world.spawn({ component: Skylight, data: { equirect: canonicalEnvironment } });\n app.world.spawn({ component: SkyboxBackground, data: { equirect: canonicalEnvironment } });\n }\n const ownerFacts = await previewOwnerFacts(assets, resource, payload);\n const publishedAsset = resource.kind === 'mesh' && payload.kind === 'mesh' && payload.aabb !== undefined\n ? { ...payload, aabb: Array.from(payload.aabb) }\n : payload;\n return {\n kind: resource.kind,\n guid: resource.guid,\n asset: publishedAsset,\n ...(ownerFacts === undefined ? {} : { ownerFacts }),\n };\n}\nif (bootstrapRoot === 'resource-bootstrap') return;\nlet defaultScene;\nlet defaultSceneRoot;\nconst defaultSceneGuid = ${JSON.stringify(facts.defaultScene)};\nif (defaultSceneGuid !== undefined) {\n const loaded = await assets.load(defaultSceneGuid, 'scene');\n if (!loaded.ok) throw loaded.error;\n const projected = await projectSceneAsset(app.world, loaded.value, (guid, kind) => assets.load(guid, kind));\n if (!projected.ok) throw projected.error;\n defaultScene = projected.value;\n const handle = app.world.allocSharedRef('SceneAsset', projected.value);\n const instantiated = worldInstantiateScene(app.world, handle);\n if (!instantiated.ok) throw instantiated.error;\n defaultSceneRoot = instantiated.value.root;\n}\nconst uiRoot = document.querySelector('#game-ui');\nawait app.pluginContext.plugin(gameHostPlugin({\n app,\n assets,\n canvas,\n renderer: app.renderer,\n ...(defaultScene === undefined ? {} : { defaultScene }),\n ...(defaultSceneRoot === undefined ? {} : { defaultSceneRoot }),\n uiRoot: uiRoot instanceof HTMLElement ? uiRoot : document.body,\n setPointerLockAllowed: (allowed) => app.input?.setPointerLockAllowed?.(allowed),\n}));\nconst { loader: pluginLoader } = await installCatalogLoader(app.pluginContext, pluginCatalog, 'engine');\nawait pluginLoader.root.update(projectPluginEntries(pluginEntries, 'engine'));\nawait pluginLoader.await();\n}\n\nconst query = new URLSearchParams(location.search);\nconst recipeValue = query.get('forgeax-tool-recipe');\nconst snapshotValue = query.get('forgeax-tool-snapshot');\nconst runIdValue = query.get('forgeax-tool-run-id');\nif (query.has('forgeax-tool-replay')) {\n globalThis.__forgeaxToolReplayHost = {\n ready: true,\n async run(capture) {\n const result = await replayToolPreviewCapture(capture);\n return result.ok ? { ok: true, result: result.value } : { ok: false, error: result.error };\n },\n };\n} else if (recipeValue !== null) {\n const previewRecipe = createToolPreviewRecipe(JSON.parse(recipeValue));\n const host = await createToolPreviewHost({\n ...(runIdValue === null ? {} : { runId: runIdValue }),\n recipe: previewRecipe,\n snapshot: JSON.parse(snapshotValue ?? 'null'),\n ...(resource === undefined ? {} : { resource }),\n canvas,\n app: {\n ...(assetCatalog === undefined ? {} : { assetCatalog }),\n ...(vfxRuntimeHost === undefined ? {} : { assetDecoders: [vfxGpuEffectContribution] }),\n plugins: [${plugins.join(', ')}],\n ...(vfxRuntimeHost === undefined ? {} : { features: [vfxRuntimeHost.feature] }),\n },\n bundler,\n prepare: prepareProject,\n collectResourceFacts(app, current) {\n if (current === undefined) return current;\n if (resource?.kind !== 'vfx') {\n if (resource?.kind === 'material' || resource?.kind === 'mesh' || resource?.kind === 'texture') {\n if (app.renderer.drawCalls <= 0) return current;\n if (resource.kind === 'mesh') {\n const asset = current.asset;\n const aabb = asset?.aabb;\n const submeshes = asset?.submeshes;\n const materialSlots = asset?.materialSlots;\n if (!Array.isArray(aabb) || aabb.length !== 6 || !Array.isArray(submeshes) || !Array.isArray(materialSlots)) {\n return current;\n }\n return {\n ...current,\n observation: {\n ...current.ownerFacts,\n aabb,\n submeshCount: submeshes.length,\n materialSlotCount: materialSlots.length,\n },\n };\n }\n return {\n ...current,\n observation: current.ownerFacts,\n };\n }\n return current;\n }\n if (vfxRuntimeHost === undefined) return current;\n const hostInspection = vfxRuntimeHost.inspect(app.world);\n const player = hostInspection?.players[0];\n const renderObservation = vfxRuntimeHost.feature.inspect();\n if (player === undefined || renderObservation.frameNumber < 0) {\n return current;\n }\n const bounds = previewVfxBounds(current.asset);\n if (bounds === undefined) return current;\n const emitterDigest = JSON.stringify(player.emitters.map(({ id, module, capacity }) => ({ id, module, capacity })));\n const sampleDigest = JSON.stringify(player.emitters.map(({ id, schedule }) => ({ id, schedule })));\n const boundsDigest = JSON.stringify(player.emitters.map(({ id, bounds: emitterBounds }) => ({ id, bounds: emitterBounds })));\n const computeDigest = player.programFingerprint;\n const indirectDigest = JSON.stringify(player.emitters.map(({ id, renderers }) => ({ id, renderers: renderers.map(({ kind, enabled }) => ({ kind, enabled })) })));\n return {\n ...current,\n observation: {\n subjectDigest: current.asset.programFingerprint,\n programFingerprint: player.programFingerprint,\n emitterDigest,\n sampleDigest,\n boundsDigest,\n computeDigest,\n indirectDigest,\n authoredBounds: bounds.aabb,\n seed: player.seed,\n fixedDelta: player.fixedDelta,\n timelineFrames: previewRecipe.frames,\n dispatches: renderObservation.dispatches,\n indirectDraws: renderObservation.indirectDraws,\n subjectOutputs: renderObservation.subjectOutputs,\n },\n };\n },\n onDispose: async () => {\n if (vfxRuntimeHost === undefined || previewWorld === undefined) return;\n const detached = await vfxRuntimeHost.detachWorld({ world: previewWorld });\n if (!detached.ok) throw detached.error;\n },\n executeAction(action) {\n return !globalThis.dispatchEvent(new CustomEvent('forgeax-tool-action', {\n detail: action,\n cancelable: true,\n }));\n },\n });\n if (!host.ok) {\n globalThis.__forgeaxToolHost = {\n ready: true,\n capture: async () => ({ ok: false, error: host.error }),\n run: async () => ({ ok: false, error: host.error }),\n dispose: async () => undefined,\n };\n } else {\n globalThis.__forgeaxToolHost = {\n ready: true,\n async capture() {\n const result = await host.value.capture();\n return result.ok ? { ok: true, result: result.value } : { ok: false, error: result.error };\n },\n async run() {\n const result = await host.value.run();\n return result.ok ? { ok: true, result: result.value } : { ok: false, error: result.error };\n },\n dispose: () => host.value.dispose(),\n };\n window.addEventListener('pagehide', () => void host.value.dispose(), { once: true });\n }\n} else {\n // WebDriver/headless browsers cannot satisfy the trusted-gesture requirement\n // for pointer lock. Keep the game running and let its keyboard fallback own\n // camera input; real browser users retain the normal click-to-lock path.\n const pointerLockAllowed =\n typeof navigator !== 'undefined' && navigator.webdriver === true ? () => false : undefined;\n const result = await createApp(\n canvas,\n {\n ...(assetCatalog === undefined ? {} : { assetCatalog }),\n ...(vfxRuntimeHost === undefined ? {} : { assetDecoders: [vfxGpuEffectContribution] }),\n plugins: [${plugins.join(', ')}],\n ...(pointerLockAllowed === undefined ? {} : { pointerLockAllowed }),\n },\n bundler,\n );\n if (!result.ok) throw result.error;\n const app = result.value;\n await prepareProject(app);\n${bootstrapPlugin}\n app.start().unwrap();\n let disposed = false;\n const dispose = () => {\n if (disposed) return;\n disposed = true;\n resizeObserver.disconnect();\n void app.dispose();\n };\n window.addEventListener('pagehide', dispose);\n}\n`;\n}\n\nfunction escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (character) => {\n switch (character) {\n case '&':\n return '&';\n case '<':\n return '<';\n case '>':\n return '>';\n case '\"':\n return '"';\n case \"'\":\n return ''';\n }\n return character;\n });\n}\n\nfunction htmlSource(title: string): string {\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <link rel=\"icon\" href=\"data:,\" />\n <title>${escapeHtml(title)}</title>\n <style>\n html, body, #app-shell, #app { width: 100%; height: 100%; margin: 0; overflow: hidden; }\n body { background: #05070b; }\n #app { display: block; }\n #app-shell { position: relative; }\n #game-ui { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }\n #game-ui > * { pointer-events: auto; }\n #forgeax-fatal { position: fixed; inset: 0; z-index: 2147483647; display: none; place-items: center; padding: 24px; background: #0b0d10; color: #e6e6e6; font: 15px/1.6 system-ui, sans-serif; text-align: center; white-space: pre-wrap; }\n </style>\n </head>\n <body>\n <div id=\"app-shell\"><canvas id=\"app\"></canvas><div id=\"game-ui\"></div></div><div id=\"forgeax-fatal\" role=\"alert\"></div>\n <script>\n (() => {\n const formatStartupFailure = (reason) => {\n if (reason instanceof Error) return reason.message;\n if (reason !== null && typeof reason === 'object') {\n const record = reason;\n const lines = [];\n for (const key of ['code', 'expected', 'hint']) {\n if (typeof record[key] === 'string' && record[key].length > 0) {\n lines.push(key + ': ' + record[key]);\n }\n }\n const detail = record.detail;\n if (detail !== null && typeof detail === 'object') {\n for (const key of ['reason', 'guid']) {\n if (typeof detail[key] === 'string' && detail[key].length > 0) {\n lines.push('detail.' + key + ': ' + detail[key]);\n }\n }\n }\n if (lines.length > 0) return lines.join('\\\\n');\n }\n return String(reason ?? 'Unknown startup failure');\n };\n const show = (reason) => {\n const notice = document.querySelector('#forgeax-fatal');\n if (!(notice instanceof HTMLElement)) return;\n const message = formatStartupFailure(reason);\n notice.textContent = 'ForgeaX game failed to start.\\\\n' + message;\n notice.style.display = 'grid';\n };\n window.addEventListener('error', (event) => show(event.error ?? event.message));\n window.addEventListener('unhandledrejection', (event) => show(event.reason));\n })();\n </script>\n <script type=\"module\" src=\"./main.ts\"></script>\n </body>\n</html>\n`;\n}\n\nexport async function createViteConfig(\n facts: ProjectFacts,\n command: 'serve' | 'build',\n base = '/',\n options: {\n readonly bootstrapRoot?: BootstrapRoot;\n readonly outDir?: string;\n } = {},\n): Promise<InlineConfig> {\n const bootstrapRoot = options.bootstrapRoot ?? 'project-bootstrap';\n // The canonical kit ships the engine's default environment (sky.hdr equirect).\n // Authored scenes (e.g. the default game template) reference it as a Skylight /\n // SkyboxBackground dependency, so a self-contained standalone build must catalog\n // it on the game path too — not only the tool-preview (resource-bootstrap) path.\n const canonicalKit = await resolveCanonicalKit();\n const generated = resolve(facts.root, '.forgeax', 'generated');\n await mkdir(generated, { recursive: true });\n const projectRoots = facts.assetRoots.map((root) => resolve(facts.root, root));\n const ignorePath =\n bootstrapRoot === 'resource-bootstrap'\n ? isResourcePreviewIgnoredPath\n : isProjectSourceIgnoredPath;\n const builtinPack = await prepareBuiltinPack(projectRoots, generated, ignorePath);\n await Promise.all([\n writeFile(resolve(generated, 'index.html'), htmlSource(facts.name)),\n writeFile(resolve(generated, 'main.ts'), hostSource(facts, bootstrapRoot, canonicalKit?.guid)),\n ]);\n const roots = [\n ...projectRoots,\n ...(builtinPack === undefined ? [] : [builtinPack]),\n ...(canonicalKit === undefined ? [] : [canonicalKit.root]),\n ];\n const importers = [...projectImporters(facts)];\n const runtimeBinding = createStandaloneRuntimeAssetBinding(facts.id);\n const engineWorkspaceResolver = await createEngineWorkspaceResolver();\n const consumerAliases = await consumerEngineAliases(facts.root);\n const plugins: Plugin[] = [\n ...(engineWorkspaceResolver === undefined ? [] : [engineWorkspaceResolver]),\n forgeaxShader() as Plugin,\n pluginPack({\n roots,\n runtimeBinding,\n ddc: devKitDdcRoots(facts.root),\n refresh: command === 'serve' ? reloadAssetHost() : undefined,\n importers: [\n audioImporter,\n imageImporter,\n fbxImporter,\n gltfImporter,\n fontImporter,\n ...importers,\n ],\n cookers: [createMaterialPackCooker(roots), createParticleCodeNativeCookerFromRoots(roots)],\n ignorePath,\n }) as Plugin,\n ];\n return {\n root: generated,\n base,\n configFile: false,\n publicDir:\n facts.assetPublicDir === undefined ? false : resolve(facts.root, facts.assetPublicDir),\n plugins,\n resolve: {\n alias: consumerAliases,\n dedupe: ['@forgeax/engine-app', '@forgeax/engine-ecs', '@forgeax/engine-runtime'],\n },\n server: { fs: { allow: [facts.root, ...roots] } },\n build: {\n target: 'esnext',\n outDir: options.outDir ?? resolve(facts.root, 'dist'),\n emptyOutDir: true,\n rollupOptions: { input: resolve(generated, 'index.html') },\n },\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport { isAbsolute, resolve } from 'node:path';\nimport { type GameProjectPluginEntry, GameProjectSchema } from '@forgeax/engine-project';\nimport type { CommandError, CommandResult, ProjectFacts } from './types.js';\n\nfunction projectError(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>>,\n): CommandResult<never> {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nasync function readJson(path: string): Promise<unknown> {\n return JSON.parse(await readFile(path, 'utf8')) as unknown;\n}\n\nfunction firstUnsupportedStandaloneRealm(\n entries: readonly GameProjectPluginEntry[],\n inheritedRealm: GameProjectPluginEntry['realm'] = 'engine',\n): { readonly id: string; readonly realm: 'host' } | undefined {\n for (const entry of entries) {\n const realm = entry.realm ?? inheritedRealm ?? 'engine';\n if (realm === 'host') return { id: entry.id, realm };\n if (entry.group === true) {\n const unsupported = firstUnsupportedStandaloneRealm(\n entry.config as readonly GameProjectPluginEntry[],\n realm,\n );\n if (unsupported !== undefined) return unsupported;\n }\n }\n return undefined;\n}\n\nfunction pluginModuleNames(entries: readonly GameProjectPluginEntry[]): string[] {\n return entries.flatMap((entry) =>\n entry.group === true\n ? pluginModuleNames(entry.config as readonly GameProjectPluginEntry[])\n : [entry.name],\n );\n}\n\nexport async function readProjectFacts(\n rootInput = process.cwd(),\n): Promise<CommandResult<ProjectFacts>> {\n const root = resolve(rootInput);\n let forgeValue: unknown;\n let packageValue: unknown;\n try {\n [forgeValue, packageValue] = await Promise.all([\n readJson(resolve(root, 'forge.json')),\n readJson(resolve(root, 'package.json')),\n ]);\n } catch (cause) {\n return projectError(\n 'project-manifest-unreadable',\n 'readable forge.json and package.json files',\n 'Run the command from a ForgeaX game root or pass its directory.',\n { root, reason: cause instanceof Error ? cause.message : String(cause) },\n );\n }\n if (forgeValue === null || typeof forgeValue !== 'object') {\n return projectError(\n 'project-manifest-invalid',\n 'forge.json to contain an object',\n 'Repair forge.json before running DevKit.',\n { root },\n );\n }\n if (packageValue === null || typeof packageValue !== 'object') {\n return projectError(\n 'package-manifest-invalid',\n 'package.json to contain an object',\n 'Repair package.json before running DevKit.',\n { root },\n );\n }\n const parsedForge = GameProjectSchema.safeParse(forgeValue);\n if (!parsedForge.success) {\n return projectError(\n 'project-manifest-invalid',\n 'forge.json to satisfy @forgeax/engine-project GameProjectSchema',\n 'Repair the fields reported by the authoritative project schema.',\n { root, issues: parsedForge.error.issues },\n );\n }\n const forge = parsedForge.data;\n if (\n forge.id.length === 0 ||\n forge.name.length === 0 ||\n forge.entry === undefined ||\n forge.entry.length === 0\n ) {\n return projectError(\n 'project-manifest-invalid',\n 'forge.json to declare id, name, and entry',\n 'Restore the project entry; plugin Entries remain optional additions.',\n { root },\n );\n }\n const plugins = forge.plugins ?? [];\n const unsupportedRealm = firstUnsupportedStandaloneRealm(plugins);\n if (unsupportedRealm !== undefined) {\n return projectError(\n 'project-plugin-realm-unsupported',\n 'the standalone Devkit host to contain only engine-realm plugin Entries',\n 'Move Host or build plugins to a host that owns that physical realm.',\n { root, ...unsupportedRealm },\n );\n }\n const entryPath = isAbsolute(forge.entry) ? forge.entry : resolve(root, forge.entry);\n try {\n await readFile(entryPath);\n } catch {\n return projectError(\n 'project-entry-missing',\n 'forge.json#entry to resolve to a readable module',\n 'Restore the game entry or update forge.json#entry.',\n { root, entry: forge.entry },\n );\n }\n const packageJson = packageValue as Record<string, unknown>;\n const forgeax = packageJson.forgeax;\n const configuredRoots =\n forgeax !== null && typeof forgeax === 'object'\n ? (forgeax as { assets?: { roots?: unknown } }).assets?.roots\n : undefined;\n const assetRoots =\n Array.isArray(configuredRoots) && configuredRoots.every((value) => typeof value === 'string')\n ? configuredRoots\n : ['assets'];\n const configuredImporters =\n forgeax !== null && typeof forgeax === 'object'\n ? (forgeax as { assets?: { importers?: unknown } }).assets?.importers\n : undefined;\n const assetImporters =\n Array.isArray(configuredImporters) &&\n configuredImporters.every((value) => typeof value === 'string')\n ? configuredImporters\n : [];\n const configuredPublicDir =\n forgeax !== null && typeof forgeax === 'object'\n ? (forgeax as { assets?: { publicDir?: unknown } }).assets?.publicDir\n : undefined;\n const assetPublicDir = typeof configuredPublicDir === 'string' ? configuredPublicDir : undefined;\n const physics = forge.physics === '2d' || forge.physics === '3d' ? forge.physics : undefined;\n const defaultScene =\n typeof forge.defaultScene === 'string' && forge.defaultScene.length > 0\n ? forge.defaultScene\n : undefined;\n const normalizedEntry = forge.entry.startsWith('./') ? forge.entry : `./${forge.entry}`;\n const bootstrapEntry = pluginModuleNames(plugins)\n .map((name) => (name.startsWith('./') ? name : `./${name}`))\n .includes(normalizedEntry)\n ? undefined\n : forge.entry;\n return {\n ok: true,\n value: {\n root,\n id: forge.id,\n name: forge.name,\n entry: forge.entry,\n ...(bootstrapEntry === undefined ? {} : { bootstrapEntry }),\n plugins,\n ...(physics === undefined ? {} : { physics }),\n ...(defaultScene === undefined ? {} : { defaultScene }),\n assetRoots,\n ...(assetImporters.length === 0 ? {} : { assetImporters }),\n ...(assetPublicDir === undefined ? {} : { assetPublicDir }),\n packageJson,\n },\n };\n}\n\nexport function isCommandError(value: unknown): value is CommandError {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.code === 'string' &&\n typeof candidate.expected === 'string' &&\n typeof candidate.hint === 'string' &&\n candidate.detail !== null &&\n typeof candidate.detail === 'object' &&\n !Array.isArray(candidate.detail)\n );\n}\n\nexport function commandError(cause: unknown, fallbackCode: string): CommandError {\n if (isCommandError(cause)) return cause;\n return {\n code: fallbackCode,\n expected: 'the ForgeaX command to complete',\n hint: 'Inspect the underlying diagnostic and repair the owning input.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n };\n}\n","import { readdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { basename, extname, resolve } from 'node:path';\nimport { runCliGltf } from '@forgeax/engine-gltf/cli-gltf';\nimport { scanEntries } from '@forgeax/engine-pack/cli-asset';\nimport { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { commandError, isCommandError, readProjectFacts } from './project.js';\nimport type {\n AssetAddOptions,\n AssetInspectOptions,\n CommandError,\n CommandResult,\n ProjectCommandOptions,\n} from './types.js';\n\nconst imageExtensions = new Set(['.png', '.jpg', '.jpeg', '.hdr']);\nconst gltfExtensions = new Set(['.gltf', '.glb']);\n\nfunction failure(error: CommandError): CommandResult<never> {\n return { ok: false, error };\n}\n\nfunction producerFailure(\n stderr: readonly string[],\n fallback: Pick<CommandError, 'code' | 'expected' | 'hint'>,\n detail: Readonly<Record<string, unknown>>,\n): CommandResult<never> {\n try {\n const parsed = JSON.parse(stderr.at(-1) ?? '') as unknown;\n if (isCommandError(parsed)) return failure(parsed);\n } catch {\n // The fallback below preserves the producer's complete diagnostic.\n }\n return failure({ ...fallback, detail: { ...detail, diagnostic: stderr.join('\\n') } });\n}\n\nasync function sourcesAt(path: string): Promise<string[]> {\n const info = await stat(path);\n if (info.isFile()) return [path];\n if (!info.isDirectory()) return [];\n const output: string[] = [];\n const entries = await readdir(path, { withFileTypes: true });\n for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {\n if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')\n continue;\n const child = resolve(path, entry.name);\n if (entry.isDirectory()) output.push(...(await sourcesAt(child)));\n else if (entry.isFile() && !entry.name.endsWith('.meta.json')) output.push(child);\n }\n return output;\n}\n\nasync function addImage(sourcePath: string, dryRun: boolean): Promise<CommandResult<unknown>> {\n const metaPath = `${sourcePath}.meta.json`;\n const source = basename(sourcePath);\n let existing: unknown;\n try {\n existing = JSON.parse(await readFile(metaPath, 'utf8')) as unknown;\n } catch (cause) {\n if ((cause as NodeJS.ErrnoException).code !== 'ENOENT') {\n return failure({\n code: 'asset-meta-unreadable',\n expected: 'an absent or readable JSON sidecar',\n hint: 'Repair the existing sidecar before adding the source again.',\n detail: { source: sourcePath, metaPath },\n });\n }\n }\n if (existing !== undefined) {\n const value = existing as {\n importer?: unknown;\n source?: unknown;\n subAssets?: readonly { guid?: unknown; kind?: unknown }[];\n };\n const row = value.subAssets?.[0];\n if (\n value.importer !== 'image' ||\n value.source !== source ||\n value.subAssets?.length !== 1 ||\n typeof row?.guid !== 'string' ||\n row.kind !== 'texture'\n ) {\n return failure({\n code: 'asset-meta-conflict',\n expected: 'the existing sidecar to describe this image source and one texture identity',\n hint: 'Resolve the sidecar conflict explicitly; DevKit will not replace authored identity.',\n detail: { source: sourcePath, metaPath },\n });\n }\n return { ok: true, value: { source: sourcePath, metaPath, guid: row.guid, reused: true } };\n }\n const guid = AssetGuid.format(AssetGuid.random());\n const linear = extname(sourcePath).toLowerCase() === '.hdr';\n const meta = {\n schemaVersion: '1.0.0',\n kind: 'external-asset-package',\n importer: 'image',\n source,\n importSettings: {\n colorSpace: linear ? 'linear' : 'srgb',\n mipmap: true,\n addressMode: 'repeat',\n filterMode: 'linear',\n },\n subAssets: [{ guid, sourceIndex: 0, kind: 'texture', sourceKey: 'texture' }],\n } as const;\n if (!dryRun) await writeFile(metaPath, `${JSON.stringify(meta, null, 2)}\\n`, { flag: 'wx' });\n return { ok: true, value: { source: sourcePath, metaPath, guid, reused: false, dryRun } };\n}\n\nasync function addGltf(sourcePath: string, dryRun: boolean): Promise<CommandResult<unknown>> {\n if (dryRun) {\n const exists = await stat(`${sourcePath}.meta.json`)\n .then(() => true)\n .catch(() => false);\n return {\n ok: true,\n value: {\n source: sourcePath,\n metaPath: `${sourcePath}.meta.json`,\n reused: exists,\n dryRun: true,\n },\n };\n }\n const stdout: string[] = [];\n const stderr: string[] = [];\n const exitCode = await runCliGltf(['import', sourcePath], {\n stdoutWrite: (line) => stdout.push(line),\n stderrWrite: (line) => stderr.push(line),\n });\n if (exitCode !== 0) {\n return producerFailure(\n stderr,\n {\n code: 'asset-add-failed',\n expected: 'the glTF producer to create or reuse a valid sidecar',\n hint: 'Inspect the glTF source and its external references.',\n },\n { source: sourcePath },\n );\n }\n return { ok: true, value: { source: sourcePath, metaPath: `${sourcePath}.meta.json` } };\n}\n\nexport async function assetAddCommand(options: AssetAddOptions): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const target = resolve(facts.value.root, options.path);\n try {\n const sources = await sourcesAt(target);\n const supported = sources.filter((source) => {\n const extension = extname(source).toLowerCase();\n return imageExtensions.has(extension) || gltfExtensions.has(extension);\n });\n if (supported.length === 0) {\n return failure({\n code: 'source-package-importer-missing',\n expected: 'a .png, .jpg, .jpeg, .hdr, .gltf, or .glb source',\n hint: 'Use a supported built-in importer or add an explicit producer before adding this source.',\n detail: { target },\n });\n }\n const assets: unknown[] = [];\n for (const source of supported) {\n const result = imageExtensions.has(extname(source).toLowerCase())\n ? await addImage(source, options.dryRun === true)\n : await addGltf(source, options.dryRun === true);\n if (!result.ok) return result;\n assets.push(result.value);\n }\n return { ok: true, value: { root: facts.value.root, assets, dryRun: options.dryRun === true } };\n } catch (cause) {\n return failure(commandError(cause, 'asset-add-failed'));\n }\n}\n\nasync function entries(options: ProjectCommandOptions) {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const stdout: string[] = [];\n const stderr: string[] = [];\n const result = await scanEntries(\n facts.value.assetRoots.map((root) => resolve(facts.value.root, root)),\n { stdoutWrite: (line) => stdout.push(line), stderrWrite: (line) => stderr.push(line) },\n );\n if (!result.ok) {\n return producerFailure(\n stderr,\n {\n code: 'asset-authority-invalid',\n expected: 'all asset roots and sidecars to pass the pack scanner',\n hint: 'Repair the first invalid asset authority reported by the scanner.',\n },\n {},\n );\n }\n return { ok: true as const, value: { facts: facts.value, entries: result.value } };\n}\n\nexport async function assetListCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const result = await entries(options);\n if (!result.ok) return result;\n return { ok: true, value: result.value.entries };\n}\n\nexport async function assetVerifyCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const result = await entries(options);\n if (!result.ok) return result;\n return {\n ok: true,\n value: { root: result.value.facts.root, assetCount: result.value.entries.length },\n };\n}\n\nexport async function assetInspectCommand(\n options: AssetInspectOptions,\n): Promise<CommandResult<unknown>> {\n const result = await entries(options);\n if (!result.ok) return result;\n const subject = options.subject.toLowerCase();\n const matches = result.value.entries.filter(\n (entry) => entry.guid.toLowerCase() === subject || entry.name?.toLowerCase() === subject,\n );\n if (matches.length !== 1) {\n return failure({\n code: matches.length === 0 ? 'asset-not-found' : 'asset-subject-ambiguous',\n expected: 'the GUID or name to resolve to exactly one asset',\n hint:\n matches.length === 0\n ? 'Run asset list and choose a known subject.'\n : 'Use the stable GUID.',\n detail: { subject: options.subject, matches },\n });\n }\n return { ok: true, value: matches[0] };\n}\n","{\n \"name\": \"@forgeax/engine-devkit\",\n \"version\": \"0.0.0\",\n \"private\": false,\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"sideEffects\": false,\n \"description\": \"ForgeaX external game project CLI and build orchestration.\",\n \"bin\": {\n \"forgeax\": \"./dist/cli.mjs\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\"\n },\n \"./cli\": \"./dist/cli.mjs\",\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"@forgeax/engine-animation\": \"workspace:*\",\n \"@forgeax/engine-app\": \"workspace:*\",\n \"@forgeax/engine-assets-runtime\": \"workspace:*\",\n \"@forgeax/engine-audio\": \"workspace:*\",\n \"@forgeax/engine-audio-webaudio\": \"workspace:*\",\n \"@forgeax/engine-fbx\": \"workspace:*\",\n \"@forgeax/engine-font\": \"workspace:*\",\n \"@forgeax/engine-geometry\": \"workspace:*\",\n \"@forgeax/engine-gltf\": \"workspace:*\",\n \"@forgeax/engine-image\": \"workspace:*\",\n \"@forgeax/engine-input\": \"workspace:*\",\n \"@forgeax/engine-pack\": \"workspace:*\",\n \"@forgeax/engine-physics\": \"workspace:*\",\n \"@forgeax/engine-plugin\": \"workspace:*\",\n \"@forgeax/engine-preview\": \"workspace:*\",\n \"@forgeax/engine-project\": \"workspace:*\",\n \"@forgeax/engine-rhi-debug\": \"workspace:*\",\n \"@forgeax/engine-render\": \"workspace:*\",\n \"@forgeax/engine-render-graph\": \"workspace:*\",\n \"@forgeax/engine-runtime\": \"workspace:*\",\n \"@forgeax/engine-scene\": \"workspace:*\",\n \"@forgeax/engine-shader-compiler\": \"workspace:*\",\n \"@forgeax/engine-skinning\": \"workspace:*\",\n \"@forgeax/engine-tool-runtime\": \"workspace:*\",\n \"@forgeax/engine-types\": \"workspace:*\",\n \"@forgeax/engine-vfx-compiler\": \"workspace:*\",\n \"@forgeax/engine-vite-plugin-pack\": \"workspace:*\",\n \"@forgeax/engine-vite-plugin-shader\": \"workspace:*\",\n \"jiti\": \"1.21.7\",\n \"playwright\": \"1.60.0\",\n \"vite\": \"8.0.10\",\n \"vitest\": \"4.1.5\"\n },\n \"devDependencies\": {\n \"@forgeax/engine-rhi-null\": \"workspace:*\",\n \"@types/node\": \"^20.14.0\"\n },\n \"forgeax\": {\n \"metrics\": {\n \"bundle-size\": {\n \"enabled\": true,\n \"path\": \"dist/cli.mjs\",\n \"compression\": \"gzip\"\n },\n \"fps\": {\n \"enabled\": false,\n \"reason\": \"Node-only build orchestration; runtime FPS belongs to consumer games\"\n },\n \"bench\": {\n \"enabled\": false,\n \"reason\": \"CLI latency is not a runtime hot path\"\n },\n \"gate\": {\n \"enabled\": true,\n \"command\": \"pnpm test\",\n \"cwd\": \"packages/devkit\"\n },\n \"spike-report\": {\n \"enabled\": false,\n \"reason\": \"production DevKit package\"\n }\n }\n }\n}\n","import { writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport devkitPackage from '../package.json' with { type: 'json' };\nimport type { SdkManifest } from './sdk.js';\nimport type { CommandResult, InitOptions, ProjectFacts } from './types.js';\n\nconst STANDARD_SCRIPTS = {\n dev: 'forgeax dev',\n build: 'forgeax build',\n package: 'forgeax package',\n serve: 'forgeax serve',\n preview: 'forgeax preview',\n doctor: 'forgeax doctor',\n test: 'forgeax test',\n} as const;\n\nconst SDK_DEV_DEPENDENCIES = {\n '@types/node': '20.19.40',\n '@webgpu/types': '0.1.71',\n tsx: '4.23.1',\n typescript: '6.0.3',\n vitest: '4.1.5',\n} as const;\n\nexport interface InitPlan {\n readonly root: string;\n readonly version: string;\n readonly pnpmVersion?: string;\n readonly archiveBacked: boolean;\n readonly dependencyChanges: readonly {\n readonly section: string;\n readonly name: string;\n readonly from?: string;\n readonly to: string;\n }[];\n readonly scriptChanges: readonly { readonly name: string; readonly to: string }[];\n}\n\nexport function createInitPlan(\n facts: ProjectFacts,\n sdk?: Pick<SdkManifest, 'sdkVersion' | 'packages' | 'requirements'>,\n): CommandResult<InitPlan> {\n const manifest = structuredClone(facts.packageJson) as Record<string, unknown>;\n const packageVersions = new Map(sdk?.packages.map((entry) => [entry.name, entry.version]));\n const devkitVersion = packageVersions.get('@forgeax/engine-devkit') ?? devkitPackage.version;\n const dependencyChanges: InitPlan['dependencyChanges'][number][] = [];\n if (sdk !== undefined) {\n for (const section of ['dependencies', 'devDependencies'] as const) {\n const dependencies = manifest[section];\n if (dependencies === null || typeof dependencies !== 'object') continue;\n const unsupported = Object.keys(dependencies).filter(\n (name) => !name.startsWith('@forgeax/engine-') && !(name in SDK_DEV_DEPENDENCIES),\n );\n if (unsupported.length > 0) {\n return {\n ok: false,\n error: {\n code: 'sdk-external-dependency-unsupported',\n expected: 'archive-backed init dependencies to belong to the SDK closure',\n hint: 'Remove the external dependency or use a network-backed package workflow explicitly.',\n detail: { root: facts.root, dependencies: unsupported.sort() },\n },\n };\n }\n }\n }\n for (const section of ['dependencies', 'devDependencies'] as const) {\n const dependencies = manifest[section];\n if (dependencies === null || typeof dependencies !== 'object') continue;\n for (const [name, value] of Object.entries(dependencies)) {\n if (\n name.startsWith('@forgeax/engine-') &&\n typeof value === 'string' &&\n value.startsWith('workspace:')\n ) {\n const version = packageVersions.get(name) ?? devkitVersion;\n dependencyChanges.push({ section, name, from: value, to: version });\n }\n }\n }\n if (sdk !== undefined) {\n const existingEngineNames = new Set(\n ['dependencies', 'devDependencies'].flatMap((section) => {\n const value = manifest[section];\n return value !== null && typeof value === 'object'\n ? Object.keys(value).filter((name) => name.startsWith('@forgeax/engine-'))\n : [];\n }),\n );\n for (const entry of sdk.packages) {\n if (entry.name === '@forgeax/engine-devkit' || existingEngineNames.has(entry.name)) continue;\n dependencyChanges.push({\n section: 'dependencies',\n name: entry.name,\n to: entry.version,\n });\n }\n const devDependencies =\n manifest.devDependencies !== null && typeof manifest.devDependencies === 'object'\n ? (manifest.devDependencies as Record<string, unknown>)\n : {};\n for (const [name, version] of Object.entries(SDK_DEV_DEPENDENCIES)) {\n if (devDependencies[name] === version) continue;\n dependencyChanges.push({\n section: 'devDependencies',\n name,\n ...(typeof devDependencies[name] === 'string' ? { from: devDependencies[name] } : {}),\n to: version,\n });\n }\n }\n const scriptsValue = manifest.scripts;\n const scripts =\n scriptsValue !== null && typeof scriptsValue === 'object'\n ? (scriptsValue as Record<string, unknown>)\n : {};\n const scriptChanges: InitPlan['scriptChanges'][number][] = [];\n for (const [name, command] of Object.entries(STANDARD_SCRIPTS)) {\n const existing = scripts[name];\n if (existing === undefined) scriptChanges.push({ name, to: command });\n else if (existing !== command) {\n return {\n ok: false,\n error: {\n code: 'project-script-conflict',\n expected: `package.json#scripts.${name} to be absent or ${JSON.stringify(command)}`,\n hint: `Rename the existing ${name} script, then rerun forgeax init.`,\n detail: { root: facts.root, script: name, existing },\n },\n };\n }\n }\n const devDependencies = manifest.devDependencies;\n const existingDevkit =\n devDependencies !== null && typeof devDependencies === 'object'\n ? (devDependencies as Record<string, unknown>)['@forgeax/engine-devkit']\n : undefined;\n if (existingDevkit !== devkitVersion) {\n dependencyChanges.push({\n section: 'devDependencies',\n name: '@forgeax/engine-devkit',\n ...(typeof existingDevkit === 'string' ? { from: existingDevkit } : {}),\n to: devkitVersion,\n });\n }\n return {\n ok: true,\n value: {\n root: facts.root,\n version: sdk?.sdkVersion ?? devkitVersion,\n ...(sdk === undefined ? {} : { pnpmVersion: sdk.requirements.pnpm }),\n archiveBacked: sdk !== undefined,\n dependencyChanges,\n scriptChanges,\n },\n };\n}\n\nexport async function applyInitPlan(\n facts: ProjectFacts,\n plan: InitPlan,\n options: InitOptions,\n): Promise<CommandResult<InitPlan>> {\n if (options.dryRun === true) return { ok: true, value: plan };\n const manifest = structuredClone(facts.packageJson) as Record<string, unknown>;\n for (const change of plan.dependencyChanges) {\n const sectionValue = manifest[change.section];\n const section =\n sectionValue !== null && typeof sectionValue === 'object'\n ? (sectionValue as Record<string, unknown>)\n : {};\n section[change.name] = change.to;\n manifest[change.section] = section;\n }\n const scriptsValue = manifest.scripts;\n const scripts =\n scriptsValue !== null && typeof scriptsValue === 'object'\n ? (scriptsValue as Record<string, unknown>)\n : {};\n for (const change of plan.scriptChanges) scripts[change.name] = change.to;\n manifest.scripts = scripts;\n if (plan.archiveBacked) {\n if (plan.pnpmVersion === undefined) throw new Error('sdk-pnpm-version-missing');\n manifest.packageManager = `pnpm@${plan.pnpmVersion}`;\n }\n await writeFile(resolve(facts.root, 'package.json'), `${JSON.stringify(manifest, null, 2)}\\n`);\n return { ok: true, value: plan };\n}\n","import { access, readFile } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface SdkPackage {\n readonly name: string;\n readonly version: string;\n readonly root: string;\n readonly fileCount: number;\n readonly byteCount: number;\n}\n\nexport interface SdkTemplate {\n readonly id: string;\n readonly root: string;\n readonly default: boolean;\n}\n\nexport interface SdkSkill {\n readonly id: string;\n readonly root: string;\n readonly fileCount: number;\n readonly byteCount: number;\n}\n\nexport interface SdkSourceWasm {\n readonly package: string;\n readonly root: string;\n readonly files: readonly string[];\n}\n\nexport interface SdkResource {\n readonly id: string;\n readonly package: string;\n readonly sourceRoot: string;\n readonly packageRoot: string;\n readonly files: readonly string[];\n}\n\nexport interface SdkTemplateResource {\n readonly id: string;\n readonly root: string;\n readonly files: readonly string[];\n}\n\nexport interface SdkSource {\n readonly root: 'source/engine';\n readonly format: 'git-archive-public-snapshot';\n readonly excluded: readonly ['.gitmodules', 'forgeax-engine-assets'];\n readonly fileCount: number;\n readonly byteCount: number;\n readonly prebuiltWasm: readonly SdkSourceWasm[];\n}\n\nexport interface SdkManifest {\n readonly schemaVersion: '1.6.0';\n readonly sdkVersion: string;\n readonly engineCommit: string;\n readonly requirements: {\n readonly node: string;\n readonly pnpm: string;\n readonly pnpmStoreFormat: string;\n };\n readonly capabilities: readonly string[];\n readonly packages: readonly SdkPackage[];\n readonly templates: readonly SdkTemplate[];\n readonly skills: readonly SdkSkill[];\n readonly resources: readonly SdkResource[];\n readonly templateResources: readonly SdkTemplateResource[];\n readonly source: SdkSource;\n}\n\nexport interface SdkContext {\n readonly root: string;\n readonly manifest: SdkManifest;\n /**\n * The full ZIP carries an immutable offline store. The npm carrier is a\n * deliberately smaller online surface and omits it, so consumers fall back\n * to the registry when this path is absent.\n */\n readonly store?: string;\n readonly templates: ReadonlyMap<string, string>;\n readonly defaultTemplate: string;\n}\n\nasync function readable(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function findSdkContext(): Promise<SdkContext | undefined> {\n const configured = process.env.FORGEAX_SDK_ROOT;\n let cursor = resolve(configured ?? dirname(fileURLToPath(import.meta.url)));\n for (;;) {\n const manifestPath = resolve(cursor, 'sdk-manifest.json');\n if (await readable(manifestPath)) {\n const manifest = JSON.parse(await readFile(manifestPath, 'utf8')) as SdkManifest;\n const templates = new Map(\n manifest.templates.map((template) => [template.id, resolve(cursor, template.root)]),\n );\n const defaultTemplate = manifest.templates.find((template) => template.default);\n if (defaultTemplate === undefined) throw new Error('sdk-default-template-missing');\n const store = resolve(cursor, 'store', 'pnpm');\n return {\n root: cursor,\n manifest,\n ...((await readable(store)) ? { store } : {}),\n templates,\n defaultTemplate: defaultTemplate.id,\n };\n }\n const parent = dirname(cursor);\n if (parent === cursor) return undefined;\n cursor = parent;\n }\n}\n","import { execFile } from 'node:child_process';\nimport { cp, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport type { SdkContext } from './sdk.js';\nimport type { CommandResult } from './types.js';\n\nconst execFileAsync = promisify(execFile);\nconst SDK_INIT_PATH = ['.forgeax', 'sdk-init.json'] as const;\nconst SDK_INIT_SCHEMA_VERSION = '1.0.0' as const;\n\nexport interface SdkInitState {\n readonly schemaVersion: typeof SDK_INIT_SCHEMA_VERSION;\n readonly sdkVersion: string;\n readonly engineCommit: string;\n readonly pnpm: string;\n readonly node: string;\n readonly platform: NodeJS.Platform;\n readonly arch: string;\n}\n\nexport interface SdkInitReport extends SdkInitState {\n readonly root: string;\n readonly store: 'offline' | 'registry';\n}\n\nfunction sdkInitPath(sdk: SdkContext): string {\n return resolve(sdk.root, ...SDK_INIT_PATH);\n}\n\nfunction commandFailure(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>> = {},\n): CommandResult<never> {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nexport function sdkProjectInstallArgs(store: string | undefined): string[] {\n const common = [\n 'install',\n '--frozen-lockfile',\n '--ignore-scripts',\n '--side-effects-cache=true',\n '--child-concurrency=1',\n ];\n return store === undefined\n ? common\n : [...common, '--offline', '--trust-lockfile', '--store-dir', store];\n}\n\nfunction sdkBootstrapInstallArgs(store: string | undefined): string[] {\n const common = [\n 'install',\n '--frozen-lockfile',\n '--child-concurrency=1',\n '--side-effects-cache=true',\n ];\n return store === undefined\n ? common\n : [...common, '--offline', '--trust-lockfile', '--store-dir', store];\n}\n\nfunction supportedPnpm(version: string): boolean {\n const [major = 0, minor = 0] = version.split('.').map(Number);\n return major === 11 && minor >= 7;\n}\n\nasync function currentPnpm(): Promise<CommandResult<string>> {\n try {\n const result = await execFileAsync('pnpm', ['--version'], { maxBuffer: 1024 * 1024 });\n const version = result.stdout.trim();\n if (version.length === 0) throw new Error('pnpm returned an empty version');\n return { ok: true, value: version };\n } catch (cause) {\n return commandFailure(\n 'pnpm-unavailable',\n 'pnpm 11.7.0 or newer in the pnpm 11 line to be available on PATH',\n 'Install or activate pnpm 11, then rerun forgeax init from the SDK root.',\n { reason: cause instanceof Error ? cause.message : String(cause) },\n );\n }\n}\n\nfunction matchesState(sdk: SdkContext, state: unknown): state is SdkInitState {\n if (state === null || typeof state !== 'object' || Array.isArray(state)) return false;\n const value = state as Record<string, unknown>;\n return (\n value.schemaVersion === SDK_INIT_SCHEMA_VERSION &&\n value.sdkVersion === sdk.manifest.sdkVersion &&\n value.engineCommit === sdk.manifest.engineCommit &&\n typeof value.pnpm === 'string' &&\n supportedPnpm(value.pnpm) &&\n value.node === process.versions.node &&\n value.platform === process.platform &&\n value.arch === process.arch\n );\n}\n\nexport async function readSdkInitState(sdk: SdkContext): Promise<SdkInitState | undefined> {\n try {\n const value = JSON.parse(await readFile(sdkInitPath(sdk), 'utf8')) as unknown;\n return matchesState(sdk, value) ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport async function requireSdkInitialization(\n sdk: SdkContext,\n): Promise<CommandResult<SdkInitState>> {\n const state = await readSdkInitState(sdk);\n if (state === undefined) {\n return commandFailure(\n 'sdk-not-initialized',\n 'the downloaded SDK to be initialized for this Node/pnpm/platform tuple',\n 'Run ./bin/forgeax init from the SDK root once, then run forgeax new outside the SDK.',\n {\n sdkRoot: sdk.root,\n sdkVersion: sdk.manifest.sdkVersion,\n pnpm: sdk.manifest.requirements.pnpm,\n node: process.versions.node,\n platform: process.platform,\n arch: process.arch,\n },\n );\n }\n return { ok: true, value: state };\n}\n\nasync function copyBootstrapInputs(sdk: SdkContext, root: string): Promise<void> {\n const template = sdk.templates.get(sdk.defaultTemplate);\n if (template === undefined) throw new Error('sdk-default-template-missing');\n for (const name of ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'] as const) {\n await cp(resolve(template, name), resolve(root, name));\n }\n try {\n await cp(resolve(template, '.npmrc'), resolve(root, '.npmrc'));\n } catch (cause) {\n if (\n cause === null ||\n typeof cause !== 'object' ||\n !('code' in cause) ||\n cause.code !== 'ENOENT'\n ) {\n throw cause;\n }\n }\n}\n\nexport async function sdkInitCommand(\n sdk: SdkContext,\n options: { readonly dryRun?: boolean; readonly install?: boolean } = {},\n): Promise<CommandResult<SdkInitReport>> {\n const pnpmResult = await currentPnpm();\n if (!pnpmResult.ok) return pnpmResult;\n if (!supportedPnpm(pnpmResult.value)) {\n return commandFailure(\n 'pnpm-version-unsupported',\n 'pnpm >=11.7.0 <12',\n 'Activate pnpm 11.7.0 or newer in the pnpm 11 line, then rerun forgeax init.',\n { actual: pnpmResult.value, expected: sdk.manifest.requirements.pnpm },\n );\n }\n const state: SdkInitState = {\n schemaVersion: SDK_INIT_SCHEMA_VERSION,\n sdkVersion: sdk.manifest.sdkVersion,\n engineCommit: sdk.manifest.engineCommit,\n pnpm: pnpmResult.value,\n node: process.versions.node,\n platform: process.platform,\n arch: process.arch,\n };\n const report: SdkInitReport = {\n ...state,\n root: sdk.root,\n store: sdk.store === undefined ? 'registry' : 'offline',\n };\n if (options.dryRun === true || options.install === false) return { ok: true, value: report };\n\n let staging: string | undefined;\n try {\n staging = await mkdtemp(resolve(tmpdir(), 'forgeax-sdk-init-'));\n await copyBootstrapInputs(sdk, staging);\n await execFileAsync('pnpm', sdkBootstrapInstallArgs(sdk.store), {\n cwd: staging,\n env: { ...process.env, CI: 'true' },\n maxBuffer: 16 * 1024 * 1024,\n });\n await mkdir(resolve(sdk.root, '.forgeax'), { recursive: true });\n await writeFile(sdkInitPath(sdk), `${JSON.stringify(state, null, 2)}\\n`);\n return { ok: true, value: report };\n } catch (cause) {\n return commandFailure(\n 'sdk-init-failed',\n 'the SDK dependency closure to install and build native packages successfully',\n 'Inspect the pnpm output, repair Node/pnpm or platform permissions, then rerun forgeax init from the SDK root.',\n { reason: cause instanceof Error ? cause.message : String(cause), sdkRoot: sdk.root },\n );\n } finally {\n if (staging !== undefined) await rm(staging, { recursive: true, force: true });\n }\n}\n","import {\n cp,\n lstat,\n mkdir,\n readdir,\n readFile,\n readlink,\n rm,\n rmdir,\n symlink,\n writeFile,\n} from 'node:fs/promises';\nimport { dirname, relative, resolve, sep } from 'node:path';\nimport { commandError, readProjectFacts } from './project.js';\nimport type { SdkContext, SdkSkill } from './sdk.js';\nimport type { CommandResult, ProjectCommandOptions } from './types.js';\n\nexport const PROJECT_SKILL_MOUNT_ROOTS = Object.freeze([\n '.codebuddy/skills',\n '.cursor/skills',\n '.agents/skills',\n '.claude/skills',\n '.workbuddy/skills',\n '.forgeax/skills',\n]);\nconst RETIRED_PROJECT_SKILL_MOUNT_ROOTS = new Set(['.claude-internal/skills']);\n\nconst MANIFEST_PATH = '.forgeax/skill-install-manifest.json';\nconst GITIGNORE_BEGIN = '# BEGIN FORGEAX MANAGED SKILLS';\nconst GITIGNORE_END = '# END FORGEAX MANAGED SKILLS';\n\ninterface InstalledSkill extends SdkSkill {}\n\ninterface SkillInstallManifest {\n readonly schemaVersion: '1.0.0';\n readonly sourceRoot: 'skills';\n readonly sdkVersion?: string;\n readonly engineCommit?: string;\n readonly skills: readonly InstalledSkill[];\n readonly mounts: readonly {\n readonly root: string;\n readonly skills: readonly string[];\n }[];\n}\n\nexport interface SkillInstallReport {\n readonly root: string;\n readonly sourceRoot: string;\n readonly manifest: string;\n readonly skills: readonly string[];\n readonly mountRoots: readonly string[];\n}\n\nfunction slash(path: string): string {\n return path.split(sep).join('/');\n}\n\nfunction contained(parent: string, child: string): boolean {\n const path = relative(parent, child);\n return path !== '' && path !== '..' && !path.startsWith(`..${sep}`) && !path.startsWith(sep);\n}\n\nasync function pathKind(path: string): Promise<'missing' | 'directory' | 'file' | 'symlink'> {\n try {\n const info = await lstat(path);\n if (info.isSymbolicLink()) return 'symlink';\n if (info.isDirectory()) return 'directory';\n return 'file';\n } catch (cause) {\n if (cause !== null && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT') {\n return 'missing';\n }\n throw cause;\n }\n}\n\nasync function filesUnder(root: string, directory = root): Promise<readonly string[]> {\n const files: string[] = [];\n for (const name of (await readdir(directory)).sort()) {\n const path = resolve(directory, name);\n const info = await lstat(path);\n if (info.isSymbolicLink()) throw new Error(`skill-source-symlink: ${path}`);\n if (info.isDirectory()) files.push(...(await filesUnder(root, path)));\n else if (info.isFile()) files.push(path);\n }\n return files;\n}\n\nasync function skillRow(sourceRoot: string, id: string): Promise<InstalledSkill> {\n if (!/^[a-z0-9][a-z0-9-]*$/.test(id)) throw new Error(`skill-id-invalid: ${id}`);\n const root = resolve(sourceRoot, id);\n if ((await pathKind(root)) !== 'directory') throw new Error(`skill-source-invalid: ${id}`);\n if ((await pathKind(resolve(root, 'SKILL.md'))) !== 'file') {\n throw new Error(`skill-entry-missing: ${id}/SKILL.md`);\n }\n const files = await filesUnder(root);\n return {\n id,\n root: `skills/${id}`,\n fileCount: files.length,\n byteCount: (\n await Promise.all(files.map(async (path) => (await readFile(path)).byteLength))\n ).reduce((sum, bytes) => sum + bytes, 0),\n };\n}\n\nasync function discoverProjectSkills(root: string): Promise<readonly InstalledSkill[]> {\n const sourceRoot = resolve(root, 'skills');\n if ((await pathKind(sourceRoot)) !== 'directory') throw new Error('project-skills-missing');\n const entries = await readdir(sourceRoot, { withFileTypes: true });\n const ids = entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort();\n if (ids.length === 0) throw new Error('project-skills-empty');\n return Promise.all(ids.map((id) => skillRow(sourceRoot, id)));\n}\n\nasync function sameFiles(leftRoot: string, rightRoot: string): Promise<boolean> {\n const left = await filesUnder(leftRoot);\n const right = await filesUnder(rightRoot);\n const leftNames = left.map((path) => slash(relative(leftRoot, path)));\n const rightNames = right.map((path) => slash(relative(rightRoot, path)));\n if (JSON.stringify(leftNames) !== JSON.stringify(rightNames)) return false;\n for (let index = 0; index < left.length; index += 1) {\n const leftPath = left[index];\n const rightPath = right[index];\n if (leftPath === undefined || rightPath === undefined) return false;\n if (!(await readFile(leftPath)).equals(await readFile(rightPath))) return false;\n }\n return true;\n}\n\nexport async function copySdkSkills(sdk: SdkContext, projectRoot: string): Promise<void> {\n const targetSourceRoot = resolve(projectRoot, 'skills');\n const copies: { source: string; destination: string }[] = [];\n for (const skill of sdk.manifest.skills) {\n const source = resolve(sdk.root, skill.root);\n const destination = resolve(projectRoot, skill.root);\n if (!contained(sdk.root, source) || !contained(projectRoot, destination)) {\n throw new Error(`sdk-skill-path-invalid: ${skill.id}`);\n }\n const actual = await skillRow(resolve(sdk.root, 'skills'), skill.id);\n if (\n actual.root !== skill.root ||\n actual.fileCount !== skill.fileCount ||\n actual.byteCount !== skill.byteCount\n ) {\n throw new Error(`sdk-skill-manifest-drift: ${skill.id}`);\n }\n const kind = await pathKind(destination);\n if (kind === 'missing') {\n copies.push({ source, destination });\n } else if (kind !== 'directory' || !(await sameFiles(source, destination))) {\n throw new Error(`project-skill-source-conflict: ${skill.id}`);\n }\n }\n const created: string[] = [];\n try {\n await mkdir(targetSourceRoot, { recursive: true });\n for (const { source, destination } of copies) {\n await cp(source, destination, { recursive: true, errorOnExist: true, force: false });\n created.push(destination);\n }\n } catch (cause) {\n await Promise.all(created.map((path) => rm(path, { recursive: true, force: true })));\n throw cause;\n }\n}\n\nfunction expectedLinkTarget(projectRoot: string, mountRoot: string, id: string): string {\n const mountParent = resolve(projectRoot, mountRoot);\n const target = resolve(projectRoot, 'skills', id);\n return process.platform === 'win32' ? target : relative(mountParent, target);\n}\n\nasync function linkMatches(path: string, target: string): Promise<boolean> {\n if ((await pathKind(path)) !== 'symlink') return false;\n const actual = await readlink(path);\n return resolve(dirname(path), actual) === resolve(dirname(path), target);\n}\n\nfunction updateManagedGitignore(previous: string, skillIds: readonly string[]): string {\n const block = `${GITIGNORE_BEGIN}\\n${skillIds.map((id) => `/${id}`).join('\\n')}\\n${GITIGNORE_END}`;\n const begin = previous.indexOf(GITIGNORE_BEGIN);\n const end = previous.indexOf(GITIGNORE_END);\n if (begin >= 0 && end >= begin) {\n const after = end + GITIGNORE_END.length;\n return `${previous.slice(0, begin)}${block}${previous.slice(after)}`.replace(/^\\n+/, '');\n }\n return previous.length === 0 ? `${block}\\n` : `${previous.replace(/\\s*$/, '')}\\n\\n${block}\\n`;\n}\n\nfunction removeManagedGitignore(previous: string): string {\n const begin = previous.indexOf(GITIGNORE_BEGIN);\n const end = previous.indexOf(GITIGNORE_END);\n if (begin < 0 || end < begin) return previous;\n const before = previous.slice(0, begin).trimEnd();\n const after = previous.slice(end + GITIGNORE_END.length).trimStart();\n const retained = [before, after].filter((part) => part.length > 0).join('\\n');\n return retained.length === 0 ? '' : `${retained}\\n`;\n}\n\nasync function removeEmptyDirectory(path: string): Promise<void> {\n try {\n await rmdir(path);\n } catch (cause) {\n if (\n cause !== null &&\n typeof cause === 'object' &&\n 'code' in cause &&\n (cause.code === 'ENOENT' || cause.code === 'ENOTEMPTY' || cause.code === 'EEXIST')\n ) {\n return;\n }\n throw cause;\n }\n}\n\nasync function readOptional(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, 'utf8');\n } catch (cause) {\n if (cause !== null && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT') {\n return undefined;\n }\n throw cause;\n }\n}\n\nasync function readInstallManifest(root: string): Promise<SkillInstallManifest | undefined> {\n const value = await readOptional(resolve(root, MANIFEST_PATH));\n return value === undefined ? undefined : (JSON.parse(value) as SkillInstallManifest);\n}\n\nexport async function installProjectSkills(\n root: string,\n provenance?: Pick<SdkContext['manifest'], 'sdkVersion' | 'engineCommit'>,\n): Promise<SkillInstallReport> {\n const projectRoot = resolve(root);\n const skills = await discoverProjectSkills(projectRoot);\n const ids = skills.map((skill) => skill.id);\n const priorManifest = await readInstallManifest(projectRoot);\n const desiredLinks = PROJECT_SKILL_MOUNT_ROOTS.flatMap((mountRoot) =>\n ids.map((id) => ({\n path: resolve(projectRoot, mountRoot, id),\n target: expectedLinkTarget(projectRoot, mountRoot, id),\n })),\n );\n const desiredPaths = new Set(desiredLinks.map((entry) => entry.path));\n const desiredMountRoots = new Set<string>(PROJECT_SKILL_MOUNT_ROOTS);\n const retiredMountRoots = (priorManifest?.mounts ?? [])\n .map((mount) => mount.root)\n .filter(\n (mountRoot) =>\n !desiredMountRoots.has(mountRoot) && RETIRED_PROJECT_SKILL_MOUNT_ROOTS.has(mountRoot),\n );\n const staleLinks = (priorManifest?.mounts ?? [])\n .flatMap((mount) =>\n mount.skills.map((id) => ({\n path: resolve(projectRoot, mount.root, id),\n target: expectedLinkTarget(projectRoot, mount.root, id),\n })),\n )\n .filter((entry) => !desiredPaths.has(entry.path));\n\n for (const entry of desiredLinks) {\n const kind = await pathKind(entry.path);\n if (kind !== 'missing' && !(await linkMatches(entry.path, entry.target))) {\n throw new Error(`skill-mount-conflict: ${slash(relative(projectRoot, entry.path))}`);\n }\n }\n for (const entry of staleLinks) {\n const kind = await pathKind(entry.path);\n if (kind !== 'missing' && !(await linkMatches(entry.path, entry.target))) {\n throw new Error(`skill-stale-mount-conflict: ${slash(relative(projectRoot, entry.path))}`);\n }\n }\n\n const ignoreSnapshots = new Map<string, string | undefined>();\n const createdLinks: string[] = [];\n const removedLinks: { path: string; target: string }[] = [];\n const manifestPath = resolve(projectRoot, MANIFEST_PATH);\n const priorManifestText = await readOptional(manifestPath);\n try {\n for (const entry of staleLinks) {\n if ((await pathKind(entry.path)) === 'symlink') {\n await rm(entry.path);\n removedLinks.push(entry);\n }\n }\n for (const mountRoot of retiredMountRoots) {\n const mountParent = resolve(projectRoot, mountRoot);\n const ignorePath = resolve(mountParent, '.gitignore');\n const previous = await readOptional(ignorePath);\n ignoreSnapshots.set(ignorePath, previous);\n if (previous !== undefined) {\n const retained = removeManagedGitignore(previous);\n if (retained.length === 0) await rm(ignorePath);\n else await writeFile(ignorePath, retained);\n }\n await removeEmptyDirectory(mountParent);\n await removeEmptyDirectory(dirname(mountParent));\n }\n for (const mountRoot of PROJECT_SKILL_MOUNT_ROOTS) {\n const mountParent = resolve(projectRoot, mountRoot);\n await mkdir(mountParent, { recursive: true });\n const ignorePath = resolve(mountParent, '.gitignore');\n const previous = await readOptional(ignorePath);\n ignoreSnapshots.set(ignorePath, previous);\n await writeFile(ignorePath, updateManagedGitignore(previous ?? '', ids));\n for (const id of ids) {\n const path = resolve(mountParent, id);\n if ((await pathKind(path)) === 'missing') {\n const target = expectedLinkTarget(projectRoot, mountRoot, id);\n await symlink(target, path, process.platform === 'win32' ? 'junction' : 'dir');\n createdLinks.push(path);\n }\n }\n }\n const sdkVersion = provenance?.sdkVersion ?? priorManifest?.sdkVersion;\n const engineCommit = provenance?.engineCommit ?? priorManifest?.engineCommit;\n const manifest: SkillInstallManifest = {\n schemaVersion: '1.0.0',\n sourceRoot: 'skills',\n ...(sdkVersion === undefined ? {} : { sdkVersion }),\n ...(engineCommit === undefined ? {} : { engineCommit }),\n skills,\n mounts: PROJECT_SKILL_MOUNT_ROOTS.map((mountRoot) => ({ root: mountRoot, skills: ids })),\n };\n await mkdir(dirname(manifestPath), { recursive: true });\n await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`);\n } catch (cause) {\n await Promise.all(createdLinks.map((path) => rm(path, { force: true })));\n await Promise.all(\n removedLinks.map(async ({ path, target }) => {\n await mkdir(dirname(path), { recursive: true });\n await symlink(target, path, process.platform === 'win32' ? 'junction' : 'dir');\n }),\n );\n await Promise.all(\n [...ignoreSnapshots].map(async ([path, value]) => {\n if (value === undefined) await rm(path, { force: true });\n else {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, value);\n }\n }),\n );\n if (priorManifestText === undefined) await rm(manifestPath, { force: true });\n else await writeFile(manifestPath, priorManifestText);\n throw cause;\n }\n return {\n root: projectRoot,\n sourceRoot: resolve(projectRoot, 'skills'),\n manifest: manifestPath,\n skills: ids,\n mountRoots: PROJECT_SKILL_MOUNT_ROOTS,\n };\n}\n\nexport async function verifyProjectSkills(root: string): Promise<SkillInstallReport> {\n const projectRoot = resolve(root);\n const skills = await discoverProjectSkills(projectRoot);\n const ids = skills.map((skill) => skill.id);\n const manifest = await readInstallManifest(projectRoot);\n if (manifest === undefined) throw new Error('skill-install-manifest-missing');\n if (\n manifest.schemaVersion !== '1.0.0' ||\n manifest.sourceRoot !== 'skills' ||\n JSON.stringify(manifest.skills) !== JSON.stringify(skills) ||\n JSON.stringify(manifest.mounts.map((mount) => mount.root)) !==\n JSON.stringify(PROJECT_SKILL_MOUNT_ROOTS)\n ) {\n throw new Error('skill-install-manifest-drift');\n }\n for (const mountRoot of PROJECT_SKILL_MOUNT_ROOTS) {\n const declared = manifest.mounts.find((mount) => mount.root === mountRoot);\n if (declared === undefined || JSON.stringify(declared.skills) !== JSON.stringify(ids)) {\n throw new Error(`skill-install-manifest-mount-drift: ${mountRoot}`);\n }\n const ignore = await readOptional(resolve(projectRoot, mountRoot, '.gitignore'));\n if (ignore === undefined || updateManagedGitignore(ignore, ids) !== ignore) {\n throw new Error(`skill-mount-gitignore-drift: ${mountRoot}`);\n }\n for (const id of ids) {\n const path = resolve(projectRoot, mountRoot, id);\n const target = expectedLinkTarget(projectRoot, mountRoot, id);\n if (!(await linkMatches(path, target))) {\n throw new Error(`skill-mount-drift: ${mountRoot}/${id}`);\n }\n }\n }\n return {\n root: projectRoot,\n sourceRoot: resolve(projectRoot, 'skills'),\n manifest: resolve(projectRoot, MANIFEST_PATH),\n skills: ids,\n mountRoots: PROJECT_SKILL_MOUNT_ROOTS,\n };\n}\n\nexport async function skillInstallCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<SkillInstallReport>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n try {\n return { ok: true, value: await installProjectSkills(facts.value.root) };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'skill-install-failed') };\n }\n}\n\nexport async function skillVerifyCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<SkillInstallReport>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n try {\n return { ok: true, value: await verifyProjectSkills(facts.value.root) };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'skill-verify-failed') };\n }\n}\n","import { execFile } from 'node:child_process';\nimport {\n copyFile,\n cp,\n mkdir,\n mkdtemp,\n readFile,\n readdir,\n realpath,\n rename,\n rm,\n writeFile,\n} from 'node:fs/promises';\nimport { basename, dirname, isAbsolute, relative, resolve, sep } from 'node:path';\nimport { promisify } from 'node:util';\nimport { applyInitPlan, createInitPlan } from './init.js';\nimport { commandError, readProjectFacts } from './project.js';\nimport { findSdkContext } from './sdk.js';\nimport {\n requireSdkInitialization,\n sdkInitCommand,\n sdkProjectInstallArgs,\n} from './sdk-bootstrap.js';\nimport { copySdkSkills, installProjectSkills } from './skill-install.js';\nimport type { CommandResult, InitOptions, NewOptions, ProjectCommandOptions } from './types.js';\n\nconst execFileAsync = promisify(execFile);\n\nfunction isMissingPathError(cause: unknown): boolean {\n return cause !== null && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT';\n}\n\nasync function canonicalProspectivePath(path: string): Promise<string> {\n let cursor = resolve(path);\n const suffix: string[] = [];\n for (;;) {\n try {\n return resolve(await realpath(cursor), ...suffix.reverse());\n } catch (cause) {\n if (!isMissingPathError(cause)) throw cause;\n const parent = dirname(cursor);\n if (parent === cursor) throw cause;\n suffix.push(basename(cursor));\n cursor = parent;\n }\n }\n}\n\nasync function configureSdkStore(root: string, store: string | undefined): Promise<void> {\n if (store === undefined) return;\n const path = resolve(root, '.npmrc');\n let content = '';\n try {\n content = await readFile(path, 'utf8');\n } catch (cause) {\n if (!isMissingPathError(cause)) throw cause;\n }\n const lines = content\n .split(/\\r?\\n/)\n .filter((line) => line.trim().length > 0 && !/^\\s*store-dir\\s*=/.test(line));\n lines.push(`store-dir=${store}`);\n await writeFile(path, `${lines.join('\\n')}\\n`);\n}\n\nfunction containsOrEquals(parent: string, child: string): boolean {\n const path = relative(parent, child);\n return path === '' || (path !== '..' && !path.startsWith(`..${sep}`) && !isAbsolute(path));\n}\n\nexport interface DoctorReport {\n readonly root: string;\n readonly projectId: string;\n readonly node: string;\n readonly pnpm: string;\n readonly workspaceDependencies: readonly string[];\n}\n\nfunction nodeSupported(): boolean {\n const [major = 0, minor = 0] = process.versions.node.split('.').map(Number);\n return major > 22 || (major === 22 && minor >= 13);\n}\n\nfunction pnpmSupported(version: string): boolean {\n const [major = 0, minor = 0] = version.split('.').map(Number);\n return major === 11 && minor >= 7;\n}\n\nexport async function doctorCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<DoctorReport>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n let pnpm: string;\n try {\n pnpm = (await execFileAsync('pnpm', ['--version'], { cwd: facts.value.root })).stdout.trim();\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'pnpm-unavailable',\n expected: 'pnpm to be available on PATH',\n hint: 'Install the SDK-supported pnpm version and retry.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n if (!nodeSupported()) {\n return {\n ok: false,\n error: {\n code: 'node-version-unsupported',\n expected: 'Node.js >=22.13.0',\n hint: 'Select a supported Node.js installation and retry.',\n detail: { actual: process.versions.node },\n },\n };\n }\n if (!pnpmSupported(pnpm)) {\n return {\n ok: false,\n error: {\n code: 'pnpm-version-unsupported',\n expected: 'pnpm >=11.7.0 <12',\n hint: 'Enable the packageManager-declared pnpm version with Corepack and retry.',\n detail: { actual: pnpm },\n },\n };\n }\n const workspaceDependencies: string[] = [];\n for (const section of ['dependencies', 'devDependencies']) {\n const value = facts.value.packageJson[section];\n if (value === null || typeof value !== 'object') continue;\n for (const [name, version] of Object.entries(value)) {\n if (\n typeof version === 'string' &&\n (version.startsWith('workspace:') || version.startsWith('file:'))\n ) {\n workspaceDependencies.push(name);\n }\n }\n }\n if (workspaceDependencies.length > 0) {\n return {\n ok: false,\n error: {\n code: 'project-local-dependency',\n expected: 'all external project dependencies to use SDK-resolved exact versions',\n hint: 'Run forgeax init from the unpacked SDK and commit the resulting lockfile.',\n detail: { dependencies: workspaceDependencies.sort() },\n },\n };\n }\n return {\n ok: true,\n value: {\n root: facts.value.root,\n projectId: facts.value.id,\n node: process.versions.node,\n pnpm,\n workspaceDependencies,\n },\n };\n}\n\nexport async function initCommand(options: InitOptions = {}): Promise<CommandResult<unknown>> {\n try {\n const sdk = await findSdkContext();\n const root = await canonicalProspectivePath(options.root ?? process.cwd());\n if (sdk !== undefined && root === (await canonicalProspectivePath(sdk.root))) {\n return sdkInitCommand(sdk, options);\n }\n const facts = await readProjectFacts(root);\n if (!facts.ok) return facts;\n const plan = createInitPlan(facts.value, sdk?.manifest);\n if (!plan.ok) return plan;\n if (sdk !== undefined && options.dryRun !== true) {\n const initialized = await requireSdkInitialization(sdk);\n if (!initialized.ok) return initialized;\n }\n const applied = await applyInitPlan(facts.value, plan.value, options);\n if (!applied.ok || options.dryRun === true) return applied;\n if (sdk !== undefined) {\n const template = sdk.templates.get(sdk.defaultTemplate);\n if (template === undefined) throw new Error('sdk-default-template-missing');\n await copyFile(\n resolve(template, 'pnpm-lock.yaml'),\n resolve(facts.value.root, 'pnpm-lock.yaml'),\n );\n await copyFile(\n resolve(template, 'pnpm-workspace.yaml'),\n resolve(facts.value.root, 'pnpm-workspace.yaml'),\n );\n try {\n await readFile(resolve(facts.value.root, '.npmrc'), 'utf8');\n } catch (cause) {\n if (!isMissingPathError(cause)) throw cause;\n try {\n await copyFile(resolve(template, '.npmrc'), resolve(facts.value.root, '.npmrc'));\n } catch (templateCause) {\n if (!isMissingPathError(templateCause)) throw templateCause;\n }\n }\n await copySdkSkills(sdk, facts.value.root);\n await installProjectSkills(facts.value.root, sdk.manifest);\n await configureSdkStore(\n facts.value.root,\n sdk.store === undefined ? undefined : await canonicalProspectivePath(sdk.store),\n );\n }\n if (options.install === false) return applied;\n const store =\n sdk === undefined || sdk.store === undefined\n ? undefined\n : await canonicalProspectivePath(sdk.store);\n const installArgs =\n sdk === undefined ? ['install', '--frozen-lockfile=false'] : sdkProjectInstallArgs(store);\n await execFileAsync('pnpm', installArgs, {\n cwd: facts.value.root,\n env: { ...process.env, CI: 'true' },\n maxBuffer: 16 * 1024 * 1024,\n });\n return applied;\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'project-init-failed') };\n }\n}\n\nexport async function newCommand(options: NewOptions = {}): Promise<CommandResult<unknown>> {\n try {\n const sdk = await findSdkContext();\n if (sdk === undefined) {\n return {\n ok: false,\n error: {\n code: 'sdk-context-missing',\n expected: 'forgeax new to run from an unpacked ForgeaX SDK',\n hint: 'Run the SDK archive bin/forgeax.mjs entry or set FORGEAX_SDK_ROOT.',\n detail: {},\n },\n };\n }\n const root = resolve(options.root ?? process.cwd());\n if (\n containsOrEquals(\n await canonicalProspectivePath(sdk.root),\n await canonicalProspectivePath(root),\n )\n ) {\n return {\n ok: false,\n error: {\n code: 'project-target-inside-sdk',\n expected: 'forgeax new target to be outside the unpacked SDK root',\n hint: 'Choose a sibling directory or an absolute path outside the SDK.',\n detail: { root, sdkRoot: sdk.root },\n },\n };\n }\n const templateId = options.template ?? sdk.defaultTemplate;\n const template = sdk.templates.get(templateId);\n if (template === undefined) {\n return {\n ok: false,\n error: {\n code: 'sdk-template-not-found',\n expected: 'a template id declared by sdk-manifest.json',\n hint: `Choose one of: ${[...sdk.templates.keys()].sort().join(', ')}.`,\n detail: { template: templateId },\n },\n };\n }\n let targetExists = true;\n let entries: string[];\n try {\n entries = await readdir(root);\n } catch (cause) {\n if (!isMissingPathError(cause)) throw cause;\n targetExists = false;\n entries = [];\n }\n if (entries.length > 0) {\n return {\n ok: false,\n error: {\n code: 'project-target-not-empty',\n expected: 'forgeax new target to be absent or empty',\n hint: 'Choose an empty directory so existing files cannot be overwritten.',\n detail: { root },\n },\n };\n }\n if (options.dryRun === true) {\n return {\n ok: true,\n value: { root, template: templateId, sdkVersion: sdk.manifest.sdkVersion },\n };\n }\n const initialized = await requireSdkInitialization(sdk);\n if (!initialized.ok) return initialized;\n const parent = dirname(root);\n await mkdir(parent, { recursive: true });\n let staging: string | undefined = await mkdtemp(\n resolve(parent, `.${basename(root)}.forgeax-staging-`),\n );\n const committedNames: string[] = [];\n let committed = false;\n try {\n for (const name of await readdir(template)) {\n await cp(resolve(template, name), resolve(staging, name), {\n recursive: true,\n errorOnExist: true,\n force: false,\n });\n }\n await copySdkSkills(sdk, staging);\n await installProjectSkills(staging, sdk.manifest);\n const store = sdk.store === undefined ? undefined : await canonicalProspectivePath(sdk.store);\n await configureSdkStore(staging, store);\n if (!targetExists) {\n await rename(staging, root);\n staging = undefined;\n committedNames.push(...(await readdir(root)));\n } else {\n for (const name of await readdir(staging)) {\n await rename(resolve(staging, name), resolve(root, name));\n committedNames.push(name);\n }\n await rm(staging, { recursive: true, force: true });\n staging = undefined;\n }\n committed = true;\n // Install after the final rename so pnpm's virtual-store metadata keeps\n // the real project path. Installing inside staging would force a second\n // registry resolution when `pnpm exec` runs from the committed project.\n await execFileAsync('pnpm', sdkProjectInstallArgs(store), {\n cwd: root,\n env: { ...process.env, CI: 'true' },\n maxBuffer: 16 * 1024 * 1024,\n });\n return {\n ok: true,\n value: { root, template: templateId, sdkVersion: sdk.manifest.sdkVersion },\n };\n } catch (cause) {\n if (staging !== undefined) await rm(staging, { recursive: true, force: true });\n if (committed) {\n if (!targetExists) {\n await rm(root, { recursive: true, force: true });\n return { ok: false, error: commandError(cause, 'project-create-failed') };\n }\n const cleanupNames = new Set([...committedNames, 'node_modules']);\n await Promise.all(\n [...cleanupNames].map((name) =>\n rm(resolve(root, name), { recursive: true, force: true }),\n ),\n );\n } else {\n await Promise.all(\n committedNames.map((name) => rm(resolve(root, name), { recursive: true, force: true })),\n );\n }\n return { ok: false, error: commandError(cause, 'project-create-failed') };\n }\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'project-create-failed') };\n }\n}\n","import { execFile } from 'node:child_process';\nimport { readFile, rename, unlink, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport { type GameProjectPluginEntry, GameProjectSchema } from '@forgeax/engine-project';\nimport type { CommandResult, PluginInstallOptions, PluginUninstallOptions } from './types.js';\n\nconst execFileAsync = promisify(execFile);\n\nasync function readManifest(root: string): Promise<CommandResult<{ raw: string; value: unknown }>> {\n const path = resolve(root, 'forge.json');\n try {\n const raw = await readFile(path, 'utf8');\n return { ok: true, value: { raw, value: JSON.parse(raw) as unknown } };\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'plugin-manifest-unreadable',\n expected: 'a readable forge.json',\n hint: 'Repair the project manifest before changing plugin installation state.',\n detail: { path, reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n\nasync function writeManifest(root: string, value: unknown): Promise<void> {\n const path = resolve(root, 'forge.json');\n const temporary = resolve(root, `.forgeax-plugin-${process.pid}.tmp`);\n await writeFile(temporary, `${JSON.stringify(value, null, 2)}\\n`);\n try {\n await rename(temporary, path);\n } catch (cause) {\n await unlink(temporary).catch(() => undefined);\n throw cause;\n }\n}\n\nfunction allEntries(entries: readonly GameProjectPluginEntry[]): GameProjectPluginEntry[] {\n return entries.flatMap((entry) => [\n entry,\n ...(entry.group === true ? allEntries(entry.config as readonly GameProjectPluginEntry[]) : []),\n ]);\n}\n\nfunction withoutEntry(\n entries: readonly GameProjectPluginEntry[],\n id: string,\n): GameProjectPluginEntry[] {\n return entries.flatMap((entry) => {\n if (entry.id === id) return [];\n if (entry.group !== true) return [entry];\n return [\n {\n ...entry,\n config: withoutEntry(entry.config as readonly GameProjectPluginEntry[], id),\n },\n ];\n });\n}\n\nasync function mutateDependency(\n root: string,\n action: 'add' | 'remove',\n dependency: string | undefined,\n): Promise<void> {\n if (dependency === undefined) return;\n await execFileAsync('pnpm', [action, dependency], { cwd: root, maxBuffer: 16 * 1024 * 1024 });\n}\n\nexport async function pluginInstallCommand(\n options: PluginInstallOptions,\n): Promise<CommandResult<unknown>> {\n const root = resolve(options.root ?? process.cwd());\n const manifest = await readManifest(root);\n if (!manifest.ok) return manifest;\n const parsed = GameProjectSchema.safeParse(manifest.value.value);\n if (!parsed.success) {\n return {\n ok: false,\n error: {\n code: 'plugin-manifest-invalid',\n expected: 'forge.json to satisfy GameProjectSchema',\n hint: 'Repair the manifest before installing a plugin.',\n detail: { issues: parsed.error.issues },\n },\n };\n }\n const entries = parsed.data.plugins ?? [];\n if (allEntries(entries).some((entry) => entry.id === options.id)) {\n return {\n ok: false,\n error: {\n code: 'plugin-entry-id-conflict',\n expected: 'a project-unique plugin Entry id',\n hint: 'Choose a stable id not already present in forge.json#plugins.',\n detail: { id: options.id },\n },\n };\n }\n const next = {\n ...parsed.data,\n plugins: [\n ...entries,\n { id: options.id, name: options.module, realm: options.realm ?? 'engine' },\n ],\n };\n if (options.dryRun === true) return { ok: true, value: { root, manifest: next } };\n try {\n await writeManifest(root, next);\n await mutateDependency(root, 'add', options.dependency);\n return { ok: true, value: { root, id: options.id, module: options.module } };\n } catch (cause) {\n await writeFile(resolve(root, 'forge.json'), manifest.value.raw);\n return {\n ok: false,\n error: {\n code: 'plugin-install-failed',\n expected: 'dependency and forge.json Entry mutations to commit together',\n hint: 'Inspect the package-manager failure; the original forge.json was restored.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n\nexport async function pluginUninstallCommand(\n options: PluginUninstallOptions,\n): Promise<CommandResult<unknown>> {\n const root = resolve(options.root ?? process.cwd());\n const manifest = await readManifest(root);\n if (!manifest.ok) return manifest;\n const parsed = GameProjectSchema.safeParse(manifest.value.value);\n if (!parsed.success) {\n return {\n ok: false,\n error: {\n code: 'plugin-manifest-invalid',\n expected: 'forge.json to satisfy GameProjectSchema',\n hint: 'Repair the manifest before uninstalling a plugin.',\n detail: { issues: parsed.error.issues },\n },\n };\n }\n const entries = parsed.data.plugins ?? [];\n if (!allEntries(entries).some((entry) => entry.id === options.id)) {\n return {\n ok: false,\n error: {\n code: 'plugin-entry-missing',\n expected: 'the plugin Entry id to exist',\n hint: 'Inspect forge.json#plugins and pass an installed Entry id.',\n detail: { id: options.id },\n },\n };\n }\n const next = { ...parsed.data, plugins: withoutEntry(entries, options.id) };\n if (options.dryRun === true) return { ok: true, value: { root, manifest: next } };\n try {\n await writeManifest(root, next);\n await mutateDependency(root, 'remove', options.dependency);\n return { ok: true, value: { root, id: options.id } };\n } catch (cause) {\n await writeFile(resolve(root, 'forge.json'), manifest.value.raw);\n return {\n ok: false,\n error: {\n code: 'plugin-uninstall-failed',\n expected: 'Entry and dependency removal to commit together',\n hint: 'Inspect the package-manager failure; the original forge.json was restored.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n","// @forgeax/engine-rhi/src/errors - RhiError + closed RhiErrorCode union + Result<T, E>.\n//\n// Shape:\n// - RhiErrorCode = closed union 23 members (charter P3: closed-union\n// exhaustive switch needs no default fallback; tsc strict mode guards\n// completeness). Extended from 6 to 10 in feat-20260508-rhi-surface-completion\n// w7 (D-S3): added 'command-encoder-finished' / 'render-pass-not-ended' /\n// 'queue-submit-failed' / 'queue-write-buffer-out-of-bounds'.\n// Extended from 10 to 14 in feat-20260509-ecs-render-bridge-mvp w6 (D-S7):\n// added 'render-system-no-camera' / 'render-system-multi-camera' /\n// 'render-system-multi-light' / 'asset-not-registered'.\n// Extended from 14 to 17 in feat-20260511-rhi-spec-realign-aggressive w6\n// (D-P4 + R-02 §2.1 W3C spec 22.2 subtypes): added 'device-lost' / 'oom' /\n// 'internal-error' so the onError fan-out can disambiguate spec error\n// subclasses without falling back to the bucket 'webgpu-runtime-error'.\n// Extended from 17 to 18 in feat-20260511-asset-system-v1 w4\n// (D-P2 + requirements §9 row 8 + AC-04 + AC-21): added\n// 'hierarchy-broken' for `propagateTransforms` stale ChildOf ref fail-fast\n// (ChildOf component references a destroyed entity); same\n// render-system / schedule semantic domain as\n// 'render-system-multi-camera' / 'render-system-no-camera'. Minor add-only\n// per AGENTS.md evolution contract (no reorder / rename / deprecate).\n// Extended from 18 to 19 in feat-20260612-rhi-destroy-renderer-dispose-gpu-\n// lifecycle M1 (D-6 + D-7 + AC-02 / AC-03): added 'destroy-after-destroy'\n// for second `destroyBuffer` / `destroyTexture` on the same handle. The\n// shim layer (rhi-webgpu + rhi-wgpu) tracks per-handle `destroyed: boolean`\n// in WeakMap-backed meta and fail-fasts the second call rather than\n// forwarding it to the underlying GPU (research F-1 wgpu wasm `destroy()`\n// is idempotent void; F-8 WebGPU spec is also idempotent void; D-7 prefers\n// fail-fast over silent idempotency because double-destroy is almost always\n// a lifecycle bug). Minor add-only per AGENTS.md evolution contract.\n// Extended from 19 to 20 in feat-20260619-wasm-fault-isolation M3 w7:\n// added 'rhi-descriptor-invalid' for `createRenderPipeline` (and other\n// create* entries) descriptor parse failures surfaced through the wgpu-wasm\n// backend (Rust `#[wasm_bindgen(catch)]` Err). The prefix-based\n// classification (D-1 / D-2) routes wasm exceptions with the stable marker\n// `[wgpu-wasm] failed to parse` to this code; exceptions without the prefix\n// remain in 'webgpu-runtime-error'. Semantics: descriptor parse failure =\n// caller bug (malformed descriptor data passed from TS), distinct from\n// 'webgpu-runtime-error' = runtime condition (valid descriptor rejected by\n// wgpu backend). Minor add-only per AGENTS.md evolution contract.\n// Extended from 20 to 21 in feat-20260622-chunk-gpu-instancing-sprite-\n// tilemap M2 w10 (D-2 + AC-05 + research N-1): added\n// 'instancing-exceeds-uniform-cap' for the WebGL2 uniform-fallback path\n// when a record-stage fold bucket carries more than 128 instances\n// (128 = MAX_UNIFORM_INSTANCES; 128 * 64B = 8192B comfortably fits the\n// WebGL2 minimum 16384B UBO size, leaving headroom for the per-frame\n// material UBO slice — research N-1 implements the locked value). The\n// record-stage dispatch site fires the error AND falls the offending\n// bucket back to per-entity drawIndexed (the same exit the mode-gate\n// bypass uses — plan-strategy D-9 \"shared fallback exit\"). Semantics:\n// distinct from 'limit-exceeded' (byte-cap against\n// maxStorageBufferBindingSize) — this code targets the per-bucket\n// instance-count cap, which is a backend-capability ceiling rather than\n// an allocation-size ceiling. AI users branch on .code first then read\n// detail.requested / .limit / .scope through property access (charter\n// P3 + plan-strategy 8.3 actionable hint). Minor add-only\n// per AGENTS.md evolution contract.\n// Extended from 21 to 23 in feat-20260708-composited-multi-world-rendering\n// M3 (D-5): added 'render-system-empty-worlds' + 'render-system-owner-out-of-\n// range' for draw(worlds, { cameraOwner, resourceOwner }) entry validation. The\n// owner-out-of-range path exposes .detail = RhiOwnerOutOfRangeDetail\n// ({ role, owner, worldCount } after feat-20260709-editor-world-partition\n// M1 / w7: role ∈ {'camera','resource'} names which of the two split draw\n// owners is out of range); empty-worlds carries no .detail. The pure\n// validateDrawArgs(worldCount, { cameraOwner, resourceOwner })\n// helper (World-free primitives) emits both and is consumed by the runtime\n// createRenderer draw entry (the codes' SSOT stays in rhi). Checks run\n// empty-worlds -> cameraOwner -> resourceOwner; the first out-of-range owner\n// wins (role='camera' when both offend). Add-only (no new code, 0 net Δ per\n// D-3) per AGENTS.md evolution contract.\n// - RhiError class has readonly .code / .expected / .hint three-field surface\n// (AGENTS.md \"Errors are structured\" / D-5); the 'shader-compile-failed' path\n// exposes .detail = RhiShaderCompileDetail (compilerMessages array);\n// the 'asset-not-registered' path exposes .detail = RhiAssetNotRegisteredDetail\n// ({ assetHandle: number }, D-S6); the 'webgpu-runtime-error' path optionally\n// exposes .detail = RhiWebgpuRuntimeDetail ({ error: RhiError | fallback }, D-S8) for\n// RenderSystem internal exception fan-out; the 'limit-exceeded' path\n// exposes .detail = LimitExceededDetail ({ maxStorageBufferBindingSize,\n// requestedBytes }, feat-20260513-instanced-mesh M5 reshape from legacy\n// { renderableCount, limit }); the other 15 paths leave\n// .detail = undefined per charter proposition 4 baseline.\n// - Result<T, E> = binary tag union ('ok' / 'err'), per AGENTS.md \"Errors are\n// structured\" convention.\n//\n// Related: requirements AC AC-10 + MVP-1.7 + AC-RSC-07 + hard-constraint 8 +\n// AI User Affordances; plan-strategy 2 S-6 (types/rhi single source) +\n// 7.3 error-info table; plan-decisions OQ-P2 (forward all 6 fields of\n// GPUCompilationMessage); D-S3 (4 command/queue members) + D-S6 / D-S7\n// / D-S8 (4 RenderSystem / AssetRegistry members + .detail structure).\n\n/// <reference types=\"@webgpu/types\" />\n\nimport { err, ok, type Result } from '@forgeax/engine-types';\n\n/**\n * Closed RhiErrorCode union. `switch` exhaustive checks need no default\n * fallback - tsc strict mode guards union completeness (charter proposition 4\n * + proposition 3: machine-readable union > prose).\n *\n *\n * The executable union below is the machine-readable source of truth for\n * the 23 members. The package README owns the AI-facing trigger and recovery\n * table; keeping that projection in one documentation owner avoids a second\n * member ledger drifting from the union.\n *\n * @example AI-user exhaustive switch on the 4 command/queue members (no default fallback)\n * ```ts\n * import type { RhiError, RhiErrorCode } from '@forgeax/engine-rhi';\n *\n * function recover(code: RhiErrorCode): string {\n * switch (code) {\n * // ... 6 baseline members elided ...\n * case 'command-encoder-finished': return 'recreate encoder via device.createCommandEncoder()';\n * case 'render-pass-not-ended': return 'call pass.end() before next beginRenderPass()';\n * case 'queue-submit-failed': return 'audit buffer/pipeline lifetimes before submit';\n * case 'queue-write-buffer-out-of-bounds': return 'realign offset and re-check buffer.size';\n * default: return 'baseline path';\n * }\n * }\n * ```\n */\nexport type RhiErrorCode =\n | 'adapter-unavailable'\n | 'feature-not-enabled'\n | 'limit-exceeded'\n | 'shader-compile-failed'\n | 'rhi-not-available'\n | 'webgpu-runtime-error'\n | 'command-encoder-finished'\n | 'render-pass-not-ended'\n | 'queue-submit-failed'\n | 'queue-write-buffer-out-of-bounds'\n | 'render-system-no-camera'\n | 'render-system-multi-camera'\n | 'render-system-multi-light'\n | 'asset-not-registered'\n | 'device-lost'\n | 'oom'\n | 'internal-error'\n | 'hierarchy-broken'\n | 'destroy-after-destroy'\n | 'rhi-descriptor-invalid'\n | 'instancing-exceeds-uniform-cap'\n | 'render-system-empty-worlds'\n | 'render-system-owner-out-of-range';\n\n/**\n * Detail structure exclusive to the `shader-compile-failed` path.\n *\n * `compilerMessages` directly forwards the 6 standardized fields of\n * `GPUCompilationMessage` from `@webgpu/types` v0.1.69 (`message` / `type` /\n * `lineNum` / `linePos` / `offset` / `length`); research F-3 finding;\n * plan-decisions OQ-P2 locks full-field forwarding.\n *\n * @see {@link GPUCompilationMessage}\n */\nexport interface RhiShaderCompileDetail {\n readonly compilerMessages: readonly GPUCompilationMessage[];\n}\n\n/**\n * Detail structure exclusive to the `asset-not-registered` path (D-S6).\n *\n * `assetHandle` carries the offending u32 handle the caller passed via\n * `MeshFilter.assetHandle`; AI users access it through property access\n * (`err.detail.assetHandle`) rather than parsing the message string\n * (charter proposition 4 + F-3 contract surface).\n */\nexport interface RhiAssetNotRegisteredDetail {\n readonly assetHandle: number;\n}\n\n/**\n * Detail structure exclusive to the `webgpu-runtime-error` path (D-S8).\n *\n * `error` carries the underlying exception object so AI users can inspect the\n * root cause (`.code` / `.expected` / `.hint` for `RhiError` paths, or\n * `.code` + `.message` for non-RhiError falls) without parsing the\n * RhiError.message field. Optional: the K-9 silent-skip fan-out root path\n * may emit `webgpu-runtime-error` without `.detail` when the underlying\n * exception is unavailable.\n *\n * feat-20260608-mesh-ssbo-dynamic-grow-l1-lift-1024-entity-cap M4 / T-M4-02:\n * `error` field type widened from `string` to `RhiError | { code: string;\n * message: string }` so downstream `switch (err.code)` handlers can narrow\n * the inner error (`.code` / `.expected` / `.hint`) without an `as` cast.\n */\nexport interface RhiWebgpuRuntimeDetail {\n readonly error: RhiError | { code: string; message: string; name?: string };\n}\n\n/**\n * Detail structure exclusive to the `limit-exceeded` path.\n *\n * `maxStorageBufferBindingSize` carries the device-reported storage cap\n * (`device.limits.maxStorageBufferBindingSize`); `requestedBytes`\n * carries the byte count the caller attempted to allocate. AI users\n * access these through typed property access (`err.detail.maxStorageBufferBindingSize`\n * / `err.detail.requestedBytes`) rather than parsing the message string\n * — charter proposition 4 structured-error consumption path; `err.hint`\n * is for human eyeballs only.\n *\n * Single live emit point: the RenderSystem record stage per-entity\n * instance buffer upload path\n * (`packages/runtime/src/render-system-record.ts`). The 18-member\n * `RhiErrorCode` union is unchanged (`'limit-exceeded'` discriminant\n * preserved); evolution major rename + replace of the discriminated\n * `detail` shape per AGENTS.md Change stance + plan-strategy D-3.\n *\n * Migration history:\n * - feat-20260513-instanced-mesh M5: detail reshape from\n * `{ renderableCount, limit }` to `{ maxStorageBufferBindingSize,\n * requestedBytes }`. Emit point at the time was\n * `AssetRegistry.createInstancedBuffer`.\n * - feat-20260514-ecs-children-instances-managed-buffer-array M3 / w15:\n * `AssetRegistry.createInstancedBuffer` deleted alongside the\n * `InstancedBufferAsset` POD; emit point migrated to the record\n * stage upload path (`requestedBytes` now equals\n * `Instances.transforms.byteLength` per Instances-bearing entity).\n */\nexport interface LimitExceededDetail {\n readonly maxStorageBufferBindingSize: number;\n readonly requestedBytes: number;\n}\n\n/**\n * Detail structure exclusive to the `'render-system-multi-light'` path\n * (feat-20260519-light-casters-point-spot-pbr M3 / w20 + plan-strategy\n * section 8 (3) (b)).\n *\n * Emitted by the RenderSystem record stage when first-slice cap exceedance\n * is detected: `type` discriminates the offending bucket\n * (`'directional'` for N>1 / `'point'` or `'spot'` for N>4); `got`\n * carries the observed entity count so AI users can branch via property\n * access (`err.detail.type === 'point' && err.detail.got > 4`) rather\n * than parsing the message string (charter proposition 4 + F-3 contract\n * surface).\n *\n * Single live emit point: the RenderSystem record stage three-bucket\n * fail-fast (`packages/runtime/src/render-system-record.ts`). Minor\n * additive evolution per AGENTS.md error model evolution contract.\n */\nexport interface RhiMultiLightDetail {\n readonly type: 'directional' | 'point' | 'spot';\n readonly got: number;\n}\n\n/**\n * Detail structure exclusive to the `'instancing-exceeds-uniform-cap'` path\n * (feat-20260622-chunk-gpu-instancing-sprite-tilemap M2 / w10 +\n * plan-strategy 2 D-2 + research N-1).\n *\n * Emitted by the record-stage fold dispatch loop\n * (`packages/runtime/src/render-system-record.ts`) when\n * `caps.storageBuffer === false` AND a fold bucket carries more than\n * `limit` instances. The engine fires the error AND falls the offending\n * bucket back to per-entity drawIndexed via the same exit the mode-gate\n * bypass uses (plan-strategy D-9 \"shared fallback exit\"), so the frame\n * is still visually correct (no identity-collapse / black screen) and\n * the cap event surfaces structurally for AI users to observe.\n *\n * Fields:\n * - `requested` — the offending bucket's instance count\n * (`FoldBucket.bucketSize`); always strictly greater than `limit` at\n * emit time (the cap-check helper guards `requested > limit`).\n * - `limit` — the literal 128. The value is locked at the type level\n * because the cap is structurally tied to the WebGL2 minimum 16384 B\n * UBO size (128 * 64 B mat4 stride = 8192 B leaves headroom for the\n * per-frame material UBO slice — research N-1). A future cap change\n * would be a major evolution, not a runtime knob.\n * - `scope` — closed `'sprite' | 'tilemap-chunk'` discriminator that\n * pinpoints the dispatch site (sprite-pass entry that came directly\n * from a user-spawned Sprite vs one derived by\n * `tilemap-chunk-extract-system`). AI users branch on `.scope` to\n * decide whether to shrink the sprite batch size or the tilemap\n * chunk size.\n *\n * AI-user consumption (charter P3 + plan-strategy 8.3):\n * ```ts\n * if (err.code === 'instancing-exceeds-uniform-cap') {\n * const d = err.detail as RhiInstancingExceedsUniformCapDetail;\n * if (d.scope === 'sprite') shrinkSpriteBatchSize(d.requested);\n * else if (d.scope === 'tilemap-chunk') shrinkTileChunkSize(d.requested);\n * }\n * ```\n * — never parse `err.message`. The discriminated `detail` field is the\n * surface; the human-readable `err.message` is for logs only.\n */\nexport interface RhiInstancingExceedsUniformCapDetail {\n readonly requested: number;\n readonly limit: 128;\n readonly scope: 'sprite' | 'tilemap-chunk';\n}\n\n/**\n * Detail structure exclusive to the `'render-system-owner-out-of-range'` path\n * (feat-20260708-composited-multi-world-rendering M3 / D-5).\n *\n * Emitted by `renderer.draw(worlds, { cameraOwner, resourceOwner })` when one\n * owner index is not valid for `worlds` (`owner < 0` or `owner >= worlds.length`).\n * An out-of-range index cannot resolve, so the frame is skipped before extract.\n *\n * Fields:\n * - `role` — WHICH of the two draw-owner indices was out of range\n * (feat-20260709-editor-world-partition M1 / w7). `draw(worlds, {\n * cameraOwner, resourceOwner })` carries two independent indices; `role`\n * tells the AI user whether the camera-source index (`'camera'`) or the\n * singleton-resource index (`'resource'`) is the offender, so the fix is\n * unambiguous from the text channel (no new error code — D-3 keeps 0 net\n * new codes; the discriminator lives in `.detail`). When both indices are\n * out of range the first offender is reported: `cameraOwner` is validated\n * before `resourceOwner`, so `role === 'camera'`.\n * - `owner` — the offending index the caller passed (the `role` index's\n * value).\n * - `worldCount` — `worlds.length` at call time (the valid range is\n * `0 .. worldCount - 1`).\n *\n * AI users branch via property access (`err.detail.role` / `err.detail.owner` /\n * `err.detail.worldCount`) after narrowing on `.code`, rather than parsing the\n * message string (charter P3 structured-failure surface).\n *\n * The sibling `'render-system-empty-worlds'` path carries no `.detail` — an\n * empty array is fully described by `.code`, and the entry check short-circuits\n * to that code before the owner-range check runs (the two codes are\n * non-exclusive).\n */\nexport interface RhiOwnerOutOfRangeDetail {\n readonly role: 'camera' | 'resource';\n readonly owner: number;\n readonly worldCount: number;\n}\n\n/**\n * Tagged union of `.detail` shapes carried by structured errors.\n *\n * Entries:\n * - `RhiShaderCompileDetail` (carries `compilerMessages`) - emitted on the\n * `'shader-compile-failed'` path.\n * - `RhiAssetNotRegisteredDetail` (carries `assetHandle`) - emitted on the\n * `'asset-not-registered'` path (D-S6).\n * - `RhiWebgpuRuntimeDetail` (carries `error: RhiError | { code, message }`) - optionally emitted\n * on the `'webgpu-runtime-error'` path when a captured `Error.message` is\n * available (D-S8).\n * - `LimitExceededDetail` (carries `maxStorageBufferBindingSize` +\n * `requestedBytes`) - emitted on the `'limit-exceeded'` path when\n * the RenderSystem record stage's per-entity Instances upload\n * exceeds `device.limits.maxStorageBufferBindingSize`\n * (feat-20260514-ecs-children-instances-managed-buffer-array M3 / w15;\n * emit point migrated from the deleted\n * `AssetRegistry.createInstancedBuffer` factory).\n *\n * The other 15 paths leave `.detail = undefined` (charter proposition 4\n * baseline).\n */\nexport type RhiErrorDetail =\n | RhiShaderCompileDetail\n | RhiAssetNotRegisteredDetail\n | RhiWebgpuRuntimeDetail\n | LimitExceededDetail\n | RhiMultiLightDetail\n | RhiInstancingExceedsUniformCapDetail\n | RhiOwnerOutOfRangeDetail;\n\n/**\n * Structured RHI error.\n *\n * Three readonly fields aligned with AGENTS.md \"Errors are structured\":\n * - `.code` - closed union member (L1 key signal).\n * - `.expected` - expected-state description (L2 detail).\n * - `.hint` - actionable recovery guidance (L2 detail; charter proposition 3:\n * machine-readable hint > prose).\n *\n * `.detail` is populated on four paths:\n * - `code === 'shader-compile-failed'` -> `RhiShaderCompileDetail`\n * - `code === 'asset-not-registered'` -> `RhiAssetNotRegisteredDetail`\n * - `code === 'webgpu-runtime-error'` -> `RhiWebgpuRuntimeDetail` (optional)\n * - `code === 'limit-exceeded'` -> `LimitExceededDetail`\n * (feat-20260513-instanced-mesh M5 reshape; carries\n * `maxStorageBufferBindingSize` + `requestedBytes`)\n *\n * The other 15 paths leave `.detail = undefined` (charter proposition 4\n * baseline).\n *\n * Note: `RhiErrorDetail` is currently a flat tagged union without a\n * `code` discriminant field on each variant; AI users perform typed\n * narrowing via outer `switch (err.code)` then a one-time `as` cast on\n * `err.detail` per the documented variant. Full discriminated-union\n * refactor (each variant carrying its own `code` literal field) is left\n * to `feat-future-rhi-error-detail-discriminant` spinoff.\n */\nexport class RhiError extends Error {\n readonly code: RhiErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: RhiErrorDetail | undefined;\n\n constructor(args: {\n code: RhiErrorCode;\n expected: string;\n hint: string;\n detail?: RhiErrorDetail | undefined;\n }) {\n super(`[RhiError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n this.name = 'RhiError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n this.detail = args.detail;\n }\n}\n\n/**\n * The two split draw-owner indices carried by\n * `draw(worlds, { cameraOwner, resourceOwner })`\n * (feat-20260709-editor-world-partition M1 / w6). `cameraOwner` selects the\n * world whose cameras are surfaced; `resourceOwner` selects the world whose\n * skylight / skybox / postProcessParams are surfaced. Declared here (World-free\n * primitives) so the validator and the `RhiOwnerOutOfRangeDetail.role`\n * discriminator live in one SSOT package (architecture-principles §1).\n */\nexport interface DrawOwnerSplit {\n readonly cameraOwner: number;\n readonly resourceOwner: number;\n}\n\n/**\n * Validate `renderer.draw(worlds, { cameraOwner, resourceOwner })` arguments at\n * the draw entry (feat-20260708 M3 / D-5, extended by\n * feat-20260709-editor-world-partition M1 / w6-w7).\n *\n * The validator takes primitives (`worldCount = worlds.length`, plus the owner\n * index/indices) — no `World`, no math — so it lives in `@forgeax/engine-rhi`\n * alongside the `RhiErrorCode` members it emits (architecture-principles §1\n * SSOT). The runtime `createRenderer` draw entry calls it before any extract; a\n * non-`ok` result skips the frame with a structured error (charter P3), never a\n * silent no-op.\n *\n * Checks, in order (D-5 + w6):\n * 1. `worldCount === 0` -> `'render-system-empty-worlds'` (no `.detail`).\n * 2. `cameraOwner` is not a valid index -> `'render-system-owner-out-of-range'`\n * with `.detail = { role: 'camera', owner: cameraOwner, worldCount }`.\n * 3. `resourceOwner` is not a valid index -> `'render-system-owner-out-of-range'`\n * with `.detail = { role: 'resource', owner: resourceOwner, worldCount }`.\n * The `Number.isInteger` guard rejects a `NaN` / fractional / undefined-coerced\n * index a JS caller could pass despite the compile-time requirement. When both\n * indices are out of range the FIRST offender wins: `cameraOwner` is checked\n * before `resourceOwner`, so `role === 'camera'` (D-3 / w3 contract).\n *\n * The empty-worlds guard short-circuits before either owner-range check.\n */\nexport function validateDrawArgs(\n worldCount: number,\n owner: DrawOwnerSplit,\n): Result<void, RhiError> {\n if (worldCount === 0) {\n return err(\n new RhiError({\n code: 'render-system-empty-worlds',\n expected: 'worlds array has at least one world',\n hint: 'pass at least one world: draw([world], { cameraOwner: 0, resourceOwner: 0 })',\n }),\n );\n }\n const { cameraOwner, resourceOwner } = owner;\n const outOfRange = (index: number): boolean =>\n !Number.isInteger(index) || index < 0 || index >= worldCount;\n // cameraOwner is validated first: it is the first offender when both indices\n // are out of range (w3 contract). role names which index the AI user fixes.\n if (outOfRange(cameraOwner)) {\n return err(\n new RhiError({\n code: 'render-system-owner-out-of-range',\n expected: 'cameraOwner is an index into worlds (0 <= cameraOwner < worlds.length)',\n hint: 'cameraOwner must be in 0..worlds.length-1; the cameraOwner world supplies the surfaced cameras',\n detail: { role: 'camera', owner: cameraOwner, worldCount },\n }),\n );\n }\n if (outOfRange(resourceOwner)) {\n return err(\n new RhiError({\n code: 'render-system-owner-out-of-range',\n expected: 'resourceOwner is an index into worlds (0 <= resourceOwner < worlds.length)',\n hint: 'resourceOwner must be in 0..worlds.length-1; the resourceOwner world supplies skylight/skybox/postProcess',\n detail: { role: 'resource', owner: resourceOwner, worldCount },\n }),\n );\n }\n return ok(undefined);\n}\n\n// Result<T, E> + ok / err live in `@forgeax/engine-types` (tweak-20260612-result-\n// into-types). They were duplicated here (\"byte-for-byte aligned\" by prose) and\n// in packages/ecs/src/result.ts; SSOT consolidated upstream. The barrel here\n// re-exports them so existing `import { err, ok, Result, ResultOk, ResultErr }\n// from '@forgeax/engine-rhi'` consumers stay unchanged.\nexport {\n err,\n ok,\n type Result,\n type ResultErr,\n type ResultOk,\n} from '@forgeax/engine-types';\n","// @forgeax/engine-rhi-null/src/command-encoder - headless command encoder.\n//\n// RhiNullCommandEncoder is a no-op recorder: begin*Pass returns a fresh\n// pass-encoder bound to the same per-device ledger; copy* / clear* / debug* /\n// writeTimestamp are no-ops; resolveQuerySet / finish return ok. finish() mints\n// a legal CommandBuffer brand through the ledger so submit-side bookkeeping\n// (AC-12) can read it back.\n//\n// Each beginRenderPass / beginComputePass reads the `label` from the descriptor\n// and threads it as the pass name to the per-device counters so M3 unit tests\n// (w17 AC-04) can assert per-frame pass scheduling order.\n//\n// Related: requirements AC-04 (pass sequence) + AC-06 (draw count via pass\n// encoders); research Finding A1 row 5; plan-strategy §3.1.\n\nimport type {\n Buffer,\n CommandBuffer,\n ComputePassDescriptor,\n QuerySet,\n Result,\n RhiCommandEncoder,\n RhiComputePassEncoder,\n RhiError as RhiErrorType,\n RhiRenderPassEncoder,\n} from '@forgeax/engine-rhi';\nimport { ok } from '@forgeax/engine-types';\nimport type { Bookkeeper } from './bookkeeping';\nimport type { RhiNullDevice } from './device';\nimport {\n type PassCounter,\n RhiNullComputePassEncoder,\n RhiNullRenderPassEncoder,\n} from './pass-encoders';\n\n/**\n * Internal counter that writes per-frame stats back to the owning device.\n */\nclass DeviceCounter implements PassCounter {\n constructor(private readonly device: RhiNullDevice) {}\n\n recordDraw(): void {\n this.device.totalDrawCount++;\n }\n\n recordDispatch(): void {\n this.device.totalDispatchCount++;\n }\n\n recordBindGroup(): void {\n this.device.totalBindGroupCount++;\n }\n\n recordPassName(name: string): void {\n this.device.framePassNames.push(name);\n }\n}\n\n/**\n * Read the `label` field from a GPURenderPassDescriptor (or undefined if not\n * set). The engine sets `label` on the render pass descriptor; the graph's\n * compile path doesn't always thread a per-pass label, so we fall back to the\n * RenderPassDescriptor's generic label (or '<unnamed>').\n */\nfunction readPassLabel(desc: Record<string, unknown> | undefined): string {\n if (desc && typeof desc.label === 'string' && desc.label.length > 0) {\n return desc.label as string;\n }\n return '<unnamed>';\n}\n\n/**\n * Headless command encoder. begin*Pass returns a no-op pass encoder bound to\n * the issuing device's ledger; recording methods are no-ops; finish mints a\n * CommandBuffer brand.\n */\nexport class RhiNullCommandEncoder implements RhiCommandEncoder {\n private readonly bookkeeper: Bookkeeper;\n private readonly counter: PassCounter;\n\n constructor(bookkeeper: Bookkeeper, device: RhiNullDevice) {\n this.bookkeeper = bookkeeper;\n this.counter = new DeviceCounter(device);\n }\n\n beginRenderPass(desc: GPURenderPassDescriptor): RhiRenderPassEncoder {\n const label = readPassLabel(desc as unknown as Record<string, unknown>);\n return new RhiNullRenderPassEncoder(this.bookkeeper, this.counter, label);\n }\n\n beginComputePass(desc?: ComputePassDescriptor | undefined): RhiComputePassEncoder {\n const label = readPassLabel(desc as unknown as Record<string, unknown> | undefined);\n return new RhiNullComputePassEncoder(this.bookkeeper, this.counter, label);\n }\n\n copyBufferToBuffer(\n _source: Buffer,\n _sourceOffsetOrDestination: number | Buffer,\n _destinationOrSize?: Buffer | number | undefined,\n _destinationOffset?: number | undefined,\n _size?: number | undefined,\n ): void {}\n\n copyBufferToTexture(\n _source: GPUTexelCopyBufferInfo,\n _destination: GPUTexelCopyTextureInfo,\n _copySize: GPUExtent3DStrict,\n ): void {}\n\n copyTextureToBuffer(\n _source: GPUTexelCopyTextureInfo,\n _destination: GPUTexelCopyBufferInfo,\n _copySize: GPUExtent3DStrict,\n ): void {}\n\n copyTextureToTexture(\n _source: GPUTexelCopyTextureInfo,\n _destination: GPUTexelCopyTextureInfo,\n _copySize: GPUExtent3DStrict,\n ): void {}\n\n clearBuffer(_buffer: Buffer, _offset?: number | undefined, _size?: number | undefined): void {}\n\n resolveQuerySet(\n _querySet: QuerySet,\n _firstQuery: number,\n _queryCount: number,\n _destination: Buffer,\n _destinationOffset: number,\n ): Result<void, RhiErrorType> {\n return ok(undefined);\n }\n\n writeTimestamp(_querySet: QuerySet, _queryIndex: number): void {}\n\n pushDebugGroup(_groupLabel: string): void {}\n\n popDebugGroup(): void {}\n\n insertDebugMarker(_markerLabel: string): void {}\n\n finish(): Result<CommandBuffer, RhiErrorType> {\n return ok(this.bookkeeper.register('CommandBuffer') as unknown as CommandBuffer);\n }\n}\n","// @forgeax/engine-rhi-null/src/bookkeeping - method-A handle ledger for the\n// headless no-op backend.\n//\n// RhiNull issues legal opaque-handle brands (each RHI brand is a compile-time\n// `unique symbol` with no runtime field, so any plain object cast via\n// `as unknown as Buffer` satisfies the type contract; research Finding A6). To\n// let M3 command-stream assertions read back create/destroy pairing, draw /\n// dispatch counts and binding assembly, RhiNull threads each issued handle\n// through a per-device Bookkeeper that records a numeric id + kind + destroyed\n// flag + the issuing device id.\n//\n// Error contract (plan-strategy D-1): handle-chain inconsistencies reuse the\n// existing closed RhiErrorCode union with ZERO new members:\n// - a handle observed on a device other than its issuer -> 'rhi-not-available'\n// - a destroy / use observed on an already-destroyed handle ->\n// 'destroy-after-destroy'\n// Every RhiError carries the required code / expected / hint triple\n// (charter proposition 3 structured failure).\n//\n// Related: requirements AC-09 (foreign handle returns structured err, no silent\n// pass); plan-strategy §2 D-1; research Finding A3 (RhiErrorCode 20 members,\n// 'rhi-not-available' at errors.ts:113, 'destroy-after-destroy' at errors.ts:127)\n// + Finding A6 (brand construction); charter P3.\n\nimport type { Result, RhiError as RhiErrorType } from '@forgeax/engine-rhi';\nimport { RhiError } from '@forgeax/engine-rhi';\nimport { err, ok } from '@forgeax/engine-types';\n\n/**\n * One ledger row for an issued opaque-handle brand.\n *\n * - `id` — per-device monotonic numeric id assigned at register time; the value\n * M3 assertions read back to pair create / destroy and count draws.\n * - `kind` — the handle category (`'Buffer'` / `'Texture'` / `'BindGroupLayout'`\n * etc.); free-form so every create* entry can tag what it minted.\n * - `destroyed` — flipped to `true` by the first destroy; a second destroy\n * fail-fasts via `'destroy-after-destroy'`.\n * - `sourceDeviceId` — the id of the device that issued the handle; cross-device\n * use fail-fasts via `'rhi-not-available'`.\n */\nexport interface HandleRecord {\n readonly id: number;\n readonly kind: string;\n destroyed: boolean;\n readonly sourceDeviceId: number;\n}\n\n/**\n * The brand attachment RhiNull stamps onto every issued handle object so the\n * ledger can be recovered from the handle alone (handle-chain validation reads\n * `handle[BOOKKEEPING_KEY]` rather than holding a side Map keyed on identity,\n * which would leak across device instances).\n *\n * Lives behind a module-private symbol so it never collides with a real RHI\n * brand symbol and never appears in the public `.d.ts` surface.\n */\nexport const BOOKKEEPING_KEY = Symbol('forgeax-rhi-null-bookkeeping');\n\n/** A handle object as RhiNull mints it: a plain object carrying its ledger row\n * under the private bookkeeping symbol, cast to the relevant brand at the\n * create* call site. */\nexport interface BookkeptHandle {\n readonly [BOOKKEEPING_KEY]: HandleRecord;\n}\n\n/**\n * Per-device handle ledger. One Bookkeeper instance lives on each\n * RhiNullDevice; it assigns the device id at construction and mints monotonic\n * handle ids thereafter.\n */\nexport class Bookkeeper {\n readonly deviceId: number;\n private nextHandleId = 0;\n private readonly records = new Map<number, HandleRecord>();\n\n constructor(deviceId: number) {\n this.deviceId = deviceId;\n }\n\n /**\n * Register a freshly-minted handle of the given kind, returning a plain\n * object that carries its ledger row. The caller casts the return value to\n * the concrete brand (`as unknown as Buffer` etc.).\n */\n register(kind: string): BookkeptHandle {\n const id = this.nextHandleId++;\n const record: HandleRecord = {\n id,\n kind,\n destroyed: false,\n sourceDeviceId: this.deviceId,\n };\n this.records.set(id, record);\n return { [BOOKKEEPING_KEY]: record };\n }\n\n /**\n * Mark a handle destroyed. Fail-fasts on a second destroy\n * ('destroy-after-destroy') or on a handle issued by a different device\n * ('rhi-not-available'); otherwise flips the destroyed flag and returns ok.\n */\n destroy(handle: unknown): Result<void, RhiErrorType> {\n const ownership = this.validateOwnership(handle);\n if (!ownership.ok) return ownership;\n const destroyedCheck = isHandleDestroyed(handle);\n if (!destroyedCheck.ok) return destroyedCheck;\n ownership.value.destroyed = true;\n return ok(undefined);\n }\n\n /**\n * Report whether a handle has already been destroyed (true once destroy()\n * has flipped its flag). Used by command-stream methods that must not\n * consume a stale handle.\n */\n isDestroyed(handle: unknown): boolean {\n return readRecord(handle)?.destroyed === true;\n }\n\n /**\n * Validate that a handle was issued by THIS device. Returns the ledger row on\n * success so callers can mutate it (e.g. flip destroyed); returns\n * 'rhi-not-available' for a foreign handle (AC-09 — no silent pass).\n */\n validateOwnership(handle: unknown): Result<HandleRecord, RhiErrorType> {\n const record = readRecord(handle);\n if (record === undefined || record.sourceDeviceId !== this.deviceId) {\n return err(\n new RhiError({\n code: 'rhi-not-available',\n expected: 'handle was issued by this RhiNull device',\n hint: 'do not pass a handle created on a different RhiNull device into this device; create resources on the device they are used with',\n }),\n );\n }\n return ok(record);\n }\n\n /**\n * Return all ledger rows as a readonly array. M3 unit tests (w17) read this\n * to assert create/destroy pairing, BGL/PSO shape counts, and resource\n * lifecycle coverage (AC-05/06/07). Returns a snapshot of the current Map\n * so callers can iterate without a stale reference after further mutations.\n */\n allRecords(): readonly HandleRecord[] {\n return [...this.records.values()];\n }\n\n /** Report the total number of records in the ledger. */\n recordCount(): number {\n return this.records.size;\n }\n}\n\n/** Recover the ledger row from a handle object, or undefined if the object\n * carries no RhiNull bookkeeping (foreign / non-RhiNull handle). */\nfunction readRecord(handle: unknown): HandleRecord | undefined {\n if (handle === null || typeof handle !== 'object') return undefined;\n const tagged = handle as Partial<BookkeptHandle>;\n return tagged[BOOKKEEPING_KEY];\n}\n\n/**\n * Validation function: has this handle already been destroyed? Returns ok(void)\n * for a live handle; returns 'destroy-after-destroy' for a handle whose ledger\n * row is flagged destroyed (charter P3 fail-fast over silent idempotency).\n */\nexport function isHandleDestroyed(handle: unknown): Result<void, RhiErrorType> {\n if (readRecord(handle)?.destroyed === true) {\n return err(\n new RhiError({\n code: 'destroy-after-destroy',\n expected: 'GPU buffer/texture handle has not been destroyed yet',\n hint: 'object already destroyed; track lifecycle in caller or check isDestroyed before re-destroy',\n }),\n );\n }\n return ok(undefined);\n}\n","// @forgeax/engine-rhi-null/src/canvas-context - headless canvas context (R-1).\n//\n// The headless backend has no real canvas. RhiNullCanvasContext satisfies the\n// RhiCanvasContext interface as no-ops: configure returns ok (a headless\n// configure is vacuously successful), unconfigure is void, getConfiguration\n// returns undefined (no real configuration).\n//\n// getCurrentTexture returns a legal Texture brand so the swap-chain\n// acquisition path succeeds — without this the entire render-frame path fails\n// at the first swap-chain access, blocking all dogfood testing of\n// render-graph-to-RhiNull command-flow. The returned Texture carries no real\n// pixels; it is opaque-handle syntactically valid and structurally sound for\n// CI structural unit tests.\n//\n// acquireCanvasContext (mounted on the rhi singleton, R-1) accepts any\n// canvas / null / undefined and returns ok(canvasContext) so the facade\n// never crashes and canvas-dependent paths exercise through to the\n// render-graph level.\n//\n// Related: requirements AC-11 (canvas ctx structured behaviour) — the\n// context itself succeeds; AC-11 verify tests confirm the getCurrentTexture\n// brand is a valid opaque handle and downstream consumption doesn't crash.\n// Research Finding A4 (acquireCanvasContext on singleton) + A3\n// (rhi-not-available legal); plan-strategy §4 R-1; charter P3.\n\nimport type {\n CanvasConfiguration,\n Result,\n RhiCanvasContext,\n RhiError as RhiErrorType,\n Texture,\n} from '@forgeax/engine-rhi';\nimport { ok } from '@forgeax/engine-types';\n\n/**\n * Headless canvas context. configure succeeds vacuously; getCurrentTexture\n * mints a legal opaque-handle Texture brand so the swap-chain acquisition path\n * never blocks frame rendering in headless CI.\n */\nexport class RhiNullCanvasContext implements RhiCanvasContext {\n configure(_desc: CanvasConfiguration): Result<void, RhiErrorType> {\n return ok(undefined);\n }\n\n unconfigure(): void {}\n\n getConfiguration(): CanvasConfiguration | undefined {\n return undefined;\n }\n\n getCurrentTexture(): Result<Texture, RhiErrorType> {\n // A brand is a compile-time unique symbol with no runtime field, so a plain\n // object cast is a structurally valid Texture (research Finding A6). No real\n // pixels; the command-stream path only needs a legal handle to thread on.\n return ok({} as unknown as Texture);\n }\n}\n\n/**\n * Acquire a canvas context. The headless backend returns ok(context) so the\n * createRenderer context-acquisition step succeeds. The context's\n * getCurrentTexture mints a legal Texture brand once a bookkeeper is attached.\n *\n * R-1: this is mounted on the rhi singleton so Channel 1's facade never\n * crashes on a missing acquireCanvasContext.\n */\nexport function acquireCanvasContext(\n _canvas?: HTMLCanvasElement | OffscreenCanvas | null | undefined,\n): Result<RhiCanvasContext, RhiErrorType> {\n return ok(new RhiNullCanvasContext());\n}\n","// @forgeax/engine-rhi-null/src/shader - headless shader module factory (R-2).\n//\n// createShaderModule is the highest-risk hidden contract: the createRenderer\n// ready chain resolves a shader module through a three-tier fallback\n// (RhiBackendPack.createShaderModule -> RhiDevice.createShaderModule duck-typed\n// -> err('rhi-not-available')). If RhiNull provides neither, createRenderer ->\n// ready REJECTS rhi-not-available and AC-02 / AC-10 / AC-13 all fail. RhiNull\n// exposes the top-level async factory (symmetric with rhi-webgpu) that skips\n// real WGSL compilation and returns a legal ShaderModule brand.\n//\n// Related: requirements AC-10 (shader brand skips compile) + AC-02\n// (createRenderer ready does not reject); research Finding A5 (three-tier\n// fallback, top-level factory recommended) + A6 (brand construction);\n// plan-strategy §4 R-2.\n\nimport type {\n Result,\n RhiDevice,\n RhiError as RhiErrorType,\n ShaderModule,\n} from '@forgeax/engine-rhi';\nimport { ok } from '@forgeax/engine-types';\n\n/**\n * Build a shader module for the headless backend. No WGSL is compiled — the\n * code is ignored and a legal ShaderModule brand is returned immediately\n * (<1ms), so the ready chain's shader step always resolves ok (AC-10). Mirrors\n * the rhi-webgpu top-level `createShaderModule(device, desc)` signature so\n * Channel 1's RhiBackendPack picks it up via the same `'createShaderModule' in\n * mod` probe.\n */\nexport function createShaderModule(\n _device: RhiDevice,\n _desc: { label?: string | undefined; code: string },\n): Promise<Result<ShaderModule, RhiErrorType>> {\n return Promise.resolve(ok({} as unknown as ShaderModule));\n}\n","// @forgeax/engine-rhi-null - headless no-op RHI backend.\n//\n// Single entry for `import { rhi } from '@forgeax/engine-rhi-null'`. The\n// exported `rhi` singleton has the RhiBackendPack-mandated shape\n// `RhiInstance & { acquireCanvasContext }` (research Finding A4 — Channel 1\n// injects this verbatim and calls acquireCanvasContext on the facade, so the\n// method MUST exist on the singleton even though the public RendererOptions.rhi\n// type does not require it). createShaderModule is exposed at the top level\n// (R-2) for symmetry with rhi-webgpu: createRenderer's ready chain resolves the\n// shader step through `RhiBackendPack.createShaderModule`, otherwise it rejects\n// rhi-not-available.\n//\n// Strict two-step path: rhi.requestAdapter() -> adapter.requestDevice().\n//\n// Related: requirements AC-02 + AC-10 + AC-12 + scope row 4; research Finding\n// A1 row 1 + A4 + A5; plan-strategy §4 R-1 + R-2.\n\nimport type {\n RequestAdapterOptions,\n Result,\n RhiAdapter,\n RhiError as RhiErrorType,\n RhiInstance,\n} from '@forgeax/engine-rhi';\nimport { ok } from '@forgeax/engine-types';\nimport { RhiNullAdapter } from './adapter';\nimport { acquireCanvasContext } from './canvas-context';\nimport { createShaderModule } from './shader';\n\n/**\n * Request a headless adapter. The two-positional-arg signature mirrors the spec\n * RhiInstance.requestAdapter (the second compatibleSurface arg is accepted and\n * ignored — there is no GL backend to route it to).\n */\nfunction requestAdapter(\n _opts?: RequestAdapterOptions | undefined,\n _compatibleSurface?: HTMLCanvasElement | OffscreenCanvas | undefined,\n): Promise<Result<RhiAdapter, RhiErrorType>> {\n return Promise.resolve(ok(new RhiNullAdapter()));\n}\n\n/**\n * The `rhi` singleton — RhiBackendPack-shaped entry for Channel 1 injection\n * (`createRenderer(canvas, { rhi })`). Carries acquireCanvasContext (R-1) so\n * the facade never crashes on a missing method, and createShaderModule (R-2) so\n * the ready chain's shader step resolves rather than rejecting.\n */\nexport const rhi: RhiInstance & {\n acquireCanvasContext: typeof acquireCanvasContext;\n createShaderModule: typeof createShaderModule;\n} = {\n requestAdapter,\n acquireCanvasContext,\n createShaderModule,\n};\n\nexport { RhiNullAdapter } from './adapter';\nexport { acquireCanvasContext, RhiNullCanvasContext } from './canvas-context';\nexport { RhiNullCommandEncoder } from './command-encoder';\nexport { RhiNullDevice } from './device';\nexport { RhiNullComputePassEncoder, RhiNullRenderPassEncoder } from './pass-encoders';\nexport { RhiNullQueue } from './queue';\nexport { createShaderModule } from './shader';\n","// @forgeax/engine-rhi-null/src/pass-encoders - headless render / compute pass\n// encoders.\n//\n// Both encoders are no-ops that thread state changes through nothing real; the\n// only side effects are command-stream bookkeeping the M3 unit tests read back:\n// - draw / drawIndexed / drawIndirect / drawIndexedIndirect bump a draw\n// counter (AC-06);\n// - dispatchWorkgroups bumps a dispatch counter;\n// - setVertexBuffer / setBindGroup validate handle ownership against the\n// issuing device's ledger (AC-09 handle-chain consistency) and record the\n// outcome so an assertion can read the most recent validation result\n// without the call site throwing (the spec method form is void).\n//\n// Counters + last-validation live on the encoder instance (public readonly) so\n// a test holding the pass encoder reads them directly; the per-device ledger\n// (Bookkeeper) supplies cross-device validation.\n//\n// Related: requirements AC-04 (pass sequence) + AC-06 (draw count + binding\n// assembly) + AC-09 (handle-chain consistency); research Finding A1 rows 6/7;\n// plan-strategy §3.1 (pass encoder bookkeeping design) + §2 D-1.\n\nimport type {\n BindGroup,\n Buffer,\n ComputePipeline,\n RenderPipeline,\n Result,\n RhiComputePassEncoder,\n RhiError as RhiErrorType,\n RhiRenderPassEncoder,\n} from '@forgeax/engine-rhi';\nimport { ok } from '@forgeax/engine-types';\nimport type { Bookkeeper } from './bookkeeping';\n\n/** Shared counter interface that pass encoders bump so the device can aggregate\n * per-frame stats for M3 unit-test readback. */\nexport interface PassCounter {\n recordDraw(): void;\n recordDispatch(): void;\n recordBindGroup(): void;\n recordPassName(name: string): void;\n}\n\n/**\n * Headless render pass encoder. Records draw counts + the most recent handle\n * validation outcome; all state-setting methods are no-ops.\n */\nexport class RhiNullRenderPassEncoder implements RhiRenderPassEncoder {\n /** Number of draw* calls issued on this pass (AC-06 readback). */\n drawCount = 0;\n bindGroupCount = 0;\n /** Most recent setVertexBuffer / setBindGroup ownership validation; ok unless\n * a foreign handle was passed (AC-09 readback). */\n lastValidation: Result<unknown, RhiErrorType> = ok(undefined);\n\n private readonly bookkeeper: Bookkeeper;\n private readonly counter: PassCounter | null;\n readonly passName: string;\n\n constructor(bookkeeper: Bookkeeper, counter: PassCounter | null, passName: string) {\n this.bookkeeper = bookkeeper;\n this.counter = counter;\n this.passName = passName;\n }\n\n setPipeline(_pipeline: RenderPipeline): void {}\n\n setVertexBuffer(\n _slot: number,\n buffer: Buffer,\n _offset?: number | undefined,\n _size?: number | undefined,\n ): void {\n this.lastValidation = this.bookkeeper.validateOwnership(buffer);\n }\n\n setIndexBuffer(\n _buffer: Buffer,\n _format: 'uint16' | 'uint32',\n _offset?: number | undefined,\n _size?: number | undefined,\n ): void {}\n\n setBindGroup(\n _index: number,\n bindGroup: BindGroup,\n _dynamicOffsetsData?: readonly number[] | Uint32Array | undefined,\n _dynamicOffsetsDataStart?: number | undefined,\n _dynamicOffsetsDataLength?: number | undefined,\n ): void {\n this.bindGroupCount++;\n this.counter?.recordBindGroup();\n this.lastValidation = this.bookkeeper.validateOwnership(bindGroup);\n }\n\n draw(\n _vertexCount: number,\n _instanceCount?: number | undefined,\n _firstVertex?: number | undefined,\n _firstInstance?: number | undefined,\n ): void {\n this.drawCount++;\n this.counter?.recordDraw();\n }\n\n drawIndexed(\n _indexCount: number,\n _instanceCount?: number | undefined,\n _firstIndex?: number | undefined,\n _baseVertex?: number | undefined,\n _firstInstance?: number | undefined,\n ): void {\n this.drawCount++;\n this.counter?.recordDraw();\n }\n\n end(): void {\n this.counter?.recordPassName(this.passName);\n }\n\n setViewport(\n _x: number,\n _y: number,\n _w: number,\n _h: number,\n _minDepth: number,\n _maxDepth: number,\n ): void {}\n\n setScissorRect(_x: number, _y: number, _w: number, _h: number): void {}\n\n setBlendConstant(_color: GPUColor): void {}\n\n setStencilReference(_reference: number): void {}\n\n drawIndirect(_indirectBuffer: Buffer, _indirectOffset: number): void {\n this.drawCount++;\n this.counter?.recordDraw();\n }\n\n drawIndexedIndirect(_indirectBuffer: Buffer, _indirectOffset: number): void {\n this.drawCount++;\n this.counter?.recordDraw();\n }\n\n pushDebugGroup(_groupLabel: string): void {}\n\n popDebugGroup(): void {}\n\n insertDebugMarker(_markerLabel: string): void {}\n\n executeBundles(_bundles: Iterable<unknown>): Result<void, RhiErrorType> {\n // Headless no-op: executing zero bundles against no GPU succeeds vacuously\n // (plan-strategy §3.1 — pass-encoder Result methods return ok(void)).\n return ok(undefined);\n }\n\n beginOcclusionQuery(_queryIndex: number): Result<void, RhiErrorType> {\n return ok(undefined);\n }\n\n endOcclusionQuery(): Result<void, RhiErrorType> {\n return ok(undefined);\n }\n}\n\n/**\n * Headless compute pass encoder. Records dispatch counts; all state-setting\n * methods are no-ops.\n */\nexport class RhiNullComputePassEncoder implements RhiComputePassEncoder {\n /** Number of dispatchWorkgroups calls issued on this pass (readback). */\n dispatchCount = 0;\n /** Most recent setBindGroup ownership validation (AC-09 readback). */\n lastValidation: Result<unknown, RhiErrorType> = ok(undefined);\n\n private readonly bookkeeper: Bookkeeper;\n private readonly counter: PassCounter | null;\n readonly passName: string;\n\n constructor(bookkeeper: Bookkeeper, counter: PassCounter | null, passName: string) {\n this.bookkeeper = bookkeeper;\n this.counter = counter;\n this.passName = passName;\n }\n\n setPipeline(_pipeline: ComputePipeline): void {}\n\n setBindGroup(\n _index: number,\n bindGroup: BindGroup,\n _dynamicOffsets?: readonly number[] | undefined,\n ): void {\n this.lastValidation = this.bookkeeper.validateOwnership(bindGroup);\n }\n\n dispatchWorkgroups(_x: number, _y?: number | undefined, _z?: number | undefined): void {\n this.dispatchCount++;\n this.counter?.recordDispatch();\n }\n\n dispatchWorkgroupsIndirect(indirectBuffer: Buffer, _indirectOffset: number): void {\n this.lastValidation = this.bookkeeper.validateOwnership(indirectBuffer);\n this.dispatchCount++;\n this.counter?.recordDispatch();\n }\n\n end(): void {\n this.counter?.recordPassName(this.passName);\n }\n}\n","// @forgeax/engine-rhi-null/src/device - RhiNullDevice + caps for the headless\n// no-op backend.\n//\n// RhiNullDevice implements the full RhiDevice surface (research Finding A1\n// row 3) as no-ops that mint legal opaque-handle brands and thread them through\n// the per-device Bookkeeper (method A; research Finding A6). The `implements\n// RhiDevice` clause is the completeness guard: a missing method is a tsc -b\n// red, satisfying AC-01 without a hand-maintained member checklist.\n//\n// caps (D-5): backendKind 'null'; the 3 wgpu-native-only reserved flags\n// (multiDrawIndirect / pushConstants / textureBindingArray) are false; every\n// other boolean cap is true and maxColorAttachments is 8, so the headless\n// backend maximizes structural coverage of capability-gated paths.\n//\n// The queue is supplied at construction (the adapter's requestDevice mints the\n// RhiNullQueue, w10) so device.ts carries no dependency on queue.ts.\n//\n// Related: requirements scope row 2 (8 interfaces full method set) + AC-01\n// (implements compiles) + AC-08 (backendKind === 'null'); plan-strategy §2 D-5\n// (caps field-level) + §4 R-3; research Finding A1 + A6.\n\nimport type {\n BindGroup,\n BindGroupDescriptor,\n BindGroupLayout,\n BindGroupLayoutDescriptor,\n Buffer,\n BufferDescriptor,\n CommandEncoderDescriptor,\n ComputePipeline,\n ComputePipelineDescriptor,\n PipelineLayout,\n PipelineLayoutDescriptor,\n QuerySet,\n QuerySetDescriptor,\n RenderPipeline,\n RenderPipelineDescriptor,\n Result,\n RhiCaps,\n RhiCommandEncoder,\n RhiComputePipelineOps,\n RhiDevice,\n RhiError as RhiErrorType,\n RhiFeatures,\n RhiLimits,\n RhiQueue,\n RhiRenderPipelineOps,\n Sampler,\n SamplerDescriptor,\n Texture,\n TextureDescriptor,\n TextureView,\n TextureViewDescriptor,\n} from '@forgeax/engine-rhi';\nimport { RhiError as RhiErrorClass } from '@forgeax/engine-rhi';\nimport { err, ok } from '@forgeax/engine-types';\nimport { Bookkeeper } from './bookkeeping';\n\ntype RhiNullDeviceLost = Awaited<RhiDevice['lost']>;\n\n/** Monotonic device-id source so each RhiNullDevice owns a distinct id; the id\n * threads into the Bookkeeper for cross-device handle-chain validation. */\nlet nextDeviceId = 0;\n\n/**\n * Factory that builds a command encoder bound to a device's ledger. Injected at\n * device construction (rather than imported here) so device.ts carries no\n * dependency on command-encoder.ts; the singleton assembly (index.ts) supplies\n * the real factory. The Bookkeeper and RhiNullDevice are passed so the encoder\n * threads draw / dispatch counts + binding validation through the same per-device\n * ledger AND writes aggregated frame stats to the device for M3 unit-test readback.\n */\nexport type CommandEncoderFactory = (\n bookkeeper: Bookkeeper,\n device: RhiNullDevice,\n) => RhiCommandEncoder;\n\n/** A pipeline brand augmented with its no-op `getBindGroupLayout` ops method\n * (D-2). createRenderPipeline / createComputePipeline return objects of this\n * shape so the auto-layout consumers can call getBindGroupLayout. */\ntype PipelineHandle<Brand> = Brand & RhiRenderPipelineOps & RhiComputePipelineOps;\n\n/**\n * Headless no-op RhiDevice. Every create* mints a legal brand and records it;\n * every destroy* fail-fasts a double-destroy; caps reports the all-true-except-\n * reserved profile (D-5).\n */\nexport class RhiNullDevice implements RhiDevice {\n private readonly internalBookkeeper: Bookkeeper;\n private readonly nullQueue: RhiQueue;\n private readonly encoderFactory: CommandEncoderFactory;\n\n /** Per-frame total draw count across all pass encoders executed this frame\n * (aggregated by the command encoder on finish, then reset). M3 unit tests\n * (w17) read this to assert draw count >= 1 (AC-06). */\n totalDrawCount = 0;\n /** Per-frame total direct and indirect compute dispatch count. */\n totalDispatchCount = 0;\n /** Per-frame total bind group set count (AC-06 / AC-05 readback). */\n totalBindGroupCount = 0;\n /** Per-frame pass names executed this frame, in schedule order (AC-04). */\n framePassNames: string[] = [];\n\n /** The per-device handle ledger — exposed so M3 tests can assert create/destroy\n * pairing and BGL/PSO shape counts (AC-05/06/07). */\n get bookkeeper(): Bookkeeper {\n return this.internalBookkeeper;\n }\n\n constructor(queue: RhiQueue, encoderFactory: CommandEncoderFactory) {\n this.internalBookkeeper = new Bookkeeper(nextDeviceId++);\n this.nullQueue = queue;\n this.encoderFactory = encoderFactory;\n }\n\n get caps(): RhiCaps {\n return {\n backendKind: 'null',\n compute: true,\n timestampQuery: false,\n timestampPeriodNanoseconds: null,\n indirectDrawing: true,\n textureCompressionBc: false,\n textureCompressionEtc2: false,\n textureCompressionAstc: false,\n // 3 wgpu-native-only reserved flags stay false on non-native backends\n // (D-5); the headless backend is not a native runtime.\n multiDrawIndirect: false,\n pushConstants: false,\n textureBindingArray: false,\n samplerAliasing: true,\n firstInstanceIndirect: true,\n storageBuffer: true,\n storageTexture: true,\n rgba16floatRenderable: true,\n rg11b10ufloatRenderable: true,\n float32Filterable: true,\n maxColorAttachments: 8,\n };\n }\n\n get features(): RhiFeatures {\n return EMPTY_FEATURES;\n }\n\n get limits(): RhiLimits {\n return EMPTY_LIMITS;\n }\n\n get queue(): RhiQueue {\n return this.nullQueue;\n }\n\n // forgeax-async-whitelist: dom-native — spec `GPUDevice.lost` Promise\n // passthrough. The headless backend never loses a device (no GPU), so the\n // Promise stays unsettled for the lifetime of the device, mirroring a live\n // device that never transitions to the lost state.\n get lost(): Promise<RhiNullDeviceLost> {\n return NEVER;\n }\n\n createBuffer(_desc: BufferDescriptor): Result<Buffer, RhiErrorType> {\n return ok(this.internalBookkeeper.register('Buffer') as unknown as Buffer);\n }\n\n createTexture(_desc: TextureDescriptor): Result<Texture, RhiErrorType> {\n return ok(this.internalBookkeeper.register('Texture') as unknown as Texture);\n }\n\n destroyBuffer(buf: Buffer): Result<void, RhiErrorType> {\n return this.internalBookkeeper.destroy(buf);\n }\n\n destroyQuerySet(querySet: QuerySet): Result<void, RhiErrorType> {\n return this.internalBookkeeper.destroy(querySet);\n }\n\n destroyTexture(tex: Texture): Result<void, RhiErrorType> {\n return this.internalBookkeeper.destroy(tex);\n }\n\n createTextureView(\n _texture: Texture,\n _desc: TextureViewDescriptor,\n ): Result<TextureView, RhiErrorType> {\n return ok(this.internalBookkeeper.register('TextureView') as unknown as TextureView);\n }\n\n createSampler(_desc?: SamplerDescriptor | undefined): Result<Sampler, RhiErrorType> {\n return ok(this.internalBookkeeper.register('Sampler') as unknown as Sampler);\n }\n\n createBindGroupLayout(_desc: BindGroupLayoutDescriptor): Result<BindGroupLayout, RhiErrorType> {\n return ok(this.internalBookkeeper.register('BindGroupLayout') as unknown as BindGroupLayout);\n }\n\n createBindGroup(_desc: BindGroupDescriptor): Result<BindGroup, RhiErrorType> {\n return ok(this.internalBookkeeper.register('BindGroup') as unknown as BindGroup);\n }\n\n createPipelineLayout(_desc: PipelineLayoutDescriptor): Result<PipelineLayout, RhiErrorType> {\n return ok(this.internalBookkeeper.register('PipelineLayout') as unknown as PipelineLayout);\n }\n\n createRenderPipeline(_desc: RenderPipelineDescriptor): Result<RenderPipeline, RhiErrorType> {\n return ok(this.makePipeline<RenderPipeline>('RenderPipeline'));\n }\n\n createComputePipeline(_desc: ComputePipelineDescriptor): Result<ComputePipeline, RhiErrorType> {\n return ok(this.makePipeline<ComputePipeline>('ComputePipeline'));\n }\n\n createQuerySet(desc: QuerySetDescriptor): Result<QuerySet, RhiErrorType> {\n if (desc.type === 'timestamp') {\n return err(\n new RhiErrorClass({\n code: 'feature-not-enabled',\n expected: 'caps.timestampQuery === true (timestamp-query feature)',\n hint: 'RhiNull is structural-only and cannot produce GPU timestamp ticks',\n }),\n );\n }\n return ok(this.internalBookkeeper.register('QuerySet') as unknown as QuerySet);\n }\n\n createCommandEncoder(\n _desc?: CommandEncoderDescriptor | undefined,\n ): Result<RhiCommandEncoder, RhiErrorType> {\n return ok(this.encoderFactory(this.internalBookkeeper, this));\n }\n\n /**\n * Mint a pipeline handle whose object also carries the no-op\n * `getBindGroupLayout(index)` ops method (D-2). The prod auto-layout path\n * (debug-draw.ts) and the existing mock unit tests both call\n * `pipeline.getBindGroupLayout(n)`; returning a legal BindGroupLayout brand\n * (recorded in the ledger) keeps those consumers from crashing on a missing\n * method.\n */\n private makePipeline<Brand>(kind: string): PipelineHandle<Brand> {\n const handle = this.internalBookkeeper.register(kind);\n const getBindGroupLayout = (_index: number): BindGroupLayout =>\n this.internalBookkeeper.register('BindGroupLayout') as unknown as BindGroupLayout;\n return Object.assign(handle, { getBindGroupLayout }) as unknown as PipelineHandle<Brand>;\n }\n}\n\n/** Empty enabled-feature set — headless backend enables nothing beyond the\n * always-true caps profile (research Finding A1: features getter returns an\n * empty ReadonlySet). */\nconst EMPTY_FEATURES: RhiFeatures = new Set() as RhiFeatures;\n\n/** Empty numeric-limits map. The headless backend reports no concrete numeric\n * limits; capability planning reads caps booleans instead. */\nconst EMPTY_LIMITS: RhiLimits = {} as RhiLimits;\n\n/** A Promise that never settles, mirroring a live GPUDevice.lost that stays\n * unsettled while the device is healthy. */\nconst NEVER: Promise<RhiNullDeviceLost> = new Promise<RhiNullDeviceLost>(() => {});\n","// @forgeax/engine-rhi-null/src/queue - headless command queue.\n//\n// All write* methods are no-ops returning ok; submit records nothing and\n// returns ok (AC-12). onSubmittedWorkDone resolves immediately so headless\n// read-back idioms never hang (the real GPU resolves after work completes; with\n// no pending work the headless backend resolves synchronously).\n//\n// Related: requirements AC-12 (submit ok + onSubmittedWorkDone resolves);\n// research Finding A1 row 4.\n\nimport type {\n Buffer,\n CommandBuffer,\n Result,\n RhiError as RhiErrorType,\n RhiQueue,\n} from '@forgeax/engine-rhi';\nimport { ok } from '@forgeax/engine-types';\n\n/** Headless no-op queue. */\nexport class RhiNullQueue implements RhiQueue {\n writeBuffer(\n _buffer: Buffer,\n _bufferOffset: number,\n _data: ArrayBufferView | ArrayBuffer,\n _dataOffset?: number | undefined,\n _size?: number | undefined,\n ): Result<void, RhiErrorType> {\n return ok(undefined);\n }\n\n writeTexture(\n _destination: Pick<GPUTexelCopyTextureInfo, 'texture' | 'mipLevel' | 'origin' | 'aspect'>,\n _data: ArrayBufferView | ArrayBuffer,\n _dataLayout: Pick<GPUTexelCopyBufferLayout, 'offset' | 'bytesPerRow' | 'rowsPerImage'>,\n _size: GPUExtent3DStrict,\n ): Result<void, RhiErrorType> {\n return ok(undefined);\n }\n\n copyExternalImageToTexture(\n _source: Pick<GPUCopyExternalImageSourceInfo, 'source' | 'origin' | 'flipY'>,\n _destination: Pick<\n GPUCopyExternalImageDestInfo,\n 'texture' | 'mipLevel' | 'origin' | 'aspect' | 'colorSpace' | 'premultipliedAlpha'\n >,\n _copySize: GPUExtent3DStrict,\n ): Result<void, RhiErrorType> {\n return ok(undefined);\n }\n\n submit(_commandBuffers: readonly CommandBuffer[]): Result<void, RhiErrorType> {\n return ok(undefined);\n }\n\n // forgeax-async-whitelist: dom-native — spec `GPUQueue.onSubmittedWorkDone`\n // never rejects. The headless backend has no pending GPU work, so it resolves\n // immediately (AC-12: read-back idioms must not hang).\n onSubmittedWorkDone(): Promise<undefined> {\n return Promise.resolve(undefined);\n }\n}\n","// @forgeax/engine-rhi-null/src/adapter - headless adapter.\n//\n// requestDevice mints a fresh RhiNullDevice, wiring its queue + command-encoder\n// factory. features / limits are empty (the headless backend enables nothing\n// beyond the always-true caps profile); the two-step requestAdapter ->\n// requestDevice path mirrors the spec idiom (research Finding A1 row 2).\n//\n// Related: requirements AC-02 (createRenderer ready chain needs adapter ->\n// device) + AC-12; research Finding A1 row 2.\n\nimport type {\n RequestDeviceOptions,\n Result,\n RhiAdapter,\n RhiDevice,\n RhiError as RhiErrorType,\n} from '@forgeax/engine-rhi';\nimport { ok } from '@forgeax/engine-types';\nimport { RhiNullCommandEncoder } from './command-encoder';\nimport { RhiNullDevice } from './device';\nimport { RhiNullQueue } from './queue';\n\n/** Headless adapter. Holds an empty feature set + limits map; requestDevice\n * builds a fully-wired RhiNullDevice. */\nexport class RhiNullAdapter implements RhiAdapter {\n readonly features: ReadonlySet<GPUFeatureName> = new Set();\n readonly limits: Readonly<Record<string, number>> = {};\n\n // forgeax-async-whitelist is not needed: this returns Promise<Result<...>>\n // per the spec contract; never rejects.\n requestDevice(\n _opts?: RequestDeviceOptions | undefined,\n ): Promise<Result<RhiDevice, RhiErrorType>> {\n const device = new RhiNullDevice(\n new RhiNullQueue(),\n (bookkeeper, dev) => new RhiNullCommandEncoder(bookkeeper, dev),\n );\n return Promise.resolve(ok(device));\n }\n}\n","import { readFile } from 'node:fs/promises';\nimport { createRhiDebugError } from '@forgeax/engine-rhi-debug';\nimport { createShaderModule, rhi } from '@forgeax/engine-rhi-null';\nimport { err } from '@forgeax/engine-types';\nimport type { ArtifactRef, RhiDebugOperationContext } from './operations.js';\n\nexport function createCliRhiDebugOperationContext(): RhiDebugOperationContext {\n return {\n captureFrame: async () =>\n err(\n createRhiDebugError('capture-unavailable', {\n stage: 'capture',\n cause: 'the standalone CLI has no live App capture provider',\n }),\n ),\n async readArtifact(artifact: ArtifactRef) {\n if (artifact.path === undefined) {\n return {\n ok: false as const,\n error: {\n code: 'artifact-path-missing',\n expected: 'ArtifactRef.path to identify a readable .rhitape file',\n hint: 'Pass the path returned by the capture host together with its digest.',\n detail: { digest: artifact.digest },\n },\n };\n }\n try {\n return { ok: true as const, value: new Uint8Array(await readFile(artifact.path)) };\n } catch (cause) {\n return {\n ok: false as const,\n error: {\n code: 'artifact-read-failed',\n expected: 'the ArtifactRef path to be readable',\n hint: 'Check the tape path and recapture if the artifact was removed.',\n detail: {\n path: artifact.path,\n reason: cause instanceof Error ? cause.message : String(cause),\n },\n },\n };\n }\n },\n async createReplayBackend() {\n const adapter = await rhi.requestAdapter();\n if (!adapter.ok) {\n return {\n ok: false as const,\n error: {\n code: 'replay-backend-unavailable',\n expected: 'a fresh rhi-null adapter',\n hint: adapter.error.hint,\n detail: { stage: 'adapter', cause: adapter.error.hint },\n },\n };\n }\n const device = await adapter.value.requestDevice();\n if (!device.ok) {\n return {\n ok: false as const,\n error: {\n code: 'replay-backend-unavailable',\n expected: 'a fresh rhi-null device',\n hint: device.error.hint,\n detail: { stage: 'device', cause: device.error.hint },\n },\n };\n }\n return { ok: true as const, value: { device: device.value, createShaderModule } };\n },\n };\n}\n","import {\n buildFrameModel,\n decodeTape,\n type FrameModel,\n type InspectField,\n openReplay,\n type ReplayBackend,\n type RhiDebugError,\n type WorkInspection,\n} from '@forgeax/engine-rhi-debug';\nimport { ok, type Result } from '@forgeax/engine-types';\nimport type { CommandError, CommandResult } from '../types.js';\n\nexport const RHI_TAPE_ARTIFACT_KIND = 'rhi-tape' as const;\n\nexport interface ArtifactRef {\n readonly kind: typeof RHI_TAPE_ARTIFACT_KIND;\n readonly digest: string;\n readonly source: string;\n readonly path?: string;\n}\n\nexport interface CapturedRhiTape extends ArtifactRef {\n readonly bytes: Uint8Array;\n}\n\nexport interface RhiCaptureFrameValue {\n readonly kind: typeof RHI_TAPE_ARTIFACT_KIND;\n readonly digest: string;\n readonly bytes: Uint8Array;\n readonly source?: string;\n readonly path?: string;\n}\n\nexport interface RhiCaptureInput {\n readonly signal?: AbortSignal;\n}\n\nexport interface RhiSummaryInput {\n readonly artifact: ArtifactRef;\n}\n\nexport interface RhiInspectInput {\n readonly artifact: ArtifactRef;\n readonly workIndex: number;\n readonly fields?: readonly InspectField[];\n}\n\nexport type RhiDebugOperationName = 'rhi.capture' | 'rhi.summary' | 'rhi.inspect';\n\nexport type RhiDebugOperationInput = RhiCaptureInput | RhiSummaryInput | RhiInspectInput;\n\nexport interface RhiSummaryOutput {\n readonly artifact: ArtifactRef;\n readonly model: FrameModel;\n}\n\nexport interface RhiInspectOutput {\n readonly artifact: ArtifactRef;\n readonly inspection: WorkInspection;\n}\n\nexport type RhiDebugOperationOutput = ArtifactRef | RhiSummaryOutput | RhiInspectOutput;\n\nexport interface RhiDebugOperationContext {\n readonly captureFrame: (\n input?: RhiCaptureInput,\n ) => Promise<Result<CapturedRhiTape, RhiDebugError>>;\n readonly readArtifact: (artifact: ArtifactRef) => Promise<CommandResult<Uint8Array>>;\n readonly createReplayBackend?: () => Promise<CommandResult<ReplayBackend>>;\n}\n\nexport interface RhiDebugOperationHost {\n readonly captureFrame: (\n input?: RhiCaptureInput,\n ) => Promise<Result<RhiCaptureFrameValue, RhiDebugError>>;\n readonly readArtifact: (artifact: ArtifactRef) => Promise<CommandResult<Uint8Array>>;\n readonly createReplayBackend?: () => Promise<CommandResult<ReplayBackend>>;\n}\n\nexport function createRhiDebugOperationContext(\n host: RhiDebugOperationHost,\n): RhiDebugOperationContext {\n return {\n async captureFrame(input) {\n const captured = await host.captureFrame(input);\n if (!captured.ok) return captured;\n return ok({\n kind: RHI_TAPE_ARTIFACT_KIND,\n digest: captured.value.digest,\n source: captured.value.source ?? 'rhi.capture',\n ...(captured.value.path === undefined ? {} : { path: captured.value.path }),\n bytes: captured.value.bytes,\n });\n },\n readArtifact: host.readArtifact,\n ...(host.createReplayBackend === undefined\n ? {}\n : { createReplayBackend: host.createReplayBackend }),\n };\n}\n\nexport interface JsonSchema {\n readonly type: 'object' | 'string' | 'integer' | 'array';\n readonly properties?: Readonly<Record<string, JsonSchema>>;\n readonly required?: readonly string[];\n readonly items?: JsonSchema;\n readonly enum?: readonly string[];\n readonly minimum?: number;\n readonly additionalProperties?: boolean;\n}\n\nexport interface RhiDebugOperationDescriptor {\n readonly name: RhiDebugOperationName;\n readonly summary: string;\n readonly inputSchema: JsonSchema;\n readonly outputSchema: JsonSchema;\n readonly recoveryCodes: readonly string[];\n}\n\nexport interface RhiDebugOperationManifest {\n readonly schemaVersion: '1.0.0';\n readonly artifactRefSchema: JsonSchema;\n readonly operations: readonly RhiDebugOperationDescriptor[];\n}\n\nconst artifactRefSchema: JsonSchema = {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: [RHI_TAPE_ARTIFACT_KIND] },\n digest: { type: 'string' },\n source: { type: 'string' },\n path: { type: 'string' },\n },\n required: ['kind', 'digest', 'source'],\n additionalProperties: false,\n};\n\nconst summaryOutputSchema: JsonSchema = {\n type: 'object',\n properties: {\n artifact: artifactRefSchema,\n model: { type: 'object', additionalProperties: true },\n },\n required: ['artifact', 'model'],\n additionalProperties: false,\n};\n\nconst inspectOutputSchema: JsonSchema = {\n type: 'object',\n properties: {\n artifact: artifactRefSchema,\n inspection: { type: 'object', additionalProperties: true },\n },\n required: ['artifact', 'inspection'],\n additionalProperties: false,\n};\n\nexport const RHI_DEBUG_OPERATION_MANIFEST: RhiDebugOperationManifest = {\n schemaVersion: '1.0.0',\n artifactRefSchema,\n operations: [\n {\n name: 'rhi.capture',\n summary: 'Capture the next frame and return one rhi-tape ArtifactRef.',\n inputSchema: {\n type: 'object',\n properties: {},\n additionalProperties: false,\n },\n outputSchema: artifactRefSchema,\n recoveryCodes: [\n 'capture-unavailable',\n 'capture-busy',\n 'capture-snapshot-failed',\n 'capture-timeout',\n ],\n },\n {\n name: 'rhi.summary',\n summary: 'Strictly decode one ArtifactRef and return its CPU FrameModel.',\n inputSchema: {\n type: 'object',\n properties: { artifact: artifactRefSchema },\n required: ['artifact'],\n additionalProperties: false,\n },\n outputSchema: summaryOutputSchema,\n recoveryCodes: ['tape-invalid', 'tape-version-unsupported'],\n },\n {\n name: 'rhi.inspect',\n summary: 'Replay one ArtifactRef on a fresh backend and inspect a workIndex.',\n inputSchema: {\n type: 'object',\n properties: {\n artifact: artifactRefSchema,\n workIndex: { type: 'integer', minimum: 0 },\n fields: { type: 'array', items: { type: 'string' } },\n },\n required: ['artifact', 'workIndex'],\n additionalProperties: false,\n },\n outputSchema: inspectOutputSchema,\n recoveryCodes: [\n 'tape-invalid',\n 'tape-version-unsupported',\n 'replay-capability-mismatch',\n 'replay-event-failed',\n 'replay-position-invalid',\n 'readback-failed',\n 'readback-unsupported',\n ],\n },\n ],\n};\n\nexport function discoverRhiDebugOperations(): readonly RhiDebugOperationDescriptor[] {\n return RHI_DEBUG_OPERATION_MANIFEST.operations;\n}\n\nexport function renderRhiDebugHelp(): string {\n return [\n 'forgeax run <operation>',\n ...discoverRhiDebugOperations().map((operation) => ` ${operation.name}: ${operation.summary}`),\n 'ArtifactRef schema:',\n JSON.stringify(RHI_DEBUG_OPERATION_MANIFEST.artifactRefSchema),\n ].join('\\n');\n}\n\nexport function recoverRhiDebugError(error: RhiDebugError): string {\n switch (error.code) {\n case 'capture-unavailable':\n case 'capture-busy':\n case 'capture-snapshot-failed':\n case 'capture-timeout':\n return `${error.hint}: ${error.detail?.cause ?? 'capture failed'}`;\n case 'tape-invalid':\n return `${error.hint}: ${error.detail?.cause ?? 'tape validation failed'}`;\n case 'tape-version-unsupported':\n return `${error.hint}: found ${error.detail?.foundVersion}, expected ${error.detail?.expectedVersion}`;\n case 'replay-capability-mismatch':\n return `${error.hint}: ${error.detail?.cause ?? 'capability mismatch'}`;\n case 'replay-event-failed':\n return `${error.hint}: event ${error.detail?.eventIndex} ${error.detail?.kind} at ${error.detail?.stage}`;\n case 'replay-position-invalid':\n return `${error.hint}: requested ${error.detail?.requested}, available ${error.detail?.available}`;\n case 'readback-failed':\n return `${error.hint}: ${error.detail?.cause ?? 'readback failed'}`;\n case 'readback-unsupported':\n return `${error.hint}: ${error.detail?.reason ?? 'readback is unsupported'}`;\n }\n}\n\nfunction coreError(error: RhiDebugError): CommandError {\n return {\n code: error.code,\n expected: error.expected,\n hint: recoverRhiDebugError(error),\n detail: error.detail === undefined ? {} : Object.fromEntries(Object.entries(error.detail)),\n };\n}\n\nfunction operationError(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>> = {},\n): CommandResult<never> {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nfunction validateArtifactRef(\n value: unknown,\n):\n | { readonly ok: true; readonly value: ArtifactRef }\n | { readonly ok: false; readonly error: CommandError } {\n if (value === null || typeof value !== 'object') {\n return operationError(\n 'artifact-ref-invalid',\n 'an ArtifactRef object',\n 'Pass the ArtifactRef returned by rhi.capture unchanged.',\n );\n }\n const candidate = value as Record<string, unknown>;\n if (candidate.kind !== RHI_TAPE_ARTIFACT_KIND) {\n return operationError(\n 'artifact-kind-invalid',\n `ArtifactRef.kind to equal ${RHI_TAPE_ARTIFACT_KIND}`,\n 'Capture a new RHI tape and pass its ArtifactRef unchanged.',\n { kind: candidate.kind ?? null },\n );\n }\n if (typeof candidate.digest !== 'string' || candidate.digest.length === 0) {\n return operationError(\n 'artifact-digest-invalid',\n 'ArtifactRef.digest to be a non-empty digest',\n 'Use the digest returned with the captured tape.',\n );\n }\n if (typeof candidate.source !== 'string' || candidate.source.length === 0) {\n return operationError(\n 'artifact-source-invalid',\n 'ArtifactRef.source to identify the producing operation',\n 'Use the complete ArtifactRef returned by rhi.capture.',\n );\n }\n return {\n ok: true,\n value: {\n kind: RHI_TAPE_ARTIFACT_KIND,\n digest: candidate.digest,\n source: candidate.source,\n ...(typeof candidate.path === 'string' ? { path: candidate.path } : {}),\n },\n };\n}\n\nasync function readTape(\n artifact: ArtifactRef,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<Uint8Array>> {\n const validated = validateArtifactRef(artifact);\n if (!validated.ok) return validated;\n return context.readArtifact(validated.value);\n}\n\nexport function runRhiDebugOperation(\n name: 'rhi.capture',\n input: RhiCaptureInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<ArtifactRef>>;\nexport function runRhiDebugOperation(\n name: 'rhi.summary',\n input: RhiSummaryInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiSummaryOutput>>;\nexport function runRhiDebugOperation(\n name: 'rhi.inspect',\n input: RhiInspectInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiInspectOutput>>;\nexport function runRhiDebugOperation(\n name: RhiDebugOperationName,\n input: RhiDebugOperationInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiDebugOperationOutput>>;\nexport async function runRhiDebugOperation(\n name: RhiDebugOperationName,\n input: RhiDebugOperationInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiDebugOperationOutput>> {\n switch (name) {\n case 'rhi.capture': {\n const capture = await context.captureFrame(input as RhiCaptureInput);\n if (!capture.ok) return { ok: false, error: coreError(capture.error) };\n const artifact = validateArtifactRef(capture.value);\n if (!artifact.ok) return artifact;\n return { ok: true, value: artifact.value };\n }\n case 'rhi.summary': {\n const summaryInput = input as RhiSummaryInput;\n const bytes = await readTape(summaryInput.artifact, context);\n if (!bytes.ok) return bytes;\n const decoded = decodeTape(bytes.value);\n if (!decoded.ok) return { ok: false, error: coreError(decoded.error) };\n const artifact = validateArtifactRef(summaryInput.artifact);\n if (!artifact.ok) return artifact;\n return {\n ok: true,\n value: { artifact: artifact.value, model: buildFrameModel(decoded.value) },\n };\n }\n case 'rhi.inspect': {\n const inspectInput = input as RhiInspectInput;\n if (!Number.isInteger(inspectInput.workIndex) || inspectInput.workIndex < 0) {\n return operationError(\n 'work-index-invalid',\n 'workIndex to be a non-negative integer',\n 'Choose workIndex from the FrameModel returned by rhi.summary.',\n { workIndex: inspectInput.workIndex },\n );\n }\n const bytes = await readTape(inspectInput.artifact, context);\n if (!bytes.ok) return bytes;\n const decoded = decodeTape(bytes.value);\n if (!decoded.ok) return { ok: false, error: coreError(decoded.error) };\n if (context.createReplayBackend === undefined) {\n return operationError(\n 'replay-backend-unavailable',\n 'a fresh ReplayBackend factory',\n 'Provide a fresh device and shader factory before running rhi.inspect.',\n );\n }\n const backend = await context.createReplayBackend();\n if (!backend.ok) return backend;\n const opened = await openReplay(decoded.value, backend.value);\n if (!opened.ok) return { ok: false, error: coreError(opened.error) };\n try {\n const inspection = await opened.value.inspectWork(\n inspectInput.workIndex,\n inspectInput.fields,\n );\n if (!inspection.ok) return { ok: false, error: coreError(inspection.error) };\n const artifact = validateArtifactRef(inspectInput.artifact);\n if (!artifact.ok) return artifact;\n return { ok: true, value: { artifact: artifact.value, inspection: inspection.value } };\n } finally {\n await opened.value.dispose();\n }\n }\n }\n}\n","import { execFile } from 'node:child_process';\nimport { cp, mkdir, mkdtemp, readdir, readFile, rename, rm } from 'node:fs/promises';\nimport { basename, dirname, resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport { commandError } from './project.js';\nimport type { CommandResult } from './types.js';\n\nconst execFileAsync = promisify(execFile);\n\nexport interface SdkInstallOptions {\n readonly root: string;\n readonly version?: string;\n}\n\nasync function packageVersion(): Promise<string> {\n const manifest = JSON.parse(await readFile(new URL('../package.json', import.meta.url), 'utf8'));\n if (typeof manifest.version !== 'string' || manifest.version.length === 0) {\n throw new Error('sdk-installer-version-missing');\n }\n return manifest.version;\n}\n\nexport async function sdkInstallCommand(\n options: SdkInstallOptions,\n): Promise<CommandResult<unknown>> {\n const root = resolve(options.root);\n let targetExists = true;\n let entries: string[];\n try {\n entries = await readdir(root);\n } catch (cause) {\n if (\n cause === null ||\n typeof cause !== 'object' ||\n !('code' in cause) ||\n cause.code !== 'ENOENT'\n ) {\n return { ok: false, error: commandError(cause, 'sdk-install-failed') };\n }\n targetExists = false;\n entries = [];\n }\n if (entries.length > 0) {\n return {\n ok: false,\n error: {\n code: 'sdk-target-not-empty',\n expected: 'the SDK install target to be absent or empty',\n hint: 'Choose an empty versioned SDK directory so existing files cannot be overwritten.',\n detail: { root },\n },\n };\n }\n\n const version = options.version ?? (await packageVersion());\n const parent = dirname(root);\n await mkdir(parent, { recursive: true });\n let staging: string | undefined;\n let download: string | undefined;\n try {\n staging = await mkdtemp(resolve(parent, `.${basename(root)}.forgeax-sdk-staging-`));\n download = await mkdtemp(resolve(parent, `.${basename(root)}.forgeax-sdk-download-`));\n await execFileAsync(\n process.env.FORGEAX_NPM_CLIENT ?? 'npm',\n [\n 'install',\n '--prefix',\n download,\n '--ignore-scripts',\n '--no-package-lock',\n '--no-save',\n '--fund=false',\n '--audit=false',\n `@forgeax/engine-sdk@${version}`,\n ],\n { env: { ...process.env, CI: 'true' }, maxBuffer: 16 * 1024 * 1024 },\n );\n const carrier = resolve(download, 'node_modules', '@forgeax', 'engine-sdk', 'sdk');\n const manifest = JSON.parse(await readFile(resolve(carrier, 'sdk-manifest.json'), 'utf8'));\n if (manifest.sdkVersion !== version) throw new Error('sdk-carrier-version-mismatch');\n for (const name of await readdir(carrier)) {\n await cp(resolve(carrier, name), resolve(staging, name), {\n recursive: true,\n errorOnExist: true,\n force: false,\n });\n }\n if (!targetExists) {\n await rename(staging, root);\n staging = undefined;\n } else {\n for (const name of await readdir(staging)) {\n await rename(resolve(staging, name), resolve(root, name));\n }\n }\n return { ok: true, value: { root, sdkVersion: version, source: '@forgeax/engine-sdk' } };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'sdk-install-failed') };\n } finally {\n if (staging !== undefined) await rm(staging, { recursive: true, force: true });\n if (download !== undefined) await rm(download, { recursive: true, force: true });\n }\n}\n","import { mkdtemp, readFile, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { resolve } from 'node:path';\nimport { build as viteBuild } from 'vite';\nimport { createViteConfig } from './host.js';\nimport { commandError, readProjectFacts } from './project.js';\nimport type { CommandResult, ShaderCheckOptions } from './types.js';\n\nexport async function shaderCheckCommand(\n options: ShaderCheckOptions = {},\n): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const target = options.path === undefined ? undefined : resolve(facts.value.root, options.path);\n if (target !== undefined) {\n try {\n await readFile(target);\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'shader-source-unreadable') };\n }\n }\n const temporary = await mkdtemp(resolve(tmpdir(), 'forgeax-shader-check-'));\n const previous = process.cwd();\n try {\n process.chdir(facts.value.root);\n const config = await createViteConfig(facts.value, 'build');\n await viteBuild({\n ...config,\n build: { ...config.build, outDir: temporary, emptyOutDir: true, write: true },\n });\n return { ok: true, value: { root: facts.value.root, path: target ?? null } };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'shader-check-failed') };\n } finally {\n process.chdir(previous);\n await rm(temporary, { recursive: true, force: true });\n }\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';\nimport { basename, dirname, relative, resolve } from 'node:path';\nimport { createServer, build as viteBuild, preview as vitePreview } from 'vite';\nimport { startVitest } from 'vitest/node';\nimport { createZip } from './archive.js';\nimport { verifyDist, writeDistManifest } from './dist.js';\nimport { createViteConfig } from './host.js';\nimport { commandError, readProjectFacts } from './project.js';\n\nexport {\n assetAddCommand,\n assetInspectCommand,\n assetListCommand,\n assetVerifyCommand,\n} from './assets.js';\nexport type { DoctorReport } from './bootstrap-commands.js';\nexport { doctorCommand, initCommand, newCommand } from './bootstrap-commands.js';\nexport { pluginInstallCommand, pluginUninstallCommand } from './plugin-authoring.js';\nexport { createCliRhiDebugOperationContext } from './rhi-debug/cli-context.js';\nexport type {\n ArtifactRef,\n CapturedRhiTape,\n RhiCaptureFrameValue,\n RhiDebugOperationContext,\n RhiDebugOperationDescriptor,\n RhiDebugOperationInput,\n RhiDebugOperationName,\n RhiDebugOperationOutput,\n RhiInspectInput,\n RhiInspectOutput,\n RhiSummaryInput,\n RhiSummaryOutput,\n} from './rhi-debug/operations.js';\nexport {\n createRhiDebugOperationContext,\n discoverRhiDebugOperations,\n RHI_DEBUG_OPERATION_MANIFEST,\n recoverRhiDebugError,\n renderRhiDebugHelp,\n runRhiDebugOperation,\n} from './rhi-debug/operations.js';\nexport { sdkInstallCommand } from './sdk-install.js';\nexport { shaderCheckCommand } from './shader-check.js';\nexport { skillInstallCommand, skillVerifyCommand } from './skill-install.js';\n\nimport {\n type RhiDebugOperationContext,\n type RhiDebugOperationInput,\n type RhiDebugOperationName,\n type RhiDebugOperationOutput,\n runRhiDebugOperation,\n} from './rhi-debug/operations.js';\nimport type {\n BuildOptions,\n CommandResult,\n PackageOptions,\n ProjectCommandOptions,\n} from './types.js';\n\nexport function runRhiDebugCommand(\n name: RhiDebugOperationName,\n input: RhiDebugOperationInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiDebugOperationOutput>> {\n return runRhiDebugOperation(name, input, context);\n}\n\nexport async function buildCommand(options: BuildOptions = {}): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const previous = process.cwd();\n const base = options.base ?? '/';\n const outDir = resolve(facts.value.root, options.outDir ?? 'dist');\n try {\n process.chdir(facts.value.root);\n await viteBuild(await createViteConfig(facts.value, 'build', base, { outDir }));\n return { ok: true, value: await writeDistManifest(facts.value, base, outDir) };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'game-build-failed') };\n } finally {\n process.chdir(previous);\n }\n}\n\nfunction releaseSlug(name: string): string {\n const slug = name\n .normalize('NFKD')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n return slug.length > 0 ? slug : 'forgeax-game';\n}\n\nexport async function packageCommand(\n options: PackageOptions = {},\n): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const built = await buildCommand({\n root: facts.value.root,\n base: './',\n ...(options.json === undefined ? {} : { json: options.json }),\n });\n if (!built.ok) return built;\n const distRoot = resolve(facts.value.root, 'dist');\n const verified = await verifyDist(distRoot);\n if (!verified.ok) return verified;\n const archive = resolve(\n facts.value.root,\n options.output ?? `release/${releaseSlug(facts.value.name)}-web.zip`,\n );\n const archiveRelativeToDist = relative(distRoot, archive);\n if (archiveRelativeToDist === '' || !archiveRelativeToDist.startsWith('..')) {\n return {\n ok: false,\n error: {\n code: 'release-output-inside-dist',\n expected: 'the release archive to live outside the derived dist directory',\n hint: 'Use --output release/<game>-web.zip or another path outside dist.',\n detail: { archive, distRoot },\n },\n };\n }\n const temporaryArchive = `${archive}.partial-${process.pid}`;\n const checksumPath = `${archive}.sha256`;\n const temporaryChecksum = `${checksumPath}.partial-${process.pid}`;\n try {\n const paths = [\n ...verified.value.artifacts.map((artifact) => artifact.path),\n 'forgeax-dist.json',\n ];\n const entries = await Promise.all(\n paths.map(async (path) => ({ path, bytes: await readFile(resolve(distRoot, path)) })),\n );\n const bytes = createZip(entries);\n const sha256 = createHash('sha256').update(bytes).digest('hex');\n const manifestBytes = await readFile(resolve(distRoot, 'forgeax-dist.json'));\n await mkdir(dirname(archive), { recursive: true });\n await writeFile(temporaryArchive, bytes);\n await writeFile(temporaryChecksum, `${sha256} ${basename(archive)}\\n`);\n await rename(temporaryChecksum, checksumPath);\n await rename(temporaryArchive, archive);\n return {\n ok: true,\n value: {\n schemaVersion: '1.0.0',\n format: 'forgeax-web-game',\n target: 'web',\n project: verified.value.project,\n base: verified.value.base,\n engine: {\n delivery: 'bundled-runtime',\n wasm: verified.value.artifacts.some((artifact) => artifact.path.endsWith('.wasm')),\n },\n archive: { path: archive, bytes: bytes.byteLength, sha256 },\n checksumPath,\n distManifestSha256: createHash('sha256').update(manifestBytes).digest('hex'),\n run: {\n local: 'forgeax preview',\n shared: 'upload the ZIP to an HTTPS static or HTML-game host and share its URL',\n },\n },\n };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'game-package-failed') };\n } finally {\n await Promise.all([\n rm(temporaryArchive, { force: true }),\n rm(temporaryChecksum, { force: true }),\n ]);\n }\n}\n\nexport async function devCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const previous = process.cwd();\n try {\n process.chdir(facts.value.root);\n const server = await createServer(await createViteConfig(facts.value, 'serve'));\n await server.listen();\n if (options.json !== true) server.printUrls();\n return { ok: true, value: { root: facts.value.root, urls: server.resolvedUrls } };\n } catch (cause) {\n process.chdir(previous);\n return { ok: false, error: commandError(cause, 'dev-server-failed') };\n }\n}\n\nexport async function previewCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const root = resolve(options.root ?? process.cwd());\n const verified = await verifyDist(resolve(root, 'dist'));\n if (!verified.ok) return verified;\n try {\n const server = await vitePreview({\n root,\n configFile: false,\n base: verified.value.base,\n preview: { open: false, port: 0, strictPort: false },\n build: { outDir: resolve(root, 'dist') },\n });\n if (options.json !== true) server.printUrls();\n return { ok: true, value: { root, urls: server.resolvedUrls } };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'preview-server-failed') };\n }\n}\n\nexport async function testCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n try {\n const context = await startVitest('test', [], {\n root: facts.value.root,\n run: true,\n watch: false,\n passWithNoTests: false,\n });\n if (context === undefined) {\n return {\n ok: false,\n error: {\n code: 'test-runner-unavailable',\n expected: 'Vitest to create a project test context',\n hint: 'Inspect the project test configuration.',\n detail: { root: facts.value.root },\n },\n };\n }\n const failed = context.state.getFiles().filter((file) => file.result?.state === 'fail');\n await context.close();\n if (failed.length > 0) {\n return {\n ok: false,\n error: {\n code: 'project-tests-failed',\n expected: 'all project tests to pass',\n hint: 'Repair the failing game test before building a release.',\n detail: { files: failed.map((file) => file.filepath) },\n },\n };\n }\n return { ok: true, value: { root: facts.value.root } };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'project-tests-failed') };\n }\n}\n","import type { PluginCatalog, ToolPlugin } from '@forgeax/engine-plugin';\nimport { bindPreviewHost, type NativePreviewHost } from '@forgeax/engine-preview';\nimport materialPreviewPlugin from '@forgeax/engine-preview/material';\nimport meshPreviewPlugin from '@forgeax/engine-preview/mesh';\nimport texturePreviewPlugin from '@forgeax/engine-preview/texture';\nimport vfxPreviewPlugin from '@forgeax/engine-preview/vfx';\nimport type { ToolDescriptor } from '@forgeax/engine-tool-runtime';\n\nexport const nativePreviewPlugins = [\n ['@forgeax/engine-preview/material', materialPreviewPlugin],\n ['@forgeax/engine-preview/mesh', meshPreviewPlugin],\n ['@forgeax/engine-preview/vfx', vfxPreviewPlugin],\n ['@forgeax/engine-preview/texture', texturePreviewPlugin],\n] as const;\n\nexport const nativePreviewTools = nativePreviewPlugins.flatMap(([, plugin]) => plugin.tools);\nexport const nativePreviewDescriptors: readonly ToolDescriptor[] = nativePreviewTools.map(\n ({ descriptor }) => descriptor,\n);\n\nexport function createNativePreviewCatalog(\n host: NativePreviewHost,\n selectedName?: string,\n): PluginCatalog {\n return new Map(\n nativePreviewPlugins\n .filter(([name]) => selectedName === undefined || name === selectedName)\n .map(([name, plugin]) => [\n name,\n {\n realm: 'host' as const,\n load: async () => ({\n default: bindPreviewHost(plugin as ToolPlugin, host),\n }),\n },\n ]),\n );\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport {\n capabilityUnavailableError,\n createToolRuntime,\n type ToolContribution,\n type ToolDescriptor,\n type ToolRunOptions,\n type ToolRuntime,\n type ToolSchema,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\nimport type { BuildOptions, PluginInstallOptions } from '../types.js';\nimport type { OfflineAnalysisRequest, OfflineAnalysisResult } from './offline-analysis.js';\nimport { nativePreviewDescriptors } from './preview-catalog.js';\nimport type { PreviewHostRequest, PreviewHostResult } from './preview-host.js';\n\nexport interface ToolCatalogAuthority {\n readonly authorityDigest?: string;\n readonly root?: string;\n readonly read?: () => Promise<ToolCatalogAuthoritySnapshot>;\n readonly projectionPath?: string;\n}\n\nexport interface ToolCatalogAuthoritySnapshot {\n readonly authorityDigest: string;\n readonly descriptors: readonly ToolDescriptor[];\n}\n\nexport interface ToolCatalogEntry {\n readonly id: string;\n readonly title: string;\n readonly summary: string;\n readonly realm: ToolDescriptor['realm'];\n readonly evidence: ToolDescriptor['evidence'];\n readonly argsSchema?: string;\n readonly resultSchema?: string;\n}\n\nexport interface ToolCatalog {\n readonly schemaVersion: '1.0.0';\n readonly authorityDigest: string;\n readonly digest: string;\n readonly entries: readonly ToolCatalogEntry[];\n}\n\nexport type ToolCatalogLoadResult =\n | {\n readonly ok: true;\n readonly value: ToolCatalog;\n }\n | {\n readonly ok: false;\n readonly error: {\n readonly code: 'tool-catalog-authority-unreadable' | 'tool-catalog-projection-invalid';\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, string>>;\n };\n };\n\nconst buildArgsSchema: ToolSchema<BuildOptions> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected an options object' };\n return { ok: true, value: value as BuildOptions };\n },\n describe: '{\"type\":\"object\",\"properties\":{\"root\":{\"type\":\"string\"},\"base\":{\"type\":\"string\"}}}',\n};\n\nconst pluginInstallArgsSchema: ToolSchema<PluginInstallOptions> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a plugin install options object' };\n return { ok: true, value: value as PluginInstallOptions };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"id\",\"module\"],\"properties\":{\"id\":{\"type\":\"string\"},\"module\":{\"type\":\"string\"},\"realm\":{\"enum\":[\"host\",\"engine\",\"build\"]},\"dependency\":{\"type\":\"string\"},\"root\":{\"type\":\"string\"}}}',\n};\n\nconst previewArgsSchema: ToolSchema<PreviewHostRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a preview request object' };\n const request = value as { readonly recipe?: unknown };\n if (request.recipe === undefined || typeof request.recipe !== 'object')\n return { ok: false, error: 'expected recipe in the preview request' };\n return { ok: true, value: value as PreviewHostRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"recipe\"],\"properties\":{\"recipe\":{\"type\":\"object\",\"required\":[\"snapshot\"],\"properties\":{\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"backend\":{\"const\":\"webgpu\"},\"presentation\":{\"enum\":[\"hidden\",\"visible\"]},\"viewport\":{\"type\":\"object\",\"properties\":{\"width\":{\"type\":\"integer\",\"minimum\":1},\"height\":{\"type\":\"integer\",\"minimum\":1}}},\"actions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"frame\",\"name\"],\"properties\":{\"frame\":{\"type\":\"integer\",\"minimum\":0},\"name\":{\"type\":\"string\",\"minLength\":1},\"value\":{}}}},\"deltaSeconds\":{\"type\":\"number\",\"minimum\":0},\"frames\":{\"type\":\"integer\",\"minimum\":1}}}}}',\n};\n\nconst resultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\"}',\n};\n\nconst offlineAnalysisArgsSchema: ToolSchema<OfflineAnalysisRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected an offline analysis request object' };\n const request = value as { readonly manifest?: unknown };\n if (request.manifest === undefined || typeof request.manifest !== 'object')\n return { ok: false, error: 'expected manifest in the offline analysis request' };\n return { ok: true, value: value as OfflineAnalysisRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"manifest\"],\"properties\":{\"manifest\":{\"type\":\"object\",\"required\":[\"schemaVersion\",\"identity\",\"artifacts\"]},\"required\":{\"type\":\"array\",\"items\":{\"enum\":[\"rhi-tape\",\"png\",\"profile-capture\"]}}}}',\n};\n\nexport const projectBuildDescriptor: ToolDescriptor<BuildOptions, unknown> = {\n id: 'project.build',\n title: 'Build project',\n summary: 'Builds the project through the existing Vite and Pack authorities.',\n realm: 'build',\n argsSchema: buildArgsSchema,\n resultSchema,\n evidence: [],\n};\nexport const authorPluginInstallDescriptor: ToolDescriptor<PluginInstallOptions, unknown> = {\n id: 'author.plugin-install',\n title: 'Install project plugin',\n summary: 'Writes one plugin Entry through the project authoring authority.',\n realm: 'build',\n argsSchema: pluginInstallArgsSchema,\n resultSchema,\n evidence: [],\n};\nexport const previewRunDescriptor: ToolDescriptor<PreviewHostRequest, PreviewHostResult> = {\n id: 'preview.run',\n title: 'Run hidden WebGPU preview',\n summary: 'Runs one fixed real-WebGPU preview recipe and returns structured evidence refs.',\n realm: 'host',\n argsSchema: previewArgsSchema,\n resultSchema: resultSchema as ToolDescriptor<\n PreviewHostRequest,\n PreviewHostResult\n >['resultSchema'],\n evidence: ['rhi-tape', 'png', 'profile-capture'],\n};\nexport const previewOfflineAnalysisDescriptor: ToolDescriptor<\n OfflineAnalysisRequest,\n OfflineAnalysisResult\n> = {\n id: 'preview.offline-analysis',\n title: 'Analyze preview artifacts',\n summary: 'Validates owner-separated evidence identity before offline consumption.',\n realm: 'build',\n argsSchema: offlineAnalysisArgsSchema,\n resultSchema: resultSchema as ToolSchema<OfflineAnalysisResult>,\n evidence: ['rhi-tape', 'png', 'profile-capture'],\n};\n\nexport const defaultToolDescriptors: readonly ToolDescriptor[] = [\n projectBuildDescriptor,\n authorPluginInstallDescriptor,\n ...nativePreviewDescriptors,\n];\n\nfunction projectDescriptor(descriptor: ToolDescriptor): ToolCatalogEntry {\n return {\n id: descriptor.id,\n title: descriptor.title,\n summary: descriptor.summary,\n realm: descriptor.realm,\n evidence: [...descriptor.evidence],\n ...(descriptor.argsSchema.describe === undefined\n ? {}\n : { argsSchema: descriptor.argsSchema.describe }),\n ...(descriptor.resultSchema.describe === undefined\n ? {}\n : { resultSchema: descriptor.resultSchema.describe }),\n };\n}\n\nexport interface ToolRealmOwner {\n readonly realm: ToolDescriptor['realm'];\n readonly contributions: readonly ToolContribution[];\n}\n\nexport interface ToolRealmDispatch {\n readonly list: () => readonly ToolDescriptor[];\n readonly describe: (id: string) => ToolDescriptor | undefined;\n readonly run: <TResult = unknown>(\n id: string,\n args: unknown,\n options?: ToolRunOptions,\n ) => Promise<ToolTerminal<TResult>>;\n}\n\nfunction missingRealmOwner<TResult>(\n descriptor: ToolDescriptor | undefined,\n id: string,\n): ToolTerminal<TResult> {\n const realm = descriptor?.realm ?? 'build';\n return {\n outcome: 'failed',\n failure: capabilityUnavailableError(`realm:${realm}:tool:${id}`, realm),\n artifacts: [],\n } as ToolTerminal<TResult>;\n}\n\n/** Dispatches a descriptor to the one physical owner for its declared realm. */\nexport function createRealmDispatch(\n contributions: readonly ToolContribution[],\n owners: readonly ToolRealmOwner[],\n): ToolRealmDispatch {\n const contributionById = new Map(\n contributions.map((contribution) => [contribution.descriptor.id, contribution]),\n );\n const ownerByRealm = new Map<ToolDescriptor['realm'], ToolRuntime>();\n for (const owner of owners) {\n if (ownerByRealm.has(owner.realm)) throw new TypeError(`Duplicate realm owner: ${owner.realm}`);\n const invalid = owner.contributions.find(\n (contribution) => contribution.descriptor.realm !== owner.realm,\n );\n if (invalid !== undefined) {\n throw new TypeError(\n `Tool ${invalid.descriptor.id} declares ${invalid.descriptor.realm} but owner is ${owner.realm}`,\n );\n }\n ownerByRealm.set(owner.realm, createToolRuntime(owner.contributions));\n }\n return {\n list: () => contributions.map((contribution) => contribution.descriptor),\n describe: (id) => contributionById.get(id)?.descriptor,\n async run<TResult = unknown>(id: string, args: unknown, options: ToolRunOptions = {}) {\n const contribution = contributionById.get(id);\n if (contribution === undefined)\n return missingRealmOwner(undefined, id) as ToolTerminal<TResult>;\n const owner = ownerByRealm.get(contribution.descriptor.realm);\n if (owner === undefined) return missingRealmOwner(contribution.descriptor, id);\n const bound = owner.get(id);\n if (bound === undefined) return missingRealmOwner(contribution.descriptor, id);\n return (await owner.run(bound, args, options).terminal) as ToolTerminal<TResult>;\n },\n };\n}\n\nfunction requiredAuthorityDigest(authority: ToolCatalogAuthority): string {\n if (authority.authorityDigest === undefined) {\n throw new TypeError('Catalog materialization requires an authority digest');\n }\n return authority.authorityDigest;\n}\n\nfunction digestCatalog(authorityDigest: string, entries: readonly ToolCatalogEntry[]): string {\n return `sha256:${createHash('sha256')\n .update(JSON.stringify({ authorityDigest, entries }))\n .digest('hex')}`;\n}\n\nfunction digestAuthority(bytes: readonly Uint8Array[]): string {\n const hash = createHash('sha256');\n for (const value of bytes) hash.update(value);\n return `sha256:${hash.digest('hex')}`;\n}\n\nfunction projectionValid(\n catalog: unknown,\n authorityDigest: string,\n descriptors: readonly ToolDescriptor[] = defaultToolDescriptors,\n): catalog is ToolCatalog {\n if (catalog === null || typeof catalog !== 'object') return false;\n const value = catalog as Partial<ToolCatalog>;\n const expectedEntries = descriptors\n .map(projectDescriptor)\n .sort((left, right) => left.id.localeCompare(right.id));\n return (\n value.schemaVersion === '1.0.0' &&\n value.authorityDigest === authorityDigest &&\n Array.isArray(value.entries) &&\n JSON.stringify(value.entries) === JSON.stringify(expectedEntries) &&\n value.digest === digestCatalog(authorityDigest, value.entries as ToolCatalogEntry[])\n );\n}\n\nexport function createProjectToolCatalogAuthority(\n rootInput: string,\n descriptors: readonly ToolDescriptor[] = defaultToolDescriptors,\n): ToolCatalogAuthority {\n const root = resolve(rootInput);\n return {\n root,\n projectionPath: resolve(root, '.forgeax/generated/tool-catalog.json'),\n async read() {\n const [forge, packageJson] = await Promise.all([\n readFile(resolve(root, 'forge.json')),\n readFile(resolve(root, 'package.json')),\n ]);\n return { authorityDigest: digestAuthority([forge, packageJson]), descriptors };\n },\n };\n}\n\nexport async function loadToolCatalog(\n authority: ToolCatalogAuthority,\n descriptors: readonly ToolDescriptor[] = defaultToolDescriptors,\n): Promise<ToolCatalogLoadResult> {\n const read = authority.read;\n if (read === undefined) {\n if (authority.authorityDigest === undefined) {\n return {\n ok: false,\n error: {\n code: 'tool-catalog-authority-unreadable',\n expected: 'an injectable project authority reader',\n hint: 'Create a project authority from a real project root before listing tools.',\n detail: { reason: 'authority reader is missing' },\n },\n };\n }\n return { ok: true, value: materializeToolDescriptorCatalog(descriptors, authority) };\n }\n let snapshot: ToolCatalogAuthoritySnapshot;\n try {\n snapshot = await read();\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'tool-catalog-authority-unreadable',\n expected: 'project authority files to be readable',\n hint: 'Repair forge.json and package.json, then retry catalog rebuild.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n const projectionPath = authority.projectionPath;\n if (projectionPath !== undefined) {\n try {\n const current = JSON.parse(await readFile(projectionPath, 'utf8')) as unknown;\n if (projectionValid(current, snapshot.authorityDigest, snapshot.descriptors)) {\n return { ok: true, value: current };\n }\n } catch {\n // Missing or corrupt projections are rebuilt from the authority below.\n }\n }\n const catalog = materializeToolDescriptorCatalog(snapshot.descriptors, {\n authorityDigest: snapshot.authorityDigest,\n });\n if (projectionPath !== undefined) {\n try {\n await mkdir(resolve(projectionPath, '..'), { recursive: true });\n await writeFile(projectionPath, `${JSON.stringify(catalog, null, 2)}\\n`, 'utf8');\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'tool-catalog-projection-invalid',\n expected: 'the generated catalog projection to be writable',\n hint: 'Restore write access to .forgeax/generated and retry cold rebuild.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n }\n return { ok: true, value: catalog };\n}\n\nexport function materializeToolCatalog<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n authority: ToolCatalogAuthority,\n): ToolCatalog;\nexport function materializeToolCatalog(\n contributions: readonly unknown[],\n authority: ToolCatalogAuthority,\n): ToolCatalog;\nexport function materializeToolCatalog(\n contributions: readonly unknown[],\n authority: ToolCatalogAuthority,\n): ToolCatalog {\n const entries = contributions\n .map((candidate) => {\n if (typeof candidate !== 'object' || candidate === null)\n throw new TypeError('Invalid tool contribution');\n return projectDescriptor((candidate as ToolContribution<unknown, unknown>).descriptor);\n })\n .sort((left, right) => left.id.localeCompare(right.id));\n const authorityDigest = requiredAuthorityDigest(authority);\n return {\n schemaVersion: '1.0.0',\n authorityDigest,\n digest: digestCatalog(authorityDigest, entries),\n entries,\n };\n}\n\nexport function materializeToolDescriptorCatalog(\n descriptors: readonly ToolDescriptor[],\n authority: ToolCatalogAuthority,\n): ToolCatalog {\n const entries = descriptors\n .map(projectDescriptor)\n .sort((left, right) => left.id.localeCompare(right.id));\n const authorityDigest = requiredAuthorityDigest(authority);\n return {\n schemaVersion: '1.0.0',\n authorityDigest,\n digest: digestCatalog(authorityDigest, entries),\n entries,\n };\n}\n\nexport function rebuildToolCatalog<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n current: ToolCatalog | undefined,\n authority: ToolCatalogAuthority,\n): ToolCatalog;\nexport function rebuildToolCatalog(\n contributions: readonly unknown[],\n current: ToolCatalog | undefined,\n authority: ToolCatalogAuthority,\n): ToolCatalog {\n if (\n current !== undefined &&\n authority.authorityDigest !== undefined &&\n current.authorityDigest === authority.authorityDigest &&\n projectionValid(current, authority.authorityDigest)\n )\n return current;\n if (authority.authorityDigest === undefined) {\n throw new TypeError('Catalog rebuild requires an authority digest');\n }\n return materializeToolCatalog(contributions, authority);\n}\n\nexport function listTools(catalog: ToolCatalog): readonly ToolCatalogEntry[] {\n return catalog.entries;\n}\n\nexport function describeTool(catalog: ToolCatalog, id: string): ToolCatalogEntry | undefined {\n return catalog.entries.find((entry) => entry.id === id);\n}\n","import {\n domainFailureError,\n type ToolDomainFailure,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport const retiredPreviewOperationFailure: ToolDomainFailure = {\n code: 'preview-operation-migrated',\n expected: 'a domain-specific preview contribution selected from the project catalog',\n hint: 'Use material.preview, mesh.preview, vfx.preview, or texture.preview with a Project GUID.',\n detail: {\n operation: 'preview.run',\n replacements: ['material.preview', 'mesh.preview', 'vfx.preview', 'texture.preview'],\n },\n};\n\nexport function retiredPreviewTool(): ToolTerminal<never> {\n return {\n outcome: 'failed',\n failure: domainFailureError(\n retiredPreviewOperationFailure.code,\n retiredPreviewOperationFailure.expected,\n retiredPreviewOperationFailure.hint,\n retiredPreviewOperationFailure.detail,\n ),\n artifacts: [],\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { Context, isToolPlugin, type ToolPlugin } from '@forgeax/engine-plugin';\nimport {\n type GamePluginEntry,\n installCatalogLoader,\n type PluginCatalog,\n type PluginRealm,\n projectPluginEntries,\n} from '@forgeax/engine-plugin/loader';\nimport { type GameProjectPluginEntry, GameProjectSchema } from '@forgeax/engine-project';\nimport type {\n ToolContribution,\n ToolEvidenceKind,\n ToolRunOptions,\n ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\nimport { createServer, type ViteDevServer } from 'vite';\n\nexport interface ProjectToolBinding {\n readonly contribution: ToolContribution<unknown, unknown>;\n readonly entry: GameProjectPluginEntry;\n readonly moduleName: string;\n readonly realm: PluginRealm;\n readonly toolPlugin?: ToolPlugin;\n readonly loadToolPlugin: () => Promise<ToolPlugin>;\n}\n\nexport interface ProjectToolModuleLoader {\n readonly load: (name: string) => Promise<unknown>;\n readonly close: () => Promise<void>;\n}\n\nexport interface ProjectToolDiscoveryOptions {\n readonly moduleLoader?: ProjectToolModuleLoader;\n readonly loadModules?: boolean;\n}\n\ninterface ProjectPluginLeaf {\n readonly entry: GameProjectPluginEntry;\n readonly moduleName: string;\n readonly realm: PluginRealm;\n}\n\ninterface StaticToolDeclaration {\n readonly id: string;\n readonly title: string;\n readonly summary: string;\n readonly realm: PluginRealm;\n readonly argsSchema?: string;\n readonly resultSchema?: string;\n readonly evidence?: readonly ToolEvidenceKind[];\n}\n\nfunction projectLeaves(\n entries: readonly GameProjectPluginEntry[],\n inheritedRealm: PluginRealm = 'engine',\n): ProjectPluginLeaf[] {\n const leaves: ProjectPluginLeaf[] = [];\n for (const entry of entries) {\n const realm = entry.realm ?? inheritedRealm;\n if (entry.disabled === true) continue;\n if (entry.group === true) {\n leaves.push(...projectLeaves(entry.config as readonly GameProjectPluginEntry[], realm));\n continue;\n }\n if (!entry.name.startsWith('cordis:')) {\n leaves.push({ entry, moduleName: entry.name, realm });\n }\n }\n return leaves;\n}\n\nfunction exportedToolPlugin(module: unknown): ToolPlugin | undefined {\n if (isToolPlugin(module)) return module;\n if (typeof module !== 'object' || module === null) return undefined;\n const value = Reflect.get(module, 'default');\n return isToolPlugin(value) ? value : undefined;\n}\n\nfunction staticContributions(\n entry: GameProjectPluginEntry,\n): readonly ToolContribution<unknown, unknown>[] {\n if (entry.config === null || typeof entry.config !== 'object') return [];\n const tools = Reflect.get(entry.config, 'tools');\n if (!Array.isArray(tools)) return [];\n return tools.flatMap((candidate: unknown) => {\n if (candidate === null || typeof candidate !== 'object') return [];\n const declaration = candidate as Partial<StaticToolDeclaration>;\n if (\n typeof declaration.id !== 'string' ||\n typeof declaration.title !== 'string' ||\n typeof declaration.summary !== 'string' ||\n (declaration.realm !== 'build' &&\n declaration.realm !== 'host' &&\n declaration.realm !== 'engine')\n )\n return [];\n const descriptor = {\n id: declaration.id,\n title: declaration.title,\n summary: declaration.summary,\n realm: declaration.realm,\n argsSchema: {\n parse: (value: unknown) => ({ ok: true as const, value }),\n ...(declaration.argsSchema === undefined ? {} : { describe: declaration.argsSchema }),\n },\n resultSchema: {\n parse: (value: unknown) => ({ ok: true as const, value }),\n ...(declaration.resultSchema === undefined ? {} : { describe: declaration.resultSchema }),\n },\n evidence: declaration.evidence ?? [],\n };\n return [\n {\n descriptor,\n execute: async () => ({\n ok: false as const,\n error: { code: 'tool-static-descriptor', detail: {} },\n }),\n },\n ];\n });\n}\n\nfunction hasStaticToolDeclarations(entry: GameProjectPluginEntry): boolean {\n if (entry.config === null || typeof entry.config !== 'object') return false;\n return Array.isArray(Reflect.get(entry.config, 'tools'));\n}\n\nasync function createViteModuleLoader(root: string): Promise<ProjectToolModuleLoader> {\n const server: ViteDevServer = await createServer({\n root,\n appType: 'custom',\n configFile: false,\n logLevel: 'silent',\n server: { middlewareMode: true },\n });\n return {\n load(name) {\n const id = name.startsWith('.') ? `/@fs/${resolve(root, name)}` : name;\n return server.ssrLoadModule(id);\n },\n close: () => server.close(),\n };\n}\n\nasync function readProjectEntries(root: string): Promise<readonly GameProjectPluginEntry[]> {\n const raw = JSON.parse(await readFile(resolve(root, 'forge.json'), 'utf8')) as unknown;\n const parsed = GameProjectSchema.safeParse(raw);\n if (!parsed.success) {\n throw new TypeError(`Invalid forge.json: ${parsed.error.message}`);\n }\n return parsed.data.plugins ?? [];\n}\n\nexport async function discoverProjectTools(\n rootInput: string,\n options: ProjectToolDiscoveryOptions = {},\n): Promise<readonly ProjectToolBinding[]> {\n const root = resolve(rootInput);\n const loadModules = options.loadModules ?? true;\n const loader = loadModules\n ? (options.moduleLoader ?? (await createViteModuleLoader(root)))\n : undefined;\n try {\n const bindings: ProjectToolBinding[] = [];\n const ids = new Map<string, string>();\n for (const leaf of projectLeaves(await readProjectEntries(root))) {\n if (leaf.realm !== 'build' && leaf.realm !== 'host' && leaf.realm !== 'engine') continue;\n // Gameplay entries are part of the engine closure, not the tool catalog. They\n // are only evaluated when they explicitly publish static tool declarations;\n // this keeps discovery from importing an unrelated gameplay module.\n if (leaf.realm === 'engine' && !hasStaticToolDeclarations(leaf.entry)) continue;\n const toolPlugin = loadModules\n ? exportedToolPlugin(await (loader as ProjectToolModuleLoader).load(leaf.moduleName))\n : undefined;\n const contributions = toolPlugin?.tools ?? staticContributions(leaf.entry);\n for (const contribution of contributions) {\n if (contribution.descriptor.realm !== leaf.realm) {\n throw new TypeError(\n `Tool ${contribution.descriptor.id} declares ${contribution.descriptor.realm} but Entry ${leaf.entry.id} owns ${leaf.realm}`,\n );\n }\n const existing = ids.get(contribution.descriptor.id);\n if (existing !== undefined) {\n throw new TypeError(\n `Duplicate project tool id ${contribution.descriptor.id} from ${existing} and ${leaf.entry.id}`,\n );\n }\n ids.set(contribution.descriptor.id, leaf.entry.id);\n bindings.push({\n contribution,\n entry: leaf.entry,\n moduleName: leaf.moduleName,\n realm: leaf.realm,\n ...(toolPlugin === undefined ? {} : { toolPlugin }),\n loadToolPlugin: async () => {\n if (toolPlugin !== undefined) return toolPlugin;\n const selectedLoader = options.moduleLoader ?? (await createViteModuleLoader(root));\n try {\n const loaded = exportedToolPlugin(await selectedLoader.load(leaf.moduleName));\n if (loaded === undefined)\n throw new TypeError(`Entry ${leaf.entry.id} does not export a ToolPlugin`);\n return loaded;\n } finally {\n await selectedLoader.close();\n }\n },\n });\n }\n }\n return bindings;\n } finally {\n if (loader !== undefined) await loader.close();\n }\n}\n\nfunction activationFailure(cause: unknown): ToolTerminal<never> {\n const message = cause instanceof Error ? cause.message : String(cause);\n return {\n outcome: 'failed',\n failure: {\n code: 'tool-domain-failed',\n expected: 'the owning project plugin Fiber to become ready',\n hint: 'Repair the project Entry, plugin dependencies, or plugin apply failure before retrying.',\n detail: { code: 'tool-plugin-activation-failed', payload: message },\n },\n artifacts: [],\n };\n}\n\nexport async function runProjectTool(\n binding: ProjectToolBinding,\n args: unknown,\n options: ToolRunOptions,\n): Promise<ToolTerminal<unknown>> {\n const ctx = new Context();\n try {\n const toolPlugin = await binding.loadToolPlugin();\n const contribution = toolPlugin.tools.find(\n (candidate) => candidate.descriptor.id === binding.contribution.descriptor.id,\n );\n if (contribution === undefined)\n return activationFailure(new Error('selected tool is absent from Entry'));\n const catalog: PluginCatalog = new Map([\n [\n binding.moduleName,\n {\n realm: binding.realm,\n load: async () => ({ default: toolPlugin }),\n },\n ],\n ]);\n const { loader } = await installCatalogLoader(ctx, catalog, binding.realm);\n const entries = projectPluginEntries(\n [binding.entry as GamePluginEntry],\n binding.realm,\n binding.realm,\n );\n await loader.root.update(entries);\n await loader.await();\n const { createToolRuntime } = await import('@forgeax/engine-tool-runtime');\n const { createContextCapabilityResolver } = await import('@forgeax/engine-plugin');\n return await createToolRuntime([contribution]).run(contribution, args, {\n ...options,\n capabilityResolver: createContextCapabilityResolver(ctx),\n }).terminal;\n } catch (cause) {\n return activationFailure(cause);\n } finally {\n await ctx.fiber.dispose();\n }\n}\n","import {\n type PreviewArtifactManifest,\n type PreviewArtifactRole,\n validatePreviewArtifactManifest,\n} from '@forgeax/engine-preview';\nimport {\n type ToolArtifactManifest,\n type ToolDomainFailure,\n type ToolEvidenceKind,\n validateArtifactManifest,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface OfflineAnalysisRequest {\n readonly manifest: PreviewArtifactManifest | ToolArtifactManifest;\n readonly required?: readonly (PreviewArtifactRole | ToolEvidenceKind)[];\n}\n\nexport interface OfflineAnalysisResult {\n readonly runId: string;\n readonly captureId: string;\n readonly artifacts: readonly { readonly kind: string; readonly digest: string }[];\n}\n\nexport function analyzePreviewArtifacts(\n request: OfflineAnalysisRequest,\n):\n | { readonly ok: true; readonly value: OfflineAnalysisResult }\n | { readonly ok: false; readonly error: ToolDomainFailure } {\n const required = request.required ?? [];\n const validated =\n request.manifest.schemaVersion === '1.0.0'\n ? required.some((kind) => kind !== 'rhi-tape' && kind !== 'png' && kind !== 'profile-capture')\n ? {\n ok: false as const,\n error: {\n code: 'tool-artifact-manifest-invalid',\n expected: 'requested evidence kinds to belong to the v1 artifact manifest',\n hint: 'Request one of rhi-tape, png, or profile-capture for a v1 manifest.',\n detail: { reason: 'unsupported required evidence kind' },\n },\n }\n : validateArtifactManifest(request.manifest, required as readonly ToolEvidenceKind[])\n : validatePreviewArtifactManifest(\n request.manifest,\n (request.required ?? []).filter(\n (role): role is PreviewArtifactRole =>\n role === 'report' ||\n role === 'rhi-tape' ||\n role === 'capture' ||\n role === 'fresh-replay' ||\n role === 'profile-capture' ||\n role === 'contact-sheet',\n ),\n );\n if (!validated.ok) return { ok: false, error: validated.error as ToolDomainFailure };\n return {\n ok: true,\n value: {\n runId: request.manifest.identity.runId,\n captureId: request.manifest.identity.captureId,\n artifacts: request.manifest.artifacts.map(({ kind, digest }) => ({ kind, digest })),\n },\n };\n}\n","import {\n createMaterialPreviewContribution,\n createMeshPreviewContribution,\n createTexturePreviewContribution,\n createVfxPreviewContribution,\n} from '@forgeax/engine-preview';\nimport { defineTool, type ToolContribution } from '@forgeax/engine-tool-runtime';\nimport { previewOfflineAnalysisDescriptor, previewRunDescriptor } from './catalog.js';\nimport {\n analyzePreviewArtifacts,\n type OfflineAnalysisRequest,\n type OfflineAnalysisResult,\n} from './offline-analysis.js';\nimport type { PreviewHostRequest, PreviewHostResult } from './preview-host.js';\nimport { retiredPreviewOperationFailure } from './preview-migration.js';\n\nexport function createPreviewContribution(): ToolContribution<\n PreviewHostRequest,\n PreviewHostResult\n> {\n return defineTool(previewRunDescriptor, async () => ({\n ok: false as const,\n error: retiredPreviewOperationFailure,\n }));\n}\n\nexport function createOfflineAnalysisContribution(): ToolContribution<\n OfflineAnalysisRequest,\n OfflineAnalysisResult\n> {\n return defineTool(\n {\n ...previewOfflineAnalysisDescriptor,\n },\n (request) => analyzePreviewArtifacts(request),\n );\n}\n\nexport function createPreviewContributions(): readonly ToolContribution<unknown, unknown>[] {\n return [\n createPreviewContribution() as ToolContribution<unknown, unknown>,\n createOfflineAnalysisContribution() as ToolContribution<unknown, unknown>,\n ];\n}\n\n/**\n * The discoverable preview surface is domain-specific. The generic recipe\n * contribution remains available only as an explicit migration error.\n */\nexport function createDomainPreviewContributions(): readonly ToolContribution<unknown, unknown>[] {\n return [\n createMaterialPreviewContribution() as ToolContribution<unknown, unknown>,\n createMeshPreviewContribution() as ToolContribution<unknown, unknown>,\n createVfxPreviewContribution() as ToolContribution<unknown, unknown>,\n createTexturePreviewContribution() as ToolContribution<unknown, unknown>,\n ];\n}\n","import {\n defineTool,\n type JsonValue,\n type ToolContribution,\n type ToolDomainFailure,\n} from '@forgeax/engine-tool-runtime';\nimport type { BuildOptions, PluginInstallOptions } from '../types.js';\nimport { authorPluginInstallDescriptor, projectBuildDescriptor } from './catalog.js';\nimport { createDomainPreviewContributions } from './preview-contributions.js';\n\n// The historical createPreviewContributions helper is private proof code; the\n// discoverable default path intentionally uses domain contributions instead.\n\nfunction commandFailure(error: {\n readonly code: string;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Record<string, unknown>;\n}): { readonly ok: false; readonly error: ToolDomainFailure } {\n return { ok: false, error: { ...error, detail: error.detail as unknown as JsonValue } };\n}\n\nexport function createBuildContribution(\n projectRoot = process.cwd(),\n): ToolContribution<BuildOptions, unknown> {\n return defineTool(\n projectBuildDescriptor as typeof projectBuildDescriptor & {\n readonly argsSchema: import('@forgeax/engine-tool-runtime').ToolSchema<BuildOptions>;\n },\n async (options) => {\n const { buildCommand } = await import('../commands.js');\n const result = await buildCommand({ ...options, root: options.root ?? projectRoot });\n return result.ok ? result.value : commandFailure(result.error);\n },\n );\n}\n\nexport function createAuthorContribution(\n projectRoot = process.cwd(),\n): ToolContribution<PluginInstallOptions, unknown> {\n return defineTool(\n authorPluginInstallDescriptor as typeof authorPluginInstallDescriptor & {\n readonly argsSchema: import('@forgeax/engine-tool-runtime').ToolSchema<PluginInstallOptions>;\n },\n async (options) => {\n const { pluginInstallCommand } = await import('../plugin-authoring.js');\n const result = await pluginInstallCommand({ ...options, root: options.root ?? projectRoot });\n return result.ok ? result.value : commandFailure(result.error);\n },\n );\n}\n\nexport function createDefaultContributions(\n projectRoot = process.cwd(),\n): readonly (\n | ToolContribution<BuildOptions, unknown>\n | ToolContribution<PluginInstallOptions, unknown>\n | ToolContribution<unknown, unknown>\n)[] {\n return [\n createBuildContribution(projectRoot),\n createAuthorContribution(projectRoot),\n ...createDomainPreviewContributions(),\n ];\n}\n","import {\n createToolRuntime,\n type ToolContribution,\n type ToolRuntime,\n} from '@forgeax/engine-tool-runtime';\nimport { createPreviewContributions } from './preview-contributions.js';\n\nexport function createDevkitToolRuntime<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n): ToolRuntime;\nexport function createDevkitToolRuntime(contributions: readonly unknown[]): ToolRuntime;\nexport function createDevkitToolRuntime(contributions: readonly unknown[]): ToolRuntime {\n return createToolRuntime(contributions);\n}\n\nexport function createPreviewToolRuntime(): ToolRuntime {\n return createToolRuntime(createPreviewContributions());\n}\n","export {\n assetAddCommand,\n assetInspectCommand,\n assetListCommand,\n assetVerifyCommand,\n buildCommand,\n createCliRhiDebugOperationContext,\n devCommand,\n doctorCommand,\n initCommand,\n newCommand,\n packageCommand,\n pluginInstallCommand,\n pluginUninstallCommand,\n previewCommand,\n runRhiDebugCommand,\n sdkInstallCommand,\n shaderCheckCommand,\n skillInstallCommand,\n skillVerifyCommand,\n testCommand,\n} from './commands.js';\nexport { verifyDist, writeDistManifest } from './dist.js';\nexport { createInitPlan } from './init.js';\nexport { readProjectFacts } from './project.js';\nexport type {\n ArtifactRef,\n CapturedRhiTape,\n RhiCaptureFrameValue,\n RhiDebugOperationContext,\n RhiDebugOperationDescriptor,\n RhiDebugOperationInput,\n RhiDebugOperationName,\n RhiDebugOperationOutput,\n RhiInspectInput,\n RhiInspectOutput,\n RhiSummaryInput,\n RhiSummaryOutput,\n} from './rhi-debug/operations.js';\nexport {\n createRhiDebugOperationContext,\n discoverRhiDebugOperations,\n RHI_DEBUG_OPERATION_MANIFEST,\n recoverRhiDebugError,\n renderRhiDebugHelp,\n runRhiDebugOperation,\n} from './rhi-debug/operations.js';\nexport {\n type AdmissionThresholds,\n type BenchmarkAdmissionReport,\n type BenchmarkMeasurement,\n type BenchmarkRecipe,\n type BenchmarkSample,\n createAdmissionReport,\n DEFAULT_ADMISSION_THRESHOLDS,\n runBenchmarkAdmission,\n summarizeBenchmarkSamples,\n} from './tools/benchmark/index.js';\nexport {\n bootstrapRealm,\n type RealmBootstrapInput,\n type RealmBootstrapResult,\n type RealmLifecycleAdapter,\n type RealmLifecycleHandle,\n} from './tools/bootstrap.js';\nexport { createServiceCache, type ServiceCache, type ServiceCacheEntry } from './tools/cache.js';\nexport {\n createServiceCapability,\n type ServiceAdmissionExpectation,\n type ServiceAdmissionRef,\n type ServiceCapability,\n} from './tools/capability.js';\nexport {\n type CarrierProvider,\n type CarrierProviderService,\n type CarrierProviderServiceOptions,\n createCarrierProvider,\n createCarrierProviderService,\n} from './tools/carrier-provider.js';\nexport {\n type CarrierRendezvous,\n type CarrierRendezvousOptions,\n createCarrierRendezvous,\n} from './tools/carrier-rendezvous.js';\nexport {\n describeTool,\n listTools,\n materializeToolCatalog,\n rebuildToolCatalog,\n} from './tools/catalog.js';\nexport { runGenericTool, runNamedTool } from './tools/cli-adapter.js';\nexport {\n createToolClient,\n type ToolClient,\n type ToolClientOptions,\n} from './tools/client.js';\nexport {\n createAuthorContribution,\n createBuildContribution,\n createDefaultContributions,\n} from './tools/contributions.js';\nexport { runLibraryTool } from './tools/library.js';\nexport {\n createCapabilityToken,\n createMigrationRecipe,\n createMigrationRoster,\n type MigrationCapabilityProbe,\n type MigrationOperation,\n type MigrationPath,\n type MigrationRecipe,\n type MigrationResolution,\n type MigrationResolutionResult,\n type MigrationRosterEntry,\n type MigrationTarget,\n probeMigrationTarget,\n resolveMigration,\n} from './tools/migration.js';\nexport {\n analyzePreviewArtifacts,\n type OfflineAnalysisRequest,\n type OfflineAnalysisResult,\n} from './tools/offline-analysis.js';\nexport {\n createDomainPreviewContributions,\n createOfflineAnalysisContribution,\n createPreviewContribution,\n createPreviewContributions,\n} from './tools/preview-contributions.js';\nexport {\n type PreviewCarrierRoute,\n type PreviewHostRequest,\n type PreviewHostResult,\n type PreviewHostRunner,\n runCarrierPreviewRoute,\n runPreviewHost,\n} from './tools/preview-host.js';\nexport { runPrivateTool } from './tools/private-executor.js';\nexport {\n createRealmCapabilityMatrix,\n createResourceProbe,\n type RealmCapability,\n type RealmCapabilityInput,\n type RealmCapabilityMatrix,\n type ResourceOwner,\n resolveRealmCapability,\n} from './tools/realms.js';\nexport { createDevkitToolRuntime, createPreviewToolRuntime } from './tools/runtime.js';\nexport {\n createServiceExecutor,\n type ServiceExecutor,\n type ServiceExecutorOptions,\n} from './tools/service.js';\nexport {\n type AuthenticatedLoopbackService,\n type AuthenticatedLoopbackServiceOptions,\n type AuthenticatedLoopbackTransport,\n type AuthenticatedLoopbackTransportOptions,\n createAuthenticatedLoopbackService,\n createAuthenticatedLoopbackTransport,\n type ServiceWireHandler,\n type ServiceWireRequest,\n} from './tools/service-transport.js';\nexport type {\n AssetAddOptions,\n AssetInspectOptions,\n BuildOptions,\n CommandEnvelope,\n CommandError,\n CommandResult,\n ForgeaXCommand,\n InitOptions,\n NewOptions,\n PluginInstallOptions,\n PluginUninstallOptions,\n ProjectCommandOptions,\n ProjectFacts,\n ShaderCheckOptions,\n} from './types.js';\n","export interface SampleStatistics {\n readonly count: number;\n readonly median: number;\n readonly p95: number;\n readonly max: number;\n}\n\nexport function calculateSampleStatistics(samples: readonly number[]): SampleStatistics {\n if (samples.length === 0) throw new RangeError('benchmark samples must not be empty');\n const sorted = [...samples].sort((left, right) => left - right);\n const medianIndex = (sorted.length - 1) / 2;\n const median = interpolate(sorted, medianIndex);\n const p95 = interpolate(sorted, Math.ceil(sorted.length * 0.95) - 1);\n const max = sorted[sorted.length - 1];\n if (max === undefined) throw new RangeError('benchmark samples must not be empty');\n return { count: sorted.length, median, p95, max };\n}\n\nfunction interpolate(values: readonly number[], index: number): number {\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n const lowerValue = values[lower];\n const upperValue = values[upper];\n if (lowerValue === undefined || upperValue === undefined) {\n throw new RangeError('benchmark percentile index is out of range');\n }\n return lower === upper ? lowerValue : lowerValue + (upperValue - lowerValue) * (index - lower);\n}\n","import { calculateSampleStatistics, type SampleStatistics } from './statistics.js';\n\nexport interface BenchmarkRecipe {\n readonly snapshotDigest: string;\n readonly backend: string;\n readonly viewport: readonly [number, number];\n readonly inputDigest: string;\n readonly frameCount: number;\n readonly rhiDebug: boolean;\n readonly profiler: boolean;\n readonly carrierRendezvous: boolean;\n readonly digest: string;\n}\n\nexport interface BenchmarkSample {\n readonly mode: 'private' | 'service';\n readonly phase: 'cold' | 'warm';\n readonly durationMs: number;\n readonly peakRssBytes: number;\n readonly exclusivePhasesMs: Readonly<Record<string, number>>;\n readonly rhiDebugOverheadMs: number;\n readonly carrierRendezvousMs: number;\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n readonly recipeDigest: string;\n}\n\nexport interface BenchmarkModeReport {\n readonly samples: number;\n readonly durationMs: SampleStatistics;\n readonly peakRssBytes: SampleStatistics;\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n readonly exclusivePhasesMs: Readonly<Record<string, SampleStatistics>>;\n}\n\nexport interface AdmissionThresholds {\n readonly sampleCountPerPhase: number;\n readonly medianImprovement: number;\n readonly p95Improvement: number;\n readonly maxRegression: number;\n readonly peakRssMultiplier: number;\n}\n\nexport const DEFAULT_ADMISSION_THRESHOLDS: AdmissionThresholds = {\n sampleCountPerPhase: 30,\n medianImprovement: 0.2,\n p95Improvement: 0.1,\n maxRegression: 0.1,\n peakRssMultiplier: 1.25,\n};\n\nexport interface BenchmarkAdmissionReport {\n readonly schema: 'forgeax.tool-service-admission.v1';\n readonly recipe: BenchmarkRecipe;\n readonly thresholds: AdmissionThresholds;\n readonly order: readonly BenchmarkSample['mode'][];\n readonly private: BenchmarkModeReport;\n readonly service: BenchmarkModeReport;\n readonly valid: boolean;\n readonly admitted: boolean;\n readonly reasons: readonly string[];\n}\n\nexport function summarizeBenchmarkSamples(\n samples: readonly BenchmarkSample[],\n): BenchmarkModeReport {\n if (samples.length === 0) {\n return {\n samples: 0,\n durationMs: { count: 0, median: 0, p95: 0, max: 0 },\n peakRssBytes: { count: 0, median: 0, p95: 0, max: 0 },\n cleanupPassed: false,\n evictionPassed: false,\n exclusivePhasesMs: {},\n };\n }\n const durations = samples.map((sample) => sample.durationMs);\n const rss = samples.map((sample) => sample.peakRssBytes);\n const phaseNames = [\n ...new Set(samples.flatMap((sample) => Object.keys(sample.exclusivePhasesMs))),\n ];\n const exclusivePhasesMs = Object.fromEntries(\n phaseNames.map((phase) => [\n phase,\n calculateSampleStatistics(samples.map((sample) => sample.exclusivePhasesMs[phase] ?? 0)),\n ]),\n );\n return {\n samples: samples.length,\n durationMs: calculateSampleStatistics(durations),\n peakRssBytes: calculateSampleStatistics(rss),\n cleanupPassed: samples.every((sample) => sample.cleanupPassed),\n evictionPassed: samples.every((sample) => sample.evictionPassed),\n exclusivePhasesMs,\n };\n}\n\nexport function createAdmissionReport(\n recipe: BenchmarkRecipe,\n samples: readonly BenchmarkSample[],\n thresholds: AdmissionThresholds = DEFAULT_ADMISSION_THRESHOLDS,\n): BenchmarkAdmissionReport {\n const privateSamples = samples.filter((sample) => sample.mode === 'private');\n const serviceSamples = samples.filter((sample) => sample.mode === 'service');\n const order = samples.map((sample) => sample.mode);\n const privateReport = summarizeBenchmarkSamples(privateSamples);\n const serviceReport = summarizeBenchmarkSamples(serviceSamples);\n const reasons: string[] = [];\n const expectedSamples = thresholds.sampleCountPerPhase * 2;\n const complete =\n privateSamples.length === expectedSamples && serviceSamples.length === expectedSamples;\n if (!complete) {\n reasons.push('sample count is incomplete');\n }\n if (samples.some((sample) => sample.recipeDigest !== recipe.digest)) {\n reasons.push('recipe identity drifted');\n }\n if (!privateReport.cleanupPassed || !serviceReport.cleanupPassed) reasons.push('cleanup failed');\n if (!privateReport.evictionPassed || !serviceReport.evictionPassed)\n reasons.push('eviction failed');\n if (order.some((mode, index) => index > 0 && mode === order[index - 1])) {\n reasons.push('private and service samples were not alternated');\n }\n const medianLimit = privateReport.durationMs.median * (1 - thresholds.medianImprovement);\n const p95Limit = privateReport.durationMs.p95 * (1 - thresholds.p95Improvement);\n const maxLimit = privateReport.durationMs.max * (1 + thresholds.maxRegression);\n const rssLimit = privateReport.peakRssBytes.median * thresholds.peakRssMultiplier;\n if (complete && serviceReport.durationMs.median > medianLimit)\n reasons.push('median improvement threshold missed');\n if (complete && serviceReport.durationMs.p95 > p95Limit)\n reasons.push('p95 improvement threshold missed');\n if (complete && serviceReport.durationMs.max > maxLimit)\n reasons.push('max regression threshold exceeded');\n if (complete && serviceReport.peakRssBytes.median > rssLimit)\n reasons.push('peak RSS threshold exceeded');\n return {\n schema: 'forgeax.tool-service-admission.v1',\n recipe,\n thresholds,\n order,\n private: privateReport,\n service: serviceReport,\n valid:\n complete &&\n !reasons.some((reason) =>\n [\n 'recipe identity drifted',\n 'cleanup failed',\n 'eviction failed',\n 'private and service samples were not alternated',\n ].includes(reason),\n ),\n admitted: reasons.length === 0,\n reasons,\n };\n}\n","import {\n type AdmissionThresholds,\n type BenchmarkAdmissionReport,\n type BenchmarkRecipe,\n type BenchmarkSample,\n createAdmissionReport,\n} from './report.js';\n\nexport interface BenchmarkMeasurement {\n readonly durationMs: number;\n readonly peakRssBytes: number;\n readonly exclusivePhasesMs?: Readonly<Record<string, number>>;\n readonly rhiDebugOverheadMs?: number;\n readonly carrierRendezvousMs?: number;\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n}\n\nexport interface BenchmarkHarnessOptions {\n readonly recipe: BenchmarkRecipe;\n readonly measure: (\n mode: BenchmarkSample['mode'],\n phase: BenchmarkSample['phase'],\n index: number,\n ) => Promise<BenchmarkMeasurement> | BenchmarkMeasurement;\n readonly thresholds?: AdmissionThresholds;\n}\n\nexport async function runBenchmarkAdmission(\n options: BenchmarkHarnessOptions,\n): Promise<BenchmarkAdmissionReport> {\n const sampleCount = options.thresholds?.sampleCountPerPhase ?? 30;\n const samples: BenchmarkSample[] = [];\n for (const phase of ['cold', 'warm'] as const) {\n for (let index = 0; index < sampleCount; index += 1) {\n for (const mode of ['private', 'service'] as const) {\n const measurement = await options.measure(mode, phase, index);\n samples.push({\n mode,\n phase,\n durationMs: measurement.durationMs,\n peakRssBytes: measurement.peakRssBytes,\n exclusivePhasesMs: measurement.exclusivePhasesMs ?? {},\n rhiDebugOverheadMs: measurement.rhiDebugOverheadMs ?? 0,\n carrierRendezvousMs: measurement.carrierRendezvousMs ?? 0,\n cleanupPassed: measurement.cleanupPassed,\n evictionPassed: measurement.evictionPassed,\n recipeDigest: options.recipe.digest,\n });\n }\n }\n }\n return createAdmissionReport(options.recipe, samples, options.thresholds);\n}\n","import type { Context } from '@forgeax/engine-plugin';\nimport {\n bootstrapCatalogLoader,\n type CatalogLoaderBootstrapValue,\n type GamePluginEntry,\n type PluginCatalog,\n type PluginRealm,\n projectPluginEntries,\n} from '@forgeax/engine-plugin/loader';\nimport {\n type RealmCapabilityMatrix,\n validateRealmBootstrapPayload,\n} from '@forgeax/engine-tool-runtime';\nimport {\n createProjectBootstrapPlan,\n type ProjectBootstrapPlan,\n} from '../host/project-bootstrap.js';\nimport {\n createResourceBootstrapPlan,\n type ResourceBootstrapPlan,\n} from '../host/resource-bootstrap.js';\nimport type { ProjectFacts } from '../types.js';\n\nexport interface PreviewBootstrapRoots {\n readonly project: ProjectBootstrapPlan;\n readonly resource: (guid: string) => ResourceBootstrapPlan;\n}\n\n/** Derives both physical roots without sharing project gameplay closure. */\nexport function createPreviewBootstrapRoots(facts: ProjectFacts): PreviewBootstrapRoots {\n return {\n project: createProjectBootstrapPlan(facts),\n resource: (guid) => createResourceBootstrapPlan(facts, guid),\n };\n}\n\nexport interface RealmBootstrapInput {\n readonly realm: PluginRealm;\n readonly catalog: PluginCatalog;\n readonly catalogDigest: string;\n readonly supportedRealms: readonly PluginRealm[];\n readonly entries: readonly GamePluginEntry[];\n readonly payload?: unknown;\n readonly lifecycle?: RealmLifecycleAdapter;\n}\n\nexport interface RealmLifecycleHandle {\n readonly stop: () => Promise<void>;\n}\n\nexport interface RealmLifecycleAdapter {\n readonly start: (input: {\n readonly realm: PluginRealm;\n readonly entries: readonly ReturnType<typeof projectPluginEntries>[number][];\n readonly catalog: PluginCatalog;\n readonly catalogDigest: string;\n }) => Promise<RealmLifecycleHandle>;\n}\n\nexport type RealmBootstrapResult =\n | {\n readonly ok: true;\n readonly value: {\n readonly realm: PluginRealm;\n readonly catalogDigest: string;\n readonly entries: readonly ReturnType<typeof projectPluginEntries>[number][];\n readonly loader?: CatalogLoaderBootstrapValue;\n readonly lifecycle?: RealmLifecycleHandle;\n };\n }\n | { readonly ok: false; readonly error: unknown };\n\n/** Bootstrap one declared realm from the same static Catalog and clone-safe input. */\nexport async function bootstrapRealm(\n ctx: Context | undefined,\n input: RealmBootstrapInput,\n): Promise<RealmBootstrapResult> {\n const cloneSafe = validateRealmBootstrapPayload(input.payload);\n if (!cloneSafe.ok) return cloneSafe;\n if (!input.supportedRealms.includes(input.realm)) {\n return {\n ok: false,\n error: {\n code: 'realm-capability-unavailable',\n realm: input.realm,\n supportedRealms: input.supportedRealms,\n },\n };\n }\n const entries = projectPluginEntries(input.entries, input.realm, input.realm);\n if (input.realm === 'build') {\n if (input.lifecycle === undefined) {\n return {\n ok: false,\n error: {\n code: 'realm-lifecycle-adapter-missing',\n realm: input.realm,\n hint: 'Inject a build lifecycle adapter that owns execution and stop cleanup.',\n },\n };\n }\n const lifecycle = await input.lifecycle.start({\n realm: input.realm,\n entries,\n catalog: input.catalog,\n catalogDigest: input.catalogDigest,\n });\n return {\n ok: true,\n value: { realm: input.realm, catalogDigest: input.catalogDigest, entries, lifecycle },\n };\n }\n if (ctx === undefined) {\n return {\n ok: false,\n error: { code: 'realm-context-missing', realm: input.realm },\n };\n }\n const loaded = await bootstrapCatalogLoader(ctx, input.catalog, input.realm, {\n catalogDigest: input.catalogDigest,\n supportedRealms: input.supportedRealms,\n });\n if (!loaded.ok) return loaded;\n return {\n ok: true,\n value: {\n realm: input.realm,\n catalogDigest: input.catalogDigest,\n entries,\n loader: loaded.value,\n },\n };\n}\n\nexport function assertRealmCapability(matrix: RealmCapabilityMatrix, realm: PluginRealm): void {\n const capability = matrix.realms[realm];\n if (!capability.supported) {\n throw new Error(`realm-capability-unavailable:${realm}`);\n }\n}\n","import type { JsonValue } from '@forgeax/engine-tool-runtime';\n\nexport interface ServiceCacheEntry {\n readonly artifactDigest: string;\n readonly value?: JsonValue;\n}\n\nexport interface ServiceCache {\n readonly get: (key: string) => ServiceCacheEntry | undefined;\n readonly set: (key: string, entry: ServiceCacheEntry) => void;\n readonly evict: (key: string) => boolean;\n readonly clear: () => void;\n readonly size: () => number;\n}\n\nexport function createServiceCache(): ServiceCache {\n const entries = new Map<string, ServiceCacheEntry>();\n return {\n get: (key) => entries.get(key),\n set: (key, entry) => entries.set(key, entry),\n evict: (key) => entries.delete(key),\n clear: () => entries.clear(),\n size: () => entries.size,\n };\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from 'node:http';\nimport type {\n CarrierLeaseRequest,\n CarrierOffer,\n CarrierResult,\n CarrierState,\n CarrierStateMachine,\n ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface CarrierProvider {\n readonly offer: CarrierOffer;\n readonly accept: (request: CarrierLeaseRequest) => CarrierResult<{ readonly leaseId: string }>;\n readonly started: (leaseId: string) => CarrierResult<CarrierState>;\n readonly exit: (leaseId: string) => CarrierResult<CarrierState>;\n}\n\nexport interface CarrierProviderServiceOptions {\n readonly machine: CarrierStateMachine;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly execute: (\n request: CarrierExecutionRequest,\n ) => Promise<ToolTerminal<unknown>> | ToolTerminal<unknown>;\n readonly host?: '127.0.0.1' | 'localhost';\n}\n\n/** Local structural view keeps DevKit source-compatible with an unbuilt runtime dist. */\nexport interface CarrierExecutionRequest {\n readonly leaseId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly args: unknown;\n}\n\nexport interface CarrierProviderService {\n readonly endpoint: string;\n readonly offer: CarrierOffer;\n readonly close: () => Promise<void>;\n}\n\ntype WireResult =\n | { readonly ok: true; readonly value: unknown; readonly state: string }\n | { readonly ok: false; readonly error: unknown };\n\nfunction errorResult(\n code: string,\n expected: string,\n hint: string,\n detail: Record<string, unknown> = {},\n): WireResult {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nasync function readBody(request: IncomingMessage): Promise<Record<string, unknown>> {\n const chunks: Buffer[] = [];\n for await (const chunk of request) chunks.push(Buffer.from(chunk));\n const value: unknown = JSON.parse(Buffer.concat(chunks).toString('utf8'));\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n throw new Error('carrier request must be an object');\n return value as Record<string, unknown>;\n}\n\nfunction reply(response: ServerResponse, status: number, payload: WireResult): void {\n response.statusCode = status;\n response.setHeader('content-type', 'application/json');\n response.end(JSON.stringify(payload));\n}\n\nexport async function createCarrierProviderService(\n options: CarrierProviderServiceOptions,\n): Promise<CarrierProviderService> {\n const host = options.host ?? '127.0.0.1';\n const bearerToken = options.machine.offer.bearerToken;\n const server = createServer(async (request, response) => {\n if (request.method !== 'POST' || !request.url?.startsWith('/carrier/')) {\n reply(\n response,\n 404,\n errorResult(\n 'carrier-provider-exit',\n 'a carrier protocol route',\n 'Request a fresh visible offer from the provider.',\n ),\n );\n return;\n }\n if (request.headers.authorization !== `Bearer ${bearerToken}`) {\n reply(\n response,\n 401,\n errorResult(\n 'carrier-token-invalid',\n 'the ephemeral bearer token',\n 'Request a fresh authenticated offer; never guess or persist bearer tokens.',\n ),\n );\n return;\n }\n try {\n const body = await readBody(request);\n const route = request.url.slice('/carrier/'.length);\n if (route === 'lease') {\n const result = options.machine.lease({\n consumerId: String(body.consumerId ?? ''),\n bearerToken,\n now: Number(body.now),\n descriptorDigest:\n typeof body.descriptorDigest === 'string' ? body.descriptorDigest : undefined,\n recipeDigest: typeof body.recipeDigest === 'string' ? body.recipeDigest : undefined,\n } as CarrierLeaseRequest);\n reply(response, result.ok ? 200 : 409, result.ok ? result : result);\n return;\n }\n const leaseId = typeof body.leaseId === 'string' ? body.leaseId : '';\n if (route === 'start') {\n const result = options.machine.started(leaseId);\n reply(response, result.ok ? 200 : 409, result.ok ? result : result);\n return;\n }\n if (route === 'exit') {\n const result = options.machine.exit(leaseId);\n reply(response, result.ok ? 200 : 409, result.ok ? result : result);\n return;\n }\n if (route === 'execute') {\n const snapshot = options.machine.snapshot();\n if (snapshot.leaseId !== leaseId || snapshot.state !== 'started') {\n reply(\n response,\n 409,\n errorResult(\n snapshot.state === 'exited' ? 'carrier-exited' : 'carrier-lease-required',\n 'a started carrier lease',\n 'Do not fallback after started; report the structured terminal error and offer a new carrier.',\n ),\n );\n return;\n }\n if (body.descriptorDigest !== options.descriptorDigest) {\n reply(\n response,\n 409,\n errorResult(\n 'carrier-descriptor-mismatch',\n 'the offered descriptor digest',\n 'Rebuild the offer from the current descriptor before retrying.',\n ),\n );\n return;\n }\n if (body.recipeDigest !== options.recipeDigest) {\n reply(\n response,\n 409,\n errorResult(\n 'carrier-recipe-mismatch',\n 'the offered recipe digest',\n 'Serialize a fresh snapshot and request a new carrier before retrying.',\n ),\n );\n return;\n }\n const terminal = await options.execute({\n leaseId,\n descriptorDigest: options.descriptorDigest,\n recipeDigest: options.recipeDigest,\n args: body.args,\n });\n reply(response, 200, { ok: true, value: terminal, state: 'started' });\n return;\n }\n reply(\n response,\n 404,\n errorResult(\n 'carrier-provider-exit',\n 'a carrier protocol route',\n 'Request a fresh visible offer from the provider.',\n ),\n );\n } catch (cause) {\n reply(\n response,\n 400,\n errorResult(\n 'carrier-provider-exit',\n 'a valid carrier request',\n 'Serialize POD only and retry from the last safe snapshot.',\n { cause: cause instanceof Error ? cause.message : String(cause) },\n ),\n );\n }\n });\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error) => {\n server.off('listening', onListening);\n reject(error);\n };\n const onListening = () => {\n server.off('error', onError);\n resolve();\n };\n server.once('error', onError);\n server.once('listening', onListening);\n server.listen(0, host);\n });\n const address = server.address();\n if (address === null || typeof address === 'string')\n throw new Error('carrier provider did not expose a loopback port');\n const endpoint = `http://${host}:${address.port}/carrier`;\n let closed = false;\n return {\n endpoint,\n offer: options.machine.offer,\n async close() {\n if (closed) return;\n closed = true;\n await new Promise<void>((resolve, reject) =>\n server.close((error) => (error === undefined ? resolve() : reject(error))),\n );\n },\n };\n}\n\nexport function createCarrierProvider(machine: CarrierStateMachine): CarrierProvider {\n return {\n offer: machine.offer,\n accept(request) {\n const result = machine.lease(request);\n if (!result.ok) return result;\n return { ok: true, value: { leaseId: result.value.leaseId }, state: result.state };\n },\n started: machine.started,\n exit: machine.exit,\n };\n}\n","import {\n type CarrierOffer,\n type CarrierStateMachine,\n createCarrierStateMachine,\n} from '@forgeax/engine-tool-runtime';\n\nexport { type CarrierProvider, createCarrierProvider } from './carrier-provider.js';\n\nexport interface CarrierRendezvousOptions {\n readonly presentation: 'hidden' | 'visible';\n readonly projectId: string;\n readonly consumerId: string;\n readonly now: number;\n readonly endpoint?: string;\n readonly ttlMs?: number;\n}\n\nexport interface CarrierRendezvous extends CarrierStateMachine {\n readonly lookup: () => CarrierOffer | undefined;\n readonly lookupCount: number;\n}\n\nexport function createCarrierRendezvous(options: CarrierRendezvousOptions): CarrierRendezvous {\n const machine = createCarrierStateMachine({\n projectId: options.projectId,\n consumerId: options.consumerId,\n endpoint: options.endpoint ?? 'http://127.0.0.1:5740/carrier',\n now: options.now,\n ttlMs: options.ttlMs ?? 30_000,\n });\n let lookupCount = 0;\n const lookup = (): CarrierOffer | undefined => {\n if (options.presentation !== 'visible' || machine.snapshot().state !== 'offered') return;\n lookupCount += 1;\n return machine.offer;\n };\n return {\n ...machine,\n lookup,\n get lookupCount() {\n return lookupCount;\n },\n };\n}\n","import { describeResourcePreviewFailure } from '@forgeax/engine-preview';\nimport {\n capabilityUnavailableError,\n type JsonValue,\n type ToolRuntime,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport function decorateResourcePreviewTerminal<TResult>(\n terminal: ToolTerminal<TResult>,\n): ToolTerminal<TResult> {\n if (terminal.outcome === 'succeeded') return terminal;\n const recovery = describeResourcePreviewFailure(terminal.failure);\n if (recovery === undefined) return terminal;\n if (terminal.failure.code !== 'tool-domain-failed') return terminal;\n return {\n ...terminal,\n failure: {\n ...terminal.failure,\n detail: {\n ...terminal.failure.detail,\n ...(recovery.suggestedOperation === undefined\n ? {}\n : { suggestedOperation: recovery.suggestedOperation }),\n recovery: recovery.actions,\n },\n },\n };\n}\n\nfunction missingTool(id: string): ToolTerminal<never> {\n return {\n outcome: 'failed',\n failure: capabilityUnavailableError(`tool:${id}`, 'build'),\n artifacts: [],\n };\n}\n\nexport function runNamedTool(\n runtime: ToolRuntime,\n id: string,\n args: unknown,\n): Promise<ToolTerminal<unknown>> {\n const contribution = runtime.get(id);\n if (contribution === undefined) return Promise.resolve(missingTool(id));\n return runtime.run(contribution, args).terminal.then(decorateResourcePreviewTerminal);\n}\n\nexport function runGenericTool(\n runtime: ToolRuntime,\n id: string,\n encodedArgs: string,\n): Promise<ToolTerminal<unknown>> {\n let args: JsonValue;\n try {\n args = JSON.parse(encodedArgs) as JsonValue;\n } catch {\n return Promise.resolve({\n outcome: 'failed',\n failure: {\n code: 'tool-invalid-args',\n expected: 'generic CLI arguments to be valid JSON',\n hint: 'Encode one JSON value that conforms to the descriptor argsSchema.',\n detail: { message: 'Invalid JSON', value: null },\n },\n artifacts: [],\n });\n }\n return runNamedTool(runtime, id, args);\n}\n","import {\n createToolRuntime,\n type ToolContribution,\n type ToolRunOptions,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\nimport {\n createProjectToolCatalogAuthority,\n createRealmDispatch,\n describeTool,\n listTools,\n loadToolCatalog,\n type ToolCatalogEntry,\n type ToolRealmOwner,\n} from './catalog.js';\nimport { decorateResourcePreviewTerminal } from './cli-adapter.js';\nimport { retiredPreviewTool } from './preview-migration.js';\nimport type { ProjectToolBinding, ProjectToolDiscoveryOptions } from './project-tools.js';\n\nexport interface ToolClientOptions extends ProjectToolDiscoveryOptions {\n readonly projectRoot: string;\n /** Optional physical realm owners used by a host/carrier integration. */\n readonly realmOwners?: readonly ToolRealmOwner[];\n /** Injectable builtins for physical host tests and alternate Engine adapters. */\n readonly baseContributions?: readonly ToolContribution[];\n readonly projectDiscovery?: (projectRoot: string) => Promise<readonly ProjectToolBinding[]>;\n}\n\nexport interface ToolClient {\n readonly list: () => readonly ToolCatalogEntry[];\n readonly describe: (id: string) => ToolCatalogEntry | undefined;\n readonly run: <TResult = unknown>(\n id: string,\n args: unknown,\n options?: ToolRunOptions,\n ) => Promise<ToolTerminal<TResult>>;\n}\n\nfunction missingTool(id: string): ToolTerminal<never> {\n return {\n outcome: 'failed',\n failure: {\n code: 'tool-capability-unavailable',\n expected: `tool ${id} to exist in the project-derived catalog`,\n hint: 'Run tool list and choose one of the discovered operation ids.',\n detail: { capability: `tool:${id}`, realm: 'build' },\n },\n artifacts: [],\n };\n}\n\nexport async function createToolClient(options: ToolClientOptions): Promise<ToolClient> {\n const projectDiscovery = options.projectDiscovery;\n const runProjectTool =\n projectDiscovery === undefined\n ? (await import('./project-tools.js')).runProjectTool\n : undefined;\n const builtins =\n options.baseContributions ??\n (await import('./contributions.js')).createDefaultContributions(options.projectRoot);\n const project =\n projectDiscovery === undefined\n ? await (await import('./project-tools.js')).discoverProjectTools(\n options.projectRoot,\n options,\n )\n : await projectDiscovery(options.projectRoot);\n const contributions = [...builtins, ...project.map(({ contribution }) => contribution)];\n const runtime =\n options.baseContributions === undefined\n ? (await import('./runtime.js')).createDevkitToolRuntime(contributions as readonly unknown[])\n : createToolRuntime(contributions as readonly unknown[]);\n const realmDispatch =\n options.realmOwners === undefined\n ? undefined\n : createRealmDispatch(contributions as readonly ToolContribution[], options.realmOwners);\n const bindingById = new Map<string, ProjectToolBinding>(\n project.map((binding) => [binding.contribution.descriptor.id, binding]),\n );\n const descriptors = runtime.list();\n const loaded = await loadToolCatalog(\n createProjectToolCatalogAuthority(options.projectRoot, descriptors),\n descriptors,\n );\n if (!loaded.ok) throw loaded.error;\n return {\n list: () => listTools(loaded.value),\n describe: (id) => describeTool(loaded.value, id),\n async run<TResult = unknown>(id: string, args: unknown, runOptions: ToolRunOptions = {}) {\n if (id === 'preview.run') return retiredPreviewTool() as ToolTerminal<TResult>;\n const contribution = runtime.get(id);\n if (contribution === undefined) return missingTool(id) as ToolTerminal<TResult>;\n const binding = bindingById.get(id);\n const terminal =\n binding !== undefined && runProjectTool !== undefined\n ? await runProjectTool(binding, args, runOptions)\n : realmDispatch === undefined\n ? await runtime.run(contribution, args, runOptions).terminal\n : await realmDispatch.run(id, args, runOptions);\n return decorateResourcePreviewTerminal(terminal as ToolTerminal<TResult>);\n },\n };\n}\n","import {\n createToolRuntime,\n type ToolContribution,\n type ToolRunOptions,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport function runLibraryTool<TArgs, TResult>(\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options?: ToolRunOptions,\n): Promise<ToolTerminal<TResult>> {\n return createToolRuntime([contribution]).run(contribution, args, options).terminal;\n}\n","import type { MigrationCapabilityProbe, MigrationOperation } from '@forgeax/engine-tool-runtime';\nimport {\n type ArtifactRef,\n capabilityUnavailableError,\n createServiceCapability,\n type ServiceCapability,\n type ToolEvidenceKind,\n type ToolRealm,\n} from '@forgeax/engine-tool-runtime';\n\nexport {\n createCapabilityToken,\n createMigrationRecipe,\n type MigrationCapabilityProbe,\n type MigrationOperation,\n type MigrationRecipe,\n probeMigrationTarget,\n} from '@forgeax/engine-tool-runtime';\n\nexport type MigrationPath = 'private' | 'service';\n\nexport interface MigrationTarget extends MigrationCapabilityProbe {}\n\nexport interface MigrationRosterEntry {\n readonly operation: MigrationOperation;\n readonly owner: string;\n readonly realm: ToolRealm;\n readonly artifacts: readonly MigrationEvidence[];\n readonly benefit: string;\n readonly fallback: 'private';\n}\n\nexport interface MigrationEvidence {\n readonly owner: string;\n readonly source: 'M3';\n readonly ref: ArtifactRef;\n}\n\nexport interface MigrationResolution {\n readonly path: MigrationPath;\n readonly operation: MigrationOperation;\n readonly owner: string;\n readonly artifacts: readonly MigrationEvidence[];\n readonly service: ServiceCapability;\n}\n\nexport type MigrationResolutionResult =\n | { readonly ok: true; readonly value: MigrationResolution }\n | { readonly ok: false; readonly error: ReturnType<typeof capabilityUnavailableError> };\n\nconst roster: readonly MigrationRosterEntry[] = [\n {\n operation: 'project.preview',\n owner: 'devkit/preview-host',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'reuse the real WebGPU hidden preview recipe',\n fallback: 'private',\n },\n {\n operation: 'material.preview',\n owner: 'engine-preview/material',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'preview one material subject through the canonical lit rig',\n fallback: 'private',\n },\n {\n operation: 'mesh.preview',\n owner: 'engine-preview/mesh',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'preview one mesh subject with every submesh and AABB evidence',\n fallback: 'private',\n },\n {\n operation: 'vfx.preview',\n owner: 'engine-preview/vfx',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'preview one bounded VFX timeline with compute evidence',\n fallback: 'private',\n },\n {\n operation: 'texture.preview',\n owner: 'engine-preview/texture',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'preview one texture on the aspect-preserving unlit quad',\n fallback: 'private',\n },\n];\n\nfunction previewArtifacts(): readonly MigrationEvidence[] {\n return [\n {\n owner: 'preview-tool-proof',\n source: 'M3',\n ref: {\n kind: 'rhi-tape',\n digest: 'sha256:e62a302dd29e302e1d0928306fe9c90c47ee336aa2e9e35fdc1d75586ae0018d',\n uri: 'repo:apps/preview/__tests__/tool-proof.recipe.integration.test.ts',\n },\n },\n {\n owner: 'preview-tool-proof',\n source: 'M3',\n ref: {\n kind: 'profile-capture',\n digest: 'sha256:11ec9024e1ea08b38f0901db272847ac402d2dce0c757efe744315608e889c5c',\n uri: 'repo:packages/profiler/src/__tests__/fixtures/profile-capture/model-input.json',\n },\n },\n ];\n}\n\nfunction validEvidence(entry: MigrationRosterEntry): boolean {\n return (\n entry.owner.length > 0 &&\n entry.artifacts.length > 0 &&\n entry.artifacts.every(\n ({ owner, source, ref }) =>\n owner.length > 0 &&\n source === 'M3' &&\n /^sha256:[0-9a-f]{64}$/.test(ref.digest) &&\n typeof ref.uri === 'string' &&\n ref.uri.startsWith('repo:') &&\n isSupportedEvidenceKind(ref.kind),\n )\n );\n}\n\nfunction isSupportedEvidenceKind(kind: ArtifactRef['kind']): kind is ToolEvidenceKind {\n return kind === 'rhi-tape' || kind === 'profile-capture' || kind === 'png';\n}\n\nexport function createMigrationRoster(): readonly MigrationRosterEntry[] {\n return roster.filter(validEvidence).map((entry) => ({\n ...entry,\n artifacts: entry.artifacts.map((artifact) => ({ ...artifact, ref: { ...artifact.ref } })),\n }));\n}\n\nexport function resolveMigration(\n entries: readonly MigrationRosterEntry[],\n operation: MigrationOperation,\n target: MigrationTarget,\n): MigrationResolutionResult {\n const entry = entries.find((candidate) => candidate.operation === operation);\n if (entry === undefined || !validEvidence(entry)) {\n return {\n ok: false,\n error: capabilityUnavailableError(`migration:${operation}`, target.realm),\n };\n }\n if (entry.realm !== target.realm || target.catalogDigest.length === 0) {\n return { ok: false, error: capabilityUnavailableError(`migration:${operation}`, target.realm) };\n }\n if (entry.realm === 'host' && target.rhiBackend !== 'webgpu') {\n return { ok: false, error: capabilityUnavailableError(`rhi:${operation}`, target.realm) };\n }\n const evidenceKinds = entry.artifacts.map(({ ref }) => ref.kind).filter(isSupportedEvidenceKind);\n if (!evidenceKinds.every((kind) => target.evidence.includes(kind))) {\n return { ok: false, error: capabilityUnavailableError(`evidence:${operation}`, target.realm) };\n }\n const service: ServiceCapability = createServiceCapability(undefined, {\n toolId: operation,\n descriptorDigest: entry.artifacts[0]?.ref.digest ?? '',\n recipeDigest: entry.artifacts[0]?.ref.digest ?? '',\n workloadClass: `migration:${operation}`,\n codeDigest: target.catalogDigest,\n browserVersion: 'unavailable',\n backend: 'webgpu',\n });\n return {\n ok: true,\n value: {\n path: service.available ? 'service' : 'private',\n operation,\n owner: entry.owner,\n artifacts: entry.artifacts.map((artifact) => ({ ...artifact, ref: { ...artifact.ref } })),\n service,\n },\n };\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, mkdtemp, rename, rm, writeFile } from 'node:fs/promises';\nimport { type AddressInfo, createServer as createTcpServer } from 'node:net';\nimport { join, relative, sep } from 'node:path';\nimport type {\n ToolPreviewCaptureResult,\n ToolPreviewRecipe,\n ToolPreviewResourceRequest,\n} from '@forgeax/engine-app';\nimport { createResourcePreviewReport, type ResourcePreviewReport } from '@forgeax/engine-preview';\nimport {\n createPreviewArtifactManifest,\n type JsonValue,\n type PreviewArtifactManifestEntry,\n type SnapshotRef,\n type ToolDomainFailure,\n validatePreviewArtifactManifest,\n} from '@forgeax/engine-tool-runtime';\nimport { type Browser, chromium, type Page } from 'playwright';\nimport { createServer, type ViteDevServer } from 'vite';\nimport type { BootstrapRoot } from '../host/base-host.js';\nimport { createViteConfig } from '../host.js';\nimport { readProjectFacts } from '../project.js';\nimport type { PreviewHostResult } from './preview-host.js';\n\nexport type BrowserHostResult =\n | { readonly ok: true; readonly value: PreviewHostResult }\n | { readonly ok: false; readonly error: ToolDomainFailure };\n\nfunction transportCause(cause: unknown): JsonValue {\n if (cause instanceof Error) {\n return {\n name: cause.name,\n message: cause.message,\n ...(cause.stack === undefined ? {} : { stack: cause.stack }),\n };\n }\n if (cause === undefined) return 'undefined';\n try {\n return JSON.parse(JSON.stringify(cause)) as JsonValue;\n } catch {\n return String(cause);\n }\n}\n\nfunction dataUriBytes(uri: string): Uint8Array {\n const separator = uri.indexOf(',');\n if (separator < 0) throw new TypeError('preview artifact must be a data URI before publication');\n return Buffer.from(uri.slice(separator + 1), 'base64');\n}\n\nfunction projectUri(projectRoot: string, path: string): string {\n return relative(projectRoot, path).split(sep).join('/');\n}\n\nexport interface ResourcePreviewReportInput {\n readonly snapshot: SnapshotRef;\n readonly subject: ResourcePreviewReport['subject'];\n readonly presentation: ResourcePreviewReport['presentation'];\n readonly oracle: ResourcePreviewReport['oracle'];\n}\n\nexport interface BrowserHostOptions {\n readonly publish?: boolean;\n}\n\n/** @internal Vite treats port 0 as its default 5173, not as an OS-assigned port. */\nexport async function allocateLoopbackPort(): Promise<number> {\n const probe = createTcpServer();\n try {\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error): void => {\n probe.off('listening', onListening);\n reject(error);\n };\n const onListening = (): void => {\n probe.off('error', onError);\n resolve();\n };\n probe.once('error', onError);\n probe.once('listening', onListening);\n probe.listen(0, '127.0.0.1');\n });\n const address = probe.address();\n if (address === null || typeof address === 'string') {\n throw new Error('loopback port probe did not expose a TCP address');\n }\n return address.port;\n } finally {\n if (probe.listening) {\n await new Promise<void>((resolve) => probe.close(() => resolve()));\n }\n }\n}\n\nfunction sha256(bytes: Uint8Array): string {\n return `sha256:${createHash('sha256').update(bytes).digest('hex')}`;\n}\n\nfunction artifactRef(artifact: PreviewArtifactManifestEntry) {\n const kind =\n artifact.kind === 'report' || artifact.kind === 'contact-sheet'\n ? ('tool-result' as const)\n : artifact.kind;\n return {\n kind,\n digest: artifact.digest,\n uri: artifact.uri,\n mediaType: artifact.mediaType,\n sizeBytes: artifact.byteLength,\n };\n}\n\nexport async function publishPreviewArtifacts(\n projectRoot: string,\n runId: string,\n result: PreviewHostResult,\n reportInput?: ResourcePreviewReportInput,\n): Promise<PreviewHostResult> {\n if (result.manifest.identity.runId !== runId) {\n throw new Error(\n `preview artifact run identity mismatch: manifest=${result.manifest.identity.runId} requested=${runId}`,\n );\n }\n const runsRoot = join(projectRoot, '.forgeax', 'tool-runs');\n await mkdir(runsRoot, { recursive: true });\n const directoryName = runId.replace(/[^a-zA-Z0-9._-]/g, '_');\n const published = join(runsRoot, directoryName);\n const finalPaths = {\n tapeJson: join(published, 'rhi-tape.json'),\n tapeBlob: join(published, 'rhi-tape.bin'),\n capturePng: join(published, 'capture.png'),\n freshReplayPng: join(published, 'fresh-replay.png'),\n profile: join(published, 'profile.json'),\n manifest: join(published, 'manifest.json'),\n report: join(published, 'report.json'),\n };\n const tapeJson = dataUriBytes(result.tape.jsonUri);\n const tapeBlob = dataUriBytes(result.tape.blobUri);\n const capturePng = dataUriBytes(result.capturePng.uri);\n const freshReplayPng = dataUriBytes(result.png.uri);\n const profile = dataUriBytes(result.profile.uri);\n const bytesByRole = {\n 'rhi-tape': tapeJson,\n capture: capturePng,\n 'fresh-replay': freshReplayPng,\n 'profile-capture': profile,\n } as const;\n const uriByRole = {\n 'rhi-tape': projectUri(projectRoot, finalPaths.tapeJson),\n capture: projectUri(projectRoot, finalPaths.capturePng),\n 'fresh-replay': projectUri(projectRoot, finalPaths.freshReplayPng),\n 'profile-capture': projectUri(projectRoot, finalPaths.profile),\n } as const;\n const mediaTypeByRole = {\n 'rhi-tape': 'application/vnd.forgeax.rhi-tape+json',\n capture: 'image/png',\n 'fresh-replay': 'image/png',\n 'profile-capture': 'application/vnd.forgeax.profile+json',\n } as const;\n const requiredRoles = ['rhi-tape', 'capture', 'fresh-replay', 'profile-capture'] as const;\n const nonReportArtifacts = result.manifest.artifacts\n .filter((artifact) => artifact.role !== 'report')\n .map((artifact) => {\n if (!(artifact.role in bytesByRole)) {\n return artifact;\n }\n const role = artifact.role as keyof typeof bytesByRole;\n const bytes = bytesByRole[role];\n const digest = sha256(bytes);\n if (artifact.digest !== digest) {\n throw new Error(`preview artifact digest mismatch for ${artifact.role}`);\n }\n return {\n ...artifact,\n uri: uriByRole[role],\n digest,\n byteLength: bytes.byteLength,\n mediaType: mediaTypeByRole[role],\n };\n });\n if (\n requiredRoles.some((role) => !nonReportArtifacts.some((artifact) => artifact.role === role))\n ) {\n throw new Error(\n 'preview publication is missing capture, fresh-replay, tape, or profile artifact',\n );\n }\n let report: ResourcePreviewReport | undefined;\n let reportBytes: Uint8Array | undefined;\n if (reportInput !== undefined) {\n if (reportInput.snapshot.digest !== result.manifest.identity.snapshotDigest) {\n throw new Error('preview report snapshot identity does not match the artifact manifest');\n }\n report = createResourcePreviewReport({\n runId,\n snapshot: reportInput.snapshot,\n subject: reportInput.subject,\n presentation: reportInput.presentation,\n oracle: reportInput.oracle,\n artifacts: nonReportArtifacts,\n });\n reportBytes = new TextEncoder().encode(JSON.stringify(report));\n }\n const reportArtifact: PreviewArtifactManifestEntry | undefined =\n reportBytes === undefined\n ? undefined\n : {\n owner: 'resource-preview',\n kind: 'report',\n role: 'report',\n uri: projectUri(projectRoot, finalPaths.report),\n digest: sha256(reportBytes),\n byteLength: reportBytes.byteLength,\n mediaType: 'application/vnd.forgeax.resource-preview+json',\n derivedFrom: nonReportArtifacts.map((artifact) => artifact.digest),\n };\n const manifest = createPreviewArtifactManifest({\n ...result.manifest,\n artifacts:\n reportArtifact === undefined ? nonReportArtifacts : [reportArtifact, ...nonReportArtifacts],\n });\n const validated = validatePreviewArtifactManifest(\n manifest,\n reportArtifact === undefined ? requiredRoles : ['report', ...requiredRoles],\n );\n if (!validated.ok) throw new Error(JSON.stringify(validated.error.detail));\n const staging = await mkdtemp(join(runsRoot, '.staging-'));\n const paths = {\n tapeJson: join(staging, 'rhi-tape.json'),\n tapeBlob: join(staging, 'rhi-tape.bin'),\n capturePng: join(staging, 'capture.png'),\n freshReplayPng: join(staging, 'fresh-replay.png'),\n profile: join(staging, 'profile.json'),\n manifest: join(staging, 'manifest.json'),\n report: join(staging, 'report.json'),\n };\n try {\n await Promise.all([\n writeFile(paths.tapeJson, tapeJson),\n writeFile(paths.tapeBlob, tapeBlob),\n writeFile(paths.capturePng, capturePng),\n writeFile(paths.freshReplayPng, freshReplayPng),\n writeFile(paths.profile, profile),\n ...(reportBytes === undefined ? [] : [writeFile(paths.report, reportBytes)]),\n ]);\n await writeFile(paths.manifest, `${JSON.stringify(manifest, null, 2)}\\n`);\n await rename(staging, published);\n } catch (cause) {\n await rm(staging, { recursive: true, force: true });\n throw cause;\n }\n return {\n ...result,\n tape: {\n ...result.tape,\n jsonUri: projectUri(projectRoot, finalPaths.tapeJson),\n blobUri: projectUri(projectRoot, finalPaths.tapeBlob),\n },\n profile: { ...result.profile, uri: projectUri(projectRoot, finalPaths.profile) },\n capturePng: { ...result.capturePng, uri: projectUri(projectRoot, finalPaths.capturePng) },\n png: { ...result.png, uri: projectUri(projectRoot, finalPaths.freshReplayPng) },\n manifest,\n artifacts: manifest.artifacts.map(artifactRef),\n };\n}\n\nfunction browserFailure(\n phase: string,\n cause: unknown,\n pageErrors: readonly string[] = [],\n): BrowserHostResult {\n return {\n ok: false,\n error: {\n code: 'tool-preview-browser-host-failed',\n expected: 'a real Chromium page, project bootstrap, WebGPU device, and bounded preview run',\n hint: 'Inspect the Browser Host phase and repair the project or local WebGPU capability.',\n detail: {\n phase,\n cause: transportCause(cause),\n pageErrors,\n },\n },\n };\n}\n\nexport async function runBrowserPreviewHost(\n projectRoot: string,\n recipe: ToolPreviewRecipe,\n snapshot: SnapshotRef,\n runId: string,\n signal: AbortSignal,\n bootstrapRoot: BootstrapRoot = 'project-bootstrap',\n resource?: ToolPreviewResourceRequest,\n options: BrowserHostOptions = {},\n): Promise<BrowserHostResult> {\n const facts = await readProjectFacts(projectRoot);\n if (!facts.ok)\n return { ok: false, error: { ...facts.error, detail: facts.error.detail as never } };\n const config = await createViteConfig(facts.value, 'serve', '/', { bootstrapRoot });\n // A Browser Host is a disposable Vite realm. A shared cache lets adjacent\n // coverage groups observe a partially-written optimized dependency graph.\n // Keep the cache inside the project lifecycle and remove it with the Host.\n const cacheDir = await mkdtemp(join(facts.value.root, '.forgeax', '.browser-host-vite-'));\n let server: ViteDevServer;\n try {\n const port = await allocateLoopbackPort();\n server = await createServer({\n ...config,\n cacheDir,\n logLevel: 'silent',\n optimizeDeps: {\n ...config.optimizeDeps,\n // Tool runs must observe the current workspace build, even when a\n // persistent runner retains Vite's optimized-dependency cache.\n force: true,\n },\n server: {\n ...config.server,\n host: '127.0.0.1',\n port,\n // Vite's port 0 means its default 5173. Bind the probed port exactly so\n // another project or runner cannot be mistaken for this Browser Host.\n strictPort: true,\n },\n });\n } catch (cause) {\n await rm(cacheDir, { recursive: true, force: true });\n throw cause;\n }\n const hostStartedAtMs = performance.now();\n let phase = 'server-listen';\n let browser: Browser | undefined;\n let page: Page | undefined;\n let pageErrors: string[] = [];\n let responseDiagnostics: Promise<void>[] = [];\n const launchBrowser = (headless: boolean): Promise<Browser> =>\n chromium.launch({\n channel: process.env.FORGEAX_CHROME_CHANNEL ?? 'chrome',\n headless,\n args: [\n '--enable-unsafe-webgpu',\n '--enable-features=Vulkan,UseSkiaRenderer,SharedArrayBuffer',\n '--use-vulkan=swiftshader',\n '--disable-vulkan-surface',\n '--ignore-gpu-blocklist',\n '--disable-gpu-driver-bug-workarounds',\n '--disable-dawn-features=disallow_unsafe_apis',\n '--autoplay-policy=no-user-gesture-required',\n ],\n });\n const observePage = (target: Page): void => {\n target.on('pageerror', (error) => pageErrors.push(error.message));\n target.on('console', (message) => {\n if (message.type() === 'error' || message.type() === 'warning') {\n pageErrors.push(`${message.type()}: ${message.text()}`);\n }\n });\n target.on('response', (response) => {\n if (response.status() >= 400) {\n responseDiagnostics.push(\n response\n .text()\n .then((body) => {\n pageErrors.push(`HTTP ${response.status()}: ${response.url()} ${body}`);\n })\n .catch(() => {\n pageErrors.push(`HTTP ${response.status()}: ${response.url()}`);\n }),\n );\n }\n });\n };\n const closeBrowserProcess = async (): Promise<void> => {\n await page?.close().catch(() => undefined);\n page = undefined;\n await browser?.close().catch(() => undefined);\n browser = undefined;\n };\n const abort = (): void => {\n void closeBrowserProcess();\n void server.close();\n };\n signal.addEventListener('abort', abort, { once: true });\n try {\n if (signal.aborted) throw new Error('Browser Host aborted before launch');\n await server.listen();\n const address = server.httpServer?.address() as AddressInfo | null | undefined;\n if (address === null || address === undefined || typeof address === 'string') {\n throw new Error('Vite Browser Host did not expose a loopback TCP address');\n }\n\n phase = 'server-transform';\n const entryTransform = await server.transformRequest('/main.ts');\n if (entryTransform === null) {\n throw new Error('Vite Browser Host entry transform returned no module');\n }\n\n phase = 'capture-browser-launch';\n browser = await launchBrowser(recipe.presentation === 'hidden');\n phase = 'capture-page-bootstrap';\n page = await browser.newPage({\n viewport: recipe.viewport,\n deviceScaleFactor: 1,\n });\n observePage(page);\n const captureUrl = new URL(`http://127.0.0.1:${address.port}/`);\n captureUrl.searchParams.set('forgeax-tool-recipe', JSON.stringify(recipe));\n captureUrl.searchParams.set('forgeax-tool-snapshot', JSON.stringify(snapshot));\n captureUrl.searchParams.set('forgeax-tool-run-id', runId);\n if (resource !== undefined)\n captureUrl.searchParams.set('forgeax-resource-preview', JSON.stringify(resource));\n await page.goto(captureUrl.href, { waitUntil: 'networkidle', timeout: 45_000 });\n await page.waitForFunction(\n () =>\n (\n globalThis as unknown as {\n __forgeaxToolHost?: { readonly ready?: boolean };\n }\n ).__forgeaxToolHost?.ready === true,\n undefined,\n { timeout: 45_000 },\n );\n phase = 'capture-run';\n const captured = await page.evaluate(async () => {\n const host = (\n globalThis as unknown as {\n __forgeaxToolHost: {\n capture(): Promise<\n | { readonly ok: true; readonly result: ToolPreviewCaptureResult }\n | { readonly ok: false; readonly error: ToolDomainFailure }\n >;\n };\n }\n ).__forgeaxToolHost;\n const value = await host.capture();\n return JSON.parse(\n JSON.stringify(value, (_key, nested) =>\n nested instanceof Error\n ? {\n ...nested,\n name: nested.name,\n message: nested.message,\n stack: nested.stack,\n }\n : nested,\n ),\n ) as Awaited<ReturnType<typeof host.capture>>;\n });\n await Promise.all(responseDiagnostics);\n if (!captured.ok) {\n return browserFailure('capture-run', captured.error, pageErrors);\n }\n if (pageErrors.length > 0)\n return browserFailure('capture-page-runtime', pageErrors[0], pageErrors);\n const capturePng = await page.screenshot({ type: 'png' });\n const capturedResult: ToolPreviewCaptureResult = {\n ...captured.result,\n capturePng: {\n uri: `data:image/png;base64,${capturePng.toString('base64')}`,\n width: recipe.viewport.width,\n height: recipe.viewport.height,\n },\n };\n\n await closeBrowserProcess();\n pageErrors = [];\n responseDiagnostics = [];\n\n phase = 'replay-browser-launch';\n browser = await launchBrowser(true);\n phase = 'replay-page-bootstrap';\n page = await browser.newPage({\n viewport: recipe.viewport,\n deviceScaleFactor: 1,\n });\n observePage(page);\n const replayUrl = new URL(`http://127.0.0.1:${address.port}/`);\n replayUrl.searchParams.set('forgeax-tool-replay', '1');\n await page.goto(replayUrl.href, { waitUntil: 'networkidle', timeout: 45_000 });\n await page.waitForFunction(\n () =>\n (\n globalThis as unknown as {\n __forgeaxToolReplayHost?: { readonly ready?: boolean };\n }\n ).__forgeaxToolReplayHost?.ready === true,\n undefined,\n { timeout: 45_000 },\n );\n phase = 'replay-run';\n const result = (await page.evaluate(async (serializedCapture: string): Promise<unknown> => {\n const host = (\n globalThis as unknown as {\n __forgeaxToolReplayHost: {\n run(value: ToolPreviewCaptureResult): Promise<unknown>;\n };\n }\n ).__forgeaxToolReplayHost;\n const value = await host.run(JSON.parse(serializedCapture) as ToolPreviewCaptureResult);\n return JSON.parse(\n JSON.stringify(value, (_key, nested) =>\n nested instanceof Error\n ? {\n ...nested,\n name: nested.name,\n message: nested.message,\n stack: nested.stack,\n }\n : nested,\n ),\n ) as unknown;\n }, JSON.stringify(capturedResult))) as\n | { readonly ok: true; readonly result: PreviewHostResult }\n | { readonly ok: false; readonly error: ToolDomainFailure };\n await Promise.all(responseDiagnostics);\n if (!result.ok) return browserFailure('replay-run', result.error, pageErrors);\n if (pageErrors.length > 0)\n return browserFailure('replay-page-runtime', pageErrors[0], pageErrors);\n\n const endedAtMs = performance.now();\n const phases = result.result.operationTiming.phases;\n const observedDurationMs =\n phases === undefined\n ? 0\n : Object.values(phases).reduce(\n (total, observation) =>\n total + (observation.status === 'observed' ? observation.durationMs : 0),\n 0,\n );\n const durationMs = endedAtMs - hostStartedAtMs;\n const value: PreviewHostResult = {\n ...result.result,\n operationTiming: {\n ...result.result.operationTiming,\n startedAtMs: hostStartedAtMs,\n endedAtMs,\n durationMs,\n ...(phases === undefined\n ? { unattributedMs: durationMs }\n : {\n phases: {\n ...phases,\n transport: {\n status: 'observed',\n durationMs: Math.max(0, durationMs - observedDurationMs),\n },\n },\n unattributedMs: 0,\n }),\n },\n actualCarrier: recipe.presentation === 'hidden' ? 'headless-private' : 'headed-private',\n };\n phase = 'artifact-publish';\n return {\n ok: true,\n value:\n options.publish === false\n ? value\n : await publishPreviewArtifacts(projectRoot, runId, value),\n };\n } catch (cause) {\n await Promise.all(responseDiagnostics);\n return browserFailure(phase, cause, pageErrors);\n } finally {\n signal.removeEventListener('abort', abort);\n await closeBrowserProcess();\n await server.close().catch(() => undefined);\n await rm(cacheDir, { recursive: true, force: true });\n }\n}\n\nexport function runBrowserResourcePreviewHost(\n projectRoot: string,\n recipe: ToolPreviewRecipe,\n snapshot: SnapshotRef,\n runId: string,\n signal: AbortSignal,\n resource: ToolPreviewResourceRequest,\n options: BrowserHostOptions = {},\n): Promise<BrowserHostResult> {\n return runBrowserPreviewHost(\n projectRoot,\n recipe,\n snapshot,\n runId,\n signal,\n 'resource-bootstrap',\n resource,\n options,\n );\n}\n","import {\n createToolPreviewHost,\n createToolPreviewRecipe,\n type ToolPreviewRecipeOptions,\n type ToolPreviewRunResult,\n type ToolPreviewTrace,\n} from '@forgeax/engine-app';\nimport type {\n CarrierLeaseRequest,\n CarrierOffer,\n CarrierResult,\n CarrierState,\n ToolDomainFailure,\n ToolExecutionContext,\n} from '@forgeax/engine-tool-runtime';\nimport { runBrowserPreviewHost } from './browser-host.js';\n\nexport interface PreviewHostRequest {\n readonly recipe: ToolPreviewRecipeOptions;\n readonly projectRoot?: string;\n readonly carrier?: PreviewCarrierRoute;\n}\n\nexport interface PreviewHostMechanisms {\n readonly runId: string;\n readonly projectRoot: string;\n readonly backend: 'webgpu';\n readonly signal: AbortSignal;\n}\n\nexport interface PreviewHostSession {\n readonly withSession: <T>(\n execute: (mechanisms: PreviewHostMechanisms) => Promise<T>,\n ) => Promise<T>;\n}\n\n/**\n * Creates the physical host lease. Domain identity stays in the executor;\n * this seam carries only browser, backend, and lexical run ownership.\n */\nexport function createPreviewHostSession(input: {\n readonly runId: string;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): PreviewHostSession {\n let active = true;\n return {\n async withSession(execute) {\n if (!active || input.signal.aborted) throw new Error('preview-host-session-terminal');\n try {\n return await execute({\n runId: input.runId,\n projectRoot: input.projectRoot,\n backend: 'webgpu',\n signal: input.signal,\n });\n } finally {\n active = false;\n }\n },\n };\n}\n\nexport interface PreviewCarrierRoute {\n readonly lookup: () => CarrierOffer | undefined;\n readonly lease: (request: CarrierLeaseRequest) => CarrierResult<{ readonly leaseId: string }>;\n readonly started: (leaseId: string) => CarrierResult<CarrierState>;\n readonly execute: (\n leaseId: string,\n request: Omit<PreviewHostRequest, 'carrier'>,\n context: Pick<ToolExecutionContext, 'runId' | 'signal'>,\n ) => Promise<PreviewRouteResult<PreviewHostResult>>;\n readonly exit: (leaseId: string) => CarrierResult<CarrierState>;\n readonly now?: () => number;\n}\n\nexport interface PreviewHostResult {\n readonly actualCarrier: 'headless-private' | 'headed-private' | 'visible-consumer';\n readonly trace: ToolPreviewTrace;\n readonly captureId: string;\n readonly drawCalls: number;\n readonly committedDrawIndex: number;\n readonly nonBlackPixels: number;\n readonly actionTrace: ToolPreviewRunResult['actionTrace'];\n readonly tape: ToolPreviewRunResult['tape'];\n readonly profile: ToolPreviewRunResult['profile'];\n readonly capturePng: ToolPreviewRunResult['capturePng'];\n readonly png: ToolPreviewRunResult['png'];\n readonly manifest: ToolPreviewRunResult['manifest'];\n readonly artifacts: ToolPreviewRunResult['artifacts'];\n readonly operationTiming: ToolPreviewRunResult['operationTiming'];\n readonly resource?: import('@forgeax/engine-app').ToolPreviewResourceFacts;\n}\n\nexport type PreviewHostRunner = (\n request: PreviewHostRequest,\n context: ToolExecutionContext,\n) => Promise<\n | { readonly ok: true; readonly value: PreviewHostResult }\n | { readonly ok: false; readonly error: ToolDomainFailure }\n>;\n\ntype PreviewRouteResult<T> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: ToolDomainFailure };\n\nexport interface CarrierCleanupTrace {\n readonly actualCarrier: 'headless-private' | 'headed-private' | 'visible-consumer';\n readonly backend: 'webgpu';\n readonly cleanup: readonly ['gpu', 'canvas', 'page', 'carrier'];\n readonly failure: {\n readonly code: 'tool-preview-carrier-exit';\n readonly detail: { readonly carrier: CarrierCleanupTrace['actualCarrier'] };\n };\n}\n\nexport function createCarrierCleanupTrace(input: {\n readonly actualCarrier: CarrierCleanupTrace['actualCarrier'];\n readonly backend: 'webgpu';\n}): CarrierCleanupTrace {\n return {\n actualCarrier: input.actualCarrier,\n backend: input.backend,\n cleanup: ['gpu', 'canvas', 'page', 'carrier'],\n failure: {\n code: 'tool-preview-carrier-exit',\n detail: { carrier: input.actualCarrier },\n },\n };\n}\n\nfunction carrierRouteFailure(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>>,\n): PreviewRouteResult<never> {\n return { ok: false, error: { code, expected, hint, detail: detail as never } };\n}\n\nexport async function runCarrierPreviewRoute<T>(\n presentation: ToolPreviewRecipeOptions['presentation'],\n carrier: PreviewCarrierRoute | undefined,\n executePrivate: () => Promise<PreviewRouteResult<T>>,\n executeConsumer: (leaseId: string) => Promise<PreviewRouteResult<T>> = executePrivate,\n): Promise<PreviewRouteResult<T>> {\n if (presentation === 'hidden' || carrier === undefined) return executePrivate();\n const offer = carrier.lookup();\n if (offer === undefined) return executePrivate();\n const leased = carrier.lease({\n consumerId: offer.consumerId,\n bearerToken: offer.bearerToken,\n now: carrier.now?.() ?? Date.now(),\n });\n if (!leased.ok) return executePrivate();\n const started = carrier.started(leased.value.leaseId);\n if (!started.ok) return executePrivate();\n const result = await executeConsumer(leased.value.leaseId);\n const exited = carrier.exit(leased.value.leaseId);\n if (!exited.ok)\n return carrierRouteFailure(\n exited.error.code,\n exited.error.expected,\n exited.error.hint,\n exited.error.detail,\n );\n return result;\n}\n\nexport const runPreviewHost: PreviewHostRunner = async (request, context) => {\n if (context.snapshot === undefined) {\n return carrierRouteFailure(\n 'tool-snapshot-missing',\n 'ToolExecutionContext.snapshot before Browser or Renderer creation',\n 'Start the operation with an authority snapshot and retry the lexical ToolRun.',\n { phase: 'snapshot' },\n );\n }\n const snapshot = context.snapshot;\n const recipe = createToolPreviewRecipe(request.recipe);\n return runCarrierPreviewRoute(\n recipe.presentation,\n request.carrier,\n async () => {\n if (typeof document === 'undefined') {\n if (request.projectRoot === undefined) {\n return carrierRouteFailure(\n 'tool-preview-project-root-missing',\n 'the Browser Host to receive a real ForgeaX project root',\n 'Create the ToolClient with projectRoot or pass projectRoot in the preview request.',\n { phase: 'project-authority' },\n );\n }\n return runBrowserPreviewHost(\n request.projectRoot,\n recipe,\n snapshot,\n context.runId,\n context.signal,\n );\n }\n const host = await createToolPreviewHost({ recipe, snapshot });\n if (!host.ok) {\n return {\n ok: false,\n error: {\n code: host.error.code,\n expected: host.error.expected,\n hint: host.error.hint,\n detail: host.error.detail as never,\n },\n };\n }\n try {\n const result = await host.value.run();\n if (!result.ok) {\n return {\n ok: false,\n error: {\n code: result.error.code,\n expected: result.error.expected,\n hint: result.error.hint,\n detail: result.error.detail as never,\n },\n };\n }\n return {\n ok: true,\n value: {\n ...result.value,\n actualCarrier: recipe.presentation === 'hidden' ? 'headless-private' : 'headed-private',\n },\n };\n } finally {\n await host.value.dispose();\n }\n },\n async (leaseId) => {\n const carrier = request.carrier;\n if (carrier === undefined) {\n return carrierRouteFailure(\n 'tool-preview-carrier-unavailable',\n 'a leased Consumer provider',\n 'Retry the ordinary private visible carrier.',\n { phase: 'consumer-execute' },\n );\n }\n const { carrier: _carrier, ...consumerRequest } = request;\n return carrier.execute(leaseId, consumerRequest, context);\n },\n );\n};\n","import type {\n ToolContribution,\n ToolRunOptions,\n ToolRuntime,\n ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport function runPrivateTool<TArgs, TResult>(\n runtime: ToolRuntime,\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options?: ToolRunOptions,\n): Promise<ToolTerminal<TResult>> {\n return runtime.run(contribution, args, options).terminal;\n}\n","import type { ToolRealm } from '@forgeax/engine-tool-runtime';\nimport {\n createRealmCapabilityMatrix as createRuntimeRealmCapabilityMatrix,\n type RealmCapability,\n type RealmCapabilityInput,\n type RealmCapabilityMatrix,\n} from '@forgeax/engine-tool-runtime';\n\nexport type { RealmCapability, RealmCapabilityInput, RealmCapabilityMatrix };\nexport { createRuntimeRealmCapabilityMatrix as createRealmCapabilityMatrix };\n\nexport function resolveRealmCapability(\n matrix: RealmCapabilityMatrix,\n realm: ToolRealm,\n): RealmCapability {\n return matrix.realms[realm];\n}\n\nconst RESOURCE_KINDS = ['process', 'port', 'page', 'canvas', 'fiber'] as const;\nexport type ResourceKind = (typeof RESOURCE_KINDS)[number];\n\nexport interface ResourceProbe {\n readonly observe: (kind: ResourceKind, id: string) => void;\n readonly release: (kind: ResourceKind, id: string) => void;\n readonly owner: (id: string) => ResourceOwner;\n readonly snapshot: () => Readonly<Record<ResourceKind, readonly string[]>>;\n}\n\nexport interface ResourceOwner {\n readonly id: string;\n readonly observe: (kind: ResourceKind, resourceId: string) => void;\n readonly release: (kind: ResourceKind, resourceId: string) => void;\n readonly stop: () => void;\n}\n\nexport function createResourceProbe(): ResourceProbe {\n const live = new Map<ResourceKind, Set<string>>(RESOURCE_KINDS.map((kind) => [kind, new Set()]));\n const owned = new Map<string, Set<string>>();\n const key = (kind: ResourceKind, id: string): string => `${kind}:${id}`;\n const releaseOwned = (ownerId: string, kind: ResourceKind, id: string): void => {\n live.get(kind)?.delete(id);\n owned.get(ownerId)?.delete(key(kind, id));\n };\n return {\n observe(kind, id) {\n live.get(kind)?.add(id);\n },\n release(kind, id) {\n live.get(kind)?.delete(id);\n },\n owner(id) {\n if (owned.has(id)) throw new Error(`resource-owner-duplicate:${id}`);\n owned.set(id, new Set());\n let stopped = false;\n return {\n id,\n observe(kind, resourceId) {\n if (stopped) throw new Error(`resource-owner-stopped:${id}`);\n live.get(kind)?.add(resourceId);\n owned.get(id)?.add(key(kind, resourceId));\n },\n release(kind, resourceId) {\n releaseOwned(id, kind, resourceId);\n },\n stop() {\n if (stopped) return;\n stopped = true;\n for (const resource of owned.get(id) ?? []) {\n const separator = resource.indexOf(':');\n const kind = resource.slice(0, separator) as ResourceKind;\n const resourceId = resource.slice(separator + 1);\n live.get(kind)?.delete(resourceId);\n }\n owned.delete(id);\n },\n };\n },\n snapshot() {\n return Object.fromEntries(\n [...live.entries()].map(([kind, ids]) => [kind, [...ids].sort()]),\n ) as unknown as Readonly<Record<ResourceKind, readonly string[]>>;\n },\n };\n}\n\nexport {\n createResourceBootstrapPlan,\n createResourceBootstrapTrace,\n type ResourceBootstrapPlan,\n type ResourceBootstrapTrace,\n type ResourceBootstrapTraceInput,\n} from '../host/resource-bootstrap.js';\n","import {\n type AuthenticatedLoopbackTransport,\n cancellationError,\n createServiceCapability,\n disconnectedError,\n domainFailureError,\n type JsonValue,\n type ServiceAdmissionRef,\n type ServiceCapability,\n type ToolContribution,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface ServiceExecutorOptions<TArgs, TResult> {\n readonly contribution: ToolContribution<TArgs, TResult>;\n readonly privateExecutor: (args: TArgs) => Promise<ToolTerminal<TResult>>;\n readonly transport: AuthenticatedLoopbackTransport;\n readonly admission?: ServiceAdmissionRef;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly workloadClass: string;\n readonly codeDigest: string;\n readonly browserVersion: string;\n readonly bearerToken?: string;\n}\n\nexport interface ServiceExecutor<TArgs, TResult> {\n readonly capability: ServiceCapability;\n readonly run: (\n args: TArgs,\n options?: { readonly recipeDigest?: string; readonly signal?: AbortSignal },\n ) => Promise<ToolTerminal<TResult>>;\n}\n\nexport function createServiceExecutor<TArgs, TResult>(\n options: ServiceExecutorOptions<TArgs, TResult>,\n): ServiceExecutor<TArgs, TResult> {\n const capability = createServiceCapability(options.admission, {\n toolId: options.contribution.descriptor.id,\n descriptorDigest: options.descriptorDigest,\n recipeDigest: options.recipeDigest,\n workloadClass: options.workloadClass,\n codeDigest: options.codeDigest,\n browserVersion: options.browserVersion,\n backend: 'webgpu',\n });\n return {\n capability,\n async run(args, runOptions = {}) {\n if (!capability.available) return options.privateExecutor(args);\n const request = {\n descriptorDigest: options.descriptorDigest,\n recipeDigest: runOptions.recipeDigest ?? options.recipeDigest,\n args: args as JsonValue,\n };\n try {\n const terminal = await options.transport.request(\n request,\n options.bearerToken ?? 'service-default-token',\n runOptions.signal === undefined ? {} : { signal: runOptions.signal },\n );\n return terminal as ToolTerminal<TResult>;\n } catch (cause) {\n const message = cause instanceof Error ? cause.message : String(cause);\n if (runOptions.signal?.aborted) {\n return {\n outcome: 'failed',\n failure: cancellationError(String(runOptions.signal.reason ?? 'aborted')),\n artifacts: [],\n };\n }\n const failure = message.includes('disconnected')\n ? disconnectedError(options.transport.endpoint)\n : domainFailureError(\n 'service-transport-failed',\n 'the authenticated loopback service to accept the request',\n 'Check the service token and recipe digest, then retry the private executor.',\n message,\n );\n return { outcome: 'failed', failure, artifacts: [] };\n }\n },\n };\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from 'node:http';\nimport {\n type AuthenticatedLoopbackTransport,\n createAuthenticatedLoopbackTransport,\n type ServiceWireHandler,\n type ServiceWireRequest,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport type {\n AuthenticatedLoopbackTransport,\n AuthenticatedLoopbackTransportOptions,\n ServiceWireHandler,\n ServiceWireRequest,\n} from '@forgeax/engine-tool-runtime';\nexport { createAuthenticatedLoopbackTransport } from '@forgeax/engine-tool-runtime';\n\nexport interface AuthenticatedLoopbackServiceOptions {\n readonly bearerToken: string;\n readonly handler: ServiceWireHandler;\n readonly host?: '127.0.0.1' | 'localhost';\n readonly expectedDescriptorDigest?: string;\n readonly expectedRecipeDigest?: string;\n}\n\nexport interface AuthenticatedLoopbackService {\n readonly endpoint: string;\n readonly transport: AuthenticatedLoopbackTransport;\n readonly close: () => Promise<void>;\n}\n\nasync function readJson(request: IncomingMessage): Promise<unknown> {\n const chunks: Buffer[] = [];\n for await (const chunk of request) chunks.push(Buffer.from(chunk));\n const body = Buffer.concat(chunks);\n if (body.byteLength > 1024 * 1024) throw new Error('request body is too large');\n return JSON.parse(body.toString('utf8')) as unknown;\n}\n\nfunction reply(\n response: ServerResponse,\n status: number,\n payload: ToolTerminal<unknown> | { readonly error: string },\n): void {\n response.statusCode = status;\n response.setHeader('content-type', 'application/json');\n response.end(JSON.stringify(payload));\n}\n\nfunction parseRequest(value: unknown): ServiceWireRequest {\n if (typeof value !== 'object' || value === null) throw new Error('request must be an object');\n const request = value as Record<string, unknown>;\n if (\n typeof request.descriptorDigest !== 'string' ||\n typeof request.recipeDigest !== 'string' ||\n request.args === undefined\n ) {\n throw new Error('request is missing descriptorDigest, recipeDigest, or args');\n }\n return {\n descriptorDigest: request.descriptorDigest,\n recipeDigest: request.recipeDigest,\n args: request.args as ServiceWireRequest['args'],\n };\n}\n\nfunction isAuthorized(request: IncomingMessage, bearerToken: string): boolean {\n return request.headers.authorization === `Bearer ${bearerToken}`;\n}\n\nexport async function createAuthenticatedLoopbackService(\n options: AuthenticatedLoopbackServiceOptions,\n): Promise<AuthenticatedLoopbackService> {\n if (options.bearerToken.length < 8) throw new TypeError('service bearer token is too short');\n const host = options.host ?? '127.0.0.1';\n const server = createServer(async (request, response) => {\n if (request.method !== 'POST' || request.url !== '/run') {\n reply(response, 404, { error: 'service route not found' });\n return;\n }\n if (!isAuthorized(request, options.bearerToken)) {\n reply(response, 401, { error: 'service bearer token rejected' });\n return;\n }\n try {\n const wireRequest = parseRequest(await readJson(request));\n if (\n options.expectedDescriptorDigest !== undefined &&\n wireRequest.descriptorDigest !== options.expectedDescriptorDigest\n ) {\n reply(response, 409, { error: 'service descriptor digest mismatch' });\n return;\n }\n if (\n options.expectedRecipeDigest !== undefined &&\n wireRequest.recipeDigest !== options.expectedRecipeDigest\n ) {\n reply(response, 409, { error: 'service recipe digest mismatch' });\n return;\n }\n reply(response, 200, await options.handler(wireRequest));\n } catch (cause) {\n const message = cause instanceof Error ? cause.message : String(cause);\n reply(response, 400, { error: message });\n }\n });\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error) => {\n server.off('listening', onListening);\n reject(error);\n };\n const onListening = () => {\n server.off('error', onError);\n resolve();\n };\n server.once('error', onError);\n server.once('listening', onListening);\n server.listen(0, host);\n });\n const address = server.address();\n if (address === null || typeof address === 'string') {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n throw new Error('loopback service did not expose a TCP address');\n }\n const endpoint = `http://${host}:${address.port}/run`;\n const transport = createAuthenticatedLoopbackTransport({\n endpoint,\n bearerToken: options.bearerToken,\n });\n let closed = false;\n return {\n endpoint,\n transport,\n async close() {\n if (closed) return;\n closed = true;\n await new Promise<void>((resolve, reject) => {\n server.close((error) => (error === undefined ? resolve() : reject(error)));\n });\n transport.close();\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/archive.ts","../src/dist.ts","../src/project.ts","../src/engine-binding.ts","../src/host.ts","../src/types.ts","../src/assets.ts","../package.json","../src/init.ts","../src/sdk.ts","../src/sdk-bootstrap.ts","../src/sdk-update.ts","../src/skill-install.ts","../src/bootstrap-commands.ts","../src/plugin-authoring.ts","../src/rhi-debug/cli-context.ts","../src/rhi-debug/operations.ts","../src/sdk-install.ts","../src/shader-check.ts","../src/software-capture.ts","../src/commands.ts","../src/tools/preview-catalog.ts","../src/tools/catalog.ts","../src/tools/preview-migration.ts","../src/tools/project-tools.ts","../src/tools/offline-analysis.ts","../src/tools/preview-contributions.ts","../src/tools/contributions.ts","../src/tools/runtime.ts","../src/index.ts","../src/tools/benchmark/statistics.ts","../src/tools/benchmark/report.ts","../src/tools/benchmark/harness.ts","../src/tools/bootstrap.ts","../src/tools/cache.ts","../src/tools/carrier-provider.ts","../src/tools/carrier-rendezvous.ts","../src/tools/cli-adapter.ts","../src/tools/client.ts","../src/tools/library.ts","../src/tools/migration.ts","../src/tools/browser-host.ts","../src/tools/preview-host.ts","../src/tools/private-executor.ts","../src/tools/realms.ts","../src/tools/service.ts","../src/tools/service-transport.ts"],"names":["entries","readFile","resolve","writeFile","selected","readdir","builtAt","stat","createHash","resolved","dirname","conditionalExport","relative","sep","moduleSpecifier","mkdir","devDependencies","access","fileURLToPath","rm","filesUnder","cp","realpath","basename","isAbsolute","execFileAsync","mkdtemp","rename","promisify","execFile","readManifest","GameProjectSchema","tmpdir","viteBuild","pathExists","createNetServer","createServer","captureUrl","runtime","ok","sha256","createViteConfig","vitePreview","projectPluginEntries","createToolRuntime","commandFailure","defineTool","buildCommand","pluginInstallCommand","capabilityUnavailableError","missingTool","runProjectTool","createServiceCapability","createTcpServer","validatePreviewArtifactManifest","chromium","value","failure","domainFailureError","readJson","reply"],"mappings":"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","file":"index.mjs","sourcesContent":["import { deflateRawSync } from 'node:zlib';\n\nexport interface ZipEntry {\n readonly path: string;\n readonly bytes: Uint8Array;\n}\n\nconst ZIP32_LIMIT = 0xffff_ffff;\nconst ZIP_ENTRY_LIMIT = 0xffff;\nconst UTF8_FLAG = 0x0800;\nconst DEFLATE_METHOD = 8;\nconst DOS_EPOCH_DATE = 0x0021;\n\nconst CRC_TABLE = new Uint32Array(256);\nfor (let index = 0; index < CRC_TABLE.length; index += 1) {\n let value = index;\n for (let bit = 0; bit < 8; bit += 1) value = (value >>> 1) ^ (0xedb8_8320 & -(value & 1));\n CRC_TABLE[index] = value >>> 0;\n}\n\nfunction crc32(bytes: Uint8Array): number {\n let value = 0xffff_ffff;\n for (const byte of bytes) value = (value >>> 8) ^ (CRC_TABLE[(value ^ byte) & 0xff] ?? 0);\n return (value ^ 0xffff_ffff) >>> 0;\n}\n\nfunction assertArchivePath(path: string): void {\n if (\n path.length === 0 ||\n path.startsWith('/') ||\n path.includes('\\\\') ||\n path.split('/').some((segment) => segment.length === 0 || segment === '.' || segment === '..')\n ) {\n throw new TypeError(`invalid ZIP entry path: ${path}`);\n }\n}\n\nexport function createZip(entriesInput: readonly ZipEntry[]): Buffer {\n if (entriesInput.length > ZIP_ENTRY_LIMIT) throw new RangeError('ZIP32 entry limit exceeded');\n const entries = [...entriesInput].sort((left, right) => left.path.localeCompare(right.path));\n const seen = new Set<string>();\n const localParts: Buffer[] = [];\n const centralParts: Buffer[] = [];\n let offset = 0;\n\n for (const entry of entries) {\n assertArchivePath(entry.path);\n if (seen.has(entry.path)) throw new TypeError(`duplicate ZIP entry path: ${entry.path}`);\n seen.add(entry.path);\n const name = Buffer.from(entry.path, 'utf8');\n const source = Buffer.from(entry.bytes);\n const compressed = deflateRawSync(source, { level: 9 });\n if (source.byteLength > ZIP32_LIMIT || compressed.byteLength > ZIP32_LIMIT) {\n throw new RangeError(`ZIP32 file limit exceeded: ${entry.path}`);\n }\n const checksum = crc32(source);\n const local = Buffer.alloc(30);\n local.writeUInt32LE(0x0403_4b50, 0);\n local.writeUInt16LE(20, 4);\n local.writeUInt16LE(UTF8_FLAG, 6);\n local.writeUInt16LE(DEFLATE_METHOD, 8);\n local.writeUInt16LE(0, 10);\n local.writeUInt16LE(DOS_EPOCH_DATE, 12);\n local.writeUInt32LE(checksum, 14);\n local.writeUInt32LE(compressed.byteLength, 18);\n local.writeUInt32LE(source.byteLength, 22);\n local.writeUInt16LE(name.byteLength, 26);\n local.writeUInt16LE(0, 28);\n localParts.push(local, name, compressed);\n\n const central = Buffer.alloc(46);\n central.writeUInt32LE(0x0201_4b50, 0);\n central.writeUInt16LE(20, 4);\n central.writeUInt16LE(20, 6);\n central.writeUInt16LE(UTF8_FLAG, 8);\n central.writeUInt16LE(DEFLATE_METHOD, 10);\n central.writeUInt16LE(0, 12);\n central.writeUInt16LE(DOS_EPOCH_DATE, 14);\n central.writeUInt32LE(checksum, 16);\n central.writeUInt32LE(compressed.byteLength, 20);\n central.writeUInt32LE(source.byteLength, 24);\n central.writeUInt16LE(name.byteLength, 28);\n central.writeUInt16LE(0, 30);\n central.writeUInt16LE(0, 32);\n central.writeUInt16LE(0, 34);\n central.writeUInt16LE(0, 36);\n central.writeUInt32LE(0, 38);\n central.writeUInt32LE(offset, 42);\n centralParts.push(central, name);\n\n offset += local.byteLength + name.byteLength + compressed.byteLength;\n if (offset > ZIP32_LIMIT) throw new RangeError('ZIP32 archive limit exceeded');\n }\n\n const centralDirectory = Buffer.concat(centralParts);\n if (centralDirectory.byteLength > ZIP32_LIMIT)\n throw new RangeError('ZIP32 directory limit exceeded');\n const end = Buffer.alloc(22);\n end.writeUInt32LE(0x0605_4b50, 0);\n end.writeUInt16LE(entries.length, 8);\n end.writeUInt16LE(entries.length, 10);\n end.writeUInt32LE(centralDirectory.byteLength, 12);\n end.writeUInt32LE(offset, 16);\n return Buffer.concat([...localParts, centralDirectory, end]);\n}\n","import { createHash } from 'node:crypto';\nimport { readdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { relative, resolve, sep } from 'node:path';\nimport type { CommandResult, ProjectFacts } from './types.js';\n\ninterface DistArtifact {\n readonly path: string;\n readonly mediaType: string;\n readonly bytes: number;\n readonly sha256: string;\n}\n\nexport interface DistManifest {\n readonly schemaVersion: '1.0.0';\n readonly project: { readonly id: string; readonly name: string };\n readonly base: string;\n readonly runtime: {\n readonly packIndexUrl: string;\n readonly shaderManifestUrl: string;\n };\n readonly artifacts: readonly DistArtifact[];\n}\n\nfunction mediaType(path: string): string {\n if (path.endsWith('.html')) return 'text/html';\n if (path.endsWith('.js') || path.endsWith('.mjs')) return 'text/javascript';\n if (path.endsWith('.json')) return 'application/json';\n if (path.endsWith('.wasm')) return 'application/wasm';\n if (path.endsWith('.png')) return 'image/png';\n if (path.endsWith('.jpg') || path.endsWith('.jpeg')) return 'image/jpeg';\n return 'application/octet-stream';\n}\n\nasync function filesUnder(root: string, directory = root): Promise<string[]> {\n const result: string[] = [];\n for (const name of (await readdir(directory)).sort()) {\n const path = resolve(directory, name);\n const info = await stat(path);\n if (info.isDirectory()) result.push(...(await filesUnder(root, path)));\n else if (info.isFile() && name !== 'forgeax-dist.json') result.push(path);\n }\n return result;\n}\n\nexport async function writeDistManifest(\n facts: ProjectFacts,\n base: string,\n rootInput = resolve(facts.root, 'dist'),\n): Promise<DistManifest> {\n const root = resolve(rootInput);\n const artifacts = await Promise.all(\n (await filesUnder(root)).map(async (path): Promise<DistArtifact> => {\n const bytes = await readFile(path);\n return {\n path: relative(root, path).split(sep).join('/'),\n mediaType: mediaType(path),\n bytes: bytes.byteLength,\n sha256: createHash('sha256').update(bytes).digest('hex'),\n };\n }),\n );\n const manifest: DistManifest = {\n schemaVersion: '1.0.0',\n project: { id: facts.id, name: facts.name },\n base,\n runtime: {\n packIndexUrl: 'pack-index.json',\n shaderManifestUrl: 'shaders/manifest.json',\n },\n artifacts,\n };\n await writeFile(resolve(root, 'forgeax-dist.json'), `${JSON.stringify(manifest, null, 2)}\\n`);\n return manifest;\n}\n\nexport async function verifyDist(rootInput: string): Promise<CommandResult<DistManifest>> {\n const root = resolve(rootInput);\n let manifest: DistManifest;\n try {\n manifest = JSON.parse(\n await readFile(resolve(root, 'forgeax-dist.json'), 'utf8'),\n ) as DistManifest;\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'dist-manifest-unreadable',\n expected: 'a readable dist/forgeax-dist.json',\n hint: 'Run forgeax build and do not edit its derived manifest.',\n detail: { root, reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n if (manifest.schemaVersion !== '1.0.0' || !Array.isArray(manifest.artifacts)) {\n return {\n ok: false,\n error: {\n code: 'dist-manifest-invalid',\n expected: 'forgeax-dist schema 1.0.0',\n hint: 'Rebuild the game with a compatible ForgeaX DevKit.',\n detail: { root },\n },\n };\n }\n const declaredPaths = new Set(manifest.artifacts.map((artifact) => artifact.path));\n if (declaredPaths.size !== manifest.artifacts.length) {\n return {\n ok: false,\n error: {\n code: 'dist-artifact-duplicate',\n expected: 'every dist artifact path to be declared exactly once',\n hint: 'Rebuild the derived dist manifest.',\n detail: { root },\n },\n };\n }\n for (const artifact of manifest.artifacts) {\n const path = resolve(root, artifact.path);\n if (relative(root, path).startsWith('..')) {\n return {\n ok: false,\n error: {\n code: 'dist-path-escape',\n expected: 'every artifact path to remain inside dist',\n hint: 'Rebuild the derived dist manifest.',\n detail: { path: artifact.path },\n },\n };\n }\n try {\n const bytes = await readFile(path);\n const digest = createHash('sha256').update(bytes).digest('hex');\n if (bytes.byteLength !== artifact.bytes || digest !== artifact.sha256) {\n return {\n ok: false,\n error: {\n code: 'dist-artifact-mismatch',\n expected: 'artifact bytes and SHA-256 to match forgeax-dist.json',\n hint: 'Restore the built artifact or rebuild the complete dist.',\n detail: { path: artifact.path },\n },\n };\n }\n } catch {\n return {\n ok: false,\n error: {\n code: 'dist-artifact-missing',\n expected: 'every declared dist artifact to exist',\n hint: 'Restore the built artifact or rebuild the complete dist.',\n detail: { path: artifact.path },\n },\n };\n }\n }\n for (const required of [\n 'index.html',\n manifest.runtime.packIndexUrl,\n manifest.runtime.shaderManifestUrl,\n ]) {\n if (!manifest.artifacts.some((artifact) => artifact.path === required)) {\n return {\n ok: false,\n error: {\n code: 'dist-required-artifact-missing',\n expected: 'HTML, Pack index, and Shader manifest in the dist closure',\n hint: 'Rebuild after repairing the owning producer.',\n detail: { path: required },\n },\n };\n }\n }\n for (const path of await filesUnder(root)) {\n const artifactPath = relative(root, path).split(sep).join('/');\n if (!declaredPaths.has(artifactPath)) {\n return {\n ok: false,\n error: {\n code: 'dist-artifact-undeclared',\n expected: 'every file in dist to be covered by forgeax-dist.json',\n hint: 'Remove the foreign file or rebuild the complete dist.',\n detail: { path: artifactPath },\n },\n };\n }\n }\n return { ok: true, value: manifest };\n}\n","import { readFile } from 'node:fs/promises';\nimport { isAbsolute, resolve } from 'node:path';\nimport { type GameProjectPluginEntry, GameProjectSchema } from '@forgeax/engine-project';\nimport type { CommandError, CommandResult, ProjectFacts } from './types.js';\n\nfunction projectError(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>>,\n): CommandResult<never> {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nasync function readJson(path: string): Promise<unknown> {\n return JSON.parse(await readFile(path, 'utf8')) as unknown;\n}\n\nfunction firstUnsupportedStandaloneRealm(\n entries: readonly GameProjectPluginEntry[],\n inheritedRealm: GameProjectPluginEntry['realm'] = 'engine',\n): { readonly id: string; readonly realm: 'host' | 'build' } | undefined {\n for (const entry of entries) {\n const realm = entry.realm ?? inheritedRealm ?? 'engine';\n if (realm !== 'engine') return { id: entry.id, realm };\n if (entry.group === true) {\n const unsupported = firstUnsupportedStandaloneRealm(\n entry.config as readonly GameProjectPluginEntry[],\n realm,\n );\n if (unsupported !== undefined) return unsupported;\n }\n }\n return undefined;\n}\n\nfunction pluginModuleNames(entries: readonly GameProjectPluginEntry[]): string[] {\n return entries.flatMap((entry) =>\n entry.group === true\n ? pluginModuleNames(entry.config as readonly GameProjectPluginEntry[])\n : [entry.name],\n );\n}\n\nexport async function readProjectFacts(\n rootInput = process.cwd(),\n): Promise<CommandResult<ProjectFacts>> {\n const root = resolve(rootInput);\n let forgeValue: unknown;\n let packageValue: unknown;\n try {\n [forgeValue, packageValue] = await Promise.all([\n readJson(resolve(root, 'forge.json')),\n readJson(resolve(root, 'package.json')),\n ]);\n } catch (cause) {\n return projectError(\n 'project-manifest-unreadable',\n 'readable forge.json and package.json files',\n 'Run the command from a ForgeaX game root or pass its directory.',\n { root, reason: cause instanceof Error ? cause.message : String(cause) },\n );\n }\n if (forgeValue === null || typeof forgeValue !== 'object') {\n return projectError(\n 'project-manifest-invalid',\n 'forge.json to contain an object',\n 'Repair forge.json before running DevKit.',\n { root },\n );\n }\n if (packageValue === null || typeof packageValue !== 'object') {\n return projectError(\n 'package-manifest-invalid',\n 'package.json to contain an object',\n 'Repair package.json before running DevKit.',\n { root },\n );\n }\n const parsedForge = GameProjectSchema.safeParse(forgeValue);\n if (!parsedForge.success) {\n return projectError(\n 'project-manifest-invalid',\n 'forge.json to satisfy @forgeax/engine-project GameProjectSchema',\n 'Repair the fields reported by the authoritative project schema.',\n { root, issues: parsedForge.error.issues },\n );\n }\n const forge = parsedForge.data;\n if (\n forge.id.length === 0 ||\n forge.name.length === 0 ||\n forge.entry === undefined ||\n forge.entry.length === 0\n ) {\n return projectError(\n 'project-manifest-invalid',\n 'forge.json to declare id, name, and entry',\n 'Restore the project entry; plugin Entries remain optional additions.',\n { root },\n );\n }\n const plugins = forge.plugins ?? [];\n const unsupportedRealm = firstUnsupportedStandaloneRealm(plugins);\n if (unsupportedRealm !== undefined) {\n return projectError(\n 'project-plugin-realm-unsupported',\n 'the standalone Devkit host to contain only engine-realm plugin Entries',\n 'Move Host or build plugins to a host that owns that physical realm.',\n { root, ...unsupportedRealm },\n );\n }\n const entryPath = isAbsolute(forge.entry) ? forge.entry : resolve(root, forge.entry);\n try {\n await readFile(entryPath);\n } catch {\n return projectError(\n 'project-entry-missing',\n 'forge.json#entry to resolve to a readable module',\n 'Restore the game entry or update forge.json#entry.',\n { root, entry: forge.entry },\n );\n }\n const packageJson = packageValue as Record<string, unknown>;\n const forgeax = packageJson.forgeax;\n const configuredRoots =\n forgeax !== null && typeof forgeax === 'object'\n ? (forgeax as { assets?: { roots?: unknown } }).assets?.roots\n : undefined;\n const assetRoots =\n Array.isArray(configuredRoots) && configuredRoots.every((value) => typeof value === 'string')\n ? configuredRoots\n : ['assets'];\n const configuredImporters =\n forgeax !== null && typeof forgeax === 'object'\n ? (forgeax as { assets?: { importers?: unknown } }).assets?.importers\n : undefined;\n const assetImporters =\n Array.isArray(configuredImporters) &&\n configuredImporters.every((value) => typeof value === 'string')\n ? configuredImporters\n : [];\n const configuredPublicDir =\n forgeax !== null && typeof forgeax === 'object'\n ? (forgeax as { assets?: { publicDir?: unknown } }).assets?.publicDir\n : undefined;\n const assetPublicDir = typeof configuredPublicDir === 'string' ? configuredPublicDir : undefined;\n const physics = forge.physics === '2d' || forge.physics === '3d' ? forge.physics : undefined;\n const defaultScene =\n typeof forge.defaultScene === 'string' && forge.defaultScene.length > 0\n ? forge.defaultScene\n : undefined;\n const normalizedEntry = forge.entry.startsWith('./') ? forge.entry : `./${forge.entry}`;\n const bootstrapEntry = pluginModuleNames(plugins)\n .map((name) => (name.startsWith('./') ? name : `./${name}`))\n .includes(normalizedEntry)\n ? undefined\n : forge.entry;\n return {\n ok: true,\n value: {\n root,\n id: forge.id,\n name: forge.name,\n entry: forge.entry,\n ...(bootstrapEntry === undefined ? {} : { bootstrapEntry }),\n plugins,\n ...(physics === undefined ? {} : { physics }),\n ...(defaultScene === undefined ? {} : { defaultScene }),\n assetRoots,\n ...(assetImporters.length === 0 ? {} : { assetImporters }),\n ...(assetPublicDir === undefined ? {} : { assetPublicDir }),\n packageJson,\n },\n };\n}\n\nexport function commandError(cause: unknown, fallbackCode: string): CommandError {\n if (\n cause !== null &&\n typeof cause === 'object' &&\n 'code' in cause &&\n 'expected' in cause &&\n 'hint' in cause &&\n 'detail' in cause\n ) {\n return cause as CommandError;\n }\n return {\n code: fallbackCode,\n expected: 'the ForgeaX command to complete',\n hint: 'Inspect the underlying diagnostic and repair the owning input.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n };\n}\n","import { createHash } from 'node:crypto';\nimport {\n access,\n mkdir,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n stat,\n writeFile,\n} from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport { commandError, readProjectFacts } from './project.js';\nimport type { CommandError, CommandResult, ProjectCommandOptions } from './types.js';\n\nexport const ENGINE_BINDING_SCHEMA_VERSION = '1.0.0' as const;\n\nexport type EngineBindingMode = 'sdk' | 'local';\n\nexport interface EngineBinding {\n readonly schemaVersion: typeof ENGINE_BINDING_SCHEMA_VERSION;\n readonly path: string;\n}\n\nexport interface EnginePackageStatus {\n readonly name: string;\n readonly root: string;\n readonly version: string;\n readonly entry: string | null;\n readonly built: boolean;\n readonly entryDigest: string | null;\n readonly builtAt: string | null;\n}\n\nexport interface EngineWorkspaceStatus {\n readonly root: string;\n readonly packageCount: number;\n readonly builtPackages: number;\n readonly missingBuilds: readonly string[];\n readonly versions: readonly string[];\n readonly packages: readonly EnginePackageStatus[];\n readonly digest: string;\n readonly builtAt: string | null;\n}\n\nexport interface EngineStatusReport {\n readonly schemaVersion: typeof ENGINE_BINDING_SCHEMA_VERSION;\n readonly root: string;\n readonly binding: EngineBinding | null;\n readonly mode: EngineBindingMode;\n readonly resolved: {\n readonly root: string | null;\n readonly version: string | null;\n readonly entry: string | null;\n readonly built: boolean;\n readonly source: 'sdk' | 'local' | 'unresolved';\n };\n readonly workspace: EngineWorkspaceStatus | null;\n readonly projectDependencies: 'registry' | 'workspace' | 'mixed' | 'none';\n readonly npmCompatible: boolean;\n readonly healthy: boolean;\n readonly next: readonly string[];\n readonly diagnostic?: CommandError;\n}\n\nexport interface EngineBindingCommandOptions extends ProjectCommandOptions {\n readonly path?: string;\n readonly dryRun?: boolean;\n}\n\ninterface PackageManifest extends Readonly<Record<string, unknown>> {\n readonly name?: unknown;\n readonly version?: unknown;\n readonly main?: unknown;\n readonly module?: unknown;\n readonly exports?: unknown;\n}\n\nconst bindingFile = (root: string): string => resolve(root, '.forgeax', 'engine-binding.json');\n\nfunction bindingError(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>> = {},\n): CommandResult<never> {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nfunction isMissing(cause: unknown): boolean {\n return cause !== null && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT';\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction parseBinding(value: unknown, path: string): CommandResult<EngineBinding> {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return bindingError(\n 'engine-binding-invalid',\n 'engine-binding.json to contain one object',\n 'Run forgeax engine unlink, then select a binding again.',\n { path },\n );\n }\n const candidate = value as {\n readonly schemaVersion?: unknown;\n readonly path?: unknown;\n };\n if (candidate.schemaVersion !== ENGINE_BINDING_SCHEMA_VERSION) {\n return bindingError(\n 'engine-binding-version-unsupported',\n `engine-binding.json schemaVersion ${ENGINE_BINDING_SCHEMA_VERSION}`,\n 'Upgrade the SDK or remove the stale binding with forgeax engine unlink.',\n { path, schemaVersion: candidate.schemaVersion ?? null },\n );\n }\n if (typeof candidate.path !== 'string' || candidate.path.length === 0) {\n return bindingError(\n 'engine-binding-path-missing',\n 'engine-binding.json to contain one non-empty local Engine path',\n 'Run forgeax engine use-local <engine-directory>.',\n { path },\n );\n }\n return {\n ok: true,\n value: {\n schemaVersion: ENGINE_BINDING_SCHEMA_VERSION,\n path: resolve(candidate.path),\n },\n };\n}\n\nexport async function readEngineBinding(\n rootInput = process.cwd(),\n): Promise<CommandResult<EngineBinding | null>> {\n const root = resolve(rootInput);\n const path = bindingFile(root);\n try {\n const value = JSON.parse(await readFile(path, 'utf8')) as unknown;\n return parseBinding(value, path);\n } catch (cause) {\n if (isMissing(cause)) return { ok: true, value: null };\n return bindingError(\n 'engine-binding-unreadable',\n 'engine-binding.json to be readable JSON',\n 'Repair or remove .forgeax/engine-binding.json, then select a binding again.',\n { path, reason: cause instanceof Error ? cause.message : String(cause) },\n );\n }\n}\n\nasync function writeEngineBinding(root: string, binding: EngineBinding): Promise<void> {\n const path = bindingFile(root);\n const partial = `${path}.partial-${process.pid}`;\n await mkdir(dirname(path), { recursive: true });\n await writeFile(partial, `${JSON.stringify(binding, null, 2)}\\n`, 'utf8');\n await rename(partial, path);\n}\n\nfunction conditionalExport(value: unknown): string | undefined {\n if (typeof value === 'string') return value;\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n for (const key of ['import', 'browser', 'node', 'default', 'require', 'types']) {\n const candidate = record[key];\n const selected = conditionalExport(candidate);\n if (selected !== undefined) return selected;\n }\n return undefined;\n}\n\nfunction packageEntry(manifest: PackageManifest): string | undefined {\n const exportsValue = manifest.exports;\n if (exportsValue !== undefined) {\n if (typeof exportsValue === 'object' && exportsValue !== null && !Array.isArray(exportsValue)) {\n const root = (exportsValue as Record<string, unknown>)['.'];\n const selected = conditionalExport(root ?? exportsValue);\n if (selected !== undefined) return selected;\n }\n const selected = conditionalExport(exportsValue);\n if (selected !== undefined) return selected;\n }\n return typeof manifest.module === 'string'\n ? manifest.module\n : typeof manifest.main === 'string'\n ? manifest.main\n : undefined;\n}\n\nasync function readManifest(path: string): Promise<PackageManifest> {\n const value = JSON.parse(await readFile(path, 'utf8')) as unknown;\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error(`engine-package-manifest-invalid: ${path}`);\n }\n return value as PackageManifest;\n}\n\nexport async function inspectEngineWorkspace(\n workspaceInput: string,\n): Promise<CommandResult<EngineWorkspaceStatus>> {\n const root = resolve(workspaceInput);\n const packageRoot = resolve(root, 'packages');\n try {\n await access(resolve(root, 'pnpm-workspace.yaml'));\n const entries = await readdir(packageRoot, { withFileTypes: true });\n const packages: EnginePackageStatus[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const packagePath = resolve(packageRoot, entry.name);\n let manifest: PackageManifest;\n try {\n manifest = await readManifest(resolve(packagePath, 'package.json'));\n } catch {\n continue;\n }\n if (typeof manifest.name !== 'string' || !manifest.name.startsWith('@forgeax/engine'))\n continue;\n if (typeof manifest.version !== 'string') {\n return bindingError(\n 'engine-package-version-missing',\n 'every local Engine package to declare a version',\n 'Restore the package manifest version before selecting a local Engine.',\n { package: manifest.name, root: packagePath },\n );\n }\n const target = packageEntry(manifest);\n const entryPath = target === undefined ? undefined : resolve(packagePath, target);\n let entryDigest: string | null = null;\n let builtAt: string | null = null;\n if (entryPath !== undefined && (await pathExists(entryPath))) {\n const [bytes, metadata] = await Promise.all([readFile(entryPath), stat(entryPath)]);\n entryDigest = `sha256:${createHash('sha256').update(bytes).digest('hex')}`;\n builtAt = metadata.mtime.toISOString();\n }\n packages.push({\n name: manifest.name,\n root: packagePath,\n version: manifest.version,\n entry: entryPath ?? null,\n built: entryDigest !== null,\n entryDigest,\n builtAt,\n });\n }\n packages.sort((a, b) => a.name.localeCompare(b.name));\n if (packages.length === 0) {\n return bindingError(\n 'engine-workspace-empty',\n 'the local Engine workspace to contain @forgeax/engine packages',\n 'Pass the Engine repository or its source/engine SDK directory.',\n { root, packageRoot },\n );\n }\n const versions = [...new Set(packages.map((item) => item.version))].sort();\n const missingBuilds = packages.filter((item) => !item.built).map((item) => item.name);\n const builtAt =\n packages\n .flatMap((item) => (item.builtAt === null ? [] : [item.builtAt]))\n .sort()\n .at(-1) ?? null;\n const digest = `sha256:${createHash('sha256')\n .update(\n packages\n .map((item) => `${item.name}\\0${item.version}\\0${item.entryDigest ?? 'unbuilt'}`)\n .join('\\n'),\n )\n .digest('hex')}`;\n return {\n ok: true,\n value: {\n root,\n packageCount: packages.length,\n builtPackages: packages.length - missingBuilds.length,\n missingBuilds,\n versions,\n packages,\n digest,\n builtAt,\n },\n };\n } catch (cause) {\n return bindingError(\n isMissing(cause) ? 'engine-workspace-missing' : 'engine-workspace-unreadable',\n 'a readable Engine workspace with pnpm-workspace.yaml and packages/',\n 'Pass the Engine repository root, not its packages/ directory.',\n { root, packageRoot, reason: cause instanceof Error ? cause.message : String(cause) },\n );\n }\n}\n\nfunction projectDependencyMode(\n packageJson: Readonly<Record<string, unknown>>,\n): EngineStatusReport['projectDependencies'] {\n let workspace = false;\n let registry = false;\n for (const section of [\n 'dependencies',\n 'devDependencies',\n 'optionalDependencies',\n 'peerDependencies',\n ]) {\n const value = packageJson[section];\n if (value === null || typeof value !== 'object' || Array.isArray(value)) continue;\n for (const version of Object.values(value)) {\n if (typeof version !== 'string') continue;\n if (version.startsWith('workspace:') || version.startsWith('file:')) workspace = true;\n else registry = true;\n }\n }\n return workspace ? (registry ? 'mixed' : 'workspace') : registry ? 'registry' : 'none';\n}\n\nasync function sdkResolution(root: string): Promise<EngineStatusReport['resolved']> {\n const packageJson = resolve(root, 'node_modules', '@forgeax', 'engine', 'package.json');\n try {\n const manifest = await readManifest(packageJson);\n const target = packageEntry(manifest);\n const entry = target === undefined ? null : resolve(dirname(packageJson), target);\n return {\n root: dirname(packageJson),\n version: typeof manifest.version === 'string' ? manifest.version : null,\n entry,\n built: entry !== null && (await pathExists(entry)),\n source: 'sdk',\n };\n } catch {\n return { root: null, version: null, entry: null, built: false, source: 'unresolved' };\n }\n}\n\nexport async function engineStatusCommand(\n options: EngineBindingCommandOptions = {},\n): Promise<CommandResult<EngineStatusReport>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const bindingResult = await readEngineBinding(facts.value.root);\n if (!bindingResult.ok) return bindingResult;\n const binding = bindingResult.value;\n const mode: EngineBindingMode = binding === null ? 'sdk' : 'local';\n const projectDependencies = projectDependencyMode(facts.value.packageJson);\n if (binding !== null) {\n const localPath = binding.path;\n const localBinding: EngineBinding = {\n schemaVersion: ENGINE_BINDING_SCHEMA_VERSION,\n path: localPath,\n };\n const workspaceResult = await inspectEngineWorkspace(localPath);\n if (!workspaceResult.ok) {\n const resolved: EngineStatusReport['resolved'] = {\n root: localPath,\n version: null,\n entry: null,\n built: false,\n source: 'local',\n };\n return {\n ok: true,\n value: {\n schemaVersion: ENGINE_BINDING_SCHEMA_VERSION,\n root: facts.value.root,\n binding: localBinding,\n mode,\n resolved,\n workspace: null,\n projectDependencies,\n npmCompatible: projectDependencies === 'registry' || projectDependencies === 'none',\n healthy: false,\n next: ['forgeax engine unlink', 'forgeax engine use-local <engine-directory>'],\n diagnostic: workspaceResult.error,\n },\n };\n }\n const workspace = workspaceResult.value;\n const version = workspace.versions.length === 1 ? (workspace.versions[0] ?? null) : null;\n const umbrella = workspace.packages.find((item) => item.name === '@forgeax/engine');\n const resolved: EngineStatusReport['resolved'] = {\n root: localPath,\n version,\n entry: umbrella?.entry ?? null,\n built: umbrella?.built ?? false,\n source: 'local',\n };\n const healthy = workspace.versions.length === 1 && workspace.missingBuilds.length === 0;\n return {\n ok: true,\n value: {\n schemaVersion: ENGINE_BINDING_SCHEMA_VERSION,\n root: facts.value.root,\n binding: localBinding,\n mode,\n resolved,\n workspace,\n projectDependencies,\n npmCompatible: projectDependencies === 'registry' || projectDependencies === 'none',\n healthy,\n next: healthy\n ? ['forgeax build', 'forgeax capture --backend auto --require-ui']\n : ['pnpm build:engine', 'forgeax engine doctor'],\n },\n };\n }\n const resolved = await sdkResolution(facts.value.root);\n return {\n ok: true,\n value: {\n schemaVersion: ENGINE_BINDING_SCHEMA_VERSION,\n root: facts.value.root,\n binding,\n mode,\n resolved,\n workspace: null,\n projectDependencies,\n npmCompatible: projectDependencies === 'registry' || projectDependencies === 'none',\n healthy: resolved.source === 'sdk' && resolved.built,\n next:\n resolved.source === 'sdk' && resolved.built\n ? ['forgeax build', 'forgeax capture --backend auto --require-ui']\n : ['pnpm install', 'forgeax doctor'],\n },\n };\n}\n\nexport async function engineUseLocalCommand(\n options: EngineBindingCommandOptions,\n): Promise<CommandResult<EngineStatusReport>> {\n const root = resolve(options.root ?? process.cwd());\n if (options.path === undefined || options.path.trim().length === 0) {\n return bindingError(\n 'engine-binding-path-missing',\n 'forgeax engine use-local <engine-directory>',\n 'Pass the local Engine repository or SDK source directory.',\n );\n }\n let localPath: string;\n try {\n localPath = await realpath(resolve(root, options.path));\n } catch (cause) {\n return bindingError(\n 'engine-workspace-missing',\n 'the local Engine directory to exist',\n 'Pass an existing Engine repository or SDK source directory.',\n {\n path: resolve(root, options.path),\n reason: cause instanceof Error ? cause.message : String(cause),\n },\n );\n }\n const workspace = await inspectEngineWorkspace(localPath);\n if (!workspace.ok) return workspace;\n const binding: EngineBinding = {\n schemaVersion: ENGINE_BINDING_SCHEMA_VERSION,\n path: localPath,\n };\n if (options.dryRun !== true) await writeEngineBinding(root, binding);\n const status = await engineStatusCommand({ root });\n if (!status.ok) return status;\n return {\n ok: true,\n value: {\n ...status.value,\n next:\n workspace.value.missingBuilds.length === 0\n ? ['forgeax build', 'forgeax capture --backend auto --require-ui']\n : ['pnpm build:engine', 'forgeax engine doctor'],\n },\n };\n}\n\nexport async function engineUnlinkCommand(\n options: EngineBindingCommandOptions = {},\n): Promise<CommandResult<EngineStatusReport>> {\n const root = resolve(options.root ?? process.cwd());\n if (options.dryRun !== true) await rm(bindingFile(root), { force: true });\n return engineStatusCommand({ root });\n}\n\nexport async function engineDoctorCommand(\n options: EngineBindingCommandOptions = {},\n): Promise<CommandResult<EngineStatusReport>> {\n const status = await engineStatusCommand(options);\n if (!status.ok) return status;\n if (\n status.value.projectDependencies === 'workspace' ||\n status.value.projectDependencies === 'mixed'\n ) {\n return {\n ok: false,\n error: {\n code: 'engine-project-workspace-dependency',\n expected: 'the game project to use registry or SDK-resolved dependencies for npm consumers',\n hint: 'This project is a pnpm workspace; use pnpm here, or create a clean SDK game project for npm install.',\n detail: { root: status.value.root, projectDependencies: status.value.projectDependencies },\n },\n };\n }\n if (status.value.diagnostic !== undefined) return { ok: false, error: status.value.diagnostic };\n if (!status.value.healthy) {\n return {\n ok: false,\n error: {\n code:\n status.value.mode === 'local' ? 'engine-local-build-missing' : 'engine-sdk-unresolved',\n expected: 'the selected Engine binding to resolve to built packages',\n hint:\n status.value.mode === 'local'\n ? 'Run pnpm build:engine in the selected Engine checkout, then rerun forgeax engine doctor.'\n : 'Run pnpm install in the game project or select a valid local Engine checkout.',\n detail: { status: status.value },\n },\n };\n }\n return status;\n}\n\nexport function engineBindingFilePath(rootInput = process.cwd()): string {\n return bindingFile(resolve(rootInput));\n}\n\nexport function engineBindingError(cause: unknown): CommandError {\n return commandError(cause, 'engine-binding-failed');\n}\n","import { existsSync } from 'node:fs';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport { dirname, relative, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { audioImporter } from '@forgeax/engine-audio-webaudio/audio-importer';\nimport { fbxImporter } from '@forgeax/engine-fbx';\nimport { fontImporter } from '@forgeax/engine-font/font-importer';\nimport { gltfImporter } from '@forgeax/engine-gltf';\nimport { imageImporter } from '@forgeax/engine-image/image-importer';\nimport { BUILTIN_MESH_ASSETS } from '@forgeax/engine-pack/builtin';\nimport { scanInventory } from '@forgeax/engine-pack/scanner';\nimport { validateCanonicalKitReceipt } from '@forgeax/engine-preview';\nimport { createMaterialPackCooker } from '@forgeax/engine-shader-compiler';\nimport { createStandaloneRuntimeAssetBinding, type Importer } from '@forgeax/engine-types';\nimport { createParticleCodeNativeCookerFromRoots } from '@forgeax/engine-vfx-compiler';\nimport { pluginPack, reloadAssetHost } from '@forgeax/engine-vite-plugin-pack';\nimport { forgeaxShader } from '@forgeax/engine-vite-plugin-shader';\nimport type { InlineConfig, Plugin } from 'vite';\nimport { inspectEngineWorkspace, readEngineBinding } from './engine-binding.js';\nimport type { BootstrapRoot } from './host/base-host.js';\nimport type { ProjectFacts, ProjectPortOptions } from './types.js';\n\ninterface CatalogModule {\n readonly name: string;\n readonly realm: 'host' | 'engine';\n}\n\nexport function ignoreDevKitCatalogPath(path: string): boolean {\n const normalized = path.replace(/\\\\/g, '/');\n return normalized.split('/').includes('shaders');\n}\n\nexport function devKitDdcRoots(projectRoot: string): {\n readonly buildCacheRoot: string;\n readonly projectDdcRoot: string;\n} {\n return {\n buildCacheRoot: resolve(projectRoot, '.forgeax', 'ddc', 'build-cache'),\n projectDdcRoot: resolve(projectRoot, '.forgeax', 'ddc', 'v2'),\n };\n}\n\nfunction isResourcePreviewIgnoredPath(path: string): boolean {\n return (\n ignoreDevKitCatalogPath(path) ||\n path.endsWith('.wgsl.meta.json') ||\n path.endsWith('target-profile.json.meta.json')\n );\n}\n\nfunction isProjectSourceIgnoredPath(path: string): boolean {\n return ignoreDevKitCatalogPath(path) || path.endsWith('.wgsl.meta.json');\n}\n\ninterface CanonicalKitLocation {\n readonly root: string;\n readonly guid: string;\n}\n\n/**\n * Materialize the Engine-owned procedural mesh descriptors missing from a\n * standalone project. The project remains the author of any descriptor it\n * explicitly carries (for example, the game-default template); generated\n * rows fill only the GUID closure required by legacy scenes that reference\n * Engine builtins without embedding a duplicate declaration.\n */\nasync function prepareBuiltinPack(\n projectRoots: readonly string[],\n generated: string,\n ignorePath: (path: string) => boolean,\n): Promise<string | undefined> {\n const inventory = await scanInventory(projectRoots, { ignorePath });\n if (!inventory.ok) return undefined;\n const declared = new Set<string>();\n for (const declaration of inventory.value.declarations.values()) {\n if (declaration.format === 'pack.json') {\n for (const asset of declaration.value.assets) declared.add(asset.guid.toLowerCase());\n continue;\n }\n for (const asset of declaration.value.subAssets) declared.add(asset.guid.toLowerCase());\n }\n const missing = BUILTIN_MESH_ASSETS.filter((asset) => !declared.has(asset.guid.toLowerCase()));\n if (missing.length === 0) return undefined;\n const packPath = resolve(generated, 'engine-builtins.pack.json');\n await writeFile(\n packPath,\n `${JSON.stringify(\n {\n schemaVersion: '2.0.0',\n kind: 'internal-text-package',\n assets: missing.map((asset) => ({\n guid: asset.guid,\n kind: 'mesh',\n payload: { geometry: asset.geometry },\n refs: [],\n artifacts: {},\n })),\n },\n null,\n 2,\n )}\\n`,\n 'utf8',\n );\n return packPath;\n}\n\nconst hostRequire = createRequire(import.meta.url);\n\ninterface EngineWorkspacePackage {\n readonly root: string;\n readonly manifest: Readonly<Record<string, unknown>>;\n}\n\ntype PackageExportValue = string | null | { readonly [key: string]: PackageExportValue };\n\nfunction findEngineWorkspaceRoot(): string | undefined {\n let cursor = dirname(fileURLToPath(import.meta.url));\n for (;;) {\n if (existsSync(resolve(cursor, 'pnpm-workspace.yaml'))) return cursor;\n const parent = dirname(cursor);\n if (parent === cursor) return undefined;\n cursor = parent;\n }\n}\n\nasync function engineWorkspacePackages(\n workspaceRoot = findEngineWorkspaceRoot(),\n): Promise<ReadonlyMap<string, EngineWorkspacePackage>> {\n if (workspaceRoot === undefined) return new Map<string, EngineWorkspacePackage>();\n const packageRoot = resolve(workspaceRoot, 'packages');\n // A generated game is a pnpm workspace too, but it does not own a local\n // `packages/` tree. Its installed Engine packages are resolved by Node;\n // the workspace resolver is only an SDK/source-checkout fallback.\n if (!existsSync(packageRoot)) return new Map<string, EngineWorkspacePackage>();\n const packages = new Map<string, EngineWorkspacePackage>();\n for (const entry of await readdir(packageRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const root = resolve(packageRoot, entry.name);\n try {\n const manifest = JSON.parse(await readFile(resolve(root, 'package.json'), 'utf8')) as unknown;\n if (manifest === null || typeof manifest !== 'object') continue;\n const name = (manifest as { readonly name?: unknown }).name;\n if (typeof name === 'string' && name.startsWith('@forgeax/engine')) {\n packages.set(name, { root, manifest: manifest as Readonly<Record<string, unknown>> });\n }\n } catch {\n // A partial SDK/source checkout may omit an unrelated package manifest. The\n // package remains resolvable from the consumer project when available.\n }\n }\n return packages;\n}\n\nfunction conditionalExport(value: PackageExportValue): string | undefined {\n if (typeof value === 'string') return value;\n if (value === null || Array.isArray(value)) return undefined;\n for (const condition of ['browser', 'import', 'node', 'default']) {\n const candidate = value[condition];\n if (candidate === undefined) continue;\n const selected = conditionalExport(candidate);\n if (selected !== undefined) return selected;\n }\n return undefined;\n}\n\nfunction packageExportTarget(\n manifest: Readonly<Record<string, unknown>>,\n subpath: string,\n): string | undefined {\n const exportsValue = manifest.exports as PackageExportValue | undefined;\n if (exportsValue === undefined) {\n if (subpath.length > 0) return undefined;\n const main = manifest.module ?? manifest.main;\n return typeof main === 'string' ? main : undefined;\n }\n if (typeof exportsValue === 'string' || exportsValue === null) {\n return subpath.length === 0 ? conditionalExport(exportsValue) : undefined;\n }\n const keys = Object.keys(exportsValue);\n const subpathMap = keys.some((key) => key === '.' || key.startsWith('./'));\n if (!subpathMap) return subpath.length === 0 ? conditionalExport(exportsValue) : undefined;\n const requested = subpath.length === 0 ? '.' : `./${subpath}`;\n const exact = exportsValue[requested];\n if (exact !== undefined) return conditionalExport(exact);\n for (const key of keys) {\n const marker = key.indexOf('*');\n if (marker < 0) continue;\n const prefix = key.slice(0, marker);\n const suffix = key.slice(marker + 1);\n if (!requested.startsWith(prefix) || !requested.endsWith(suffix)) continue;\n const replacement = requested.slice(prefix.length, requested.length - suffix.length);\n const exportTarget = exportsValue[key];\n if (exportTarget === undefined) continue;\n const selected = conditionalExport(exportTarget);\n return selected?.replaceAll('*', replacement);\n }\n return undefined;\n}\n\nfunction engineWorkspaceImport(\n source: string,\n packages: ReadonlyMap<string, EngineWorkspacePackage>,\n): string | undefined {\n if (!source.startsWith('@forgeax/engine')) return undefined;\n const separator = source.indexOf('/', '@forgeax/engine'.length);\n const packageName = separator < 0 ? source : source.slice(0, separator);\n const subpath = separator < 0 ? '' : source.slice(separator + 1);\n const packageInfo = packages.get(packageName);\n if (packageInfo === undefined) return undefined;\n const target = packageExportTarget(packageInfo.manifest, subpath);\n if (target === undefined) return undefined;\n const absolute = resolve(packageInfo.root, target);\n const inside = relative(packageInfo.root, absolute);\n if (inside === '..' || inside.startsWith(`..${sep}`) || absolute === packageInfo.root) {\n return undefined;\n }\n return absolute;\n}\n\nasync function createEngineWorkspaceResolver(projectRoot: string): Promise<Plugin | undefined> {\n const binding = await readEngineBinding(projectRoot);\n if (!binding.ok) {\n throw new Error(`${binding.error.code}: ${binding.error.hint}`);\n }\n const localRoot = binding.value?.path;\n if (localRoot !== undefined) {\n const inspected = await inspectEngineWorkspace(localRoot);\n if (!inspected.ok) throw new Error(`${inspected.error.code}: ${inspected.error.hint}`);\n }\n const packages = await engineWorkspacePackages(localRoot);\n if (packages.size === 0) return undefined;\n return {\n name: 'forgeax:devkit-engine-workspace-resolver',\n enforce: 'pre',\n async resolveId(source, importer) {\n const bareSource = source.split('?', 1)[0] ?? source;\n if (!bareSource.startsWith('@forgeax/engine')) return null;\n if (localRoot !== undefined) return engineWorkspaceImport(bareSource, packages);\n try {\n const resolved = await this.resolve(source, importer, { skipSelf: true });\n if (resolved !== null) return resolved;\n } catch {\n // Fall through to the Engine workspace only when the external project\n // has no installed copy of this package.\n }\n return engineWorkspaceImport(bareSource, packages);\n },\n };\n}\n\nasync function consumerEngineAliases(\n projectRoot: string,\n): Promise<readonly { readonly find: string; readonly replacement: string }[]> {\n const root = resolve(projectRoot, 'node_modules', '.pnpm', 'node_modules', '@forgeax');\n try {\n const entries = await readdir(root, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory() && entry.name.startsWith('engine-'))\n .map((entry) => ({\n find: `@forgeax/${entry.name}`,\n replacement: resolve(root, entry.name),\n }))\n .sort((a, b) => a.find.localeCompare(b.find));\n } catch {\n return [];\n }\n}\n\nasync function resolveCanonicalKit(): Promise<CanonicalKitLocation> {\n const packageJson = hostRequire.resolve('@forgeax/engine-preview/package.json');\n const root = resolve(packageJson, '..', 'assets/canonical-kit');\n if (!existsSync(root)) throw new Error(`canonical preview kit root is missing: ${root}`);\n const receiptPath = resolve(root, 'cook-receipt.json');\n const receipt = validateCanonicalKitReceipt(JSON.parse(await readFile(receiptPath, 'utf8')));\n if (!receipt.ok) {\n throw new Error(`${receipt.error.code}: ${receipt.error.detail.field}`);\n }\n const sourcePath = resolve(root, receipt.value.transport.source);\n const metaPath = resolve(root, receipt.value.transport.meta);\n if (!existsSync(sourcePath) || !existsSync(metaPath)) {\n throw new Error('canonical preview kit source and Meta must be package-owned files');\n }\n return { root, guid: receipt.value.source.guid };\n}\n\nfunction moduleSpecifier(from: string, to: string): string {\n const value = relative(from, to).split(sep).join('/');\n return value.startsWith('.') ? value : `./${value}`;\n}\n\nfunction catalogModules(facts: ProjectFacts): CatalogModule[] {\n const modules = new Map<string, CatalogModule>();\n const visit = (\n entries: ProjectFacts['plugins'],\n inheritedRealm: 'host' | 'engine' | 'build' = 'engine',\n ): void => {\n for (const entry of entries) {\n const realm = entry.realm ?? inheritedRealm;\n if (entry.group === true) {\n visit(entry.config as ProjectFacts['plugins'], realm);\n continue;\n }\n if (entry.name.startsWith('cordis:') || realm === 'build') continue;\n const current = modules.get(entry.name);\n if (current !== undefined && current.realm !== realm) {\n throw new Error(`plugin module ${entry.name} is assigned to multiple realms`);\n }\n modules.set(entry.name, { name: entry.name, realm });\n }\n };\n visit(facts.plugins);\n return [...modules.values()];\n}\n\nfunction catalogImport(facts: ProjectFacts, generated: string, name: string): string {\n const specifier = name.startsWith('.')\n ? moduleSpecifier(generated, resolve(facts.root, name))\n : name;\n return `() => import(${JSON.stringify(specifier)})`;\n}\n\ntype JitiLoader = (id: string) => unknown;\ntype JitiFactory = (filename: string, options: { readonly esmResolve: boolean }) => JitiLoader;\n\nfunction projectImporters(facts: ProjectFacts): readonly Importer[] {\n const specs = facts.assetImporters ?? [];\n if (specs.length === 0) return [];\n const createJiti = hostRequire('jiti') as JitiFactory;\n const load = createJiti(resolve(facts.root, 'package.json'), { esmResolve: true });\n return specs.map((spec) => {\n const separator = spec.lastIndexOf('#');\n const moduleSpecifier = separator < 0 ? spec : spec.slice(0, separator);\n const exportName = separator < 0 ? 'default' : spec.slice(separator + 1);\n const modulePath = moduleSpecifier.startsWith('.')\n ? resolve(facts.root, moduleSpecifier)\n : moduleSpecifier;\n const namespace = load(modulePath);\n if (namespace === null || typeof namespace !== 'object') {\n throw new Error(`project-asset-importer-module-invalid: ${spec}`);\n }\n const factory = (namespace as Record<string, unknown>)[exportName];\n if (typeof factory !== 'function') {\n throw new Error(`project-asset-importer-export-missing: ${spec}`);\n }\n const importer = factory();\n if (importer === null || typeof importer !== 'object') {\n throw new Error(`project-asset-importer-invalid: ${spec}`);\n }\n return importer as Importer;\n });\n}\n\nfunction hostSource(\n facts: ProjectFacts,\n bootstrapRoot: BootstrapRoot,\n canonicalEnvironmentGuid?: string,\n): string {\n const generated = resolve(facts.root, '.forgeax', 'generated');\n const plugins =\n bootstrapRoot === 'resource-bootstrap'\n ? []\n : [\n `webAudioPlugin()`,\n `audioPlugin()`,\n `skinningPlugin()`,\n ...(facts.physics === undefined\n ? []\n : [`physicsPlugin('${facts.physics === '2d' ? 'rapier-2d' : 'rapier-3d'}')`]),\n ];\n const bootstrapPlugin =\n facts.bootstrapEntry === undefined\n ? ''\n : `const bootstrapModule = await import(${JSON.stringify(\n moduleSpecifier(generated, resolve(facts.root, facts.bootstrapEntry)),\n )});\nif (typeof bootstrapModule.bootstrap !== 'function') {\n throw new Error('forgeax: project entry must export bootstrap(world, context)');\n}\nawait app.pluginContext.plugin({\n name: 'project-entry-bootstrap',\n inject: ['gameHost'],\n async apply(ctx) {\n if (ctx.gameHost === undefined) throw new Error('forgeax: gameHost unavailable');\n await bootstrapModule.bootstrap(ctx.gameHost.app.world, ctx.gameHost);\n },\n});`;\n return `import { forgeaxBundlerAdapter } from 'virtual:forgeax/bundler';\nimport { createApp, createToolPreviewHost, createToolPreviewRecipe, fitToolPreviewCameraToAabb, gameHostPlugin, replayToolPreviewCapture } from '@forgeax/engine/app';\nimport { createCatalogSource } from '@forgeax/engine/assets-runtime';\nimport {\n createRuntimeAssetImportTransport,\n runtimeBinding,\n} from 'virtual:forgeax/pack-runtime';\nimport { installCatalogLoader, projectPluginEntries } from '@forgeax/engine/plugin/loader';\nimport { audioPlugin } from '@forgeax/engine/audio';\nimport { webAudioPlugin } from '@forgeax/engine/audio-webaudio';\nimport { physicsPlugin } from '@forgeax/engine/physics';\nimport { skinningPlugin } from '@forgeax/engine/skinning';\nimport { createPrimitiveMesh } from '@forgeax/engine/geometry';\nimport { mat4 } from '@forgeax/engine/math';\nimport { CAMERA_PROJECTION_ORTHOGRAPHIC, Camera, DirectionalLight, Materials, MeshFilter, MeshRenderer, Skylight, SkyboxBackground, TONEMAP_NONE, TONEMAP_REINHARD_EXTENDED } from '@forgeax/engine/render';\nimport { Transform } from '@forgeax/engine/scene';\nimport { type SceneAsset } from '@forgeax/engine/types';\nimport { ParticleEffectPlayer, vfxGpuEffectContribution } from '@forgeax/engine/vfx';\nimport { createVfxRuntimeHost } from '@forgeax/engine/vfx-render';\n\nconst pluginCatalog = new Map([\n${catalogModules(facts)\n .map(\n ({ name, realm }) =>\n ` [${JSON.stringify(name)}, { realm: ${JSON.stringify(realm)}, load: ${catalogImport(facts, generated, name)} }],`,\n )\n .join('\\n')}\n]);\nconst pluginEntries = ${JSON.stringify(facts.plugins, null, 2)};\nconst bootstrapRoot = ${JSON.stringify(bootstrapRoot)};\nconst canonicalEnvironmentGuid = ${JSON.stringify(canonicalEnvironmentGuid ?? null)};\nconst resourceValue = new URLSearchParams(location.search).get('forgeax-resource-preview');\nconst resource = resourceValue === null ? undefined : JSON.parse(resourceValue);\nconst previewCameraEntities = new WeakMap();\nconst previewCameraTargets = new WeakMap();\nlet previewWorld;\nconst vfxRuntimeHost = resource?.kind === 'vfx'\n ? createVfxRuntimeHost({\n camera: {\n read(world) {\n const cameraEntity = previewCameraEntities.get(world);\n if (cameraEntity === undefined) return undefined;\n const transform = world.get(cameraEntity, Transform);\n const camera = world.get(cameraEntity, Camera);\n if (!transform.ok || !camera.ok) return undefined;\n const position = new Float32Array(transform.value.pos);\n const target = previewCameraTargets.get(world) ?? [0, 0, 0];\n return {\n position,\n right: new Float32Array([1, 0, 0]),\n up: new Float32Array([0, 1, 0]),\n viewProjection: mat4.computeViewProj(\n mat4.create(),\n position,\n target,\n [0, 1, 0],\n camera.value.fov,\n camera.value.aspect,\n camera.value.near,\n camera.value.far,\n ),\n };\n },\n },\n })\n : undefined;\n\nfunction previewVfxBounds(payload) {\n if (payload?.kind !== 'particle-effect' || payload.program?.emitters?.length === 0) return undefined;\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n for (const emitter of payload.program.emitters) {\n const bounds = emitter.bounds;\n if (bounds?.kind === 'sphere' && Array.isArray(bounds.center) && typeof bounds.radius === 'number') {\n const [x, y, z] = bounds.center;\n if (![x, y, z, bounds.radius].every((value) => typeof value === 'number' && Number.isFinite(value)) || bounds.radius < 0) return undefined;\n minX = Math.min(minX, x - bounds.radius);\n minY = Math.min(minY, y - bounds.radius);\n minZ = Math.min(minZ, z - bounds.radius);\n maxX = Math.max(maxX, x + bounds.radius);\n maxY = Math.max(maxY, y + bounds.radius);\n maxZ = Math.max(maxZ, z + bounds.radius);\n continue;\n }\n if (bounds?.kind === 'aabb' && Array.isArray(bounds.min) && Array.isArray(bounds.max)) {\n const [loX, loY, loZ] = bounds.min;\n const [hiX, hiY, hiZ] = bounds.max;\n if (![loX, loY, loZ, hiX, hiY, hiZ].every((value) => typeof value === 'number' && Number.isFinite(value))) return undefined;\n minX = Math.min(minX, loX);\n minY = Math.min(minY, loY);\n minZ = Math.min(minZ, loZ);\n maxX = Math.max(maxX, hiX);\n maxY = Math.max(maxY, hiY);\n maxZ = Math.max(maxZ, hiZ);\n continue;\n }\n return undefined;\n }\n if (![minX, minY, minZ, maxX, maxY, maxZ].every(Number.isFinite)) return undefined;\n const center = [(minX + maxX) / 2, (minY + maxY) / 2, (minZ + maxZ) / 2];\n const radius = Math.max(1, Math.hypot(maxX - minX, maxY - minY, maxZ - minZ));\n return { aabb: [minX, minY, minZ, maxX, maxY, maxZ], center, radius };\n}\n\nconst canvas = document.querySelector('#app');\nif (!(canvas instanceof HTMLCanvasElement)) throw new Error('forgeax: missing canvas');\nconst resizeCanvas = () => {\n const dpr = Math.min(window.devicePixelRatio || 1, 2);\n const width = Math.max(1, Math.round(canvas.clientWidth * dpr));\n const height = Math.max(1, Math.round(canvas.clientHeight * dpr));\n if (canvas.width !== width) canvas.width = width;\n if (canvas.height !== height) canvas.height = height;\n};\nconst resizeObserver = new ResizeObserver(resizeCanvas);\nresizeObserver.observe(canvas);\nresizeCanvas();\nconst runtimeScopeBinding = runtimeBinding;\nif (runtimeScopeBinding === undefined) {\n throw new Error('forgeax: Vite Pack runtime binding is required in the generated host');\n}\nconst assetCatalog = createCatalogSource({\n url: import.meta.env.DEV\n ? runtimeScopeBinding.catalogUrl\n : new URL('pack-index.json', document.baseURI).href,\n ...(import.meta.env.DEV ? { expectedScope: runtimeScopeBinding } : {}),\n});\nconst bundler = {\n ...forgeaxBundlerAdapter(),\n ...(import.meta.env.DEV\n ? { importTransport: createRuntimeAssetImportTransport(runtimeScopeBinding) }\n : {}),\n};\nconst assetPreparation = new WeakMap();\n\nfunction prepareAssetRegistry(assets) {\n const existing = assetPreparation.get(assets);\n if (existing !== undefined) return existing;\n const pending = (async () => {\n if (import.meta.env.DEV) {\n assets.configureRuntimeBinding(runtimeScopeBinding);\n } else {\n assets.configurePackIndex(new URL('pack-index.json', document.baseURI).href);\n }\n assets.setCatalogSource(assetCatalog);\n if (vfxRuntimeHost !== undefined) {\n assets.installDecoder(vfxGpuEffectContribution.kind, vfxGpuEffectContribution.decoder);\n }\n const catalog = await assets.enumerateCatalog();\n if (!catalog.ok) throw catalog.error;\n })();\n assetPreparation.set(assets, pending);\n return pending;\n}\n\nfunction previewStable(value) {\n if (value instanceof ArrayBuffer) return 'ArrayBuffer:' + JSON.stringify(Array.from(new Uint8Array(value)));\n if (ArrayBuffer.isView(value)) return value.constructor.name + ':' + JSON.stringify(Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength)));\n if (Array.isArray(value)) return '[' + value.map(previewStable).join(',') + ']';\n if (value !== null && typeof value === 'object') {\n const record = value;\n return '{' + Object.keys(record).sort().map((key) => JSON.stringify(key) + ':' + previewStable(record[key])).join(',') + '}';\n }\n return JSON.stringify(value) ?? 'null';\n}\n\nasync function previewDigest(value) {\n const bytes = new TextEncoder().encode(previewStable(value));\n const digest = await crypto.subtle.digest('SHA-256', bytes);\n return 'sha256:' + Array.from(new Uint8Array(digest)).map((byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n\nasync function previewOwnerFacts(assets, resource, payload) {\n if (resource.kind === 'material') {\n const primaryPass = Array.isArray(payload.passes) ? payload.passes[0] : undefined;\n const program = primaryPass?.program?.module;\n const pass = primaryPass?.name;\n return {\n subjectDigest: await previewDigest(payload),\n bindingsDigest: await previewDigest(payload.passes),\n closureDigest: await previewDigest(payload.values ?? payload.passes),\n ...(typeof program === 'string' ? { program } : {}),\n ...(typeof pass === 'string' ? { pass } : {}),\n };\n }\n if (resource.kind === 'mesh') {\n return {\n subjectDigest: await previewDigest(payload),\n vertexDigest: await previewDigest(payload.vertices),\n indexDigest: await previewDigest(payload.indices ?? []),\n submeshDigest: await previewDigest(payload.submeshes),\n aabbDigest: await previewDigest(payload.aabb),\n };\n }\n if (resource.kind === 'texture') {\n const mipCount = typeof payload.mipLevelCount === 'number' ? payload.mipLevelCount : 1;\n const filter = 'linear';\n return {\n subjectDigest: await previewDigest(payload),\n boundDigest: await previewDigest({ width: payload.width, height: payload.height, format: payload.format }),\n uvDigest: await previewDigest({ offset: [0, 0], scale: [1, 1], rotation: 0 }),\n bindingDigest: await previewDigest({ format: payload.format, colorSpace: payload.colorSpace, filter, mipCount }),\n format: payload.format,\n colorSpace: payload.colorSpace,\n filter,\n mipCount,\n dimensions: [payload.width, payload.height],\n payloadClass: 'color',\n };\n }\n return undefined;\n}\n\nasync function prepareProject(app) {\nawait prepareAssetRegistry(app.assets);\npreviewWorld = app.world;\nconst assets = app.assets;\nlet canonicalEnvironment;\nif (resource !== undefined) {\n if (resource.kind !== 'texture') {\n if (canonicalEnvironmentGuid === null) throw new Error('canonical preview environment is unavailable');\n const environment = await assets.loadByGuid(assets.parseGuid(canonicalEnvironmentGuid));\n if (!environment.ok) throw environment.error;\n if (environment.value.kind !== 'equirect') {\n throw new Error(\\`canonical preview environment expected equirect, received \\${environment.value.kind}\\`);\n }\n if (environment.value.width <= 0 || environment.value.height <= 0 || environment.value.data.byteLength === 0) {\n throw new Error('canonical preview environment must provide decoded equirect pixels');\n }\n canonicalEnvironment = app.world.allocSharedRef('EquirectAsset', environment.value);\n }\n if (resource.kind === 'vfx') {\n if (vfxRuntimeHost === undefined) throw new Error('VFX preview host was not created');\n const attached = await vfxRuntimeHost.attachWorld({ world: app.world, assets });\n if (!attached.ok) throw attached.error;\n }\n const loaded = await assets.loadByGuid(assets.parseGuid(resource.guid));\n if (!loaded.ok) throw loaded.error;\n const payload = loaded.value;\n if (resource.kind === 'vfx' && payload.kind !== 'particle-effect') {\n throw new Error(\\`VFX preview expected ParticleEffectAsset, received \\${payload.kind}\\`);\n }\n const vfxBounds = resource.kind === 'vfx' ? previewVfxBounds(payload) : undefined;\n if (resource.kind === 'vfx' && vfxBounds === undefined) {\n throw new Error('VFX preview owner did not publish finite emitter bounds');\n }\n const meshMaterialHandles = resource.kind === 'mesh' && payload.kind === 'mesh'\n ? await Promise.all(payload.materialSlots.map(async (slot) => {\n if (slot.defaultMaterial === undefined) return 0;\n const material = await assets.loadByGuid(assets.parseGuid(slot.defaultMaterial));\n if (!material.ok) throw material.error;\n if (material.value.kind !== 'material') {\n throw new Error('mesh material slot resolved to a non-material asset');\n }\n return app.world.allocSharedRef('MaterialAsset', material.value);\n }))\n : undefined;\n const meshHandle = resource.kind === 'mesh' && payload.kind === 'mesh'\n ? app.world.allocSharedRef('MeshAsset', payload)\n : app.world.internSharedRef(\n 'MeshAsset',\n createPrimitiveMesh(resource.kind === 'texture' ? 'quad' : 'sphere').unwrap(),\n );\n const textureHandle = resource.kind === 'texture' && payload.kind === 'texture'\n ? app.world.allocSharedRef('TextureAsset', payload)\n : undefined;\n if (textureHandle !== undefined && payload.kind === 'texture') {\n const bytes = payload.data instanceof Uint8ClampedArray\n ? new Uint8Array(payload.data.buffer, payload.data.byteOffset, payload.data.byteLength)\n : payload.data;\n const uploaded = await app.renderer.store.uploadTexture(textureHandle, payload, {\n bytes,\n width: payload.width,\n height: payload.height,\n mime: 'image/png',\n colorSpace: payload.colorSpace,\n mipmap: payload.mipmap,\n });\n if (!uploaded.ok) throw uploaded.error;\n }\n const materialPayload = resource.kind === 'texture' && payload.kind === 'texture'\n ? Materials.unlit([1, 1, 1, 1], { baseColorTexture: textureHandle })\n : resource.kind === 'material' && payload.kind === 'material'\n ? payload\n : undefined;\n const materialHandle = materialPayload === undefined\n ? undefined\n : app.world.allocSharedRef('MaterialAsset', materialPayload);\n const materialBindings = resource.kind === 'mesh'\n ? meshMaterialHandles\n : materialHandle === undefined\n ? undefined\n : [materialHandle];\n const rawAabb = payload.kind === 'mesh' ? payload.aabb : undefined;\n const aabb = rawAabb !== undefined && (Array.isArray(rawAabb) || ArrayBuffer.isView(rawAabb)) && rawAabb.length === 6\n ? Array.from(rawAabb)\n : resource.kind === 'mesh' && payload.kind === 'mesh'\n ? (() => { throw new Error('mesh owner did not publish a finite AABB'); })()\n : [-1, -1, -1, 1, 1, 1];\n const meshFrame = resource.kind === 'mesh'\n ? fitToolPreviewCameraToAabb(aabb, { aspect: 1, fov: Math.PI / 4 })\n : undefined;\n const textureWidth = resource.kind === 'texture' && payload.kind === 'texture' && typeof payload.width === 'number'\n ? Math.max(1, payload.width)\n : 1;\n const textureHeight = resource.kind === 'texture' && payload.kind === 'texture' && typeof payload.height === 'number'\n ? Math.max(1, payload.height)\n : 1;\n const textureAspect = textureWidth / textureHeight;\n const textureScale = textureAspect >= 1\n ? [textureAspect, 1, 1]\n : [1, 1 / textureAspect, 1];\n const center = meshFrame?.center ?? vfxBounds?.center ?? [(aabb[0] + aabb[3]) / 2, (aabb[1] + aabb[4]) / 2, (aabb[2] + aabb[5]) / 2];\n const radius = meshFrame?.radius ?? vfxBounds?.radius ?? Math.max(1, Math.hypot(aabb[3] - aabb[0], aabb[4] - aabb[1], aabb[5] - aabb[2]));\n const texturePreview = resource.kind === 'texture';\n if (resource.kind === 'vfx') {\n const effect = app.world.allocSharedRef('ParticleEffectAsset', payload);\n app.world.spawn(\n { component: Transform, data: { pos: center } },\n { component: ParticleEffectPlayer, data: { effect, playing: true, seed: 0, timeScale: 1 } },\n );\n } else {\n app.world.spawn(\n { component: Transform, data: { pos: center, ...(texturePreview ? { scale: textureScale } : {}) } },\n { component: MeshFilter, data: { assetHandle: meshHandle } },\n { component: MeshRenderer, data: materialBindings === undefined ? {} : { materials: materialBindings } },\n );\n }\n const cameraData = texturePreview\n ? {\n fov: 0,\n aspect: 1,\n near: 0.01,\n far: 100,\n projection: CAMERA_PROJECTION_ORTHOGRAPHIC,\n left: -textureScale[0] * 0.6,\n right: textureScale[0] * 0.6,\n bottom: -textureScale[1] * 0.6,\n top: textureScale[1] * 0.6,\n tonemap: TONEMAP_NONE,\n antialias: 0,\n bloom: 0,\n clearColor: [0, 0, 0, 1],\n }\n : {\n fov: Math.PI / 4,\n aspect: 1,\n near: meshFrame?.near ?? 0.01,\n far: meshFrame?.far ?? radius * 8,\n tonemap: TONEMAP_REINHARD_EXTENDED,\n };\n const cameraPosition = texturePreview\n ? [0, 0, 5]\n : [center[0], center[1], center[2] + (meshFrame?.distance ?? radius * 2.5)];\n const cameraEntity = app.world.spawn({ component: Camera, data: cameraData }, { component: Transform, data: { pos: cameraPosition } }).unwrap();\n previewCameraEntities.set(app.world, cameraEntity);\n previewCameraTargets.set(app.world, center);\n if (!texturePreview) {\n app.world.spawn({ component: DirectionalLight, data: { direction: [-0.5, -1, -0.3], intensity: 2 } });\n if (canonicalEnvironment === undefined) throw new Error('canonical preview environment was not loaded');\n app.world.spawn({ component: Skylight, data: { equirect: canonicalEnvironment } });\n app.world.spawn({ component: SkyboxBackground, data: { equirect: canonicalEnvironment } });\n }\n const ownerFacts = await previewOwnerFacts(assets, resource, payload);\n const publishedAsset = resource.kind === 'mesh' && payload.kind === 'mesh' && payload.aabb !== undefined\n ? { ...payload, aabb: Array.from(payload.aabb) }\n : payload;\n return {\n kind: resource.kind,\n guid: resource.guid,\n asset: publishedAsset,\n ...(ownerFacts === undefined ? {} : { ownerFacts }),\n };\n}\nif (bootstrapRoot === 'resource-bootstrap') return;\nlet defaultScene;\nlet defaultSceneRoot;\nconst defaultSceneGuid = ${JSON.stringify(facts.defaultScene)};\nif (defaultSceneGuid !== undefined) {\n const loaded = await assets.loadByGuid<SceneAsset>(assets.parseGuid(defaultSceneGuid));\n if (!loaded.ok) throw loaded.error;\n defaultScene = loaded.value;\n const handle = app.world.allocSharedRef('SceneAsset', loaded.value);\n const instantiated = assets.instantiate<SceneAsset>(handle, app.world);\n if (!instantiated.ok) throw instantiated.error;\n defaultSceneRoot = instantiated.value;\n}\nconst uiRoot = document.querySelector('#game-ui');\nawait app.pluginContext.plugin(gameHostPlugin({\n app,\n assets,\n canvas,\n renderer: app.renderer,\n ...(defaultScene === undefined ? {} : { defaultScene }),\n ...(defaultSceneRoot === undefined ? {} : { defaultSceneRoot }),\n uiRoot: uiRoot instanceof HTMLElement ? uiRoot : document.body,\n setPointerLockAllowed: (allowed) => app.input?.setPointerLockAllowed?.(allowed),\n}));\nconst { loader: pluginLoader } = await installCatalogLoader(app.pluginContext, pluginCatalog, 'engine');\nawait pluginLoader.root.update(projectPluginEntries(pluginEntries, 'engine'));\nawait pluginLoader.await();\n}\n\nconst query = new URLSearchParams(location.search);\nconst recipeValue = query.get('forgeax-tool-recipe');\nconst snapshotValue = query.get('forgeax-tool-snapshot');\nconst runIdValue = query.get('forgeax-tool-run-id');\nif (query.has('forgeax-tool-replay')) {\n globalThis.__forgeaxToolReplayHost = {\n ready: true,\n async run(capture) {\n const result = await replayToolPreviewCapture(capture);\n return result.ok ? { ok: true, result: result.value } : { ok: false, error: result.error };\n },\n };\n} else if (recipeValue !== null) {\n const previewRecipe = createToolPreviewRecipe(JSON.parse(recipeValue));\n const host = await createToolPreviewHost({\n ...(runIdValue === null ? {} : { runId: runIdValue }),\n recipe: previewRecipe,\n snapshot: JSON.parse(snapshotValue ?? 'null'),\n ...(resource === undefined ? {} : { resource }),\n canvas,\n app: {\n plugins: [${plugins.join(', ')}],\n ...(vfxRuntimeHost === undefined ? {} : { features: [vfxRuntimeHost.feature] }),\n },\n bundler,\n prepare: prepareProject,\n collectResourceFacts(app, current) {\n if (current === undefined) return current;\n if (resource?.kind !== 'vfx') {\n if (resource?.kind === 'material' || resource?.kind === 'mesh' || resource?.kind === 'texture') {\n if (app.renderer.drawCalls <= 0) return current;\n if (resource.kind === 'mesh') {\n const asset = current.asset;\n const aabb = asset?.aabb;\n const submeshes = asset?.submeshes;\n const materialSlots = asset?.materialSlots;\n if (!Array.isArray(aabb) || aabb.length !== 6 || !Array.isArray(submeshes) || !Array.isArray(materialSlots)) {\n return current;\n }\n return {\n ...current,\n observation: {\n ...current.ownerFacts,\n aabb,\n submeshCount: submeshes.length,\n materialSlotCount: materialSlots.length,\n },\n };\n }\n return {\n ...current,\n observation: current.ownerFacts,\n };\n }\n return current;\n }\n if (vfxRuntimeHost === undefined) return current;\n const hostInspection = vfxRuntimeHost.inspect(app.world);\n const player = hostInspection?.players[0];\n const renderObservation = vfxRuntimeHost.feature.inspect();\n if (player === undefined || renderObservation.frameNumber < 0) {\n return current;\n }\n const bounds = previewVfxBounds(current.asset);\n if (bounds === undefined) return current;\n const emitterDigest = JSON.stringify(player.emitters.map(({ id, module, capacity }) => ({ id, module, capacity })));\n const sampleDigest = JSON.stringify(player.emitters.map(({ id, schedule }) => ({ id, schedule })));\n const boundsDigest = JSON.stringify(player.emitters.map(({ id, bounds: emitterBounds }) => ({ id, bounds: emitterBounds })));\n const computeDigest = player.programFingerprint;\n const indirectDigest = JSON.stringify(player.emitters.map(({ id, renderers }) => ({ id, renderers: renderers.map(({ kind, enabled }) => ({ kind, enabled })) })));\n return {\n ...current,\n observation: {\n subjectDigest: current.asset.programFingerprint,\n programFingerprint: player.programFingerprint,\n emitterDigest,\n sampleDigest,\n boundsDigest,\n computeDigest,\n indirectDigest,\n authoredBounds: bounds.aabb,\n seed: player.seed,\n fixedDelta: player.fixedDelta,\n timelineFrames: previewRecipe.frames,\n dispatches: renderObservation.dispatches,\n indirectDraws: renderObservation.indirectDraws,\n subjectOutputs: renderObservation.subjectOutputs,\n },\n };\n },\n onDispose: async () => {\n if (vfxRuntimeHost === undefined || previewWorld === undefined) return;\n const detached = await vfxRuntimeHost.detachWorld({ world: previewWorld });\n if (!detached.ok) throw detached.error;\n },\n executeAction(action) {\n return !globalThis.dispatchEvent(new CustomEvent('forgeax-tool-action', {\n detail: action,\n cancelable: true,\n }));\n },\n });\n if (!host.ok) {\n globalThis.__forgeaxToolHost = {\n ready: true,\n capture: async () => ({ ok: false, error: host.error }),\n run: async () => ({ ok: false, error: host.error }),\n dispose: async () => undefined,\n };\n } else {\n globalThis.__forgeaxToolHost = {\n ready: true,\n async capture() {\n const result = await host.value.capture();\n return result.ok ? { ok: true, result: result.value } : { ok: false, error: result.error };\n },\n async run() {\n const result = await host.value.run();\n return result.ok ? { ok: true, result: result.value } : { ok: false, error: result.error };\n },\n dispose: () => host.value.dispose(),\n };\n window.addEventListener('pagehide', () => void host.value.dispose(), { once: true });\n }\n} else {\n // WebDriver/headless browsers cannot satisfy the trusted-gesture requirement\n // for pointer lock. Keep the game running and let its keyboard fallback own\n // camera input; real browser users retain the normal click-to-lock path.\n const pointerLockAllowed =\n typeof navigator !== 'undefined' && navigator.webdriver === true ? () => false : undefined;\n const result = await createApp(\n canvas,\n {\n plugins: [${plugins.join(', ')}],\n ...(pointerLockAllowed === undefined ? {} : { pointerLockAllowed }),\n },\n bundler,\n );\n if (!result.ok) throw result.error;\n const app = result.value;\n await prepareProject(app);\n${bootstrapPlugin}\n app.start().unwrap();\n let disposed = false;\n const dispose = () => {\n if (disposed) return;\n disposed = true;\n resizeObserver.disconnect();\n void app.dispose();\n };\n window.addEventListener('pagehide', dispose);\n}\n`;\n}\n\nfunction escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (character) => {\n switch (character) {\n case '&':\n return '&';\n case '<':\n return '<';\n case '>':\n return '>';\n case '\"':\n return '"';\n case \"'\":\n return ''';\n }\n return character;\n });\n}\n\nfunction htmlSource(title: string): string {\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <link rel=\"icon\" href=\"data:,\" />\n <title>${escapeHtml(title)}</title>\n <style>\n html, body, #app-shell, #app { width: 100%; height: 100%; margin: 0; overflow: hidden; }\n body { background: #05070b; }\n #app { display: block; }\n #app-shell { position: relative; }\n #game-ui { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }\n #game-ui > * { pointer-events: auto; }\n #forgeax-fatal { position: fixed; inset: 0; z-index: 2147483647; display: none; place-items: center; padding: 24px; background: #0b0d10; color: #e6e6e6; font: 15px/1.6 system-ui, sans-serif; text-align: center; white-space: pre-wrap; }\n </style>\n </head>\n <body>\n <div id=\"app-shell\"><canvas id=\"app\"></canvas><div id=\"game-ui\"></div></div><div id=\"forgeax-fatal\" role=\"alert\"></div>\n <script>\n (() => {\n const appendStructuredFailure = (value, prefix, depth, seen, lines) => {\n if (value === null || typeof value !== 'object' || depth > 3) return;\n if (seen.has(value)) {\n lines.push((prefix || 'cause') + ': [circular]');\n return;\n }\n seen.add(value);\n const record = value;\n const name = typeof record.name === 'string' && record.name.length > 0\n ? record.name\n : undefined;\n const code = typeof record.code === 'string' && record.code.length > 0\n ? record.code\n : undefined;\n const message = typeof record.message === 'string' && record.message.length > 0\n ? record.message\n : undefined;\n if (name !== undefined || code !== undefined || message !== undefined) {\n const identity = [name || 'Error', code].filter(Boolean).join(' ');\n lines.push((prefix ? prefix + ': ' : '') + identity + (message ? ': ' + message : ''));\n }\n for (const key of ['expected', 'hint', 'reason']) {\n if (typeof record[key] === 'string' && record[key].length > 0) {\n lines.push((prefix ? prefix + '.' : '') + key + ': ' + record[key]);\n }\n }\n for (const key of ['cause', 'detail', 'webgpuError', 'wgpuError', 'error']) {\n const nested = record[key];\n const nestedPrefix = (prefix ? prefix + '.' : '') + key;\n if (nested !== null && typeof nested === 'object') {\n appendStructuredFailure(nested, nestedPrefix, depth + 1, seen, lines);\n } else if (typeof nested === 'string' && nested.length > 0) {\n lines.push(nestedPrefix + ': ' + nested);\n }\n }\n };\n const formatStartupFailure = (reason) => {\n if (reason !== null && typeof reason === 'object') {\n const lines = [];\n appendStructuredFailure(reason, '', 0, new Set(), lines);\n if (lines.length > 0) return lines.join('\\\\n');\n try {\n return JSON.stringify(reason) || 'Unknown structured startup failure';\n } catch {\n return 'Unserializable structured startup failure';\n }\n }\n return String(reason ?? 'Unknown startup failure');\n };\n const show = (reason) => {\n const notice = document.querySelector('#forgeax-fatal');\n if (!(notice instanceof HTMLElement)) return;\n let message = formatStartupFailure(reason);\n if (/webgpu|adapter-unavailable|no usable (rendering )?backend/i.test(message)) {\n message += '\\\\n\\\\nRenderer diagnosis: ForgeaX supports browser WebGPU and a wgpu/WebGL2 fallback. This failure alone does not prove that WebGPU is unsupported; use the structured code, hint, and nested backend causes above.';\n }\n notice.textContent = 'ForgeaX game failed to start.\\\\n' + message;\n notice.style.display = 'grid';\n };\n window.addEventListener('error', (event) => show(event.error ?? event.message));\n window.addEventListener('unhandledrejection', (event) => show(event.reason));\n })();\n </script>\n <script type=\"module\" src=\"./main.ts\"></script>\n </body>\n</html>\n`;\n}\n\nexport async function createViteConfig(\n facts: ProjectFacts,\n command: 'serve' | 'build',\n base = '/',\n options: {\n readonly bootstrapRoot?: BootstrapRoot;\n readonly outDir?: string;\n readonly server?: ProjectPortOptions;\n } = {},\n): Promise<InlineConfig> {\n const bootstrapRoot = options.bootstrapRoot ?? 'project-bootstrap';\n // The canonical kit ships the engine's default environment (sky.hdr equirect).\n // Authored scenes (e.g. the default game template) reference it as a Skylight /\n // SkyboxBackground dependency, so a self-contained standalone build must catalog\n // it on the game path too — not only the tool-preview (resource-bootstrap) path.\n const canonicalKit = await resolveCanonicalKit();\n const generated = resolve(facts.root, '.forgeax', 'generated');\n await mkdir(generated, { recursive: true });\n const projectRoots = facts.assetRoots.map((root) => resolve(facts.root, root));\n const ignorePath =\n bootstrapRoot === 'resource-bootstrap'\n ? isResourcePreviewIgnoredPath\n : isProjectSourceIgnoredPath;\n const builtinPack = await prepareBuiltinPack(projectRoots, generated, ignorePath);\n await Promise.all([\n writeFile(resolve(generated, 'index.html'), htmlSource(facts.name)),\n writeFile(resolve(generated, 'main.ts'), hostSource(facts, bootstrapRoot, canonicalKit?.guid)),\n ]);\n const roots = [\n ...projectRoots,\n ...(builtinPack === undefined ? [] : [builtinPack]),\n ...(canonicalKit === undefined ? [] : [canonicalKit.root]),\n ];\n const importers = [...projectImporters(facts)];\n const runtimeBinding = createStandaloneRuntimeAssetBinding(facts.id);\n const engineWorkspaceResolver = await createEngineWorkspaceResolver(facts.root);\n const consumerAliases = await consumerEngineAliases(facts.root);\n const plugins: Plugin[] = [\n ...(engineWorkspaceResolver === undefined ? [] : [engineWorkspaceResolver]),\n forgeaxShader() as Plugin,\n pluginPack({\n roots,\n runtimeBinding,\n ddc: devKitDdcRoots(facts.root),\n refresh: command === 'serve' ? reloadAssetHost() : undefined,\n importers: [\n audioImporter,\n imageImporter,\n fbxImporter,\n gltfImporter,\n fontImporter,\n ...importers,\n ],\n cookers: [createMaterialPackCooker(roots), createParticleCodeNativeCookerFromRoots(roots)],\n ignorePath,\n }) as Plugin,\n ];\n return {\n root: generated,\n base,\n configFile: false,\n publicDir:\n facts.assetPublicDir === undefined ? false : resolve(facts.root, facts.assetPublicDir),\n plugins,\n resolve: {\n alias: consumerAliases,\n dedupe: ['@forgeax/engine'],\n },\n server: { ...options.server, fs: { allow: [facts.root, ...roots] } },\n build: {\n target: 'esnext',\n outDir: options.outDir ?? resolve(facts.root, 'dist'),\n emptyOutDir: true,\n rollupOptions: { input: resolve(generated, 'index.html') },\n },\n };\n}\n","import type { GameProjectPluginEntry } from '@forgeax/engine-project';\n\nexport type ForgeaXCommand =\n | 'new'\n | 'init'\n | 'doctor'\n | 'test'\n | 'dev'\n | 'build'\n | 'package'\n | 'capture'\n | 'engine.status'\n | 'engine.use-local'\n | 'engine.unlink'\n | 'engine.doctor'\n | 'serve'\n | 'preview'\n | 'plugin.install'\n | 'plugin.uninstall'\n | 'skill.install'\n | 'skill.verify'\n | 'sdk.install'\n | 'asset.add'\n | 'asset.verify'\n | 'asset.inspect'\n | 'asset.list'\n | 'shader.check'\n | 'list'\n | 'describe'\n | 'run'\n | 'exec';\n\nexport interface CommandError {\n readonly code: string;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n}\n\nexport type CommandResult<T> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: CommandError };\n\nexport interface CommandEnvelope<T = unknown> {\n readonly schemaVersion: '1.0.0';\n readonly command: ForgeaXCommand;\n readonly ok: boolean;\n readonly value?: T;\n readonly error?: CommandError;\n}\n\nexport interface ProjectFacts {\n readonly root: string;\n readonly id: string;\n readonly name: string;\n readonly entry: string;\n readonly bootstrapEntry?: string;\n readonly plugins: readonly GameProjectPluginEntry[];\n readonly physics?: '2d' | '3d';\n readonly defaultScene?: string;\n readonly assetRoots: readonly string[];\n readonly assetImporters?: readonly string[];\n readonly assetPublicDir?: string;\n readonly packageJson: Readonly<Record<string, unknown>>;\n}\n\nexport interface ProjectCommandOptions {\n readonly root?: string;\n readonly json?: boolean;\n readonly port?: number;\n}\n\nexport interface ProjectPortOptions {\n readonly port: number;\n readonly strictPort: boolean;\n}\n\nexport function parseProjectPortOption(\n value: string | undefined,\n provided: boolean,\n): CommandResult<number | undefined> {\n if (!provided) return { ok: true, value: undefined };\n if (value !== undefined && /^(0|[1-9]\\d*)$/.test(value)) {\n const port = Number(value);\n if (Number.isSafeInteger(port) && port <= 65_535) return { ok: true, value: port };\n }\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: '--port to be 0 or an integer from 1 to 65535',\n hint: 'Omit --port for strict 5173, pass a positive port for a strict binding, or pass 0 for an OS-assigned port.',\n detail: { option: '--port', received: value ?? null },\n },\n };\n}\n\nexport function resolveProjectPort(port: number | undefined): ProjectPortOptions {\n return { port: port ?? 5173, strictPort: port !== 0 };\n}\n\nexport interface InitOptions extends ProjectCommandOptions {\n readonly dryRun?: boolean;\n readonly install?: boolean;\n}\n\nexport interface NewOptions extends ProjectCommandOptions {\n readonly dryRun?: boolean;\n readonly template?: string;\n}\n\nexport interface BuildOptions extends ProjectCommandOptions {\n readonly base?: string;\n readonly outDir?: string;\n}\n\nexport interface PackageOptions extends ProjectCommandOptions {\n readonly output?: string;\n}\n\nexport type CaptureBackend = 'auto' | 'software' | 'hardware';\n\nexport interface BrowserCaptureOptions extends ProjectCommandOptions {\n /** Prefer a rendering lane, or let the browser choose and report it. */\n readonly backend?: CaptureBackend;\n /** Backwards-compatible alias for `backend: 'software'`. */\n readonly software?: boolean;\n readonly output?: string;\n readonly browser?: string;\n readonly width?: number;\n readonly height?: number;\n readonly waitMs?: number;\n readonly requireUi?: boolean;\n readonly deterministic?: boolean;\n readonly headless?: boolean;\n}\n\n/** @deprecated Use BrowserCaptureOptions with `backend: 'software'`. */\nexport interface SoftwareCaptureOptions extends BrowserCaptureOptions {\n readonly software: true;\n readonly backend?: 'software';\n}\n\nexport interface AssetAddOptions extends ProjectCommandOptions {\n readonly path: string;\n readonly dryRun?: boolean;\n}\n\nexport interface AssetInspectOptions extends ProjectCommandOptions {\n readonly subject: string;\n}\n\nexport interface ShaderCheckOptions extends ProjectCommandOptions {\n readonly path?: string;\n}\n\nexport interface OperationCommandOptions extends ProjectCommandOptions {\n readonly id?: string;\n readonly args?: string;\n readonly input?: string;\n readonly program?: string;\n}\n\nexport interface PluginInstallOptions extends ProjectCommandOptions {\n readonly id: string;\n readonly module: string;\n readonly realm?: 'host' | 'engine' | 'build';\n readonly dependency?: string;\n readonly dryRun?: boolean;\n}\n\nexport interface PluginUninstallOptions extends ProjectCommandOptions {\n readonly id: string;\n readonly dependency?: string;\n readonly dryRun?: boolean;\n}\n","import { readdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { basename, extname, resolve } from 'node:path';\nimport { runCliGltf } from '@forgeax/engine-gltf/cli-gltf';\nimport { scanEntries } from '@forgeax/engine-pack/cli-asset';\nimport { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { commandError, readProjectFacts } from './project.js';\nimport type {\n AssetAddOptions,\n AssetInspectOptions,\n CommandError,\n CommandResult,\n ProjectCommandOptions,\n} from './types.js';\n\nconst imageExtensions = new Set(['.png', '.jpg', '.jpeg', '.hdr']);\nconst gltfExtensions = new Set(['.gltf', '.glb']);\n\nfunction failure(error: CommandError): CommandResult<never> {\n return { ok: false, error };\n}\n\nasync function sourcesAt(path: string): Promise<string[]> {\n const info = await stat(path);\n if (info.isFile()) return [path];\n if (!info.isDirectory()) return [];\n const output: string[] = [];\n const entries = await readdir(path, { withFileTypes: true });\n for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {\n if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')\n continue;\n const child = resolve(path, entry.name);\n if (entry.isDirectory()) output.push(...(await sourcesAt(child)));\n else if (entry.isFile() && !entry.name.endsWith('.meta.json')) output.push(child);\n }\n return output;\n}\n\nasync function addImage(sourcePath: string, dryRun: boolean): Promise<CommandResult<unknown>> {\n const metaPath = `${sourcePath}.meta.json`;\n const source = basename(sourcePath);\n let existing: unknown;\n try {\n existing = JSON.parse(await readFile(metaPath, 'utf8')) as unknown;\n } catch (cause) {\n if ((cause as NodeJS.ErrnoException).code !== 'ENOENT') {\n return failure({\n code: 'asset-meta-unreadable',\n expected: 'an absent or readable JSON sidecar',\n hint: 'Repair the existing sidecar before adding the source again.',\n detail: { source: sourcePath, metaPath },\n });\n }\n }\n if (existing !== undefined) {\n const value = existing as {\n importer?: unknown;\n source?: unknown;\n subAssets?: readonly { guid?: unknown; kind?: unknown }[];\n };\n const row = value.subAssets?.[0];\n if (\n value.importer !== 'image' ||\n value.source !== source ||\n value.subAssets?.length !== 1 ||\n typeof row?.guid !== 'string' ||\n row.kind !== 'texture'\n ) {\n return failure({\n code: 'asset-meta-conflict',\n expected: 'the existing sidecar to describe this image source and one texture identity',\n hint: 'Resolve the sidecar conflict explicitly; DevKit will not replace authored identity.',\n detail: { source: sourcePath, metaPath },\n });\n }\n return { ok: true, value: { source: sourcePath, metaPath, guid: row.guid, reused: true } };\n }\n const guid = AssetGuid.format(AssetGuid.random());\n const linear = extname(sourcePath).toLowerCase() === '.hdr';\n const meta = {\n schemaVersion: '1.0.0',\n kind: 'external-asset-package',\n importer: 'image',\n source,\n importSettings: {\n colorSpace: linear ? 'linear' : 'srgb',\n mipmap: true,\n addressMode: 'repeat',\n filterMode: 'linear',\n },\n subAssets: [{ guid, sourceIndex: 0, kind: 'texture', sourceKey: 'texture' }],\n } as const;\n if (!dryRun) await writeFile(metaPath, `${JSON.stringify(meta, null, 2)}\\n`, { flag: 'wx' });\n return { ok: true, value: { source: sourcePath, metaPath, guid, reused: false, dryRun } };\n}\n\nasync function addGltf(sourcePath: string, dryRun: boolean): Promise<CommandResult<unknown>> {\n if (dryRun) {\n const exists = await stat(`${sourcePath}.meta.json`)\n .then(() => true)\n .catch(() => false);\n return {\n ok: true,\n value: {\n source: sourcePath,\n metaPath: `${sourcePath}.meta.json`,\n reused: exists,\n dryRun: true,\n },\n };\n }\n const stdout: string[] = [];\n const stderr: string[] = [];\n const exitCode = await runCliGltf(['import', sourcePath], {\n stdoutWrite: (line) => stdout.push(line),\n stderrWrite: (line) => stderr.push(line),\n });\n if (exitCode !== 0) {\n try {\n return failure(JSON.parse(stderr.at(-1) ?? '') as CommandError);\n } catch {\n return failure({\n code: 'asset-add-failed',\n expected: 'the glTF producer to create or reuse a valid sidecar',\n hint: 'Inspect the glTF source and its external references.',\n detail: { source: sourcePath, diagnostic: stderr.join('\\n') },\n });\n }\n }\n return { ok: true, value: { source: sourcePath, metaPath: `${sourcePath}.meta.json` } };\n}\n\nexport async function assetAddCommand(options: AssetAddOptions): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const target = resolve(facts.value.root, options.path);\n try {\n const sources = await sourcesAt(target);\n const supported = sources.filter((source) => {\n const extension = extname(source).toLowerCase();\n return imageExtensions.has(extension) || gltfExtensions.has(extension);\n });\n if (supported.length === 0) {\n return failure({\n code: 'source-package-importer-missing',\n expected: 'a .png, .jpg, .jpeg, .hdr, .gltf, or .glb source',\n hint: 'Use a supported built-in importer or add an explicit producer before adding this source.',\n detail: { target },\n });\n }\n const assets: unknown[] = [];\n for (const source of supported) {\n const result = imageExtensions.has(extname(source).toLowerCase())\n ? await addImage(source, options.dryRun === true)\n : await addGltf(source, options.dryRun === true);\n if (!result.ok) return result;\n assets.push(result.value);\n }\n return { ok: true, value: { root: facts.value.root, assets, dryRun: options.dryRun === true } };\n } catch (cause) {\n return failure(commandError(cause, 'asset-add-failed'));\n }\n}\n\nasync function entries(options: ProjectCommandOptions) {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const stdout: string[] = [];\n const stderr: string[] = [];\n const result = await scanEntries(\n facts.value.assetRoots.map((root) => resolve(facts.value.root, root)),\n { stdoutWrite: (line) => stdout.push(line), stderrWrite: (line) => stderr.push(line) },\n );\n if (!result.ok) {\n try {\n return failure(JSON.parse(stderr.at(-1) ?? '') as CommandError);\n } catch {\n return failure({\n code: 'asset-authority-invalid',\n expected: 'all asset roots and sidecars to pass the pack scanner',\n hint: 'Repair the first invalid asset authority reported by the scanner.',\n detail: { diagnostic: stderr.join('\\n') },\n });\n }\n }\n return { ok: true as const, value: { facts: facts.value, entries: result.value } };\n}\n\nexport async function assetListCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const result = await entries(options);\n if (!result.ok) return result;\n return { ok: true, value: result.value.entries };\n}\n\nexport async function assetVerifyCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const result = await entries(options);\n if (!result.ok) return result;\n return {\n ok: true,\n value: { root: result.value.facts.root, assetCount: result.value.entries.length },\n };\n}\n\nexport async function assetInspectCommand(\n options: AssetInspectOptions,\n): Promise<CommandResult<unknown>> {\n const result = await entries(options);\n if (!result.ok) return result;\n const subject = options.subject.toLowerCase();\n const matches = result.value.entries.filter(\n (entry) => entry.guid.toLowerCase() === subject || entry.name?.toLowerCase() === subject,\n );\n if (matches.length !== 1) {\n return failure({\n code: matches.length === 0 ? 'asset-not-found' : 'asset-subject-ambiguous',\n expected: 'the GUID or name to resolve to exactly one asset',\n hint:\n matches.length === 0\n ? 'Run asset list and choose a known subject.'\n : 'Use the stable GUID.',\n detail: { subject: options.subject, matches },\n });\n }\n return { ok: true, value: matches[0] };\n}\n","{\n \"name\": \"@forgeax/engine-devkit\",\n \"version\": \"0.0.0\",\n \"private\": false,\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"sideEffects\": false,\n \"description\": \"ForgeaX external game project CLI and build orchestration.\",\n \"bin\": {\n \"forgeax\": \"./dist/cli.mjs\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\"\n },\n \"./cli\": \"./dist/cli.mjs\",\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"@forgeax/engine-animation\": \"workspace:*\",\n \"@forgeax/engine-app\": \"workspace:*\",\n \"@forgeax/engine-assets-runtime\": \"workspace:*\",\n \"@forgeax/engine-audio\": \"workspace:*\",\n \"@forgeax/engine-audio-webaudio\": \"workspace:*\",\n \"@forgeax/engine-fbx\": \"workspace:*\",\n \"@forgeax/engine-font\": \"workspace:*\",\n \"@forgeax/engine-gltf\": \"workspace:*\",\n \"@forgeax/engine-image\": \"workspace:*\",\n \"@forgeax/engine-input\": \"workspace:*\",\n \"@forgeax/engine-pack\": \"workspace:*\",\n \"@forgeax/engine-physics\": \"workspace:*\",\n \"@forgeax/engine-plugin\": \"workspace:*\",\n \"@forgeax/engine-preview\": \"workspace:*\",\n \"@forgeax/engine-project\": \"workspace:*\",\n \"@forgeax/engine-rhi-debug\": \"workspace:*\",\n \"@forgeax/engine-rhi-null\": \"workspace:*\",\n \"@forgeax/engine-rhi-webgpu\": \"workspace:*\",\n \"@forgeax/engine-render\": \"workspace:*\",\n \"@forgeax/engine-render-graph\": \"workspace:*\",\n \"@forgeax/engine-runtime\": \"workspace:*\",\n \"@forgeax/engine-scene\": \"workspace:*\",\n \"@forgeax/engine-shader-compiler\": \"workspace:*\",\n \"@forgeax/engine-skinning\": \"workspace:*\",\n \"@forgeax/engine-tool-runtime\": \"workspace:*\",\n \"@forgeax/engine-types\": \"workspace:*\",\n \"@forgeax/engine-vfx-compiler\": \"workspace:*\",\n \"@forgeax/engine-vite-plugin-pack\": \"workspace:*\",\n \"@forgeax/engine-vite-plugin-shader\": \"workspace:*\",\n \"jiti\": \"1.21.7\",\n \"playwright\": \"1.60.0\",\n \"vite\": \"8.0.10\",\n \"vitest\": \"4.0.18\",\n \"webgpu\": \"^0.4.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^20.14.0\"\n },\n \"forgeax\": {\n \"metrics\": {\n \"bundle-size\": {\n \"enabled\": true,\n \"path\": \"dist/cli.mjs\",\n \"compression\": \"gzip\"\n },\n \"fps\": {\n \"enabled\": false,\n \"reason\": \"Node-only build orchestration; runtime FPS belongs to consumer games\"\n },\n \"bench\": {\n \"enabled\": false,\n \"reason\": \"CLI latency is not a runtime hot path\"\n },\n \"gate\": {\n \"enabled\": true,\n \"command\": \"pnpm test\",\n \"cwd\": \"packages/devkit\"\n },\n \"spike-report\": {\n \"enabled\": false,\n \"reason\": \"production DevKit package\"\n }\n }\n }\n}\n","import { writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport devkitPackage from '../package.json' with { type: 'json' };\nimport type { SdkManifest } from './sdk.js';\nimport type { CommandResult, InitOptions, ProjectFacts } from './types.js';\n\nconst STANDARD_SCRIPTS = {\n dev: 'forgeax dev',\n build: 'forgeax build',\n package: 'forgeax package',\n serve: 'forgeax serve',\n preview: 'forgeax preview',\n doctor: 'forgeax doctor',\n test: 'forgeax test',\n} as const;\n\nconst SDK_DEV_DEPENDENCIES = {\n '@types/node': '20.19.40',\n '@webgpu/types': '0.1.71',\n tsx: '4.23.1',\n typescript: '6.0.3',\n vitest: '4.0.18',\n} as const;\n\nexport interface InitPlan {\n readonly root: string;\n readonly version: string;\n readonly pnpmVersion?: string;\n readonly archiveBacked: boolean;\n readonly dependencyChanges: readonly {\n readonly section: string;\n readonly name: string;\n readonly from?: string;\n readonly to: string;\n }[];\n readonly scriptChanges: readonly { readonly name: string; readonly to: string }[];\n}\n\nexport function createInitPlan(\n facts: ProjectFacts,\n sdk?: Pick<SdkManifest, 'sdkVersion' | 'packages' | 'requirements'>,\n): CommandResult<InitPlan> {\n const manifest = structuredClone(facts.packageJson) as Record<string, unknown>;\n const packageVersions = new Map(sdk?.packages.map((entry) => [entry.name, entry.version]));\n const devkitVersion = packageVersions.get('@forgeax/engine-devkit') ?? devkitPackage.version;\n const dependencyChanges: InitPlan['dependencyChanges'][number][] = [];\n if (sdk !== undefined) {\n for (const section of ['dependencies', 'devDependencies'] as const) {\n const dependencies = manifest[section];\n if (dependencies === null || typeof dependencies !== 'object') continue;\n const unsupported = Object.keys(dependencies).filter(\n (name) => !name.startsWith('@forgeax/engine-') && !(name in SDK_DEV_DEPENDENCIES),\n );\n if (unsupported.length > 0) {\n return {\n ok: false,\n error: {\n code: 'sdk-external-dependency-unsupported',\n expected: 'archive-backed init dependencies to belong to the SDK closure',\n hint: 'Remove the external dependency or use a network-backed package workflow explicitly.',\n detail: { root: facts.root, dependencies: unsupported.sort() },\n },\n };\n }\n }\n }\n for (const section of ['dependencies', 'devDependencies'] as const) {\n const dependencies = manifest[section];\n if (dependencies === null || typeof dependencies !== 'object') continue;\n for (const [name, value] of Object.entries(dependencies)) {\n if (\n name.startsWith('@forgeax/engine-') &&\n typeof value === 'string' &&\n value.startsWith('workspace:')\n ) {\n const version = packageVersions.get(name) ?? devkitVersion;\n dependencyChanges.push({ section, name, from: value, to: version });\n }\n }\n }\n if (sdk !== undefined) {\n const existingEngineNames = new Set(\n ['dependencies', 'devDependencies'].flatMap((section) => {\n const value = manifest[section];\n return value !== null && typeof value === 'object'\n ? Object.keys(value).filter((name) => name.startsWith('@forgeax/engine-'))\n : [];\n }),\n );\n for (const entry of sdk.packages) {\n if (entry.name === '@forgeax/engine-devkit' || existingEngineNames.has(entry.name)) continue;\n dependencyChanges.push({\n section: 'dependencies',\n name: entry.name,\n to: entry.version,\n });\n }\n const devDependencies =\n manifest.devDependencies !== null && typeof manifest.devDependencies === 'object'\n ? (manifest.devDependencies as Record<string, unknown>)\n : {};\n for (const [name, version] of Object.entries(SDK_DEV_DEPENDENCIES)) {\n if (devDependencies[name] === version) continue;\n dependencyChanges.push({\n section: 'devDependencies',\n name,\n ...(typeof devDependencies[name] === 'string' ? { from: devDependencies[name] } : {}),\n to: version,\n });\n }\n }\n const scriptsValue = manifest.scripts;\n const scripts =\n scriptsValue !== null && typeof scriptsValue === 'object'\n ? (scriptsValue as Record<string, unknown>)\n : {};\n const scriptChanges: InitPlan['scriptChanges'][number][] = [];\n for (const [name, command] of Object.entries(STANDARD_SCRIPTS)) {\n const existing = scripts[name];\n if (existing === undefined) scriptChanges.push({ name, to: command });\n else if (existing !== command) {\n return {\n ok: false,\n error: {\n code: 'project-script-conflict',\n expected: `package.json#scripts.${name} to be absent or ${JSON.stringify(command)}`,\n hint: `Rename the existing ${name} script, then rerun forgeax init.`,\n detail: { root: facts.root, script: name, existing },\n },\n };\n }\n }\n const devDependencies = manifest.devDependencies;\n const existingDevkit =\n devDependencies !== null && typeof devDependencies === 'object'\n ? (devDependencies as Record<string, unknown>)['@forgeax/engine-devkit']\n : undefined;\n if (existingDevkit !== devkitVersion) {\n dependencyChanges.push({\n section: 'devDependencies',\n name: '@forgeax/engine-devkit',\n ...(typeof existingDevkit === 'string' ? { from: existingDevkit } : {}),\n to: devkitVersion,\n });\n }\n return {\n ok: true,\n value: {\n root: facts.root,\n version: sdk?.sdkVersion ?? devkitVersion,\n ...(sdk === undefined ? {} : { pnpmVersion: sdk.requirements.pnpm }),\n archiveBacked: sdk !== undefined,\n dependencyChanges,\n scriptChanges,\n },\n };\n}\n\nexport async function applyInitPlan(\n facts: ProjectFacts,\n plan: InitPlan,\n options: InitOptions,\n): Promise<CommandResult<InitPlan>> {\n if (options.dryRun === true) return { ok: true, value: plan };\n const manifest = structuredClone(facts.packageJson) as Record<string, unknown>;\n for (const change of plan.dependencyChanges) {\n const sectionValue = manifest[change.section];\n const section =\n sectionValue !== null && typeof sectionValue === 'object'\n ? (sectionValue as Record<string, unknown>)\n : {};\n section[change.name] = change.to;\n manifest[change.section] = section;\n }\n const scriptsValue = manifest.scripts;\n const scripts =\n scriptsValue !== null && typeof scriptsValue === 'object'\n ? (scriptsValue as Record<string, unknown>)\n : {};\n for (const change of plan.scriptChanges) scripts[change.name] = change.to;\n manifest.scripts = scripts;\n if (plan.archiveBacked) {\n if (plan.pnpmVersion === undefined) throw new Error('sdk-pnpm-version-missing');\n manifest.packageManager = `pnpm@${plan.pnpmVersion}`;\n }\n await writeFile(resolve(facts.root, 'package.json'), `${JSON.stringify(manifest, null, 2)}\\n`);\n return { ok: true, value: plan };\n}\n","import { access, readFile } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface SdkPackage {\n readonly name: string;\n readonly version: string;\n readonly root: string;\n readonly fileCount: number;\n readonly byteCount: number;\n}\n\nexport interface SdkTemplate {\n readonly id: string;\n readonly root: string;\n readonly default: boolean;\n}\n\nexport interface SdkSkill {\n readonly id: string;\n readonly root: string;\n readonly fileCount: number;\n readonly byteCount: number;\n}\n\nexport interface SdkSourceWasm {\n readonly package: string;\n readonly root: string;\n readonly files: readonly string[];\n}\n\nexport interface SdkResource {\n readonly id: string;\n readonly package: string;\n readonly sourceRoot: string;\n readonly packageRoot: string;\n readonly files: readonly string[];\n}\n\nexport interface SdkTemplateResource {\n readonly id: string;\n readonly root: string;\n readonly files: readonly string[];\n}\n\nexport interface SdkSource {\n readonly root: 'source/engine';\n readonly format: 'git-archive-public-snapshot';\n readonly excluded: readonly ['.gitmodules', 'forgeax-engine-assets'];\n readonly fileCount: number;\n readonly byteCount: number;\n readonly prebuiltWasm: readonly SdkSourceWasm[];\n}\n\nexport interface SdkManifest {\n readonly schemaVersion: '1.6.0';\n readonly sdkVersion: string;\n readonly engineCommit: string;\n readonly requirements: {\n readonly node: string;\n readonly pnpm: string;\n readonly pnpmStoreFormat: string;\n };\n readonly capabilities: readonly string[];\n readonly packages: readonly SdkPackage[];\n readonly templates: readonly SdkTemplate[];\n readonly skills: readonly SdkSkill[];\n readonly resources: readonly SdkResource[];\n readonly templateResources: readonly SdkTemplateResource[];\n readonly source: SdkSource;\n}\n\nexport interface SdkContext {\n readonly root: string;\n readonly manifest: SdkManifest;\n /**\n * The full ZIP carries an immutable offline store. The npm carrier is a\n * deliberately smaller online surface and omits it, so consumers fall back\n * to the registry when this path is absent.\n */\n readonly store?: string;\n readonly templates: ReadonlyMap<string, string>;\n readonly defaultTemplate: string;\n}\n\nasync function readable(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function findSdkContext(): Promise<SdkContext | undefined> {\n const configured = process.env.FORGEAX_SDK_ROOT;\n let cursor = resolve(configured ?? dirname(fileURLToPath(import.meta.url)));\n for (;;) {\n const manifestPath = resolve(cursor, 'sdk-manifest.json');\n if (await readable(manifestPath)) {\n const manifest = JSON.parse(await readFile(manifestPath, 'utf8')) as SdkManifest;\n const templates = new Map(\n manifest.templates.map((template) => [template.id, resolve(cursor, template.root)]),\n );\n const defaultTemplate = manifest.templates.find((template) => template.default);\n if (defaultTemplate === undefined) throw new Error('sdk-default-template-missing');\n const store = resolve(cursor, 'store', 'pnpm');\n return {\n root: cursor,\n manifest,\n ...((await readable(store)) ? { store } : {}),\n templates,\n defaultTemplate: defaultTemplate.id,\n };\n }\n const parent = dirname(cursor);\n if (parent === cursor) return undefined;\n cursor = parent;\n }\n}\n","import { execFile } from 'node:child_process';\nimport { cp, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport type { SdkContext } from './sdk.js';\nimport type { CommandResult } from './types.js';\n\nconst execFileAsync = promisify(execFile);\nconst SDK_INIT_PATH = ['.forgeax', 'sdk-init.json'] as const;\nconst SDK_INIT_SCHEMA_VERSION = '1.0.0' as const;\n\nexport interface SdkInitState {\n readonly schemaVersion: typeof SDK_INIT_SCHEMA_VERSION;\n readonly sdkVersion: string;\n readonly engineCommit: string;\n readonly pnpm: string;\n readonly node: string;\n readonly platform: NodeJS.Platform;\n readonly arch: string;\n}\n\nexport interface SdkInitReport extends SdkInitState {\n readonly root: string;\n readonly store: 'offline' | 'registry';\n readonly onboarding: AgentOnboarding;\n}\n\nexport interface AgentOnboarding {\n readonly read: readonly string[];\n readonly next: {\n readonly cwd: string;\n readonly argv: readonly string[];\n };\n}\n\nexport function agentOnboarding(sdk: SdkContext, projectRoot?: string): AgentOnboarding {\n const root = projectRoot ?? sdk.root;\n return {\n read: [\n resolve(root, 'AGENTS.md'),\n resolve(root, 'skills', 'forgeax-engine-sdk', 'SKILL.md'),\n resolve(root, 'skills', 'forgeax-engine-sdk', 'references', 'feature-catalog.md'),\n ],\n next:\n projectRoot === undefined\n ? {\n cwd: root,\n argv: ['node', './bin/forgeax.mjs', 'new', '../my-game'],\n }\n : { cwd: root, argv: ['pnpm', 'exec', 'forgeax', 'list', '--json'] },\n };\n}\n\nfunction sdkInitPath(sdk: SdkContext): string {\n return resolve(sdk.root, ...SDK_INIT_PATH);\n}\n\nfunction commandFailure(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>> = {},\n): CommandResult<never> {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nexport function sdkProjectInstallArgs(store: string | undefined): string[] {\n const common = [\n 'install',\n '--frozen-lockfile',\n '--ignore-scripts',\n '--config.pm-on-fail=ignore',\n '--side-effects-cache=true',\n '--child-concurrency=1',\n ];\n return store === undefined\n ? common\n : [...common, '--offline', '--config.trust-lockfile=true', '--store-dir', store];\n}\n\nfunction sdkBootstrapInstallArgs(store: string | undefined): string[] {\n const common = [\n 'install',\n '--frozen-lockfile',\n '--config.pm-on-fail=ignore',\n '--child-concurrency=1',\n '--side-effects-cache=true',\n ];\n return store === undefined\n ? common\n : [...common, '--offline', '--config.trust-lockfile=true', '--store-dir', store];\n}\n\nfunction supportedPnpm(version: string): boolean {\n const [major = 0, minor = 0] = version.split('.').map(Number);\n return major === 11 && minor >= 7;\n}\n\nasync function currentPnpm(): Promise<CommandResult<string>> {\n try {\n const result = await execFileAsync('pnpm', ['--version'], { maxBuffer: 1024 * 1024 });\n const version = result.stdout.trim();\n if (version.length === 0) throw new Error('pnpm returned an empty version');\n return { ok: true, value: version };\n } catch (cause) {\n return commandFailure(\n 'pnpm-unavailable',\n 'pnpm 11.7.0 or newer in the pnpm 11 line to be available on PATH',\n 'Install or activate pnpm 11, then rerun forgeax init from the SDK root.',\n { reason: cause instanceof Error ? cause.message : String(cause) },\n );\n }\n}\n\nfunction matchesState(sdk: SdkContext, state: unknown): state is SdkInitState {\n if (state === null || typeof state !== 'object' || Array.isArray(state)) return false;\n const value = state as Record<string, unknown>;\n return (\n value.schemaVersion === SDK_INIT_SCHEMA_VERSION &&\n value.sdkVersion === sdk.manifest.sdkVersion &&\n value.engineCommit === sdk.manifest.engineCommit &&\n typeof value.pnpm === 'string' &&\n supportedPnpm(value.pnpm) &&\n value.node === process.versions.node &&\n value.platform === process.platform &&\n value.arch === process.arch\n );\n}\n\nexport async function readSdkInitState(sdk: SdkContext): Promise<SdkInitState | undefined> {\n try {\n const value = JSON.parse(await readFile(sdkInitPath(sdk), 'utf8')) as unknown;\n return matchesState(sdk, value) ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport async function requireSdkInitialization(\n sdk: SdkContext,\n): Promise<CommandResult<SdkInitState>> {\n const state = await readSdkInitState(sdk);\n if (state === undefined) {\n return commandFailure(\n 'sdk-not-initialized',\n 'the downloaded SDK to be initialized for this Node/pnpm/platform tuple',\n 'Run ./bin/forgeax init from the SDK root once, then run forgeax new outside the SDK.',\n {\n sdkRoot: sdk.root,\n sdkVersion: sdk.manifest.sdkVersion,\n pnpm: sdk.manifest.requirements.pnpm,\n node: process.versions.node,\n platform: process.platform,\n arch: process.arch,\n },\n );\n }\n return { ok: true, value: state };\n}\n\nasync function copyBootstrapInputs(sdk: SdkContext, root: string): Promise<void> {\n const template = sdk.templates.get(sdk.defaultTemplate);\n if (template === undefined) throw new Error('sdk-default-template-missing');\n for (const name of ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'] as const) {\n await cp(resolve(template, name), resolve(root, name));\n }\n try {\n await cp(resolve(template, '.npmrc'), resolve(root, '.npmrc'));\n } catch (cause) {\n if (\n cause === null ||\n typeof cause !== 'object' ||\n !('code' in cause) ||\n cause.code !== 'ENOENT'\n ) {\n throw cause;\n }\n }\n}\n\nexport async function sdkInitCommand(\n sdk: SdkContext,\n options: { readonly dryRun?: boolean; readonly install?: boolean } = {},\n): Promise<CommandResult<SdkInitReport>> {\n const pnpmResult = await currentPnpm();\n if (!pnpmResult.ok) return pnpmResult;\n if (!supportedPnpm(pnpmResult.value)) {\n return commandFailure(\n 'pnpm-version-unsupported',\n 'pnpm >=11.7.0 <12',\n 'Activate pnpm 11.7.0 or newer in the pnpm 11 line, then rerun forgeax init.',\n { actual: pnpmResult.value, expected: sdk.manifest.requirements.pnpm },\n );\n }\n const state: SdkInitState = {\n schemaVersion: SDK_INIT_SCHEMA_VERSION,\n sdkVersion: sdk.manifest.sdkVersion,\n engineCommit: sdk.manifest.engineCommit,\n pnpm: pnpmResult.value,\n node: process.versions.node,\n platform: process.platform,\n arch: process.arch,\n };\n const report: SdkInitReport = {\n ...state,\n root: sdk.root,\n store: sdk.store === undefined ? 'registry' : 'offline',\n onboarding: agentOnboarding(sdk),\n };\n if (options.dryRun === true || options.install === false) return { ok: true, value: report };\n\n let staging: string | undefined;\n try {\n staging = await mkdtemp(resolve(tmpdir(), 'forgeax-sdk-init-'));\n await copyBootstrapInputs(sdk, staging);\n await execFileAsync('pnpm', sdkBootstrapInstallArgs(sdk.store), {\n cwd: staging,\n env: { ...process.env, CI: 'true' },\n maxBuffer: 16 * 1024 * 1024,\n });\n await mkdir(resolve(sdk.root, '.forgeax'), { recursive: true });\n await writeFile(sdkInitPath(sdk), `${JSON.stringify(state, null, 2)}\\n`);\n return { ok: true, value: report };\n } catch (cause) {\n return commandFailure(\n 'sdk-init-failed',\n 'the SDK dependency closure to install and build native packages successfully',\n 'Inspect the pnpm output, repair Node/pnpm or platform permissions, then rerun forgeax init from the SDK root.',\n { reason: cause instanceof Error ? cause.message : String(cause), sdkRoot: sdk.root },\n );\n } finally {\n if (staging !== undefined) await rm(staging, { recursive: true, force: true });\n }\n}\n","const UPDATE_MIGRATION_RISK =\n 'Install a newer SDK in a separate directory. Existing games remain pinned and are not migrated automatically; review release notes and migrate and test each game before changing its Engine version.';\n\nexport type SdkUpdateStatus =\n | {\n readonly status: 'available';\n readonly currentVersion: string;\n readonly latestVersion: string;\n readonly migrationRisk: typeof UPDATE_MIGRATION_RISK;\n }\n | {\n readonly status: 'current';\n readonly currentVersion: string;\n readonly latestVersion: string;\n }\n | {\n readonly status: 'skipped';\n readonly currentVersion: string;\n readonly reason: 'offline' | 'disabled';\n }\n | {\n readonly status: 'unavailable';\n readonly currentVersion: string;\n readonly reason: string;\n };\n\ninterface ParsedVersion {\n readonly core: readonly [string, string, string];\n readonly prerelease?: readonly string[];\n}\n\nfunction parseVersion(version: string): ParsedVersion | undefined {\n const match =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-([0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/.exec(\n version,\n );\n if (match === null) return undefined;\n const major = match[1];\n const minor = match[2];\n const patch = match[3];\n if (major === undefined || minor === undefined || patch === undefined) return undefined;\n const prerelease = match[4]?.split('.');\n if (\n prerelease?.some(\n (identifier) =>\n identifier.length === 0 || (/^\\d+$/.test(identifier) && /^0\\d+/.test(identifier)),\n )\n ) {\n return undefined;\n }\n return {\n core: [major, minor, patch],\n ...(prerelease === undefined ? {} : { prerelease }),\n };\n}\n\nfunction compareNumericIdentifier(current: string, latest: string): number {\n if (current.length !== latest.length) return latest.length > current.length ? 1 : -1;\n if (current === latest) return 0;\n return latest > current ? 1 : -1;\n}\n\nfunction comparePrerelease(current: readonly string[], latest: readonly string[]): number {\n const length = Math.max(current.length, latest.length);\n for (let index = 0; index < length; index += 1) {\n const currentIdentifier = current[index];\n const latestIdentifier = latest[index];\n if (currentIdentifier === undefined) return 1;\n if (latestIdentifier === undefined) return -1;\n if (currentIdentifier === latestIdentifier) continue;\n const currentNumeric = /^\\d+$/.test(currentIdentifier);\n const latestNumeric = /^\\d+$/.test(latestIdentifier);\n if (currentNumeric && latestNumeric) {\n return compareNumericIdentifier(currentIdentifier, latestIdentifier);\n }\n if (currentNumeric !== latestNumeric) return latestNumeric ? -1 : 1;\n return latestIdentifier > currentIdentifier ? 1 : -1;\n }\n return 0;\n}\n\nexport function newerSdkVersion(currentVersion: string, latestVersion: string): boolean {\n const current = parseVersion(currentVersion);\n const latest = parseVersion(latestVersion);\n if (current === undefined || latest === undefined) return false;\n for (let index = 0; index < current.core.length; index += 1) {\n const precedence = compareNumericIdentifier(\n current.core[index] ?? '0',\n latest.core[index] ?? '0',\n );\n if (precedence !== 0) return precedence > 0;\n }\n if (current.prerelease !== undefined && latest.prerelease === undefined) return true;\n if (current.prerelease === undefined || latest.prerelease === undefined) return false;\n return comparePrerelease(current.prerelease, latest.prerelease) > 0;\n}\n\nfunction offline(): boolean {\n return ['1', 'true'].includes((process.env.npm_config_offline ?? '').toLowerCase());\n}\n\nexport async function checkSdkUpdate(currentVersion: string): Promise<SdkUpdateStatus> {\n if (process.env.FORGEAX_DISABLE_UPDATE_CHECK === '1') {\n return { status: 'skipped', currentVersion, reason: 'disabled' };\n }\n if (offline()) return { status: 'skipped', currentVersion, reason: 'offline' };\n try {\n const registry = process.env.npm_config_registry ?? 'https://registry.npmjs.org/';\n const response = await fetch(\n new URL('@forgeax%2Fengine-sdk', `${registry.replace(/\\/$/, '')}/`),\n {\n headers: { accept: 'application/vnd.npm.install-v1+json' },\n signal: AbortSignal.timeout(2_000),\n },\n );\n if (!response.ok) throw new Error(`registry-http-${response.status}`);\n const metadata = (await response.json()) as {\n readonly 'dist-tags'?: { readonly latest?: unknown };\n };\n const latestVersion = metadata['dist-tags']?.latest;\n if (typeof latestVersion !== 'string') throw new Error('registry-latest-version-missing');\n return newerSdkVersion(currentVersion, latestVersion)\n ? {\n status: 'available',\n currentVersion,\n latestVersion,\n migrationRisk: UPDATE_MIGRATION_RISK,\n }\n : { status: 'current', currentVersion, latestVersion };\n } catch (cause) {\n return {\n status: 'unavailable',\n currentVersion,\n reason: cause instanceof Error ? cause.message : String(cause),\n };\n }\n}\n","import {\n cp,\n lstat,\n mkdir,\n readdir,\n readFile,\n readlink,\n rm,\n rmdir,\n symlink,\n writeFile,\n} from 'node:fs/promises';\nimport { dirname, relative, resolve, sep } from 'node:path';\nimport { commandError, readProjectFacts } from './project.js';\nimport type { SdkContext, SdkSkill } from './sdk.js';\nimport type { CommandResult, ProjectCommandOptions } from './types.js';\n\nexport const PROJECT_SKILL_MOUNT_ROOTS = Object.freeze([\n '.codebuddy/skills',\n '.cursor/skills',\n '.agents/skills',\n '.claude/skills',\n '.workbuddy/skills',\n '.forgeax/skills',\n]);\nconst RETIRED_PROJECT_SKILL_MOUNT_ROOTS = new Set(['.claude-internal/skills']);\n\nconst MANIFEST_PATH = '.forgeax/skill-install-manifest.json';\nconst GITIGNORE_BEGIN = '# BEGIN FORGEAX MANAGED SKILLS';\nconst GITIGNORE_END = '# END FORGEAX MANAGED SKILLS';\n\ninterface InstalledSkill extends SdkSkill {}\n\ninterface SkillInstallManifest {\n readonly schemaVersion: '1.0.0';\n readonly sourceRoot: 'skills';\n readonly sdkVersion?: string;\n readonly engineCommit?: string;\n readonly skills: readonly InstalledSkill[];\n readonly mounts: readonly {\n readonly root: string;\n readonly skills: readonly string[];\n }[];\n}\n\nexport interface SkillInstallReport {\n readonly root: string;\n readonly sourceRoot: string;\n readonly manifest: string;\n readonly skills: readonly string[];\n readonly mountRoots: readonly string[];\n}\n\nfunction slash(path: string): string {\n return path.split(sep).join('/');\n}\n\nfunction contained(parent: string, child: string): boolean {\n const path = relative(parent, child);\n return path !== '' && path !== '..' && !path.startsWith(`..${sep}`) && !path.startsWith(sep);\n}\n\nasync function pathKind(path: string): Promise<'missing' | 'directory' | 'file' | 'symlink'> {\n try {\n const info = await lstat(path);\n if (info.isSymbolicLink()) return 'symlink';\n if (info.isDirectory()) return 'directory';\n return 'file';\n } catch (cause) {\n if (cause !== null && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT') {\n return 'missing';\n }\n throw cause;\n }\n}\n\nasync function filesUnder(root: string, directory = root): Promise<readonly string[]> {\n const files: string[] = [];\n for (const name of (await readdir(directory)).sort()) {\n const path = resolve(directory, name);\n const info = await lstat(path);\n if (info.isSymbolicLink()) throw new Error(`skill-source-symlink: ${path}`);\n if (info.isDirectory()) files.push(...(await filesUnder(root, path)));\n else if (info.isFile()) files.push(path);\n }\n return files;\n}\n\nasync function skillRow(sourceRoot: string, id: string): Promise<InstalledSkill> {\n if (!/^[a-z0-9][a-z0-9-]*$/.test(id)) throw new Error(`skill-id-invalid: ${id}`);\n const root = resolve(sourceRoot, id);\n if ((await pathKind(root)) !== 'directory') throw new Error(`skill-source-invalid: ${id}`);\n if ((await pathKind(resolve(root, 'SKILL.md'))) !== 'file') {\n throw new Error(`skill-entry-missing: ${id}/SKILL.md`);\n }\n const files = await filesUnder(root);\n return {\n id,\n root: `skills/${id}`,\n fileCount: files.length,\n byteCount: (\n await Promise.all(files.map(async (path) => (await readFile(path)).byteLength))\n ).reduce((sum, bytes) => sum + bytes, 0),\n };\n}\n\nasync function discoverProjectSkills(root: string): Promise<readonly InstalledSkill[]> {\n const sourceRoot = resolve(root, 'skills');\n if ((await pathKind(sourceRoot)) !== 'directory') throw new Error('project-skills-missing');\n const entries = await readdir(sourceRoot, { withFileTypes: true });\n const ids = entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort();\n if (ids.length === 0) throw new Error('project-skills-empty');\n return Promise.all(ids.map((id) => skillRow(sourceRoot, id)));\n}\n\nasync function sameFiles(leftRoot: string, rightRoot: string): Promise<boolean> {\n const left = await filesUnder(leftRoot);\n const right = await filesUnder(rightRoot);\n const leftNames = left.map((path) => slash(relative(leftRoot, path)));\n const rightNames = right.map((path) => slash(relative(rightRoot, path)));\n if (JSON.stringify(leftNames) !== JSON.stringify(rightNames)) return false;\n for (let index = 0; index < left.length; index += 1) {\n const leftPath = left[index];\n const rightPath = right[index];\n if (leftPath === undefined || rightPath === undefined) return false;\n if (!(await readFile(leftPath)).equals(await readFile(rightPath))) return false;\n }\n return true;\n}\n\nexport async function copySdkSkills(sdk: SdkContext, projectRoot: string): Promise<void> {\n const targetSourceRoot = resolve(projectRoot, 'skills');\n const copies: { source: string; destination: string }[] = [];\n for (const skill of sdk.manifest.skills) {\n const source = resolve(sdk.root, skill.root);\n const destination = resolve(projectRoot, skill.root);\n if (!contained(sdk.root, source) || !contained(projectRoot, destination)) {\n throw new Error(`sdk-skill-path-invalid: ${skill.id}`);\n }\n const actual = await skillRow(resolve(sdk.root, 'skills'), skill.id);\n if (\n actual.root !== skill.root ||\n actual.fileCount !== skill.fileCount ||\n actual.byteCount !== skill.byteCount\n ) {\n throw new Error(`sdk-skill-manifest-drift: ${skill.id}`);\n }\n const kind = await pathKind(destination);\n if (kind === 'missing') {\n copies.push({ source, destination });\n } else if (kind !== 'directory' || !(await sameFiles(source, destination))) {\n throw new Error(`project-skill-source-conflict: ${skill.id}`);\n }\n }\n const created: string[] = [];\n try {\n await mkdir(targetSourceRoot, { recursive: true });\n for (const { source, destination } of copies) {\n await cp(source, destination, { recursive: true, errorOnExist: true, force: false });\n created.push(destination);\n }\n } catch (cause) {\n await Promise.all(created.map((path) => rm(path, { recursive: true, force: true })));\n throw cause;\n }\n}\n\nfunction expectedLinkTarget(projectRoot: string, mountRoot: string, id: string): string {\n const mountParent = resolve(projectRoot, mountRoot);\n const target = resolve(projectRoot, 'skills', id);\n return process.platform === 'win32' ? target : relative(mountParent, target);\n}\n\nasync function linkMatches(path: string, target: string): Promise<boolean> {\n if ((await pathKind(path)) !== 'symlink') return false;\n const actual = await readlink(path);\n return resolve(dirname(path), actual) === resolve(dirname(path), target);\n}\n\nfunction updateManagedGitignore(previous: string, skillIds: readonly string[]): string {\n const block = `${GITIGNORE_BEGIN}\\n${skillIds.map((id) => `/${id}`).join('\\n')}\\n${GITIGNORE_END}`;\n const begin = previous.indexOf(GITIGNORE_BEGIN);\n const end = previous.indexOf(GITIGNORE_END);\n if (begin >= 0 && end >= begin) {\n const after = end + GITIGNORE_END.length;\n return `${previous.slice(0, begin)}${block}${previous.slice(after)}`.replace(/^\\n+/, '');\n }\n return previous.length === 0 ? `${block}\\n` : `${previous.replace(/\\s*$/, '')}\\n\\n${block}\\n`;\n}\n\nfunction removeManagedGitignore(previous: string): string {\n const begin = previous.indexOf(GITIGNORE_BEGIN);\n const end = previous.indexOf(GITIGNORE_END);\n if (begin < 0 || end < begin) return previous;\n const before = previous.slice(0, begin).trimEnd();\n const after = previous.slice(end + GITIGNORE_END.length).trimStart();\n const retained = [before, after].filter((part) => part.length > 0).join('\\n');\n return retained.length === 0 ? '' : `${retained}\\n`;\n}\n\nasync function removeEmptyDirectory(path: string): Promise<void> {\n try {\n await rmdir(path);\n } catch (cause) {\n if (\n cause !== null &&\n typeof cause === 'object' &&\n 'code' in cause &&\n (cause.code === 'ENOENT' || cause.code === 'ENOTEMPTY' || cause.code === 'EEXIST')\n ) {\n return;\n }\n throw cause;\n }\n}\n\nasync function readOptional(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, 'utf8');\n } catch (cause) {\n if (cause !== null && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT') {\n return undefined;\n }\n throw cause;\n }\n}\n\nasync function readInstallManifest(root: string): Promise<SkillInstallManifest | undefined> {\n const value = await readOptional(resolve(root, MANIFEST_PATH));\n return value === undefined ? undefined : (JSON.parse(value) as SkillInstallManifest);\n}\n\nexport async function installProjectSkills(\n root: string,\n provenance?: Pick<SdkContext['manifest'], 'sdkVersion' | 'engineCommit'>,\n): Promise<SkillInstallReport> {\n const projectRoot = resolve(root);\n const skills = await discoverProjectSkills(projectRoot);\n const ids = skills.map((skill) => skill.id);\n const priorManifest = await readInstallManifest(projectRoot);\n const desiredLinks = PROJECT_SKILL_MOUNT_ROOTS.flatMap((mountRoot) =>\n ids.map((id) => ({\n path: resolve(projectRoot, mountRoot, id),\n target: expectedLinkTarget(projectRoot, mountRoot, id),\n })),\n );\n const desiredPaths = new Set(desiredLinks.map((entry) => entry.path));\n const desiredMountRoots = new Set<string>(PROJECT_SKILL_MOUNT_ROOTS);\n const retiredMountRoots = (priorManifest?.mounts ?? [])\n .map((mount) => mount.root)\n .filter(\n (mountRoot) =>\n !desiredMountRoots.has(mountRoot) && RETIRED_PROJECT_SKILL_MOUNT_ROOTS.has(mountRoot),\n );\n const staleLinks = (priorManifest?.mounts ?? [])\n .flatMap((mount) =>\n mount.skills.map((id) => ({\n path: resolve(projectRoot, mount.root, id),\n target: expectedLinkTarget(projectRoot, mount.root, id),\n })),\n )\n .filter((entry) => !desiredPaths.has(entry.path));\n\n for (const entry of desiredLinks) {\n const kind = await pathKind(entry.path);\n if (kind !== 'missing' && !(await linkMatches(entry.path, entry.target))) {\n throw new Error(`skill-mount-conflict: ${slash(relative(projectRoot, entry.path))}`);\n }\n }\n for (const entry of staleLinks) {\n const kind = await pathKind(entry.path);\n if (kind !== 'missing' && !(await linkMatches(entry.path, entry.target))) {\n throw new Error(`skill-stale-mount-conflict: ${slash(relative(projectRoot, entry.path))}`);\n }\n }\n\n const ignoreSnapshots = new Map<string, string | undefined>();\n const createdLinks: string[] = [];\n const removedLinks: { path: string; target: string }[] = [];\n const manifestPath = resolve(projectRoot, MANIFEST_PATH);\n const priorManifestText = await readOptional(manifestPath);\n try {\n for (const entry of staleLinks) {\n if ((await pathKind(entry.path)) === 'symlink') {\n await rm(entry.path);\n removedLinks.push(entry);\n }\n }\n for (const mountRoot of retiredMountRoots) {\n const mountParent = resolve(projectRoot, mountRoot);\n const ignorePath = resolve(mountParent, '.gitignore');\n const previous = await readOptional(ignorePath);\n ignoreSnapshots.set(ignorePath, previous);\n if (previous !== undefined) {\n const retained = removeManagedGitignore(previous);\n if (retained.length === 0) await rm(ignorePath);\n else await writeFile(ignorePath, retained);\n }\n await removeEmptyDirectory(mountParent);\n await removeEmptyDirectory(dirname(mountParent));\n }\n for (const mountRoot of PROJECT_SKILL_MOUNT_ROOTS) {\n const mountParent = resolve(projectRoot, mountRoot);\n await mkdir(mountParent, { recursive: true });\n const ignorePath = resolve(mountParent, '.gitignore');\n const previous = await readOptional(ignorePath);\n ignoreSnapshots.set(ignorePath, previous);\n await writeFile(ignorePath, updateManagedGitignore(previous ?? '', ids));\n for (const id of ids) {\n const path = resolve(mountParent, id);\n if ((await pathKind(path)) === 'missing') {\n const target = expectedLinkTarget(projectRoot, mountRoot, id);\n await symlink(target, path, process.platform === 'win32' ? 'junction' : 'dir');\n createdLinks.push(path);\n }\n }\n }\n const sdkVersion = provenance?.sdkVersion ?? priorManifest?.sdkVersion;\n const engineCommit = provenance?.engineCommit ?? priorManifest?.engineCommit;\n const manifest: SkillInstallManifest = {\n schemaVersion: '1.0.0',\n sourceRoot: 'skills',\n ...(sdkVersion === undefined ? {} : { sdkVersion }),\n ...(engineCommit === undefined ? {} : { engineCommit }),\n skills,\n mounts: PROJECT_SKILL_MOUNT_ROOTS.map((mountRoot) => ({ root: mountRoot, skills: ids })),\n };\n await mkdir(dirname(manifestPath), { recursive: true });\n await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`);\n } catch (cause) {\n await Promise.all(createdLinks.map((path) => rm(path, { force: true })));\n await Promise.all(\n removedLinks.map(async ({ path, target }) => {\n await mkdir(dirname(path), { recursive: true });\n await symlink(target, path, process.platform === 'win32' ? 'junction' : 'dir');\n }),\n );\n await Promise.all(\n [...ignoreSnapshots].map(async ([path, value]) => {\n if (value === undefined) await rm(path, { force: true });\n else {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, value);\n }\n }),\n );\n if (priorManifestText === undefined) await rm(manifestPath, { force: true });\n else await writeFile(manifestPath, priorManifestText);\n throw cause;\n }\n return {\n root: projectRoot,\n sourceRoot: resolve(projectRoot, 'skills'),\n manifest: manifestPath,\n skills: ids,\n mountRoots: PROJECT_SKILL_MOUNT_ROOTS,\n };\n}\n\nexport async function verifyProjectSkills(root: string): Promise<SkillInstallReport> {\n const projectRoot = resolve(root);\n const skills = await discoverProjectSkills(projectRoot);\n const ids = skills.map((skill) => skill.id);\n const manifest = await readInstallManifest(projectRoot);\n if (manifest === undefined) throw new Error('skill-install-manifest-missing');\n if (\n manifest.schemaVersion !== '1.0.0' ||\n manifest.sourceRoot !== 'skills' ||\n JSON.stringify(manifest.skills) !== JSON.stringify(skills) ||\n JSON.stringify(manifest.mounts.map((mount) => mount.root)) !==\n JSON.stringify(PROJECT_SKILL_MOUNT_ROOTS)\n ) {\n throw new Error('skill-install-manifest-drift');\n }\n for (const mountRoot of PROJECT_SKILL_MOUNT_ROOTS) {\n const declared = manifest.mounts.find((mount) => mount.root === mountRoot);\n if (declared === undefined || JSON.stringify(declared.skills) !== JSON.stringify(ids)) {\n throw new Error(`skill-install-manifest-mount-drift: ${mountRoot}`);\n }\n const ignore = await readOptional(resolve(projectRoot, mountRoot, '.gitignore'));\n if (ignore === undefined || updateManagedGitignore(ignore, ids) !== ignore) {\n throw new Error(`skill-mount-gitignore-drift: ${mountRoot}`);\n }\n for (const id of ids) {\n const path = resolve(projectRoot, mountRoot, id);\n const target = expectedLinkTarget(projectRoot, mountRoot, id);\n if (!(await linkMatches(path, target))) {\n throw new Error(`skill-mount-drift: ${mountRoot}/${id}`);\n }\n }\n }\n return {\n root: projectRoot,\n sourceRoot: resolve(projectRoot, 'skills'),\n manifest: resolve(projectRoot, MANIFEST_PATH),\n skills: ids,\n mountRoots: PROJECT_SKILL_MOUNT_ROOTS,\n };\n}\n\nexport async function skillInstallCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<SkillInstallReport>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n try {\n return { ok: true, value: await installProjectSkills(facts.value.root) };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'skill-install-failed') };\n }\n}\n\nexport async function skillVerifyCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<SkillInstallReport>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n try {\n return { ok: true, value: await verifyProjectSkills(facts.value.root) };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'skill-verify-failed') };\n }\n}\n","import { execFile } from 'node:child_process';\nimport {\n copyFile,\n cp,\n mkdir,\n mkdtemp,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n writeFile,\n} from 'node:fs/promises';\nimport { basename, dirname, isAbsolute, relative, resolve, sep } from 'node:path';\nimport { promisify } from 'node:util';\nimport { applyInitPlan, createInitPlan } from './init.js';\nimport { commandError, readProjectFacts } from './project.js';\nimport { findSdkContext } from './sdk.js';\nimport {\n agentOnboarding,\n requireSdkInitialization,\n sdkInitCommand,\n sdkProjectInstallArgs,\n} from './sdk-bootstrap.js';\nimport { checkSdkUpdate } from './sdk-update.js';\nimport { copySdkSkills, installProjectSkills } from './skill-install.js';\nimport type { CommandResult, InitOptions, NewOptions, ProjectCommandOptions } from './types.js';\n\nconst execFileAsync = promisify(execFile);\n\nfunction isMissingPathError(cause: unknown): boolean {\n return cause !== null && typeof cause === 'object' && 'code' in cause && cause.code === 'ENOENT';\n}\n\nasync function canonicalProspectivePath(path: string): Promise<string> {\n let cursor = resolve(path);\n const suffix: string[] = [];\n for (;;) {\n try {\n return resolve(await realpath(cursor), ...suffix.reverse());\n } catch (cause) {\n if (!isMissingPathError(cause)) throw cause;\n const parent = dirname(cursor);\n if (parent === cursor) throw cause;\n suffix.push(basename(cursor));\n cursor = parent;\n }\n }\n}\n\nasync function configureSdkStore(root: string, store: string | undefined): Promise<void> {\n if (store === undefined) return;\n const path = resolve(root, '.npmrc');\n let content = '';\n try {\n content = await readFile(path, 'utf8');\n } catch (cause) {\n if (!isMissingPathError(cause)) throw cause;\n }\n const lines = content\n .split(/\\r?\\n/)\n .filter((line) => line.trim().length > 0 && !/^\\s*store-dir\\s*=/.test(line));\n lines.push(`store-dir=${store}`);\n await writeFile(path, `${lines.join('\\n')}\\n`);\n}\n\nfunction containsOrEquals(parent: string, child: string): boolean {\n const path = relative(parent, child);\n return path === '' || (path !== '..' && !path.startsWith(`..${sep}`) && !isAbsolute(path));\n}\n\nexport interface DoctorReport {\n readonly root: string;\n readonly projectId: string;\n readonly node: string;\n readonly pnpm: string;\n readonly workspaceDependencies: readonly string[];\n}\n\nfunction nodeSupported(): boolean {\n const [major = 0, minor = 0] = process.versions.node.split('.').map(Number);\n return major > 22 || (major === 22 && minor >= 13);\n}\n\nfunction pnpmSupported(version: string): boolean {\n const [major = 0, minor = 0] = version.split('.').map(Number);\n return major === 11 && minor >= 7;\n}\n\nexport async function doctorCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<DoctorReport>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n let pnpm: string;\n try {\n pnpm = (await execFileAsync('pnpm', ['--version'], { cwd: facts.value.root })).stdout.trim();\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'pnpm-unavailable',\n expected: 'pnpm to be available on PATH',\n hint: 'Install the SDK-supported pnpm version and retry.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n if (!nodeSupported()) {\n return {\n ok: false,\n error: {\n code: 'node-version-unsupported',\n expected: 'Node.js >=22.13.0',\n hint: 'Select a supported Node.js installation and retry.',\n detail: { actual: process.versions.node },\n },\n };\n }\n if (!pnpmSupported(pnpm)) {\n return {\n ok: false,\n error: {\n code: 'pnpm-version-unsupported',\n expected: 'pnpm >=11.7.0 <12',\n hint: 'Enable the packageManager-declared pnpm version with Corepack and retry.',\n detail: { actual: pnpm },\n },\n };\n }\n const workspaceDependencies: string[] = [];\n for (const section of ['dependencies', 'devDependencies']) {\n const value = facts.value.packageJson[section];\n if (value === null || typeof value !== 'object') continue;\n for (const [name, version] of Object.entries(value)) {\n if (\n typeof version === 'string' &&\n (version.startsWith('workspace:') || version.startsWith('file:'))\n ) {\n workspaceDependencies.push(name);\n }\n }\n }\n if (workspaceDependencies.length > 0) {\n return {\n ok: false,\n error: {\n code: 'project-local-dependency',\n expected: 'all external project dependencies to use SDK-resolved exact versions',\n hint: 'Run forgeax init from the unpacked SDK and commit the resulting lockfile.',\n detail: { dependencies: workspaceDependencies.sort() },\n },\n };\n }\n return {\n ok: true,\n value: {\n root: facts.value.root,\n projectId: facts.value.id,\n node: process.versions.node,\n pnpm,\n workspaceDependencies,\n },\n };\n}\n\nexport async function initCommand(options: InitOptions = {}): Promise<CommandResult<unknown>> {\n try {\n const sdk = await findSdkContext();\n const root = await canonicalProspectivePath(options.root ?? process.cwd());\n if (sdk !== undefined && root === (await canonicalProspectivePath(sdk.root))) {\n return sdkInitCommand(sdk, options);\n }\n const facts = await readProjectFacts(root);\n if (!facts.ok) return facts;\n const plan = createInitPlan(facts.value, sdk?.manifest);\n if (!plan.ok) return plan;\n if (sdk !== undefined && options.dryRun !== true) {\n const initialized = await requireSdkInitialization(sdk);\n if (!initialized.ok) return initialized;\n }\n const applied = await applyInitPlan(facts.value, plan.value, options);\n if (!applied.ok || options.dryRun === true) return applied;\n if (sdk !== undefined) {\n const template = sdk.templates.get(sdk.defaultTemplate);\n if (template === undefined) throw new Error('sdk-default-template-missing');\n await copyFile(\n resolve(template, 'pnpm-lock.yaml'),\n resolve(facts.value.root, 'pnpm-lock.yaml'),\n );\n await copyFile(\n resolve(template, 'pnpm-workspace.yaml'),\n resolve(facts.value.root, 'pnpm-workspace.yaml'),\n );\n try {\n await readFile(resolve(facts.value.root, '.npmrc'), 'utf8');\n } catch (cause) {\n if (!isMissingPathError(cause)) throw cause;\n try {\n await copyFile(resolve(template, '.npmrc'), resolve(facts.value.root, '.npmrc'));\n } catch (templateCause) {\n if (!isMissingPathError(templateCause)) throw templateCause;\n }\n }\n await copySdkSkills(sdk, facts.value.root);\n await installProjectSkills(facts.value.root, sdk.manifest);\n await configureSdkStore(\n facts.value.root,\n sdk.store === undefined ? undefined : await canonicalProspectivePath(sdk.store),\n );\n }\n if (options.install === false) return applied;\n const store =\n sdk === undefined || sdk.store === undefined\n ? undefined\n : await canonicalProspectivePath(sdk.store);\n const installArgs =\n sdk === undefined ? ['install', '--frozen-lockfile=false'] : sdkProjectInstallArgs(store);\n await execFileAsync('pnpm', installArgs, {\n cwd: facts.value.root,\n env: { ...process.env, CI: 'true' },\n maxBuffer: 16 * 1024 * 1024,\n });\n return applied;\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'project-init-failed') };\n }\n}\n\nexport async function newCommand(options: NewOptions = {}): Promise<CommandResult<unknown>> {\n try {\n const sdk = await findSdkContext();\n if (sdk === undefined) {\n return {\n ok: false,\n error: {\n code: 'sdk-context-missing',\n expected: 'forgeax new to run from an unpacked ForgeaX SDK',\n hint: 'Run the SDK archive bin/forgeax.mjs entry or set FORGEAX_SDK_ROOT.',\n detail: {},\n },\n };\n }\n const root = resolve(options.root ?? process.cwd());\n if (\n containsOrEquals(\n await canonicalProspectivePath(sdk.root),\n await canonicalProspectivePath(root),\n )\n ) {\n return {\n ok: false,\n error: {\n code: 'project-target-inside-sdk',\n expected: 'forgeax new target to be outside the unpacked SDK root',\n hint: 'Choose a sibling directory or an absolute path outside the SDK.',\n detail: { root, sdkRoot: sdk.root },\n },\n };\n }\n const templateId = options.template ?? sdk.defaultTemplate;\n const template = sdk.templates.get(templateId);\n if (template === undefined) {\n return {\n ok: false,\n error: {\n code: 'sdk-template-not-found',\n expected: 'a template id declared by sdk-manifest.json',\n hint: `Choose one of: ${[...sdk.templates.keys()].sort().join(', ')}.`,\n detail: { template: templateId },\n },\n };\n }\n let targetExists = true;\n let entries: string[];\n try {\n entries = await readdir(root);\n } catch (cause) {\n if (!isMissingPathError(cause)) throw cause;\n targetExists = false;\n entries = [];\n }\n if (entries.length > 0) {\n return {\n ok: false,\n error: {\n code: 'project-target-not-empty',\n expected: 'forgeax new target to be absent or empty',\n hint: 'Choose an empty directory so existing files cannot be overwritten.',\n detail: { root },\n },\n };\n }\n if (options.dryRun === true) {\n return {\n ok: true,\n value: { root, template: templateId, sdkVersion: sdk.manifest.sdkVersion },\n };\n }\n const initialized = await requireSdkInitialization(sdk);\n if (!initialized.ok) return initialized;\n const parent = dirname(root);\n await mkdir(parent, { recursive: true });\n let staging: string | undefined = await mkdtemp(\n resolve(parent, `.${basename(root)}.forgeax-staging-`),\n );\n const committedNames: string[] = [];\n let committed = false;\n try {\n for (const name of await readdir(template)) {\n await cp(resolve(template, name), resolve(staging, name), {\n recursive: true,\n errorOnExist: true,\n force: false,\n });\n }\n await copySdkSkills(sdk, staging);\n await installProjectSkills(staging, sdk.manifest);\n const store = sdk.store === undefined ? undefined : await canonicalProspectivePath(sdk.store);\n await configureSdkStore(staging, store);\n if (!targetExists) {\n await rename(staging, root);\n staging = undefined;\n committedNames.push(...(await readdir(root)));\n } else {\n for (const name of await readdir(staging)) {\n await rename(resolve(staging, name), resolve(root, name));\n committedNames.push(name);\n }\n await rm(staging, { recursive: true, force: true });\n staging = undefined;\n }\n committed = true;\n // Install after the final rename so pnpm's virtual-store metadata keeps\n // the real project path. Installing inside staging would force a second\n // registry resolution when `pnpm exec` runs from the committed project.\n await execFileAsync('pnpm', sdkProjectInstallArgs(store), {\n cwd: root,\n env: { ...process.env, CI: 'true' },\n maxBuffer: 16 * 1024 * 1024,\n });\n const sdkUpdate = await checkSdkUpdate(sdk.manifest.sdkVersion);\n return {\n ok: true,\n value: {\n root,\n template: templateId,\n sdkVersion: sdk.manifest.sdkVersion,\n onboarding: agentOnboarding(sdk, root),\n sdkUpdate,\n },\n };\n } catch (cause) {\n if (staging !== undefined) await rm(staging, { recursive: true, force: true });\n if (committed) {\n if (!targetExists) {\n await rm(root, { recursive: true, force: true });\n return { ok: false, error: commandError(cause, 'project-create-failed') };\n }\n const cleanupNames = new Set([...committedNames, 'node_modules']);\n await Promise.all(\n [...cleanupNames].map((name) =>\n rm(resolve(root, name), { recursive: true, force: true }),\n ),\n );\n } else {\n await Promise.all(\n committedNames.map((name) => rm(resolve(root, name), { recursive: true, force: true })),\n );\n }\n return { ok: false, error: commandError(cause, 'project-create-failed') };\n }\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'project-create-failed') };\n }\n}\n","import { execFile } from 'node:child_process';\nimport { readFile, rename, unlink, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport { type GameProjectPluginEntry, GameProjectSchema } from '@forgeax/engine-project';\nimport type { CommandResult, PluginInstallOptions, PluginUninstallOptions } from './types.js';\n\nconst execFileAsync = promisify(execFile);\n\nasync function readManifest(root: string): Promise<CommandResult<{ raw: string; value: unknown }>> {\n const path = resolve(root, 'forge.json');\n try {\n const raw = await readFile(path, 'utf8');\n return { ok: true, value: { raw, value: JSON.parse(raw) as unknown } };\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'plugin-manifest-unreadable',\n expected: 'a readable forge.json',\n hint: 'Repair the project manifest before changing plugin installation state.',\n detail: { path, reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n\nasync function writeManifest(root: string, value: unknown): Promise<void> {\n const path = resolve(root, 'forge.json');\n const temporary = resolve(root, `.forgeax-plugin-${process.pid}.tmp`);\n await writeFile(temporary, `${JSON.stringify(value, null, 2)}\\n`);\n try {\n await rename(temporary, path);\n } catch (cause) {\n await unlink(temporary).catch(() => undefined);\n throw cause;\n }\n}\n\nfunction allEntries(entries: readonly GameProjectPluginEntry[]): GameProjectPluginEntry[] {\n return entries.flatMap((entry) => [\n entry,\n ...(entry.group === true ? allEntries(entry.config as readonly GameProjectPluginEntry[]) : []),\n ]);\n}\n\nfunction withoutEntry(\n entries: readonly GameProjectPluginEntry[],\n id: string,\n): GameProjectPluginEntry[] {\n return entries.flatMap((entry) => {\n if (entry.id === id) return [];\n if (entry.group !== true) return [entry];\n return [\n {\n ...entry,\n config: withoutEntry(entry.config as readonly GameProjectPluginEntry[], id),\n },\n ];\n });\n}\n\nasync function mutateDependency(\n root: string,\n action: 'add' | 'remove',\n dependency: string | undefined,\n): Promise<void> {\n if (dependency === undefined) return;\n await execFileAsync('pnpm', [action, dependency], { cwd: root, maxBuffer: 16 * 1024 * 1024 });\n}\n\nexport async function pluginInstallCommand(\n options: PluginInstallOptions,\n): Promise<CommandResult<unknown>> {\n const root = resolve(options.root ?? process.cwd());\n const manifest = await readManifest(root);\n if (!manifest.ok) return manifest;\n const parsed = GameProjectSchema.safeParse(manifest.value.value);\n if (!parsed.success) {\n return {\n ok: false,\n error: {\n code: 'plugin-manifest-invalid',\n expected: 'forge.json to satisfy GameProjectSchema',\n hint: 'Repair the manifest before installing a plugin.',\n detail: { issues: parsed.error.issues },\n },\n };\n }\n const entries = parsed.data.plugins ?? [];\n if (allEntries(entries).some((entry) => entry.id === options.id)) {\n return {\n ok: false,\n error: {\n code: 'plugin-entry-id-conflict',\n expected: 'a project-unique plugin Entry id',\n hint: 'Choose a stable id not already present in forge.json#plugins.',\n detail: { id: options.id },\n },\n };\n }\n const next = {\n ...parsed.data,\n plugins: [\n ...entries,\n { id: options.id, name: options.module, realm: options.realm ?? 'engine' },\n ],\n };\n if (options.dryRun === true) return { ok: true, value: { root, manifest: next } };\n try {\n await writeManifest(root, next);\n await mutateDependency(root, 'add', options.dependency);\n return { ok: true, value: { root, id: options.id, module: options.module } };\n } catch (cause) {\n await writeFile(resolve(root, 'forge.json'), manifest.value.raw);\n return {\n ok: false,\n error: {\n code: 'plugin-install-failed',\n expected: 'dependency and forge.json Entry mutations to commit together',\n hint: 'Inspect the package-manager failure; the original forge.json was restored.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n\nexport async function pluginUninstallCommand(\n options: PluginUninstallOptions,\n): Promise<CommandResult<unknown>> {\n const root = resolve(options.root ?? process.cwd());\n const manifest = await readManifest(root);\n if (!manifest.ok) return manifest;\n const parsed = GameProjectSchema.safeParse(manifest.value.value);\n if (!parsed.success) {\n return {\n ok: false,\n error: {\n code: 'plugin-manifest-invalid',\n expected: 'forge.json to satisfy GameProjectSchema',\n hint: 'Repair the manifest before uninstalling a plugin.',\n detail: { issues: parsed.error.issues },\n },\n };\n }\n const entries = parsed.data.plugins ?? [];\n if (!allEntries(entries).some((entry) => entry.id === options.id)) {\n return {\n ok: false,\n error: {\n code: 'plugin-entry-missing',\n expected: 'the plugin Entry id to exist',\n hint: 'Inspect forge.json#plugins and pass an installed Entry id.',\n detail: { id: options.id },\n },\n };\n }\n const next = { ...parsed.data, plugins: withoutEntry(entries, options.id) };\n if (options.dryRun === true) return { ok: true, value: { root, manifest: next } };\n try {\n await writeManifest(root, next);\n await mutateDependency(root, 'remove', options.dependency);\n return { ok: true, value: { root, id: options.id } };\n } catch (cause) {\n await writeFile(resolve(root, 'forge.json'), manifest.value.raw);\n return {\n ok: false,\n error: {\n code: 'plugin-uninstall-failed',\n expected: 'Entry and dependency removal to commit together',\n hint: 'Inspect the package-manager failure; the original forge.json was restored.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n","import { readFile } from 'node:fs/promises';\nimport { createRhiDebugError, replayDeviceRequest, type V7Tape } from '@forgeax/engine-rhi-debug';\nimport { createShaderModule, rhi } from '@forgeax/engine-rhi-webgpu';\nimport { err } from '@forgeax/engine-types';\nimport type { ArtifactRef, RhiDebugOperationContext } from './operations.js';\n\nexport function createCliRhiDebugOperationContext(): RhiDebugOperationContext {\n return {\n captureFrame: async () =>\n err(\n createRhiDebugError('capture-unavailable', {\n stage: 'capture',\n cause:\n 'the standalone CLI has no live App capture provider; start a recorder-enabled live host and invoke its rhiCapture root',\n }),\n ),\n async readArtifact(artifact: ArtifactRef) {\n if (artifact.path === undefined) {\n return {\n ok: false as const,\n error: {\n code: 'artifact-path-missing',\n expected: 'ArtifactRef.path to identify a readable .rhitape file',\n hint: 'Pass the path returned by the capture host together with its digest.',\n detail: { digest: artifact.digest },\n },\n };\n }\n try {\n return { ok: true as const, value: new Uint8Array(await readFile(artifact.path)) };\n } catch (cause) {\n return {\n ok: false as const,\n error: {\n code: 'artifact-read-failed',\n expected: 'the ArtifactRef path to be readable',\n hint: 'Check the tape path and recapture if the artifact was removed.',\n detail: {\n path: artifact.path,\n reason: cause instanceof Error ? cause.message : String(cause),\n },\n },\n };\n }\n },\n async createReplayBackend(tape: V7Tape) {\n let createDawn: (options: readonly string[]) => GPU;\n let gpuGlobals: Record<string, unknown>;\n try {\n const dawn = await import('webgpu');\n createDawn = dawn.create as (options: readonly string[]) => GPU;\n gpuGlobals = dawn.globals as Record<string, unknown>;\n } catch (cause) {\n return {\n ok: false as const,\n error: {\n code: 'replay-backend-unavailable',\n expected: 'the Dawn WebGPU provider to load',\n hint: 'Install the DevKit runtime closure and retry rhi.inspect.',\n detail: {\n stage: 'provider',\n cause: cause instanceof Error ? cause.message : String(cause),\n },\n },\n };\n }\n Object.assign(globalThis, gpuGlobals);\n const gpu = createDawn([]);\n if (!('navigator' in globalThis) || globalThis.navigator === undefined) {\n Object.defineProperty(globalThis, 'navigator', {\n value: {},\n configurable: true,\n writable: true,\n });\n }\n Object.defineProperty(globalThis.navigator, 'gpu', {\n value: gpu,\n configurable: true,\n writable: true,\n });\n const adapter = await rhi.requestAdapter();\n if (!adapter.ok) {\n return {\n ok: false as const,\n error: {\n code: 'replay-backend-unavailable',\n expected: 'a fresh Dawn WebGPU adapter',\n hint: adapter.error.hint,\n detail: { stage: 'adapter', cause: adapter.error.hint },\n },\n };\n }\n const device = await adapter.value.requestDevice(\n replayDeviceRequest(tape, adapter.value.features, adapter.value.limits),\n );\n if (!device.ok) {\n return {\n ok: false as const,\n error: {\n code: 'replay-backend-unavailable',\n expected: 'a fresh Dawn WebGPU device satisfying the recorded tape',\n hint: device.error.hint,\n detail: { stage: 'device', cause: device.error.hint },\n },\n };\n }\n return { ok: true as const, value: { device: device.value, createShaderModule } };\n },\n };\n}\n","import {\n buildFrameModel,\n decodeTape,\n type FrameModel,\n type InspectField,\n openReplay,\n type ReplayBackend,\n type RhiDebugError,\n type V7Tape,\n type WorkInspection,\n} from '@forgeax/engine-rhi-debug';\nimport { ok, type Result } from '@forgeax/engine-types';\nimport type { CommandError, CommandResult } from '../types.js';\n\nexport const RHI_TAPE_ARTIFACT_KIND = 'rhi-tape' as const;\n\nexport interface ArtifactRef {\n readonly kind: typeof RHI_TAPE_ARTIFACT_KIND;\n readonly digest: string;\n readonly source: string;\n readonly path?: string;\n}\n\nexport interface CapturedRhiTape extends ArtifactRef {\n readonly bytes: Uint8Array;\n}\n\nexport interface RhiCaptureFrameValue {\n readonly kind: typeof RHI_TAPE_ARTIFACT_KIND;\n readonly digest: string;\n readonly bytes: Uint8Array;\n readonly source?: string;\n readonly path?: string;\n}\n\nexport interface RhiCaptureInput {\n readonly signal?: AbortSignal;\n}\n\nexport interface RhiSummaryInput {\n readonly artifact: ArtifactRef;\n}\n\nexport interface RhiInspectInput {\n readonly artifact: ArtifactRef;\n readonly workIndex: number;\n readonly fields?: readonly InspectField[];\n}\n\nexport type RhiDebugOperationName = 'rhi.capture' | 'rhi.summary' | 'rhi.inspect';\n\nexport type RhiDebugOperationInput = RhiCaptureInput | RhiSummaryInput | RhiInspectInput;\n\nexport interface RhiSummaryOutput {\n readonly artifact: ArtifactRef;\n readonly model: FrameModel;\n}\n\nexport interface RhiInspectOutput {\n readonly artifact: ArtifactRef;\n readonly inspection: WorkInspection;\n}\n\nexport type RhiDebugOperationOutput = ArtifactRef | RhiSummaryOutput | RhiInspectOutput;\n\nexport interface RhiDebugOperationContext {\n readonly captureFrame: (\n input?: RhiCaptureInput,\n ) => Promise<Result<CapturedRhiTape, RhiDebugError>>;\n readonly readArtifact: (artifact: ArtifactRef) => Promise<CommandResult<Uint8Array>>;\n readonly createReplayBackend?: (tape: V7Tape) => Promise<CommandResult<ReplayBackend>>;\n}\n\nexport interface RhiDebugOperationHost {\n readonly captureFrame: (\n input?: RhiCaptureInput,\n ) => Promise<Result<RhiCaptureFrameValue, RhiDebugError>>;\n readonly readArtifact: (artifact: ArtifactRef) => Promise<CommandResult<Uint8Array>>;\n readonly createReplayBackend?: (tape: V7Tape) => Promise<CommandResult<ReplayBackend>>;\n}\n\nexport function createRhiDebugOperationContext(\n host: RhiDebugOperationHost,\n): RhiDebugOperationContext {\n return {\n async captureFrame(input) {\n const captured = await host.captureFrame(input);\n if (!captured.ok) return captured;\n return ok({\n kind: RHI_TAPE_ARTIFACT_KIND,\n digest: captured.value.digest,\n source: captured.value.source ?? 'rhi.capture',\n ...(captured.value.path === undefined ? {} : { path: captured.value.path }),\n bytes: captured.value.bytes,\n });\n },\n readArtifact: host.readArtifact,\n ...(host.createReplayBackend === undefined\n ? {}\n : { createReplayBackend: host.createReplayBackend }),\n };\n}\n\nexport interface JsonSchema {\n readonly type: 'object' | 'string' | 'integer' | 'array';\n readonly properties?: Readonly<Record<string, JsonSchema>>;\n readonly required?: readonly string[];\n readonly items?: JsonSchema;\n readonly enum?: readonly string[];\n readonly minimum?: number;\n readonly additionalProperties?: boolean;\n}\n\nexport interface RhiDebugOperationDescriptor {\n readonly name: RhiDebugOperationName;\n readonly summary: string;\n readonly inputSchema: JsonSchema;\n readonly outputSchema: JsonSchema;\n readonly recoveryCodes: readonly string[];\n}\n\nexport interface RhiDebugOperationManifest {\n readonly schemaVersion: '1.0.0';\n readonly artifactRefSchema: JsonSchema;\n readonly operations: readonly RhiDebugOperationDescriptor[];\n}\n\nconst artifactRefSchema: JsonSchema = {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: [RHI_TAPE_ARTIFACT_KIND] },\n digest: { type: 'string' },\n source: { type: 'string' },\n path: { type: 'string' },\n },\n required: ['kind', 'digest', 'source'],\n additionalProperties: false,\n};\n\nconst summaryOutputSchema: JsonSchema = {\n type: 'object',\n properties: {\n artifact: artifactRefSchema,\n model: { type: 'object', additionalProperties: true },\n },\n required: ['artifact', 'model'],\n additionalProperties: false,\n};\n\nconst inspectOutputSchema: JsonSchema = {\n type: 'object',\n properties: {\n artifact: artifactRefSchema,\n inspection: { type: 'object', additionalProperties: true },\n },\n required: ['artifact', 'inspection'],\n additionalProperties: false,\n};\n\nexport const RHI_DEBUG_OPERATION_MANIFEST: RhiDebugOperationManifest = {\n schemaVersion: '1.0.0',\n artifactRefSchema,\n operations: [\n {\n name: 'rhi.capture',\n summary: 'Capture the next frame and return one rhi-tape ArtifactRef.',\n inputSchema: {\n type: 'object',\n properties: {},\n additionalProperties: false,\n },\n outputSchema: artifactRefSchema,\n recoveryCodes: [\n 'capture-unavailable',\n 'capture-busy',\n 'capture-snapshot-failed',\n 'capture-timeout',\n ],\n },\n {\n name: 'rhi.summary',\n summary: 'Strictly decode one ArtifactRef and return its CPU FrameModel.',\n inputSchema: {\n type: 'object',\n properties: { artifact: artifactRefSchema },\n required: ['artifact'],\n additionalProperties: false,\n },\n outputSchema: summaryOutputSchema,\n recoveryCodes: ['tape-invalid', 'tape-version-unsupported'],\n },\n {\n name: 'rhi.inspect',\n summary: 'Replay one ArtifactRef on a fresh backend and inspect a workIndex.',\n inputSchema: {\n type: 'object',\n properties: {\n artifact: artifactRefSchema,\n workIndex: { type: 'integer', minimum: 0 },\n fields: {\n type: 'array',\n items: { type: 'string', enum: ['bindings', 'pipeline', 'pixels'] },\n },\n },\n required: ['artifact', 'workIndex'],\n additionalProperties: false,\n },\n outputSchema: inspectOutputSchema,\n recoveryCodes: [\n 'tape-invalid',\n 'tape-version-unsupported',\n 'replay-capability-mismatch',\n 'replay-event-failed',\n 'replay-position-invalid',\n 'readback-failed',\n 'readback-unsupported',\n ],\n },\n ],\n};\n\nexport function discoverRhiDebugOperations(): readonly RhiDebugOperationDescriptor[] {\n return RHI_DEBUG_OPERATION_MANIFEST.operations;\n}\n\nexport function renderRhiDebugHelp(): string {\n return [\n 'forgeax run <operation>',\n ...discoverRhiDebugOperations().map((operation) => ` ${operation.name}: ${operation.summary}`),\n 'Usage:',\n ' forgeax run rhi.summary --artifact PATH --digest SHA256 --json',\n ' forgeax run rhi.inspect --artifact PATH --digest SHA256 --work-index N --fields pipeline,bindings,pixels --json',\n 'ArtifactRef schema:',\n JSON.stringify(RHI_DEBUG_OPERATION_MANIFEST.artifactRefSchema),\n ].join('\\n');\n}\n\nexport function recoverRhiDebugError(error: RhiDebugError): string {\n switch (error.code) {\n case 'capture-unavailable':\n case 'capture-busy':\n case 'capture-snapshot-failed':\n case 'capture-timeout':\n return `${error.hint}: ${error.detail?.cause ?? 'capture failed'}`;\n case 'tape-invalid':\n return `${error.hint}: ${error.detail?.cause ?? 'tape validation failed'}`;\n case 'tape-version-unsupported':\n return `${error.hint}: found ${error.detail?.foundVersion}, expected ${error.detail?.expectedVersion}`;\n case 'replay-capability-mismatch':\n return `${error.hint}: ${error.detail?.cause ?? 'capability mismatch'}`;\n case 'replay-event-failed':\n return `${error.hint}: event ${error.detail?.eventIndex} ${error.detail?.kind} at ${error.detail?.stage}`;\n case 'replay-position-invalid':\n return `${error.hint}: requested ${error.detail?.requested}, available ${error.detail?.available}`;\n case 'readback-failed':\n return `${error.hint}: ${error.detail?.cause ?? 'readback failed'}`;\n case 'readback-unsupported':\n return `${error.hint}: ${error.detail?.reason ?? 'readback is unsupported'}`;\n }\n}\n\nfunction coreError(error: RhiDebugError): CommandError {\n return {\n code: error.code,\n expected: error.expected,\n hint: recoverRhiDebugError(error),\n detail: error.detail === undefined ? {} : Object.fromEntries(Object.entries(error.detail)),\n };\n}\n\nfunction operationError(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>> = {},\n): CommandResult<never> {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nfunction validateArtifactRef(\n value: unknown,\n):\n | { readonly ok: true; readonly value: ArtifactRef }\n | { readonly ok: false; readonly error: CommandError } {\n if (value === null || typeof value !== 'object') {\n return operationError(\n 'artifact-ref-invalid',\n 'an ArtifactRef object',\n 'Pass the ArtifactRef returned by rhi.capture unchanged.',\n );\n }\n const candidate = value as Record<string, unknown>;\n if (candidate.kind !== RHI_TAPE_ARTIFACT_KIND) {\n return operationError(\n 'artifact-kind-invalid',\n `ArtifactRef.kind to equal ${RHI_TAPE_ARTIFACT_KIND}`,\n 'Capture a new RHI tape and pass its ArtifactRef unchanged.',\n { kind: candidate.kind ?? null },\n );\n }\n if (typeof candidate.digest !== 'string' || candidate.digest.length === 0) {\n return operationError(\n 'artifact-digest-invalid',\n 'ArtifactRef.digest to be a non-empty digest',\n 'Use the digest returned with the captured tape.',\n );\n }\n if (typeof candidate.source !== 'string' || candidate.source.length === 0) {\n return operationError(\n 'artifact-source-invalid',\n 'ArtifactRef.source to identify the producing operation',\n 'Use the complete ArtifactRef returned by rhi.capture.',\n );\n }\n return {\n ok: true,\n value: {\n kind: RHI_TAPE_ARTIFACT_KIND,\n digest: candidate.digest,\n source: candidate.source,\n ...(typeof candidate.path === 'string' ? { path: candidate.path } : {}),\n },\n };\n}\n\nasync function readTape(\n artifact: ArtifactRef,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<Uint8Array>> {\n const validated = validateArtifactRef(artifact);\n if (!validated.ok) return validated;\n return context.readArtifact(validated.value);\n}\n\nexport function runRhiDebugOperation(\n name: 'rhi.capture',\n input: RhiCaptureInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<ArtifactRef>>;\nexport function runRhiDebugOperation(\n name: 'rhi.summary',\n input: RhiSummaryInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiSummaryOutput>>;\nexport function runRhiDebugOperation(\n name: 'rhi.inspect',\n input: RhiInspectInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiInspectOutput>>;\nexport function runRhiDebugOperation(\n name: RhiDebugOperationName,\n input: RhiDebugOperationInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiDebugOperationOutput>>;\nexport async function runRhiDebugOperation(\n name: RhiDebugOperationName,\n input: RhiDebugOperationInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiDebugOperationOutput>> {\n switch (name) {\n case 'rhi.capture': {\n const capture = await context.captureFrame(input as RhiCaptureInput);\n if (!capture.ok) return { ok: false, error: coreError(capture.error) };\n const artifact = validateArtifactRef(capture.value);\n if (!artifact.ok) return artifact;\n return { ok: true, value: artifact.value };\n }\n case 'rhi.summary': {\n const summaryInput = input as RhiSummaryInput;\n const bytes = await readTape(summaryInput.artifact, context);\n if (!bytes.ok) return bytes;\n const decoded = decodeTape(bytes.value);\n if (!decoded.ok) return { ok: false, error: coreError(decoded.error) };\n const artifact = validateArtifactRef(summaryInput.artifact);\n if (!artifact.ok) return artifact;\n return {\n ok: true,\n value: { artifact: artifact.value, model: buildFrameModel(decoded.value) },\n };\n }\n case 'rhi.inspect': {\n const inspectInput = input as RhiInspectInput;\n if (!Number.isInteger(inspectInput.workIndex) || inspectInput.workIndex < 0) {\n return operationError(\n 'work-index-invalid',\n 'workIndex to be a non-negative integer',\n 'Choose workIndex from the FrameModel returned by rhi.summary.',\n { workIndex: inspectInput.workIndex },\n );\n }\n const bytes = await readTape(inspectInput.artifact, context);\n if (!bytes.ok) return bytes;\n const decoded = decodeTape(bytes.value);\n if (!decoded.ok) return { ok: false, error: coreError(decoded.error) };\n if (context.createReplayBackend === undefined) {\n return operationError(\n 'replay-backend-unavailable',\n 'a fresh ReplayBackend factory',\n 'Provide a fresh device and shader factory before running rhi.inspect.',\n );\n }\n const backend = await context.createReplayBackend(decoded.value);\n if (!backend.ok) return backend;\n const opened = await openReplay(decoded.value, backend.value);\n if (!opened.ok) return { ok: false, error: coreError(opened.error) };\n try {\n const inspection = await opened.value.inspectWork(\n inspectInput.workIndex,\n inspectInput.fields,\n );\n if (!inspection.ok) return { ok: false, error: coreError(inspection.error) };\n const artifact = validateArtifactRef(inspectInput.artifact);\n if (!artifact.ok) return artifact;\n return { ok: true, value: { artifact: artifact.value, inspection: inspection.value } };\n } finally {\n await opened.value.dispose();\n }\n }\n }\n}\n","import { execFile } from 'node:child_process';\nimport { cp, mkdir, mkdtemp, readdir, readFile, rename, rm } from 'node:fs/promises';\nimport { basename, dirname, resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport { commandError } from './project.js';\nimport type { CommandResult } from './types.js';\n\nconst execFileAsync = promisify(execFile);\n\nexport interface SdkInstallOptions {\n readonly root: string;\n readonly version?: string;\n}\n\nasync function packageVersion(): Promise<string> {\n const manifest = JSON.parse(await readFile(new URL('../package.json', import.meta.url), 'utf8'));\n if (typeof manifest.version !== 'string' || manifest.version.length === 0) {\n throw new Error('sdk-installer-version-missing');\n }\n return manifest.version;\n}\n\nexport async function sdkInstallCommand(\n options: SdkInstallOptions,\n): Promise<CommandResult<unknown>> {\n const root = resolve(options.root);\n let targetExists = true;\n let entries: string[];\n try {\n entries = await readdir(root);\n } catch (cause) {\n if (\n cause === null ||\n typeof cause !== 'object' ||\n !('code' in cause) ||\n cause.code !== 'ENOENT'\n ) {\n return { ok: false, error: commandError(cause, 'sdk-install-failed') };\n }\n targetExists = false;\n entries = [];\n }\n if (entries.length > 0) {\n return {\n ok: false,\n error: {\n code: 'sdk-target-not-empty',\n expected: 'the SDK install target to be absent or empty',\n hint: 'Choose an empty versioned SDK directory so existing files cannot be overwritten.',\n detail: { root },\n },\n };\n }\n\n const version = options.version ?? (await packageVersion());\n const parent = dirname(root);\n await mkdir(parent, { recursive: true });\n let staging: string | undefined;\n let download: string | undefined;\n try {\n staging = await mkdtemp(resolve(parent, `.${basename(root)}.forgeax-sdk-staging-`));\n download = await mkdtemp(resolve(parent, `.${basename(root)}.forgeax-sdk-download-`));\n await execFileAsync(\n process.env.FORGEAX_NPM_CLIENT ?? 'npm',\n [\n 'install',\n '--prefix',\n download,\n '--ignore-scripts',\n '--no-package-lock',\n '--no-save',\n '--fund=false',\n '--audit=false',\n `@forgeax/engine-sdk@${version}`,\n ],\n { env: { ...process.env, CI: 'true' }, maxBuffer: 16 * 1024 * 1024 },\n );\n const carrier = resolve(download, 'node_modules', '@forgeax', 'engine-sdk', 'sdk');\n const manifest = JSON.parse(await readFile(resolve(carrier, 'sdk-manifest.json'), 'utf8'));\n if (manifest.sdkVersion !== version) throw new Error('sdk-carrier-version-mismatch');\n for (const name of await readdir(carrier)) {\n await cp(resolve(carrier, name), resolve(staging, name), {\n recursive: true,\n errorOnExist: true,\n force: false,\n });\n }\n if (!targetExists) {\n await rename(staging, root);\n staging = undefined;\n } else {\n for (const name of await readdir(staging)) {\n await rename(resolve(staging, name), resolve(root, name));\n }\n }\n return {\n ok: true,\n value: {\n root,\n sdkVersion: version,\n source: '@forgeax/engine-sdk',\n next: { cwd: root, argv: ['node', './bin/forgeax.mjs', 'init'] },\n },\n };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'sdk-install-failed') };\n } finally {\n if (staging !== undefined) await rm(staging, { recursive: true, force: true });\n if (download !== undefined) await rm(download, { recursive: true, force: true });\n }\n}\n","import { mkdtemp, readFile, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { resolve } from 'node:path';\nimport { build as viteBuild } from 'vite';\nimport { createViteConfig } from './host.js';\nimport { commandError, readProjectFacts } from './project.js';\nimport type { CommandResult, ShaderCheckOptions } from './types.js';\n\nexport async function shaderCheckCommand(\n options: ShaderCheckOptions = {},\n): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const target = options.path === undefined ? undefined : resolve(facts.value.root, options.path);\n if (target !== undefined) {\n try {\n await readFile(target);\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'shader-source-unreadable') };\n }\n }\n const temporary = await mkdtemp(resolve(tmpdir(), 'forgeax-shader-check-'));\n const previous = process.cwd();\n try {\n process.chdir(facts.value.root);\n const config = await createViteConfig(facts.value, 'build');\n await viteBuild({\n ...config,\n build: { ...config.build, outDir: temporary, emptyOutDir: true, write: true },\n });\n return { ok: true, value: { root: facts.value.root, path: target ?? null } };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'shader-check-failed') };\n } finally {\n process.chdir(previous);\n await rm(temporary, { recursive: true, force: true });\n }\n}\n","import { type ChildProcess, spawn } from 'node:child_process';\nimport { createHash, randomUUID } from 'node:crypto';\nimport { access, mkdir, writeFile } from 'node:fs/promises';\nimport { createServer as createNetServer } from 'node:net';\nimport { dirname, resolve } from 'node:path';\nimport { FORGEAX_FRAME_SUBMITTED_DATASET } from '@forgeax/engine-app';\nimport { parseImage } from '@forgeax/engine-image/parse-image';\nimport { type Browser, chromium, type Page } from 'playwright';\nimport type { ViteDevServer } from 'vite';\nimport { createViteConfig } from './host.js';\nimport { commandError, readProjectFacts } from './project.js';\nimport type {\n BrowserCaptureOptions,\n CaptureBackend,\n CommandError,\n CommandResult,\n SoftwareCaptureOptions,\n} from './types.js';\n\ninterface VirtualDisplay {\n readonly value?: string;\n close(): Promise<void>;\n}\n\nexport interface CapturePixelWitness {\n readonly width: number;\n readonly height: number;\n readonly sampledPixels: number;\n readonly lumaMin: number;\n readonly lumaMax: number;\n readonly lumaRange: number;\n readonly varyingPixels: number;\n readonly rendered: boolean;\n}\n\nexport interface SoftwareCaptureRuntimeWitness {\n readonly title: string;\n readonly canvas: { readonly width: number; readonly height: number } | null;\n readonly domUi: {\n readonly rootChildren: number;\n readonly openShadowRoots: number;\n readonly textWitness: string;\n };\n readonly adapter: Readonly<Record<string, unknown>> | null;\n readonly adapterError: string | null;\n readonly engineFrameId: number | null;\n readonly captureReady: string | null;\n readonly userAgent: string;\n}\n\nexport interface SoftwareCaptureRecord {\n readonly index: number;\n readonly checkpoint: string | null;\n readonly ok: boolean;\n readonly output: string;\n readonly digest: string;\n readonly pixels: CapturePixelWitness;\n readonly runtime: SoftwareCaptureRuntimeWitness;\n}\n\nexport interface SoftwareCaptureRunReport {\n readonly schemaVersion: '2.0.0';\n readonly runId: string;\n readonly ok: boolean;\n readonly mode: 'browser-compositor' | 'advanced-cpu-only-development';\n readonly root: string;\n readonly url: string;\n readonly report: string;\n readonly backendRequested: CaptureBackend;\n readonly backend: 'software' | 'hardware' | 'unknown';\n /** @deprecated Read `backendRequested` instead. */\n readonly softwareRequested: boolean;\n readonly deterministicRequested: boolean;\n readonly viewport: {\n readonly width: number;\n readonly height: number;\n readonly deviceScaleFactor: 1;\n readonly colorProfile: 'srgb';\n readonly colorScheme: 'light';\n readonly locale: 'en-US';\n readonly timezone: 'UTC';\n };\n readonly browser: { readonly version: string; readonly executable: string };\n readonly display: string | null;\n readonly lavapipeIcd: string | null;\n readonly captures: readonly SoftwareCaptureRecord[];\n readonly consoleErrors: readonly string[];\n readonly pageErrors: readonly string[];\n readonly closedAt?: string;\n readonly boundary: string;\n}\n\nexport interface SoftwareBrowserOpenOptions {\n /** `auto` preserves the host/browser lane; the other values are assertions. */\n readonly backend?: CaptureBackend;\n /** @deprecated Use `backend: 'software'`. */\n readonly software?: boolean;\n readonly browser?: string;\n readonly width?: number;\n readonly height?: number;\n readonly port?: number;\n readonly requireUi?: boolean;\n readonly deterministic?: boolean;\n readonly outputDir?: string;\n readonly report?: string;\n readonly runId?: string;\n readonly headless?: boolean;\n}\n\nexport interface SoftwareCaptureCheckpointOptions {\n readonly output?: string;\n readonly waitMs?: number;\n readonly requireUi?: boolean;\n}\n\nexport interface SoftwareBrowserSession {\n readonly page: Page;\n readonly url: string;\n readonly reportPath: string;\n capture(\n checkpoint?: string,\n options?: SoftwareCaptureCheckpointOptions,\n ): Promise<SoftwareCaptureRecord>;\n report(): SoftwareCaptureRunReport;\n close(): Promise<void>;\n}\n\nexport interface SoftwareBrowser {\n open(options: SoftwareBrowserOpenOptions): Promise<SoftwareBrowserSession>;\n close(): Promise<void>;\n}\n\n/** General browser-compositor capture surface. */\nexport type BrowserCaptureRuntimeWitness = SoftwareCaptureRuntimeWitness;\nexport type BrowserCaptureRecord = SoftwareCaptureRecord;\nexport type BrowserCaptureRunReport = SoftwareCaptureRunReport;\nexport type BrowserCaptureOpenOptions = SoftwareBrowserOpenOptions;\nexport type BrowserCaptureCheckpointOptions = SoftwareCaptureCheckpointOptions;\nexport type BrowserCaptureSession = SoftwareBrowserSession;\nexport type BrowserCapture = SoftwareBrowser;\n\nclass SoftwareCaptureError extends Error implements CommandError {\n constructor(\n readonly code: string,\n readonly expected: string,\n readonly hint: string,\n readonly detail: Readonly<Record<string, unknown>>,\n ) {\n super(`${code}: ${hint}`);\n this.name = 'SoftwareCaptureError';\n }\n}\n\nfunction fail(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>> = {},\n): never {\n throw new SoftwareCaptureError(code, expected, hint, detail);\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function reservePort(): Promise<number> {\n const reservation = createNetServer();\n await new Promise<void>((resolveListen, rejectListen) => {\n reservation.once('error', rejectListen);\n reservation.listen(0, '127.0.0.1', resolveListen);\n });\n const address = reservation.address();\n const port = typeof address === 'object' && address !== null ? address.port : 0;\n await new Promise<void>((resolveClose, rejectClose) => {\n reservation.close((error) => (error === undefined ? resolveClose() : rejectClose(error)));\n });\n if (port === 0) throw new Error('OS did not assign an ephemeral capture port');\n return port;\n}\n\nasync function stopProcess(child: ChildProcess): Promise<void> {\n if (child.exitCode !== null || child.signalCode !== null) return;\n await new Promise<void>((resolveStop) => {\n const timeout = setTimeout(() => {\n child.kill('SIGKILL');\n resolveStop();\n }, 2_000);\n child.once('exit', () => {\n clearTimeout(timeout);\n resolveStop();\n });\n child.kill('SIGTERM');\n });\n}\n\nasync function startVirtualDisplay(width: number, height: number): Promise<VirtualDisplay> {\n if (process.platform !== 'linux' || process.env.DISPLAY !== undefined) {\n return {\n ...(process.env.DISPLAY === undefined ? {} : { value: process.env.DISPLAY }),\n async close() {},\n };\n }\n for (let offset = 0; offset < 100; offset += 1) {\n const number = 90 + ((process.pid + offset) % 100);\n const socket = `/tmp/.X11-unix/X${number}`;\n const lock = `/tmp/.X${number}-lock`;\n if ((await pathExists(socket)) || (await pathExists(lock))) continue;\n const display = `:${number}`;\n const child = spawn(\n 'Xvfb',\n [display, '-screen', '0', `${width}x${height}x24`, '-nolisten', 'tcp'],\n { stdio: ['ignore', 'ignore', 'pipe'] },\n );\n let diagnostic = '';\n child.stderr?.setEncoding('utf8');\n child.stderr?.on('data', (chunk: string) => {\n diagnostic += chunk;\n });\n try {\n await new Promise<void>((resolveReady, rejectReady) => {\n const timeout = setTimeout(\n () => rejectReady(new Error(`Xvfb did not create ${socket}: ${diagnostic.trim()}`)),\n 5_000,\n );\n const poll = setInterval(() => {\n void pathExists(socket).then((exists) => {\n if (!exists) return;\n clearTimeout(timeout);\n clearInterval(poll);\n resolveReady();\n });\n }, 50);\n child.once('error', (error) => {\n clearTimeout(timeout);\n clearInterval(poll);\n rejectReady(error);\n });\n child.once('exit', (code, signal) => {\n clearTimeout(timeout);\n clearInterval(poll);\n rejectReady(\n new Error(`Xvfb exited before ready (${code ?? signal}): ${diagnostic.trim()}`),\n );\n });\n });\n return { value: display, close: () => stopProcess(child) };\n } catch (cause) {\n await stopProcess(child);\n throw cause;\n }\n }\n throw new Error('no free X11 display number was available for browser capture');\n}\n\nasync function lavapipeIcd(): Promise<string | undefined> {\n for (const candidate of [\n '/usr/share/vulkan/icd.d/lvp_icd.x86_64.json',\n '/usr/share/vulkan/icd.d/lvp_icd.aarch64.json',\n ]) {\n if (await pathExists(candidate)) return candidate;\n }\n return undefined;\n}\n\nfunction evidencePath(output: string): string {\n return output.toLowerCase().endsWith('.png') ? `${output.slice(0, -4)}.json` : `${output}.json`;\n}\n\nfunction newRunId(): string {\n return `${new Date().toISOString().replace(/[:.]/g, '-')}-${randomUUID().slice(0, 8)}`;\n}\n\nfunction checkpointSlug(checkpoint: string | undefined): string {\n const value = (checkpoint ?? 'capture')\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 80);\n return value.length === 0 ? 'capture' : value;\n}\n\nfunction captureDigest(bytes: Uint8Array): string {\n return `sha256:${createHash('sha256').update(bytes).digest('hex')}`;\n}\n\ntype CaptureBackendObserved = 'software' | 'hardware' | 'unknown';\n\nfunction observedBackend(runtime: SoftwareCaptureRuntimeWitness): CaptureBackendObserved {\n if (runtime.adapter === null) return 'unknown';\n return isSoftwareAdapter(runtime) ? 'software' : 'hardware';\n}\n\nasync function resolveBrowserExecutable(\n requested: string | undefined,\n): Promise<string | undefined> {\n const candidates = [\n requested,\n process.env.FORGEAX_BROWSER_EXECUTABLE,\n '/opt/google/chrome-beta/chrome',\n '/usr/bin/google-chrome',\n '/usr/bin/google-chrome-stable',\n '/usr/bin/chromium',\n '/usr/bin/chromium-browser',\n ].filter((candidate): candidate is string => candidate !== undefined && candidate.length > 0);\n for (const candidate of candidates) {\n if (await pathExists(candidate)) return candidate;\n }\n // Playwright can supply a managed browser when its browser cache is present.\n // Leave executablePath unset so the caller receives Playwright's own diagnostic\n // rather than a misleading Chrome-Beta-only error.\n return undefined;\n}\n\nfunction browserLaunchArgs(backend: CaptureBackend): string[] {\n const common = [\n '--enable-unsafe-webgpu',\n '--ignore-gpu-blocklist',\n '--disable-gpu-driver-bug-workarounds',\n '--force-color-profile=srgb',\n '--force-device-scale-factor=1',\n ];\n if (backend !== 'software') return common;\n return [\n ...common,\n '--enable-features=Vulkan',\n '--use-vulkan=swiftshader',\n '--use-angle=swiftshader',\n '--disable-vulkan-surface',\n ];\n}\n\nexport function summarizeCapturePixels(\n rgba: Uint8Array,\n width: number,\n height: number,\n): CapturePixelWitness {\n const pixelCount = width * height;\n const stride = Math.max(1, Math.floor(pixelCount / 4096));\n const histogram = new Uint32Array(16);\n let lumaMin = 255;\n let lumaMax = 0;\n let sampledPixels = 0;\n for (let pixel = 0; pixel < pixelCount; pixel += stride) {\n const offset = pixel * 4;\n const red = rgba[offset];\n const green = rgba[offset + 1];\n const blue = rgba[offset + 2];\n if (red === undefined || green === undefined || blue === undefined) break;\n const luma = Math.round((54 * red + 183 * green + 19 * blue) / 256);\n lumaMin = Math.min(lumaMin, luma);\n lumaMax = Math.max(lumaMax, luma);\n const bucket = Math.min(15, Math.floor(luma / 16));\n histogram[bucket] = (histogram[bucket] ?? 0) + 1;\n sampledPixels += 1;\n }\n const dominantPixels = histogram.reduce((largest, count) => Math.max(largest, count), 0);\n const varyingPixels = sampledPixels - dominantPixels;\n const lumaRange = lumaMax - lumaMin;\n const requiredVariation = Math.min(sampledPixels, Math.max(8, Math.ceil(sampledPixels * 0.002)));\n return {\n width,\n height,\n sampledPixels,\n lumaMin,\n lumaMax,\n lumaRange,\n varyingPixels,\n rendered: lumaRange >= 8 && varyingPixels >= requiredVariation,\n };\n}\n\nfunction inspectCapturePng(png: Uint8Array): CapturePixelWitness {\n const decoded = parseImage(png, 'image/png', { mipmap: false });\n if (!decoded.ok) throw decoded.error;\n return summarizeCapturePixels(decoded.value.bytes, decoded.value.width, decoded.value.height);\n}\n\nasync function screenshotWithWitness(\n page: Page,\n): Promise<{ readonly png: Uint8Array; readonly pixels: CapturePixelWitness }> {\n const canvasPng = await page.locator('canvas').first().screenshot({\n type: 'png',\n style: '* { visibility: hidden !important; } canvas { visibility: visible !important; }',\n });\n const png = await page.screenshot({ type: 'png', caret: 'hide' });\n return { png, pixels: inspectCapturePng(canvasPng) };\n}\n\nasync function waitForCompositor(page: Page): Promise<void> {\n await page.evaluate(async () => {\n await document.fonts.ready;\n await new Promise<void>((resolveFrame) => requestAnimationFrame(() => resolveFrame()));\n await new Promise<void>((resolveFrame) => requestAnimationFrame(() => resolveFrame()));\n });\n}\n\nasync function runtimeWitness(page: Page): Promise<SoftwareCaptureRuntimeWitness> {\n return page.evaluate(async (datasetKey) => {\n const canvas = document.querySelector('canvas');\n const uiRoot = document.querySelector('#game-ui');\n const shadowHosts = [...(uiRoot?.querySelectorAll('*') ?? [])].filter(\n (element) => element.shadowRoot?.childElementCount !== 0,\n );\n let adapter: Readonly<Record<string, unknown>> | null = null;\n let adapterError: string | null = null;\n try {\n const gpuAdapter = await navigator.gpu?.requestAdapter();\n if (gpuAdapter === null || gpuAdapter === undefined) {\n adapterError = 'navigator.gpu.requestAdapter() returned null';\n } else {\n const info = gpuAdapter.info;\n adapter = {\n vendor: info.vendor,\n architecture: info.architecture,\n device: info.device,\n description: info.description,\n };\n }\n } catch (cause) {\n adapterError = String(cause);\n }\n const frameId = Number(document.documentElement.dataset[datasetKey]);\n return {\n title: document.title,\n canvas:\n canvas instanceof HTMLCanvasElement ? { width: canvas.width, height: canvas.height } : null,\n domUi: {\n rootChildren: uiRoot?.childElementCount ?? 0,\n openShadowRoots: shadowHosts.length,\n textWitness: shadowHosts\n .map((host) => host.shadowRoot?.textContent?.replace(/\\s+/g, ' ').trim() ?? '')\n .filter((text) => text.length > 0)\n .join(' | ')\n .slice(0, 500),\n },\n adapter,\n adapterError,\n engineFrameId: Number.isSafeInteger(frameId) && frameId > 0 ? frameId : null,\n captureReady: document.documentElement.dataset.forgeaxCaptureReady ?? null,\n userAgent: navigator.userAgent,\n };\n }, FORGEAX_FRAME_SUBMITTED_DATASET);\n}\n\nfunction isSoftwareAdapter(runtime: SoftwareCaptureRuntimeWitness): boolean {\n const witness = Object.values(runtime.adapter ?? {})\n .map((value) => String(value).toLowerCase())\n .join(' ');\n return ['swiftshader', 'llvmpipe', 'lavapipe', 'software'].some((token) =>\n witness.includes(token),\n );\n}\n\nasync function writeRunReport(report: SoftwareCaptureRunReport): Promise<void> {\n await mkdir(dirname(report.report), { recursive: true });\n await writeFile(report.report, `${JSON.stringify(report, null, 2)}\\n`, 'utf8');\n}\n\nasync function openBrowserCaptureSession(\n root: string,\n options: BrowserCaptureOpenOptions,\n): Promise<BrowserCaptureSession> {\n const backend: CaptureBackend =\n options.backend ?? (options.software === true ? 'software' : 'auto');\n if (\n options.software === true &&\n options.backend !== undefined &&\n options.backend !== 'software'\n ) {\n fail(\n 'browser-capture-option-conflict',\n 'software and backend options to describe the same capture lane',\n 'Use either software: true or backend: software; use backend: auto for a portable capture.',\n { software: options.software, backend: options.backend },\n );\n }\n const facts = await readProjectFacts(root);\n if (!facts.ok) {\n throw new SoftwareCaptureError(\n facts.error.code,\n facts.error.expected,\n facts.error.hint,\n facts.error.detail,\n );\n }\n const width = options.width ?? 1280;\n const height = options.height ?? 720;\n const browserPath = await resolveBrowserExecutable(options.browser);\n if (options.browser !== undefined && browserPath === undefined) {\n fail(\n 'browser-capture-browser-missing',\n `a runnable browser at ${options.browser}`,\n 'Install Chrome/Chromium or pass --browser with an executable path.',\n { browser: options.browser },\n );\n }\n\n const id = options.runId ?? newRunId();\n const outputDirectory = resolve(\n facts.value.root,\n options.outputDir ?? `artifacts/playthrough/${id}`,\n );\n const reportPath = resolve(\n facts.value.root,\n options.report ?? resolve(outputDirectory, 'run.json'),\n );\n const port =\n options.port === undefined || options.port === 0 ? await reservePort() : options.port;\n let server: ViteDevServer | undefined;\n let browser: Browser | undefined;\n let page: Page | undefined;\n let display: VirtualDisplay | undefined;\n try {\n const { createServer } = await import('vite');\n server = await createServer(\n await createViteConfig(facts.value, 'serve', '/', {\n server: { port, strictPort: true },\n }),\n );\n await server.listen(port);\n display = await startVirtualDisplay(width, height);\n const captureDisplay = display;\n const icd = await lavapipeIcd();\n const consoleErrors: string[] = [];\n const pageErrors: string[] = [];\n const hasDisplay = display.value !== undefined;\n const headless = options.headless ?? (!hasDisplay && process.platform !== 'linux');\n const baseUrl = new URL(server.resolvedUrls?.local[0] ?? `http://127.0.0.1:${port}/`);\n const openPage = async (\n launchBackend: CaptureBackend,\n ): Promise<SoftwareCaptureRuntimeWitness> => {\n const browserEnvironment: Record<string, string> = {\n ...Object.fromEntries(\n Object.entries(process.env).filter(\n (entry): entry is [string, string] => entry[1] !== undefined,\n ),\n ),\n ...(launchBackend === 'software' ? { LIBGL_ALWAYS_SOFTWARE: '1' } : {}),\n ...(captureDisplay.value === undefined ? {} : { DISPLAY: captureDisplay.value }),\n };\n const launchOptions = {\n headless,\n env: browserEnvironment,\n args: browserLaunchArgs(launchBackend),\n ...(browserPath === undefined ? {} : { executablePath: browserPath }),\n };\n browser = await chromium.launch(launchOptions);\n page = await browser.newPage({\n viewport: { width, height },\n screen: { width, height },\n deviceScaleFactor: 1,\n colorScheme: 'light',\n locale: 'en-US',\n timezoneId: 'UTC',\n serviceWorkers: 'block',\n });\n page.on('console', (message) => {\n if (message.type() === 'error') consoleErrors.push(message.text());\n });\n page.on('pageerror', (error) => pageErrors.push(String(error)));\n const captureUrl = new URL(baseUrl.href);\n if (options.deterministic === true) captureUrl.searchParams.set('forgeaxCapture', '1');\n await page.goto(captureUrl.href, { waitUntil: 'domcontentloaded', timeout: 120_000 });\n await page.waitForFunction(\n (requireUi) => {\n const canvas = document.querySelector('canvas');\n if (!(canvas instanceof HTMLCanvasElement) || canvas.width <= 0 || canvas.height <= 0)\n return false;\n if (!requireUi) return true;\n const uiRoot = document.querySelector('#game-ui');\n return uiRoot !== null && uiRoot.childElementCount > 0;\n },\n options.requireUi === true,\n { timeout: 120_000 },\n );\n return runtimeWitness(page);\n };\n\n // Auto first preserves a physical adapter. If WebGPU is unavailable, retry\n // once through the same explicit software lane used by CPU-only hosts. This\n // keeps the public capture contract portable without masking a flat frame.\n const initialLaunchBackend: CaptureBackend = backend === 'software' ? 'software' : 'hardware';\n let runtime = await openPage(initialLaunchBackend);\n let observed = observedBackend(runtime);\n if (backend === 'auto' && runtime.adapter === null) {\n await browser?.close();\n browser = undefined;\n page = undefined;\n consoleErrors.length = 0;\n pageErrors.length = 0;\n runtime = await openPage('software');\n observed = observedBackend(runtime);\n }\n const captureUrl = new URL(baseUrl.href);\n if (options.deterministic === true) captureUrl.searchParams.set('forgeaxCapture', '1');\n if (page === undefined || browser === undefined) {\n fail(\n 'browser-capture-browser-unavailable',\n 'the browser capture session to open',\n 'Inspect the browser launch diagnostic and retry with --browser or --headless.',\n );\n }\n\n const captures: SoftwareCaptureRecord[] = [];\n let closed = false;\n const report: SoftwareCaptureRunReport = {\n schemaVersion: '2.0.0',\n runId: id,\n ok: false,\n mode: 'browser-compositor',\n root: facts.value.root,\n url: captureUrl.href,\n report: reportPath,\n backendRequested: backend,\n backend: observed,\n softwareRequested: backend === 'software',\n deterministicRequested: options.deterministic === true,\n viewport: {\n width,\n height,\n deviceScaleFactor: 1,\n colorProfile: 'srgb',\n colorScheme: 'light',\n locale: 'en-US',\n timezone: 'UTC',\n },\n browser: { version: browser.version(), executable: browserPath ?? 'playwright-managed' },\n display: display.value ?? null,\n lavapipeIcd: icd ?? null,\n captures,\n consoleErrors,\n pageErrors,\n boundary:\n 'Browser-compositor capture is visual iteration evidence, not physical-GPU performance, HDR-display output, or release acceptance.',\n };\n await writeRunReport(report);\n\n const updateReport = async (): Promise<void> => {\n Object.assign(report, {\n ok:\n captures.length > 0 &&\n captures.every((capture) => capture.ok) &&\n consoleErrors.length === 0 &&\n pageErrors.length === 0,\n });\n await writeRunReport(report);\n };\n const close = async (): Promise<void> => {\n if (closed) return;\n closed = true;\n await Promise.allSettled([browser?.close(), display?.close(), server?.close()]);\n Object.assign(report, { closedAt: new Date().toISOString() });\n await updateReport();\n };\n\n return {\n page,\n url: captureUrl.href,\n reportPath,\n async capture(checkpoint, captureOptions = {}) {\n if (closed) {\n fail(\n 'browser-capture-session-closed',\n 'capture to run inside an open browser session',\n 'Open one session, complete all checkpoints, then close it.',\n { report: reportPath },\n );\n }\n const activePage = page;\n if (activePage === undefined) {\n fail(\n 'browser-capture-browser-unavailable',\n 'an open Playwright page',\n 'Inspect the browser launch diagnostic and retry the capture.',\n );\n }\n const expectedReady = checkpoint ?? (options.deterministic === true ? 'true' : undefined);\n await activePage.waitForFunction(\n ({ datasetKey }) => Number(document.documentElement.dataset[datasetKey]) > 0,\n { datasetKey: FORGEAX_FRAME_SUBMITTED_DATASET },\n { timeout: 120_000 },\n );\n if (expectedReady !== undefined) {\n await activePage.waitForFunction(\n (expected) => document.documentElement.dataset.forgeaxCaptureReady === expected,\n expectedReady,\n { timeout: 120_000 },\n );\n }\n await waitForCompositor(activePage);\n let captured = await screenshotWithWitness(activePage);\n const deadline = Date.now() + 120_000;\n while (!captured.pixels.rendered && Date.now() < deadline) {\n await activePage.waitForTimeout(500);\n await waitForCompositor(activePage);\n captured = await screenshotWithWitness(activePage);\n }\n const waitMs = captureOptions.waitMs ?? 0;\n if (waitMs > 0) {\n await activePage.waitForTimeout(waitMs);\n await waitForCompositor(activePage);\n captured = await screenshotWithWitness(activePage);\n while (!captured.pixels.rendered && Date.now() < deadline) {\n await activePage.waitForTimeout(500);\n await waitForCompositor(activePage);\n captured = await screenshotWithWitness(activePage);\n }\n }\n const runtime = await runtimeWitness(activePage);\n const uiPresent = runtime.domUi.rootChildren > 0;\n const requireUi = captureOptions.requireUi ?? options.requireUi ?? false;\n const captureBackend = observedBackend(runtime);\n if (captureBackend !== 'unknown') Object.assign(report, { backend: captureBackend });\n const backendMatches = backend === 'auto' || captureBackend === backend;\n const ok =\n runtime.canvas !== null &&\n captured.pixels.rendered &&\n backendMatches &&\n runtime.engineFrameId !== null &&\n consoleErrors.length === 0 &&\n pageErrors.length === 0 &&\n (expectedReady === undefined || runtime.captureReady === expectedReady) &&\n (!requireUi || uiPresent);\n const index = captures.length + 1;\n const output = resolve(\n facts.value.root,\n captureOptions.output ??\n resolve(\n outputDirectory,\n `${String(index).padStart(3, '0')}-${checkpointSlug(checkpoint)}.png`,\n ),\n );\n await mkdir(dirname(output), { recursive: true });\n await writeFile(output, captured.png);\n const record: SoftwareCaptureRecord = {\n index,\n checkpoint: checkpoint ?? null,\n ok,\n output,\n digest: captureDigest(captured.png),\n pixels: captured.pixels,\n runtime,\n };\n captures.push(record);\n await updateReport();\n if (!ok) {\n fail(\n `${backend === 'software' ? 'software' : 'browser'}-capture-runtime-failed`,\n 'non-flat canvas pixels, the requested browser backend/checkpoint, and no browser errors',\n 'Inspect the run report and repair the first browser runtime failure.',\n { checkpoint: checkpoint ?? null, output, report: reportPath },\n );\n }\n return record;\n },\n report: () => report,\n close,\n };\n } catch (cause) {\n await Promise.allSettled([browser?.close(), display?.close(), server?.close()]);\n throw cause;\n }\n}\n\nexport function createBrowserCapture(root: string): BrowserCapture {\n const sessions = new Set<BrowserCaptureSession>();\n return {\n async open(options) {\n const session = await openBrowserCaptureSession(root, options);\n sessions.add(session);\n return session;\n },\n async close() {\n await Promise.allSettled([...sessions].map((session) => session.close()));\n sessions.clear();\n },\n };\n}\n\n/**\n * Compatibility facade for callers that still request the original software\n * lane. New integrations should use createBrowserCapture({ backend }).\n */\nexport function createSoftwareBrowser(root: string): SoftwareBrowser {\n const browser = createBrowserCapture(root);\n return {\n async open(options) {\n return browser.open({ ...options, backend: 'software', software: true });\n },\n close: () => browser.close(),\n };\n}\n\nfunction captureCommandError(cause: unknown, legacySoftware = false): CommandError {\n if (cause instanceof SoftwareCaptureError) {\n const code =\n legacySoftware && cause.code.startsWith('browser-capture-')\n ? cause.code.replace(/^browser-capture-/, 'software-capture-')\n : cause.code;\n return {\n code,\n expected: cause.expected,\n hint: cause.hint,\n detail: cause.detail,\n };\n }\n return commandError(cause, legacySoftware ? 'software-capture-failed' : 'browser-capture-failed');\n}\n\nexport async function browserCaptureCommand(\n options: BrowserCaptureOptions,\n): Promise<CommandResult<BrowserCaptureRunReport>> {\n const root = options.root ?? process.cwd();\n const output = resolve(root, options.output ?? 'artifacts/capture/game-ui.png');\n const browser = createBrowserCapture(root);\n try {\n const backend = options.backend ?? (options.software === true ? 'software' : 'auto');\n const session = await browser.open({\n backend,\n ...(backend === 'software' ? { software: true } : {}),\n ...(options.browser === undefined ? {} : { browser: options.browser }),\n ...(options.width === undefined ? {} : { width: options.width }),\n ...(options.height === undefined ? {} : { height: options.height }),\n ...(options.port === undefined ? {} : { port: options.port }),\n ...(options.headless === undefined ? {} : { headless: options.headless }),\n requireUi: options.requireUi === true,\n deterministic: options.deterministic === true,\n outputDir: dirname(output),\n report: evidencePath(output),\n });\n await session.capture(options.deterministic === true ? 'true' : undefined, {\n output,\n waitMs: options.waitMs ?? 4000,\n requireUi: options.requireUi === true,\n });\n await session.close();\n return { ok: true, value: session.report() };\n } catch (cause) {\n return { ok: false, error: captureCommandError(cause) };\n } finally {\n await browser.close();\n }\n}\n\nexport async function softwareCaptureCommand(\n options: SoftwareCaptureOptions,\n): Promise<CommandResult<unknown>> {\n const result = await browserCaptureCommand({ ...options, backend: 'software', software: true });\n if (result.ok) return result;\n return { ok: false, error: captureCommandErrorFromResult(result.error, true) };\n}\n\nfunction captureCommandErrorFromResult(error: CommandError, legacySoftware: boolean): CommandError {\n if (!legacySoftware || !error.code.startsWith('browser-capture-')) return error;\n return { ...error, code: error.code.replace(/^browser-capture-/, 'software-capture-') };\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';\nimport { createServer as createNetServer } from 'node:net';\nimport { basename, dirname, relative, resolve } from 'node:path';\nimport { build as viteBuild, preview as vitePreview } from 'vite';\nimport { startVitest } from 'vitest/node';\nimport { createZip } from './archive.js';\nimport { verifyDist, writeDistManifest } from './dist.js';\nimport { createViteConfig } from './host.js';\nimport { commandError, readProjectFacts } from './project.js';\nimport { resolveProjectPort } from './types.js';\n\nexport {\n assetAddCommand,\n assetInspectCommand,\n assetListCommand,\n assetVerifyCommand,\n} from './assets.js';\nexport type { DoctorReport } from './bootstrap-commands.js';\nexport { doctorCommand, initCommand, newCommand } from './bootstrap-commands.js';\nexport {\n engineDoctorCommand,\n engineStatusCommand,\n engineUnlinkCommand,\n engineUseLocalCommand,\n} from './engine-binding.js';\nexport { pluginInstallCommand, pluginUninstallCommand } from './plugin-authoring.js';\nexport { createCliRhiDebugOperationContext } from './rhi-debug/cli-context.js';\nexport type {\n ArtifactRef,\n CapturedRhiTape,\n RhiCaptureFrameValue,\n RhiDebugOperationContext,\n RhiDebugOperationDescriptor,\n RhiDebugOperationInput,\n RhiDebugOperationName,\n RhiDebugOperationOutput,\n RhiInspectInput,\n RhiInspectOutput,\n RhiSummaryInput,\n RhiSummaryOutput,\n} from './rhi-debug/operations.js';\nexport {\n createRhiDebugOperationContext,\n discoverRhiDebugOperations,\n RHI_DEBUG_OPERATION_MANIFEST,\n recoverRhiDebugError,\n renderRhiDebugHelp,\n runRhiDebugOperation,\n} from './rhi-debug/operations.js';\nexport { sdkInstallCommand } from './sdk-install.js';\nexport { shaderCheckCommand } from './shader-check.js';\nexport { skillInstallCommand, skillVerifyCommand } from './skill-install.js';\nexport { browserCaptureCommand, softwareCaptureCommand } from './software-capture.js';\n\nimport {\n type RhiDebugOperationContext,\n type RhiDebugOperationInput,\n type RhiDebugOperationName,\n type RhiDebugOperationOutput,\n runRhiDebugOperation,\n} from './rhi-debug/operations.js';\nimport type {\n BuildOptions,\n CommandResult,\n PackageOptions,\n ProjectCommandOptions,\n} from './types.js';\n\nexport function runRhiDebugCommand(\n name: RhiDebugOperationName,\n input: RhiDebugOperationInput,\n context: RhiDebugOperationContext,\n): Promise<CommandResult<RhiDebugOperationOutput>> {\n return runRhiDebugOperation(name, input, context);\n}\n\nasync function materializeViteDevPort(port: number): Promise<number> {\n if (port !== 0) return port;\n const reservation = createNetServer();\n await new Promise<void>((resolveListen, rejectListen) => {\n reservation.once('error', rejectListen);\n reservation.listen(0, '127.0.0.1', resolveListen);\n });\n const address = reservation.address();\n const assigned = typeof address === 'object' && address !== null ? address.port : 0;\n await new Promise<void>((resolveClose, rejectClose) => {\n reservation.close((error) => (error === undefined ? resolveClose() : rejectClose(error)));\n });\n if (assigned === 0) throw new Error('OS did not assign an ephemeral preview port');\n return assigned;\n}\n\nexport async function buildCommand(options: BuildOptions = {}): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const previous = process.cwd();\n const base = options.base ?? '/';\n const outDir = resolve(facts.value.root, options.outDir ?? 'dist');\n try {\n process.chdir(facts.value.root);\n await viteBuild(await createViteConfig(facts.value, 'build', base, { outDir }));\n return { ok: true, value: await writeDistManifest(facts.value, base, outDir) };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'game-build-failed') };\n } finally {\n process.chdir(previous);\n }\n}\n\nfunction releaseSlug(name: string): string {\n const slug = name\n .normalize('NFKD')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n return slug.length > 0 ? slug : 'forgeax-game';\n}\n\nexport async function packageCommand(\n options: PackageOptions = {},\n): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const built = await buildCommand({\n root: facts.value.root,\n base: './',\n ...(options.json === undefined ? {} : { json: options.json }),\n });\n if (!built.ok) return built;\n const distRoot = resolve(facts.value.root, 'dist');\n const verified = await verifyDist(distRoot);\n if (!verified.ok) return verified;\n const archive = resolve(\n facts.value.root,\n options.output ?? `release/${releaseSlug(facts.value.name)}-web.zip`,\n );\n const archiveRelativeToDist = relative(distRoot, archive);\n if (archiveRelativeToDist === '' || !archiveRelativeToDist.startsWith('..')) {\n return {\n ok: false,\n error: {\n code: 'release-output-inside-dist',\n expected: 'the release archive to live outside the derived dist directory',\n hint: 'Use --output release/<game>-web.zip or another path outside dist.',\n detail: { archive, distRoot },\n },\n };\n }\n const temporaryArchive = `${archive}.partial-${process.pid}`;\n const checksumPath = `${archive}.sha256`;\n const temporaryChecksum = `${checksumPath}.partial-${process.pid}`;\n try {\n const paths = [\n ...verified.value.artifacts.map((artifact) => artifact.path),\n 'forgeax-dist.json',\n ];\n const entries = await Promise.all(\n paths.map(async (path) => ({ path, bytes: await readFile(resolve(distRoot, path)) })),\n );\n const bytes = createZip(entries);\n const sha256 = createHash('sha256').update(bytes).digest('hex');\n const manifestBytes = await readFile(resolve(distRoot, 'forgeax-dist.json'));\n await mkdir(dirname(archive), { recursive: true });\n await writeFile(temporaryArchive, bytes);\n await writeFile(temporaryChecksum, `${sha256} ${basename(archive)}\\n`);\n await rename(temporaryChecksum, checksumPath);\n await rename(temporaryArchive, archive);\n return {\n ok: true,\n value: {\n schemaVersion: '1.0.0',\n format: 'forgeax-web-game',\n target: 'web',\n project: verified.value.project,\n base: verified.value.base,\n engine: {\n delivery: 'bundled-runtime',\n wasm: verified.value.artifacts.some((artifact) => artifact.path.endsWith('.wasm')),\n },\n archive: { path: archive, bytes: bytes.byteLength, sha256 },\n checksumPath,\n distManifestSha256: createHash('sha256').update(manifestBytes).digest('hex'),\n run: {\n local: 'forgeax preview',\n shared: 'upload the ZIP to an HTTPS static or HTML-game host and share its URL',\n },\n },\n };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'game-package-failed') };\n } finally {\n await Promise.all([\n rm(temporaryArchive, { force: true }),\n rm(temporaryChecksum, { force: true }),\n ]);\n }\n}\n\nexport async function devCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n const previous = process.cwd();\n let server: Awaited<ReturnType<typeof import('vite')['createServer']>> | undefined;\n try {\n const { createServer } = await import('vite');\n const { createViteConfig } = await import('./host.js');\n const port = resolveProjectPort(options.port);\n const vitePort = { ...port, port: await materializeViteDevPort(port.port) };\n process.chdir(facts.value.root);\n server = await createServer(\n await createViteConfig(facts.value, 'serve', '/', {\n server: vitePort,\n }),\n );\n await server.listen(vitePort.port);\n if (options.json !== true) server.printUrls();\n return {\n ok: true,\n value: {\n root: facts.value.root,\n urls: server.resolvedUrls,\n mode: 'dev',\n serves: 'source',\n capabilities: {\n 'rhi.capture': {\n available: false,\n realm: 'host',\n reason: 'standalone-dev-server-has-no-live-app-cli-attachment',\n },\n },\n },\n };\n } catch (cause) {\n await server?.close();\n process.chdir(previous);\n return { ok: false, error: commandError(cause, 'dev-server-failed') };\n }\n}\n\nexport async function previewCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const root = resolve(options.root ?? process.cwd());\n const verified = await verifyDist(resolve(root, 'dist'));\n if (!verified.ok) return verified;\n try {\n const port = resolveProjectPort(options.port);\n const server = await vitePreview({\n root,\n configFile: false,\n base: verified.value.base,\n preview: { open: false, ...port },\n build: { outDir: resolve(root, 'dist') },\n });\n if (options.json !== true) server.printUrls();\n return {\n ok: true,\n value: {\n root,\n urls: server.resolvedUrls,\n mode: 'preview',\n serves: 'dist',\n capabilities: {\n 'rhi.capture': {\n available: false,\n realm: 'host',\n reason: 'static-dist-host-does-not-install-dev-capture',\n },\n },\n },\n };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'preview-server-failed') };\n }\n}\n\nexport async function testCommand(\n options: ProjectCommandOptions = {},\n): Promise<CommandResult<unknown>> {\n const facts = await readProjectFacts(options.root);\n if (!facts.ok) return facts;\n try {\n const context = await startVitest('test', [], {\n root: facts.value.root,\n run: true,\n watch: false,\n passWithNoTests: false,\n });\n if (context === undefined) {\n return {\n ok: false,\n error: {\n code: 'test-runner-unavailable',\n expected: 'Vitest to create a project test context',\n hint: 'Inspect the project test configuration.',\n detail: { root: facts.value.root },\n },\n };\n }\n const failed = context.state.getFiles().filter((file) => file.result?.state === 'fail');\n await context.close();\n if (failed.length > 0) {\n return {\n ok: false,\n error: {\n code: 'project-tests-failed',\n expected: 'all project tests to pass',\n hint: 'Repair the failing game test before building a release.',\n detail: { files: failed.map((file) => file.filepath) },\n },\n };\n }\n return { ok: true, value: { root: facts.value.root } };\n } catch (cause) {\n return { ok: false, error: commandError(cause, 'project-tests-failed') };\n }\n}\n","import type { PluginCatalog, ToolPlugin } from '@forgeax/engine-plugin';\nimport { bindPreviewHost, type NativePreviewHost } from '@forgeax/engine-preview';\nimport materialPreviewPlugin from '@forgeax/engine-preview/material';\nimport meshPreviewPlugin from '@forgeax/engine-preview/mesh';\nimport texturePreviewPlugin from '@forgeax/engine-preview/texture';\nimport vfxPreviewPlugin from '@forgeax/engine-preview/vfx';\nimport type { ToolDescriptor } from '@forgeax/engine-tool-runtime';\n\nexport const nativePreviewPlugins = [\n ['@forgeax/engine-preview/material', materialPreviewPlugin],\n ['@forgeax/engine-preview/mesh', meshPreviewPlugin],\n ['@forgeax/engine-preview/vfx', vfxPreviewPlugin],\n ['@forgeax/engine-preview/texture', texturePreviewPlugin],\n] as const;\n\nexport const nativePreviewTools = nativePreviewPlugins.flatMap(([, plugin]) => plugin.tools);\nexport const nativePreviewDescriptors: readonly ToolDescriptor[] = nativePreviewTools.map(\n ({ descriptor }) => descriptor,\n);\n\nexport function createNativePreviewCatalog(\n host: NativePreviewHost,\n selectedName?: string,\n): PluginCatalog {\n return new Map(\n nativePreviewPlugins\n .filter(([name]) => selectedName === undefined || name === selectedName)\n .map(([name, plugin]) => [\n name,\n {\n realm: 'host' as const,\n load: async () => ({\n default: bindPreviewHost(plugin as ToolPlugin, host),\n }),\n },\n ]),\n );\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport {\n capabilityUnavailableError,\n createToolRuntime,\n type ToolContribution,\n type ToolDescriptor,\n type ToolRunOptions,\n type ToolRuntime,\n type ToolSchema,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\nimport type { BuildOptions, PluginInstallOptions } from '../types.js';\nimport type { OfflineAnalysisRequest, OfflineAnalysisResult } from './offline-analysis.js';\nimport { nativePreviewDescriptors } from './preview-catalog.js';\nimport type { PreviewHostRequest, PreviewHostResult } from './preview-host.js';\n\nexport interface ToolCatalogAuthority {\n readonly authorityDigest?: string;\n readonly root?: string;\n readonly read?: () => Promise<ToolCatalogAuthoritySnapshot>;\n readonly projectionPath?: string;\n}\n\nexport interface ToolCatalogAuthoritySnapshot {\n readonly authorityDigest: string;\n readonly descriptors: readonly ToolDescriptor[];\n}\n\nexport interface ToolCatalogEntry {\n readonly id: string;\n readonly title: string;\n readonly summary: string;\n readonly realm: ToolDescriptor['realm'];\n readonly evidence: ToolDescriptor['evidence'];\n readonly argsSchema?: string;\n readonly resultSchema?: string;\n}\n\nexport interface ToolCatalog {\n readonly schemaVersion: '1.0.0';\n readonly authorityDigest: string;\n readonly digest: string;\n readonly entries: readonly ToolCatalogEntry[];\n}\n\nexport type ToolCatalogLoadResult =\n | {\n readonly ok: true;\n readonly value: ToolCatalog;\n }\n | {\n readonly ok: false;\n readonly error: {\n readonly code: 'tool-catalog-authority-unreadable' | 'tool-catalog-projection-invalid';\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, string>>;\n };\n };\n\nconst buildArgsSchema: ToolSchema<BuildOptions> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected an options object' };\n return { ok: true, value: value as BuildOptions };\n },\n describe: '{\"type\":\"object\",\"properties\":{\"root\":{\"type\":\"string\"},\"base\":{\"type\":\"string\"}}}',\n};\n\nconst pluginInstallArgsSchema: ToolSchema<PluginInstallOptions> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a plugin install options object' };\n return { ok: true, value: value as PluginInstallOptions };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"id\",\"module\"],\"properties\":{\"id\":{\"type\":\"string\"},\"module\":{\"type\":\"string\"},\"realm\":{\"enum\":[\"host\",\"engine\",\"build\"]},\"dependency\":{\"type\":\"string\"},\"root\":{\"type\":\"string\"}}}',\n};\n\nconst previewArgsSchema: ToolSchema<PreviewHostRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a preview request object' };\n const request = value as { readonly recipe?: unknown };\n if (request.recipe === undefined || typeof request.recipe !== 'object')\n return { ok: false, error: 'expected recipe in the preview request' };\n return { ok: true, value: value as PreviewHostRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"recipe\"],\"properties\":{\"recipe\":{\"type\":\"object\",\"required\":[\"snapshot\"],\"properties\":{\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"backend\":{\"const\":\"webgpu\"},\"presentation\":{\"enum\":[\"hidden\",\"visible\"]},\"viewport\":{\"type\":\"object\",\"properties\":{\"width\":{\"type\":\"integer\",\"minimum\":1},\"height\":{\"type\":\"integer\",\"minimum\":1}}},\"actions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"frame\",\"name\"],\"properties\":{\"frame\":{\"type\":\"integer\",\"minimum\":0},\"name\":{\"type\":\"string\",\"minLength\":1},\"value\":{}}}},\"deltaSeconds\":{\"type\":\"number\",\"minimum\":0},\"frames\":{\"type\":\"integer\",\"minimum\":1}}}}}',\n};\n\nconst resultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\"}',\n};\n\nconst offlineAnalysisArgsSchema: ToolSchema<OfflineAnalysisRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected an offline analysis request object' };\n const request = value as { readonly manifest?: unknown };\n if (request.manifest === undefined || typeof request.manifest !== 'object')\n return { ok: false, error: 'expected manifest in the offline analysis request' };\n return { ok: true, value: value as OfflineAnalysisRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"manifest\"],\"properties\":{\"manifest\":{\"type\":\"object\",\"required\":[\"schemaVersion\",\"identity\",\"artifacts\"]},\"required\":{\"type\":\"array\",\"items\":{\"enum\":[\"rhi-tape\",\"png\",\"profile-capture\"]}}}}',\n};\n\nexport const projectBuildDescriptor: ToolDescriptor<BuildOptions, unknown> = {\n id: 'project.build',\n title: 'Build project',\n summary: 'Builds the project through the existing Vite and Pack authorities.',\n realm: 'build',\n argsSchema: buildArgsSchema,\n resultSchema,\n evidence: [],\n};\nexport const authorPluginInstallDescriptor: ToolDescriptor<PluginInstallOptions, unknown> = {\n id: 'author.plugin-install',\n title: 'Install project plugin',\n summary: 'Writes one plugin Entry through the project authoring authority.',\n realm: 'build',\n argsSchema: pluginInstallArgsSchema,\n resultSchema,\n evidence: [],\n};\nexport const previewRunDescriptor: ToolDescriptor<PreviewHostRequest, PreviewHostResult> = {\n id: 'preview.run',\n title: 'Run hidden WebGPU preview',\n summary: 'Runs one fixed real-WebGPU preview recipe and returns structured evidence refs.',\n realm: 'host',\n argsSchema: previewArgsSchema,\n resultSchema: resultSchema as ToolDescriptor<\n PreviewHostRequest,\n PreviewHostResult\n >['resultSchema'],\n evidence: ['rhi-tape', 'png', 'profile-capture'],\n};\nexport const previewOfflineAnalysisDescriptor: ToolDescriptor<\n OfflineAnalysisRequest,\n OfflineAnalysisResult\n> = {\n id: 'preview.offline-analysis',\n title: 'Analyze preview artifacts',\n summary: 'Validates owner-separated evidence identity before offline consumption.',\n realm: 'build',\n argsSchema: offlineAnalysisArgsSchema,\n resultSchema: resultSchema as ToolSchema<OfflineAnalysisResult>,\n evidence: ['rhi-tape', 'png', 'profile-capture'],\n};\n\nexport const defaultToolDescriptors: readonly ToolDescriptor[] = [\n projectBuildDescriptor,\n authorPluginInstallDescriptor,\n ...nativePreviewDescriptors,\n];\n\nfunction projectDescriptor(descriptor: ToolDescriptor): ToolCatalogEntry {\n return {\n id: descriptor.id,\n title: descriptor.title,\n summary: descriptor.summary,\n realm: descriptor.realm,\n evidence: [...descriptor.evidence],\n ...(descriptor.argsSchema.describe === undefined\n ? {}\n : { argsSchema: descriptor.argsSchema.describe }),\n ...(descriptor.resultSchema.describe === undefined\n ? {}\n : { resultSchema: descriptor.resultSchema.describe }),\n };\n}\n\nexport interface ToolRealmOwner {\n readonly realm: ToolDescriptor['realm'];\n readonly contributions: readonly ToolContribution[];\n}\n\nexport interface ToolRealmDispatch {\n readonly list: () => readonly ToolDescriptor[];\n readonly describe: (id: string) => ToolDescriptor | undefined;\n readonly run: <TResult = unknown>(\n id: string,\n args: unknown,\n options?: ToolRunOptions,\n ) => Promise<ToolTerminal<TResult>>;\n}\n\nfunction missingRealmOwner<TResult>(\n descriptor: ToolDescriptor | undefined,\n id: string,\n): ToolTerminal<TResult> {\n const realm = descriptor?.realm ?? 'build';\n return {\n outcome: 'failed',\n failure: capabilityUnavailableError(`realm:${realm}:tool:${id}`, realm),\n artifacts: [],\n } as ToolTerminal<TResult>;\n}\n\n/** Dispatches a descriptor to the one physical owner for its declared realm. */\nexport function createRealmDispatch(\n contributions: readonly ToolContribution[],\n owners: readonly ToolRealmOwner[],\n): ToolRealmDispatch {\n const contributionById = new Map(\n contributions.map((contribution) => [contribution.descriptor.id, contribution]),\n );\n const ownerByRealm = new Map<ToolDescriptor['realm'], ToolRuntime>();\n for (const owner of owners) {\n if (ownerByRealm.has(owner.realm)) throw new TypeError(`Duplicate realm owner: ${owner.realm}`);\n const invalid = owner.contributions.find(\n (contribution) => contribution.descriptor.realm !== owner.realm,\n );\n if (invalid !== undefined) {\n throw new TypeError(\n `Tool ${invalid.descriptor.id} declares ${invalid.descriptor.realm} but owner is ${owner.realm}`,\n );\n }\n ownerByRealm.set(owner.realm, createToolRuntime(owner.contributions));\n }\n return {\n list: () => contributions.map((contribution) => contribution.descriptor),\n describe: (id) => contributionById.get(id)?.descriptor,\n async run<TResult = unknown>(id: string, args: unknown, options: ToolRunOptions = {}) {\n const contribution = contributionById.get(id);\n if (contribution === undefined)\n return missingRealmOwner(undefined, id) as ToolTerminal<TResult>;\n const owner = ownerByRealm.get(contribution.descriptor.realm);\n if (owner === undefined) return missingRealmOwner(contribution.descriptor, id);\n const bound = owner.get(id);\n if (bound === undefined) return missingRealmOwner(contribution.descriptor, id);\n return (await owner.run(bound, args, options).terminal) as ToolTerminal<TResult>;\n },\n };\n}\n\nfunction requiredAuthorityDigest(authority: ToolCatalogAuthority): string {\n if (authority.authorityDigest === undefined) {\n throw new TypeError('Catalog materialization requires an authority digest');\n }\n return authority.authorityDigest;\n}\n\nfunction digestCatalog(authorityDigest: string, entries: readonly ToolCatalogEntry[]): string {\n return `sha256:${createHash('sha256')\n .update(JSON.stringify({ authorityDigest, entries }))\n .digest('hex')}`;\n}\n\nfunction digestAuthority(bytes: readonly Uint8Array[]): string {\n const hash = createHash('sha256');\n for (const value of bytes) hash.update(value);\n return `sha256:${hash.digest('hex')}`;\n}\n\nfunction projectionValid(\n catalog: unknown,\n authorityDigest: string,\n descriptors: readonly ToolDescriptor[] = defaultToolDescriptors,\n): catalog is ToolCatalog {\n if (catalog === null || typeof catalog !== 'object') return false;\n const value = catalog as Partial<ToolCatalog>;\n const expectedEntries = descriptors\n .map(projectDescriptor)\n .sort((left, right) => left.id.localeCompare(right.id));\n return (\n value.schemaVersion === '1.0.0' &&\n value.authorityDigest === authorityDigest &&\n Array.isArray(value.entries) &&\n JSON.stringify(value.entries) === JSON.stringify(expectedEntries) &&\n value.digest === digestCatalog(authorityDigest, value.entries as ToolCatalogEntry[])\n );\n}\n\nexport function createProjectToolCatalogAuthority(\n rootInput: string,\n descriptors: readonly ToolDescriptor[] = defaultToolDescriptors,\n): ToolCatalogAuthority {\n const root = resolve(rootInput);\n return {\n root,\n projectionPath: resolve(root, '.forgeax/generated/tool-catalog.json'),\n async read() {\n const [forge, packageJson] = await Promise.all([\n readFile(resolve(root, 'forge.json')),\n readFile(resolve(root, 'package.json')),\n ]);\n return { authorityDigest: digestAuthority([forge, packageJson]), descriptors };\n },\n };\n}\n\nexport async function loadToolCatalog(\n authority: ToolCatalogAuthority,\n descriptors: readonly ToolDescriptor[] = defaultToolDescriptors,\n): Promise<ToolCatalogLoadResult> {\n const read = authority.read;\n if (read === undefined) {\n if (authority.authorityDigest === undefined) {\n return {\n ok: false,\n error: {\n code: 'tool-catalog-authority-unreadable',\n expected: 'an injectable project authority reader',\n hint: 'Create a project authority from a real project root before listing tools.',\n detail: { reason: 'authority reader is missing' },\n },\n };\n }\n return { ok: true, value: materializeToolDescriptorCatalog(descriptors, authority) };\n }\n let snapshot: ToolCatalogAuthoritySnapshot;\n try {\n snapshot = await read();\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'tool-catalog-authority-unreadable',\n expected: 'project authority files to be readable',\n hint: 'Repair forge.json and package.json, then retry catalog rebuild.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n const projectionPath = authority.projectionPath;\n if (projectionPath !== undefined) {\n try {\n const current = JSON.parse(await readFile(projectionPath, 'utf8')) as unknown;\n if (projectionValid(current, snapshot.authorityDigest, snapshot.descriptors)) {\n return { ok: true, value: current };\n }\n } catch {\n // Missing or corrupt projections are rebuilt from the authority below.\n }\n }\n const catalog = materializeToolDescriptorCatalog(snapshot.descriptors, {\n authorityDigest: snapshot.authorityDigest,\n });\n if (projectionPath !== undefined) {\n try {\n await mkdir(resolve(projectionPath, '..'), { recursive: true });\n await writeFile(projectionPath, `${JSON.stringify(catalog, null, 2)}\\n`, 'utf8');\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'tool-catalog-projection-invalid',\n expected: 'the generated catalog projection to be writable',\n hint: 'Restore write access to .forgeax/generated and retry cold rebuild.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n }\n return { ok: true, value: catalog };\n}\n\nexport function materializeToolCatalog<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n authority: ToolCatalogAuthority,\n): ToolCatalog;\nexport function materializeToolCatalog(\n contributions: readonly unknown[],\n authority: ToolCatalogAuthority,\n): ToolCatalog;\nexport function materializeToolCatalog(\n contributions: readonly unknown[],\n authority: ToolCatalogAuthority,\n): ToolCatalog {\n const entries = contributions\n .map((candidate) => {\n if (typeof candidate !== 'object' || candidate === null)\n throw new TypeError('Invalid tool contribution');\n return projectDescriptor((candidate as ToolContribution<unknown, unknown>).descriptor);\n })\n .sort((left, right) => left.id.localeCompare(right.id));\n const authorityDigest = requiredAuthorityDigest(authority);\n return {\n schemaVersion: '1.0.0',\n authorityDigest,\n digest: digestCatalog(authorityDigest, entries),\n entries,\n };\n}\n\nexport function materializeToolDescriptorCatalog(\n descriptors: readonly ToolDescriptor[],\n authority: ToolCatalogAuthority,\n): ToolCatalog {\n const entries = descriptors\n .map(projectDescriptor)\n .sort((left, right) => left.id.localeCompare(right.id));\n const authorityDigest = requiredAuthorityDigest(authority);\n return {\n schemaVersion: '1.0.0',\n authorityDigest,\n digest: digestCatalog(authorityDigest, entries),\n entries,\n };\n}\n\nexport function rebuildToolCatalog<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n current: ToolCatalog | undefined,\n authority: ToolCatalogAuthority,\n): ToolCatalog;\nexport function rebuildToolCatalog(\n contributions: readonly unknown[],\n current: ToolCatalog | undefined,\n authority: ToolCatalogAuthority,\n): ToolCatalog {\n if (\n current !== undefined &&\n authority.authorityDigest !== undefined &&\n current.authorityDigest === authority.authorityDigest &&\n projectionValid(current, authority.authorityDigest)\n )\n return current;\n if (authority.authorityDigest === undefined) {\n throw new TypeError('Catalog rebuild requires an authority digest');\n }\n return materializeToolCatalog(contributions, authority);\n}\n\nexport function listTools(catalog: ToolCatalog): readonly ToolCatalogEntry[] {\n return catalog.entries;\n}\n\nexport function describeTool(catalog: ToolCatalog, id: string): ToolCatalogEntry | undefined {\n return catalog.entries.find((entry) => entry.id === id);\n}\n","import {\n domainFailureError,\n type ToolDomainFailure,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport const retiredPreviewOperationFailure: ToolDomainFailure = {\n code: 'preview-operation-migrated',\n expected: 'a domain-specific preview contribution selected from the project catalog',\n hint: 'Use material.preview, mesh.preview, vfx.preview, or texture.preview with a Project GUID.',\n detail: {\n operation: 'preview.run',\n replacements: ['material.preview', 'mesh.preview', 'vfx.preview', 'texture.preview'],\n },\n};\n\nexport function retiredPreviewTool(): ToolTerminal<never> {\n return {\n outcome: 'failed',\n failure: domainFailureError(\n retiredPreviewOperationFailure.code,\n retiredPreviewOperationFailure.expected,\n retiredPreviewOperationFailure.hint,\n retiredPreviewOperationFailure.detail,\n ),\n artifacts: [],\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { Context, isToolPlugin, type ToolPlugin } from '@forgeax/engine-plugin';\nimport {\n type GamePluginEntry,\n installCatalogLoader,\n type PluginCatalog,\n type PluginRealm,\n projectPluginEntries,\n} from '@forgeax/engine-plugin/loader';\nimport { type GameProjectPluginEntry, GameProjectSchema } from '@forgeax/engine-project';\nimport type {\n ToolContribution,\n ToolEvidenceKind,\n ToolRunOptions,\n ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\nimport { createServer, type ViteDevServer } from 'vite';\n\nexport interface ProjectToolBinding {\n readonly contribution: ToolContribution<unknown, unknown>;\n readonly entry: GameProjectPluginEntry;\n readonly moduleName: string;\n readonly realm: PluginRealm;\n readonly toolPlugin?: ToolPlugin;\n readonly loadToolPlugin: () => Promise<ToolPlugin>;\n}\n\nexport interface ProjectToolModuleLoader {\n readonly load: (name: string) => Promise<unknown>;\n readonly close: () => Promise<void>;\n}\n\nexport interface ProjectToolDiscoveryOptions {\n readonly moduleLoader?: ProjectToolModuleLoader;\n readonly loadModules?: boolean;\n}\n\ninterface ProjectPluginLeaf {\n readonly entry: GameProjectPluginEntry;\n readonly moduleName: string;\n readonly realm: PluginRealm;\n}\n\ninterface StaticToolDeclaration {\n readonly id: string;\n readonly title: string;\n readonly summary: string;\n readonly realm: PluginRealm;\n readonly argsSchema?: string;\n readonly resultSchema?: string;\n readonly evidence?: readonly ToolEvidenceKind[];\n}\n\nfunction projectLeaves(\n entries: readonly GameProjectPluginEntry[],\n inheritedRealm: PluginRealm = 'engine',\n): ProjectPluginLeaf[] {\n const leaves: ProjectPluginLeaf[] = [];\n for (const entry of entries) {\n const realm = entry.realm ?? inheritedRealm;\n if (entry.disabled === true) continue;\n if (entry.group === true) {\n leaves.push(...projectLeaves(entry.config as readonly GameProjectPluginEntry[], realm));\n continue;\n }\n if (!entry.name.startsWith('cordis:')) {\n leaves.push({ entry, moduleName: entry.name, realm });\n }\n }\n return leaves;\n}\n\nfunction exportedToolPlugin(module: unknown): ToolPlugin | undefined {\n if (isToolPlugin(module)) return module;\n if (typeof module !== 'object' || module === null) return undefined;\n const value = Reflect.get(module, 'default');\n return isToolPlugin(value) ? value : undefined;\n}\n\nfunction staticContributions(\n entry: GameProjectPluginEntry,\n): readonly ToolContribution<unknown, unknown>[] {\n if (entry.config === null || typeof entry.config !== 'object') return [];\n const tools = Reflect.get(entry.config, 'tools');\n if (!Array.isArray(tools)) return [];\n return tools.flatMap((candidate: unknown) => {\n if (candidate === null || typeof candidate !== 'object') return [];\n const declaration = candidate as Partial<StaticToolDeclaration>;\n if (\n typeof declaration.id !== 'string' ||\n typeof declaration.title !== 'string' ||\n typeof declaration.summary !== 'string' ||\n (declaration.realm !== 'build' &&\n declaration.realm !== 'host' &&\n declaration.realm !== 'engine')\n )\n return [];\n const descriptor = {\n id: declaration.id,\n title: declaration.title,\n summary: declaration.summary,\n realm: declaration.realm,\n argsSchema: {\n parse: (value: unknown) => ({ ok: true as const, value }),\n ...(declaration.argsSchema === undefined ? {} : { describe: declaration.argsSchema }),\n },\n resultSchema: {\n parse: (value: unknown) => ({ ok: true as const, value }),\n ...(declaration.resultSchema === undefined ? {} : { describe: declaration.resultSchema }),\n },\n evidence: declaration.evidence ?? [],\n };\n return [\n {\n descriptor,\n execute: async () => ({\n ok: false as const,\n error: { code: 'tool-static-descriptor', detail: {} },\n }),\n },\n ];\n });\n}\n\nfunction hasStaticToolDeclarations(entry: GameProjectPluginEntry): boolean {\n if (entry.config === null || typeof entry.config !== 'object') return false;\n return Array.isArray(Reflect.get(entry.config, 'tools'));\n}\n\nasync function createViteModuleLoader(root: string): Promise<ProjectToolModuleLoader> {\n const server: ViteDevServer = await createServer({\n root,\n appType: 'custom',\n configFile: false,\n logLevel: 'silent',\n server: { middlewareMode: true },\n });\n return {\n load(name) {\n const id = name.startsWith('.') ? `/@fs/${resolve(root, name)}` : name;\n return server.ssrLoadModule(id);\n },\n close: () => server.close(),\n };\n}\n\nasync function readProjectEntries(root: string): Promise<readonly GameProjectPluginEntry[]> {\n const raw = JSON.parse(await readFile(resolve(root, 'forge.json'), 'utf8')) as unknown;\n const parsed = GameProjectSchema.safeParse(raw);\n if (!parsed.success) {\n throw new TypeError(`Invalid forge.json: ${parsed.error.message}`);\n }\n return parsed.data.plugins ?? [];\n}\n\nexport async function discoverProjectTools(\n rootInput: string,\n options: ProjectToolDiscoveryOptions = {},\n): Promise<readonly ProjectToolBinding[]> {\n const root = resolve(rootInput);\n const loadModules = options.loadModules ?? true;\n const loader = loadModules\n ? (options.moduleLoader ?? (await createViteModuleLoader(root)))\n : undefined;\n try {\n const bindings: ProjectToolBinding[] = [];\n const ids = new Map<string, string>();\n for (const leaf of projectLeaves(await readProjectEntries(root))) {\n if (leaf.realm !== 'build' && leaf.realm !== 'host' && leaf.realm !== 'engine') continue;\n // Gameplay entries are part of the engine closure, not the tool catalog. They\n // are only evaluated when they explicitly publish static tool declarations;\n // this keeps discovery from importing an unrelated gameplay module.\n if (leaf.realm === 'engine' && !hasStaticToolDeclarations(leaf.entry)) continue;\n const toolPlugin = loadModules\n ? exportedToolPlugin(await (loader as ProjectToolModuleLoader).load(leaf.moduleName))\n : undefined;\n const contributions = toolPlugin?.tools ?? staticContributions(leaf.entry);\n for (const contribution of contributions) {\n if (contribution.descriptor.realm !== leaf.realm) {\n throw new TypeError(\n `Tool ${contribution.descriptor.id} declares ${contribution.descriptor.realm} but Entry ${leaf.entry.id} owns ${leaf.realm}`,\n );\n }\n const existing = ids.get(contribution.descriptor.id);\n if (existing !== undefined) {\n throw new TypeError(\n `Duplicate project tool id ${contribution.descriptor.id} from ${existing} and ${leaf.entry.id}`,\n );\n }\n ids.set(contribution.descriptor.id, leaf.entry.id);\n bindings.push({\n contribution,\n entry: leaf.entry,\n moduleName: leaf.moduleName,\n realm: leaf.realm,\n ...(toolPlugin === undefined ? {} : { toolPlugin }),\n loadToolPlugin: async () => {\n if (toolPlugin !== undefined) return toolPlugin;\n const selectedLoader = options.moduleLoader ?? (await createViteModuleLoader(root));\n try {\n const loaded = exportedToolPlugin(await selectedLoader.load(leaf.moduleName));\n if (loaded === undefined)\n throw new TypeError(`Entry ${leaf.entry.id} does not export a ToolPlugin`);\n return loaded;\n } finally {\n await selectedLoader.close();\n }\n },\n });\n }\n }\n return bindings;\n } finally {\n if (loader !== undefined) await loader.close();\n }\n}\n\nfunction activationFailure(cause: unknown): ToolTerminal<never> {\n const message = cause instanceof Error ? cause.message : String(cause);\n return {\n outcome: 'failed',\n failure: {\n code: 'tool-domain-failed',\n expected: 'the owning project plugin Fiber to become ready',\n hint: 'Repair the project Entry, plugin dependencies, or plugin apply failure before retrying.',\n detail: { code: 'tool-plugin-activation-failed', payload: message },\n },\n artifacts: [],\n };\n}\n\nexport async function runProjectTool(\n binding: ProjectToolBinding,\n args: unknown,\n options: ToolRunOptions,\n): Promise<ToolTerminal<unknown>> {\n const ctx = new Context();\n try {\n const toolPlugin = await binding.loadToolPlugin();\n const contribution = toolPlugin.tools.find(\n (candidate) => candidate.descriptor.id === binding.contribution.descriptor.id,\n );\n if (contribution === undefined)\n return activationFailure(new Error('selected tool is absent from Entry'));\n const catalog: PluginCatalog = new Map([\n [\n binding.moduleName,\n {\n realm: binding.realm,\n load: async () => ({ default: toolPlugin }),\n },\n ],\n ]);\n const { loader } = await installCatalogLoader(ctx, catalog, binding.realm);\n const entries = projectPluginEntries(\n [binding.entry as GamePluginEntry],\n binding.realm,\n binding.realm,\n );\n await loader.root.update(entries);\n await loader.await();\n const { createToolRuntime } = await import('@forgeax/engine-tool-runtime');\n const { createContextCapabilityResolver } = await import('@forgeax/engine-plugin');\n return await createToolRuntime([contribution]).run(contribution, args, {\n ...options,\n capabilityResolver: createContextCapabilityResolver(ctx),\n }).terminal;\n } catch (cause) {\n return activationFailure(cause);\n } finally {\n await ctx.fiber.dispose();\n }\n}\n","import {\n type PreviewArtifactManifest,\n type PreviewArtifactRole,\n validatePreviewArtifactManifest,\n} from '@forgeax/engine-preview';\nimport {\n type ToolArtifactManifest,\n type ToolDomainFailure,\n type ToolEvidenceKind,\n validateArtifactManifest,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface OfflineAnalysisRequest {\n readonly manifest: PreviewArtifactManifest | ToolArtifactManifest;\n readonly required?: readonly (PreviewArtifactRole | ToolEvidenceKind)[];\n}\n\nexport interface OfflineAnalysisResult {\n readonly runId: string;\n readonly captureId: string;\n readonly artifacts: readonly { readonly kind: string; readonly digest: string }[];\n}\n\nexport function analyzePreviewArtifacts(\n request: OfflineAnalysisRequest,\n):\n | { readonly ok: true; readonly value: OfflineAnalysisResult }\n | { readonly ok: false; readonly error: ToolDomainFailure } {\n const required = request.required ?? [];\n const validated =\n request.manifest.schemaVersion === '1.0.0'\n ? required.some((kind) => kind !== 'rhi-tape' && kind !== 'png' && kind !== 'profile-capture')\n ? {\n ok: false as const,\n error: {\n code: 'tool-artifact-manifest-invalid',\n expected: 'requested evidence kinds to belong to the v1 artifact manifest',\n hint: 'Request one of rhi-tape, png, or profile-capture for a v1 manifest.',\n detail: { reason: 'unsupported required evidence kind' },\n },\n }\n : validateArtifactManifest(request.manifest, required as readonly ToolEvidenceKind[])\n : validatePreviewArtifactManifest(\n request.manifest,\n (request.required ?? []).filter(\n (role): role is PreviewArtifactRole =>\n role === 'report' ||\n role === 'rhi-tape' ||\n role === 'capture' ||\n role === 'fresh-replay' ||\n role === 'profile-capture' ||\n role === 'contact-sheet',\n ),\n );\n if (!validated.ok) return { ok: false, error: validated.error as ToolDomainFailure };\n return {\n ok: true,\n value: {\n runId: request.manifest.identity.runId,\n captureId: request.manifest.identity.captureId,\n artifacts: request.manifest.artifacts.map(({ kind, digest }) => ({ kind, digest })),\n },\n };\n}\n","import {\n createMaterialPreviewContribution,\n createMeshPreviewContribution,\n createTexturePreviewContribution,\n createVfxPreviewContribution,\n} from '@forgeax/engine-preview';\nimport { defineTool, type ToolContribution } from '@forgeax/engine-tool-runtime';\nimport { previewOfflineAnalysisDescriptor, previewRunDescriptor } from './catalog.js';\nimport {\n analyzePreviewArtifacts,\n type OfflineAnalysisRequest,\n type OfflineAnalysisResult,\n} from './offline-analysis.js';\nimport type { PreviewHostRequest, PreviewHostResult } from './preview-host.js';\nimport { retiredPreviewOperationFailure } from './preview-migration.js';\n\nexport function createPreviewContribution(): ToolContribution<\n PreviewHostRequest,\n PreviewHostResult\n> {\n return defineTool(previewRunDescriptor, async () => ({\n ok: false as const,\n error: retiredPreviewOperationFailure,\n }));\n}\n\nexport function createOfflineAnalysisContribution(): ToolContribution<\n OfflineAnalysisRequest,\n OfflineAnalysisResult\n> {\n return defineTool(\n {\n ...previewOfflineAnalysisDescriptor,\n },\n (request) => analyzePreviewArtifacts(request),\n );\n}\n\nexport function createPreviewContributions(): readonly ToolContribution<unknown, unknown>[] {\n return [\n createPreviewContribution() as ToolContribution<unknown, unknown>,\n createOfflineAnalysisContribution() as ToolContribution<unknown, unknown>,\n ];\n}\n\n/**\n * The discoverable preview surface is domain-specific. The generic recipe\n * contribution remains available only as an explicit migration error.\n */\nexport function createDomainPreviewContributions(): readonly ToolContribution<unknown, unknown>[] {\n return [\n createMaterialPreviewContribution() as ToolContribution<unknown, unknown>,\n createMeshPreviewContribution() as ToolContribution<unknown, unknown>,\n createVfxPreviewContribution() as ToolContribution<unknown, unknown>,\n createTexturePreviewContribution() as ToolContribution<unknown, unknown>,\n ];\n}\n","import {\n defineTool,\n type JsonValue,\n type ToolContribution,\n type ToolDomainFailure,\n} from '@forgeax/engine-tool-runtime';\nimport type { BuildOptions, PluginInstallOptions } from '../types.js';\nimport { authorPluginInstallDescriptor, projectBuildDescriptor } from './catalog.js';\nimport { createDomainPreviewContributions } from './preview-contributions.js';\n\n// The historical createPreviewContributions helper is private proof code; the\n// discoverable default path intentionally uses domain contributions instead.\n\nfunction commandFailure(error: {\n readonly code: string;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Record<string, unknown>;\n}): { readonly ok: false; readonly error: ToolDomainFailure } {\n return { ok: false, error: { ...error, detail: error.detail as unknown as JsonValue } };\n}\n\nexport function createBuildContribution(\n projectRoot = process.cwd(),\n): ToolContribution<BuildOptions, unknown> {\n return defineTool(\n projectBuildDescriptor as typeof projectBuildDescriptor & {\n readonly argsSchema: import('@forgeax/engine-tool-runtime').ToolSchema<BuildOptions>;\n },\n async (options) => {\n const { buildCommand } = await import('../commands.js');\n const result = await buildCommand({ ...options, root: options.root ?? projectRoot });\n return result.ok ? result.value : commandFailure(result.error);\n },\n );\n}\n\nexport function createAuthorContribution(\n projectRoot = process.cwd(),\n): ToolContribution<PluginInstallOptions, unknown> {\n return defineTool(\n authorPluginInstallDescriptor as typeof authorPluginInstallDescriptor & {\n readonly argsSchema: import('@forgeax/engine-tool-runtime').ToolSchema<PluginInstallOptions>;\n },\n async (options) => {\n const { pluginInstallCommand } = await import('../plugin-authoring.js');\n const result = await pluginInstallCommand({ ...options, root: options.root ?? projectRoot });\n return result.ok ? result.value : commandFailure(result.error);\n },\n );\n}\n\nexport function createDefaultContributions(\n projectRoot = process.cwd(),\n): readonly (\n | ToolContribution<BuildOptions, unknown>\n | ToolContribution<PluginInstallOptions, unknown>\n | ToolContribution<unknown, unknown>\n)[] {\n return [\n createBuildContribution(projectRoot),\n createAuthorContribution(projectRoot),\n ...createDomainPreviewContributions(),\n ];\n}\n","import {\n createToolRuntime,\n type ToolContribution,\n type ToolRuntime,\n} from '@forgeax/engine-tool-runtime';\nimport { createPreviewContributions } from './preview-contributions.js';\n\nexport function createDevkitToolRuntime<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n): ToolRuntime;\nexport function createDevkitToolRuntime(contributions: readonly unknown[]): ToolRuntime;\nexport function createDevkitToolRuntime(contributions: readonly unknown[]): ToolRuntime {\n return createToolRuntime(contributions);\n}\n\nexport function createPreviewToolRuntime(): ToolRuntime {\n return createToolRuntime(createPreviewContributions());\n}\n","export {\n assetAddCommand,\n assetInspectCommand,\n assetListCommand,\n assetVerifyCommand,\n browserCaptureCommand,\n buildCommand,\n createCliRhiDebugOperationContext,\n devCommand,\n doctorCommand,\n engineDoctorCommand,\n engineStatusCommand,\n engineUnlinkCommand,\n engineUseLocalCommand,\n initCommand,\n newCommand,\n packageCommand,\n pluginInstallCommand,\n pluginUninstallCommand,\n previewCommand,\n runRhiDebugCommand,\n sdkInstallCommand,\n shaderCheckCommand,\n skillInstallCommand,\n skillVerifyCommand,\n softwareCaptureCommand,\n testCommand,\n} from './commands.js';\nexport { verifyDist, writeDistManifest } from './dist.js';\nexport type {\n EngineBinding,\n EngineBindingCommandOptions,\n EngineBindingMode,\n EnginePackageStatus,\n EngineStatusReport,\n EngineWorkspaceStatus,\n} from './engine-binding.js';\nexport {\n ENGINE_BINDING_SCHEMA_VERSION,\n engineBindingFilePath,\n inspectEngineWorkspace,\n readEngineBinding,\n} from './engine-binding.js';\nexport type { BootstrapRoot } from './host/base-host.js';\nexport type { ProjectBootstrapPlan } from './host/project-bootstrap.js';\nexport type {\n ResourceBootstrapPlan,\n ResourceBootstrapTrace,\n} from './host/resource-bootstrap.js';\nexport { createInitPlan } from './init.js';\nexport { readProjectFacts } from './project.js';\nexport type {\n ArtifactRef,\n CapturedRhiTape,\n RhiCaptureFrameValue,\n RhiDebugOperationContext,\n RhiDebugOperationDescriptor,\n RhiDebugOperationInput,\n RhiDebugOperationName,\n RhiDebugOperationOutput,\n RhiInspectInput,\n RhiInspectOutput,\n RhiSummaryInput,\n RhiSummaryOutput,\n} from './rhi-debug/operations.js';\nexport {\n createRhiDebugOperationContext,\n discoverRhiDebugOperations,\n RHI_DEBUG_OPERATION_MANIFEST,\n recoverRhiDebugError,\n renderRhiDebugHelp,\n runRhiDebugOperation,\n} from './rhi-debug/operations.js';\nexport type {\n BrowserCapture,\n BrowserCaptureCheckpointOptions,\n BrowserCaptureOpenOptions,\n BrowserCaptureRecord,\n BrowserCaptureRunReport,\n BrowserCaptureRuntimeWitness,\n CapturePixelWitness,\n SoftwareBrowser,\n SoftwareBrowserOpenOptions,\n SoftwareBrowserSession,\n SoftwareCaptureCheckpointOptions,\n SoftwareCaptureRecord,\n SoftwareCaptureRunReport,\n SoftwareCaptureRuntimeWitness,\n} from './software-capture.js';\nexport { createBrowserCapture, createSoftwareBrowser } from './software-capture.js';\nexport {\n type AdmissionThresholds,\n type BenchmarkAdmissionReport,\n type BenchmarkMeasurement,\n type BenchmarkRecipe,\n type BenchmarkSample,\n createAdmissionReport,\n DEFAULT_ADMISSION_THRESHOLDS,\n runBenchmarkAdmission,\n summarizeBenchmarkSamples,\n} from './tools/benchmark/index.js';\nexport {\n bootstrapRealm,\n type RealmBootstrapInput,\n type RealmBootstrapResult,\n type RealmLifecycleAdapter,\n type RealmLifecycleHandle,\n} from './tools/bootstrap.js';\nexport { createServiceCache, type ServiceCache, type ServiceCacheEntry } from './tools/cache.js';\nexport {\n createServiceCapability,\n type ServiceAdmissionExpectation,\n type ServiceAdmissionRef,\n type ServiceCapability,\n} from './tools/capability.js';\nexport {\n type CarrierProvider,\n type CarrierProviderService,\n type CarrierProviderServiceOptions,\n createCarrierProvider,\n createCarrierProviderService,\n} from './tools/carrier-provider.js';\nexport {\n type CarrierRendezvous,\n type CarrierRendezvousOptions,\n createCarrierRendezvous,\n} from './tools/carrier-rendezvous.js';\nexport {\n describeTool,\n listTools,\n materializeToolCatalog,\n rebuildToolCatalog,\n} from './tools/catalog.js';\nexport { runGenericTool, runNamedTool } from './tools/cli-adapter.js';\nexport {\n createToolClient,\n type ToolClient,\n type ToolClientOptions,\n} from './tools/client.js';\nexport type { ForgeaXExecContext } from './tools/commands.js';\nexport {\n createAuthorContribution,\n createBuildContribution,\n createDefaultContributions,\n} from './tools/contributions.js';\nexport { runLibraryTool } from './tools/library.js';\nexport {\n createCapabilityToken,\n createMigrationRecipe,\n createMigrationRoster,\n type MigrationCapabilityProbe,\n type MigrationOperation,\n type MigrationPath,\n type MigrationRecipe,\n type MigrationResolution,\n type MigrationResolutionResult,\n type MigrationRosterEntry,\n type MigrationTarget,\n probeMigrationTarget,\n resolveMigration,\n} from './tools/migration.js';\nexport {\n analyzePreviewArtifacts,\n type OfflineAnalysisRequest,\n type OfflineAnalysisResult,\n} from './tools/offline-analysis.js';\nexport {\n createDomainPreviewContributions,\n createOfflineAnalysisContribution,\n createPreviewContribution,\n createPreviewContributions,\n} from './tools/preview-contributions.js';\nexport {\n type PreviewCarrierRoute,\n type PreviewHostRequest,\n type PreviewHostResult,\n type PreviewHostRunner,\n runCarrierPreviewRoute,\n runPreviewHost,\n} from './tools/preview-host.js';\nexport { runPrivateTool } from './tools/private-executor.js';\nexport {\n createRealmCapabilityMatrix,\n createResourceProbe,\n type RealmCapability,\n type RealmCapabilityInput,\n type RealmCapabilityMatrix,\n type ResourceOwner,\n resolveRealmCapability,\n} from './tools/realms.js';\nexport { createDevkitToolRuntime, createPreviewToolRuntime } from './tools/runtime.js';\nexport {\n createServiceExecutor,\n type ServiceExecutor,\n type ServiceExecutorOptions,\n} from './tools/service.js';\nexport {\n type AuthenticatedLoopbackService,\n type AuthenticatedLoopbackServiceOptions,\n type AuthenticatedLoopbackTransport,\n type AuthenticatedLoopbackTransportOptions,\n createAuthenticatedLoopbackService,\n createAuthenticatedLoopbackTransport,\n type ServiceWireHandler,\n type ServiceWireRequest,\n} from './tools/service-transport.js';\nexport type {\n AssetAddOptions,\n AssetInspectOptions,\n BrowserCaptureOptions,\n BuildOptions,\n CaptureBackend,\n CommandEnvelope,\n CommandError,\n CommandResult,\n ForgeaXCommand,\n InitOptions,\n NewOptions,\n PluginInstallOptions,\n PluginUninstallOptions,\n ProjectCommandOptions,\n ProjectFacts,\n ShaderCheckOptions,\n SoftwareCaptureOptions,\n} from './types.js';\nexport { resolveProjectPort } from './types.js';\n","export interface SampleStatistics {\n readonly count: number;\n readonly median: number;\n readonly p95: number;\n readonly max: number;\n}\n\nexport function calculateSampleStatistics(samples: readonly number[]): SampleStatistics {\n if (samples.length === 0) throw new RangeError('benchmark samples must not be empty');\n const sorted = [...samples].sort((left, right) => left - right);\n const medianIndex = (sorted.length - 1) / 2;\n const median = interpolate(sorted, medianIndex);\n const p95 = interpolate(sorted, Math.ceil(sorted.length * 0.95) - 1);\n const max = sorted[sorted.length - 1];\n if (max === undefined) throw new RangeError('benchmark samples must not be empty');\n return { count: sorted.length, median, p95, max };\n}\n\nfunction interpolate(values: readonly number[], index: number): number {\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n const lowerValue = values[lower];\n const upperValue = values[upper];\n if (lowerValue === undefined || upperValue === undefined) {\n throw new RangeError('benchmark percentile index is out of range');\n }\n return lower === upper ? lowerValue : lowerValue + (upperValue - lowerValue) * (index - lower);\n}\n","import { calculateSampleStatistics, type SampleStatistics } from './statistics.js';\n\nexport interface BenchmarkRecipe {\n readonly snapshotDigest: string;\n readonly backend: string;\n readonly viewport: readonly [number, number];\n readonly inputDigest: string;\n readonly frameCount: number;\n readonly rhiDebug: boolean;\n readonly profiler: boolean;\n readonly carrierRendezvous: boolean;\n readonly digest: string;\n}\n\nexport interface BenchmarkSample {\n readonly mode: 'private' | 'service';\n readonly phase: 'cold' | 'warm';\n readonly durationMs: number;\n readonly peakRssBytes: number;\n readonly exclusivePhasesMs: Readonly<Record<string, number>>;\n readonly rhiDebugOverheadMs: number;\n readonly carrierRendezvousMs: number;\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n readonly recipeDigest: string;\n}\n\nexport interface BenchmarkModeReport {\n readonly samples: number;\n readonly durationMs: SampleStatistics;\n readonly peakRssBytes: SampleStatistics;\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n readonly exclusivePhasesMs: Readonly<Record<string, SampleStatistics>>;\n}\n\nexport interface AdmissionThresholds {\n readonly sampleCountPerPhase: number;\n readonly medianImprovement: number;\n readonly p95Improvement: number;\n readonly maxRegression: number;\n readonly peakRssMultiplier: number;\n}\n\nexport const DEFAULT_ADMISSION_THRESHOLDS: AdmissionThresholds = {\n sampleCountPerPhase: 30,\n medianImprovement: 0.2,\n p95Improvement: 0.1,\n maxRegression: 0.1,\n peakRssMultiplier: 1.25,\n};\n\nexport interface BenchmarkAdmissionReport {\n readonly schema: 'forgeax.tool-service-admission.v1';\n readonly recipe: BenchmarkRecipe;\n readonly thresholds: AdmissionThresholds;\n readonly order: readonly BenchmarkSample['mode'][];\n readonly private: BenchmarkModeReport;\n readonly service: BenchmarkModeReport;\n readonly valid: boolean;\n readonly admitted: boolean;\n readonly reasons: readonly string[];\n}\n\nexport function summarizeBenchmarkSamples(\n samples: readonly BenchmarkSample[],\n): BenchmarkModeReport {\n if (samples.length === 0) {\n return {\n samples: 0,\n durationMs: { count: 0, median: 0, p95: 0, max: 0 },\n peakRssBytes: { count: 0, median: 0, p95: 0, max: 0 },\n cleanupPassed: false,\n evictionPassed: false,\n exclusivePhasesMs: {},\n };\n }\n const durations = samples.map((sample) => sample.durationMs);\n const rss = samples.map((sample) => sample.peakRssBytes);\n const phaseNames = [\n ...new Set(samples.flatMap((sample) => Object.keys(sample.exclusivePhasesMs))),\n ];\n const exclusivePhasesMs = Object.fromEntries(\n phaseNames.map((phase) => [\n phase,\n calculateSampleStatistics(samples.map((sample) => sample.exclusivePhasesMs[phase] ?? 0)),\n ]),\n );\n return {\n samples: samples.length,\n durationMs: calculateSampleStatistics(durations),\n peakRssBytes: calculateSampleStatistics(rss),\n cleanupPassed: samples.every((sample) => sample.cleanupPassed),\n evictionPassed: samples.every((sample) => sample.evictionPassed),\n exclusivePhasesMs,\n };\n}\n\nexport function createAdmissionReport(\n recipe: BenchmarkRecipe,\n samples: readonly BenchmarkSample[],\n thresholds: AdmissionThresholds = DEFAULT_ADMISSION_THRESHOLDS,\n): BenchmarkAdmissionReport {\n const privateSamples = samples.filter((sample) => sample.mode === 'private');\n const serviceSamples = samples.filter((sample) => sample.mode === 'service');\n const order = samples.map((sample) => sample.mode);\n const privateReport = summarizeBenchmarkSamples(privateSamples);\n const serviceReport = summarizeBenchmarkSamples(serviceSamples);\n const reasons: string[] = [];\n const expectedSamples = thresholds.sampleCountPerPhase * 2;\n const complete =\n privateSamples.length === expectedSamples && serviceSamples.length === expectedSamples;\n if (!complete) {\n reasons.push('sample count is incomplete');\n }\n if (samples.some((sample) => sample.recipeDigest !== recipe.digest)) {\n reasons.push('recipe identity drifted');\n }\n if (!privateReport.cleanupPassed || !serviceReport.cleanupPassed) reasons.push('cleanup failed');\n if (!privateReport.evictionPassed || !serviceReport.evictionPassed)\n reasons.push('eviction failed');\n if (order.some((mode, index) => index > 0 && mode === order[index - 1])) {\n reasons.push('private and service samples were not alternated');\n }\n const medianLimit = privateReport.durationMs.median * (1 - thresholds.medianImprovement);\n const p95Limit = privateReport.durationMs.p95 * (1 - thresholds.p95Improvement);\n const maxLimit = privateReport.durationMs.max * (1 + thresholds.maxRegression);\n const rssLimit = privateReport.peakRssBytes.median * thresholds.peakRssMultiplier;\n if (complete && serviceReport.durationMs.median > medianLimit)\n reasons.push('median improvement threshold missed');\n if (complete && serviceReport.durationMs.p95 > p95Limit)\n reasons.push('p95 improvement threshold missed');\n if (complete && serviceReport.durationMs.max > maxLimit)\n reasons.push('max regression threshold exceeded');\n if (complete && serviceReport.peakRssBytes.median > rssLimit)\n reasons.push('peak RSS threshold exceeded');\n return {\n schema: 'forgeax.tool-service-admission.v1',\n recipe,\n thresholds,\n order,\n private: privateReport,\n service: serviceReport,\n valid:\n complete &&\n !reasons.some((reason) =>\n [\n 'recipe identity drifted',\n 'cleanup failed',\n 'eviction failed',\n 'private and service samples were not alternated',\n ].includes(reason),\n ),\n admitted: reasons.length === 0,\n reasons,\n };\n}\n","import {\n type AdmissionThresholds,\n type BenchmarkAdmissionReport,\n type BenchmarkRecipe,\n type BenchmarkSample,\n createAdmissionReport,\n} from './report.js';\n\nexport interface BenchmarkMeasurement {\n readonly durationMs: number;\n readonly peakRssBytes: number;\n readonly exclusivePhasesMs?: Readonly<Record<string, number>>;\n readonly rhiDebugOverheadMs?: number;\n readonly carrierRendezvousMs?: number;\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n}\n\nexport interface BenchmarkHarnessOptions {\n readonly recipe: BenchmarkRecipe;\n readonly measure: (\n mode: BenchmarkSample['mode'],\n phase: BenchmarkSample['phase'],\n index: number,\n ) => Promise<BenchmarkMeasurement> | BenchmarkMeasurement;\n readonly thresholds?: AdmissionThresholds;\n}\n\nexport async function runBenchmarkAdmission(\n options: BenchmarkHarnessOptions,\n): Promise<BenchmarkAdmissionReport> {\n const sampleCount = options.thresholds?.sampleCountPerPhase ?? 30;\n const samples: BenchmarkSample[] = [];\n const phases = ['cold', 'warm'] as const satisfies readonly BenchmarkSample['phase'][];\n const modes = ['private', 'service'] as const satisfies readonly BenchmarkSample['mode'][];\n for (const phase of phases) {\n for (let index = 0; index < sampleCount; index += 1) {\n for (const mode of modes) {\n const measurement = await options.measure(mode, phase, index);\n samples.push({\n mode,\n phase,\n durationMs: measurement.durationMs,\n peakRssBytes: measurement.peakRssBytes,\n exclusivePhasesMs: measurement.exclusivePhasesMs ?? {},\n rhiDebugOverheadMs: measurement.rhiDebugOverheadMs ?? 0,\n carrierRendezvousMs: measurement.carrierRendezvousMs ?? 0,\n cleanupPassed: measurement.cleanupPassed,\n evictionPassed: measurement.evictionPassed,\n recipeDigest: options.recipe.digest,\n });\n }\n }\n }\n return createAdmissionReport(options.recipe, samples, options.thresholds);\n}\n","import type { Context } from '@forgeax/engine-plugin';\nimport {\n bootstrapCatalogLoader,\n type CatalogLoaderBootstrapValue,\n type GamePluginEntry,\n type PluginCatalog,\n type PluginRealm,\n projectPluginEntries,\n} from '@forgeax/engine-plugin/loader';\nimport {\n type RealmCapabilityMatrix,\n validateRealmBootstrapPayload,\n} from '@forgeax/engine-tool-runtime';\nimport {\n createProjectBootstrapPlan,\n type ProjectBootstrapPlan,\n} from '../host/project-bootstrap.js';\nimport {\n createResourceBootstrapPlan,\n type ResourceBootstrapPlan,\n} from '../host/resource-bootstrap.js';\nimport type { ProjectFacts } from '../types.js';\n\nexport interface PreviewBootstrapRoots {\n readonly project: ProjectBootstrapPlan;\n readonly resource: (guid: string) => ResourceBootstrapPlan;\n}\n\n/** Derives both physical roots without sharing project gameplay closure. */\nexport function createPreviewBootstrapRoots(facts: ProjectFacts): PreviewBootstrapRoots {\n return {\n project: createProjectBootstrapPlan(facts),\n resource: (guid) => createResourceBootstrapPlan(facts, guid),\n };\n}\n\nexport interface RealmBootstrapInput {\n readonly realm: PluginRealm;\n readonly catalog: PluginCatalog;\n readonly catalogDigest: string;\n readonly supportedRealms: readonly PluginRealm[];\n readonly entries: readonly GamePluginEntry[];\n readonly payload?: unknown;\n readonly lifecycle?: RealmLifecycleAdapter;\n}\n\nexport interface RealmLifecycleHandle {\n readonly stop: () => Promise<void>;\n}\n\nexport interface RealmLifecycleAdapter {\n readonly start: (input: {\n readonly realm: PluginRealm;\n readonly entries: readonly ReturnType<typeof projectPluginEntries>[number][];\n readonly catalog: PluginCatalog;\n readonly catalogDigest: string;\n }) => Promise<RealmLifecycleHandle>;\n}\n\nexport type RealmBootstrapResult =\n | {\n readonly ok: true;\n readonly value: {\n readonly realm: PluginRealm;\n readonly catalogDigest: string;\n readonly entries: readonly ReturnType<typeof projectPluginEntries>[number][];\n readonly loader?: CatalogLoaderBootstrapValue;\n readonly lifecycle?: RealmLifecycleHandle;\n };\n }\n | { readonly ok: false; readonly error: unknown };\n\n/** Bootstrap one declared realm from the same static Catalog and clone-safe input. */\nexport async function bootstrapRealm(\n ctx: Context | undefined,\n input: RealmBootstrapInput,\n): Promise<RealmBootstrapResult> {\n const cloneSafe = validateRealmBootstrapPayload(input.payload);\n if (!cloneSafe.ok) return cloneSafe;\n if (!input.supportedRealms.includes(input.realm)) {\n return {\n ok: false,\n error: {\n code: 'realm-capability-unavailable',\n realm: input.realm,\n supportedRealms: input.supportedRealms,\n },\n };\n }\n const entries = projectPluginEntries(input.entries, input.realm, input.realm);\n if (input.realm === 'build') {\n if (input.lifecycle === undefined) {\n return {\n ok: false,\n error: {\n code: 'realm-lifecycle-adapter-missing',\n realm: input.realm,\n hint: 'Inject a build lifecycle adapter that owns execution and stop cleanup.',\n },\n };\n }\n const lifecycle = await input.lifecycle.start({\n realm: input.realm,\n entries,\n catalog: input.catalog,\n catalogDigest: input.catalogDigest,\n });\n return {\n ok: true,\n value: { realm: input.realm, catalogDigest: input.catalogDigest, entries, lifecycle },\n };\n }\n if (ctx === undefined) {\n return {\n ok: false,\n error: { code: 'realm-context-missing', realm: input.realm },\n };\n }\n const loaded = await bootstrapCatalogLoader(ctx, input.catalog, input.realm, {\n catalogDigest: input.catalogDigest,\n supportedRealms: input.supportedRealms,\n });\n if (!loaded.ok) return loaded;\n return {\n ok: true,\n value: {\n realm: input.realm,\n catalogDigest: input.catalogDigest,\n entries,\n loader: loaded.value,\n },\n };\n}\n\nexport function assertRealmCapability(matrix: RealmCapabilityMatrix, realm: PluginRealm): void {\n const capability = matrix.realms[realm];\n if (!capability.supported) {\n throw new Error(`realm-capability-unavailable:${realm}`);\n }\n}\n","import type { JsonValue } from '@forgeax/engine-tool-runtime';\n\nexport interface ServiceCacheEntry {\n readonly artifactDigest: string;\n readonly value?: JsonValue;\n}\n\nexport interface ServiceCache {\n readonly get: (key: string) => ServiceCacheEntry | undefined;\n readonly set: (key: string, entry: ServiceCacheEntry) => void;\n readonly evict: (key: string) => boolean;\n readonly clear: () => void;\n readonly size: () => number;\n}\n\nexport function createServiceCache(): ServiceCache {\n const entries = new Map<string, ServiceCacheEntry>();\n return {\n get: (key) => entries.get(key),\n set: (key, entry) => entries.set(key, entry),\n evict: (key) => entries.delete(key),\n clear: () => entries.clear(),\n size: () => entries.size,\n };\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from 'node:http';\nimport type {\n CarrierLeaseRequest,\n CarrierOffer,\n CarrierResult,\n CarrierState,\n CarrierStateMachine,\n ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface CarrierProvider {\n readonly offer: CarrierOffer;\n readonly accept: (request: CarrierLeaseRequest) => CarrierResult<{ readonly leaseId: string }>;\n readonly started: (leaseId: string) => CarrierResult<CarrierState>;\n readonly exit: (leaseId: string) => CarrierResult<CarrierState>;\n}\n\nexport interface CarrierProviderServiceOptions {\n readonly machine: CarrierStateMachine;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly execute: (\n request: CarrierExecutionRequest,\n ) => Promise<ToolTerminal<unknown>> | ToolTerminal<unknown>;\n readonly host?: '127.0.0.1' | 'localhost';\n}\n\n/** Local structural view keeps DevKit source-compatible with an unbuilt runtime dist. */\nexport interface CarrierExecutionRequest {\n readonly leaseId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly args: unknown;\n}\n\nexport interface CarrierProviderService {\n readonly endpoint: string;\n readonly offer: CarrierOffer;\n readonly close: () => Promise<void>;\n}\n\ntype WireResult =\n | { readonly ok: true; readonly value: unknown; readonly state: string }\n | { readonly ok: false; readonly error: unknown };\n\nfunction errorResult(\n code: string,\n expected: string,\n hint: string,\n detail: Record<string, unknown> = {},\n): WireResult {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\nasync function readBody(request: IncomingMessage): Promise<Record<string, unknown>> {\n const chunks: Buffer[] = [];\n for await (const chunk of request) chunks.push(Buffer.from(chunk));\n const value: unknown = JSON.parse(Buffer.concat(chunks).toString('utf8'));\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n throw new Error('carrier request must be an object');\n return value as Record<string, unknown>;\n}\n\nfunction reply(response: ServerResponse, status: number, payload: WireResult): void {\n response.statusCode = status;\n response.setHeader('content-type', 'application/json');\n response.end(JSON.stringify(payload));\n}\n\nexport async function createCarrierProviderService(\n options: CarrierProviderServiceOptions,\n): Promise<CarrierProviderService> {\n const host = options.host ?? '127.0.0.1';\n const bearerToken = options.machine.offer.bearerToken;\n const server = createServer(async (request, response) => {\n if (request.method !== 'POST' || !request.url?.startsWith('/carrier/')) {\n reply(\n response,\n 404,\n errorResult(\n 'carrier-provider-exit',\n 'a carrier protocol route',\n 'Request a fresh visible offer from the provider.',\n ),\n );\n return;\n }\n if (request.headers.authorization !== `Bearer ${bearerToken}`) {\n reply(\n response,\n 401,\n errorResult(\n 'carrier-token-invalid',\n 'the ephemeral bearer token',\n 'Request a fresh authenticated offer; never guess or persist bearer tokens.',\n ),\n );\n return;\n }\n try {\n const body = await readBody(request);\n const route = request.url.slice('/carrier/'.length);\n if (route === 'lease') {\n const result = options.machine.lease({\n consumerId: String(body.consumerId ?? ''),\n bearerToken,\n now: Number(body.now),\n descriptorDigest:\n typeof body.descriptorDigest === 'string' ? body.descriptorDigest : undefined,\n recipeDigest: typeof body.recipeDigest === 'string' ? body.recipeDigest : undefined,\n } as CarrierLeaseRequest);\n reply(response, result.ok ? 200 : 409, result.ok ? result : result);\n return;\n }\n const leaseId = typeof body.leaseId === 'string' ? body.leaseId : '';\n if (route === 'start') {\n const result = options.machine.started(leaseId);\n reply(response, result.ok ? 200 : 409, result.ok ? result : result);\n return;\n }\n if (route === 'exit') {\n const result = options.machine.exit(leaseId);\n reply(response, result.ok ? 200 : 409, result.ok ? result : result);\n return;\n }\n if (route === 'execute') {\n const snapshot = options.machine.snapshot();\n if (snapshot.leaseId !== leaseId || snapshot.state !== 'started') {\n reply(\n response,\n 409,\n errorResult(\n snapshot.state === 'exited' ? 'carrier-exited' : 'carrier-lease-required',\n 'a started carrier lease',\n 'Do not fallback after started; report the structured terminal error and offer a new carrier.',\n ),\n );\n return;\n }\n if (body.descriptorDigest !== options.descriptorDigest) {\n reply(\n response,\n 409,\n errorResult(\n 'carrier-descriptor-mismatch',\n 'the offered descriptor digest',\n 'Rebuild the offer from the current descriptor before retrying.',\n ),\n );\n return;\n }\n if (body.recipeDigest !== options.recipeDigest) {\n reply(\n response,\n 409,\n errorResult(\n 'carrier-recipe-mismatch',\n 'the offered recipe digest',\n 'Serialize a fresh snapshot and request a new carrier before retrying.',\n ),\n );\n return;\n }\n const terminal = await options.execute({\n leaseId,\n descriptorDigest: options.descriptorDigest,\n recipeDigest: options.recipeDigest,\n args: body.args,\n });\n reply(response, 200, { ok: true, value: terminal, state: 'started' });\n return;\n }\n reply(\n response,\n 404,\n errorResult(\n 'carrier-provider-exit',\n 'a carrier protocol route',\n 'Request a fresh visible offer from the provider.',\n ),\n );\n } catch (cause) {\n reply(\n response,\n 400,\n errorResult(\n 'carrier-provider-exit',\n 'a valid carrier request',\n 'Serialize POD only and retry from the last safe snapshot.',\n { cause: cause instanceof Error ? cause.message : String(cause) },\n ),\n );\n }\n });\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error) => {\n server.off('listening', onListening);\n reject(error);\n };\n const onListening = () => {\n server.off('error', onError);\n resolve();\n };\n server.once('error', onError);\n server.once('listening', onListening);\n server.listen(0, host);\n });\n const address = server.address();\n if (address === null || typeof address === 'string')\n throw new Error('carrier provider did not expose a loopback port');\n const endpoint = `http://${host}:${address.port}/carrier`;\n let closed = false;\n return {\n endpoint,\n offer: options.machine.offer,\n async close() {\n if (closed) return;\n closed = true;\n await new Promise<void>((resolve, reject) =>\n server.close((error) => (error === undefined ? resolve() : reject(error))),\n );\n },\n };\n}\n\nexport function createCarrierProvider(machine: CarrierStateMachine): CarrierProvider {\n return {\n offer: machine.offer,\n accept(request) {\n const result = machine.lease(request);\n if (!result.ok) return result;\n return { ok: true, value: { leaseId: result.value.leaseId }, state: result.state };\n },\n started: machine.started,\n exit: machine.exit,\n };\n}\n","import {\n type CarrierOffer,\n type CarrierStateMachine,\n createCarrierStateMachine,\n} from '@forgeax/engine-tool-runtime';\n\nexport { type CarrierProvider, createCarrierProvider } from './carrier-provider.js';\n\nexport interface CarrierRendezvousOptions {\n readonly presentation: 'hidden' | 'visible';\n readonly projectId: string;\n readonly consumerId: string;\n readonly now: number;\n readonly endpoint?: string;\n readonly ttlMs?: number;\n}\n\nexport interface CarrierRendezvous extends CarrierStateMachine {\n readonly lookup: () => CarrierOffer | undefined;\n readonly lookupCount: number;\n}\n\nexport function createCarrierRendezvous(options: CarrierRendezvousOptions): CarrierRendezvous {\n const machine = createCarrierStateMachine({\n projectId: options.projectId,\n consumerId: options.consumerId,\n endpoint: options.endpoint ?? 'http://127.0.0.1:5740/carrier',\n now: options.now,\n ttlMs: options.ttlMs ?? 30_000,\n });\n let lookupCount = 0;\n const lookup = (): CarrierOffer | undefined => {\n if (options.presentation !== 'visible' || machine.snapshot().state !== 'offered') return;\n lookupCount += 1;\n return machine.offer;\n };\n return {\n ...machine,\n lookup,\n get lookupCount() {\n return lookupCount;\n },\n };\n}\n","import { describeResourcePreviewFailure } from '@forgeax/engine-preview';\nimport {\n capabilityUnavailableError,\n type JsonValue,\n type ToolRuntime,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport function decorateResourcePreviewTerminal<TResult>(\n terminal: ToolTerminal<TResult>,\n): ToolTerminal<TResult> {\n if (terminal.outcome === 'succeeded') return terminal;\n const recovery = describeResourcePreviewFailure(terminal.failure);\n if (recovery === undefined) return terminal;\n if (terminal.failure.code !== 'tool-domain-failed') return terminal;\n return {\n ...terminal,\n failure: {\n ...terminal.failure,\n detail: {\n ...terminal.failure.detail,\n ...(recovery.suggestedOperation === undefined\n ? {}\n : { suggestedOperation: recovery.suggestedOperation }),\n recovery: recovery.actions,\n },\n },\n };\n}\n\nfunction missingTool(id: string): ToolTerminal<never> {\n return {\n outcome: 'failed',\n failure: capabilityUnavailableError(`tool:${id}`, 'build'),\n artifacts: [],\n };\n}\n\nexport function runNamedTool(\n runtime: ToolRuntime,\n id: string,\n args: unknown,\n): Promise<ToolTerminal<unknown>> {\n const contribution = runtime.get(id);\n if (contribution === undefined) return Promise.resolve(missingTool(id));\n return runtime.run(contribution, args).terminal.then(decorateResourcePreviewTerminal);\n}\n\nexport function runGenericTool(\n runtime: ToolRuntime,\n id: string,\n encodedArgs: string,\n): Promise<ToolTerminal<unknown>> {\n let args: JsonValue;\n try {\n args = JSON.parse(encodedArgs) as JsonValue;\n } catch {\n return Promise.resolve({\n outcome: 'failed',\n failure: {\n code: 'tool-invalid-args',\n expected: 'generic CLI arguments to be valid JSON',\n hint: 'Encode one JSON value that conforms to the descriptor argsSchema.',\n detail: { message: 'Invalid JSON', value: null },\n },\n artifacts: [],\n });\n }\n return runNamedTool(runtime, id, args);\n}\n","import {\n createToolRuntime,\n type ToolContribution,\n type ToolRunOptions,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\nimport {\n createProjectToolCatalogAuthority,\n createRealmDispatch,\n describeTool,\n listTools,\n loadToolCatalog,\n type ToolCatalogEntry,\n type ToolRealmOwner,\n} from './catalog.js';\nimport { decorateResourcePreviewTerminal } from './cli-adapter.js';\nimport { retiredPreviewTool } from './preview-migration.js';\nimport type { ProjectToolBinding, ProjectToolDiscoveryOptions } from './project-tools.js';\n\nexport interface ToolClientOptions extends ProjectToolDiscoveryOptions {\n readonly projectRoot: string;\n /** Optional physical realm owners used by a host/carrier integration. */\n readonly realmOwners?: readonly ToolRealmOwner[];\n /** Injectable builtins for physical host tests and alternate Engine adapters. */\n readonly baseContributions?: readonly ToolContribution[];\n readonly projectDiscovery?: (projectRoot: string) => Promise<readonly ProjectToolBinding[]>;\n}\n\nexport interface ToolClient {\n readonly list: () => readonly ToolCatalogEntry[];\n readonly describe: (id: string) => ToolCatalogEntry | undefined;\n readonly run: <TResult = unknown>(\n id: string,\n args: unknown,\n options?: ToolRunOptions,\n ) => Promise<ToolTerminal<TResult>>;\n}\n\nfunction missingTool(id: string): ToolTerminal<never> {\n return {\n outcome: 'failed',\n failure: {\n code: 'tool-capability-unavailable',\n expected: `tool ${id} to exist in the project-derived catalog`,\n hint: 'Run tool list and choose one of the discovered operation ids.',\n detail: { capability: `tool:${id}`, realm: 'build' },\n },\n artifacts: [],\n };\n}\n\nexport async function createToolClient(options: ToolClientOptions): Promise<ToolClient> {\n const projectDiscovery = options.projectDiscovery;\n const runProjectTool =\n projectDiscovery === undefined\n ? (await import('./project-tools.js')).runProjectTool\n : undefined;\n const builtins =\n options.baseContributions ??\n (await import('./contributions.js')).createDefaultContributions(options.projectRoot);\n const project =\n projectDiscovery === undefined\n ? await (await import('./project-tools.js')).discoverProjectTools(\n options.projectRoot,\n options,\n )\n : await projectDiscovery(options.projectRoot);\n const contributions = [...builtins, ...project.map(({ contribution }) => contribution)];\n const runtime =\n options.baseContributions === undefined\n ? (await import('./runtime.js')).createDevkitToolRuntime(contributions as readonly unknown[])\n : createToolRuntime(contributions as readonly unknown[]);\n const realmDispatch =\n options.realmOwners === undefined\n ? undefined\n : createRealmDispatch(contributions as readonly ToolContribution[], options.realmOwners);\n const bindingById = new Map<string, ProjectToolBinding>(\n project.map((binding) => [binding.contribution.descriptor.id, binding]),\n );\n const descriptors = runtime.list();\n const loaded = await loadToolCatalog(\n createProjectToolCatalogAuthority(options.projectRoot, descriptors),\n descriptors,\n );\n if (!loaded.ok) throw loaded.error;\n return {\n list: () => listTools(loaded.value),\n describe: (id) => describeTool(loaded.value, id),\n async run<TResult = unknown>(id: string, args: unknown, runOptions: ToolRunOptions = {}) {\n if (id === 'preview.run') return retiredPreviewTool() as ToolTerminal<TResult>;\n const contribution = runtime.get(id);\n if (contribution === undefined) return missingTool(id) as ToolTerminal<TResult>;\n const binding = bindingById.get(id);\n const terminal =\n binding !== undefined && runProjectTool !== undefined\n ? await runProjectTool(binding, args, runOptions)\n : realmDispatch === undefined\n ? await runtime.run(contribution, args, runOptions).terminal\n : await realmDispatch.run(id, args, runOptions);\n return decorateResourcePreviewTerminal(terminal as ToolTerminal<TResult>);\n },\n };\n}\n","import {\n createToolRuntime,\n type ToolContribution,\n type ToolRunOptions,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport function runLibraryTool<TArgs, TResult>(\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options?: ToolRunOptions,\n): Promise<ToolTerminal<TResult>> {\n return createToolRuntime([contribution]).run(contribution, args, options).terminal;\n}\n","import type { MigrationCapabilityProbe, MigrationOperation } from '@forgeax/engine-tool-runtime';\nimport {\n type ArtifactRef,\n capabilityUnavailableError,\n createServiceCapability,\n type ServiceCapability,\n type ToolEvidenceKind,\n type ToolRealm,\n} from '@forgeax/engine-tool-runtime';\n\nexport {\n createCapabilityToken,\n createMigrationRecipe,\n type MigrationCapabilityProbe,\n type MigrationOperation,\n type MigrationRecipe,\n probeMigrationTarget,\n} from '@forgeax/engine-tool-runtime';\n\nexport type MigrationPath = 'private' | 'service';\n\nexport interface MigrationTarget extends MigrationCapabilityProbe {}\n\nexport interface MigrationRosterEntry {\n readonly operation: MigrationOperation;\n readonly owner: string;\n readonly realm: ToolRealm;\n readonly artifacts: readonly MigrationEvidence[];\n readonly benefit: string;\n readonly fallback: 'private';\n}\n\nexport interface MigrationEvidence {\n readonly owner: string;\n readonly source: 'M3';\n readonly ref: ArtifactRef;\n}\n\nexport interface MigrationResolution {\n readonly path: MigrationPath;\n readonly operation: MigrationOperation;\n readonly owner: string;\n readonly artifacts: readonly MigrationEvidence[];\n readonly service: ServiceCapability;\n}\n\nexport type MigrationResolutionResult =\n | { readonly ok: true; readonly value: MigrationResolution }\n | { readonly ok: false; readonly error: ReturnType<typeof capabilityUnavailableError> };\n\nconst roster: readonly MigrationRosterEntry[] = [\n {\n operation: 'project.preview',\n owner: 'devkit/preview-host',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'reuse the real WebGPU hidden preview recipe',\n fallback: 'private',\n },\n {\n operation: 'material.preview',\n owner: 'engine-preview/material',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'preview one material subject through the canonical lit rig',\n fallback: 'private',\n },\n {\n operation: 'mesh.preview',\n owner: 'engine-preview/mesh',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'preview one mesh subject with every submesh and AABB evidence',\n fallback: 'private',\n },\n {\n operation: 'vfx.preview',\n owner: 'engine-preview/vfx',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'preview one bounded VFX timeline with compute evidence',\n fallback: 'private',\n },\n {\n operation: 'texture.preview',\n owner: 'engine-preview/texture',\n realm: 'host',\n artifacts: previewArtifacts(),\n benefit: 'preview one texture on the aspect-preserving unlit quad',\n fallback: 'private',\n },\n];\n\nfunction previewArtifacts(): readonly MigrationEvidence[] {\n return [\n {\n owner: 'preview-tool-proof',\n source: 'M3',\n ref: {\n kind: 'rhi-tape',\n digest: 'sha256:e62a302dd29e302e1d0928306fe9c90c47ee336aa2e9e35fdc1d75586ae0018d',\n uri: 'repo:apps/preview/__tests__/tool-proof.recipe.integration.test.ts',\n },\n },\n {\n owner: 'preview-tool-proof',\n source: 'M3',\n ref: {\n kind: 'profile-capture',\n digest: 'sha256:11ec9024e1ea08b38f0901db272847ac402d2dce0c757efe744315608e889c5c',\n uri: 'repo:packages/profiler/src/__tests__/fixtures/profile-capture/model-input.json',\n },\n },\n ];\n}\n\nfunction validEvidence(entry: MigrationRosterEntry): boolean {\n return (\n entry.owner.length > 0 &&\n entry.artifacts.length > 0 &&\n entry.artifacts.every(\n ({ owner, source, ref }) =>\n owner.length > 0 &&\n source === 'M3' &&\n /^sha256:[0-9a-f]{64}$/.test(ref.digest) &&\n typeof ref.uri === 'string' &&\n ref.uri.startsWith('repo:') &&\n isSupportedEvidenceKind(ref.kind),\n )\n );\n}\n\nfunction isSupportedEvidenceKind(kind: ArtifactRef['kind']): kind is ToolEvidenceKind {\n return kind === 'rhi-tape' || kind === 'profile-capture' || kind === 'png';\n}\n\nexport function createMigrationRoster(): readonly MigrationRosterEntry[] {\n return roster.filter(validEvidence).map((entry) => ({\n ...entry,\n artifacts: entry.artifacts.map((artifact) => ({ ...artifact, ref: { ...artifact.ref } })),\n }));\n}\n\nexport function resolveMigration(\n entries: readonly MigrationRosterEntry[],\n operation: MigrationOperation,\n target: MigrationTarget,\n): MigrationResolutionResult {\n const entry = entries.find((candidate) => candidate.operation === operation);\n if (entry === undefined || !validEvidence(entry)) {\n return {\n ok: false,\n error: capabilityUnavailableError(`migration:${operation}`, target.realm),\n };\n }\n if (entry.realm !== target.realm || target.catalogDigest.length === 0) {\n return { ok: false, error: capabilityUnavailableError(`migration:${operation}`, target.realm) };\n }\n if (entry.realm === 'host' && target.rhiBackend !== 'webgpu') {\n return { ok: false, error: capabilityUnavailableError(`rhi:${operation}`, target.realm) };\n }\n const evidenceKinds = entry.artifacts.map(({ ref }) => ref.kind).filter(isSupportedEvidenceKind);\n if (!evidenceKinds.every((kind) => target.evidence.includes(kind))) {\n return { ok: false, error: capabilityUnavailableError(`evidence:${operation}`, target.realm) };\n }\n const service: ServiceCapability = createServiceCapability(undefined, {\n toolId: operation,\n descriptorDigest: entry.artifacts[0]?.ref.digest ?? '',\n recipeDigest: entry.artifacts[0]?.ref.digest ?? '',\n workloadClass: `migration:${operation}`,\n codeDigest: target.catalogDigest,\n browserVersion: 'unavailable',\n backend: 'webgpu',\n });\n return {\n ok: true,\n value: {\n path: service.available ? 'service' : 'private',\n operation,\n owner: entry.owner,\n artifacts: entry.artifacts.map((artifact) => ({ ...artifact, ref: { ...artifact.ref } })),\n service,\n },\n };\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, mkdtemp, rename, rm, writeFile } from 'node:fs/promises';\nimport { type AddressInfo, createServer as createTcpServer } from 'node:net';\nimport { join, relative, sep } from 'node:path';\nimport type {\n ToolPreviewCaptureResult,\n ToolPreviewRecipe,\n ToolPreviewResourceRequest,\n} from '@forgeax/engine-app';\nimport { createResourcePreviewReport, type ResourcePreviewReport } from '@forgeax/engine-preview';\nimport {\n createPreviewArtifactManifest,\n type JsonValue,\n type PreviewArtifactManifestEntry,\n type SnapshotRef,\n type ToolDomainFailure,\n validatePreviewArtifactManifest,\n} from '@forgeax/engine-tool-runtime';\nimport { type Browser, chromium, type Page } from 'playwright';\nimport { createServer, type ViteDevServer } from 'vite';\nimport type { BootstrapRoot } from '../host/base-host.js';\nimport { createViteConfig } from '../host.js';\nimport { readProjectFacts } from '../project.js';\nimport type { PreviewHostResult } from './preview-host.js';\n\nexport type BrowserHostResult =\n | { readonly ok: true; readonly value: PreviewHostResult }\n | { readonly ok: false; readonly error: ToolDomainFailure };\n\nfunction transportCause(cause: unknown): JsonValue {\n if (cause instanceof Error) {\n return {\n name: cause.name,\n message: cause.message,\n ...(cause.stack === undefined ? {} : { stack: cause.stack }),\n };\n }\n if (cause === undefined) return 'undefined';\n try {\n return JSON.parse(JSON.stringify(cause)) as JsonValue;\n } catch {\n return String(cause);\n }\n}\n\nfunction dataUriBytes(uri: string): Uint8Array {\n const separator = uri.indexOf(',');\n if (separator < 0) throw new TypeError('preview artifact must be a data URI before publication');\n return Buffer.from(uri.slice(separator + 1), 'base64');\n}\n\nfunction projectUri(projectRoot: string, path: string): string {\n return relative(projectRoot, path).split(sep).join('/');\n}\n\nexport interface ResourcePreviewReportInput {\n readonly snapshot: SnapshotRef;\n readonly subject: ResourcePreviewReport['subject'];\n readonly presentation: ResourcePreviewReport['presentation'];\n readonly oracle: ResourcePreviewReport['oracle'];\n}\n\nexport interface BrowserHostOptions {\n readonly publish?: boolean;\n}\n\n/** @internal Vite treats port 0 as its default 5173, not as an OS-assigned port. */\nexport async function allocateLoopbackPort(): Promise<number> {\n const probe = createTcpServer();\n try {\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error): void => {\n probe.off('listening', onListening);\n reject(error);\n };\n const onListening = (): void => {\n probe.off('error', onError);\n resolve();\n };\n probe.once('error', onError);\n probe.once('listening', onListening);\n probe.listen(0, '127.0.0.1');\n });\n const address = probe.address();\n if (address === null || typeof address === 'string') {\n throw new Error('loopback port probe did not expose a TCP address');\n }\n return address.port;\n } finally {\n if (probe.listening) {\n await new Promise<void>((resolve) => probe.close(() => resolve()));\n }\n }\n}\n\nfunction sha256(bytes: Uint8Array): string {\n return `sha256:${createHash('sha256').update(bytes).digest('hex')}`;\n}\n\nfunction artifactRef(artifact: PreviewArtifactManifestEntry) {\n const kind =\n artifact.kind === 'report' || artifact.kind === 'contact-sheet'\n ? ('tool-result' as const)\n : artifact.kind;\n return {\n kind,\n digest: artifact.digest,\n uri: artifact.uri,\n mediaType: artifact.mediaType,\n sizeBytes: artifact.byteLength,\n };\n}\n\nexport async function publishPreviewArtifacts(\n projectRoot: string,\n runId: string,\n result: PreviewHostResult,\n reportInput?: ResourcePreviewReportInput,\n): Promise<PreviewHostResult> {\n if (result.manifest.identity.runId !== runId) {\n throw new Error(\n `preview artifact run identity mismatch: manifest=${result.manifest.identity.runId} requested=${runId}`,\n );\n }\n const runsRoot = join(projectRoot, '.forgeax', 'tool-runs');\n await mkdir(runsRoot, { recursive: true });\n const directoryName = runId.replace(/[^a-zA-Z0-9._-]/g, '_');\n const published = join(runsRoot, directoryName);\n const finalPaths = {\n tapeJson: join(published, 'rhi-tape.json'),\n tapeBlob: join(published, 'rhi-tape.bin'),\n capturePng: join(published, 'capture.png'),\n freshReplayPng: join(published, 'fresh-replay.png'),\n profile: join(published, 'profile.json'),\n manifest: join(published, 'manifest.json'),\n report: join(published, 'report.json'),\n };\n const tapeJson = dataUriBytes(result.tape.jsonUri);\n const tapeBlob = dataUriBytes(result.tape.blobUri);\n const capturePng = dataUriBytes(result.capturePng.uri);\n const freshReplayPng = dataUriBytes(result.png.uri);\n const profile = dataUriBytes(result.profile.uri);\n const bytesByRole = {\n 'rhi-tape': tapeJson,\n capture: capturePng,\n 'fresh-replay': freshReplayPng,\n 'profile-capture': profile,\n } as const;\n const uriByRole = {\n 'rhi-tape': projectUri(projectRoot, finalPaths.tapeJson),\n capture: projectUri(projectRoot, finalPaths.capturePng),\n 'fresh-replay': projectUri(projectRoot, finalPaths.freshReplayPng),\n 'profile-capture': projectUri(projectRoot, finalPaths.profile),\n } as const;\n const mediaTypeByRole = {\n 'rhi-tape': 'application/vnd.forgeax.rhi-tape+json',\n capture: 'image/png',\n 'fresh-replay': 'image/png',\n 'profile-capture': 'application/vnd.forgeax.profile+json',\n } as const;\n const requiredRoles = ['rhi-tape', 'capture', 'fresh-replay', 'profile-capture'] as const;\n const nonReportArtifacts = result.manifest.artifacts\n .filter((artifact) => artifact.role !== 'report')\n .map((artifact) => {\n if (!(artifact.role in bytesByRole)) {\n return artifact;\n }\n const role = artifact.role as keyof typeof bytesByRole;\n const bytes = bytesByRole[role];\n const digest = sha256(bytes);\n if (artifact.digest !== digest) {\n throw new Error(`preview artifact digest mismatch for ${artifact.role}`);\n }\n return {\n ...artifact,\n uri: uriByRole[role],\n digest,\n byteLength: bytes.byteLength,\n mediaType: mediaTypeByRole[role],\n };\n });\n if (\n requiredRoles.some((role) => !nonReportArtifacts.some((artifact) => artifact.role === role))\n ) {\n throw new Error(\n 'preview publication is missing capture, fresh-replay, tape, or profile artifact',\n );\n }\n let report: ResourcePreviewReport | undefined;\n let reportBytes: Uint8Array | undefined;\n if (reportInput !== undefined) {\n if (reportInput.snapshot.digest !== result.manifest.identity.snapshotDigest) {\n throw new Error('preview report snapshot identity does not match the artifact manifest');\n }\n report = createResourcePreviewReport({\n runId,\n snapshot: reportInput.snapshot,\n subject: reportInput.subject,\n presentation: reportInput.presentation,\n oracle: reportInput.oracle,\n artifacts: nonReportArtifacts,\n });\n reportBytes = new TextEncoder().encode(JSON.stringify(report));\n }\n const reportArtifact: PreviewArtifactManifestEntry | undefined =\n reportBytes === undefined\n ? undefined\n : {\n owner: 'resource-preview',\n kind: 'report',\n role: 'report',\n uri: projectUri(projectRoot, finalPaths.report),\n digest: sha256(reportBytes),\n byteLength: reportBytes.byteLength,\n mediaType: 'application/vnd.forgeax.resource-preview+json',\n derivedFrom: nonReportArtifacts.map((artifact) => artifact.digest),\n };\n const manifest = createPreviewArtifactManifest({\n ...result.manifest,\n artifacts:\n reportArtifact === undefined ? nonReportArtifacts : [reportArtifact, ...nonReportArtifacts],\n });\n const validated = validatePreviewArtifactManifest(\n manifest,\n reportArtifact === undefined ? requiredRoles : ['report', ...requiredRoles],\n );\n if (!validated.ok) throw new Error(JSON.stringify(validated.error.detail));\n const staging = await mkdtemp(join(runsRoot, '.staging-'));\n const paths = {\n tapeJson: join(staging, 'rhi-tape.json'),\n tapeBlob: join(staging, 'rhi-tape.bin'),\n capturePng: join(staging, 'capture.png'),\n freshReplayPng: join(staging, 'fresh-replay.png'),\n profile: join(staging, 'profile.json'),\n manifest: join(staging, 'manifest.json'),\n report: join(staging, 'report.json'),\n };\n try {\n await Promise.all([\n writeFile(paths.tapeJson, tapeJson),\n writeFile(paths.tapeBlob, tapeBlob),\n writeFile(paths.capturePng, capturePng),\n writeFile(paths.freshReplayPng, freshReplayPng),\n writeFile(paths.profile, profile),\n ...(reportBytes === undefined ? [] : [writeFile(paths.report, reportBytes)]),\n ]);\n await writeFile(paths.manifest, `${JSON.stringify(manifest, null, 2)}\\n`);\n await rename(staging, published);\n } catch (cause) {\n await rm(staging, { recursive: true, force: true });\n throw cause;\n }\n return {\n ...result,\n tape: {\n ...result.tape,\n jsonUri: projectUri(projectRoot, finalPaths.tapeJson),\n blobUri: projectUri(projectRoot, finalPaths.tapeBlob),\n },\n profile: { ...result.profile, uri: projectUri(projectRoot, finalPaths.profile) },\n capturePng: { ...result.capturePng, uri: projectUri(projectRoot, finalPaths.capturePng) },\n png: { ...result.png, uri: projectUri(projectRoot, finalPaths.freshReplayPng) },\n manifest,\n artifacts: manifest.artifacts.map(artifactRef),\n };\n}\n\nfunction browserFailure(\n phase: string,\n cause: unknown,\n pageErrors: readonly string[] = [],\n): BrowserHostResult {\n return {\n ok: false,\n error: {\n code: 'tool-preview-browser-host-failed',\n expected: 'a real Chromium page, project bootstrap, WebGPU device, and bounded preview run',\n hint: 'Inspect the Browser Host phase and repair the project or local WebGPU capability.',\n detail: {\n phase,\n cause: transportCause(cause),\n pageErrors,\n },\n },\n };\n}\n\nexport async function runBrowserPreviewHost(\n projectRoot: string,\n recipe: ToolPreviewRecipe,\n snapshot: SnapshotRef,\n runId: string,\n signal: AbortSignal,\n bootstrapRoot: BootstrapRoot = 'project-bootstrap',\n resource?: ToolPreviewResourceRequest,\n options: BrowserHostOptions = {},\n): Promise<BrowserHostResult> {\n const facts = await readProjectFacts(projectRoot);\n if (!facts.ok)\n return { ok: false, error: { ...facts.error, detail: facts.error.detail as never } };\n const config = await createViteConfig(facts.value, 'serve', '/', { bootstrapRoot });\n // A Browser Host is a disposable Vite realm. A shared cache lets adjacent\n // coverage groups observe a partially-written optimized dependency graph.\n // Keep the cache inside the project lifecycle and remove it with the Host.\n const cacheDir = await mkdtemp(join(facts.value.root, '.forgeax', '.browser-host-vite-'));\n let server: ViteDevServer;\n try {\n const port = await allocateLoopbackPort();\n server = await createServer({\n ...config,\n cacheDir,\n logLevel: 'silent',\n optimizeDeps: {\n ...config.optimizeDeps,\n // Tool runs must observe the current workspace build, even when a\n // persistent runner retains Vite's optimized-dependency cache.\n force: true,\n },\n server: {\n ...config.server,\n host: '127.0.0.1',\n port,\n // Vite's port 0 means its default 5173. Bind the probed port exactly so\n // another project or runner cannot be mistaken for this Browser Host.\n strictPort: true,\n },\n });\n } catch (cause) {\n await rm(cacheDir, { recursive: true, force: true });\n throw cause;\n }\n const hostStartedAtMs = performance.now();\n let phase = 'server-listen';\n let browser: Browser | undefined;\n let page: Page | undefined;\n let pageErrors: string[] = [];\n let responseDiagnostics: Promise<void>[] = [];\n const launchBrowser = (headless: boolean): Promise<Browser> =>\n chromium.launch({\n channel: process.env.FORGEAX_CHROME_CHANNEL ?? 'chrome',\n headless,\n args: [\n '--enable-unsafe-webgpu',\n '--enable-features=Vulkan,UseSkiaRenderer,SharedArrayBuffer',\n '--use-vulkan=swiftshader',\n '--use-angle=swiftshader',\n '--disable-vulkan-surface',\n '--ignore-gpu-blocklist',\n '--disable-gpu-driver-bug-workarounds',\n '--disable-dawn-features=disallow_unsafe_apis',\n '--autoplay-policy=no-user-gesture-required',\n ],\n });\n const observePage = (target: Page): void => {\n target.on('pageerror', (error) => pageErrors.push(error.message));\n target.on('console', (message) => {\n if (message.type() === 'error' || message.type() === 'warning') {\n pageErrors.push(`${message.type()}: ${message.text()}`);\n }\n });\n target.on('response', (response) => {\n if (response.status() >= 400) {\n responseDiagnostics.push(\n response\n .text()\n .then((body) => {\n pageErrors.push(`HTTP ${response.status()}: ${response.url()} ${body}`);\n })\n .catch(() => {\n pageErrors.push(`HTTP ${response.status()}: ${response.url()}`);\n }),\n );\n }\n });\n };\n const closeBrowserProcess = async (): Promise<void> => {\n await page?.close().catch(() => undefined);\n page = undefined;\n await browser?.close().catch(() => undefined);\n browser = undefined;\n };\n const abort = (): void => {\n void closeBrowserProcess();\n void server.close();\n };\n signal.addEventListener('abort', abort, { once: true });\n try {\n if (signal.aborted) throw new Error('Browser Host aborted before launch');\n await server.listen();\n const address = server.httpServer?.address() as AddressInfo | null | undefined;\n if (address === null || address === undefined || typeof address === 'string') {\n throw new Error('Vite Browser Host did not expose a loopback TCP address');\n }\n\n phase = 'server-transform';\n const entryTransform = await server.transformRequest('/main.ts');\n if (entryTransform === null) {\n throw new Error('Vite Browser Host entry transform returned no module');\n }\n\n phase = 'capture-browser-launch';\n browser = await launchBrowser(recipe.presentation === 'hidden');\n phase = 'capture-page-bootstrap';\n page = await browser.newPage({\n viewport: recipe.viewport,\n deviceScaleFactor: 1,\n });\n observePage(page);\n const captureUrl = new URL(`http://127.0.0.1:${address.port}/`);\n captureUrl.searchParams.set('forgeax-tool-recipe', JSON.stringify(recipe));\n captureUrl.searchParams.set('forgeax-tool-snapshot', JSON.stringify(snapshot));\n captureUrl.searchParams.set('forgeax-tool-run-id', runId);\n if (resource !== undefined)\n captureUrl.searchParams.set('forgeax-resource-preview', JSON.stringify(resource));\n await page.goto(captureUrl.href, { waitUntil: 'networkidle', timeout: 45_000 });\n await page.waitForFunction(\n () =>\n (\n globalThis as unknown as {\n __forgeaxToolHost?: { readonly ready?: boolean };\n }\n ).__forgeaxToolHost?.ready === true,\n undefined,\n { timeout: 45_000 },\n );\n phase = 'capture-run';\n const captured = await page.evaluate(async () => {\n const host = (\n globalThis as unknown as {\n __forgeaxToolHost: {\n capture(): Promise<\n | { readonly ok: true; readonly result: ToolPreviewCaptureResult }\n | { readonly ok: false; readonly error: ToolDomainFailure }\n >;\n };\n }\n ).__forgeaxToolHost;\n const value = await host.capture();\n return JSON.parse(\n JSON.stringify(value, (_key, nested) =>\n nested instanceof Error\n ? {\n ...nested,\n name: nested.name,\n message: nested.message,\n stack: nested.stack,\n }\n : nested,\n ),\n ) as Awaited<ReturnType<typeof host.capture>>;\n });\n await Promise.all(responseDiagnostics);\n if (!captured.ok) return browserFailure('capture-run', captured.error, pageErrors);\n if (pageErrors.length > 0)\n return browserFailure('capture-page-runtime', pageErrors[0], pageErrors);\n const capturePng = await page.screenshot({ type: 'png' });\n const capturedResult: ToolPreviewCaptureResult = {\n ...captured.result,\n capturePng: {\n uri: `data:image/png;base64,${capturePng.toString('base64')}`,\n width: recipe.viewport.width,\n height: recipe.viewport.height,\n },\n };\n\n await closeBrowserProcess();\n pageErrors = [];\n responseDiagnostics = [];\n\n phase = 'replay-browser-launch';\n browser = await launchBrowser(true);\n phase = 'replay-page-bootstrap';\n page = await browser.newPage({\n viewport: recipe.viewport,\n deviceScaleFactor: 1,\n });\n observePage(page);\n const replayUrl = new URL(`http://127.0.0.1:${address.port}/`);\n replayUrl.searchParams.set('forgeax-tool-replay', '1');\n await page.goto(replayUrl.href, { waitUntil: 'networkidle', timeout: 45_000 });\n await page.waitForFunction(\n () =>\n (\n globalThis as unknown as {\n __forgeaxToolReplayHost?: { readonly ready?: boolean };\n }\n ).__forgeaxToolReplayHost?.ready === true,\n undefined,\n { timeout: 45_000 },\n );\n phase = 'replay-run';\n const result = (await page.evaluate(async (serializedCapture: string): Promise<unknown> => {\n const host = (\n globalThis as unknown as {\n __forgeaxToolReplayHost: {\n run(value: ToolPreviewCaptureResult): Promise<unknown>;\n };\n }\n ).__forgeaxToolReplayHost;\n const value = await host.run(JSON.parse(serializedCapture) as ToolPreviewCaptureResult);\n return JSON.parse(\n JSON.stringify(value, (_key, nested) =>\n nested instanceof Error\n ? {\n ...nested,\n name: nested.name,\n message: nested.message,\n stack: nested.stack,\n }\n : nested,\n ),\n ) as unknown;\n }, JSON.stringify(capturedResult))) as\n | { readonly ok: true; readonly result: PreviewHostResult }\n | { readonly ok: false; readonly error: ToolDomainFailure };\n await Promise.all(responseDiagnostics);\n if (!result.ok) return browserFailure('replay-run', result.error, pageErrors);\n if (pageErrors.length > 0)\n return browserFailure('replay-page-runtime', pageErrors[0], pageErrors);\n\n const endedAtMs = performance.now();\n const phases = result.result.operationTiming.phases;\n const observedDurationMs =\n phases === undefined\n ? 0\n : Object.values(phases).reduce(\n (total, observation) =>\n total + (observation.status === 'observed' ? observation.durationMs : 0),\n 0,\n );\n const durationMs = endedAtMs - hostStartedAtMs;\n const value: PreviewHostResult = {\n ...result.result,\n operationTiming: {\n ...result.result.operationTiming,\n startedAtMs: hostStartedAtMs,\n endedAtMs,\n durationMs,\n ...(phases === undefined\n ? { unattributedMs: durationMs }\n : {\n phases: {\n ...phases,\n transport: {\n status: 'observed',\n durationMs: Math.max(0, durationMs - observedDurationMs),\n },\n },\n unattributedMs: 0,\n }),\n },\n actualCarrier: recipe.presentation === 'hidden' ? 'headless-private' : 'headed-private',\n };\n phase = 'artifact-publish';\n return {\n ok: true,\n value:\n options.publish === false\n ? value\n : await publishPreviewArtifacts(projectRoot, runId, value),\n };\n } catch (cause) {\n await Promise.all(responseDiagnostics);\n return browserFailure(phase, cause, pageErrors);\n } finally {\n signal.removeEventListener('abort', abort);\n await closeBrowserProcess();\n await server.close().catch(() => undefined);\n await rm(cacheDir, { recursive: true, force: true });\n }\n}\n\nexport function runBrowserResourcePreviewHost(\n projectRoot: string,\n recipe: ToolPreviewRecipe,\n snapshot: SnapshotRef,\n runId: string,\n signal: AbortSignal,\n resource: ToolPreviewResourceRequest,\n options: BrowserHostOptions = {},\n): Promise<BrowserHostResult> {\n return runBrowserPreviewHost(\n projectRoot,\n recipe,\n snapshot,\n runId,\n signal,\n 'resource-bootstrap',\n resource,\n options,\n );\n}\n","import {\n createToolPreviewHost,\n createToolPreviewRecipe,\n type ToolPreviewRecipeOptions,\n type ToolPreviewRunResult,\n type ToolPreviewTrace,\n} from '@forgeax/engine-app';\nimport type {\n CarrierLeaseRequest,\n CarrierOffer,\n CarrierResult,\n CarrierState,\n ToolDomainFailure,\n ToolExecutionContext,\n} from '@forgeax/engine-tool-runtime';\nimport { runBrowserPreviewHost } from './browser-host.js';\n\nexport interface PreviewHostRequest {\n readonly recipe: ToolPreviewRecipeOptions;\n readonly projectRoot?: string;\n readonly carrier?: PreviewCarrierRoute;\n}\n\nexport interface PreviewHostMechanisms {\n readonly runId: string;\n readonly projectRoot: string;\n readonly backend: 'webgpu';\n readonly signal: AbortSignal;\n}\n\nexport interface PreviewHostSession {\n readonly withSession: <T>(\n execute: (mechanisms: PreviewHostMechanisms) => Promise<T>,\n ) => Promise<T>;\n}\n\n/**\n * Creates the physical host lease. Domain identity stays in the executor;\n * this seam carries only browser, backend, and lexical run ownership.\n */\nexport function createPreviewHostSession(input: {\n readonly runId: string;\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n}): PreviewHostSession {\n let active = true;\n return {\n async withSession(execute) {\n if (!active || input.signal.aborted) throw new Error('preview-host-session-terminal');\n try {\n return await execute({\n runId: input.runId,\n projectRoot: input.projectRoot,\n backend: 'webgpu',\n signal: input.signal,\n });\n } finally {\n active = false;\n }\n },\n };\n}\n\nexport interface PreviewCarrierRoute {\n readonly lookup: () => CarrierOffer | undefined;\n readonly lease: (request: CarrierLeaseRequest) => CarrierResult<{ readonly leaseId: string }>;\n readonly started: (leaseId: string) => CarrierResult<CarrierState>;\n readonly execute: (\n leaseId: string,\n request: Omit<PreviewHostRequest, 'carrier'>,\n context: Pick<ToolExecutionContext, 'runId' | 'signal'>,\n ) => Promise<PreviewRouteResult<PreviewHostResult>>;\n readonly exit: (leaseId: string) => CarrierResult<CarrierState>;\n readonly now?: () => number;\n}\n\nexport interface PreviewHostResult {\n readonly actualCarrier: 'headless-private' | 'headed-private' | 'visible-consumer';\n readonly trace: ToolPreviewTrace;\n readonly captureId: string;\n readonly drawCalls: number;\n readonly committedDrawIndex: number;\n readonly nonBlackPixels: number;\n readonly actionTrace: ToolPreviewRunResult['actionTrace'];\n readonly tape: ToolPreviewRunResult['tape'];\n readonly profile: ToolPreviewRunResult['profile'];\n readonly capturePng: ToolPreviewRunResult['capturePng'];\n readonly png: ToolPreviewRunResult['png'];\n readonly manifest: ToolPreviewRunResult['manifest'];\n readonly artifacts: ToolPreviewRunResult['artifacts'];\n readonly operationTiming: ToolPreviewRunResult['operationTiming'];\n readonly resource?: import('@forgeax/engine-app').ToolPreviewResourceFacts;\n}\n\nexport type PreviewHostRunner = (\n request: PreviewHostRequest,\n context: ToolExecutionContext,\n) => Promise<\n | { readonly ok: true; readonly value: PreviewHostResult }\n | { readonly ok: false; readonly error: ToolDomainFailure }\n>;\n\ntype PreviewRouteResult<T> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: ToolDomainFailure };\n\nexport interface CarrierCleanupTrace {\n readonly actualCarrier: 'headless-private' | 'headed-private' | 'visible-consumer';\n readonly backend: 'webgpu';\n readonly cleanup: readonly ['gpu', 'canvas', 'page', 'carrier'];\n readonly failure: {\n readonly code: 'tool-preview-carrier-exit';\n readonly detail: { readonly carrier: CarrierCleanupTrace['actualCarrier'] };\n };\n}\n\nexport function createCarrierCleanupTrace(input: {\n readonly actualCarrier: CarrierCleanupTrace['actualCarrier'];\n readonly backend: 'webgpu';\n}): CarrierCleanupTrace {\n return {\n actualCarrier: input.actualCarrier,\n backend: input.backend,\n cleanup: ['gpu', 'canvas', 'page', 'carrier'],\n failure: {\n code: 'tool-preview-carrier-exit',\n detail: { carrier: input.actualCarrier },\n },\n };\n}\n\nfunction carrierRouteFailure(\n code: string,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>>,\n): PreviewRouteResult<never> {\n return { ok: false, error: { code, expected, hint, detail: detail as never } };\n}\n\nexport async function runCarrierPreviewRoute<T>(\n presentation: ToolPreviewRecipeOptions['presentation'],\n carrier: PreviewCarrierRoute | undefined,\n executePrivate: () => Promise<PreviewRouteResult<T>>,\n executeConsumer: (leaseId: string) => Promise<PreviewRouteResult<T>> = executePrivate,\n): Promise<PreviewRouteResult<T>> {\n if (presentation === 'hidden' || carrier === undefined) return executePrivate();\n const offer = carrier.lookup();\n if (offer === undefined) return executePrivate();\n const leased = carrier.lease({\n consumerId: offer.consumerId,\n bearerToken: offer.bearerToken,\n now: carrier.now?.() ?? Date.now(),\n });\n if (!leased.ok) return executePrivate();\n const started = carrier.started(leased.value.leaseId);\n if (!started.ok) return executePrivate();\n const result = await executeConsumer(leased.value.leaseId);\n const exited = carrier.exit(leased.value.leaseId);\n if (!exited.ok)\n return carrierRouteFailure(\n exited.error.code,\n exited.error.expected,\n exited.error.hint,\n exited.error.detail,\n );\n return result;\n}\n\nexport const runPreviewHost: PreviewHostRunner = async (request, context) => {\n if (context.snapshot === undefined) {\n return carrierRouteFailure(\n 'tool-snapshot-missing',\n 'ToolExecutionContext.snapshot before Browser or Renderer creation',\n 'Start the operation with an authority snapshot and retry the lexical ToolRun.',\n { phase: 'snapshot' },\n );\n }\n const snapshot = context.snapshot;\n const recipe = createToolPreviewRecipe(request.recipe);\n return runCarrierPreviewRoute(\n recipe.presentation,\n request.carrier,\n async () => {\n if (typeof document === 'undefined') {\n if (request.projectRoot === undefined) {\n return carrierRouteFailure(\n 'tool-preview-project-root-missing',\n 'the Browser Host to receive a real ForgeaX project root',\n 'Create the ToolClient with projectRoot or pass projectRoot in the preview request.',\n { phase: 'project-authority' },\n );\n }\n return runBrowserPreviewHost(\n request.projectRoot,\n recipe,\n snapshot,\n context.runId,\n context.signal,\n );\n }\n const host = await createToolPreviewHost({ recipe, snapshot });\n if (!host.ok) {\n return {\n ok: false,\n error: {\n code: host.error.code,\n expected: host.error.expected,\n hint: host.error.hint,\n detail: host.error.detail as never,\n },\n };\n }\n try {\n const result = await host.value.run();\n if (!result.ok) {\n return {\n ok: false,\n error: {\n code: result.error.code,\n expected: result.error.expected,\n hint: result.error.hint,\n detail: result.error.detail as never,\n },\n };\n }\n return {\n ok: true,\n value: {\n ...result.value,\n actualCarrier: recipe.presentation === 'hidden' ? 'headless-private' : 'headed-private',\n },\n };\n } finally {\n await host.value.dispose();\n }\n },\n async (leaseId) => {\n const carrier = request.carrier;\n if (carrier === undefined) {\n return carrierRouteFailure(\n 'tool-preview-carrier-unavailable',\n 'a leased Consumer provider',\n 'Retry the ordinary private visible carrier.',\n { phase: 'consumer-execute' },\n );\n }\n const { carrier: _carrier, ...consumerRequest } = request;\n return carrier.execute(leaseId, consumerRequest, context);\n },\n );\n};\n","import type {\n ToolContribution,\n ToolRunOptions,\n ToolRuntime,\n ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport function runPrivateTool<TArgs, TResult>(\n runtime: ToolRuntime,\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options?: ToolRunOptions,\n): Promise<ToolTerminal<TResult>> {\n return runtime.run(contribution, args, options).terminal;\n}\n","import type { ToolRealm } from '@forgeax/engine-tool-runtime';\nimport {\n createRealmCapabilityMatrix as createRuntimeRealmCapabilityMatrix,\n type RealmCapability,\n type RealmCapabilityInput,\n type RealmCapabilityMatrix,\n} from '@forgeax/engine-tool-runtime';\n\nexport type { RealmCapability, RealmCapabilityInput, RealmCapabilityMatrix };\nexport { createRuntimeRealmCapabilityMatrix as createRealmCapabilityMatrix };\n\nexport function resolveRealmCapability(\n matrix: RealmCapabilityMatrix,\n realm: ToolRealm,\n): RealmCapability {\n return matrix.realms[realm];\n}\n\nconst RESOURCE_KINDS = ['process', 'port', 'page', 'canvas', 'fiber'] as const;\nexport type ResourceKind = (typeof RESOURCE_KINDS)[number];\n\nexport interface ResourceProbe {\n readonly observe: (kind: ResourceKind, id: string) => void;\n readonly release: (kind: ResourceKind, id: string) => void;\n readonly owner: (id: string) => ResourceOwner;\n readonly snapshot: () => Readonly<Record<ResourceKind, readonly string[]>>;\n}\n\nexport interface ResourceOwner {\n readonly id: string;\n readonly observe: (kind: ResourceKind, resourceId: string) => void;\n readonly release: (kind: ResourceKind, resourceId: string) => void;\n readonly stop: () => void;\n}\n\nexport function createResourceProbe(): ResourceProbe {\n const live = new Map<ResourceKind, Set<string>>(RESOURCE_KINDS.map((kind) => [kind, new Set()]));\n const owned = new Map<string, Set<string>>();\n const key = (kind: ResourceKind, id: string): string => `${kind}:${id}`;\n const releaseOwned = (ownerId: string, kind: ResourceKind, id: string): void => {\n live.get(kind)?.delete(id);\n owned.get(ownerId)?.delete(key(kind, id));\n };\n return {\n observe(kind, id) {\n live.get(kind)?.add(id);\n },\n release(kind, id) {\n live.get(kind)?.delete(id);\n },\n owner(id) {\n if (owned.has(id)) throw new Error(`resource-owner-duplicate:${id}`);\n owned.set(id, new Set());\n let stopped = false;\n return {\n id,\n observe(kind, resourceId) {\n if (stopped) throw new Error(`resource-owner-stopped:${id}`);\n live.get(kind)?.add(resourceId);\n owned.get(id)?.add(key(kind, resourceId));\n },\n release(kind, resourceId) {\n releaseOwned(id, kind, resourceId);\n },\n stop() {\n if (stopped) return;\n stopped = true;\n for (const resource of owned.get(id) ?? []) {\n const separator = resource.indexOf(':');\n const kind = resource.slice(0, separator) as ResourceKind;\n const resourceId = resource.slice(separator + 1);\n live.get(kind)?.delete(resourceId);\n }\n owned.delete(id);\n },\n };\n },\n snapshot() {\n return Object.fromEntries(\n [...live.entries()].map(([kind, ids]) => [kind, [...ids].sort()]),\n ) as unknown as Readonly<Record<ResourceKind, readonly string[]>>;\n },\n };\n}\n\nexport {\n createResourceBootstrapPlan,\n createResourceBootstrapTrace,\n type ResourceBootstrapPlan,\n type ResourceBootstrapTrace,\n type ResourceBootstrapTraceInput,\n} from '../host/resource-bootstrap.js';\n","import {\n type AuthenticatedLoopbackTransport,\n cancellationError,\n createServiceCapability,\n disconnectedError,\n domainFailureError,\n type JsonValue,\n type ServiceAdmissionRef,\n type ServiceCapability,\n type ToolContribution,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface ServiceExecutorOptions<TArgs, TResult> {\n readonly contribution: ToolContribution<TArgs, TResult>;\n readonly privateExecutor: (args: TArgs) => Promise<ToolTerminal<TResult>>;\n readonly transport: AuthenticatedLoopbackTransport;\n readonly admission?: ServiceAdmissionRef;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly workloadClass: string;\n readonly codeDigest: string;\n readonly browserVersion: string;\n readonly bearerToken?: string;\n}\n\nexport interface ServiceExecutor<TArgs, TResult> {\n readonly capability: ServiceCapability;\n readonly run: (\n args: TArgs,\n options?: { readonly recipeDigest?: string; readonly signal?: AbortSignal },\n ) => Promise<ToolTerminal<TResult>>;\n}\n\nexport function createServiceExecutor<TArgs, TResult>(\n options: ServiceExecutorOptions<TArgs, TResult>,\n): ServiceExecutor<TArgs, TResult> {\n const capability = createServiceCapability(options.admission, {\n toolId: options.contribution.descriptor.id,\n descriptorDigest: options.descriptorDigest,\n recipeDigest: options.recipeDigest,\n workloadClass: options.workloadClass,\n codeDigest: options.codeDigest,\n browserVersion: options.browserVersion,\n backend: 'webgpu',\n });\n return {\n capability,\n async run(args, runOptions = {}) {\n if (!capability.available) return options.privateExecutor(args);\n const request = {\n descriptorDigest: options.descriptorDigest,\n recipeDigest: runOptions.recipeDigest ?? options.recipeDigest,\n args: args as JsonValue,\n };\n try {\n const terminal = await options.transport.request(\n request,\n options.bearerToken ?? 'service-default-token',\n runOptions.signal === undefined ? {} : { signal: runOptions.signal },\n );\n return terminal as ToolTerminal<TResult>;\n } catch (cause) {\n const message = cause instanceof Error ? cause.message : String(cause);\n if (runOptions.signal?.aborted) {\n return {\n outcome: 'failed',\n failure: cancellationError(String(runOptions.signal.reason ?? 'aborted')),\n artifacts: [],\n };\n }\n const failure = message.includes('disconnected')\n ? disconnectedError(options.transport.endpoint)\n : domainFailureError(\n 'service-transport-failed',\n 'the authenticated loopback service to accept the request',\n 'Check the service token and recipe digest, then retry the private executor.',\n message,\n );\n return { outcome: 'failed', failure, artifacts: [] };\n }\n },\n };\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from 'node:http';\nimport {\n type AuthenticatedLoopbackTransport,\n createAuthenticatedLoopbackTransport,\n type ServiceWireHandler,\n type ServiceWireRequest,\n type ToolTerminal,\n} from '@forgeax/engine-tool-runtime';\n\nexport type {\n AuthenticatedLoopbackTransport,\n AuthenticatedLoopbackTransportOptions,\n ServiceWireHandler,\n ServiceWireRequest,\n} from '@forgeax/engine-tool-runtime';\nexport { createAuthenticatedLoopbackTransport } from '@forgeax/engine-tool-runtime';\n\nexport interface AuthenticatedLoopbackServiceOptions {\n readonly bearerToken: string;\n readonly handler: ServiceWireHandler;\n readonly host?: '127.0.0.1' | 'localhost';\n readonly expectedDescriptorDigest?: string;\n readonly expectedRecipeDigest?: string;\n}\n\nexport interface AuthenticatedLoopbackService {\n readonly endpoint: string;\n readonly transport: AuthenticatedLoopbackTransport;\n readonly close: () => Promise<void>;\n}\n\nasync function readJson(request: IncomingMessage): Promise<unknown> {\n const chunks: Buffer[] = [];\n for await (const chunk of request) chunks.push(Buffer.from(chunk));\n const body = Buffer.concat(chunks);\n if (body.byteLength > 1024 * 1024) throw new Error('request body is too large');\n return JSON.parse(body.toString('utf8')) as unknown;\n}\n\nfunction reply(\n response: ServerResponse,\n status: number,\n payload: ToolTerminal<unknown> | { readonly error: string },\n): void {\n response.statusCode = status;\n response.setHeader('content-type', 'application/json');\n response.end(JSON.stringify(payload));\n}\n\nfunction parseRequest(value: unknown): ServiceWireRequest {\n if (typeof value !== 'object' || value === null) throw new Error('request must be an object');\n const request = value as Record<string, unknown>;\n if (\n typeof request.descriptorDigest !== 'string' ||\n typeof request.recipeDigest !== 'string' ||\n request.args === undefined\n ) {\n throw new Error('request is missing descriptorDigest, recipeDigest, or args');\n }\n return {\n descriptorDigest: request.descriptorDigest,\n recipeDigest: request.recipeDigest,\n args: request.args as ServiceWireRequest['args'],\n };\n}\n\nfunction isAuthorized(request: IncomingMessage, bearerToken: string): boolean {\n return request.headers.authorization === `Bearer ${bearerToken}`;\n}\n\nexport async function createAuthenticatedLoopbackService(\n options: AuthenticatedLoopbackServiceOptions,\n): Promise<AuthenticatedLoopbackService> {\n if (options.bearerToken.length < 8) throw new TypeError('service bearer token is too short');\n const host = options.host ?? '127.0.0.1';\n const server = createServer(async (request, response) => {\n if (request.method !== 'POST' || request.url !== '/run') {\n reply(response, 404, { error: 'service route not found' });\n return;\n }\n if (!isAuthorized(request, options.bearerToken)) {\n reply(response, 401, { error: 'service bearer token rejected' });\n return;\n }\n try {\n const wireRequest = parseRequest(await readJson(request));\n if (\n options.expectedDescriptorDigest !== undefined &&\n wireRequest.descriptorDigest !== options.expectedDescriptorDigest\n ) {\n reply(response, 409, { error: 'service descriptor digest mismatch' });\n return;\n }\n if (\n options.expectedRecipeDigest !== undefined &&\n wireRequest.recipeDigest !== options.expectedRecipeDigest\n ) {\n reply(response, 409, { error: 'service recipe digest mismatch' });\n return;\n }\n reply(response, 200, await options.handler(wireRequest));\n } catch (cause) {\n const message = cause instanceof Error ? cause.message : String(cause);\n reply(response, 400, { error: message });\n }\n });\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error) => {\n server.off('listening', onListening);\n reject(error);\n };\n const onListening = () => {\n server.off('error', onError);\n resolve();\n };\n server.once('error', onError);\n server.once('listening', onListening);\n server.listen(0, host);\n });\n const address = server.address();\n if (address === null || typeof address === 'string') {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n throw new Error('loopback service did not expose a TCP address');\n }\n const endpoint = `http://${host}:${address.port}/run`;\n const transport = createAuthenticatedLoopbackTransport({\n endpoint,\n bearerToken: options.bearerToken,\n });\n let closed = false;\n return {\n endpoint,\n transport,\n async close() {\n if (closed) return;\n closed = true;\n await new Promise<void>((resolve, reject) => {\n server.close((error) => (error === undefined ? resolve() : reject(error)));\n });\n transport.close();\n },\n };\n}\n"]}
|