pi-fabric 0.61.0 → 0.61.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,9 @@ import {
2
2
  runAbortable,
3
3
  settleWithin
4
4
  } from "./chunk-7TB7NXSL.js";
5
+ import {
6
+ formatFabricEffectConflict
7
+ } from "./chunk-LMAVZN7J.js";
5
8
  import {
6
9
  FABRIC_NESTED_TOOL_CALL_ID_PREFIX
7
10
  } from "./chunk-FPHSJZZE.js";
@@ -821,7 +824,11 @@ var ActionRegistry = class {
821
824
  if (effectConflicts.length > 0 && context.effectPolicy === "strict") {
822
825
  failureStage = "guard";
823
826
  throw new FabricTraceSafeError(
824
- `Fabric effect conflict for ${ref}: ${effectConflicts.map((conflict) => `${conflict.withRef} [${conflict.resources.join(", ")}]`).join("; ")}`
827
+ `Fabric effect conflict for ${ref}: ${effectConflicts.map((conflict) => formatFabricEffectConflict(
828
+ conflict.withRef,
829
+ conflict.resources,
830
+ conflict.reason
831
+ )).join("; ")}`
825
832
  );
826
833
  }
827
834
  const argsPreview = previewArgs(ref, preparedArgs);
@@ -1090,4 +1097,4 @@ export {
1090
1097
  NESTED_TOOL_CALL_ID_PREFIX,
1091
1098
  ActionRegistry
1092
1099
  };
1093
- //# sourceMappingURL=chunk-6YPMW7CD.js.map
1100
+ //# sourceMappingURL=chunk-DY2S56WR.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/core/action-registry.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 { formatFabricEffectConflict } from \"./effect-conflict.js\";\nimport { stableJsonHash } from \"./stable-hash.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}\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 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\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\n constructor(readonly toolResultProxy?: FabricNestedToolResultProxy) {}\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 tools.set(toolName, { name: toolName, inputSchema: descriptor.inputSchema });\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: descriptor.inputSchema,\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 async list(\n request: FabricProviderListRequest & { provider?: string },\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 .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.map((descriptor) => resolveDescriptor(provider, descriptor));\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 .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 descriptor = await provider.describe(actionName, context);\n if (!descriptor) throw new FabricResolutionError(`Unknown Fabric action: ${ref}`);\n const action = resolveDescriptor(provider, descriptor);\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 the capability advisory prints in its Next:\n // line and what typed calls pragmatically use): walk every provider for\n // a unique action-name match.\n const matches: ResolvedFabricAction[] = [];\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 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 throw new FabricResolutionError(`Unknown Fabric action: ${ref}`);\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 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 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 preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(actionName, args, context),\n )\n : 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 invalid = validationMessage(action.inputSchema, preparedArgs);\n if (invalid) throw new Error(`Invalid arguments for ${ref}: ${invalid}`);\n const acquired = await runAbortable(context.signal, () =>\n provider.acquire!(actionName, preparedArgs, 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 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 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 preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(actionName, args, context),\n )\n : 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 traceOperation?.prepared(preparedArgs);\n\n failureStage = \"validate\";\n const invalid = validationMessage(action.inputSchema, preparedArgs);\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 (invalid) throw new FabricTraceSafeError(`Invalid arguments for ${ref}: ${invalid}`);\n\n failureStage = \"approve\";\n await runAbortable(context.signal, () => context.approve(action, preparedArgs));\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, preparedArgs);\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 };\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 providerValue: unknown;\n try {\n providerValue = await runAbortable(context.signal, () =>\n provider.invoke(actionName, preparedArgs, {\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 } finally {\n this.#activeEffects.delete(nestedToolCallId);\n }\n const value = this.toolResultProxy\n ? await runAbortable(context.signal, () => this.toolResultProxy!.proxy({\n action,\n args: preparedArgs,\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 async endInvocation(parentToolCallId: string, timeoutMs = 1_000): Promise<void> {\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 #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", "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", "matches", "randomUUID", "provider"]
7
+ }
@@ -0,0 +1,8 @@
1
+ // src/core/effect-conflict.ts
2
+ var reasonText = (reason) => reason === "unknown_resource" ? "unknown resource footprint; declare resources and ordering" : "shared noncommutative resource";
3
+ var formatFabricEffectConflict = (target, resources, reason) => `${target} [${resources.join(", ")}] (${reasonText(reason)})`;
4
+
5
+ export {
6
+ formatFabricEffectConflict
7
+ };
8
+ //# sourceMappingURL=chunk-LMAVZN7J.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/core/effect-conflict.ts"],
4
+ "sourcesContent": ["export type FabricEffectConflictReason = \"shared_resource\" | \"unknown_resource\";\n\nconst reasonText = (reason: FabricEffectConflictReason): string =>\n reason === \"unknown_resource\"\n ? \"unknown resource footprint; declare resources and ordering\"\n : \"shared noncommutative resource\";\n\nexport const formatFabricEffectConflict = (\n target: string,\n resources: readonly string[],\n reason: FabricEffectConflictReason,\n): string => `${target} [${resources.join(\", \")}] (${reasonText(reason)})`;\n"],
5
+ "mappings": ";AAEA,IAAM,aAAa,CAAC,WAClB,WAAW,qBACP,+DACA;AAEC,IAAM,6BAA6B,CACxC,QACA,WACA,WACW,GAAG,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC,MAAM,WAAW,MAAM,CAAC;",
6
+ "names": []
7
+ }
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-7B55UIZL.js";
16
16
  import {
17
17
  NESTED_TOOL_CALL_ID_PREFIX
18
- } from "./chunk-6YPMW7CD.js";
18
+ } from "./chunk-DY2S56WR.js";
19
19
  import {
20
20
  runAbortable,
21
21
  throwIfAborted
@@ -1855,7 +1855,12 @@ var createProviderComponent = (spec) => {
1855
1855
  }
1856
1856
  context.defer(
1857
1857
  () => spec.unmounted?.(provider),
1858
- `provider-component:${spec.provider}:holder`
1858
+ {
1859
+ label: `provider-component:${spec.provider}:holder`,
1860
+ kind: "transactional",
1861
+ resources: [`fabric:provider:${spec.provider}:holder`],
1862
+ ordering: "ordered"
1863
+ }
1859
1864
  );
1860
1865
  }
1861
1866
  await spec.start?.(provider);
@@ -2351,4 +2356,4 @@ export {
2351
2356
  resolveFabricIdentity,
2352
2357
  MainAgentController
2353
2358
  };
2354
- //# sourceMappingURL=chunk-XJIAE7IO.js.map
2359
+ //# sourceMappingURL=chunk-ZUQSDM5A.js.map