@remnic/core 9.3.738 → 9.3.740

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 (200) hide show
  1. package/dist/access-boundary.d.ts +6 -6
  2. package/dist/access-boundary.js +13 -13
  3. package/dist/access-cli.js +35 -35
  4. package/dist/access-http.d.ts +6 -6
  5. package/dist/access-http.js +18 -18
  6. package/dist/access-mcp.d.ts +6 -6
  7. package/dist/access-mcp.js +17 -17
  8. package/dist/access-operations-batch.js +15 -15
  9. package/dist/access-operations.d.ts +6 -6
  10. package/dist/access-operations.js +16 -16
  11. package/dist/{access-service-DwQ6BIQw.d.ts → access-service-Cbk-Kv_A.d.ts} +1 -1
  12. package/dist/access-service.d.ts +6 -6
  13. package/dist/access-service.js +12 -12
  14. package/dist/access-surface-catalog.d.ts +6 -6
  15. package/dist/active-memory-bridge.js +3 -3
  16. package/dist/bootstrap.d.ts +5 -5
  17. package/dist/briefing.js +2 -2
  18. package/dist/buffer.js +2 -2
  19. package/dist/capabilities.d.ts +97 -1
  20. package/dist/capabilities.js +7 -1
  21. package/dist/causal-consolidation.js +4 -3
  22. package/dist/causal-consolidation.js.map +1 -1
  23. package/dist/{chunk-IFCM6OLK.js → chunk-3TUDKDTQ.js} +7 -7
  24. package/dist/{chunk-A7INTIC5.js → chunk-4J53ZVPQ.js} +3 -3
  25. package/dist/{chunk-XYUFGHUW.js → chunk-56F6EAQ6.js} +2 -2
  26. package/dist/{chunk-F6OEXJQQ.js → chunk-6XG3NQRC.js} +2 -2
  27. package/dist/{chunk-24ZLC5QN.js → chunk-7N7S2RKF.js} +2 -2
  28. package/dist/{chunk-Y5OOHER4.js → chunk-7Y5KKMIP.js} +12 -11
  29. package/dist/chunk-7Y5KKMIP.js.map +1 -0
  30. package/dist/{chunk-VRBBZH4U.js → chunk-AX4TRSRE.js} +3 -3
  31. package/dist/{chunk-66RZ4EIT.js → chunk-BE6NEQLF.js} +3 -3
  32. package/dist/{chunk-YF2MMBKA.js → chunk-BJPL5WAL.js} +3 -3
  33. package/dist/{chunk-EO5QWINU.js → chunk-C3Z5YJSM.js} +5 -2
  34. package/dist/chunk-C3Z5YJSM.js.map +1 -0
  35. package/dist/{chunk-GEXI357K.js → chunk-C7C5WIIF.js} +2 -2
  36. package/dist/{chunk-L3TYGUTH.js → chunk-CMPXLMC3.js} +3 -3
  37. package/dist/{chunk-W2FBVBQ4.js → chunk-DBVBV2RF.js} +4 -4
  38. package/dist/{chunk-JQSP7YBJ.js → chunk-ELL5VYXC.js} +5 -4
  39. package/dist/chunk-ELL5VYXC.js.map +1 -0
  40. package/dist/{chunk-IQOEW5YV.js → chunk-FCQ7ZYCQ.js} +2 -2
  41. package/dist/{chunk-IIBFCZA7.js → chunk-FWXLKH2H.js} +3 -3
  42. package/dist/{chunk-RJBW4EOU.js → chunk-G7Q4D2G3.js} +74 -2
  43. package/dist/{chunk-RJBW4EOU.js.map → chunk-G7Q4D2G3.js.map} +1 -1
  44. package/dist/{chunk-WVAEIKUY.js → chunk-GPX5E36D.js} +5 -4
  45. package/dist/chunk-GPX5E36D.js.map +1 -0
  46. package/dist/{chunk-23PLOBWT.js → chunk-H3WSZWHK.js} +22 -20
  47. package/dist/chunk-H3WSZWHK.js.map +1 -0
  48. package/dist/{chunk-Q6BAA57B.js → chunk-JFCS6PQU.js} +2 -2
  49. package/dist/chunk-JFCS6PQU.js.map +1 -0
  50. package/dist/{chunk-CKHPUOAP.js → chunk-K2N6WIZM.js} +3 -3
  51. package/dist/{chunk-BHJAMSVC.js → chunk-LD6A7XG5.js} +7 -7
  52. package/dist/{chunk-AKKFHN3I.js → chunk-M4WI23X3.js} +2 -2
  53. package/dist/{chunk-N2O23WYA.js → chunk-M5KLYHHI.js} +2 -2
  54. package/dist/{chunk-TNLXCSXV.js → chunk-O4IWVWSW.js} +5 -4
  55. package/dist/chunk-O4IWVWSW.js.map +1 -0
  56. package/dist/{chunk-OQQRWPFZ.js → chunk-OS5RKJOH.js} +2 -2
  57. package/dist/{chunk-MAU7DFCJ.js → chunk-OT5K26NG.js} +5 -4
  58. package/dist/chunk-OT5K26NG.js.map +1 -0
  59. package/dist/{chunk-DS3FZ7GS.js → chunk-OUSOMUFV.js} +2 -2
  60. package/dist/{chunk-7B7IPPN5.js → chunk-OVYBENIJ.js} +3 -3
  61. package/dist/{chunk-5RZOFIDL.js → chunk-PI4JHLDD.js} +6 -3
  62. package/dist/chunk-PI4JHLDD.js.map +1 -0
  63. package/dist/{chunk-EU543UDC.js → chunk-QCO2QFLZ.js} +7 -7
  64. package/dist/chunk-QCO2QFLZ.js.map +1 -0
  65. package/dist/{chunk-YXOXAQ5Y.js → chunk-TQQN64J2.js} +5 -4
  66. package/dist/chunk-TQQN64J2.js.map +1 -0
  67. package/dist/{chunk-WDJCZQB4.js → chunk-UGFPGWJB.js} +2 -2
  68. package/dist/{chunk-75PDC7VT.js → chunk-UOVDO6TC.js} +6 -5
  69. package/dist/chunk-UOVDO6TC.js.map +1 -0
  70. package/dist/{chunk-BVG2IZOB.js → chunk-USHVHI6J.js} +7 -6
  71. package/dist/chunk-USHVHI6J.js.map +1 -0
  72. package/dist/{chunk-56LP72AD.js → chunk-UYYSOMS2.js} +4 -4
  73. package/dist/{chunk-EKQ3LWBM.js → chunk-VC7QELR6.js} +659 -584
  74. package/dist/chunk-VC7QELR6.js.map +1 -0
  75. package/dist/{chunk-XIQAOGAA.js → chunk-WGDE2TJP.js} +7 -6
  76. package/dist/chunk-WGDE2TJP.js.map +1 -0
  77. package/dist/{chunk-UFS7OXGL.js → chunk-WHEF76BQ.js} +5 -2
  78. package/dist/chunk-WHEF76BQ.js.map +1 -0
  79. package/dist/{chunk-QTJOORGN.js → chunk-WIMKOTNY.js} +2 -2
  80. package/dist/{chunk-GXTYEG7Q.js → chunk-WO22UEM3.js} +2 -2
  81. package/dist/{chunk-BHQQVUEQ.js → chunk-X5PMDVY4.js} +6 -5
  82. package/dist/{chunk-BHQQVUEQ.js.map → chunk-X5PMDVY4.js.map} +1 -1
  83. package/dist/{chunk-C53JDEH3.js → chunk-Y62QPRKV.js} +2 -2
  84. package/dist/{chunk-WFNH4UDF.js → chunk-Y6PNYJVO.js} +3 -3
  85. package/dist/{chunk-6YKIYQU7.js → chunk-YNHRWFAP.js} +5 -2
  86. package/dist/{chunk-6YKIYQU7.js.map → chunk-YNHRWFAP.js.map} +1 -1
  87. package/dist/{cli-BlEIWDQw.d.ts → cli-BQW2xKdb.d.ts} +2 -2
  88. package/dist/cli.d.ts +7 -7
  89. package/dist/cli.js +29 -29
  90. package/dist/compounding/engine.js +4 -4
  91. package/dist/connectors/codex-materialize-runner.js +2 -2
  92. package/dist/connectors/index.js +4 -3
  93. package/dist/contradiction/index.js +2 -2
  94. package/dist/{contradiction-scan-CWO3LIWV.js → contradiction-scan-UERKJESC.js} +3 -3
  95. package/dist/day-summary.js +2 -1
  96. package/dist/embedding-fallback.js +2 -2
  97. package/dist/entity-retrieval.js +3 -3
  98. package/dist/explicit-capture.d.ts +5 -5
  99. package/dist/explicit-capture.js +2 -2
  100. package/dist/extraction.js +4 -4
  101. package/dist/{first-start-migration-5DXD3TF2.js → first-start-migration-GQ3UQNIL.js} +2 -2
  102. package/dist/index.d.ts +8 -8
  103. package/dist/index.js +45 -45
  104. package/dist/local-llm.js +2 -2
  105. package/dist/maintenance/memory-governance.js +2 -2
  106. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +2 -2
  107. package/dist/maintenance/rebuild-memory-projection.js +3 -3
  108. package/dist/mcp-memory-inspector-app.d.ts +6 -6
  109. package/dist/namespaces/migrate.js +7 -7
  110. package/dist/namespaces/principal.js +2 -2
  111. package/dist/namespaces/search.js +4 -4
  112. package/dist/namespaces/storage.js +3 -3
  113. package/dist/operator-toolkit.js +13 -13
  114. package/dist/orchestration/compression-guideline-coordinator.js +2 -2
  115. package/dist/orchestration/maintenance.js +7 -7
  116. package/dist/{orchestrator-CJZ21ZiB.d.ts → orchestrator-BOAFN_Yr.d.ts} +186 -56
  117. package/dist/orchestrator.d.ts +4 -4
  118. package/dist/orchestrator.js +29 -29
  119. package/dist/search/embed-helper.js +2 -2
  120. package/dist/search/factory.js +3 -3
  121. package/dist/search/index.js +3 -3
  122. package/dist/semantic-consolidation.js +4 -3
  123. package/dist/semantic-rule-promotion.js +2 -2
  124. package/dist/semantic-rule-verifier.js +2 -2
  125. package/dist/shared-context/manager.js +2 -1
  126. package/dist/storage.d.ts +1 -1
  127. package/dist/storage.js +1 -1
  128. package/dist/summarizer.js +3 -3
  129. package/dist/{tier-stats-QID73BBB.js → tier-stats-CSKL7BDG.js} +2 -2
  130. package/dist/verified-recall.js +2 -2
  131. package/package.json +2 -2
  132. package/src/access-service.ts +2 -1
  133. package/src/capabilities.test.ts +166 -0
  134. package/src/capabilities.ts +267 -0
  135. package/src/cli/research-status-commands.ts +2 -1
  136. package/src/cli.ts +3 -2
  137. package/src/compounding/engine.ts +2 -1
  138. package/src/connectors/codex-marketplace.ts +2 -1
  139. package/src/day-summary.ts +2 -1
  140. package/src/embedding-fallback.ts +2 -1
  141. package/src/extraction.ts +3 -2
  142. package/src/local-llm.ts +2 -1
  143. package/src/maintenance/namespace-maintenance-fanout.ts +2 -1
  144. package/src/maintenance/namespace-planner.ts +2 -1
  145. package/src/operator-toolkit.ts +1 -0
  146. package/src/orchestration/conversation-index-coordinator.ts +344 -0
  147. package/src/orchestration/recall-rerank-coordinator.ts +425 -0
  148. package/src/orchestration/semantic-consolidation-coordinator.ts +3 -2
  149. package/src/orchestrator.ts +89 -598
  150. package/src/search/embed-helper.ts +2 -1
  151. package/src/search/factory.ts +2 -1
  152. package/src/semantic-consolidation.ts +2 -1
  153. package/src/shared-context/manager.ts +3 -2
  154. package/src/storage.ts +1 -1
  155. package/src/summarizer.ts +3 -2
  156. package/dist/chunk-23PLOBWT.js.map +0 -1
  157. package/dist/chunk-5RZOFIDL.js.map +0 -1
  158. package/dist/chunk-75PDC7VT.js.map +0 -1
  159. package/dist/chunk-BVG2IZOB.js.map +0 -1
  160. package/dist/chunk-EKQ3LWBM.js.map +0 -1
  161. package/dist/chunk-EO5QWINU.js.map +0 -1
  162. package/dist/chunk-EU543UDC.js.map +0 -1
  163. package/dist/chunk-JQSP7YBJ.js.map +0 -1
  164. package/dist/chunk-MAU7DFCJ.js.map +0 -1
  165. package/dist/chunk-Q6BAA57B.js.map +0 -1
  166. package/dist/chunk-TNLXCSXV.js.map +0 -1
  167. package/dist/chunk-UFS7OXGL.js.map +0 -1
  168. package/dist/chunk-WVAEIKUY.js.map +0 -1
  169. package/dist/chunk-XIQAOGAA.js.map +0 -1
  170. package/dist/chunk-Y5OOHER4.js.map +0 -1
  171. package/dist/chunk-YXOXAQ5Y.js.map +0 -1
  172. /package/dist/{chunk-IFCM6OLK.js.map → chunk-3TUDKDTQ.js.map} +0 -0
  173. /package/dist/{chunk-A7INTIC5.js.map → chunk-4J53ZVPQ.js.map} +0 -0
  174. /package/dist/{chunk-XYUFGHUW.js.map → chunk-56F6EAQ6.js.map} +0 -0
  175. /package/dist/{chunk-F6OEXJQQ.js.map → chunk-6XG3NQRC.js.map} +0 -0
  176. /package/dist/{chunk-24ZLC5QN.js.map → chunk-7N7S2RKF.js.map} +0 -0
  177. /package/dist/{chunk-VRBBZH4U.js.map → chunk-AX4TRSRE.js.map} +0 -0
  178. /package/dist/{chunk-66RZ4EIT.js.map → chunk-BE6NEQLF.js.map} +0 -0
  179. /package/dist/{chunk-YF2MMBKA.js.map → chunk-BJPL5WAL.js.map} +0 -0
  180. /package/dist/{chunk-GEXI357K.js.map → chunk-C7C5WIIF.js.map} +0 -0
  181. /package/dist/{chunk-L3TYGUTH.js.map → chunk-CMPXLMC3.js.map} +0 -0
  182. /package/dist/{chunk-W2FBVBQ4.js.map → chunk-DBVBV2RF.js.map} +0 -0
  183. /package/dist/{chunk-IQOEW5YV.js.map → chunk-FCQ7ZYCQ.js.map} +0 -0
  184. /package/dist/{chunk-IIBFCZA7.js.map → chunk-FWXLKH2H.js.map} +0 -0
  185. /package/dist/{chunk-CKHPUOAP.js.map → chunk-K2N6WIZM.js.map} +0 -0
  186. /package/dist/{chunk-BHJAMSVC.js.map → chunk-LD6A7XG5.js.map} +0 -0
  187. /package/dist/{chunk-AKKFHN3I.js.map → chunk-M4WI23X3.js.map} +0 -0
  188. /package/dist/{chunk-N2O23WYA.js.map → chunk-M5KLYHHI.js.map} +0 -0
  189. /package/dist/{chunk-OQQRWPFZ.js.map → chunk-OS5RKJOH.js.map} +0 -0
  190. /package/dist/{chunk-DS3FZ7GS.js.map → chunk-OUSOMUFV.js.map} +0 -0
  191. /package/dist/{chunk-7B7IPPN5.js.map → chunk-OVYBENIJ.js.map} +0 -0
  192. /package/dist/{chunk-WDJCZQB4.js.map → chunk-UGFPGWJB.js.map} +0 -0
  193. /package/dist/{chunk-56LP72AD.js.map → chunk-UYYSOMS2.js.map} +0 -0
  194. /package/dist/{chunk-QTJOORGN.js.map → chunk-WIMKOTNY.js.map} +0 -0
  195. /package/dist/{chunk-GXTYEG7Q.js.map → chunk-WO22UEM3.js.map} +0 -0
  196. /package/dist/{chunk-C53JDEH3.js.map → chunk-Y62QPRKV.js.map} +0 -0
  197. /package/dist/{chunk-WFNH4UDF.js.map → chunk-Y6PNYJVO.js.map} +0 -0
  198. /package/dist/{contradiction-scan-CWO3LIWV.js.map → contradiction-scan-UERKJESC.js.map} +0 -0
  199. /package/dist/{first-start-migration-5DXD3TF2.js.map → first-start-migration-GQ3UQNIL.js.map} +0 -0
  200. /package/dist/{tier-stats-QID73BBB.js.map → tier-stats-CSKL7BDG.js.map} +0 -0
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  resolveQmdCapabilities,
16
16
  resolveUtilityLearningCapabilities
17
- } from "./chunk-RJBW4EOU.js";
17
+ } from "./chunk-G7Q4D2G3.js";
18
18
  import "./chunk-A2IYSXDQ.js";
19
19
  import "./chunk-LPSF4OQH.js";
20
20
  import "./chunk-PZ5AY32C.js";
@@ -153,4 +153,4 @@ export {
153
153
  formatTierSummaryText,
154
154
  summarizeTiers
155
155
  };
156
- //# sourceMappingURL=tier-stats-QID73BBB.js.map
156
+ //# sourceMappingURL=tier-stats-CSKL7BDG.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-WDJCZQB4.js";
4
+ } from "./chunk-UGFPGWJB.js";
5
5
  import "./chunk-7FL4CNPV.js";
6
6
  import "./chunk-ZBJMUXZH.js";
7
- import "./chunk-Q6BAA57B.js";
7
+ import "./chunk-JFCS6PQU.js";
8
8
  import "./chunk-L2B3EE7B.js";
9
9
  import "./chunk-M7XQSUBB.js";
10
10
  import "./chunk-5UZXUTVO.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.738",
3
+ "version": "9.3.740",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3000,7 +3000,7 @@
3000
3000
  "core"
3001
3001
  ],
3002
3002
  "peerDependencies": {
3003
- "@remnic/coding-graph": "^9.3.738"
3003
+ "@remnic/coding-graph": "^9.3.740"
3004
3004
  },
3005
3005
  "peerDependenciesMeta": {
3006
3006
  "@remnic/coding-graph": {
@@ -249,6 +249,7 @@ import {
249
249
  } from "./action-confidence.js";
250
250
  import { formatProfileTraceAscii } from "./profiling.js";
251
251
  import { resolveAccessSetupCapabilities, resolveGraphConstructionCapabilities, resolveIndexingCapabilities } from "./capabilities.js";
252
+ import { resolveRecallEnhancementCapabilities } from "./capabilities.js";
252
253
 
253
254
  export class EngramAccessInputError extends Error {}
254
255
 
@@ -7639,7 +7640,7 @@ export class EngramAccessService {
7639
7640
  vote: "up" | "down";
7640
7641
  note?: string;
7641
7642
  }): Promise<{ recorded: boolean; enabled?: boolean; reason?: string }> {
7642
- if (!this.orchestrator.config.feedbackEnabled) {
7643
+ if (!resolveRecallEnhancementCapabilities(this.orchestrator.config).feedback) {
7643
7644
  return {
7644
7645
  recorded: false,
7645
7646
  enabled: false,
@@ -17,6 +17,9 @@ import {
17
17
  resolvePresentationCapabilities,
18
18
  resolveConsolidationCapabilities,
19
19
  resolveRecallAuxiliaryCapabilities,
20
+ resolveRecallEnhancementCapabilities,
21
+ resolvePipelineProcessingCapabilities,
22
+ resolveConversationContextCapabilities,
20
23
  type CapabilitySet,
21
24
  type AccessSetupCapabilitySet,
22
25
  type NamespaceCapabilitySet,
@@ -31,6 +34,9 @@ import {
31
34
  type PresentationCapabilitySet,
32
35
  type ConsolidationCapabilitySet,
33
36
  type RecallAuxiliaryCapabilitySet,
37
+ type RecallEnhancementCapabilitySet,
38
+ type PipelineProcessingCapabilitySet,
39
+ type ConversationContextCapabilitySet,
34
40
  } from "./capabilities.js";
35
41
 
36
42
  /**
@@ -1158,3 +1164,163 @@ test("resolveRecallAuxiliaryCapabilities returns a frozen object", () => {
1158
1164
  const caps = resolveRecallAuxiliaryCapabilities(parseConfig({}));
1159
1165
  assert.equal(Object.isFrozen(caps), true, "RecallAuxiliaryCapabilitySet must be frozen");
1160
1166
  });
1167
+
1168
+
1169
+ // ---------------------------------------------------------------------------
1170
+ // RecallEnhancementCapabilitySet — gate-parity tests (issue #1523 batch 9).
1171
+ // ---------------------------------------------------------------------------
1172
+
1173
+ const RECALL_ENH_FIELD_TO_FLAG: Record<keyof RecallEnhancementCapabilitySet, string> = {
1174
+ explicitCueRecall: "explicitCueRecallEnabled",
1175
+ targetedFactRecall: "targetedFactRecallEnabled",
1176
+ focusedListRecall: "focusedListRecallEnabled",
1177
+ responseGuidanceRecall: "responseGuidanceRecallEnabled",
1178
+ eventOrderRecall: "eventOrderRecallEnabled",
1179
+ reinforcementRecallBoost: "reinforcementRecallBoostEnabled",
1180
+ recallPlannerTelemetry: "recallPlannerTelemetryEnabled",
1181
+ peerProfileRecall: "peerProfileRecallEnabled",
1182
+ graphAssistShadowEval: "graphAssistShadowEvalEnabled",
1183
+ memoryReconstruction: "memoryReconstructionEnabled",
1184
+ memoryLinking: "memoryLinkingEnabled",
1185
+ causalTrajectoryRecall: "causalTrajectoryRecallEnabled",
1186
+ causalTrajectoryMemory: "causalTrajectoryMemoryEnabled",
1187
+ cmcRetrieval: "cmcRetrievalEnabled",
1188
+ contradictionDetection: "contradictionDetectionEnabled",
1189
+ factArchival: "factArchivalEnabled",
1190
+ entityRelationships: "entityRelationshipsEnabled",
1191
+ entityActivityLog: "entityActivityLogEnabled",
1192
+ compoundingInject: "compoundingInjectEnabled",
1193
+ accessTracking: "accessTrackingEnabled",
1194
+ autoPromoteToShared: "autoPromoteToSharedEnabled",
1195
+ recallGraph: "recallGraphEnabled",
1196
+ feedback: "feedbackEnabled",
1197
+ identity: "identityEnabled",
1198
+ };
1199
+
1200
+ const RECALL_ENH_FIELDS = Object.keys(RECALL_ENH_FIELD_TO_FLAG) as Array<keyof RecallEnhancementCapabilitySet>;
1201
+
1202
+ test("resolveRecallEnhancementCapabilities projects every field from its flag (true variant)", () => {
1203
+ const overrides: Record<string, boolean> = {};
1204
+ for (const flag of Object.values(RECALL_ENH_FIELD_TO_FLAG)) overrides[flag] = true;
1205
+ const config = parseConfig(overrides);
1206
+ const caps = resolveRecallEnhancementCapabilities(config);
1207
+ for (const field of RECALL_ENH_FIELDS) {
1208
+ assert.equal(caps[field], true, `${field} must be true`);
1209
+ }
1210
+ });
1211
+
1212
+ test("resolveRecallEnhancementCapabilities projects every field from its flag (false variant)", () => {
1213
+ const overrides: Record<string, boolean> = {};
1214
+ for (const flag of Object.values(RECALL_ENH_FIELD_TO_FLAG)) overrides[flag] = false;
1215
+ const config = parseConfig(overrides);
1216
+ const caps = resolveRecallEnhancementCapabilities(config);
1217
+ for (const field of RECALL_ENH_FIELDS) {
1218
+ assert.equal(caps[field], false, `${field} must be false`);
1219
+ }
1220
+ });
1221
+
1222
+ test("resolveRecallEnhancementCapabilities returns a frozen object", () => {
1223
+ const caps = resolveRecallEnhancementCapabilities(parseConfig({}));
1224
+ assert.equal(Object.isFrozen(caps), true, "RecallEnhancementCapabilitySet must be frozen");
1225
+ });
1226
+
1227
+ // ---------------------------------------------------------------------------
1228
+ // PipelineProcessingCapabilitySet — gate-parity tests (issue #1523 batch 9).
1229
+ // ---------------------------------------------------------------------------
1230
+
1231
+ const PIPELINE_FIELD_TO_FLAG: Record<keyof PipelineProcessingCapabilitySet, string> = {
1232
+ chunking: "chunkingEnabled",
1233
+ semanticChunking: "semanticChunkingEnabled",
1234
+ semanticDedup: "semanticDedupEnabled",
1235
+ summarization: "summarizationEnabled",
1236
+ topicExtraction: "topicExtractionEnabled",
1237
+ sessionObserver: "sessionObserverEnabled",
1238
+ profiling: "profilingEnabled",
1239
+ checkpoint: "checkpointEnabled",
1240
+ traceWeaver: "traceWeaverEnabled",
1241
+ routingRules: "routingRulesEnabled",
1242
+ inlineSourceAttribution: "inlineSourceAttributionEnabled",
1243
+ negativeExamples: "negativeExamplesEnabled",
1244
+ hourlySummaries: "hourlySummariesEnabled",
1245
+ lcm: "lcmEnabled",
1246
+ localLlmFast: "localLlmFastEnabled",
1247
+ proactiveExtraction: "proactiveExtractionEnabled",
1248
+ delinearize: "delinearizeEnabled",
1249
+ slowLog: "slowLogEnabled",
1250
+ hostEmbeddingProvider: "hostEmbeddingProviderEnabled",
1251
+ memoryExtensions: "memoryExtensionsEnabled",
1252
+ hourlySummariesExtended: "hourlySummariesExtendedEnabled",
1253
+ };
1254
+
1255
+ const PIPELINE_FIELDS = Object.keys(PIPELINE_FIELD_TO_FLAG) as Array<keyof PipelineProcessingCapabilitySet>;
1256
+
1257
+ test("resolvePipelineProcessingCapabilities projects every field from its flag (true variant)", () => {
1258
+ const overrides: Record<string, boolean> = {};
1259
+ for (const flag of Object.values(PIPELINE_FIELD_TO_FLAG)) overrides[flag] = true;
1260
+ const config = parseConfig(overrides);
1261
+ const caps = resolvePipelineProcessingCapabilities(config);
1262
+ for (const field of PIPELINE_FIELDS) {
1263
+ assert.equal(caps[field], true, `${field} must be true`);
1264
+ }
1265
+ });
1266
+
1267
+ test("resolvePipelineProcessingCapabilities projects every field from its flag (false variant)", () => {
1268
+ const overrides: Record<string, boolean> = {};
1269
+ for (const flag of Object.values(PIPELINE_FIELD_TO_FLAG)) overrides[flag] = false;
1270
+ const config = parseConfig(overrides);
1271
+ const caps = resolvePipelineProcessingCapabilities(config);
1272
+ for (const field of PIPELINE_FIELDS) {
1273
+ assert.equal(caps[field], false, `${field} must be false`);
1274
+ }
1275
+ });
1276
+
1277
+ test("resolvePipelineProcessingCapabilities returns a frozen object", () => {
1278
+ const caps = resolvePipelineProcessingCapabilities(parseConfig({}));
1279
+ assert.equal(Object.isFrozen(caps), true, "PipelineProcessingCapabilitySet must be frozen");
1280
+ });
1281
+
1282
+ // ---------------------------------------------------------------------------
1283
+ // ConversationContextCapabilitySet — gate-parity tests (issue #1523 batch 9).
1284
+ // ---------------------------------------------------------------------------
1285
+
1286
+ const CONV_CTX_FIELD_TO_FLAG: Record<keyof ConversationContextCapabilitySet, string> = {
1287
+ sharedContext: "sharedContextEnabled",
1288
+ intentRouting: "intentRoutingEnabled",
1289
+ crossSignalsSemantic: "crossSignalsSemanticEnabled",
1290
+ sharedCrossSignalSemantic: "sharedCrossSignalSemanticEnabled",
1291
+ operatorAwareConsolidation: "operatorAwareConsolidationEnabled",
1292
+ peerProfileReasoner: "peerProfileReasonerEnabled",
1293
+ cmcConsolidation: "cmcConsolidationEnabled",
1294
+ maintenanceNamespaceFanout: "maintenanceNamespaceFanoutEnabled",
1295
+ citations: "citationsEnabled",
1296
+ behaviorLoopAutoTune: "behaviorLoopAutoTuneEnabled",
1297
+ semanticRulePromotion: "semanticRulePromotionEnabled",
1298
+ codexMarketplace: "codexMarketplaceEnabled",
1299
+ };
1300
+
1301
+ const CONV_CTX_FIELDS = Object.keys(CONV_CTX_FIELD_TO_FLAG) as Array<keyof ConversationContextCapabilitySet>;
1302
+
1303
+ test("resolveConversationContextCapabilities projects every field from its flag (true variant)", () => {
1304
+ const overrides: Record<string, boolean> = {};
1305
+ for (const flag of Object.values(CONV_CTX_FIELD_TO_FLAG)) overrides[flag] = true;
1306
+ const config = parseConfig(overrides);
1307
+ const caps = resolveConversationContextCapabilities(config);
1308
+ for (const field of CONV_CTX_FIELDS) {
1309
+ assert.equal(caps[field], true, `${field} must be true`);
1310
+ }
1311
+ });
1312
+
1313
+ test("resolveConversationContextCapabilities projects every field from its flag (false variant)", () => {
1314
+ const overrides: Record<string, boolean> = {};
1315
+ for (const flag of Object.values(CONV_CTX_FIELD_TO_FLAG)) overrides[flag] = false;
1316
+ const config = parseConfig(overrides);
1317
+ const caps = resolveConversationContextCapabilities(config);
1318
+ for (const field of CONV_CTX_FIELDS) {
1319
+ assert.equal(caps[field], false, `${field} must be false`);
1320
+ }
1321
+ });
1322
+
1323
+ test("resolveConversationContextCapabilities returns a frozen object", () => {
1324
+ const caps = resolveConversationContextCapabilities(parseConfig({}));
1325
+ assert.equal(Object.isFrozen(caps), true, "ConversationContextCapabilitySet must be frozen");
1326
+ });
@@ -1016,3 +1016,270 @@ export function resolveRecallAuxiliaryCapabilities(config: RecallAuxiliaryConfig
1016
1016
  cronRecallPolicy: config.cronRecallPolicyEnabled,
1017
1017
  });
1018
1018
  }
1019
+
1020
+ // ---------------------------------------------------------------------------
1021
+ // RecallEnhancement capability set (issue #1523 batch 9).
1022
+ //
1023
+ // These 24 flags gate recall enrichment, memory reconstruction, entity
1024
+ // relationships, causal trajectory recall, CMC retrieval, and related
1025
+ // enhancement paths. Read sites span orchestrator, access-service, graph-recall,
1026
+ // and CLI research-status commands. All flags are non-optional booleans on
1027
+ // PluginConfig (defaults resolved at the parse boundary), so the projection
1028
+ // is a pure pass-through.
1029
+ // ---------------------------------------------------------------------------
1030
+
1031
+ /**
1032
+ * Frozen projection of recall-enhancement feature gates (issue #1523 batch 9).
1033
+ */
1034
+ export interface RecallEnhancementCapabilitySet {
1035
+ readonly explicitCueRecall: boolean;
1036
+ readonly targetedFactRecall: boolean;
1037
+ readonly focusedListRecall: boolean;
1038
+ readonly responseGuidanceRecall: boolean;
1039
+ readonly eventOrderRecall: boolean;
1040
+ readonly reinforcementRecallBoost: boolean;
1041
+ readonly recallPlannerTelemetry: boolean;
1042
+ readonly peerProfileRecall: boolean;
1043
+ readonly graphAssistShadowEval: boolean;
1044
+ readonly memoryReconstruction: boolean;
1045
+ readonly memoryLinking: boolean;
1046
+ readonly causalTrajectoryRecall: boolean;
1047
+ readonly causalTrajectoryMemory: boolean;
1048
+ readonly cmcRetrieval: boolean;
1049
+ readonly contradictionDetection: boolean;
1050
+ readonly factArchival: boolean;
1051
+ readonly entityRelationships: boolean;
1052
+ readonly entityActivityLog: boolean;
1053
+ readonly compoundingInject: boolean;
1054
+ readonly accessTracking: boolean;
1055
+ readonly autoPromoteToShared: boolean;
1056
+ readonly recallGraph: boolean;
1057
+ readonly feedback: boolean;
1058
+ readonly identity: boolean;
1059
+ }
1060
+
1061
+ /**
1062
+ * Config projection consumed by {@link resolveRecallEnhancementCapabilities}.
1063
+ */
1064
+ export type RecallEnhancementConfigProjection = Pick<
1065
+ PluginConfig,
1066
+ | "explicitCueRecallEnabled"
1067
+ | "targetedFactRecallEnabled"
1068
+ | "focusedListRecallEnabled"
1069
+ | "responseGuidanceRecallEnabled"
1070
+ | "eventOrderRecallEnabled"
1071
+ | "reinforcementRecallBoostEnabled"
1072
+ | "recallPlannerTelemetryEnabled"
1073
+ | "peerProfileRecallEnabled"
1074
+ | "graphAssistShadowEvalEnabled"
1075
+ | "memoryReconstructionEnabled"
1076
+ | "memoryLinkingEnabled"
1077
+ | "causalTrajectoryRecallEnabled"
1078
+ | "causalTrajectoryMemoryEnabled"
1079
+ | "cmcRetrievalEnabled"
1080
+ | "contradictionDetectionEnabled"
1081
+ | "factArchivalEnabled"
1082
+ | "entityRelationshipsEnabled"
1083
+ | "entityActivityLogEnabled"
1084
+ | "compoundingInjectEnabled"
1085
+ | "accessTrackingEnabled"
1086
+ | "autoPromoteToSharedEnabled"
1087
+ | "recallGraphEnabled"
1088
+ | "feedbackEnabled"
1089
+ | "identityEnabled"
1090
+ >;
1091
+
1092
+ /**
1093
+ * Resolve the {@link RecallEnhancementCapabilitySet} from parsed config.
1094
+ */
1095
+ export function resolveRecallEnhancementCapabilities(config: RecallEnhancementConfigProjection): RecallEnhancementCapabilitySet {
1096
+ return Object.freeze({
1097
+ explicitCueRecall: config.explicitCueRecallEnabled,
1098
+ targetedFactRecall: config.targetedFactRecallEnabled,
1099
+ focusedListRecall: config.focusedListRecallEnabled,
1100
+ responseGuidanceRecall: config.responseGuidanceRecallEnabled,
1101
+ eventOrderRecall: config.eventOrderRecallEnabled,
1102
+ reinforcementRecallBoost: config.reinforcementRecallBoostEnabled,
1103
+ recallPlannerTelemetry: config.recallPlannerTelemetryEnabled,
1104
+ peerProfileRecall: config.peerProfileRecallEnabled,
1105
+ graphAssistShadowEval: config.graphAssistShadowEvalEnabled === true,
1106
+ memoryReconstruction: config.memoryReconstructionEnabled,
1107
+ memoryLinking: config.memoryLinkingEnabled,
1108
+ causalTrajectoryRecall: config.causalTrajectoryRecallEnabled,
1109
+ causalTrajectoryMemory: config.causalTrajectoryMemoryEnabled,
1110
+ cmcRetrieval: config.cmcRetrievalEnabled,
1111
+ contradictionDetection: config.contradictionDetectionEnabled,
1112
+ factArchival: config.factArchivalEnabled,
1113
+ entityRelationships: config.entityRelationshipsEnabled,
1114
+ entityActivityLog: config.entityActivityLogEnabled,
1115
+ compoundingInject: config.compoundingInjectEnabled,
1116
+ accessTracking: config.accessTrackingEnabled,
1117
+ autoPromoteToShared: config.autoPromoteToSharedEnabled,
1118
+ recallGraph: config.recallGraphEnabled,
1119
+ feedback: config.feedbackEnabled,
1120
+ identity: config.identityEnabled,
1121
+ });
1122
+ }
1123
+
1124
+ // ---------------------------------------------------------------------------
1125
+ // PipelineProcessing capability set (issue #1523 batch 9).
1126
+ //
1127
+ // These 22 flags gate the extraction/chunking/summarization pipeline and LLM
1128
+ // infrastructure. Read sites span orchestrator, extraction, summarizer,
1129
+ // embedding-fallback, local-llm, search, day-summary, and semantic-consolidation.
1130
+ // All flags are non-optional booleans on PluginConfig (defaults resolved at
1131
+ // the parse boundary), so the projection is a pure pass-through.
1132
+ // ---------------------------------------------------------------------------
1133
+
1134
+ /**
1135
+ * Frozen projection of pipeline-processing feature gates (issue #1523 batch 9).
1136
+ */
1137
+ export interface PipelineProcessingCapabilitySet {
1138
+ readonly chunking: boolean;
1139
+ readonly semanticChunking: boolean;
1140
+ readonly semanticDedup: boolean;
1141
+ readonly summarization: boolean;
1142
+ readonly topicExtraction: boolean;
1143
+ readonly sessionObserver: boolean;
1144
+ readonly profiling: boolean;
1145
+ readonly checkpoint: boolean;
1146
+ readonly traceWeaver: boolean;
1147
+ readonly routingRules: boolean;
1148
+ readonly inlineSourceAttribution: boolean;
1149
+ readonly negativeExamples: boolean;
1150
+ readonly hourlySummaries: boolean;
1151
+ readonly lcm: boolean;
1152
+ readonly localLlmFast: boolean;
1153
+ readonly proactiveExtraction: boolean;
1154
+ readonly delinearize: boolean;
1155
+ readonly slowLog: boolean;
1156
+ readonly hostEmbeddingProvider: boolean;
1157
+ readonly memoryExtensions: boolean;
1158
+ readonly hourlySummariesExtended: boolean;
1159
+ }
1160
+
1161
+ /**
1162
+ * Config projection consumed by {@link resolvePipelineProcessingCapabilities}.
1163
+ */
1164
+ export type PipelineProcessingConfigProjection = Pick<
1165
+ PluginConfig,
1166
+ | "chunkingEnabled"
1167
+ | "semanticChunkingEnabled"
1168
+ | "semanticDedupEnabled"
1169
+ | "summarizationEnabled"
1170
+ | "topicExtractionEnabled"
1171
+ | "sessionObserverEnabled"
1172
+ | "profilingEnabled"
1173
+ | "checkpointEnabled"
1174
+ | "traceWeaverEnabled"
1175
+ | "routingRulesEnabled"
1176
+ | "inlineSourceAttributionEnabled"
1177
+ | "negativeExamplesEnabled"
1178
+ | "hourlySummariesEnabled"
1179
+ | "lcmEnabled"
1180
+ | "localLlmFastEnabled"
1181
+ | "proactiveExtractionEnabled"
1182
+ | "delinearizeEnabled"
1183
+ | "slowLogEnabled"
1184
+ | "hostEmbeddingProviderEnabled"
1185
+ | "memoryExtensionsEnabled"
1186
+ | "hourlySummariesExtendedEnabled"
1187
+ >;
1188
+
1189
+ /**
1190
+ * Resolve the {@link PipelineProcessingCapabilitySet} from parsed config.
1191
+ */
1192
+ export function resolvePipelineProcessingCapabilities(config: PipelineProcessingConfigProjection): PipelineProcessingCapabilitySet {
1193
+ return Object.freeze({
1194
+ chunking: config.chunkingEnabled,
1195
+ semanticChunking: config.semanticChunkingEnabled,
1196
+ semanticDedup: config.semanticDedupEnabled,
1197
+ summarization: config.summarizationEnabled,
1198
+ topicExtraction: config.topicExtractionEnabled,
1199
+ sessionObserver: config.sessionObserverEnabled === true,
1200
+ profiling: config.profilingEnabled,
1201
+ checkpoint: config.checkpointEnabled,
1202
+ traceWeaver: config.traceWeaverEnabled,
1203
+ routingRules: config.routingRulesEnabled,
1204
+ inlineSourceAttribution: config.inlineSourceAttributionEnabled,
1205
+ negativeExamples: config.negativeExamplesEnabled,
1206
+ hourlySummaries: config.hourlySummariesEnabled,
1207
+ lcm: config.lcmEnabled,
1208
+ localLlmFast: config.localLlmFastEnabled,
1209
+ proactiveExtraction: config.proactiveExtractionEnabled,
1210
+ delinearize: config.delinearizeEnabled,
1211
+ slowLog: config.slowLogEnabled,
1212
+ hostEmbeddingProvider: config.hostEmbeddingProviderEnabled,
1213
+ memoryExtensions: config.memoryExtensionsEnabled,
1214
+ hourlySummariesExtended: config.hourlySummariesExtendedEnabled,
1215
+ });
1216
+ }
1217
+
1218
+ // ---------------------------------------------------------------------------
1219
+ // ConversationContext capability set (issue #1523 batch 9).
1220
+ //
1221
+ // These 12 flags gate conversation context, shared signals, intent routing,
1222
+ // operator-aware consolidation, CMC consolidation, maintenance fanout, CLI
1223
+ // presentation, and code connectors. Read sites span orchestrator, CLI,
1224
+ // shared-context/manager, semantic-consolidation-coordinator, compounding/engine,
1225
+ // maintenance modules, procedural stats, connectors, and wearables. All flags
1226
+ // are non-optional booleans on PluginConfig (defaults resolved at the parse
1227
+ // boundary), so the projection is a pure pass-through.
1228
+ // ---------------------------------------------------------------------------
1229
+
1230
+ /**
1231
+ * Frozen projection of conversation/context feature gates (issue #1523 batch 9).
1232
+ */
1233
+ export interface ConversationContextCapabilitySet {
1234
+ readonly sharedContext: boolean;
1235
+ readonly intentRouting: boolean;
1236
+ readonly crossSignalsSemantic: boolean;
1237
+ readonly sharedCrossSignalSemantic: boolean;
1238
+ readonly operatorAwareConsolidation: boolean;
1239
+ readonly peerProfileReasoner: boolean;
1240
+ readonly cmcConsolidation: boolean;
1241
+ readonly maintenanceNamespaceFanout: boolean;
1242
+ readonly citations: boolean;
1243
+ readonly behaviorLoopAutoTune: boolean;
1244
+ readonly semanticRulePromotion: boolean;
1245
+ readonly codexMarketplace: boolean;
1246
+ }
1247
+
1248
+ /**
1249
+ * Config projection consumed by {@link resolveConversationContextCapabilities}.
1250
+ */
1251
+ export type ConversationContextConfigProjection = Pick<
1252
+ PluginConfig,
1253
+ | "sharedContextEnabled"
1254
+ | "intentRoutingEnabled"
1255
+ | "crossSignalsSemanticEnabled"
1256
+ | "sharedCrossSignalSemanticEnabled"
1257
+ | "operatorAwareConsolidationEnabled"
1258
+ | "peerProfileReasonerEnabled"
1259
+ | "cmcConsolidationEnabled"
1260
+ | "maintenanceNamespaceFanoutEnabled"
1261
+ | "citationsEnabled"
1262
+ | "behaviorLoopAutoTuneEnabled"
1263
+ | "semanticRulePromotionEnabled"
1264
+ | "codexMarketplaceEnabled"
1265
+ >;
1266
+
1267
+ /**
1268
+ * Resolve the {@link ConversationContextCapabilitySet} from parsed config.
1269
+ */
1270
+ export function resolveConversationContextCapabilities(config: ConversationContextConfigProjection): ConversationContextCapabilitySet {
1271
+ return Object.freeze({
1272
+ sharedContext: config.sharedContextEnabled,
1273
+ intentRouting: config.intentRoutingEnabled,
1274
+ crossSignalsSemantic: config.crossSignalsSemanticEnabled,
1275
+ sharedCrossSignalSemantic: config.sharedCrossSignalSemanticEnabled === true,
1276
+ operatorAwareConsolidation: config.operatorAwareConsolidationEnabled,
1277
+ peerProfileReasoner: config.peerProfileReasonerEnabled,
1278
+ cmcConsolidation: config.cmcConsolidationEnabled,
1279
+ maintenanceNamespaceFanout: config.maintenanceNamespaceFanoutEnabled,
1280
+ citations: config.citationsEnabled,
1281
+ behaviorLoopAutoTune: config.behaviorLoopAutoTuneEnabled,
1282
+ semanticRulePromotion: config.semanticRulePromotionEnabled,
1283
+ codexMarketplace: config.codexMarketplaceEnabled,
1284
+ });
1285
+ }
@@ -21,6 +21,7 @@ import type { Orchestrator } from "../orchestrator.js";
21
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
+ import { resolveRecallEnhancementCapabilities } from "../capabilities.js";
24
25
  import {
25
26
  runObjectiveStateStatusCliCommand,
26
27
  runCausalTrajectoryStatusCliCommand,
@@ -67,7 +68,7 @@ cmd
67
68
  const status = await runCausalTrajectoryStatusCliCommand({
68
69
  memoryDir: orchestrator.config.memoryDir,
69
70
  causalTrajectoryStoreDir: orchestrator.config.causalTrajectoryStoreDir,
70
- causalTrajectoryMemoryEnabled: orchestrator.config.causalTrajectoryMemoryEnabled,
71
+ causalTrajectoryMemoryEnabled: resolveRecallEnhancementCapabilities(orchestrator.config).causalTrajectoryMemory,
71
72
  });
72
73
  console.log(JSON.stringify(status, null, 2));
73
74
  console.log("OK");
package/src/cli.ts CHANGED
@@ -232,6 +232,7 @@ import { getTrainingExportAdapter, listTrainingExportAdapters } from "./training
232
232
  import { renderRecallExplain, parseRecallExplainFormat } from "./recall-explain-renderer.js";
233
233
  import { renderXray } from "./recall-xray-renderer.js";
234
234
  import { parseXrayCliOptions } from "./recall-xray-cli.js";
235
+ import { resolveConversationContextCapabilities } from "./capabilities.js";
235
236
  import {
236
237
  collectPatternMemories,
237
238
  explainPatternMemory,
@@ -6276,7 +6277,7 @@ export function registerCli(
6276
6277
  const options = (args[0] ?? {}) as Record<string, unknown>;
6277
6278
  const result = await runSemanticRulePromoteCliCommand({
6278
6279
  memoryDir: orchestrator.config.memoryDir,
6279
- semanticRulePromotionEnabled: orchestrator.config.semanticRulePromotionEnabled,
6280
+ semanticRulePromotionEnabled: resolveConversationContextCapabilities(orchestrator.config).semanticRulePromotion,
6280
6281
  sourceMemoryId: String(options.memoryId ?? ""),
6281
6282
  dryRun: options.dryRun === true,
6282
6283
  });
@@ -6802,7 +6803,7 @@ export function registerCli(
6802
6803
  principal: resolveAccessPrincipalOverride(options.principal, orchestrator.config.agentAccessHttp.principal),
6803
6804
  maxBodyBytes: Number.isFinite(maxBodyBytesRaw) ? maxBodyBytesRaw : 131072,
6804
6805
  trustPrincipalHeader: options.trustPrincipalHeader === true,
6805
- citationsEnabled: orchestrator.config.citationsEnabled,
6806
+ citationsEnabled: resolveConversationContextCapabilities(orchestrator.config).citations,
6806
6807
  citationsAutoDetect: orchestrator.config.citationsAutoDetect,
6807
6808
  emitLegacyTools: orchestrator.config.emitLegacyTools,
6808
6809
  });
@@ -8,6 +8,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
10
  import { resolveQmdCapabilities, type QmdConfigProjection, resolveConsolidationCapabilities } from "../capabilities.js";
11
+ import { resolveConversationContextCapabilities } from "../capabilities.js";
11
12
 
12
13
  type MistakesFile = {
13
14
  version?: number;
@@ -496,7 +497,7 @@ export class CompoundingEngine {
496
497
  let promotionCandidates = resolveConsolidationCapabilities(this.config).compoundingSemantic
497
498
  ? this.derivePromotionCandidates(outcomeSummary, mistakes.registry, rubrics)
498
499
  : [];
499
- if (this.config.cmcConsolidationEnabled) {
500
+ if (resolveConversationContextCapabilities(this.config).cmcConsolidation) {
500
501
  try {
501
502
  const { deriveCausalPromotionCandidates, materializeAfterCausalConsolidation } = await import("../causal-consolidation.js");
502
503
  const causalCandidates = await deriveCausalPromotionCandidates({
@@ -22,6 +22,7 @@ import path from "node:path";
22
22
 
23
23
  import { log } from "../logger.js";
24
24
  import type { PluginConfig } from "../types.js";
25
+ import { resolveConversationContextCapabilities } from "../capabilities.js";
25
26
 
26
27
  // ── Types ─────────────────────────────────────────────────────────────────
27
28
 
@@ -295,7 +296,7 @@ export async function installFromMarketplace(
295
296
  debug: (msg) => log.debug(`[marketplace] ${msg}`),
296
297
  };
297
298
 
298
- if (!config.codexMarketplaceEnabled) {
299
+ if (!resolveConversationContextCapabilities(config).codexMarketplace) {
299
300
  return {
300
301
  ok: false,
301
302
  message: "Codex marketplace is disabled in config (codexMarketplaceEnabled: false)",
@@ -3,6 +3,7 @@ import { fileURLToPath } from "node:url";
3
3
  import { log } from "./logger.js";
4
4
  import type { MemoryFile, PluginConfig } from "./types.js";
5
5
  import { discoverMemoryExtensions, renderExtensionsFooter, resolveExtensionsRoot } from "./memory-extension-host/index.js";
6
+ import { resolvePipelineProcessingCapabilities } from "./capabilities.js";
6
7
 
7
8
  const PROMPT_RELATIVE_PATH = path.join("prompts", "day_summary.prompt.md");
8
9
 
@@ -114,7 +115,7 @@ export function formatDaySummaryMemories(memories: string | MemoryFile[]): strin
114
115
  export async function buildExtensionsFooterForSummary(
115
116
  config: PluginConfig,
116
117
  ): Promise<string> {
117
- if (!config.memoryExtensionsEnabled) return "";
118
+ if (!resolvePipelineProcessingCapabilities(config).memoryExtensions) return "";
118
119
  const root = resolveExtensionsRoot(config);
119
120
  const extensions = await discoverMemoryExtensions(root, log);
120
121
  if (extensions.length === 0) return "";
@@ -7,6 +7,7 @@ import {
7
7
  } from "./capabilities.js";
8
8
  import { readEnvVar } from "./runtime/env.js";
9
9
  import type { PluginConfig } from "./types.js";
10
+ import { resolvePipelineProcessingCapabilities } from "./capabilities.js";
10
11
  import {
11
12
  getHostEmbeddingProvider,
12
13
  type HostEmbeddingProvider,
@@ -405,7 +406,7 @@ export class EmbeddingFallback {
405
406
 
406
407
  if (
407
408
  options.includeHost !== false &&
408
- this.config.hostEmbeddingProviderEnabled !== false
409
+ resolvePipelineProcessingCapabilities(this.config).hostEmbeddingProvider !== false
409
410
  ) {
410
411
  const hostProvider = getHostEmbeddingProvider(this.config.memoryDir);
411
412
  if (hostProvider) {
package/src/extraction.ts CHANGED
@@ -38,6 +38,7 @@ 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 { resolvePipelineProcessingCapabilities } from "./capabilities.js";
41
42
  import { resolveMemoryLifecycleCapabilities,
42
43
  resolveLocalLlmCapabilities,resolveRecallAuxiliaryCapabilities } from "./capabilities.js";
43
44
 
@@ -199,7 +200,7 @@ export class ExtractionEngine {
199
200
  }
200
201
  let content = sanitized.text;
201
202
  // De-linearize: resolve coreferences + anchor temporal expressions
202
- if (this.config.delinearizeEnabled) {
203
+ if (resolvePipelineProcessingCapabilities(this.config).delinearize) {
203
204
  content = delinearize(content, result.entities, ts);
204
205
  }
205
206
  return { ...fact, content };
@@ -578,7 +579,7 @@ export class ExtractionEngine {
578
579
  conversation: string,
579
580
  base: ExtractionResult,
580
581
  ): Promise<ExtractionResult> {
581
- if (!this.config.proactiveExtractionEnabled) return base;
582
+ if (!resolvePipelineProcessingCapabilities(this.config).proactiveExtraction) return base;
582
583
  const maxAdditional = Math.max(0, Math.floor(this.config.maxProactiveQuestionsPerExtraction));
583
584
  if (maxAdditional === 0) return base;
584
585
  if (this.config.proactiveExtractionTimeoutMs === 0) return base;