@remnic/core 9.3.732 → 9.3.734

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 (294) hide show
  1. package/dist/access-boundary.d.ts +10 -10
  2. package/dist/access-boundary.js +9 -9
  3. package/dist/access-cli.js +25 -23
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +10 -10
  6. package/dist/access-http.js +14 -14
  7. package/dist/access-mcp.d.ts +10 -10
  8. package/dist/access-mcp.js +13 -13
  9. package/dist/access-operations-batch.js +11 -11
  10. package/dist/access-operations.d.ts +10 -10
  11. package/dist/access-operations.js +12 -12
  12. package/dist/{access-service-Byoe3HsT.d.ts → access-service-rjFfmfKB.d.ts} +4 -4
  13. package/dist/access-service.d.ts +10 -10
  14. package/dist/access-service.js +8 -8
  15. package/dist/access-surface-catalog.d.ts +10 -10
  16. package/dist/action-confidence.d.ts +1 -1
  17. package/dist/active-memory-bridge.d.ts +1 -1
  18. package/dist/active-memory-bridge.js +3 -2
  19. package/dist/active-recall.d.ts +1 -1
  20. package/dist/behavior-learner.d.ts +1 -1
  21. package/dist/behavior-signals.d.ts +1 -1
  22. package/dist/bootstrap.d.ts +9 -9
  23. package/dist/briefing.d.ts +1 -1
  24. package/dist/buffer-surprise-report.d.ts +1 -1
  25. package/dist/buffer.d.ts +1 -1
  26. package/dist/calibration.d.ts +1 -1
  27. package/dist/capabilities.d.ts +97 -2
  28. package/dist/capabilities.js +11 -3
  29. package/dist/{catalog-DM1nk7cM.d.ts → catalog-DHYXzM4-.d.ts} +2 -2
  30. package/dist/causal-behavior.d.ts +1 -1
  31. package/dist/causal-consolidation.d.ts +1 -1
  32. package/dist/causal-trajectory-graph.d.ts +1 -1
  33. package/dist/{chunk-24D66MMN.js → chunk-2L5RTVMO.js} +7 -4
  34. package/dist/chunk-2L5RTVMO.js.map +1 -0
  35. package/dist/{chunk-KQYGNGON.js → chunk-3QETM5NG.js} +6 -3
  36. package/dist/chunk-3QETM5NG.js.map +1 -0
  37. package/dist/{chunk-ZQUAVZNG.js → chunk-54RCE5Z3.js} +7 -4
  38. package/dist/chunk-54RCE5Z3.js.map +1 -0
  39. package/dist/{chunk-NOU77OHX.js → chunk-5DIKZKOD.js} +2 -2
  40. package/dist/{chunk-CGPHMNL4.js → chunk-5OYHJIJN.js} +10 -6
  41. package/dist/chunk-5OYHJIJN.js.map +1 -0
  42. package/dist/{chunk-LUCARK4W.js → chunk-6U7TES2M.js} +29 -28
  43. package/dist/chunk-6U7TES2M.js.map +1 -0
  44. package/dist/{chunk-FFUCCKPN.js → chunk-7FPJFCXL.js} +10 -7
  45. package/dist/chunk-7FPJFCXL.js.map +1 -0
  46. package/dist/{chunk-PMAQRUN4.js → chunk-CILX2XW7.js} +5 -2
  47. package/dist/chunk-CILX2XW7.js.map +1 -0
  48. package/dist/{chunk-ZVHRSR2R.js → chunk-ET5HXSQL.js} +6 -3
  49. package/dist/chunk-ET5HXSQL.js.map +1 -0
  50. package/dist/{chunk-KSJCXXOU.js → chunk-FAGERSH2.js} +6 -3
  51. package/dist/chunk-FAGERSH2.js.map +1 -0
  52. package/dist/{chunk-FYWUNVFZ.js → chunk-IDIXGGDN.js} +6 -6
  53. package/dist/{chunk-CX77GNMB.js → chunk-IWMGBNXY.js} +6 -3
  54. package/dist/chunk-IWMGBNXY.js.map +1 -0
  55. package/dist/{chunk-GGL34GCW.js → chunk-IZLTOS5L.js} +7 -4
  56. package/dist/chunk-IZLTOS5L.js.map +1 -0
  57. package/dist/{chunk-HHNSLPX7.js → chunk-K7PAILHO.js} +10 -9
  58. package/dist/chunk-K7PAILHO.js.map +1 -0
  59. package/dist/{chunk-UZYLX7M6.js → chunk-LV32K4OP.js} +9 -6
  60. package/dist/chunk-LV32K4OP.js.map +1 -0
  61. package/dist/{chunk-HJWQJUKQ.js → chunk-NDYQIN6C.js} +3 -3
  62. package/dist/{chunk-DKT3X5C3.js → chunk-PEF2XOIV.js} +7 -4
  63. package/dist/chunk-PEF2XOIV.js.map +1 -0
  64. package/dist/{chunk-646B5ERJ.js → chunk-PKO5NJ65.js} +51 -48
  65. package/dist/chunk-PKO5NJ65.js.map +1 -0
  66. package/dist/{chunk-QZHF4BWN.js → chunk-Q5LGXWNG.js} +6 -6
  67. package/dist/{chunk-ESF7TRYJ.js → chunk-SHJGBAIW.js} +37 -2
  68. package/dist/{chunk-ESF7TRYJ.js.map → chunk-SHJGBAIW.js.map} +1 -1
  69. package/dist/{chunk-O4ZIBPIW.js → chunk-T7CGPTFU.js} +3 -3
  70. package/dist/{chunk-PLBIPT6I.js → chunk-TJSQHO4Q.js} +7 -4
  71. package/dist/chunk-TJSQHO4Q.js.map +1 -0
  72. package/dist/{chunk-6TUWSUUD.js → chunk-UF3N7IRP.js} +26 -24
  73. package/dist/chunk-UF3N7IRP.js.map +1 -0
  74. package/dist/{chunk-P3VJCTVE.js → chunk-UH3NYOHN.js} +4 -3
  75. package/dist/chunk-UH3NYOHN.js.map +1 -0
  76. package/dist/{chunk-J6BH2OBA.js → chunk-UK6U5C3N.js} +8 -5
  77. package/dist/chunk-UK6U5C3N.js.map +1 -0
  78. package/dist/{chunk-OTQE66IX.js → chunk-V5OVSGB6.js} +6 -3
  79. package/dist/chunk-V5OVSGB6.js.map +1 -0
  80. package/dist/{chunk-H3MB3F62.js → chunk-WHQ2JB35.js} +4 -3
  81. package/dist/chunk-WHQ2JB35.js.map +1 -0
  82. package/dist/{chunk-NIZQH6AU.js → chunk-WTTVFSCO.js} +8 -7
  83. package/dist/chunk-WTTVFSCO.js.map +1 -0
  84. package/dist/{chunk-OUITHS6V.js → chunk-Z7J3OAPR.js} +357 -325
  85. package/dist/chunk-Z7J3OAPR.js.map +1 -0
  86. package/dist/{cli-Dt-tuiYH.d.ts → cli-XVpmSoQs.d.ts} +3 -3
  87. package/dist/cli.d.ts +11 -11
  88. package/dist/cli.js +20 -20
  89. package/dist/compounding/engine.d.ts +3 -2
  90. package/dist/compounding/engine.js +2 -1
  91. package/dist/compounding/preference-consolidator.d.ts +1 -1
  92. package/dist/compression-optimizer.d.ts +1 -1
  93. package/dist/config.d.ts +1 -1
  94. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  95. package/dist/connectors/codex-materialize.d.ts +1 -1
  96. package/dist/connectors/index.d.ts +1 -1
  97. package/dist/consolidation-provenance-check.d.ts +1 -1
  98. package/dist/consolidation-undo.d.ts +1 -1
  99. package/dist/contradiction/index.d.ts +2 -2
  100. package/dist/contradiction/index.js +2 -1
  101. package/dist/{contradiction-scan-HWGEOUDS.js → contradiction-scan-OUHMCUBT.js} +3 -2
  102. package/dist/conversation-index/backend.d.ts +1 -1
  103. package/dist/conversation-index/chunker.d.ts +1 -1
  104. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  105. package/dist/conversation-index/indexer.d.ts +1 -1
  106. package/dist/conversation-index/search.d.ts +1 -1
  107. package/dist/day-summary.d.ts +1 -1
  108. package/dist/delinearize.d.ts +1 -1
  109. package/dist/direct-answer-wiring.d.ts +1 -1
  110. package/dist/direct-answer.d.ts +1 -1
  111. package/dist/embedding-fallback.d.ts +1 -1
  112. package/dist/embedding-fallback.js +2 -2
  113. package/dist/enrichment/index.d.ts +1 -1
  114. package/dist/entity-retrieval.d.ts +1 -1
  115. package/dist/entity-retrieval.js +2 -1
  116. package/dist/entity-schema.d.ts +1 -1
  117. package/dist/explicit-capture.d.ts +9 -9
  118. package/dist/explicit-capture.js +2 -1
  119. package/dist/extraction-faithfulness.d.ts +1 -1
  120. package/dist/extraction-judge-telemetry.d.ts +1 -1
  121. package/dist/extraction-judge-training.d.ts +1 -1
  122. package/dist/extraction-judge.d.ts +1 -1
  123. package/dist/extraction.d.ts +1 -1
  124. package/dist/extraction.js +3 -3
  125. package/dist/fallback-llm.d.ts +1 -1
  126. package/dist/{first-start-migration-OOR57AYR.js → first-start-migration-W4U6XDKI.js} +7 -6
  127. package/dist/first-start-migration-W4U6XDKI.js.map +1 -0
  128. package/dist/graph-dashboard-diff.d.ts +1 -1
  129. package/dist/graph-dashboard-key.d.ts +1 -1
  130. package/dist/graph-dashboard-parser.d.ts +1 -1
  131. package/dist/graph-edge-reinforcement.d.ts +1 -1
  132. package/dist/graph-snapshot.d.ts +1 -1
  133. package/dist/graph.d.ts +1 -1
  134. package/dist/identity-continuity.d.ts +1 -1
  135. package/dist/importance.d.ts +1 -1
  136. package/dist/index.d.ts +12 -12
  137. package/dist/index.js +43 -43
  138. package/dist/intent.d.ts +1 -1
  139. package/dist/lcm/engine.d.ts +1 -1
  140. package/dist/lcm/index.d.ts +1 -1
  141. package/dist/lcm/tools.d.ts +1 -1
  142. package/dist/lifecycle.d.ts +1 -1
  143. package/dist/live-connectors-runner.d.ts +1 -1
  144. package/dist/local-llm.d.ts +1 -1
  145. package/dist/local-llm.js +2 -1
  146. package/dist/local-model-endpoint.d.ts +1 -1
  147. package/dist/maintenance/memory-governance.d.ts +1 -1
  148. package/dist/mcp-memory-inspector-app.d.ts +10 -10
  149. package/dist/memory-action-policy.d.ts +1 -1
  150. package/dist/memory-cache.d.ts +1 -1
  151. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  152. package/dist/memory-projection-store.d.ts +1 -1
  153. package/dist/memory-provenance.d.ts +1 -1
  154. package/dist/memory-worth-outcomes.d.ts +1 -1
  155. package/dist/models-json.d.ts +1 -1
  156. package/dist/namespaces/migrate.d.ts +2 -2
  157. package/dist/namespaces/migrate.js +6 -6
  158. package/dist/namespaces/principal.d.ts +1 -1
  159. package/dist/namespaces/principal.js +2 -1
  160. package/dist/namespaces/search.d.ts +1 -1
  161. package/dist/namespaces/search.js +4 -4
  162. package/dist/namespaces/storage.d.ts +2 -2
  163. package/dist/namespaces/storage.js +2 -1
  164. package/dist/native-knowledge.d.ts +1 -1
  165. package/dist/operator-toolkit.d.ts +1 -1
  166. package/dist/operator-toolkit.js +11 -11
  167. package/dist/orchestration/compression-guideline-coordinator.d.ts +1 -1
  168. package/dist/orchestration/maintenance.d.ts +2 -2
  169. package/dist/orchestration/maintenance.js +6 -5
  170. package/dist/{orchestrator-B4KjaOtY.d.ts → orchestrator-BXi-gadS.d.ts} +66 -5
  171. package/dist/orchestrator.d.ts +5 -5
  172. package/dist/orchestrator.js +20 -18
  173. package/dist/patterns-cli.d.ts +1 -1
  174. package/dist/policy-runtime.d.ts +1 -1
  175. package/dist/provenance.d.ts +1 -1
  176. package/dist/qmd-recall-cache.d.ts +1 -1
  177. package/dist/qmd.d.ts +1 -1
  178. package/dist/recall-disclosure-escalation.d.ts +1 -1
  179. package/dist/recall-explain-renderer.d.ts +1 -1
  180. package/dist/recall-planner-llm.d.ts +1 -1
  181. package/dist/recall-state.d.ts +1 -1
  182. package/dist/recall-tag-filter.d.ts +1 -1
  183. package/dist/recall-xray-cli.d.ts +1 -1
  184. package/dist/recall-xray-renderer.d.ts +1 -1
  185. package/dist/recall-xray.d.ts +1 -1
  186. package/dist/resolve-auth-token.d.ts +1 -1
  187. package/dist/retrieval-agents.d.ts +1 -1
  188. package/dist/retrieval-tiers.d.ts +1 -1
  189. package/dist/routing/engine.d.ts +1 -1
  190. package/dist/routing/store.d.ts +1 -1
  191. package/dist/schemas.d.ts +22 -22
  192. package/dist/search/embed-helper.d.ts +1 -1
  193. package/dist/search/embed-helper.js +2 -2
  194. package/dist/search/factory.d.ts +1 -1
  195. package/dist/search/factory.js +3 -3
  196. package/dist/search/index.d.ts +1 -1
  197. package/dist/search/index.js +3 -3
  198. package/dist/search/lancedb-backend.d.ts +1 -1
  199. package/dist/search/meilisearch-backend.d.ts +1 -1
  200. package/dist/search/noop-backend.d.ts +1 -1
  201. package/dist/search/orama-backend.d.ts +1 -1
  202. package/dist/search/port.d.ts +1 -1
  203. package/dist/search/remote-backend.d.ts +1 -1
  204. package/dist/{semantic-SLAa_prH.d.ts → semantic-DJR8_DMQ.d.ts} +1 -1
  205. package/dist/{semantic-consolidation-CstTvHPo.d.ts → semantic-consolidation-DeL5grLx.d.ts} +1 -1
  206. package/dist/semantic-consolidation.d.ts +2 -2
  207. package/dist/semantic-rule-verifier.d.ts +1 -1
  208. package/dist/session-observer-bands.d.ts +1 -1
  209. package/dist/session-observer-state.d.ts +1 -1
  210. package/dist/shared-context/manager.d.ts +1 -1
  211. package/dist/signal.d.ts +1 -1
  212. package/dist/storage.d.ts +1 -1
  213. package/dist/summarizer.d.ts +1 -1
  214. package/dist/summarizer.js +3 -2
  215. package/dist/summary-snapshot.d.ts +1 -1
  216. package/dist/temporal-supersession.d.ts +1 -1
  217. package/dist/temporal-validity.d.ts +1 -1
  218. package/dist/threading.d.ts +1 -1
  219. package/dist/tier-migration.d.ts +1 -1
  220. package/dist/tier-routing.d.ts +1 -1
  221. package/dist/{tier-stats-3LYQ3VV5.js → tier-stats-LSM35HZY.js} +5 -2
  222. package/dist/tier-stats-LSM35HZY.js.map +1 -0
  223. package/dist/topics.d.ts +1 -1
  224. package/dist/transcript.d.ts +1 -1
  225. package/dist/transfer/types.d.ts +12 -12
  226. package/dist/trust-score-stage.d.ts +1 -1
  227. package/dist/trust-score.d.ts +1 -1
  228. package/dist/{types-VkxElCHR.d.ts → types-CpFz51Pv.d.ts} +1 -1
  229. package/dist/types.d.ts +1 -1
  230. package/dist/utility-runtime.d.ts +1 -1
  231. package/package.json +2 -2
  232. package/src/access-service.ts +42 -37
  233. package/src/active-memory-bridge.ts +2 -1
  234. package/src/admin/admin-surfaces.ts +2 -1
  235. package/src/capabilities.test.ts +178 -0
  236. package/src/capabilities.ts +197 -0
  237. package/src/cli.ts +13 -9
  238. package/src/compounding/engine.ts +4 -3
  239. package/src/contradiction/contradiction-scan.ts +4 -3
  240. package/src/embedding-fallback.ts +5 -2
  241. package/src/entity-retrieval.ts +3 -2
  242. package/src/explicit-capture.ts +2 -1
  243. package/src/extraction.ts +6 -3
  244. package/src/local-llm.ts +4 -3
  245. package/src/maintenance/first-start-migration.ts +6 -3
  246. package/src/maintenance/namespace-maintenance-fanout.ts +2 -1
  247. package/src/maintenance/namespace-planner.ts +4 -3
  248. package/src/maintenance/tier-stats.ts +2 -1
  249. package/src/namespaces/catalog.ts +2 -1
  250. package/src/namespaces/migrate.ts +2 -1
  251. package/src/namespaces/principal.ts +6 -5
  252. package/src/namespaces/scope-profiles.ts +2 -1
  253. package/src/namespaces/search.ts +2 -1
  254. package/src/namespaces/storage.ts +4 -3
  255. package/src/operator-toolkit.ts +19 -18
  256. package/src/orchestration/maintenance.ts +8 -4
  257. package/src/orchestration/semantic-consolidation-coordinator.ts +454 -0
  258. package/src/orchestration/tier-migration-coordinator.ts +5 -4
  259. package/src/orchestrator.ts +78 -417
  260. package/src/scopes/scope-plan.ts +3 -2
  261. package/src/search/embed-helper.ts +5 -2
  262. package/src/search/factory.ts +9 -6
  263. package/src/summarizer.ts +3 -2
  264. package/dist/chunk-24D66MMN.js.map +0 -1
  265. package/dist/chunk-646B5ERJ.js.map +0 -1
  266. package/dist/chunk-6TUWSUUD.js.map +0 -1
  267. package/dist/chunk-CGPHMNL4.js.map +0 -1
  268. package/dist/chunk-CX77GNMB.js.map +0 -1
  269. package/dist/chunk-DKT3X5C3.js.map +0 -1
  270. package/dist/chunk-FFUCCKPN.js.map +0 -1
  271. package/dist/chunk-GGL34GCW.js.map +0 -1
  272. package/dist/chunk-H3MB3F62.js.map +0 -1
  273. package/dist/chunk-HHNSLPX7.js.map +0 -1
  274. package/dist/chunk-J6BH2OBA.js.map +0 -1
  275. package/dist/chunk-KQYGNGON.js.map +0 -1
  276. package/dist/chunk-KSJCXXOU.js.map +0 -1
  277. package/dist/chunk-LUCARK4W.js.map +0 -1
  278. package/dist/chunk-NIZQH6AU.js.map +0 -1
  279. package/dist/chunk-OTQE66IX.js.map +0 -1
  280. package/dist/chunk-OUITHS6V.js.map +0 -1
  281. package/dist/chunk-P3VJCTVE.js.map +0 -1
  282. package/dist/chunk-PLBIPT6I.js.map +0 -1
  283. package/dist/chunk-PMAQRUN4.js.map +0 -1
  284. package/dist/chunk-UZYLX7M6.js.map +0 -1
  285. package/dist/chunk-ZQUAVZNG.js.map +0 -1
  286. package/dist/chunk-ZVHRSR2R.js.map +0 -1
  287. package/dist/first-start-migration-OOR57AYR.js.map +0 -1
  288. package/dist/tier-stats-3LYQ3VV5.js.map +0 -1
  289. /package/dist/{chunk-NOU77OHX.js.map → chunk-5DIKZKOD.js.map} +0 -0
  290. /package/dist/{chunk-FYWUNVFZ.js.map → chunk-IDIXGGDN.js.map} +0 -0
  291. /package/dist/{chunk-HJWQJUKQ.js.map → chunk-NDYQIN6C.js.map} +0 -0
  292. /package/dist/{chunk-QZHF4BWN.js.map → chunk-Q5LGXWNG.js.map} +0 -0
  293. /package/dist/{chunk-O4ZIBPIW.js.map → chunk-T7CGPTFU.js.map} +0 -0
  294. /package/dist/{contradiction-scan-HWGEOUDS.js.map → contradiction-scan-OUHMCUBT.js.map} +0 -0
@@ -1,3 +1,4 @@
1
+ import { resolveNamespaceCapabilities } from "../capabilities.js";
1
2
  import { createHash } from "node:crypto";
2
3
 
3
4
  import { combineNamespaces, type CodingNamespaceOverlay } from "../coding/coding-namespace.js";
@@ -326,7 +327,7 @@ export function resolveScopeProfilePlan(
326
327
  options: ResolveScopeProfilePlanOptions,
327
328
  ): ResolvedScopeProfilePlan | null {
328
329
  const active = activeScopeProfile(options.config);
329
- if (!active || !options.config.namespacesEnabled) return null;
330
+ if (!active || !resolveNamespaceCapabilities(options.config).namespaces) return null;
330
331
 
331
332
  const baseNamespace = scopeProfileSelfNamespace(options.principal, options.config);
332
333
  const layerIds = Array.from(
@@ -1,3 +1,4 @@
1
+ import { resolveNamespaceCapabilities } from "../capabilities.js";
1
2
  import path from "node:path";
2
3
  import type { PluginConfig, QmdSearchResult } from "../types.js";
3
4
  import type {
@@ -350,7 +351,7 @@ export class NamespaceSearchRouter {
350
351
  const useLegacyDefaultCollection =
351
352
  key === this.config.defaultNamespace && storage.dir === this.config.memoryDir;
352
353
  const filtersNestedNamespaces =
353
- this.config.namespacesEnabled === true && useLegacyDefaultCollection;
354
+ resolveNamespaceCapabilities(this.config).namespaces === true && useLegacyDefaultCollection;
354
355
  const rootHostEmbeddingScope =
355
356
  (this.config as NamespaceScopedSearchConfig).hostEmbeddingProviderScope ??
356
357
  this.config.memoryDir;
@@ -1,3 +1,4 @@
1
+ import { resolveNamespaceCapabilities } from "../capabilities.js";
1
2
  import path from "node:path";
2
3
  import { access, lstat, readdir } from "node:fs/promises";
3
4
  import { isSafeRouteNamespace } from "../routing/engine.js";
@@ -139,7 +140,7 @@ export interface NamespaceStorageRouterHooks {
139
140
  * the default migrate into that tokenized/legacy-named dir.
140
141
  */
141
142
  export async function resolveDefaultNamespaceRoot(config: PluginConfig): Promise<string> {
142
- if (!config.namespacesEnabled) {
143
+ if (!resolveNamespaceCapabilities(config).namespaces) {
143
144
  return config.memoryDir;
144
145
  }
145
146
 
@@ -183,7 +184,7 @@ export async function resolveNamespaceStorageRoot(
183
184
  config: PluginConfig,
184
185
  namespace: string,
185
186
  ): Promise<string> {
186
- if (!config.namespacesEnabled) return config.memoryDir;
187
+ if (!resolveNamespaceCapabilities(config).namespaces) return config.memoryDir;
187
188
  // Compare on NORMALIZED identity so a whitespace-padded configured default name
188
189
  // still routes to the default root rather than a tokenized non-default dir
189
190
  // (NH-FH). The catalog keys records by the same normalized identity.
@@ -257,7 +258,7 @@ export class NamespaceStorageRouter {
257
258
 
258
259
  private async namespaceRoot(namespace: string): Promise<string> {
259
260
  // NOTE: only used after defaultNamespaceRoot() resolution.
260
- if (!this.config.namespacesEnabled) return this.config.memoryDir;
261
+ if (!resolveNamespaceCapabilities(this.config).namespaces) return this.config.memoryDir;
261
262
  if (normalizeNamespaceIdentity(namespace) === this.defaultNamespaceIdentity) {
262
263
  return this.defaultNsRootResolved ?? this.config.memoryDir;
263
264
  }
@@ -28,6 +28,7 @@ import {
28
28
  resolveAccessSetupCapabilities,
29
29
  resolveCapabilities,
30
30
  resolveGraphConstructionCapabilities,
31
+ resolveQmdCapabilities,
31
32
  } from "./capabilities.js";
32
33
  import {
33
34
  analyzeSessionIntegrity,
@@ -742,7 +743,7 @@ export async function runOperatorSetup(options: OperatorSetupOptions): Promise<O
742
743
  await mkdir(options.orchestrator.config.workspaceDir, { recursive: true });
743
744
 
744
745
  const qmdAvailable = await options.orchestrator.qmd.probe();
745
- const collectionState = options.orchestrator.config.qmdEnabled
746
+ const collectionState = resolveQmdCapabilities(options.orchestrator.config).qmd
746
747
  ? await options.orchestrator.qmd.ensureCollection(
747
748
  options.orchestrator.config.memoryDir,
748
749
  options.orchestrator.config.qmdCollection,
@@ -813,7 +814,7 @@ export async function runOperatorSetup(options: OperatorSetupOptions): Promise<O
813
814
  workspaceDir: options.orchestrator.config.workspaceDir,
814
815
  directories,
815
816
  qmd: {
816
- enabled: options.orchestrator.config.qmdEnabled,
817
+ enabled: resolveQmdCapabilities(options.orchestrator.config).qmd,
817
818
  available: qmdAvailable,
818
819
  collectionState,
819
820
  debugStatus: options.orchestrator.qmd.debugStatus(),
@@ -949,12 +950,12 @@ async function buildOperatorConfigReviewReport(input: {
949
950
  }));
950
951
  }
951
952
 
952
- if (config.qmdEnabled && config.qmdDaemonEnabled === false) {
953
+ if (resolveQmdCapabilities(config).qmd && resolveQmdCapabilities(config).qmdDaemon === false) {
953
954
  findings.push(buildConfigReviewFinding({
954
955
  key: "qmd_daemon",
955
956
  status: "recommend",
956
957
  setting: "qmdDaemonEnabled",
957
- currentValue: config.qmdDaemonEnabled,
958
+ currentValue: resolveQmdCapabilities(config).qmdDaemon,
958
959
  defaultValue: true,
959
960
  recommendedValue: true,
960
961
  summary: "Enable the QMD daemon path when QMD powers recall.",
@@ -991,12 +992,12 @@ async function buildOperatorConfigReviewReport(input: {
991
992
  }));
992
993
  }
993
994
 
994
- if (searchBackend === "qmd" && config.qmdEnabled === false) {
995
+ if (searchBackend === "qmd" && resolveQmdCapabilities(config).qmd === false) {
995
996
  findings.push(buildConfigReviewFinding({
996
997
  key: "qmd_search_backend_disabled",
997
998
  status: "problem",
998
999
  setting: "qmdEnabled",
999
- currentValue: config.qmdEnabled,
1000
+ currentValue: resolveQmdCapabilities(config).qmd,
1000
1001
  defaultValue: true,
1001
1002
  recommendedValue: true,
1002
1003
  summary: "QMD search is selected but QMD is disabled.",
@@ -1005,12 +1006,12 @@ async function buildOperatorConfigReviewReport(input: {
1005
1006
  }));
1006
1007
  }
1007
1008
 
1008
- if (config.qmdColdTierEnabled === true && config.qmdEnabled === false) {
1009
+ if (resolveQmdCapabilities(config).qmdColdTier === true && resolveQmdCapabilities(config).qmd === false) {
1009
1010
  findings.push(buildConfigReviewFinding({
1010
1011
  key: "qmd_cold_tier_requires_qmd",
1011
1012
  status: "problem",
1012
1013
  setting: "qmdEnabled",
1013
- currentValue: config.qmdEnabled,
1014
+ currentValue: resolveQmdCapabilities(config).qmd,
1014
1015
  defaultValue: true,
1015
1016
  recommendedValue: true,
1016
1017
  summary: "Cold-tier QMD recall is enabled while QMD itself is disabled.",
@@ -1019,12 +1020,12 @@ async function buildOperatorConfigReviewReport(input: {
1019
1020
  }));
1020
1021
  }
1021
1022
 
1022
- if (config.qmdTierMigrationEnabled && config.qmdColdTierEnabled !== true) {
1023
+ if (resolveQmdCapabilities(config).qmdTierMigration && resolveQmdCapabilities(config).qmdColdTier !== true) {
1023
1024
  findings.push(buildConfigReviewFinding({
1024
1025
  key: "qmd_tier_migration_requires_cold_tier",
1025
1026
  status: "problem",
1026
1027
  setting: "qmdColdTierEnabled",
1027
- currentValue: config.qmdColdTierEnabled,
1028
+ currentValue: resolveQmdCapabilities(config).qmdColdTier,
1028
1029
  defaultValue: false,
1029
1030
  recommendedValue: true,
1030
1031
  summary: "Hot/cold tier migration is enabled without the cold tier itself.",
@@ -1033,12 +1034,12 @@ async function buildOperatorConfigReviewReport(input: {
1033
1034
  }));
1034
1035
  }
1035
1036
 
1036
- if (resolveIndexingCapabilities(config).conversationIndex && config.conversationIndexBackend === "qmd" && config.qmdEnabled === false) {
1037
+ if (resolveIndexingCapabilities(config).conversationIndex && config.conversationIndexBackend === "qmd" && resolveQmdCapabilities(config).qmd === false) {
1037
1038
  findings.push(buildConfigReviewFinding({
1038
1039
  key: "conversation_index_qmd_requires_qmd",
1039
1040
  status: "problem",
1040
1041
  setting: "qmdEnabled",
1041
- currentValue: config.qmdEnabled,
1042
+ currentValue: resolveQmdCapabilities(config).qmd,
1042
1043
  defaultValue: true,
1043
1044
  recommendedValue: true,
1044
1045
  summary: "The conversation index is configured for QMD while QMD is disabled.",
@@ -1063,8 +1064,8 @@ async function buildOperatorConfigReviewReport(input: {
1063
1064
  profile: {
1064
1065
  memoryOsPreset: config.memoryOsPreset,
1065
1066
  searchBackend,
1066
- qmdEnabled: config.qmdEnabled,
1067
- qmdDaemonEnabled: config.qmdDaemonEnabled,
1067
+ qmdEnabled: resolveQmdCapabilities(config).qmd,
1068
+ qmdDaemonEnabled: resolveQmdCapabilities(config).qmdDaemon,
1068
1069
  nativeKnowledgeEnabled: config.nativeKnowledge?.enabled === true,
1069
1070
  fileHygieneEnabled: config.fileHygiene?.enabled === true,
1070
1071
  conversationIndexEnabled: resolveIndexingCapabilities(config).conversationIndex,
@@ -1145,12 +1146,12 @@ export async function runOperatorDoctor(options: OperatorDoctorOptions): Promise
1145
1146
  });
1146
1147
 
1147
1148
  const qmdAvailable = await options.orchestrator.qmd.probe();
1148
- const collectionState = config.qmdEnabled
1149
+ const collectionState = resolveQmdCapabilities(config).qmd
1149
1150
  ? await options.orchestrator.qmd.ensureCollection(config.memoryDir, config.qmdCollection)
1150
1151
  : "skipped";
1151
1152
  checks.push({
1152
1153
  key: "qmd",
1153
- status: !config.qmdEnabled
1154
+ status: !resolveQmdCapabilities(config).qmd
1154
1155
  ? "warn"
1155
1156
  : !qmdAvailable
1156
1157
  ? "error"
@@ -1159,12 +1160,12 @@ export async function runOperatorDoctor(options: OperatorDoctorOptions): Promise
1159
1160
  : collectionState === "missing"
1160
1161
  ? "error"
1161
1162
  : "warn",
1162
- summary: !config.qmdEnabled
1163
+ summary: !resolveQmdCapabilities(config).qmd
1163
1164
  ? "QMD is disabled in config."
1164
1165
  : qmdAvailable
1165
1166
  ? `QMD is reachable (${collectionState}).`
1166
1167
  : "QMD is not currently reachable.",
1167
- remediation: !config.qmdEnabled
1168
+ remediation: !resolveQmdCapabilities(config).qmd
1168
1169
  ? "Enable `qmdEnabled` if you expect hybrid search."
1169
1170
  : !qmdAvailable
1170
1171
  ? "Ensure the `qmd` binary is installed and on PATH, or set `qmdPath`."
@@ -19,6 +19,10 @@
19
19
  * `orchestrator.requestQmdMaintenance` etc. continue to work.
20
20
  */
21
21
 
22
+ import {
23
+ resolveNamespaceCapabilities,
24
+ resolveQmdCapabilities,
25
+ } from "../capabilities.js";
22
26
  import { existsSync } from "node:fs";
23
27
  import path from "node:path";
24
28
 
@@ -403,7 +407,7 @@ export class MaintenanceScheduler {
403
407
  /** Internal: queue a debounced QMD maintenance pass. */
404
408
  private requestQmdMaintenance(): void {
405
409
  if (!this.deps.getQmd().isAvailable()) return;
406
- if (!this.deps.config.qmdMaintenanceEnabled) return;
410
+ if (!resolveQmdCapabilities(this.deps.config).qmdMaintenance) return;
407
411
 
408
412
  this.qmdMaintenancePending = true;
409
413
  if (this.qmdMaintenanceTimer) return;
@@ -437,7 +441,7 @@ export class MaintenanceScheduler {
437
441
  this.qmdMaintenancePending = false;
438
442
 
439
443
  try {
440
- if (this.deps.config.namespacesEnabled) {
444
+ if (resolveNamespaceCapabilities(this.deps.config).namespaces) {
441
445
  // Include cataloged dynamic namespaces, not just the configured set
442
446
  // (NGnei), but run through the namespace-aware maintenance planner so
443
447
  // each namespace is budgeted, lock-protected, and status-recorded
@@ -446,7 +450,7 @@ export class MaintenanceScheduler {
446
450
  const now = Date.now();
447
451
  const lastEmbedAtByNamespace = this.lastQmdEmbedAtMsByNamespace;
448
452
  const dueEmbedNamespaces = (namespaces: string[]): string[] => {
449
- if (!this.deps.config.qmdAutoEmbedEnabled) return [];
453
+ if (!resolveQmdCapabilities(this.deps.config).qmdAutoEmbed) return [];
450
454
  return namespaces.filter(
451
455
  (namespace) =>
452
456
  now - (lastEmbedAtByNamespace.get(namespace) ?? 0) >=
@@ -514,7 +518,7 @@ export class MaintenanceScheduler {
514
518
  await this.deps.getQmd().update();
515
519
  const now = Date.now();
516
520
  if (
517
- this.deps.config.qmdAutoEmbedEnabled &&
521
+ resolveQmdCapabilities(this.deps.config).qmdAutoEmbed &&
518
522
  now - this.lastQmdEmbedAtMs >= this.deps.config.qmdEmbedMinIntervalMs
519
523
  ) {
520
524
  await this.deps.getQmd().embed();