@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
@@ -313,13 +313,13 @@ declare const CapsuleBlockSchema: z.ZodObject<{
313
313
  peerProfiles: boolean;
314
314
  }>;
315
315
  }, "strip", z.ZodTypeAny, {
316
- schemaVersion: string;
317
316
  includes: {
318
317
  procedural: boolean;
319
318
  taxonomy: boolean;
320
319
  identityAnchors: boolean;
321
320
  peerProfiles: boolean;
322
321
  };
322
+ schemaVersion: string;
323
323
  id: string;
324
324
  version: string;
325
325
  description: string;
@@ -334,13 +334,13 @@ declare const CapsuleBlockSchema: z.ZodObject<{
334
334
  directAnswerEnabled: boolean;
335
335
  };
336
336
  }, {
337
- schemaVersion: string;
338
337
  includes: {
339
338
  procedural: boolean;
340
339
  taxonomy: boolean;
341
340
  identityAnchors: boolean;
342
341
  peerProfiles: boolean;
343
342
  };
343
+ schemaVersion: string;
344
344
  id: string;
345
345
  version: string;
346
346
  description: string;
@@ -464,13 +464,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
464
464
  peerProfiles: boolean;
465
465
  }>;
466
466
  }, "strip", z.ZodTypeAny, {
467
- schemaVersion: string;
468
467
  includes: {
469
468
  procedural: boolean;
470
469
  taxonomy: boolean;
471
470
  identityAnchors: boolean;
472
471
  peerProfiles: boolean;
473
472
  };
473
+ schemaVersion: string;
474
474
  id: string;
475
475
  version: string;
476
476
  description: string;
@@ -485,13 +485,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
485
485
  directAnswerEnabled: boolean;
486
486
  };
487
487
  }, {
488
- schemaVersion: string;
489
488
  includes: {
490
489
  procedural: boolean;
491
490
  taxonomy: boolean;
492
491
  identityAnchors: boolean;
493
492
  peerProfiles: boolean;
494
493
  };
494
+ schemaVersion: string;
495
495
  id: string;
496
496
  version: string;
497
497
  description: string;
@@ -518,13 +518,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
518
518
  pluginVersion: string;
519
519
  includesTranscripts: boolean;
520
520
  capsule: {
521
- schemaVersion: string;
522
521
  includes: {
523
522
  procedural: boolean;
524
523
  taxonomy: boolean;
525
524
  identityAnchors: boolean;
526
525
  peerProfiles: boolean;
527
526
  };
527
+ schemaVersion: string;
528
528
  id: string;
529
529
  version: string;
530
530
  description: string;
@@ -551,13 +551,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
551
551
  pluginVersion: string;
552
552
  includesTranscripts: boolean;
553
553
  capsule: {
554
- schemaVersion: string;
555
554
  includes: {
556
555
  procedural: boolean;
557
556
  taxonomy: boolean;
558
557
  identityAnchors: boolean;
559
558
  peerProfiles: boolean;
560
559
  };
560
+ schemaVersion: string;
561
561
  id: string;
562
562
  version: string;
563
563
  description: string;
@@ -683,13 +683,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
683
683
  peerProfiles: boolean;
684
684
  }>;
685
685
  }, "strip", z.ZodTypeAny, {
686
- schemaVersion: string;
687
686
  includes: {
688
687
  procedural: boolean;
689
688
  taxonomy: boolean;
690
689
  identityAnchors: boolean;
691
690
  peerProfiles: boolean;
692
691
  };
692
+ schemaVersion: string;
693
693
  id: string;
694
694
  version: string;
695
695
  description: string;
@@ -704,13 +704,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
704
704
  directAnswerEnabled: boolean;
705
705
  };
706
706
  }, {
707
- schemaVersion: string;
708
707
  includes: {
709
708
  procedural: boolean;
710
709
  taxonomy: boolean;
711
710
  identityAnchors: boolean;
712
711
  peerProfiles: boolean;
713
712
  };
713
+ schemaVersion: string;
714
714
  id: string;
715
715
  version: string;
716
716
  description: string;
@@ -737,13 +737,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
737
737
  pluginVersion: string;
738
738
  includesTranscripts: boolean;
739
739
  capsule: {
740
- schemaVersion: string;
741
740
  includes: {
742
741
  procedural: boolean;
743
742
  taxonomy: boolean;
744
743
  identityAnchors: boolean;
745
744
  peerProfiles: boolean;
746
745
  };
746
+ schemaVersion: string;
747
747
  id: string;
748
748
  version: string;
749
749
  description: string;
@@ -770,13 +770,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
770
770
  pluginVersion: string;
771
771
  includesTranscripts: boolean;
772
772
  capsule: {
773
- schemaVersion: string;
774
773
  includes: {
775
774
  procedural: boolean;
776
775
  taxonomy: boolean;
777
776
  identityAnchors: boolean;
778
777
  peerProfiles: boolean;
779
778
  };
779
+ schemaVersion: string;
780
780
  id: string;
781
781
  version: string;
782
782
  description: string;
@@ -815,13 +815,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
815
815
  pluginVersion: string;
816
816
  includesTranscripts: boolean;
817
817
  capsule: {
818
- schemaVersion: string;
819
818
  includes: {
820
819
  procedural: boolean;
821
820
  taxonomy: boolean;
822
821
  identityAnchors: boolean;
823
822
  peerProfiles: boolean;
824
823
  };
824
+ schemaVersion: string;
825
825
  id: string;
826
826
  version: string;
827
827
  description: string;
@@ -854,13 +854,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
854
854
  pluginVersion: string;
855
855
  includesTranscripts: boolean;
856
856
  capsule: {
857
- schemaVersion: string;
858
857
  includes: {
859
858
  procedural: boolean;
860
859
  taxonomy: boolean;
861
860
  identityAnchors: boolean;
862
861
  peerProfiles: boolean;
863
862
  };
863
+ schemaVersion: string;
864
864
  id: string;
865
865
  version: string;
866
866
  description: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.737",
3
+ "version": "9.3.738",
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.737"
3003
+ "@remnic/coding-graph": "^9.3.738"
3004
3004
  },
3005
3005
  "peerDependenciesMeta": {
3006
3006
  "@remnic/coding-graph": {
@@ -5,12 +5,11 @@ import { readdirSync, unlinkSync } from "node:fs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { ZodError } from "zod";
7
7
  import { AccessIdempotencyStore, hashAccessIdempotencyPayload } from "./access-idempotency.js";
8
- import {
9
- resolveNamespaceCapabilities,
8
+ import { resolveNamespaceCapabilities,
10
9
  resolveMemoryLifecycleCapabilities,
11
10
  resolveQmdCapabilities,
12
11
  resolveIdentityContinuityCapabilities,
13
- resolveSecurityCapabilities, resolveObjectiveStateCapabilities, resolveCompressionCapabilities} from "./capabilities.js";
12
+ resolveSecurityCapabilities, resolveObjectiveStateCapabilities, resolveCompressionCapabilities, resolveConsolidationCapabilities, resolveRecallAuxiliaryCapabilities } from "./capabilities.js";
14
13
  import { AccessAuditAdapter, type AccessAuditConfig, type AccessAuditResult } from "./access-audit.js";
15
14
  import type { AnomalyDetectorResult } from "./recall-audit-anomaly.js";
16
15
  import { resolveGitContext } from "./coding/git-context.js";
@@ -2984,7 +2983,7 @@ export class EngramAccessService {
2984
2983
  async daySummary(
2985
2984
  request: EngramAccessDaySummaryRequest,
2986
2985
  ): Promise<import("./types.js").DaySummaryResult | null> {
2987
- if (!this.orchestrator.config.daySummaryEnabled) {
2986
+ if (!resolveRecallAuxiliaryCapabilities(this.orchestrator.config).daySummary) {
2988
2987
  throw new EngramAccessInputError("day summary is disabled");
2989
2988
  }
2990
2989
 
@@ -6832,7 +6831,7 @@ export class EngramAccessService {
6832
6831
  if (!resolveIdentityContinuityCapabilities(this.orchestrator.config).identityContinuity) {
6833
6832
  return { enabled: false, reason: "Identity continuity is disabled. Enable `identityContinuityEnabled: true`." };
6834
6833
  }
6835
- if (!this.orchestrator.config.continuityAuditEnabled) {
6834
+ if (!resolveConsolidationCapabilities(this.orchestrator.config).continuityAudit) {
6836
6835
  return { enabled: false, reason: "Continuity audits are disabled. Enable `continuityAuditEnabled: true`." };
6837
6836
  }
6838
6837
  if (!this.orchestrator.compounding) {
@@ -6854,7 +6853,7 @@ export class EngramAccessService {
6854
6853
  if (!resolveIdentityContinuityCapabilities(this.orchestrator.config).identityContinuity) {
6855
6854
  return { enabled: false, reason: "Identity continuity is disabled. Enable `identityContinuityEnabled: true`." };
6856
6855
  }
6857
- if (!this.orchestrator.config.continuityIncidentLoggingEnabled) {
6856
+ if (!resolveRecallAuxiliaryCapabilities(this.orchestrator.config).continuityIncidentLogging) {
6858
6857
  return { enabled: false, reason: "Continuity incident logging is disabled. Enable `continuityIncidentLoggingEnabled: true`." };
6859
6858
  }
6860
6859
  const symptom = request.symptom?.trim();
@@ -6880,7 +6879,7 @@ export class EngramAccessService {
6880
6879
  if (!resolveIdentityContinuityCapabilities(this.orchestrator.config).identityContinuity) {
6881
6880
  return { enabled: false, reason: "Identity continuity is disabled." };
6882
6881
  }
6883
- if (!this.orchestrator.config.continuityIncidentLoggingEnabled) {
6882
+ if (!resolveRecallAuxiliaryCapabilities(this.orchestrator.config).continuityIncidentLogging) {
6884
6883
  return { enabled: false, reason: "Continuity incident logging is disabled." };
6885
6884
  }
6886
6885
  const id = request.id?.trim();
@@ -8234,7 +8233,7 @@ export class EngramAccessService {
8234
8233
  const root = explicitRoot ?? storage.dir;
8235
8234
  const memoryDir = explicitMemoryDir ?? this.orchestrator.config.memoryDir;
8236
8235
  const versioning = importOptions.versioning ?? {
8237
- enabled: this.orchestrator.config.versioningEnabled,
8236
+ enabled: resolveRecallAuxiliaryCapabilities(this.orchestrator.config).versioning,
8238
8237
  maxVersionsPerPage: this.orchestrator.config.versioningMaxPerPage,
8239
8238
  sidecarDir: this.orchestrator.config.versioningSidecarDir,
8240
8239
  };
package/src/buffer.ts CHANGED
@@ -9,6 +9,7 @@ import type {
9
9
  PluginConfig,
10
10
  SignalLevel,
11
11
  } from "./types.js";
12
+ import { resolvePresentationCapabilities } from "./capabilities.js";
12
13
 
13
14
  export type TriggerDecision = "extract_now" | "extract_batch" | "keep_buffering";
14
15
 
@@ -286,7 +287,7 @@ export class SmartBuffer {
286
287
  // *reduce* extraction frequency.
287
288
  if (
288
289
  decision === "keep_buffering" &&
289
- this.config.bufferSurpriseTriggerEnabled &&
290
+ resolvePresentationCapabilities(this.config).bufferSurpriseTrigger &&
290
291
  this.surpriseProbe !== null &&
291
292
  // Matching the existing "smart" branch: surprise is a lower-tier
292
293
  // novelty signal that should not second-guess a high-signal hit
@@ -14,6 +14,9 @@ import {
14
14
  resolveUtilityLearningCapabilities,
15
15
  resolveObjectiveStateCapabilities,
16
16
  resolveCompressionCapabilities,
17
+ resolvePresentationCapabilities,
18
+ resolveConsolidationCapabilities,
19
+ resolveRecallAuxiliaryCapabilities,
17
20
  type CapabilitySet,
18
21
  type AccessSetupCapabilitySet,
19
22
  type NamespaceCapabilitySet,
@@ -25,6 +28,9 @@ import {
25
28
  type UtilityLearningCapabilitySet,
26
29
  type ObjectiveStateCapabilitySet,
27
30
  type CompressionCapabilitySet,
31
+ type PresentationCapabilitySet,
32
+ type ConsolidationCapabilitySet,
33
+ type RecallAuxiliaryCapabilitySet,
28
34
  } from "./capabilities.js";
29
35
 
30
36
  /**
@@ -1021,3 +1027,134 @@ test("resolveCompressionCapabilities returns a frozen object", () => {
1021
1027
  const caps = resolveCompressionCapabilities(parseConfig({}));
1022
1028
  assert.equal(Object.isFrozen(caps), true, "CompressionCapabilitySet must be frozen");
1023
1029
  });
1030
+
1031
+ // ---------------------------------------------------------------------------
1032
+ // PresentationCapabilitySet — gate-parity tests (issue #1523 batch 8).
1033
+ // ---------------------------------------------------------------------------
1034
+
1035
+ const PRESENTATION_FIELD_TO_FLAG: Record<keyof PresentationCapabilitySet, string> = {
1036
+ verbatimArtifacts: "verbatimArtifactsEnabled",
1037
+ memoryBoxes: "memoryBoxesEnabled",
1038
+ bufferSurpriseTrigger: "bufferSurpriseTriggerEnabled",
1039
+ threading: "threadingEnabled",
1040
+ episodeNoteMode: "episodeNoteModeEnabled",
1041
+ transcript: "transcriptEnabled",
1042
+ entitySummary: "entitySummaryEnabled",
1043
+ };
1044
+
1045
+ const PRESENTATION_FIELDS = Object.keys(PRESENTATION_FIELD_TO_FLAG) as Array<keyof PresentationCapabilitySet>;
1046
+
1047
+ test("resolvePresentationCapabilities projects every field from its flag (true variant)", () => {
1048
+ const overrides: Record<string, boolean> = {};
1049
+ for (const flag of Object.values(PRESENTATION_FIELD_TO_FLAG)) overrides[flag] = true;
1050
+ const config = parseConfig(overrides);
1051
+ const caps = resolvePresentationCapabilities(config);
1052
+ for (const field of PRESENTATION_FIELDS) {
1053
+ assert.equal(caps[field], true, `${field} must be true`);
1054
+ }
1055
+ });
1056
+
1057
+ test("resolvePresentationCapabilities projects every field from its flag (false variant)", () => {
1058
+ const overrides: Record<string, boolean> = {};
1059
+ for (const flag of Object.values(PRESENTATION_FIELD_TO_FLAG)) overrides[flag] = false;
1060
+ const config = parseConfig(overrides);
1061
+ const caps = resolvePresentationCapabilities(config);
1062
+ for (const field of PRESENTATION_FIELDS) {
1063
+ assert.equal(caps[field], false, `${field} must be false`);
1064
+ }
1065
+ });
1066
+
1067
+ test("resolvePresentationCapabilities returns a frozen object", () => {
1068
+ const caps = resolvePresentationCapabilities(parseConfig({}));
1069
+ assert.equal(Object.isFrozen(caps), true, "PresentationCapabilitySet must be frozen");
1070
+ });
1071
+
1072
+ // ---------------------------------------------------------------------------
1073
+ // ConsolidationCapabilitySet — gate-parity tests (issue #1523 batch 8).
1074
+ // ---------------------------------------------------------------------------
1075
+
1076
+ const CONSOLIDATION_FIELD_TO_FLAG: Record<keyof ConsolidationCapabilitySet, string> = {
1077
+ compoundingSemantic: "compoundingSemanticEnabled",
1078
+ abstractionAnchors: "abstractionAnchorsEnabled",
1079
+ compounding: "compoundingEnabled",
1080
+ calibration: "calibrationEnabled",
1081
+ semanticConsolidation: "semanticConsolidationEnabled",
1082
+ patternReinforcement: "patternReinforcementEnabled",
1083
+ continuityAudit: "continuityAuditEnabled",
1084
+ graphEdgeDecay: "graphEdgeDecayEnabled",
1085
+ };
1086
+
1087
+ const CONSOLIDATION_FIELDS = Object.keys(CONSOLIDATION_FIELD_TO_FLAG) as Array<keyof ConsolidationCapabilitySet>;
1088
+
1089
+ test("resolveConsolidationCapabilities projects every field from its flag (true variant)", () => {
1090
+ const overrides: Record<string, boolean> = {};
1091
+ for (const flag of Object.values(CONSOLIDATION_FIELD_TO_FLAG)) overrides[flag] = true;
1092
+ const config = parseConfig(overrides);
1093
+ const caps = resolveConsolidationCapabilities(config);
1094
+ for (const field of CONSOLIDATION_FIELDS) {
1095
+ assert.equal(caps[field], true, `${field} must be true`);
1096
+ }
1097
+ });
1098
+
1099
+ test("resolveConsolidationCapabilities projects every field from its flag (false variant)", () => {
1100
+ const overrides: Record<string, boolean> = {};
1101
+ for (const flag of Object.values(CONSOLIDATION_FIELD_TO_FLAG)) overrides[flag] = false;
1102
+ const config = parseConfig(overrides);
1103
+ const caps = resolveConsolidationCapabilities(config);
1104
+ for (const field of CONSOLIDATION_FIELDS) {
1105
+ assert.equal(caps[field], false, `${field} must be false`);
1106
+ }
1107
+ });
1108
+
1109
+ test("resolveConsolidationCapabilities returns a frozen object", () => {
1110
+ const caps = resolveConsolidationCapabilities(parseConfig({}));
1111
+ assert.equal(Object.isFrozen(caps), true, "ConsolidationCapabilitySet must be frozen");
1112
+ });
1113
+
1114
+ // ---------------------------------------------------------------------------
1115
+ // RecallAuxiliaryCapabilitySet — gate-parity tests (issue #1523 batch 8).
1116
+ // ---------------------------------------------------------------------------
1117
+
1118
+ const RECALL_AUX_FIELD_TO_FLAG: Record<keyof RecallAuxiliaryCapabilitySet, string> = {
1119
+ causalRuleExtraction: "causalRuleExtractionEnabled",
1120
+ correction: "correctionEnabled",
1121
+ continuityIncidentLogging: "continuityIncidentLoggingEnabled",
1122
+ daySummary: "daySummaryEnabled",
1123
+ versioning: "versioningEnabled",
1124
+ verifiedRecall: "verifiedRecallEnabled",
1125
+ semanticRuleVerification: "semanticRuleVerificationEnabled",
1126
+ workProductRecall: "workProductRecallEnabled",
1127
+ secureStore: "secureStoreEnabled",
1128
+ knowledgeIndex: "knowledgeIndexEnabled",
1129
+ factDeduplication: "factDeduplicationEnabled",
1130
+ compactionReset: "compactionResetEnabled",
1131
+ entityRetrieval: "entityRetrievalEnabled",
1132
+ cronRecallPolicy: "cronRecallPolicyEnabled",
1133
+ };
1134
+
1135
+ const RECALL_AUX_FIELDS = Object.keys(RECALL_AUX_FIELD_TO_FLAG) as Array<keyof RecallAuxiliaryCapabilitySet>;
1136
+
1137
+ test("resolveRecallAuxiliaryCapabilities projects every field from its flag (true variant)", () => {
1138
+ const overrides: Record<string, boolean> = {};
1139
+ for (const flag of Object.values(RECALL_AUX_FIELD_TO_FLAG)) overrides[flag] = true;
1140
+ const config = parseConfig(overrides);
1141
+ const caps = resolveRecallAuxiliaryCapabilities(config);
1142
+ for (const field of RECALL_AUX_FIELDS) {
1143
+ assert.equal(caps[field], true, `${field} must be true`);
1144
+ }
1145
+ });
1146
+
1147
+ test("resolveRecallAuxiliaryCapabilities projects every field from its flag (false variant)", () => {
1148
+ const overrides: Record<string, boolean> = {};
1149
+ for (const flag of Object.values(RECALL_AUX_FIELD_TO_FLAG)) overrides[flag] = false;
1150
+ const config = parseConfig(overrides);
1151
+ const caps = resolveRecallAuxiliaryCapabilities(config);
1152
+ for (const field of RECALL_AUX_FIELDS) {
1153
+ assert.equal(caps[field], false, `${field} must be false`);
1154
+ }
1155
+ });
1156
+
1157
+ test("resolveRecallAuxiliaryCapabilities returns a frozen object", () => {
1158
+ const caps = resolveRecallAuxiliaryCapabilities(parseConfig({}));
1159
+ assert.equal(Object.isFrozen(caps), true, "RecallAuxiliaryCapabilitySet must be frozen");
1160
+ });
@@ -807,3 +807,212 @@ export function resolveCompressionCapabilities(config: CompressionConfigProjecti
807
807
  contextCompressionActions: config.contextCompressionActionsEnabled,
808
808
  });
809
809
  }
810
+
811
+ // ---------------------------------------------------------------------------
812
+ // Presentation capability set (issue #1523 batch 8).
813
+ //
814
+ // These flags gate output formatting and presentation across the orchestrator, extraction
815
+ // pipeline, consolidation engine, and related modules. Resolved ONCE per
816
+ // operation entry rather than re-derived from raw config at each read site.
817
+ // All flags are non-optional booleans on PluginConfig (defaults applied at
818
+ // the parse boundary), so the projection is a pure pass-through.
819
+ // ---------------------------------------------------------------------------
820
+
821
+ /**
822
+ * Frozen projection of output formatting and presentation feature gates (issue #1523 batch 8).
823
+ */
824
+ export interface PresentationCapabilitySet {
825
+ /** `verbatimArtifactsEnabled` — verbatim-artifact rendering in recall output. */
826
+ readonly verbatimArtifacts: boolean;
827
+ /** `memoryBoxesEnabled` — memory-box rendering in recall output. */
828
+ readonly memoryBoxes: boolean;
829
+ /** `bufferSurpriseTriggerEnabled` — buffer surprise-detection trigger. */
830
+ readonly bufferSurpriseTrigger: boolean;
831
+ /** `threadingEnabled` — conversation threading in output. */
832
+ readonly threading: boolean;
833
+ /** `episodeNoteModeEnabled` — episode note-mode formatting. */
834
+ readonly episodeNoteMode: boolean;
835
+ /** `transcriptEnabled` — transcript-mode output. */
836
+ readonly transcript: boolean;
837
+ /** `entitySummaryEnabled` — entity summary generation. */
838
+ readonly entitySummary: boolean;
839
+ }
840
+
841
+ /**
842
+ * Config projection consumed by {@link resolvePresentationCapabilities}.
843
+ */
844
+ export type PresentationConfigProjection = Pick<
845
+ PluginConfig,
846
+ "verbatimArtifactsEnabled" |
847
+ "memoryBoxesEnabled" |
848
+ "bufferSurpriseTriggerEnabled" |
849
+ "threadingEnabled" |
850
+ "episodeNoteModeEnabled" |
851
+ "transcriptEnabled" |
852
+ "entitySummaryEnabled"
853
+ >;
854
+
855
+ /**
856
+ * Resolve the {@link PresentationCapabilitySet} from parsed config.
857
+ */
858
+ export function resolvePresentationCapabilities(config: PresentationConfigProjection): PresentationCapabilitySet {
859
+ return Object.freeze({
860
+ verbatimArtifacts: config.verbatimArtifactsEnabled,
861
+ memoryBoxes: config.memoryBoxesEnabled,
862
+ bufferSurpriseTrigger: config.bufferSurpriseTriggerEnabled,
863
+ threading: config.threadingEnabled,
864
+ episodeNoteMode: config.episodeNoteModeEnabled,
865
+ transcript: config.transcriptEnabled,
866
+ entitySummary: config.entitySummaryEnabled,
867
+ });
868
+ }
869
+
870
+ // ---------------------------------------------------------------------------
871
+ // Consolidation capability set (issue #1523 batch 8).
872
+ //
873
+ // These flags gate memory consolidation, compounding, and abstraction across the orchestrator, extraction
874
+ // pipeline, consolidation engine, and related modules. Resolved ONCE per
875
+ // operation entry rather than re-derived from raw config at each read site.
876
+ // All flags are non-optional booleans on PluginConfig (defaults applied at
877
+ // the parse boundary), so the projection is a pure pass-through.
878
+ // ---------------------------------------------------------------------------
879
+
880
+ /**
881
+ * Frozen projection of memory consolidation, compounding, and abstraction feature gates (issue #1523 batch 8).
882
+ */
883
+ export interface ConsolidationCapabilitySet {
884
+ /** `compoundingSemanticEnabled` — semantic compounding of memories. */
885
+ readonly compoundingSemantic: boolean;
886
+ /** `abstractionAnchorsEnabled` — abstraction-anchor extraction. */
887
+ readonly abstractionAnchors: boolean;
888
+ /** `compoundingEnabled` — master compounding switch. */
889
+ readonly compounding: boolean;
890
+ /** `calibrationEnabled` — memory calibration pass. */
891
+ readonly calibration: boolean;
892
+ /** `semanticConsolidationEnabled` — semantic consolidation pass. */
893
+ readonly semanticConsolidation: boolean;
894
+ /** `patternReinforcementEnabled` — pattern reinforcement in consolidation. */
895
+ readonly patternReinforcement: boolean;
896
+ /** `continuityAuditEnabled` — continuity audit during consolidation. */
897
+ readonly continuityAudit: boolean;
898
+ /** `graphEdgeDecayEnabled` — graph edge decay in maintenance. */
899
+ readonly graphEdgeDecay: boolean;
900
+ }
901
+
902
+ /**
903
+ * Config projection consumed by {@link resolveConsolidationCapabilities}.
904
+ */
905
+ export type ConsolidationConfigProjection = Pick<
906
+ PluginConfig,
907
+ "compoundingSemanticEnabled" |
908
+ "abstractionAnchorsEnabled" |
909
+ "compoundingEnabled" |
910
+ "calibrationEnabled" |
911
+ "semanticConsolidationEnabled" |
912
+ "patternReinforcementEnabled" |
913
+ "continuityAuditEnabled" |
914
+ "graphEdgeDecayEnabled"
915
+ >;
916
+
917
+ /**
918
+ * Resolve the {@link ConsolidationCapabilitySet} from parsed config.
919
+ */
920
+ export function resolveConsolidationCapabilities(config: ConsolidationConfigProjection): ConsolidationCapabilitySet {
921
+ return Object.freeze({
922
+ compoundingSemantic: config.compoundingSemanticEnabled,
923
+ abstractionAnchors: config.abstractionAnchorsEnabled,
924
+ compounding: config.compoundingEnabled,
925
+ calibration: config.calibrationEnabled,
926
+ semanticConsolidation: config.semanticConsolidationEnabled,
927
+ patternReinforcement: config.patternReinforcementEnabled,
928
+ continuityAudit: config.continuityAuditEnabled,
929
+ graphEdgeDecay: config.graphEdgeDecayEnabled,
930
+ });
931
+ }
932
+
933
+ // ---------------------------------------------------------------------------
934
+ // RecallAuxiliary capability set (issue #1523 batch 8).
935
+ //
936
+ // These flags gate extraction pipeline details and auxiliary recall enrichment across the orchestrator, extraction
937
+ // pipeline, consolidation engine, and related modules. Resolved ONCE per
938
+ // operation entry rather than re-derived from raw config at each read site.
939
+ // All flags are non-optional booleans on PluginConfig (defaults applied at
940
+ // the parse boundary), so the projection is a pure pass-through.
941
+ // ---------------------------------------------------------------------------
942
+
943
+ /**
944
+ * Frozen projection of extraction pipeline details and auxiliary recall enrichment feature gates (issue #1523 batch 8).
945
+ */
946
+ export interface RecallAuxiliaryCapabilitySet {
947
+ /** `causalRuleExtractionEnabled` — causal-rule extraction in pipeline. */
948
+ readonly causalRuleExtraction: boolean;
949
+ /** `correctionEnabled` — memory correction subsystem. */
950
+ readonly correction: boolean;
951
+ /** `continuityIncidentLoggingEnabled` — continuity incident logging. */
952
+ readonly continuityIncidentLogging: boolean;
953
+ /** `daySummaryEnabled` — day-summary generation. */
954
+ readonly daySummary: boolean;
955
+ /** `versioningEnabled` — memory versioning. */
956
+ readonly versioning: boolean;
957
+ /** `verifiedRecallEnabled` — verified-recall tier. */
958
+ readonly verifiedRecall: boolean;
959
+ /** `semanticRuleVerificationEnabled` — semantic-rule verification. */
960
+ readonly semanticRuleVerification: boolean;
961
+ /** `workProductRecallEnabled` — work-product recall tier. */
962
+ readonly workProductRecall: boolean;
963
+ /** `secureStoreEnabled` — secure storage mode. */
964
+ readonly secureStore: boolean;
965
+ /** `knowledgeIndexEnabled` — knowledge index in recall. */
966
+ readonly knowledgeIndex: boolean;
967
+ /** `factDeduplicationEnabled` — fact deduplication in recall. */
968
+ readonly factDeduplication: boolean;
969
+ /** `compactionResetEnabled` — compaction reset on re-ingest. */
970
+ readonly compactionReset: boolean;
971
+ /** `entityRetrievalEnabled` — entity retrieval tier. */
972
+ readonly entityRetrieval: boolean;
973
+ /** `cronRecallPolicyEnabled` — cron-based recall policy. */
974
+ readonly cronRecallPolicy: boolean;
975
+ }
976
+
977
+ /**
978
+ * Config projection consumed by {@link resolveRecallAuxiliaryCapabilities}.
979
+ */
980
+ export type RecallAuxiliaryConfigProjection = Pick<
981
+ PluginConfig,
982
+ "causalRuleExtractionEnabled" |
983
+ "correctionEnabled" |
984
+ "continuityIncidentLoggingEnabled" |
985
+ "daySummaryEnabled" |
986
+ "versioningEnabled" |
987
+ "verifiedRecallEnabled" |
988
+ "semanticRuleVerificationEnabled" |
989
+ "workProductRecallEnabled" |
990
+ "secureStoreEnabled" |
991
+ "knowledgeIndexEnabled" |
992
+ "factDeduplicationEnabled" |
993
+ "compactionResetEnabled" |
994
+ "entityRetrievalEnabled" |
995
+ "cronRecallPolicyEnabled"
996
+ >;
997
+
998
+ /**
999
+ * Resolve the {@link RecallAuxiliaryCapabilitySet} from parsed config.
1000
+ */
1001
+ export function resolveRecallAuxiliaryCapabilities(config: RecallAuxiliaryConfigProjection): RecallAuxiliaryCapabilitySet {
1002
+ return Object.freeze({
1003
+ causalRuleExtraction: config.causalRuleExtractionEnabled,
1004
+ correction: config.correctionEnabled,
1005
+ continuityIncidentLogging: config.continuityIncidentLoggingEnabled,
1006
+ daySummary: config.daySummaryEnabled,
1007
+ versioning: config.versioningEnabled,
1008
+ verifiedRecall: config.verifiedRecallEnabled,
1009
+ semanticRuleVerification: config.semanticRuleVerificationEnabled,
1010
+ workProductRecall: config.workProductRecallEnabled,
1011
+ secureStore: config.secureStoreEnabled,
1012
+ knowledgeIndex: config.knowledgeIndexEnabled,
1013
+ factDeduplication: config.factDeduplicationEnabled,
1014
+ compactionReset: config.compactionResetEnabled,
1015
+ entityRetrieval: config.entityRetrievalEnabled,
1016
+ cronRecallPolicy: config.cronRecallPolicyEnabled,
1017
+ });
1018
+ }
@@ -20,7 +20,7 @@ import type { CliCommand } from "../cli.js";
20
20
  import type { CommitmentLedgerEntry } from "../commitment-ledger.js";
21
21
  import type { WorkProductLedgerEntry } from "../work-product-ledger.js";
22
22
  import type { ResumeBundle } from "../resume-bundles.js";
23
- import { resolveCreationMemoryCapabilities, resolveObjectiveStateCapabilities} from "../capabilities.js";
23
+ import { resolveCreationMemoryCapabilities, resolveObjectiveStateCapabilities, resolvePresentationCapabilities, resolveRecallAuxiliaryCapabilities } from "../capabilities.js";
24
24
  import {
25
25
  runResumeBundleStatusCliCommand,
26
26
  runResumeBundleRecordCliCommand,
@@ -130,7 +130,7 @@ cmd
130
130
  commitmentLedgerDir: orchestrator.config.commitmentLedgerDir,
131
131
  creationMemoryEnabled: resolveCreationMemoryCapabilities(orchestrator.config).creationMemory,
132
132
  resumeBundlesEnabled: resolveCreationMemoryCapabilities(orchestrator.config).resumeBundles,
133
- transcriptEnabled: orchestrator.config.transcriptEnabled,
133
+ transcriptEnabled: resolvePresentationCapabilities(orchestrator.config).transcript,
134
134
  objectiveStateMemoryEnabled: resolveObjectiveStateCapabilities(orchestrator.config).objectiveStateMemory,
135
135
  commitmentLedgerEnabled: resolveCreationMemoryCapabilities(orchestrator.config).commitmentLedger,
136
136
  bundleId: String(options.bundleId ?? ""),
@@ -336,7 +336,7 @@ cmd
336
336
  memoryDir: orchestrator.config.memoryDir,
337
337
  workProductLedgerDir: orchestrator.config.workProductLedgerDir,
338
338
  creationMemoryEnabled: resolveCreationMemoryCapabilities(orchestrator.config).creationMemory,
339
- workProductRecallEnabled: orchestrator.config.workProductRecallEnabled,
339
+ workProductRecallEnabled: resolveRecallAuxiliaryCapabilities(orchestrator.config).workProductRecall,
340
340
  query,
341
341
  maxResults: Number.isFinite(maxResults) ? maxResults : 3,
342
342
  sessionKey: typeof options.sessionKey === "string" ? options.sessionKey : undefined,