pi-fabric 0.69.0 → 0.70.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.
@@ -21,6 +21,126 @@ import {
21
21
  import { randomUUID as randomUUID2 } from "node:crypto";
22
22
  import { Value } from "typebox/value";
23
23
 
24
+ // src/core/action-repair.ts
25
+ var ACTION_SYNONYM_CLASSES = [
26
+ // memory.recall and its spilled search verbs.
27
+ ["recall", "search", "find", "query", "lookup", "grep", "scan", "locate"],
28
+ // memory.expand / read-one-entry verbs.
29
+ ["expand", "get", "read", "fetch", "load", "view", "show", "hydrate"],
30
+ // memory.sessions and list-style catalog reads.
31
+ ["sessions", "list", "ls", "enumerate", "index"],
32
+ // state.transition / mesh.put write verbs.
33
+ ["transition", "write", "put", "set", "save", "update", "store", "upsert", "append", "post"],
34
+ // agents.create family.
35
+ ["create", "spawn", "new", "add", "make", "register"],
36
+ // mesh.publish family ("post" deliberately also sits in the write class,
37
+ // so mesh.post stays ambiguous between publish and put).
38
+ ["publish", "send", "emit", "notify"],
39
+ // teardown verbs.
40
+ ["delete", "remove", "rm", "destroy", "drop", "clear"],
41
+ // components.reload family.
42
+ ["reload", "restart", "refresh", "rebuild", "reboot"],
43
+ // status/introspection reads ("get" is deliberately shared with the
44
+ // expand class: memory.get expands an entry, components.get is status).
45
+ ["status", "info", "inspect", "health", "describe", "get"],
46
+ // execution verbs.
47
+ ["run", "execute", "exec", "invoke", "call", "start", "go"],
48
+ // cancellation verbs.
49
+ ["cancel", "abort", "stop", "kill", "terminate"],
50
+ // verification verbs.
51
+ ["verify", "check", "validate", "assert", "confirm", "certify"],
52
+ // timeline reads.
53
+ ["history", "log", "journal", "events", "timeline", "transitions"],
54
+ // subscription verbs.
55
+ ["subscribe", "watch", "listen", "observe", "follow"],
56
+ // compact.request family.
57
+ ["request", "begin", "initiate", "trigger", "schedule"],
58
+ // schema.commit family.
59
+ ["commit", "apply", "finalize"],
60
+ // agents messaging pair (both declare, so spilled verbs here stay
61
+ // ambiguous and the failure tier enumerates ask vs tell).
62
+ ["ask", "tell", "say", "chat"]
63
+ ];
64
+ var normalizeActionForm = (name) => name.toLowerCase().replace(/[^a-z0-9]/g, "");
65
+ var ACTION_CLASS_FORMS = ACTION_SYNONYM_CLASSES.map(
66
+ (cls) => new Set(cls.map(normalizeActionForm))
67
+ );
68
+ var camelTokens = (name) => name.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter((token) => token.length > 0);
69
+ var singularActionForm = (form) => form.length > 3 && form.endsWith("s") ? form.slice(0, -1) : form;
70
+ var levenshtein = (left, right) => {
71
+ if (left === right) return 0;
72
+ if (left.length === 0) return right.length;
73
+ if (right.length === 0) return left.length;
74
+ let previous = Array.from({ length: right.length + 1 }, (_, index) => index);
75
+ for (let i = 1; i <= left.length; i++) {
76
+ const current = [i];
77
+ for (let j = 1; j <= right.length; j++) {
78
+ current.push(
79
+ Math.min(
80
+ previous[j] + 1,
81
+ current[j - 1] + 1,
82
+ previous[j - 1] + (left[i - 1] === right[j - 1] ? 0 : 1)
83
+ )
84
+ );
85
+ }
86
+ previous = current;
87
+ }
88
+ return previous[right.length];
89
+ };
90
+ var editThreshold = (form) => form.length <= 4 ? 1 : Math.max(2, Math.floor(form.length / 4));
91
+ var tokenAligned = (spilled, declared) => {
92
+ if (spilled.length === 0 || spilled.length !== declared.length) return false;
93
+ return spilled.every((token, index) => {
94
+ const other = declared[index];
95
+ if (token === other) return true;
96
+ return token.length >= 3 && other.length >= 3 && (token.startsWith(other) || other.startsWith(token));
97
+ });
98
+ };
99
+ var sortNames = (names) => [...new Set(names)].sort((left, right) => left.localeCompare(right));
100
+ var repairActionName = (declared, actionName) => {
101
+ const spilledForm = normalizeActionForm(actionName);
102
+ if (spilledForm.length === 0) return { suggestions: [] };
103
+ const rest = declared.filter((name) => name !== actionName);
104
+ if (rest.length === 0) return { suggestions: [] };
105
+ const forms = rest.map((name) => ({ name, form: normalizeActionForm(name) }));
106
+ const classCandidates = ACTION_CLASS_FORMS.filter((classForms) => classForms.has(spilledForm)).flatMap(
107
+ (classForms) => forms.filter((entry) => classForms.has(entry.form)).map((entry) => entry.name)
108
+ );
109
+ if (classCandidates.length === 1) {
110
+ return { repaired: classCandidates[0], suggestions: [classCandidates[0]] };
111
+ }
112
+ if (classCandidates.length > 1) {
113
+ return { suggestions: sortNames(classCandidates) };
114
+ }
115
+ const spilledTokens = camelTokens(actionName);
116
+ const derived = [];
117
+ for (const entry of forms) {
118
+ if (entry.form === spilledForm || singularActionForm(entry.form) === singularActionForm(spilledForm) || spilledTokens.length > 0 && tokenAligned(spilledTokens, camelTokens(entry.name)) || spilledForm.length >= 4 && entry.form.startsWith(spilledForm)) {
119
+ derived.push(entry.name);
120
+ }
121
+ }
122
+ if (derived.length === 1) return { repaired: derived[0], suggestions: [derived[0]] };
123
+ if (derived.length > 1) return { suggestions: sortNames(derived) };
124
+ const distances = forms.map((entry) => ({
125
+ name: entry.name,
126
+ distance: levenshtein(spilledForm, entry.form)
127
+ }));
128
+ const min = Math.min(...distances.map((entry) => entry.distance));
129
+ const threshold = editThreshold(spilledForm);
130
+ if (min <= threshold) {
131
+ const nearest = sortNames(
132
+ distances.filter((entry) => entry.distance === min).map((entry) => entry.name)
133
+ );
134
+ if (nearest.length === 1) return { repaired: nearest[0], suggestions: [nearest[0]] };
135
+ return { suggestions: nearest };
136
+ }
137
+ const suggestions = distances.filter((entry) => entry.distance <= Math.max(3, Math.floor(spilledForm.length / 2))).sort(
138
+ (left, right) => left.distance - right.distance || left.name.localeCompare(right.name)
139
+ ).slice(0, 3).map((entry) => entry.name);
140
+ return { suggestions: sortNames(suggestions) };
141
+ };
142
+ var formatUnknownActionMessage = (ref, suggestions) => suggestions.length > 0 ? `Unknown Fabric action: ${ref} (did you mean: ${suggestions.slice(0, 3).join(", ")}?)` : `Unknown Fabric action: ${ref}`;
143
+
24
144
  // src/core/provider-bindings.ts
25
145
  import { randomUUID } from "node:crypto";
26
146
  var snapshot = (binding) => ({
@@ -677,9 +797,16 @@ var ActionRegistry = class {
677
797
  ref,
678
798
  context.capabilityView
679
799
  );
680
- const descriptor = await provider.describe(actionName, context);
681
- if (!descriptor) throw new FabricResolutionError(`Unknown Fabric action: ${ref}`);
682
- const action = resolveDescriptor(provider, descriptor);
800
+ const resolved = await this.#resolveActionDescriptor(
801
+ provider,
802
+ actionName,
803
+ context,
804
+ context.capabilityView === void 0
805
+ );
806
+ if (!resolved.action) {
807
+ throw new FabricResolutionError(formatUnknownActionMessage(ref, resolved.suggestions));
808
+ }
809
+ const action = resolved.action;
683
810
  if (expectedDescriptorHash && actionDescriptorHash(action) !== expectedDescriptorHash) {
684
811
  throw new FabricResolutionError(`Fabric capability descriptor changed: ${ref}`);
685
812
  }
@@ -701,6 +828,7 @@ var ActionRegistry = class {
701
828
  throw new FabricResolutionError(`Unknown Fabric action in committed view: ${ref}`);
702
829
  }
703
830
  const matches = [];
831
+ const declaredNames = [];
704
832
  for (const provider of this.#providerBindings.providers()) {
705
833
  let descriptors;
706
834
  try {
@@ -709,6 +837,7 @@ var ActionRegistry = class {
709
837
  continue;
710
838
  }
711
839
  for (const descriptor of descriptors) {
840
+ declaredNames.push(descriptor.name);
712
841
  if (descriptor.name === ref) matches.push(resolveDescriptor(provider, descriptor));
713
842
  }
714
843
  }
@@ -718,7 +847,8 @@ var ActionRegistry = class {
718
847
  `"${ref}" matches ${matches.length} Fabric actions; qualify with provider.action: ` + matches.map((match) => match.ref).sort().join(", ")
719
848
  );
720
849
  }
721
- throw new FabricResolutionError(`Unknown Fabric action: ${ref}`);
850
+ const repair = repairActionName(declaredNames, ref);
851
+ throw new FabricResolutionError(formatUnknownActionMessage(ref, repair.suggestions));
722
852
  }
723
853
  async acquireScoped(ref, args, context) {
724
854
  const { binding, provider, actionName, expectedDescriptorHash } = this.#parseRef(
@@ -729,12 +859,17 @@ var ActionRegistry = class {
729
859
  const releaseBinding = this.#providerBindings.retain([binding.id]);
730
860
  let retentionTransferred = false;
731
861
  try {
732
- const descriptor = await runAbortable(
733
- context.signal,
734
- () => provider.describe(actionName, context)
862
+ const resolved = await this.#resolveActionDescriptor(
863
+ provider,
864
+ actionName,
865
+ context,
866
+ context.capabilityView === void 0
735
867
  );
736
- if (!descriptor) throw new FabricResolutionError(`Unknown Fabric action: ${ref}`);
737
- const action = resolveDescriptor(provider, descriptor);
868
+ if (!resolved.action) {
869
+ throw new FabricResolutionError(formatUnknownActionMessage(ref, resolved.suggestions));
870
+ }
871
+ const action = resolved.action;
872
+ const providerActionName = resolved.repairedFrom === void 0 ? actionName : action.name;
738
873
  if (expectedDescriptorHash && actionDescriptorHash(action) !== expectedDescriptorHash) {
739
874
  throw new FabricResolutionError(`Fabric capability descriptor changed: ${ref}`);
740
875
  }
@@ -746,7 +881,7 @@ var ActionRegistry = class {
746
881
  }
747
882
  const preparedArgs = provider.prepareArguments ? await runAbortable(
748
883
  context.signal,
749
- () => provider.prepareArguments(actionName, args, context)
884
+ () => provider.prepareArguments(providerActionName, args, context)
750
885
  ) : args;
751
886
  if (typeof preparedArgs !== "object" || preparedArgs === null || Array.isArray(preparedArgs)) {
752
887
  throw new Error(`Argument preparation for ${ref} did not return an object`);
@@ -755,7 +890,7 @@ var ActionRegistry = class {
755
890
  if (invalid) throw new Error(`Invalid arguments for ${ref}: ${invalid}`);
756
891
  const acquired = await runAbortable(
757
892
  context.signal,
758
- () => provider.acquire(actionName, preparedArgs, context)
893
+ () => provider.acquire(providerActionName, preparedArgs, context)
759
894
  );
760
895
  if (!acquired || typeof acquired.dispose !== "function") {
761
896
  throw new Error(`Scoped acquisition ${ref} did not return a disposer`);
@@ -792,12 +927,17 @@ var ActionRegistry = class {
792
927
  context.capabilityView
793
928
  );
794
929
  endBindingInvocation = this.#providerBindings.beginInvocation(binding.id);
795
- const descriptor = await runAbortable(
796
- context.signal,
797
- () => provider.describe(actionName, context)
930
+ const resolved = await this.#resolveActionDescriptor(
931
+ provider,
932
+ actionName,
933
+ context,
934
+ context.capabilityView === void 0
798
935
  );
799
- if (!descriptor) throw new FabricResolutionError(`Unknown Fabric action: ${ref}`);
800
- const action = resolveDescriptor(provider, descriptor);
936
+ if (!resolved.action) {
937
+ throw new FabricResolutionError(formatUnknownActionMessage(ref, resolved.suggestions));
938
+ }
939
+ const action = resolved.action;
940
+ const providerActionName = resolved.repairedFrom === void 0 ? actionName : action.name;
801
941
  if (expectedDescriptorHash && actionDescriptorHash(action) !== expectedDescriptorHash) {
802
942
  throw new FabricResolutionError(`Fabric capability descriptor changed: ${ref}`);
803
943
  }
@@ -814,7 +954,7 @@ var ActionRegistry = class {
814
954
  failureStage = "prepare";
815
955
  const preparedArgs = provider.prepareArguments ? await runAbortable(
816
956
  context.signal,
817
- () => provider.prepareArguments(actionName, args, context)
957
+ () => provider.prepareArguments(providerActionName, args, context)
818
958
  ) : args;
819
959
  if (typeof preparedArgs !== "object" || preparedArgs === null || Array.isArray(preparedArgs)) {
820
960
  throw new FabricTraceSafeError(`Argument preparation for ${ref} did not return an object`);
@@ -853,7 +993,8 @@ var ActionRegistry = class {
853
993
  argsPreview,
854
994
  MAX_AUDIT_VALUE_CHARS
855
995
  ),
856
- ...effectConflicts.length > 0 ? { effectConflicts } : {}
996
+ ...effectConflicts.length > 0 ? { effectConflicts } : {},
997
+ ...resolved.repairedFrom !== void 0 ? { repairedFrom: resolved.repairedFrom } : {}
857
998
  };
858
999
  audit = activeAudit;
859
1000
  invocationActive = true;
@@ -900,7 +1041,7 @@ var ActionRegistry = class {
900
1041
  providerInvoked = true;
901
1042
  providerValue = await runAbortable(
902
1043
  context.signal,
903
- () => provider.invoke(actionName, preparedArgs, {
1044
+ () => provider.invoke(providerActionName, preparedArgs, {
904
1045
  ...context,
905
1046
  nestedToolCallId,
906
1047
  update(message) {
@@ -1154,6 +1295,46 @@ var ActionRegistry = class {
1154
1295
  await Promise.allSettled(temporaryReleases.map((release) => release()));
1155
1296
  }
1156
1297
  }
1298
+ async #declaredActionNames(provider, context) {
1299
+ try {
1300
+ const descriptors = await runAbortable(context.signal, () => provider.list({}, context));
1301
+ return descriptors.map((descriptor) => descriptor.name);
1302
+ } catch {
1303
+ return [];
1304
+ }
1305
+ }
1306
+ // Resolve a provider action descriptor, repairing a near-miss action name
1307
+ // (mirroring arg-normalization's prepare-stage argument repair) when the
1308
+ // caller is not pinned to a committed capability view. Committed views are
1309
+ // exact contracts: a pinned miss keeps the plain resolution error.
1310
+ async #resolveActionDescriptor(provider, actionName, context, allowRepair) {
1311
+ const descriptor = await runAbortable(
1312
+ context.signal,
1313
+ () => provider.describe(actionName, context)
1314
+ );
1315
+ if (descriptor) return { action: resolveDescriptor(provider, descriptor), suggestions: [] };
1316
+ if (!allowRepair) return { suggestions: [] };
1317
+ const repair = repairActionName(
1318
+ await this.#declaredActionNames(provider, context),
1319
+ actionName
1320
+ );
1321
+ if (repair.repaired !== void 0) {
1322
+ const repairedDescriptor = await runAbortable(
1323
+ context.signal,
1324
+ () => provider.describe(repair.repaired, context)
1325
+ );
1326
+ if (repairedDescriptor) {
1327
+ return {
1328
+ action: resolveDescriptor(provider, repairedDescriptor),
1329
+ suggestions: [],
1330
+ repairedFrom: actionName
1331
+ };
1332
+ }
1333
+ }
1334
+ return {
1335
+ suggestions: repair.suggestions.map((name) => `${provider.name}.${name}`)
1336
+ };
1337
+ }
1157
1338
  #parseRef(ref, view) {
1158
1339
  const separator = ref.indexOf(".");
1159
1340
  if (separator <= 0 || separator === ref.length - 1) {
@@ -1201,4 +1382,4 @@ export {
1201
1382
  NESTED_TOOL_CALL_ID_PREFIX,
1202
1383
  ActionRegistry
1203
1384
  };
1204
- //# sourceMappingURL=chunk-LDZWE6OA.js.map
1385
+ //# sourceMappingURL=chunk-TEGUENKB.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/core/action-registry.ts", "../../src/core/action-repair.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 { 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 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 #speculation: FabricSpeculationRuntime | undefined;\n #speculationEligibility: ((action: ResolvedFabricAction) => boolean) | undefined;\n\n constructor(readonly toolResultProxy?: FabricNestedToolResultProxy) {}\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 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 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 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 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 preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(providerActionName, 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!(providerActionName, 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 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 preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(providerActionName, 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 ...(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, preparedArgs));\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, 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 }\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: 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 /**\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. 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 execute(signal: AbortSignal | undefined): Promise<unknown>;\n }\n | undefined\n > {\n if (!this.#speculationEligibility) return undefined;\n try {\n const { binding, provider, actionName } = this.#parseRef(ref, context.capabilityView);\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 (!this.#speculationEligibility(action)) return undefined;\n const preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(actionName, args, context))\n : args;\n if (\n typeof preparedArgs !== \"object\" ||\n preparedArgs === null ||\n Array.isArray(preparedArgs)\n ) {\n return undefined;\n }\n if (validationMessage(action.inputSchema, preparedArgs)) return undefined;\n const nestedToolCallId = `${NESTED_TOOL_CALL_ID_PREFIX}spec-${randomUUID()}`;\n return {\n preparedArgs,\n execute: async (signal) => {\n const endBindingInvocation = this.#providerBindings.beginInvocation(binding.id);\n try {\n return await runAbortable(signal, () =>\n provider.invoke(actionName, preparedArgs, {\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 if (descriptor) return { action: resolveDescriptor(provider, descriptor), suggestions: [] };\n if (!allowRepair) return { suggestions: [] };\n const repair = repairActionName(\n await this.#declaredActionNames(provider, context),\n actionName,\n );\n if (repair.repaired !== undefined) {\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 }\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 { 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
+ }
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-7B55UIZL.js";
19
19
  import {
20
20
  NESTED_TOOL_CALL_ID_PREFIX
21
- } from "./chunk-LDZWE6OA.js";
21
+ } from "./chunk-TEGUENKB.js";
22
22
  import {
23
23
  runAbortable,
24
24
  throwIfAborted
@@ -2516,4 +2516,4 @@ export {
2516
2516
  resolveFabricIdentity,
2517
2517
  MainAgentController
2518
2518
  };
2519
- //# sourceMappingURL=chunk-M5AEBRN4.js.map
2519
+ //# sourceMappingURL=chunk-WN4JZMOP.js.map
@@ -27,7 +27,7 @@ import {
27
27
  runFabricHandoffAtBoundary,
28
28
  sameConfigLayers,
29
29
  statConfigLayers
30
- } from "./chunk-M5AEBRN4.js";
30
+ } from "./chunk-WN4JZMOP.js";
31
31
  import {
32
32
  sanitizeMcpRefPart
33
33
  } from "./chunk-IGVDD2HT.js";
@@ -106,7 +106,7 @@ import {
106
106
  import "./chunk-4VEGQHZO.js";
107
107
  import {
108
108
  ActionRegistry
109
- } from "./chunk-LDZWE6OA.js";
109
+ } from "./chunk-TEGUENKB.js";
110
110
  import {
111
111
  runAbortable,
112
112
  throwIfAborted
@@ -11707,4 +11707,4 @@ var deepAssign = (target, source) => {
11707
11707
  export {
11708
11708
  FabricRuntimeState
11709
11709
  };
11710
- //# sourceMappingURL=fabric-runtime-state-EWOMNWPM.js.map
11710
+ //# sourceMappingURL=fabric-runtime-state-NQ7ZXZ6P.js.map
@@ -32,6 +32,8 @@ export interface FabricCallAudit {
32
32
  effectConflicts?: FabricEffectConflict[];
33
33
  /** Result was pre-launched while the program streamed and served from the speculation store. */
34
34
  speculated?: boolean;
35
+ /** Spelled action name that repaired to the canonical one at resolve (e.g. search → recall). */
36
+ repairedFrom?: string;
35
37
  }
36
38
  export type FabricRegistryActivityEvent = {
37
39
  type: "call_start";
@@ -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-LDZWE6OA.js";
4
+ } from "../chunks/chunk-TEGUENKB.js";
5
5
  import "../chunks/chunk-7TB7NXSL.js";
6
6
  import "../chunks/chunk-LMAVZN7J.js";
7
7
  import "../chunks/chunk-HDKEA77S.js";
@@ -0,0 +1,20 @@
1
+ interface ActionNameRepair {
2
+ /** Canonical declared action name when exactly one candidate fits. */
3
+ repaired?: string;
4
+ /** Ranked declared candidates for the didactic failure message. */
5
+ suggestions: string[];
6
+ }
7
+ /**
8
+ * Repair a spilled action name against the provider's declared names.
9
+ * Returns the canonical name when exactly one declared candidate fits, or
10
+ * ranked suggestions for the didactic failure message.
11
+ */
12
+ export declare const repairActionName: (declared: readonly string[], actionName: string) => ActionNameRepair;
13
+ /**
14
+ * The didactic unknown-action failure message. The original
15
+ * "Unknown Fabric action: <ref>" prefix is preserved verbatim; declared
16
+ * candidates are appended only when repair found close misses.
17
+ */
18
+ export declare const formatUnknownActionMessage: (ref: string, suggestions: readonly string[]) => string;
19
+ export {};
20
+ //# sourceMappingURL=action-repair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-repair.d.ts","sourceRoot":"","sources":["../../src/core/action-repair.ts"],"names":[],"mappings":"AAmBA,UAAU,gBAAgB;IACxB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AA6GD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,SAAS,MAAM,EAAE,EAC3B,YAAY,MAAM,KACjB,gBA+DF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,KAAK,MAAM,EACX,aAAa,SAAS,MAAM,EAAE,KAC7B,MAGkC,CAAC"}
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  settleInPlacePrewalk,
23
23
  toMcpAdvisoryDescriptor,
24
24
  withTrajectoryRearmDirective
25
- } from "./chunks/chunk-M5AEBRN4.js";
25
+ } from "./chunks/chunk-WN4JZMOP.js";
26
26
  import {
27
27
  sanitizeMcpRefPart
28
28
  } from "./chunks/chunk-IGVDD2HT.js";
@@ -111,7 +111,7 @@ import {
111
111
  } from "./chunks/chunk-4VEGQHZO.js";
112
112
  import {
113
113
  NESTED_TOOL_CALL_ID_PREFIX
114
- } from "./chunks/chunk-LDZWE6OA.js";
114
+ } from "./chunks/chunk-TEGUENKB.js";
115
115
  import "./chunks/chunk-7TB7NXSL.js";
116
116
  import "./chunks/chunk-LMAVZN7J.js";
117
117
  import {
@@ -3759,7 +3759,7 @@ var FabricState = class {
3759
3759
  return activation;
3760
3760
  }
3761
3761
  async #createRuntime() {
3762
- const module = await (this.#options.runtimeLoader?.() ?? import("./chunks/fabric-runtime-state-EWOMNWPM.js"));
3762
+ const module = await (this.#options.runtimeLoader?.() ?? import("./chunks/fabric-runtime-state-NQ7ZXZ6P.js"));
3763
3763
  return new module.FabricRuntimeState(
3764
3764
  this.pi,
3765
3765
  this.capturedTools,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-fabric",
3
- "version": "0.69.0",
3
+ "version": "0.70.0",
4
4
  "description": "A programmable tool and agent runtime for Pi",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,7 +0,0 @@
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 {\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}\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 #speculation: FabricSpeculationRuntime | undefined;\n #speculationEligibility: ((action: ResolvedFabricAction) => boolean) | undefined;\n\n constructor(readonly toolResultProxy?: FabricNestedToolResultProxy) {}\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 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 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, preparedArgs));\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(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 }\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: 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 /**\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. 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 execute(signal: AbortSignal | undefined): Promise<unknown>;\n }\n | undefined\n > {\n if (!this.#speculationEligibility) return undefined;\n try {\n const { binding, provider, actionName } = this.#parseRef(ref, context.capabilityView);\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 (!this.#speculationEligibility(action)) return undefined;\n const preparedArgs = provider.prepareArguments\n ? await runAbortable(context.signal, () =>\n provider.prepareArguments!(actionName, args, context))\n : args;\n if (\n typeof preparedArgs !== \"object\" ||\n preparedArgs === null ||\n Array.isArray(preparedArgs)\n ) {\n return undefined;\n }\n if (validationMessage(action.inputSchema, preparedArgs)) return undefined;\n const nestedToolCallId = `${NESTED_TOOL_CALL_ID_PREFIX}spec-${randomUUID()}`;\n return {\n preparedArgs,\n execute: async (signal) => {\n const endBindingInvocation = this.#providerBindings.beginInvocation(binding.id);\n try {\n return await runAbortable(signal, () =>\n provider.invoke(actionName, preparedArgs, {\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 #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
- }