omp-fabric 1.25.7 → 1.25.9
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/CHANGELOG.md +24 -0
- package/README.md +1 -1
- package/dist/audit/projection.d.ts.map +1 -1
- package/dist/chunks/{chunk-HAH64YUG.js → chunk-2C5YN36Y.js} +2 -2
- package/dist/chunks/chunk-2C5YN36Y.js.map +7 -0
- package/dist/chunks/{chunk-3BS4RMF4.js → chunk-AZBJNZS4.js} +2 -2
- package/dist/chunks/{chunk-EZRC24CX.js → chunk-BMSAIMFB.js} +2 -2
- package/dist/chunks/{chunk-63VIZJGS.js → chunk-BWLZ6VDQ.js} +2 -2
- package/dist/chunks/{chunk-BQG4LFAC.js → chunk-D55BFSFK.js} +2 -2
- package/dist/chunks/{chunk-WUPYPFAC.js → chunk-E3KTE736.js} +3 -3
- package/dist/chunks/{chunk-JBKYNJFN.js → chunk-FL4A542C.js} +2 -1
- package/dist/chunks/chunk-FL4A542C.js.map +7 -0
- package/dist/chunks/{chunk-REHGQCXU.js → chunk-J2BDKPO4.js} +4 -4
- package/dist/chunks/{chunk-3KORI7FQ.js → chunk-KLWNXXEI.js} +2 -2
- package/dist/chunks/{chunk-XLINRLLP.js → chunk-PIW2DEO2.js} +4 -4
- package/dist/chunks/{chunk-H3KRHDDF.js → chunk-QJKOPPW2.js} +2 -2
- package/dist/chunks/{chunk-MR5C7U5H.js → chunk-UKB5RJDP.js} +3 -3
- package/dist/chunks/chunk-UKB5RJDP.js.map +7 -0
- package/dist/chunks/{chunk-GPJV2FSP.js → chunk-WX6C7N3W.js} +2 -2
- package/dist/chunks/{chunk-ABBGHQVX.js → chunk-YAI5SCIE.js} +2 -2
- package/dist/chunks/{chunk-G3ELO3QC.js → chunk-Z6TTRT6Q.js} +2 -2
- package/dist/compaction/hook.js +3 -3
- package/dist/compaction/lcm-runtime.js +4 -4
- package/dist/core/action-registry.js +2 -2
- package/dist/core/system-guidance.d.ts +3 -0
- package/dist/core/system-guidance.d.ts.map +1 -1
- package/dist/entropy/index.js +5 -5
- package/dist/fabric-runtime-state.js +67 -28
- package/dist/fabric-runtime-state.js.map +2 -2
- package/dist/host-compatibility.d.ts +1 -1
- package/dist/index.js +19 -14
- package/dist/index.js.map +2 -2
- package/dist/memory/discovery.js +4 -4
- package/dist/memory/normalize.js +3 -3
- package/dist/memory/search.js +4 -4
- package/dist/providers/memory-provider.js +6 -6
- package/dist/providers/omp-tools-provider.d.ts.map +1 -1
- package/dist/residency/host.js +6 -6
- package/dist/residency/omp-entry.js +6 -6
- package/dist/runtime/core-override-guest-types.js +1 -1
- package/dist/runtime/guest-types.d.ts +2 -2
- package/dist/runtime/guest-types.d.ts.map +1 -1
- package/dist/runtime/guest-types.js +1 -1
- package/dist/runtime/node-process-runtime.js +1 -1
- package/dist/runtime/quickjs-runtime.d.ts +1 -1
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
- package/dist/runtime/quickjs-runtime.js +1 -1
- package/dist/speculation/guest-args.d.ts.map +1 -1
- package/dist/speculation/scanner.js +2 -1
- package/dist/speculation/scanner.js.map +2 -2
- package/docs/audit-trace.md +1 -1
- package/docs/configuration.md +1 -1
- package/package.json +4 -4
- package/skills/fabric-exec/SKILL.md +4 -4
- package/dist/chunks/chunk-HAH64YUG.js.map +0 -7
- package/dist/chunks/chunk-JBKYNJFN.js.map +0 -7
- package/dist/chunks/chunk-MR5C7U5H.js.map +0 -7
- /package/dist/chunks/{chunk-3BS4RMF4.js.map → chunk-AZBJNZS4.js.map} +0 -0
- /package/dist/chunks/{chunk-EZRC24CX.js.map → chunk-BMSAIMFB.js.map} +0 -0
- /package/dist/chunks/{chunk-63VIZJGS.js.map → chunk-BWLZ6VDQ.js.map} +0 -0
- /package/dist/chunks/{chunk-BQG4LFAC.js.map → chunk-D55BFSFK.js.map} +0 -0
- /package/dist/chunks/{chunk-WUPYPFAC.js.map → chunk-E3KTE736.js.map} +0 -0
- /package/dist/chunks/{chunk-REHGQCXU.js.map → chunk-J2BDKPO4.js.map} +0 -0
- /package/dist/chunks/{chunk-3KORI7FQ.js.map → chunk-KLWNXXEI.js.map} +0 -0
- /package/dist/chunks/{chunk-XLINRLLP.js.map → chunk-PIW2DEO2.js.map} +0 -0
- /package/dist/chunks/{chunk-H3KRHDDF.js.map → chunk-QJKOPPW2.js.map} +0 -0
- /package/dist/chunks/{chunk-GPJV2FSP.js.map → chunk-WX6C7N3W.js.map} +0 -0
- /package/dist/chunks/{chunk-ABBGHQVX.js.map → chunk-YAI5SCIE.js.map} +0 -0
- /package/dist/chunks/{chunk-G3ELO3QC.js.map → chunk-Z6TTRT6Q.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.25.9
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- The extension roster groups MCP tools by their server. 1.25.8 stopped crediting them to the open project, but put every MCP tool and the host's autoresearch tools into one `extension:` bucket of about 150 names. Tools that front an MCP server now list under `mcp:<server>`, read from the host's `mcpServerName` on the tool definition, so `extension:` keeps only the host's own inline tools.
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- A grep cut short by `limit` still carried the host's file-page footer, such as "Showing files 1-4 of 30. Use skip=4 for the next page". The host widens its file window to `limit + 1` to detect the cut, so that cursor pointed past a file whose matches were never shown: following it silently skipped that file. The footer is dropped whenever the result is capped by `limit`, leaving the partial marker's `continue: null` and its "raise limit or narrow the pattern" note as the only guidance.
|
|
12
|
+
|
|
13
|
+
## 1.25.8
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- The extension roster in the kernel guidance named host-builtin tools after whatever project was open. OMP registers its autoresearch tools (`init_experiment`, `run_experiment`, `log_experiment`, `update_notes`) inline with a synthetic `<extension:name>` source path, and the roster resolved that path against the working directory and took the nearest `package.json`, so in this repository it read `omp-fabric: update_notes` and in another project that project's name. Only real filesystem paths are looked up now; synthetic sources are labelled by their `source`, matching the captured-tool namespaces.
|
|
18
|
+
- When the host fails to write a bash artifact it reports `meta.artifactError` and drops the artifact id, but Fabric fell back to its own copy of the path, restored from a file that had stopped receiving writes, and called the stream complete. A failed capture is now treated like an elided one: no restore, no path, and the note names the failed operation and says the full output is unrecoverable.
|
|
19
|
+
- A column-capped result that was too large to inline gave no way back to the full text. When the artifact is intact the note now names its path and size and the `executor.maxNestedResultChars` budget that kept it out of the result.
|
|
20
|
+
- `skills/fabric-exec/SKILL.md` taught `omp.grep` a `limit` it did not have and a positional third argument named `limit` that is really `skip`; the `find` row omitted `gitignore` and `hidden`. The audit trace projected the dead grep `limit` and dropped `skip`, so two grep pages recorded identically.
|
|
21
|
+
- The declared OMP peer floor and the startup compatibility check move from `18.3.0` to `18.4.4`. 1.25.7 dropped the per-call bash `env` that hosts before 18.4.4 still accept, so on those hosts Fabric rejected a working call and its recovery hint wrongly said the host had removed it.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- `omp.grep` accepts `limit`, passed to the host's `totalMatchLimit` on a per-call grep tool, and combines with `skip`. A capped result carries the partial marker with `matchLimit` and a note naming the limit rather than the host's per-file cap.
|
|
26
|
+
|
|
3
27
|
## 1.25.7
|
|
4
28
|
|
|
5
29
|
### Fixed
|
package/README.md
CHANGED
|
@@ -62,7 +62,7 @@ Independent calls run in parallel, and the returned object enters the model cont
|
|
|
62
62
|
|
|
63
63
|
## Install
|
|
64
64
|
|
|
65
|
-
Requires Node.js 24+ and OMP 18.
|
|
65
|
+
Requires Node.js 24+ and OMP 18.4.4+. Fabric also checks a detectable OMP host version at startup and warns when an older host does not match the tool shapes Fabric types against.
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
68
|
omp install npm:omp-fabric
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/audit/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAE,CAAC;IAC/C,aAAa,EAAE,MAAM,CAAC;CACvB;AAwJD;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,KAAK,MAAM,EACX,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/audit/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAE,CAAC;IAC/C,aAAa,EAAE,MAAM,CAAC;CACvB;AAwJD;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,KAAK,MAAM,EACX,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,qBA6GF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,KAAK,MAAM,EACX,QAAQ,OAAO,KACd,qBAAqB,GAAG,SAwB1B,CAAC"}
|
|
@@ -269,7 +269,7 @@ const __ompPositionalFields = {
|
|
|
269
269
|
const __ompNumericFields = {
|
|
270
270
|
read: ["offset", "limit"],
|
|
271
271
|
bash: ["timeout"],
|
|
272
|
-
grep: ["skip", "context"],
|
|
272
|
+
grep: ["skip", "context", "limit"],
|
|
273
273
|
find: ["limit"],
|
|
274
274
|
ls: ["limit"],
|
|
275
275
|
};
|
|
@@ -1531,4 +1531,4 @@ export {
|
|
|
1531
1531
|
GUEST_SETUP,
|
|
1532
1532
|
QuickJsRuntime
|
|
1533
1533
|
};
|
|
1534
|
-
//# sourceMappingURL=chunk-
|
|
1534
|
+
//# sourceMappingURL=chunk-2C5YN36Y.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/runtime/quickjs-runtime.ts", "../../src/runtime/guest-stack-map.ts"],
|
|
4
|
+
"sourcesContent": ["import releaseSyncVariant from \"@jitl/quickjs-singlefile-mjs-release-sync\";\nimport { newQuickJSWASMModuleFromVariant } from \"quickjs-emscripten-core\";\nimport ts from \"typescript\";\nimport { runAbortable, settleWithin } from \"../async-settlement.js\";\nimport { ompBashExitMetadata } from \"../core/omp-bash-error.js\";\nimport { createGuestStackMap, remapGuestErrorText } from \"./guest-stack-map.js\";\nimport { OMP_GUEST_ENTRYPOINT, transpileFabricCodeWithSourceMap } from \"./type-checker.js\";\n\nexport type FabricSandboxTerminationReason =\n | \"completed\"\n | \"runtime_error\"\n | \"timed_out\"\n | \"aborted\";\n\nexport interface FabricGuestProxyNames {\n extensions?: string[];\n mcp?: Record<string, string[]>;\n}\n\nexport interface FabricSandboxResult {\n value: unknown;\n logs: string[];\n terminationReason: FabricSandboxTerminationReason;\n error?: string;\n}\n\nexport interface FabricSandboxOptions {\n timeoutMs: number;\n memoryLimitBytes: number;\n maxLogChars?: number;\n payloads?: Record<string, string>;\n proxyNames?: FabricGuestProxyNames;\n tokenBudget?: number;\n signal?: AbortSignal;\n minimumTimeoutMsForHostCall?(\n ref: string,\n args: Record<string, unknown>,\n ): number | undefined;\n transpiledCode?: string;\n transpiledSourceMap?: string;\n}\n\nexport type FabricHostCall = (\n ref: string,\n args: Record<string, unknown>,\n signal: AbortSignal,\n) => Promise<unknown>;\n\ntype QuickJsModule = Awaited<ReturnType<typeof newQuickJSWASMModuleFromVariant>>;\n\nlet quickJsModulePromise: Promise<QuickJsModule> | undefined;\n\n// Static payloads.<identifier> references (bracket access like payloads[k] is not provable).\n// Parse instead of scanning text so examples inside strings and comments do not\n// become false missing-payload failures.\nconst referencedPayloadKeys = (code: string): string[] => {\n const source = ts.createSourceFile(\n \"fabric-exec.ts\",\n `async function __fabricProgram() {\\n${code}\\n}`,\n ts.ScriptTarget.Latest,\n false,\n ts.ScriptKind.TS,\n );\n const keys: string[] = [];\n const visit = (node: ts.Node): void => {\n if (\n ts.isPropertyAccessExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === \"payloads\" &&\n !keys.includes(node.name.text)\n ) {\n keys.push(node.name.text);\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n return keys;\n};\n\n// Reject up front when a referenced key is statically provable missing, before\n// QuickJS is even loaded.\nconst missingPayloadKeys = (\n code: string,\n payloads: Record<string, string> | undefined,\n): string[] => {\n const provided = payloads ?? {};\n return referencedPayloadKeys(code).filter((key) => !(key in provided));\n};\nconst quickJsModule = (): Promise<QuickJsModule> => {\n quickJsModulePromise ??= newQuickJSWASMModuleFromVariant(releaseSyncVariant);\n return quickJsModulePromise;\n};\n\nexport const GUEST_SETUP = `\n(() => {\nconst __fabricBridge = globalThis.__fabricHostCall;\ndelete globalThis.__fabricHostCall;\nconst __successfulCalls = [];\nconst __resolvedCallRef = (ref, args) =>\n ref === \"fabric.$call\" && args && typeof args.ref === \"string\" ? args.ref : ref;\nconst __recordSuccessfulCall = (ref, args) => {\n __successfulCalls.push(Object.freeze({ ref: __resolvedCallRef(ref, args) }));\n};\nconst __handoffFacts = () => {\n const calls = Object.freeze(__successfulCalls.slice());\n const count = (ref) => {\n if (ref === undefined) return calls.length;\n const refs = new Set(Array.isArray(ref) ? ref : [ref]);\n return calls.reduce((total, call) => total + (refs.has(call.ref) ? 1 : 0), 0);\n };\n return Object.freeze({ calls, count });\n};\nconst __call = async (ref, args) => {\n const normalizedArgs = args ?? {};\n const value = await __fabricBridge(ref, normalizedArgs);\n __recordSuccessfulCall(ref, normalizedArgs);\n return value;\n};\nconst __ompToolNames = [\"read\",\"bash\",\"edit\",\"write\",\"grep\",\"find\",\"ls\",\"wait\"];\nconst __toolsBase = {\n providers: () => __call(\"fabric.$providers\", {}),\n catalog: (args = {}) => __call(\"fabric.$catalog\", args),\n list: (args = {}) => __call(\"fabric.$list\", args),\n search: (args) => __call(\n \"fabric.$search\",\n typeof args === \"string\" ? { query: args } : args,\n ),\n describe: (args) => __call(\"fabric.$describe\", args),\n call: (args) => __call(\"fabric.$call\", args),\n progress: (args) => __call(\"fabric.$progress\", args),\n models: () => __call(\"fabric.$models\", {}),\n};\n// tools is discovery + generic calls only. The proxy keeps the seven discovery\n// methods and turns a core-tool name (read/bash/edit/...) into an actionable\n// error pointing at omp.<name>, so a model that writes tools.read(...) learns\n// the fix in one turn instead of looping on \"tools.read is not a function\".\nglobalThis.tools = new Proxy(__toolsBase, {\n get(target, property) {\n if (property === \"then\" || typeof property === \"symbol\") return undefined;\n const name = String(property);\n if (__ompToolNames.indexOf(name) >= 0) {\n return () => {\n throw new Error(\n \"tools.\" + name + \" is not available on the discovery API. tools is discovery + generic calls only (providers/catalog/list/search/describe/call/models). For the OMP core tool, call omp.\" + name + \"(args), e.g. omp.\" + name + \"({ ... }).\"\n );\n };\n }\n return target[property];\n },\n set() { return true; },\n deleteProperty() { return true; },\n});\nconst __ompStringFields = { bash: \"command\", read: \"path\", ls: \"path\", grep: \"pattern\", find: \"pattern\" };\n// Per-tool key aliases. The runtime normalizes them to the canonical form\n// before the host validates args; unit-converting aliases are handled separately\n// in __normalizeOmpArgs. This lets a model that writes { query, regex, ... }\n// or { file } instead of { pattern } / { path } still succeeds on the first\n// call. Keep these in sync with the OmpToolsApi overloads in guest-types.ts so\n// the type-checker accepts the same spellings it coercion-handles at runtime.\nconst __ompArgAliases = {\n bash: {\n cmd: \"command\", shell: \"command\", cmdline: \"command\", script: \"command\",\n commandLine: \"command\",\n workdir: \"cwd\", directory: \"cwd\", workingDirectory: \"cwd\",\n },\n find: {\n query: \"pattern\", regex: \"pattern\", search: \"pattern\", name: \"pattern\",\n filename: \"pattern\", glob: \"pattern\", expression: \"pattern\", include: \"pattern\",\n max: \"limit\",\n },\n grep: {\n query: \"pattern\", regex: \"pattern\", search: \"pattern\", q: \"pattern\",\n expression: \"pattern\", text: \"pattern\",\n ic: \"ignoreCase\", caseInsensitive: \"ignoreCase\",\n globPattern: \"glob\",\n ctx: \"context\",\n },\n read: {\n file: \"path\", absolutePath: \"path\", file_path: \"path\", filePath: \"path\",\n filepath: \"path\", pathname: \"path\", target_file: \"path\", targetFile: \"path\",\n absolute_path: \"path\", fileAbsolutePath: \"path\",\n max: \"limit\", start: \"offset\",\n },\n ls: {\n dir: \"path\", file: \"path\", folder: \"path\", absolutePath: \"path\",\n file_path: \"path\", filePath: \"path\", filepath: \"path\", pathname: \"path\",\n target_file: \"path\", targetFile: \"path\", absolute_path: \"path\",\n fileAbsolutePath: \"path\", directory: \"path\", directoryPath: \"path\",\n max: \"limit\",\n },\n edit: {\n file: \"path\", absolutePath: \"path\", file_path: \"path\", filePath: \"path\",\n filepath: \"path\", pathname: \"path\", target_file: \"path\", targetFile: \"path\",\n absolute_path: \"path\", fileAbsolutePath: \"path\",\n old: \"oldText\", old_string: \"oldText\", oldString: \"oldText\",\n old_str: \"oldText\", oldStr: \"oldText\", from: \"oldText\",\n old_value: \"oldText\", old_text: \"oldText\", oldContent: \"oldText\",\n old_content: \"oldText\",\n new: \"newText\", replacement: \"newText\", new_string: \"newText\",\n newString: \"newText\", new_str: \"newText\", newStr: \"newText\",\n to: \"newText\", new_value: \"newText\", new_text: \"newText\",\n newContent: \"newText\", new_content: \"newText\",\n },\n write: {\n file: \"path\", absolutePath: \"path\", file_path: \"path\", filePath: \"path\",\n filepath: \"path\", pathname: \"path\", target_file: \"path\", targetFile: \"path\",\n absolute_path: \"path\", fileAbsolutePath: \"path\",\n contents: \"content\", body: \"content\", text: \"content\", data: \"content\",\n fileContent: \"content\",\n },\n};\n// Multi-arg positional order, used only when a call passes >= 2 args and the\n// (primary, options) merge in __positionalToArgs does not apply. One-field\n// tools (read/bash/ls) stay absent: their two-arg form is a bare string plus\n// an options object, repaired by the merge instead of a wrong-arity (2554)\n// type error; only a non-object second arg still fails 2554.\nconst __ompPositionalFields = {\n grep: [\"pattern\", \"path\", \"skip\"],\n find: [\"pattern\", \"path\", \"limit\"],\n write: [\"path\", \"content\"],\n edit: [\"path\", \"oldText\", \"newText\"],\n};\n// Models often pass numbers as strings (\"20\"); coerce the known numeric\n// option fields so the host schema sees a number. Non-numeric strings pass\n// through untouched and fail host validation exactly as before. Kept in sync\n// with the numeric optionals in the OmpToolsApi overloads in guest-types.ts.\nconst __ompNumericFields = {\n read: [\"offset\", \"limit\"],\n bash: [\"timeout\"],\n grep: [\"skip\", \"context\", \"limit\"],\n find: [\"limit\"],\n ls: [\"limit\"],\n};\nconst __ompOptionalFields = {\n read: [\"offset\", \"limit\"],\n grep: [\"path\", \"glob\", \"ignoreCase\", \"literal\", \"context\", \"limit\"],\n find: [\"path\", \"limit\"],\n ls: [\"path\", \"limit\"],\n};\n// (primary, options) two-arg merge for the string-primary tools:\n// omp.read(\"index.ts\", { limit: 120 }) becomes { path: \"index.ts\", limit: 120 }.\n// A plain-object second arg is never a valid positional value for these tools\n// (grep/find take (pattern, path, limit) strings/numbers), so merging is\n// unambiguous; the positional string wins the primary field on conflict. The\n// merged object flows through the same alias, unit, and numeric normalization\n// in __normalizeOmpArgs as any other options object.\nconst __positionalToArgs = (name, rest) => {\n const first = rest[0];\n const second = rest[1];\n const primaryField = __ompStringFields[name];\n if (\n rest.length === 2 &&\n typeof first === \"string\" &&\n primaryField !== undefined &&\n second !== null && typeof second === \"object\" && !Array.isArray(second)\n ) {\n const merged = Object.assign({}, second);\n merged[primaryField] = first;\n return merged;\n }\n const order = __ompPositionalFields[name];\n if (!order) return rest.length > 0 ? first : {};\n const out = {};\n for (let i = 0; i < rest.length && i < order.length; i++) {\n const v = rest[i];\n if (v !== undefined) out[order[i]] = v;\n }\n return out;\n};\nconst __normalizeOmpArgs = (name, args) => {\n const field = __ompStringFields[name];\n if (typeof args === \"string\" && field) return { [field]: args };\n if (args === null || typeof args !== \"object\" || Array.isArray(args)) return args;\n const aliases = __ompArgAliases[name];\n let out = args;\n if (name === \"bash\" && \"timeoutMs\" in out) {\n out = Object.assign({}, args);\n if (!(\"timeout\" in out)) {\n const timeoutMs = out.timeoutMs;\n if (timeoutMs !== null && timeoutMs !== undefined) {\n out.timeout = Number.isFinite(Number(timeoutMs)) ? Number(timeoutMs) / 1000 : timeoutMs;\n }\n }\n delete out.timeoutMs;\n }\n // settle is a guest-only directive (settles nonzero exits instead of\n // rejecting); strip it so it never reaches the host/bash schema.\n if (name === \"bash\" && \"settle\" in out) {\n if (out === args) out = Object.assign({}, args);\n delete out.settle;\n }\n if (aliases) {\n for (const alias in aliases) {\n const canonical = aliases[alias];\n if (alias in out) {\n if (out === args) out = Object.assign({}, args);\n if (!(canonical in out)) out[canonical] = out[alias];\n delete out[alias];\n }\n }\n }\n const numerics = __ompNumericFields[name];\n if (numerics) {\n for (const key of numerics) {\n const value = out[key];\n if (typeof value === \"string\" && value.trim() !== \"\" && Number.isFinite(Number(value))) {\n if (out === args) out = Object.assign({}, args);\n out[key] = Number(value);\n }\n }\n }\n const optionalFields = __ompOptionalFields[name];\n if (optionalFields) {\n for (const key of optionalFields) {\n if (out[key] !== null && out[key] !== undefined) continue;\n if (!(key in out)) continue;\n if (out === args) out = Object.assign({}, args);\n delete out[key];\n }\n }\n if (name === \"edit\" && Array.isArray(out.edits)) {\n let changed = false;\n const editAliases = __ompArgAliases.edit;\n const edits = out.edits.map((entry) => {\n if (entry === null || typeof entry !== \"object\" || Array.isArray(entry)) return entry;\n let edit = entry;\n for (const alias in editAliases) {\n const canonical = editAliases[alias];\n if (canonical !== \"oldText\" && canonical !== \"newText\") continue;\n if (!(alias in edit)) continue;\n if (edit === entry) edit = Object.assign({}, entry);\n if (!(canonical in edit)) edit[canonical] = edit[alias];\n delete edit[alias];\n changed = true;\n }\n return edit;\n });\n if (changed) {\n if (out === args) out = Object.assign({}, args);\n out.edits = edits;\n }\n }\n if (name === \"edit\" && !Array.isArray(out.edits) && (\"oldText\" in out || \"newText\" in out)) {\n if (out === args) out = Object.assign({}, args);\n const edit = {};\n if (\"oldText\" in out) edit.oldText = out.oldText;\n if (\"newText\" in out) edit.newText = out.newText;\n out.edits = [edit];\n delete out.oldText;\n delete out.newText;\n }\n return out;\n};\n// shell/edit/write resolve envelope objects { ok, output, details }, and the\n// type-checker deliberately suppresses property-miss (2339) diagnostics, so\n// result.trim() on an envelope typechecks and then dies with QuickJS's terse\n// \"not a function\" \u2014 an error models cannot localize (observed: misdirected\n// debugging spirals probing unrelated globals). Guard envelopes with a proxy\n// that throws an actionable TypeError for string-method access and iteration,\n// naming the tool and the .output fix. Ordinary reads (ok/output/details/\n// exitCode/error), destructuring, 'in' checks, and JSON marshaling pass through.\nconst __ompEnvelopeTools = { bash: true, edit: true, write: true, wait: true };\nconst __ompEnvelopeStringTraps = new Set([\n \"anchor\", \"at\", \"big\", \"blink\", \"bold\", \"charAt\", \"charCodeAt\", \"codePointAt\",\n \"concat\", \"endsWith\", \"fixed\", \"fontcolor\", \"fontsize\", \"includes\", \"indexOf\",\n \"italics\", \"lastIndexOf\", \"length\", \"link\", \"localeCompare\", \"match\", \"matchAll\",\n \"normalize\", \"padEnd\", \"padStart\", \"repeat\", \"replace\", \"replaceAll\", \"search\",\n \"slice\", \"small\", \"split\", \"startsWith\", \"strike\", \"sub\", \"substr\", \"substring\",\n \"sup\", \"toLocaleLowerCase\", \"toLocaleUpperCase\", \"toLowerCase\", \"toUpperCase\",\n \"trim\", \"trimEnd\", \"trimStart\",\n]);\nconst __ompEnvelopeGuard = (name, value) => {\n if (value === null || typeof value !== \"object\" || typeof value.ok !== \"boolean\") return value;\n return new Proxy(value, {\n get(target, property, receiver) {\n if (property === Symbol.iterator || property === Symbol.asyncIterator) {\n throw new TypeError(\n \"omp.\" + name + \"(...) resolves an envelope { ok, output, details }, which is not iterable. \" +\n \"Iterate the text instead: (await omp.\" + name + \"(...)).output.split('\\\\\\\\n')\"\n );\n }\n if (typeof property === \"string\" && __ompEnvelopeStringTraps.has(property)) {\n throw new TypeError(\n \"omp.\" + name + \"(...) resolves an envelope { ok, output, details }, not a string, so .\" + property +\n \" is unavailable on it. Read the text first: const out = (await omp.\" + name + \"(...)).output; then out.\" + property +\n \"(...). Shell commands reject on a nonzero exit \u2014 pass settle: true to receive an ok:false envelope instead.\"\n );\n }\n return Reflect.get(target, property, receiver);\n },\n });\n};\n// The omp proxy accepts: a bare string (primary field), an options object, a\n// (primary, options) two-arg merge for the string-primary tools, or a\n// positional spread mapped by __ompPositionalFields. 0/1 args preserve the\n// legacy (args = {}) default so existing programs are unchanged.\nglobalThis.omp = new Proxy({}, {\n get(_target, property) {\n if (property === \"then\") return undefined;\n const name = String(property);\n // fabric_exec payload values are readable directly on the omp surface\n // (documented for skills as payloads.<key>), while core tool names stay\n // callables. Only shadow a payload key that actually exists.\n const payloadValues = (typeof globalThis[\"payloads\"] === \"object\" && globalThis[\"payloads\"] !== null)\n ? globalThis[\"payloads\"]\n : {};\n if (__ompToolNames.indexOf(name) < 0 && Object.prototype.hasOwnProperty.call(payloadValues, name)) {\n return payloadValues[name];\n }\n return (...rest) => {\n let args;\n if (rest.length <= 1) {\n const first = rest.length === 1 ? rest[0] : undefined;\n args = first === undefined ? {} : first;\n } else {\n args = __positionalToArgs(name, rest);\n }\n // Shell tools reject on an ordinary nonzero exit; settle:true returns\n // {ok:false, exitCode, ...} instead (opt-in). Other failures still reject.\n const settle = name === \"bash\" &&\n typeof args === \"object\" && args !== null && args.settle === true;\n const call = __call(\"omp.\" + name, __normalizeOmpArgs(name, args));\n const promise = settle ? call.catch((error) => {\n // node-process bridge errors originate in a different VM realm.\n const message = typeof error?.message === \"string\" ? error.message : String(error);\n const exit = error?.__fabricBashExit;\n if (!exit || !Number.isSafeInteger(exit.exitCode) || exit.exitCode <= 0 ||\n typeof exit.output !== \"string\") throw error;\n return {\n ok: false,\n output: exit.output,\n details: null,\n exitCode: exit.exitCode,\n error: message,\n };\n }) : call;\n return __ompEnvelopeTools[name] === true\n ? promise.then((value) => __ompEnvelopeGuard(name, value))\n : promise;\n };\n },\n});\nconst __payloads = (typeof globalThis[\"payloads\"] === \"object\" && globalThis[\"payloads\"] !== null) ? globalThis[\"payloads\"] : {};\nglobalThis[\"payloads\"] = new Proxy(__payloads, {\n get(target, property) {\n if (typeof property === \"symbol\") return undefined;\n const name = String(property);\n if (name === \"then\" || name === \"toJSON\" || name === \"constructor\") return undefined;\n if (Object.prototype.hasOwnProperty.call(target, name)) return target[name];\n if (__ompToolNames.indexOf(name) >= 0) {\n throw new Error(\n \"payloads.\" + name + \" is the payloads accessor, not a tool. For the OMP core tool, call omp.\" + name + \"(args).\"\n );\n }\n const provided = Object.keys(target);\n throw new Error(\n \"payloads.\" + name + \" is not defined. payloads only exposes keys from the fabric_exec payloads parameter\" +\n (provided.length ? \" (provided: \" + provided.join(\", \") + \")\" : \" (none provided)\") +\n \". Pass payloads: { \" + name + \": '...' } to use payloads.\" + name + \".\" +\n \" For large or quote-heavy content, keep it in top-level payloads and reference payloads.\" + name + \" instead of escaping it inside code.\"\n );\n },\n ownKeys(target) { return Reflect.ownKeys(target); },\n getOwnPropertyDescriptor(target, prop) { return Reflect.getOwnPropertyDescriptor(target, prop); },\n has(target, prop) { return Object.prototype.hasOwnProperty.call(target, prop); }\n});\n// Stable providers share a lazy dispatch proxy; the guest declarations keep\n// their known actions typed while the registry remains the runtime authority.\n// extensions' per-tool surface is additionally rendered from the captured\n// catalog by guestTypeDeclarations (runtime/dynamic-guest-types.ts).\nconst __memorySelectionKeys = [\n \"indices\",\n \"entryIds\",\n \"operationAddresses\",\n \"entryRange\",\n \"index\",\n \"entry_ids\",\n \"operation_addresses\",\n \"entry_range\",\n];\nconst __hasMemorySelection = (args) => __memorySelectionKeys.some((key) => {\n const value = args[key];\n if (Array.isArray(value)) return value.length > 0;\n return value !== undefined && value !== null;\n});\nconst __memoryWalk = async (args, visitor) => {\n if (!args || typeof args !== \"object\" || Array.isArray(args)) {\n throw new TypeError(\"memory.walk expects an expansion options object\");\n }\n if (typeof visitor !== \"function\") {\n throw new TypeError(\"memory.walk expects a visitor function as its second argument\");\n }\n\n let request = { ...args };\n if (Number(request.textOffset ?? request.text_offset ?? 0) !== 0) {\n throw new TypeError(\"memory.walk must start at text offset 0 to yield complete entries\");\n }\n if (!__hasMemorySelection(request)) {\n if (request.entryOffset !== undefined || request.entry_offset !== undefined ||\n request.textOffset !== undefined || request.text_offset !== undefined) {\n throw new TypeError(\"memory.walk continuation offsets require an explicit selection\");\n }\n if (Number(request.before ?? 0) > 0 || Number(request.after ?? 0) > 0) {\n throw new TypeError(\"memory.walk before/after requires an explicit selection\");\n }\n const head = await __call(\"memory.expand\", request);\n if (!head || typeof head !== \"object\") {\n throw new Error(\"memory.expand returned an invalid metadata response\");\n }\n if (head.error) return { visited: 0, stopped: false, error: head.error };\n if (!Number.isSafeInteger(head.entryCount) || head.entryCount < 0) {\n throw new Error(\"memory.expand metadata omitted a valid entryCount\");\n }\n if (head.entryCount === 0) return { visited: 0, stopped: false };\n request = {\n ...request,\n session: head.session ?? request.session,\n expectedSourceHash: head.sourceHash,\n expectedLineageFingerprint: head.lineageFingerprint,\n branches: head.branches,\n entryRange: { first: 0, last: head.entryCount - 1 },\n };\n }\n\n let visited = 0;\n let pending = null;\n let pendingStart = 0;\n let pendingEnd = 0;\n let pendingTotal = 0;\n const seen = new Set([JSON.stringify({ ref: \"memory.expand\", args: request })]);\n let page = await __call(\"memory.expand\", request);\n\n while (true) {\n if (!page || typeof page !== \"object\") {\n throw new Error(\"memory.expand returned an invalid page\");\n }\n if (page.error) return { visited, stopped: false, error: page.error };\n if (!Array.isArray(page.entries)) {\n throw new Error(\"memory.expand page omitted entries\");\n }\n\n for (const chunk of page.entries) {\n if (!chunk || typeof chunk !== \"object\" || typeof chunk.text !== \"string\") {\n throw new Error(\"memory.expand returned an invalid entry chunk\");\n }\n const range = chunk.textRange;\n if (!range || typeof range !== \"object\" ||\n !Number.isSafeInteger(range.start) || !Number.isSafeInteger(range.end) ||\n !Number.isSafeInteger(range.total) || range.start < 0 ||\n range.end < range.start || range.total < range.end) {\n throw new Error(\"memory.expand returned an invalid textRange\");\n }\n if (chunk.text.length !== range.end - range.start) {\n throw new Error(\"memory.expand entry chunk disagrees with textRange\");\n }\n\n if (pending === null) {\n pending = { ...chunk, text: \"\" };\n pendingStart = range.start;\n pendingEnd = range.start;\n pendingTotal = range.total;\n } else if (pending.index !== chunk.index) {\n throw new Error(\"memory.expand advanced before completing an entry\");\n }\n if (range.start !== pendingEnd || range.total !== pendingTotal) {\n throw new Error(\"memory.expand returned discontinuous entry chunks\");\n }\n for (const key of Object.keys(chunk)) {\n if (pending[key] === undefined) pending[key] = chunk[key];\n }\n pending.text += chunk.text;\n pendingEnd = range.end;\n\n if (range.complete) {\n pending.textRange = {\n start: pendingStart,\n end: pendingEnd,\n total: pendingTotal,\n complete: true,\n };\n const entry = pending;\n pending = null;\n const keepGoing = await visitor(entry, visited);\n visited += 1;\n if (keepGoing === false) return { visited, stopped: true };\n }\n }\n\n if (page.next === null || page.next === undefined) {\n if (pending !== null) {\n throw new Error(\"memory.expand ended before completing an entry\");\n }\n return { visited, stopped: false };\n }\n if (page.next.ref !== \"memory.expand\" || !page.next.args ||\n typeof page.next.args !== \"object\" || Array.isArray(page.next.args)) {\n throw new Error(\"memory.expand returned an invalid continuation\");\n }\n const continuationKey = JSON.stringify(page.next);\n if (seen.has(continuationKey)) {\n throw new Error(\"memory.expand returned a cyclic continuation\");\n }\n seen.add(continuationKey);\n page = await __call(page.next.ref, page.next.args);\n }\n};\n\nconst __proxyNames = (() => {\n const raw = globalThis.__fabricProxyNames;\n delete globalThis.__fabricProxyNames;\n return raw && typeof raw === \"object\" ? raw : {};\n})();\nconst __nameList = (value) =>\n Array.isArray(value) ? value.filter((name) => typeof name === \"string\") : [];\nconst __lazyNamespace = (names, resolve, local = {}) => new Proxy(local, {\n get(target, property) {\n if (property === \"then\" || typeof property === \"symbol\") return undefined;\n if (Object.prototype.hasOwnProperty.call(target, property)) return target[property];\n return resolve(String(property));\n },\n ownKeys(target) {\n const own = Object.keys(target);\n return names.concat(own.filter((key) => names.indexOf(key) < 0));\n },\n getOwnPropertyDescriptor(target, property) {\n if (typeof property === \"symbol\") return undefined;\n const name = String(property);\n if (names.indexOf(name) < 0 && !Object.prototype.hasOwnProperty.call(target, name)) {\n return undefined;\n }\n const value = Object.prototype.hasOwnProperty.call(target, name)\n ? target[name]\n : resolve(name);\n return { value, writable: false, enumerable: true, configurable: true };\n },\n has(target, property) {\n if (typeof property === \"symbol\") return false;\n return names.indexOf(String(property)) >= 0\n || Object.prototype.hasOwnProperty.call(target, property);\n },\n});\nconst __providerProxy = (provider, local = {}, names = []) =>\n __lazyNamespace(names, (property) => (args = {}) => __call(provider + \".\" + property, args), local);\nglobalThis.extensions = __providerProxy(\"extensions\", {}, __nameList(__proxyNames.extensions));\nglobalThis.memory = __providerProxy(\"memory\", { walk: __memoryWalk });\nglobalThis.state = __providerProxy(\"state\");\nglobalThis.schema = __providerProxy(\"schema\");\nglobalThis.components = __providerProxy(\"components\");\nglobalThis.compact = __providerProxy(\"compact\");\nglobalThis.codemap = __providerProxy(\"codemap\");\nglobalThis.judgment = __providerProxy(\"judgment\");\nconst __chunkBatchItems = (items, maxItems = 25, maxBytes = 49152) => {\n const chunks = [];\n let current = [];\n let currentBytes = 2;\n for (const item of items) {\n let serialized = \"\";\n try {\n serialized = JSON.stringify(item) ?? \"null\";\n } catch {\n serialized = JSON.stringify(String(item));\n }\n let stateItem = item;\n if (serialized.length > 40960) {\n stateItem = typeof item === \"string\"\n ? item.slice(0, 40000) + \" [truncated]\"\n : String(item).slice(0, 40000) + \" [truncated]\";\n serialized = JSON.stringify(stateItem);\n }\n const itemBytes = serialized.length + 1;\n if (current.length > 0 && (current.length >= maxItems || currentBytes + itemBytes > maxBytes)) {\n chunks.push(current);\n current = [];\n currentBytes = 2;\n }\n current.push({ item, stateItem });\n currentBytes += itemBytes;\n }\n if (current.length > 0) chunks.push(current);\n return chunks;\n};\nconst __judgeAsk = (first, second) => {\n if (second !== undefined) {\n return globalThis.judgment.ask({ state: first, questions: second });\n }\n return globalThis.judgment.ask(first);\n};\nconst __judgeBool = async (state, instructions, options) => {\n try {\n const outcome = await globalThis.judgment.ask({\n state,\n questions: { q: { type: \"bool\", instructions: String(instructions) } },\n });\n if (outcome && outcome.ok && outcome.answers && outcome.answers.q && outcome.answers.q.type === \"bool\" && typeof outcome.answers.q.bool === \"number\") {\n return outcome.answers.q.bool;\n }\n } catch {}\n return options && typeof options.fallback === \"number\" ? options.fallback : undefined;\n};\nconst __judgeChoice = async (state, optionsListOrCriteria, instructions, config) => {\n let criteria = {};\n if (Array.isArray(optionsListOrCriteria)) {\n for (const opt of optionsListOrCriteria) criteria[String(opt)] = null;\n } else if (optionsListOrCriteria && typeof optionsListOrCriteria === \"object\") {\n criteria = optionsListOrCriteria;\n } else {\n throw new TypeError(\"judge.choice options must be an array or criteria object\");\n }\n if (Object.keys(criteria).length < 2) {\n throw new TypeError(\"judge.choice requires at least 2 unique options\");\n }\n try {\n const outcome = await globalThis.judgment.ask({\n state,\n questions: { q: { type: \"choice\", instructions: String(instructions), criteria } },\n });\n if (outcome && outcome.ok && outcome.answers && outcome.answers.q && outcome.answers.q.type === \"choice\" && typeof outcome.answers.q.choice === \"string\") {\n return outcome.answers.q.choice;\n }\n } catch {}\n return config && typeof config.fallback === \"string\" ? config.fallback : undefined;\n};\nconst __judgeScore = async (state, criteria, instructions, config) => {\n if (!Array.isArray(criteria) || criteria.length < 2) {\n throw new TypeError(\"judge.score requires at least 2 ordered criteria levels\");\n }\n try {\n const outcome = await globalThis.judgment.ask({\n state,\n questions: { q: { type: \"score\", instructions: String(instructions), criteria } },\n });\n if (outcome && outcome.ok && outcome.answers && outcome.answers.q && outcome.answers.q.type === \"score\" && typeof outcome.answers.q.score === \"number\") {\n return outcome.answers.q.score;\n }\n } catch {}\n return config && typeof config.fallback === \"number\" ? config.fallback : undefined;\n};\nconst __judgeFilter = async (items, instructions, options = {}) => {\n if (!Array.isArray(items) || items.length === 0) return [];\n const threshold = Number.isFinite(options.threshold) ? options.threshold : 0.7;\n const onFail = options.onFail || \"keep-all\";\n const chunks = __chunkBatchItems(items, options.maxItems || 25, options.maxBytes || 49152);\n const chunkPromises = chunks.map(async (chunk) => {\n const questions = {};\n chunk.forEach((_, idx) => {\n questions[\"item_\" + idx] = {\n type: \"bool\",\n instructions: \"Regarding items[\" + idx + \"]: \" + String(instructions),\n };\n });\n let outcome;\n try {\n outcome = await globalThis.judgment.ask({ state: { items: chunk.map((c) => c.stateItem) }, questions });\n } catch (err) {\n outcome = { ok: false, reason: \"failed\", detail: String(err && err.message ? err.message : err) };\n }\n if (!outcome || !outcome.ok) {\n if (onFail === \"throw\") {\n throw new Error(\"judge.filter failed: \" + (outcome && outcome.reason ? outcome.reason : \"unknown error\") + (outcome && outcome.detail ? \" (\" + outcome.detail + \")\" : \"\"));\n }\n return onFail === \"empty\" ? [] : chunk.map((c) => c.item);\n }\n return chunk\n .filter((_, idx) => {\n const ans = outcome.answers && outcome.answers[\"item_\" + idx];\n return ans && ans.type === \"bool\" && typeof ans.bool === \"number\" && ans.bool >= threshold;\n })\n .map((c) => c.item);\n });\n const results = await Promise.all(chunkPromises);\n return results.flat();\n};\nconst __judgeClassify = async (items, categories, instructions, options = {}) => {\n if (!Array.isArray(items) || items.length === 0) return [];\n if (!Array.isArray(categories) || categories.length < 2) {\n throw new TypeError(\"judge.classify requires at least 2 categories\");\n }\n const criteria = {};\n for (const cat of categories) criteria[String(cat)] = null;\n const onFail = options.onFail || \"keep-all\";\n const chunks = __chunkBatchItems(items, options.maxItems || 25, options.maxBytes || 49152);\n const chunkPromises = chunks.map(async (chunk) => {\n const questions = {};\n chunk.forEach((_, idx) => {\n questions[\"item_\" + idx] = {\n type: \"choice\",\n instructions: \"Regarding items[\" + idx + \"]: \" + String(instructions),\n criteria,\n };\n });\n let outcome;\n try {\n outcome = await globalThis.judgment.ask({ state: { items: chunk.map((c) => c.stateItem) }, questions });\n } catch (err) {\n outcome = { ok: false, reason: \"failed\", detail: String(err && err.message ? err.message : err) };\n }\n if (!outcome || !outcome.ok) {\n if (onFail === \"throw\") {\n throw new Error(\"judge.classify failed: \" + (outcome && outcome.reason ? outcome.reason : \"unknown error\") + (outcome && outcome.detail ? \" (\" + outcome.detail + \")\" : \"\"));\n }\n if (onFail === \"empty\") return [];\n return chunk.map((c) => ({ item: c.item, category: options.fallbackCategory, confidence: undefined }));\n }\n return chunk.map((c, idx) => {\n const ans = outcome.answers && outcome.answers[\"item_\" + idx];\n const category = ans && ans.type === \"choice\" && typeof ans.choice === \"string\" ? ans.choice : options.fallbackCategory;\n const confidence = ans && typeof ans.confidence === \"number\" ? ans.confidence : undefined;\n return { item: c.item, category, confidence };\n });\n });\n const results = await Promise.all(chunkPromises);\n return results.flat();\n};\nglobalThis.judge = Object.freeze({\n ask: __judgeAsk,\n bool: __judgeBool,\n choice: __judgeChoice,\n score: __judgeScore,\n filter: __judgeFilter,\n classify: __judgeClassify,\n});\nconst __createActor = async (args = {}) => {\n if (!args || typeof args !== \"object\" || Array.isArray(args)) {\n throw new TypeError(\"agents.create expects an options object\");\n }\n const request = { ...args };\n const validWhile = request.validWhile;\n if (validWhile !== undefined) {\n if (typeof validWhile !== \"function\") {\n throw new TypeError(\"agents.create validWhile must be a pure predicate function\");\n }\n const source = Function.prototype.toString.call(validWhile);\n if (source.trimStart().startsWith(\"async\")) {\n throw new TypeError(\"agents.create validWhile must be synchronous\");\n }\n request.validWhile = { version: 1, source };\n }\n return __call(\"agents.create\", request);\n};\nconst __handoff = async (args = {}) => {\n if (!args || typeof args !== \"object\" || Array.isArray(args)) {\n throw new TypeError(\"agents.handoff expects an options object\");\n }\n const request = { ...args };\n const when = request.when;\n delete request.when;\n if (when !== undefined) {\n if (typeof when !== \"function\") {\n throw new TypeError(\"agents.handoff when must be a pure predicate function\");\n }\n const decision = when(__handoffFacts());\n if (decision && typeof decision.then === \"function\") {\n throw new TypeError(\"agents.handoff when must return a boolean synchronously\");\n }\n if (decision !== true) {\n throw new Error(\"agents.handoff predicate returned false; no agent was started\");\n }\n }\n return __call(\"agents.handoff\", request);\n};\nglobalThis.agents = Object.freeze({\n run: (args) => __call(\"agents.run\", args),\n handoff: __handoff,\n spawn: (args) => __call(\"agents.spawn\", args),\n wait: (args) => __call(\"agents.wait\", args),\n status: (args) => __call(\"agents.status\", args),\n list: (args = {}) => __call(\"agents.list\", args),\n members: (args = {}) => __call(\"agents.members\", args),\n self: () => __call(\"agents.self\", {}),\n main: () => __call(\"agents.main\", {}),\n peers: () => __call(\"agents.peers\", {}),\n subscribe: (args) => __call(\"agents.subscribe\", args),\n subscriptions: (args = {}) => __call(\"agents.subscriptions\", args),\n unsubscribe: (args) => __call(\"agents.unsubscribe\", args),\n models: (args = {}) => __call(\"agents.models\", args),\n stop: (args) => __call(\"agents.stop\", args),\n cleanup: (args) => __call(\"agents.cleanup\", args),\n create: __createActor,\n ask: (args) => __call(\"agents.ask\", args),\n tell: (args) => __call(\"agents.tell\", args),\n steer: (args) => __call(\"agents.steer\", args),\n followUp: (args) => __call(\"agents.followUp\", args),\n setSteeringMode: (args) => __call(\"agents.setSteeringMode\", args),\n setFollowUpMode: (args) => __call(\"agents.setFollowUpMode\", args),\n actorStatus: (args) => __call(\"agents.actorStatus\", args),\n setModel: (args) => __call(\"agents.setModel\", args),\n switchModel: (args) => __call(\"agents.switchModel\", args),\n setThinking: (args) => __call(\"agents.setThinking\", args),\n setEvents: (args) => __call(\"agents.setEvents\", args),\n setInstructions: (args) => __call(\"agents.setInstructions\", args),\n actors: () => __call(\"agents.actors\", {}),\n messages: (args) => __call(\"agents.messages\", args),\n remove: (args) => __call(\"agents.remove\", args),\n log: (args) => __call(\"agents.log\", args),\n});\nglobalThis.mesh = Object.freeze({\n self: () => __call(\"mesh.self\", {}),\n publish: (args) => __call(\"mesh.publish\", args),\n read: (args = {}) => __call(\"mesh.read\", args),\n members: (args = {}) => __call(\"mesh.members\", args),\n get: (args) => __call(\"mesh.get\", args),\n list: (args = {}) => __call(\"mesh.list\", args),\n put: (args) => __call(\"mesh.put\", args),\n delete: (args) => __call(\"mesh.delete\", args),\n});\n// The mcp proxy itself stays schema-less \u2014 the registry validates args at\n// dispatch \u2014 but guestTypeDeclarations renders per-server argument types from\n// the live descriptor cache (runtime/dynamic-guest-types.ts), so known tools\n// fail type-check on argument-shape mistakes before this proxy ever runs.\nconst __mcpServerTools = (() => {\n const raw = __proxyNames.mcp;\n const out = {};\n if (raw && typeof raw === \"object\") {\n for (const server of Object.keys(raw)) out[server] = __nameList(raw[server]);\n }\n return out;\n})();\nconst __mcpManagement = {\n servers: () => __call(\"mcp.$servers\", {}),\n reload: () => __call(\"mcp.$reload\", {}),\n register: (args) => __call(\"mcp.$register\", args),\n call: (args) => __call(\"mcp.$call\", args),\n};\nglobalThis.mcp = __lazyNamespace(\n Object.keys(__mcpServerTools).sort(),\n (server) => __lazyNamespace(\n __mcpServerTools[server] ? __mcpServerTools[server].slice().sort() : [],\n (tool) => (args = {}) => __call(\"mcp.\" + server + \".\" + tool, args),\n ),\n __mcpManagement,\n);\nlet __workflowSpentTokens = 0;\nconst __workflowBudgetTotal = Number.isFinite(globalThis.__fabricTokenBudget)\n ? Math.max(0, globalThis.__fabricTokenBudget)\n : Number.POSITIVE_INFINITY;\nconst __recordAgentUsage = (result) => {\n const usage = result && result.usage;\n if (usage) __workflowSpentTokens += Number(usage.input || 0) + Number(usage.output || 0);\n return result;\n};\nconst __workflowAgent = async (prompt, options = {}) => {\n if (__workflowSpentTokens >= __workflowBudgetTotal) {\n throw new Error(\"Fabric workflow token budget exhausted\");\n }\n const { label, ...agentOptions } = options;\n const workerName = String(label || agentOptions.name || \"Fabric workflow agent\");\n const result = __recordAgentUsage(await agents.run({\n ...agentOptions,\n ...(label && !agentOptions.name ? { name: label } : {}),\n task: prompt,\n }));\n if (!result || result.status !== \"completed\") {\n const reason = result && result.error ? result.error : \"agent did not complete\";\n throw new Error(workerName + \" failed: \" + reason);\n }\n return result.value !== undefined ? result.value : result.text;\n};\n// Budget-aware agents.run used by council.run and rlm.query so their usage is\n// counted in budget.spent() and the tokenBudget guard can preempt them, just\n// like workflow.agent(). Without this, councils bypass the budget entirely.\nconst __budgetedRun = async (args) => {\n if (__workflowSpentTokens >= __workflowBudgetTotal) {\n throw new Error(\"Fabric workflow token budget exhausted\");\n }\n return __recordAgentUsage(await agents.run(args));\n};\nlet __nextWorkflowSpanId = 0;\nconst __workflowSpanMetadata = (kind, items, options, stageCount) => {\n const itemCount = Array.isArray(items) ? items.length : undefined;\n let concurrency;\n if (kind === \"parallel\" && itemCount !== undefined) {\n if (itemCount === 0) concurrency = 0;\n else {\n const concurrencyOpt = typeof options === \"number\" ? { concurrency: options } : options ?? {};\n const requested = Number(concurrencyOpt.concurrency ?? itemCount);\n if (Number.isFinite(requested) && requested >= 1) {\n concurrency = Math.max(1, Math.min(itemCount, Math.floor(requested)));\n }\n }\n }\n return {\n kind,\n ...(itemCount !== undefined ? { itemCount } : {}),\n ...(stageCount !== undefined ? { stageCount } : {}),\n ...(concurrency !== undefined ? { concurrency } : {}),\n };\n};\nconst __withWorkflowSpan = async (metadata, body) => {\n const id = \"span-\" + __nextWorkflowSpanId++;\n await __call(\"fabric.$spanStart\", { id, ...metadata });\n try {\n const value = await body();\n await __call(\"fabric.$spanEnd\", { id, outcome: \"succeeded\" });\n return value;\n } catch (error) {\n try { await __call(\"fabric.$spanEnd\", { id, outcome: \"failed\" }); } catch { /* preserve the workflow error */ }\n throw error;\n }\n};\nconst __runParallel = async (thunks, options) => {\n if (!Array.isArray(thunks) || thunks.some((thunk) => typeof thunk !== \"function\")) {\n throw new TypeError(\"workflow.parallel expects an array of functions or (items, mapper)\");\n }\n if (thunks.length === 0) return [];\n const concurrencyOpt = typeof options === \"number\" ? { concurrency: options } : options ?? {};\n const requestedConcurrency = Number(concurrencyOpt.concurrency ?? thunks.length);\n if (!Number.isFinite(requestedConcurrency) || requestedConcurrency < 1) {\n throw new RangeError(\"workflow.parallel concurrency must be a positive finite number\");\n }\n const concurrency = Math.max(1, Math.min(thunks.length || 1, Math.floor(requestedConcurrency)));\n const results = new Array(thunks.length);\n let cursor = 0;\n await Promise.all(Array.from({ length: concurrency }, async () => {\n while (cursor < thunks.length) {\n const index = cursor++;\n results[index] = await thunks[index]();\n }\n }));\n return results;\n};\nconst __workflowParallel = async (items, arg2, arg3) => {\n const options = typeof arg2 === \"function\" ? arg3 : arg2;\n return __withWorkflowSpan(\n __workflowSpanMetadata(\"parallel\", items, options),\n async () => {\n if (typeof arg2 === \"function\") {\n if (!Array.isArray(items)) throw new TypeError(\"workflow.parallel expects an array as the first argument\");\n return __runParallel(items.map((item, index) => () => arg2(item, index)), arg3);\n }\n return __runParallel(items, arg2);\n },\n );\n};\nconst __workflowPipeline = async (items, ...stages) =>\n __withWorkflowSpan(\n __workflowSpanMetadata(\"pipeline\", items, undefined, stages.length),\n async () => {\n if (!Array.isArray(items) || stages.some((stage) => typeof stage !== \"function\")) {\n throw new TypeError(\"workflow.pipeline expects an array followed by stage functions\");\n }\n return __workflowParallel(items.map((original, index) => async () => {\n let value = original;\n for (const stage of stages) value = await stage(value, original, index);\n return value;\n }));\n },\n );\nglobalThis.workflow = Object.freeze({\n agent: __workflowAgent,\n parallel: __workflowParallel,\n pipeline: __workflowPipeline,\n configure: (args) => __call(\"fabric.$configure\", args),\n phase: (nameOrInput, options = {}) => {\n const input =\n nameOrInput && typeof nameOrInput === \"object\" && !Array.isArray(nameOrInput)\n ? { ...nameOrInput }\n : { ...options, name: nameOrInput };\n return __call(\"fabric.$phase\", input);\n },\n item: (args) => __call(\"fabric.$item\", args),\n event: (args) => __call(\"fabric.$event\", args),\n log: (...values) => print(...values),\n budget: Object.freeze({\n total: __workflowBudgetTotal,\n spent: () => __workflowSpentTokens,\n remaining: () => Math.max(0, __workflowBudgetTotal - __workflowSpentTokens),\n }),\n});\nglobalThis.agent = __workflowAgent;\nglobalThis.parallel = __workflowParallel;\nglobalThis.pipeline = __workflowPipeline;\nglobalThis.phase = workflow.phase;\nglobalThis.log = workflow.log;\nglobalThis.budget = workflow.budget;\nglobalThis.rlm = Object.freeze({\n query: (args) => {\n if (args && args.runner && args.runner !== \"omp\") {\n throw new Error(\"rlm.query requires the OMP runner because recursive Fabric is unavailable in Claude Code\");\n }\n return __budgetedRun({ ...args, runner: \"omp\", recursive: true });\n },\n});\nglobalThis.council = Object.freeze({\n async run(args) {\n const { task, roles, synthesize = true, ...agentOptions } = args;\n const results = await Promise.all(roles.map((role) => __budgetedRun({\n ...agentOptions,\n name: role,\n task: \"Act as the \" + role + \" council member. Independently analyze this task:\\\\n\\\\n\" + task,\n })));\n if (!synthesize) return results;\n return __budgetedRun({\n ...agentOptions,\n name: \"council-synthesizer\",\n task: \"Synthesize the council's independent reports into one decision. Preserve disagreements and cite which role raised each concern.\\\\n\\\\nTask:\\\\n\" + task + \"\\\\n\\\\nReports:\\\\n\" + JSON.stringify(results),\n });\n },\n});\nglobalThis.console = Object.freeze({ log: print, info: print, warn: print, error: print });\nconst __timerCallbacks = new Map();\nlet __nextTimerId = 1;\nglobalThis.setTimeout = (callback, ms = 0) => {\n const id = __nextTimerId++;\n __timerCallbacks.set(id, { callback, interval: false });\n __call(\"fabric.$timer\", { ms }).then(() => {\n const entry = __timerCallbacks.get(id);\n if (!entry) return;\n __timerCallbacks.delete(id);\n try { entry.callback(); } catch { /* swallow timer callback errors */ }\n });\n return id;\n};\nglobalThis.setInterval = (callback, ms = 0) => {\n const id = __nextTimerId++;\n __timerCallbacks.set(id, { callback, interval: true });\n const schedule = () => {\n __call(\"fabric.$timer\", { ms }).then(() => {\n const entry = __timerCallbacks.get(id);\n if (!entry) return;\n try { entry.callback(); } catch { /* swallow timer callback errors */ }\n if (__timerCallbacks.has(id)) schedule();\n });\n };\n schedule();\n return id;\n};\nglobalThis.clearTimeout = (id) => { __timerCallbacks.delete(id); };\nglobalThis.clearInterval = (id) => { __timerCallbacks.delete(id); };\n})();\n`;\n\nconst formatValue = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n if (value instanceof Error) return value.stack ?? value.message;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n};\n\nconst jsonText = (value: unknown): string => {\n const serialized = JSON.stringify(value);\n if (serialized === undefined) return \"null\";\n return serialized;\n};\n\nconst jsonHandle = (\n context: any,\n jsonObject: any,\n jsonParse: any,\n value: unknown,\n): any => {\n if (value === undefined) return context.undefined;\n if (value === null) return context.null;\n if (typeof value === \"string\") return context.newString(value);\n if (typeof value === \"boolean\") return value ? context.true : context.false;\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? context.newNumber(value) : context.null;\n }\n const serialized = context.newString(jsonText(value));\n try {\n return context.unwrapResult(context.callFunction(jsonParse, jsonObject, serialized));\n } finally {\n serialized.dispose();\n }\n};\n\nconst HOST_TASK_SETTLE_GRACE_MS = 250;\n\n// The release-sync WASM variant otherwise exhausts the host stack before\n// QuickJS can throw its guest-catchable InternalError.\nconst QUICKJS_MAX_STACK_SIZE_BYTES = 256 * 1024;\nconst QUICKJS_GC_LIST_ASSERTION = \"list_empty(&rt->gc_obj_list)\";\n\n// Preserve an already-computed result for this known Emscripten teardown\n// assertion while allowing every unrelated disposal failure to escape.\nconst disposeQuickJsContext = (context: any): void => {\n try {\n context.dispose();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes(QUICKJS_GC_LIST_ASSERTION) && message.includes(\"JS_FreeRuntime\")) return;\n throw error;\n }\n};\n\nexport class QuickJsRuntime {\n async execute(\n code: string,\n hostCall: FabricHostCall,\n options: FabricSandboxOptions,\n ): Promise<FabricSandboxResult> {\n if (options.signal?.aborted) {\n return {\n value: undefined,\n logs: [],\n terminationReason: \"aborted\",\n error: \"Execution cancelled\",\n };\n }\n const missingKeys = missingPayloadKeys(code, options.payloads);\n if (missingKeys.length > 0) {\n const provided = Object.keys(options.payloads ?? {});\n return {\n value: undefined,\n logs: [],\n terminationReason: \"runtime_error\",\n error:\n \"Pre-execution check: \" + missingKeys.map((key) => \"payloads.\" + key).join(\", \")\n + (missingKeys.length === 1 ? \" is referenced in code but its key is missing from the payloads parameter\"\n : \" are referenced in code but their keys are missing from the payloads parameter\")\n + (provided.length ? \" (provided: \" + provided.join(\", \") + \")\" : \" (none provided)\")\n + \". Add payloads: { \" + missingKeys.join(\": '...', \") + \": '...' } to the fabric_exec arguments, then reference the value as payloads.<key>.\"\n + \" For large or quote-heavy content, keep it in top-level payloads and reference payloads.<key> instead of escaping it inside code.\",\n };\n }\n if (\n !Number.isSafeInteger(options.memoryLimitBytes) ||\n options.memoryLimitBytes < 1 ||\n options.memoryLimitBytes > 0xffff_ffff\n ) {\n return {\n value: undefined,\n logs: [],\n terminationReason: \"runtime_error\",\n error: \"QuickJS memory limit must be an integer between 1 byte and 4294967295 bytes (WASM32 maximum)\",\n };\n }\n const module = await quickJsModule();\n const context = module.newContext();\n const runtime = context.runtime;\n const jsonObject = context.getProp(context.global, \"JSON\");\n const jsonParse = context.getProp(jsonObject, \"parse\");\n const executionStartedAt = Date.now();\n let effectiveTimeoutMs = options.timeoutMs;\n let executionDeadlineAt = executionStartedAt + effectiveTimeoutMs;\n let interruptedByDeadline = false;\n runtime.setMemoryLimit(options.memoryLimitBytes);\n runtime.setMaxStackSize(QUICKJS_MAX_STACK_SIZE_BYTES);\n runtime.setInterruptHandler(() => {\n if (options.signal?.aborted === true) return true;\n if (Date.now() <= executionDeadlineAt) return false;\n interruptedByDeadline = true;\n return true;\n });\n const logs: string[] = [];\n const maxLogChars = options.maxLogChars ?? 100_000;\n let logChars = 0;\n let logsTruncated = false;\n const pendingHostPromises = new Set<any>();\n const hostTasks = new Set<Promise<void>>();\n const pendingTimers = new Set<NodeJS.Timeout>();\n let closing = false;\n let cancelled = false;\n let timedOut = false;\n let timeout: NodeJS.Timeout | undefined;\n let rejectDeadline: ((error: Error) => void) | undefined;\n let abortHandler: (() => void) | undefined;\n let activePromiseHandle: any;\n let executionGate: any;\n let pendingResolution: Promise<any> | undefined;\n const hostAbortController = new AbortController();\n const abortHostCalls = (reason: string): void => {\n if (!hostAbortController.signal.aborted) {\n hostAbortController.abort(new Error(reason));\n }\n };\n\n const rejectExecutionGate = (message: string): void => {\n if (!executionGate || executionGate.alive === false) return;\n const errorHandle = context.newError(message);\n executionGate.reject(errorHandle);\n errorHandle.dispose();\n runtime.executePendingJobs();\n };\n\n const timeoutMessage = (): string =>\n `Execution timed out after ${effectiveTimeoutMs}ms`;\n const expireDeadline = (): void => {\n if (closing || cancelled || timedOut) return;\n timedOut = true;\n const message = timeoutMessage();\n abortHostCalls(message);\n rejectExecutionGate(message);\n rejectDeadline?.(new Error(message));\n };\n const scheduleDeadline = (): void => {\n if (!rejectDeadline || closing || cancelled || timedOut) return;\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(expireDeadline, Math.max(0, executionDeadlineAt - Date.now()));\n };\n const extendExecutionTimeout = (\n ref: string,\n args: Record<string, unknown>,\n ): void => {\n const requestedTimeoutMs = options.minimumTimeoutMsForHostCall?.(ref, args);\n if (\n typeof requestedTimeoutMs !== \"number\" ||\n !Number.isFinite(requestedTimeoutMs)\n ) {\n return;\n }\n const requestedDurationMs = Math.max(1, Math.floor(requestedTimeoutMs));\n const nextDeadlineAt = Date.now() + requestedDurationMs;\n const nextTimeoutMs = nextDeadlineAt - executionStartedAt;\n if (nextDeadlineAt <= executionDeadlineAt) return;\n effectiveTimeoutMs = nextTimeoutMs;\n executionDeadlineAt = nextDeadlineAt;\n scheduleDeadline();\n };\n\n try {\n const hostFunction = context.newFunction(\n \"__fabricHostCall\",\n (referenceHandle: any, argsHandle: any) => {\n const reference = context.getString(referenceHandle);\n const dumpedArgs = context.dump(argsHandle);\n const args =\n typeof dumpedArgs === \"object\" && dumpedArgs !== null && !Array.isArray(dumpedArgs)\n ? (dumpedArgs as Record<string, unknown>)\n : {};\n extendExecutionTimeout(reference, args);\n const promise = context.newPromise();\n pendingHostPromises.add(promise);\n void promise.settled.then(() => pendingHostPromises.delete(promise));\n if (reference === \"fabric.$timer\") {\n const ms = Math.max(0, Number(args.ms ?? 0));\n const timer = setTimeout(() => {\n if (closing || promise.alive === false) return;\n promise.resolve(context.undefined);\n runtime.executePendingJobs();\n }, ms);\n timer.unref?.();\n pendingTimers.add(timer);\n void promise.settled.then(() => pendingTimers.delete(timer));\n return promise.handle;\n }\n const task = runAbortable(hostAbortController.signal, () =>\n hostCall(reference, args, hostAbortController.signal),\n )\n .then((value) => {\n if (closing || promise.alive === false) return;\n const handle = jsonHandle(context, jsonObject, jsonParse, value);\n promise.resolve(handle);\n handle.dispose();\n })\n .catch((error) => {\n if (closing || promise.alive === false) return;\n const errorHandle = context.newError(\n error instanceof Error ? error.message : String(error),\n );\n const exit = reference === \"omp.bash\"\n ? ompBashExitMetadata(error)\n : undefined;\n if (exit) {\n const metadata = jsonHandle(context, jsonObject, jsonParse, exit);\n context.setProp(errorHandle, \"__fabricBashExit\", metadata);\n metadata.dispose();\n }\n promise.reject(errorHandle);\n errorHandle.dispose();\n })\n .finally(() => {\n if (!closing) runtime.executePendingJobs();\n });\n hostTasks.add(task);\n void task.finally(() => hostTasks.delete(task));\n return promise.handle;\n },\n );\n context.setProp(context.global, \"__fabricHostCall\", hostFunction);\n hostFunction.dispose();\n\n const printFunction = context.newFunction(\"print\", (...handles: any[]) => {\n if (logsTruncated) return;\n const line = handles.map((handle) => formatValue(context.dump(handle))).join(\" \");\n const remaining = maxLogChars - logChars;\n if (line.length > remaining) {\n if (remaining > 0) logs.push(line.slice(0, remaining));\n logs.push(\"[OMP Fabric log output truncated]\");\n logsTruncated = true;\n return;\n }\n logs.push(line);\n logChars += line.length;\n });\n context.setProp(context.global, \"print\", printFunction);\n printFunction.dispose();\n\n const payloads = jsonHandle(context, jsonObject, jsonParse, options.payloads ?? {});\n context.setProp(context.global, \"payloads\", payloads);\n payloads.dispose();\n const proxyNames = jsonHandle(\n context,\n jsonObject,\n jsonParse,\n options.proxyNames ?? {},\n );\n context.setProp(context.global, \"__fabricProxyNames\", proxyNames);\n proxyNames.dispose();\n const tokenBudget = context.newNumber(options.tokenBudget ?? Number.POSITIVE_INFINITY);\n context.setProp(context.global, \"__fabricTokenBudget\", tokenBudget);\n tokenBudget.dispose();\n\n const setupResult = context.evalCode(GUEST_SETUP, \"omp-fabric-setup.js\");\n if (setupResult.error) {\n const deadlineExceeded = interruptedByDeadline || Date.now() > executionDeadlineAt;\n if (deadlineExceeded) timedOut = true;\n const error = options.signal?.aborted\n ? \"Execution cancelled\"\n : deadlineExceeded\n ? timeoutMessage()\n : formatValue(context.dump(setupResult.error));\n setupResult.error.dispose();\n abortHostCalls(error);\n return {\n value: undefined,\n logs,\n terminationReason: options.signal?.aborted\n ? \"aborted\"\n : deadlineExceeded\n ? \"timed_out\"\n : \"runtime_error\",\n error,\n };\n }\n setupResult.value.dispose();\n\n executionGate = context.newPromise();\n context.setProp(context.global, \"__fabricExecutionGate\", executionGate.handle);\n const guestBundle = options.transpiledCode === undefined\n ? transpileFabricCodeWithSourceMap(code)\n : { code: options.transpiledCode, sourceMap: options.transpiledSourceMap };\n const guestStackMap = createGuestStackMap(guestBundle.sourceMap);\n const guestLineCount = guestBundle.code.split(\"\\n\").length;\n const wrappedCode = `${guestBundle.code}\\nPromise.race([${OMP_GUEST_ENTRYPOINT}(), globalThis.__fabricExecutionGate])`;\n const evaluation = context.evalCode(wrappedCode, \"omp-fabric-guest.js\");\n runtime.executePendingJobs();\n if (evaluation.error) {\n const deadlineExceeded = interruptedByDeadline || Date.now() > executionDeadlineAt;\n if (deadlineExceeded) timedOut = true;\n const error = options.signal?.aborted\n ? \"Execution cancelled\"\n : deadlineExceeded\n ? timeoutMessage()\n : remapGuestErrorText(formatValue(context.dump(evaluation.error)), guestStackMap, guestLineCount);\n evaluation.error.dispose();\n abortHostCalls(error);\n return {\n value: undefined,\n logs,\n terminationReason: options.signal?.aborted\n ? \"aborted\"\n : deadlineExceeded\n ? \"timed_out\"\n : \"runtime_error\",\n error,\n };\n }\n\n activePromiseHandle = evaluation.value;\n const cancellation = new Promise<never>((_resolve, reject) => {\n abortHandler = () => {\n cancelled = true;\n hostAbortController.abort(options.signal?.reason);\n rejectExecutionGate(\"Execution cancelled\");\n reject(new Error(\"Execution cancelled\"));\n };\n if (options.signal?.aborted) abortHandler();\n else options.signal?.addEventListener(\"abort\", abortHandler, { once: true });\n });\n void cancellation.catch(() => undefined);\n const deadline = new Promise<never>((_resolve, reject) => {\n rejectDeadline = reject;\n scheduleDeadline();\n });\n pendingResolution = context.resolvePromise(activePromiseHandle);\n runtime.executePendingJobs();\n const resolution = await Promise.race([pendingResolution, deadline, cancellation]);\n pendingResolution = undefined;\n activePromiseHandle.dispose();\n activePromiseHandle = undefined;\n if (resolution.error) {\n const deadlineExceeded = timedOut || interruptedByDeadline || Date.now() > executionDeadlineAt;\n if (deadlineExceeded) timedOut = true;\n const error = options.signal?.aborted\n ? \"Execution cancelled\"\n : deadlineExceeded\n ? timeoutMessage()\n : remapGuestErrorText(formatValue(context.dump(resolution.error)), guestStackMap, guestLineCount);\n resolution.error.dispose();\n abortHostCalls(error);\n return {\n value: undefined,\n logs,\n terminationReason: options.signal?.aborted\n ? \"aborted\"\n : deadlineExceeded\n ? \"timed_out\"\n : \"runtime_error\",\n error,\n };\n }\n const value = context.dump(resolution.value);\n resolution.value.dispose();\n return { value, logs, terminationReason: \"completed\" };\n } catch (error) {\n const deadlineExceeded = timedOut || interruptedByDeadline || Date.now() > executionDeadlineAt;\n if (deadlineExceeded) timedOut = true;\n abortHostCalls(error instanceof Error ? error.message : String(error));\n return {\n value: undefined,\n logs,\n terminationReason: cancelled ? \"aborted\" : deadlineExceeded ? \"timed_out\" : \"runtime_error\",\n error: cancelled\n ? \"Execution cancelled\"\n : deadlineExceeded\n ? timeoutMessage()\n : error instanceof Error\n ? error.message\n : String(error),\n };\n } finally {\n if (timeout) clearTimeout(timeout);\n for (const timer of pendingTimers) clearTimeout(timer);\n if (abortHandler) options.signal?.removeEventListener(\"abort\", abortHandler);\n if (hostTasks.size > 0) {\n const settled = await settleWithin(hostTasks, HOST_TASK_SETTLE_GRACE_MS);\n if (!settled) {\n abortHostCalls(\"Fabric guest execution ended before its host calls settled\");\n await settleWithin(hostTasks, HOST_TASK_SETTLE_GRACE_MS);\n }\n runtime.executePendingJobs();\n }\n closing = true;\n if (timedOut || cancelled || pendingHostPromises.size > 0) {\n const cleanupMessage = cancelled\n ? \"Execution cancelled\"\n : timedOut\n ? timeoutMessage()\n : \"Fabric guest execution ended before its host calls settled\";\n if (!hostAbortController.signal.aborted) hostAbortController.abort(new Error(cleanupMessage));\n rejectExecutionGate(cleanupMessage);\n const errorHandle = context.newError(cleanupMessage);\n for (const promise of pendingHostPromises) promise.reject(errorHandle);\n errorHandle.dispose();\n runtime.executePendingJobs();\n await new Promise((resolve) => setImmediate(resolve));\n const settled = await Promise.race<any>([\n pendingResolution ? pendingResolution.catch(() => undefined) : Promise.resolve(undefined),\n new Promise<undefined>((resolve) => {\n const timer = setTimeout(() => resolve(undefined), 1_000);\n timer.unref?.();\n }),\n ]);\n if (settled?.error) settled.error.dispose();\n if (settled?.value) settled.value.dispose();\n for (const promise of pendingHostPromises) {\n if (promise.alive !== false) promise.dispose();\n }\n }\n if (activePromiseHandle?.alive !== false) activePromiseHandle?.dispose();\n if (executionGate?.alive !== false) executionGate?.dispose();\n runtime.executePendingJobs();\n jsonParse.dispose();\n jsonObject.dispose();\n disposeQuickJsContext(context);\n }\n }\n}\n", "// Stack frames captured from the executed guest bundle reference the emitted\n// omp-fabric-guest.js (wrapper header plus TypeScript printer layout), not the\n// author's program. These helpers decode the transpile source map and rewrite\n// error text so stack positions point back at the user-submitted code.\n\ninterface GuestSourcePosition {\n line: number;\n column: number;\n}\n\nexport interface GuestStackMap {\n lookup(line: number, column: number): GuestSourcePosition | undefined;\n}\n\ninterface GuestSourceMapJson {\n mappings?: unknown;\n}\n\ninterface MappingSegment {\n generatedColumn: number;\n sourceLine: number;\n sourceColumn: number;\n}\n\nconst BASE64_VALUES = (() => {\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n const table = new Map<string, number>();\n for (let index = 0; index < alphabet.length; index += 1) {\n table.set(alphabet[index] as string, index);\n }\n return table;\n})();\n\nconst decodeVlqSegment = (segment: string): number[] => {\n const values: number[] = [];\n let index = 0;\n while (index < segment.length) {\n let value = 0;\n let shift = 0;\n let continuation = true;\n while (continuation) {\n const digit = BASE64_VALUES.get(segment[index] as string);\n if (digit === undefined) return values;\n index += 1;\n continuation = (digit & 32) !== 0;\n value += (digit & 31) * 2 ** shift;\n shift += 5;\n }\n values.push((value & 1) === 1 ? -(value >> 1) : value >> 1);\n }\n return values;\n};\n\nconst decodeMappings = (mappings: string): MappingSegment[][] => {\n const lines: MappingSegment[][] = [];\n let sourceLine = 0;\n let sourceColumn = 0;\n for (const line of mappings.split(\";\")) {\n const segments: MappingSegment[] = [];\n let generatedColumn = 0;\n for (const rawSegment of line.split(\",\")) {\n if (!rawSegment) continue;\n const values = decodeVlqSegment(rawSegment);\n // values[1] is the source index delta; single-source guest maps never\n // need it, so only generated column and source position accumulate.\n if (values.length < 4) continue;\n generatedColumn += values[0] as number;\n sourceLine += values[2] as number;\n sourceColumn += values[3] as number;\n segments.push({ generatedColumn, sourceLine, sourceColumn });\n }\n lines.push(segments);\n }\n return lines;\n};\n\nexport const createGuestStackMap = (\n sourceMapText: string | undefined,\n): GuestStackMap | undefined => {\n if (!sourceMapText) return undefined;\n let mappings: string;\n try {\n const parsed = JSON.parse(sourceMapText) as GuestSourceMapJson;\n if (typeof parsed.mappings !== \"string\") return undefined;\n mappings = parsed.mappings;\n } catch {\n return undefined;\n }\n // Validating the envelope above is cheap; decoding the VLQ mappings defers\n // to the first error lookup so clean executions pay almost nothing for\n // diagnostics they never render.\n let decoded: MappingSegment[][] | undefined;\n return {\n lookup(line, column) {\n decoded ??= decodeMappings(mappings);\n const segments = decoded[line - 1];\n if (!segments) return undefined;\n const target = column - 1;\n let best: MappingSegment | undefined;\n for (const segment of segments) {\n if (segment.generatedColumn > target) break;\n best = segment;\n }\n // Columns before the first segment point at line indentation; anchor\n // them to the first statement segment rather than leaving the frame\n // in emitted-file coordinates.\n best ??= segments[0];\n if (!best) return undefined;\n // The wrapper header occupies source line 1, so the zero-based source\n // line already equals the author's one-based program line.\n return { line: best.sourceLine, column: best.sourceColumn + 1 };\n },\n };\n};\n\nconst GUEST_FRAME_PATTERN = /omp-fabric-guest\\.js:(\\d+):(\\d+)/g;\n\nexport const remapGuestErrorText = (\n text: string,\n stackMap: GuestStackMap | undefined,\n guestLineCount?: number,\n): string => {\n if (!stackMap || !text.includes(\"omp-fabric-guest.js:\")) return text;\n return text.replace(GUEST_FRAME_PATTERN, (match, lineText, columnText) => {\n const line = Number(lineText);\n const mapped = stackMap.lookup(line, Number(columnText));\n if (mapped) return `guest code:${mapped.line}:${mapped.column}`;\n // Both runtimes append their driver call after the emitted bundle, so\n // frames beyond it can only be harness machinery, never user statements.\n if (guestLineCount !== undefined && line > guestLineCount) return \"fabric driver\";\n return match;\n });\n};\n"],
|
|
5
|
+
"mappings": "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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
|
|
6
|
+
"names": ["value"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
readFabricExecutionTraceV1
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FL4A542C.js";
|
|
4
4
|
|
|
5
5
|
// src/compaction/branch-details.ts
|
|
6
6
|
var FABRIC_BRANCH_SUMMARY_KIND = "omp-fabric.branch-summary";
|
|
@@ -218,4 +218,4 @@ export {
|
|
|
218
218
|
readFabricBranchSummaryDetails,
|
|
219
219
|
readFabricProjectionTrace
|
|
220
220
|
};
|
|
221
|
-
//# sourceMappingURL=chunk-
|
|
221
|
+
//# sourceMappingURL=chunk-AZBJNZS4.js.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
lifecycleSourceIdentity,
|
|
11
11
|
loadModelUsage,
|
|
12
12
|
useBudgetLedger
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-YAI5SCIE.js";
|
|
14
14
|
import {
|
|
15
15
|
normalizeModelAliases,
|
|
16
16
|
resolveAvailableOmpModel
|
|
@@ -685,4 +685,4 @@ if (isMain) {
|
|
|
685
685
|
export {
|
|
686
686
|
runResidentHostFromConfigPath
|
|
687
687
|
};
|
|
688
|
-
//# sourceMappingURL=chunk-
|
|
688
|
+
//# sourceMappingURL=chunk-BMSAIMFB.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
import {
|
|
10
10
|
DEFAULT_MEMORY_INDEX_PRIVACY,
|
|
11
11
|
normalizeSession
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-Z6TTRT6Q.js";
|
|
13
13
|
|
|
14
14
|
// src/memory/index.ts
|
|
15
15
|
import crypto2 from "node:crypto";
|
|
@@ -1226,4 +1226,4 @@ export {
|
|
|
1226
1226
|
searchMemoryIndex,
|
|
1227
1227
|
searchShards
|
|
1228
1228
|
};
|
|
1229
|
-
//# sourceMappingURL=chunk-
|
|
1229
|
+
//# sourceMappingURL=chunk-BWLZ6VDQ.js.map
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
FABRIC_BRANCH_SUMMARY_VERSION,
|
|
23
23
|
readFabricBranchSummaryDetails,
|
|
24
24
|
readFabricProjectionTrace
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-AZBJNZS4.js";
|
|
26
26
|
|
|
27
27
|
// src/compaction/hook.ts
|
|
28
28
|
import "@oh-my-pi/pi-coding-agent";
|
|
@@ -1748,4 +1748,4 @@ export {
|
|
|
1748
1748
|
compileFabricSummary,
|
|
1749
1749
|
registerCompactionHook
|
|
1750
1750
|
};
|
|
1751
|
-
//# sourceMappingURL=chunk-
|
|
1751
|
+
//# sourceMappingURL=chunk-D55BFSFK.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
sessionDirsForCwd,
|
|
15
15
|
sessionsDirRoot
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-WX6C7N3W.js";
|
|
17
17
|
import {
|
|
18
18
|
stableJsonHash,
|
|
19
19
|
stableJsonHashArrayAsync
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
import {
|
|
26
26
|
FABRIC_EXECUTION_TRACE_KIND,
|
|
27
27
|
readFabricExecutionTraceV1
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-FL4A542C.js";
|
|
29
29
|
|
|
30
30
|
// src/entropy/types.ts
|
|
31
31
|
var ENTROPY_METRIC_VERSION = 2;
|
|
@@ -2208,4 +2208,4 @@ export {
|
|
|
2208
2208
|
formatEntropyCompileNotice,
|
|
2209
2209
|
runEntropyTrial
|
|
2210
2210
|
};
|
|
2211
|
-
//# sourceMappingURL=chunk-
|
|
2211
|
+
//# sourceMappingURL=chunk-E3KTE736.js.map
|
|
@@ -181,6 +181,7 @@ var projectFabricAuditArgs = (ref, args) => {
|
|
|
181
181
|
return projected(args, (output) => {
|
|
182
182
|
copyPath(output, args);
|
|
183
183
|
copyNumber(output, args, "context");
|
|
184
|
+
copyNumber(output, args, "skip");
|
|
184
185
|
copyNumber(output, args, "limit");
|
|
185
186
|
});
|
|
186
187
|
case "omp.find":
|
|
@@ -783,4 +784,4 @@ export {
|
|
|
783
784
|
isFabricExecutionTraceV1,
|
|
784
785
|
readFabricExecutionTraceV1
|
|
785
786
|
};
|
|
786
|
-
//# sourceMappingURL=chunk-
|
|
787
|
+
//# sourceMappingURL=chunk-FL4A542C.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/audit/projection.ts", "../../src/audit/trace.ts"],
|
|
4
|
+
"sourcesContent": ["import type { FabricTraceJsonValue } from \"./trace.js\";\n\nexport interface FabricAuditProjection {\n value: { [key: string]: FabricTraceJsonValue };\n droppedValues: number;\n}\n\nconst emptyProjection = (args: Record<string, unknown>): FabricAuditProjection => ({\n value: {},\n droppedValues: topLevelKeyCount(args),\n});\n\nconst topLevelKeyCount = (value: Record<string, unknown>): number => {\n try {\n return Object.keys(value).length;\n } catch {\n return 1;\n }\n};\n\nconst finiteNumber = (value: unknown): number | undefined =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst stringValue = (value: unknown): string | undefined =>\n typeof value === \"string\" ? value : undefined;\n\nconst isWindowsDrivePath = (value: string): boolean => {\n if (value.length < 3 || value[1] !== \":\" || (value[2] !== \"\\\\\" && value[2] !== \"/\")) {\n return false;\n }\n const drive = value.charCodeAt(0);\n return (drive >= 65 && drive <= 90) || (drive >= 97 && drive <= 122);\n};\n\nconst localPath = (value: unknown): string | undefined => {\n if (typeof value !== \"string\" || value.includes(\"\\0\")) return undefined;\n if (!isWindowsDrivePath(value)) {\n try {\n // Absolute and network-path URLs are not local file addresses. In\n // particular, never retain URL userinfo or query credentials as a path.\n const absolute = new URL(value);\n if (absolute.protocol) return undefined;\n } catch {\n // Plain relative and absolute filesystem paths are expected to fail URL\n // construction without a base.\n }\n try {\n const based = new URL(value, \"https://fabric.invalid/\");\n if (based.hostname !== \"fabric.invalid\") return undefined;\n } catch {\n return undefined;\n }\n }\n const query = value.indexOf(\"?\");\n const fragment = value.indexOf(\"#\");\n const end = Math.min(\n query < 0 ? value.length : query,\n fragment < 0 ? value.length : fragment,\n );\n return value.slice(0, end) || undefined;\n};\n\nconst copyString = (\n output: Record<string, FabricTraceJsonValue>,\n args: Record<string, unknown>,\n key: string,\n): void => {\n const value = stringValue(args[key]);\n if (value !== undefined) output[key] = value;\n};\n\nconst copyNumber = (\n output: Record<string, FabricTraceJsonValue>,\n args: Record<string, unknown>,\n key: string,\n): void => {\n const value = finiteNumber(args[key]);\n if (value !== undefined) output[key] = value;\n};\n\nconst structuralIdentifier = (value: unknown): string | undefined => {\n if (typeof value !== \"string\" || value.length === 0) return undefined;\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n const alphanumeric =\n (code >= 48 && code <= 57) ||\n (code >= 65 && code <= 90) ||\n (code >= 97 && code <= 122);\n if (alphanumeric) continue;\n if (index > 0 && (code === 45 || code === 46 || code === 47 || code === 58 || code === 95)) {\n continue;\n }\n return undefined;\n }\n return value;\n};\n\nconst copyIdentifier = (\n output: Record<string, FabricTraceJsonValue>,\n args: Record<string, unknown>,\n key: string,\n): void => {\n const value = structuralIdentifier(args[key]);\n if (value !== undefined) output[key] = value;\n};\n\nconst copyPath = (\n output: Record<string, FabricTraceJsonValue>,\n args: Record<string, unknown>,\n): void => {\n const value = localPath(args.path);\n if (value !== undefined) output.path = value;\n};\n\nconst projected = (\n args: Record<string, unknown>,\n build: (output: Record<string, FabricTraceJsonValue>) => void,\n): FabricAuditProjection => {\n const value: Record<string, FabricTraceJsonValue> = {};\n try {\n build(value);\n } catch {\n return emptyProjection(args);\n }\n return {\n value,\n droppedValues: Math.max(0, topLevelKeyCount(args) - Object.keys(value).length),\n };\n};\n\nconst idOnlyAgentActions = new Set([\n \"agents.wait\",\n \"agents.status\",\n \"agents.stop\",\n \"agents.cleanup\",\n \"agents.ask\",\n \"agents.tell\",\n \"agents.steer\",\n \"agents.followUp\",\n \"agents.setSteeringMode\",\n \"agents.setFollowUpMode\",\n \"agents.compact\",\n \"agents.actorStatus\",\n \"agents.setModel\",\n \"agents.setThinking\",\n \"agents.setTools\",\n \"agents.setEvents\",\n \"agents.setDeliveryPolicy\",\n \"agents.clearMessages\",\n \"agents.setInstructions\",\n \"agents.messages\",\n \"agents.remove\",\n \"agents.import\",\n \"agents.export\",\n \"agents.log\",\n]);\n\n/**\n * Projects invocation arguments by exact built-in reference. Unknown,\n * extension, MCP, schema, state, compact, and generic provider calls retain no\n * arguments. This allowlist, rather than secret-looking string matching, is\n * the durable trace's primary confidentiality boundary.\n */\nexport const projectFabricAuditArgs = (\n ref: string,\n args: Record<string, unknown>,\n): FabricAuditProjection => {\n switch (ref) {\n case \"fabric.discovery.providers\":\n case \"fabric.discovery.models\":\n case \"fabric.workflow.progress\":\n return emptyProjection(args);\n case \"fabric.approval.auto\":\n return projected(args, (output) => {\n copyIdentifier(output, args, \"action\");\n copyIdentifier(output, args, \"risk\");\n });\n case \"fabric.discovery.catalog\":\n return projected(args, (output) => {\n copyIdentifier(output, args, \"provider\");\n copyNumber(output, args, \"limit\");\n });\n case \"fabric.discovery.list\":\n return projected(args, (output) => {\n copyIdentifier(output, args, \"provider\");\n copyIdentifier(output, args, \"namespace\");\n copyNumber(output, args, \"limit\");\n });\n case \"fabric.discovery.search\":\n return projected(args, (output) => copyNumber(output, args, \"limit\"));\n case \"fabric.discovery.describe\":\n return projected(args, (output) => copyIdentifier(output, args, \"ref\"));\n case \"fabric.workflow.configure\":\n return projected(args, (output) => copyString(output, args, \"name\"));\n case \"agents.switchModel\":\n return projected(args, (output) => {\n copyIdentifier(output, args, \"model\");\n copyIdentifier(output, args, \"provider\");\n });\n case \"fabric.workflow.phase\":\n return projected(args, (output) => {\n copyString(output, args, \"name\");\n copyIdentifier(output, args, \"id\");\n copyNumber(output, args, \"total\");\n });\n case \"fabric.workflow.item\":\n return projected(args, (output) => {\n copyIdentifier(output, args, \"id\");\n copyIdentifier(output, args, \"status\");\n copyIdentifier(output, args, \"phase\");\n copyIdentifier(output, args, \"kind\");\n copyNumber(output, args, \"total\");\n copyNumber(output, args, \"completed\");\n });\n case \"fabric.workflow.event\":\n return projected(args, (output) => copyIdentifier(output, args, \"level\"));\n case \"fabric.workflow.parallel\":\n case \"fabric.workflow.pipeline\":\n return projected(args, (output) => {\n copyIdentifier(output, args, \"kind\");\n copyNumber(output, args, \"itemCount\");\n copyNumber(output, args, \"stageCount\");\n copyNumber(output, args, \"concurrency\");\n });\n case \"omp.read\":\n return projected(args, (output) => {\n copyPath(output, args);\n copyNumber(output, args, \"offset\");\n copyNumber(output, args, \"limit\");\n });\n case \"omp.grep\":\n return projected(args, (output) => {\n copyPath(output, args);\n copyNumber(output, args, \"context\");\n copyNumber(output, args, \"skip\");\n copyNumber(output, args, \"limit\");\n });\n case \"omp.find\":\n case \"omp.ls\":\n return projected(args, (output) => {\n copyPath(output, args);\n copyNumber(output, args, \"limit\");\n });\n case \"omp.edit\":\n case \"omp.write\":\n return projected(args, (output) => copyPath(output, args));\n case \"omp.bash\":\n return projected(args, (output) => copyString(output, args, \"command\"));\n case \"mesh.publish\":\n return projected(args, (output) => {\n copyString(output, args, \"topic\");\n copyString(output, args, \"to\");\n });\n case \"mesh.read\":\n return projected(args, (output) => {\n copyString(output, args, \"topic\");\n copyString(output, args, \"to\");\n copyNumber(output, args, \"after\");\n copyNumber(output, args, \"limit\");\n });\n case \"mesh.get\":\n case \"mesh.put\":\n case \"mesh.delete\":\n return projected(args, (output) => copyString(output, args, \"key\"));\n case \"mesh.list\":\n return projected(args, (output) => {\n copyString(output, args, \"prefix\");\n copyNumber(output, args, \"limit\");\n });\n default:\n if (idOnlyAgentActions.has(ref)) {\n return projected(args, (output) => copyString(output, args, \"id\"));\n }\n return emptyProjection(args);\n }\n};\n\n/**\n * Results are omitted except for the exact boolean creation outcome emitted by\n * omp.write. No provider details or output text accompany that flag.\n */\nexport const projectFabricAuditResult = (\n ref: string,\n result: unknown,\n): FabricAuditProjection | undefined => {\n if (typeof result !== \"object\" || result === null || Array.isArray(result)) {\n return undefined;\n }\n const record = result as Record<string, unknown>;\n if (ref === \"fabric.approval.auto\") {\n return projected(record, (output) => {\n copyIdentifier(output, record, \"action\");\n copyIdentifier(output, record, \"risk\");\n copyIdentifier(output, record, \"decision\");\n copyIdentifier(output, record, \"model\");\n copyNumber(output, record, \"at\");\n });\n }\n if (ref !== \"omp.write\") return undefined;\n const details =\n typeof record.details === \"object\" && record.details !== null && !Array.isArray(record.details)\n ? (record.details as Record<string, unknown>)\n : undefined;\n if (record.created !== true && details?.created !== true) return undefined;\n return {\n value: { created: true },\n droppedValues: Math.max(0, topLevelKeyCount(record) - 1),\n };\n};\n", "import { isOmpShellRef } from \"../core/omp-tools.js\";\nimport { projectFabricAuditArgs, projectFabricAuditResult } from \"./projection.js\";\n\nexport const FABRIC_EXECUTION_TRACE_KIND = \"omp-fabric.execution\" as const;\nexport const FABRIC_EXECUTION_TRACE_VERSION = 1 as const;\nexport const FABRIC_EXECUTION_TRACE_MAX_BYTES = 512 * 1024;\n\nconst MAX_IDENTIFIER_BYTES = 1_024;\nconst MAX_PHASE_BYTES = 1_024;\nconst MAX_STRING_BYTES = 16 * 1024;\nconst MAX_ERROR_BYTES = 8 * 1024;\nconst MAX_ARGS_BYTES = 64 * 1024;\nconst MAX_RESULT_BYTES = 64 * 1024;\nconst MAX_DEPTH = 12;\nconst MAX_KEYS = 128;\nconst MAX_ARRAY_ITEMS = 128;\nconst MAX_NODES = 8_192;\nconst MAX_RECORDED_OPERATIONS = 2_048;\nconst MAX_PHASES = 512;\nexport type FabricTraceJsonPrimitive = string | number | boolean | null;\nexport type FabricTraceJsonValue =\n | FabricTraceJsonPrimitive\n | FabricTraceJsonValue[]\n | { [key: string]: FabricTraceJsonValue };\n\nexport type FabricExecutionOutcomeV1 = \"succeeded\" | \"failed\" | \"aborted\" | \"timed_out\";\nexport type FabricExecutionFailureStageV1 =\n | \"resolve\"\n | \"prepare\"\n | \"validate\"\n | \"approve\"\n | \"invoke\"\n | \"guard\";\n\nexport interface FabricExecutionTraceOperationV1 {\n type: \"call\";\n sequence: number;\n ref: string;\n provider?: string;\n action?: string;\n args: { [key: string]: FabricTraceJsonValue };\n outcome: FabricExecutionOutcomeV1;\n failureStage?: FabricExecutionFailureStageV1;\n error?: string;\n result?: FabricTraceJsonValue;\n resultTruncated?: boolean;\n}\n\nexport interface FabricExecutionTraceCountsV1 {\n droppedValues: number;\n truncatedValues: number;\n redactedValues: number;\n droppedOperations: number;\n}\n\nexport interface FabricExecutionTraceV1 {\n kind: typeof FABRIC_EXECUTION_TRACE_KIND;\n version: typeof FABRIC_EXECUTION_TRACE_VERSION;\n outcome: FabricExecutionOutcomeV1;\n phases: string[];\n operations: FabricExecutionTraceOperationV1[];\n counts: FabricExecutionTraceCountsV1;\n error?: string;\n}\n\ninterface MutableCounts {\n droppedValues: number;\n truncatedValues: number;\n redactedValues: number;\n}\n\ninterface TraceResultMeta {\n resultTruncated?: boolean;\n}\n\ninterface Sanitized<T extends FabricTraceJsonValue> {\n value: T;\n counts: MutableCounts;\n}\n\ninterface MutableOperation {\n type: \"call\";\n sequence: number;\n ref: string;\n projectionRef: string;\n provider?: string;\n action?: string;\n causeSafe?: boolean;\n args: Sanitized<{ [key: string]: FabricTraceJsonValue }>;\n outcome?: FabricExecutionOutcomeV1;\n failureStage?: FabricExecutionFailureStageV1;\n error?: Sanitized<string>;\n result?: Sanitized<FabricTraceJsonValue>;\n resultTruncated?: boolean;\n droppedResultValues: number;\n}\n\nconst DROP = Symbol(\"drop\");\ntype SanitizedNode = FabricTraceJsonValue | typeof DROP;\n\nconst emptyCounts = (): MutableCounts => ({\n droppedValues: 0,\n truncatedValues: 0,\n redactedValues: 0,\n});\n\nconst byteLength = (value: string): number => Buffer.byteLength(value, \"utf8\");\nconst serializedBytes = (value: unknown): number => byteLength(JSON.stringify(value));\n\nconst truncateUtf8 = (value: string, maxBytes: number): string => {\n if (byteLength(value) <= maxBytes) return value;\n const suffix = \"\u2026[truncated]\";\n const available = Math.max(0, maxBytes - byteLength(suffix));\n let low = 0;\n let high = value.length;\n while (low < high) {\n const middle = Math.ceil((low + high) / 2);\n if (byteLength(value.slice(0, middle)) <= available) low = middle;\n else high = middle - 1;\n }\n return `${value.slice(0, low)}${suffix}`;\n};\n\nconst truncateUtf8Middle = (value: string, maxBytes: number): string => {\n if (byteLength(value) <= maxBytes) return value;\n const marker = \"\\n\u2026[truncated]\\n\";\n const available = Math.max(0, maxBytes - byteLength(marker));\n const headBytes = Math.floor(available / 2);\n const tailBytes = available - headBytes;\n const head = truncateUtf8(value, headBytes + byteLength(\"\u2026[truncated]\"))\n .replace(/\u2026\\[truncated\\]$/, \"\");\n let tailStart = value.length;\n while (tailStart > 0 && byteLength(value.slice(tailStart - 1)) <= tailBytes) tailStart--;\n return `${head}${marker}${value.slice(tailStart)}`;\n};\n\nconst boundedIdentifier = (value: string, maxBytes = MAX_IDENTIFIER_BYTES): string =>\n truncateUtf8(value, maxBytes);\n\nconst normalizedKey = (key: string): string => key.toLowerCase().replaceAll(/[^a-z0-9]/g, \"\");\n\nconst isSensitiveKey = (key: string): boolean => {\n const normalized = normalizedKey(key);\n return [\n \"password\",\n \"passwd\",\n \"secret\",\n \"token\",\n \"accesstoken\",\n \"refreshtoken\",\n \"authorization\",\n \"cookie\",\n \"credential\",\n \"credentials\",\n \"apikey\",\n \"privatekey\",\n \"clientsecret\",\n ].some((sensitive) => normalized === sensitive || normalized.endsWith(sensitive));\n};\n\nconst isMediaKey = (key: string): boolean =>\n [\"media\", \"image\", \"images\", \"audio\", \"video\", \"base64\"].includes(normalizedKey(key));\n\nconst isMediaObject = (value: Record<string, unknown>): boolean => {\n if (value.type === \"image\" || value.type === \"audio\" || value.type === \"video\") return true;\n const mimeType = value.mimeType ?? value.mime_type;\n return (\n typeof mimeType === \"string\" &&\n (mimeType.startsWith(\"image/\") || mimeType.startsWith(\"audio/\") || mimeType.startsWith(\"video/\"))\n );\n};\n\nconst looksLikeBase64 = (value: string): boolean => {\n if (value.startsWith(\"data:\") && value.includes(\";base64,\")) return true;\n if (value.length < 1_024 || value.length % 4 !== 0) return false;\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n const valid =\n (code >= 65 && code <= 90) ||\n (code >= 97 && code <= 122) ||\n (code >= 48 && code <= 57) ||\n code === 43 ||\n code === 47 ||\n code === 61 ||\n code === 10 ||\n code === 13;\n if (!valid) return false;\n }\n return true;\n};\n\nconst sanitize = (input: unknown, maxBytes: number): Sanitized<FabricTraceJsonValue> => {\n const counts = emptyCounts();\n const ancestors = new Set<object>();\n let nodes = 0;\n\n const visit = (value: unknown, depth: number, key?: string): SanitizedNode => {\n nodes++;\n if (nodes > MAX_NODES) {\n counts.droppedValues++;\n return DROP;\n }\n if (key !== undefined && isSensitiveKey(key)) {\n counts.redactedValues++;\n return \"[REDACTED]\";\n }\n if (key !== undefined && isMediaKey(key)) {\n counts.droppedValues++;\n return DROP;\n }\n if (value === null || typeof value === \"boolean\") return value;\n if (typeof value === \"number\") {\n if (Number.isFinite(value)) return value;\n counts.truncatedValues++;\n return `[non-finite:${String(value)}]`;\n }\n if (typeof value === \"string\") {\n if (looksLikeBase64(value)) {\n counts.droppedValues++;\n return \"[OMITTED_BASE64]\";\n }\n const bounded = truncateUtf8(value, MAX_STRING_BYTES);\n if (bounded !== value) counts.truncatedValues++;\n return bounded;\n }\n if (typeof value === \"bigint\") {\n counts.truncatedValues++;\n return `${String(value)}n`;\n }\n if (typeof value === \"undefined\" || typeof value === \"function\" || typeof value === \"symbol\") {\n counts.droppedValues++;\n return DROP;\n }\n if (typeof value !== \"object\") {\n counts.droppedValues++;\n return DROP;\n }\n if (depth >= MAX_DEPTH) {\n counts.truncatedValues++;\n return \"[MAX_DEPTH]\";\n }\n if (ancestors.has(value)) {\n counts.droppedValues++;\n return \"[CIRCULAR]\";\n }\n const record = value as Record<string, unknown>;\n if (!Array.isArray(value) && isMediaObject(record)) {\n counts.droppedValues++;\n return \"[OMITTED_MEDIA]\";\n }\n ancestors.add(value);\n if (Array.isArray(value)) {\n const output: FabricTraceJsonValue[] = [];\n const limit = Math.min(value.length, MAX_ARRAY_ITEMS);\n for (let index = 0; index < limit; index++) {\n const item = visit(value[index], depth + 1);\n output.push(item === DROP ? \"[DROPPED]\" : item);\n }\n if (value.length > limit) {\n counts.droppedValues += value.length - limit;\n counts.truncatedValues++;\n }\n ancestors.delete(value);\n return output;\n }\n const output: { [key: string]: FabricTraceJsonValue } = {};\n const keys = Object.keys(record).sort();\n const limit = Math.min(keys.length, MAX_KEYS);\n for (let index = 0; index < limit; index++) {\n const childKey = keys[index]!;\n const child = visit(record[childKey], depth + 1, childKey);\n if (child !== DROP) output[childKey] = child;\n }\n if (keys.length > limit) {\n counts.droppedValues += keys.length - limit;\n counts.truncatedValues++;\n }\n ancestors.delete(value);\n return output;\n };\n\n let value = visit(input, 0);\n if (value === DROP) value = \"[DROPPED]\";\n const originalBytes = serializedBytes(value);\n if (originalBytes > maxBytes) {\n counts.truncatedValues++;\n if (Array.isArray(value)) {\n const output: FabricTraceJsonValue[] = [];\n for (const item of value) {\n const next = [...output, item];\n if (serializedBytes(next) > maxBytes - 128) break;\n output.push(item);\n }\n counts.droppedValues += value.length - output.length;\n value = output;\n } else if (typeof value === \"object\" && value !== null) {\n const output: { [key: string]: FabricTraceJsonValue } = {};\n const entries = Object.entries(value);\n let included = 0;\n for (const [childKey, child] of entries) {\n const next = { ...output, [childKey]: child };\n if (serializedBytes(next) > maxBytes - 128) break;\n output[childKey] = child;\n included++;\n }\n counts.droppedValues += entries.length - included;\n value = output;\n }\n }\n return { value, counts };\n};\n\nconst sanitizeObject = (\n value: Record<string, unknown>,\n droppedValues = 0,\n): Sanitized<{ [key: string]: FabricTraceJsonValue }> => {\n const sanitized = sanitize(value, MAX_ARGS_BYTES);\n sanitized.counts.droppedValues += droppedValues;\n if (typeof sanitized.value === \"object\" && sanitized.value !== null && !Array.isArray(sanitized.value)) {\n return sanitized as Sanitized<{ [key: string]: FabricTraceJsonValue }>;\n }\n sanitized.counts.droppedValues++;\n return { value: {}, counts: sanitized.counts };\n};\n\nconst projectedArgs = (\n ref: string,\n args: Record<string, unknown>,\n): Sanitized<{ [key: string]: FabricTraceJsonValue }> => {\n const projection = projectFabricAuditArgs(ref, args);\n return sanitizeObject(projection.value, projection.droppedValues);\n};\n\nconst sanitizeString = (value: string, maxBytes: number): Sanitized<string> => {\n const bounded = truncateUtf8(value, maxBytes);\n return {\n value: bounded,\n counts: {\n ...emptyCounts(),\n truncatedValues: bounded === value ? 0 : 1,\n },\n };\n};\n\nconst addCounts = (target: FabricExecutionTraceCountsV1, source: MutableCounts): void => {\n target.droppedValues += source.droppedValues;\n target.truncatedValues += source.truncatedValues;\n target.redactedValues += source.redactedValues;\n};\n\nconst lexicalIdentity = (ref: string): { provider?: string; action?: string } => {\n const separator = ref.indexOf(\".\");\n if (separator <= 0 || separator === ref.length - 1) return {};\n return {\n provider: ref.slice(0, separator),\n action: ref.slice(separator + 1),\n };\n};\n\n// Errors whose messages contain no tool output, argument payloads, or\n// user/source text and are safe to quote verbatim in durable traces: registry\n// resolution failures, policy denials, and Fabric-generated guard messages.\nexport class FabricTraceSafeError extends Error {}\n\n// Thrown by the registry when a provider or action cannot be resolved.\nexport class FabricResolutionError extends FabricTraceSafeError {}\n\nconst errorCause = (error: unknown): string | undefined => {\n const message = error instanceof Error ? error.message : typeof error === \"string\" ? error : undefined;\n const trimmed = message?.trim();\n return trimmed ? truncateUtf8Middle(trimmed, MAX_ERROR_BYTES - 256) : undefined;\n};\n\nconst failureMessage = (\n stage: FabricExecutionFailureStageV1,\n outcome: FabricExecutionOutcomeV1,\n cause?: string,\n): string => {\n if (outcome === \"timed_out\") return \"Call timed out\";\n if (outcome === \"aborted\") return \"Call aborted\";\n const summary = `Call failed during ${stage}`;\n return cause ? `${summary}: ${cause}` : summary;\n};\n\nconst executionErrorMessage = (outcome: FabricExecutionOutcomeV1): string | undefined => {\n if (outcome === \"succeeded\") return undefined;\n if (outcome === \"timed_out\") return \"Execution timed out\";\n if (outcome === \"aborted\") return \"Execution aborted\";\n return \"Execution failed\";\n};\n\nexport class FabricExecutionTraceOperationHandle {\n constructor(\n private readonly recorder: FabricExecutionTraceRecorder,\n private readonly operation: MutableOperation | undefined,\n ) {}\n\n resolved(provider: string, action: string): void {\n if (!this.operation || this.recorder.sealed) return;\n const boundedProvider = boundedIdentifier(provider);\n const boundedAction = boundedIdentifier(action);\n if (this.operation.provider !== boundedProvider) {\n this.operation.provider = this.recorder.snapshotIdentifier(provider);\n }\n if (this.operation.action !== boundedAction) {\n this.operation.action = this.recorder.snapshotIdentifier(action);\n }\n }\n\n prepared(args: Record<string, unknown>): void {\n if (!this.operation || this.recorder.sealed) return;\n this.operation.args = projectedArgs(this.operation.projectionRef, args);\n }\n\n succeed(result: unknown, meta?: TraceResultMeta): void {\n if (!this.operation || this.recorder.sealed) return;\n const projected = projectFabricAuditResult(this.operation.projectionRef, result);\n if (projected !== undefined) {\n this.operation.result = sanitize(projected.value, MAX_RESULT_BYTES);\n this.operation.result.counts.droppedValues += projected.droppedValues;\n } else if (result !== undefined) {\n this.operation.droppedResultValues++;\n }\n this.operation.outcome = \"succeeded\";\n if (meta?.resultTruncated === true) this.operation.resultTruncated = true;\n }\n\n fail(\n stage: FabricExecutionFailureStageV1,\n error: unknown,\n outcome: FabricExecutionOutcomeV1 = \"failed\",\n result?: unknown,\n meta?: TraceResultMeta,\n ): void {\n if (!this.operation || this.recorder.sealed) return;\n this.operation.failureStage = stage;\n if (error instanceof FabricTraceSafeError) this.operation.causeSafe = true;\n const cause =\n outcome === \"failed\" &&\n (this.operation.causeSafe === true ||\n (isOmpShellRef(this.operation.projectionRef) && stage === \"invoke\"))\n ? errorCause(error)\n : undefined;\n this.operation.error = sanitizeString(\n failureMessage(stage, outcome, cause),\n MAX_ERROR_BYTES,\n );\n this.operation.outcome = outcome;\n if (meta?.resultTruncated === true) this.operation.resultTruncated = true;\n const projected = projectFabricAuditResult(this.operation.projectionRef, result);\n if (projected !== undefined) {\n this.operation.result = sanitize(projected.value, MAX_RESULT_BYTES);\n this.operation.result.counts.droppedValues += projected.droppedValues;\n } else if (result !== undefined) {\n this.operation.droppedResultValues++;\n }\n }\n}\n\nexport class FabricExecutionTraceRecorder {\n readonly #operations: MutableOperation[] = [];\n #nextSequence = 0;\n #droppedOperations = 0;\n #truncatedIdentifiers = 0;\n sealed = false;\n\n snapshotIdentifier(value: string, maxBytes = MAX_IDENTIFIER_BYTES): string {\n const bounded = boundedIdentifier(value, maxBytes);\n if (bounded !== value) this.#truncatedIdentifiers++;\n return bounded;\n }\n\n issueCall(ref: string, args: Record<string, unknown>): FabricExecutionTraceOperationHandle {\n const sequence = this.#nextSequence++;\n if (this.sealed || this.#operations.length >= MAX_RECORDED_OPERATIONS) {\n this.#droppedOperations++;\n return new FabricExecutionTraceOperationHandle(this, undefined);\n }\n const identity = lexicalIdentity(ref);\n const operation: MutableOperation = {\n type: \"call\",\n sequence,\n ref: this.snapshotIdentifier(ref),\n projectionRef: ref,\n ...(identity.provider ? { provider: this.snapshotIdentifier(identity.provider) } : {}),\n ...(identity.action ? { action: this.snapshotIdentifier(identity.action) } : {}),\n args: projectedArgs(ref, args),\n droppedResultValues: 0,\n };\n this.#operations.push(operation);\n return new FabricExecutionTraceOperationHandle(this, operation);\n }\n\n // safeError must contain no guest source text, tool output, or argument\n // payloads \u2014 callers pass it only for Fabric-generated failure summaries\n // (for example the type-check stage). Guest and provider error text is\n // deliberately not persisted here.\n seal(\n outcome: FabricExecutionOutcomeV1,\n phases: readonly string[],\n safeError?: string,\n ): FabricExecutionTraceV1 {\n this.sealed = true;\n for (const operation of this.#operations) {\n if (!operation.outcome) {\n operation.outcome = outcome === \"timed_out\" ? \"timed_out\" : outcome === \"aborted\" ? \"aborted\" : \"failed\";\n operation.failureStage ??= \"invoke\";\n } else if (operation.outcome === \"aborted\" && outcome === \"timed_out\") {\n // Host calls observe an aborted bridge signal for both cancellation and\n // deadline expiry. The runtime's typed final termination is\n // authoritative when sealing the durable operation.\n operation.outcome = \"timed_out\";\n }\n if (operation.outcome !== \"succeeded\") {\n const preserveCause =\n operation.error !== undefined &&\n (operation.causeSafe === true ||\n (isOmpShellRef(operation.projectionRef) && operation.outcome === \"failed\"));\n if (!preserveCause) {\n operation.error = sanitizeString(\n failureMessage(operation.failureStage ?? \"invoke\", operation.outcome),\n MAX_ERROR_BYTES,\n );\n }\n }\n }\n\n const counts: FabricExecutionTraceCountsV1 = {\n droppedValues: 0,\n truncatedValues: this.#truncatedIdentifiers,\n redactedValues: 0,\n droppedOperations: this.#droppedOperations,\n };\n const operations = this.#operations.map((operation): FabricExecutionTraceOperationV1 => {\n addCounts(counts, operation.args.counts);\n counts.droppedValues += operation.droppedResultValues;\n if (operation.error) addCounts(counts, operation.error.counts);\n if (operation.result) addCounts(counts, operation.result.counts);\n return {\n type: \"call\",\n sequence: operation.sequence,\n ref: operation.ref,\n ...(operation.provider ? { provider: operation.provider } : {}),\n ...(operation.action ? { action: operation.action } : {}),\n args: operation.args.value,\n outcome: operation.outcome!,\n ...(operation.failureStage ? { failureStage: operation.failureStage } : {}),\n ...(operation.error ? { error: operation.error.value } : {}),\n ...(operation.result ? { result: operation.result.value } : {}),\n ...(operation.resultTruncated === true ? { resultTruncated: true as const } : {}),\n };\n });\n const boundedPhases = phases.slice(0, MAX_PHASES).map((phase) => {\n const bounded = boundedIdentifier(phase, MAX_PHASE_BYTES);\n if (bounded !== phase) counts.truncatedValues++;\n return bounded;\n });\n if (phases.length > boundedPhases.length) {\n counts.droppedValues += phases.length - boundedPhases.length;\n counts.truncatedValues++;\n }\n const safeRunError = safeError?.trim() || executionErrorMessage(outcome);\n const runError = safeRunError ? sanitizeString(safeRunError, MAX_ERROR_BYTES) : undefined;\n if (runError) addCounts(counts, runError.counts);\n const trace: FabricExecutionTraceV1 = {\n kind: FABRIC_EXECUTION_TRACE_KIND,\n version: FABRIC_EXECUTION_TRACE_VERSION,\n outcome,\n phases: boundedPhases,\n operations,\n counts,\n ...(runError ? { error: runError.value } : {}),\n };\n\n let traceBytes = serializedBytes(trace);\n const adjustMutation = (\n beforeValueBytes: number,\n afterValueBytes: number,\n beforeCountsBytes: number,\n ): void => {\n traceBytes +=\n afterValueBytes -\n beforeValueBytes +\n serializedBytes(trace.counts) -\n beforeCountsBytes;\n };\n for (\n let index = trace.operations.length - 1;\n traceBytes > FABRIC_EXECUTION_TRACE_MAX_BYTES && index >= 0;\n index--\n ) {\n const operation = trace.operations[index]!;\n if (operation.result === undefined) continue;\n const beforeOperationBytes = serializedBytes(operation);\n const beforeCountsBytes = serializedBytes(trace.counts);\n delete operation.result;\n trace.counts.droppedValues++;\n adjustMutation(\n beforeOperationBytes,\n serializedBytes(operation),\n beforeCountsBytes,\n );\n }\n for (\n let index = trace.operations.length - 1;\n traceBytes > FABRIC_EXECUTION_TRACE_MAX_BYTES && index >= 0;\n index--\n ) {\n const operation = trace.operations[index]!;\n if (Object.keys(operation.args).length === 0) continue;\n const beforeOperationBytes = serializedBytes(operation);\n const beforeCountsBytes = serializedBytes(trace.counts);\n operation.args = {};\n trace.counts.droppedValues++;\n trace.counts.truncatedValues++;\n adjustMutation(\n beforeOperationBytes,\n serializedBytes(operation),\n beforeCountsBytes,\n );\n }\n while (traceBytes > FABRIC_EXECUTION_TRACE_MAX_BYTES && trace.operations.length > 0) {\n const beforeCountsBytes = serializedBytes(trace.counts);\n const operation = trace.operations.pop()!;\n traceBytes -= serializedBytes(operation);\n if (trace.operations.length > 0) traceBytes--;\n trace.counts.droppedOperations++;\n traceBytes += serializedBytes(trace.counts) - beforeCountsBytes;\n }\n while (traceBytes > FABRIC_EXECUTION_TRACE_MAX_BYTES && trace.phases.length > 0) {\n const beforeCountsBytes = serializedBytes(trace.counts);\n const phase = trace.phases.pop()!;\n traceBytes -= serializedBytes(phase);\n if (trace.phases.length > 0) traceBytes--;\n trace.counts.droppedValues++;\n traceBytes += serializedBytes(trace.counts) - beforeCountsBytes;\n }\n return trace;\n }\n}\n\nexport const executionOutcomeFromError = (\n error: unknown,\n signal?: AbortSignal,\n): FabricExecutionOutcomeV1 => {\n if (signal?.aborted) return \"aborted\";\n return error === undefined ? \"succeeded\" : \"failed\";\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst hasOnlyKeys = (value: Record<string, unknown>, keys: readonly string[]): boolean =>\n Object.keys(value).every((key) => keys.includes(key));\n\nconst outcomes = new Set<FabricExecutionOutcomeV1>([\"succeeded\", \"failed\", \"aborted\", \"timed_out\"]);\nconst stages = new Set<FabricExecutionFailureStageV1>([\"resolve\", \"prepare\", \"validate\", \"approve\", \"invoke\", \"guard\"]);\n\nconst isJsonValue = (value: unknown, ancestors = new Set<object>(), depth = 0): value is FabricTraceJsonValue => {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value !== \"object\" || depth > MAX_DEPTH + 2 || ancestors.has(value)) return false;\n ancestors.add(value);\n const valid = Array.isArray(value)\n ? value.every((item) => isJsonValue(item, ancestors, depth + 1))\n : Object.values(value as Record<string, unknown>).every((item) => isJsonValue(item, ancestors, depth + 1));\n ancestors.delete(value);\n return valid;\n};\n\nconst isFabricExecutionTraceOperationV1Unchecked = (\n value: unknown,\n): value is FabricExecutionTraceOperationV1 => {\n if (!isRecord(value)) return false;\n if (!hasOnlyKeys(value, [\"type\", \"sequence\", \"ref\", \"provider\", \"action\", \"args\", \"outcome\", \"failureStage\", \"error\", \"result\", \"resultTruncated\"])) return false;\n if (value.type !== \"call\" || !Number.isSafeInteger(value.sequence) || (value.sequence as number) < 0) return false;\n if (typeof value.ref !== \"string\" || !isRecord(value.args) || !isJsonValue(value.args)) return false;\n if (!outcomes.has(value.outcome as FabricExecutionOutcomeV1)) return false;\n if (value.provider !== undefined && typeof value.provider !== \"string\") return false;\n if (value.action !== undefined && typeof value.action !== \"string\") return false;\n if (value.failureStage !== undefined && !stages.has(value.failureStage as FabricExecutionFailureStageV1)) return false;\n if (value.error !== undefined && typeof value.error !== \"string\") return false;\n if (value.resultTruncated !== undefined && typeof value.resultTruncated !== \"boolean\") return false;\n return value.result === undefined || isJsonValue(value.result);\n};\n\nexport const isFabricExecutionTraceOperationV1 = (\n value: unknown,\n): value is FabricExecutionTraceOperationV1 => {\n try {\n return isFabricExecutionTraceOperationV1Unchecked(value);\n } catch {\n return false;\n }\n};\n\nconst isFabricExecutionTraceV1Unchecked = (value: unknown): value is FabricExecutionTraceV1 => {\n if (!isRecord(value)) return false;\n if (!hasOnlyKeys(value, [\"kind\", \"version\", \"outcome\", \"phases\", \"operations\", \"counts\", \"error\"])) return false;\n if (value.kind !== FABRIC_EXECUTION_TRACE_KIND || value.version !== FABRIC_EXECUTION_TRACE_VERSION) return false;\n if (!outcomes.has(value.outcome as FabricExecutionOutcomeV1)) return false;\n if (!Array.isArray(value.phases) || !value.phases.every((phase) => typeof phase === \"string\")) return false;\n if (!Array.isArray(value.operations) || !value.operations.every(isFabricExecutionTraceOperationV1)) return false;\n if (!isRecord(value.counts) || !hasOnlyKeys(value.counts, [\"droppedValues\", \"truncatedValues\", \"redactedValues\", \"droppedOperations\"])) return false;\n const counts = value.counts;\n if (![\"droppedValues\", \"truncatedValues\", \"redactedValues\", \"droppedOperations\"].every((key) => Number.isSafeInteger(counts[key]) && (counts[key] as number) >= 0)) return false;\n if (value.error !== undefined && typeof value.error !== \"string\") return false;\n for (let index = 1; index < value.operations.length; index++) {\n if (value.operations[index]!.sequence <= value.operations[index - 1]!.sequence) return false;\n }\n return serializedBytes(value) <= FABRIC_EXECUTION_TRACE_MAX_BYTES;\n};\n\nexport const isFabricExecutionTraceV1 = (value: unknown): value is FabricExecutionTraceV1 => {\n try {\n return isFabricExecutionTraceV1Unchecked(value);\n } catch {\n return false;\n }\n};\n\nexport const readFabricExecutionTraceV1 = (value: unknown): FabricExecutionTraceV1 | undefined =>\n isFabricExecutionTraceV1(value) ? value : undefined;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["value", "output", "limit", "projected"]
|
|
7
|
+
}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
loadTieredIndex,
|
|
9
9
|
reconstructSessionLineage,
|
|
10
10
|
searchMemoryIndex
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-BWLZ6VDQ.js";
|
|
12
12
|
import {
|
|
13
13
|
compareLexical,
|
|
14
14
|
normalizeMemoryPhrase,
|
|
@@ -23,11 +23,11 @@ import {
|
|
|
23
23
|
overrideSessionDir,
|
|
24
24
|
resolveScope,
|
|
25
25
|
resolveSessionTarget
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-WX6C7N3W.js";
|
|
27
27
|
import {
|
|
28
28
|
expandSessionEntriesChecked,
|
|
29
29
|
normalizeSession
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-Z6TTRT6Q.js";
|
|
31
31
|
import {
|
|
32
32
|
hash,
|
|
33
33
|
hashLcmPayload,
|
|
@@ -2569,4 +2569,4 @@ export {
|
|
|
2569
2569
|
normalizeMemoryArgs,
|
|
2570
2570
|
MemoryProvider
|
|
2571
2571
|
};
|
|
2572
|
-
//# sourceMappingURL=chunk-
|
|
2572
|
+
//# sourceMappingURL=chunk-J2BDKPO4.js.map
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
FabricResolutionError,
|
|
21
21
|
FabricTraceSafeError,
|
|
22
22
|
executionOutcomeFromError
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-FL4A542C.js";
|
|
24
24
|
|
|
25
25
|
// src/core/action-registry.ts
|
|
26
26
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
@@ -1613,4 +1613,4 @@ export {
|
|
|
1613
1613
|
NESTED_TOOL_CALL_ID_PREFIX,
|
|
1614
1614
|
ActionRegistry
|
|
1615
1615
|
};
|
|
1616
|
-
//# sourceMappingURL=chunk-
|
|
1616
|
+
//# sourceMappingURL=chunk-KLWNXXEI.js.map
|