pi-fabric 0.81.0 → 0.82.0

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.
@@ -1085,6 +1085,35 @@ var ActionRegistry = class {
1085
1085
  );
1086
1086
  traceOperation?.prepared(catalog.args);
1087
1087
  if (catalog.invalid) {
1088
+ const declaredSchema = action.inputSchema;
1089
+ const declaredProperties = typeof declaredSchema === "object" && declaredSchema !== null && !Array.isArray(declaredSchema) && typeof declaredSchema.properties === "object" && declaredSchema.properties !== null ? declaredSchema.properties : void 0;
1090
+ const attemptArgs = {};
1091
+ for (const [key, value2] of Object.entries(catalog.args)) {
1092
+ const property = declaredProperties ? declaredProperties[key] : void 0;
1093
+ const declaredEnum = typeof property === "object" && property !== null ? property.enum : void 0;
1094
+ if (!Array.isArray(declaredEnum)) continue;
1095
+ if (typeof value2 !== "string" && typeof value2 !== "number" && typeof value2 !== "boolean") {
1096
+ continue;
1097
+ }
1098
+ if (String(value2).length > MAX_AUDIT_VALUE_CHARS) continue;
1099
+ if (!declaredEnum.includes(value2)) continue;
1100
+ attemptArgs[key] = value2;
1101
+ }
1102
+ if (Object.keys(attemptArgs).length > 0) {
1103
+ const attempt = {
1104
+ ref,
1105
+ nestedToolCallId: `${NESTED_TOOL_CALL_ID_PREFIX}${randomUUID2()}`,
1106
+ startedAt: Date.now(),
1107
+ tool: action.name,
1108
+ provider: action.provider,
1109
+ args: attemptArgs,
1110
+ success: false,
1111
+ error: `Invalid arguments for ${ref}: ${catalog.invalid}`,
1112
+ endedAt: Date.now(),
1113
+ ...resolved.repairedFrom !== void 0 ? { repairedFrom: resolved.repairedFrom } : {}
1114
+ };
1115
+ context.audits.push(attempt);
1116
+ }
1088
1117
  throw new FabricTraceSafeError(`Invalid arguments for ${ref}: ${catalog.invalid}`);
1089
1118
  }
1090
1119
  failureStage = "approve";
@@ -1561,4 +1590,4 @@ export {
1561
1590
  NESTED_TOOL_CALL_ID_PREFIX,
1562
1591
  ActionRegistry
1563
1592
  };
1564
- //# sourceMappingURL=chunk-JVMF4CLN.js.map
1593
+ //# sourceMappingURL=chunk-HASOI3ST.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 { Value } from \"typebox/value\";\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 pi-fabric prepends to every nested tool-call id it generates inside a\n * fabric_exec run (one per pi., 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 === \"pi.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 if (Value.Check(schema, value)) return undefined;\n const messages = [...Value.Errors(schema, value)]\n .slice(0, 5)\n .map((error) => {\n // Prefix nested failures with their property path.\n const at = (error as { path?: unknown }).path;\n return typeof at === \"string\" && at !== \"\" && at !== \"/\"\n ? `${at}: ${error.message}`\n : 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: \"pi-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 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\", \"hydrate\"],\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", "randomUUID", "active", "provider"]
4
+ "sourcesContent": ["import { randomUUID } from \"node:crypto\";\nimport { Value } from \"typebox/value\";\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 pi-fabric prepends to every nested tool-call id it generates inside a\n * fabric_exec run (one per pi., 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 === \"pi.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 if (Value.Check(schema, value)) return undefined;\n const messages = [...Value.Errors(schema, value)]\n .slice(0, 5)\n .map((error) => {\n // Prefix nested failures with their property path.\n const at = (error as { path?: unknown }).path;\n return typeof at === \"string\" && at !== \"\" && at !== \"/\"\n ? `${at}: ${error.message}`\n : 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: \"pi-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\", \"hydrate\"],\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
7
  }
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-SOBEXOWK.js";
7
7
  import {
8
8
  NESTED_TOOL_CALL_ID_PREFIX
9
- } from "./chunk-JVMF4CLN.js";
9
+ } from "./chunk-HASOI3ST.js";
10
10
  import {
11
11
  THINKING_DIGEST_CUSTOM_TYPE,
12
12
  buildThinkingDigest,
@@ -2447,4 +2447,4 @@ export {
2447
2447
  resolveFabricIdentity,
2448
2448
  MainAgentController
2449
2449
  };
2450
- //# sourceMappingURL=chunk-J2C2XS2I.js.map
2450
+ //# sourceMappingURL=chunk-JMHSXVO2.js.map
@@ -30,7 +30,7 @@ import {
30
30
  repairFabricGuestCode,
31
31
  resolveFabricIdentity,
32
32
  runFabricHandoffAtBoundary
33
- } from "./chunk-J2C2XS2I.js";
33
+ } from "./chunk-JMHSXVO2.js";
34
34
  import {
35
35
  AgentTranscriptReader,
36
36
  MAX_WRITE_DIFF_BYTES,
@@ -48,7 +48,7 @@ import {
48
48
  repairActionName,
49
49
  setActiveCompiledSurface,
50
50
  setActiveRepairCompiler
51
- } from "./chunk-JVMF4CLN.js";
51
+ } from "./chunk-HASOI3ST.js";
52
52
  import {
53
53
  formatFabricEffectConflict
54
54
  } from "./chunk-LMAVZN7J.js";
@@ -12752,4 +12752,4 @@ var deepAssign = (target, source) => {
12752
12752
  export {
12753
12753
  FabricRuntimeState
12754
12754
  };
12755
- //# sourceMappingURL=fabric-runtime-state-2PYHSF6C.js.map
12755
+ //# sourceMappingURL=fabric-runtime-state-JSNEF5GW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-registry.d.ts","sourceRoot":"","sources":["../../src/core/action-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action-registry.d.ts","sourceRoot":"","sources":["../../src/core/action-registry.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ActionRegistry,
3
3
  NESTED_TOOL_CALL_ID_PREFIX
4
- } from "../chunks/chunk-JVMF4CLN.js";
4
+ } from "../chunks/chunk-HASOI3ST.js";
5
5
  import "../chunks/chunk-LMAVZN7J.js";
6
6
  import "../chunks/chunk-7TB7NXSL.js";
7
7
  import "../chunks/chunk-JNACUKKJ.js";
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  resolveFabricIdentity,
20
20
  settleInPlacePrewalk,
21
21
  withTrajectoryRearmDirective
22
- } from "./chunks/chunk-J2C2XS2I.js";
22
+ } from "./chunks/chunk-JMHSXVO2.js";
23
23
  import {
24
24
  activeStatuses,
25
25
  arcItemStyled,
@@ -78,7 +78,7 @@ import {
78
78
  NESTED_TOOL_CALL_ID_PREFIX,
79
79
  getActiveRepairCompiler,
80
80
  setActiveCompiledSurface
81
- } from "./chunks/chunk-JVMF4CLN.js";
81
+ } from "./chunks/chunk-HASOI3ST.js";
82
82
  import "./chunks/chunk-LMAVZN7J.js";
83
83
  import "./chunks/chunk-7TB7NXSL.js";
84
84
  import {
@@ -3598,7 +3598,7 @@ var FabricState = class {
3598
3598
  return activation;
3599
3599
  }
3600
3600
  async #createRuntime() {
3601
- const module = await (this.#options.runtimeLoader?.() ?? import("./chunks/fabric-runtime-state-2PYHSF6C.js"));
3601
+ const module = await (this.#options.runtimeLoader?.() ?? import("./chunks/fabric-runtime-state-JSNEF5GW.js"));
3602
3602
  return new module.FabricRuntimeState(
3603
3603
  this.pi,
3604
3604
  this.capturedTools,
package/docs/entropy.md CHANGED
@@ -120,7 +120,14 @@ reviewable, evidence-carrying proposals with fixed thresholds:
120
120
  converged surface stops contesting its own tightness every turn. Later
121
121
  compiles may tighten beneath the floor but never widen past it; widening
122
122
  resets only when the base schema drifts (the digest proof drops the
123
- overlay) or through review.
123
+ overlay) or through review. Validate-rejected attempts record as
124
+ failed-call audits carrying only values the live schema's own enums
125
+ declare, so nothing a validator refused enters the durable record: the
126
+ refused value is already the author's public vocabulary, and typos or
127
+ out-of-domain payloads drop at the boundary. The attempt stays pre-birth
128
+ while the overlay holds, and the reset re-derives with it included, so a
129
+ refused in-domain value un-locks at the first drift and survives in the
130
+ corpus.
124
131
  - `declare-enum`: the same observation shape on an open parameter (a free
125
132
  string or number, an undeclared key, or a ref absent from the surface
126
133
  entirely) is evidence about the author's domain, not the compiler's to
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-fabric",
3
- "version": "0.81.0",
3
+ "version": "0.82.0",
4
4
  "description": "A programmable tool and agent runtime for Pi",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",