@forgeax/engine-devkit 0.1.4 → 0.1.6
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 +19 -4
- 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__/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/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 +380 -567
- package/dist/cli.mjs.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- 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 +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +303 -570
- 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/sdk-bootstrap.d.ts +9 -0
- package/dist/sdk-bootstrap.d.ts.map +1 -1
- package/dist/sdk-cli.mjs +190 -24
- 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/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/native-preview.d.ts.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +29 -30
- package/dist/__tests__/tool-migration.test.d.ts +0 -2
- package/dist/__tests__/tool-migration.test.d.ts.map +0 -1
package/dist/cli.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/cli.ts","../src/tools/client.ts","../src/tools/cli-adapter.ts","../src/tools/commands.ts","../src/tools/run-command.ts"],"names":["entries","projectRoot","resolve","writeFile","readdir","readFile","relative","sep","moduleSpecifier","command","stat","dryRun","devDependencies","dirname","fileURLToPath","mkdir","filesUnder","cp","rm","basename","isAbsolute","execFileAsync","mkdtemp","promisify","execFile","rename","GameProjectSchema","args","err","ok","RhiErrorClass","init_dist","tmpdir","viteBuild","createHash","vitePreview","createServer","createToolRuntime","commandFailure","defineTool","buildCommand","pluginInstallCommand","runProjectTool","readFileSync"],"mappings":"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","file":"cli.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","import {\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 renderRhiDebugHelp,\n runRhiDebugCommand,\n sdkInstallCommand,\n shaderCheckCommand,\n skillInstallCommand,\n skillVerifyCommand,\n testCommand,\n} from './commands.js';\nimport type { ArtifactRef } from './rhi-debug/operations.js';\nimport { describeCommand, execCommand, listCommand, runCommand } from './tools/commands.js';\nimport type { CommandEnvelope, CommandResult, ForgeaXCommand } from './types.js';\n\nconst args = process.argv.slice(2);\nconst primary = args.shift();\nconst nested =\n primary === 'asset' ||\n primary === 'shader' ||\n primary === 'plugin' ||\n primary === 'skill' ||\n primary === 'sdk'\n ? args.shift()\n : undefined;\nconst command = (\n primary === 'asset' ||\n primary === 'shader' ||\n primary === 'plugin' ||\n primary === 'skill' ||\n primary === 'sdk'\n ? `${primary}.${nested ?? ''}`\n : primary\n) as ForgeaXCommand | undefined;\nconst json = args.includes('--json');\nconst dryRun = args.includes('--dry-run');\nconst noInstall = args.includes('--no-install');\n\nfunction option(name: string): string | undefined {\n const index = args.indexOf(name);\n return index < 0 ? undefined : args[index + 1];\n}\n\nconst optionValueIndexes = new Set(\n [\n '--artifact',\n '--base',\n '--digest',\n '--id',\n '--realm',\n '--dependency',\n '--out-dir',\n '--input',\n '--output',\n '--root',\n '--template',\n '--version',\n '--work-index',\n ].flatMap((name) => {\n const index = args.indexOf(name);\n return index < 0 ? [] : [index + 1];\n }),\n);\nconst positionals = args.filter(\n (value, index) => !value.startsWith('--') && !optionValueIndexes.has(index),\n);\nconst scopedRoot = option('--root') ?? process.cwd();\nconst projectRoot = positionals[0] ?? scopedRoot;\nconst commands: readonly ForgeaXCommand[] = [\n 'new',\n 'init',\n 'doctor',\n 'test',\n 'dev',\n 'build',\n 'package',\n 'serve',\n 'preview',\n 'run',\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 'exec',\n];\n\nasync function run(value: ForgeaXCommand): Promise<CommandResult<unknown>> {\n switch (value) {\n case 'new': {\n const template = option('--template');\n return newCommand({\n root: projectRoot,\n dryRun,\n ...(template === undefined ? {} : { template }),\n });\n }\n case 'init':\n return initCommand({ root: projectRoot, dryRun, install: !noInstall });\n case 'doctor':\n return doctorCommand({ root: projectRoot, json });\n case 'test':\n return testCommand({ root: projectRoot, json });\n case 'dev':\n return devCommand({ root: projectRoot, json });\n case 'build': {\n const base = option('--base');\n const outDir = option('--out-dir');\n return buildCommand({\n root: projectRoot,\n json,\n ...(base === undefined ? {} : { base }),\n ...(outDir === undefined ? {} : { outDir }),\n });\n }\n case 'package': {\n const output = option('--output');\n return packageCommand({\n root: projectRoot,\n json,\n ...(output === undefined ? {} : { output }),\n });\n }\n case 'preview':\n return previewCommand({ root: projectRoot, json });\n case 'serve':\n return devCommand({ root: projectRoot, json });\n case 'plugin.install': {\n const module = positionals[0];\n const id = option('--id');\n const realm = option('--realm');\n const dependency = option('--dependency');\n if (\n module === undefined ||\n id === undefined ||\n (realm !== undefined && realm !== 'host' && realm !== 'engine' && realm !== 'build')\n ) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax plugin install <module> --id <id> [--realm host|engine|build]',\n hint: 'Pass a stable Entry id and an optional physical realm.',\n detail: {},\n },\n };\n }\n return pluginInstallCommand({\n root: option('--root') ?? process.cwd(),\n module,\n id,\n dryRun,\n ...(realm === undefined ? {} : { realm }),\n ...(dependency === undefined ? {} : { dependency }),\n });\n }\n case 'plugin.uninstall': {\n const id = positionals[0];\n const dependency = option('--dependency');\n if (id === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax plugin uninstall <entry-id>',\n hint: 'Pass the stable Entry id stored in forge.json#plugins.',\n detail: {},\n },\n };\n }\n return pluginUninstallCommand({\n root: option('--root') ?? process.cwd(),\n id,\n dryRun,\n ...(dependency === undefined ? {} : { dependency }),\n });\n }\n case 'skill.install':\n return skillInstallCommand({ root: scopedRoot, json });\n case 'skill.verify':\n return skillVerifyCommand({ root: scopedRoot, json });\n case 'sdk.install': {\n const root = positionals[0];\n if (root === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax sdk install <directory> [--version VERSION]',\n hint: 'Pass an empty destination outside existing SDK and game directories.',\n detail: {},\n },\n };\n }\n const version = option('--version');\n return sdkInstallCommand({ root, ...(version === undefined ? {} : { version }) });\n }\n case 'asset.add': {\n const path = positionals[0];\n if (path === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax asset add <path>',\n hint: 'Pass one source file or directory.',\n detail: {},\n },\n };\n }\n return assetAddCommand({ root: process.cwd(), path, dryRun, json });\n }\n case 'asset.verify':\n return assetVerifyCommand({ root: process.cwd(), json });\n case 'asset.inspect': {\n const subject = positionals[0];\n if (subject === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax asset inspect <guid-or-name>',\n hint: 'Pass a stable asset GUID or an unambiguous name.',\n detail: {},\n },\n };\n }\n return assetInspectCommand({ root: process.cwd(), subject, json });\n }\n case 'asset.list':\n return assetListCommand({ root: process.cwd(), json });\n case 'shader.check':\n return shaderCheckCommand({\n root: process.cwd(),\n json,\n ...(positionals[0] === undefined ? {} : { path: positionals[0] }),\n });\n case 'list':\n return listCommand(scopedRoot);\n case 'describe':\n return describeCommand({\n root: scopedRoot,\n ...(positionals[0] === undefined ? {} : { id: positionals[0] }),\n });\n case 'exec':\n return execCommand({\n root: scopedRoot,\n ...(positionals[0] === undefined ? {} : { program: positionals[0] }),\n });\n case 'run': {\n const operation = positionals[0];\n if (operation === undefined || args.includes('--help')) {\n return { ok: true, value: { help: renderRhiDebugHelp() } };\n }\n if (!operation.startsWith('rhi.')) {\n const input = option('--input');\n return runCommand({\n root: scopedRoot,\n id: operation,\n ...(input === undefined ? {} : { input }),\n });\n }\n if (\n operation !== 'rhi.capture' &&\n operation !== 'rhi.summary' &&\n operation !== 'rhi.inspect'\n ) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'rhi.capture, rhi.summary, or rhi.inspect',\n hint: 'Run forgeax run --help to discover the three RHI debug operations.',\n detail: { operation },\n },\n };\n }\n const context = createCliRhiDebugOperationContext();\n if (operation === 'rhi.capture') return runRhiDebugCommand(operation, {}, context);\n const path = option('--artifact');\n const digest = option('--digest');\n if (path === undefined || digest === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: '--artifact PATH and --digest DIGEST',\n hint: 'Pass the same ArtifactRef path and digest returned by capture.',\n detail: {},\n },\n };\n }\n const artifact: ArtifactRef = { kind: 'rhi-tape', digest, source: 'forgeax', path };\n if (operation === 'rhi.summary') {\n return runRhiDebugCommand(operation, { artifact }, context);\n }\n const workIndex = Number(option('--work-index'));\n if (!Number.isInteger(workIndex) || workIndex < 0) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: '--work-index to be a non-negative integer',\n hint: 'Choose workIndex from rhi.summary output.',\n detail: { workIndex: option('--work-index') ?? null },\n },\n };\n }\n return runRhiDebugCommand(operation, { artifact, workIndex }, context);\n }\n }\n}\n\nif (command === undefined || !commands.includes(command)) {\n process.stderr.write(\n 'Usage: forgeax new [directory] [--template empty|game-default]\\n' +\n ' forgeax <init|doctor|test|dev|build|package|serve|preview> [directory]\\n' +\n ' forgeax package [directory] [--output release/game-web.zip]\\n' +\n ' forgeax run <rhi.capture|rhi.summary|rhi.inspect> [options]\\n' +\n ' forgeax run <operation-id> --input <request.json>\\n' +\n ' forgeax asset <add|verify|inspect|list> [subject]\\n' +\n ' forgeax shader check [path]\\n' +\n ' forgeax plugin <install|uninstall> <module-or-id> [options]\\n' +\n ' forgeax skill <install|verify> [--root directory]\\n' +\n ' forgeax sdk install <directory> [--version VERSION]\\n',\n );\n process.exitCode = 2;\n} else {\n const stdoutWrite = process.stdout.write;\n if (json) {\n process.stdout.write = ((...writeArgs: Parameters<typeof process.stdout.write>) =>\n Reflect.apply(\n process.stderr.write,\n process.stderr,\n writeArgs,\n ) as boolean) as typeof process.stdout.write;\n }\n let result: CommandResult<unknown>;\n try {\n result = await run(command);\n } finally {\n process.stdout.write = stdoutWrite;\n }\n const envelope: CommandEnvelope = result.ok\n ? { schemaVersion: '1.0.0', command, ok: true, value: result.value }\n : { schemaVersion: '1.0.0', command, ok: false, error: result.error };\n if (json) stdoutWrite.call(process.stdout, `${JSON.stringify(envelope)}\\n`);\n else if (result.ok) process.stdout.write(`[forgeax] ${command} ready\\n`);\n else process.stderr.write(`[forgeax] ${result.error.code}: ${result.error.hint}\\n`);\n if (!result.ok) process.exitCode = result.error.code === 'cli-parse-error' ? 2 : 1;\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 { 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 { readFileSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { isSerializableValue } from '@forgeax/engine-tool-runtime';\nimport type { CommandResult, OperationCommandOptions } from '../types.js';\nimport { createToolClient } from './client.js';\nimport { retiredPreviewTool } from './preview-migration.js';\nimport { runOperationCommand } from './run-command.js';\n\nasync function commandClient(root: string) {\n try {\n return { ok: true as const, value: await createToolClient({ projectRoot: root }) };\n } catch (cause) {\n return {\n ok: false as const,\n error: {\n code: 'tool-catalog-authority-unreadable',\n expected: 'project plugin modules and tool descriptors to load from the project authority',\n hint: 'Repair forge.json, plugin module exports, or duplicate tool ids before retrying.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n\nexport async function listCommand(root = process.cwd()): Promise<CommandResult<unknown>> {\n const client = await commandClient(root);\n return client.ok ? { ok: true, value: client.value.list() } : client;\n}\n\nexport async function describeCommand(\n options: OperationCommandOptions,\n): Promise<CommandResult<unknown>> {\n if (options.id === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax describe <operation-id>',\n hint: 'Pass the stable id returned by forgeax list.',\n detail: {},\n },\n };\n }\n const client = await commandClient(options.root ?? process.cwd());\n if (!client.ok) return client;\n const entry = client.value.describe(options.id);\n return entry === undefined\n ? {\n ok: false,\n error: {\n code: 'tool-not-found',\n expected: 'the requested operation id to exist in the static catalog',\n hint: 'Run forgeax list and choose one of its ids.',\n detail: { id: options.id },\n },\n }\n : { ok: true, value: entry };\n}\n\nexport async function runCommand(\n options: OperationCommandOptions,\n): Promise<CommandResult<unknown>> {\n if (options.id === 'preview.run') return { ok: true, value: retiredPreviewTool() };\n if (options.id === undefined || (options.input === undefined && options.args === undefined)) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax run <operation-id> --input <request.json>',\n hint: 'Describe the operation first, then pass a JSON file matching its args schema.',\n detail: {},\n },\n };\n }\n let encoded = options.args;\n try {\n const input = options.input as string;\n encoded =\n encoded ??\n (input === '-'\n ? readFileSync(0, 'utf8')\n : await readFile(resolve(options.root ?? process.cwd(), input), 'utf8'));\n JSON.parse(encoded);\n } catch {\n return {\n ok: true,\n value: {\n outcome: 'failed',\n failure: {\n code: 'tool-invalid-args',\n expected: 'operation 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 }\n return { ok: true, value: await runOperationCommand({ ...options, args: encoded }) };\n}\n\nexport async function execCommand(\n options: OperationCommandOptions,\n): Promise<CommandResult<unknown>> {\n if (options.program === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax exec <program.mjs>',\n hint: 'Pass a trusted local JavaScript module exporting a default ToolClient program.',\n detail: {},\n },\n };\n }\n const root = options.root ?? process.cwd();\n try {\n const module = (await import(pathToFileURL(resolve(root, options.program)).href)) as {\n readonly default?: unknown;\n readonly run?: unknown;\n };\n const program = module.default ?? module.run;\n if (typeof program !== 'function') {\n throw new TypeError('operation program must export a default function or named run function');\n }\n const client = await createToolClient({ projectRoot: root });\n const value = await program(client);\n if (!isSerializableValue(value)) {\n throw new TypeError('tool program returned a non-serializable live value');\n }\n return { ok: true, value };\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'tool-program-failed',\n expected: 'the trusted local operation program to complete with serializable results',\n hint: 'Repair the program module or inspect its selected operation terminal.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n","import type { OperationCommandOptions } from '../types.js';\nimport { decorateResourcePreviewTerminal } from './cli-adapter.js';\nimport { createToolClient } from './client.js';\n\nexport async function runOperationCommand(options: OperationCommandOptions) {\n const client = await createToolClient({ projectRoot: options.root ?? process.cwd() });\n return client\n .run(options.id as string, JSON.parse(options.args as string) as unknown)\n .then(decorateResourcePreviewTerminal);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/archive.ts","../src/dist.ts","../src/host.ts","../src/project.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/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/cli-output.ts","../src/cli.ts","../src/tools/client.ts","../src/tools/cli-adapter.ts","../src/tools/commands.ts","../src/tools/run-command.ts"],"names":["entries","projectRoot","resolve","writeFile","readdir","readFile","relative","sep","moduleSpecifier","command","stat","dryRun","devDependencies","dirname","fileURLToPath","mkdir","filesUnder","cp","rm","basename","isAbsolute","execFileAsync","mkdtemp","promisify","execFile","rename","GameProjectSchema","tmpdir","viteBuild","createNetServer","createHash","createServer","createViteConfig","vitePreview","args","createToolRuntime","commandFailure","defineTool","buildCommand","pluginInstallCommand","runProjectTool"],"mappings":"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","file":"cli.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 } 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, 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\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 {\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 assets.configureRuntimeBinding(runtimeScopeBinding);\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 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 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();\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 { 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 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 | '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 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-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 \"@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 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 '--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 '--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 } 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:\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() {\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 {\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 { 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 { 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\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 function agentOnboardingLines(value: unknown): string[] {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return [];\n const onboarding = (value as { readonly onboarding?: unknown }).onboarding;\n if (onboarding === null || typeof onboarding !== 'object' || Array.isArray(onboarding)) return [];\n const candidate = onboarding as {\n readonly read?: unknown;\n readonly next?: { readonly cwd?: unknown; readonly argv?: unknown };\n };\n const lines = Array.isArray(candidate.read)\n ? candidate.read\n .filter((path): path is string => typeof path === 'string')\n .map((path) => `[forgeax] read: ${path}`)\n : [];\n if (\n typeof candidate.next?.cwd === 'string' &&\n Array.isArray(candidate.next.argv) &&\n candidate.next.argv.every((part) => typeof part === 'string')\n ) {\n lines.push(`[forgeax] next cwd: ${candidate.next.cwd}`);\n lines.push(`[forgeax] next: ${candidate.next.argv.join(' ')}`);\n }\n return lines;\n}\n\nexport function sdkUpdateLines(value: unknown): string[] {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return [];\n const update = (value as { readonly sdkUpdate?: unknown }).sdkUpdate;\n if (update === null || typeof update !== 'object' || Array.isArray(update)) return [];\n const candidate = update as {\n readonly status?: unknown;\n readonly currentVersion?: unknown;\n readonly latestVersion?: unknown;\n readonly migrationRisk?: unknown;\n };\n if (\n candidate.status !== 'available' ||\n typeof candidate.currentVersion !== 'string' ||\n typeof candidate.latestVersion !== 'string' ||\n typeof candidate.migrationRisk !== 'string'\n ) {\n return [];\n }\n return [\n `[forgeax] update available: @forgeax/engine-sdk ${candidate.currentVersion} -> ${candidate.latestVersion}`,\n `[forgeax] update note: ${candidate.migrationRisk}`,\n ];\n}\n\nexport function renderForgeaxUsage(): string {\n return (\n 'Usage: forgeax new [directory] [--template empty|game-default]\\n' +\n ' forgeax <init|doctor|test|dev|build|package|serve|preview> [directory]\\n' +\n ' forgeax package [directory] [--output release/game-web.zip]\\n' +\n ' forgeax run <rhi.capture|rhi.summary|rhi.inspect> [options]\\n' +\n ' forgeax run <operation-id> --input <request.json>\\n' +\n ' forgeax asset <add|verify|inspect|list> [subject]\\n' +\n ' forgeax shader check [path]\\n' +\n ' forgeax plugin <install|uninstall> <module-or-id> [options]\\n' +\n ' forgeax skill <install|verify> [--root directory]\\n' +\n ' forgeax sdk install <directory> [--version VERSION]\\n'\n );\n}\n","import { agentOnboardingLines, renderForgeaxUsage, sdkUpdateLines } from './cli-output.js';\nimport {\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 renderRhiDebugHelp,\n runRhiDebugCommand,\n sdkInstallCommand,\n shaderCheckCommand,\n skillInstallCommand,\n skillVerifyCommand,\n testCommand,\n} from './commands.js';\nimport type { ArtifactRef } from './rhi-debug/operations.js';\nimport { describeCommand, execCommand, listCommand, runCommand } from './tools/commands.js';\nimport {\n type CommandEnvelope,\n type CommandResult,\n type ForgeaXCommand,\n type ProjectCommandOptions,\n parseProjectPortOption,\n} from './types.js';\n\nconst rawArgs = process.argv.slice(2);\nconst args = [...rawArgs];\nconst primary = args.shift();\nconst nested =\n primary === 'asset' ||\n primary === 'shader' ||\n primary === 'plugin' ||\n primary === 'skill' ||\n primary === 'sdk'\n ? args.shift()\n : undefined;\nconst command = (\n primary === 'asset' ||\n primary === 'shader' ||\n primary === 'plugin' ||\n primary === 'skill' ||\n primary === 'sdk'\n ? `${primary}.${nested ?? ''}`\n : primary\n) as ForgeaXCommand | undefined;\nconst json = args.includes('--json');\nconst dryRun = args.includes('--dry-run');\nconst noInstall = args.includes('--no-install');\nconst help = rawArgs.includes('--help') || rawArgs.includes('-h');\n\nfunction option(name: string): string | undefined {\n const index = args.indexOf(name);\n return index < 0 ? undefined : args[index + 1];\n}\n\nconst optionValueIndexes = new Set(\n [\n '--artifact',\n '--base',\n '--digest',\n '--id',\n '--realm',\n '--dependency',\n '--out-dir',\n '--input',\n '--output',\n '--root',\n '--port',\n '--template',\n '--version',\n '--work-index',\n ].flatMap((name) => {\n const index = args.indexOf(name);\n return index < 0 ? [] : [index + 1];\n }),\n);\nconst positionals = args.filter(\n (value, index) => !value.startsWith('--') && !optionValueIndexes.has(index),\n);\nconst scopedRoot = option('--root') ?? process.cwd();\nconst projectRoot = positionals[0] ?? scopedRoot;\nconst commands: readonly ForgeaXCommand[] = [\n 'new',\n 'init',\n 'doctor',\n 'test',\n 'dev',\n 'build',\n 'package',\n 'serve',\n 'preview',\n 'run',\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 'exec',\n];\n\nfunction projectServerOptions(): CommandResult<ProjectCommandOptions> {\n const parsedPort = parseProjectPortOption(option('--port'), args.includes('--port'));\n if (!parsedPort.ok) return parsedPort;\n return {\n ok: true,\n value: {\n root: projectRoot,\n json,\n ...(parsedPort.value === undefined ? {} : { port: parsedPort.value }),\n },\n };\n}\n\nasync function run(value: ForgeaXCommand): Promise<CommandResult<unknown>> {\n switch (value) {\n case 'new': {\n const template = option('--template');\n return newCommand({\n root: projectRoot,\n dryRun,\n ...(template === undefined ? {} : { template }),\n });\n }\n case 'init':\n return initCommand({ root: projectRoot, dryRun, install: !noInstall });\n case 'doctor':\n return doctorCommand({ root: projectRoot, json });\n case 'test':\n return testCommand({ root: projectRoot, json });\n case 'dev': {\n const options = projectServerOptions();\n return options.ok ? devCommand(options.value) : options;\n }\n case 'build': {\n const base = option('--base');\n const outDir = option('--out-dir');\n return buildCommand({\n root: projectRoot,\n json,\n ...(base === undefined ? {} : { base }),\n ...(outDir === undefined ? {} : { outDir }),\n });\n }\n case 'package': {\n const output = option('--output');\n return packageCommand({\n root: projectRoot,\n json,\n ...(output === undefined ? {} : { output }),\n });\n }\n case 'preview': {\n const options = projectServerOptions();\n return options.ok ? previewCommand(options.value) : options;\n }\n case 'serve': {\n const options = projectServerOptions();\n return options.ok ? devCommand(options.value) : options;\n }\n case 'plugin.install': {\n const module = positionals[0];\n const id = option('--id');\n const realm = option('--realm');\n const dependency = option('--dependency');\n if (\n module === undefined ||\n id === undefined ||\n (realm !== undefined && realm !== 'host' && realm !== 'engine' && realm !== 'build')\n ) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax plugin install <module> --id <id> [--realm host|engine|build]',\n hint: 'Pass a stable Entry id and an optional physical realm.',\n detail: {},\n },\n };\n }\n return pluginInstallCommand({\n root: option('--root') ?? process.cwd(),\n module,\n id,\n dryRun,\n ...(realm === undefined ? {} : { realm }),\n ...(dependency === undefined ? {} : { dependency }),\n });\n }\n case 'plugin.uninstall': {\n const id = positionals[0];\n const dependency = option('--dependency');\n if (id === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax plugin uninstall <entry-id>',\n hint: 'Pass the stable Entry id stored in forge.json#plugins.',\n detail: {},\n },\n };\n }\n return pluginUninstallCommand({\n root: option('--root') ?? process.cwd(),\n id,\n dryRun,\n ...(dependency === undefined ? {} : { dependency }),\n });\n }\n case 'skill.install':\n return skillInstallCommand({ root: scopedRoot, json });\n case 'skill.verify':\n return skillVerifyCommand({ root: scopedRoot, json });\n case 'sdk.install': {\n const root = positionals[0];\n if (root === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax sdk install <directory> [--version VERSION]',\n hint: 'Pass an empty destination outside existing SDK and game directories.',\n detail: {},\n },\n };\n }\n const version = option('--version');\n return sdkInstallCommand({ root, ...(version === undefined ? {} : { version }) });\n }\n case 'asset.add': {\n const path = positionals[0];\n if (path === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax asset add <path>',\n hint: 'Pass one source file or directory.',\n detail: {},\n },\n };\n }\n return assetAddCommand({ root: process.cwd(), path, dryRun, json });\n }\n case 'asset.verify':\n return assetVerifyCommand({ root: process.cwd(), json });\n case 'asset.inspect': {\n const subject = positionals[0];\n if (subject === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax asset inspect <guid-or-name>',\n hint: 'Pass a stable asset GUID or an unambiguous name.',\n detail: {},\n },\n };\n }\n return assetInspectCommand({ root: process.cwd(), subject, json });\n }\n case 'asset.list':\n return assetListCommand({ root: process.cwd(), json });\n case 'shader.check':\n return shaderCheckCommand({\n root: process.cwd(),\n json,\n ...(positionals[0] === undefined ? {} : { path: positionals[0] }),\n });\n case 'list':\n return listCommand(scopedRoot);\n case 'describe':\n return describeCommand({\n root: scopedRoot,\n ...(positionals[0] === undefined ? {} : { id: positionals[0] }),\n });\n case 'exec':\n return execCommand({\n root: scopedRoot,\n ...(positionals[0] === undefined ? {} : { program: positionals[0] }),\n });\n case 'run': {\n const operation = positionals[0];\n if (operation === undefined || args.includes('--help')) {\n return { ok: true, value: { help: renderRhiDebugHelp() } };\n }\n if (!operation.startsWith('rhi.')) {\n const input = option('--input');\n return runCommand({\n root: scopedRoot,\n id: operation,\n ...(input === undefined ? {} : { input }),\n });\n }\n if (\n operation !== 'rhi.capture' &&\n operation !== 'rhi.summary' &&\n operation !== 'rhi.inspect'\n ) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'rhi.capture, rhi.summary, or rhi.inspect',\n hint: 'Run forgeax run --help to discover the three RHI debug operations.',\n detail: { operation },\n },\n };\n }\n const context = createCliRhiDebugOperationContext();\n if (operation === 'rhi.capture') return runRhiDebugCommand(operation, {}, context);\n const path = option('--artifact');\n const digest = option('--digest');\n if (path === undefined || digest === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: '--artifact PATH and --digest DIGEST',\n hint: 'Pass the same ArtifactRef path and digest returned by capture.',\n detail: {},\n },\n };\n }\n const artifact: ArtifactRef = { kind: 'rhi-tape', digest, source: 'forgeax', path };\n if (operation === 'rhi.summary') {\n return runRhiDebugCommand(operation, { artifact }, context);\n }\n const workIndex = Number(option('--work-index'));\n if (!Number.isInteger(workIndex) || workIndex < 0) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: '--work-index to be a non-negative integer',\n hint: 'Choose workIndex from rhi.summary output.',\n detail: { workIndex: option('--work-index') ?? null },\n },\n };\n }\n return runRhiDebugCommand(operation, { artifact, workIndex }, context);\n }\n }\n}\n\nif (help && primary !== 'run') {\n process.stdout.write(renderForgeaxUsage());\n} else if (command === undefined || !commands.includes(command)) {\n process.stderr.write(renderForgeaxUsage());\n process.exitCode = 2;\n} else {\n const stdoutWrite = process.stdout.write;\n if (json) {\n process.stdout.write = ((...writeArgs: Parameters<typeof process.stdout.write>) =>\n Reflect.apply(\n process.stderr.write,\n process.stderr,\n writeArgs,\n ) as boolean) as typeof process.stdout.write;\n }\n let result: CommandResult<unknown>;\n try {\n result = await run(command);\n } finally {\n process.stdout.write = stdoutWrite;\n }\n const envelope: CommandEnvelope = result.ok\n ? { schemaVersion: '1.0.0', command, ok: true, value: result.value }\n : { schemaVersion: '1.0.0', command, ok: false, error: result.error };\n if (json) stdoutWrite.call(process.stdout, `${JSON.stringify(envelope)}\\n`);\n else if (result.ok) {\n process.stdout.write(`[forgeax] ${command} ready\\n`);\n for (const line of agentOnboardingLines(result.value)) process.stdout.write(`${line}\\n`);\n for (const line of sdkUpdateLines(result.value)) process.stdout.write(`${line}\\n`);\n if (command === 'sdk.install') {\n const value = result.value as {\n readonly next?: { readonly cwd?: unknown; readonly argv?: readonly unknown[] };\n };\n if (\n typeof value.next?.cwd === 'string' &&\n Array.isArray(value.next.argv) &&\n value.next.argv.every((part) => typeof part === 'string')\n ) {\n process.stdout.write(`[forgeax] next cwd: ${value.next.cwd}\\n`);\n process.stdout.write(`[forgeax] next: ${value.next.argv.join(' ')}\\n`);\n }\n }\n } else process.stderr.write(`[forgeax] ${result.error.code}: ${result.error.hint}\\n`);\n if (!result.ok) process.exitCode = result.error.code === 'cli-parse-error' ? 2 : 1;\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 { 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 { readFileSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { isSerializableValue } from '@forgeax/engine-tool-runtime';\nimport type { CommandResult, OperationCommandOptions } from '../types.js';\nimport { createToolClient } from './client.js';\nimport { retiredPreviewTool } from './preview-migration.js';\nimport { runOperationCommand } from './run-command.js';\n\nasync function commandClient(root: string) {\n try {\n return { ok: true as const, value: await createToolClient({ projectRoot: root }) };\n } catch (cause) {\n return {\n ok: false as const,\n error: {\n code: 'tool-catalog-authority-unreadable',\n expected: 'project plugin modules and tool descriptors to load from the project authority',\n hint: 'Repair forge.json, plugin module exports, or duplicate tool ids before retrying.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n\nexport async function listCommand(root = process.cwd()): Promise<CommandResult<unknown>> {\n const client = await commandClient(root);\n return client.ok ? { ok: true, value: client.value.list() } : client;\n}\n\nexport async function describeCommand(\n options: OperationCommandOptions,\n): Promise<CommandResult<unknown>> {\n if (options.id === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax describe <operation-id>',\n hint: 'Pass the stable id returned by forgeax list.',\n detail: {},\n },\n };\n }\n const client = await commandClient(options.root ?? process.cwd());\n if (!client.ok) return client;\n const entry = client.value.describe(options.id);\n return entry === undefined\n ? {\n ok: false,\n error: {\n code: 'tool-not-found',\n expected: 'the requested operation id to exist in the static catalog',\n hint: 'Run forgeax list and choose one of its ids.',\n detail: { id: options.id },\n },\n }\n : { ok: true, value: entry };\n}\n\nexport async function runCommand(\n options: OperationCommandOptions,\n): Promise<CommandResult<unknown>> {\n if (options.id === 'preview.run') return { ok: true, value: retiredPreviewTool() };\n if (options.id === undefined || (options.input === undefined && options.args === undefined)) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax run <operation-id> --input <request.json>',\n hint: 'Describe the operation first, then pass a JSON file matching its args schema.',\n detail: {},\n },\n };\n }\n let encoded = options.args;\n try {\n const input = options.input as string;\n encoded =\n encoded ??\n (input === '-'\n ? readFileSync(0, 'utf8')\n : await readFile(resolve(options.root ?? process.cwd(), input), 'utf8'));\n JSON.parse(encoded);\n } catch {\n return {\n ok: true,\n value: {\n outcome: 'failed',\n failure: {\n code: 'tool-invalid-args',\n expected: 'operation 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 }\n return { ok: true, value: await runOperationCommand({ ...options, args: encoded }) };\n}\n\nexport async function execCommand(\n options: OperationCommandOptions,\n): Promise<CommandResult<unknown>> {\n if (options.program === undefined) {\n return {\n ok: false,\n error: {\n code: 'cli-parse-error',\n expected: 'forgeax exec <program.mjs>',\n hint: 'Pass a trusted local JavaScript module exporting a default ToolClient program.',\n detail: {},\n },\n };\n }\n const root = options.root ?? process.cwd();\n try {\n const module = (await import(pathToFileURL(resolve(root, options.program)).href)) as {\n readonly default?: unknown;\n readonly run?: unknown;\n };\n const program = module.default ?? module.run;\n if (typeof program !== 'function') {\n throw new TypeError('operation program must export a default function or named run function');\n }\n const client = await createToolClient({ projectRoot: root });\n const value = await program(client);\n if (!isSerializableValue(value)) {\n throw new TypeError('tool program returned a non-serializable live value');\n }\n return { ok: true, value };\n } catch (cause) {\n return {\n ok: false,\n error: {\n code: 'tool-program-failed',\n expected: 'the trusted local operation program to complete with serializable results',\n hint: 'Repair the program module or inspect its selected operation terminal.',\n detail: { reason: cause instanceof Error ? cause.message : String(cause) },\n },\n };\n }\n}\n","import type { OperationCommandOptions } from '../types.js';\nimport { decorateResourcePreviewTerminal } from './cli-adapter.js';\nimport { createToolClient } from './client.js';\n\nexport async function runOperationCommand(options: OperationCommandOptions) {\n const client = await createToolClient({ projectRoot: options.root ?? process.cwd() });\n return client\n .run(options.id as string, JSON.parse(options.args as string) as unknown)\n .then(decorateResourcePreviewTerminal);\n}\n"]}
|