omp-fabric 0.85.0 → 1.0.2

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 (115) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/agents/manager.d.ts.map +1 -1
  3. package/dist/agents/transports/process-transport.d.ts.map +1 -1
  4. package/dist/agents/transports/process-utils.d.ts +6 -1
  5. package/dist/agents/transports/process-utils.d.ts.map +1 -1
  6. package/dist/agents/types.d.ts +1 -0
  7. package/dist/agents/types.d.ts.map +1 -1
  8. package/dist/audit/details.d.ts +10 -0
  9. package/dist/audit/details.d.ts.map +1 -1
  10. package/dist/chunks/{chunk-GKOFZ76R.js → chunk-2LGLDM34.js} +22 -4
  11. package/dist/chunks/chunk-2LGLDM34.js.map +7 -0
  12. package/dist/chunks/{chunk-T6OAX4FO.js → chunk-3TWC6XOS.js} +37 -9
  13. package/dist/chunks/chunk-3TWC6XOS.js.map +7 -0
  14. package/dist/chunks/{chunk-ZNAJDPT7.js → chunk-B2SQR2JY.js} +32 -24
  15. package/dist/chunks/{chunk-ZNAJDPT7.js.map → chunk-B2SQR2JY.js.map} +2 -2
  16. package/dist/chunks/{chunk-SXMWV447.js → chunk-DOKANNFC.js} +206 -3
  17. package/dist/chunks/chunk-DOKANNFC.js.map +7 -0
  18. package/dist/chunks/{chunk-UPCARIJP.js → chunk-FFWALVBN.js} +20 -9
  19. package/dist/chunks/chunk-FFWALVBN.js.map +7 -0
  20. package/dist/chunks/{chunk-4LEDA76O.js → chunk-HAJPYJPY.js} +3 -3
  21. package/dist/chunks/{chunk-ROKMBLGN.js → chunk-IFNDRFW7.js} +34 -14
  22. package/dist/chunks/chunk-IFNDRFW7.js.map +7 -0
  23. package/dist/chunks/{chunk-ZTM45GH5.js → chunk-JZWLICMS.js} +125 -42
  24. package/dist/chunks/chunk-JZWLICMS.js.map +7 -0
  25. package/dist/chunks/{chunk-5GTPD4BA.js → chunk-L2FNMIOW.js} +66 -22
  26. package/dist/chunks/chunk-L2FNMIOW.js.map +7 -0
  27. package/dist/chunks/chunk-NX4SNIMR.js +226 -0
  28. package/dist/chunks/chunk-NX4SNIMR.js.map +7 -0
  29. package/dist/chunks/{chunk-YZZIKJX6.js → chunk-RBA54WC7.js} +1 -1
  30. package/dist/chunks/{chunk-YZZIKJX6.js.map → chunk-RBA54WC7.js.map} +1 -1
  31. package/dist/chunks/{chunk-OPTP4PSE.js → chunk-YPYVUGON.js} +3 -23
  32. package/dist/chunks/chunk-YPYVUGON.js.map +7 -0
  33. package/dist/chunks/{chunk-JP4LIZFT.js → chunk-Z6HEQPXX.js} +23 -6
  34. package/dist/chunks/chunk-Z6HEQPXX.js.map +7 -0
  35. package/dist/commands/fabric.d.ts.map +1 -1
  36. package/dist/core/action-registry.d.ts +2 -1
  37. package/dist/core/action-registry.d.ts.map +1 -1
  38. package/dist/core/action-registry.js +2 -2
  39. package/dist/core/compact-controller.d.ts +28 -3
  40. package/dist/core/compact-controller.d.ts.map +1 -1
  41. package/dist/core/compact-outcome-store.d.ts +3 -0
  42. package/dist/core/compact-outcome-store.d.ts.map +1 -0
  43. package/dist/entropy/index.js +2 -2
  44. package/dist/entropy/sessions.d.ts.map +1 -1
  45. package/dist/execution-service.d.ts.map +1 -1
  46. package/dist/fabric-exec-tool.d.ts.map +1 -1
  47. package/dist/fabric-runtime-state.d.ts.map +1 -1
  48. package/dist/fabric-runtime-state.js +883 -367
  49. package/dist/fabric-runtime-state.js.map +4 -4
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +116 -18
  52. package/dist/index.js.map +3 -3
  53. package/dist/memory/discovery.d.ts +28 -14
  54. package/dist/memory/discovery.d.ts.map +1 -1
  55. package/dist/memory/discovery.js +9 -5
  56. package/dist/protocol.d.ts +5 -0
  57. package/dist/protocol.d.ts.map +1 -1
  58. package/dist/protocol.js +1 -1
  59. package/dist/providers/mcp-descriptor-cache.d.ts +2 -0
  60. package/dist/providers/mcp-descriptor-cache.d.ts.map +1 -1
  61. package/dist/providers/mcp-provider.d.ts +4 -2
  62. package/dist/providers/mcp-provider.d.ts.map +1 -1
  63. package/dist/providers/memory-provider.d.ts.map +1 -1
  64. package/dist/providers/memory-provider.js +2 -2
  65. package/dist/providers/omp-tools-provider.d.ts +1 -0
  66. package/dist/providers/omp-tools-provider.d.ts.map +1 -1
  67. package/dist/residency/host.js +5 -5
  68. package/dist/residency/omp-entry.js +5 -5
  69. package/dist/runtime/core-override-guest-types.js +1 -1
  70. package/dist/runtime/guest-types.d.ts +2 -2
  71. package/dist/runtime/guest-types.d.ts.map +1 -1
  72. package/dist/runtime/guest-types.js +1 -1
  73. package/dist/runtime/node-process-child-source.d.ts.map +1 -1
  74. package/dist/runtime/node-process-runtime.d.ts.map +1 -1
  75. package/dist/runtime/node-process-runtime.js +4 -2
  76. package/dist/runtime/node-process-runtime.js.map +2 -2
  77. package/dist/runtime/quickjs-runtime.d.ts +6 -1
  78. package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
  79. package/dist/runtime/quickjs-runtime.js +1 -1
  80. package/dist/speculation/guest-args.d.ts +2 -0
  81. package/dist/speculation/guest-args.d.ts.map +1 -0
  82. package/dist/speculation/scanner.d.ts.map +1 -1
  83. package/dist/speculation/scanner.js +312 -14
  84. package/dist/speculation/scanner.js.map +3 -3
  85. package/dist/speculation/store.d.ts +2 -0
  86. package/dist/speculation/store.d.ts.map +1 -1
  87. package/dist/speculation/stream-tap.d.ts +1 -0
  88. package/dist/speculation/stream-tap.d.ts.map +1 -1
  89. package/dist/speculation/summary.d.ts +4 -0
  90. package/dist/speculation/summary.d.ts.map +1 -0
  91. package/dist/speculation/types.d.ts +4 -0
  92. package/dist/speculation/types.d.ts.map +1 -1
  93. package/dist/speculation/warmup.d.ts +17 -0
  94. package/dist/speculation/warmup.d.ts.map +1 -0
  95. package/dist/ui/settings.d.ts.map +1 -1
  96. package/dist/ui/settings.js +6 -6
  97. package/dist/ui/settings.js.map +2 -2
  98. package/docs/agents.md +1 -1
  99. package/docs/compaction.md +2 -2
  100. package/docs/configuration.md +26 -12
  101. package/docs/interface.md +2 -2
  102. package/docs/speculation.md +11 -6
  103. package/package.json +3 -2
  104. package/dist/chunks/chunk-5GTPD4BA.js.map +0 -7
  105. package/dist/chunks/chunk-7BIA5BJN.js +0 -112
  106. package/dist/chunks/chunk-7BIA5BJN.js.map +0 -7
  107. package/dist/chunks/chunk-GKOFZ76R.js.map +0 -7
  108. package/dist/chunks/chunk-JP4LIZFT.js.map +0 -7
  109. package/dist/chunks/chunk-OPTP4PSE.js.map +0 -7
  110. package/dist/chunks/chunk-ROKMBLGN.js.map +0 -7
  111. package/dist/chunks/chunk-SXMWV447.js.map +0 -7
  112. package/dist/chunks/chunk-T6OAX4FO.js.map +0 -7
  113. package/dist/chunks/chunk-UPCARIJP.js.map +0 -7
  114. package/dist/chunks/chunk-ZTM45GH5.js.map +0 -7
  115. /package/dist/chunks/{chunk-4LEDA76O.js.map → chunk-HAJPYJPY.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/core/action-registry.ts", "../../src/core/action-repair.ts", "../../src/repairs/active.ts", "../../src/entropy/active.ts", "../../src/core/provider-bindings.ts"],
4
- "sourcesContent": ["import { randomUUID } from \"node:crypto\";\nimport { isValidJsonSchema, validateJsonSchemaValue } from \"@oh-my-pi/pi-ai/utils/schema\";\nimport { runAbortable, settleWithin } from \"../async-settlement.js\";\nimport type {\n FabricCapabilityRequirement,\n FabricComponentProviderLease,\n} from \"../components/types.js\";\nimport {\n executionOutcomeFromError,\n FabricResolutionError,\n FabricTraceSafeError,\n type FabricExecutionTraceOperationHandle,\n type FabricExecutionTraceRecorder,\n} from \"../audit/trace.js\";\nimport {\n FABRIC_NESTED_TOOL_CALL_ID_PREFIX,\n type FabricActionDescriptor,\n type FabricActionEffect,\n type FabricCapabilityBindingView,\n type FabricCapabilityCatalog,\n type FabricCapabilityResolution,\n type FabricCommittedCapabilityView,\n type FabricGuestTypeSources,\n type FabricInvocationActivityUpdate,\n type FabricInvocationContext,\n type FabricMediaBlock,\n type FabricNamedActionTypeSource,\n type FabricProvider,\n type FabricProviderListRequest,\n type FabricScopedProviderResult,\n} from \"../protocol.js\";\nimport {\n formatUnknownActionMessage,\n repairActionName,\n} from \"./action-repair.js\";\nimport {\n applyActiveActionName,\n applyActiveArgRepairs,\n getActiveRepairCompiler,\n} from \"../repairs/active.js\";\nimport {\n activeQuarantinedRefNames,\n effectiveInputSchema,\n isActiveQuarantine,\n} from \"../entropy/active.js\";\nimport { formatFabricEffectConflict } from \"./effect-conflict.js\";\nimport { stableJsonHash } from \"./stable-hash.js\";\nimport type {\n FabricSpeculationReplay,\n FabricSpeculationRuntime,\n} from \"../speculation/types.js\";\nimport type { FabricNestedToolResultProxy } from \"./tool-result-proxy.js\";\nimport {\n FabricProviderBindings,\n type FabricProviderBinding,\n type FabricProviderBindingEvent,\n} from \"./provider-bindings.js\";\n\nexport interface ResolvedFabricAction extends FabricActionDescriptor {\n ref: string;\n provider: string;\n}\n\ninterface FabricEffectConflict {\n withRef: string;\n resources: string[];\n reason: \"shared_resource\" | \"unknown_resource\";\n}\n\nexport interface FabricCallAudit {\n ref: string;\n nestedToolCallId: string;\n startedAt: number;\n endedAt?: number;\n success?: boolean;\n error?: string;\n resultChars?: number;\n resultTruncated?: boolean;\n tool?: string;\n provider?: string;\n args?: Record<string, unknown>;\n result?: unknown;\n media?: FabricMediaBlock[];\n mediaNote?: string;\n preview?: unknown;\n effectConflicts?: FabricEffectConflict[];\n /** Result was pre-launched while the program streamed and served from the speculation store. */\n speculated?: boolean;\n /** Spelled action name that repaired to the canonical one at resolve (e.g. search \u2192 recall). */\n repairedFrom?: string;\n}\n\nexport type FabricRegistryActivityEvent =\n | {\n type: \"call_start\";\n callId: string;\n ref: string;\n args: Record<string, unknown>;\n }\n | {\n type: \"call_update\";\n callId: string;\n update: FabricInvocationActivityUpdate;\n }\n | {\n type: \"call_args\";\n callId: string;\n args: Record<string, unknown>;\n }\n | {\n type: \"call_end\";\n callId: string;\n success: boolean;\n result?: unknown;\n preview?: unknown;\n error?: string;\n };\n\nexport interface FabricCapabilityViewLease extends FabricCapabilityResolution {\n release(): Promise<void>;\n}\n\nexport interface FabricRegistryInvocationContext extends FabricInvocationContext {\n authorize?(action: ResolvedFabricAction): Promise<void>;\n approve(\n action: ResolvedFabricAction,\n args: Record<string, unknown>,\n ): Promise<void>;\n audits: FabricCallAudit[];\n maxResultChars: number;\n trace?: FabricExecutionTraceRecorder;\n traceOperation?: FabricExecutionTraceOperationHandle;\n observeInvocation?(event: FabricRegistryActivityEvent): void;\n}\n\n/**\n * Prefix omp-fabric prepends to every nested tool-call id it generates inside a\n * fabric_exec run (one per omp., mcp., or agents. invocation). Extensions can\n * detect that a tool_call/tool_result event came from a nested fabric call \u2014\n * rather than a top-level call the LLM made directly \u2014 by checking\n * `event.toolCallId.startsWith(NESTED_TOOL_CALL_ID_PREFIX)`. The LLM's own\n * tool-call ids (e.g. openai \"call_\u2026\", anthropic \"toolu_\u2026\") never use this\n * prefix, so the signal is unambiguous.\n */\nexport const NESTED_TOOL_CALL_ID_PREFIX = FABRIC_NESTED_TOOL_CALL_ID_PREFIX;\n\nconst providerNamePattern = /^[a-z][a-z0-9_-]*$/;\n\nconst PREVIEW_ARG_CHARS = 2_000;\nconst WRITE_PREVIEW_CONTENT_CHARS = 16_000;\nconst PREVIEW_ARG_KEYS = 32;\nconst PREVIEW_RESULT_CHARS = 16_000;\nconst PREVIEW_NESTED_CHARS = 16_000;\nconst MAX_AUDIT_VALUE_CHARS = 64_000;\nconst MAX_VALIDATION_MESSAGE_CHARS = 2_000;\n\nconst truncateString = (value: string, max: number): string =>\n value.length <= max ? value : `${value.slice(0, max)}\u2026`;\n\nconst boundedPreviewValue = (value: unknown, maxChars: number): unknown => {\n if (value === undefined || value === null || typeof value !== \"object\") return value;\n try {\n const serialized = JSON.stringify(value);\n if (serialized.length <= maxChars) return JSON.parse(serialized) as unknown;\n return {\n fabricTruncated: true,\n originalChars: serialized.length,\n preview: serialized.slice(0, Math.max(1, maxChars - 100)),\n };\n } catch {\n return truncateString(String(value), maxChars);\n }\n};\n\nconst previewArgs = (ref: string, args: Record<string, unknown>): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n let count = 0;\n for (const [key, value] of Object.entries(args)) {\n if (count++ >= PREVIEW_ARG_KEYS) break;\n const maxChars =\n ref === \"omp.write\" && key === \"content\"\n ? WRITE_PREVIEW_CONTENT_CHARS\n : PREVIEW_ARG_CHARS;\n out[key] =\n typeof value === \"string\"\n ? truncateString(value, maxChars)\n : boundedPreviewValue(value, PREVIEW_NESTED_CHARS);\n }\n return out;\n};\n\nconst previewResult = (value: unknown): unknown => {\n if (typeof value === \"string\") return truncateString(value, PREVIEW_RESULT_CHARS);\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const out: Record<string, unknown> = {};\n let count = 0;\n for (const [key, val] of Object.entries(value as Record<string, unknown>)) {\n if (count++ >= PREVIEW_ARG_KEYS) break;\n out[key] =\n typeof val === \"string\"\n ? truncateString(val, PREVIEW_RESULT_CHARS)\n : boundedPreviewValue(val, PREVIEW_NESTED_CHARS);\n }\n return out;\n }\n return boundedPreviewValue(value, PREVIEW_RESULT_CHARS);\n};\n\nconst failedResultError = (value: unknown): string | undefined => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const status = record.status;\n if (status !== \"failed\" && status !== \"stopped\" && status !== \"timed_out\") return undefined;\n const error = typeof record.error === \"string\" ? record.error.trim() : \"\";\n return error ? truncateString(error, PREVIEW_RESULT_CHARS) : `Fabric action returned ${status}`;\n};\n\nconst failedResultOutcome = (value: unknown): \"failed\" | \"aborted\" | \"timed_out\" => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return \"failed\";\n const status = (value as Record<string, unknown>).status;\n return status === \"timed_out\" ? \"timed_out\" : status === \"stopped\" ? \"aborted\" : \"failed\";\n};\n\nconst boundedResult = (\n value: unknown,\n maxChars: number,\n): { value: unknown; chars: number; truncated: boolean } => {\n let serialized: string;\n try {\n const encoded = JSON.stringify(value);\n if (encoded === undefined && value !== undefined) {\n throw new Error(`unsupported result type: ${typeof value}`);\n }\n serialized = encoded ?? \"null\";\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Fabric action returned a non-JSON-serializable value: ${message}`);\n }\n if (serialized.length <= maxChars) {\n return { value, chars: serialized.length, truncated: false };\n }\n const previewChars = Math.max(1, maxChars - 200);\n return {\n value: {\n fabricTruncated: true,\n originalChars: serialized.length,\n preview: serialized.slice(0, previewChars),\n },\n chars: serialized.length,\n truncated: true,\n };\n};\n\nconst resolveDescriptor = (\n provider: FabricProvider,\n descriptor: FabricActionDescriptor,\n): ResolvedFabricAction => ({\n ...descriptor,\n effect: descriptor.effect ?? (descriptor.risk === \"read\"\n ? { kind: \"none\", ordering: \"commutative\" }\n : { kind: \"emission\", ordering: \"unknown\" }),\n provider: provider.name,\n ref: `${provider.name}.${descriptor.name}`,\n});\n\nconst descriptorHash = stableJsonHash;\n\nconst actionDescriptorHash = (action: ResolvedFabricAction): string =>\n descriptorHash({\n ref: action.ref,\n description: action.description,\n inputSchema: action.inputSchema,\n outputSchema: action.outputSchema,\n risk: action.risk,\n namespace: action.namespace,\n effect: action.effect,\n });\n\nconst discoveryTerms = (value: string): string[] =>\n [...value.normalize(\"NFKC\").matchAll(/[\\p{L}\\p{N}_]+/gu)]\n .map((match) => match[0].toLowerCase());\n\nconst conflictBetween = (\n left: FabricActionEffect,\n right: FabricActionEffect,\n): { resources: string[]; reason: FabricEffectConflict[\"reason\"] } | undefined => {\n if (left.kind === \"none\" || right.kind === \"none\") return undefined;\n const resources = (effect: FabricActionEffect): string[] =>\n [...new Set((effect.resources ?? []).filter(\n (resource): resource is string => typeof resource === \"string\" && resource.length > 0,\n ).map((resource) => resource.slice(0, 256)))].slice(0, 64);\n const leftResources = resources(left);\n const rightResources = resources(right);\n if (leftResources.length === 0 || rightResources.length === 0) {\n if (left.ordering === \"commutative\" && right.ordering === \"commutative\") return undefined;\n return { resources: [\"*\"], reason: \"unknown_resource\" };\n }\n const rightSet = new Set(rightResources);\n const overlap = leftResources.filter((resource) => rightSet.has(resource)).sort();\n if (overlap.length === 0) return undefined;\n if (left.ordering === \"commutative\" && right.ordering === \"commutative\") return undefined;\n return { resources: overlap, reason: \"shared_resource\" };\n};\n\n// TypeBox reports additionalProperties failures against the object root\n// without naming the offending keys; name them so a rejected near-miss call\n// is actionable (e.g. a before/after guess on memory.expand surfaces as\n// \"/before: must not have additional properties\").\nconst unexpectedKeys = (\n schema: Record<string, unknown>,\n value: Record<string, unknown>,\n): string[] => {\n if ((schema as { type?: unknown }).type !== \"object\") return [];\n if ((schema as { additionalProperties?: unknown }).additionalProperties !== false) return [];\n if ((schema as { patternProperties?: unknown }).patternProperties !== undefined) return [];\n const properties = (schema as { properties?: Record<string, unknown> }).properties;\n if (!properties) return [];\n return Object.keys(value).filter((key) => !(key in properties));\n};\n\nconst validationMessage = (\n schema: Record<string, unknown>,\n value: Record<string, unknown>,\n): string | undefined => {\n try {\n const validation = validateJsonSchemaValue(schema, value);\n if (validation.success) return undefined;\n if (!isValidJsonSchema(schema)) return \"Schema validator failed\";\n const messages = validation.issues\n .slice(0, 5)\n .map((error) => {\n const raw = (error as { path?: unknown }).path;\n const at = Array.isArray(raw) && raw.length > 0\n ? `/${raw.map(String).join(\"/\")}`\n : typeof raw === \"string\" ? raw : \"\";\n return at !== \"\" && at !== \"/\" ? `${at}: ${error.message}` : error.message;\n });\n for (const key of unexpectedKeys(schema, value).slice(0, 5)) {\n messages.push(`/${key}: must not have additional properties`);\n }\n return truncateString(\n messages.join(\"; \") || \"Schema validation failed\",\n MAX_VALIDATION_MESSAGE_CHARS,\n );\n } catch {\n return \"Schema validator failed\";\n }\n};\n\nconst declaredPropertyNames = (schema: Record<string, unknown>): string[] => {\n const properties = (schema as { properties?: Record<string, unknown> }).properties;\n return properties ? Object.keys(properties) : [];\n};\n\nconst repairCatalogInput = (\n ref: string,\n schema: Record<string, unknown>,\n args: Record<string, unknown>,\n): { args: Record<string, unknown>; observedUnexpected: string | undefined } => {\n const extras = unexpectedKeys(schema, args).sort();\n const observedUnexpected = extras.length > 0 ? extras.join(\"\\0\") : undefined;\n if (extras.length > 0) {\n getActiveRepairCompiler()?.observeInvalidArgs(\n ref,\n args,\n declaredPropertyNames(schema),\n extras.join(\",\"),\n { countError: false, extraKeys: extras },\n );\n }\n return {\n args: applyActiveArgRepairs(ref, args, schema),\n observedUnexpected,\n };\n};\n\nconst validateCatalogArgs = (\n ref: string,\n schema: Record<string, unknown>,\n args: Record<string, unknown>,\n observedUnexpected: string | undefined,\n): { args: Record<string, unknown>; invalid?: string } => {\n const compiler = getActiveRepairCompiler();\n const first = applyActiveArgRepairs(ref, args, schema);\n const invalid = validationMessage(schema, first);\n if (!invalid) return { args: first };\n const extras = unexpectedKeys(schema, first).sort();\n if (observedUnexpected === undefined || extras.join(\"\\0\") !== observedUnexpected) {\n compiler?.observeInvalidArgs(\n ref,\n first,\n declaredPropertyNames(schema),\n invalid,\n { countError: false, extraKeys: extras },\n );\n }\n const second = applyActiveArgRepairs(ref, first, schema);\n const stillInvalid = validationMessage(schema, second);\n if (stillInvalid) compiler?.recordInvocationError();\n return stillInvalid ? { args: second, invalid: stillInvalid } : { args: second };\n};\n\nexport class ActionRegistry {\n readonly #providerBindings = new FabricProviderBindings();\n readonly #activeEffects = new Map<string, { ref: string; effect: FabricActionEffect }>();\n readonly #unavailable = new Map<string, string>();\n #speculation: FabricSpeculationRuntime | undefined;\n #speculationEligibility: ((action: ResolvedFabricAction) => boolean) | undefined;\n\n constructor(readonly toolResultProxy?: FabricNestedToolResultProxy) {\n this.#providerBindings.subscribe(() => this.#speculation?.reset?.());\n }\n\n /**\n * Attach the speculative-PTC runtime. Eligibility is re-checked against the\n * resolved descriptor inside speculate(), so a config/captured-tool change\n * cannot sneak a side-effecting ref into the store after the fact.\n */\n setSpeculation(\n runtime: FabricSpeculationRuntime | undefined,\n eligibility?: (action: ResolvedFabricAction) => boolean,\n ): void {\n this.#speculation = runtime;\n this.#speculationEligibility = eligibility;\n }\n\n register(provider: FabricProvider, options: { overwrite?: boolean } = {}): void {\n this.mount(provider, options);\n }\n\n mount(\n provider: FabricProvider,\n options: { overwrite?: boolean; staged?: boolean } = {},\n ): FabricComponentProviderLease {\n if (!providerNamePattern.test(provider.name)) {\n throw new Error(`Invalid Fabric provider name: ${provider.name}`);\n }\n const lease = this.#providerBindings.mount(provider, options);\n this.#unavailable.delete(provider.name);\n return lease;\n }\n\n activateProviderBindings(bindingIds: readonly string[]): string[] {\n return this.#providerBindings.activate(bindingIds);\n }\n\n subscribeProviderChanges(\n listener: (event: FabricProviderBindingEvent) => void,\n ): () => void {\n return this.#providerBindings.subscribe(listener);\n }\n\n notifyCatalogChanged(provider: string): void {\n this.#providerBindings.notifyCatalogChanged(provider);\n }\n\n has(name: string): boolean {\n return this.#providerBindings.has(name);\n }\n\n markUnavailable(name: string, reason: string): void {\n if (!providerNamePattern.test(name)) {\n throw new Error(`Invalid Fabric provider name: ${name}`);\n }\n if (this.#providerBindings.has(name)) {\n throw new Error(`Cannot mark a registered Fabric provider unavailable: ${name}`);\n }\n this.#unavailable.set(name, reason);\n }\n\n unavailableProviders(): Array<{ name: string; reason: string }> {\n return [...this.#unavailable.entries()]\n .map(([name, reason]) => ({ name, reason }))\n .sort((left, right) => left.name.localeCompare(right.name));\n }\n\n unregister(name: string): FabricProvider | undefined {\n return this.#providerBindings.unregister(name);\n }\n\n providers(): Array<{ name: string; description: string }> {\n return this.#providerBindings.providers()\n .map((provider) => ({ name: provider.name, description: provider.description }))\n .sort((left, right) => left.name.localeCompare(right.name));\n }\n\n async inspectCapabilities(\n requirements: readonly (string | FabricCapabilityRequirement)[],\n context: FabricInvocationContext,\n ): Promise<FabricCapabilityResolution> {\n return this.#resolveCapabilities(requirements, context, false);\n }\n\n async acquireCapabilityView(\n requirements: readonly (string | FabricCapabilityRequirement)[],\n context: FabricInvocationContext,\n ): Promise<FabricCapabilityViewLease> {\n return this.#resolveCapabilities(requirements, context, true);\n }\n\n /**\n * Snapshot the tool schemas backing the dynamic guest surfaces (mcp and\n * extensions) so the type gate can reject argument-shape mistakes before\n * the sandbox runs. Side-effect-free by construction: MCP data comes from\n * the provider's cache-warm descriptor slice (listing would schedule\n * background revalidation), extension data from the captured-tool catalog.\n * Providers that cannot supply data yet simply contribute no section and\n * the loose declarations stand for that execution.\n */\n async guestTypeSources(context: FabricInvocationContext): Promise<FabricGuestTypeSources> {\n const sources: FabricGuestTypeSources = {};\n if (context.capabilityView) {\n const actions = await this.list({ limit: 1_000 }, context);\n const byServer = new Map<string, FabricNamedActionTypeSource[]>();\n for (const action of actions.filter((candidate) => candidate.provider === \"mcp\")) {\n const server = action.namespace;\n if (!server || server === \"management\" || action.name.startsWith(\"$\")) continue;\n const prefix = `${server}.`;\n const name = action.name.startsWith(prefix)\n ? action.name.slice(prefix.length)\n : action.name;\n const tools = byServer.get(server) ?? [];\n tools.push({ name, inputSchema: action.inputSchema });\n byServer.set(server, tools);\n }\n if (byServer.size > 0) {\n sources.mcpServers = [...byServer.entries()].map(([server, tools]) => ({\n server,\n tools,\n }));\n }\n const extensionTools = actions\n .filter((action) => action.provider === \"extensions\")\n .map((action) => ({ name: action.name, inputSchema: action.inputSchema }));\n if (extensionTools.length > 0) sources.extensionTools = extensionTools;\n return sources;\n }\n const mcp = this.#providerBindings.current(\"mcp\")?.provider as\n | (FabricProvider & { sliceDescriptors?: () => FabricActionDescriptor[] })\n | undefined;\n const mcpDescriptors = mcp?.sliceDescriptors?.();\n if (mcpDescriptors && mcpDescriptors.length > 0) {\n const byServer = new Map<string, Map<string, FabricNamedActionTypeSource>>();\n for (const descriptor of mcpDescriptors) {\n const server = descriptor.namespace;\n if (!server || server === \"management\" || descriptor.name.startsWith(\"$\")) continue;\n const prefix = `${server}.`;\n const toolName = descriptor.name.startsWith(prefix)\n ? descriptor.name.slice(prefix.length)\n : descriptor.name;\n let tools = byServer.get(server);\n if (!tools) {\n tools = new Map();\n byServer.set(server, tools);\n }\n // Teaching: the type gate checks programs against the compiled\n // schema, the same shape invoke validates against, so shape\n // mistakes surface before the sandbox runs.\n tools.set(toolName, {\n name: toolName,\n inputSchema: effectiveInputSchema(\n `mcp.${descriptor.name}`,\n descriptor.inputSchema,\n ) as Record<string, unknown>,\n });\n }\n if (byServer.size > 0) {\n sources.mcpServers = [...byServer.entries()].map(([server, tools]) => ({\n server,\n tools: [...tools.values()],\n }));\n }\n }\n const extensions = this.#providerBindings.current(\"extensions\")?.provider;\n if (extensions) {\n try {\n const descriptors = await extensions.list({}, context);\n if (descriptors.length > 0) {\n sources.extensionTools = descriptors.map((descriptor) => ({\n name: descriptor.name,\n inputSchema: effectiveInputSchema(\n `extensions.${descriptor.name}`,\n descriptor.inputSchema,\n ) as Record<string, unknown>,\n }));\n }\n } catch {\n // Capture catalog not ready yet; the loose extensions surface stands\n // for this execution.\n }\n }\n return sources;\n }\n\n // The model-facing discovery view: quarantined refs hide here, and the\n // compiled overlay teaches: listed schemas show the compiled shape so\n // tightened enums are visible before the first call. Pass `declared: true`\n // for the compile's base-surface truth, which keeps quarantined refs\n // visible and schemas declared so base-digest proofs and artifact\n // carry-forward read the live contract. Capability-view paths stay\n // declared everywhere (see describe): committed views pin declared\n // digests, and a surface activation must never invalidate them.\n async list(\n request: FabricProviderListRequest & { provider?: string; declared?: boolean },\n context: FabricInvocationContext,\n ): Promise<ResolvedFabricAction[]> {\n if (context.capabilityView) {\n const refs = Object.keys(context.capabilityView.bindings)\n .filter((ref) => !request.provider || ref.startsWith(`${request.provider}.`))\n .filter((ref) => request.declared || !activeQuarantinedRefNames().has(ref))\n .sort();\n const actions = await Promise.all(refs.map((ref) => this.describe(ref, context)));\n const query = request.query?.normalize(\"NFKC\").trim().toLowerCase();\n return actions\n .filter((action) => !request.namespace || action.namespace === request.namespace)\n .filter((action) =>\n !query || `${action.ref} ${action.description}`.toLowerCase().includes(query),\n )\n .slice(0, Math.max(1, Math.min(request.limit ?? 100, 1_000)));\n }\n const providers = request.provider\n ? [this.#requireProvider(request.provider)]\n : this.#providerBindings.providers();\n const lists = await Promise.all(\n providers.map(async (provider) => {\n const descriptors = await provider.list(request, context);\n return descriptors\n .filter(\n (descriptor) =>\n request.declared ||\n !activeQuarantinedRefNames().has(`${provider.name}.${descriptor.name}`),\n )\n .map((descriptor) => {\n const action = resolveDescriptor(provider, descriptor);\n // Teaching: the listing carries the compiled schema. Declared\n // requests (the compile snapshot) keep the live contract.\n return request.declared\n ? action\n : {\n ...action,\n inputSchema: effectiveInputSchema(\n action.ref,\n action.inputSchema,\n ) as Record<string, unknown>,\n };\n });\n }),\n );\n const limit = Math.max(1, Math.min(request.limit ?? 100, 1_000));\n return lists.flat().slice(0, limit);\n }\n\n async catalog(\n context: FabricInvocationContext,\n options: {\n provider?: string;\n limit?: number;\n includeProvider?: (provider: string) => boolean;\n } = {},\n ): Promise<FabricCapabilityCatalog> {\n const providers = (context.capabilityView\n ? [...new Map(\n Object.values(context.capabilityView.bindings).flatMap((pinned) => {\n const binding = this.#providerBindings.binding(pinned.providerBindingId);\n return binding ? [[binding.name, binding.provider] as const] : [];\n }),\n ).values()]\n : options.provider\n ? [this.#requireProvider(options.provider)]\n : this.#providerBindings.providers())\n .filter((provider) => !options.provider || provider.name === options.provider)\n .filter((provider) => options.includeProvider?.(provider.name) ?? true)\n .sort((left, right) => left.name.localeCompare(right.name));\n const lists = await Promise.all(\n providers.map(async (provider) => ({\n provider,\n actions: context.capabilityView\n ? await this.list({ provider: provider.name, limit: 1_000 }, context)\n : (await provider.list({}, context))\n .filter(\n (descriptor) =>\n !activeQuarantinedRefNames().has(`${provider.name}.${descriptor.name}`),\n )\n .map((descriptor) => resolveDescriptor(provider, descriptor)),\n })),\n );\n const allActions = lists.flatMap(({ actions }) => actions)\n .sort((left, right) => left.ref.localeCompare(right.ref));\n const limit = Math.max(1, Math.min(Math.floor(options.limit ?? 1_000), 1_000));\n const retainedRefs = new Set(allActions.slice(0, limit).map((action) => action.ref));\n const providerHeads = lists.map(({ provider, actions }) => {\n const actionHeads = actions\n .filter((action) => retainedRefs.has(action.ref))\n .sort((left, right) => left.ref.localeCompare(right.ref))\n .map((action) => ({\n key: `action:${action.ref}`,\n parentKey: `provider:${provider.name}`,\n ref: action.ref,\n name: action.name,\n description: action.description,\n descriptorHash: actionDescriptorHash(action),\n risk: action.risk,\n ...(action.namespace === undefined ? {} : { namespace: action.namespace }),\n ...(action.effect === undefined ? {} : { effect: action.effect }),\n }));\n return {\n key: `provider:${provider.name}`,\n parentKey: \"capability:fabric\",\n name: provider.name,\n description: provider.description,\n descriptorHash: descriptorHash({\n name: provider.name,\n description: provider.description,\n actions: actionHeads.map((action) => action.descriptorHash),\n }),\n actions: actionHeads,\n };\n });\n const indexedActions = providerHeads.reduce((total, provider) => total + provider.actions.length, 0);\n const rootHash = descriptorHash(providerHeads.map((provider) => provider.descriptorHash));\n return {\n kind: \"omp-fabric.capability-catalog\",\n version: 1,\n root: {\n key: \"capability:fabric\",\n name: \"Fabric capabilities\",\n description: context.capabilityView\n ? \"Committed provider and action metadata for this execution; not historical session evidence.\"\n : \"Current registered provider and action metadata for navigation; not historical session evidence.\",\n descriptorHash: rootHash,\n },\n providers: providerHeads,\n totalActions: allActions.length,\n indexedActions,\n complete: indexedActions === allActions.length,\n reasons: indexedActions === allActions.length ? [] : [\"action_limit\"],\n };\n }\n\n async search(\n query: string,\n context: FabricInvocationContext,\n limit = 30,\n ): Promise<ResolvedFabricAction[]> {\n const normalizedQuery = query.normalize(\"NFKC\").trim().toLowerCase();\n if (!normalizedQuery) return [];\n const queryTerms = [...new Set(discoveryTerms(normalizedQuery))];\n const listed = await this.list({ limit: 1_000 }, context);\n return listed\n .map((action) => {\n const providerDescription =\n this.#providerBindings.current(action.provider)?.provider.description ?? \"\";\n const ref = action.ref.normalize(\"NFKC\").toLowerCase();\n const name = action.name.normalize(\"NFKC\").toLowerCase();\n const description = action.description.normalize(\"NFKC\").toLowerCase();\n const provider = action.provider.normalize(\"NFKC\").toLowerCase();\n const providerBody = providerDescription.normalize(\"NFKC\").toLowerCase();\n const namespace = (action.namespace ?? \"\").normalize(\"NFKC\").toLowerCase();\n const schema = JSON.stringify(action.inputSchema).normalize(\"NFKC\").toLowerCase();\n const tokenSets = {\n ref: new Set(discoveryTerms(ref)),\n name: new Set(discoveryTerms(name)),\n description: new Set(discoveryTerms(description)),\n provider: new Set(discoveryTerms(provider)),\n providerBody: new Set(discoveryTerms(providerBody)),\n namespace: new Set(discoveryTerms(namespace)),\n schema: new Set(discoveryTerms(schema)),\n };\n const fields = Object.values(tokenSets);\n let score = 0;\n if (ref === normalizedQuery) score += 1_000;\n if (name === normalizedQuery) score += 800;\n if (ref.startsWith(normalizedQuery)) score += 300;\n else if (ref.includes(normalizedQuery)) score += 120;\n if (description.includes(normalizedQuery)) score += 40;\n if (providerBody.includes(normalizedQuery)) score += 20;\n if (schema.includes(normalizedQuery)) score += 10;\n let matchedTerms = 0;\n for (const term of queryTerms) {\n const matched = fields.some((field) => field.has(term));\n if (!matched) continue;\n matchedTerms += 1;\n if (tokenSets.ref.has(term) || tokenSets.name.has(term)) score += 30;\n if (tokenSets.provider.has(term)) score += 20;\n if (tokenSets.description.has(term)) score += 8;\n if (tokenSets.providerBody.has(term)) score += 4;\n if (tokenSets.namespace.has(term)) score += 6;\n if (tokenSets.schema.has(term)) score += 2;\n }\n if (queryTerms.length > 0 && matchedTerms === queryTerms.length) score += 15;\n return { action, score };\n })\n .filter((entry) => entry.score > 0)\n .sort(\n (left, right) =>\n right.score - left.score || left.action.ref.localeCompare(right.action.ref),\n )\n .slice(0, Math.max(1, Math.min(limit, 100)))\n .map((entry) => entry.action);\n }\n\n async describe(ref: string, context: FabricInvocationContext): Promise<ResolvedFabricAction> {\n if (ref.includes(\".\")) {\n const { provider, actionName, expectedDescriptorHash } = this.#parseRef(\n ref,\n context.capabilityView,\n );\n const resolved = await this.#resolveActionDescriptor(\n provider,\n actionName,\n context,\n context.capabilityView === undefined,\n );\n if (!resolved.action) {\n throw new FabricResolutionError(formatUnknownActionMessage(ref, resolved.suggestions));\n }\n const action = resolved.action;\n if (expectedDescriptorHash && actionDescriptorHash(action) !== expectedDescriptorHash) {\n throw new FabricResolutionError(`Fabric capability descriptor changed: ${ref}`);\n }\n return action;\n }\n if (context.capabilityView) {\n const pinned = await Promise.all(\n Object.keys(context.capabilityView.bindings).map((candidate) =>\n this.describe(candidate, context),\n ),\n );\n const matches = pinned.filter((action) => action.name === ref);\n if (matches.length === 1) return matches[0]!;\n if (matches.length > 1) {\n throw new Error(\n `\"${ref}\" matches ${matches.length} committed Fabric actions; qualify with provider.action: ` +\n matches.map((match) => match.ref).sort().join(\", \"),\n );\n }\n throw new FabricResolutionError(`Unknown Fabric action in committed view: ${ref}`);\n }\n // Bare action names (what typed calls pragmatically use): walk every\n // provider for a unique action-name match.\n const matches: ResolvedFabricAction[] = [];\n const declaredNames: string[] = [];\n for (const provider of this.#providerBindings.providers()) {\n let descriptors: FabricActionDescriptor[];\n try {\n descriptors = await provider.list({}, context);\n } catch {\n continue;\n }\n for (const descriptor of descriptors) {\n declaredNames.push(descriptor.name);\n if (descriptor.name === ref) matches.push(resolveDescriptor(provider, descriptor));\n }\n }\n if (matches.length === 1) return matches[0]!;\n if (matches.length > 1) {\n throw new Error(\n `\"${ref}\" matches ${matches.length} Fabric actions; qualify with provider.action: ` +\n matches.map((match) => match.ref).sort().join(\", \"),\n );\n }\n const repair = repairActionName(declaredNames, ref);\n throw new FabricResolutionError(formatUnknownActionMessage(ref, repair.suggestions));\n }\n\n async acquireScoped(\n ref: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n ): Promise<FabricScopedProviderResult> {\n const { binding, provider, actionName, expectedDescriptorHash } = this.#parseRef(\n ref,\n context.capabilityView,\n );\n const endInvocation = this.#providerBindings.beginInvocation(binding.id);\n const releaseBinding = this.#providerBindings.retain([binding.id]);\n let retentionTransferred = false;\n try {\n const resolved = await this.#resolveActionDescriptor(\n provider,\n actionName,\n context,\n context.capabilityView === undefined,\n );\n if (!resolved.action) {\n throw new FabricResolutionError(formatUnknownActionMessage(ref, resolved.suggestions));\n }\n const action = resolved.action;\n const providerActionName = resolved.repairedFrom === undefined ? actionName : action.name;\n if (expectedDescriptorHash && actionDescriptorHash(action) !== expectedDescriptorHash) {\n throw new FabricResolutionError(`Fabric capability descriptor changed: ${ref}`);\n }\n if (action.effect?.kind !== \"scoped\") {\n throw new Error(`Fabric action is not a scoped acquisition: ${ref}`);\n }\n if (!provider.acquire) {\n throw new Error(`Fabric provider does not implement scoped acquisition: ${provider.name}`);\n }\n const effectiveSchema = effectiveInputSchema(\n action.ref,\n action.inputSchema,\n ) as Record<string, unknown>;\n const catalogInput = repairCatalogInput(action.ref, effectiveSchema, args);\n const preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(providerActionName, catalogInput.args, context),\n )\n : catalogInput.args;\n if (typeof preparedArgs !== \"object\" || preparedArgs === null || Array.isArray(preparedArgs)) {\n throw new Error(`Argument preparation for ${ref} did not return an object`);\n }\n const catalog = validateCatalogArgs(\n action.ref,\n effectiveSchema,\n preparedArgs,\n catalogInput.observedUnexpected,\n );\n if (catalog.invalid) throw new Error(`Invalid arguments for ${ref}: ${catalog.invalid}`);\n const acquired = await runAbortable(context.signal, () =>\n provider.acquire!(providerActionName, catalog.args, context),\n );\n if (!acquired || typeof acquired.dispose !== \"function\") {\n throw new Error(`Scoped acquisition ${ref} did not return a disposer`);\n }\n let disposal: Promise<void> | undefined;\n retentionTransferred = true;\n return {\n value: acquired.value,\n dispose: () => {\n disposal ??= (async () => {\n try {\n await acquired.dispose();\n } finally {\n await releaseBinding();\n }\n })();\n return disposal;\n },\n };\n } finally {\n await endInvocation().catch(() => undefined);\n if (!retentionTransferred) await releaseBinding().catch(() => undefined);\n }\n }\n\n async invoke(\n ref: string,\n args: Record<string, unknown>,\n context: FabricRegistryInvocationContext,\n ): Promise<unknown> {\n const traceOperation = context.traceOperation ?? context.trace?.issueCall(ref, args);\n let failureStage: \"resolve\" | \"guard\" | \"prepare\" | \"validate\" | \"approve\" | \"invoke\" = \"resolve\";\n let audit: FabricCallAudit | undefined;\n let invocationActive = false;\n let endBindingInvocation: (() => Promise<void>) | undefined;\n try {\n const { binding, provider, actionName, expectedDescriptorHash } = this.#parseRef(\n ref,\n context.capabilityView,\n );\n endBindingInvocation = this.#providerBindings.beginInvocation(binding.id);\n const resolved = await this.#resolveActionDescriptor(\n provider,\n actionName,\n context,\n context.capabilityView === undefined,\n );\n if (!resolved.action) {\n throw new FabricResolutionError(formatUnknownActionMessage(ref, resolved.suggestions));\n }\n const action = resolved.action;\n const providerActionName = resolved.repairedFrom === undefined ? actionName : action.name;\n if (expectedDescriptorHash && actionDescriptorHash(action) !== expectedDescriptorHash) {\n throw new FabricResolutionError(`Fabric capability descriptor changed: ${ref}`);\n }\n traceOperation?.resolved(action.provider, action.name);\n\n failureStage = \"guard\";\n if (action.effect?.kind === \"scoped\") {\n throw new FabricTraceSafeError(\n `Fabric scoped action ${ref} requires a supervised acquisition context`,\n );\n }\n if (context.authorize) {\n await runAbortable(context.signal, () => context.authorize!(action));\n }\n\n failureStage = \"prepare\";\n const effectiveSchema = effectiveInputSchema(\n action.ref,\n action.inputSchema,\n ) as Record<string, unknown>;\n const catalogInput = repairCatalogInput(action.ref, effectiveSchema, args);\n const preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(providerActionName, catalogInput.args, context),\n )\n : catalogInput.args;\n if (typeof preparedArgs !== \"object\" || preparedArgs === null || Array.isArray(preparedArgs)) {\n throw new FabricTraceSafeError(`Argument preparation for ${ref} did not return an object`);\n }\n\n failureStage = \"validate\";\n const catalog = validateCatalogArgs(\n action.ref,\n effectiveSchema,\n preparedArgs,\n catalogInput.observedUnexpected,\n );\n traceOperation?.prepared(catalog.args);\n // TypeBox validator messages describe schema expectations only \u2014 they\n // never echo argument values \u2014 so they are safe for durable traces.\n if (catalog.invalid) {\n // A validate-rejected attempt is in-domain evidence against the\n // effective surface, but rejected argument values are untrusted\n // input and never enter the durable record. The trace-safe feed\n // persists only values the live schema's own enums declare: for a\n // closed-domain parameter the refused value is already the author's\n // public vocabulary, so the observation pool can carry it and a\n // later reset (base drift or review) re-derives with it included.\n // Values outside the declared enums (typos, payloads) drop here,\n // the same pre-birth rule the derivation applies.\n const declaredSchema = action.inputSchema;\n const declaredProperties =\n typeof declaredSchema === \"object\" &&\n declaredSchema !== null &&\n !Array.isArray(declaredSchema) &&\n typeof (declaredSchema as Record<string, unknown>).properties === \"object\" &&\n (declaredSchema as Record<string, unknown>).properties !== null\n ? ((declaredSchema as Record<string, unknown>).properties as Record<string, unknown>)\n : undefined;\n const attemptArgs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(catalog.args)) {\n const property = declaredProperties ? declaredProperties[key] : undefined;\n const declaredEnum =\n typeof property === \"object\" && property !== null\n ? (property as Record<string, unknown>).enum\n : undefined;\n if (!Array.isArray(declaredEnum)) continue;\n if (\n typeof value !== \"string\" &&\n typeof value !== \"number\" &&\n typeof value !== \"boolean\"\n ) {\n continue;\n }\n if (String(value).length > MAX_AUDIT_VALUE_CHARS) continue;\n if (!declaredEnum.includes(value)) continue;\n attemptArgs[key] = value;\n }\n if (Object.keys(attemptArgs).length > 0) {\n const attempt: FabricCallAudit = {\n ref,\n nestedToolCallId: `${NESTED_TOOL_CALL_ID_PREFIX}${randomUUID()}`,\n startedAt: Date.now(),\n tool: action.name,\n provider: action.provider,\n args: attemptArgs,\n success: false,\n error: `Invalid arguments for ${ref}: ${catalog.invalid}`,\n endedAt: Date.now(),\n ...(resolved.repairedFrom !== undefined\n ? { repairedFrom: resolved.repairedFrom }\n : {}),\n };\n context.audits.push(attempt);\n }\n throw new FabricTraceSafeError(`Invalid arguments for ${ref}: ${catalog.invalid}`);\n }\n\n failureStage = \"approve\";\n await runAbortable(context.signal, () => context.approve(action, catalog.args));\n\n failureStage = \"invoke\";\n const nestedToolCallId = `${NESTED_TOOL_CALL_ID_PREFIX}${randomUUID()}`;\n const effect = action.effect!;\n const effectConflicts = [...this.#activeEffects.values()].flatMap((active) => {\n const conflict = conflictBetween(effect, active.effect);\n return conflict ? [{ withRef: active.ref, ...conflict }] : [];\n }).slice(0, 32);\n if (effectConflicts.length > 0 && context.effectPolicy === \"strict\") {\n failureStage = \"guard\";\n throw new FabricTraceSafeError(\n `Fabric effect conflict for ${ref}: ${effectConflicts\n .map((conflict) => formatFabricEffectConflict(\n conflict.withRef,\n conflict.resources,\n conflict.reason,\n ))\n .join(\"; \")}`,\n );\n }\n const argsPreview = previewArgs(ref, catalog.args);\n const activeAudit: FabricCallAudit = {\n ref,\n nestedToolCallId,\n startedAt: Date.now(),\n tool: action.name,\n provider: action.provider,\n args: boundedPreviewValue(\n argsPreview,\n MAX_AUDIT_VALUE_CHARS,\n ) as Record<string, unknown>,\n ...(effectConflicts.length > 0 ? { effectConflicts } : {}),\n ...(resolved.repairedFrom !== undefined\n ? { repairedFrom: resolved.repairedFrom }\n : {}),\n };\n audit = activeAudit;\n invocationActive = true;\n context.audits.push(activeAudit);\n context.observeInvocation?.({\n type: \"call_start\",\n callId: nestedToolCallId,\n ref,\n args: argsPreview,\n });\n context.update(`Calling ${ref}`);\n this.#activeEffects.set(nestedToolCallId, { ref, effect });\n let servedFromSpeculation = false;\n let providerValue: unknown;\n if (this.#speculation && effect.kind === \"none\") {\n const served = await runAbortable(context.signal, () =>\n this.#speculation!.tryServe(context.parentToolCallId, ref, catalog.args, binding.id));\n if (served.hit) {\n servedFromSpeculation = true;\n activeAudit.speculated = true;\n providerValue = served.value;\n if (served.replay.updatedArgs !== undefined) {\n const replayedPreview = previewArgs(ref, served.replay.updatedArgs);\n activeAudit.args = boundedPreviewValue(\n replayedPreview,\n MAX_AUDIT_VALUE_CHARS,\n ) as Record<string, unknown>;\n traceOperation?.prepared(served.replay.updatedArgs);\n context.observeInvocation?.({\n type: \"call_args\",\n callId: nestedToolCallId,\n args: replayedPreview,\n });\n }\n if (served.replay.media?.length) {\n activeAudit.media = [...(activeAudit.media ?? []), ...served.replay.media];\n if (served.replay.mediaNote) activeAudit.mediaNote = served.replay.mediaNote;\n }\n if (served.replay.preview !== undefined) activeAudit.preview = served.replay.preview;\n }\n }\n let providerInvoked = false;\n try {\n if (!servedFromSpeculation) {\n providerInvoked = true;\n providerValue = await runAbortable(context.signal, () =>\n provider.invoke(providerActionName, catalog.args, {\n ...context,\n nestedToolCallId,\n update(message) {\n if (!invocationActive) return;\n context.update(message);\n context.observeInvocation?.({\n type: \"call_update\",\n callId: nestedToolCallId,\n update: { type: \"progress\", message },\n });\n },\n activity(update) {\n if (!invocationActive) return;\n context.activity?.(update);\n context.observeInvocation?.({\n type: \"call_update\",\n callId: nestedToolCallId,\n update,\n });\n },\n attachMedia(blocks, note) {\n if (!invocationActive) return;\n if (!activeAudit.media) activeAudit.media = [];\n for (const block of blocks) activeAudit.media.push(block);\n if (note) activeAudit.mediaNote = note;\n },\n updateArguments(updatedArgs) {\n if (!invocationActive) return;\n const updatedPreview = previewArgs(ref, updatedArgs);\n activeAudit.args = boundedPreviewValue(\n updatedPreview,\n MAX_AUDIT_VALUE_CHARS,\n ) as Record<string, unknown>;\n traceOperation?.prepared(updatedArgs);\n context.observeInvocation?.({\n type: \"call_args\",\n callId: nestedToolCallId,\n args: updatedPreview,\n });\n },\n attachPreview(preview) {\n if (!invocationActive) return;\n activeAudit.preview = preview;\n },\n }),\n );\n }\n } finally {\n if (providerInvoked && effect.kind !== \"none\") this.#speculation?.bumpEpoch();\n this.#activeEffects.delete(nestedToolCallId);\n }\n const value = this.toolResultProxy\n ? await runAbortable(context.signal, () => this.toolResultProxy!.proxy({\n action,\n args: catalog.args,\n toolCallId: nestedToolCallId,\n value: providerValue,\n ...(context.signal ? { signal: context.signal } : {}),\n }))\n : providerValue;\n const bounded = boundedResult(value, context.maxResultChars);\n const resultError = failedResultError(value);\n activeAudit.success = resultError === undefined;\n if (resultError) activeAudit.error = resultError;\n activeAudit.resultChars = bounded.chars;\n activeAudit.resultTruncated = bounded.truncated;\n const resultPreview = previewResult(bounded.value);\n activeAudit.result = boundedPreviewValue(resultPreview, MAX_AUDIT_VALUE_CHARS);\n activeAudit.endedAt = Date.now();\n context.observeInvocation?.({\n type: \"call_end\",\n callId: nestedToolCallId,\n success: resultError === undefined,\n result: resultPreview,\n ...(activeAudit.preview !== undefined ? { preview: activeAudit.preview } : {}),\n ...(resultError ? { error: resultError } : {}),\n });\n if (resultError) {\n traceOperation?.fail(\"invoke\", resultError, failedResultOutcome(value), bounded.value, {\n resultTruncated: bounded.truncated,\n });\n } else {\n traceOperation?.succeed(bounded.value, { resultTruncated: bounded.truncated });\n }\n return bounded.value;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n traceOperation?.fail(failureStage, error, executionOutcomeFromError(error, context.signal));\n if (audit) {\n audit.success = false;\n audit.error = message;\n audit.endedAt = Date.now();\n context.observeInvocation?.({\n type: \"call_end\",\n callId: audit.nestedToolCallId,\n success: false,\n error: audit.error,\n });\n }\n throw error;\n } finally {\n invocationActive = false;\n if (audit) audit.endedAt ??= Date.now();\n await endBindingInvocation?.().catch(() => undefined);\n }\n }\n\n /**\n * Prepare + pre-launch a speculative call discovered in a partially\n * streamed program (see src/speculation). Pure pipeline only: descriptor\n * resolution, the eligibility gate on the resolved action, argument\n * preparation, and schema validation. The compiled entropy surface gates\n * launches too: quarantined refs never pre-launch and overlays validate\n * prepared arguments, so the store never warms a call the serve path\n * would reject. authorize/approve/audits are skipped\n * because the eligibility gate restricts this path to actions that never\n * prompt, and the real call re-runs the full pipeline on a serve miss.\n * Side-channel outputs are captured into `replay` so the serve path can\n * project them into the real audit.\n */\n async speculate(\n ref: string,\n args: Record<string, unknown>,\n context: FabricInvocationContext,\n replay: FabricSpeculationReplay,\n ): Promise<\n | {\n preparedArgs: Record<string, unknown>;\n bindingToken: string;\n execute(signal: AbortSignal | undefined): Promise<unknown>;\n }\n | undefined\n > {\n if (!this.#speculationEligibility) return undefined;\n try {\n const { binding, provider, actionName, expectedDescriptorHash } = this.#parseRef(\n ref,\n context.capabilityView,\n );\n const descriptor = await runAbortable(context.signal, () =>\n provider.describe(actionName, context));\n if (!descriptor) return undefined;\n const action = resolveDescriptor(provider, descriptor);\n if (expectedDescriptorHash && actionDescriptorHash(action) !== expectedDescriptorHash) {\n return undefined;\n }\n if (isActiveQuarantine(provider.name, actionName, descriptor.inputSchema)) {\n return undefined;\n }\n if (!this.#speculationEligibility(action)) return undefined;\n const effectiveSchema = effectiveInputSchema(\n action.ref,\n action.inputSchema,\n ) as Record<string, unknown>;\n const catalogInput = applyActiveArgRepairs(action.ref, args, effectiveSchema);\n const preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(actionName, catalogInput, context))\n : catalogInput;\n if (\n typeof preparedArgs !== \"object\" ||\n preparedArgs === null ||\n Array.isArray(preparedArgs)\n ) {\n return undefined;\n }\n const repairedArgs = applyActiveArgRepairs(\n action.ref,\n preparedArgs,\n effectiveSchema,\n );\n if (validationMessage(effectiveSchema, repairedArgs)) return undefined;\n const nestedToolCallId = `${NESTED_TOOL_CALL_ID_PREFIX}spec-${randomUUID()}`;\n return {\n preparedArgs: repairedArgs,\n bindingToken: binding.id,\n execute: async (signal) => {\n const endBindingInvocation = this.#providerBindings.beginInvocation(binding.id);\n try {\n return await runAbortable(signal, () =>\n provider.invoke(actionName, repairedArgs, {\n ...context,\n signal,\n nestedToolCallId,\n update() {},\n activity() {},\n attachMedia(blocks, note) {\n replay.media = [...(replay.media ?? []), ...blocks];\n if (note) replay.mediaNote = note;\n },\n updateArguments(updatedArgs) {\n replay.updatedArgs = updatedArgs;\n },\n attachPreview(preview) {\n replay.preview = preview;\n },\n }),\n );\n } finally {\n await endBindingInvocation().catch(() => undefined);\n }\n },\n };\n } catch {\n // Speculation degrades silently; the real call runs the full pipeline.\n return undefined;\n }\n }\n\n async endInvocation(parentToolCallId: string, timeoutMs = 1_000): Promise<void> {\n this.#speculation?.onInvocationEnd?.(parentToolCallId);\n const providers = new Set(\n this.#providerBindings.entries().map((binding) => binding.provider),\n );\n const finalizers = [...providers].flatMap((provider) =>\n provider.invocationEnded\n ? [Promise.resolve().then(() => provider.invocationEnded!(parentToolCallId))]\n : [],\n );\n await settleWithin(finalizers, timeoutMs);\n }\n\n async close(excludedProviderNames: Set<string> = new Set()): Promise<void> {\n await this.#providerBindings.close(excludedProviderNames);\n }\n\n async #resolveCapabilities(\n requirements: readonly (string | FabricCapabilityRequirement)[],\n context: FabricInvocationContext,\n retain: boolean,\n ): Promise<FabricCapabilityViewLease> {\n const normalized = new Map<string, boolean>();\n for (const requirement of requirements) {\n const ref = (typeof requirement === \"string\" ? requirement : requirement.ref).trim();\n if (!ref || ref.length > 256 || !ref.includes(\".\")) {\n throw new Error(`Fabric capability requirements must use provider.action: ${ref || \"<empty>\"}`);\n }\n const optional = typeof requirement === \"string\" ? false : requirement.optional === true;\n normalized.set(ref, (normalized.get(ref) ?? true) && optional);\n }\n\n const missing: string[] = [];\n const optionalMissing: string[] = [];\n const resolved = new Map<string, FabricCapabilityBindingView>();\n const temporaryReleases: Array<() => Promise<void>> = [];\n let permanentRelease: (() => Promise<void>) | undefined;\n try {\n for (const [ref, optional] of [...normalized].sort(([left], [right]) =>\n left.localeCompare(right),\n )) {\n try {\n const { binding, provider, actionName } = this.#parseRef(ref);\n const release = this.#providerBindings.retain([binding.id]);\n temporaryReleases.push(release);\n const descriptor = await runAbortable(context.signal, () =>\n provider.describe(actionName, context),\n );\n if (!descriptor) throw new FabricResolutionError(`Unknown Fabric action: ${ref}`);\n const action = resolveDescriptor(provider, descriptor);\n resolved.set(ref, {\n ref,\n provider: provider.name,\n providerBindingId: binding.id,\n generation: binding.generation,\n descriptorHash: actionDescriptorHash(action),\n });\n } catch (error) {\n if (!(error instanceof FabricResolutionError)) throw error;\n (optional ? optionalMissing : missing).push(ref);\n }\n }\n\n let view: FabricCommittedCapabilityView | undefined;\n if (missing.length === 0) {\n const bindings = Object.fromEntries(resolved);\n const values = [...resolved.values()];\n if (retain) permanentRelease = this.#providerBindings.retain(\n values.map((binding) => binding.providerBindingId),\n );\n view = {\n id: randomUUID(),\n digest: descriptorHash(values),\n semanticDigest: descriptorHash(\n values.map(({ ref, provider, descriptorHash: hash }) => ({\n ref,\n provider,\n descriptorHash: hash,\n })),\n ),\n bindings,\n };\n }\n return {\n satisfied: missing.length === 0,\n missing,\n optionalMissing,\n ...(view ? { view } : {}),\n release: async () => {\n const release = permanentRelease;\n permanentRelease = undefined;\n await release?.();\n },\n };\n } finally {\n await Promise.allSettled(temporaryReleases.map((release) => release()));\n }\n }\n\n async #declaredActionNames(\n provider: FabricProvider,\n context: FabricInvocationContext,\n ): Promise<string[]> {\n try {\n const descriptors = await runAbortable(context.signal, () => provider.list({}, context));\n return descriptors.map((descriptor) => descriptor.name);\n } catch {\n return [];\n }\n }\n\n // Resolve a provider action descriptor, repairing a near-miss action name\n // (mirroring arg-normalization's prepare-stage argument repair) when the\n // caller is not pinned to a committed capability view. Committed views are\n // exact contracts: a pinned miss keeps the plain resolution error.\n async #resolveActionDescriptor(\n provider: FabricProvider,\n actionName: string,\n context: FabricInvocationContext,\n allowRepair: boolean,\n ): Promise<{ action?: ResolvedFabricAction; suggestions: string[]; repairedFrom?: string }> {\n const descriptor = await runAbortable(context.signal, () =>\n provider.describe(actionName, context),\n );\n // A quarantined ref resolves as unknown: the model-facing catalog never\n // shows it, and a direct call gets the standard not-found message with\n // suggestions, exactly like any retired action.\n if (descriptor && !isActiveQuarantine(provider.name, actionName, descriptor.inputSchema)) {\n return {\n action: resolveDescriptor(provider, descriptor),\n suggestions: [],\n };\n }\n if (!allowRepair) return { suggestions: [] };\n const declared = (await this.#declaredActionNames(provider, context)).filter(\n (name) => !activeQuarantinedRefNames().has(`${provider.name}.${name}`),\n );\n const catalogName = applyActiveActionName(provider.name, actionName, declared);\n if (catalogName !== actionName) {\n const catalogDescriptor = await runAbortable(context.signal, () =>\n provider.describe(catalogName, context),\n );\n if (catalogDescriptor) {\n return {\n action: resolveDescriptor(provider, catalogDescriptor),\n suggestions: [],\n repairedFrom: actionName,\n };\n }\n }\n const repair = repairActionName(declared, actionName);\n const compiler = getActiveRepairCompiler();\n if (repair.repaired !== undefined) {\n compiler?.observeUnknownAction(provider.name, actionName, declared, {\n countError: false,\n });\n const repairedDescriptor = await runAbortable(context.signal, () =>\n provider.describe(repair.repaired!, context),\n );\n if (repairedDescriptor) {\n return {\n action: resolveDescriptor(provider, repairedDescriptor),\n suggestions: [],\n repairedFrom: actionName,\n };\n }\n compiler?.recordInvocationError();\n } else {\n compiler?.observeUnknownAction(provider.name, actionName, declared);\n }\n return {\n suggestions: repair.suggestions.map((name) => `${provider.name}.${name}`),\n };\n }\n\n #parseRef(\n ref: string,\n view?: FabricCommittedCapabilityView,\n ): {\n binding: FabricProviderBinding;\n provider: FabricProvider;\n actionName: string;\n expectedDescriptorHash?: string;\n } {\n const separator = ref.indexOf(\".\");\n if (separator <= 0 || separator === ref.length - 1) {\n throw new Error(`Fabric action references must use provider.action: ${ref}`);\n }\n const providerName = ref.slice(0, separator);\n const pinned = view?.bindings[ref];\n if (view && !pinned) {\n throw new FabricResolutionError(`Fabric capability is outside the committed view: ${ref}`);\n }\n const binding = pinned\n ? this.#providerBindings.binding(pinned.providerBindingId)\n : this.#providerBindings.current(providerName);\n if (!binding || binding.name !== providerName) {\n if (pinned) {\n throw new FabricResolutionError(\n `Fabric capability binding is no longer available: ${ref} (${pinned.providerBindingId})`,\n );\n }\n this.#requireProvider(providerName);\n throw new FabricResolutionError(`Unknown Fabric provider: ${providerName}`);\n }\n return {\n binding,\n provider: binding.provider,\n actionName: ref.slice(separator + 1),\n ...(pinned ? { expectedDescriptorHash: pinned.descriptorHash } : {}),\n };\n }\n\n #requireProvider(name: string): FabricProvider {\n const provider = this.#providerBindings.current(name)?.provider;\n if (provider) return provider;\n const unavailableReason = this.#unavailable.get(name);\n if (unavailableReason) {\n throw new FabricResolutionError(\n `Fabric provider \"${name}\" is unavailable: ${unavailableReason}`,\n );\n }\n const registered = this.#providerBindings.providers()\n .map((provider) => provider.name)\n .sort((left, right) => left.localeCompare(right));\n throw new FabricResolutionError(\n `Unknown Fabric provider: ${name}` +\n (registered.length > 0 ? ` (registered providers: ${registered.join(\", \")})` : \"\"),\n );\n }\n}\n", "// Action-name repair for Fabric registry resolution, mirroring the\n// argument-shape repair architecture in src/providers/arg-normalization.ts:\n//\n// 1. The registry resolve stage canonicalizes near-miss action spellings\n// (memory.search \u2192 memory.recall) before the provider descriptor is\n// demanded. The repair surface is mostly derived from the provider's\n// declared action names rather than maintained by hand \u2014 casing,\n// separator, and underscore forms, singular/plural near-misses, camelCase\n// token alignment, and bounded edit distance \u2014 so new providers gain\n// repair behavior for free, exactly like schema-derived argument repair.\n// 2. The resolution failure tier owns the didactic failure: ambiguous or\n// unmatched names fail with the closest declared candidates named, and\n// the original \"Unknown Fabric action\" prefix is preserved.\n//\n// As with KEY_SYNONYM_CLASSES in arg-normalization, only genuinely semantic\n// verb synonyms need explicit vocabulary, and a spilled name repairs only\n// when exactly one declared member fits: ambiguity (or absence) leaves the\n// name untouched so the failure tier can enumerate the honest choices.\n\ninterface ActionNameRepair {\n /** Canonical declared action name when exactly one candidate fits. */\n repaired?: string;\n /** Ranked declared candidates for the didactic failure message. */\n suggestions: string[];\n}\n\n// Verb/concept classes shared across the stable providers. Each class mixes\n// plausible spilled verbs with the canonical names providers actually\n// declare, so e.g. \"search\" repairs to memory.recall (sole recall-class\n// member declared by memory) while \"fetch\" on mesh stays ambiguous between\n// mesh.get and mesh.read. A class only fires when exactly one member is\n// declared by the target provider's catalog.\nconst ACTION_SYNONYM_CLASSES: ReadonlyArray<ReadonlyArray<string>> = [\n // memory.recall and its spilled search verbs.\n [\"recall\", \"search\", \"find\", \"query\", \"lookup\", \"grep\", \"scan\", \"locate\"],\n // memory.expand / read-one-entry verbs.\n [\"expand\", \"get\", \"read\", \"fetch\", \"load\", \"view\", \"show\"],\n // memory.sessions and list-style catalog reads.\n [\"sessions\", \"list\", \"ls\", \"enumerate\", \"index\"],\n // state.transition / mesh.put write verbs.\n [\"transition\", \"write\", \"put\", \"set\", \"save\", \"update\", \"store\", \"upsert\", \"append\", \"post\"],\n // agents.create family.\n [\"create\", \"spawn\", \"new\", \"add\", \"make\", \"register\"],\n // mesh.publish family (\"post\" deliberately also sits in the write class,\n // so mesh.post stays ambiguous between publish and put).\n [\"publish\", \"send\", \"emit\", \"notify\"],\n // teardown verbs.\n [\"delete\", \"remove\", \"rm\", \"destroy\", \"drop\", \"clear\"],\n // components.reload family.\n [\"reload\", \"restart\", \"refresh\", \"rebuild\", \"reboot\"],\n // status/introspection reads (\"get\" is deliberately shared with the\n // expand class: memory.get expands an entry, components.get is status).\n [\"status\", \"info\", \"inspect\", \"health\", \"describe\", \"get\"],\n // execution verbs.\n [\"run\", \"execute\", \"exec\", \"invoke\", \"call\", \"start\", \"go\"],\n // cancellation verbs.\n [\"cancel\", \"abort\", \"stop\", \"kill\", \"terminate\"],\n // verification verbs.\n [\"verify\", \"check\", \"validate\", \"assert\", \"confirm\", \"certify\"],\n // timeline reads.\n [\"history\", \"log\", \"journal\", \"events\", \"timeline\", \"transitions\"],\n // subscription verbs.\n [\"subscribe\", \"watch\", \"listen\", \"observe\", \"follow\"],\n // compact.request family.\n [\"request\", \"begin\", \"initiate\", \"trigger\", \"schedule\"],\n // schema.commit family.\n [\"commit\", \"apply\", \"finalize\"],\n // agents messaging pair (both declare, so spilled verbs here stay\n // ambiguous and the failure tier enumerates ask vs tell).\n [\"ask\", \"tell\", \"say\", \"chat\"],\n];\n\n// Casing/spacing/underscore/dollar-insensitive action form, mirroring\n// normalizeForm in arg-normalization: \"$servers\" and \"servers\" share a form.\nconst normalizeActionForm = (name: string): string =>\n name.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\nconst ACTION_CLASS_FORMS = ACTION_SYNONYM_CLASSES.map((cls) =>\n new Set(cls.map(normalizeActionForm)),\n);\n\nconst camelTokens = (name: string): string[] =>\n name\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/([A-Z]+)([A-Z][a-z])/g, \"$1 $2\")\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter((token) => token.length > 0);\n\n// Singular/plural near-misses collapse to one form, mirroring the derived\n// plural handling of declared schema keys in arg-normalization.\nconst singularActionForm = (form: string): string =>\n form.length > 3 && form.endsWith(\"s\") ? form.slice(0, -1) : form;\n\nconst levenshtein = (left: string, right: string): number => {\n if (left === right) return 0;\n if (left.length === 0) return right.length;\n if (right.length === 0) return left.length;\n let previous = Array.from({ length: right.length + 1 }, (_, index) => index);\n for (let i = 1; i <= left.length; i++) {\n const current = [i];\n for (let j = 1; j <= right.length; j++) {\n current.push(\n Math.min(\n previous[j]! + 1,\n current[j - 1]! + 1,\n previous[j - 1]! + (left[i - 1] === right[j - 1] ? 0 : 1),\n ),\n );\n }\n previous = current;\n }\n return previous[right.length]!;\n};\n\n// Edit-distance budget scales with the spilled length; short names keep a\n// tight budget so \"get\" never quietly becomes \"set\".\nconst editThreshold = (form: string): number =>\n form.length <= 4 ? 1 : Math.max(2, Math.floor(form.length / 4));\n\nconst tokenAligned = (spilled: string[], declared: string[]): boolean => {\n if (spilled.length === 0 || spilled.length !== declared.length) return false;\n return spilled.every((token, index) => {\n const other = declared[index]!;\n if (token === other) return true;\n return token.length >= 3 && other.length >= 3 &&\n (token.startsWith(other) || other.startsWith(token));\n });\n};\n\nconst sortNames = (names: readonly string[]): string[] =>\n [...new Set(names)].sort((left, right) => left.localeCompare(right));\n\n/**\n * Repair a spilled action name against the provider's declared names.\n * Returns the canonical name when exactly one declared candidate fits, or\n * ranked suggestions for the didactic failure message.\n */\nexport const repairActionName = (\n declared: readonly string[],\n actionName: string,\n): ActionNameRepair => {\n const spilledForm = normalizeActionForm(actionName);\n if (spilledForm.length === 0) return { suggestions: [] };\n const rest = declared.filter((name) => name !== actionName);\n if (rest.length === 0) return { suggestions: [] };\n const forms = rest.map((name) => ({ name, form: normalizeActionForm(name) }));\n\n // Tier 1 \u2014 semantic verb classes: the spilled verb belongs to a shared\n // synonym class; repair only when exactly one class member is declared.\n const classCandidates = ACTION_CLASS_FORMS\n .filter((classForms) => classForms.has(spilledForm))\n .flatMap((classForms) =>\n forms.filter((entry) => classForms.has(entry.form)).map((entry) => entry.name)\n );\n if (classCandidates.length === 1) {\n return { repaired: classCandidates[0]!, suggestions: [classCandidates[0]!] };\n }\n if (classCandidates.length > 1) {\n return { suggestions: sortNames(classCandidates) };\n }\n\n // Tier 2 \u2014 structural forms derived from the declared names: separator and\n // casing variants, singular/plural, camelCase token alignment, and unique\n // raw prefixes. Weak signals must agree on exactly one canonical name.\n const spilledTokens = camelTokens(actionName);\n const derived: string[] = [];\n for (const entry of forms) {\n if (\n entry.form === spilledForm ||\n singularActionForm(entry.form) === singularActionForm(spilledForm) ||\n (spilledTokens.length > 0 && tokenAligned(spilledTokens, camelTokens(entry.name))) ||\n (spilledForm.length >= 4 && entry.form.startsWith(spilledForm))\n ) {\n derived.push(entry.name);\n }\n }\n if (derived.length === 1) return { repaired: derived[0]!, suggestions: [derived[0]!] };\n if (derived.length > 1) return { suggestions: sortNames(derived) };\n\n // Tier 3 \u2014 bounded edit distance with a strict unique minimum.\n const distances = forms.map((entry) => ({\n name: entry.name,\n distance: levenshtein(spilledForm, entry.form),\n }));\n const min = Math.min(...distances.map((entry) => entry.distance));\n const threshold = editThreshold(spilledForm);\n if (min <= threshold) {\n const nearest = sortNames(\n distances.filter((entry) => entry.distance === min).map((entry) => entry.name),\n );\n if (nearest.length === 1) return { repaired: nearest[0]!, suggestions: [nearest[0]!] };\n return { suggestions: nearest };\n }\n\n // Failure tier \u2014 rank a few close names so the error teaches the catalog.\n const suggestions = distances\n .filter((entry) => entry.distance <= Math.max(3, Math.floor(spilledForm.length / 2)))\n .sort((left, right) =>\n left.distance - right.distance || left.name.localeCompare(right.name)\n )\n .slice(0, 3)\n .map((entry) => entry.name);\n return { suggestions: sortNames(suggestions) };\n};\n\n/**\n * The didactic unknown-action failure message. The original\n * \"Unknown Fabric action: <ref>\" prefix is preserved verbatim; declared\n * candidates are appended only when repair found close misses.\n */\nexport const formatUnknownActionMessage = (\n ref: string,\n suggestions: readonly string[],\n): string =>\n suggestions.length > 0\n ? `Unknown Fabric action: ${ref} (did you mean: ${suggestions.slice(0, 3).join(\", \")}?)`\n : `Unknown Fabric action: ${ref}`;\n", "import type { RepairCompiler } from \"./compiler.js\";\n\nlet active: RepairCompiler | undefined;\n\nexport const setActiveRepairCompiler = (compiler: RepairCompiler | undefined): void => {\n active = compiler;\n};\n\nexport const clearActiveRepairCompiler = (compiler: RepairCompiler | undefined): void => {\n if (compiler && active === compiler) active = undefined;\n};\n\nexport const getActiveRepairCompiler = (): RepairCompiler | undefined => active;\n\nexport const applyActiveArgRepairs = (\n ref: string,\n args: Record<string, unknown>,\n schema: Record<string, unknown>,\n): Record<string, unknown> => active?.applyArgs(ref, args, schema) ?? args;\n\nexport const applyActiveActionName = (\n provider: string,\n actionName: string,\n declared: readonly string[],\n): string => active?.applyActionName(provider, actionName, declared) ?? actionName;\n", "// The active compiled surface, mirroring the active repair compiler: the\n// runtime consults it at resolution, validation, and catalog time. Entries\n// re-prove their recorded base digest against the live declared schema on\n// every consult, so enforcement follows the live surface, never a stale\n// snapshot.\n\nimport {\n effectiveSchemaFor,\n isQuarantinedRef,\n quarantinedRefNames,\n type CompiledSurfaceFile,\n} from \"./compiled-surface.js\";\n\nlet active: CompiledSurfaceFile | undefined;\n\nexport const setActiveCompiledSurface = (file: CompiledSurfaceFile | undefined): void => {\n active = file;\n};\n\nexport const clearActiveCompiledSurface = (): void => {\n active = undefined;\n};\n\n// The compiled schema replaces the declared schema while the recorded base\n// digest still matches the live schema.\nexport const effectiveInputSchema = (ref: string, liveSchema: unknown): unknown =>\n effectiveSchemaFor(ref, liveSchema, active);\n\n// Name-only quarantine view for catalog filtering and suggestions: hiding\n// there is advisory, so no digest proof is required.\nexport const activeQuarantinedRefNames = (): ReadonlySet<string> => quarantinedRefNames(active);\n\n// Digest-proofed quarantine denial for resolution.\nexport const isActiveQuarantine = (\n provider: string,\n actionName: string,\n liveSchema: unknown,\n): boolean => isQuarantinedRef(`${provider}.${actionName}`, liveSchema, active);", "import { randomUUID } from \"node:crypto\";\nimport type { FabricComponentProviderLease } from \"../components/types.js\";\nimport type { FabricProvider } from \"../protocol.js\";\n\ntype FabricProviderBindingState = \"staged\" | \"active\" | \"retiring\" | \"closed\";\n\nexport interface FabricProviderBinding {\n id: string;\n name: string;\n generation: number;\n provider: FabricProvider;\n state: FabricProviderBindingState;\n ownerRetained: boolean;\n allowReplace: boolean;\n retainers: number;\n inFlight: number;\n closeTask?: Promise<void>;\n closeError?: string;\n unsubscribeCatalog?: () => void;\n}\n\nexport type FabricProviderBindingEvent =\n | { type: \"staged\" | \"activated\" | \"retiring\" | \"closed\"; binding: FabricProviderBinding }\n | { type: \"catalog\"; provider: string };\n\nconst snapshot = (binding: FabricProviderBinding): FabricProviderBinding => ({\n ...binding,\n ...(binding.closeTask ? { closeTask: binding.closeTask } : {}),\n});\n\nexport class FabricProviderBindings {\n readonly #current = new Map<string, FabricProviderBinding>();\n readonly #staged = new Map<string, FabricProviderBinding>();\n readonly #all = new Map<string, FabricProviderBinding>();\n readonly #generations = new Map<string, number>();\n readonly #listeners = new Set<(event: FabricProviderBindingEvent) => void>();\n\n subscribe(listener: (event: FabricProviderBindingEvent) => void): () => void {\n this.#listeners.add(listener);\n return () => this.#listeners.delete(listener);\n }\n\n current(name: string): FabricProviderBinding | undefined {\n return this.#current.get(name);\n }\n\n binding(id: string): FabricProviderBinding | undefined {\n const binding = this.#all.get(id);\n return binding?.state === \"closed\" ? undefined : binding;\n }\n\n has(name: string): boolean {\n return this.#current.has(name);\n }\n\n providers(): FabricProvider[] {\n return [...this.#current.values()].map((binding) => binding.provider);\n }\n\n entries(): FabricProviderBinding[] {\n return [...this.#all.values()].filter((binding) => binding.state !== \"closed\");\n }\n\n mount(\n provider: FabricProvider,\n options: { overwrite?: boolean; staged?: boolean } = {},\n ): FabricComponentProviderLease {\n const current = this.#current.get(provider.name);\n const staged = this.#staged.get(provider.name);\n if ((current || staged) && !options.overwrite) {\n throw new Error(`Fabric provider already registered: ${provider.name}`);\n }\n if (staged && options.overwrite) this.retire(staged.id);\n const generation = (this.#generations.get(provider.name) ?? 0) + 1;\n this.#generations.set(provider.name, generation);\n const binding: FabricProviderBinding = {\n id: randomUUID(),\n name: provider.name,\n generation,\n provider,\n state: options.staged ? \"staged\" : \"active\",\n ownerRetained: true,\n allowReplace: options.overwrite === true,\n retainers: 0,\n inFlight: 0,\n };\n if (provider.subscribeCatalog) {\n binding.unsubscribeCatalog = provider.subscribeCatalog(() =>\n this.notifyCatalogChanged(provider.name),\n );\n }\n this.#all.set(binding.id, binding);\n if (options.staged) {\n this.#staged.set(binding.name, binding);\n this.#emit({ type: \"staged\", binding: snapshot(binding) });\n } else {\n const replaced = this.#activateOne(binding);\n if (replaced && options.overwrite) void this.releaseOwner(replaced.id).catch(() => undefined);\n }\n\n let released = false;\n return {\n bindingId: binding.id,\n name: binding.name,\n generation: binding.generation,\n get active() {\n return binding.state === \"active\";\n },\n retire: () => this.retire(binding.id),\n release: async () => {\n if (released) return binding.closeTask;\n released = true;\n return this.releaseOwner(binding.id);\n },\n };\n }\n\n activate(bindingIds: readonly string[]): string[] {\n const bindings = bindingIds.map((id) => {\n const binding = this.#all.get(id);\n if (!binding || binding.state === \"closed\") {\n throw new Error(`Unknown Fabric provider binding: ${id}`);\n }\n if (binding.state !== \"staged\" && binding.state !== \"active\") {\n throw new Error(`Fabric provider binding is ${binding.state}: ${binding.name}`);\n }\n return binding;\n });\n const names = new Set<string>();\n for (const binding of bindings) {\n if (names.has(binding.name)) {\n throw new Error(`Cannot activate multiple Fabric bindings for provider ${binding.name}`);\n }\n names.add(binding.name);\n const current = this.#current.get(binding.name);\n if (current && current.id !== binding.id && !binding.allowReplace) {\n throw new Error(`Fabric provider already registered: ${binding.name}`);\n }\n }\n const replaced: string[] = [];\n for (const binding of bindings) {\n const previous = this.#activateOne(binding);\n if (previous && previous.id !== binding.id) {\n replaced.push(previous.id);\n if (binding.allowReplace) void this.releaseOwner(previous.id).catch(() => undefined);\n }\n }\n return replaced;\n }\n\n unregister(name: string): FabricProvider | undefined {\n const binding = this.#current.get(name);\n if (!binding) return undefined;\n this.retire(binding.id);\n void this.releaseOwner(binding.id).catch(() => undefined);\n return binding.provider;\n }\n\n retire(id: string): void {\n const binding = this.#all.get(id);\n if (!binding || binding.state === \"retiring\" || binding.state === \"closed\") return;\n if (this.#current.get(binding.name)?.id === id) this.#current.delete(binding.name);\n if (this.#staged.get(binding.name)?.id === id) this.#staged.delete(binding.name);\n binding.state = \"retiring\";\n this.#emit({ type: \"retiring\", binding: snapshot(binding) });\n void this.#maybeClose(binding).catch(() => undefined);\n }\n\n retain(ids: Iterable<string>): () => Promise<void> {\n const retained: FabricProviderBinding[] = [];\n try {\n for (const id of new Set(ids)) {\n const binding = this.#all.get(id);\n if (!binding || binding.state === \"closed\") {\n throw new Error(`Unknown Fabric provider binding: ${id}`);\n }\n binding.retainers++;\n retained.push(binding);\n }\n } catch (error) {\n for (const binding of retained) binding.retainers--;\n throw error;\n }\n let released = false;\n return async () => {\n if (released) return;\n released = true;\n await Promise.all(retained.map(async (binding) => {\n binding.retainers = Math.max(0, binding.retainers - 1);\n await this.#maybeClose(binding);\n }));\n };\n }\n\n beginInvocation(id: string): () => Promise<void> {\n const binding = this.#all.get(id);\n if (!binding || binding.state === \"closed\") {\n throw new Error(`Unknown Fabric provider binding: ${id}`);\n }\n binding.inFlight++;\n let ended = false;\n return async () => {\n if (ended) return;\n ended = true;\n binding.inFlight = Math.max(0, binding.inFlight - 1);\n await this.#maybeClose(binding);\n };\n }\n\n notifyCatalogChanged(provider: string): void {\n if (this.#current.has(provider)) this.#emit({ type: \"catalog\", provider });\n }\n\n async close(excludedProviderNames: Set<string> = new Set()): Promise<void> {\n const tasks: Promise<void>[] = [];\n for (const binding of this.#all.values()) {\n if (binding.state === \"closed\") continue;\n if (excludedProviderNames.has(binding.name)) {\n if (this.#current.get(binding.name)?.id === binding.id) this.#current.delete(binding.name);\n binding.unsubscribeCatalog?.();\n delete binding.unsubscribeCatalog;\n binding.state = \"closed\";\n this.#all.delete(binding.id);\n continue;\n }\n this.retire(binding.id);\n binding.ownerRetained = false;\n binding.retainers = 0;\n tasks.push(this.#maybeClose(binding));\n }\n await Promise.allSettled(tasks);\n this.#current.clear();\n this.#staged.clear();\n }\n\n #activateOne(binding: FabricProviderBinding): FabricProviderBinding | undefined {\n const current = this.#current.get(binding.name);\n if (current?.id === binding.id && binding.state === \"active\") return current;\n if (current && current.id !== binding.id) this.retire(current.id);\n if (this.#staged.get(binding.name)?.id === binding.id) this.#staged.delete(binding.name);\n binding.state = \"active\";\n this.#current.set(binding.name, binding);\n this.#emit({ type: \"activated\", binding: snapshot(binding) });\n return current;\n }\n\n private async releaseOwner(id: string): Promise<void> {\n const binding = this.#all.get(id);\n if (!binding) return;\n this.retire(id);\n binding.ownerRetained = false;\n await this.#maybeClose(binding);\n }\n\n async #maybeClose(binding: FabricProviderBinding): Promise<void> {\n if (\n binding.state !== \"retiring\" ||\n binding.ownerRetained ||\n binding.retainers > 0 ||\n binding.inFlight > 0\n ) {\n return;\n }\n if (binding.closeTask) return binding.closeTask;\n binding.closeTask = (async () => {\n binding.unsubscribeCatalog?.();\n delete binding.unsubscribeCatalog;\n try {\n await binding.provider.close?.();\n } catch (error) {\n binding.closeError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n binding.state = \"closed\";\n this.#all.delete(binding.id);\n this.#emit({ type: \"closed\", binding: snapshot(binding) });\n }\n })();\n return binding.closeTask;\n }\n\n #emit(event: FabricProviderBindingEvent): void {\n for (const listener of [...this.#listeners]) {\n try {\n listener(event);\n } catch {\n // Registry listeners are observations; one listener cannot break provider ownership.\n }\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["randomUUID", "active", "matches", "value", "randomUUID", "active", "provider"]
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\", \"limit\"],\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; limit?: number; max?: 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, limit?: 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\" | \"cancelled\" | \"failed\";\n summary?: string;\n tokensBefore?: number;\n estimatedTokensAfter?: number;\n error?: 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<{ pending?: FabricCompactPendingIntent; last?: FabricCompactLastCommit }>;\n cancel(): Promise<{ cancelled: true }>;\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 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,OAAO;AAAA,EACzB,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;AAqvCvC,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/agent-dir.ts", "../../src/agents/thinking-transfer.ts", "../../src/agents/handoff.ts", "../../src/topology/peer-settle.ts"],
4
- "sourcesContent": ["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};", "import type {\n SessionEntry,\n SessionMessageEntry,\n} from \"@oh-my-pi/pi-coding-agent\";\n\n// Cross-model thinking transfer for trajectory handoffs.\n//\n// OMP replays stored thinking blocks verbatim per provider: a Codex Responses\n// reasoning item rides as a provider-shaped `thinkingSignature` blob, and the\n// OpenAI-completions transform (pi-ai) uses that blob as the *request field\n// name* when the history is handed to a different provider \u2014 landing prior\n// deliberation in a junk field while the real `reasoning_content` stays\n// empty. Signature-sensitive families (Anthropic) reject foreign signatures\n// outright. This module applies a family-aware policy to the fabric-owned\n// child session at the handoff boundary, where rewriting is safe because the\n// source session (ground truth) is never touched:\n//\n// preserved \u2014 same provider and api family: native replay already works.\n// re-signed \u2014 openai-completions reasoning targets: thinking text is kept\n// and the signature normalized to \"reasoning_content\" so preserve-thinking\n// servers (Kimi, DeepSeek, \u2026) actually receive prior reasoning.\n// stripped \u2014 everything else: thinking blocks and foreign thought\n// signatures are removed so no bogus field or invalid signature is sent;\n// a bounded, entry-id-cited digest keeps continuity instead.\n\ninterface ThinkingTransferSource {\n provider: string;\n modelId: string;\n /** pi-ai transport api of the source model, when the registry resolves it. */\n api?: string | undefined;\n}\n\ninterface ThinkingTransferTarget {\n provider: string;\n modelId: string;\n api?: string | undefined;\n reasoning?: boolean | undefined;\n /** Model replays thinking as visible text; deliberation must not leak there. */\n requiresThinkingAsText?: boolean | undefined;\n}\n\nexport interface ThinkingTransferInput {\n source?: ThinkingTransferSource;\n target: ThinkingTransferTarget;\n}\n\nexport type ThinkingTransferPolicy = \"preserved\" | \"re-signed\" | \"stripped\";\n\nexport interface ThinkingTransferReport {\n policy: ThinkingTransferPolicy;\n translated: number;\n dropped: number;\n}\n\n// Field name pi-ai emits when a thinking block's signature is exactly this\n// string (the opencode-go \"reasoning\" \u2192 \"reasoning_content\" remap proves the\n// convention): the request then carries real prior reasoning content.\nexport const REASONING_CONTENT_SIGNATURE = \"reasoning_content\";\n\nconst OPENAI_COMPLETIONS_API = \"openai-completions\";\n\nexport const thinkingTransferPolicy = (\n input: ThinkingTransferInput,\n): ThinkingTransferPolicy => {\n const { source, target } = input;\n // Same provider with equal or unknown apis: native replay is provider-shipped\n // and the default experience; only an api-proof mismatch transfers.\n if (\n source &&\n source.provider === target.provider &&\n (source.api === undefined || target.api === undefined || source.api === target.api)\n ) {\n return \"preserved\";\n }\n if (\n target.api === OPENAI_COMPLETIONS_API &&\n target.reasoning === true &&\n target.requiresThinkingAsText !== true\n ) {\n return \"re-signed\";\n }\n return \"stripped\";\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isThinkingPart = (part: unknown): part is Record<string, unknown> =>\n isRecord(part) && part.type === \"thinking\";\n\n// Clone-and-rewrite walk over assistant content parts. Also clears foreign\n// `thoughtSignature` artifacts (Google-style reasoning_details), which are as\n// provider-bound as thinking signatures. Callers own the input; the original\n// entries are never mutated.\nexport const translateThinkingForExecutor = (\n entries: SessionEntry[],\n policy: ThinkingTransferPolicy,\n): { entries: SessionEntry[]; report: ThinkingTransferReport } => {\n if (policy === \"preserved\") {\n return { entries, report: { policy, translated: 0, dropped: 0 } };\n }\n const clone = structuredClone(entries);\n let translated = 0;\n let dropped = 0;\n for (const entry of clone) {\n if (entry.type !== \"message\") continue;\n const message = (entry as SessionMessageEntry).message as {\n role?: unknown;\n content?: unknown;\n };\n if (message.role !== \"assistant\" || !Array.isArray(message.content)) continue;\n const kept: unknown[] = [];\n for (const part of message.content as unknown[]) {\n if (isRecord(part) && part.type === \"toolCall\") {\n delete part.thoughtSignature;\n kept.push(part);\n continue;\n }\n if (!isThinkingPart(part)) {\n kept.push(part);\n continue;\n }\n const text = typeof part.thinking === \"string\" ? part.thinking : \"\";\n if (policy === \"re-signed\" && part.redacted !== true && text.trim().length > 0) {\n part.thinkingSignature = REASONING_CONTENT_SIGNATURE;\n translated += 1;\n kept.push(part);\n continue;\n }\n dropped += 1;\n }\n message.content = kept;\n }\n return { entries: clone, report: { policy, translated, dropped } };\n};\n\nexport const THINKING_DIGEST_CUSTOM_TYPE = \"omp-fabric-handoff-thinking\";\n\nconst MAX_DIGEST_BLOCKS = 8;\nconst MAX_DIGEST_LINE = 80;\nconst MAX_DIGEST_BYTES = 2048;\n\nexport interface ThinkingDigest {\n content: string;\n citedBlocks: number;\n}\n\nconst firstLineOf = (text: string): string => {\n const end = text.indexOf(\"\\n\");\n return end === -1 ? text : text.slice(0, end);\n};\n\nconst truncate = (text: string, max: number): string =>\n text.length > max ? text.slice(0, max) : text;\n\nconst clipUtf8 = (text: string, maxBytes: number): string => {\n if (Buffer.byteLength(text, \"utf8\") <= maxBytes) return text;\n let out = \"\";\n let bytes = 0;\n for (const char of text) {\n const size = Buffer.byteLength(char, \"utf8\");\n if (bytes + size > maxBytes) break;\n out += char;\n bytes += size;\n }\n return out;\n};\n\n// Bounded continuity bridge for executors whose reasoning channel cannot\n// accept prior thinking: the newest few first-lines, cited by stable entry id,\n// explicitly labeled as deliberation so they read as context, not style. The\n// full scratchpad remains addressable in the source session.\nexport const buildThinkingDigest = (\n entries: SessionEntry[],\n input: ThinkingTransferInput,\n): ThinkingDigest | undefined => {\n const blocks: Array<{ entryId: string; line: string }> = [];\n for (const entry of entries) {\n if (entry.type !== \"message\") continue;\n const message = (entry as SessionMessageEntry).message as {\n role?: unknown;\n content?: unknown;\n };\n if (message.role !== \"assistant\" || !Array.isArray(message.content)) continue;\n for (const part of message.content as unknown[]) {\n if (!isThinkingPart(part)) continue;\n const text = typeof part.thinking === \"string\" ? part.thinking : \"\";\n const line = truncate(firstLineOf(text).trim(), MAX_DIGEST_LINE);\n if (line) blocks.push({ entryId: entry.id, line });\n }\n }\n if (blocks.length === 0) return undefined;\n const recent = blocks.slice(-MAX_DIGEST_BLOCKS);\n const omitted = blocks.length - recent.length;\n const sourceId = input.source\n ? `${input.source.provider}/${input.source.modelId}`\n : \"the prior model\";\n const targetId = `${input.target.provider}/${input.target.modelId}`;\n const lines = [\n \"Prewalk handoff continuity digest (deliberation, not commitments).\",\n `Thinking from ${sourceId} was not transferred: ${targetId} cannot replay it (incompatible reasoning channels). Most recent lines:`,\n ...recent.map((block) => `- [entry ${block.entryId}] ${block.line}`),\n ];\n if (omitted > 0) lines.push(`(omitted ${omitted} older thinking blocks)`);\n lines.push(\"Full thinking remains addressable in the source session by entry id.\");\n return {\n content: clipUtf8(lines.join(\"\\n\"), MAX_DIGEST_BYTES),\n citedBlocks: recent.length,\n };\n};\n", "import { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n CURRENT_SESSION_VERSION,\n SessionManager,\n type SessionEntry,\n type SessionMessageEntry,\n} from \"@oh-my-pi/pi-coding-agent\";\nimport { compileFabricSummary, rawContextTokens } from \"../compaction/hook.js\";\nimport {\n compactionRequestBoundsError,\n encodeCompactionRequest,\n} from \"../compaction/instructions.js\";\nimport type {\n AgentSessionSeed,\n AgentToolResultMessage,\n HandoffCompactionRequest,\n} from \"./types.js\";\nimport {\n buildThinkingDigest,\n THINKING_DIGEST_CUSTOM_TYPE,\n thinkingTransferPolicy,\n translateThinkingForExecutor,\n type ThinkingTransferInput,\n type ThinkingTransferReport,\n} from \"./thinking-transfer.js\";\n\ninterface HandoffSessionSource {\n getBranch(): SessionEntry[];\n getEntry(id: string): SessionEntry | undefined;\n getLeafId(): string | null;\n getSessionFile(): string | undefined;\n getSessionId(): string;\n}\n\ninterface CurrentModel {\n provider: string;\n id: string;\n}\n\ntype NativeAssistantMessage = Extract<\n SessionMessageEntry[\"message\"],\n { role: \"assistant\" }\n>;\ntype NativeAssistantEntry = SessionMessageEntry & {\n message: NativeAssistantMessage;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\ninterface HandoffCompactionOutcome {\n applied: boolean;\n reason?: string;\n sections?: string[];\n tokensBefore?: number;\n firstKeptEntryId?: string;\n}\n\n// Validate the model-facing agents.handoff `compact` option against the same\n// bounds as compact.request. Called both when the request is scheduled (inside\n// the guest) and when the boundary runner replays it.\nexport const checkedHandoffCompaction = (\n value: unknown,\n): HandoffCompactionRequest | undefined => {\n if (value === undefined || value === false) return undefined;\n const input = value === true ? {} : value;\n if (!isRecord(input)) {\n throw new Error(\n \"Invalid agents.handoff compact arguments: compact must be true or an object with instructions/preserve\",\n );\n }\n if (input.instructions !== undefined && typeof input.instructions !== \"string\") {\n throw new Error(\"Invalid agents.handoff compact arguments: instructions must be a string\");\n }\n if (\n input.preserve !== undefined &&\n (!Array.isArray(input.preserve) || input.preserve.some((item) => typeof item !== \"string\"))\n ) {\n throw new Error(\n \"Invalid agents.handoff compact arguments: preserve must be an array of strings\",\n );\n }\n const request: HandoffCompactionRequest = {\n ...(typeof input.instructions === \"string\" ? { instructions: input.instructions } : {}),\n ...(input.preserve !== undefined ? { preserve: input.preserve as string[] } : {}),\n };\n const boundsError = compactionRequestBoundsError(request);\n if (boundsError) {\n throw new Error(`Invalid agents.handoff compact arguments: ${boundsError.message}`);\n }\n return request;\n};\n\nconst isToolCall = (value: unknown): value is {\n type: \"toolCall\";\n id: string;\n name: string;\n arguments: Record<string, unknown>;\n} =>\n isRecord(value) &&\n value.type === \"toolCall\" &&\n typeof value.id === \"string\" &&\n typeof value.name === \"string\" &&\n isRecord(value.arguments);\n\nconst activeFabricTurn = (\n source: HandoffSessionSource,\n outerToolCallId: string,\n): NativeAssistantEntry => {\n const leafId = source.getLeafId();\n const entry = leafId ? source.getEntry(leafId) : undefined;\n if (entry?.type !== \"message\" || entry.message.role !== \"assistant\") {\n throw new Error(\n \"Trajectory handoff requires the active fabric_exec assistant turn to be the session leaf\",\n );\n }\n const content = Array.isArray(entry.message.content) ? entry.message.content : [];\n const toolCalls = content.filter(isToolCall);\n if (!toolCalls.some((call) => call.id === outerToolCallId)) {\n throw new Error(\n \"Trajectory handoff could not find the active fabric_exec assistant turn in the OMP session\",\n );\n }\n if (toolCalls.length !== 1 || toolCalls[0]?.name !== \"fabric_exec\") {\n throw new Error(\n \"Trajectory handoff requires fabric_exec to be the only top-level tool call in its assistant turn\",\n );\n }\n return entry as NativeAssistantEntry;\n};\n\nexport const snapshotHandoffSession = (\n source: HandoffSessionSource,\n currentModel: CurrentModel | undefined,\n outerToolResult: AgentToolResultMessage,\n outerToolCallId: string,\n): AgentSessionSeed => {\n if (\n outerToolResult.toolCallId !== outerToolCallId ||\n outerToolResult.toolName !== \"fabric_exec\"\n ) {\n throw new Error(\"Trajectory handoff requires the finalized outer fabric_exec result\");\n }\n const active = activeFabricTurn(source, outerToolCallId);\n const sourceSessionFile = source.getSessionFile();\n const branch = source.getBranch();\n let model = currentModel\n ? { provider: currentModel.provider, modelId: currentModel.id }\n : undefined;\n let thinkingLevel: string | undefined;\n for (let index = branch.length - 1; index >= 0; index--) {\n const entry = branch[index];\n if (!thinkingLevel && entry?.type === \"thinking_level_change\") {\n thinkingLevel = entry.thinkingLevel ?? undefined;\n }\n if (!model && entry?.type === \"model_change\") {\n const separator = entry.model.indexOf(\"/\");\n if (separator > 0 && separator < entry.model.length - 1) {\n model = { provider: entry.model.slice(0, separator), modelId: entry.model.slice(separator + 1) };\n }\n }\n if (model && thinkingLevel) break;\n }\n return {\n sourceSessionId: source.getSessionId(),\n ...(sourceSessionFile ? { sourceSessionFile } : {}),\n sourceBranchLeafId: active.id,\n ...(!sourceSessionFile ? { sourceBranch: structuredClone(branch) } : {}),\n ...(model ? { sourceModel: model } : {}),\n ...(thinkingLevel ? { sourceThinkingLevel: thinkingLevel } : {}),\n outerToolResult: structuredClone(outerToolResult),\n };\n};\n\nconst materializeBranch = async (\n seed: AgentSessionSeed,\n cwd: string,\n directory: string,\n): Promise<SessionManager> => {\n if (!seed.sourceBranch) {\n throw new Error(\"In-memory trajectory handoff is missing its source branch\");\n }\n const id = randomUUID();\n const sessionFile = path.join(directory, `handoff-${id}.jsonl`);\n const header = {\n type: \"session\" as const,\n version: CURRENT_SESSION_VERSION,\n id,\n timestamp: new Date().toISOString(),\n cwd,\n ...(seed.sourceSessionFile ? { parentSession: seed.sourceSessionFile } : {}),\n };\n fs.writeFileSync(\n sessionFile,\n `${[header, ...seed.sourceBranch].map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`,\n { encoding: \"utf8\", mode: 0o600, flag: \"wx\" },\n );\n return SessionManager.open(sessionFile, directory, undefined, { initialCwd: cwd });\n};\n\nconst forkBranch = async (\n seed: AgentSessionSeed,\n cwd: string,\n directory: string,\n): Promise<SessionManager> => {\n if (!seed.sourceSessionFile) return materializeBranch(seed, cwd, directory);\n const fork = await SessionManager.open(seed.sourceSessionFile, directory, undefined, { initialCwd: cwd });\n if (!fork.getEntry(seed.sourceBranchLeafId)) {\n throw new Error(\n `Trajectory handoff branch point ${seed.sourceBranchLeafId} is missing from the persisted OMP session`,\n );\n }\n fork.createBranchedSession(seed.sourceBranchLeafId);\n const sessionFile = fork.getSessionFile();\n if (!sessionFile) {\n throw new Error(\"Trajectory handoff could not create a persisted OMP session branch\");\n }\n return SessionManager.open(sessionFile, directory, undefined, { initialCwd: cwd });\n};\n\n// File-backed read of the exact branch prefix, cloned so transfer translation\n// never mutates the source session's live entries. Used instead of\n// forkBranch when the executor's reasoning channel differs: createBranchedSession\n// copies raw lines and cannot rewrite foreign thinking signatures.\nconst persistedBranch = async (\n seed: AgentSessionSeed,\n cwd: string,\n directory: string,\n): Promise<SessionEntry[]> => {\n if (!seed.sourceSessionFile) {\n throw new Error(\"Persisted trajectory handoff is missing its source session file\");\n }\n const source = await SessionManager.open(seed.sourceSessionFile, directory, undefined, { initialCwd: cwd });\n if (!source.getEntry(seed.sourceBranchLeafId)) {\n throw new Error(\n `Trajectory handoff branch point ${seed.sourceBranchLeafId} is missing from the persisted OMP session`,\n );\n }\n return structuredClone(source.getBranch(seed.sourceBranchLeafId));\n};\n\nconst synchronizeSourceSettings = (\n session: SessionManager,\n seed: AgentSessionSeed,\n): void => {\n const context = session.buildSessionContext();\n const currentModel = context.models.default;\n const sourceModel = seed.sourceModel\n ? `${seed.sourceModel.provider}/${seed.sourceModel.modelId}`\n : undefined;\n if (sourceModel && currentModel !== sourceModel) session.appendModelChange(sourceModel);\n if (seed.sourceThinkingLevel && context.thinkingLevel !== seed.sourceThinkingLevel) {\n session.appendThinkingLevelChange(seed.sourceThinkingLevel);\n }\n};\n\nexport const writeHandoffSession = async (\n seed: AgentSessionSeed,\n cwd: string,\n directory: string,\n transfer?: ThinkingTransferInput,\n compaction?: HandoffCompactionRequest,\n): Promise<string> => {\n fs.mkdirSync(directory, { recursive: true, mode: 0o700 });\n const policy = transfer ? thinkingTransferPolicy(transfer) : \"preserved\";\n let session: SessionManager;\n let report: ThinkingTransferReport | undefined;\n let digest: { content: string; citedBlocks: number } | undefined;\n if (!transfer || policy === \"preserved\") {\n session = await forkBranch(seed, cwd, directory);\n } else {\n const rawBranch = seed.sourceSessionFile\n ? await persistedBranch(seed, cwd, directory)\n : structuredClone(seed.sourceBranch ?? (() => {\n throw new Error(\"Trajectory handoff transfer is missing its source branch\");\n })());\n if (policy === \"stripped\") digest = buildThinkingDigest(rawBranch, transfer);\n const translated = translateThinkingForExecutor(rawBranch, policy);\n report = translated.report;\n session = await materializeBranch({ ...seed, sourceBranch: translated.entries }, cwd, directory);\n }\n // Append the compaction entry before settings sync and the outer tool result\n // so the executor's context opens with the deterministic summary, followed\n // by the kept tail, then the boundary artifacts appended afterwards. The\n // file retains the full raw branch, mirroring OMP's append-only compaction.\n let compactionOutcome: HandoffCompactionOutcome | undefined;\n if (compaction) {\n const branchEntries = session.getBranch();\n const customInstructions = compaction.preserve\n ? encodeCompactionRequest({\n ...(compaction.instructions !== undefined\n ? { instructions: compaction.instructions }\n : {}),\n preserve: compaction.preserve,\n })\n : compaction.instructions;\n const tokensBefore = rawContextTokens(branchEntries);\n const compiled = compileFabricSummary(branchEntries, tokensBefore, undefined, customInstructions);\n if (\"cancel\" in compiled) {\n compactionOutcome = { applied: false, reason: compiled.reason };\n } else {\n session.appendCompaction(\n compiled.compaction.summary,\n undefined,\n compiled.compaction.firstKeptEntryId,\n tokensBefore,\n compiled.compaction.details\n ? { details: compiled.compaction.details, fromExtension: true }\n : { fromExtension: true },\n );\n compactionOutcome = {\n applied: true,\n sections: compiled.compaction.details?.sections ?? [],\n tokensBefore,\n firstKeptEntryId: compiled.compaction.firstKeptEntryId,\n };\n }\n }\n synchronizeSourceSettings(session, seed);\n session.appendMessage(seed.outerToolResult);\n if (digest) {\n session.appendCustomMessageEntry(THINKING_DIGEST_CUSTOM_TYPE, digest.content, false, {\n policy,\n citedBlocks: digest.citedBlocks,\n });\n }\n session.appendCustomEntry(\"omp-fabric-handoff\", {\n sourceSessionId: seed.sourceSessionId,\n boundary: \"fabric_exec_end\",\n ...(compactionOutcome\n ? {\n compaction: compactionOutcome.applied\n ? {\n applied: true,\n sections: compactionOutcome.sections,\n tokensBefore: compactionOutcome.tokensBefore,\n firstKeptEntryId: compactionOutcome.firstKeptEntryId,\n }\n : { applied: false, reason: compactionOutcome.reason },\n }\n : {}),\n ...(transfer && report\n ? {\n thinkingTransfer: {\n policy: report.policy,\n translated: report.translated,\n dropped: report.dropped,\n target: `${transfer.target.provider}/${transfer.target.modelId}`,\n },\n }\n : {}),\n });\n const sessionFile = session.getSessionFile();\n if (!sessionFile) throw new Error(\"Trajectory handoff did not produce an OMP session file\");\n fs.chmodSync(sessionFile, 0o600);\n return sessionFile;\n};\n", "import type { FabricPeerInfo } from \"./types.js\";\n\n/** Quiet window after a peer's last observed activity before it counts as settled. */\nconst DEFAULT_PEER_SETTLED_FOR_MS = 3_000;\nconst PEER_SETTLE_POLL_MS = 500;\n\n/**\n * Derive a Linear-style label prefix from a project path's basename:\n * \"pi-queue-steer\" -> \"PQS\", \"fabric\" -> \"FAB\". Falls back to \"P\".\n */\nexport const peerLabelPrefix = (cwd: string | undefined): string => {\n\tconst base = cwd?.split(/[\\\\/]/).filter(Boolean).at(-1) ?? \"\";\n\tconst words = base.split(/[^A-Za-z0-9]+/).filter(Boolean);\n\tif (words.length === 0) return \"P\";\n\t// Single-word projects borrow the first letters (\"fabric\" -> \"FAB\"),\n\t// multi-word projects take word initials (\"pi-queue-steer\" -> \"PQS\").\n\tif (words.length === 1) return words[0]!.slice(0, 3).toUpperCase();\n\treturn words\n\t\t.slice(0, 4)\n\t\t.map((word) => word[0]!.toUpperCase())\n\t\t.join(\"\");\n};\n\n/** Snapshot of one root peer session for pickers and status lines. */\nexport interface FabricPeerCard {\n\tid: string;\n\tlabel: string;\n\tstatus: \"idle\" | \"running\";\n\tmodel?: string;\n\tcwd?: string;\n\tstartedAt: number;\n\tupdatedAt: number;\n\tpendingMessages: boolean;\n}\n\n/** Labels are chronological, so creation order is simply label minting order. */\nexport const buildPeerCards = (peers: readonly FabricPeerInfo[]): FabricPeerCard[] =>\n\t[...peers]\n\t\t.sort((left, right) => left.startedAt - right.startedAt || left.id.localeCompare(right.id))\n\t\t.map((peer) => ({\n\t\t\tid: peer.id,\n\t\t\tlabel: peer.label ?? peer.name,\n\t\t\tstatus: peer.status,\n\t\t\t...(peer.model ? { model: peer.model } : {}),\n\t\t\t...(peer.cwd ? { cwd: peer.cwd } : {}),\n\t\t\tstartedAt: peer.startedAt,\n\t\t\tupdatedAt: peer.updatedAt,\n\t\t\tpendingMessages: peer.pendingMessages,\n\t\t}));\n\ninterface PeerSettleProgress {\n\twaiting: Array<{ label: string; status: \"idle\" | \"running\" }>;\n}\n\nexport type PeerSettleResult = { ok: true } | { ok: false; error: string };\n\nexport interface AwaitPeerSettleOptions {\n\t/** Fresh peer snapshot source (typically FabricRuntimeState.peerInfos()). */\n\tpoll: () => FabricPeerInfo[];\n\t/** Peer label (case-insensitive) or exact participant id. Omitted means all peers. */\n\tselector?: string;\n\tsettledForMs?: number;\n\tpollMs?: number;\n\tnow?: () => number;\n\tsignal?: AbortSignal;\n\tonUpdate?: (progress: PeerSettleProgress) => void;\n}\n\nconst matchesSelector = (peer: FabricPeerInfo, selector: string): boolean => {\n\tconst target = selector.trim().toLowerCase();\n\tif (!target) return false;\n\treturn (\n\t\tpeer.id.toLowerCase() === target ||\n\t\t(peer.label ?? \"\").toLowerCase() === target ||\n\t\tpeer.name.toLowerCase() === target\n\t);\n};\n\ninterface WatchedPeer {\n\tid: string;\n\tlabel: string;\n\trunning: boolean;\n\t/** Last time the peer was observed running; undefined when quiet since arming. */\n\tlastRunningAt: number | undefined;\n\tsettled: boolean;\n}\n\n/**\n * Wait until every watched peer has settled: only runs that started after\n * arming delay it (an idle-at-arm peer satisfies once the quiet window\n * passes), and a peer vanishing from the mesh counts as settled since it can\n * no longer conflict.\n */\nexport const awaitPeerSettle = (options: AwaitPeerSettleOptions): Promise<PeerSettleResult> => {\n\tconst now = options.now ?? (() => Date.now());\n\tconst settledFor = Math.max(0, options.settledForMs ?? DEFAULT_PEER_SETTLED_FOR_MS);\n\tconst pollMs = Math.max(10, options.pollMs ?? PEER_SETTLE_POLL_MS);\n\tconst armedAt = now();\n\tconst initial = options.poll();\n\tconst targets =\n\t\toptions.selector !== undefined\n\t\t\t? initial.filter((peer) => matchesSelector(peer, options.selector ?? \"\"))\n\t\t\t: [...initial];\n\tif (options.selector !== undefined && targets.length === 0) {\n\t\treturn Promise.resolve({\n\t\t\tok: false,\n\t\t\terror: `No Fabric peer matches \"${options.selector}\" on this project mesh`,\n\t\t});\n\t}\n\tif (targets.length === 0) return Promise.resolve({ ok: true });\n\n\tconst watched = new Map<string, WatchedPeer>();\n\tfor (const peer of targets) {\n\t\twatched.set(peer.id, {\n\t\t\tid: peer.id,\n\t\t\tlabel: peer.label ?? peer.name,\n\t\t\trunning: peer.status === \"running\",\n\t\t\tlastRunningAt: peer.status === \"running\" ? armedAt : undefined,\n\t\t\tsettled: false,\n\t\t});\n\t}\n\n\treturn new Promise<PeerSettleResult>((resolve) => {\n\t\tlet timer: ReturnType<typeof setInterval> | undefined;\n\t\tlet done = false;\n\t\tconst finish = (result: PeerSettleResult): void => {\n\t\t\tif (done) return;\n\t\t\tdone = true;\n\t\t\tif (timer) clearInterval(timer);\n\t\t\toptions.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve(result);\n\t\t};\n\t\tconst onAbort = (): void => finish({ ok: false, error: \"cancelled\" });\n\t\tconst tick = (): void => {\n\t\t\tconst snapshot = options.poll();\n\t\t\tconst byId = new Map(snapshot.map((peer) => [peer.id, peer] as const));\n\t\t\tconst current = now();\n\t\t\tfor (const entry of watched.values()) {\n\t\t\t\tif (entry.settled) continue;\n\t\t\t\tconst peer = byId.get(entry.id);\n\t\t\t\tif (!peer) {\n\t\t\t\t\tentry.settled = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tentry.label = peer.label ?? peer.name;\n\t\t\t\tconst running = peer.status === \"running\";\n\t\t\t\tif (running) {\n\t\t\t\t\tentry.lastRunningAt = current;\n\t\t\t\t\tentry.running = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tentry.running = false;\n\t\t\t\tconst quietSince = entry.lastRunningAt ?? armedAt;\n\t\t\t\tif (current - quietSince >= settledFor) entry.settled = true;\n\t\t\t}\n\t\t\tconst waiting = [...watched.values()]\n\t\t\t\t.filter((entry) => !entry.settled)\n\t\t\t\t.map((entry) => ({ label: entry.label, status: entry.running ? \"running\" : \"idle\" }) as const);\n\t\t\tif (waiting.length === 0) {\n\t\t\t\toptions.onUpdate?.({ waiting });\n\t\t\t\tfinish({ ok: true });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toptions.onUpdate?.({ waiting });\n\t\t};\n\t\tif (options.signal) {\n\t\t\tif (options.signal.aborted) {\n\t\t\t\tfinish({ ok: false, error: \"cancelled\" });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toptions.signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t}\n\t\ttimer = setInterval(tick, pollMs);\n\t\ttick();\n\t});\n};\n"],
5
- "mappings": "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",
6
- "names": ["path", "isRecord", "path"]
7
- }