@remnic/core 9.3.737 → 9.3.738

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 (129) hide show
  1. package/dist/access-boundary.js +10 -10
  2. package/dist/access-cli.js +26 -26
  3. package/dist/access-http.js +15 -15
  4. package/dist/access-mcp.js +14 -14
  5. package/dist/access-operations-batch.js +12 -12
  6. package/dist/access-operations.js +13 -13
  7. package/dist/access-service.js +9 -9
  8. package/dist/active-memory-bridge.js +3 -3
  9. package/dist/buffer.js +2 -1
  10. package/dist/capabilities.d.ts +98 -1
  11. package/dist/capabilities.js +7 -1
  12. package/dist/{chunk-G54IDCD3.js → chunk-23PLOBWT.js} +30 -27
  13. package/dist/chunk-23PLOBWT.js.map +1 -0
  14. package/dist/{chunk-K3Y2SJTN.js → chunk-56LP72AD.js} +6 -6
  15. package/dist/{chunk-ZBZ4XULO.js → chunk-66RZ4EIT.js} +3 -3
  16. package/dist/{chunk-IPI45Q4S.js → chunk-75PDC7VT.js} +9 -8
  17. package/dist/chunk-75PDC7VT.js.map +1 -0
  18. package/dist/{chunk-GB2FZOWB.js → chunk-7B7IPPN5.js} +5 -5
  19. package/dist/{chunk-QNTLWH3T.js → chunk-A7INTIC5.js} +3 -3
  20. package/dist/{chunk-FLPKEMSO.js → chunk-AKKFHN3I.js} +2 -2
  21. package/dist/{chunk-AAIHDIMD.js → chunk-BHJAMSVC.js} +7 -7
  22. package/dist/{chunk-BXPG5AVX.js → chunk-BHQQVUEQ.js} +6 -6
  23. package/dist/{chunk-HFXZIF3V.js → chunk-BVG2IZOB.js} +3 -3
  24. package/dist/{chunk-NDKW67ER.js → chunk-C53JDEH3.js} +4 -4
  25. package/dist/{chunk-AESC5OQJ.js → chunk-CKHPUOAP.js} +2 -2
  26. package/dist/{chunk-OYHYBHHI.js → chunk-DS3FZ7GS.js} +4 -4
  27. package/dist/{chunk-PB5YON2G.js → chunk-EKQ3LWBM.js} +77 -74
  28. package/dist/chunk-EKQ3LWBM.js.map +1 -0
  29. package/dist/{chunk-UO6MPN77.js → chunk-EU543UDC.js} +10 -9
  30. package/dist/chunk-EU543UDC.js.map +1 -0
  31. package/dist/{chunk-E4LYJ7PY.js → chunk-IFCM6OLK.js} +6 -6
  32. package/dist/{chunk-5BOQNB2K.js → chunk-JQSP7YBJ.js} +3 -3
  33. package/dist/{chunk-2T2N7ISV.js → chunk-L3TYGUTH.js} +3 -3
  34. package/dist/{chunk-AB2E5DCN.js → chunk-MAU7DFCJ.js} +2 -2
  35. package/dist/{chunk-P6VLG7KE.js → chunk-N2O23WYA.js} +2 -2
  36. package/dist/{chunk-HYNHLBKA.js → chunk-OQQRWPFZ.js} +5 -2
  37. package/dist/chunk-OQQRWPFZ.js.map +1 -0
  38. package/dist/{chunk-IXGXALRV.js → chunk-QTJOORGN.js} +2 -2
  39. package/dist/{chunk-JWDE7OVJ.js → chunk-RJBW4EOU.js} +46 -2
  40. package/dist/{chunk-JWDE7OVJ.js.map → chunk-RJBW4EOU.js.map} +1 -1
  41. package/dist/{chunk-AE7NTZ75.js → chunk-TNLXCSXV.js} +3 -3
  42. package/dist/{chunk-NNJKEAP2.js → chunk-VRBBZH4U.js} +4 -4
  43. package/dist/{chunk-VOEVVIP3.js → chunk-W2FBVBQ4.js} +4 -4
  44. package/dist/{chunk-WNGXQMRI.js → chunk-WFNH4UDF.js} +5 -2
  45. package/dist/chunk-WFNH4UDF.js.map +1 -0
  46. package/dist/{chunk-CHJIWG2H.js → chunk-WVAEIKUY.js} +2 -2
  47. package/dist/{chunk-FF36YNKY.js → chunk-XIQAOGAA.js} +11 -10
  48. package/dist/chunk-XIQAOGAA.js.map +1 -0
  49. package/dist/{chunk-HLPYL6LC.js → chunk-Y5OOHER4.js} +14 -12
  50. package/dist/chunk-Y5OOHER4.js.map +1 -0
  51. package/dist/{chunk-GYICIICQ.js → chunk-YF2MMBKA.js} +9 -7
  52. package/dist/chunk-YF2MMBKA.js.map +1 -0
  53. package/dist/{chunk-IX4L7E5G.js → chunk-YXOXAQ5Y.js} +2 -2
  54. package/dist/cli.js +21 -21
  55. package/dist/compounding/engine.js +2 -2
  56. package/dist/contradiction/index.js +2 -2
  57. package/dist/{contradiction-scan-2B4AE4TI.js → contradiction-scan-CWO3LIWV.js} +3 -3
  58. package/dist/embedding-fallback.js +2 -2
  59. package/dist/entity-retrieval.js +2 -2
  60. package/dist/explicit-capture.js +2 -2
  61. package/dist/extraction.js +3 -3
  62. package/dist/{first-start-migration-2RQYDIZ7.js → first-start-migration-5DXD3TF2.js} +2 -2
  63. package/dist/index.js +32 -32
  64. package/dist/local-llm.js +2 -2
  65. package/dist/namespaces/migrate.js +6 -6
  66. package/dist/namespaces/principal.js +2 -2
  67. package/dist/namespaces/search.js +4 -4
  68. package/dist/namespaces/storage.js +2 -2
  69. package/dist/operator-toolkit.js +11 -11
  70. package/dist/orchestration/compression-guideline-coordinator.js +2 -2
  71. package/dist/orchestration/maintenance.js +6 -6
  72. package/dist/orchestrator.js +21 -21
  73. package/dist/schemas.d.ts +22 -22
  74. package/dist/search/embed-helper.js +2 -2
  75. package/dist/search/factory.js +3 -3
  76. package/dist/search/index.js +3 -3
  77. package/dist/summarizer.js +3 -3
  78. package/dist/{tier-stats-KPDIISG7.js → tier-stats-QID73BBB.js} +2 -2
  79. package/dist/transfer/types.d.ts +12 -12
  80. package/package.json +2 -2
  81. package/src/access-service.ts +7 -8
  82. package/src/buffer.ts +2 -1
  83. package/src/capabilities.test.ts +137 -0
  84. package/src/capabilities.ts +209 -0
  85. package/src/cli/creation-ledger-commands.ts +3 -3
  86. package/src/cli/research-status-commands.ts +4 -4
  87. package/src/cli.ts +9 -10
  88. package/src/compounding/engine.ts +7 -7
  89. package/src/correction/correction-access-wiring.ts +3 -2
  90. package/src/extraction.ts +8 -10
  91. package/src/operator-toolkit.ts +6 -7
  92. package/src/orchestration/entity-synthesis-coordinator.ts +2 -1
  93. package/src/orchestration/maintenance.ts +5 -7
  94. package/src/orchestration/semantic-consolidation-coordinator.ts +2 -2
  95. package/src/orchestrator.ts +49 -50
  96. package/dist/chunk-FF36YNKY.js.map +0 -1
  97. package/dist/chunk-G54IDCD3.js.map +0 -1
  98. package/dist/chunk-GYICIICQ.js.map +0 -1
  99. package/dist/chunk-HLPYL6LC.js.map +0 -1
  100. package/dist/chunk-HYNHLBKA.js.map +0 -1
  101. package/dist/chunk-IPI45Q4S.js.map +0 -1
  102. package/dist/chunk-PB5YON2G.js.map +0 -1
  103. package/dist/chunk-UO6MPN77.js.map +0 -1
  104. package/dist/chunk-WNGXQMRI.js.map +0 -1
  105. /package/dist/{chunk-K3Y2SJTN.js.map → chunk-56LP72AD.js.map} +0 -0
  106. /package/dist/{chunk-ZBZ4XULO.js.map → chunk-66RZ4EIT.js.map} +0 -0
  107. /package/dist/{chunk-GB2FZOWB.js.map → chunk-7B7IPPN5.js.map} +0 -0
  108. /package/dist/{chunk-QNTLWH3T.js.map → chunk-A7INTIC5.js.map} +0 -0
  109. /package/dist/{chunk-FLPKEMSO.js.map → chunk-AKKFHN3I.js.map} +0 -0
  110. /package/dist/{chunk-AAIHDIMD.js.map → chunk-BHJAMSVC.js.map} +0 -0
  111. /package/dist/{chunk-BXPG5AVX.js.map → chunk-BHQQVUEQ.js.map} +0 -0
  112. /package/dist/{chunk-HFXZIF3V.js.map → chunk-BVG2IZOB.js.map} +0 -0
  113. /package/dist/{chunk-NDKW67ER.js.map → chunk-C53JDEH3.js.map} +0 -0
  114. /package/dist/{chunk-AESC5OQJ.js.map → chunk-CKHPUOAP.js.map} +0 -0
  115. /package/dist/{chunk-OYHYBHHI.js.map → chunk-DS3FZ7GS.js.map} +0 -0
  116. /package/dist/{chunk-E4LYJ7PY.js.map → chunk-IFCM6OLK.js.map} +0 -0
  117. /package/dist/{chunk-5BOQNB2K.js.map → chunk-JQSP7YBJ.js.map} +0 -0
  118. /package/dist/{chunk-2T2N7ISV.js.map → chunk-L3TYGUTH.js.map} +0 -0
  119. /package/dist/{chunk-AB2E5DCN.js.map → chunk-MAU7DFCJ.js.map} +0 -0
  120. /package/dist/{chunk-P6VLG7KE.js.map → chunk-N2O23WYA.js.map} +0 -0
  121. /package/dist/{chunk-IXGXALRV.js.map → chunk-QTJOORGN.js.map} +0 -0
  122. /package/dist/{chunk-AE7NTZ75.js.map → chunk-TNLXCSXV.js.map} +0 -0
  123. /package/dist/{chunk-NNJKEAP2.js.map → chunk-VRBBZH4U.js.map} +0 -0
  124. /package/dist/{chunk-VOEVVIP3.js.map → chunk-W2FBVBQ4.js.map} +0 -0
  125. /package/dist/{chunk-CHJIWG2H.js.map → chunk-WVAEIKUY.js.map} +0 -0
  126. /package/dist/{chunk-IX4L7E5G.js.map → chunk-YXOXAQ5Y.js.map} +0 -0
  127. /package/dist/{contradiction-scan-2B4AE4TI.js.map → contradiction-scan-CWO3LIWV.js.map} +0 -0
  128. /package/dist/{first-start-migration-2RQYDIZ7.js.map → first-start-migration-5DXD3TF2.js.map} +0 -0
  129. /package/dist/{tier-stats-KPDIISG7.js.map → tier-stats-QID73BBB.js.map} +0 -0
@@ -18,7 +18,7 @@
18
18
  */
19
19
 
20
20
  import type { Orchestrator } from "../orchestrator.js";
21
- import { resolveCapabilities, resolveSecurityCapabilities, resolveUtilityLearningCapabilities, resolveObjectiveStateCapabilities} from "../capabilities.js";
21
+ import { resolveCapabilities, resolveSecurityCapabilities, resolveUtilityLearningCapabilities, resolveObjectiveStateCapabilities, resolveConsolidationCapabilities } from "../capabilities.js";
22
22
  import type { CliCommand } from "../cli.js";
23
23
  import type { UtilityTelemetryEvent } from "../utility-telemetry.js";
24
24
  import {
@@ -116,7 +116,7 @@ cmd
116
116
  memoryDir: orchestrator.config.memoryDir,
117
117
  abstractionNodeStoreDir: orchestrator.config.abstractionNodeStoreDir,
118
118
  harmonicRetrievalEnabled: caps.harmonicRetrieval,
119
- abstractionAnchorsEnabled: orchestrator.config.abstractionAnchorsEnabled,
119
+ abstractionAnchorsEnabled: resolveConsolidationCapabilities(orchestrator.config).abstractionAnchors,
120
120
  });
121
121
  console.log(JSON.stringify(status, null, 2));
122
122
  console.log("OK");
@@ -130,7 +130,7 @@ cmd
130
130
  memoryDir: orchestrator.config.memoryDir,
131
131
  abstractionNodeStoreDir: orchestrator.config.abstractionNodeStoreDir,
132
132
  harmonicRetrievalEnabled: caps.harmonicRetrieval,
133
- abstractionAnchorsEnabled: orchestrator.config.abstractionAnchorsEnabled,
133
+ abstractionAnchorsEnabled: resolveConsolidationCapabilities(orchestrator.config).abstractionAnchors,
134
134
  });
135
135
  console.log(JSON.stringify(status, null, 2));
136
136
  console.log("OK");
@@ -152,7 +152,7 @@ cmd
152
152
  memoryDir: orchestrator.config.memoryDir,
153
153
  abstractionNodeStoreDir: orchestrator.config.abstractionNodeStoreDir,
154
154
  harmonicRetrievalEnabled: caps.harmonicRetrieval,
155
- abstractionAnchorsEnabled: orchestrator.config.abstractionAnchorsEnabled,
155
+ abstractionAnchorsEnabled: resolveConsolidationCapabilities(orchestrator.config).abstractionAnchors,
156
156
  query,
157
157
  maxResults: Number.isFinite(maxResults) ? maxResults : 3,
158
158
  sessionKey: typeof options.sessionKey === "string" ? options.sessionKey : undefined,
package/src/cli.ts CHANGED
@@ -4,11 +4,10 @@ import { access, lstat, readFile, readdir, realpath, unlink } from "node:fs/prom
4
4
  import { createHash } from "node:crypto";
5
5
  import type { Readable, Writable } from "node:stream";
6
6
  import type { Orchestrator } from "./orchestrator.js";
7
- import {
8
- resolveNamespaceCapabilities,
7
+ import { resolveNamespaceCapabilities,
9
8
  resolveMemoryLifecycleCapabilities,
10
9
  resolveIdentityContinuityCapabilities,
11
- resolveSecurityCapabilities, resolveEvalCapabilities} from "./capabilities.js";
10
+ resolveSecurityCapabilities, resolveEvalCapabilities, resolveConsolidationCapabilities, resolveRecallAuxiliaryCapabilities } from "./capabilities.js";
12
11
  import { ThreadingManager } from "./threading.js";
13
12
  import { utcDayRange } from "./transcript.js";
14
13
  import { runWearablesCliCommand } from "./wearables/cli.js";
@@ -6259,7 +6258,7 @@ export function registerCli(
6259
6258
  : 3;
6260
6259
  const results = await runVerifiedRecallSearchCliCommand({
6261
6260
  memoryDir: orchestrator.config.memoryDir,
6262
- verifiedRecallEnabled: orchestrator.config.verifiedRecallEnabled,
6261
+ verifiedRecallEnabled: resolveRecallAuxiliaryCapabilities(orchestrator.config).verifiedRecall,
6263
6262
  query,
6264
6263
  maxResults: Number.isFinite(maxResults) ? maxResults : 3,
6265
6264
  boxRecallDays: orchestrator.config.boxRecallDays,
@@ -6295,8 +6294,8 @@ export function registerCli(
6295
6294
  const options = (args[0] ?? {}) as Record<string, unknown>;
6296
6295
  const result = await runCompoundingPromoteCliCommand({
6297
6296
  memoryDir: orchestrator.config.memoryDir,
6298
- compoundingEnabled: orchestrator.config.compoundingEnabled,
6299
- compoundingSemanticEnabled: orchestrator.config.compoundingSemanticEnabled,
6297
+ compoundingEnabled: resolveConsolidationCapabilities(orchestrator.config).compounding,
6298
+ compoundingSemanticEnabled: resolveConsolidationCapabilities(orchestrator.config).compoundingSemantic,
6300
6299
  weekId: String(options.weekId ?? ""),
6301
6300
  candidateId: String(options.candidateId ?? ""),
6302
6301
  dryRun: options.dryRun === true,
@@ -6318,7 +6317,7 @@ export function registerCli(
6318
6317
  : 3;
6319
6318
  const results = await runSemanticRuleVerifyCliCommand({
6320
6319
  memoryDir: orchestrator.config.memoryDir,
6321
- semanticRuleVerificationEnabled: orchestrator.config.semanticRuleVerificationEnabled,
6320
+ semanticRuleVerificationEnabled: resolveRecallAuxiliaryCapabilities(orchestrator.config).semanticRuleVerification,
6322
6321
  query,
6323
6322
  maxResults: Number.isFinite(maxResults) ? maxResults : 3,
6324
6323
  });
@@ -7805,7 +7804,7 @@ export function registerCli(
7805
7804
  memoryDir: orchestrator.config.memoryDir,
7806
7805
  targetPath,
7807
7806
  versioning: {
7808
- enabled: orchestrator.config.versioningEnabled,
7807
+ enabled: resolveRecallAuxiliaryCapabilities(orchestrator.config).versioning,
7809
7808
  maxVersionsPerPage: orchestrator.config.versioningMaxPerPage,
7810
7809
  sidecarDir: orchestrator.config.versioningSidecarDir,
7811
7810
  },
@@ -7894,7 +7893,7 @@ export function registerCli(
7894
7893
  console.log("Identity continuity is disabled.");
7895
7894
  return;
7896
7895
  }
7897
- if (!orchestrator.config.continuityIncidentLoggingEnabled) {
7896
+ if (!resolveRecallAuxiliaryCapabilities(orchestrator.config).continuityIncidentLogging) {
7898
7897
  console.log("Continuity incident logging is disabled.");
7899
7898
  return;
7900
7899
  }
@@ -7925,7 +7924,7 @@ export function registerCli(
7925
7924
  console.log("Identity continuity is disabled.");
7926
7925
  return;
7927
7926
  }
7928
- if (!orchestrator.config.continuityIncidentLoggingEnabled) {
7927
+ if (!resolveRecallAuxiliaryCapabilities(orchestrator.config).continuityIncidentLogging) {
7929
7928
  console.log("Continuity incident logging is disabled.");
7930
7929
  return;
7931
7930
  }
@@ -7,7 +7,7 @@ import { StorageManager } from "../storage.js";
7
7
  import type { ContinuityIncidentRecord, PluginConfig } from "../types.js";
8
8
  import { resolveSharedContextDir, SharedFeedbackEntrySchema, type SharedFeedbackEntry } from "../shared-context/manager.js";
9
9
  import { parseContinuityImprovementLoops } from "../identity-continuity.js";
10
- import { resolveQmdCapabilities, type QmdConfigProjection } from "../capabilities.js";
10
+ import { resolveQmdCapabilities, type QmdConfigProjection, resolveConsolidationCapabilities } from "../capabilities.js";
11
11
 
12
12
  type MistakesFile = {
13
13
  version?: number;
@@ -493,7 +493,7 @@ export class CompoundingEngine {
493
493
  const previousMistakes = await this.readMistakes();
494
494
  const mistakes = this.buildMistakes(entries, actionPatterns, weekId, previousMistakes?.registry ?? []);
495
495
  const rubrics = this.buildRubricSnapshot(entries, outcomeSummary);
496
- let promotionCandidates = this.config.compoundingSemanticEnabled
496
+ let promotionCandidates = resolveConsolidationCapabilities(this.config).compoundingSemantic
497
497
  ? this.derivePromotionCandidates(outcomeSummary, mistakes.registry, rubrics)
498
498
  : [];
499
499
  if (this.config.cmcConsolidationEnabled) {
@@ -540,7 +540,7 @@ export class CompoundingEngine {
540
540
  }
541
541
  }
542
542
  // PEDC: Run calibration consolidation during weekly synthesis
543
- if (this.config.calibrationEnabled) {
543
+ if (resolveConsolidationCapabilities(this.config).calibration) {
544
544
  try {
545
545
  const { runCalibrationConsolidation } = await import("../calibration.js");
546
546
  const calRules = await runCalibrationConsolidation({
@@ -555,7 +555,7 @@ export class CompoundingEngine {
555
555
  log.warn(`[calibration] weekly consolidation failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);
556
556
  }
557
557
  }
558
- const continuity = this.config.continuityAuditEnabled
558
+ const continuity = resolveConsolidationCapabilities(this.config).continuityAudit
559
559
  ? await this.readContinuityAuditReferences(weekId)
560
560
  : { monthId: monthIdFromIsoWeek(weekId), weeklyPath: null, monthlyPath: null };
561
561
 
@@ -641,7 +641,7 @@ export class CompoundingEngine {
641
641
  storage?: StorageManager;
642
642
  }): Promise<CompoundingPromotionReport> {
643
643
  const report: CompoundingPromotionReport = {
644
- enabled: this.config.compoundingEnabled === true && this.config.compoundingSemanticEnabled === true,
644
+ enabled: resolveConsolidationCapabilities(this.config).compounding === true && resolveConsolidationCapabilities(this.config).compoundingSemantic === true,
645
645
  dryRun: opts.dryRun === true,
646
646
  weekId: opts.weekId,
647
647
  promoted: [],
@@ -1384,7 +1384,7 @@ export class CompoundingEngine {
1384
1384
  }
1385
1385
  lines.push("");
1386
1386
 
1387
- if (this.config.compoundingSemanticEnabled) {
1387
+ if (resolveConsolidationCapabilities(this.config).compoundingSemantic) {
1388
1388
  lines.push("## Promotion Candidates (Advisory)");
1389
1389
  if (promotionCandidates.length === 0) {
1390
1390
  lines.push("- (no advisory promotion candidates this week)");
@@ -1403,7 +1403,7 @@ export class CompoundingEngine {
1403
1403
  lines.push("");
1404
1404
  }
1405
1405
 
1406
- if (this.config.continuityAuditEnabled) {
1406
+ if (resolveConsolidationCapabilities(this.config).continuityAudit) {
1407
1407
  lines.push("## Continuity Audits");
1408
1408
  if (continuity.weeklyPath) {
1409
1409
  lines.push(`- weekly: ${continuity.weeklyPath}`);
@@ -43,6 +43,7 @@ import {
43
43
  } from "./correction-planner.js";
44
44
  import { type ExecutorDeps, type ExecutorMemory } from "./correction-executor.js";
45
45
  import { CorrectionService, type CorrectionServiceDeps } from "./correction-service.js";
46
+ import { resolveRecallAuxiliaryCapabilities } from "../capabilities.js";
46
47
 
47
48
  // ---------------------------------------------------------------------------
48
49
  // Public entry: build a fully-wired CorrectionService
@@ -810,11 +811,11 @@ function toExecutorMemory(m: MemoryFile): ExecutorMemory {
810
811
  * Nested wins when present; both default to `true` (plan is read-only, safe on).
811
812
  */
812
813
  export function isCorrectionFeatureEnabled(config: PluginConfig): boolean {
813
- // parseConfig now resolves this into `config.correctionEnabled` (review
814
+ // parseConfig now resolves this into `resolveRecallAuxiliaryCapabilities(config).correction` (review
814
815
  // thread Txp) — prefer the parsed boolean so operator config actually takes
815
816
  // effect. The loose nested/flat read stays as a fallback for PluginConfig-
816
817
  // shaped objects built without parseConfig (unit tests).
817
- if (typeof config.correctionEnabled === "boolean") return config.correctionEnabled;
818
+ if (typeof resolveRecallAuxiliaryCapabilities(config).correction === "boolean") return resolveRecallAuxiliaryCapabilities(config).correction;
818
819
  const nested = (config as unknown as Record<string, unknown>).correction as
819
820
  | Record<string, unknown>
820
821
  | undefined;
package/src/extraction.ts CHANGED
@@ -38,10 +38,8 @@ import { normalizeProcedureSteps } from "./procedural/procedure-types.js";
38
38
  import { normalizeReasoningTrace } from "./reasoning-trace-types.js";
39
39
  import { looksLikeMechanicalTelemetryTranscript } from "./telemetry-transcript.js";
40
40
  import { buildFactProvenance, type ProvenanceTurnInput } from "./provenance.js";
41
- import {
42
- resolveMemoryLifecycleCapabilities,
43
- resolveLocalLlmCapabilities,
44
- } from "./capabilities.js";
41
+ import { resolveMemoryLifecycleCapabilities,
42
+ resolveLocalLlmCapabilities,resolveRecallAuxiliaryCapabilities } from "./capabilities.js";
45
43
 
46
44
  type ExtractionQuestion = ExtractionResult["questions"][number];
47
45
  type ExtractedFactResult = ExtractionResult["facts"][number];
@@ -1664,7 +1662,7 @@ Memory categories:
1664
1662
  - principle: Durable rules, values, or operating beliefs (e.g., "never use Chat Completions API")
1665
1663
  - commitment: Promises, obligations, or deadlines (e.g., "deploy by Friday", "call accountant Monday")
1666
1664
  - moment: Emotionally significant events or milestones (e.g., "first successful deployment of engram")
1667
- - skill: Capabilities the user or agent has demonstrated (e.g., "user is proficient with Kubernetes")${this.config.causalRuleExtractionEnabled ? `
1665
+ - skill: Capabilities the user or agent has demonstrated (e.g., "user is proficient with Kubernetes")${resolveRecallAuxiliaryCapabilities(this.config).causalRuleExtraction ? `
1668
1666
  - rule: Causal rules discovered through experience (format: "IF <condition> THEN <action/outcome>", e.g., "IF Shopify API returns 401 THEN the admin token is missing read_products scope")` : ""}
1669
1667
  - procedure: A reusable workflow the user wants remembered the same way across sessions. Set category to "procedure". Use "content" for a short title that includes explicit trigger phrasing (e.g. "When you deploy to production…", "Whenever you ship a release…"). Add "procedureSteps": an array of at least two objects {"order": number, "intent": "concrete step description"} in execution order. Optional per-step "toolCall": {"kind": "…", "signature": "…"}, "expectedOutcome", "optional": true.
1670
1668
  - reasoning_trace: A stored solution chain / chain-of-thought the user walked through to solve a problem (e.g. "Here's how I debugged the latency spike: first I checked…, then I…, finally I…"). Set category to "reasoning_trace". Use "content" for a short title summarising the problem (e.g. "How I debugged the staging latency spike"). Add "reasoningTrace": {"steps": [{"order": number, "description": "what happened at this step"}, …], "finalAnswer": "the conclusion or answer", "observedOutcome": "optional confirmation of how it played out"}. Require at least two ordered steps AND a finalAnswer. Use this category only when the user explicitly narrates their reasoning — not for ordinary decisions (use "decision") or reusable workflows (use "procedure").
@@ -1672,7 +1670,7 @@ Memory categories:
1672
1670
  Rules:
1673
1671
  - Only extract genuinely NEW information worth remembering across sessions
1674
1672
  - Skip transient task details (file paths being edited, current errors, etc.)
1675
- - Priority: corrections > principles${this.config.causalRuleExtractionEnabled ? " > rules" : ""} > preferences > commitments > decisions > relationships > entities > moments > skills > facts
1673
+ - Priority: corrections > principles${resolveRecallAuxiliaryCapabilities(this.config).causalRuleExtraction ? " > rules" : ""} > preferences > commitments > decisions > relationships > entities > moments > skills > facts
1676
1674
  - Corrections (user saying "actually, don't do X" or "I prefer Y") get highest confidence
1677
1675
  - Each fact should be a standalone, self-contained statement
1678
1676
  - Lines labelled [context user] or [context assistant] are reference context only. Use them to resolve pronouns and adjacent question/answer pairs, but do not extract a memory stated only in context lines unless a normal [user] or [assistant] line confirms or completes it.
@@ -1800,7 +1798,7 @@ Actions:
1800
1798
 
1801
1799
  Also:
1802
1800
  - Suggest profile updates based on patterns across memories
1803
- - Identify entity updates for entity tracking${this.config.causalRuleExtractionEnabled ? `
1801
+ - Identify entity updates for entity tracking${resolveRecallAuxiliaryCapabilities(this.config).causalRuleExtraction ? `
1804
1802
  - When merging or updating memories, look for IF→THEN causal patterns. If a memory describes "X failed/succeeded because Y" or "doing X led to Y", rewrite its content to make the causal rule explicit in the form "IF <condition> THEN <action/outcome>".` : ""}`,
1805
1803
  },
1806
1804
  {
@@ -1846,7 +1844,7 @@ Actions:
1846
1844
 
1847
1845
  Also:
1848
1846
  - Suggest profile updates based on patterns across memories
1849
- - Identify entity updates for entity tracking${this.config.causalRuleExtractionEnabled ? `
1847
+ - Identify entity updates for entity tracking${resolveRecallAuxiliaryCapabilities(this.config).causalRuleExtraction ? `
1850
1848
  - When merging or updating memories, look for IF→THEN causal patterns. If a memory describes "X failed/succeeded because Y" or "doing X led to Y", rewrite its content to make the causal rule explicit in the form "IF <condition> THEN <action/outcome>".` : ""}
1851
1849
 
1852
1850
  Current behavioral profile:
@@ -1944,7 +1942,7 @@ Actions:
1944
1942
 
1945
1943
  Also:
1946
1944
  - Suggest profile updates based on patterns across memories
1947
- - Identify entity updates for entity tracking${this.config.causalRuleExtractionEnabled ? `
1945
+ - Identify entity updates for entity tracking${resolveRecallAuxiliaryCapabilities(this.config).causalRuleExtraction ? `
1948
1946
  - When merging or updating memories, look for IF→THEN causal patterns. If a memory describes "X failed/succeeded because Y" or "doing X led to Y", rewrite its content to make the causal rule explicit in the form "IF <condition> THEN <action/outcome>".` : ""}
1949
1947
 
1950
1948
  Current behavioral profile:
@@ -2689,7 +2687,7 @@ Respond with valid JSON matching this schema:
2689
2687
  }
2690
2688
 
2691
2689
  async generateDaySummary(memories: string | MemoryFile[]): Promise<DaySummaryResultShape | null> {
2692
- if (!this.config.daySummaryEnabled) {
2690
+ if (!resolveRecallAuxiliaryCapabilities(this.config).daySummary) {
2693
2691
  log.warn("day summary skipped — disabled by config");
2694
2692
  return null;
2695
2693
  }
@@ -24,12 +24,11 @@ import {
24
24
  type EvalHarnessStatus,
25
25
  } from "./evals.js";
26
26
  import { analyzeGraphHealth, type GraphHealthReport } from "./graph.js";
27
- import {
28
- resolveAccessSetupCapabilities,
27
+ import { resolveAccessSetupCapabilities,
29
28
  resolveCapabilities,
30
29
  resolveGraphConstructionCapabilities,
31
30
  resolveQmdCapabilities,
32
- resolveEvalCapabilities} from "./capabilities.js";
31
+ resolveEvalCapabilities, resolvePresentationCapabilities, resolveConsolidationCapabilities } from "./capabilities.js";
33
32
  import {
34
33
  analyzeSessionIntegrity,
35
34
  applySessionRepair,
@@ -934,7 +933,7 @@ async function buildOperatorConfigReviewReport(input: {
934
933
  config.memoryOsPreset !== "research-max" &&
935
934
  config.memoryOsPreset !== "local-llm-heavy" &&
936
935
  resolveIndexingCapabilities(config).queryAwareIndexing === false &&
937
- config.verbatimArtifactsEnabled === false &&
936
+ resolvePresentationCapabilities(config).verbatimArtifacts === false &&
938
937
  !caps.rerank
939
938
  ) {
940
939
  findings.push(buildConfigReviewFinding({
@@ -1565,11 +1564,11 @@ export async function summarizeBufferSurpriseDistribution(
1565
1564
  return {
1566
1565
  key: "buffer_surprise_distribution",
1567
1566
  status: "ok",
1568
- summary: config.bufferSurpriseTriggerEnabled
1567
+ summary: resolvePresentationCapabilities(config).bufferSurpriseTrigger
1569
1568
  ? "Surprise trigger is enabled but no telemetry has been recorded yet."
1570
1569
  : "Surprise trigger is disabled; no telemetry expected.",
1571
1570
  details: {
1572
- enabled: config.bufferSurpriseTriggerEnabled,
1571
+ enabled: resolvePresentationCapabilities(config).bufferSurpriseTrigger,
1573
1572
  distribution: dist,
1574
1573
  },
1575
1574
  };
@@ -1581,7 +1580,7 @@ export async function summarizeBufferSurpriseDistribution(
1581
1580
  status: "ok",
1582
1581
  summary: `Recent surprise: mean=${dist.mean.toFixed(3)}, median=${dist.median.toFixed(3)}, p90=${dist.p90.toFixed(3)}, triggered=${pct(dist.triggeredRate)}% over ${dist.count} turns (threshold=${dist.currentThreshold ?? config.bufferSurpriseThreshold}).`,
1583
1582
  details: {
1584
- enabled: config.bufferSurpriseTriggerEnabled,
1583
+ enabled: resolvePresentationCapabilities(config).bufferSurpriseTrigger,
1585
1584
  distribution: dist,
1586
1585
  },
1587
1586
  };
@@ -36,6 +36,7 @@ import type {
36
36
  PluginConfig,
37
37
  } from "../types.js";
38
38
  import { log } from "../logger.js";
39
+ import { resolvePresentationCapabilities } from "../capabilities.js";
39
40
 
40
41
  // ---------------------------------------------------------------------------
41
42
  // Evidence helpers (moved verbatim from orchestrator.ts module scope)
@@ -172,7 +173,7 @@ export class EntitySynthesisCoordinator {
172
173
  ): Promise<number> {
173
174
  const { config } = this.deps;
174
175
  if (
175
- !config.entitySummaryEnabled
176
+ !resolvePresentationCapabilities(config).entitySummary
176
177
  || maxEntities <= 0
177
178
  || config.entitySynthesisMaxTokens <= 0
178
179
  ) return 0;
@@ -19,10 +19,8 @@
19
19
  * `orchestrator.requestQmdMaintenance` etc. continue to work.
20
20
  */
21
21
 
22
- import {
23
- resolveNamespaceCapabilities,
24
- resolveQmdCapabilities,
25
- } from "../capabilities.js";
22
+ import { resolveNamespaceCapabilities,
23
+ resolveQmdCapabilities,resolveConsolidationCapabilities, resolveRecallAuxiliaryCapabilities } from "../capabilities.js";
26
24
  import { existsSync } from "node:fs";
27
25
  import path from "node:path";
28
26
 
@@ -109,7 +107,7 @@ export class MaintenanceScheduler {
109
107
  * `await deferredReady` can rely on jobs.json being current.
110
108
  */
111
109
  async autoRegisterCrons(_signal: AbortSignal): Promise<void> {
112
- if (this.deps.config.daySummaryEnabled) {
110
+ if (resolveRecallAuxiliaryCapabilities(this.deps.config).daySummary) {
113
111
  try {
114
112
  await this.autoRegisterDaySummaryCron();
115
113
  } catch (err) {
@@ -137,14 +135,14 @@ export class MaintenanceScheduler {
137
135
  log.debug(`contradiction scan cron auto-register failed (non-fatal): ${err}`);
138
136
  }
139
137
  }
140
- if (this.deps.config.patternReinforcementEnabled) {
138
+ if (resolveConsolidationCapabilities(this.deps.config).patternReinforcement) {
141
139
  try {
142
140
  await this.autoRegisterPatternReinforcementCron();
143
141
  } catch (err) {
144
142
  log.debug(`pattern reinforcement cron auto-register failed (non-fatal): ${err}`);
145
143
  }
146
144
  }
147
- if (this.deps.config.graphEdgeDecayEnabled) {
145
+ if (resolveConsolidationCapabilities(this.deps.config).graphEdgeDecay) {
148
146
  try {
149
147
  await this.autoRegisterGraphEdgeDecayCron();
150
148
  } catch (err) {
@@ -41,7 +41,7 @@ import {
41
41
  fallbackLlmRuntimeContextFromConfig,
42
42
  gatewayTaskChainOptions,
43
43
  } from "../fallback-llm.js";
44
- import { resolveIndexingCapabilities } from "../capabilities.js";
44
+ import { resolveIndexingCapabilities, resolveConsolidationCapabilities } from "../capabilities.js";
45
45
  import { deindexMemory } from "../temporal-index.js";
46
46
  import { runPeerProfileReasoner } from "../peers/index.js";
47
47
  import type { StorageManager } from "../index.js";
@@ -101,7 +101,7 @@ export class SemanticConsolidationCoordinator {
101
101
  clusters: [],
102
102
  };
103
103
 
104
- if (!this.config.semanticConsolidationEnabled && !options?.force) {
104
+ if (!resolveConsolidationCapabilities(this.config).semanticConsolidation && !options?.force) {
105
105
  log.debug("[semantic-consolidation] disabled in config");
106
106
  return result;
107
107
  }