omp-fabric 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/actors/global-registry.d.ts.map +1 -1
  3. package/dist/actors/manager.d.ts.map +1 -1
  4. package/dist/actors/types.d.ts +1 -0
  5. package/dist/actors/types.d.ts.map +1 -1
  6. package/dist/agents/manager.d.ts.map +1 -1
  7. package/dist/agents/types.d.ts +1 -0
  8. package/dist/agents/types.d.ts.map +1 -1
  9. package/dist/chunks/{chunk-3TWC6XOS.js → chunk-2WDZT27Q.js} +36 -13
  10. package/dist/chunks/chunk-2WDZT27Q.js.map +7 -0
  11. package/dist/chunks/{chunk-UOSJZXJV.js → chunk-3LI7YO4M.js} +1 -1
  12. package/dist/chunks/chunk-3LI7YO4M.js.map +7 -0
  13. package/dist/chunks/{chunk-TQL7FKMG.js → chunk-45URY66G.js} +15 -15
  14. package/dist/chunks/chunk-45URY66G.js.map +7 -0
  15. package/dist/chunks/{chunk-B2SQR2JY.js → chunk-BMIE4PIL.js} +2 -2
  16. package/dist/chunks/{chunk-NX4SNIMR.js → chunk-FX3XLQYI.js} +36 -7
  17. package/dist/chunks/chunk-FX3XLQYI.js.map +7 -0
  18. package/dist/chunks/{chunk-EQNNENN6.js → chunk-PYXBHMSL.js} +3 -3
  19. package/dist/chunks/{chunk-2GQC324T.js → chunk-TSU4AEPZ.js} +2 -2
  20. package/dist/chunks/{chunk-5YGOVBOZ.js → chunk-VSSC4IDU.js} +2 -2
  21. package/dist/chunks/{chunk-HDJBUXDX.js → chunk-WQUMHDOS.js} +2 -2
  22. package/dist/chunks/{chunk-XRJYPNTI.js → chunk-WZAH7BO2.js} +8 -1
  23. package/dist/chunks/chunk-WZAH7BO2.js.map +7 -0
  24. package/dist/chunks/{chunk-WGFHMECI.js → chunk-Z5AP4M6K.js} +24 -6
  25. package/dist/chunks/chunk-Z5AP4M6K.js.map +7 -0
  26. package/dist/codemap/symbols.d.ts.map +1 -1
  27. package/dist/codemap/types.d.ts +1 -0
  28. package/dist/codemap/types.d.ts.map +1 -1
  29. package/dist/config.d.ts +1 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/entropy/index.js +2 -2
  32. package/dist/fabric-runtime-state.js +320 -123
  33. package/dist/fabric-runtime-state.js.map +3 -3
  34. package/dist/index.js +8 -8
  35. package/dist/memory/discovery.d.ts +10 -0
  36. package/dist/memory/discovery.d.ts.map +1 -1
  37. package/dist/memory/discovery.js +3 -1
  38. package/dist/providers/agents-actions.d.ts.map +1 -1
  39. package/dist/providers/agents-provider.d.ts.map +1 -1
  40. package/dist/providers/codemap-provider.d.ts.map +1 -1
  41. package/dist/providers/mcp-provider.d.ts.map +1 -1
  42. package/dist/providers/memory-provider.d.ts.map +1 -1
  43. package/dist/providers/memory-provider.js +2 -2
  44. package/dist/providers/mesh-provider.d.ts.map +1 -1
  45. package/dist/providers/omp-tools-provider.d.ts.map +1 -1
  46. package/dist/providers/write-preview.d.ts.map +1 -1
  47. package/dist/residency/host.js +4 -4
  48. package/dist/residency/omp-entry.js +4 -4
  49. package/dist/runtime/core-override-guest-types.js +1 -1
  50. package/dist/runtime/guest-types.d.ts +1 -1
  51. package/dist/runtime/guest-types.d.ts.map +1 -1
  52. package/dist/runtime/guest-types.js +1 -1
  53. package/dist/ui/dashboard.js +3 -3
  54. package/dist/ui/settings.d.ts.map +1 -1
  55. package/dist/ui/settings.js +10 -2
  56. package/dist/ui/settings.js.map +2 -2
  57. package/docs/codemap.md +9 -0
  58. package/docs/configuration.md +1 -1
  59. package/package.json +1 -1
  60. package/dist/chunks/chunk-3TWC6XOS.js.map +0 -7
  61. package/dist/chunks/chunk-NX4SNIMR.js.map +0 -7
  62. package/dist/chunks/chunk-TQL7FKMG.js.map +0 -7
  63. package/dist/chunks/chunk-UOSJZXJV.js.map +0 -7
  64. package/dist/chunks/chunk-WGFHMECI.js.map +0 -7
  65. package/dist/chunks/chunk-XRJYPNTI.js.map +0 -7
  66. /package/dist/chunks/{chunk-B2SQR2JY.js.map → chunk-BMIE4PIL.js.map} +0 -0
  67. /package/dist/chunks/{chunk-EQNNENN6.js.map → chunk-PYXBHMSL.js.map} +0 -0
  68. /package/dist/chunks/{chunk-2GQC324T.js.map → chunk-TSU4AEPZ.js.map} +0 -0
  69. /package/dist/chunks/{chunk-5YGOVBOZ.js.map → chunk-VSSC4IDU.js.map} +0 -0
  70. /package/dist/chunks/{chunk-HDJBUXDX.js.map → chunk-WQUMHDOS.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/actors/types.ts", "../../src/log-tail.ts"],
4
- "sourcesContent": ["import type { ExtensionEvent } from \"@oh-my-pi/pi-coding-agent\";\nimport type { FabricAgentRunner, FabricAgentTransport } from \"../config.js\";\nimport type { FabricThinking } from \"../thinking.js\";\nimport type { FabricLogLine, AgentRunRecord, AgentUsage } from \"../agents/types.js\";\nimport type { FabricCapabilityRequirement } from \"../components/types.js\";\nimport type { FabricParticipantResidency } from \"../topology/types.js\";\n\nexport type FabricActorOmpHostEvent = Exclude<ExtensionEvent[\"type\"], \"project_trust\">;\n\nconst defineFabricActorOmpHostEvents = <const Events extends readonly FabricActorOmpHostEvent[]>(\n events: Events,\n): Events => events;\n\nexport const FABRIC_ACTOR_OMP_HOST_EVENTS = defineFabricActorOmpHostEvents([\n \"resources_discover\",\n \"session_start\",\n \"session_before_switch\",\n \"session_switch\",\n \"session_before_branch\",\n \"session_branch\",\n \"session_before_compact\",\n \"session.compacting\",\n \"session_compact\",\n \"session_shutdown\",\n \"session_before_tree\",\n \"session_tree\",\n \"goal_updated\",\n \"input\",\n \"before_agent_start\",\n \"agent_start\",\n \"agent_end\",\n \"session_stop\",\n \"turn_start\",\n \"turn_end\",\n \"message_start\",\n \"message_update\",\n \"message_end\",\n \"context\",\n \"before_provider_request\",\n \"after_provider_response\",\n \"tool_execution_start\",\n \"tool_call\",\n \"tool_execution_update\",\n \"tool_result\",\n \"tool_execution_end\",\n \"user_bash\",\n]);\nexport const FABRIC_ACTOR_HOST_EVENTS = [\n ...FABRIC_ACTOR_OMP_HOST_EVENTS,\n \"tool_error\",\n] as const;\n\nexport type FabricActorHostEvent = (typeof FABRIC_ACTOR_HOST_EVENTS)[number];\n\nconst FABRIC_ACTOR_HOST_EVENT_SET: ReadonlySet<string> = new Set(FABRIC_ACTOR_HOST_EVENTS);\n\nexport const isFabricActorHostEvent = (value: unknown): value is FabricActorHostEvent =>\n typeof value === \"string\" && FABRIC_ACTOR_HOST_EVENT_SET.has(value);\n\nexport type FabricActorDelivery = \"mailbox\" | \"steer\" | \"followUp\" | \"nextTurn\";\nexport type FabricActorResponseMode = \"text\" | \"directive\";\nexport type FabricActorStatus = \"idle\" | \"queued\" | \"running\" | \"stopped\";\nexport type FabricActorBindingScope = \"session\" | \"project\";\nexport type FabricActorStorageScope = \"session\" | \"project\";\n\nexport interface FabricActorRunBinding {\n model?: string;\n thinking?: FabricThinking;\n}\n\ninterface FabricActorBindingView extends FabricActorRunBinding {\n scope: \"session\";\n sessionId: string;\n updatedAt?: number;\n}\n\ninterface FabricActorProjectDefaults extends FabricActorRunBinding {\n scope: \"project\";\n}\n\nexport interface FabricActorValidWhileSource {\n version: 1;\n source: string;\n}\n\nexport interface FabricActorValidityDecision {\n valid: boolean;\n reason?: string;\n}\n\nexport type FabricActorActivation =\n | {\n kind: \"hostEvent\";\n id: string;\n source: string;\n sequence: number;\n createdAt: number;\n event: FabricActorHostEvent;\n mainRevision: number;\n taskRevision: number;\n signal?: unknown;\n }\n | {\n kind: \"direct\";\n id: string;\n source: string;\n sequence: number;\n createdAt: number;\n }\n | {\n kind: \"mesh\";\n id: string;\n source: string;\n sequence: number;\n createdAt: number;\n topic: string;\n };\n\nexport interface FabricActorValidityFacts {\n activation: FabricActorActivation;\n current: {\n latestActivationSequence: number;\n mainRevision: number;\n taskRevision: number;\n idle: boolean;\n now: number;\n };\n}\n\nexport interface FabricActorRequest {\n /** Storage and visibility boundary. Defaults to mesh.actorScope for compatibility. */\n scope?: FabricActorStorageScope;\n name: string;\n instructions: string;\n /** Asynchronous observations of session-bound OMP events plus synthetic tool_error. */\n events?: FabricActorHostEvent[];\n topics?: string[];\n /** Defaults to mailbox. steer/followUp require an explicit triggerTurn choice. */\n delivery?: FabricActorDelivery;\n responseMode?: FabricActorResponseMode;\n /** Required for steer/followUp; must be false or omitted for mailbox/nextTurn. */\n triggerTurn?: boolean;\n coalesce?: boolean;\n /** session actors stop with their OMP host; durable actors transfer to a resident host. */\n residency?: FabricParticipantResidency;\n runner?: FabricAgentRunner;\n model?: string;\n thinking?: FabricThinking;\n tools?: string[];\n transport?: FabricAgentTransport;\n timeoutMs?: number;\n /**\n * Fabric capability for the actor. Defaults to true (today's behavior: an OMP\n * actor is recursively Fabric-equipped with the host-required fabric_exec\n * tool). Set false to disable Fabric for an OMP actor: the activation runs with\n * extensions:false and recursive:false so fabric_exec is not injected and the\n * actor cannot call agents.* or mesh.*; the host still manages its mailbox\n * and delivery (same model as a Claude actor). This does not restrict the\n * actor's ordinary tool allowlist. Fixed at creation.\n */\n extensions?: boolean;\n /** Exact Fabric actions committed before every actor run. Optional entries do not block a run. */\n requires?: readonly (string | FabricCapabilityRequirement)[];\n /** Serialized guest predicate evaluated before work and before delivery. */\n validWhile?: FabricActorValidWhileSource;\n}\n\nexport interface FabricActorInfo {\n id: string;\n scope: FabricActorStorageScope;\n name: string;\n rootId?: string;\n status: FabricActorStatus;\n runner: FabricAgentRunner;\n events: FabricActorHostEvent[];\n topics: string[];\n delivery: FabricActorDelivery;\n responseMode: FabricActorResponseMode;\n triggerTurn: boolean;\n coalesce: boolean;\n residency?: FabricParticipantResidency;\n /** Effective value for this caller after session bindings overlay project defaults. */\n model?: string;\n /** Effective value for this caller after session bindings overlay project defaults. */\n thinking?: FabricThinking;\n binding?: FabricActorBindingView;\n projectDefaults?: FabricActorProjectDefaults;\n tools?: string[];\n timeoutMs?: number;\n extensions?: boolean;\n requirements?: FabricCapabilityRequirement[];\n capabilityDigest?: string;\n missingCapabilities?: string[];\n validWhile?: FabricActorValidWhileSource;\n queued: number;\n messages: number;\n createdAt: number;\n updatedAt: number;\n lastRunId?: string;\n lastError?: string;\n sessionFile?: string;\n logDir?: string;\n}\n\nexport interface FabricActorLog {\n actorId: string;\n actorName: string;\n sessionFile: string;\n logDir: string;\n session: FabricLogLine[];\n sessionHasMore: boolean;\n sessionBefore?: number;\n run?: {\n runId: string;\n eventsFile: string;\n status?: AgentRunRecord;\n events: FabricLogLine[];\n hasMore: boolean;\n before?: number;\n };\n retainedRuns: string[];\n}\n\nexport interface FabricActorMessage {\n id: string;\n actorId: string;\n actorName: string;\n direction: \"in\" | \"out\";\n source: string;\n createdAt: number;\n text?: string;\n data?: unknown;\n action?: \"silent\" | \"message\" | \"stop\";\n runId?: string;\n usage?: AgentUsage;\n error?: string;\n stale?: boolean;\n reason?: string;\n}\n\nexport interface FabricActorDirective {\n action: \"silent\" | \"message\" | \"stop\";\n message?: string;\n data?: unknown;\n}\n\nexport interface FabricActorDeliveryRequest {\n actor: FabricActorInfo;\n message: FabricActorMessage;\n delivery: Exclude<FabricActorDelivery, \"mailbox\">;\n triggerTurn: boolean;\n}\n\n/**\n * A project-independent actor template stored in the global registry\n * (the user's agent dir, not a project mesh). It carries only the actor\n * definition (the same fields as FabricActorRequest) plus identity and\n * timestamps \u2014 never any history (messages, session transcript, or run logs).\n * Global actors are not live: they are stamped into a project via import,\n * which creates a fresh live actor with no inherited history.\n */\nexport interface GlobalActorDefinition extends FabricActorRequest {\n id: string;\n createdAt: number;\n updatedAt: number;\n // Redeclared required: the registry always materializes these (defaults\n // applied on create and load), so they are never undefined on a stored\n // template. Keeping them required avoids undefined creeping into merges and\n // spreads under exactOptionalPropertyTypes.\n events: FabricActorHostEvent[];\n topics: string[];\n delivery: FabricActorDelivery;\n responseMode: FabricActorResponseMode;\n triggerTurn: boolean;\n coalesce: boolean;\n residency?: FabricParticipantResidency;\n runner: FabricAgentRunner;\n}\n", "import fs from \"node:fs\";\nimport type { FabricLogLine } from \"./agents/types.js\";\n\nconst READ_CHUNK_BYTES = 64 * 1024;\nconst DEFAULT_READ_MAX_BYTES = 8 * 1024 * 1024;\n\nexport interface JsonlPage {\n lines: FabricLogLine[];\n hasMore: boolean;\n before?: number;\n}\n\nconst parseLine = (offset: number, raw: string): FabricLogLine => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return { offset, raw };\n }\n return { offset, raw, parsed };\n};\n\ninterface BufferedLine {\n offset: number;\n raw: string;\n}\n\nconst completeLines = (buffer: Buffer, bufferStart: number, fileEnd: number): BufferedLine[] => {\n const lines: BufferedLine[] = [];\n let start = 0;\n let first = true;\n for (let index = 0; index < buffer.length; index++) {\n if (buffer[index] !== 10) continue;\n if (!first || bufferStart === 0) {\n const raw = buffer.subarray(start, index).toString(\"utf8\").replace(/\\r$/, \"\");\n if (raw) lines.push({ offset: bufferStart + start, raw });\n }\n first = false;\n start = index + 1;\n }\n if (fileEnd === bufferStart + buffer.length && start < buffer.length) {\n if (!first || bufferStart === 0) {\n const raw = buffer.subarray(start).toString(\"utf8\").replace(/\\r$/, \"\");\n if (raw) lines.push({ offset: bufferStart + start, raw });\n }\n }\n return lines;\n};\n\n/** Read a bounded JSONL page backwards from an already validated descriptor. */\nexport const readJsonlPageFromDescriptor = (\n descriptor: number,\n limit: number,\n before?: number,\n knownSize?: number,\n maxBytes?: number,\n): JsonlPage => {\n try {\n const size = knownSize ?? fs.fstatSync(descriptor).size;\n const fileEnd = typeof before === \"number\" && Number.isSafeInteger(before)\n ? Math.max(0, Math.min(before, size))\n : size;\n const boundedLimit = Math.max(1, Math.trunc(limit));\n const boundedBytes = Math.max(\n 1,\n Math.trunc(maxBytes ?? DEFAULT_READ_MAX_BYTES),\n );\n const chunks: Buffer[] = [];\n let bufferStart = fileEnd;\n let bufferedBytes = 0;\n let newlineCount = 0;\n\n while (\n bufferStart > 0 &&\n newlineCount <= boundedLimit &&\n bufferedBytes < boundedBytes\n ) {\n const length = Math.min(READ_CHUNK_BYTES, bufferStart, boundedBytes - bufferedBytes);\n const chunkStart = bufferStart - length;\n const chunk = Buffer.allocUnsafe(length);\n const bytesRead = fs.readSync(descriptor, chunk, 0, length, chunkStart);\n if (bytesRead <= 0) break;\n const captured = chunk.subarray(0, bytesRead);\n chunks.push(captured);\n for (const byte of captured) {\n if (byte === 0x0a) newlineCount += 1;\n }\n bufferedBytes += bytesRead;\n bufferStart = chunkStart;\n }\n\n const buffer = Buffer.concat(chunks.reverse(), bufferedBytes);\n const records = completeLines(buffer, bufferStart, fileEnd);\n\n const selected = records.slice(-boundedLimit);\n const hasMore = selected.length > 0 && (records.length > selected.length || bufferStart > 0);\n return {\n lines: selected.map((line) => parseLine(line.offset, line.raw)),\n hasMore,\n ...(hasMore ? { before: selected[0]!.offset } : {}),\n };\n } catch {\n return { lines: [], hasMore: false };\n }\n};\n\n/** Read a bounded JSONL page backwards, touching only enough file chunks to fill it. */\nexport const readJsonlPage = (\n filePath: string,\n limit: number,\n before?: number,\n maxBytes?: number,\n): JsonlPage => {\n let descriptor: number | undefined;\n try {\n descriptor = fs.openSync(filePath, \"r\");\n return readJsonlPageFromDescriptor(descriptor, limit, before, undefined, maxBytes);\n } catch {\n return { lines: [], hasMore: false };\n } finally {\n if (descriptor !== undefined) {\n try { fs.closeSync(descriptor); } catch {}\n }\n }\n};\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/runtime/guest-types.ts"],
4
- "sourcesContent": ["import type { FabricDynamicGuestDeclarations } from \"../protocol.js\";\n\n// These names and compatibility fields are the single source of truth for\n// generated core-override overloads. Keep them beside OmpToolsApi below so an\n// override extends the same guest contract rather than copying its signatures.\n// Numeric fields widen to `number | string` in generated overloads too,\n// mirroring built-in runtime normalization; a strict override schema still\n// rejects the string form at validation time, and the registry error wins.\nexport const OMP_CORE_COMPATIBILITY_ARGUMENT_TYPE_NAMES = {\n read: \"OmpReadCompatibilityArgument\",\n bash: \"OmpBashCompatibilityArgument\",\n edit: \"OmpEditCompatibilityArgument\",\n write: \"OmpWriteCompatibilityArgument\",\n grep: \"OmpGrepCompatibilityArgument\",\n find: \"OmpFindCompatibilityArgument\",\n ls: \"OmpLsCompatibilityArgument\",\n} as const;\n\nexport const OMP_CORE_NUMERIC_FIELDS = {\n read: [\"offset\", \"limit\"],\n bash: [\"timeout\"],\n edit: [],\n write: [],\n grep: [\"context\", \"skip\"],\n find: [\"limit\"],\n ls: [\"limit\"],\n} as const;\n\nexport const GUEST_TYPE_DECLARATIONS = `\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\ntype FabricTransport = \"auto\" | \"process\" | \"tmux\" | \"screen\" | \"localterm\" | \"herdr\";\ntype FabricAgentRunner = \"omp\" | \"claude\" | \"veda\";\ntype FabricThinking = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\ninterface FabricActionEffect {\n kind: \"none\" | \"scoped\" | \"transactional\" | \"emission\";\n resources?: string[];\n ordering?: \"commutative\" | \"ordered\" | \"unknown\";\n}\ninterface FabricAction {\n ref: string;\n provider: string;\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n risk: \"read\" | \"write\" | \"execute\" | \"network\" | \"agent\";\n namespace?: string;\n effect?: FabricActionEffect;\n}\ninterface FabricAgentRequest {\n task: string;\n name?: string;\n runner?: FabricAgentRunner;\n transport?: FabricTransport;\n model?: string;\n persona?: string;\n thinking?: FabricThinking;\n tools?: string[];\n timeoutMs?: number;\n extensions?: boolean;\n recursive?: boolean;\n /** Filesystem execution directory; relative paths resolve from the parent agent cwd. */\n cwd?: string;\n worktree?: boolean;\n schema?: Record<string, unknown>;\n prompt?: string;\n instructions?: string;\n timeout_ms?: number;\n residency?: FabricParticipantResidency;\n}\ninterface FabricHandoffCall {\n readonly ref: string;\n}\ninterface FabricHandoffFacts {\n readonly calls: readonly FabricHandoffCall[];\n count(ref?: string | readonly string[]): number;\n}\ntype FabricHandoffPredicate = (facts: Readonly<FabricHandoffFacts>) => boolean;\ninterface FabricHandoffRequest {\n model: string;\n task?: string;\n when?: FabricHandoffPredicate;\n name?: string;\n transport?: FabricTransport;\n thinking?: FabricThinking;\n tools?: string[];\n timeoutMs?: number;\n extensions?: boolean;\n recursive?: boolean;\n schema?: Record<string, unknown>;\n prompt?: string;\n instructions?: string;\n timeout_ms?: number;\n}\ninterface FabricHandoffResult {\n scheduled: true;\n status: \"deferred\";\n boundary: \"fabric_exec_end\";\n}\ninterface FabricMainAgentInfo {\n id: string;\n name: \"Main\";\n kind: \"main\";\n status: \"idle\" | \"running\" | \"remote\";\n runner: \"omp\";\n transport: \"host\";\n cwd?: string;\n sessionId?: string;\n model?: string;\n thinking?: string;\n startedAt?: number;\n updatedAt: number;\n pendingMessages: boolean;\n local: boolean;\n}\ninterface FabricPeerInfo {\n id: string;\n name: string;\n kind: \"peer\";\n status: \"idle\" | \"running\";\n runner: \"omp\";\n transport: \"host\";\n cwd: string;\n sessionId: string;\n model?: string;\n thinking?: string;\n startedAt: number;\n updatedAt: number;\n pendingMessages: boolean;\n local: false;\n}\ntype FabricParticipantKind = \"root\" | \"agent\" | \"actor\";\ntype FabricParticipantResidency = \"session\" | \"durable\";\ntype FabricParticipantScope = \"local\" | \"lineage\" | \"project\";\ntype FabricParticipantCapability = \"steer\" | \"followUp\" | \"stop\" | \"ask\" | \"actor-bindings\" | \"attach\" | \"fabric\";\ninterface FabricParticipantInfo {\n format: 1;\n id: string;\n kind: FabricParticipantKind;\n rootId: string;\n ownerHostId: string;\n ownerIdentityId: string;\n parentId?: string;\n name: string;\n status: string;\n runner: FabricAgentRunner;\n transport: FabricTransport | \"host\";\n capabilities: FabricParticipantCapability[];\n cwd?: string;\n sessionId?: string;\n model?: string;\n thinking?: string;\n startedAt: number;\n updatedAt: number;\n finishedAt?: number;\n pendingMessages?: boolean;\n currentTool?: string;\n turns?: number;\n toolCalls?: number;\n usage?: { input: number; output: number; cacheRead: number; cacheWrite: number; cost: number };\n actorQueued?: number;\n actorMessages?: number;\n controlProtocol: \"v1\" | \"legacy\";\n residency: FabricParticipantResidency;\n local: boolean;\n stale: boolean;\n}\ntype FabricLifecycleEventType =\n | \"omp.input\"\n | \"omp.agent_start\"\n | \"omp.agent_end\"\n | \"omp.turn_end\"\n | \"omp.tool_error\"\n | \"omp.session_compact\"\n | \"run.completed\"\n | \"run.failed\"\n | \"run.stopped\"\n | \"run.timed_out\"\n | \"tokens.usage\"\n | \"component.state\";\ntype FabricLifecycleDelivery = \"steer\" | \"followUp\";\ninterface FabricLifecycleSource {\n id: string;\n name: string;\n kind: FabricParticipantKind;\n rootId: string;\n runner: FabricAgentRunner;\n ownerHostId?: string;\n ownerIdentityId?: string;\n}\ninterface FabricLifecycleEvent {\n version: 1;\n id: string;\n sequence: number;\n event: FabricLifecycleEventType;\n source: FabricLifecycleSource;\n occurredAt: number;\n publishedAt: number;\n runId?: string;\n status?: string;\n data?: unknown;\n}\ninterface FabricLifecycleSubscription {\n format: 1;\n id: string;\n from: string;\n events: FabricLifecycleEventType[];\n to: string;\n delivery: FabricLifecycleDelivery;\n triggerTurn: boolean;\n once: boolean;\n afterSequence: number;\n createdAt: number;\n updatedAt: number;\n createdBy: { id: string; name: string; kind: \"main\" | \"agent\" | \"actor\"; sessionId?: string };\n lastDeliveredAt?: number;\n lastEventId?: string;\n lastError?: string;\n}\ninterface FabricAgentHandle {\n id: string;\n name: string;\n status: string;\n runner: FabricAgentRunner;\n transport: FabricTransport;\n cwd: string;\n model?: string;\n thinking?: FabricThinking;\n actorId?: string;\n actorName?: string;\n sessionId?: string;\n runnerSessionId?: string;\n attachCommand?: string;\n branch?: string;\n worktree?: string;\n text?: string;\n value?: unknown;\n error?: string;\n logFile?: string;\n residency?: FabricParticipantResidency;\n}\ninterface FabricRemoteControlResult {\n queued: true;\n messageId: string;\n routed: \"mesh\";\n acknowledged: true;\n}\ninterface FabricAgentResult extends FabricAgentHandle {\n task: string;\n startedAt: number;\n finishedAt?: number;\n turns: number;\n toolCalls: number;\n text: string;\n value?: unknown;\n error?: string;\n usage: { input: number; output: number; cacheRead: number; cacheWrite: number; cost: number };\n pendingMessages?: { steering: string[]; followUp: string[] };\n}\ninterface FabricModelInfo {\n runner?: FabricAgentRunner;\n provider: string;\n id: string;\n name: string;\n key: string;\n value?: string;\n resolvedModel?: string;\n displayName?: string;\n description?: string;\n supportsEffort?: boolean;\n supportedEffortLevels?: string[];\n supportsAdaptiveThinking?: boolean;\n supportsFastMode?: boolean;\n supportsAutoMode?: boolean;\n}\ninterface FabricLogLine {\n index?: number;\n offset: number;\n raw: string;\n parsed?: unknown;\n}\ninterface FabricAgentLog {\n id: string;\n runDirectory: string;\n logFile: string;\n status?: FabricAgentResult;\n events: FabricLogLine[];\n hasMore: boolean;\n before?: number;\n}\ninterface FabricActorLog {\n actorId: string;\n actorName: string;\n sessionFile: string;\n logDir: string;\n session: FabricLogLine[];\n sessionHasMore: boolean;\n sessionBefore?: number;\n run?: {\n runId: string;\n eventsFile: string;\n status?: FabricAgentResult;\n events: FabricLogLine[];\n hasMore: boolean;\n before?: number;\n };\n retainedRuns: string[];\n}\ninterface FabricCapabilityActionHead {\n key: string;\n parentKey: string;\n ref: string;\n name: string;\n description: string;\n descriptorHash: string;\n risk: \"read\" | \"write\" | \"execute\" | \"network\" | \"agent\";\n namespace?: string;\n effect?: FabricActionEffect;\n}\ninterface FabricCapabilityProviderHead {\n key: string;\n parentKey: string;\n name: string;\n description: string;\n descriptorHash: string;\n actions: FabricCapabilityActionHead[];\n}\ninterface FabricCapabilityCatalog {\n kind: \"omp-fabric.capability-catalog\";\n version: 1;\n root: {\n key: \"capability:fabric\";\n name: \"Fabric capabilities\";\n description: string;\n descriptorHash: string;\n };\n providers: FabricCapabilityProviderHead[];\n totalActions: number;\n indexedActions: number;\n complete: boolean;\n reasons: string[];\n}\ninterface FabricToolsApi {\n providers(): Promise<Array<{ name: string; description: string }>>;\n catalog(args?: { provider?: string; limit?: number }): Promise<FabricCapabilityCatalog>;\n list(args?: { provider?: string; namespace?: string; query?: string; limit?: number }): Promise<FabricAction[]>;\n search(query: string): Promise<FabricAction[]>;\n search(args: { query: string; limit?: number }): Promise<FabricAction[]>;\n describe(args: { ref: string }): Promise<FabricAction>;\n call(args: { ref: string; args?: Record<string, unknown> }): Promise<unknown>;\n progress(args: { message: string }): Promise<void>;\n models(): Promise<FabricModelInfo[]>;\n}\ninterface FabricCapturedToolResult {\n content: Array<{ type: string; text?: string; [key: string]: unknown }>;\n text: string;\n details?: unknown;\n isError: boolean;\n terminate?: boolean;\n source: { path: string; source: string; scope: string; origin: string; baseDir?: string };\n}\ninterface FabricCapturedTool {\n (args?: Record<string, unknown>): Promise<FabricCapturedToolResult>;\n}\ntype FabricExtensionsApi = Record<string, FabricCapturedTool>;\n// String-primary tools (read/bash/grep/find/ls) accept a bare string; the\n// runtime proxy coerces it to { <primaryField>: string }. Lets the model write\n// the natural form (omp.bash(\"ls\")) instead of omp.bash({ command: \"ls\" }).\n// Return shapes differ by tool: read/grep/find/ls return their text as a bare\n// string (e.g. const src: string = await omp.read({ path })); shell/edit/write\n// return { ok, output, details } (e.g. const { output } = await omp.bash(...)).\n// Common alias keys (cmd\u2192command, query\u2192pattern, file\u2192path, dir\u2192path) and a\n// flat edit shape ({ path, oldText, newText }) are also accepted; the runtime\n// proxy normalizes them to the canonical form before the host validates args.\n// Bash timeout is measured in seconds; timeoutMs is converted from milliseconds.\n// Extended near-miss repairs: find's name/filename/glob \u2192 pattern, write's\n// data \u2192 content, ls's folder \u2192 path, bash's script \u2192 command; numeric option\n// fields (limit/offset/context/timeout) also accept numeric strings, coerced\n// at runtime (2322 diagnostics are suppressed by the type-checker by design).\n// String-primary tools also take a two-arg (primary, options) form \u2014\n// omp.read(\"index.ts\", { limit: 120 }) merges to { path, ...options } at\n// runtime, the positional string winning the primary field on conflict.\n// shell/edit/write envelopes are proxy-guarded so string-method access\n// (.trim(), .split(), iteration) fails with an actionable TypeError pointing\n// at .output instead of QuickJS's context-free \"not a function\" \u2014 property-\n// miss (2339) checks are suppressed by design, so the runtime gives the hint.\ntype OmpPathArgument = {\n path?: string;\n file?: string;\n absolutePath?: string;\n file_path?: string;\n filePath?: string;\n filepath?: string;\n pathname?: string;\n target_file?: string;\n targetFile?: string;\n absolute_path?: string;\n fileAbsolutePath?: string;\n};\ntype OmpOptionalPathArgument = {\n path?: string;\n file?: string;\n absolutePath?: string;\n file_path?: string;\n filePath?: string;\n filepath?: string;\n pathname?: string;\n target_file?: string;\n targetFile?: string;\n absolute_path?: string;\n fileAbsolutePath?: string;\n dir?: string;\n folder?: string;\n directory?: string;\n directoryPath?: string;\n};\ntype OmpOldTextArgument = {\n oldText?: string;\n old?: string;\n old_string?: string;\n oldString?: string;\n old_str?: string;\n oldStr?: string;\n from?: string;\n old_value?: string;\n old_text?: string;\n oldContent?: string;\n old_content?: string;\n};\ntype OmpNewTextArgument = {\n newText?: string;\n new?: string;\n replacement?: string;\n new_string?: string;\n newString?: string;\n new_str?: string;\n newStr?: string;\n to?: string;\n new_value?: string;\n new_text?: string;\n newContent?: string;\n new_content?: string;\n};\ntype OmpEditOperation = OmpOldTextArgument & OmpNewTextArgument & { all?: boolean };\ntype OmpCommandArgument = { command?: string; cmd?: string; shell?: string; cmdline?: string; script?: string; commandLine?: string };\ntype OmpContentArgument = { content?: string; contents?: string; body?: string; text?: string; data?: string; fileContent?: string };\ntype OmpGrepPatternArgument = { pattern?: string; query?: string; regex?: string; search?: string; q?: string; expression?: string; text?: string };\ntype OmpFindPatternArgument = { pattern?: string; query?: string; regex?: string; search?: string; name?: string; filename?: string; glob?: string; expression?: string; include?: string };\n// Two-arg (primary, options) bags for the string-primary tools. Only option\n// aliases belong here (max/start/ctx/ic/...), never primary-field aliases \u2014\n// the primary field comes from the positional string.\ntype OmpReadOptions = { offset?: number; limit?: number; start?: number; max?: number };\n// cwd is honored per call by the omp provider, which binds the command to a\n// shell definition rooted there; relative paths resolve from the session cwd.\n// The alias spellings mirror the shell entries in __ompArgAliases: the\n// runtime repairs them, so the checker has to accept the same spellings or a\n// repairable call is rejected before it ever reaches the sandbox.\ntype OmpShellOptions = {\n timeout?: number; timeoutMs?: number; settle?: boolean;\n cwd?: string; workdir?: string; directory?: string; workingDirectory?: string;\n};\ntype OmpBashOptions = OmpShellOptions;\ntype OmpGrepOptions = { path?: string; glob?: string; globPattern?: string; ignoreCase?: boolean; ic?: boolean; caseInsensitive?: boolean; literal?: boolean; context?: number; ctx?: number; skip?: number };\ntype OmpFindOptions = { path?: string; limit?: number; max?: number };\ntype OmpLsOptions = { limit?: number; max?: number };\ntype OmpReadArgument = string | (OmpPathArgument & OmpReadOptions);\ntype OmpBashArgument = string | (OmpCommandArgument & OmpBashOptions);\ntype OmpEditFlatArgument = OmpPathArgument & OmpOldTextArgument & OmpNewTextArgument & { all?: boolean };\ntype OmpEditArgument = OmpPathArgument & ({ edits: OmpEditOperation[]; all?: boolean } | OmpEditFlatArgument);\ntype OmpWriteArgument = string | (OmpPathArgument & OmpContentArgument);\ntype OmpGrepArgument = string | (OmpGrepPatternArgument & OmpGrepOptions);\ntype OmpFindArgument = string | (OmpFindPatternArgument & OmpFindOptions);\ntype OmpLsArgument = string | (OmpOptionalPathArgument & OmpLsOptions);\ntype OmpNumericString<T> = T extends number ? T | string : T;\ntype OmpNumericStringOptions<T> = { [K in keyof T]: OmpNumericString<T[K]> };\ntype OmpReadCompatibilityArgument = string | (OmpPathArgument & OmpNumericStringOptions<OmpReadOptions>);\ntype OmpBashCompatibilityArgument = string | (OmpCommandArgument & OmpNumericStringOptions<OmpBashOptions>);\ntype OmpEditCompatibilityArgument = OmpEditFlatArgument;\ntype OmpWriteCompatibilityArgument = OmpWriteArgument;\ntype OmpGrepCompatibilityArgument = string | (OmpGrepPatternArgument & OmpNumericStringOptions<OmpGrepOptions>);\ntype OmpFindCompatibilityArgument = string | (OmpFindPatternArgument & OmpNumericStringOptions<OmpFindOptions>);\ntype OmpLsCompatibilityArgument = string | (OmpOptionalPathArgument & OmpNumericStringOptions<OmpLsOptions>);\ninterface OmpToolsApi {\n read(args: OmpReadArgument, options?: OmpReadOptions): Promise<string>;\n bash(args: OmpBashArgument, options?: OmpBashOptions): Promise<{ ok: true; output: string; details: unknown } | { ok: false; output: string; details: null; exitCode: number; error: string }>;\n edit(args: OmpEditArgument): Promise<{ ok: true; output: string; details: unknown }>;\n edit(path: string, oldText: string, newText: string): Promise<{ ok: true; output: string; details: unknown }>;\n write(args: OmpWriteArgument): Promise<{ ok: true; output: string; details: unknown }>;\n write(path: string, content: string): Promise<{ ok: true; output: string; details: unknown }>;\n grep(args: OmpGrepArgument): Promise<string>;\n grep(pattern: string, path?: string | OmpGrepOptions, skip?: number): Promise<string>;\n find(args: OmpFindArgument): Promise<string>;\n find(pattern: string, path?: string | OmpFindOptions, limit?: number): Promise<string>;\n ls(args?: OmpLsArgument, options?: OmpLsOptions): Promise<string>;\n}\ntype FabricActorHostEvent =\n | \"resources_discover\"\n | \"session_start\"\n | \"session_before_switch\"\n | \"session_switch\"\n | \"session_before_branch\"\n | \"session_branch\"\n | \"session_before_compact\"\n | \"session.compacting\"\n | \"session_compact\"\n | \"session_shutdown\"\n | \"session_before_tree\"\n | \"session_tree\"\n | \"goal_updated\"\n | \"input\"\n | \"before_agent_start\"\n | \"agent_start\"\n | \"agent_end\"\n | \"session_stop\"\n | \"turn_start\"\n | \"turn_end\"\n | \"message_start\"\n | \"message_update\"\n | \"message_end\"\n | \"context\"\n | \"before_provider_request\"\n | \"after_provider_response\"\n | \"tool_execution_start\"\n | \"tool_call\"\n | \"tool_execution_update\"\n | \"tool_result\"\n | \"tool_execution_end\"\n | \"user_bash\"\n | \"tool_error\";\ntype FabricActorDelivery = \"mailbox\" | \"steer\" | \"followUp\" | \"nextTurn\";\ninterface FabricActorHostMediaDescriptor {\n readonly type: \"image\";\n readonly mediaIndex: number;\n readonly mimeType: string;\n}\ninterface FabricActorHostSignal {\n readonly payload: unknown;\n readonly media?: readonly FabricActorHostMediaDescriptor[];\n readonly idle: boolean;\n readonly observedAt: number;\n}\ntype FabricActorActivation =\n | { readonly kind: \"hostEvent\"; readonly id: string; readonly source: string; readonly sequence: number; readonly createdAt: number; readonly event: FabricActorHostEvent; readonly mainRevision: number; readonly taskRevision: number; readonly signal?: FabricActorHostSignal }\n | { readonly kind: \"direct\"; readonly id: string; readonly source: string; readonly sequence: number; readonly createdAt: number }\n | { readonly kind: \"mesh\"; readonly id: string; readonly source: string; readonly sequence: number; readonly createdAt: number; readonly topic: string };\ninterface FabricActorValidityFacts {\n readonly activation: Readonly<FabricActorActivation>;\n readonly current: Readonly<{ latestActivationSequence: number; mainRevision: number; taskRevision: number; idle: boolean; now: number }>;\n}\ntype FabricActorValidityDecision = boolean | { valid: boolean; reason?: string };\ntype FabricActorBindingScope = \"session\" | \"project\";\ninterface FabricActorRunBinding { model?: string; thinking?: FabricThinking }\ntype FabricActorValidWhile = (facts: Readonly<FabricActorValidityFacts>) => FabricActorValidityDecision;\ninterface FabricActorRequestBase {\n scope?: \"session\" | \"project\" | \"global\";\n name: string;\n instructions: string;\n events?: FabricActorHostEvent[];\n topics?: string[];\n responseMode?: \"text\" | \"directive\";\n coalesce?: boolean;\n runner?: FabricAgentRunner;\n model?: string;\n thinking?: FabricThinking;\n tools?: string[];\n transport?: FabricTransport;\n timeoutMs?: number;\n timeout_ms?: number;\n extensions?: boolean;\n requires?: Array<string | { ref: string; optional?: boolean }>;\n validWhile?: FabricActorValidWhile;\n residency?: FabricParticipantResidency;\n}\ntype FabricActorRequest = FabricActorRequestBase & (\n | { delivery?: \"mailbox\"; triggerTurn?: false }\n | { delivery: \"nextTurn\"; triggerTurn?: false }\n | { delivery: \"steer\" | \"followUp\"; triggerTurn: boolean }\n);\ninterface FabricActorInfo {\n id: string;\n scope: \"session\" | \"project\";\n name: string;\n status: \"idle\" | \"queued\" | \"running\" | \"stopped\";\n runner: FabricAgentRunner;\n events: FabricActorHostEvent[];\n topics: string[];\n delivery: FabricActorDelivery;\n responseMode: \"text\" | \"directive\";\n triggerTurn: boolean;\n coalesce: boolean;\n model?: string;\n thinking?: FabricThinking;\n binding?: FabricActorRunBinding & { scope: \"session\"; sessionId: string; updatedAt?: number };\n projectDefaults?: FabricActorRunBinding & { scope: \"project\" };\n tools?: string[];\n timeoutMs?: number;\n extensions?: boolean;\n requirements?: Array<{ ref: string; optional?: boolean }>;\n capabilityDigest?: string;\n missingCapabilities?: string[];\n validWhile?: { version: 1; source: string };\n residency: FabricParticipantResidency;\n queued: number;\n messages: number;\n createdAt: number;\n updatedAt: number;\n lastRunId?: string;\n lastError?: string;\n sessionFile?: string;\n logDir?: string;\n}\ninterface FabricModelSwitchRequest {\n /** provider/id, a models.aliases name, or a search term; resolution tries aliases first, then exact matches, then the closest fuzzy match (recency from pi-model-sort breaks ties) against authenticated models. */\n model: string;\n /** Optional provider filter applied before matching (e.g. \"anthropic\"). */\n provider?: string;\n}\ninterface FabricModelSwitchResult {\n switched: boolean;\n /** Active model as provider/id after the call (unchanged when reason is \"already-active\"). */\n model: string;\n name?: string;\n /** Previously active provider/id when known. Absent for already-active results. */\n previous?: string;\n /** Set when the selector resolved through a configured models.aliases name. */\n alias?: string;\n /** How the selector resolved: the alias name, or one of closest/recent/latest for inexact picks. Absent for exact provider/id or bare-id matches. */\n via?: string;\n reason?: \"already-active\";\n}\ninterface FabricActorMessage {\n id: string;\n actorId: string;\n actorName: string;\n direction: \"in\" | \"out\";\n source: string;\n createdAt: number;\n text?: string;\n data?: unknown;\n action?: \"silent\" | \"message\" | \"stop\";\n runId?: string;\n error?: string;\n stale?: boolean;\n reason?: string;\n}\n// agentId/agent_id spellings repair to id during agent arg normalization.\ntype FabricAgentTargetArgs = { id: string; agentId?: string; agent_id?: string };\ninterface FabricAgentsApi {\n run(args: FabricAgentRequest): Promise<FabricAgentResult>;\n handoff(args: FabricHandoffRequest): Promise<FabricHandoffResult>;\n spawn(args: FabricAgentRequest): Promise<FabricAgentHandle>;\n wait(args: FabricAgentTargetArgs): Promise<FabricAgentResult>;\n status(args: FabricAgentTargetArgs): Promise<FabricAgentResult | FabricAgentHandle | FabricMainAgentInfo | FabricActorInfo | FabricParticipantInfo>;\n list(args?: { scope?: FabricParticipantScope }): Promise<Array<FabricAgentResult | FabricAgentHandle | FabricParticipantInfo>>;\n members(args?: { scope?: FabricParticipantScope; kinds?: FabricParticipantKind[]; includeStale?: boolean }): Promise<FabricParticipantInfo[]>;\n self(): Promise<FabricParticipantInfo>;\n main(): Promise<FabricMainAgentInfo>;\n sessions(): Promise<FabricParticipantInfo[]>;\n peers(): Promise<FabricPeerInfo[]>;\n subscribe(args: {\n from: string;\n events: FabricLifecycleEventType[];\n to?: string;\n delivery: FabricLifecycleDelivery;\n triggerTurn: boolean;\n once?: boolean;\n }): Promise<FabricLifecycleSubscription>;\n subscriptions(args?: { from?: string; to?: string }): Promise<FabricLifecycleSubscription[]>;\n unsubscribe(args: FabricAgentTargetArgs): Promise<{ removed: boolean }>;\n models(args?: { runner?: FabricAgentRunner; refresh?: boolean }): Promise<FabricModelInfo[]>;\n stop(args: FabricAgentTargetArgs): Promise<FabricAgentResult | FabricActorInfo | FabricRemoteControlResult>;\n cleanup(args: FabricAgentTargetArgs & { deleteBranch?: boolean; delete_branch?: boolean }): Promise<{ cleaned: boolean }>;\n create(args: FabricActorRequest): Promise<FabricActorInfo>;\n setModel(args: { id: string; model?: string; scope?: FabricActorBindingScope }): Promise<FabricActorInfo>;\n switchModel(args: FabricModelSwitchRequest): Promise<FabricModelSwitchResult>;\n setThinking(args: { id: string; thinking?: FabricThinking; scope?: FabricActorBindingScope }): Promise<FabricActorInfo>;\n setTools(args: { id: string; tools: string[]; scope?: \"project\" | \"global\" }): Promise<FabricActorInfo>;\n setEvents(args: { id: string; events: FabricActorHostEvent[] }): Promise<FabricActorInfo>;\n setDeliveryPolicy(args: {\n id: string;\n delivery: FabricActorDelivery;\n triggerTurn: boolean;\n scope?: \"project\" | \"global\";\n }): Promise<FabricActorInfo>;\n setInstructions(args: {\n id: string;\n instructions: string;\n scope?: \"project\" | \"global\";\n }): Promise<FabricActorInfo>;\n ask(args: { id: string; message: string; data?: unknown; model?: string; thinking?: FabricThinking }): Promise<FabricActorMessage>;\n tell(args: { id: string; message: string; data?: unknown; model?: string; thinking?: FabricThinking }): Promise<{ queued: true; messageId: string }>;\n steer(args: { id: string; message: string; data?: unknown }): Promise<{ queued: true; messageId: string; routed?: \"local\" | \"main\" | \"mesh\"; acknowledged?: boolean }>;\n followUp(args: { id: string; message: string; data?: unknown }): Promise<{ queued: true; messageId: string; routed?: \"local\" | \"main\" | \"mesh\"; acknowledged?: boolean }>;\n setSteeringMode(args: { id: string; mode: \"all\" | \"one-at-a-time\" }): Promise<{ queued: true; messageId: string }>;\n setFollowUpMode(args: { id: string; mode: \"all\" | \"one-at-a-time\" }): Promise<{ queued: true; messageId: string }>;\n actorStatus(args: FabricAgentTargetArgs): Promise<FabricActorInfo>;\n actors(): Promise<FabricActorInfo[]>;\n messages(args: { id: string; limit?: number }): Promise<FabricActorMessage[]>;\n remove(args: { id: string }): Promise<{ removed: boolean }>;\n log(args: {\n id: string;\n type?: \"session\" | \"run\" | \"all\";\n lines?: number;\n before?: number;\n runId?: string;\n }): Promise<FabricActorLog | FabricAgentLog>;\n}\ninterface FabricMcpResult {\n text: string;\n content: unknown[];\n structuredContent: unknown;\n}\ninterface FabricMcpTool {\n (args?: Record<string, unknown>): Promise<FabricMcpResult | unknown>;\n}\ninterface FabricMcpServer {\n [tool: string]: FabricMcpTool;\n}\n// Management verbs stay members of mcp even when the declare line below is\n// replaced by generated per-server declarations (see the dynamic option on\n// guestTypeDeclarations), so generated surfaces intersect with this type\n// rather than re-declaring them.\ninterface FabricMcpManagement {\n servers(): Promise<Array<{ name: string; description: string | null; transport: \"http\" | \"stdio\" }>>;\n reload(): Promise<{ servers: string[] }>;\n register(args: {\n name: string;\n description?: string;\n command?: string;\n args?: string[];\n cwd?: string;\n baseUrl?: string;\n headers?: Record<string, string>;\n env?: Record<string, string>;\n overwrite?: boolean;\n }): Promise<{ registered: string }>;\n call(args: { server: string; tool: string; args?: Record<string, unknown> }): Promise<unknown>;\n}\n// Loose static surface: any server/tool name compiles and argument shapes are\n// enforced at dispatch by the registry. With descriptor data available the\n// execution service replaces the declare-const-mcp line below with a\n// schema-typed rendering of the live cache (runtime/dynamic-guest-types.ts).\ntype FabricMcpApi = Record<string, FabricMcpServer> & FabricMcpManagement;\ninterface FabricCouncilRunOptions {\n task: string;\n roles: string[];\n runner?: FabricAgentRunner;\n transport?: FabricTransport;\n model?: string;\n thinking?: FabricThinking;\n tools?: string[];\n timeoutMs?: number;\n /** Filesystem execution directory; relative paths resolve from the parent agent cwd. */\n cwd?: string;\n worktree?: boolean;\n}\ninterface FabricCouncilApi {\n run(args: FabricCouncilRunOptions & { synthesize?: true }): Promise<FabricAgentResult>;\n run(args: FabricCouncilRunOptions & { synthesize: false }): Promise<FabricAgentResult[]>;\n}\ninterface FabricMeshIdentity {\n id: string;\n name: string;\n kind: \"main\" | \"actor\" | \"agent\";\n sessionId?: string;\n}\ninterface FabricMeshEvent {\n id: string;\n sequence: number;\n topic: string;\n kind: string;\n from: FabricMeshIdentity;\n to?: string;\n text?: string;\n data?: unknown;\n createdAt: number;\n}\ninterface FabricMeshStateEntry<T = unknown> {\n key: string;\n value: T;\n version: number;\n updatedAt: number;\n updatedBy: FabricMeshIdentity;\n}\ninterface FabricMeshApi {\n self(): Promise<FabricMeshIdentity>;\n publish(args: { topic: string; kind?: string; to?: string; text?: string; data?: unknown; message?: string; body?: string }): Promise<FabricMeshEvent>;\n read(args?: { after?: number; topic?: string; to?: string; limit?: number; max?: number }): Promise<FabricMeshEvent[]>;\n members(args?: { scope?: FabricParticipantScope; kinds?: FabricParticipantKind[]; includeStale?: boolean; limit?: number; max?: number; include_stale?: boolean }): Promise<FabricParticipantInfo[]>;\n get<T = unknown>(args: { key: string }): Promise<FabricMeshStateEntry<T> | null>;\n list<T = unknown>(args?: { prefix?: string; limit?: number; max?: number }): Promise<Array<FabricMeshStateEntry<T>>>;\n put<T = unknown>(args: { key: string; value: T; ifVersion?: number; if_version?: number; version?: number }): Promise<FabricMeshStateEntry<T>>;\n delete(args: { key: string; ifVersion?: number; if_version?: number; version?: number }): Promise<{ deleted: boolean; version?: number }>;\n}\n// Stable-provider argument bags declare the canonical keys plus the\n// near-miss spellings repaired during argument normalization\n// (providers/arg-normalization.ts and each provider's per-action table). The\n// registry's prepare stage repairs aliases before schema validation, so a\n// call spelled with an alias typechecks instead of tripping the\n// excess-property check; the canonical key wins on conflict, and anything\n// else fails additionalProperties:false validation with the offending\n// property path named. Keep these spillover fields in sync with the provider\n// normalization tables.\ntype FabricMemoryBranches = \"active\" | \"all\";\ntype FabricMemoryQueryMode = \"literal\" | \"phrase\" | \"regex\";\ntype FabricMemoryQueryMatch = \"all\" | \"any\";\ninterface FabricMemoryEntryRange {\n first: number;\n last: number;\n}\ninterface FabricMemoryRecallArgs {\n query?: string;\n queryMode?: FabricMemoryQueryMode;\n queryMatch?: FabricMemoryQueryMatch;\n expectedSourceHash?: string;\n expectedLineageFingerprint?: string;\n branches?: FabricMemoryBranches;\n scope?: string;\n offset?: number;\n pageSize?: number;\n snippetChars?: number;\n role?: string;\n tool?: string;\n ref?: string;\n provider?: string;\n action?: string;\n outcome?: \"succeeded\" | \"failed\" | \"aborted\" | \"timed_out\";\n since?: number;\n until?: number;\n entryRange?: FabricMemoryEntryRange;\n q?: string;\n limit?: number;\n max?: number;\n page_size?: number;\n snippet_chars?: number;\n query_mode?: FabricMemoryQueryMode;\n query_match?: FabricMemoryQueryMatch;\n entry_range?: FabricMemoryEntryRange;\n}\ninterface FabricMemoryExpandArgs {\n session: string;\n expectedSourceHash?: string;\n expectedLineageFingerprint?: string;\n branches?: FabricMemoryBranches;\n indices?: number[];\n entryIds?: string[];\n operationAddresses?: string[];\n entryRange?: FabricMemoryEntryRange;\n before?: number;\n after?: number;\n entryOffset?: number;\n textOffset?: number;\n maxChars?: number;\n maxEntries?: number;\n id?: string;\n file?: string;\n path?: string;\n session_id?: string;\n index?: number;\n entry_ids?: string[];\n operation_addresses?: string[];\n entry_range?: FabricMemoryEntryRange;\n entry_offset?: number;\n text_offset?: number;\n max_chars?: number;\n max_entries?: number;\n}\ninterface FabricMemoryCall<Ref extends string, Args> {\n ref: Ref;\n args: Args;\n}\ninterface FabricMemoryRecallEntryHit {\n kind: \"entry\";\n sessionId: string;\n tier: \"hot\" | \"cold\";\n index: number;\n entryId: string | null;\n parentId: string | null;\n operationAddress: string | null;\n type: string;\n role: string | null;\n tool: string | null;\n ref: string | null;\n provider: string | null;\n action: string | null;\n timestamp: number | null;\n isError: boolean;\n outcome?: \"succeeded\" | \"failed\" | \"aborted\" | \"timed_out\";\n score: number;\n snippet: string;\n truncated: boolean;\n follow: FabricMemoryCall<\"memory.expand\", FabricMemoryExpandArgs>;\n}\ninterface FabricMemoryRecallSessionHit {\n kind: \"session\";\n sessionId: string;\n tier: \"cold\";\n cwd: string;\n lastTimestamp: number | null;\n score: number;\n matchedTerms: number;\n matchedStructuralEntries: number;\n follow: FabricMemoryCall<\"memory.recall\", FabricMemoryRecallArgs>;\n}\ntype FabricMemoryRecallHit = FabricMemoryRecallEntryHit | FabricMemoryRecallSessionHit;\ninterface FabricMemoryError {\n code: string;\n message: string;\n [key: string]: unknown;\n}\ninterface FabricMemoryCoverage {\n complete: boolean;\n indexedSessions: number;\n eligibleSessions: number;\n staleSessions: number;\n incompleteSessions: number;\n reasons: string[];\n error?: FabricMemoryError;\n}\ninterface FabricMemoryRecallResult {\n total: number;\n hits: FabricMemoryRecallHit[];\n next: FabricMemoryCall<\"memory.recall\", FabricMemoryRecallArgs> | null;\n coverage: FabricMemoryCoverage;\n error?: FabricMemoryError;\n}\ninterface FabricMemoryExpandedEntry {\n index: number;\n entryId: string | null;\n parentId: string | null;\n type: string | null;\n role: string | null;\n timestamp: number | null;\n isError: boolean;\n anchor?: boolean;\n text: string;\n textRange: { start: number; end: number; total: number; complete: boolean };\n parentEntryId?: string | null;\n operationAddress?: string | null;\n tool?: string | null;\n ref?: string | null;\n provider?: string | null;\n action?: string | null;\n outcome?: \"succeeded\" | \"failed\" | \"aborted\" | \"timed_out\";\n filesTouched?: Array<string | null>;\n operation?: unknown;\n branchFact?: unknown;\n structuredTruncated?: boolean;\n factAddress?: string | null;\n carrierEntryId?: string | null;\n carrierParentId?: string | null;\n carrierFromId?: string | null;\n}\ninterface FabricMemoryExpandResult {\n session?: string;\n sourceHash?: string;\n branches?: FabricMemoryBranches;\n lineageFingerprint?: string;\n entryCount?: number;\n entries: FabricMemoryExpandedEntry[];\n next?: FabricMemoryCall<\"memory.expand\", FabricMemoryExpandArgs> | null;\n error?: FabricMemoryError;\n}\ninterface FabricMemoryWalkResult {\n visited: number;\n stopped: boolean;\n error?: FabricMemoryError;\n}\ninterface FabricMemorySessionInfo {\n id: string;\n file: string;\n cwd: string;\n mtime: number;\n entryCount: number;\n tier: \"hot\" | \"cold\";\n branches: FabricMemoryBranches;\n lineageFingerprint: string | null;\n}\ninterface FabricMemoryApi {\n recall(args?: FabricMemoryRecallArgs): Promise<FabricMemoryRecallResult>;\n expand(args: FabricMemoryExpandArgs): Promise<FabricMemoryExpandResult>;\n walk(\n args: FabricMemoryExpandArgs,\n visitor: (\n entry: FabricMemoryExpandedEntry,\n index: number,\n ) => boolean | void | Promise<boolean | void>,\n ): Promise<FabricMemoryWalkResult>;\n sessions(args?: {\n scope?: string;\n branches?: FabricMemoryBranches;\n limit?: number;\n max?: number;\n }): Promise<{\n scope?: string;\n branches?: FabricMemoryBranches;\n sessions?: FabricMemorySessionInfo[];\n error?: FabricMemoryError;\n }>;\n}\ninterface FabricStateTransitionArgs {\n label: string;\n from?: string;\n to: string;\n summary: string;\n evidence?: string[];\n tags?: string[];\n kind?: \"state\" | \"representation\";\n complexity?: { files: string[] };\n force?: boolean;\n name?: string;\n description?: string;\n}\ninterface FabricStateComplexityFile {\n file: string;\n supported: boolean;\n language?: string;\n current?: number;\n recorded?: number;\n delta?: number;\n recordedDelta?: number;\n}\ninterface FabricStateVerificationResult {\n certified: boolean;\n violated: boolean;\n certificationStatus: \"certified\" | \"failed\";\n results: unknown[];\n failures: unknown[];\n certificate?: unknown;\n reportingError?: string;\n evidenceDigest: string;\n resultDigest: string;\n}\ninterface FabricStateApi {\n transition(args: FabricStateTransitionArgs): Promise<{ event: FabricMeshEvent; head: unknown }>;\n get(): Promise<{\n head: unknown | null;\n goal: { check: string; description?: string } | null;\n complexity: { files: number; decisionPoints: number; lastNetDelta: number };\n certification: { current: unknown | null; recent: unknown[] };\n recentLabels: string[];\n }>;\n history(args?: { label?: string; limit?: number; includeArchived?: boolean; name?: string; max?: number }): Promise<{\n transitions: unknown[];\n labels: string[];\n certifications: unknown[];\n }>;\n complexity(args?: { files?: string[]; paths?: string[] }): Promise<{ files: FabricStateComplexityFile[]; netDelta: number }>;\n verify(args?: { labels?: string[]; includeArchived?: boolean; timeoutMs?: number; label?: string }): Promise<FabricStateVerificationResult>;\n goal(args: { check: string; description?: string; command?: string; cmd?: string; predicate?: string }): Promise<FabricMeshStateEntry<{ check: string; description?: string }>>;\n checkGoal(args?: { timeoutMs?: number }): Promise<{\n passed: boolean;\n output: string;\n exitCode: number | null;\n error?: string;\n }>;\n}\ntype FabricSchemaEvidence =\n | { kind: \"file_exists\"; path: string }\n | { kind: \"file_absent\"; path: string }\n | { kind: \"file_contains\"; path: string; literal: string }\n | { kind: \"file_sha256\"; path: string; sha256: string }\n | { kind: \"trusted_command\"; name: string };\ntype FabricSchemaFileOperation =\n | { kind: \"write\"; path: string; content: string; expected: { absent: true } | { sha256: string } }\n | { kind: \"edit\"; path: string; oldText: string; newText: string; expectedSha256: string }\n | { kind: \"delete\"; path: string; expectedSha256: string };\ninterface FabricSchemaEvidenceResult {\n evidence: FabricSchemaEvidence;\n status: \"confirmed\" | \"nonconfirmed\" | \"error\";\n detail: string;\n exitCode?: number | null;\n output?: string;\n observedSha256?: string;\n}\ninterface FabricSchemaStatus {\n mode: \"off\" | \"audit\" | \"enforce\";\n certificateTtlMs: number;\n maxFiles: number;\n maxBytes: number;\n trustedCommands: string[];\n generation: number;\n lastOutcome: \"committed\" | \"rolled_back\" | \"quarantined\" | null;\n hypotheses: Array<{\n id: string;\n label: string;\n status: string;\n generation: number;\n updatedAt: number;\n }>;\n}\ninterface FabricSchemaVerificationResult {\n verified: boolean;\n hypothesisId: string;\n certificate?: string;\n issuedAt?: number;\n expiresAt?: number;\n reason?: string;\n results: FabricSchemaEvidenceResult[];\n}\ninterface FabricSchemaCommitResult {\n outcome: \"committed\" | \"rolled_back\" | \"quarantined\";\n transactionId: string;\n generation?: number;\n paths?: string[];\n postconditions?: FabricSchemaEvidenceResult[];\n complexityReductionCertified?: boolean;\n stateTransition?: unknown;\n error?: string;\n rollbackError?: string;\n}\ninterface FabricSchemaApi {\n status(): Promise<FabricSchemaStatus>;\n hypothesize(args: {\n label: string;\n summary: string;\n evidence: FabricSchemaEvidence[];\n complexityReduction?: boolean;\n name?: string;\n description?: string;\n complexity_reduction?: boolean;\n }): Promise<{\n hypothesisId: string;\n status: string;\n state: unknown;\n fingerprint: string;\n generation: number;\n }>;\n verify(args: { hypothesisId: string; id?: string; hypothesis_id?: string }): Promise<FabricSchemaVerificationResult>;\n commit(args: {\n hypothesisId: string;\n certificate: string;\n operations: FabricSchemaFileOperation[];\n postconditions: FabricSchemaEvidence[];\n id?: string;\n hypothesis_id?: string;\n }): Promise<FabricSchemaCommitResult>;\n abort(args: { hypothesisId: string; certificate?: string; id?: string; hypothesis_id?: string }): Promise<{\n aborted: true;\n hypothesisId: string;\n }>;\n}\ninterface FabricCompactPendingIntent {\n reason?: string;\n instructions?: string;\n preserve?: string[];\n requestedBy: string;\n requestedAt: number;\n}\ninterface FabricCompactLastCommit {\n at: number;\n requestedBy: string;\n status: \"committed\" | \"skipped\" | \"cancelled\" | \"failed\";\n summary?: string;\n tokensBefore?: number;\n estimatedTokensAfter?: number;\n error?: string;\n persisted?: boolean;\n}\ninterface FabricCompactContextUsage {\n known: boolean;\n tokens: number | null;\n contextWindow: number | null;\n percent: number | null;\n remainingTokens: number | null;\n}\ninterface FabricCompactStatus {\n pending?: FabricCompactPendingIntent;\n last?: FabricCompactLastCommit;\n context?: FabricCompactContextUsage;\n engine?: string;\n targetContextRatio?: number;\n model?: string;\n sessionId?: string;\n}\ntype FabricComponentState = \"waiting\" | \"loading\" | \"active\" | \"unloading\" | \"failed\" | \"quarantined\" | \"disposed\";\ninterface FabricComponentEffectInfo {\n label: string;\n kind: \"none\" | \"scoped\" | \"transactional\" | \"emission\";\n resources: string[];\n ordering: \"commutative\" | \"ordered\" | \"unknown\";\n}\ninterface FabricComponentEffectConflict {\n withComponent: string;\n resources: string[];\n reason: \"shared_resource\" | \"unknown_resource\";\n}\ninterface FabricComponentInfo {\n id: string;\n component: string;\n parentId?: string;\n state: FabricComponentState;\n guarantee: \"managed\" | \"revertible\";\n requirements: string[];\n provisions: string[];\n missing: string[];\n optionalMissing: string[];\n effects?: FabricComponentEffectInfo[];\n effectConflicts?: FabricComponentEffectConflict[];\n targetDigest?: string;\n error?: string;\n cleanupErrors?: string[];\n revision: number;\n createdAt: number;\n updatedAt: number;\n}\ninterface FabricComponentsApi {\n list(): Promise<{\n definitions: Array<{ name: string; description?: string; revision: number; requirements: string[]; provisions: string[] }>;\n components: FabricComponentInfo[];\n }>;\n status(args: { id: string }): Promise<FabricComponentInfo>;\n graph(): Promise<{\n components: FabricComponentInfo[];\n edges: Array<{ from: string; to: string; ref: string; kind?: \"dependency\" | \"ownership\" }>;\n cycles: string[][];\n }>;\n reload(args?: { id?: string }): Promise<{ components: FabricComponentInfo[] }>;\n}\n\ninterface FabricCompactApi {\n request(args?: {\n reason?: string;\n instructions?: string;\n preserve?: string[];\n requestedBy?: string;\n instruction?: string;\n requested_by?: string;\n }): Promise<{ requested: true; intent: FabricCompactPendingIntent }>;\n status(): Promise<FabricCompactStatus>;\n cancel(): Promise<{ cancelled: true }>;\n}\n\ninterface FabricCodemapSymbolCounts {\n files: number;\n symbols: number;\n languages: Record<string, number>;\n fallbackFiles: number;\n truncated: boolean;\n elapsedMs: number;\n}\ninterface FabricCodemapCascadeEdge {\n file: string;\n score: number;\n commits: number;\n}\ninterface FabricCodemapCascade {\n seeds: string[];\n edges: FabricCodemapCascadeEdge[];\n commitsScanned: number;\n truncated: boolean;\n unavailable?: string;\n}\ninterface FabricCodemapApi {\n map(args?: {\n maxTokens?: number;\n glob?: string;\n focus?: string;\n seeds?: string[];\n refresh?: boolean;\n }): Promise<{\n text: string;\n tokensEstimated: number;\n filesShown: number;\n symbolsShown: number;\n omittedFiles: number;\n omittedSymbols: number;\n truncated: boolean;\n indexed: FabricCodemapSymbolCounts;\n cascade?: FabricCodemapCascade;\n }>;\n cascade(args: {\n seeds: string[];\n limit?: number;\n maxCommits?: number;\n }): Promise<FabricCodemapCascade>;\n}\n\ninterface FabricWorkflowAgentOptions extends Omit<FabricAgentRequest, \"task\"> {\n label?: string;\n}\ntype FabricActivityStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"blocked\" | \"stopped\";\ntype FabricActivityKind = \"agent\" | \"actor\" | \"tool\" | \"extension\" | \"mcp\" | \"mesh\" | \"task\" | \"custom\";\ninterface FabricWorkflowDisplay {\n name?: string;\n description?: string;\n}\ninterface FabricWorkflowPhaseOptions {\n id?: string;\n description?: string;\n total?: number;\n}\ninterface FabricWorkflowPhaseInput extends FabricWorkflowPhaseOptions {\n name: string;\n}\ninterface FabricWorkflowItem {\n id: string;\n label: string;\n status?: FabricActivityStatus;\n phase?: string;\n detail?: string;\n kind?: FabricActivityKind;\n current?: string;\n total?: number;\n completed?: number;\n data?: unknown;\n}\ninterface FabricWorkflowApi {\n agent<T = string>(prompt: string, options?: FabricWorkflowAgentOptions): Promise<T>;\n parallel<T, R>(items: T[], mapper: (item: T, index: number) => Promise<R> | R, concurrency?: number | { concurrency?: number }): Promise<R[]>;\n parallel<T>(thunks: Array<() => Promise<T> | T>, concurrency?: number | { concurrency?: number }): Promise<T[]>;\n pipeline<T>(items: T[], ...stages: Array<(value: unknown, original: T, index: number) => Promise<unknown> | unknown>): Promise<unknown[]>;\n configure(display: FabricWorkflowDisplay): Promise<FabricWorkflowDisplay>;\n phase(name: string, options?: FabricWorkflowPhaseOptions): Promise<{ name: string; index: number; id?: string }>;\n phase(input: FabricWorkflowPhaseInput): Promise<{ name: string; index: number; id?: string }>;\n item(item: FabricWorkflowItem): Promise<FabricWorkflowItem>;\n event(event: { message: string; level?: \"info\" | \"success\" | \"warning\" | \"error\"; data?: unknown }): Promise<void>;\n log(...values: unknown[]): void;\n budget: { total: number; spent(): number; remaining(): number };\n}\ndeclare const tools: FabricToolsApi;\ndeclare const omp: OmpToolsApi;\ndeclare const extensions: FabricExtensionsApi;\ndeclare const agents: FabricAgentsApi;\ndeclare const mesh: FabricMeshApi;\ndeclare const mcp: FabricMcpApi;\ndeclare const memory: FabricMemoryApi;\ndeclare const state: FabricStateApi;\ndeclare const schema: FabricSchemaApi;\ndeclare const components: FabricComponentsApi;\ndeclare const compact: FabricCompactApi;\ndeclare const codemap: FabricCodemapApi;\ndeclare const council: FabricCouncilApi;\ndeclare const workflow: FabricWorkflowApi;\ndeclare function agent<T = string>(prompt: string, options?: FabricWorkflowAgentOptions): Promise<T>;\ndeclare function parallel<T, R>(items: T[], mapper: (item: T, index: number) => Promise<R> | R, concurrency?: number | { concurrency?: number }): Promise<R[]>;\ndeclare function parallel<T>(thunks: Array<() => Promise<T> | T>, concurrency?: number | { concurrency?: number }): Promise<T[]>;\ndeclare function pipeline<T>(items: T[], ...stages: Array<(value: unknown, original: T, index: number) => Promise<unknown> | unknown>): Promise<unknown[]>;\ndeclare function phase(name: string, options?: FabricWorkflowPhaseOptions): Promise<{ name: string; index: number; id?: string }>;\ndeclare function phase(input: FabricWorkflowPhaseInput): Promise<{ name: string; index: number; id?: string }>;\ndeclare function log(...values: unknown[]): void;\ndeclare const budget: FabricWorkflowApi[\"budget\"];\ntype FabricRlmRequest = Omit<FabricAgentRequest, \"runner\" | \"recursive\" | \"cwd\"> & { runner?: \"omp\" };\ndeclare const rlm: { query(args: FabricRlmRequest): Promise<FabricAgentResult> };\ninterface FabricConsole {\n log(...args: unknown[]): void;\n info(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n error(...args: unknown[]): void;\n}\ndeclare const console: FabricConsole;\ndeclare const payloads: Readonly<Record<string, string>>;\ndeclare function print(...args: unknown[]): void;\ndeclare function setTimeout(handler: (...args: any[]) => void, timeout?: number): number;\ndeclare function clearTimeout(handle: number): void;\ndeclare function setInterval(handler: (...args: any[]) => void, timeout?: number): number;\ndeclare function clearInterval(handle: number): void;\n`;\n\nconst FULL_CODE_GLOBAL_DECLARATIONS = [\n \"declare const omp: OmpToolsApi;\\n\",\n \"declare const extensions: FabricExtensionsApi;\\n\",\n];\n\nconst OMP_LOOSE_DECLARATION = \"declare const omp: OmpToolsApi;\\n\";\nconst MCP_LOOSE_DECLARATION = \"declare const mcp: FabricMcpApi;\\n\";\nconst EXTENSIONS_LOOSE_DECLARATION = \"declare const extensions: FabricExtensionsApi;\\n\";\n\nexport interface FabricGuestDeclarationOptions {\n /** Global names to omit (for example providers disabled by configuration). */\n excludeGlobals?: readonly string[];\n /**\n * Pre-rendered replacement blocks from buildDynamicGuestDeclarations().\n * Applied only when the loose anchor line is still present \u2014 excluded\n * globals (or orchestration-only mode, for extensions) keep nothing to\n * replace, and missing/undefined sections keep the loose surface.\n */\n dynamic?: FabricDynamicGuestDeclarations;\n /** Add captured core overloads to the full-code OMP declaration. */\n coreOverrides?: string;\n}\n\nconst globalDeclarationLine = (name: string): RegExp =>\n new RegExp(`^declare const ${name}: [^\\\\n]*;\\\\n`, \"m\");\n\nconst terminatedDeclaration = (block: string): string =>\n block.endsWith(\"\\n\") ? block : `${block}\\n`;\n\nexport const guestTypeDeclarations = (\n fullCodeMode: boolean,\n options: FabricGuestDeclarationOptions = {},\n): string => {\n const base = fullCodeMode\n ? GUEST_TYPE_DECLARATIONS\n : FULL_CODE_GLOBAL_DECLARATIONS.reduce(\n (declarations, declaration) => declarations.replace(declaration, \"\"),\n GUEST_TYPE_DECLARATIONS,\n );\n let result = (options.excludeGlobals ?? []).reduce(\n (declarations, name) => declarations.replace(globalDeclarationLine(name), \"\"),\n base,\n );\n if (fullCodeMode && options.coreOverrides && result.includes(OMP_LOOSE_DECLARATION)) {\n result = result.replace(\n OMP_LOOSE_DECLARATION,\n terminatedDeclaration(options.coreOverrides),\n );\n }\n if (options.dynamic?.mcp && result.includes(MCP_LOOSE_DECLARATION)) {\n result = result.replace(\n MCP_LOOSE_DECLARATION,\n terminatedDeclaration(options.dynamic.mcp),\n );\n }\n if (options.dynamic?.extensions && result.includes(EXTENSIONS_LOOSE_DECLARATION)) {\n result = result.replace(\n EXTENSIONS_LOOSE_DECLARATION,\n terminatedDeclaration(options.dynamic.extensions),\n );\n }\n return result;\n};\n"],
5
- "mappings": ";AAQO,IAAM,6CAA6C;AAAA,EACxD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,IAAI;AACN;AAEO,IAAM,0BAA0B;AAAA,EACrC,MAAM,CAAC,UAAU,OAAO;AAAA,EACxB,MAAM,CAAC,SAAS;AAAA,EAChB,MAAM,CAAC;AAAA,EACP,OAAO,CAAC;AAAA,EACR,MAAM,CAAC,WAAW,MAAM;AAAA,EACxB,MAAM,CAAC,OAAO;AAAA,EACd,IAAI,CAAC,OAAO;AACd;AAEO,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAozCvC,IAAM,gCAAgC;AAAA,EACpC;AAAA,EACA;AACF;AAEA,IAAM,wBAAwB;AAC9B,IAAM,wBAAwB;AAC9B,IAAM,+BAA+B;AAgBrC,IAAM,wBAAwB,CAAC,SAC7B,IAAI,OAAO,kBAAkB,IAAI,iBAAiB,GAAG;AAEvD,IAAM,wBAAwB,CAAC,UAC7B,MAAM,SAAS,IAAI,IAAI,QAAQ,GAAG,KAAK;AAAA;AAElC,IAAM,wBAAwB,CACnC,cACA,UAAyC,CAAC,MAC/B;AACX,QAAM,OAAO,eACT,0BACA,8BAA8B;AAAA,IAC5B,CAAC,cAAc,gBAAgB,aAAa,QAAQ,aAAa,EAAE;AAAA,IACnE;AAAA,EACF;AACJ,MAAI,UAAU,QAAQ,kBAAkB,CAAC,GAAG;AAAA,IAC1C,CAAC,cAAc,SAAS,aAAa,QAAQ,sBAAsB,IAAI,GAAG,EAAE;AAAA,IAC5E;AAAA,EACF;AACA,MAAI,gBAAgB,QAAQ,iBAAiB,OAAO,SAAS,qBAAqB,GAAG;AACnF,aAAS,OAAO;AAAA,MACd;AAAA,MACA,sBAAsB,QAAQ,aAAa;AAAA,IAC7C;AAAA,EACF;AACA,MAAI,QAAQ,SAAS,OAAO,OAAO,SAAS,qBAAqB,GAAG;AAClE,aAAS,OAAO;AAAA,MACd;AAAA,MACA,sBAAsB,QAAQ,QAAQ,GAAG;AAAA,IAC3C;AAAA,EACF;AACA,MAAI,QAAQ,SAAS,cAAc,OAAO,SAAS,4BAA4B,GAAG;AAChF,aAAS,OAAO;AAAA,MACd;AAAA,MACA,sBAAsB,QAAQ,QAAQ,UAAU;AAAA,IAClD;AAAA,EACF;AACA,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/core/model-resolution.ts", "../../src/config.ts", "../../src/config-migrations.ts", "../../src/core/agent-dir.ts"],
4
- "sourcesContent": ["const PROVIDER_MODEL_RE = /^[^\\s/]+\\/[^\\s/]+$/;\n\n/** Minimal model view needed for resolution; satisfied by OMP Model entries. */\nexport interface FabricModelCandidate {\n provider: string;\n id: string;\n name?: string;\n}\n\nexport type FabricModelResolution =\n | { kind: \"resolved\"; model: FabricModelCandidate; via?: string }\n | { kind: \"already-active\"; model: FabricModelCandidate }\n | { kind: \"ambiguous\"; query: string; candidates: FabricModelCandidate[] }\n | { kind: \"not-found\"; query: string; tried?: string[] };\n\n/** Markers reported in `via` when an inexact selector is fuzzy-resolved. */\nexport const FUZZY_RESOLUTION_MARKERS = [\"closest\", \"recent\", \"latest\"] as const;\n\nconst modelKey = (model: FabricModelCandidate): string => `${model.provider}/${model.id}`;\n\nconst sameModel = (\n left: FabricModelCandidate,\n right: FabricModelCandidate | undefined,\n): boolean =>\n right !== undefined &&\n left.provider.toLowerCase() === right.provider.toLowerCase() &&\n left.id.toLowerCase() === right.id.toLowerCase();\n\n/**\n * Normalize raw `models.aliases` config into alias name \u2192 ordered targets.\n * String targets degrade to one-element fallback chains. Entries whose name,\n * target list, or any `provider/model` target string is malformed are\n * dropped entirely, matching the lenient fallback style of the other config\n * normalizers (no partial alias survives with a silently missing target).\n */\nexport const normalizeModelAliases = (input: unknown): Record<string, string[]> => {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) return {};\n const aliases: Record<string, string[]> = {};\n for (const [rawName, rawValue] of Object.entries(input as Record<string, unknown>)) {\n const name = rawName.trim();\n if (!name) continue;\n const values = typeof rawValue === \"string\" ? [rawValue] : rawValue;\n if (!Array.isArray(values) || values.length === 0) continue;\n const targets: string[] = [];\n let valid = true;\n for (const candidate of values) {\n if (typeof candidate !== \"string\") {\n valid = false;\n break;\n }\n const target = candidate.trim();\n if (!PROVIDER_MODEL_RE.test(target)) {\n valid = false;\n break;\n }\n if (!targets.includes(target)) targets.push(target);\n }\n if (valid && targets.length > 0) aliases[name] = targets;\n }\n return aliases;\n};\n\nconst FUZZY_MIN_QUERY_LENGTH = 4;\nconst FUZZY_LEVENSHTEIN_MIN_RATIO = 0.55;\n\n/**\n * Span covered when every character of `needle` appears in `haystack` in\n * order (first to last matched index), or Infinity when it does not. A tight\n * span keeps abbreviated selectors honest: \"gmni\" spans 6 chars in\n * \"gemini-2.5-pro\" but 10 in \"gpt-5-mini\", so only the former reads as the\n * same token with letters dropped.\n */\nconst subsequenceSpan = (needle: string, haystack: string): number => {\n let index = 0;\n let first = -1;\n let last = -1;\n for (let i = 0; i < haystack.length && index < needle.length; i += 1) {\n if (haystack[i] === needle[index]) {\n if (first === -1) first = i;\n last = i;\n index += 1;\n }\n }\n return index === needle.length ? last - first + 1 : Number.POSITIVE_INFINITY;\n};\n\n/** Normalized Levenshtein similarity in [0, 1]; 1 means identical. */\nconst levenshteinRatio = (left: string, right: string): number => {\n if (left === right) return 1;\n if (left.length === 0 || right.length === 0) return 0;\n let previous = Array.from({ length: right.length + 1 }, (_, column) => column);\n for (let i = 0; i < left.length; i += 1) {\n const current: number[] = [i + 1];\n for (let j = 0; j < right.length; j += 1) {\n current.push(Math.min(\n previous[j]! + 1,\n current[j]! + 1,\n previous[j]! + (left[i] === right[j] ? 0 : 1),\n ));\n }\n previous = current;\n }\n return 1 - previous[right.length]! / Math.max(left.length, right.length);\n};\n\n/**\n * Closeness score for an inexact selector against one candidate. Tiered so a\n * substring hit always outranks a subsequence hit, which always outranks a\n * typo-level Levenshtein resemblance; coverage bonuses reward selectors that\n * span most of the target id name. Zero means no resemblance at all.\n */\nconst closenessScore = (query: string, model: FabricModelCandidate): number => {\n const id = model.id.toLowerCase();\n const name = model.name?.toLowerCase();\n if (id.startsWith(query)) return 60 + (query.length / id.length) * 20;\n if (id.includes(query)) return 50 + (query.length / id.length) * 15;\n if (name?.startsWith(query) === true) return 45 + (query.length / name.length) * 15;\n if (name?.includes(query) === true) return 40 + (query.length / name.length) * 10;\n if (model.provider.toLowerCase().includes(query)) return 25;\n if (\n query.length >= 3 &&\n query[0] === id[0] &&\n subsequenceSpan(query, id) <= query.length + 2\n ) {\n return 18 + (query.length / id.length) * 6;\n }\n if (query.length >= FUZZY_MIN_QUERY_LENGTH) {\n const idRatio = levenshteinRatio(query, id);\n if (idRatio >= FUZZY_LEVENSHTEIN_MIN_RATIO) return 8 + idRatio * 10;\n if (name !== undefined) {\n const nameRatio = levenshteinRatio(query, name);\n if (nameRatio >= FUZZY_LEVENSHTEIN_MIN_RATIO) return 6 + nameRatio * 8;\n }\n }\n return 0;\n};\n\nexport type FabricModelUsage = Record<string, number>;\n\n/**\n * Pick the closest candidate for an inexact selector. Ranking is closeness\n * first; equal-closeness ties fall to the most recently used model (recency\n * timestamps such as pi-model-sort's extensions/pi-model-sort.json under the\n * agent dir, keyed by provider/id), then to the highest-sorting key, mirroring\n * OMP's convention that the newest alias/versioned id sorts last.\n */\nconst pickClosestCandidate = (\n query: string,\n pool: readonly FabricModelCandidate[],\n lastUsed: FabricModelUsage | undefined,\n): { model: FabricModelCandidate; via: \"closest\" | \"recent\" | \"latest\" } | undefined => {\n const usage: FabricModelUsage = {};\n for (const [key, value] of Object.entries(lastUsed ?? {})) {\n usage[key.toLowerCase()] = value;\n }\n const recency = (model: FabricModelCandidate): number =>\n usage[`${model.provider}/${model.id}`.toLowerCase()] ?? 0;\n let best: FabricModelCandidate | undefined;\n let bestScore = 0;\n let tied = false;\n for (const model of pool) {\n const score = closenessScore(query, model);\n if (score <= 0) continue;\n if (best === undefined || score > bestScore) {\n best = model;\n bestScore = score;\n tied = false;\n continue;\n }\n if (score === bestScore) {\n tied = true;\n const bestRecent = recency(best);\n const nextRecent = recency(model);\n if (nextRecent > bestRecent || (nextRecent === bestRecent && modelKey(model) > modelKey(best))) {\n best = model;\n }\n }\n }\n if (best === undefined) return undefined;\n const runnersUp = pool.filter(\n (model) => model !== best && closenessScore(query, model) === bestScore,\n );\n const wonOnRecency = tied\n && runnersUp.some((model) => recency(model) !== recency(best));\n return {\n model: best,\n via: !tied ? \"closest\" : wonOnRecency ? \"recent\" : \"latest\",\n };\n};\n\n/**\n * Resolve a model selector against aliases and the available (authenticated)\n * registry. Order: alias lookup first so a configured name always wins, then\n * exact provider/id, exact id, then fuzzy selection. A lone partial match is\n * returned directly; broader candidate pools are ranked by closeness, with\n * equal-closeness ties falling to the most recently used model (when usage\n * timestamps are supplied, e.g. from pi-model-sort) and then to the\n * highest-sorting key, mirroring OMP's newest-alias convention. Only a pool\n * with no resemblance at all stays not-found; `ambiguous` is retained for\n * defensive completeness but the ranker always produces a deterministic pick.\n */\nexport const resolveFabricModel = (\n query: string,\n options: {\n aliases: Record<string, string[]>;\n available: readonly FabricModelCandidate[];\n current?: FabricModelCandidate;\n provider?: string;\n lastUsed?: FabricModelUsage;\n },\n): FabricModelResolution => {\n const normalized = query.trim().toLowerCase();\n if (!normalized) return { kind: \"not-found\", query };\n const providerFilter = options.provider?.trim().toLowerCase();\n const available = providerFilter\n ? options.available.filter((model) => model.provider.toLowerCase() === providerFilter)\n : [...options.available];\n if (available.length === 0) return { kind: \"not-found\", query };\n\n const aliasKey = Object.keys(options.aliases).find(\n (key) => key.toLowerCase() === normalized,\n );\n const tried: string[] = [];\n if (aliasKey !== undefined) {\n const chain = options.aliases[aliasKey] ?? [];\n for (const target of chain) {\n tried.push(target);\n const separator = target.indexOf(\"/\");\n const provider = target.slice(0, separator);\n const id = target.slice(separator + 1);\n const match = available.find(\n (model) =>\n model.provider.toLowerCase() === provider.toLowerCase() &&\n model.id.toLowerCase() === id.toLowerCase(),\n );\n if (match) {\n return sameModel(match, options.current)\n ? { kind: \"already-active\", model: match }\n : { kind: \"resolved\", model: match, via: aliasKey };\n }\n }\n return { kind: \"not-found\", query, tried };\n }\n\n const exact = available.find((model) => modelKey(model).toLowerCase() === normalized)\n ?? available.find((model) => model.id.toLowerCase() === normalized);\n if (exact) {\n return sameModel(exact, options.current)\n ? { kind: \"already-active\", model: exact }\n : { kind: \"resolved\", model: exact };\n }\n\n const candidates = available.filter(\n (model) =>\n model.id.toLowerCase().includes(normalized) ||\n (model.name !== undefined && model.name.toLowerCase().includes(normalized)) ||\n model.provider.toLowerCase().includes(normalized),\n );\n if (candidates.length === 1) {\n const match = candidates[0];\n if (match === undefined) return { kind: \"not-found\", query };\n return sameModel(match, options.current)\n ? { kind: \"already-active\", model: match }\n : { kind: \"resolved\", model: match };\n }\n const pool = candidates.length > 1 ? candidates : available;\n const picked = pickClosestCandidate(normalized, pool, options.lastUsed);\n if (picked) {\n return sameModel(picked.model, options.current)\n ? { kind: \"already-active\", model: picked.model }\n : { kind: \"resolved\", model: picked.model, via: picked.via };\n }\n if (candidates.length > 1) return { kind: \"ambiguous\", query, candidates };\n return { kind: \"not-found\", query };\n};\n\nconst unavailableOmpModelError = (\n query: string,\n resolution?: Extract<FabricModelResolution, { kind: \"ambiguous\" | \"not-found\" }>,\n): Error => {\n const detail = resolution?.kind === \"not-found\" && resolution.tried !== undefined\n ? ` Alias targets tried: ${resolution.tried.join(\", \")}.`\n : resolution?.kind === \"ambiguous\"\n ? ` Visible matches: ${resolution.candidates.map(modelKey).join(\", \")}.`\n : \"\";\n return new Error(\n `Model ${JSON.stringify(query)} is not available to this OMP session.${detail} ` +\n 'Use agents.models({ runner: \"omp\" }) to list the models visible to this session.',\n );\n};\n\n/**\n * Resolve an OMP participant selector strictly within the execution owner's\n * visible registry. Exact provider/id keys never fall back to fuzzy matching;\n * aliases and inexact selectors retain the normal Fabric resolution policy.\n */\nexport const resolveAvailableOmpModel = (\n selector: string,\n options: {\n aliases: Record<string, string[]>;\n available: readonly FabricModelCandidate[];\n lastUsed?: FabricModelUsage;\n },\n): FabricModelCandidate => {\n const query = selector.trim();\n const alias = Object.keys(options.aliases).some(\n (name) => name.toLowerCase() === query.toLowerCase(),\n );\n if (PROVIDER_MODEL_RE.test(query) && !alias) {\n const exact = options.available.find(\n (model) => modelKey(model).toLowerCase() === query.toLowerCase(),\n );\n if (exact) return exact;\n throw unavailableOmpModelError(query);\n }\n\n const resolution = resolveFabricModel(query, options);\n if (resolution.kind === \"resolved\" || resolution.kind === \"already-active\") {\n return resolution.model;\n }\n throw unavailableOmpModelError(query, resolution);\n};\n", "import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { renameAtomic } from \"./core/atomic-write.js\";\nimport { normalizeModelAliases } from \"./core/model-resolution.js\";\nimport { OMP_CORE_TOOL_NAME_SET } from \"./core/omp-tools.js\";\nimport {\n CURRENT_FABRIC_CONFIG_VERSION,\n migrateFabricConfigDocument,\n} from \"./config-migrations.js\";\nimport type { FabricComponentEntry } from \"./components/types.js\";\nimport type { FabricRisk } from \"./protocol.js\";\nimport { DEFAULT_FABRIC_THINKING, isFabricThinking, type FabricThinking } from \"./thinking.js\";\nimport {\n defaultCodePreviewSettings,\n normalizeCodePreviewSettings,\n type CodePreviewSettings,\n} from \"./ui/code-preview.js\";\n\ntype FabricApprovalMode = \"allow\" | \"ask\" | \"auto\" | \"deny\";\nexport type FabricAgentTransport =\n | \"auto\"\n | \"process\"\n | \"tmux\"\n | \"screen\"\n | \"localterm\"\n | \"herdr\";\nexport type FabricAgentRunner = \"omp\" | \"claude\" | \"veda\";\nexport type FabricUiWidgetMode = \"auto\" | \"always\" | \"hidden\";\ntype FabricToolDisplayMode = \"full\" | \"compact\";\nexport type FabricResultFormat = \"auto\" | \"yaml\" | \"json\" | \"text\";\nexport type FabricPrewalkMode = \"in-place\" | \"trajectory\";\nexport type FabricExecutorRuntime = \"quickjs\" | \"node-process\" | \"bun-process\";\nexport type FabricConfigScope = \"global\" | \"project\";\ntype FabricCompactionEngine = \"omp\" | \"fabric\";\ntype FabricActorScope = \"project\" | \"session\";\n\ninterface FabricExecutorConfig {\n runtime: FabricExecutorRuntime;\n timeoutMs: number;\n /** Policy maximum for any executor deadline, including per-invocation\n * requests and per-ref floors. Values above this are visibly normalized. */\n maxTimeoutMs: number;\n /** Exact-ref deadline floors (ms) for known long-running host calls, e.g.\n * \"extensions.subagent\". Keys are exact refs; no wildcard matching. */\n hostCallTimeouts: Record<string, number>;\n memoryLimitBytes: number;\n maxOutputChars: number;\n maxNestedResultChars: number;\n resultFormat: FabricResultFormat;\n}\n\nexport interface FabricApprovalConfig {\n read: FabricApprovalMode;\n write: FabricApprovalMode;\n execute: FabricApprovalMode;\n network: FabricApprovalMode;\n agent: FabricApprovalMode;\n model?: string;\n}\n\n/** Session-start background revalidation scope for the MCP descriptor cache:\n * \"changed\" lists only added/reconfigured servers, \"all\" re-lists every known\n * server, \"off\" never spawns servers in the background. */\ntype FabricMcpRevalidatePolicy = \"changed\" | \"all\" | \"off\";\n\ninterface FabricMcpCacheConfig {\n /** Serve MCP tool metadata from the on-disk descriptor cache instead of\n * connecting to every configured server on first discovery each session. */\n enabled: boolean;\n revalidate: FabricMcpRevalidatePolicy;\n /** Wall-clock budget for one session-start background revalidation pass. */\n revalidateBudgetMs: number;\n}\n\nexport interface FabricMcpConfig {\n enabled: boolean;\n configPath?: string;\n disableOAuth: boolean;\n allowDynamicServers: boolean;\n callTimeoutMs: number;\n cache: FabricMcpCacheConfig;\n}\n\ninterface FabricClaudeRunnerConfig {\n binary: string;\n model?: string;\n}\n\n/** Veda CLI options for the `veda` agent runner. The Veda CLI wraps external\n * backends (agy, codex, claude-code, droid, pi, and any backend registered by\n * the installed Veda build); the backend is selected here and the persona\n * controls read-only vs write-capable behavior. */\ninterface FabricVedaRunnerConfig {\n binary: string;\n /** Veda backend to drive. Defaults to the Antigravity CLI (agy). */\n backend: string;\n /** Optional backend-specific model or Veda model alias. */\n model?: string;\n /** Veda persona: navigator-plan, navigator-chat, reviewer, or worker. */\n persona: string;\n}\n\ninterface FabricPrewalkConfig {\n // Master switch, persisted by /fabric prewalk --disable|--enable or the\n // settings UI (absent means enabled). Manual arming, session auto-arm, and\n // boundary claims all gate on it.\n enabled?: boolean;\n mode: FabricPrewalkMode;\n model?: string;\n alwaysRearm: boolean;\n // Compact with the configured engine just before restoring Main's boundary\n // model after an in-place continuation settles.\n compactOnReturn: boolean;\n // Filesystem fallback trigger: when an armed boundary ran a successful\n // omp.bash without an audited mutation, claim on stat-manifest drift so\n // shell heredocs / sed -i / formatter writes also hand off.\n detectShellWrites: boolean;\n // Reasoning effort for the trajectory executor; unset inherits agents.thinking.\n thinking?: FabricThinking;\n handoffRetirement: boolean;\n handoffRetirementKeep: number;\n}\n\nexport interface FabricCodemapConfig {\n enabled: boolean;\n maxFiles: number;\n maxSymbols: number;\n defaultMaxTokens: number;\n cascadeCommits: number;\n cascadeLimit: number;\n}\n\nexport interface FabricAgentConfig {\n enabled: boolean;\n runner: FabricAgentRunner;\n transport: FabricAgentTransport;\n model?: string;\n claude: FabricClaudeRunnerConfig;\n veda: FabricVedaRunnerConfig;\n thinking: FabricThinking;\n maxConcurrent: number;\n maxPerExecution: number;\n maxDepth: number;\n timeoutMs: number;\n extensions: boolean;\n defaultTools: string[];\n retainRuns: boolean;\n notifyOnComplete: boolean;\n budgetUsd: number;\n maxTokensPerChild: number;\n /** Write usage-only OMP-format session files per agent run for external trackers. */\n sessionExport: boolean;\n /** Export store root override; OMP_FABRIC_AGENT_DIR wins over the active agent directory's fabric store. */\n sessionExportDir: string;\n}\n\nexport interface FabricToolCaptureConfig {\n enabled: boolean;\n hideFromModel: boolean;\n keepVisible: string[];\n includeTools: string[];\n excludeTools: string[];\n defaultRisk: FabricRisk;\n risks: Record<string, FabricRisk>;\n}\n\nexport type FabricSchemaMode = \"off\" | \"audit\" | \"enforce\";\n\nexport interface FabricSchemaTrustedCommand {\n command: string;\n args: string[];\n shell: boolean;\n timeoutMs: number;\n}\n\nexport interface FabricSchemaConfig {\n mode: FabricSchemaMode;\n certificateTtlMs: number;\n maxFiles: number;\n maxBytes: number;\n trustedCommands: Record<string, FabricSchemaTrustedCommand>;\n}\n\ninterface FabricUiConfig {\n enabled: boolean;\n widget: FabricUiWidgetMode;\n maxRows: number;\n refreshMs: number;\n eventHistory: number;\n haltOnEscape: boolean;\n showAgentToolPreview: boolean;\n toolDisplay: FabricToolDisplayMode;\n updateDebounceMs: number;\n}\n\ninterface FabricCompactionConfig {\n engine: FabricCompactionEngine;\n targetContextRatio: number;\n thresholds: Record<string, number>;\n tokenThresholds: Record<string, number>;\n}\n\nexport const MIN_COMPACTION_TOKEN_THRESHOLD = 1_000;\nexport const MAX_COMPACTION_TOKEN_THRESHOLD = 100_000_000;\nexport const MIN_COMPACTION_RATIO_THRESHOLD = 0.25;\nexport const MAX_COMPACTION_RATIO_THRESHOLD = 0.95;\n\nexport const clampCompactionTokenThreshold = (value: number): number =>\n Math.min(\n MAX_COMPACTION_TOKEN_THRESHOLD,\n Math.max(MIN_COMPACTION_TOKEN_THRESHOLD, Math.round(value)),\n );\n\nexport const clampCompactionRatioThreshold = (value: number): number =>\n Math.min(\n MAX_COMPACTION_RATIO_THRESHOLD,\n Math.max(MIN_COMPACTION_RATIO_THRESHOLD, value),\n );\n\nexport interface FabricRetentionConfig {\n orphanedTempRunMs: number;\n oneShotRunMs: number;\n actorRunArchiveMs: number;\n}\n\nexport interface FabricMeshConfig {\n enabled: boolean;\n root?: string;\n actorScope: FabricActorScope;\n maxEventBytes: number;\n maxReadEvents: number;\n actorPollMs: number;\n actorQueueLimit: number;\n eventContextChars: number;\n actorContextEntries: number;\n}\n\ninterface FabricRepairsConfig {\n enabled: boolean;\n}\n\ninterface FabricEntropyConfig {\n compile: boolean;\n}\n\ninterface FabricUpdateConfig {\n check: boolean;\n}\n\nexport interface FabricMemoryConfig {\n enabled: boolean;\n indexDir?: string;\n maxSessions: number;\n maxEntryChars: number;\n indexThinking: boolean;\n indexToolOutput: boolean;\n hotSessions?: number;\n digestTerms?: number;\n maxColdVocabularyBytes?: number;\n maxColdCacheBytes?: number;\n maxSyncSessions?: number;\n maxSyncSourceBytes?: number;\n maxCacheCleanupFiles?: number;\n regexMaxPatternBytes?: number;\n regexMaxHaystackTerms?: number;\n regexMaxHaystackBytes?: number;\n regexTimeoutMs?: number;\n}\n\nexport interface FabricSpeculationConfig {\n /** Master switch for speculative programmatic tool calling during streaming. */\n enabled: boolean;\n /** Maximum simultaneously in-flight speculative calls; excess candidates are dropped. */\n maxConcurrent: number;\n /** Maximum retained unserved speculation entries per turn. */\n maxEntries: number;\n /** Per-stream cap on buffered partial tool-call arguments while extracting the `code` field. */\n maxBufferBytes: number;\n /** Unserved speculation entries older than this are aborted and discarded. */\n entryTtlMs: number;\n /**\n * Tier B: MCP tools that may be speculated despite risk \"network\". Entries\n * are `server.tool` or `server.*` and match the ref after the `mcp.` prefix.\n * Only enable for tools the operator knows are read-only; cached MCP\n * annotations with destructiveHint=true always refuse.\n */\n mcpAllowlist: string[];\n}\n\n\nexport interface FabricModelsConfig {\n /** Alias name \u2192 ordered provider/model fallback chain, first available wins. */\n aliases: Record<string, string[]>;\n}\n\nexport interface FabricConfig {\n fullCodeMode: boolean;\n executor: FabricExecutorConfig;\n approvals: FabricApprovalConfig;\n mcp: FabricMcpConfig;\n prewalk: FabricPrewalkConfig;\n codemap: FabricCodemapConfig;\n agents: FabricAgentConfig;\n models: FabricModelsConfig;\n components: FabricComponentEntry[];\n capture: FabricToolCaptureConfig;\n ui: FabricUiConfig;\n compaction: FabricCompactionConfig;\n retention: FabricRetentionConfig;\n mesh: FabricMeshConfig;\n memory: FabricMemoryConfig;\n entropy: FabricEntropyConfig;\n repairs: FabricRepairsConfig;\n update: FabricUpdateConfig;\n schema: FabricSchemaConfig;\n speculation: FabricSpeculationConfig;\n codePreview: CodePreviewSettings;\n}\n\n/** Hard implementation maximum for any executor deadline. Policy ceilings\n * (executor.maxTimeoutMs) may be raised up to this value by administrators. */\nexport const MAX_EXECUTOR_TIMEOUT_MS = 24 * 3_600_000;\n\nexport const MIN_AGENT_TIMEOUT_MS = 1_000;\nconst DEFAULT_AGENT_TIMEOUT_MS = 3_600_000;\nexport const MAX_AGENT_TIMEOUT_MS = 24 * 3_600_000;\nexport const QUICKJS_MAX_MEMORY_LIMIT_BYTES = 0xffff_ffff;\nexport const MAX_EXECUTOR_MEMORY_LIMIT_BYTES = Math.max(\n 8 * 1024 * 1024,\n Math.min(Number.MAX_SAFE_INTEGER, Math.floor(os.totalmem())),\n);\n\nexport const maxExecutorMemoryLimitBytes = (runtime: FabricExecutorRuntime): number =>\n runtime === \"quickjs\"\n ? Math.min(QUICKJS_MAX_MEMORY_LIMIT_BYTES, MAX_EXECUTOR_MEMORY_LIMIT_BYTES)\n : MAX_EXECUTOR_MEMORY_LIMIT_BYTES;\n\nexport const DEFAULT_FABRIC_CONFIG: FabricConfig = {\n fullCodeMode: true,\n executor: {\n runtime: \"quickjs\",\n timeoutMs: 120_000,\n maxTimeoutMs: 900_000,\n hostCallTimeouts: {},\n memoryLimitBytes: 256 * 1024 * 1024,\n maxOutputChars: 50_000,\n maxNestedResultChars: 2_000_000,\n resultFormat: \"auto\",\n },\n approvals: {\n read: \"allow\",\n write: \"allow\",\n execute: \"allow\",\n network: \"allow\",\n agent: \"allow\",\n },\n mcp: {\n enabled: true,\n disableOAuth: true,\n allowDynamicServers: true,\n callTimeoutMs: 90_000,\n cache: {\n enabled: true,\n revalidate: \"changed\",\n revalidateBudgetMs: 60_000,\n },\n },\n prewalk: {\n mode: \"in-place\",\n alwaysRearm: false,\n compactOnReturn: true,\n detectShellWrites: true,\n handoffRetirement: true,\n handoffRetirementKeep: 3,\n },\n codemap: {\n enabled: true,\n maxFiles: 4_000,\n maxSymbols: 40_000,\n defaultMaxTokens: 8_000,\n cascadeCommits: 600,\n cascadeLimit: 24,\n },\n agents: {\n enabled: true,\n runner: \"omp\",\n transport: \"process\",\n claude: { binary: \"claude\" },\n veda: { binary: \"veda\", backend: \"agy\", persona: \"navigator-chat\" },\n thinking: DEFAULT_FABRIC_THINKING,\n maxConcurrent: 8,\n maxPerExecution: 100,\n maxDepth: 3,\n timeoutMs: DEFAULT_AGENT_TIMEOUT_MS,\n extensions: true,\n defaultTools: [\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\"],\n retainRuns: false,\n notifyOnComplete: true,\n budgetUsd: 0,\n maxTokensPerChild: 0,\n sessionExport: true,\n sessionExportDir: \"\",\n },\n components: [],\n capture: {\n enabled: true,\n hideFromModel: true,\n keepVisible: [\"fabric_exec\"],\n includeTools: [],\n excludeTools: [],\n defaultRisk: \"execute\",\n risks: {\n read: \"read\",\n grep: \"read\",\n find: \"read\",\n ls: \"read\",\n edit: \"write\",\n write: \"write\",\n bash: \"execute\",\n fovea_sketch: \"read\",\n fovea_focus: \"read\",\n fovea_dwell: \"read\",\n fovea_impact: \"read\",\n },\n },\n ui: {\n enabled: true,\n widget: \"auto\",\n maxRows: 10,\n refreshMs: 500,\n eventHistory: 80,\n haltOnEscape: true,\n showAgentToolPreview: true,\n toolDisplay: \"compact\",\n updateDebounceMs: 100,\n },\n compaction: {\n engine: \"fabric\",\n targetContextRatio: 0.75,\n thresholds: {},\n tokenThresholds: {},\n },\n retention: {\n orphanedTempRunMs: 6 * 60 * 60 * 1_000,\n oneShotRunMs: 24 * 60 * 60 * 1_000,\n actorRunArchiveMs: 7 * 24 * 60 * 60 * 1_000,\n },\n mesh: {\n enabled: true,\n actorScope: \"project\",\n maxEventBytes: 256 * 1024,\n maxReadEvents: 500,\n actorPollMs: 250,\n actorQueueLimit: 32,\n eventContextChars: 40_000,\n actorContextEntries: 14,\n },\n models: {\n aliases: {},\n },\n memory: {\n enabled: true,\n maxSessions: 500,\n maxEntryChars: 2_000,\n indexThinking: true,\n indexToolOutput: true,\n hotSessions: 100,\n digestTerms: 200,\n maxColdVocabularyBytes: 512 * 1024,\n maxColdCacheBytes: 1024 * 1024,\n maxSyncSessions: 10_000,\n maxSyncSourceBytes: 512 * 1024 * 1024,\n maxCacheCleanupFiles: 100_000,\n regexMaxPatternBytes: 1_024,\n regexMaxHaystackTerms: 20_000,\n regexMaxHaystackBytes: 2 * 1024 * 1024,\n regexTimeoutMs: 250,\n },\n entropy: {\n compile: true,\n },\n repairs: {\n enabled: true,\n },\n update: {\n check: true,\n },\n schema: {\n mode: \"off\",\n certificateTtlMs: 30_000,\n maxFiles: 100,\n maxBytes: 10 * 1024 * 1024,\n trustedCommands: {},\n },\n speculation: {\n enabled: true,\n maxConcurrent: 10,\n maxEntries: 64,\n maxBufferBytes: 2 * 1024 * 1024,\n entryTtlMs: 180_000,\n mcpAllowlist: [],\n },\n codePreview: defaultCodePreviewSettings(),\n};\n\ninterface JsonObjectFile {\n document: Record<string, unknown>;\n source: string;\n}\n\nconst readJsonObjectFile = (filePath: string): JsonObjectFile | undefined => {\n try {\n const source = fs.readFileSync(filePath, \"utf8\");\n const parsed: unknown = JSON.parse(source);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"configuration root must be an object\");\n }\n return { document: parsed as Record<string, unknown>, source };\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") return undefined;\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to read ${filePath}: ${message}`);\n }\n};\n\nconst readJsonObject = (filePath: string): Record<string, unknown> | undefined =>\n readJsonObjectFile(filePath)?.document;\n\nconst mergeObjects = (\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> => {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const baseValue = merged[key];\n if (\n typeof baseValue === \"object\" &&\n baseValue !== null &&\n !Array.isArray(baseValue) &&\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n ) {\n merged[key] = mergeObjects(\n baseValue as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n merged[key] = value;\n }\n }\n return merged;\n};\n\nconst approvalMode = (value: unknown, fallback: FabricApprovalMode): FabricApprovalMode =>\n value === \"allow\" || value === \"ask\" || value === \"auto\" || value === \"deny\"\n ? value\n : fallback;\n\nconst booleanValue = (value: unknown, fallback: boolean): boolean =>\n typeof value === \"boolean\" ? value : fallback;\n\nconst boundedInteger = (value: unknown, fallback: number, min: number, max: number): number =>\n typeof value === \"number\" && Number.isInteger(value)\n ? Math.max(min, Math.min(max, value))\n : fallback;\n\nconst boundedFloat = (value: unknown, fallback: number, min: number, max: number): number =>\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.max(min, Math.min(max, value))\n : fallback;\n\nconst stringValue = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim() ? value : undefined;\n\nconst runnerValue = (value: unknown, fallback: FabricAgentRunner): FabricAgentRunner =>\n value === \"omp\" || value === \"claude\" || value === \"veda\" ? value : fallback;\n\nconst prewalkModeValue = (\n value: unknown,\n fallback: FabricPrewalkMode,\n): FabricPrewalkMode =>\n value === \"in-place\" || value === \"trajectory\" ? value : fallback;\n\nconst transportValue = (\n value: unknown,\n fallback: FabricAgentTransport,\n): FabricAgentTransport =>\n value === \"auto\" ||\n value === \"process\" ||\n value === \"tmux\" ||\n value === \"screen\" ||\n value === \"localterm\" ||\n value === \"herdr\"\n ? value\n : fallback;\n\nconst thinkingValue = (value: unknown, fallback: FabricThinking): FabricThinking =>\n isFabricThinking(value) ? value : fallback;\n\nconst objectValue = (value: unknown): Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst widgetModeValue = (value: unknown, fallback: FabricUiWidgetMode): FabricUiWidgetMode =>\n value === \"auto\" || value === \"always\" || value === \"hidden\" ? value : fallback;\n\nconst toolDisplayModeValue = (\n value: unknown,\n fallback: FabricToolDisplayMode,\n): FabricToolDisplayMode => value === \"full\" || value === \"compact\" ? value : fallback;\n\nconst executorRuntimeValue = (\n value: unknown,\n fallback: FabricExecutorRuntime,\n): FabricExecutorRuntime =>\n value === \"quickjs\" || value === \"node-process\" || value === \"bun-process\" ? value : fallback;\n\nconst resultFormatValue = (\n value: unknown,\n fallback: FabricResultFormat,\n): FabricResultFormat =>\n value === \"auto\" || value === \"yaml\" || value === \"json\" || value === \"text\"\n ? value\n : fallback;\n\nconst compactionEngineValue = (\n value: unknown,\n fallback: FabricCompactionEngine,\n): FabricCompactionEngine =>\n value === \"omp\" || value === \"fabric\" ? value : fallback;\n\nconst actorScopeValue = (value: unknown, fallback: FabricActorScope): FabricActorScope =>\n value === \"project\" || value === \"session\" ? value : fallback;\n\nconst schemaModeValue = (value: unknown, fallback: FabricSchemaMode): FabricSchemaMode =>\n value === \"off\" || value === \"audit\" || value === \"enforce\" ? value : fallback;\n\nconst mcpRevalidatePolicyValue = (\n value: unknown,\n fallback: FabricMcpRevalidatePolicy,\n): FabricMcpRevalidatePolicy =>\n value === \"changed\" || value === \"all\" || value === \"off\" ? value : fallback;\n\nconst riskValue = (value: unknown, fallback: FabricRisk): FabricRisk =>\n value === \"read\" ||\n value === \"write\" ||\n value === \"execute\" ||\n value === \"network\" ||\n value === \"agent\"\n ? value\n : fallback;\n\nexport const normalizeFabricConfig = (input: Record<string, unknown>): FabricConfig => {\n const executor = objectValue(input.executor);\n const executorMaxTimeoutMs = boundedInteger(\n executor.maxTimeoutMs,\n DEFAULT_FABRIC_CONFIG.executor.maxTimeoutMs,\n 1_000,\n MAX_EXECUTOR_TIMEOUT_MS,\n );\n const approvals = objectValue(input.approvals);\n const mcp = objectValue(input.mcp);\n const mcpCache = objectValue(mcp.cache);\n const prewalk = objectValue(input.prewalk);\n const codemap = objectValue(input.codemap);\n const agents = objectValue(input.agents);\n const claude = objectValue(agents.claude);\n const veda = objectValue(agents.veda);\n const capture = objectValue(input.capture);\n const toolPolicy = objectValue(input.toolPolicy);\n const ui = objectValue(input.ui);\n const compaction = objectValue(input.compaction);\n const retention = objectValue(input.retention);\n const mesh = objectValue(input.mesh);\n const memory = objectValue(input.memory);\n const entropy = objectValue(input.entropy);\n const repairs = objectValue(input.repairs);\n const update = objectValue(input.update);\n const modelsSection = objectValue(input.models);\n const schema = objectValue(input.schema);\n const schemaMode = schemaModeValue(schema.mode, DEFAULT_FABRIC_CONFIG.schema.mode);\n const speculation = objectValue(input.speculation);\n const configuredExecutorRuntime = executorRuntimeValue(\n executor.runtime,\n DEFAULT_FABRIC_CONFIG.executor.runtime,\n );\n const executorRuntime = schemaMode === \"enforce\" ? \"quickjs\" : configuredExecutorRuntime;\n const configuredTools = Array.isArray(agents.defaultTools)\n ? agents.defaultTools.filter(\n (tool): tool is string => typeof tool === \"string\" && Boolean(tool),\n )\n : DEFAULT_FABRIC_CONFIG.agents.defaultTools;\n const approvalModel = stringValue(approvals.model);\n const configPath = stringValue(mcp.configPath);\n const meshRoot = stringValue(mesh.root);\n const memoryIndexDir = stringValue(memory.indexDir);\n const compactionThresholds = Object.fromEntries(\n Object.entries(objectValue(compaction.thresholds))\n .filter(([model, threshold]) =>\n model.includes(\"/\")\n && typeof threshold === \"number\"\n && Number.isFinite(threshold),\n )\n .map(([model, threshold]) => [\n model,\n clampCompactionRatioThreshold(threshold as number),\n ]),\n );\n const compactionTokenThresholds = Object.fromEntries(\n Object.entries(objectValue(compaction.tokenThresholds))\n .filter(([model, tokens]) =>\n model.includes(\"/\")\n && typeof tokens === \"number\"\n && Number.isFinite(tokens),\n )\n .map(([model, tokens]) => [\n model,\n clampCompactionTokenThreshold(tokens as number),\n ]),\n );\n const prewalkModel = stringValue(prewalk.model);\n const prewalkThinking = isFabricThinking(prewalk.thinking) ? prewalk.thinking : undefined;\n const agentModel = stringValue(agents.model);\n const claudeBinary = stringValue(claude.binary);\n const claudeModel = stringValue(claude.model);\n const vedaBinary = stringValue(veda.binary);\n const vedaBackend = stringValue(veda.backend);\n const vedaModel = stringValue(veda.model);\n const vedaPersona = stringValue(veda.persona);\n const agentThinking = thinkingValue(agents.thinking, DEFAULT_FABRIC_CONFIG.agents.thinking);\n const configuredComponents: FabricComponentEntry[] = Array.isArray(input.components)\n ? input.components.flatMap((raw) => {\n const componentEntry = objectValue(raw);\n const id = stringValue(componentEntry.id);\n const component = stringValue(componentEntry.component);\n if (!id || !component) return [];\n return [{\n id,\n component,\n ...(Object.prototype.hasOwnProperty.call(componentEntry, \"config\")\n ? { config: componentEntry.config }\n : {}),\n ...(typeof componentEntry.disabled === \"boolean\"\n ? { disabled: componentEntry.disabled }\n : {}),\n }];\n }).slice(0, 256)\n : DEFAULT_FABRIC_CONFIG.components;\n const configuredVisible = Array.isArray(capture.keepVisible)\n ? capture.keepVisible.filter(\n (name): name is string => typeof name === \"string\" && Boolean(name.trim()),\n )\n : DEFAULT_FABRIC_CONFIG.capture.keepVisible;\n const configuredIncluded = Array.isArray(capture.includeTools)\n ? capture.includeTools.filter(\n (name): name is string => typeof name === \"string\" && Boolean(name.trim()),\n )\n : DEFAULT_FABRIC_CONFIG.capture.includeTools;\n const configuredExcluded = Array.isArray(capture.excludeTools)\n ? capture.excludeTools.filter(\n (name): name is string => typeof name === \"string\" && Boolean(name.trim()),\n )\n : DEFAULT_FABRIC_CONFIG.capture.excludeTools;\n const configuredRisks = {\n ...DEFAULT_FABRIC_CONFIG.capture.risks,\n ...objectValue(capture.risks),\n };\n const trustedCommands = Object.fromEntries(\n Object.entries(objectValue(schema.trustedCommands)).flatMap(([name, raw]) => {\n if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(name)) return [];\n const command = objectValue(raw);\n const executable = stringValue(command.command);\n if (!executable) return [];\n const shell = booleanValue(command.shell, false);\n const args = !shell && Array.isArray(command.args)\n ? command.args.filter((arg): arg is string => typeof arg === \"string\").slice(0, 64)\n : [];\n return [[name, {\n command: executable,\n args,\n shell,\n timeoutMs: boundedInteger(command.timeoutMs, 30_000, 1, 300_000),\n } satisfies FabricSchemaTrustedCommand]];\n }),\n );\n const risks = Object.fromEntries(\n Object.entries(configuredRisks)\n .filter(([name]) => Boolean(name.trim()))\n .map(([name, risk]) => [name, riskValue(risk, DEFAULT_FABRIC_CONFIG.capture.defaultRisk)]),\n );\n\n return {\n fullCodeMode: booleanValue(input.fullCodeMode, DEFAULT_FABRIC_CONFIG.fullCodeMode),\n executor: {\n runtime: executorRuntime,\n maxTimeoutMs: boundedInteger(\n executor.maxTimeoutMs,\n DEFAULT_FABRIC_CONFIG.executor.maxTimeoutMs,\n 1_000,\n MAX_EXECUTOR_TIMEOUT_MS,\n ),\n hostCallTimeouts: Object.fromEntries(\n Object.entries(objectValue(executor.hostCallTimeouts))\n .filter(([ref, value]) =>\n typeof ref === \"string\" &&\n Boolean(ref.trim()) &&\n typeof value === \"number\" &&\n Number.isFinite(value) &&\n value >= 1,\n )\n .map(([ref, value]) => [ref, boundedInteger(value, 1_000, 1_000, executorMaxTimeoutMs)]),\n ),\n timeoutMs: boundedInteger(\n executor.timeoutMs,\n DEFAULT_FABRIC_CONFIG.executor.timeoutMs,\n 1_000,\n executorMaxTimeoutMs,\n ),\n memoryLimitBytes: boundedInteger(\n executor.memoryLimitBytes,\n DEFAULT_FABRIC_CONFIG.executor.memoryLimitBytes,\n 8 * 1024 * 1024,\n maxExecutorMemoryLimitBytes(executorRuntime),\n ),\n maxOutputChars: boundedInteger(\n executor.maxOutputChars,\n DEFAULT_FABRIC_CONFIG.executor.maxOutputChars,\n 1_000,\n 1_000_000,\n ),\n maxNestedResultChars: boundedInteger(\n executor.maxNestedResultChars,\n DEFAULT_FABRIC_CONFIG.executor.maxNestedResultChars,\n 10_000,\n 20_000_000,\n ),\n resultFormat: resultFormatValue(\n executor.resultFormat,\n DEFAULT_FABRIC_CONFIG.executor.resultFormat,\n ),\n },\n approvals: {\n read: approvalMode(approvals.read, DEFAULT_FABRIC_CONFIG.approvals.read),\n write: approvalMode(approvals.write, DEFAULT_FABRIC_CONFIG.approvals.write),\n execute: approvalMode(approvals.execute, DEFAULT_FABRIC_CONFIG.approvals.execute),\n network: approvalMode(approvals.network, DEFAULT_FABRIC_CONFIG.approvals.network),\n agent: approvalMode(approvals.agent, DEFAULT_FABRIC_CONFIG.approvals.agent),\n ...(approvalModel ? { model: approvalModel } : {}),\n },\n mcp: {\n enabled: booleanValue(mcp.enabled, DEFAULT_FABRIC_CONFIG.mcp.enabled),\n ...(configPath ? { configPath } : {}),\n disableOAuth: booleanValue(mcp.disableOAuth, DEFAULT_FABRIC_CONFIG.mcp.disableOAuth),\n allowDynamicServers: booleanValue(\n mcp.allowDynamicServers,\n DEFAULT_FABRIC_CONFIG.mcp.allowDynamicServers,\n ),\n callTimeoutMs: boundedInteger(\n mcp.callTimeoutMs,\n DEFAULT_FABRIC_CONFIG.mcp.callTimeoutMs,\n 1_000,\n 900_000,\n ),\n cache: {\n enabled: booleanValue(mcpCache.enabled, DEFAULT_FABRIC_CONFIG.mcp.cache.enabled),\n revalidate: mcpRevalidatePolicyValue(\n mcpCache.revalidate,\n DEFAULT_FABRIC_CONFIG.mcp.cache.revalidate,\n ),\n revalidateBudgetMs: boundedInteger(\n mcpCache.revalidateBudgetMs,\n DEFAULT_FABRIC_CONFIG.mcp.cache.revalidateBudgetMs,\n 1_000,\n 600_000,\n ),\n },\n },\n prewalk: {\n ...(prewalk.enabled === false ? { enabled: false } : {}),\n mode: prewalkModeValue(prewalk.mode, DEFAULT_FABRIC_CONFIG.prewalk.mode),\n ...(prewalkModel ? { model: prewalkModel } : {}),\n ...(prewalkThinking ? { thinking: prewalkThinking } : {}),\n alwaysRearm: booleanValue(\n prewalk.alwaysRearm,\n DEFAULT_FABRIC_CONFIG.prewalk.alwaysRearm,\n ),\n compactOnReturn: booleanValue(\n prewalk.compactOnReturn,\n DEFAULT_FABRIC_CONFIG.prewalk.compactOnReturn,\n ),\n handoffRetirement: booleanValue(\n prewalk.handoffRetirement,\n DEFAULT_FABRIC_CONFIG.prewalk.handoffRetirement,\n ),\n handoffRetirementKeep: boundedInteger(\n prewalk.handoffRetirementKeep,\n DEFAULT_FABRIC_CONFIG.prewalk.handoffRetirementKeep,\n 0,\n 64,\n ),\n detectShellWrites: booleanValue(\n prewalk.detectShellWrites,\n DEFAULT_FABRIC_CONFIG.prewalk.detectShellWrites,\n ),\n },\n codemap: {\n enabled: booleanValue(codemap.enabled, DEFAULT_FABRIC_CONFIG.codemap.enabled),\n maxFiles: boundedInteger(\n codemap.maxFiles,\n DEFAULT_FABRIC_CONFIG.codemap.maxFiles,\n 1,\n 1_000_000,\n ),\n maxSymbols: boundedInteger(\n codemap.maxSymbols,\n DEFAULT_FABRIC_CONFIG.codemap.maxSymbols,\n 1,\n 5_000_000,\n ),\n defaultMaxTokens: boundedInteger(\n codemap.defaultMaxTokens,\n DEFAULT_FABRIC_CONFIG.codemap.defaultMaxTokens,\n 200,\n 200_000,\n ),\n cascadeCommits: boundedInteger(\n codemap.cascadeCommits,\n DEFAULT_FABRIC_CONFIG.codemap.cascadeCommits,\n 10,\n 20_000,\n ),\n cascadeLimit: boundedInteger(\n codemap.cascadeLimit,\n DEFAULT_FABRIC_CONFIG.codemap.cascadeLimit,\n 1,\n 200,\n ),\n },\n agents: {\n enabled: booleanValue(agents.enabled, DEFAULT_FABRIC_CONFIG.agents.enabled),\n runner: runnerValue(agents.runner, DEFAULT_FABRIC_CONFIG.agents.runner),\n transport: transportValue(agents.transport, DEFAULT_FABRIC_CONFIG.agents.transport),\n ...(agentModel ? { model: agentModel } : {}),\n claude: {\n binary: claudeBinary ?? DEFAULT_FABRIC_CONFIG.agents.claude.binary,\n ...(claudeModel ? { model: claudeModel } : {}),\n },\n veda: {\n binary: vedaBinary ?? DEFAULT_FABRIC_CONFIG.agents.veda.binary,\n backend: vedaBackend ?? DEFAULT_FABRIC_CONFIG.agents.veda.backend,\n ...(vedaModel ? { model: vedaModel } : {}),\n persona: vedaPersona ?? DEFAULT_FABRIC_CONFIG.agents.veda.persona,\n },\n thinking: agentThinking,\n maxConcurrent: boundedInteger(\n agents.maxConcurrent,\n DEFAULT_FABRIC_CONFIG.agents.maxConcurrent,\n 1,\n 32,\n ),\n maxPerExecution: boundedInteger(\n agents.maxPerExecution,\n DEFAULT_FABRIC_CONFIG.agents.maxPerExecution,\n 1,\n 1_000,\n ),\n maxDepth: boundedInteger(\n agents.maxDepth,\n DEFAULT_FABRIC_CONFIG.agents.maxDepth,\n 0,\n Number.MAX_SAFE_INTEGER,\n ),\n timeoutMs: boundedInteger(\n agents.timeoutMs,\n DEFAULT_FABRIC_CONFIG.agents.timeoutMs,\n MIN_AGENT_TIMEOUT_MS,\n MAX_AGENT_TIMEOUT_MS,\n ),\n extensions: booleanValue(agents.extensions, DEFAULT_FABRIC_CONFIG.agents.extensions),\n defaultTools: configuredTools,\n retainRuns: booleanValue(agents.retainRuns, DEFAULT_FABRIC_CONFIG.agents.retainRuns),\n notifyOnComplete: booleanValue(\n agents.notifyOnComplete,\n DEFAULT_FABRIC_CONFIG.agents.notifyOnComplete,\n ),\n budgetUsd: boundedFloat(\n agents.budgetUsd,\n DEFAULT_FABRIC_CONFIG.agents.budgetUsd,\n 0,\n 1_000_000,\n ),\n maxTokensPerChild: boundedInteger(\n agents.maxTokensPerChild,\n DEFAULT_FABRIC_CONFIG.agents.maxTokensPerChild,\n 0,\n 100_000_000,\n ),\n sessionExport: booleanValue(\n agents.sessionExport,\n DEFAULT_FABRIC_CONFIG.agents.sessionExport,\n ),\n sessionExportDir:\n typeof agents.sessionExportDir === \"string\"\n ? agents.sessionExportDir\n : DEFAULT_FABRIC_CONFIG.agents.sessionExportDir,\n },\n components: configuredComponents.map((entry) => structuredClone(entry)),\n capture: {\n enabled: booleanValue(capture.enabled, DEFAULT_FABRIC_CONFIG.capture.enabled),\n hideFromModel: booleanValue(\n capture.hideFromModel,\n DEFAULT_FABRIC_CONFIG.capture.hideFromModel,\n ),\n keepVisible: [...new Set(configuredVisible)],\n includeTools: [...new Set(configuredIncluded)],\n excludeTools: [...new Set(configuredExcluded)],\n defaultRisk: riskValue(capture.defaultRisk, DEFAULT_FABRIC_CONFIG.capture.defaultRisk),\n risks,\n },\n ui: {\n enabled: booleanValue(ui.enabled, DEFAULT_FABRIC_CONFIG.ui.enabled),\n widget: widgetModeValue(ui.widget, DEFAULT_FABRIC_CONFIG.ui.widget),\n maxRows: boundedInteger(ui.maxRows, DEFAULT_FABRIC_CONFIG.ui.maxRows, 1, 20),\n refreshMs: boundedInteger(ui.refreshMs, DEFAULT_FABRIC_CONFIG.ui.refreshMs, 100, 10_000),\n eventHistory: boundedInteger(\n ui.eventHistory,\n DEFAULT_FABRIC_CONFIG.ui.eventHistory,\n 1,\n 500,\n ),\n haltOnEscape: booleanValue(ui.haltOnEscape, DEFAULT_FABRIC_CONFIG.ui.haltOnEscape),\n // Renamed from ui.showNestedToolCalls; the v2 migration rewrites persisted\n // files, and this fallback covers configs normalized without migration.\n showAgentToolPreview: booleanValue(\n ui.showAgentToolPreview ?? ui.showNestedToolCalls,\n DEFAULT_FABRIC_CONFIG.ui.showAgentToolPreview,\n ),\n toolDisplay: toolDisplayModeValue(\n ui.toolDisplay,\n DEFAULT_FABRIC_CONFIG.ui.toolDisplay,\n ),\n // Renamed from ui.nestedToolDebounceMs (v3): the window coalesces every\n // live fabric_exec card update \u2014 nested calls, progress, agent previews.\n updateDebounceMs: boundedInteger(\n ui.updateDebounceMs ?? ui.nestedToolDebounceMs,\n DEFAULT_FABRIC_CONFIG.ui.updateDebounceMs,\n 0,\n 2_000,\n ),\n },\n compaction: {\n engine: compactionEngineValue(compaction.engine, DEFAULT_FABRIC_CONFIG.compaction.engine),\n targetContextRatio: boundedFloat(\n compaction.targetContextRatio,\n DEFAULT_FABRIC_CONFIG.compaction.targetContextRatio,\n 0.25,\n 0.85,\n ),\n thresholds: compactionThresholds,\n tokenThresholds: compactionTokenThresholds,\n },\n retention: {\n orphanedTempRunMs: boundedInteger(\n retention.orphanedTempRunMs,\n DEFAULT_FABRIC_CONFIG.retention.orphanedTempRunMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n oneShotRunMs: boundedInteger(\n retention.oneShotRunMs,\n DEFAULT_FABRIC_CONFIG.retention.oneShotRunMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n actorRunArchiveMs: boundedInteger(\n retention.actorRunArchiveMs,\n DEFAULT_FABRIC_CONFIG.retention.actorRunArchiveMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n },\n mesh: {\n enabled: booleanValue(mesh.enabled, DEFAULT_FABRIC_CONFIG.mesh.enabled),\n ...(meshRoot ? { root: meshRoot } : {}),\n actorScope: actorScopeValue(mesh.actorScope, DEFAULT_FABRIC_CONFIG.mesh.actorScope),\n maxEventBytes: boundedInteger(\n mesh.maxEventBytes,\n DEFAULT_FABRIC_CONFIG.mesh.maxEventBytes,\n 1_024,\n 4 * 1024 * 1024,\n ),\n maxReadEvents: boundedInteger(\n mesh.maxReadEvents,\n DEFAULT_FABRIC_CONFIG.mesh.maxReadEvents,\n 1,\n 10_000,\n ),\n actorPollMs: boundedInteger(\n mesh.actorPollMs,\n DEFAULT_FABRIC_CONFIG.mesh.actorPollMs,\n 50,\n 10_000,\n ),\n actorQueueLimit: boundedInteger(\n mesh.actorQueueLimit,\n DEFAULT_FABRIC_CONFIG.mesh.actorQueueLimit,\n 1,\n 1_000,\n ),\n eventContextChars: boundedInteger(\n mesh.eventContextChars,\n DEFAULT_FABRIC_CONFIG.mesh.eventContextChars,\n 1_000,\n 1_000_000,\n ),\n actorContextEntries: boundedInteger(\n mesh.actorContextEntries,\n DEFAULT_FABRIC_CONFIG.mesh.actorContextEntries,\n 1,\n 100,\n ),\n },\n models: {\n aliases: normalizeModelAliases(modelsSection.aliases),\n },\n memory: {\n enabled: booleanValue(memory.enabled, DEFAULT_FABRIC_CONFIG.memory.enabled),\n ...(memoryIndexDir ? { indexDir: memoryIndexDir } : {}),\n maxSessions: boundedInteger(\n memory.maxSessions,\n DEFAULT_FABRIC_CONFIG.memory.maxSessions,\n 1,\n 100_000,\n ),\n maxEntryChars: boundedInteger(\n memory.maxEntryChars,\n DEFAULT_FABRIC_CONFIG.memory.maxEntryChars,\n 100,\n 1_000_000,\n ),\n indexThinking: booleanValue(\n memory.indexThinking,\n DEFAULT_FABRIC_CONFIG.memory.indexThinking ?? false,\n ),\n indexToolOutput: booleanValue(\n memory.indexToolOutput,\n DEFAULT_FABRIC_CONFIG.memory.indexToolOutput ?? true,\n ),\n hotSessions: boundedInteger(\n memory.hotSessions,\n DEFAULT_FABRIC_CONFIG.memory.hotSessions ?? 50,\n 0,\n 100_000,\n ),\n digestTerms: boundedInteger(\n memory.digestTerms,\n DEFAULT_FABRIC_CONFIG.memory.digestTerms ?? 200,\n 1,\n 10_000,\n ),\n maxColdVocabularyBytes: boundedInteger(\n memory.maxColdVocabularyBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxColdVocabularyBytes ?? 512 * 1024,\n 2,\n 64 * 1024 * 1024,\n ),\n maxColdCacheBytes: boundedInteger(\n memory.maxColdCacheBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxColdCacheBytes ?? 1024 * 1024,\n 512,\n 128 * 1024 * 1024,\n ),\n maxSyncSessions: boundedInteger(\n memory.maxSyncSessions,\n DEFAULT_FABRIC_CONFIG.memory.maxSyncSessions ?? 10_000,\n 1,\n 1_000_000,\n ),\n maxSyncSourceBytes: boundedInteger(\n memory.maxSyncSourceBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxSyncSourceBytes ?? 512 * 1024 * 1024,\n 1_024,\n 8 * 1024 * 1024 * 1024,\n ),\n maxCacheCleanupFiles: boundedInteger(\n memory.maxCacheCleanupFiles,\n DEFAULT_FABRIC_CONFIG.memory.maxCacheCleanupFiles ?? 100_000,\n 1,\n 1_000_000,\n ),\n regexMaxPatternBytes: boundedInteger(\n memory.regexMaxPatternBytes,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxPatternBytes ?? 1_024,\n 1,\n 64 * 1024,\n ),\n regexMaxHaystackTerms: boundedInteger(\n memory.regexMaxHaystackTerms,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxHaystackTerms ?? 20_000,\n 1,\n 1_000_000,\n ),\n regexMaxHaystackBytes: boundedInteger(\n memory.regexMaxHaystackBytes,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxHaystackBytes ?? 2 * 1024 * 1024,\n 1_024,\n 128 * 1024 * 1024,\n ),\n regexTimeoutMs: boundedInteger(\n memory.regexTimeoutMs,\n DEFAULT_FABRIC_CONFIG.memory.regexTimeoutMs ?? 250,\n 10,\n 10_000,\n ),\n },\n entropy: {\n compile: booleanValue(entropy.compile, DEFAULT_FABRIC_CONFIG.entropy.compile),\n },\n repairs: {\n enabled: booleanValue(repairs.enabled, DEFAULT_FABRIC_CONFIG.repairs.enabled),\n },\n update: {\n check: booleanValue(update.check, DEFAULT_FABRIC_CONFIG.update.check),\n },\n schema: {\n mode: schemaMode,\n certificateTtlMs: boundedInteger(\n schema.certificateTtlMs,\n DEFAULT_FABRIC_CONFIG.schema.certificateTtlMs,\n 1_000,\n 10 * 60_000,\n ),\n maxFiles: boundedInteger(\n schema.maxFiles,\n DEFAULT_FABRIC_CONFIG.schema.maxFiles,\n 1,\n 1_000,\n ),\n maxBytes: boundedInteger(\n schema.maxBytes,\n DEFAULT_FABRIC_CONFIG.schema.maxBytes,\n 1_024,\n 100 * 1024 * 1024,\n ),\n trustedCommands,\n },\n speculation: {\n enabled: booleanValue(\n speculation.enabled,\n DEFAULT_FABRIC_CONFIG.speculation.enabled,\n ),\n maxConcurrent: boundedInteger(\n speculation.maxConcurrent,\n DEFAULT_FABRIC_CONFIG.speculation.maxConcurrent,\n 1,\n 32,\n ),\n maxEntries: boundedInteger(\n speculation.maxEntries,\n DEFAULT_FABRIC_CONFIG.speculation.maxEntries,\n 1,\n 1_024,\n ),\n maxBufferBytes: boundedInteger(\n speculation.maxBufferBytes,\n DEFAULT_FABRIC_CONFIG.speculation.maxBufferBytes,\n 64 * 1024,\n 64 * 1024 * 1024,\n ),\n entryTtlMs: boundedInteger(\n speculation.entryTtlMs,\n DEFAULT_FABRIC_CONFIG.speculation.entryTtlMs,\n 5_000,\n 30 * 60_000,\n ),\n mcpAllowlist: [\n ...new Set(\n (Array.isArray(speculation.mcpAllowlist) ? speculation.mcpAllowlist : [])\n .filter(\n (entry): entry is string =>\n typeof entry === \"string\" && entry.trim().length > 0,\n )\n .map((entry) => entry.trim().slice(0, 256)),\n ),\n ].slice(0, 256),\n },\n codePreview: normalizeCodePreviewSettings(input.codePreview),\n };\n};\n\nexport const effectiveToolCaptureConfig = (\n config: Pick<FabricConfig, \"fullCodeMode\" | \"capture\"> & Partial<Pick<FabricConfig, \"schema\">>,\n): FabricToolCaptureConfig =>\n config.schema?.mode === \"enforce\"\n ? {\n ...config.capture,\n enabled: true,\n hideFromModel: true,\n keepVisible: [\"fabric_exec\"],\n risks: { ...config.capture.risks },\n }\n : config.fullCodeMode\n ? {\n ...config.capture,\n keepVisible: config.capture.keepVisible.filter(\n (name) => !OMP_CORE_TOOL_NAME_SET.has(name) || name === \"fabric_exec\",\n ),\n risks: { ...config.capture.risks },\n }\n : {\n ...config.capture,\n enabled: false,\n hideFromModel: false,\n keepVisible: [...config.capture.keepVisible],\n risks: { ...config.capture.risks },\n };\n\ninterface FabricConfigFilePlan {\n path: string;\n document: Record<string, unknown>;\n source: string;\n changed: boolean;\n}\n\nconst planConfigFile = (filePath: string): FabricConfigFilePlan | undefined => {\n const input = readJsonObjectFile(filePath);\n if (!input) return undefined;\n const migration = migrateFabricConfigDocument(input.document);\n return {\n path: filePath,\n document: migration.document,\n source: input.source,\n changed: migration.changed,\n };\n};\n\nconst writeJsonAtomic = (\n filePath: string,\n document: Record<string, unknown>,\n expectedSource: string | null,\n): void => {\n const resolvedPath = fs.existsSync(filePath) ? fs.realpathSync(filePath) : filePath;\n const directory = path.dirname(resolvedPath);\n if (!fs.existsSync(directory)) fs.mkdirSync(directory, { recursive: true });\n const mode = fs.existsSync(resolvedPath) ? fs.statSync(resolvedPath).mode & 0o777 : 0o600;\n const temporaryPath = path.join(\n directory,\n `.${path.basename(resolvedPath)}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`,\n );\n let descriptor: number | undefined;\n try {\n descriptor = fs.openSync(temporaryPath, \"wx\", mode);\n fs.writeFileSync(descriptor, `${JSON.stringify(document, null, 2)}\\n`, \"utf8\");\n fs.fsyncSync(descriptor);\n fs.closeSync(descriptor);\n descriptor = undefined;\n if (expectedSource === null) {\n if (fs.existsSync(resolvedPath)) {\n throw new Error(`Fabric configuration changed while updating ${filePath}`);\n }\n } else {\n let currentSource: string;\n try {\n currentSource = fs.readFileSync(resolvedPath, \"utf8\");\n } catch (error) {\n throw new Error(`Fabric configuration changed while updating ${filePath}`, { cause: error });\n }\n if (currentSource !== expectedSource) {\n throw new Error(`Fabric configuration changed while updating ${filePath}`);\n }\n }\n renameAtomic(temporaryPath, resolvedPath);\n try {\n const directoryDescriptor = fs.openSync(directory, \"r\");\n try {\n fs.fsyncSync(directoryDescriptor);\n } finally {\n fs.closeSync(directoryDescriptor);\n }\n } catch (error) {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n if (code !== \"EINVAL\" && code !== \"ENOTSUP\" && code !== \"EISDIR\" && code !== \"EPERM\") throw error;\n }\n } catch (error) {\n if (descriptor !== undefined) fs.closeSync(descriptor);\n fs.rmSync(temporaryPath, { force: true });\n throw error;\n }\n};\n\nconst resolveFabricConfig = (\n options: {\n cwd: string;\n agentDir: string;\n },\n includeProject: boolean,\n applyEnvironmentOverrides: boolean,\n): FabricConfig => {\n let merged = structuredClone(DEFAULT_FABRIC_CONFIG) as unknown as Record<string, unknown>;\n const plans = [\n planConfigFile(path.join(options.agentDir, \"fabric.json\")),\n ...(includeProject\n ? [planConfigFile(path.join(options.cwd, \".omp\", \"fabric.json\"))]\n : []),\n ].filter((plan): plan is FabricConfigFilePlan => plan !== undefined);\n for (const plan of plans) {\n if (plan.changed) writeJsonAtomic(plan.path, plan.document, plan.source);\n merged = mergeObjects(merged, plan.document);\n }\n const inheritedFullCodeMode = process.env.OMP_FABRIC_FULL_CODE_MODE;\n if (\n applyEnvironmentOverrides &&\n (inheritedFullCodeMode === \"true\" || inheritedFullCodeMode === \"false\")\n ) {\n merged.fullCodeMode = inheritedFullCodeMode === \"true\";\n }\n return normalizeFabricConfig(merged);\n};\n\nexport const loadFabricConfigForScope = (\n options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n },\n scope: FabricConfigScope,\n): FabricConfig => {\n if (scope === \"project\" && !options.projectTrusted) {\n throw new Error(\"Cannot load project Fabric configuration for an untrusted project\");\n }\n return resolveFabricConfig(options, scope === \"project\", false);\n};\n\nexport const loadFabricConfig = (options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n}): FabricConfig => {\n const config = resolveFabricConfig(options, options.projectTrusted, true);\n if (config.compaction.engine === \"fabric\") {\n process.env.OMP_FABRIC_COMPACTION_ENGINE = \"fabric\";\n } else {\n delete process.env.OMP_FABRIC_COMPACTION_ENGINE;\n }\n return config;\n};\n\nexport const saveFabricConfig = (\n options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n scope?: FabricConfigScope;\n },\n partial: Record<string, unknown>,\n): { scope: FabricConfigScope; path: string } => {\n const scope = options.scope ?? \"global\";\n if (scope === \"project\" && !options.projectTrusted) {\n throw new Error(\"Cannot save project Fabric configuration for an untrusted project\");\n }\n const targetPath = scope === \"project\"\n ? path.join(options.cwd, \".omp\", \"fabric.json\")\n : path.join(options.agentDir, \"fabric.json\");\n if (Object.hasOwn(partial, \"configVersion\") || Object.hasOwn(partial, \"subagents\")) {\n throw new Error(\"Fabric configuration updates must use the current schema\");\n }\n const input = readJsonObjectFile(targetPath);\n const existing = migrateFabricConfigDocument(input?.document ?? {}).document;\n const merged = mergeObjects(existing, partial) as Record<string, unknown>;\n // Never stamp down: preserve version markers written by newer builds.\n merged.configVersion = Math.max(\n typeof merged.configVersion === \"number\" ? merged.configVersion : 0,\n CURRENT_FABRIC_CONFIG_VERSION,\n );\n writeJsonAtomic(targetPath, merged, input?.source ?? null);\n return { scope, path: targetPath };\n};\n", "export const CURRENT_FABRIC_CONFIG_VERSION = 4;\n\nexport interface FabricConfigMigrationResult {\n document: Record<string, unknown>;\n fromVersion: number;\n toVersion: number;\n appliedVersions: number[];\n changed: boolean;\n // True when the document was written by a newer omp-fabric build. The document\n // is accepted as-is (newer builds only add semantics older builds can safely\n // ignore) and is never rewritten or version-stamped down.\n forwardCompatible: boolean;\n}\n\ninterface FabricConfigMigration {\n from: number;\n to: number;\n migrate(document: Readonly<Record<string, unknown>>): Record<string, unknown>;\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst mergeObjects = (\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> => {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const current = merged[key];\n merged[key] = isObject(current) && isObject(value) ? mergeObjects(current, value) : value;\n }\n return merged;\n};\n\nconst migrations: readonly FabricConfigMigration[] = [\n {\n from: 0,\n to: 1,\n migrate(document) {\n const migrated = { ...document };\n const legacy = migrated.subagents;\n const canonical = migrated.agents;\n if (legacy !== undefined) {\n if (canonical !== undefined && isObject(legacy) !== isObject(canonical)) {\n throw new Error(\n \"Fabric configuration cannot merge legacy subagents with a malformed agents section\",\n );\n }\n migrated.agents = isObject(legacy) && isObject(canonical)\n ? mergeObjects(legacy, canonical)\n : canonical ?? legacy;\n }\n delete migrated.subagents;\n return migrated;\n },\n },\n {\n from: 1,\n to: 2,\n migrate(document) {\n const migrated = { ...document };\n const ui = migrated.ui;\n if (isObject(ui) && Object.hasOwn(ui, \"showNestedToolCalls\")) {\n const renamed = { ...ui };\n if (!Object.hasOwn(renamed, \"showAgentToolPreview\")) {\n renamed.showAgentToolPreview = renamed.showNestedToolCalls;\n }\n delete renamed.showNestedToolCalls;\n migrated.ui = renamed;\n }\n return migrated;\n },\n },\n {\n from: 2,\n to: 3,\n migrate(document) {\n const migrated = { ...document };\n const ui = migrated.ui;\n if (isObject(ui) && Object.hasOwn(ui, \"nestedToolDebounceMs\")) {\n const renamed = { ...ui };\n if (!Object.hasOwn(renamed, \"updateDebounceMs\")) {\n renamed.updateDebounceMs = renamed.nestedToolDebounceMs;\n }\n delete renamed.nestedToolDebounceMs;\n migrated.ui = renamed;\n }\n return migrated;\n },\n },\n {\n from: 3,\n to: 4,\n migrate(document) {\n const migrated = { ...document };\n const prewalk = migrated.prewalk;\n if (\n isObject(prewalk) &&\n (prewalk.enabled === \"true\" || prewalk.enabled === \"false\")\n ) {\n migrated.prewalk = {\n ...prewalk,\n enabled: prewalk.enabled === \"true\",\n };\n }\n return migrated;\n },\n },\n];\n\nconst configVersion = (document: Readonly<Record<string, unknown>>): number => {\n const value = document.configVersion;\n if (value === undefined) return 0;\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 0) {\n throw new Error(\"Fabric configuration configVersion must be a non-negative integer\");\n }\n return value;\n};\n\nexport const migrateFabricConfigDocument = (\n input: Readonly<Record<string, unknown>>,\n): FabricConfigMigrationResult => {\n const fromVersion = configVersion(input);\n if (fromVersion > CURRENT_FABRIC_CONFIG_VERSION) {\n // Written by a newer build: accept as-is instead of bricking the\n // extension. Legacy-shape checks (e.g. the removed subagents key) apply to\n // supported versions only \u2014 newer semantics are unknown here.\n return {\n document: structuredClone(input) as Record<string, unknown>,\n fromVersion,\n toVersion: fromVersion,\n appliedVersions: [],\n changed: false,\n forwardCompatible: true,\n };\n }\n let version = fromVersion;\n let document = structuredClone(input) as Record<string, unknown>;\n const appliedVersions: number[] = [];\n\n while (version < CURRENT_FABRIC_CONFIG_VERSION) {\n const migration = migrations.find((candidate) => candidate.from === version);\n if (!migration || migration.to !== version + 1) {\n throw new Error(`No Fabric configuration migration exists for version ${version}`);\n }\n document = migration.migrate(document);\n version = migration.to;\n document.configVersion = version;\n appliedVersions.push(version);\n }\n\n if (Object.hasOwn(document, \"subagents\")) {\n throw new Error(\"Current Fabric configuration contains removed key subagents\");\n }\n\n return {\n document,\n fromVersion,\n toVersion: version,\n appliedVersions,\n changed: appliedVersions.length > 0,\n forwardCompatible: false,\n };\n};\n", "import path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { homedir } from \"node:os\";\nimport { getAgentDir } from \"@oh-my-pi/pi-utils\";\n\nconst expandEnvDir = (envDir: string): string => {\n if (/^file:\\/\\//.test(envDir)) return fileURLToPath(envDir);\n if (envDir === \"~\") return homedir();\n if (envDir.startsWith(\"~/\") || (process.platform === \"win32\" && envDir.startsWith(\"~\\\\\"))) {\n return path.join(homedir(), envDir.slice(2));\n }\n return envDir;\n};\n\nexport const resolveAgentDir = (): string => {\n const envDir = process.env.OMP_FABRIC_AGENT_DIR;\n if (envDir) return expandEnvDir(envDir);\n return getAgentDir();\n};"],
5
- "mappings": "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",
6
- "names": ["mergeObjects", "path"]
7
- }