@remnic/core 9.43.0 → 9.44.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.
Files changed (208) hide show
  1. package/dist/access-admin-ops-surface.d.ts +2 -2
  2. package/dist/access-admin-ops-surface.js +39 -39
  3. package/dist/access-authorization-probe.d.ts +2 -2
  4. package/dist/access-authorization-probe.js +40 -40
  5. package/dist/access-boundary.d.ts +2 -2
  6. package/dist/access-boundary.js +39 -39
  7. package/dist/access-cli.js +97 -95
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-extraction-force-flush.d.ts +2 -2
  10. package/dist/access-extraction-force-flush.js +39 -39
  11. package/dist/access-http-lcm-compaction.d.ts +2 -2
  12. package/dist/access-http-lifecycle-flush.d.ts +2 -2
  13. package/dist/access-http-query.d.ts +8 -0
  14. package/dist/access-http-query.js +179 -0
  15. package/dist/access-http.d.ts +2 -2
  16. package/dist/access-http.js +47 -46
  17. package/dist/access-identity-continuity-surface.d.ts +1 -1
  18. package/dist/access-identity-continuity-surface.js +39 -39
  19. package/dist/access-lcm-surface.d.ts +2 -2
  20. package/dist/access-lcm-surface.js +39 -39
  21. package/dist/access-mcp.d.ts +2 -2
  22. package/dist/access-mcp.js +43 -43
  23. package/dist/access-namespace-preflight.js +39 -39
  24. package/dist/access-observe-write-surface.d.ts +2 -2
  25. package/dist/access-observe-write-surface.js +39 -39
  26. package/dist/access-operations-batch.js +41 -41
  27. package/dist/access-operations.d.ts +2 -2
  28. package/dist/access-operations.js +42 -42
  29. package/dist/access-recall-concurrency.d.ts +2 -2
  30. package/dist/access-recall-concurrency.js +39 -39
  31. package/dist/access-recall-response.d.ts +2 -2
  32. package/dist/access-recall-response.js +39 -39
  33. package/dist/access-recall-surface.d.ts +2 -2
  34. package/dist/access-recall-surface.js +39 -39
  35. package/dist/{access-service-D1BkxwSf.d.ts → access-service-BCZJbX0f.d.ts} +12 -2
  36. package/dist/access-service-helpers.d.ts +2 -2
  37. package/dist/access-service.d.ts +2 -2
  38. package/dist/access-service.js +39 -39
  39. package/dist/access-surface-catalog.d.ts +2 -2
  40. package/dist/access-surface-catalog.js +5 -0
  41. package/dist/access-surface-catalog.js.map +1 -1
  42. package/dist/{auto-sync-UPTUVE4X.js → auto-sync-5OE5QOZB.js} +3 -3
  43. package/dist/bootstrap.d.ts +1 -1
  44. package/dist/briefing.js +8 -8
  45. package/dist/buffer.js +6 -6
  46. package/dist/causal-behavior.js +2 -2
  47. package/dist/causal-chain.js +2 -2
  48. package/dist/causal-consolidation.js +12 -12
  49. package/dist/causal-retrieval.js +2 -2
  50. package/dist/causal-trajectory-graph.js +2 -2
  51. package/dist/causal-trajectory.js +1 -1
  52. package/dist/{chunk-LEPOP46W.js → chunk-227UFSEQ.js} +4 -4
  53. package/dist/{chunk-BEQOZOYZ.js → chunk-2FTRRQKZ.js} +5 -5
  54. package/dist/{chunk-CMENJQ6I.js → chunk-2QR2RRH6.js} +2 -2
  55. package/dist/{chunk-3C2TGBDB.js → chunk-35IC3EVP.js} +2 -2
  56. package/dist/{chunk-L2DPF4DF.js → chunk-3SHB4YAW.js} +4 -4
  57. package/dist/{chunk-UV72DEZD.js → chunk-4B77XSG5.js} +5 -5
  58. package/dist/{chunk-GUQYMOPU.js → chunk-4LMA77JH.js} +5 -5
  59. package/dist/{chunk-AX2J2LC4.js → chunk-5ZE7QHTK.js} +2 -2
  60. package/dist/{chunk-YFHMW37V.js → chunk-6CZPDBJS.js} +5 -5
  61. package/dist/chunk-6ZYQ36IB.js +30 -0
  62. package/dist/chunk-6ZYQ36IB.js.map +1 -0
  63. package/dist/{chunk-QY66HJ4X.js → chunk-7PLHD7EO.js} +5 -5
  64. package/dist/{chunk-NRV4Y3PM.js → chunk-CAGPP5NB.js} +1 -1
  65. package/dist/{chunk-5TOV3D6U.js → chunk-CH2WTP6R.js} +6 -6
  66. package/dist/{chunk-YJHU5B3M.js → chunk-E6JYVPBK.js} +2 -2
  67. package/dist/{chunk-NF3U3MPG.js → chunk-ECK75GDJ.js} +2 -2
  68. package/dist/{chunk-NHRNYJPJ.js → chunk-EMC5GT4H.js} +7 -7
  69. package/dist/{chunk-5QZEVMLY.js → chunk-EUVPB5TA.js} +55 -37
  70. package/dist/chunk-EUVPB5TA.js.map +1 -0
  71. package/dist/{chunk-GS5UVGQK.js → chunk-G24HJJ67.js} +4 -4
  72. package/dist/{chunk-OEXKYYVH.js → chunk-HGFILS2Q.js} +6 -6
  73. package/dist/{chunk-BGXHVOBI.js → chunk-HLPD7B7P.js} +2 -2
  74. package/dist/{chunk-UP67AFRN.js → chunk-HXTUA7QM.js} +28 -28
  75. package/dist/chunk-HXTUA7QM.js.map +1 -0
  76. package/dist/{chunk-WGCTFGLW.js → chunk-I22U5YYD.js} +3 -3
  77. package/dist/{chunk-MSXWUXFE.js → chunk-IADUAH35.js} +2 -2
  78. package/dist/{chunk-JGXXPDM2.js → chunk-IXFI6E3Q.js} +3 -3
  79. package/dist/{chunk-ZVVASRUT.js → chunk-J43XN7N3.js} +90 -88
  80. package/dist/chunk-J43XN7N3.js.map +1 -0
  81. package/dist/{chunk-F2KMAFEB.js → chunk-JDDTNK5P.js} +2 -2
  82. package/dist/{chunk-KDXD2AM6.js → chunk-MUKLQDJP.js} +47 -47
  83. package/dist/{chunk-5N26WBPQ.js → chunk-MYFFOPO2.js} +5 -5
  84. package/dist/{chunk-Q53RLEW7.js → chunk-N7LPS4Z3.js} +2 -2
  85. package/dist/{chunk-EHKDORQN.js → chunk-NVRYW264.js} +9 -9
  86. package/dist/{chunk-MVW234LO.js → chunk-O4BADU6R.js} +2 -2
  87. package/dist/{chunk-ZERSIPFC.js → chunk-OHLNFI6Z.js} +17 -17
  88. package/dist/{chunk-AR2FSZBP.js → chunk-OPVOUBHT.js} +2 -2
  89. package/dist/{chunk-JDXDA5OO.js → chunk-OZL7KB6B.js} +2 -2
  90. package/dist/{chunk-4DYBLQZC.js → chunk-PJUHQC4T.js} +2 -2
  91. package/dist/{chunk-SEUSFKNS.js → chunk-PLQCPMJA.js} +14 -14
  92. package/dist/{chunk-MU7ZHSZE.js → chunk-PO5LSKQO.js} +2 -2
  93. package/dist/{chunk-ONHRRJZM.js → chunk-QJAQNXWI.js} +6 -6
  94. package/dist/{chunk-LZ5JKQCS.js → chunk-TRBIJS2T.js} +2 -2
  95. package/dist/{chunk-6GIMMNVK.js → chunk-U5SX74DV.js} +4 -4
  96. package/dist/{chunk-KPJQTSRJ.js → chunk-UUQLB2HJ.js} +2 -2
  97. package/dist/{chunk-JYIFGGEM.js → chunk-UZGJFIIG.js} +2 -2
  98. package/dist/{chunk-HNZKVLAN.js → chunk-W6ROK2KU.js} +2 -2
  99. package/dist/{chunk-EPQ76W5T.js → chunk-WMHO3WLC.js} +2 -2
  100. package/dist/{chunk-MBTPUVHZ.js → chunk-WUDWRUGK.js} +2 -2
  101. package/dist/{chunk-4VXGRIH6.js → chunk-WUNIWKY4.js} +5 -5
  102. package/dist/{chunk-BI6RE2ZS.js → chunk-WX6KOVVK.js} +2 -2
  103. package/dist/chunk-YUOKZ3LJ.js +24 -0
  104. package/dist/chunk-YUOKZ3LJ.js.map +1 -0
  105. package/dist/{cli-IUhV-lmk.d.ts → cli-U30A3jyx.d.ts} +2 -2
  106. package/dist/cli.d.ts +3 -3
  107. package/dist/cli.js +66 -65
  108. package/dist/compounding/engine.js +8 -8
  109. package/dist/connectors/codex-materialize-runner.js +8 -8
  110. package/dist/connectors/index.js +8 -8
  111. package/dist/convergence-refresh.d.ts +24 -0
  112. package/dist/convergence-refresh.js +74 -0
  113. package/dist/convergence-refresh.js.map +1 -0
  114. package/dist/conversation-index/backend.js +2 -2
  115. package/dist/corpus-watermark.js +19 -19
  116. package/dist/entity-retrieval.js +8 -8
  117. package/dist/explicit-capture.d.ts +1 -1
  118. package/dist/explicit-capture.js +3 -3
  119. package/dist/extraction.js +14 -14
  120. package/dist/{graph-edge-decay-Z6ENALU2.js → graph-edge-decay-GF3ZSGSP.js} +4 -4
  121. package/dist/graph-edge-decay-GF3ZSGSP.js.map +1 -0
  122. package/dist/graph-snapshot.js +3 -3
  123. package/dist/graph.js +2 -2
  124. package/dist/index.d.ts +4 -4
  125. package/dist/index.js +158 -156
  126. package/dist/lcm/index.js +3 -3
  127. package/dist/maintenance/memory-governance.js +9 -9
  128. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
  129. package/dist/maintenance/rebuild-memory-projection.js +10 -10
  130. package/dist/mcp-memory-inspector-app.d.ts +2 -2
  131. package/dist/namespaces/migrate.js +18 -18
  132. package/dist/namespaces/search.js +9 -9
  133. package/dist/namespaces/storage.js +8 -8
  134. package/dist/offline-sync-impression-drain.js +4 -4
  135. package/dist/operator-doctor-corpus.js +20 -20
  136. package/dist/operator-toolkit.js +29 -29
  137. package/dist/orchestration/maintenance.js +15 -15
  138. package/dist/{orchestrator-fYTncnLy.d.ts → orchestrator-DUxbhhqO.d.ts} +1 -1
  139. package/dist/orchestrator.d.ts +1 -1
  140. package/dist/orchestrator.js +98 -96
  141. package/dist/qmd.js +4 -4
  142. package/dist/resume-bundles.js +1 -1
  143. package/dist/search/factory.js +8 -8
  144. package/dist/search/index.js +14 -14
  145. package/dist/semantic-consolidation.js +10 -10
  146. package/dist/semantic-rule-promotion.js +8 -8
  147. package/dist/semantic-rule-verifier.js +9 -9
  148. package/dist/source-agent-qualifier.js +13 -13
  149. package/dist/storage.js +7 -7
  150. package/dist/verified-recall.js +9 -9
  151. package/package.json +2 -2
  152. package/src/access-http-query.ts +25 -0
  153. package/src/access-http.test.ts +136 -0
  154. package/src/access-http.ts +26 -26
  155. package/src/access-service-offline-file-content.test.ts +40 -0
  156. package/src/access-service.ts +34 -0
  157. package/src/access-surface-catalog.ts +5 -0
  158. package/src/convergence-refresh.ts +28 -0
  159. package/src/orchestrator-convergence-refresh.test.ts +114 -0
  160. package/src/orchestrator.ts +5 -4
  161. package/dist/chunk-5QZEVMLY.js.map +0 -1
  162. package/dist/chunk-UP67AFRN.js.map +0 -1
  163. package/dist/chunk-ZVVASRUT.js.map +0 -1
  164. /package/dist/{graph-edge-decay-Z6ENALU2.js.map → access-http-query.js.map} +0 -0
  165. /package/dist/{auto-sync-UPTUVE4X.js.map → auto-sync-5OE5QOZB.js.map} +0 -0
  166. /package/dist/{chunk-LEPOP46W.js.map → chunk-227UFSEQ.js.map} +0 -0
  167. /package/dist/{chunk-BEQOZOYZ.js.map → chunk-2FTRRQKZ.js.map} +0 -0
  168. /package/dist/{chunk-CMENJQ6I.js.map → chunk-2QR2RRH6.js.map} +0 -0
  169. /package/dist/{chunk-3C2TGBDB.js.map → chunk-35IC3EVP.js.map} +0 -0
  170. /package/dist/{chunk-L2DPF4DF.js.map → chunk-3SHB4YAW.js.map} +0 -0
  171. /package/dist/{chunk-UV72DEZD.js.map → chunk-4B77XSG5.js.map} +0 -0
  172. /package/dist/{chunk-GUQYMOPU.js.map → chunk-4LMA77JH.js.map} +0 -0
  173. /package/dist/{chunk-AX2J2LC4.js.map → chunk-5ZE7QHTK.js.map} +0 -0
  174. /package/dist/{chunk-YFHMW37V.js.map → chunk-6CZPDBJS.js.map} +0 -0
  175. /package/dist/{chunk-QY66HJ4X.js.map → chunk-7PLHD7EO.js.map} +0 -0
  176. /package/dist/{chunk-NRV4Y3PM.js.map → chunk-CAGPP5NB.js.map} +0 -0
  177. /package/dist/{chunk-5TOV3D6U.js.map → chunk-CH2WTP6R.js.map} +0 -0
  178. /package/dist/{chunk-YJHU5B3M.js.map → chunk-E6JYVPBK.js.map} +0 -0
  179. /package/dist/{chunk-NF3U3MPG.js.map → chunk-ECK75GDJ.js.map} +0 -0
  180. /package/dist/{chunk-NHRNYJPJ.js.map → chunk-EMC5GT4H.js.map} +0 -0
  181. /package/dist/{chunk-GS5UVGQK.js.map → chunk-G24HJJ67.js.map} +0 -0
  182. /package/dist/{chunk-OEXKYYVH.js.map → chunk-HGFILS2Q.js.map} +0 -0
  183. /package/dist/{chunk-BGXHVOBI.js.map → chunk-HLPD7B7P.js.map} +0 -0
  184. /package/dist/{chunk-WGCTFGLW.js.map → chunk-I22U5YYD.js.map} +0 -0
  185. /package/dist/{chunk-MSXWUXFE.js.map → chunk-IADUAH35.js.map} +0 -0
  186. /package/dist/{chunk-JGXXPDM2.js.map → chunk-IXFI6E3Q.js.map} +0 -0
  187. /package/dist/{chunk-F2KMAFEB.js.map → chunk-JDDTNK5P.js.map} +0 -0
  188. /package/dist/{chunk-KDXD2AM6.js.map → chunk-MUKLQDJP.js.map} +0 -0
  189. /package/dist/{chunk-5N26WBPQ.js.map → chunk-MYFFOPO2.js.map} +0 -0
  190. /package/dist/{chunk-Q53RLEW7.js.map → chunk-N7LPS4Z3.js.map} +0 -0
  191. /package/dist/{chunk-EHKDORQN.js.map → chunk-NVRYW264.js.map} +0 -0
  192. /package/dist/{chunk-MVW234LO.js.map → chunk-O4BADU6R.js.map} +0 -0
  193. /package/dist/{chunk-ZERSIPFC.js.map → chunk-OHLNFI6Z.js.map} +0 -0
  194. /package/dist/{chunk-AR2FSZBP.js.map → chunk-OPVOUBHT.js.map} +0 -0
  195. /package/dist/{chunk-JDXDA5OO.js.map → chunk-OZL7KB6B.js.map} +0 -0
  196. /package/dist/{chunk-4DYBLQZC.js.map → chunk-PJUHQC4T.js.map} +0 -0
  197. /package/dist/{chunk-SEUSFKNS.js.map → chunk-PLQCPMJA.js.map} +0 -0
  198. /package/dist/{chunk-MU7ZHSZE.js.map → chunk-PO5LSKQO.js.map} +0 -0
  199. /package/dist/{chunk-ONHRRJZM.js.map → chunk-QJAQNXWI.js.map} +0 -0
  200. /package/dist/{chunk-LZ5JKQCS.js.map → chunk-TRBIJS2T.js.map} +0 -0
  201. /package/dist/{chunk-6GIMMNVK.js.map → chunk-U5SX74DV.js.map} +0 -0
  202. /package/dist/{chunk-KPJQTSRJ.js.map → chunk-UUQLB2HJ.js.map} +0 -0
  203. /package/dist/{chunk-JYIFGGEM.js.map → chunk-UZGJFIIG.js.map} +0 -0
  204. /package/dist/{chunk-HNZKVLAN.js.map → chunk-W6ROK2KU.js.map} +0 -0
  205. /package/dist/{chunk-EPQ76W5T.js.map → chunk-WMHO3WLC.js.map} +0 -0
  206. /package/dist/{chunk-MBTPUVHZ.js.map → chunk-WUDWRUGK.js.map} +0 -0
  207. /package/dist/{chunk-4VXGRIH6.js.map → chunk-WUNIWKY4.js.map} +0 -0
  208. /package/dist/{chunk-BI6RE2ZS.js.map → chunk-WX6KOVVK.js.map} +0 -0
@@ -0,0 +1,114 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtemp, rm } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import test from "node:test";
6
+
7
+ import { readProjectedMemoryBrowse } from "./memory-projection-store.js";
8
+ import { Orchestrator } from "./orchestrator.js";
9
+ import { StorageManager } from "./storage.js";
10
+
11
+ test("refreshNamespacesAfterConvergence runs one strict QMD batch and rebuilds each namespace projection once", async () => {
12
+ const teamDir = await mkdtemp(path.join(os.tmpdir(), "remnic-convergence-team-"));
13
+ const sharedDir = await mkdtemp(path.join(os.tmpdir(), "remnic-convergence-shared-"));
14
+ try {
15
+ const teamStorage = new StorageManager(teamDir);
16
+ const sharedStorage = new StorageManager(sharedDir);
17
+ const teamMemory = await teamStorage.writeMemory("fact", "A received team fact.", {
18
+ source: "test",
19
+ });
20
+ const sharedMemory = await sharedStorage.writeMemory("fact", "A received shared fact.", {
21
+ source: "test",
22
+ });
23
+ const qmdCalls: Array<{
24
+ namespaces: string[];
25
+ options: { strict?: boolean } | undefined;
26
+ }> = [];
27
+ const storageCalls: string[] = [];
28
+ const orchestrator = Object.create(Orchestrator.prototype) as Orchestrator;
29
+ const internals = orchestrator as unknown as {
30
+ config: { defaultNamespace: string };
31
+ namespaceSearchRouter: {
32
+ updateNamespacesDetailed(
33
+ namespaces: string[],
34
+ execution?: unknown,
35
+ options?: { strict?: boolean }
36
+ ): Promise<{ backendCount: number; eligibleNamespaces: string[] }>;
37
+ };
38
+ getStorage(namespace: string): Promise<StorageManager>;
39
+ };
40
+ internals.config = { defaultNamespace: "default" };
41
+ internals.namespaceSearchRouter = {
42
+ async updateNamespacesDetailed(namespaces, _execution, options) {
43
+ qmdCalls.push({ namespaces, options });
44
+ return { backendCount: 1, eligibleNamespaces: namespaces };
45
+ },
46
+ };
47
+ const storageByNamespace = new Map([
48
+ ["team", teamStorage],
49
+ ["shared", sharedStorage],
50
+ ]);
51
+ internals.getStorage = async (namespace) => {
52
+ storageCalls.push(namespace);
53
+ const storage = storageByNamespace.get(namespace);
54
+ assert.ok(storage);
55
+ return storage;
56
+ };
57
+ const refreshSurface = orchestrator as unknown as {
58
+ refreshNamespacesAfterConvergence(namespaces: readonly string[]): Promise<void>;
59
+ };
60
+
61
+ await refreshSurface.refreshNamespacesAfterConvergence(["team", "shared", "team"]);
62
+
63
+ assert.deepEqual(qmdCalls, [
64
+ {
65
+ namespaces: ["team", "shared"],
66
+ options: { strict: true },
67
+ },
68
+ ]);
69
+ assert.deepEqual(storageCalls, ["team", "shared"]);
70
+ const teamProjection = readProjectedMemoryBrowse(teamDir, { limit: 10, offset: 0 });
71
+ const sharedProjection = readProjectedMemoryBrowse(sharedDir, { limit: 10, offset: 0 });
72
+ assert.equal(teamProjection?.memories[0]?.id, teamMemory.id);
73
+ assert.equal(sharedProjection?.memories[0]?.id, sharedMemory.id);
74
+ } finally {
75
+ await Promise.all([rm(teamDir, { recursive: true, force: true }), rm(sharedDir, { recursive: true, force: true })]);
76
+ }
77
+ });
78
+
79
+ test("refreshNamespacesAfterConvergence rebuilds projection when search is disabled", async () => {
80
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-convergence-no-search-"));
81
+ try {
82
+ const storage = new StorageManager(memoryDir);
83
+ const memory = await storage.writeMemory("fact", "A received fact without search enabled.", {
84
+ source: "test",
85
+ });
86
+ const orchestrator = Object.create(Orchestrator.prototype) as Orchestrator;
87
+ const internals = orchestrator as unknown as {
88
+ namespaceSearchRouter: {
89
+ updateNamespacesDetailed(
90
+ namespaces: string[],
91
+ execution?: unknown,
92
+ options?: { strict?: boolean }
93
+ ): Promise<{ backendCount: number; eligibleNamespaces: string[] }>;
94
+ };
95
+ getStorage(namespace: string): Promise<StorageManager>;
96
+ };
97
+ internals.namespaceSearchRouter = {
98
+ async updateNamespacesDetailed() {
99
+ return { backendCount: 0, eligibleNamespaces: [] };
100
+ },
101
+ };
102
+ internals.getStorage = async () => storage;
103
+ const refreshSurface = orchestrator as unknown as {
104
+ refreshNamespacesAfterConvergence(namespaces: readonly string[]): Promise<void>;
105
+ };
106
+
107
+ await refreshSurface.refreshNamespacesAfterConvergence(["default"]);
108
+
109
+ const projection = readProjectedMemoryBrowse(memoryDir, { limit: 10, offset: 0 });
110
+ assert.equal(projection?.memories[0]?.id, memory.id);
111
+ } finally {
112
+ await rm(memoryDir, { recursive: true, force: true });
113
+ }
114
+ });
@@ -218,6 +218,7 @@ import {
218
218
  runPatternReinforcement,
219
219
  type PatternReinforcementResult,
220
220
  } from "./maintenance/pattern-reinforcement.js";
221
+ import { refreshConvergedNamespaces } from "./convergence-refresh.js";
221
222
  import { ModelRegistry } from "./model-registry.js";
222
223
  import { applyRuntimeRetrievalPolicy, expandQuery } from "./retrieval.js";
223
224
  import {
@@ -1278,11 +1279,11 @@ export class Orchestrator {
1278
1279
  return await this.namespaceSearchRouter.healthForNamespace(namespace, execution);
1279
1280
  }
1280
1281
 
1281
- private isSearchAvailableForNamespaceRouting(): boolean {
1282
- if (resolveNamespaceCapabilities(this.config).namespaces) return true;
1283
- return this.qmd.isAvailable();
1282
+ async refreshNamespacesAfterConvergence(namespaces: readonly string[]): Promise<void> {
1283
+ return refreshConvergedNamespaces(namespaces, this.namespaceSearchRouter, this.getStorage.bind(this));
1284
1284
  }
1285
1285
 
1286
+
1286
1287
  invalidateLiveContentHashIndex(): void {
1287
1288
  this.contentHashIndex = null;
1288
1289
  this.contentHashIndexesByStorageDir.clear();
@@ -1530,7 +1531,7 @@ export class Orchestrator {
1530
1531
  });
1531
1532
  this.contradictionLinkingCoordinator = new ContradictionLinkingCoordinator({
1532
1533
  getConfig: () => this.config,
1533
- isSearchAvailable: () => this.isSearchAvailableForNamespaceRouting(),
1534
+ isSearchAvailable: () => resolveNamespaceCapabilities(this.config).namespaces || this.qmd.isAvailable(),
1534
1535
  searchAcrossNamespaces: (options) => this.searchAcrossNamespaces(options),
1535
1536
  extractMemoryIdsFromResults: (results) => this.extractMemoryIdsFromResults(results),
1536
1537
  namespaceFromPath: (p) => this.namespaceFromPath(p),