@remnic/core 9.25.3 → 9.25.5

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 (161) hide show
  1. package/dist/access-admin-ops-surface.d.ts +3 -2
  2. package/dist/access-admin-ops-surface.js +9 -8
  3. package/dist/access-authorization-probe.d.ts +10 -3
  4. package/dist/access-authorization-probe.js +12 -9
  5. package/dist/access-boundary.d.ts +6 -3
  6. package/dist/access-boundary.js +13 -10
  7. package/dist/access-cli.js +42 -41
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-http.d.ts +3 -2
  10. package/dist/access-http.js +16 -15
  11. package/dist/access-identity-continuity-surface.d.ts +2 -1
  12. package/dist/access-identity-continuity-surface.js +9 -8
  13. package/dist/access-lcm-surface.d.ts +3 -2
  14. package/dist/access-lcm-surface.js +9 -8
  15. package/dist/access-mcp-output-schemas.js +1 -1
  16. package/dist/access-mcp.d.ts +3 -2
  17. package/dist/access-mcp.js +13 -12
  18. package/dist/access-namespace-preflight.js +9 -8
  19. package/dist/access-observe-write-surface.d.ts +3 -2
  20. package/dist/access-observe-write-surface.js +9 -8
  21. package/dist/access-operations-batch.js +10 -9
  22. package/dist/access-operations.d.ts +6 -5
  23. package/dist/access-operations.js +11 -10
  24. package/dist/access-recall-concurrency.d.ts +3 -2
  25. package/dist/access-recall-concurrency.js +9 -8
  26. package/dist/access-recall-response.d.ts +4 -2
  27. package/dist/access-recall-response.js +9 -8
  28. package/dist/access-recall-surface.d.ts +3 -2
  29. package/dist/access-recall-surface.js +9 -8
  30. package/dist/access-schema.d.ts +76 -76
  31. package/dist/{access-service-BlNKWBC9.d.ts → access-service-BJQ22URi.d.ts} +4 -1
  32. package/dist/access-service.d.ts +3 -2
  33. package/dist/access-service.js +9 -8
  34. package/dist/access-surface-catalog.d.ts +3 -2
  35. package/dist/bootstrap.d.ts +2 -1
  36. package/dist/briefing.js +3 -3
  37. package/dist/causal-consolidation.js +4 -4
  38. package/dist/{chunk-GF22HWS2.js → chunk-2PHX3I5C.js} +7 -7
  39. package/dist/{chunk-3I35RLJW.js → chunk-32XTXKIA.js} +14 -13
  40. package/dist/chunk-32XTXKIA.js.map +1 -0
  41. package/dist/{chunk-LXKJNUND.js → chunk-37VPMR4E.js} +2 -2
  42. package/dist/{chunk-3CDMIR3C.js → chunk-3CHQZVAL.js} +2 -2
  43. package/dist/{chunk-U37RGPJT.js → chunk-5J7HJ7RT.js} +2 -2
  44. package/dist/{chunk-AGR7MGUX.js → chunk-7IGWPXVC.js} +2 -2
  45. package/dist/{chunk-FIGDB2HR.js → chunk-7KXQ44PA.js} +2 -2
  46. package/dist/chunk-AHVEHR6K.js +82 -0
  47. package/dist/chunk-AHVEHR6K.js.map +1 -0
  48. package/dist/{chunk-MNLZGCM2.js → chunk-AQ2ZQYDI.js} +3 -3
  49. package/dist/{chunk-TWCOYET2.js → chunk-B6JDYXL7.js} +2 -1
  50. package/dist/chunk-B6JDYXL7.js.map +1 -0
  51. package/dist/{chunk-RROMWDDC.js → chunk-BL4JHZSO.js} +49 -12
  52. package/dist/chunk-BL4JHZSO.js.map +1 -0
  53. package/dist/{chunk-PXJ4A6IK.js → chunk-BUK2FXOL.js} +133 -105
  54. package/dist/chunk-BUK2FXOL.js.map +1 -0
  55. package/dist/{chunk-JMDZDT24.js → chunk-D7MAWMMK.js} +18 -4
  56. package/dist/chunk-D7MAWMMK.js.map +1 -0
  57. package/dist/{chunk-TG2DJFH7.js → chunk-E5A6C4A5.js} +20 -20
  58. package/dist/{chunk-NBT7O25Z.js → chunk-FR75B4UU.js} +82 -56
  59. package/dist/chunk-FR75B4UU.js.map +1 -0
  60. package/dist/{chunk-DPYYSG6F.js → chunk-G6MGAE36.js} +7 -7
  61. package/dist/{chunk-GNFZFJBJ.js → chunk-IR4LGIH6.js} +2 -2
  62. package/dist/{chunk-MPDX5QMH.js → chunk-JA4HEXV7.js} +2 -2
  63. package/dist/{chunk-XTAAG4SQ.js → chunk-K4DP5KZA.js} +6 -6
  64. package/dist/{chunk-AT6DNUCM.js → chunk-NY6W6CJW.js} +2 -2
  65. package/dist/{chunk-NMGO2HAZ.js → chunk-OIE242WM.js} +2 -2
  66. package/dist/{chunk-SZN6XVFC.js → chunk-PS5OG75R.js} +2 -2
  67. package/dist/{chunk-VY6SDKWZ.js → chunk-SSYBI43M.js} +2 -2
  68. package/dist/{chunk-IE4HB6O5.js → chunk-TPYZ727G.js} +3 -3
  69. package/dist/{chunk-5ZGWA4AG.js → chunk-UMFLAACL.js} +6 -6
  70. package/dist/{chunk-THHPDPMS.js → chunk-UOURUMBN.js} +2 -2
  71. package/dist/{chunk-6LRTGCRV.js → chunk-VPSAVXHM.js} +3 -3
  72. package/dist/{chunk-AL4TZWI3.js → chunk-W33DEUKR.js} +2 -2
  73. package/dist/{chunk-W4ZDTHWZ.js → chunk-WIGBTWXA.js} +2 -2
  74. package/dist/{chunk-NVYCTASB.js → chunk-WSEA52RI.js} +2 -2
  75. package/dist/{chunk-LARPWF3S.js → chunk-ZPUFQGUF.js} +4 -4
  76. package/dist/{cli-Zc6UclD1.d.ts → cli-1W7cNjJJ.d.ts} +2 -2
  77. package/dist/cli.d.ts +4 -3
  78. package/dist/cli.js +28 -27
  79. package/dist/compounding/engine.js +3 -3
  80. package/dist/connectors/codex-materialize-runner.js +3 -3
  81. package/dist/connectors/index.js +3 -3
  82. package/dist/corpus-watermark.js +5 -5
  83. package/dist/entity-retrieval.js +3 -3
  84. package/dist/explicit-capture.d.ts +2 -1
  85. package/dist/extraction.js +5 -1
  86. package/dist/{first-start-migration-LEXL3XYL.js → first-start-migration-BKNGOFED.js} +4 -4
  87. package/dist/index.d.ts +391 -390
  88. package/dist/index.js +74 -54
  89. package/dist/lcm/engine.js +3 -3
  90. package/dist/lcm/index.js +8 -8
  91. package/dist/maintenance/memory-governance.js +3 -3
  92. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  93. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  94. package/dist/mcp-memory-inspector-app.d.ts +3 -2
  95. package/dist/namespaces/migrate.js +4 -4
  96. package/dist/namespaces/storage.js +3 -3
  97. package/dist/operator-doctor-corpus.js +6 -6
  98. package/dist/operator-toolkit.js +9 -9
  99. package/dist/orchestration/maintenance.js +8 -8
  100. package/dist/{orchestrator-BTGgoKli.d.ts → orchestrator-BtA1wC5K.d.ts} +2 -0
  101. package/dist/orchestrator.d.ts +2 -1
  102. package/dist/orchestrator.js +42 -41
  103. package/dist/recall-context-composition.d.ts +30 -0
  104. package/dist/recall-context-composition.js +24 -0
  105. package/dist/recall-context-composition.js.map +1 -0
  106. package/dist/schemas.d.ts +54 -54
  107. package/dist/semantic-consolidation.js +4 -4
  108. package/dist/semantic-rule-promotion.js +3 -3
  109. package/dist/semantic-rule-verifier.js +3 -3
  110. package/dist/shared-context/manager.d.ts +8 -8
  111. package/dist/storage.js +2 -2
  112. package/dist/transfer/types.d.ts +66 -66
  113. package/dist/verified-recall.js +3 -3
  114. package/package.json +2 -2
  115. package/src/access-authorization-probe.ts +30 -1
  116. package/src/access-boundary.ts +21 -0
  117. package/src/access-http.test.ts +86 -1
  118. package/src/access-http.ts +6 -6
  119. package/src/access-mcp-output-schemas.ts +1 -0
  120. package/src/access-recall-response.ts +18 -13
  121. package/src/access-recall-surface.ts +11 -1
  122. package/src/access-service.ts +3 -0
  123. package/src/extraction-prompt-safety.test.ts +179 -0
  124. package/src/extraction.ts +186 -205
  125. package/src/index.ts +1 -1
  126. package/src/orchestration/orchestrator-helpers.ts +2 -0
  127. package/src/orchestration/recall-internal.ts +49 -49
  128. package/src/recall-context-composition.test.ts +90 -0
  129. package/src/recall-context-composition.ts +104 -0
  130. package/src/recall-curiosity-composition.test.ts +301 -0
  131. package/dist/chunk-3I35RLJW.js.map +0 -1
  132. package/dist/chunk-JMDZDT24.js.map +0 -1
  133. package/dist/chunk-NBT7O25Z.js.map +0 -1
  134. package/dist/chunk-PXJ4A6IK.js.map +0 -1
  135. package/dist/chunk-RROMWDDC.js.map +0 -1
  136. package/dist/chunk-TWCOYET2.js.map +0 -1
  137. /package/dist/{chunk-GF22HWS2.js.map → chunk-2PHX3I5C.js.map} +0 -0
  138. /package/dist/{chunk-LXKJNUND.js.map → chunk-37VPMR4E.js.map} +0 -0
  139. /package/dist/{chunk-3CDMIR3C.js.map → chunk-3CHQZVAL.js.map} +0 -0
  140. /package/dist/{chunk-U37RGPJT.js.map → chunk-5J7HJ7RT.js.map} +0 -0
  141. /package/dist/{chunk-AGR7MGUX.js.map → chunk-7IGWPXVC.js.map} +0 -0
  142. /package/dist/{chunk-FIGDB2HR.js.map → chunk-7KXQ44PA.js.map} +0 -0
  143. /package/dist/{chunk-MNLZGCM2.js.map → chunk-AQ2ZQYDI.js.map} +0 -0
  144. /package/dist/{chunk-TG2DJFH7.js.map → chunk-E5A6C4A5.js.map} +0 -0
  145. /package/dist/{chunk-DPYYSG6F.js.map → chunk-G6MGAE36.js.map} +0 -0
  146. /package/dist/{chunk-GNFZFJBJ.js.map → chunk-IR4LGIH6.js.map} +0 -0
  147. /package/dist/{chunk-MPDX5QMH.js.map → chunk-JA4HEXV7.js.map} +0 -0
  148. /package/dist/{chunk-XTAAG4SQ.js.map → chunk-K4DP5KZA.js.map} +0 -0
  149. /package/dist/{chunk-AT6DNUCM.js.map → chunk-NY6W6CJW.js.map} +0 -0
  150. /package/dist/{chunk-NMGO2HAZ.js.map → chunk-OIE242WM.js.map} +0 -0
  151. /package/dist/{chunk-SZN6XVFC.js.map → chunk-PS5OG75R.js.map} +0 -0
  152. /package/dist/{chunk-VY6SDKWZ.js.map → chunk-SSYBI43M.js.map} +0 -0
  153. /package/dist/{chunk-IE4HB6O5.js.map → chunk-TPYZ727G.js.map} +0 -0
  154. /package/dist/{chunk-5ZGWA4AG.js.map → chunk-UMFLAACL.js.map} +0 -0
  155. /package/dist/{chunk-THHPDPMS.js.map → chunk-UOURUMBN.js.map} +0 -0
  156. /package/dist/{chunk-6LRTGCRV.js.map → chunk-VPSAVXHM.js.map} +0 -0
  157. /package/dist/{chunk-AL4TZWI3.js.map → chunk-W33DEUKR.js.map} +0 -0
  158. /package/dist/{chunk-W4ZDTHWZ.js.map → chunk-WIGBTWXA.js.map} +0 -0
  159. /package/dist/{chunk-NVYCTASB.js.map → chunk-WSEA52RI.js.map} +0 -0
  160. /package/dist/{chunk-LARPWF3S.js.map → chunk-ZPUFQGUF.js.map} +0 -0
  161. /package/dist/{first-start-migration-LEXL3XYL.js.map → first-start-migration-BKNGOFED.js.map} +0 -0
@@ -20,26 +20,26 @@ declare const ExportManifestV1Schema: z.ZodObject<{
20
20
  bytes: number;
21
21
  }>, "many">;
22
22
  }, "strip", z.ZodTypeAny, {
23
- schemaVersion: 1;
23
+ format: "openclaw-engram-export";
24
24
  createdAt: string;
25
+ pluginVersion: string;
25
26
  files: {
26
27
  path: string;
27
28
  sha256: string;
28
29
  bytes: number;
29
30
  }[];
30
- format: "openclaw-engram-export";
31
- pluginVersion: string;
31
+ schemaVersion: 1;
32
32
  includesTranscripts: boolean;
33
33
  }, {
34
- schemaVersion: 1;
34
+ format: "openclaw-engram-export";
35
35
  createdAt: string;
36
+ pluginVersion: string;
36
37
  files: {
37
38
  path: string;
38
39
  sha256: string;
39
40
  bytes: number;
40
41
  }[];
41
- format: "openclaw-engram-export";
42
- pluginVersion: string;
42
+ schemaVersion: 1;
43
43
  includesTranscripts: boolean;
44
44
  }>;
45
45
  type ExportManifestV1 = z.infer<typeof ExportManifestV1Schema>;
@@ -75,26 +75,26 @@ declare const ExportBundleV1Schema: z.ZodObject<{
75
75
  bytes: number;
76
76
  }>, "many">;
77
77
  }, "strip", z.ZodTypeAny, {
78
- schemaVersion: 1;
78
+ format: "openclaw-engram-export";
79
79
  createdAt: string;
80
+ pluginVersion: string;
80
81
  files: {
81
82
  path: string;
82
83
  sha256: string;
83
84
  bytes: number;
84
85
  }[];
85
- format: "openclaw-engram-export";
86
- pluginVersion: string;
86
+ schemaVersion: 1;
87
87
  includesTranscripts: boolean;
88
88
  }, {
89
- schemaVersion: 1;
89
+ format: "openclaw-engram-export";
90
90
  createdAt: string;
91
+ pluginVersion: string;
91
92
  files: {
92
93
  path: string;
93
94
  sha256: string;
94
95
  bytes: number;
95
96
  }[];
96
- format: "openclaw-engram-export";
97
- pluginVersion: string;
97
+ schemaVersion: 1;
98
98
  includesTranscripts: boolean;
99
99
  }>;
100
100
  records: z.ZodArray<z.ZodObject<{
@@ -109,15 +109,15 @@ declare const ExportBundleV1Schema: z.ZodObject<{
109
109
  }>, "many">;
110
110
  }, "strip", z.ZodTypeAny, {
111
111
  manifest: {
112
- schemaVersion: 1;
112
+ format: "openclaw-engram-export";
113
113
  createdAt: string;
114
+ pluginVersion: string;
114
115
  files: {
115
116
  path: string;
116
117
  sha256: string;
117
118
  bytes: number;
118
119
  }[];
119
- format: "openclaw-engram-export";
120
- pluginVersion: string;
120
+ schemaVersion: 1;
121
121
  includesTranscripts: boolean;
122
122
  };
123
123
  records: {
@@ -126,15 +126,15 @@ declare const ExportBundleV1Schema: z.ZodObject<{
126
126
  }[];
127
127
  }, {
128
128
  manifest: {
129
- schemaVersion: 1;
129
+ format: "openclaw-engram-export";
130
130
  createdAt: string;
131
+ pluginVersion: string;
131
132
  files: {
132
133
  path: string;
133
134
  sha256: string;
134
135
  bytes: number;
135
136
  }[];
136
- format: "openclaw-engram-export";
137
- pluginVersion: string;
137
+ schemaVersion: 1;
138
138
  includesTranscripts: boolean;
139
139
  };
140
140
  records: {
@@ -319,10 +319,10 @@ declare const CapsuleBlockSchema: z.ZodObject<{
319
319
  identityAnchors: boolean;
320
320
  peerProfiles: boolean;
321
321
  };
322
- schemaVersion: string;
322
+ description: string;
323
323
  id: string;
324
+ schemaVersion: string;
324
325
  version: string;
325
- description: string;
326
326
  parentCapsule: string | null;
327
327
  parent: {
328
328
  version: string;
@@ -340,10 +340,10 @@ declare const CapsuleBlockSchema: z.ZodObject<{
340
340
  identityAnchors: boolean;
341
341
  peerProfiles: boolean;
342
342
  };
343
- schemaVersion: string;
343
+ description: string;
344
344
  id: string;
345
+ schemaVersion: string;
345
346
  version: string;
346
- description: string;
347
347
  parentCapsule: string | null;
348
348
  retrievalPolicy: {
349
349
  tierWeights: Record<string, number>;
@@ -470,10 +470,10 @@ declare const ExportManifestV2Schema: z.ZodObject<{
470
470
  identityAnchors: boolean;
471
471
  peerProfiles: boolean;
472
472
  };
473
- schemaVersion: string;
473
+ description: string;
474
474
  id: string;
475
+ schemaVersion: string;
475
476
  version: string;
476
- description: string;
477
477
  parentCapsule: string | null;
478
478
  parent: {
479
479
  version: string;
@@ -491,10 +491,10 @@ declare const ExportManifestV2Schema: z.ZodObject<{
491
491
  identityAnchors: boolean;
492
492
  peerProfiles: boolean;
493
493
  };
494
- schemaVersion: string;
494
+ description: string;
495
495
  id: string;
496
+ schemaVersion: string;
496
497
  version: string;
497
- description: string;
498
498
  parentCapsule: string | null;
499
499
  retrievalPolicy: {
500
500
  tierWeights: Record<string, number>;
@@ -507,16 +507,14 @@ declare const ExportManifestV2Schema: z.ZodObject<{
507
507
  } | null | undefined;
508
508
  }>;
509
509
  }, "strip", z.ZodTypeAny, {
510
- schemaVersion: 2;
510
+ format: "openclaw-engram-export";
511
511
  createdAt: string;
512
+ pluginVersion: string;
512
513
  files: {
513
514
  path: string;
514
515
  sha256: string;
515
516
  bytes: number;
516
517
  }[];
517
- format: "openclaw-engram-export";
518
- pluginVersion: string;
519
- includesTranscripts: boolean;
520
518
  capsule: {
521
519
  includes: {
522
520
  procedural: boolean;
@@ -524,10 +522,10 @@ declare const ExportManifestV2Schema: z.ZodObject<{
524
522
  identityAnchors: boolean;
525
523
  peerProfiles: boolean;
526
524
  };
527
- schemaVersion: string;
525
+ description: string;
528
526
  id: string;
527
+ schemaVersion: string;
529
528
  version: string;
530
- description: string;
531
529
  parentCapsule: string | null;
532
530
  parent: {
533
531
  version: string;
@@ -539,17 +537,17 @@ declare const ExportManifestV2Schema: z.ZodObject<{
539
537
  directAnswerEnabled: boolean;
540
538
  };
541
539
  };
542
- }, {
543
540
  schemaVersion: 2;
541
+ includesTranscripts: boolean;
542
+ }, {
543
+ format: "openclaw-engram-export";
544
544
  createdAt: string;
545
+ pluginVersion: string;
545
546
  files: {
546
547
  path: string;
547
548
  sha256: string;
548
549
  bytes: number;
549
550
  }[];
550
- format: "openclaw-engram-export";
551
- pluginVersion: string;
552
- includesTranscripts: boolean;
553
551
  capsule: {
554
552
  includes: {
555
553
  procedural: boolean;
@@ -557,10 +555,10 @@ declare const ExportManifestV2Schema: z.ZodObject<{
557
555
  identityAnchors: boolean;
558
556
  peerProfiles: boolean;
559
557
  };
560
- schemaVersion: string;
558
+ description: string;
561
559
  id: string;
560
+ schemaVersion: string;
562
561
  version: string;
563
- description: string;
564
562
  parentCapsule: string | null;
565
563
  retrievalPolicy: {
566
564
  tierWeights: Record<string, number>;
@@ -572,6 +570,8 @@ declare const ExportManifestV2Schema: z.ZodObject<{
572
570
  forkRoot: string;
573
571
  } | null | undefined;
574
572
  };
573
+ schemaVersion: 2;
574
+ includesTranscripts: boolean;
575
575
  }>;
576
576
  type ExportManifestV2 = z.infer<typeof ExportManifestV2Schema>;
577
577
  declare const ExportBundleV2Schema: z.ZodObject<{
@@ -689,10 +689,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
689
689
  identityAnchors: boolean;
690
690
  peerProfiles: boolean;
691
691
  };
692
- schemaVersion: string;
692
+ description: string;
693
693
  id: string;
694
+ schemaVersion: string;
694
695
  version: string;
695
- description: string;
696
696
  parentCapsule: string | null;
697
697
  parent: {
698
698
  version: string;
@@ -710,10 +710,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
710
710
  identityAnchors: boolean;
711
711
  peerProfiles: boolean;
712
712
  };
713
- schemaVersion: string;
713
+ description: string;
714
714
  id: string;
715
+ schemaVersion: string;
715
716
  version: string;
716
- description: string;
717
717
  parentCapsule: string | null;
718
718
  retrievalPolicy: {
719
719
  tierWeights: Record<string, number>;
@@ -726,16 +726,14 @@ declare const ExportBundleV2Schema: z.ZodObject<{
726
726
  } | null | undefined;
727
727
  }>;
728
728
  }, "strip", z.ZodTypeAny, {
729
- schemaVersion: 2;
729
+ format: "openclaw-engram-export";
730
730
  createdAt: string;
731
+ pluginVersion: string;
731
732
  files: {
732
733
  path: string;
733
734
  sha256: string;
734
735
  bytes: number;
735
736
  }[];
736
- format: "openclaw-engram-export";
737
- pluginVersion: string;
738
- includesTranscripts: boolean;
739
737
  capsule: {
740
738
  includes: {
741
739
  procedural: boolean;
@@ -743,10 +741,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
743
741
  identityAnchors: boolean;
744
742
  peerProfiles: boolean;
745
743
  };
746
- schemaVersion: string;
744
+ description: string;
747
745
  id: string;
746
+ schemaVersion: string;
748
747
  version: string;
749
- description: string;
750
748
  parentCapsule: string | null;
751
749
  parent: {
752
750
  version: string;
@@ -758,17 +756,17 @@ declare const ExportBundleV2Schema: z.ZodObject<{
758
756
  directAnswerEnabled: boolean;
759
757
  };
760
758
  };
761
- }, {
762
759
  schemaVersion: 2;
760
+ includesTranscripts: boolean;
761
+ }, {
762
+ format: "openclaw-engram-export";
763
763
  createdAt: string;
764
+ pluginVersion: string;
764
765
  files: {
765
766
  path: string;
766
767
  sha256: string;
767
768
  bytes: number;
768
769
  }[];
769
- format: "openclaw-engram-export";
770
- pluginVersion: string;
771
- includesTranscripts: boolean;
772
770
  capsule: {
773
771
  includes: {
774
772
  procedural: boolean;
@@ -776,10 +774,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
776
774
  identityAnchors: boolean;
777
775
  peerProfiles: boolean;
778
776
  };
779
- schemaVersion: string;
777
+ description: string;
780
778
  id: string;
779
+ schemaVersion: string;
781
780
  version: string;
782
- description: string;
783
781
  parentCapsule: string | null;
784
782
  retrievalPolicy: {
785
783
  tierWeights: Record<string, number>;
@@ -791,6 +789,8 @@ declare const ExportBundleV2Schema: z.ZodObject<{
791
789
  forkRoot: string;
792
790
  } | null | undefined;
793
791
  };
792
+ schemaVersion: 2;
793
+ includesTranscripts: boolean;
794
794
  }>;
795
795
  records: z.ZodArray<z.ZodObject<{
796
796
  path: z.ZodString;
@@ -804,16 +804,14 @@ declare const ExportBundleV2Schema: z.ZodObject<{
804
804
  }>, "many">;
805
805
  }, "strip", z.ZodTypeAny, {
806
806
  manifest: {
807
- schemaVersion: 2;
807
+ format: "openclaw-engram-export";
808
808
  createdAt: string;
809
+ pluginVersion: string;
809
810
  files: {
810
811
  path: string;
811
812
  sha256: string;
812
813
  bytes: number;
813
814
  }[];
814
- format: "openclaw-engram-export";
815
- pluginVersion: string;
816
- includesTranscripts: boolean;
817
815
  capsule: {
818
816
  includes: {
819
817
  procedural: boolean;
@@ -821,10 +819,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
821
819
  identityAnchors: boolean;
822
820
  peerProfiles: boolean;
823
821
  };
824
- schemaVersion: string;
822
+ description: string;
825
823
  id: string;
824
+ schemaVersion: string;
826
825
  version: string;
827
- description: string;
828
826
  parentCapsule: string | null;
829
827
  parent: {
830
828
  version: string;
@@ -836,6 +834,8 @@ declare const ExportBundleV2Schema: z.ZodObject<{
836
834
  directAnswerEnabled: boolean;
837
835
  };
838
836
  };
837
+ schemaVersion: 2;
838
+ includesTranscripts: boolean;
839
839
  };
840
840
  records: {
841
841
  content: string;
@@ -843,16 +843,14 @@ declare const ExportBundleV2Schema: z.ZodObject<{
843
843
  }[];
844
844
  }, {
845
845
  manifest: {
846
- schemaVersion: 2;
846
+ format: "openclaw-engram-export";
847
847
  createdAt: string;
848
+ pluginVersion: string;
848
849
  files: {
849
850
  path: string;
850
851
  sha256: string;
851
852
  bytes: number;
852
853
  }[];
853
- format: "openclaw-engram-export";
854
- pluginVersion: string;
855
- includesTranscripts: boolean;
856
854
  capsule: {
857
855
  includes: {
858
856
  procedural: boolean;
@@ -860,10 +858,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
860
858
  identityAnchors: boolean;
861
859
  peerProfiles: boolean;
862
860
  };
863
- schemaVersion: string;
861
+ description: string;
864
862
  id: string;
863
+ schemaVersion: string;
865
864
  version: string;
866
- description: string;
867
865
  parentCapsule: string | null;
868
866
  retrievalPolicy: {
869
867
  tierWeights: Record<string, number>;
@@ -875,6 +873,8 @@ declare const ExportBundleV2Schema: z.ZodObject<{
875
873
  forkRoot: string;
876
874
  } | null | undefined;
877
875
  };
876
+ schemaVersion: 2;
877
+ includesTranscripts: boolean;
878
878
  };
879
879
  records: {
880
880
  content: string;
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-VY6SDKWZ.js";
4
+ } from "./chunk-SSYBI43M.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
6
  import "./chunk-ZBJMUXZH.js";
7
- import "./chunk-XTAAG4SQ.js";
8
- import "./chunk-UHVXE24Y.js";
7
+ import "./chunk-K4DP5KZA.js";
9
8
  import "./chunk-2QMKMVHH.js";
9
+ import "./chunk-UHVXE24Y.js";
10
10
  import "./chunk-DEBHXHJR.js";
11
11
  import "./chunk-DNHVPZOD.js";
12
12
  import "./chunk-6CIAGZ6X.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.25.3",
3
+ "version": "9.25.5",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3056,7 +3056,7 @@
3056
3056
  "core"
3057
3057
  ],
3058
3058
  "peerDependencies": {
3059
- "@remnic/coding-graph": "^9.25.3"
3059
+ "@remnic/coding-graph": "^9.25.5"
3060
3060
  },
3061
3061
  "peerDependenciesMeta": {
3062
3062
  "@remnic/coding-graph": {
@@ -1,10 +1,22 @@
1
- import { getOperation, type OperationName, OPERATION_NAMES } from "./access-boundary.js";
1
+ import {
2
+ getOperation,
3
+ operationRequiresAuthorizedNamespace,
4
+ OPERATION_NAMES,
5
+ type OperationName,
6
+ } from "./access-boundary.js";
2
7
  import { EngramAccessInputError } from "./access-errors.js";
3
8
  import {
4
9
  assertOperationAuthorizationAllowed,
5
10
  type TokenCapabilities,
6
11
  } from "./access-token-capabilities.js";
7
12
 
13
+ const UNRESOLVABLE_RESOURCE_OPERATIONS = new Set<OperationName>([
14
+ "review_resolve",
15
+ "contradiction_detail",
16
+ "chat_message",
17
+ "chat_events",
18
+ ]);
19
+
8
20
  export interface AuthorizationProbeResponse {
9
21
  readonly authorized: true;
10
22
  readonly operations: readonly OperationName[];
@@ -41,3 +53,20 @@ export function probeOperationAuthorization(
41
53
 
42
54
  return { authorized: true, operations };
43
55
  }
56
+
57
+ /**
58
+ * Resolve every namespace an authorization probe can verify from the request.
59
+ * Resource-scoped routes resolve their stored target only after a resource id
60
+ * is supplied, so probes validate only request-resolvable namespaces.
61
+ */
62
+ export function authorizationProbeNamespaces(
63
+ operations: readonly OperationName[],
64
+ requestedNamespace: string | undefined,
65
+ ): readonly (string | undefined)[] {
66
+ const namespaceOperations = operations.filter(
67
+ (operation) =>
68
+ operationRequiresAuthorizedNamespace(operation) &&
69
+ !UNRESOLVABLE_RESOURCE_OPERATIONS.has(operation),
70
+ );
71
+ return namespaceOperations.length > 0 ? [requestedNamespace] : [];
72
+ }
@@ -186,6 +186,18 @@ export const OPERATION_NAMES = [
186
186
  */
187
187
  export type OperationName = (typeof OPERATION_NAMES)[number];
188
188
 
189
+ const IMPLICIT_HTTP_NAMESPACE_OPERATIONS = new Set<OperationName>([
190
+ "offline_sync_snapshot",
191
+ "offline_sync_snapshot_stream",
192
+ "memory_list",
193
+ "entity_list",
194
+ "maintenance_status",
195
+ "quality_status",
196
+ "trust_zones_status",
197
+ "graph_events",
198
+ "citations_observed",
199
+ ]);
200
+
189
201
  // ---------------------------------------------------------------------------
190
202
  // Operation context — what every handler receives
191
203
  // ---------------------------------------------------------------------------
@@ -435,6 +447,15 @@ export function getOperation(name: OperationName): BoundOperation | undefined {
435
447
  return registry.get(name);
436
448
  }
437
449
 
450
+ /** Whether a probe must authorize an operation's effective namespace. */
451
+ export function operationRequiresAuthorizedNamespace(name: OperationName): boolean {
452
+ if (name === "namespace_writable") return false;
453
+ if (IMPLICIT_HTTP_NAMESPACE_OPERATIONS.has(name)) return true;
454
+ const schema = registry.get(name)?.spec.schema;
455
+ const objectSchema = schema instanceof z.ZodEffects ? schema.innerType() : schema;
456
+ return objectSchema instanceof z.ZodObject && Object.hasOwn(objectSchema.shape, "namespace");
457
+ }
458
+
438
459
  /** All registered operation names. */
439
460
  export function listRegisteredOperations(): readonly OperationName[] {
440
461
  return [...registry.keys()];
@@ -2983,6 +2983,17 @@ test("HTTP authorization probe verifies requested operation grants without invok
2983
2983
  const service = {
2984
2984
  configRef: parseConfig({ memoryDir: "/tmp/remnic-http-authorization-probe", defaultNamespace: "default" }),
2985
2985
  } as unknown as EngramAccessService;
2986
+ const implicitNamespaceOperations = [
2987
+ "offline_sync_snapshot",
2988
+ "offline_sync_snapshot_stream",
2989
+ "memory_list",
2990
+ "entity_list",
2991
+ "maintenance_status",
2992
+ "quality_status",
2993
+ "trust_zones_status",
2994
+ "graph_events",
2995
+ "citations_observed",
2996
+ ];
2986
2997
  const server = new EngramAccessHttpServer({
2987
2998
  service,
2988
2999
  port: 0,
@@ -2993,6 +3004,38 @@ test("HTTP authorization probe verifies requested operation grants without invok
2993
3004
  },
2994
3005
  { token: "recall-only-token", capabilities: { version: 1, ops: ["recall"] } },
2995
3006
  { token: "observe-only-token", capabilities: { version: 1, ops: ["observe"] } },
3007
+ {
3008
+ token: "namespace-scoped-delegate-token",
3009
+ capabilities: {
3010
+ version: 1,
3011
+ ops: ["recall", "observe", "lcm_compaction_flush"],
3012
+ namespaces: ["other"],
3013
+ },
3014
+ },
3015
+ {
3016
+ token: "resource-scoped-chat-token",
3017
+ capabilities: {
3018
+ version: 1,
3019
+ ops: ["chat_message", "contradiction_detail"],
3020
+ namespaces: ["other"],
3021
+ },
3022
+ },
3023
+ {
3024
+ token: "namespace-scoped-adapters-token",
3025
+ capabilities: {
3026
+ version: 1,
3027
+ ops: ["adapters_status"],
3028
+ namespaces: ["other"],
3029
+ },
3030
+ },
3031
+ {
3032
+ token: "implicit-namespace-token",
3033
+ capabilities: {
3034
+ version: 1,
3035
+ ops: implicitNamespaceOperations,
3036
+ namespaces: ["other"],
3037
+ },
3038
+ },
2996
3039
  {
2997
3040
  token: "fleet-scoped-token",
2998
3041
  capabilities: {
@@ -3005,9 +3048,10 @@ test("HTTP authorization probe verifies requested operation grants without invok
3005
3048
  adminConsoleEnabled: false,
3006
3049
  });
3007
3050
  const status = await server.start();
3008
- const probe = (token: string, operations: string[]) => {
3051
+ const probe = (token: string, operations: string[], namespace?: string) => {
3009
3052
  const query = new URLSearchParams();
3010
3053
  for (const operation of operations) query.append("op", operation);
3054
+ if (namespace !== undefined) query.set("namespace", namespace);
3011
3055
  return fetch(`http://127.0.0.1:${status.port}/engram/v1/authorization?${query}`, {
3012
3056
  headers: { authorization: `Bearer ${token}` },
3013
3057
  });
@@ -3023,6 +3067,47 @@ test("HTTP authorization probe verifies requested operation grants without invok
3023
3067
  assert.equal(alternateGrant.status, 200);
3024
3068
  await alternateGrant.text();
3025
3069
 
3070
+ const namespaceDiagnostic = await probe(
3071
+ "namespace-scoped-delegate-token",
3072
+ ["namespace_writable"],
3073
+ );
3074
+ assert.equal(namespaceDiagnostic.status, 200, "writability diagnostics report scope in their response");
3075
+ await namespaceDiagnostic.text();
3076
+
3077
+ const namespaceAgnostic = await probe("namespace-scoped-adapters-token", ["adapters_status"]);
3078
+ assert.equal(namespaceAgnostic.status, 200, "namespace-free operations must not use the daemon default");
3079
+ await namespaceAgnostic.text();
3080
+
3081
+ const namespaceDenied = await probe("namespace-scoped-delegate-token", delegateOperations);
3082
+ assert.equal(namespaceDenied.status, 403, "a scoped token must cover the daemon default namespace");
3083
+
3084
+ for (const operation of implicitNamespaceOperations) {
3085
+ const implicitNamespace = await probe("implicit-namespace-token", [operation]);
3086
+ assert.equal(implicitNamespace.status, 403, `${operation} must authorize the effective namespace`);
3087
+ await implicitNamespace.text();
3088
+ }
3089
+ await namespaceDenied.text();
3090
+
3091
+ const namespaceAllowed = await probe(
3092
+ "namespace-scoped-delegate-token",
3093
+ delegateOperations,
3094
+ "other",
3095
+ );
3096
+ assert.equal(namespaceAllowed.status, 200);
3097
+ await namespaceAllowed.text();
3098
+
3099
+ const resourceNamespaceProbe = await probe(
3100
+ "resource-scoped-chat-token",
3101
+ ["chat_message", "contradiction_detail"],
3102
+ "other",
3103
+ );
3104
+ assert.equal(
3105
+ resourceNamespaceProbe.status,
3106
+ 200,
3107
+ "resource-scoped probes must not claim a namespace they cannot resolve without a resource id",
3108
+ );
3109
+ await resourceNamespaceProbe.text();
3110
+
3026
3111
  const fleetWide = await probe("fleet-scoped-token", ["continuity_audit_generate"]);
3027
3112
  assert.equal(fleetWide.status, 403);
3028
3113
  assert.equal(fleetWide.headers.get("cache-control"), "no-store");
@@ -38,7 +38,7 @@ import {
38
38
  import { expandTildePath } from "./utils/path.js";
39
39
  import { projectTagProjectId } from "./coding/coding-namespace.js";
40
40
  import { getOperation, type OperationName } from "./access-boundary.js";
41
- import { probeOperationAuthorization } from "./access-authorization-probe.js";
41
+ import { authorizationProbeNamespaces, probeOperationAuthorization } from "./access-authorization-probe.js";
42
42
  import { resolveQueryNamespaceWritablePreflight } from "./access-namespace-preflight.js";
43
43
  import {
44
44
  assertOperationAllowed,
@@ -892,11 +892,11 @@ export class EngramAccessHttpServer {
892
892
 
893
893
  if (req.method === "GET" && pathname === "/engram/v1/authorization") {
894
894
  res.setHeader("cache-control", "no-store");
895
- this.respondJson(
896
- res,
897
- 200,
898
- probeOperationAuthorization(tokenCapabilityStore.getStore(), parsed.searchParams.getAll("op")),
899
- );
895
+ const probe = probeOperationAuthorization(tokenCapabilityStore.getStore(), parsed.searchParams.getAll("op"));
896
+ const namespaceParam = parsed.searchParams.get("namespace") ?? undefined;
897
+ for (const namespace of authorizationProbeNamespaces(probe.operations, namespaceParam))
898
+ this.resolveNamespace(req, namespace);
899
+ this.respondJson(res, 200, probe);
900
900
  return;
901
901
  }
902
902
 
@@ -31,6 +31,7 @@ const TOOL_OUTPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>> = {
31
31
  query: T_STRING,
32
32
  namespace: T_STRING,
33
33
  context: T_STRING,
34
+ contextComposition: objectSchema({ context: T_STRING, footer: T_STRING }),
34
35
  count: T_NUMBER,
35
36
  memoryIds: T_ARRAY,
36
37
  results: T_ARRAY,