@forgeax/engine-remote 0.1.21 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/introspect-plugins.test.d.ts +2 -0
- package/dist/__tests__/introspect-plugins.test.d.ts.map +1 -0
- package/dist/execute.d.ts +2 -0
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.mjs +6 -1
- package/dist/execute.mjs.map +1 -1
- package/dist/introspect.d.ts +2 -0
- package/dist/introspect.d.ts.map +1 -1
- package/dist/introspect.mjs +4 -0
- package/dist/introspect.mjs.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.mjs +15 -2
- package/dist/server.mjs.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/introspect-plugins.test.ts +37 -0
- package/src/execute.ts +6 -2
- package/src/introspect.ts +6 -0
- package/src/server.ts +7 -0
- package/dist/.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect-plugins.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/introspect-plugins.test.ts"],"names":[],"mappings":""}
|
package/dist/execute.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export type ExecuteContext = {
|
|
|
7
7
|
readonly simulation?: unknown;
|
|
8
8
|
readonly profiler?: unknown;
|
|
9
9
|
readonly execution?: unknown;
|
|
10
|
+
/** Read-only projection of the live plugin Entry/Fiber tree. */
|
|
11
|
+
readonly plugins?: unknown;
|
|
10
12
|
readonly importModule?: (specifier: string) => Promise<unknown>;
|
|
11
13
|
};
|
|
12
14
|
export type ExecuteResult = {
|
package/dist/execute.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAMvC,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAMvC,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;AA2C7F;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAgD/F"}
|
package/dist/execute.mjs
CHANGED
|
@@ -28,7 +28,10 @@ var RemoteError = class extends Error {
|
|
|
28
28
|
// src/execute.ts
|
|
29
29
|
var AsyncFunction = Object.getPrototypeOf(async () => {
|
|
30
30
|
}).constructor;
|
|
31
|
-
var _import = async (specifier) => import(
|
|
31
|
+
var _import = async (specifier) => import(
|
|
32
|
+
/* @vite-ignore */
|
|
33
|
+
specifier
|
|
34
|
+
);
|
|
32
35
|
function compile(script) {
|
|
33
36
|
const params = [
|
|
34
37
|
"world",
|
|
@@ -38,6 +41,7 @@ function compile(script) {
|
|
|
38
41
|
"simulation",
|
|
39
42
|
"profiler",
|
|
40
43
|
"execution",
|
|
44
|
+
"plugins",
|
|
41
45
|
"_import"
|
|
42
46
|
];
|
|
43
47
|
try {
|
|
@@ -60,6 +64,7 @@ async function executeScript(script, ctx) {
|
|
|
60
64
|
ctx.simulation,
|
|
61
65
|
ctx.profiler,
|
|
62
66
|
ctx.execution,
|
|
67
|
+
ctx.plugins,
|
|
63
68
|
ctx.importModule ?? _import
|
|
64
69
|
);
|
|
65
70
|
return { ok: true, value };
|
package/dist/execute.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/execute.ts"],"names":[],"mappings":"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","file":"execute.mjs","sourcesContent":["// @forgeax/engine-remote/src/errors - RemoteError runtime class + re-export of\n// the closed `RemoteErrorCode` union; 5 members (feat-20260629-inspector-two-layer-model D-5).\n//\n// SSOT split: the **type alias** `RemoteErrorCode`\n// + **structural interface** `RemoteError` live in `@forgeax/engine-types`\n// (parallel to the existing `ShaderErrorCode` placement). This file owns\n// the **runtime class** (`extends Error` + `toJSON()`) only; the class\n// `implements` the type-side interface so the two sides cannot drift\n// (architecture-principles #1 SSOT).\n//\n// Shape (mirrors @forgeax/engine-rhi/src/errors.ts RhiError 4-field surface for\n// charter proposition 5 consistent abstraction):\n// - `RemoteErrorCode` = closed union 5 members (re-exported from types).\n// tsc strict-mode guards exhaustive switch completeness (charter\n// proposition 4); AI users consume via `switch (err.code) { case '...': ... }`\n// with NO default branch.\n// - `RemoteError` class extends Error with three readonly fields .code /\n// .expected / .hint (AGENTS.md \"Errors are structured\"). The constructor\n// auto-composes a human-readable .message (`[RemoteError <code>]\n// expected: <expected>; hint: <hint>`). The class implements the\n// `RemoteError` interface from `@forgeax/engine-types` so callers may\n// alternately type against the structural shape.\n// - `toJSON()` opts into JSON.stringify serialisation so the JSON-RPC 2.0\n// `error.data` payload carries .code / .expected / .hint / .message\n// verbatim through the WebSocket transport.\n\nimport type {\n RemoteErrorCode,\n RemoteErrorDetail,\n RemoteError as RemoteErrorShape,\n} from '@forgeax/engine-types';\n\n// Re-export the type-side alias verbatim so existing\n// `import { type RemoteErrorCode } from '@forgeax/engine-remote'` call sites\n// keep working (charter proposition 1 progressive disclosure — single\n// entry point for AI users).\nexport type { RemoteErrorCode };\n\n/**\n * Structured remote error. Four core fields plus bounded detail, mirroring `@forgeax/engine-rhi`\n * `RhiError` (charter proposition 5 consistent abstraction; AGENTS.md\n * \"Errors are structured\"). The class `implements RemoteErrorShape`\n * (the structural interface re-exported from `@forgeax/engine-types`) so the type\n * SSOT and the runtime class cannot drift.\n *\n * - `.code` closed union member (L1 key signal; switch-able).\n * - `.expected` expected-state description (L2 detail; ai-user-charter\n * proposition 4 requires expected-state copy).\n * - `.hint` actionable recovery guidance (L2 detail; charter\n * proposition 3 machine-readable hint > prose).\n * - `.message` auto-composed `[RemoteError <code>] expected: <expected>;\n * hint: <hint>` so human stack traces still surface the\n * triple. AI users prefer property access (charter\n * proposition 4: no string parsing).\n *\n * Per-code `.expected` + `.hint` templates (requirements §10.2 SSOT):\n *\n * | code | `.expected` | `.hint` |\n * |:--|:--|:--|\n * | `'script-syntax-error'` | `'script body is valid JavaScript'` | `'check syntax position in errMessage; fix and resubmit'` |\n * | `'script-runtime-error'` | `'script executes without throwing'` | `'inspect error; verify symbol availability; eval has full access to world/renderer/assets'` |\n * | `'server-startup-failed'` | `'server starts successfully on requested port'` | `'check if port is already in use (default 5732); pass different port; or kill existing process holding the port'` |\n * | `'server-not-running'` | `'server is reachable at ws://localhost:<port>'` | `'start the demo first; verify app.remote is wired; pass --port to override default 5732'` |\n * | `'eval-result-not-serializable'` | `'eval result is JSON-serializable'` | `'return a JSON-safe value; BigInt and cyclic objects are unsupported over JSON-RPC'` |\n *\n * JSON-RPC 2.0 transport contract: `toJSON()` returns the structured plain\n * object carried verbatim via `error.data` on the WebSocket envelope. The\n * JSON-RPC server-error `.code` numeric segment -32001 ~ -32005 maps 1:1\n * to the 5 members\n * at the dispatch layer.\n *\n * @example AI-user exhaustive switch on the 5 remote-domain alternatives (no default fallback)\n * ```ts\n * import { RemoteError, type RemoteErrorCode } from '@forgeax/engine-remote';\n *\n * function recover(code: RemoteErrorCode): string {\n * switch (code) {\n * case 'script-syntax-error': return 'fix script body syntax and resubmit';\n * case 'script-runtime-error': return 'inspect stack trace; verify symbol availability';\n * case 'server-startup-failed': return 'pick a different port or free port 5732';\n * case 'server-not-running': return 'start demo dev or wire app.remote';\n * case 'eval-result-not-serializable': return 'return a JSON-safe eval result';\n * }\n * }\n * ```\n */\nexport class RemoteError extends Error implements RemoteErrorShape {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail?: RemoteErrorDetail;\n\n constructor(args: {\n code: RemoteErrorCode;\n expected: string;\n hint: string;\n detail?: RemoteErrorDetail;\n }) {\n super(`[RemoteError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n this.name = 'RemoteError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n if (args.detail !== undefined) {\n this.detail = args.detail;\n }\n }\n\n toJSON(): {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly message: string;\n readonly detail?: RemoteErrorDetail;\n } {\n const json = {\n code: this.code,\n expected: this.expected,\n hint: this.hint,\n message: this.message,\n };\n return this.detail === undefined ? json : { ...json, detail: this.detail };\n }\n}\n\n/**\n * SSOT mapping `RemoteErrorCode` -> JSON-RPC `error.code` numeric segment\n * (feat-20260629-inspector-two-layer-model D-5). The 5 remote P0\n * members occupy the closed segment `-32001..-32005`.\n *\n * `server.ts` consumes this map at the JSON-RPC envelope edge so the wire\n * always carries the lock-in numeric and a future drift in either direction\n * raises a TypeScript completeness error (the `Record<RemoteErrorCode,\n * number>` type guard requires every closed-union member to have a\n * numeric).\n */\nexport const REMOTE_ERROR_CODE_TO_JSONRPC: Readonly<Record<RemoteErrorCode, number>> = {\n 'script-syntax-error': -32001,\n 'script-runtime-error': -32002,\n 'server-startup-failed': -32003,\n 'server-not-running': -32004,\n 'eval-result-not-serializable': -32005,\n};\n","// @forgeax/engine-remote/src/execute — async host-realm eval.\n//\n// D-1 route B (2026-06-29): vm.runInContext does not honor\n// importModuleDynamically for Script execution. Host realm compilation via\n// the AsyncFunction constructor resolves `await import` naturally, as long\n// as the import function from the calling module scope is injected.\n//\n// CONTRACT (the one an AI user holds): the script IS the body of an async\n// function with `world` / `renderer` / `assets` / `rhiCapture` / `simulation` / `_import`\n// in scope. So all of these Just Work, un-wrapped:\n// - a bare expression: `renderer.backend` -> auto-returned\n// - top-level await: `await _import('engine-module')`\n// - top-level return: `return world.inspect().entityCount`\n// - multi-statement + return: `const m = await _import(...); return m.x`\n// (the historical `(async () => { ... })()` IIFE form still works too — its\n// returned Promise is awaited.)\n//\n// Implementation (mirrors a REPL, two construction-time-checked attempts):\n// 1. expression mode: compile `return (<script>)` — auto-returns a lone\n// expression (incl. an await-expression), preserving last-expression value.\n// 2. on SyntaxError from (1)'s CONSTRUCTION: statement mode — compile\n// `<script>` as the async body directly, legalizing top-level return +\n// await + arbitrary statements.\n// Only a construction-time SyntaxError advances attempt 1 -> 2, so user code is\n// compiled once and executed at most once (no double side effects). We never use\n// `eval`: indirect eval ran the body as a global program, which is precisely\n// what banned top-level return/await and produced the doc-vs-reality gap.\n//\n// try/catch maps errors:\n// SyntaxError (both attempts fail to compile) -> 'script-syntax-error'\n// RemoteError (re-thrown) -> verbatim\n// anything else -> 'script-runtime-error'\n//\n// The sandbox is dismantled — eval is full-access, no wrapReadOnly.\n// Timeout is removed (route B has no interrupt mechanism; see R6).\n\nimport { RemoteError } from './errors';\n\n// AsyncFunction constructor (not a global binding). An async body is what\n// legalizes top-level `await` AND top-level `return` simultaneously.\nconst AsyncFunction = Object.getPrototypeOf(async () => {}).constructor as FunctionConstructor;\n\nexport type ExecuteContext = {\n readonly world: unknown;\n readonly renderer: unknown;\n readonly assets: unknown;\n readonly rhiCapture?: unknown;\n readonly simulation?: unknown;\n readonly profiler?: unknown;\n readonly execution?: unknown;\n readonly importModule?: (specifier: string) => Promise<unknown>;\n};\n\nexport type ExecuteResult = { ok: true; value: unknown } | { ok: false; error: RemoteError };\n\n// Capture import at module load time. This is the host realm's dynamic\n// import() — when injected into new Function, it resolves module\n// specifiers relative to the module that called executeScript. The remote\n// package stays package-neutral: a host may inject a capability projection\n// through ExecuteContext.importModule, but the transport does not own any\n// engine package vocabulary.\nconst _import = async (specifier: string): Promise<unknown> => import(specifier);\n\n// Compile the script as an async function body. Tries expression mode first\n// (auto-return a lone expression), falling back to statement mode on a\n// construction-time SyntaxError. Returns the compiled fn, or throws the\n// statement-mode SyntaxError if BOTH modes fail to parse.\nfunction compile(script: string): FunctionConstructor['prototype'] {\n const params = [\n 'world',\n 'renderer',\n 'assets',\n 'rhiCapture',\n 'simulation',\n 'profiler',\n 'execution',\n '_import',\n ] as const;\n try {\n // Expression mode: `return (<expr>)` auto-returns a lone expression\n // (including an await-expression), preserving last-expression-value.\n // Trailing semicolons/whitespace are trimmed so `renderer.backend;`\n // still returns its value (the old indirect-eval completion-value\n // behavior) instead of parsing as a statement that returns undefined.\n const expr = script.replace(/[\\s;]+$/, '');\n return new AsyncFunction(...params, `return (${expr}\\n)`);\n } catch (e) {\n if (!(e instanceof SyntaxError)) throw e;\n // Statement mode: the script IS the async body — legalizes top-level\n // return + await + arbitrary statements. If this also fails to parse,\n // its SyntaxError is the authoritative one to surface.\n return new AsyncFunction(...params, script);\n }\n}\n\n/**\n * Evaluate a JavaScript script against the host engine context.\n *\n * Route B (D-1): host-realm compilation via the AsyncFunction constructor with\n * injected _import. The script is the body of an async function; a lone\n * expression is auto-returned, and top-level `await` / `return` are legal.\n * - _import is available as a parameter for dynamic ESM imports.\n * - rhiCapture is available as a 4th eval-scope root for the RHI capture\n * capability (plan-strategy D-4).\n * - No sandbox — full access reads and writes.\n * - No timeout — host realm eval cannot be interrupted (see R6).\n */\nexport async function executeScript(script: string, ctx: ExecuteContext): Promise<ExecuteResult> {\n try {\n const fn = compile(script);\n // AsyncFunction always returns a Promise; await resolves the value and\n // surfaces any runtime throw into this catch.\n const value: unknown = await fn(\n ctx.world,\n ctx.renderer,\n ctx.assets,\n ctx.rhiCapture,\n ctx.simulation,\n ctx.profiler,\n ctx.execution,\n ctx.importModule ?? _import,\n );\n\n return { ok: true, value };\n } catch (e) {\n // 1. RemoteError re-thrown from within the script surfaces verbatim.\n if (e instanceof RemoteError) {\n return { ok: false, error: e };\n }\n\n // 2. SyntaxError: both compile() attempts failed to parse the script.\n if (e instanceof SyntaxError) {\n const msg = e.message;\n return {\n ok: false,\n error: new RemoteError({\n code: 'script-syntax-error',\n expected: 'script body is valid JavaScript',\n hint: `check syntax near: ${msg}; fix and resubmit`,\n }),\n };\n }\n\n // 3. Runtime error (throws during function execution).\n const rawMessage = e instanceof Error ? e.message : String(e);\n return {\n ok: false,\n error: new RemoteError({\n code: 'script-runtime-error',\n expected: 'script executes without throwing',\n hint: `inspect error; verify symbol availability; eval has full access to world/renderer/assets (errMessage: ${rawMessage})`,\n }),\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/execute.ts"],"names":[],"mappings":"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","file":"execute.mjs","sourcesContent":["// @forgeax/engine-remote/src/errors - RemoteError runtime class + re-export of\n// the closed `RemoteErrorCode` union; 5 members (feat-20260629-inspector-two-layer-model D-5).\n//\n// SSOT split: the **type alias** `RemoteErrorCode`\n// + **structural interface** `RemoteError` live in `@forgeax/engine-types`\n// (parallel to the existing `ShaderErrorCode` placement). This file owns\n// the **runtime class** (`extends Error` + `toJSON()`) only; the class\n// `implements` the type-side interface so the two sides cannot drift\n// (architecture-principles #1 SSOT).\n//\n// Shape (mirrors @forgeax/engine-rhi/src/errors.ts RhiError 4-field surface for\n// charter proposition 5 consistent abstraction):\n// - `RemoteErrorCode` = closed union 5 members (re-exported from types).\n// tsc strict-mode guards exhaustive switch completeness (charter\n// proposition 4); AI users consume via `switch (err.code) { case '...': ... }`\n// with NO default branch.\n// - `RemoteError` class extends Error with three readonly fields .code /\n// .expected / .hint (AGENTS.md \"Errors are structured\"). The constructor\n// auto-composes a human-readable .message (`[RemoteError <code>]\n// expected: <expected>; hint: <hint>`). The class implements the\n// `RemoteError` interface from `@forgeax/engine-types` so callers may\n// alternately type against the structural shape.\n// - `toJSON()` opts into JSON.stringify serialisation so the JSON-RPC 2.0\n// `error.data` payload carries .code / .expected / .hint / .message\n// verbatim through the WebSocket transport.\n\nimport type {\n RemoteErrorCode,\n RemoteErrorDetail,\n RemoteError as RemoteErrorShape,\n} from '@forgeax/engine-types';\n\n// Re-export the type-side alias verbatim so existing\n// `import { type RemoteErrorCode } from '@forgeax/engine-remote'` call sites\n// keep working (charter proposition 1 progressive disclosure — single\n// entry point for AI users).\nexport type { RemoteErrorCode };\n\n/**\n * Structured remote error. Four core fields plus bounded detail, mirroring `@forgeax/engine-rhi`\n * `RhiError` (charter proposition 5 consistent abstraction; AGENTS.md\n * \"Errors are structured\"). The class `implements RemoteErrorShape`\n * (the structural interface re-exported from `@forgeax/engine-types`) so the type\n * SSOT and the runtime class cannot drift.\n *\n * - `.code` closed union member (L1 key signal; switch-able).\n * - `.expected` expected-state description (L2 detail; ai-user-charter\n * proposition 4 requires expected-state copy).\n * - `.hint` actionable recovery guidance (L2 detail; charter\n * proposition 3 machine-readable hint > prose).\n * - `.message` auto-composed `[RemoteError <code>] expected: <expected>;\n * hint: <hint>` so human stack traces still surface the\n * triple. AI users prefer property access (charter\n * proposition 4: no string parsing).\n *\n * Per-code `.expected` + `.hint` templates (requirements §10.2 SSOT):\n *\n * | code | `.expected` | `.hint` |\n * |:--|:--|:--|\n * | `'script-syntax-error'` | `'script body is valid JavaScript'` | `'check syntax position in errMessage; fix and resubmit'` |\n * | `'script-runtime-error'` | `'script executes without throwing'` | `'inspect error; verify symbol availability; eval has full access to world/renderer/assets'` |\n * | `'server-startup-failed'` | `'server starts successfully on requested port'` | `'check if port is already in use (default 5732); pass different port; or kill existing process holding the port'` |\n * | `'server-not-running'` | `'server is reachable at ws://localhost:<port>'` | `'start the demo first; verify app.remote is wired; pass --port to override default 5732'` |\n * | `'eval-result-not-serializable'` | `'eval result is JSON-serializable'` | `'return a JSON-safe value; BigInt and cyclic objects are unsupported over JSON-RPC'` |\n *\n * JSON-RPC 2.0 transport contract: `toJSON()` returns the structured plain\n * object carried verbatim via `error.data` on the WebSocket envelope. The\n * JSON-RPC server-error `.code` numeric segment -32001 ~ -32005 maps 1:1\n * to the 5 members\n * at the dispatch layer.\n *\n * @example AI-user exhaustive switch on the 5 remote-domain alternatives (no default fallback)\n * ```ts\n * import { RemoteError, type RemoteErrorCode } from '@forgeax/engine-remote';\n *\n * function recover(code: RemoteErrorCode): string {\n * switch (code) {\n * case 'script-syntax-error': return 'fix script body syntax and resubmit';\n * case 'script-runtime-error': return 'inspect stack trace; verify symbol availability';\n * case 'server-startup-failed': return 'pick a different port or free port 5732';\n * case 'server-not-running': return 'start demo dev or wire app.remote';\n * case 'eval-result-not-serializable': return 'return a JSON-safe eval result';\n * }\n * }\n * ```\n */\nexport class RemoteError extends Error implements RemoteErrorShape {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail?: RemoteErrorDetail;\n\n constructor(args: {\n code: RemoteErrorCode;\n expected: string;\n hint: string;\n detail?: RemoteErrorDetail;\n }) {\n super(`[RemoteError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n this.name = 'RemoteError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n if (args.detail !== undefined) {\n this.detail = args.detail;\n }\n }\n\n toJSON(): {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly message: string;\n readonly detail?: RemoteErrorDetail;\n } {\n const json = {\n code: this.code,\n expected: this.expected,\n hint: this.hint,\n message: this.message,\n };\n return this.detail === undefined ? json : { ...json, detail: this.detail };\n }\n}\n\n/**\n * SSOT mapping `RemoteErrorCode` -> JSON-RPC `error.code` numeric segment\n * (feat-20260629-inspector-two-layer-model D-5). The 5 remote P0\n * members occupy the closed segment `-32001..-32005`.\n *\n * `server.ts` consumes this map at the JSON-RPC envelope edge so the wire\n * always carries the lock-in numeric and a future drift in either direction\n * raises a TypeScript completeness error (the `Record<RemoteErrorCode,\n * number>` type guard requires every closed-union member to have a\n * numeric).\n */\nexport const REMOTE_ERROR_CODE_TO_JSONRPC: Readonly<Record<RemoteErrorCode, number>> = {\n 'script-syntax-error': -32001,\n 'script-runtime-error': -32002,\n 'server-startup-failed': -32003,\n 'server-not-running': -32004,\n 'eval-result-not-serializable': -32005,\n};\n","// @forgeax/engine-remote/src/execute — async host-realm eval.\n//\n// D-1 route B (2026-06-29): vm.runInContext does not honor\n// importModuleDynamically for Script execution. Host realm compilation via\n// the AsyncFunction constructor resolves `await import` naturally, as long\n// as the import function from the calling module scope is injected.\n//\n// CONTRACT (the one an AI user holds): the script IS the body of an async\n// function with `world` / `renderer` / `assets` / `rhiCapture` / `simulation` / `plugins` / `_import`\n// in scope. So all of these Just Work, un-wrapped:\n// - a bare expression: `renderer.backend` -> auto-returned\n// - top-level await: `await _import('engine-module')`\n// - top-level return: `return world.inspect().entityCount`\n// - multi-statement + return: `const m = await _import(...); return m.x`\n// (the historical `(async () => { ... })()` IIFE form still works too — its\n// returned Promise is awaited.)\n//\n// Implementation (mirrors a REPL, two construction-time-checked attempts):\n// 1. expression mode: compile `return (<script>)` — auto-returns a lone\n// expression (incl. an await-expression), preserving last-expression value.\n// 2. on SyntaxError from (1)'s CONSTRUCTION: statement mode — compile\n// `<script>` as the async body directly, legalizing top-level return +\n// await + arbitrary statements.\n// Only a construction-time SyntaxError advances attempt 1 -> 2, so user code is\n// compiled once and executed at most once (no double side effects). We never use\n// `eval`: indirect eval ran the body as a global program, which is precisely\n// what banned top-level return/await and produced the doc-vs-reality gap.\n//\n// try/catch maps errors:\n// SyntaxError (both attempts fail to compile) -> 'script-syntax-error'\n// RemoteError (re-thrown) -> verbatim\n// anything else -> 'script-runtime-error'\n//\n// The sandbox is dismantled — eval is full-access, no wrapReadOnly.\n// Timeout is removed (route B has no interrupt mechanism; see R6).\n\nimport { RemoteError } from './errors';\n\n// AsyncFunction constructor (not a global binding). An async body is what\n// legalizes top-level `await` AND top-level `return` simultaneously.\nconst AsyncFunction = Object.getPrototypeOf(async () => {}).constructor as FunctionConstructor;\n\nexport type ExecuteContext = {\n readonly world: unknown;\n readonly renderer: unknown;\n readonly assets: unknown;\n readonly rhiCapture?: unknown;\n readonly simulation?: unknown;\n readonly profiler?: unknown;\n readonly execution?: unknown;\n /** Read-only projection of the live plugin Entry/Fiber tree. */\n readonly plugins?: unknown;\n readonly importModule?: (specifier: string) => Promise<unknown>;\n};\n\nexport type ExecuteResult = { ok: true; value: unknown } | { ok: false; error: RemoteError };\n\n// Capture import at module load time. This is the host realm's dynamic\n// import() — when injected into new Function, it resolves module\n// specifiers relative to the module that called executeScript. The remote\n// package stays package-neutral: a host may inject a capability projection\n// through ExecuteContext.importModule, but the transport does not own any\n// engine package vocabulary.\nconst _import = async (specifier: string): Promise<unknown> => import(/* @vite-ignore */ specifier);\n\n// Compile the script as an async function body. Tries expression mode first\n// (auto-return a lone expression), falling back to statement mode on a\n// construction-time SyntaxError. Returns the compiled fn, or throws the\n// statement-mode SyntaxError if BOTH modes fail to parse.\nfunction compile(script: string): FunctionConstructor['prototype'] {\n const params = [\n 'world',\n 'renderer',\n 'assets',\n 'rhiCapture',\n 'simulation',\n 'profiler',\n 'execution',\n 'plugins',\n '_import',\n ] as const;\n try {\n // Expression mode: `return (<expr>)` auto-returns a lone expression\n // (including an await-expression), preserving last-expression-value.\n // Trailing semicolons/whitespace are trimmed so `renderer.backend;`\n // still returns its value (the old indirect-eval completion-value\n // behavior) instead of parsing as a statement that returns undefined.\n const expr = script.replace(/[\\s;]+$/, '');\n return new AsyncFunction(...params, `return (${expr}\\n)`);\n } catch (e) {\n if (!(e instanceof SyntaxError)) throw e;\n // Statement mode: the script IS the async body — legalizes top-level\n // return + await + arbitrary statements. If this also fails to parse,\n // its SyntaxError is the authoritative one to surface.\n return new AsyncFunction(...params, script);\n }\n}\n\n/**\n * Evaluate a JavaScript script against the host engine context.\n *\n * Route B (D-1): host-realm compilation via the AsyncFunction constructor with\n * injected _import. The script is the body of an async function; a lone\n * expression is auto-returned, and top-level `await` / `return` are legal.\n * - _import is available as a parameter for dynamic ESM imports.\n * - rhiCapture is available as a 4th eval-scope root for the RHI capture\n * capability (plan-strategy D-4).\n * - No sandbox — full access reads and writes.\n * - No timeout — host realm eval cannot be interrupted (see R6).\n */\nexport async function executeScript(script: string, ctx: ExecuteContext): Promise<ExecuteResult> {\n try {\n const fn = compile(script);\n // AsyncFunction always returns a Promise; await resolves the value and\n // surfaces any runtime throw into this catch.\n const value: unknown = await fn(\n ctx.world,\n ctx.renderer,\n ctx.assets,\n ctx.rhiCapture,\n ctx.simulation,\n ctx.profiler,\n ctx.execution,\n ctx.plugins,\n ctx.importModule ?? _import,\n );\n\n return { ok: true, value };\n } catch (e) {\n // 1. RemoteError re-thrown from within the script surfaces verbatim.\n if (e instanceof RemoteError) {\n return { ok: false, error: e };\n }\n\n // 2. SyntaxError: both compile() attempts failed to parse the script.\n if (e instanceof SyntaxError) {\n const msg = e.message;\n return {\n ok: false,\n error: new RemoteError({\n code: 'script-syntax-error',\n expected: 'script body is valid JavaScript',\n hint: `check syntax near: ${msg}; fix and resubmit`,\n }),\n };\n }\n\n // 3. Runtime error (throws during function execution).\n const rawMessage = e instanceof Error ? e.message : String(e);\n return {\n ok: false,\n error: new RemoteError({\n code: 'script-runtime-error',\n expected: 'script executes without throwing',\n hint: `inspect error; verify symbol availability; eval has full access to world/renderer/assets (errMessage: ${rawMessage})`,\n }),\n };\n }\n}\n"]}
|
package/dist/introspect.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface RemoteRootValues {
|
|
|
13
13
|
readonly execution?: unknown;
|
|
14
14
|
/** Read-only World-owned simulation summary; no restore/replay operation. */
|
|
15
15
|
readonly simulation?: unknown;
|
|
16
|
+
/** Read-only projection of the DevKit plugin desired/live tree. */
|
|
17
|
+
readonly plugins?: unknown;
|
|
16
18
|
readonly introspection?: readonly ComponentIntrospectionDescriptor[];
|
|
17
19
|
}
|
|
18
20
|
export declare function isProfilerRoot(value: unknown): boolean;
|
package/dist/introspect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../src/introspect.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;CACtE;AAcD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CActD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,MAAM,IAAI,OAAO,CAAA;CAAE,CAM9E;
|
|
1
|
+
{"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../src/introspect.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;CACtE;AAcD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CActD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,MAAM,IAAI,OAAO,CAAA;CAAE,CAM9E;AA8GD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAuD/F"}
|
package/dist/introspect.mjs
CHANGED
|
@@ -50,6 +50,10 @@ function projectRoot(name, value) {
|
|
|
50
50
|
simulation: {
|
|
51
51
|
type: "SimulationInspection",
|
|
52
52
|
description: "A read-only World-owned simulation record, participant, trace, and report summary."
|
|
53
|
+
},
|
|
54
|
+
plugins: {
|
|
55
|
+
type: "PluginProjection",
|
|
56
|
+
description: "The desired and live plugin Entry/Fiber projection owned by DevKit."
|
|
53
57
|
}
|
|
54
58
|
};
|
|
55
59
|
const descriptor = descriptions[name] ?? { type: "unknown", description: "A live eval root." };
|
package/dist/introspect.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error-messages.ts","../src/errors.ts","../src/introspect.ts"],"names":[],"mappings":"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","file":"introspect.mjs","sourcesContent":["import type { RemoteErrorCode } from './errors';\n\nexport const REMOTE_ERROR_MESSAGES: Readonly<Record<RemoteErrorCode, string>> = {\n 'script-syntax-error': 'Script syntax error',\n 'script-runtime-error': 'Script runtime error',\n 'server-startup-failed': 'Server startup failed',\n 'server-not-running': 'Server not reachable',\n 'eval-result-not-serializable': 'Eval result not serializable',\n};\n","// @forgeax/engine-remote/src/errors - RemoteError runtime class + re-export of\n// the closed `RemoteErrorCode` union; 5 members (feat-20260629-inspector-two-layer-model D-5).\n//\n// SSOT split: the **type alias** `RemoteErrorCode`\n// + **structural interface** `RemoteError` live in `@forgeax/engine-types`\n// (parallel to the existing `ShaderErrorCode` placement). This file owns\n// the **runtime class** (`extends Error` + `toJSON()`) only; the class\n// `implements` the type-side interface so the two sides cannot drift\n// (architecture-principles #1 SSOT).\n//\n// Shape (mirrors @forgeax/engine-rhi/src/errors.ts RhiError 4-field surface for\n// charter proposition 5 consistent abstraction):\n// - `RemoteErrorCode` = closed union 5 members (re-exported from types).\n// tsc strict-mode guards exhaustive switch completeness (charter\n// proposition 4); AI users consume via `switch (err.code) { case '...': ... }`\n// with NO default branch.\n// - `RemoteError` class extends Error with three readonly fields .code /\n// .expected / .hint (AGENTS.md \"Errors are structured\"). The constructor\n// auto-composes a human-readable .message (`[RemoteError <code>]\n// expected: <expected>; hint: <hint>`). The class implements the\n// `RemoteError` interface from `@forgeax/engine-types` so callers may\n// alternately type against the structural shape.\n// - `toJSON()` opts into JSON.stringify serialisation so the JSON-RPC 2.0\n// `error.data` payload carries .code / .expected / .hint / .message\n// verbatim through the WebSocket transport.\n\nimport type {\n RemoteErrorCode,\n RemoteErrorDetail,\n RemoteError as RemoteErrorShape,\n} from '@forgeax/engine-types';\n\n// Re-export the type-side alias verbatim so existing\n// `import { type RemoteErrorCode } from '@forgeax/engine-remote'` call sites\n// keep working (charter proposition 1 progressive disclosure — single\n// entry point for AI users).\nexport type { RemoteErrorCode };\n\n/**\n * Structured remote error. Four core fields plus bounded detail, mirroring `@forgeax/engine-rhi`\n * `RhiError` (charter proposition 5 consistent abstraction; AGENTS.md\n * \"Errors are structured\"). The class `implements RemoteErrorShape`\n * (the structural interface re-exported from `@forgeax/engine-types`) so the type\n * SSOT and the runtime class cannot drift.\n *\n * - `.code` closed union member (L1 key signal; switch-able).\n * - `.expected` expected-state description (L2 detail; ai-user-charter\n * proposition 4 requires expected-state copy).\n * - `.hint` actionable recovery guidance (L2 detail; charter\n * proposition 3 machine-readable hint > prose).\n * - `.message` auto-composed `[RemoteError <code>] expected: <expected>;\n * hint: <hint>` so human stack traces still surface the\n * triple. AI users prefer property access (charter\n * proposition 4: no string parsing).\n *\n * Per-code `.expected` + `.hint` templates (requirements §10.2 SSOT):\n *\n * | code | `.expected` | `.hint` |\n * |:--|:--|:--|\n * | `'script-syntax-error'` | `'script body is valid JavaScript'` | `'check syntax position in errMessage; fix and resubmit'` |\n * | `'script-runtime-error'` | `'script executes without throwing'` | `'inspect error; verify symbol availability; eval has full access to world/renderer/assets'` |\n * | `'server-startup-failed'` | `'server starts successfully on requested port'` | `'check if port is already in use (default 5732); pass different port; or kill existing process holding the port'` |\n * | `'server-not-running'` | `'server is reachable at ws://localhost:<port>'` | `'start the demo first; verify app.remote is wired; pass --port to override default 5732'` |\n * | `'eval-result-not-serializable'` | `'eval result is JSON-serializable'` | `'return a JSON-safe value; BigInt and cyclic objects are unsupported over JSON-RPC'` |\n *\n * JSON-RPC 2.0 transport contract: `toJSON()` returns the structured plain\n * object carried verbatim via `error.data` on the WebSocket envelope. The\n * JSON-RPC server-error `.code` numeric segment -32001 ~ -32005 maps 1:1\n * to the 5 members\n * at the dispatch layer.\n *\n * @example AI-user exhaustive switch on the 5 remote-domain alternatives (no default fallback)\n * ```ts\n * import { RemoteError, type RemoteErrorCode } from '@forgeax/engine-remote';\n *\n * function recover(code: RemoteErrorCode): string {\n * switch (code) {\n * case 'script-syntax-error': return 'fix script body syntax and resubmit';\n * case 'script-runtime-error': return 'inspect stack trace; verify symbol availability';\n * case 'server-startup-failed': return 'pick a different port or free port 5732';\n * case 'server-not-running': return 'start demo dev or wire app.remote';\n * case 'eval-result-not-serializable': return 'return a JSON-safe eval result';\n * }\n * }\n * ```\n */\nexport class RemoteError extends Error implements RemoteErrorShape {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail?: RemoteErrorDetail;\n\n constructor(args: {\n code: RemoteErrorCode;\n expected: string;\n hint: string;\n detail?: RemoteErrorDetail;\n }) {\n super(`[RemoteError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n this.name = 'RemoteError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n if (args.detail !== undefined) {\n this.detail = args.detail;\n }\n }\n\n toJSON(): {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly message: string;\n readonly detail?: RemoteErrorDetail;\n } {\n const json = {\n code: this.code,\n expected: this.expected,\n hint: this.hint,\n message: this.message,\n };\n return this.detail === undefined ? json : { ...json, detail: this.detail };\n }\n}\n\n/**\n * SSOT mapping `RemoteErrorCode` -> JSON-RPC `error.code` numeric segment\n * (feat-20260629-inspector-two-layer-model D-5). The 5 remote P0\n * members occupy the closed segment `-32001..-32005`.\n *\n * `server.ts` consumes this map at the JSON-RPC envelope edge so the wire\n * always carries the lock-in numeric and a future drift in either direction\n * raises a TypeScript completeness error (the `Record<RemoteErrorCode,\n * number>` type guard requires every closed-union member to have a\n * numeric).\n */\nexport const REMOTE_ERROR_CODE_TO_JSONRPC: Readonly<Record<RemoteErrorCode, number>> = {\n 'script-syntax-error': -32001,\n 'script-runtime-error': -32002,\n 'server-startup-failed': -32003,\n 'server-not-running': -32004,\n 'eval-result-not-serializable': -32005,\n};\n","import { REMOTE_ERROR_MESSAGES } from './error-messages';\nimport { REMOTE_ERROR_CODE_TO_JSONRPC, type RemoteErrorCode } from './errors';\n\nexport interface ComponentIntrospectionDescriptor {\n readonly name: string;\n readonly schema: Readonly<Record<string, string>>;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly meta: Readonly<Record<string, unknown>>;\n}\n\nexport interface RemoteRootValues {\n readonly world: unknown;\n readonly renderer: unknown;\n readonly assets: unknown;\n readonly rhiCapture?: unknown;\n readonly profiler?: unknown;\n readonly execution?: unknown;\n /** Read-only World-owned simulation summary; no restore/replay operation. */\n readonly simulation?: unknown;\n readonly introspection?: readonly ComponentIntrospectionDescriptor[];\n}\n\ntype RootProjection = {\n readonly available: true;\n readonly type: string;\n readonly description: string;\n readonly capability?: string;\n readonly phaseCatalog?: unknown;\n readonly operations?: {\n readonly startCapture: string;\n readonly latestCapture: string;\n };\n};\n\nexport function isProfilerRoot(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n const root = value as {\n startCapture?: unknown;\n latestCapture?: unknown;\n activeSession?: unknown;\n phaseCatalog?: unknown;\n };\n return (\n typeof root.startCapture === 'function' &&\n typeof root.latestCapture === 'function' &&\n typeof root.activeSession === 'function' &&\n root.phaseCatalog !== undefined\n );\n}\n\nexport function isExecutionRoot(value: unknown): value is { report(): unknown } {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as { report?: unknown }).report === 'function'\n );\n}\n\nfunction profilerPhaseCatalog(value: unknown): unknown {\n if (value === null || typeof value !== 'object') return undefined;\n const catalog = (value as { phaseCatalog?: unknown }).phaseCatalog;\n return catalog === undefined ? undefined : catalog;\n}\n\nfunction projectRoot(name: string, value: unknown): RootProjection {\n const descriptions: Record<string, { type: string; description: string }> = {\n world: { type: 'World', description: 'The host World instance.' },\n renderer: { type: 'Renderer', description: 'The host Renderer instance.' },\n assets: { type: 'AssetRegistry', description: 'The host AssetRegistry instance.' },\n rhiCapture: {\n type: 'RhiCapture',\n description: 'The opt-in RHI frame capture capability.',\n },\n profiler: {\n type: 'Profiler',\n description: 'The opt-in CPU profiler for bounded App and Render capture.',\n },\n execution: {\n type: 'ExecutionReportProvider',\n description: 'The host execution report provider for tier, health, performance, and fault.',\n },\n simulation: {\n type: 'SimulationInspection',\n description:\n 'A read-only World-owned simulation record, participant, trace, and report summary.',\n },\n };\n const descriptor = descriptions[name] ?? { type: 'unknown', description: 'A live eval root.' };\n return {\n available: true,\n ...descriptor,\n ...(name === 'profiler'\n ? {\n capability: 'cpu-profile-v1',\n operations: {\n startCapture: 'profiler.startCapture({ frameLimit, eventLimit })',\n latestCapture: 'profiler.latestCapture() after the host reaches the frame boundary',\n },\n ...(profilerPhaseCatalog(value) === undefined\n ? {}\n : { phaseCatalog: profilerPhaseCatalog(value) }),\n }\n : name === 'execution'\n ? {\n capability: 'execution-report-v1',\n }\n : name === 'rhiCapture'\n ? {\n capability: 'rhi-capture-v1',\n }\n : {}),\n };\n}\n\nfunction projectRoots(roots: RemoteRootValues): Record<string, RootProjection> {\n const projected: Record<string, RootProjection> = {};\n for (const [name, value] of Object.entries(roots)) {\n if (\n value !== undefined &&\n (name !== 'profiler' || isProfilerRoot(value)) &&\n (name !== 'execution' || isExecutionRoot(value))\n ) {\n projected[name] = projectRoot(name, value);\n }\n }\n return projected;\n}\n\nfunction profilerCapability(roots: Record<string, RootProjection>): Record<string, unknown> {\n if (roots.profiler !== undefined) {\n return {\n enabled: true,\n capability: 'cpu-profile-v1',\n limits: {\n frameLimit: 'positive-safe-integer',\n eventLimit: 'positive-safe-integer',\n },\n };\n }\n return {\n enabled: false,\n code: 'profiler-not-enabled',\n expected: 'an explicitly opted-in profiler root',\n hint: 'Pass profiler: createProfiler() to createApp or startServer in development, then retry.',\n detail: { enabled: false },\n limits: {\n frameLimit: 'positive-safe-integer',\n eventLimit: 'positive-safe-integer',\n },\n };\n}\n\nfunction buildErrorProjection(): Record<string, { code: number; message: string }> {\n const errors: Record<string, { code: number; message: string }> = {};\n for (const [code, numericCode] of Object.entries(REMOTE_ERROR_CODE_TO_JSONRPC) as Array<\n [RemoteErrorCode, number]\n >) {\n errors[code] = { code: numericCode, message: REMOTE_ERROR_MESSAGES[code] };\n }\n return errors;\n}\n\nexport function buildIntrospectDoc(host: string, port: number, roots: RemoteRootValues): unknown {\n const projectedRoots = projectRoots(roots);\n const schemas: Record<string, unknown> = {\n World: { type: 'object', description: 'The host World instance.' },\n Renderer: { type: 'object', description: 'The host Renderer instance.' },\n Assets: { type: 'object', description: 'The host AssetRegistry instance.' },\n };\n for (const [name, root] of Object.entries(projectedRoots)) {\n schemas[root.type] = { type: 'object', description: root.description };\n if (name === 'profiler') {\n schemas.ProfilerCapture = {\n type: 'object',\n description: 'A bounded ProfileCapture v1 artifact returned through eval.',\n };\n }\n }\n for (const descriptor of roots.introspection ?? []) {\n schemas[descriptor.name] = descriptor;\n }\n return {\n openrpc: '1.3.2',\n info: {\n title: '@forgeax/engine-remote remote eval',\n version: '0.0.0',\n description:\n 'Remote eval server. Methods: eval / introspect. Errors map to JSON-RPC -32001..-32006.',\n },\n servers: [{ name: 'in-process', url: `ws://${host}:${port}/inspector` }],\n methods: [\n {\n name: 'eval',\n summary: 'Evaluate a JavaScript script against live eval roots.',\n params: [\n {\n name: 'script',\n required: true,\n schema: { type: 'string' },\n },\n ],\n result: { name: 'value', schema: { type: 'object' } },\n },\n {\n name: 'introspect',\n summary: 'Return this OpenRPC L2 subset document.',\n params: [],\n result: { name: 'document', schema: { type: 'object' } },\n },\n ],\n roots: projectedRoots,\n capabilities: { profiler: profilerCapability(projectedRoots) },\n components: {\n schemas,\n errors: buildErrorProjection(),\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error-messages.ts","../src/errors.ts","../src/introspect.ts"],"names":[],"mappings":"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","file":"introspect.mjs","sourcesContent":["import type { RemoteErrorCode } from './errors';\n\nexport const REMOTE_ERROR_MESSAGES: Readonly<Record<RemoteErrorCode, string>> = {\n 'script-syntax-error': 'Script syntax error',\n 'script-runtime-error': 'Script runtime error',\n 'server-startup-failed': 'Server startup failed',\n 'server-not-running': 'Server not reachable',\n 'eval-result-not-serializable': 'Eval result not serializable',\n};\n","// @forgeax/engine-remote/src/errors - RemoteError runtime class + re-export of\n// the closed `RemoteErrorCode` union; 5 members (feat-20260629-inspector-two-layer-model D-5).\n//\n// SSOT split: the **type alias** `RemoteErrorCode`\n// + **structural interface** `RemoteError` live in `@forgeax/engine-types`\n// (parallel to the existing `ShaderErrorCode` placement). This file owns\n// the **runtime class** (`extends Error` + `toJSON()`) only; the class\n// `implements` the type-side interface so the two sides cannot drift\n// (architecture-principles #1 SSOT).\n//\n// Shape (mirrors @forgeax/engine-rhi/src/errors.ts RhiError 4-field surface for\n// charter proposition 5 consistent abstraction):\n// - `RemoteErrorCode` = closed union 5 members (re-exported from types).\n// tsc strict-mode guards exhaustive switch completeness (charter\n// proposition 4); AI users consume via `switch (err.code) { case '...': ... }`\n// with NO default branch.\n// - `RemoteError` class extends Error with three readonly fields .code /\n// .expected / .hint (AGENTS.md \"Errors are structured\"). The constructor\n// auto-composes a human-readable .message (`[RemoteError <code>]\n// expected: <expected>; hint: <hint>`). The class implements the\n// `RemoteError` interface from `@forgeax/engine-types` so callers may\n// alternately type against the structural shape.\n// - `toJSON()` opts into JSON.stringify serialisation so the JSON-RPC 2.0\n// `error.data` payload carries .code / .expected / .hint / .message\n// verbatim through the WebSocket transport.\n\nimport type {\n RemoteErrorCode,\n RemoteErrorDetail,\n RemoteError as RemoteErrorShape,\n} from '@forgeax/engine-types';\n\n// Re-export the type-side alias verbatim so existing\n// `import { type RemoteErrorCode } from '@forgeax/engine-remote'` call sites\n// keep working (charter proposition 1 progressive disclosure — single\n// entry point for AI users).\nexport type { RemoteErrorCode };\n\n/**\n * Structured remote error. Four core fields plus bounded detail, mirroring `@forgeax/engine-rhi`\n * `RhiError` (charter proposition 5 consistent abstraction; AGENTS.md\n * \"Errors are structured\"). The class `implements RemoteErrorShape`\n * (the structural interface re-exported from `@forgeax/engine-types`) so the type\n * SSOT and the runtime class cannot drift.\n *\n * - `.code` closed union member (L1 key signal; switch-able).\n * - `.expected` expected-state description (L2 detail; ai-user-charter\n * proposition 4 requires expected-state copy).\n * - `.hint` actionable recovery guidance (L2 detail; charter\n * proposition 3 machine-readable hint > prose).\n * - `.message` auto-composed `[RemoteError <code>] expected: <expected>;\n * hint: <hint>` so human stack traces still surface the\n * triple. AI users prefer property access (charter\n * proposition 4: no string parsing).\n *\n * Per-code `.expected` + `.hint` templates (requirements §10.2 SSOT):\n *\n * | code | `.expected` | `.hint` |\n * |:--|:--|:--|\n * | `'script-syntax-error'` | `'script body is valid JavaScript'` | `'check syntax position in errMessage; fix and resubmit'` |\n * | `'script-runtime-error'` | `'script executes without throwing'` | `'inspect error; verify symbol availability; eval has full access to world/renderer/assets'` |\n * | `'server-startup-failed'` | `'server starts successfully on requested port'` | `'check if port is already in use (default 5732); pass different port; or kill existing process holding the port'` |\n * | `'server-not-running'` | `'server is reachable at ws://localhost:<port>'` | `'start the demo first; verify app.remote is wired; pass --port to override default 5732'` |\n * | `'eval-result-not-serializable'` | `'eval result is JSON-serializable'` | `'return a JSON-safe value; BigInt and cyclic objects are unsupported over JSON-RPC'` |\n *\n * JSON-RPC 2.0 transport contract: `toJSON()` returns the structured plain\n * object carried verbatim via `error.data` on the WebSocket envelope. The\n * JSON-RPC server-error `.code` numeric segment -32001 ~ -32005 maps 1:1\n * to the 5 members\n * at the dispatch layer.\n *\n * @example AI-user exhaustive switch on the 5 remote-domain alternatives (no default fallback)\n * ```ts\n * import { RemoteError, type RemoteErrorCode } from '@forgeax/engine-remote';\n *\n * function recover(code: RemoteErrorCode): string {\n * switch (code) {\n * case 'script-syntax-error': return 'fix script body syntax and resubmit';\n * case 'script-runtime-error': return 'inspect stack trace; verify symbol availability';\n * case 'server-startup-failed': return 'pick a different port or free port 5732';\n * case 'server-not-running': return 'start demo dev or wire app.remote';\n * case 'eval-result-not-serializable': return 'return a JSON-safe eval result';\n * }\n * }\n * ```\n */\nexport class RemoteError extends Error implements RemoteErrorShape {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail?: RemoteErrorDetail;\n\n constructor(args: {\n code: RemoteErrorCode;\n expected: string;\n hint: string;\n detail?: RemoteErrorDetail;\n }) {\n super(`[RemoteError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n this.name = 'RemoteError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n if (args.detail !== undefined) {\n this.detail = args.detail;\n }\n }\n\n toJSON(): {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly message: string;\n readonly detail?: RemoteErrorDetail;\n } {\n const json = {\n code: this.code,\n expected: this.expected,\n hint: this.hint,\n message: this.message,\n };\n return this.detail === undefined ? json : { ...json, detail: this.detail };\n }\n}\n\n/**\n * SSOT mapping `RemoteErrorCode` -> JSON-RPC `error.code` numeric segment\n * (feat-20260629-inspector-two-layer-model D-5). The 5 remote P0\n * members occupy the closed segment `-32001..-32005`.\n *\n * `server.ts` consumes this map at the JSON-RPC envelope edge so the wire\n * always carries the lock-in numeric and a future drift in either direction\n * raises a TypeScript completeness error (the `Record<RemoteErrorCode,\n * number>` type guard requires every closed-union member to have a\n * numeric).\n */\nexport const REMOTE_ERROR_CODE_TO_JSONRPC: Readonly<Record<RemoteErrorCode, number>> = {\n 'script-syntax-error': -32001,\n 'script-runtime-error': -32002,\n 'server-startup-failed': -32003,\n 'server-not-running': -32004,\n 'eval-result-not-serializable': -32005,\n};\n","import { REMOTE_ERROR_MESSAGES } from './error-messages';\nimport { REMOTE_ERROR_CODE_TO_JSONRPC, type RemoteErrorCode } from './errors';\n\nexport interface ComponentIntrospectionDescriptor {\n readonly name: string;\n readonly schema: Readonly<Record<string, string>>;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly meta: Readonly<Record<string, unknown>>;\n}\n\nexport interface RemoteRootValues {\n readonly world: unknown;\n readonly renderer: unknown;\n readonly assets: unknown;\n readonly rhiCapture?: unknown;\n readonly profiler?: unknown;\n readonly execution?: unknown;\n /** Read-only World-owned simulation summary; no restore/replay operation. */\n readonly simulation?: unknown;\n /** Read-only projection of the DevKit plugin desired/live tree. */\n readonly plugins?: unknown;\n readonly introspection?: readonly ComponentIntrospectionDescriptor[];\n}\n\ntype RootProjection = {\n readonly available: true;\n readonly type: string;\n readonly description: string;\n readonly capability?: string;\n readonly phaseCatalog?: unknown;\n readonly operations?: {\n readonly startCapture: string;\n readonly latestCapture: string;\n };\n};\n\nexport function isProfilerRoot(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n const root = value as {\n startCapture?: unknown;\n latestCapture?: unknown;\n activeSession?: unknown;\n phaseCatalog?: unknown;\n };\n return (\n typeof root.startCapture === 'function' &&\n typeof root.latestCapture === 'function' &&\n typeof root.activeSession === 'function' &&\n root.phaseCatalog !== undefined\n );\n}\n\nexport function isExecutionRoot(value: unknown): value is { report(): unknown } {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as { report?: unknown }).report === 'function'\n );\n}\n\nfunction profilerPhaseCatalog(value: unknown): unknown {\n if (value === null || typeof value !== 'object') return undefined;\n const catalog = (value as { phaseCatalog?: unknown }).phaseCatalog;\n return catalog === undefined ? undefined : catalog;\n}\n\nfunction projectRoot(name: string, value: unknown): RootProjection {\n const descriptions: Record<string, { type: string; description: string }> = {\n world: { type: 'World', description: 'The host World instance.' },\n renderer: { type: 'Renderer', description: 'The host Renderer instance.' },\n assets: { type: 'AssetRegistry', description: 'The host AssetRegistry instance.' },\n rhiCapture: {\n type: 'RhiCapture',\n description: 'The opt-in RHI frame capture capability.',\n },\n profiler: {\n type: 'Profiler',\n description: 'The opt-in CPU profiler for bounded App and Render capture.',\n },\n execution: {\n type: 'ExecutionReportProvider',\n description: 'The host execution report provider for tier, health, performance, and fault.',\n },\n simulation: {\n type: 'SimulationInspection',\n description:\n 'A read-only World-owned simulation record, participant, trace, and report summary.',\n },\n plugins: {\n type: 'PluginProjection',\n description: 'The desired and live plugin Entry/Fiber projection owned by DevKit.',\n },\n };\n const descriptor = descriptions[name] ?? { type: 'unknown', description: 'A live eval root.' };\n return {\n available: true,\n ...descriptor,\n ...(name === 'profiler'\n ? {\n capability: 'cpu-profile-v1',\n operations: {\n startCapture: 'profiler.startCapture({ frameLimit, eventLimit })',\n latestCapture: 'profiler.latestCapture() after the host reaches the frame boundary',\n },\n ...(profilerPhaseCatalog(value) === undefined\n ? {}\n : { phaseCatalog: profilerPhaseCatalog(value) }),\n }\n : name === 'execution'\n ? {\n capability: 'execution-report-v1',\n }\n : name === 'rhiCapture'\n ? {\n capability: 'rhi-capture-v1',\n }\n : {}),\n };\n}\n\nfunction projectRoots(roots: RemoteRootValues): Record<string, RootProjection> {\n const projected: Record<string, RootProjection> = {};\n for (const [name, value] of Object.entries(roots)) {\n if (\n value !== undefined &&\n (name !== 'profiler' || isProfilerRoot(value)) &&\n (name !== 'execution' || isExecutionRoot(value))\n ) {\n projected[name] = projectRoot(name, value);\n }\n }\n return projected;\n}\n\nfunction profilerCapability(roots: Record<string, RootProjection>): Record<string, unknown> {\n if (roots.profiler !== undefined) {\n return {\n enabled: true,\n capability: 'cpu-profile-v1',\n limits: {\n frameLimit: 'positive-safe-integer',\n eventLimit: 'positive-safe-integer',\n },\n };\n }\n return {\n enabled: false,\n code: 'profiler-not-enabled',\n expected: 'an explicitly opted-in profiler root',\n hint: 'Pass profiler: createProfiler() to createApp or startServer in development, then retry.',\n detail: { enabled: false },\n limits: {\n frameLimit: 'positive-safe-integer',\n eventLimit: 'positive-safe-integer',\n },\n };\n}\n\nfunction buildErrorProjection(): Record<string, { code: number; message: string }> {\n const errors: Record<string, { code: number; message: string }> = {};\n for (const [code, numericCode] of Object.entries(REMOTE_ERROR_CODE_TO_JSONRPC) as Array<\n [RemoteErrorCode, number]\n >) {\n errors[code] = { code: numericCode, message: REMOTE_ERROR_MESSAGES[code] };\n }\n return errors;\n}\n\nexport function buildIntrospectDoc(host: string, port: number, roots: RemoteRootValues): unknown {\n const projectedRoots = projectRoots(roots);\n const schemas: Record<string, unknown> = {\n World: { type: 'object', description: 'The host World instance.' },\n Renderer: { type: 'object', description: 'The host Renderer instance.' },\n Assets: { type: 'object', description: 'The host AssetRegistry instance.' },\n };\n for (const [name, root] of Object.entries(projectedRoots)) {\n schemas[root.type] = { type: 'object', description: root.description };\n if (name === 'profiler') {\n schemas.ProfilerCapture = {\n type: 'object',\n description: 'A bounded ProfileCapture v1 artifact returned through eval.',\n };\n }\n }\n for (const descriptor of roots.introspection ?? []) {\n schemas[descriptor.name] = descriptor;\n }\n return {\n openrpc: '1.3.2',\n info: {\n title: '@forgeax/engine-remote remote eval',\n version: '0.0.0',\n description:\n 'Remote eval server. Methods: eval / introspect. Errors map to JSON-RPC -32001..-32006.',\n },\n servers: [{ name: 'in-process', url: `ws://${host}:${port}/inspector` }],\n methods: [\n {\n name: 'eval',\n summary: 'Evaluate a JavaScript script against live eval roots.',\n params: [\n {\n name: 'script',\n required: true,\n schema: { type: 'string' },\n },\n ],\n result: { name: 'value', schema: { type: 'object' } },\n },\n {\n name: 'introspect',\n summary: 'Return this OpenRPC L2 subset document.',\n params: [],\n result: { name: 'document', schema: { type: 'object' } },\n },\n ],\n roots: projectedRoots,\n capabilities: { profiler: profilerCapability(projectedRoots) },\n components: {\n schemas,\n errors: buildErrorProjection(),\n },\n };\n}\n"]}
|
package/dist/server.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export type StartServerOptions = {
|
|
|
21
21
|
readonly execution?: unknown;
|
|
22
22
|
/** Read-only World-owned simulation inspection root. */
|
|
23
23
|
readonly simulation?: unknown;
|
|
24
|
+
/** Read-only DevKit plugin projection; Remote never owns plugin state. */
|
|
25
|
+
readonly plugins?: unknown;
|
|
24
26
|
/**
|
|
25
27
|
* Host-owned RHI capture capability for eval-scope injection (plan-strategy D-4).
|
|
26
28
|
* It is exposed as the single `rhiCapture` eval root.
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI7D,OAAO,EAAgC,WAAW,EAAE,MAAM,UAAU,CAAC;AAErE,OAAO,EAEL,KAAK,gCAAgC,EAGtC,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AAIrE,YAAY,EAAE,MAAM,EAAE,CAAC;AAEvB,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACrE,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI7D,OAAO,EAAgC,WAAW,EAAE,MAAM,UAAU,CAAC;AAErE,OAAO,EAEL,KAAK,gCAAgC,EAGtC,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AAIrE,YAAY,EAAE,MAAM,EAAE,CAAC;AAEvB,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACrE,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAmIF;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAmGjG"}
|
package/dist/server.mjs
CHANGED
|
@@ -49,7 +49,10 @@ var REMOTE_ERROR_CODE_TO_JSONRPC = {
|
|
|
49
49
|
// src/execute.ts
|
|
50
50
|
var AsyncFunction = Object.getPrototypeOf(async () => {
|
|
51
51
|
}).constructor;
|
|
52
|
-
var _import = async (specifier) => import(
|
|
52
|
+
var _import = async (specifier) => import(
|
|
53
|
+
/* @vite-ignore */
|
|
54
|
+
specifier
|
|
55
|
+
);
|
|
53
56
|
function compile(script) {
|
|
54
57
|
const params = [
|
|
55
58
|
"world",
|
|
@@ -59,6 +62,7 @@ function compile(script) {
|
|
|
59
62
|
"simulation",
|
|
60
63
|
"profiler",
|
|
61
64
|
"execution",
|
|
65
|
+
"plugins",
|
|
62
66
|
"_import"
|
|
63
67
|
];
|
|
64
68
|
try {
|
|
@@ -81,6 +85,7 @@ async function executeScript(script, ctx) {
|
|
|
81
85
|
ctx.simulation,
|
|
82
86
|
ctx.profiler,
|
|
83
87
|
ctx.execution,
|
|
88
|
+
ctx.plugins,
|
|
84
89
|
ctx.importModule ?? _import
|
|
85
90
|
);
|
|
86
91
|
return { ok: true, value };
|
|
@@ -145,6 +150,10 @@ function projectRoot(name, value) {
|
|
|
145
150
|
simulation: {
|
|
146
151
|
type: "SimulationInspection",
|
|
147
152
|
description: "A read-only World-owned simulation record, participant, trace, and report summary."
|
|
153
|
+
},
|
|
154
|
+
plugins: {
|
|
155
|
+
type: "PluginProjection",
|
|
156
|
+
description: "The desired and live plugin Entry/Fiber projection owned by DevKit."
|
|
148
157
|
}
|
|
149
158
|
};
|
|
150
159
|
const descriptor = descriptions[name] ?? { type: "unknown", description: "A live eval root." };
|
|
@@ -312,6 +321,7 @@ async function handleEnvelope(raw, ctx) {
|
|
|
312
321
|
...ctx.profiler !== void 0 ? { profiler: ctx.profiler } : {},
|
|
313
322
|
...ctx.execution !== void 0 ? { execution: ctx.execution } : {},
|
|
314
323
|
...ctx.simulation !== void 0 ? { simulation: ctx.simulation } : {},
|
|
324
|
+
...ctx.plugins !== void 0 ? { plugins: ctx.plugins } : {},
|
|
315
325
|
...ctx.introspection.length > 0 ? { introspection: ctx.introspection } : {}
|
|
316
326
|
})
|
|
317
327
|
);
|
|
@@ -328,7 +338,8 @@ async function handleEnvelope(raw, ctx) {
|
|
|
328
338
|
rhiCapture: ctx.rhiCapture,
|
|
329
339
|
profiler: ctx.profiler,
|
|
330
340
|
execution: ctx.execution,
|
|
331
|
-
simulation: ctx.simulation
|
|
341
|
+
simulation: ctx.simulation,
|
|
342
|
+
plugins: ctx.plugins
|
|
332
343
|
});
|
|
333
344
|
if (result.ok) {
|
|
334
345
|
response = respondOk(id, result.value);
|
|
@@ -364,6 +375,7 @@ function startServer(opts) {
|
|
|
364
375
|
const profiler = isProfilerRoot(opts.profiler) ? opts.profiler : void 0;
|
|
365
376
|
const execution = isExecutionRoot(opts.execution) ? opts.execution : void 0;
|
|
366
377
|
const simulation = opts.simulation;
|
|
378
|
+
const plugins = opts.plugins;
|
|
367
379
|
let settled = false;
|
|
368
380
|
let boundPort = opts.port;
|
|
369
381
|
wss.on("error", (e) => {
|
|
@@ -395,6 +407,7 @@ function startServer(opts) {
|
|
|
395
407
|
profiler,
|
|
396
408
|
execution,
|
|
397
409
|
simulation,
|
|
410
|
+
plugins,
|
|
398
411
|
host,
|
|
399
412
|
port: boundPort
|
|
400
413
|
}).then((response) => {
|
package/dist/server.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error-messages.ts","../src/errors.ts","../src/execute.ts","../src/introspect.ts","../src/server.ts"],"names":["id"],"mappings":"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","file":"server.mjs","sourcesContent":["import type { RemoteErrorCode } from './errors';\n\nexport const REMOTE_ERROR_MESSAGES: Readonly<Record<RemoteErrorCode, string>> = {\n 'script-syntax-error': 'Script syntax error',\n 'script-runtime-error': 'Script runtime error',\n 'server-startup-failed': 'Server startup failed',\n 'server-not-running': 'Server not reachable',\n 'eval-result-not-serializable': 'Eval result not serializable',\n};\n","// @forgeax/engine-remote/src/errors - RemoteError runtime class + re-export of\n// the closed `RemoteErrorCode` union; 5 members (feat-20260629-inspector-two-layer-model D-5).\n//\n// SSOT split: the **type alias** `RemoteErrorCode`\n// + **structural interface** `RemoteError` live in `@forgeax/engine-types`\n// (parallel to the existing `ShaderErrorCode` placement). This file owns\n// the **runtime class** (`extends Error` + `toJSON()`) only; the class\n// `implements` the type-side interface so the two sides cannot drift\n// (architecture-principles #1 SSOT).\n//\n// Shape (mirrors @forgeax/engine-rhi/src/errors.ts RhiError 4-field surface for\n// charter proposition 5 consistent abstraction):\n// - `RemoteErrorCode` = closed union 5 members (re-exported from types).\n// tsc strict-mode guards exhaustive switch completeness (charter\n// proposition 4); AI users consume via `switch (err.code) { case '...': ... }`\n// with NO default branch.\n// - `RemoteError` class extends Error with three readonly fields .code /\n// .expected / .hint (AGENTS.md \"Errors are structured\"). The constructor\n// auto-composes a human-readable .message (`[RemoteError <code>]\n// expected: <expected>; hint: <hint>`). The class implements the\n// `RemoteError` interface from `@forgeax/engine-types` so callers may\n// alternately type against the structural shape.\n// - `toJSON()` opts into JSON.stringify serialisation so the JSON-RPC 2.0\n// `error.data` payload carries .code / .expected / .hint / .message\n// verbatim through the WebSocket transport.\n\nimport type {\n RemoteErrorCode,\n RemoteErrorDetail,\n RemoteError as RemoteErrorShape,\n} from '@forgeax/engine-types';\n\n// Re-export the type-side alias verbatim so existing\n// `import { type RemoteErrorCode } from '@forgeax/engine-remote'` call sites\n// keep working (charter proposition 1 progressive disclosure — single\n// entry point for AI users).\nexport type { RemoteErrorCode };\n\n/**\n * Structured remote error. Four core fields plus bounded detail, mirroring `@forgeax/engine-rhi`\n * `RhiError` (charter proposition 5 consistent abstraction; AGENTS.md\n * \"Errors are structured\"). The class `implements RemoteErrorShape`\n * (the structural interface re-exported from `@forgeax/engine-types`) so the type\n * SSOT and the runtime class cannot drift.\n *\n * - `.code` closed union member (L1 key signal; switch-able).\n * - `.expected` expected-state description (L2 detail; ai-user-charter\n * proposition 4 requires expected-state copy).\n * - `.hint` actionable recovery guidance (L2 detail; charter\n * proposition 3 machine-readable hint > prose).\n * - `.message` auto-composed `[RemoteError <code>] expected: <expected>;\n * hint: <hint>` so human stack traces still surface the\n * triple. AI users prefer property access (charter\n * proposition 4: no string parsing).\n *\n * Per-code `.expected` + `.hint` templates (requirements §10.2 SSOT):\n *\n * | code | `.expected` | `.hint` |\n * |:--|:--|:--|\n * | `'script-syntax-error'` | `'script body is valid JavaScript'` | `'check syntax position in errMessage; fix and resubmit'` |\n * | `'script-runtime-error'` | `'script executes without throwing'` | `'inspect error; verify symbol availability; eval has full access to world/renderer/assets'` |\n * | `'server-startup-failed'` | `'server starts successfully on requested port'` | `'check if port is already in use (default 5732); pass different port; or kill existing process holding the port'` |\n * | `'server-not-running'` | `'server is reachable at ws://localhost:<port>'` | `'start the demo first; verify app.remote is wired; pass --port to override default 5732'` |\n * | `'eval-result-not-serializable'` | `'eval result is JSON-serializable'` | `'return a JSON-safe value; BigInt and cyclic objects are unsupported over JSON-RPC'` |\n *\n * JSON-RPC 2.0 transport contract: `toJSON()` returns the structured plain\n * object carried verbatim via `error.data` on the WebSocket envelope. The\n * JSON-RPC server-error `.code` numeric segment -32001 ~ -32005 maps 1:1\n * to the 5 members\n * at the dispatch layer.\n *\n * @example AI-user exhaustive switch on the 5 remote-domain alternatives (no default fallback)\n * ```ts\n * import { RemoteError, type RemoteErrorCode } from '@forgeax/engine-remote';\n *\n * function recover(code: RemoteErrorCode): string {\n * switch (code) {\n * case 'script-syntax-error': return 'fix script body syntax and resubmit';\n * case 'script-runtime-error': return 'inspect stack trace; verify symbol availability';\n * case 'server-startup-failed': return 'pick a different port or free port 5732';\n * case 'server-not-running': return 'start demo dev or wire app.remote';\n * case 'eval-result-not-serializable': return 'return a JSON-safe eval result';\n * }\n * }\n * ```\n */\nexport class RemoteError extends Error implements RemoteErrorShape {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail?: RemoteErrorDetail;\n\n constructor(args: {\n code: RemoteErrorCode;\n expected: string;\n hint: string;\n detail?: RemoteErrorDetail;\n }) {\n super(`[RemoteError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n this.name = 'RemoteError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n if (args.detail !== undefined) {\n this.detail = args.detail;\n }\n }\n\n toJSON(): {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly message: string;\n readonly detail?: RemoteErrorDetail;\n } {\n const json = {\n code: this.code,\n expected: this.expected,\n hint: this.hint,\n message: this.message,\n };\n return this.detail === undefined ? json : { ...json, detail: this.detail };\n }\n}\n\n/**\n * SSOT mapping `RemoteErrorCode` -> JSON-RPC `error.code` numeric segment\n * (feat-20260629-inspector-two-layer-model D-5). The 5 remote P0\n * members occupy the closed segment `-32001..-32005`.\n *\n * `server.ts` consumes this map at the JSON-RPC envelope edge so the wire\n * always carries the lock-in numeric and a future drift in either direction\n * raises a TypeScript completeness error (the `Record<RemoteErrorCode,\n * number>` type guard requires every closed-union member to have a\n * numeric).\n */\nexport const REMOTE_ERROR_CODE_TO_JSONRPC: Readonly<Record<RemoteErrorCode, number>> = {\n 'script-syntax-error': -32001,\n 'script-runtime-error': -32002,\n 'server-startup-failed': -32003,\n 'server-not-running': -32004,\n 'eval-result-not-serializable': -32005,\n};\n","// @forgeax/engine-remote/src/execute — async host-realm eval.\n//\n// D-1 route B (2026-06-29): vm.runInContext does not honor\n// importModuleDynamically for Script execution. Host realm compilation via\n// the AsyncFunction constructor resolves `await import` naturally, as long\n// as the import function from the calling module scope is injected.\n//\n// CONTRACT (the one an AI user holds): the script IS the body of an async\n// function with `world` / `renderer` / `assets` / `rhiCapture` / `simulation` / `_import`\n// in scope. So all of these Just Work, un-wrapped:\n// - a bare expression: `renderer.backend` -> auto-returned\n// - top-level await: `await _import('engine-module')`\n// - top-level return: `return world.inspect().entityCount`\n// - multi-statement + return: `const m = await _import(...); return m.x`\n// (the historical `(async () => { ... })()` IIFE form still works too — its\n// returned Promise is awaited.)\n//\n// Implementation (mirrors a REPL, two construction-time-checked attempts):\n// 1. expression mode: compile `return (<script>)` — auto-returns a lone\n// expression (incl. an await-expression), preserving last-expression value.\n// 2. on SyntaxError from (1)'s CONSTRUCTION: statement mode — compile\n// `<script>` as the async body directly, legalizing top-level return +\n// await + arbitrary statements.\n// Only a construction-time SyntaxError advances attempt 1 -> 2, so user code is\n// compiled once and executed at most once (no double side effects). We never use\n// `eval`: indirect eval ran the body as a global program, which is precisely\n// what banned top-level return/await and produced the doc-vs-reality gap.\n//\n// try/catch maps errors:\n// SyntaxError (both attempts fail to compile) -> 'script-syntax-error'\n// RemoteError (re-thrown) -> verbatim\n// anything else -> 'script-runtime-error'\n//\n// The sandbox is dismantled — eval is full-access, no wrapReadOnly.\n// Timeout is removed (route B has no interrupt mechanism; see R6).\n\nimport { RemoteError } from './errors';\n\n// AsyncFunction constructor (not a global binding). An async body is what\n// legalizes top-level `await` AND top-level `return` simultaneously.\nconst AsyncFunction = Object.getPrototypeOf(async () => {}).constructor as FunctionConstructor;\n\nexport type ExecuteContext = {\n readonly world: unknown;\n readonly renderer: unknown;\n readonly assets: unknown;\n readonly rhiCapture?: unknown;\n readonly simulation?: unknown;\n readonly profiler?: unknown;\n readonly execution?: unknown;\n readonly importModule?: (specifier: string) => Promise<unknown>;\n};\n\nexport type ExecuteResult = { ok: true; value: unknown } | { ok: false; error: RemoteError };\n\n// Capture import at module load time. This is the host realm's dynamic\n// import() — when injected into new Function, it resolves module\n// specifiers relative to the module that called executeScript. The remote\n// package stays package-neutral: a host may inject a capability projection\n// through ExecuteContext.importModule, but the transport does not own any\n// engine package vocabulary.\nconst _import = async (specifier: string): Promise<unknown> => import(specifier);\n\n// Compile the script as an async function body. Tries expression mode first\n// (auto-return a lone expression), falling back to statement mode on a\n// construction-time SyntaxError. Returns the compiled fn, or throws the\n// statement-mode SyntaxError if BOTH modes fail to parse.\nfunction compile(script: string): FunctionConstructor['prototype'] {\n const params = [\n 'world',\n 'renderer',\n 'assets',\n 'rhiCapture',\n 'simulation',\n 'profiler',\n 'execution',\n '_import',\n ] as const;\n try {\n // Expression mode: `return (<expr>)` auto-returns a lone expression\n // (including an await-expression), preserving last-expression-value.\n // Trailing semicolons/whitespace are trimmed so `renderer.backend;`\n // still returns its value (the old indirect-eval completion-value\n // behavior) instead of parsing as a statement that returns undefined.\n const expr = script.replace(/[\\s;]+$/, '');\n return new AsyncFunction(...params, `return (${expr}\\n)`);\n } catch (e) {\n if (!(e instanceof SyntaxError)) throw e;\n // Statement mode: the script IS the async body — legalizes top-level\n // return + await + arbitrary statements. If this also fails to parse,\n // its SyntaxError is the authoritative one to surface.\n return new AsyncFunction(...params, script);\n }\n}\n\n/**\n * Evaluate a JavaScript script against the host engine context.\n *\n * Route B (D-1): host-realm compilation via the AsyncFunction constructor with\n * injected _import. The script is the body of an async function; a lone\n * expression is auto-returned, and top-level `await` / `return` are legal.\n * - _import is available as a parameter for dynamic ESM imports.\n * - rhiCapture is available as a 4th eval-scope root for the RHI capture\n * capability (plan-strategy D-4).\n * - No sandbox — full access reads and writes.\n * - No timeout — host realm eval cannot be interrupted (see R6).\n */\nexport async function executeScript(script: string, ctx: ExecuteContext): Promise<ExecuteResult> {\n try {\n const fn = compile(script);\n // AsyncFunction always returns a Promise; await resolves the value and\n // surfaces any runtime throw into this catch.\n const value: unknown = await fn(\n ctx.world,\n ctx.renderer,\n ctx.assets,\n ctx.rhiCapture,\n ctx.simulation,\n ctx.profiler,\n ctx.execution,\n ctx.importModule ?? _import,\n );\n\n return { ok: true, value };\n } catch (e) {\n // 1. RemoteError re-thrown from within the script surfaces verbatim.\n if (e instanceof RemoteError) {\n return { ok: false, error: e };\n }\n\n // 2. SyntaxError: both compile() attempts failed to parse the script.\n if (e instanceof SyntaxError) {\n const msg = e.message;\n return {\n ok: false,\n error: new RemoteError({\n code: 'script-syntax-error',\n expected: 'script body is valid JavaScript',\n hint: `check syntax near: ${msg}; fix and resubmit`,\n }),\n };\n }\n\n // 3. Runtime error (throws during function execution).\n const rawMessage = e instanceof Error ? e.message : String(e);\n return {\n ok: false,\n error: new RemoteError({\n code: 'script-runtime-error',\n expected: 'script executes without throwing',\n hint: `inspect error; verify symbol availability; eval has full access to world/renderer/assets (errMessage: ${rawMessage})`,\n }),\n };\n }\n}\n","import { REMOTE_ERROR_MESSAGES } from './error-messages';\nimport { REMOTE_ERROR_CODE_TO_JSONRPC, type RemoteErrorCode } from './errors';\n\nexport interface ComponentIntrospectionDescriptor {\n readonly name: string;\n readonly schema: Readonly<Record<string, string>>;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly meta: Readonly<Record<string, unknown>>;\n}\n\nexport interface RemoteRootValues {\n readonly world: unknown;\n readonly renderer: unknown;\n readonly assets: unknown;\n readonly rhiCapture?: unknown;\n readonly profiler?: unknown;\n readonly execution?: unknown;\n /** Read-only World-owned simulation summary; no restore/replay operation. */\n readonly simulation?: unknown;\n readonly introspection?: readonly ComponentIntrospectionDescriptor[];\n}\n\ntype RootProjection = {\n readonly available: true;\n readonly type: string;\n readonly description: string;\n readonly capability?: string;\n readonly phaseCatalog?: unknown;\n readonly operations?: {\n readonly startCapture: string;\n readonly latestCapture: string;\n };\n};\n\nexport function isProfilerRoot(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n const root = value as {\n startCapture?: unknown;\n latestCapture?: unknown;\n activeSession?: unknown;\n phaseCatalog?: unknown;\n };\n return (\n typeof root.startCapture === 'function' &&\n typeof root.latestCapture === 'function' &&\n typeof root.activeSession === 'function' &&\n root.phaseCatalog !== undefined\n );\n}\n\nexport function isExecutionRoot(value: unknown): value is { report(): unknown } {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as { report?: unknown }).report === 'function'\n );\n}\n\nfunction profilerPhaseCatalog(value: unknown): unknown {\n if (value === null || typeof value !== 'object') return undefined;\n const catalog = (value as { phaseCatalog?: unknown }).phaseCatalog;\n return catalog === undefined ? undefined : catalog;\n}\n\nfunction projectRoot(name: string, value: unknown): RootProjection {\n const descriptions: Record<string, { type: string; description: string }> = {\n world: { type: 'World', description: 'The host World instance.' },\n renderer: { type: 'Renderer', description: 'The host Renderer instance.' },\n assets: { type: 'AssetRegistry', description: 'The host AssetRegistry instance.' },\n rhiCapture: {\n type: 'RhiCapture',\n description: 'The opt-in RHI frame capture capability.',\n },\n profiler: {\n type: 'Profiler',\n description: 'The opt-in CPU profiler for bounded App and Render capture.',\n },\n execution: {\n type: 'ExecutionReportProvider',\n description: 'The host execution report provider for tier, health, performance, and fault.',\n },\n simulation: {\n type: 'SimulationInspection',\n description:\n 'A read-only World-owned simulation record, participant, trace, and report summary.',\n },\n };\n const descriptor = descriptions[name] ?? { type: 'unknown', description: 'A live eval root.' };\n return {\n available: true,\n ...descriptor,\n ...(name === 'profiler'\n ? {\n capability: 'cpu-profile-v1',\n operations: {\n startCapture: 'profiler.startCapture({ frameLimit, eventLimit })',\n latestCapture: 'profiler.latestCapture() after the host reaches the frame boundary',\n },\n ...(profilerPhaseCatalog(value) === undefined\n ? {}\n : { phaseCatalog: profilerPhaseCatalog(value) }),\n }\n : name === 'execution'\n ? {\n capability: 'execution-report-v1',\n }\n : name === 'rhiCapture'\n ? {\n capability: 'rhi-capture-v1',\n }\n : {}),\n };\n}\n\nfunction projectRoots(roots: RemoteRootValues): Record<string, RootProjection> {\n const projected: Record<string, RootProjection> = {};\n for (const [name, value] of Object.entries(roots)) {\n if (\n value !== undefined &&\n (name !== 'profiler' || isProfilerRoot(value)) &&\n (name !== 'execution' || isExecutionRoot(value))\n ) {\n projected[name] = projectRoot(name, value);\n }\n }\n return projected;\n}\n\nfunction profilerCapability(roots: Record<string, RootProjection>): Record<string, unknown> {\n if (roots.profiler !== undefined) {\n return {\n enabled: true,\n capability: 'cpu-profile-v1',\n limits: {\n frameLimit: 'positive-safe-integer',\n eventLimit: 'positive-safe-integer',\n },\n };\n }\n return {\n enabled: false,\n code: 'profiler-not-enabled',\n expected: 'an explicitly opted-in profiler root',\n hint: 'Pass profiler: createProfiler() to createApp or startServer in development, then retry.',\n detail: { enabled: false },\n limits: {\n frameLimit: 'positive-safe-integer',\n eventLimit: 'positive-safe-integer',\n },\n };\n}\n\nfunction buildErrorProjection(): Record<string, { code: number; message: string }> {\n const errors: Record<string, { code: number; message: string }> = {};\n for (const [code, numericCode] of Object.entries(REMOTE_ERROR_CODE_TO_JSONRPC) as Array<\n [RemoteErrorCode, number]\n >) {\n errors[code] = { code: numericCode, message: REMOTE_ERROR_MESSAGES[code] };\n }\n return errors;\n}\n\nexport function buildIntrospectDoc(host: string, port: number, roots: RemoteRootValues): unknown {\n const projectedRoots = projectRoots(roots);\n const schemas: Record<string, unknown> = {\n World: { type: 'object', description: 'The host World instance.' },\n Renderer: { type: 'object', description: 'The host Renderer instance.' },\n Assets: { type: 'object', description: 'The host AssetRegistry instance.' },\n };\n for (const [name, root] of Object.entries(projectedRoots)) {\n schemas[root.type] = { type: 'object', description: root.description };\n if (name === 'profiler') {\n schemas.ProfilerCapture = {\n type: 'object',\n description: 'A bounded ProfileCapture v1 artifact returned through eval.',\n };\n }\n }\n for (const descriptor of roots.introspection ?? []) {\n schemas[descriptor.name] = descriptor;\n }\n return {\n openrpc: '1.3.2',\n info: {\n title: '@forgeax/engine-remote remote eval',\n version: '0.0.0',\n description:\n 'Remote eval server. Methods: eval / introspect. Errors map to JSON-RPC -32001..-32006.',\n },\n servers: [{ name: 'in-process', url: `ws://${host}:${port}/inspector` }],\n methods: [\n {\n name: 'eval',\n summary: 'Evaluate a JavaScript script against live eval roots.',\n params: [\n {\n name: 'script',\n required: true,\n schema: { type: 'string' },\n },\n ],\n result: { name: 'value', schema: { type: 'object' } },\n },\n {\n name: 'introspect',\n summary: 'Return this OpenRPC L2 subset document.',\n params: [],\n result: { name: 'document', schema: { type: 'object' } },\n },\n ],\n roots: projectedRoots,\n capabilities: { profiler: profilerCapability(projectedRoots) },\n components: {\n schemas,\n errors: buildErrorProjection(),\n },\n };\n}\n","// @forgeax/engine-remote/src/server — in-process remote eval server.\n//\n// Wire format: JSON-RPC 2.0 with two methods:\n// - introspect() -> OpenRPC L2 subset doc\n// - eval({script}) -> eval the script against world/renderer/assets\n//\n// Lifecycle:\n// startServer({ port, host?, world, renderer?, assets? })\n// -> Promise<Result<ConsoleHandle, RemoteError>>\n//\n// The sandbox layer is dismantled — eval is full-access (route B).\n\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport type { WebSocket } from 'ws';\nimport { WebSocketServer } from 'ws';\nimport { REMOTE_ERROR_MESSAGES } from './error-messages';\nimport { REMOTE_ERROR_CODE_TO_JSONRPC, RemoteError } from './errors';\nimport { executeScript } from './execute';\nimport {\n buildIntrospectDoc,\n type ComponentIntrospectionDescriptor,\n isExecutionRoot,\n isProfilerRoot,\n} from './introspect';\n\nexport type { ComponentIntrospectionDescriptor } from './introspect';\n\nconst REMOTE_TO_JSONRPC = REMOTE_ERROR_CODE_TO_JSONRPC;\n\nexport type { Result };\n\nexport type ConsoleHandle = {\n readonly port: number;\n readonly close: () => Promise<void>;\n};\n\nexport type StartServerOptions = {\n readonly port: number;\n readonly host?: string;\n readonly world: unknown;\n readonly renderer?: unknown;\n readonly assets?: unknown;\n /** JSON-safe host reflection; the remote package does not know component owners. */\n readonly introspection?: readonly ComponentIntrospectionDescriptor[];\n /** Explicit CPU profiler capability; omitted unless the host opts in. */\n readonly profiler?: unknown;\n /** Structural report provider; remote never imports the App owner. */\n readonly execution?: unknown;\n /** Read-only World-owned simulation inspection root. */\n readonly simulation?: unknown;\n /**\n * Host-owned RHI capture capability for eval-scope injection (plan-strategy D-4).\n * It is exposed as the single `rhiCapture` eval root.\n * Undefined when FORGEAX_ENGINE_RHI_DEBUG !== '1'.\n */\n readonly rhiCapture?: unknown;\n};\n\ntype JsonRpcRequest = {\n jsonrpc?: unknown;\n method?: unknown;\n params?: unknown;\n id?: unknown;\n};\n\ntype JsonRpcError = {\n code: number;\n message: string;\n data?: unknown;\n};\n\ntype JsonRpcResponse = {\n jsonrpc: '2.0';\n id: number | string | null;\n} & ({ result: unknown } | { error: JsonRpcError });\n\nfunction inspectorErrorToJsonRpc(e: RemoteError): JsonRpcError {\n const detail = (e as unknown as { detail?: unknown }).detail;\n const data: Record<string, unknown> = {\n code: e.code,\n expected: e.expected,\n hint: e.hint,\n message: e.message,\n };\n if (detail !== undefined) data.detail = detail;\n return {\n code: REMOTE_TO_JSONRPC[e.code],\n message: REMOTE_ERROR_MESSAGES[e.code],\n data,\n };\n}\n\nfunction respondError(\n id: number | string | null,\n code: number,\n message: string,\n data?: unknown,\n): JsonRpcResponse {\n const error: JsonRpcError = { code, message };\n if (data !== undefined) {\n error.data = data;\n }\n return { jsonrpc: '2.0', id, error };\n}\n\nfunction respondOk(id: number | string | null, result: unknown): JsonRpcResponse {\n return { jsonrpc: '2.0', id, result };\n}\n\nfunction isValidId(v: unknown): v is number | string | null {\n return typeof v === 'number' || typeof v === 'string' || v === null;\n}\n\nasync function handleEnvelope(\n raw: string,\n ctx: {\n world: unknown;\n renderer: unknown;\n assets: unknown;\n rhiCapture: unknown | undefined;\n introspection: readonly ComponentIntrospectionDescriptor[];\n profiler: unknown | undefined;\n execution: unknown | undefined;\n simulation: unknown | undefined;\n host: string;\n port: number;\n },\n): Promise<JsonRpcResponse | null> {\n let parsed: JsonRpcRequest;\n try {\n parsed = JSON.parse(raw) as JsonRpcRequest;\n } catch {\n return respondError(null, -32700, 'Parse error');\n }\n if (typeof parsed.method !== 'string') {\n const id = isValidId(parsed.id) ? parsed.id : null;\n return respondError(id, -32600, 'Invalid Request');\n }\n const isNotification = !('id' in parsed);\n const id = isValidId(parsed.id) ? parsed.id : null;\n\n let response: JsonRpcResponse;\n if (parsed.method === 'introspect') {\n response = respondOk(\n id,\n buildIntrospectDoc(ctx.host, ctx.port, {\n world: ctx.world,\n renderer: ctx.renderer,\n assets: ctx.assets,\n ...(ctx.rhiCapture !== undefined ? { rhiCapture: ctx.rhiCapture } : {}),\n ...(ctx.profiler !== undefined ? { profiler: ctx.profiler } : {}),\n ...(ctx.execution !== undefined ? { execution: ctx.execution } : {}),\n ...(ctx.simulation !== undefined ? { simulation: ctx.simulation } : {}),\n ...(ctx.introspection.length > 0 ? { introspection: ctx.introspection } : {}),\n }),\n );\n } else if (parsed.method === 'eval') {\n const params = parsed.params as { script?: unknown } | undefined;\n const script = params?.script;\n if (typeof script !== 'string') {\n response = respondError(id, -32602, 'Invalid params: eval requires { script: string }');\n } else {\n const result = await executeScript(script, {\n world: ctx.world,\n renderer: ctx.renderer,\n assets: ctx.assets,\n rhiCapture: ctx.rhiCapture,\n profiler: ctx.profiler,\n execution: ctx.execution,\n simulation: ctx.simulation,\n });\n if (result.ok) {\n response = respondOk(id, result.value);\n } else {\n response = { jsonrpc: '2.0', id, error: inspectorErrorToJsonRpc(result.error) };\n }\n }\n } else {\n response = respondError(id, -32601, `Method not found: ${parsed.method}`);\n }\n\n return isNotification ? null : response;\n}\n\n/**\n * Start the remote eval WebSocket server.\n */\nexport function startServer(opts: StartServerOptions): Promise<Result<ConsoleHandle, RemoteError>> {\n return new Promise<Result<ConsoleHandle, RemoteError>>((resolve) => {\n const host = opts.host ?? '127.0.0.1';\n if (host !== '127.0.0.1' && host !== 'localhost') {\n console.warn(\n `[@forgeax/engine-remote] WARNING: binding on non-loopback host '${host}'. P0 trusts localhost only.`,\n );\n }\n const wss = new WebSocketServer({\n host,\n port: opts.port,\n path: '/inspector',\n maxPayload: 1 << 20,\n perMessageDeflate: false,\n });\n\n const world = opts.world;\n const renderer = opts.renderer ?? {};\n const assets = opts.assets ?? {};\n const rhiCapture = opts.rhiCapture;\n const introspection = opts.introspection ?? [];\n const profiler = isProfilerRoot(opts.profiler) ? opts.profiler : undefined;\n const execution = isExecutionRoot(opts.execution) ? opts.execution : undefined;\n const simulation = opts.simulation;\n let settled = false;\n let boundPort = opts.port;\n\n wss.on('error', (e: NodeJS.ErrnoException) => {\n if (settled) {\n console.error('[@forgeax/engine-remote] post-startup error:', e);\n return;\n }\n settled = true;\n const errno = e.code ?? 'unknown';\n resolve(\n err(\n new RemoteError({\n code: 'server-startup-failed',\n expected: 'server starts successfully on requested port',\n hint:\n errno === 'EADDRINUSE'\n ? `port ${opts.port} is already in use; lsof -i :${opts.port} or pick a different port`\n : `listen failed with errno ${errno}; check host '${host}' on this machine; port=${opts.port}`,\n }),\n ),\n );\n });\n\n wss.on('connection', (ws: WebSocket) => {\n ws.on('message', (raw) => {\n const text = typeof raw === 'string' ? raw : raw.toString();\n handleEnvelope(text, {\n world,\n renderer,\n assets,\n rhiCapture,\n introspection,\n profiler,\n execution,\n simulation,\n host,\n port: boundPort,\n })\n .then((response) => {\n if (response !== null && ws.readyState === ws.OPEN) {\n ws.send(JSON.stringify(response));\n }\n })\n .catch((e: unknown) => {\n if (ws.readyState === ws.OPEN) {\n ws.send(JSON.stringify(respondError(null, -32603, `Internal error: ${String(e)}`)));\n }\n });\n });\n });\n\n wss.on('listening', () => {\n if (settled) {\n return;\n }\n settled = true;\n const address = wss.address();\n const port = typeof address === 'object' && address !== null ? address.port : opts.port;\n boundPort = port;\n const handle: ConsoleHandle = {\n port,\n close: () =>\n new Promise<void>((closeResolve) => {\n for (const client of wss.clients) {\n client.terminate();\n }\n wss.close(() => closeResolve());\n }),\n };\n resolve(ok(handle));\n });\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error-messages.ts","../src/errors.ts","../src/execute.ts","../src/introspect.ts","../src/server.ts"],"names":["id"],"mappings":"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","file":"server.mjs","sourcesContent":["import type { RemoteErrorCode } from './errors';\n\nexport const REMOTE_ERROR_MESSAGES: Readonly<Record<RemoteErrorCode, string>> = {\n 'script-syntax-error': 'Script syntax error',\n 'script-runtime-error': 'Script runtime error',\n 'server-startup-failed': 'Server startup failed',\n 'server-not-running': 'Server not reachable',\n 'eval-result-not-serializable': 'Eval result not serializable',\n};\n","// @forgeax/engine-remote/src/errors - RemoteError runtime class + re-export of\n// the closed `RemoteErrorCode` union; 5 members (feat-20260629-inspector-two-layer-model D-5).\n//\n// SSOT split: the **type alias** `RemoteErrorCode`\n// + **structural interface** `RemoteError` live in `@forgeax/engine-types`\n// (parallel to the existing `ShaderErrorCode` placement). This file owns\n// the **runtime class** (`extends Error` + `toJSON()`) only; the class\n// `implements` the type-side interface so the two sides cannot drift\n// (architecture-principles #1 SSOT).\n//\n// Shape (mirrors @forgeax/engine-rhi/src/errors.ts RhiError 4-field surface for\n// charter proposition 5 consistent abstraction):\n// - `RemoteErrorCode` = closed union 5 members (re-exported from types).\n// tsc strict-mode guards exhaustive switch completeness (charter\n// proposition 4); AI users consume via `switch (err.code) { case '...': ... }`\n// with NO default branch.\n// - `RemoteError` class extends Error with three readonly fields .code /\n// .expected / .hint (AGENTS.md \"Errors are structured\"). The constructor\n// auto-composes a human-readable .message (`[RemoteError <code>]\n// expected: <expected>; hint: <hint>`). The class implements the\n// `RemoteError` interface from `@forgeax/engine-types` so callers may\n// alternately type against the structural shape.\n// - `toJSON()` opts into JSON.stringify serialisation so the JSON-RPC 2.0\n// `error.data` payload carries .code / .expected / .hint / .message\n// verbatim through the WebSocket transport.\n\nimport type {\n RemoteErrorCode,\n RemoteErrorDetail,\n RemoteError as RemoteErrorShape,\n} from '@forgeax/engine-types';\n\n// Re-export the type-side alias verbatim so existing\n// `import { type RemoteErrorCode } from '@forgeax/engine-remote'` call sites\n// keep working (charter proposition 1 progressive disclosure — single\n// entry point for AI users).\nexport type { RemoteErrorCode };\n\n/**\n * Structured remote error. Four core fields plus bounded detail, mirroring `@forgeax/engine-rhi`\n * `RhiError` (charter proposition 5 consistent abstraction; AGENTS.md\n * \"Errors are structured\"). The class `implements RemoteErrorShape`\n * (the structural interface re-exported from `@forgeax/engine-types`) so the type\n * SSOT and the runtime class cannot drift.\n *\n * - `.code` closed union member (L1 key signal; switch-able).\n * - `.expected` expected-state description (L2 detail; ai-user-charter\n * proposition 4 requires expected-state copy).\n * - `.hint` actionable recovery guidance (L2 detail; charter\n * proposition 3 machine-readable hint > prose).\n * - `.message` auto-composed `[RemoteError <code>] expected: <expected>;\n * hint: <hint>` so human stack traces still surface the\n * triple. AI users prefer property access (charter\n * proposition 4: no string parsing).\n *\n * Per-code `.expected` + `.hint` templates (requirements §10.2 SSOT):\n *\n * | code | `.expected` | `.hint` |\n * |:--|:--|:--|\n * | `'script-syntax-error'` | `'script body is valid JavaScript'` | `'check syntax position in errMessage; fix and resubmit'` |\n * | `'script-runtime-error'` | `'script executes without throwing'` | `'inspect error; verify symbol availability; eval has full access to world/renderer/assets'` |\n * | `'server-startup-failed'` | `'server starts successfully on requested port'` | `'check if port is already in use (default 5732); pass different port; or kill existing process holding the port'` |\n * | `'server-not-running'` | `'server is reachable at ws://localhost:<port>'` | `'start the demo first; verify app.remote is wired; pass --port to override default 5732'` |\n * | `'eval-result-not-serializable'` | `'eval result is JSON-serializable'` | `'return a JSON-safe value; BigInt and cyclic objects are unsupported over JSON-RPC'` |\n *\n * JSON-RPC 2.0 transport contract: `toJSON()` returns the structured plain\n * object carried verbatim via `error.data` on the WebSocket envelope. The\n * JSON-RPC server-error `.code` numeric segment -32001 ~ -32005 maps 1:1\n * to the 5 members\n * at the dispatch layer.\n *\n * @example AI-user exhaustive switch on the 5 remote-domain alternatives (no default fallback)\n * ```ts\n * import { RemoteError, type RemoteErrorCode } from '@forgeax/engine-remote';\n *\n * function recover(code: RemoteErrorCode): string {\n * switch (code) {\n * case 'script-syntax-error': return 'fix script body syntax and resubmit';\n * case 'script-runtime-error': return 'inspect stack trace; verify symbol availability';\n * case 'server-startup-failed': return 'pick a different port or free port 5732';\n * case 'server-not-running': return 'start demo dev or wire app.remote';\n * case 'eval-result-not-serializable': return 'return a JSON-safe eval result';\n * }\n * }\n * ```\n */\nexport class RemoteError extends Error implements RemoteErrorShape {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail?: RemoteErrorDetail;\n\n constructor(args: {\n code: RemoteErrorCode;\n expected: string;\n hint: string;\n detail?: RemoteErrorDetail;\n }) {\n super(`[RemoteError ${args.code}] expected: ${args.expected}; hint: ${args.hint}`);\n this.name = 'RemoteError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n if (args.detail !== undefined) {\n this.detail = args.detail;\n }\n }\n\n toJSON(): {\n readonly code: RemoteErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly message: string;\n readonly detail?: RemoteErrorDetail;\n } {\n const json = {\n code: this.code,\n expected: this.expected,\n hint: this.hint,\n message: this.message,\n };\n return this.detail === undefined ? json : { ...json, detail: this.detail };\n }\n}\n\n/**\n * SSOT mapping `RemoteErrorCode` -> JSON-RPC `error.code` numeric segment\n * (feat-20260629-inspector-two-layer-model D-5). The 5 remote P0\n * members occupy the closed segment `-32001..-32005`.\n *\n * `server.ts` consumes this map at the JSON-RPC envelope edge so the wire\n * always carries the lock-in numeric and a future drift in either direction\n * raises a TypeScript completeness error (the `Record<RemoteErrorCode,\n * number>` type guard requires every closed-union member to have a\n * numeric).\n */\nexport const REMOTE_ERROR_CODE_TO_JSONRPC: Readonly<Record<RemoteErrorCode, number>> = {\n 'script-syntax-error': -32001,\n 'script-runtime-error': -32002,\n 'server-startup-failed': -32003,\n 'server-not-running': -32004,\n 'eval-result-not-serializable': -32005,\n};\n","// @forgeax/engine-remote/src/execute — async host-realm eval.\n//\n// D-1 route B (2026-06-29): vm.runInContext does not honor\n// importModuleDynamically for Script execution. Host realm compilation via\n// the AsyncFunction constructor resolves `await import` naturally, as long\n// as the import function from the calling module scope is injected.\n//\n// CONTRACT (the one an AI user holds): the script IS the body of an async\n// function with `world` / `renderer` / `assets` / `rhiCapture` / `simulation` / `plugins` / `_import`\n// in scope. So all of these Just Work, un-wrapped:\n// - a bare expression: `renderer.backend` -> auto-returned\n// - top-level await: `await _import('engine-module')`\n// - top-level return: `return world.inspect().entityCount`\n// - multi-statement + return: `const m = await _import(...); return m.x`\n// (the historical `(async () => { ... })()` IIFE form still works too — its\n// returned Promise is awaited.)\n//\n// Implementation (mirrors a REPL, two construction-time-checked attempts):\n// 1. expression mode: compile `return (<script>)` — auto-returns a lone\n// expression (incl. an await-expression), preserving last-expression value.\n// 2. on SyntaxError from (1)'s CONSTRUCTION: statement mode — compile\n// `<script>` as the async body directly, legalizing top-level return +\n// await + arbitrary statements.\n// Only a construction-time SyntaxError advances attempt 1 -> 2, so user code is\n// compiled once and executed at most once (no double side effects). We never use\n// `eval`: indirect eval ran the body as a global program, which is precisely\n// what banned top-level return/await and produced the doc-vs-reality gap.\n//\n// try/catch maps errors:\n// SyntaxError (both attempts fail to compile) -> 'script-syntax-error'\n// RemoteError (re-thrown) -> verbatim\n// anything else -> 'script-runtime-error'\n//\n// The sandbox is dismantled — eval is full-access, no wrapReadOnly.\n// Timeout is removed (route B has no interrupt mechanism; see R6).\n\nimport { RemoteError } from './errors';\n\n// AsyncFunction constructor (not a global binding). An async body is what\n// legalizes top-level `await` AND top-level `return` simultaneously.\nconst AsyncFunction = Object.getPrototypeOf(async () => {}).constructor as FunctionConstructor;\n\nexport type ExecuteContext = {\n readonly world: unknown;\n readonly renderer: unknown;\n readonly assets: unknown;\n readonly rhiCapture?: unknown;\n readonly simulation?: unknown;\n readonly profiler?: unknown;\n readonly execution?: unknown;\n /** Read-only projection of the live plugin Entry/Fiber tree. */\n readonly plugins?: unknown;\n readonly importModule?: (specifier: string) => Promise<unknown>;\n};\n\nexport type ExecuteResult = { ok: true; value: unknown } | { ok: false; error: RemoteError };\n\n// Capture import at module load time. This is the host realm's dynamic\n// import() — when injected into new Function, it resolves module\n// specifiers relative to the module that called executeScript. The remote\n// package stays package-neutral: a host may inject a capability projection\n// through ExecuteContext.importModule, but the transport does not own any\n// engine package vocabulary.\nconst _import = async (specifier: string): Promise<unknown> => import(/* @vite-ignore */ specifier);\n\n// Compile the script as an async function body. Tries expression mode first\n// (auto-return a lone expression), falling back to statement mode on a\n// construction-time SyntaxError. Returns the compiled fn, or throws the\n// statement-mode SyntaxError if BOTH modes fail to parse.\nfunction compile(script: string): FunctionConstructor['prototype'] {\n const params = [\n 'world',\n 'renderer',\n 'assets',\n 'rhiCapture',\n 'simulation',\n 'profiler',\n 'execution',\n 'plugins',\n '_import',\n ] as const;\n try {\n // Expression mode: `return (<expr>)` auto-returns a lone expression\n // (including an await-expression), preserving last-expression-value.\n // Trailing semicolons/whitespace are trimmed so `renderer.backend;`\n // still returns its value (the old indirect-eval completion-value\n // behavior) instead of parsing as a statement that returns undefined.\n const expr = script.replace(/[\\s;]+$/, '');\n return new AsyncFunction(...params, `return (${expr}\\n)`);\n } catch (e) {\n if (!(e instanceof SyntaxError)) throw e;\n // Statement mode: the script IS the async body — legalizes top-level\n // return + await + arbitrary statements. If this also fails to parse,\n // its SyntaxError is the authoritative one to surface.\n return new AsyncFunction(...params, script);\n }\n}\n\n/**\n * Evaluate a JavaScript script against the host engine context.\n *\n * Route B (D-1): host-realm compilation via the AsyncFunction constructor with\n * injected _import. The script is the body of an async function; a lone\n * expression is auto-returned, and top-level `await` / `return` are legal.\n * - _import is available as a parameter for dynamic ESM imports.\n * - rhiCapture is available as a 4th eval-scope root for the RHI capture\n * capability (plan-strategy D-4).\n * - No sandbox — full access reads and writes.\n * - No timeout — host realm eval cannot be interrupted (see R6).\n */\nexport async function executeScript(script: string, ctx: ExecuteContext): Promise<ExecuteResult> {\n try {\n const fn = compile(script);\n // AsyncFunction always returns a Promise; await resolves the value and\n // surfaces any runtime throw into this catch.\n const value: unknown = await fn(\n ctx.world,\n ctx.renderer,\n ctx.assets,\n ctx.rhiCapture,\n ctx.simulation,\n ctx.profiler,\n ctx.execution,\n ctx.plugins,\n ctx.importModule ?? _import,\n );\n\n return { ok: true, value };\n } catch (e) {\n // 1. RemoteError re-thrown from within the script surfaces verbatim.\n if (e instanceof RemoteError) {\n return { ok: false, error: e };\n }\n\n // 2. SyntaxError: both compile() attempts failed to parse the script.\n if (e instanceof SyntaxError) {\n const msg = e.message;\n return {\n ok: false,\n error: new RemoteError({\n code: 'script-syntax-error',\n expected: 'script body is valid JavaScript',\n hint: `check syntax near: ${msg}; fix and resubmit`,\n }),\n };\n }\n\n // 3. Runtime error (throws during function execution).\n const rawMessage = e instanceof Error ? e.message : String(e);\n return {\n ok: false,\n error: new RemoteError({\n code: 'script-runtime-error',\n expected: 'script executes without throwing',\n hint: `inspect error; verify symbol availability; eval has full access to world/renderer/assets (errMessage: ${rawMessage})`,\n }),\n };\n }\n}\n","import { REMOTE_ERROR_MESSAGES } from './error-messages';\nimport { REMOTE_ERROR_CODE_TO_JSONRPC, type RemoteErrorCode } from './errors';\n\nexport interface ComponentIntrospectionDescriptor {\n readonly name: string;\n readonly schema: Readonly<Record<string, string>>;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly meta: Readonly<Record<string, unknown>>;\n}\n\nexport interface RemoteRootValues {\n readonly world: unknown;\n readonly renderer: unknown;\n readonly assets: unknown;\n readonly rhiCapture?: unknown;\n readonly profiler?: unknown;\n readonly execution?: unknown;\n /** Read-only World-owned simulation summary; no restore/replay operation. */\n readonly simulation?: unknown;\n /** Read-only projection of the DevKit plugin desired/live tree. */\n readonly plugins?: unknown;\n readonly introspection?: readonly ComponentIntrospectionDescriptor[];\n}\n\ntype RootProjection = {\n readonly available: true;\n readonly type: string;\n readonly description: string;\n readonly capability?: string;\n readonly phaseCatalog?: unknown;\n readonly operations?: {\n readonly startCapture: string;\n readonly latestCapture: string;\n };\n};\n\nexport function isProfilerRoot(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n const root = value as {\n startCapture?: unknown;\n latestCapture?: unknown;\n activeSession?: unknown;\n phaseCatalog?: unknown;\n };\n return (\n typeof root.startCapture === 'function' &&\n typeof root.latestCapture === 'function' &&\n typeof root.activeSession === 'function' &&\n root.phaseCatalog !== undefined\n );\n}\n\nexport function isExecutionRoot(value: unknown): value is { report(): unknown } {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as { report?: unknown }).report === 'function'\n );\n}\n\nfunction profilerPhaseCatalog(value: unknown): unknown {\n if (value === null || typeof value !== 'object') return undefined;\n const catalog = (value as { phaseCatalog?: unknown }).phaseCatalog;\n return catalog === undefined ? undefined : catalog;\n}\n\nfunction projectRoot(name: string, value: unknown): RootProjection {\n const descriptions: Record<string, { type: string; description: string }> = {\n world: { type: 'World', description: 'The host World instance.' },\n renderer: { type: 'Renderer', description: 'The host Renderer instance.' },\n assets: { type: 'AssetRegistry', description: 'The host AssetRegistry instance.' },\n rhiCapture: {\n type: 'RhiCapture',\n description: 'The opt-in RHI frame capture capability.',\n },\n profiler: {\n type: 'Profiler',\n description: 'The opt-in CPU profiler for bounded App and Render capture.',\n },\n execution: {\n type: 'ExecutionReportProvider',\n description: 'The host execution report provider for tier, health, performance, and fault.',\n },\n simulation: {\n type: 'SimulationInspection',\n description:\n 'A read-only World-owned simulation record, participant, trace, and report summary.',\n },\n plugins: {\n type: 'PluginProjection',\n description: 'The desired and live plugin Entry/Fiber projection owned by DevKit.',\n },\n };\n const descriptor = descriptions[name] ?? { type: 'unknown', description: 'A live eval root.' };\n return {\n available: true,\n ...descriptor,\n ...(name === 'profiler'\n ? {\n capability: 'cpu-profile-v1',\n operations: {\n startCapture: 'profiler.startCapture({ frameLimit, eventLimit })',\n latestCapture: 'profiler.latestCapture() after the host reaches the frame boundary',\n },\n ...(profilerPhaseCatalog(value) === undefined\n ? {}\n : { phaseCatalog: profilerPhaseCatalog(value) }),\n }\n : name === 'execution'\n ? {\n capability: 'execution-report-v1',\n }\n : name === 'rhiCapture'\n ? {\n capability: 'rhi-capture-v1',\n }\n : {}),\n };\n}\n\nfunction projectRoots(roots: RemoteRootValues): Record<string, RootProjection> {\n const projected: Record<string, RootProjection> = {};\n for (const [name, value] of Object.entries(roots)) {\n if (\n value !== undefined &&\n (name !== 'profiler' || isProfilerRoot(value)) &&\n (name !== 'execution' || isExecutionRoot(value))\n ) {\n projected[name] = projectRoot(name, value);\n }\n }\n return projected;\n}\n\nfunction profilerCapability(roots: Record<string, RootProjection>): Record<string, unknown> {\n if (roots.profiler !== undefined) {\n return {\n enabled: true,\n capability: 'cpu-profile-v1',\n limits: {\n frameLimit: 'positive-safe-integer',\n eventLimit: 'positive-safe-integer',\n },\n };\n }\n return {\n enabled: false,\n code: 'profiler-not-enabled',\n expected: 'an explicitly opted-in profiler root',\n hint: 'Pass profiler: createProfiler() to createApp or startServer in development, then retry.',\n detail: { enabled: false },\n limits: {\n frameLimit: 'positive-safe-integer',\n eventLimit: 'positive-safe-integer',\n },\n };\n}\n\nfunction buildErrorProjection(): Record<string, { code: number; message: string }> {\n const errors: Record<string, { code: number; message: string }> = {};\n for (const [code, numericCode] of Object.entries(REMOTE_ERROR_CODE_TO_JSONRPC) as Array<\n [RemoteErrorCode, number]\n >) {\n errors[code] = { code: numericCode, message: REMOTE_ERROR_MESSAGES[code] };\n }\n return errors;\n}\n\nexport function buildIntrospectDoc(host: string, port: number, roots: RemoteRootValues): unknown {\n const projectedRoots = projectRoots(roots);\n const schemas: Record<string, unknown> = {\n World: { type: 'object', description: 'The host World instance.' },\n Renderer: { type: 'object', description: 'The host Renderer instance.' },\n Assets: { type: 'object', description: 'The host AssetRegistry instance.' },\n };\n for (const [name, root] of Object.entries(projectedRoots)) {\n schemas[root.type] = { type: 'object', description: root.description };\n if (name === 'profiler') {\n schemas.ProfilerCapture = {\n type: 'object',\n description: 'A bounded ProfileCapture v1 artifact returned through eval.',\n };\n }\n }\n for (const descriptor of roots.introspection ?? []) {\n schemas[descriptor.name] = descriptor;\n }\n return {\n openrpc: '1.3.2',\n info: {\n title: '@forgeax/engine-remote remote eval',\n version: '0.0.0',\n description:\n 'Remote eval server. Methods: eval / introspect. Errors map to JSON-RPC -32001..-32006.',\n },\n servers: [{ name: 'in-process', url: `ws://${host}:${port}/inspector` }],\n methods: [\n {\n name: 'eval',\n summary: 'Evaluate a JavaScript script against live eval roots.',\n params: [\n {\n name: 'script',\n required: true,\n schema: { type: 'string' },\n },\n ],\n result: { name: 'value', schema: { type: 'object' } },\n },\n {\n name: 'introspect',\n summary: 'Return this OpenRPC L2 subset document.',\n params: [],\n result: { name: 'document', schema: { type: 'object' } },\n },\n ],\n roots: projectedRoots,\n capabilities: { profiler: profilerCapability(projectedRoots) },\n components: {\n schemas,\n errors: buildErrorProjection(),\n },\n };\n}\n","// @forgeax/engine-remote/src/server — in-process remote eval server.\n//\n// Wire format: JSON-RPC 2.0 with two methods:\n// - introspect() -> OpenRPC L2 subset doc\n// - eval({script}) -> eval the script against world/renderer/assets\n//\n// Lifecycle:\n// startServer({ port, host?, world, renderer?, assets? })\n// -> Promise<Result<ConsoleHandle, RemoteError>>\n//\n// The sandbox layer is dismantled — eval is full-access (route B).\n\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport type { WebSocket } from 'ws';\nimport { WebSocketServer } from 'ws';\nimport { REMOTE_ERROR_MESSAGES } from './error-messages';\nimport { REMOTE_ERROR_CODE_TO_JSONRPC, RemoteError } from './errors';\nimport { executeScript } from './execute';\nimport {\n buildIntrospectDoc,\n type ComponentIntrospectionDescriptor,\n isExecutionRoot,\n isProfilerRoot,\n} from './introspect';\n\nexport type { ComponentIntrospectionDescriptor } from './introspect';\n\nconst REMOTE_TO_JSONRPC = REMOTE_ERROR_CODE_TO_JSONRPC;\n\nexport type { Result };\n\nexport type ConsoleHandle = {\n readonly port: number;\n readonly close: () => Promise<void>;\n};\n\nexport type StartServerOptions = {\n readonly port: number;\n readonly host?: string;\n readonly world: unknown;\n readonly renderer?: unknown;\n readonly assets?: unknown;\n /** JSON-safe host reflection; the remote package does not know component owners. */\n readonly introspection?: readonly ComponentIntrospectionDescriptor[];\n /** Explicit CPU profiler capability; omitted unless the host opts in. */\n readonly profiler?: unknown;\n /** Structural report provider; remote never imports the App owner. */\n readonly execution?: unknown;\n /** Read-only World-owned simulation inspection root. */\n readonly simulation?: unknown;\n /** Read-only DevKit plugin projection; Remote never owns plugin state. */\n readonly plugins?: unknown;\n /**\n * Host-owned RHI capture capability for eval-scope injection (plan-strategy D-4).\n * It is exposed as the single `rhiCapture` eval root.\n * Undefined when FORGEAX_ENGINE_RHI_DEBUG !== '1'.\n */\n readonly rhiCapture?: unknown;\n};\n\ntype JsonRpcRequest = {\n jsonrpc?: unknown;\n method?: unknown;\n params?: unknown;\n id?: unknown;\n};\n\ntype JsonRpcError = {\n code: number;\n message: string;\n data?: unknown;\n};\n\ntype JsonRpcResponse = {\n jsonrpc: '2.0';\n id: number | string | null;\n} & ({ result: unknown } | { error: JsonRpcError });\n\nfunction inspectorErrorToJsonRpc(e: RemoteError): JsonRpcError {\n const detail = (e as unknown as { detail?: unknown }).detail;\n const data: Record<string, unknown> = {\n code: e.code,\n expected: e.expected,\n hint: e.hint,\n message: e.message,\n };\n if (detail !== undefined) data.detail = detail;\n return {\n code: REMOTE_TO_JSONRPC[e.code],\n message: REMOTE_ERROR_MESSAGES[e.code],\n data,\n };\n}\n\nfunction respondError(\n id: number | string | null,\n code: number,\n message: string,\n data?: unknown,\n): JsonRpcResponse {\n const error: JsonRpcError = { code, message };\n if (data !== undefined) {\n error.data = data;\n }\n return { jsonrpc: '2.0', id, error };\n}\n\nfunction respondOk(id: number | string | null, result: unknown): JsonRpcResponse {\n return { jsonrpc: '2.0', id, result };\n}\n\nfunction isValidId(v: unknown): v is number | string | null {\n return typeof v === 'number' || typeof v === 'string' || v === null;\n}\n\nasync function handleEnvelope(\n raw: string,\n ctx: {\n world: unknown;\n renderer: unknown;\n assets: unknown;\n rhiCapture: unknown | undefined;\n introspection: readonly ComponentIntrospectionDescriptor[];\n profiler: unknown | undefined;\n execution: unknown | undefined;\n simulation: unknown | undefined;\n plugins: unknown | undefined;\n host: string;\n port: number;\n },\n): Promise<JsonRpcResponse | null> {\n let parsed: JsonRpcRequest;\n try {\n parsed = JSON.parse(raw) as JsonRpcRequest;\n } catch {\n return respondError(null, -32700, 'Parse error');\n }\n if (typeof parsed.method !== 'string') {\n const id = isValidId(parsed.id) ? parsed.id : null;\n return respondError(id, -32600, 'Invalid Request');\n }\n const isNotification = !('id' in parsed);\n const id = isValidId(parsed.id) ? parsed.id : null;\n\n let response: JsonRpcResponse;\n if (parsed.method === 'introspect') {\n response = respondOk(\n id,\n buildIntrospectDoc(ctx.host, ctx.port, {\n world: ctx.world,\n renderer: ctx.renderer,\n assets: ctx.assets,\n ...(ctx.rhiCapture !== undefined ? { rhiCapture: ctx.rhiCapture } : {}),\n ...(ctx.profiler !== undefined ? { profiler: ctx.profiler } : {}),\n ...(ctx.execution !== undefined ? { execution: ctx.execution } : {}),\n ...(ctx.simulation !== undefined ? { simulation: ctx.simulation } : {}),\n ...(ctx.plugins !== undefined ? { plugins: ctx.plugins } : {}),\n ...(ctx.introspection.length > 0 ? { introspection: ctx.introspection } : {}),\n }),\n );\n } else if (parsed.method === 'eval') {\n const params = parsed.params as { script?: unknown } | undefined;\n const script = params?.script;\n if (typeof script !== 'string') {\n response = respondError(id, -32602, 'Invalid params: eval requires { script: string }');\n } else {\n const result = await executeScript(script, {\n world: ctx.world,\n renderer: ctx.renderer,\n assets: ctx.assets,\n rhiCapture: ctx.rhiCapture,\n profiler: ctx.profiler,\n execution: ctx.execution,\n simulation: ctx.simulation,\n plugins: ctx.plugins,\n });\n if (result.ok) {\n response = respondOk(id, result.value);\n } else {\n response = { jsonrpc: '2.0', id, error: inspectorErrorToJsonRpc(result.error) };\n }\n }\n } else {\n response = respondError(id, -32601, `Method not found: ${parsed.method}`);\n }\n\n return isNotification ? null : response;\n}\n\n/**\n * Start the remote eval WebSocket server.\n */\nexport function startServer(opts: StartServerOptions): Promise<Result<ConsoleHandle, RemoteError>> {\n return new Promise<Result<ConsoleHandle, RemoteError>>((resolve) => {\n const host = opts.host ?? '127.0.0.1';\n if (host !== '127.0.0.1' && host !== 'localhost') {\n console.warn(\n `[@forgeax/engine-remote] WARNING: binding on non-loopback host '${host}'. P0 trusts localhost only.`,\n );\n }\n const wss = new WebSocketServer({\n host,\n port: opts.port,\n path: '/inspector',\n maxPayload: 1 << 20,\n perMessageDeflate: false,\n });\n\n const world = opts.world;\n const renderer = opts.renderer ?? {};\n const assets = opts.assets ?? {};\n const rhiCapture = opts.rhiCapture;\n const introspection = opts.introspection ?? [];\n const profiler = isProfilerRoot(opts.profiler) ? opts.profiler : undefined;\n const execution = isExecutionRoot(opts.execution) ? opts.execution : undefined;\n const simulation = opts.simulation;\n const plugins = opts.plugins;\n let settled = false;\n let boundPort = opts.port;\n\n wss.on('error', (e: NodeJS.ErrnoException) => {\n if (settled) {\n console.error('[@forgeax/engine-remote] post-startup error:', e);\n return;\n }\n settled = true;\n const errno = e.code ?? 'unknown';\n resolve(\n err(\n new RemoteError({\n code: 'server-startup-failed',\n expected: 'server starts successfully on requested port',\n hint:\n errno === 'EADDRINUSE'\n ? `port ${opts.port} is already in use; lsof -i :${opts.port} or pick a different port`\n : `listen failed with errno ${errno}; check host '${host}' on this machine; port=${opts.port}`,\n }),\n ),\n );\n });\n\n wss.on('connection', (ws: WebSocket) => {\n ws.on('message', (raw) => {\n const text = typeof raw === 'string' ? raw : raw.toString();\n handleEnvelope(text, {\n world,\n renderer,\n assets,\n rhiCapture,\n introspection,\n profiler,\n execution,\n simulation,\n plugins,\n host,\n port: boundPort,\n })\n .then((response) => {\n if (response !== null && ws.readyState === ws.OPEN) {\n ws.send(JSON.stringify(response));\n }\n })\n .catch((e: unknown) => {\n if (ws.readyState === ws.OPEN) {\n ws.send(JSON.stringify(respondError(null, -32603, `Internal error: ${String(e)}`)));\n }\n });\n });\n });\n\n wss.on('listening', () => {\n if (settled) {\n return;\n }\n settled = true;\n const address = wss.address();\n const port = typeof address === 'object' && address !== null ? address.port : opts.port;\n boundPort = port;\n const handle: ConsoleHandle = {\n port,\n close: () =>\n new Promise<void>((closeResolve) => {\n for (const client of wss.clients) {\n client.terminate();\n }\n wss.close(() => closeResolve());\n }),\n };\n resolve(ok(handle));\n });\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgeax/engine-remote",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.23",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"LICENSE"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@forgeax/engine-profiler": "0.1.
|
|
45
|
-
"@forgeax/engine-types": "0.1.
|
|
44
|
+
"@forgeax/engine-profiler": "0.1.23",
|
|
45
|
+
"@forgeax/engine-types": "0.1.23",
|
|
46
46
|
"ws": "^8.20.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { buildIntrospectDoc } from '../introspect';
|
|
3
|
+
|
|
4
|
+
describe('plugin introspection projection', () => {
|
|
5
|
+
it('projects desired and live plugin state without adding a remote method', () => {
|
|
6
|
+
const document = buildIntrospectDoc('127.0.0.1', 5732, {
|
|
7
|
+
world: {},
|
|
8
|
+
renderer: {},
|
|
9
|
+
assets: {},
|
|
10
|
+
plugins: {
|
|
11
|
+
desired: [{ id: 'root', name: './assets/plugin.ts', realm: 'engine' }],
|
|
12
|
+
live: [{ id: 'root', name: './assets/plugin.ts', state: 'active' }],
|
|
13
|
+
},
|
|
14
|
+
}) as {
|
|
15
|
+
roots: Record<string, { available: boolean; type: string }>;
|
|
16
|
+
methods: readonly { name: string }[];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
expect(document.roots.plugins).toMatchObject({
|
|
20
|
+
available: true,
|
|
21
|
+
type: 'PluginProjection',
|
|
22
|
+
});
|
|
23
|
+
expect(document.methods.map((method) => method.name)).toEqual(['eval', 'introspect']);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('omits plugin state when no live projection is supplied', () => {
|
|
27
|
+
const document = buildIntrospectDoc('127.0.0.1', 5732, {
|
|
28
|
+
world: {},
|
|
29
|
+
renderer: {},
|
|
30
|
+
assets: {},
|
|
31
|
+
}) as {
|
|
32
|
+
roots: Record<string, unknown>;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
expect(document.roots.plugins).toBeUndefined();
|
|
36
|
+
});
|
|
37
|
+
});
|
package/src/execute.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// as the import function from the calling module scope is injected.
|
|
7
7
|
//
|
|
8
8
|
// CONTRACT (the one an AI user holds): the script IS the body of an async
|
|
9
|
-
// function with `world` / `renderer` / `assets` / `rhiCapture` / `simulation` / `_import`
|
|
9
|
+
// function with `world` / `renderer` / `assets` / `rhiCapture` / `simulation` / `plugins` / `_import`
|
|
10
10
|
// in scope. So all of these Just Work, un-wrapped:
|
|
11
11
|
// - a bare expression: `renderer.backend` -> auto-returned
|
|
12
12
|
// - top-level await: `await _import('engine-module')`
|
|
@@ -48,6 +48,8 @@ export type ExecuteContext = {
|
|
|
48
48
|
readonly simulation?: unknown;
|
|
49
49
|
readonly profiler?: unknown;
|
|
50
50
|
readonly execution?: unknown;
|
|
51
|
+
/** Read-only projection of the live plugin Entry/Fiber tree. */
|
|
52
|
+
readonly plugins?: unknown;
|
|
51
53
|
readonly importModule?: (specifier: string) => Promise<unknown>;
|
|
52
54
|
};
|
|
53
55
|
|
|
@@ -59,7 +61,7 @@ export type ExecuteResult = { ok: true; value: unknown } | { ok: false; error: R
|
|
|
59
61
|
// package stays package-neutral: a host may inject a capability projection
|
|
60
62
|
// through ExecuteContext.importModule, but the transport does not own any
|
|
61
63
|
// engine package vocabulary.
|
|
62
|
-
const _import = async (specifier: string): Promise<unknown> => import(specifier);
|
|
64
|
+
const _import = async (specifier: string): Promise<unknown> => import(/* @vite-ignore */ specifier);
|
|
63
65
|
|
|
64
66
|
// Compile the script as an async function body. Tries expression mode first
|
|
65
67
|
// (auto-return a lone expression), falling back to statement mode on a
|
|
@@ -74,6 +76,7 @@ function compile(script: string): FunctionConstructor['prototype'] {
|
|
|
74
76
|
'simulation',
|
|
75
77
|
'profiler',
|
|
76
78
|
'execution',
|
|
79
|
+
'plugins',
|
|
77
80
|
'_import',
|
|
78
81
|
] as const;
|
|
79
82
|
try {
|
|
@@ -118,6 +121,7 @@ export async function executeScript(script: string, ctx: ExecuteContext): Promis
|
|
|
118
121
|
ctx.simulation,
|
|
119
122
|
ctx.profiler,
|
|
120
123
|
ctx.execution,
|
|
124
|
+
ctx.plugins,
|
|
121
125
|
ctx.importModule ?? _import,
|
|
122
126
|
);
|
|
123
127
|
|
package/src/introspect.ts
CHANGED
|
@@ -17,6 +17,8 @@ export interface RemoteRootValues {
|
|
|
17
17
|
readonly execution?: unknown;
|
|
18
18
|
/** Read-only World-owned simulation summary; no restore/replay operation. */
|
|
19
19
|
readonly simulation?: unknown;
|
|
20
|
+
/** Read-only projection of the DevKit plugin desired/live tree. */
|
|
21
|
+
readonly plugins?: unknown;
|
|
20
22
|
readonly introspection?: readonly ComponentIntrospectionDescriptor[];
|
|
21
23
|
}
|
|
22
24
|
|
|
@@ -84,6 +86,10 @@ function projectRoot(name: string, value: unknown): RootProjection {
|
|
|
84
86
|
description:
|
|
85
87
|
'A read-only World-owned simulation record, participant, trace, and report summary.',
|
|
86
88
|
},
|
|
89
|
+
plugins: {
|
|
90
|
+
type: 'PluginProjection',
|
|
91
|
+
description: 'The desired and live plugin Entry/Fiber projection owned by DevKit.',
|
|
92
|
+
},
|
|
87
93
|
};
|
|
88
94
|
const descriptor = descriptions[name] ?? { type: 'unknown', description: 'A live eval root.' };
|
|
89
95
|
return {
|
package/src/server.ts
CHANGED
|
@@ -48,6 +48,8 @@ export type StartServerOptions = {
|
|
|
48
48
|
readonly execution?: unknown;
|
|
49
49
|
/** Read-only World-owned simulation inspection root. */
|
|
50
50
|
readonly simulation?: unknown;
|
|
51
|
+
/** Read-only DevKit plugin projection; Remote never owns plugin state. */
|
|
52
|
+
readonly plugins?: unknown;
|
|
51
53
|
/**
|
|
52
54
|
* Host-owned RHI capture capability for eval-scope injection (plan-strategy D-4).
|
|
53
55
|
* It is exposed as the single `rhiCapture` eval root.
|
|
@@ -122,6 +124,7 @@ async function handleEnvelope(
|
|
|
122
124
|
profiler: unknown | undefined;
|
|
123
125
|
execution: unknown | undefined;
|
|
124
126
|
simulation: unknown | undefined;
|
|
127
|
+
plugins: unknown | undefined;
|
|
125
128
|
host: string;
|
|
126
129
|
port: number;
|
|
127
130
|
},
|
|
@@ -151,6 +154,7 @@ async function handleEnvelope(
|
|
|
151
154
|
...(ctx.profiler !== undefined ? { profiler: ctx.profiler } : {}),
|
|
152
155
|
...(ctx.execution !== undefined ? { execution: ctx.execution } : {}),
|
|
153
156
|
...(ctx.simulation !== undefined ? { simulation: ctx.simulation } : {}),
|
|
157
|
+
...(ctx.plugins !== undefined ? { plugins: ctx.plugins } : {}),
|
|
154
158
|
...(ctx.introspection.length > 0 ? { introspection: ctx.introspection } : {}),
|
|
155
159
|
}),
|
|
156
160
|
);
|
|
@@ -168,6 +172,7 @@ async function handleEnvelope(
|
|
|
168
172
|
profiler: ctx.profiler,
|
|
169
173
|
execution: ctx.execution,
|
|
170
174
|
simulation: ctx.simulation,
|
|
175
|
+
plugins: ctx.plugins,
|
|
171
176
|
});
|
|
172
177
|
if (result.ok) {
|
|
173
178
|
response = respondOk(id, result.value);
|
|
@@ -209,6 +214,7 @@ export function startServer(opts: StartServerOptions): Promise<Result<ConsoleHan
|
|
|
209
214
|
const profiler = isProfilerRoot(opts.profiler) ? opts.profiler : undefined;
|
|
210
215
|
const execution = isExecutionRoot(opts.execution) ? opts.execution : undefined;
|
|
211
216
|
const simulation = opts.simulation;
|
|
217
|
+
const plugins = opts.plugins;
|
|
212
218
|
let settled = false;
|
|
213
219
|
let boundPort = opts.port;
|
|
214
220
|
|
|
@@ -245,6 +251,7 @@ export function startServer(opts: StartServerOptions): Promise<Result<ConsoleHan
|
|
|
245
251
|
profiler,
|
|
246
252
|
execution,
|
|
247
253
|
simulation,
|
|
254
|
+
plugins,
|
|
248
255
|
host,
|
|
249
256
|
port: boundPort,
|
|
250
257
|
})
|
package/dist/.tsbuildinfo
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../types/dist/animation-target.d.ts","../../types/dist/asset-errors.d.ts","../../types/dist/result.d.ts","../../types/dist/asset-evidence.d.ts","../../types/dist/asset.d.ts","../../types/dist/material/color-space.d.ts","../../types/dist/material/asset.d.ts","../../types/dist/vfx.d.ts","../../types/dist/asset-runtime.d.ts","../../types/dist/handle.d.ts","../../types/dist/material/errors.d.ts","../../types/dist/material/resolve.d.ts","../../types/dist/material/index.d.ts","../../types/dist/asset-producer.d.ts","../../types/dist/catalog.d.ts","../../types/dist/runtime-scope.d.ts","../../types/dist/texture/asset.d.ts","../../types/dist/texture/errors.d.ts","../../types/dist/texture/layout.d.ts","../../types/dist/texture/index.d.ts","../../types/dist/derive-paramschema.d.ts","../../types/dist/import.d.ts","../../types/dist/index.d.ts","../../types/dist/inspector-client.d.ts","../src/defineSubcommand.ts","../src/cli.ts","../src/errors.ts","../src/error-messages.ts","../src/execute.ts","../src/index.ts","../src/introspect.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.mts","../src/server.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.11/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/tasks.d-DEYaIMIu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hmrPayload.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/customEvent.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.11/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/index.d.ts","../src/__tests__/cli-defaults.unit.test.ts","../src/__tests__/console.unit.test.ts","../src/__tests__/errors.unit.test.ts","../src/__tests__/execute-browser-safe.unit.test.ts","../../profiler/dist/clock.d.ts","../../profiler/dist/generated/profile-capture.d.ts","../../profiler/dist/types.d.ts","../../profiler/dist/errors.d.ts","../../profiler/dist/recorder.d.ts","../../profiler/dist/profiler.d.ts","../../profiler/dist/browser-user-timing.d.ts","../../profiler/dist/schema.d.ts","../../profiler/dist/model.d.ts","../../profiler/dist/compare.d.ts","../../profiler/dist/index.d.ts","../src/__tests__/execute-profiler-root.browser.test.ts","../src/__tests__/execute.async.test.ts","../src/__tests__/execution-report-root.unit.test.ts","../src/__tests__/introspect-profiler.unit.test.ts","../src/__tests__/method-roster-profiler.test.ts","../src/__tests__/rhi-capture-remote.integration.test.ts","../src/__tests__/server.unit.test.ts","../src/__tests__/simulation-inspect.integration.test.ts"],"fileIdsList":[[96,142],[96,142,221,222],[96,139,142],[96,141,142],[142],[96,142,147,175],[96,142,143,148,153,161,172,183],[96,142,143,144,153,161],[91,92,93,96,142],[96,142,145,184],[96,142,146,147,154,162],[96,142,147,172,180],[96,142,148,150,153,161],[96,141,142,149],[96,142,150,151],[96,142,152,153],[96,141,142,153],[96,142,153,154,155,172,183],[96,142,153,154,155,168,172,175],[96,142,150,153,156,161,172,183],[96,142,153,154,156,157,161,172,180,183],[96,142,156,158,172,180,183],[94,95,96,97,98,99,100,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189],[96,142,153,159],[96,142,160,183,188],[96,142,150,153,161,172],[96,142,162],[96,142,163],[96,141,142,164],[96,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189],[96,142,166],[96,142,167],[96,142,153,168,169],[96,142,168,170,184,186],[96,142,153,172,173,175],[96,142,174,175],[96,142,172,173],[96,142,175],[96,142,176],[96,139,142,172,177],[96,142,153,178,179],[96,142,178,179],[96,142,147,161,172,180],[96,142,181],[96,142,161,182],[96,142,156,167,183],[96,142,147,184],[96,142,172,185],[96,142,160,186],[96,142,187],[96,137,142],[96,137,142,153,155,164,172,175,183,186,188],[96,142,172,189],[96,142,153,156,158,161,172,180,183,189,190],[96,142,194,200,218,219,220,223],[96,142,230],[96,142,230,231],[96,142,198,200,201],[96,142,198,200],[96,142,198],[96,142,193,198,209,210],[96,142,193,198,209],[96,142,217],[96,142,193,199],[96,142,193],[96,142,195],[96,142,193,194,195,196,197],[96,142,236,237],[96,142,236,237,238,239],[96,142,236,238],[96,142,236],[96,109,113,142,183],[96,109,142,172,183],[96,104,142],[96,106,109,142,180,183],[96,142,161,180],[96,142,190],[96,104,142,190],[96,106,109,142,161,183],[96,101,102,105,108,142,153,172,183],[96,109,116,142],[96,101,107,142],[96,109,130,131,142],[96,105,109,142,175,183,190],[96,130,142,190],[96,103,104,142,190],[96,109,142],[96,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,142],[96,109,124,142],[96,109,116,117,142],[96,107,109,117,118,142],[96,108,142],[96,101,104,109,142],[96,109,113,117,118,142],[96,113,142],[96,107,109,112,142,183],[96,101,106,109,116,142],[96,142,172],[96,104,109,130,142,188,190],[96,142,204],[96,142,204,205,206,207],[96,142,206],[96,142,202,225,226,228],[96,142,202,203,215,228],[96,142,193,200,202,203,211,228],[96,142,208],[96,142,193,202,203,211,224,227,228],[96,142,202,203,208,211,228],[96,142,202,225,226,227,228],[96,142,202,208,212,213,214,228],[96,142,193,198,200,202,203,208,211,212,213,214,215,216,218,224,225,226,227,228,229,232,233,234,235,240],[96,142,193,200,202,203,211,212,225,226,227,228,233],[96,142,248,251],[96,142,248,253,254],[96,142,248],[96,142,246,248,249,250,251,252,253,254,255],[96,142,248,253],[96,142,246,248,249,250],[96,142,246,248,249],[96,142,247,248],[96,142,247],[83,85,96,142,154,163,183,241],[83,85,86,96,142,154,163,183,191,192,241],[86,96,142,241],[96,142,154,183,241],[88,96,142,241,256],[88,96,142,241],[88,90,96,142,241],[90,96,142,241,256],[96,142,191,192,241,256],[82,88,90,96,142,241],[86,96,142,191,192,241,256],[83,90,96,142,192,241],[82,83,84,96,142,155,183],[86,96,142],[82,96,142],[86,87,96,142],[82,86,87,88,90,96,142,191],[61,62,64,96,142],[61,62,64,82,96,142],[63,96,142],[62,64,73,96,142],[61,73,74,75,82,96,142],[60,61,62,64,66,67,68,69,72,73,74,75,76,79,80,81,96,142],[65,82,96,142],[66,96,142],[65,66,70,71,96,142],[62,66,70,96,142],[73,74,96,142],[62,76,96,142],[76,77,78,96,142],[62,76,77,96,142]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},"89fe170d9a59f81cd9a9d95de3278f108ff91491810b2529cc0ffb502a57b6c0","0b4928041c807c01b33b1fa028236df635c52f7acff5a40f2c2d0d677b53428b","5ad2e5b8b17893d0eb1f11a1b6e8c03b17344be03a6a72a624cd38ab05fe4d5c","6a1e553079e654a1771463e9eeb98ea4f7bb4b6417a5237d4fdf9b546d49647f","7f11be86b9ac5c2cd5127cd9d40ccc7694c58868a3157692a153d452fc171525","6e3488ee1183ea915eb43f08aebc5f75e30be25aef1f678d1965324bdd7506e1","08b2edc86cfd71fe5a832912df79e79040c90c9df60ed2af1dc50f7baef36aeb","a318d8734523d9e750681e7b8e685ef817d4049c5612451f4e849da8b2b572a9","8b52dd8be86f44f871db89a6c1f77f7585688d53141ff55b6c5fac3eb67b1241","beae2d03867dde9fdf8da461c7e7e84da71612842422d4b482ab1c2a15fe6b12","2aa457dd6699d3015c3c98457ac72a2dd47349f75a1edddbace0ee86dd7177c9","51342c51a9090c0bc8bae60c5ec1a0f46d6d44db84392f12a8cd46e6d8a9f617","ae777307a0baeb9b5d7ba18e6a029a54eb0b612b1491591dcedb020cc8d36f97","d7ba738e316b7baed10ca49cc156b57b8c973b747bec6612e62a925e9f7f33a4","1d5292578fcf0329a43ef19fe2481d7d1cde75e75610019a7897c70dcfff0b31","459b3765e622008ed590474ae6b61ab55107a7b9529a28d05087a6fef51d7248","d4acac107ca8b949e32947d9b5afa27721584f4ffd7ad7a4008fae892a4ec913","b52569fa5c5793a182d033b2fc7443e27205625dc67782a03d2e2e972a2918f3","097ebdc98e0de1205b1104df5038026ca5830b80faee3707b78e7c28ce6dde55","1ae177260d032e05e62f0432227af19a857b327fa604a9b34baa535f44db130e","e1f11ad703121f97a74001059d054aba25c9c4662af44da05ead0a247fe18742","d9c64d02dfe3a9c74da35fdbcc645cf4e8d4ca0f4162ec312de51474103ac3a7","ef30959e03d8e4ede695c8b400a9b9004a49ed6448214f087271d4f1e56352ba","65bf69067f68f1b6a3436040d10ad9288d06f38f41737ad9b798b11df0774a4e",{"version":"6b7e2365da4088ce4c3bd24c5485b75ad4501516915253783dc5539f97d054bd","signature":"11fe6efd534ba6678dc681c834407779dc6dd2cbbf3832eb824b481cb6072550"},{"version":"879627a980b8aed011d37d090a5da29e16a674772e4eb52053f4475d750a3b15","signature":"855a124171fcc40987b630da835fd0fd41cf2eba4c4b9251d57cd2e5318883dd"},{"version":"771585e2cc95e9b0631d16de31c9ede3d783b3faee1d0b451540392640e80ce6","signature":"b91a6d8bf19268fc6ca378bf7816d41032cfb9f2c252317f6451e88fa55f6dd6"},{"version":"5af78a1dea8160bd64b3fd6283f36c72598e35f3701f07bafd6907a690ec0a46","signature":"aa6d89a3ebaa1cf6b2b0c45cb23c99256a45a2d899900cc6380d94c83029d769"},{"version":"1b828e159b5facb564b37a7481bca9b3bc7ebdc5bb228ab90935befbc60d19e7","signature":"f5cf50faf3ca7c957d1f242eb10e921b37e618b55bb4278a838f65190c663e78"},{"version":"d786f776c8450d97e36359d6dd13c269ddf3576939d1c7cfd4ffb90a77dd40ab","signature":"4e807dffbeb4e2822bb10070a972c348973165c0e8aef62126830f4a33bbfaa3"},{"version":"62ef10cff449ce3b15625d1dda119cdeb4ba41cc876bf60a4814ef3bd7518ced","signature":"e7e7d142e3466def875976f1a61a1055a167e25dc96ee80df0208b95cfc8a9d7"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"092c1137e31de289f3cc6a57fdccb3cca298d8a680d1e367d206d3318f1394a1","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"986ca81f432caa94e077874052c41ba3420c22a87e2341ffa1ac9ab70f7045af","signature":"26b9418ec1e9d78d4e8d2e474406151c741d0027aba832e3f6152b08a23b877f"},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"a3462a06633495600eb068dbc46f914349287d667c5effb69e06bbc5e3bd7412","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a2ff7a4e0776de8ae5faa182db41e5258afe6ae529138d0a0fa62bb6dcf0b50c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0e29ac6b9117f42f23f8e12f5d8baf6fa671fbf3c66a267a4bf3a3bf2be0ad86","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a7048224dbc9e6fc61777ff83b4a54d86f17b8cdbf165c9dde98402cc773faad","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"c7577dd5239f24783a7f9c6bd70b32671014b71e6ec3a316505efd201cc30748","2b2d439102d965ac76a88c71c07f3be289b4839f3c1417673e5dc63bcfeb402f","20b73fb1219bb73a5765ebae77938416975fdc7248e8ca475ab966b6097038c6","d5a8f3efa173c8e94f60dac0a6ebfc181e2f6c0b4319974b30d12fde7090bcaf","5c9f9f933d50a7f26c860955efc45a8eadb7f7d561677c62f537130cc9ca0de8","b7d666160a33991b0d9a64608ecfbc2507871771ef7ddd761218989fa2b19307","ee1a38314319b5e23b6b338a8139136bb17d0295082816edb3621ba1d0151930","18ed70ebeca0df8ebf243f45351694465f2c924b9303eae17f8ce4bd1c2fbe73","b52931d1a235544839efcda59d38f1e020f1e0e0c21db827d5033d23c512b075","5b67434f8c1aee88ea61733a56ae201b0b1915841d80049c88a428e269598736","7caef7d56815a7c60ee5f2135082bdbbb2a84a05817c5ecc5ab36232f5504f2d",{"version":"0bc886dd6e3ab1f80bcfe4b41bb9b7d50968ab470e8420457b1d9cb65272b495","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"5d76980809840453e9a9b4196100dd06a83944c52b3786a6d99b31b72989d6b9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"af30f17a7306c0f8dc4675ccc2c8fe3cb842b4e3fb30c9658279405d8e4b4ba5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a6cf84f0007f68490edd14557015790378e3679549457d769791c81f083daab4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"eb605f217cfa8664c05cec28c5a868f663c83cc16838bd68deef1d4f705c3aab","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0e6980f0858e190af7808aa1da52929b2ba7bb82467d763fedfb8838aa92a65c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e006eb68127fba9a851d61370255da6a3556e540465458e97f592d09c4977fa9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f049075dad466bc2a15f1a9fdc96e3487b03bb4d2cbcc4824b5f6106e96758fa","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[[84,90],192,[242,245],[257,264]],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true,"verbatimModuleSyntax":true},"referencedMap":[[220,1],[223,2],[221,1],[139,3],[140,3],[141,4],[96,5],[142,6],[143,7],[144,8],[91,1],[94,9],[92,1],[93,1],[145,10],[146,11],[147,12],[148,13],[149,14],[150,15],[151,15],[152,16],[153,17],[154,18],[155,19],[97,1],[95,1],[156,20],[157,21],[158,22],[190,23],[159,24],[160,25],[161,26],[162,27],[163,28],[164,29],[165,30],[166,31],[167,32],[168,33],[169,33],[170,34],[171,1],[172,35],[174,36],[173,37],[175,38],[176,39],[177,40],[178,41],[179,42],[180,43],[181,44],[182,45],[183,46],[184,47],[185,48],[186,49],[187,50],[98,1],[99,1],[100,1],[138,51],[188,52],[189,53],[191,54],[224,55],[231,56],[232,57],[230,1],[193,1],[202,58],[201,59],[225,58],[209,60],[211,61],[210,62],[218,63],[217,1],[200,64],[194,65],[196,66],[198,67],[197,1],[199,65],[195,1],[222,1],[238,68],[240,69],[239,70],[237,71],[236,1],[226,1],[219,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[116,72],[126,73],[115,72],[136,74],[107,75],[106,76],[135,77],[129,78],[134,79],[109,80],[123,81],[108,82],[132,83],[104,84],[103,77],[133,85],[105,86],[110,87],[111,1],[114,87],[101,1],[137,88],[127,89],[118,90],[119,91],[121,92],[117,93],[120,94],[130,77],[112,95],[113,96],[122,97],[102,98],[125,89],[124,87],[128,1],[131,99],[205,100],[208,101],[206,100],[204,1],[207,102],[227,103],[216,104],[212,105],[213,60],[234,106],[228,107],[214,108],[233,109],[203,1],[215,110],[241,111],[235,112],[229,1],[252,113],[246,1],[255,114],[249,115],[247,1],[256,116],[254,117],[251,118],[250,119],[253,120],[248,121],[242,122],[243,123],[244,124],[245,125],[257,126],[258,127],[259,128],[260,129],[261,130],[262,131],[263,132],[264,133],[85,134],[84,1],[87,135],[86,136],[88,135],[89,135],[90,137],[192,138],[60,1],[61,1],[63,139],[73,1],[68,140],[64,141],[74,142],[80,136],[69,136],[81,143],[82,144],[83,136],[66,145],[65,146],[70,1],[72,147],[71,148],[62,1],[75,149],[76,1],[77,150],[79,151],[78,152],[67,1]],"latestChangedDtsFile":"./__tests__/simulation-inspect.integration.test.d.ts","version":"6.0.3"}
|