@remnic/core 9.3.727 → 9.3.728

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 (77) hide show
  1. package/dist/access-boundary.js +6 -6
  2. package/dist/access-cli.js +11 -11
  3. package/dist/access-http.js +10 -10
  4. package/dist/access-mcp.js +9 -9
  5. package/dist/access-operations-batch.js +7 -7
  6. package/dist/access-operations.d.ts +1 -1
  7. package/dist/access-operations.js +8 -8
  8. package/dist/access-schema.d.ts +4 -4
  9. package/dist/access-service.js +5 -5
  10. package/dist/capabilities.d.ts +43 -1
  11. package/dist/capabilities.js +5 -3
  12. package/dist/{chunk-DVRHLN2O.js → chunk-3RCBIOOJ.js} +18 -2
  13. package/dist/{chunk-DVRHLN2O.js.map → chunk-3RCBIOOJ.js.map} +1 -1
  14. package/dist/{chunk-R7IYU5DZ.js → chunk-4ESAR77N.js} +2 -2
  15. package/dist/{chunk-SNKPUJHR.js → chunk-76NHR6ZL.js} +3 -3
  16. package/dist/{chunk-6PY5YJAV.js → chunk-BQCHEV7O.js} +8 -3
  17. package/dist/{chunk-6PY5YJAV.js.map → chunk-BQCHEV7O.js.map} +1 -1
  18. package/dist/{chunk-ZA2S2VLL.js → chunk-C2PG7IEH.js} +5 -2
  19. package/dist/chunk-C2PG7IEH.js.map +1 -0
  20. package/dist/{chunk-MJIHJ7OG.js → chunk-H5BWGCRZ.js} +11 -10
  21. package/dist/chunk-H5BWGCRZ.js.map +1 -0
  22. package/dist/{chunk-N3VNUM4Z.js → chunk-HGNOCPZX.js} +4 -4
  23. package/dist/{chunk-CSRXQ6NB.js → chunk-I5REUWLH.js} +10 -4
  24. package/dist/chunk-I5REUWLH.js.map +1 -0
  25. package/dist/{chunk-NSA5ZRUL.js → chunk-M4AYVEWS.js} +3 -3
  26. package/dist/{chunk-OEEW4KJA.js → chunk-O6YH5F47.js} +3 -3
  27. package/dist/{chunk-XPHVAOBT.js → chunk-QNEUZIAH.js} +45 -36
  28. package/dist/chunk-QNEUZIAH.js.map +1 -0
  29. package/dist/{chunk-27QQC7ZX.js → chunk-UM5AWJNQ.js} +6 -5
  30. package/dist/chunk-UM5AWJNQ.js.map +1 -0
  31. package/dist/{chunk-2KAYTPPT.js → chunk-UTHQPSRC.js} +2 -2
  32. package/dist/{chunk-CTOQEZSN.js → chunk-V4GNSDFH.js} +2 -2
  33. package/dist/{chunk-EHISUJFN.js → chunk-WAS3NV46.js} +6 -3
  34. package/dist/chunk-WAS3NV46.js.map +1 -0
  35. package/dist/{chunk-DKJCRGWM.js → chunk-YGIQORJ3.js} +2 -2
  36. package/dist/cli.js +13 -13
  37. package/dist/embedding-fallback.js +2 -1
  38. package/dist/extraction.js +2 -1
  39. package/dist/{first-start-migration-PG5HBC3K.js → first-start-migration-22LPFHD5.js} +6 -2
  40. package/dist/first-start-migration-22LPFHD5.js.map +1 -0
  41. package/dist/index.js +16 -16
  42. package/dist/namespaces/migrate.js +5 -4
  43. package/dist/namespaces/search.js +4 -3
  44. package/dist/operator-toolkit.js +6 -6
  45. package/dist/orchestrator.js +7 -7
  46. package/dist/schemas.d.ts +22 -22
  47. package/dist/search/embed-helper.js +2 -1
  48. package/dist/search/factory.js +3 -2
  49. package/dist/search/index.js +3 -2
  50. package/dist/transfer/types.d.ts +12 -12
  51. package/package.json +2 -2
  52. package/src/access-service.ts +2 -1
  53. package/src/capabilities.test.ts +155 -0
  54. package/src/capabilities.ts +91 -0
  55. package/src/chat/chat-engine.test.ts +39 -1
  56. package/src/chat/chat-session.ts +25 -2
  57. package/src/cli.ts +3 -2
  58. package/src/embedding-fallback.ts +2 -1
  59. package/src/extraction.ts +7 -3
  60. package/src/maintenance/first-start-migration.ts +3 -1
  61. package/src/orchestrator.ts +38 -26
  62. package/src/search/embed-helper.ts +3 -2
  63. package/dist/chunk-27QQC7ZX.js.map +0 -1
  64. package/dist/chunk-CSRXQ6NB.js.map +0 -1
  65. package/dist/chunk-EHISUJFN.js.map +0 -1
  66. package/dist/chunk-MJIHJ7OG.js.map +0 -1
  67. package/dist/chunk-XPHVAOBT.js.map +0 -1
  68. package/dist/chunk-ZA2S2VLL.js.map +0 -1
  69. package/dist/first-start-migration-PG5HBC3K.js.map +0 -1
  70. /package/dist/{chunk-R7IYU5DZ.js.map → chunk-4ESAR77N.js.map} +0 -0
  71. /package/dist/{chunk-SNKPUJHR.js.map → chunk-76NHR6ZL.js.map} +0 -0
  72. /package/dist/{chunk-N3VNUM4Z.js.map → chunk-HGNOCPZX.js.map} +0 -0
  73. /package/dist/{chunk-NSA5ZRUL.js.map → chunk-M4AYVEWS.js.map} +0 -0
  74. /package/dist/{chunk-OEEW4KJA.js.map → chunk-O6YH5F47.js.map} +0 -0
  75. /package/dist/{chunk-2KAYTPPT.js.map → chunk-UTHQPSRC.js.map} +0 -0
  76. /package/dist/{chunk-CTOQEZSN.js.map → chunk-V4GNSDFH.js.map} +0 -0
  77. /package/dist/{chunk-DKJCRGWM.js.map → chunk-YGIQORJ3.js.map} +0 -0
package/dist/schemas.d.ts CHANGED
@@ -290,12 +290,12 @@ declare const EntityMentionSchema: z.ZodObject<{
290
290
  title: z.ZodString;
291
291
  facts: z.ZodArray<z.ZodString, "many">;
292
292
  }, "strip", z.ZodTypeAny, {
293
- key: string;
294
293
  title: string;
294
+ key: string;
295
295
  facts: string[];
296
296
  }, {
297
- key: string;
298
297
  title: string;
298
+ key: string;
299
299
  facts: string[];
300
300
  }>, "many">>>;
301
301
  }, "strip", z.ZodTypeAny, {
@@ -303,8 +303,8 @@ declare const EntityMentionSchema: z.ZodObject<{
303
303
  name: string;
304
304
  facts: string[];
305
305
  structuredSections?: {
306
- key: string;
307
306
  title: string;
307
+ key: string;
308
308
  facts: string[];
309
309
  }[] | null | undefined;
310
310
  promptedByQuestion?: string | null | undefined;
@@ -313,8 +313,8 @@ declare const EntityMentionSchema: z.ZodObject<{
313
313
  name: string;
314
314
  facts: string[];
315
315
  structuredSections?: {
316
- key: string;
317
316
  title: string;
317
+ key: string;
318
318
  facts: string[];
319
319
  }[] | null | undefined;
320
320
  promptedByQuestion?: string | null | undefined;
@@ -614,12 +614,12 @@ declare const ProactiveExtractionResultSchema: z.ZodObject<{
614
614
  title: z.ZodString;
615
615
  facts: z.ZodArray<z.ZodString, "many">;
616
616
  }, "strip", z.ZodTypeAny, {
617
- key: string;
618
617
  title: string;
618
+ key: string;
619
619
  facts: string[];
620
620
  }, {
621
- key: string;
622
621
  title: string;
622
+ key: string;
623
623
  facts: string[];
624
624
  }>, "many">>>;
625
625
  }, "strip", z.ZodTypeAny, {
@@ -627,8 +627,8 @@ declare const ProactiveExtractionResultSchema: z.ZodObject<{
627
627
  name: string;
628
628
  facts: string[];
629
629
  structuredSections?: {
630
- key: string;
631
630
  title: string;
631
+ key: string;
632
632
  facts: string[];
633
633
  }[] | null | undefined;
634
634
  promptedByQuestion?: string | null | undefined;
@@ -637,8 +637,8 @@ declare const ProactiveExtractionResultSchema: z.ZodObject<{
637
637
  name: string;
638
638
  facts: string[];
639
639
  structuredSections?: {
640
- key: string;
641
640
  title: string;
641
+ key: string;
642
642
  facts: string[];
643
643
  }[] | null | undefined;
644
644
  promptedByQuestion?: string | null | undefined;
@@ -698,8 +698,8 @@ declare const ProactiveExtractionResultSchema: z.ZodObject<{
698
698
  name: string;
699
699
  facts: string[];
700
700
  structuredSections?: {
701
- key: string;
702
701
  title: string;
702
+ key: string;
703
703
  facts: string[];
704
704
  }[] | null | undefined;
705
705
  promptedByQuestion?: string | null | undefined;
@@ -750,8 +750,8 @@ declare const ProactiveExtractionResultSchema: z.ZodObject<{
750
750
  name: string;
751
751
  facts: string[];
752
752
  structuredSections?: {
753
- key: string;
754
753
  title: string;
754
+ key: string;
755
755
  facts: string[];
756
756
  }[] | null | undefined;
757
757
  promptedByQuestion?: string | null | undefined;
@@ -1003,12 +1003,12 @@ declare const ExtractionResultSchema: z.ZodObject<{
1003
1003
  title: z.ZodString;
1004
1004
  facts: z.ZodArray<z.ZodString, "many">;
1005
1005
  }, "strip", z.ZodTypeAny, {
1006
- key: string;
1007
1006
  title: string;
1007
+ key: string;
1008
1008
  facts: string[];
1009
1009
  }, {
1010
- key: string;
1011
1010
  title: string;
1011
+ key: string;
1012
1012
  facts: string[];
1013
1013
  }>, "many">>>;
1014
1014
  }, "strip", z.ZodTypeAny, {
@@ -1016,8 +1016,8 @@ declare const ExtractionResultSchema: z.ZodObject<{
1016
1016
  name: string;
1017
1017
  facts: string[];
1018
1018
  structuredSections?: {
1019
- key: string;
1020
1019
  title: string;
1020
+ key: string;
1021
1021
  facts: string[];
1022
1022
  }[] | null | undefined;
1023
1023
  promptedByQuestion?: string | null | undefined;
@@ -1026,8 +1026,8 @@ declare const ExtractionResultSchema: z.ZodObject<{
1026
1026
  name: string;
1027
1027
  facts: string[];
1028
1028
  structuredSections?: {
1029
- key: string;
1030
1029
  title: string;
1030
+ key: string;
1031
1031
  facts: string[];
1032
1032
  }[] | null | undefined;
1033
1033
  promptedByQuestion?: string | null | undefined;
@@ -1106,8 +1106,8 @@ declare const ExtractionResultSchema: z.ZodObject<{
1106
1106
  name: string;
1107
1107
  facts: string[];
1108
1108
  structuredSections?: {
1109
- key: string;
1110
1109
  title: string;
1110
+ key: string;
1111
1111
  facts: string[];
1112
1112
  }[] | null | undefined;
1113
1113
  promptedByQuestion?: string | null | undefined;
@@ -1164,8 +1164,8 @@ declare const ExtractionResultSchema: z.ZodObject<{
1164
1164
  name: string;
1165
1165
  facts: string[];
1166
1166
  structuredSections?: {
1167
- key: string;
1168
1167
  title: string;
1168
+ key: string;
1169
1169
  facts: string[];
1170
1170
  }[] | null | undefined;
1171
1171
  promptedByQuestion?: string | null | undefined;
@@ -1229,12 +1229,12 @@ declare const ConsolidationResultSchema: z.ZodObject<{
1229
1229
  title: z.ZodString;
1230
1230
  facts: z.ZodArray<z.ZodString, "many">;
1231
1231
  }, "strip", z.ZodTypeAny, {
1232
- key: string;
1233
1232
  title: string;
1233
+ key: string;
1234
1234
  facts: string[];
1235
1235
  }, {
1236
- key: string;
1237
1236
  title: string;
1237
+ key: string;
1238
1238
  facts: string[];
1239
1239
  }>, "many">>>;
1240
1240
  }, "strip", z.ZodTypeAny, {
@@ -1242,8 +1242,8 @@ declare const ConsolidationResultSchema: z.ZodObject<{
1242
1242
  name: string;
1243
1243
  facts: string[];
1244
1244
  structuredSections?: {
1245
- key: string;
1246
1245
  title: string;
1246
+ key: string;
1247
1247
  facts: string[];
1248
1248
  }[] | null | undefined;
1249
1249
  promptedByQuestion?: string | null | undefined;
@@ -1252,8 +1252,8 @@ declare const ConsolidationResultSchema: z.ZodObject<{
1252
1252
  name: string;
1253
1253
  facts: string[];
1254
1254
  structuredSections?: {
1255
- key: string;
1256
1255
  title: string;
1256
+ key: string;
1257
1257
  facts: string[];
1258
1258
  }[] | null | undefined;
1259
1259
  promptedByQuestion?: string | null | undefined;
@@ -1272,8 +1272,8 @@ declare const ConsolidationResultSchema: z.ZodObject<{
1272
1272
  name: string;
1273
1273
  facts: string[];
1274
1274
  structuredSections?: {
1275
- key: string;
1276
1275
  title: string;
1276
+ key: string;
1277
1277
  facts: string[];
1278
1278
  }[] | null | undefined;
1279
1279
  promptedByQuestion?: string | null | undefined;
@@ -1292,8 +1292,8 @@ declare const ConsolidationResultSchema: z.ZodObject<{
1292
1292
  name: string;
1293
1293
  facts: string[];
1294
1294
  structuredSections?: {
1295
- key: string;
1296
1295
  title: string;
1296
+ key: string;
1297
1297
  facts: string[];
1298
1298
  }[] | null | undefined;
1299
1299
  promptedByQuestion?: string | null | undefined;
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  EmbedHelper
3
- } from "../chunk-EHISUJFN.js";
3
+ } from "../chunk-WAS3NV46.js";
4
4
  import "../chunk-CINZGPSJ.js";
5
5
  import "../chunk-3ONXXHQO.js";
6
+ import "../chunk-3RCBIOOJ.js";
6
7
  import "../chunk-NU3CSQ4H.js";
7
8
  import "../chunk-PVGDJXVK.js";
8
9
  import "../chunk-PZ5AY32C.js";
@@ -2,12 +2,12 @@ import {
2
2
  createConversationIndexRuntime,
3
3
  createConversationSearchBackend,
4
4
  createSearchBackend
5
- } from "../chunk-2KAYTPPT.js";
5
+ } from "../chunk-UTHQPSRC.js";
6
6
  import "../chunk-WRFKZEO6.js";
7
7
  import "../chunk-CYEPCZN5.js";
8
8
  import "../chunk-LQ6JI4VH.js";
9
9
  import "../chunk-SANZHXY2.js";
10
- import "../chunk-EHISUJFN.js";
10
+ import "../chunk-WAS3NV46.js";
11
11
  import "../chunk-5CEJH5ZN.js";
12
12
  import "../chunk-AER6MT24.js";
13
13
  import "../chunk-CINZGPSJ.js";
@@ -19,6 +19,7 @@ import "../chunk-K43PI6DQ.js";
19
19
  import "../chunk-YNQ6DFSV.js";
20
20
  import "../chunk-O75CRYGF.js";
21
21
  import "../chunk-3ONXXHQO.js";
22
+ import "../chunk-3RCBIOOJ.js";
22
23
  import "../chunk-5GPPACXK.js";
23
24
  import "../chunk-AWJ2FHCF.js";
24
25
  import "../chunk-42JKGUFJ.js";
@@ -2,7 +2,7 @@ import {
2
2
  createConversationIndexRuntime,
3
3
  createConversationSearchBackend,
4
4
  createSearchBackend
5
- } from "../chunk-2KAYTPPT.js";
5
+ } from "../chunk-UTHQPSRC.js";
6
6
  import {
7
7
  MeilisearchBackend
8
8
  } from "../chunk-WRFKZEO6.js";
@@ -17,7 +17,7 @@ import {
17
17
  } from "../chunk-SANZHXY2.js";
18
18
  import {
19
19
  EmbedHelper
20
- } from "../chunk-EHISUJFN.js";
20
+ } from "../chunk-WAS3NV46.js";
21
21
  import {
22
22
  LanceDbBackend
23
23
  } from "../chunk-5CEJH5ZN.js";
@@ -33,6 +33,7 @@ import "../chunk-K43PI6DQ.js";
33
33
  import "../chunk-YNQ6DFSV.js";
34
34
  import "../chunk-O75CRYGF.js";
35
35
  import "../chunk-3ONXXHQO.js";
36
+ import "../chunk-3RCBIOOJ.js";
36
37
  import "../chunk-5GPPACXK.js";
37
38
  import "../chunk-AWJ2FHCF.js";
38
39
  import "../chunk-42JKGUFJ.js";
@@ -313,13 +313,13 @@ declare const CapsuleBlockSchema: z.ZodObject<{
313
313
  peerProfiles: boolean;
314
314
  }>;
315
315
  }, "strip", z.ZodTypeAny, {
316
+ schemaVersion: string;
316
317
  includes: {
317
318
  procedural: boolean;
318
319
  taxonomy: boolean;
319
320
  identityAnchors: boolean;
320
321
  peerProfiles: boolean;
321
322
  };
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;
337
338
  includes: {
338
339
  procedural: boolean;
339
340
  taxonomy: boolean;
340
341
  identityAnchors: boolean;
341
342
  peerProfiles: boolean;
342
343
  };
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;
467
468
  includes: {
468
469
  procedural: boolean;
469
470
  taxonomy: boolean;
470
471
  identityAnchors: boolean;
471
472
  peerProfiles: boolean;
472
473
  };
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;
488
489
  includes: {
489
490
  procedural: boolean;
490
491
  taxonomy: boolean;
491
492
  identityAnchors: boolean;
492
493
  peerProfiles: boolean;
493
494
  };
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;
521
522
  includes: {
522
523
  procedural: boolean;
523
524
  taxonomy: boolean;
524
525
  identityAnchors: boolean;
525
526
  peerProfiles: boolean;
526
527
  };
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;
554
555
  includes: {
555
556
  procedural: boolean;
556
557
  taxonomy: boolean;
557
558
  identityAnchors: boolean;
558
559
  peerProfiles: boolean;
559
560
  };
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;
686
687
  includes: {
687
688
  procedural: boolean;
688
689
  taxonomy: boolean;
689
690
  identityAnchors: boolean;
690
691
  peerProfiles: boolean;
691
692
  };
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;
707
708
  includes: {
708
709
  procedural: boolean;
709
710
  taxonomy: boolean;
710
711
  identityAnchors: boolean;
711
712
  peerProfiles: boolean;
712
713
  };
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;
740
741
  includes: {
741
742
  procedural: boolean;
742
743
  taxonomy: boolean;
743
744
  identityAnchors: boolean;
744
745
  peerProfiles: boolean;
745
746
  };
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;
773
774
  includes: {
774
775
  procedural: boolean;
775
776
  taxonomy: boolean;
776
777
  identityAnchors: boolean;
777
778
  peerProfiles: boolean;
778
779
  };
779
- schemaVersion: string;
780
780
  id: string;
781
781
  version: string;
782
782
  description: string;
@@ -819,13 +819,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
819
819
  pluginVersion: string;
820
820
  includesTranscripts: boolean;
821
821
  capsule: {
822
+ schemaVersion: string;
822
823
  includes: {
823
824
  procedural: boolean;
824
825
  taxonomy: boolean;
825
826
  identityAnchors: boolean;
826
827
  peerProfiles: boolean;
827
828
  };
828
- schemaVersion: string;
829
829
  id: string;
830
830
  version: string;
831
831
  description: string;
@@ -858,13 +858,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
858
858
  pluginVersion: string;
859
859
  includesTranscripts: boolean;
860
860
  capsule: {
861
+ schemaVersion: string;
861
862
  includes: {
862
863
  procedural: boolean;
863
864
  taxonomy: boolean;
864
865
  identityAnchors: boolean;
865
866
  peerProfiles: boolean;
866
867
  };
867
- schemaVersion: string;
868
868
  id: string;
869
869
  version: string;
870
870
  description: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.727",
3
+ "version": "9.3.728",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -2990,7 +2990,7 @@
2990
2990
  "core"
2991
2991
  ],
2992
2992
  "peerDependencies": {
2993
- "@remnic/coding-graph": "^9.3.727"
2993
+ "@remnic/coding-graph": "^9.3.728"
2994
2994
  },
2995
2995
  "peerDependenciesMeta": {
2996
2996
  "@remnic/coding-graph": {
@@ -5,6 +5,7 @@ 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 { resolveMemoryLifecycleCapabilities } from "./capabilities.js";
8
9
  import { AccessAuditAdapter, type AccessAuditConfig, type AccessAuditResult } from "./access-audit.js";
9
10
  import type { AnomalyDetectorResult } from "./recall-audit-anomaly.js";
10
11
  import { resolveGitContext } from "./coding/git-context.js";
@@ -8187,7 +8188,7 @@ export class EngramAccessService {
8187
8188
 
8188
8189
  get embeddingLookupFactoryRef(): (storage: import("./storage.js").StorageManager) => SemanticDedupLookup | undefined {
8189
8190
  return (storage) => {
8190
- if (!this.orchestrator.config.embeddingFallbackEnabled) return undefined;
8191
+ if (!resolveMemoryLifecycleCapabilities(this.orchestrator.config).embeddingFallback) return undefined;
8191
8192
  return async (content: string, limit: number) => {
8192
8193
  try {
8193
8194
  return await this.orchestrator.semanticDedupLookup(content, limit, storage);
@@ -153,6 +153,12 @@ import {
153
153
  type GraphConstructionCapabilitySet,
154
154
  } from "./capabilities.js";
155
155
 
156
+ import {
157
+ resolveMemoryLifecycleCapabilities,
158
+ type MemoryLifecycleCapabilitySet,
159
+ } from "./capabilities.js";
160
+
161
+
156
162
  const GRAPH_FIELD_TO_FLAG: Record<keyof GraphConstructionCapabilitySet, string> = {
157
163
  entityGraph: "entityGraphEnabled",
158
164
  timeGraph: "timeGraphEnabled",
@@ -306,3 +312,152 @@ test("resolveGraphConstructionCapabilities matches pre-migration config reads (p
306
312
  );
307
313
  }
308
314
  });
315
+
316
+
317
+ // ---------------------------------------------------------------------------
318
+ // MemoryLifecycleCapabilitySet — gate-parity tests (issue #1523 batch 3).
319
+ //
320
+ // Same invariant as the sets above: every caps field must project from its
321
+ // `<field>Enabled` config flag, so a future edit that maps a field to the wrong
322
+ // flag fails loudly here. All ten flags are required booleans on PluginConfig
323
+ // (defaults resolved at the parse boundary), so the projection is a pure
324
+ // passthrough — no optional-default variants needed.
325
+ //
326
+ // Parity contract: a caps-resolved run and a config-derived run MUST produce
327
+ // identical boolean values for every gate — on AND off.
328
+ // ---------------------------------------------------------------------------
329
+
330
+ const LIFECYCLE_FIELD_TO_FLAG: Record<keyof MemoryLifecycleCapabilitySet, string> = {
331
+ temporalSupersession: "temporalSupersessionEnabled",
332
+ temporalMemoryTree: "temporalMemoryTreeEnabled",
333
+ lifecyclePolicy: "lifecyclePolicyEnabled",
334
+ lifecycleFilterStale: "lifecycleFilterStaleEnabled",
335
+ lifecycleMetrics: "lifecycleMetricsEnabled",
336
+ extractionScopeClassification: "extractionScopeClassificationEnabled",
337
+ extractionJudge: "extractionJudgeEnabled",
338
+ extractionDedupe: "extractionDedupeEnabled",
339
+ extractionTelemetryPrefilter: "extractionTelemetryPrefilterEnabled",
340
+ extractionJudgeTelemetry: "extractionJudgeTelemetryEnabled",
341
+ embeddingFallback: "embeddingFallbackEnabled",
342
+ };
343
+
344
+ const LIFECYCLE_FIELDS = Object.keys(LIFECYCLE_FIELD_TO_FLAG) as Array<
345
+ keyof MemoryLifecycleCapabilitySet
346
+ >;
347
+
348
+ test("resolveMemoryLifecycleCapabilities projects every field from its flag (true variant)", () => {
349
+ const overrides: Record<string, boolean> = {};
350
+ for (const flag of Object.values(LIFECYCLE_FIELD_TO_FLAG)) overrides[flag] = true;
351
+ const config = parseConfig(overrides);
352
+ const caps = resolveMemoryLifecycleCapabilities(config);
353
+
354
+ for (const field of LIFECYCLE_FIELDS) {
355
+ const flag = LIFECYCLE_FIELD_TO_FLAG[field];
356
+ assert.equal(
357
+ caps[field],
358
+ (config as unknown as Record<string, boolean>)[flag],
359
+ `caps.${field} must equal config.${flag} (true variant)`,
360
+ );
361
+ assert.equal(caps[field], true, `caps.${field} should be true here`);
362
+ }
363
+ });
364
+
365
+ test("resolveMemoryLifecycleCapabilities projects every field from its flag (false variant)", () => {
366
+ const overrides: Record<string, boolean> = {};
367
+ for (const flag of Object.values(LIFECYCLE_FIELD_TO_FLAG)) overrides[flag] = false;
368
+ const config = parseConfig(overrides);
369
+ const caps = resolveMemoryLifecycleCapabilities(config);
370
+
371
+ for (const field of LIFECYCLE_FIELDS) {
372
+ const flag = LIFECYCLE_FIELD_TO_FLAG[field];
373
+ assert.equal(
374
+ caps[field],
375
+ (config as unknown as Record<string, boolean>)[flag],
376
+ `caps.${field} must equal config.${flag} (false variant)`,
377
+ );
378
+ assert.equal(caps[field], false, `caps.${field} should be false here`);
379
+ }
380
+ });
381
+
382
+ test("resolveMemoryLifecycleCapabilities returns a frozen object", () => {
383
+ const config = parseConfig({});
384
+ const caps = resolveMemoryLifecycleCapabilities(config);
385
+ assert.equal(Object.isFrozen(caps), true);
386
+ });
387
+
388
+ test("resolveMemoryLifecycleCapabilities matches pre-migration config reads (parity contract)", () => {
389
+ // For representative on/off combinations, the caps-resolved values MUST be
390
+ // identical to what the old scattered `this.config.<flag>Enabled` reads
391
+ // produced. All ten flags used bare reads (no `!== false`/`=== true` at the
392
+ // call site that would change the value — the two sites that wrote
393
+ // `=== true` were redundant coercion on an already-boolean config field),
394
+ // so parity is a direct equality against the resolved config boolean.
395
+ const cases: Record<string, Record<string, boolean>> = {
396
+ "all-off": {
397
+ temporalSupersessionEnabled: false,
398
+ temporalMemoryTreeEnabled: false,
399
+ lifecyclePolicyEnabled: false,
400
+ lifecycleFilterStaleEnabled: false,
401
+ lifecycleMetricsEnabled: false,
402
+ extractionScopeClassificationEnabled: false,
403
+ extractionJudgeEnabled: false,
404
+ extractionDedupeEnabled: false,
405
+ extractionTelemetryPrefilterEnabled: false,
406
+ extractionJudgeTelemetryEnabled: false,
407
+ embeddingFallbackEnabled: false,
408
+ },
409
+ "all-on": {
410
+ temporalSupersessionEnabled: true,
411
+ temporalMemoryTreeEnabled: true,
412
+ lifecyclePolicyEnabled: true,
413
+ lifecycleFilterStaleEnabled: true,
414
+ lifecycleMetricsEnabled: true,
415
+ extractionScopeClassificationEnabled: true,
416
+ extractionJudgeEnabled: true,
417
+ extractionDedupeEnabled: true,
418
+ extractionTelemetryPrefilterEnabled: true,
419
+ extractionJudgeTelemetryEnabled: true,
420
+ embeddingFallbackEnabled: true,
421
+ },
422
+ "temporal-on-rest-off": {
423
+ temporalSupersessionEnabled: true,
424
+ temporalMemoryTreeEnabled: true,
425
+ lifecyclePolicyEnabled: false,
426
+ lifecycleFilterStaleEnabled: false,
427
+ lifecycleMetricsEnabled: false,
428
+ extractionScopeClassificationEnabled: false,
429
+ extractionJudgeEnabled: false,
430
+ extractionDedupeEnabled: false,
431
+ extractionTelemetryPrefilterEnabled: false,
432
+ extractionJudgeTelemetryEnabled: false,
433
+ embeddingFallbackEnabled: false,
434
+ },
435
+ "extraction-on-rest-off": {
436
+ temporalSupersessionEnabled: false,
437
+ temporalMemoryTreeEnabled: false,
438
+ lifecyclePolicyEnabled: false,
439
+ lifecycleFilterStaleEnabled: false,
440
+ lifecycleMetricsEnabled: false,
441
+ extractionScopeClassificationEnabled: true,
442
+ extractionJudgeEnabled: true,
443
+ extractionDedupeEnabled: true,
444
+ extractionTelemetryPrefilterEnabled: true,
445
+ extractionJudgeTelemetryEnabled: true,
446
+ embeddingFallbackEnabled: true,
447
+ },
448
+ };
449
+
450
+ for (const [label, overrides] of Object.entries(cases)) {
451
+ const config = parseConfig(overrides);
452
+ const caps = resolveMemoryLifecycleCapabilities(config);
453
+
454
+ for (const field of LIFECYCLE_FIELDS) {
455
+ const flag = LIFECYCLE_FIELD_TO_FLAG[field];
456
+ assert.equal(
457
+ caps[field],
458
+ (config as unknown as Record<string, boolean>)[flag],
459
+ `[${label}] caps.${field} must equal config.${flag}`,
460
+ );
461
+ }
462
+ }
463
+ });