@remnic/core 9.14.0 → 9.15.1

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 (167) hide show
  1. package/dist/access-admin-ops-surface.d.ts +4 -1
  2. package/dist/access-admin-ops-surface.js +18 -18
  3. package/dist/access-boundary.d.ts +4 -1
  4. package/dist/access-boundary.js +18 -19
  5. package/dist/access-cli.js +64 -66
  6. package/dist/access-cli.js.map +1 -1
  7. package/dist/access-http.d.ts +2 -1
  8. package/dist/access-http.js +24 -25
  9. package/dist/access-identity-continuity-surface.js +18 -18
  10. package/dist/access-lcm-surface.d.ts +4 -1
  11. package/dist/access-lcm-surface.js +18 -18
  12. package/dist/access-mcp.d.ts +4 -1
  13. package/dist/access-mcp.js +23 -24
  14. package/dist/access-namespace-preflight-DgJtZCmU.d.ts +146 -0
  15. package/dist/access-namespace-preflight.d.ts +8 -0
  16. package/dist/access-namespace-preflight.js +158 -0
  17. package/dist/access-observe-write-surface.d.ts +4 -1
  18. package/dist/access-observe-write-surface.js +18 -18
  19. package/dist/access-operations-batch.js +20 -21
  20. package/dist/access-operations.d.ts +8 -5
  21. package/dist/access-operations.js +22 -23
  22. package/dist/access-recall-concurrency.d.ts +4 -1
  23. package/dist/access-recall-concurrency.js +18 -18
  24. package/dist/access-recall-response.d.ts +4 -1
  25. package/dist/access-recall-response.js +18 -18
  26. package/dist/access-recall-surface.d.ts +4 -1
  27. package/dist/access-recall-surface.js +18 -18
  28. package/dist/access-schema.d.ts +76 -76
  29. package/dist/access-schema.js +3 -3
  30. package/dist/{access-service-DbZ1G3zV.d.ts → access-service-bw2p9ULX.d.ts} +6 -114
  31. package/dist/access-service.d.ts +4 -1
  32. package/dist/access-service.js +18 -18
  33. package/dist/access-surface-catalog.d.ts +4 -1
  34. package/dist/active-recall.js +1 -1
  35. package/dist/briefing.js +5 -5
  36. package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-7FJQINUR.js} +2 -2
  37. package/dist/capsule-crypto-7FJQINUR.js.map +1 -0
  38. package/dist/causal-consolidation.js +6 -6
  39. package/dist/{chunk-OWHERGF2.js → chunk-2NLLXCJG.js} +2 -2
  40. package/dist/{chunk-5RZHHANR.js → chunk-63P3PJED.js} +50 -50
  41. package/dist/{chunk-ALSGMEJR.js → chunk-7CPOZH6Y.js} +5 -5
  42. package/dist/{chunk-TY6NBWV4.js → chunk-7FNHLCQE.js} +2 -2
  43. package/dist/{chunk-MMGGVZ4Q.js → chunk-7VZWZVYG.js} +40 -18
  44. package/dist/{chunk-MMGGVZ4Q.js.map → chunk-7VZWZVYG.js.map} +1 -1
  45. package/dist/{chunk-HLG7VAZP.js → chunk-BOP256DB.js} +2 -2
  46. package/dist/{chunk-7G7DVA2C.js → chunk-BVC242OS.js} +2 -2
  47. package/dist/{chunk-CAZ2SHEP.js → chunk-CCNSCRJ2.js} +2 -2
  48. package/dist/{chunk-3332THSR.js → chunk-CVZYPFEH.js} +4 -4
  49. package/dist/{chunk-SK7AMF2J.js → chunk-DETNBTZS.js} +3 -3
  50. package/dist/{chunk-226RNKRU.js → chunk-FFF4XIGB.js} +32 -32
  51. package/dist/{chunk-AS6UOOXF.js → chunk-FMMZQDCT.js} +2 -2
  52. package/dist/{chunk-YQQYS2K4.js → chunk-H3MDWWGN.js} +2 -2
  53. package/dist/{chunk-TC5HBIIT.js → chunk-HBYQAOED.js} +2 -2
  54. package/dist/{chunk-3HYWNJDA.js → chunk-HWFK24UD.js} +420 -42
  55. package/dist/chunk-HWFK24UD.js.map +1 -0
  56. package/dist/{chunk-YO3ZB3PJ.js → chunk-I7DUEPE2.js} +30 -15
  57. package/dist/chunk-I7DUEPE2.js.map +1 -0
  58. package/dist/{chunk-YUQOAKPX.js → chunk-JRXN5LYL.js} +5 -5
  59. package/dist/{chunk-5W7CTZ2E.js → chunk-KQAFEZQX.js} +4 -4
  60. package/dist/{chunk-PYHOAXTI.js → chunk-LRGSLV7M.js} +4 -4
  61. package/dist/{chunk-A56B2AJR.js → chunk-MUQ3BD2C.js} +3 -3
  62. package/dist/{chunk-QJAQNXWI.js → chunk-ONHRRJZM.js} +6 -6
  63. package/dist/{chunk-DF552QUN.js → chunk-QCLQ4BGA.js} +5 -5
  64. package/dist/{chunk-IAHNKI2E.js → chunk-QDNE35FU.js} +2 -2
  65. package/dist/{chunk-W2OST2HH.js → chunk-QLOOCKKE.js} +2 -2
  66. package/dist/{chunk-I4NJ2CDY.js → chunk-RRHEV5HA.js} +4 -6
  67. package/dist/{chunk-I4NJ2CDY.js.map → chunk-RRHEV5HA.js.map} +1 -1
  68. package/dist/{chunk-7HZMTXXB.js → chunk-RWSLO24I.js} +10 -10
  69. package/dist/{chunk-UDIJMITR.js → chunk-SDZWOEZH.js} +22 -22
  70. package/dist/chunk-SDZWOEZH.js.map +1 -0
  71. package/dist/{chunk-QZGN4773.js → chunk-SW2KEZNX.js} +3 -3
  72. package/dist/{chunk-O4K3DWK2.js → chunk-SWVW42CG.js} +2 -2
  73. package/dist/{chunk-UVYI6VIX.js → chunk-X7Y7WX73.js} +1 -1
  74. package/dist/{chunk-CQ6WP3PA.js → chunk-XII2XSHL.js} +5 -5
  75. package/dist/{chunk-YSDVEPV2.js → chunk-XKFXY3ZA.js} +10 -10
  76. package/dist/{chunk-AVPXXV6J.js → chunk-XKGPIWGI.js} +4 -4
  77. package/dist/{chunk-IQFS4AU7.js → chunk-YEU4VEU4.js} +2 -2
  78. package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
  79. package/dist/{chunk-Y6XODVJ4.js → chunk-YS7KIG3A.js} +8 -8
  80. package/dist/{chunk-XRNU7OEQ.js → chunk-ZNFVYUYF.js} +3 -3
  81. package/dist/{cli-5tNLVTvJ.d.ts → cli-DzPVFfGe.d.ts} +1 -1
  82. package/dist/cli.d.ts +5 -2
  83. package/dist/cli.js +45 -46
  84. package/dist/compounding/engine.js +5 -5
  85. package/dist/config.js +1 -1
  86. package/dist/connectors/codex-materialize-runner.js +5 -5
  87. package/dist/connectors/index.js +5 -5
  88. package/dist/contradiction/index.js +4 -4
  89. package/dist/dashboard-runtime.js +2 -2
  90. package/dist/entity-retrieval.js +5 -5
  91. package/dist/index.d.ts +406 -405
  92. package/dist/index.js +76 -78
  93. package/dist/lcm/index.js +3 -3
  94. package/dist/maintenance/memory-governance.js +5 -5
  95. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +5 -5
  96. package/dist/maintenance/rebuild-memory-projection.js +6 -6
  97. package/dist/mcp-memory-inspector-app.d.ts +4 -1
  98. package/dist/namespaces/migrate.js +11 -11
  99. package/dist/namespaces/search.js +5 -5
  100. package/dist/namespaces/storage.js +5 -5
  101. package/dist/offline-sync-impression-drain.js +4 -4
  102. package/dist/operator-toolkit.js +16 -16
  103. package/dist/orchestration/maintenance.js +9 -9
  104. package/dist/orchestrator.js +65 -66
  105. package/dist/qmd.js +4 -4
  106. package/dist/resume-bundles.js +1 -1
  107. package/dist/schemas.d.ts +54 -54
  108. package/dist/search/factory.js +4 -4
  109. package/dist/search/index.js +6 -6
  110. package/dist/semantic-consolidation.js +6 -6
  111. package/dist/semantic-rule-promotion.js +5 -5
  112. package/dist/semantic-rule-verifier.js +5 -5
  113. package/dist/shared-context/manager.d.ts +8 -8
  114. package/dist/storage.js +4 -4
  115. package/dist/transfer/backup.js +2 -2
  116. package/dist/transfer/capsule-export.js +2 -2
  117. package/dist/transfer/capsule-import.js +2 -2
  118. package/dist/transfer/import-sqlite.js +2 -2
  119. package/dist/transfer/types.d.ts +66 -66
  120. package/dist/verified-recall.js +5 -5
  121. package/package.json +2 -2
  122. package/src/access-http.test.ts +91 -0
  123. package/src/access-http.ts +13 -14
  124. package/src/access-namespace-preflight.test.ts +111 -0
  125. package/src/access-namespace-preflight.ts +111 -0
  126. package/src/access-operations-batch.ts +25 -2
  127. package/src/access-service-observe-scope.test.ts +81 -0
  128. package/src/access-service.ts +64 -32
  129. package/src/scopes/scope-plan.ts +66 -0
  130. package/dist/chunk-3HYWNJDA.js.map +0 -1
  131. package/dist/chunk-KF5EUVKQ.js +0 -289
  132. package/dist/chunk-KF5EUVKQ.js.map +0 -1
  133. package/dist/chunk-UDIJMITR.js.map +0 -1
  134. package/dist/chunk-YO3ZB3PJ.js.map +0 -1
  135. /package/dist/{capsule-crypto-GWVG7LGC.js.map → access-namespace-preflight.js.map} +0 -0
  136. /package/dist/{chunk-OWHERGF2.js.map → chunk-2NLLXCJG.js.map} +0 -0
  137. /package/dist/{chunk-5RZHHANR.js.map → chunk-63P3PJED.js.map} +0 -0
  138. /package/dist/{chunk-ALSGMEJR.js.map → chunk-7CPOZH6Y.js.map} +0 -0
  139. /package/dist/{chunk-TY6NBWV4.js.map → chunk-7FNHLCQE.js.map} +0 -0
  140. /package/dist/{chunk-HLG7VAZP.js.map → chunk-BOP256DB.js.map} +0 -0
  141. /package/dist/{chunk-7G7DVA2C.js.map → chunk-BVC242OS.js.map} +0 -0
  142. /package/dist/{chunk-CAZ2SHEP.js.map → chunk-CCNSCRJ2.js.map} +0 -0
  143. /package/dist/{chunk-3332THSR.js.map → chunk-CVZYPFEH.js.map} +0 -0
  144. /package/dist/{chunk-SK7AMF2J.js.map → chunk-DETNBTZS.js.map} +0 -0
  145. /package/dist/{chunk-226RNKRU.js.map → chunk-FFF4XIGB.js.map} +0 -0
  146. /package/dist/{chunk-AS6UOOXF.js.map → chunk-FMMZQDCT.js.map} +0 -0
  147. /package/dist/{chunk-YQQYS2K4.js.map → chunk-H3MDWWGN.js.map} +0 -0
  148. /package/dist/{chunk-TC5HBIIT.js.map → chunk-HBYQAOED.js.map} +0 -0
  149. /package/dist/{chunk-YUQOAKPX.js.map → chunk-JRXN5LYL.js.map} +0 -0
  150. /package/dist/{chunk-5W7CTZ2E.js.map → chunk-KQAFEZQX.js.map} +0 -0
  151. /package/dist/{chunk-PYHOAXTI.js.map → chunk-LRGSLV7M.js.map} +0 -0
  152. /package/dist/{chunk-A56B2AJR.js.map → chunk-MUQ3BD2C.js.map} +0 -0
  153. /package/dist/{chunk-QJAQNXWI.js.map → chunk-ONHRRJZM.js.map} +0 -0
  154. /package/dist/{chunk-DF552QUN.js.map → chunk-QCLQ4BGA.js.map} +0 -0
  155. /package/dist/{chunk-IAHNKI2E.js.map → chunk-QDNE35FU.js.map} +0 -0
  156. /package/dist/{chunk-W2OST2HH.js.map → chunk-QLOOCKKE.js.map} +0 -0
  157. /package/dist/{chunk-7HZMTXXB.js.map → chunk-RWSLO24I.js.map} +0 -0
  158. /package/dist/{chunk-QZGN4773.js.map → chunk-SW2KEZNX.js.map} +0 -0
  159. /package/dist/{chunk-O4K3DWK2.js.map → chunk-SWVW42CG.js.map} +0 -0
  160. /package/dist/{chunk-UVYI6VIX.js.map → chunk-X7Y7WX73.js.map} +0 -0
  161. /package/dist/{chunk-CQ6WP3PA.js.map → chunk-XII2XSHL.js.map} +0 -0
  162. /package/dist/{chunk-YSDVEPV2.js.map → chunk-XKFXY3ZA.js.map} +0 -0
  163. /package/dist/{chunk-AVPXXV6J.js.map → chunk-XKGPIWGI.js.map} +0 -0
  164. /package/dist/{chunk-IQFS4AU7.js.map → chunk-YEU4VEU4.js.map} +0 -0
  165. /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
  166. /package/dist/{chunk-Y6XODVJ4.js.map → chunk-YS7KIG3A.js.map} +0 -0
  167. /package/dist/{chunk-XRNU7OEQ.js.map → chunk-ZNFVYUYF.js.map} +0 -0
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  exportCapsule,
3
3
  isValidCapsuleSince
4
- } from "../chunk-5W7CTZ2E.js";
5
- import "../chunk-UVYI6VIX.js";
4
+ } from "../chunk-KQAFEZQX.js";
6
5
  import "../chunk-WEHSQBFR.js";
6
+ import "../chunk-X7Y7WX73.js";
7
7
  import "../chunk-J4EB7DNW.js";
8
8
  import "../chunk-BJMBJZ2Y.js";
9
9
  import "../chunk-UKJAGEXH.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  importCapsule
3
- } from "../chunk-ALSGMEJR.js";
3
+ } from "../chunk-7CPOZH6Y.js";
4
4
  import "../chunk-5VQJBH2G.js";
5
5
  import "../chunk-AITCS2RC.js";
6
6
  import "../chunk-XMMESCPD.js";
7
7
  import "../chunk-42JKGUFJ.js";
8
8
  import "../chunk-PDJTHRAW.js";
9
- import "../chunk-UVYI6VIX.js";
10
9
  import "../chunk-WEHSQBFR.js";
10
+ import "../chunk-X7Y7WX73.js";
11
11
  import "../chunk-BJMBJZ2Y.js";
12
12
  import "../chunk-UKJAGEXH.js";
13
13
  import "../chunk-FP2373TW.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  importSqlite
3
- } from "../chunk-PYHOAXTI.js";
4
- import "../chunk-Z734BLO3.js";
3
+ } from "../chunk-LRGSLV7M.js";
5
4
  import "../chunk-G4IAEX6D.js";
5
+ import "../chunk-Z734BLO3.js";
6
6
  import "../chunk-RL6NEVXT.js";
7
7
  import "../chunk-GCGJW34D.js";
8
8
  import "../chunk-PZ5AY32C.js";
@@ -20,26 +20,26 @@ declare const ExportManifestV1Schema: z.ZodObject<{
20
20
  bytes: number;
21
21
  }>, "many">;
22
22
  }, "strip", z.ZodTypeAny, {
23
- format: "openclaw-engram-export";
23
+ schemaVersion: 1;
24
24
  createdAt: string;
25
- pluginVersion: string;
26
25
  files: {
27
26
  path: string;
28
27
  sha256: string;
29
28
  bytes: number;
30
29
  }[];
31
- schemaVersion: 1;
30
+ format: "openclaw-engram-export";
31
+ pluginVersion: string;
32
32
  includesTranscripts: boolean;
33
33
  }, {
34
- format: "openclaw-engram-export";
34
+ schemaVersion: 1;
35
35
  createdAt: string;
36
- pluginVersion: string;
37
36
  files: {
38
37
  path: string;
39
38
  sha256: string;
40
39
  bytes: number;
41
40
  }[];
42
- schemaVersion: 1;
41
+ format: "openclaw-engram-export";
42
+ pluginVersion: string;
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
- format: "openclaw-engram-export";
78
+ schemaVersion: 1;
79
79
  createdAt: string;
80
- pluginVersion: string;
81
80
  files: {
82
81
  path: string;
83
82
  sha256: string;
84
83
  bytes: number;
85
84
  }[];
86
- schemaVersion: 1;
85
+ format: "openclaw-engram-export";
86
+ pluginVersion: string;
87
87
  includesTranscripts: boolean;
88
88
  }, {
89
- format: "openclaw-engram-export";
89
+ schemaVersion: 1;
90
90
  createdAt: string;
91
- pluginVersion: string;
92
91
  files: {
93
92
  path: string;
94
93
  sha256: string;
95
94
  bytes: number;
96
95
  }[];
97
- schemaVersion: 1;
96
+ format: "openclaw-engram-export";
97
+ pluginVersion: string;
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
- format: "openclaw-engram-export";
112
+ schemaVersion: 1;
113
113
  createdAt: string;
114
- pluginVersion: string;
115
114
  files: {
116
115
  path: string;
117
116
  sha256: string;
118
117
  bytes: number;
119
118
  }[];
120
- schemaVersion: 1;
119
+ format: "openclaw-engram-export";
120
+ pluginVersion: string;
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
- format: "openclaw-engram-export";
129
+ schemaVersion: 1;
130
130
  createdAt: string;
131
- pluginVersion: string;
132
131
  files: {
133
132
  path: string;
134
133
  sha256: string;
135
134
  bytes: number;
136
135
  }[];
137
- schemaVersion: 1;
136
+ format: "openclaw-engram-export";
137
+ pluginVersion: string;
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
- description: string;
323
- id: string;
324
322
  schemaVersion: string;
323
+ id: string;
325
324
  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
- description: string;
344
- id: string;
345
343
  schemaVersion: string;
344
+ id: string;
346
345
  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
- description: string;
474
- id: string;
475
473
  schemaVersion: string;
474
+ id: string;
476
475
  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
- description: string;
495
- id: string;
496
494
  schemaVersion: string;
495
+ id: string;
497
496
  version: string;
497
+ description: string;
498
498
  parentCapsule: string | null;
499
499
  retrievalPolicy: {
500
500
  tierWeights: Record<string, number>;
@@ -507,14 +507,16 @@ declare const ExportManifestV2Schema: z.ZodObject<{
507
507
  } | null | undefined;
508
508
  }>;
509
509
  }, "strip", z.ZodTypeAny, {
510
- format: "openclaw-engram-export";
510
+ schemaVersion: 2;
511
511
  createdAt: string;
512
- pluginVersion: string;
513
512
  files: {
514
513
  path: string;
515
514
  sha256: string;
516
515
  bytes: number;
517
516
  }[];
517
+ format: "openclaw-engram-export";
518
+ pluginVersion: string;
519
+ includesTranscripts: boolean;
518
520
  capsule: {
519
521
  includes: {
520
522
  procedural: boolean;
@@ -522,10 +524,10 @@ declare const ExportManifestV2Schema: z.ZodObject<{
522
524
  identityAnchors: boolean;
523
525
  peerProfiles: boolean;
524
526
  };
525
- description: string;
526
- id: string;
527
527
  schemaVersion: string;
528
+ id: string;
528
529
  version: string;
530
+ description: string;
529
531
  parentCapsule: string | null;
530
532
  parent: {
531
533
  version: string;
@@ -537,17 +539,17 @@ declare const ExportManifestV2Schema: z.ZodObject<{
537
539
  directAnswerEnabled: boolean;
538
540
  };
539
541
  };
540
- schemaVersion: 2;
541
- includesTranscripts: boolean;
542
542
  }, {
543
- format: "openclaw-engram-export";
543
+ schemaVersion: 2;
544
544
  createdAt: string;
545
- pluginVersion: string;
546
545
  files: {
547
546
  path: string;
548
547
  sha256: string;
549
548
  bytes: number;
550
549
  }[];
550
+ format: "openclaw-engram-export";
551
+ pluginVersion: string;
552
+ includesTranscripts: boolean;
551
553
  capsule: {
552
554
  includes: {
553
555
  procedural: boolean;
@@ -555,10 +557,10 @@ declare const ExportManifestV2Schema: z.ZodObject<{
555
557
  identityAnchors: boolean;
556
558
  peerProfiles: boolean;
557
559
  };
558
- description: string;
559
- id: string;
560
560
  schemaVersion: string;
561
+ id: string;
561
562
  version: string;
563
+ description: string;
562
564
  parentCapsule: string | null;
563
565
  retrievalPolicy: {
564
566
  tierWeights: Record<string, number>;
@@ -570,8 +572,6 @@ declare const ExportManifestV2Schema: z.ZodObject<{
570
572
  forkRoot: string;
571
573
  } | null | undefined;
572
574
  };
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
- description: string;
693
- id: string;
694
692
  schemaVersion: string;
693
+ id: string;
695
694
  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
- description: string;
714
- id: string;
715
713
  schemaVersion: string;
714
+ id: string;
716
715
  version: string;
716
+ description: string;
717
717
  parentCapsule: string | null;
718
718
  retrievalPolicy: {
719
719
  tierWeights: Record<string, number>;
@@ -726,14 +726,16 @@ declare const ExportBundleV2Schema: z.ZodObject<{
726
726
  } | null | undefined;
727
727
  }>;
728
728
  }, "strip", z.ZodTypeAny, {
729
- format: "openclaw-engram-export";
729
+ schemaVersion: 2;
730
730
  createdAt: string;
731
- pluginVersion: string;
732
731
  files: {
733
732
  path: string;
734
733
  sha256: string;
735
734
  bytes: number;
736
735
  }[];
736
+ format: "openclaw-engram-export";
737
+ pluginVersion: string;
738
+ includesTranscripts: boolean;
737
739
  capsule: {
738
740
  includes: {
739
741
  procedural: boolean;
@@ -741,10 +743,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
741
743
  identityAnchors: boolean;
742
744
  peerProfiles: boolean;
743
745
  };
744
- description: string;
745
- id: string;
746
746
  schemaVersion: string;
747
+ id: string;
747
748
  version: string;
749
+ description: string;
748
750
  parentCapsule: string | null;
749
751
  parent: {
750
752
  version: string;
@@ -756,17 +758,17 @@ declare const ExportBundleV2Schema: z.ZodObject<{
756
758
  directAnswerEnabled: boolean;
757
759
  };
758
760
  };
759
- schemaVersion: 2;
760
- includesTranscripts: boolean;
761
761
  }, {
762
- format: "openclaw-engram-export";
762
+ schemaVersion: 2;
763
763
  createdAt: string;
764
- pluginVersion: string;
765
764
  files: {
766
765
  path: string;
767
766
  sha256: string;
768
767
  bytes: number;
769
768
  }[];
769
+ format: "openclaw-engram-export";
770
+ pluginVersion: string;
771
+ includesTranscripts: boolean;
770
772
  capsule: {
771
773
  includes: {
772
774
  procedural: boolean;
@@ -774,10 +776,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
774
776
  identityAnchors: boolean;
775
777
  peerProfiles: boolean;
776
778
  };
777
- description: string;
778
- id: string;
779
779
  schemaVersion: string;
780
+ id: string;
780
781
  version: string;
782
+ description: string;
781
783
  parentCapsule: string | null;
782
784
  retrievalPolicy: {
783
785
  tierWeights: Record<string, number>;
@@ -789,8 +791,6 @@ declare const ExportBundleV2Schema: z.ZodObject<{
789
791
  forkRoot: string;
790
792
  } | null | undefined;
791
793
  };
792
- schemaVersion: 2;
793
- includesTranscripts: boolean;
794
794
  }>;
795
795
  records: z.ZodArray<z.ZodObject<{
796
796
  path: z.ZodString;
@@ -804,14 +804,16 @@ declare const ExportBundleV2Schema: z.ZodObject<{
804
804
  }>, "many">;
805
805
  }, "strip", z.ZodTypeAny, {
806
806
  manifest: {
807
- format: "openclaw-engram-export";
807
+ schemaVersion: 2;
808
808
  createdAt: string;
809
- pluginVersion: string;
810
809
  files: {
811
810
  path: string;
812
811
  sha256: string;
813
812
  bytes: number;
814
813
  }[];
814
+ format: "openclaw-engram-export";
815
+ pluginVersion: string;
816
+ includesTranscripts: boolean;
815
817
  capsule: {
816
818
  includes: {
817
819
  procedural: boolean;
@@ -819,10 +821,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
819
821
  identityAnchors: boolean;
820
822
  peerProfiles: boolean;
821
823
  };
822
- description: string;
823
- id: string;
824
824
  schemaVersion: string;
825
+ id: string;
825
826
  version: string;
827
+ description: string;
826
828
  parentCapsule: string | null;
827
829
  parent: {
828
830
  version: string;
@@ -834,8 +836,6 @@ declare const ExportBundleV2Schema: z.ZodObject<{
834
836
  directAnswerEnabled: boolean;
835
837
  };
836
838
  };
837
- schemaVersion: 2;
838
- includesTranscripts: boolean;
839
839
  };
840
840
  records: {
841
841
  content: string;
@@ -843,14 +843,16 @@ declare const ExportBundleV2Schema: z.ZodObject<{
843
843
  }[];
844
844
  }, {
845
845
  manifest: {
846
- format: "openclaw-engram-export";
846
+ schemaVersion: 2;
847
847
  createdAt: string;
848
- pluginVersion: string;
849
848
  files: {
850
849
  path: string;
851
850
  sha256: string;
852
851
  bytes: number;
853
852
  }[];
853
+ format: "openclaw-engram-export";
854
+ pluginVersion: string;
855
+ includesTranscripts: boolean;
854
856
  capsule: {
855
857
  includes: {
856
858
  procedural: boolean;
@@ -858,10 +860,10 @@ declare const ExportBundleV2Schema: z.ZodObject<{
858
860
  identityAnchors: boolean;
859
861
  peerProfiles: boolean;
860
862
  };
861
- description: string;
862
- id: string;
863
863
  schemaVersion: string;
864
+ id: string;
864
865
  version: string;
866
+ description: string;
865
867
  parentCapsule: string | null;
866
868
  retrievalPolicy: {
867
869
  tierWeights: Record<string, number>;
@@ -873,8 +875,6 @@ declare const ExportBundleV2Schema: z.ZodObject<{
873
875
  forkRoot: string;
874
876
  } | null | undefined;
875
877
  };
876
- schemaVersion: 2;
877
- includesTranscripts: boolean;
878
878
  };
879
879
  records: {
880
880
  content: string;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-W2OST2HH.js";
4
+ } from "./chunk-QLOOCKKE.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
- import "./chunk-7HZMTXXB.js";
6
+ import "./chunk-RWSLO24I.js";
7
7
  import "./chunk-B3ABVQ36.js";
8
8
  import "./chunk-2QMKMVHH.js";
9
9
  import "./chunk-DEBHXHJR.js";
@@ -12,14 +12,14 @@ import "./chunk-6CIAGZ6X.js";
12
12
  import "./chunk-J6A3CX5N.js";
13
13
  import "./chunk-V57NLO5P.js";
14
14
  import "./chunk-YVKF3HEW.js";
15
- import "./chunk-AVPXXV6J.js";
15
+ import "./chunk-XKGPIWGI.js";
16
16
  import "./chunk-EGGE52UU.js";
17
17
  import "./chunk-GCASGYIO.js";
18
18
  import "./chunk-WL5EBRDH.js";
19
+ import "./chunk-ILGC6JH6.js";
19
20
  import "./chunk-SCU65EZI.js";
20
21
  import "./chunk-347WD2LE.js";
21
22
  import "./chunk-RL6NEVXT.js";
22
- import "./chunk-ILGC6JH6.js";
23
23
  import "./chunk-DM2T26WE.js";
24
24
  import "./chunk-LDXUBPMO.js";
25
25
  import "./chunk-CGASUJVP.js";
@@ -41,8 +41,8 @@ import "./chunk-45GF7Y3V.js";
41
41
  import "./chunk-RGMVMVMF.js";
42
42
  import "./chunk-N7RWREIQ.js";
43
43
  import "./chunk-5I4M26Q7.js";
44
- import "./chunk-5GKPFL3S.js";
45
44
  import "./chunk-4DJQYKMN.js";
45
+ import "./chunk-5GKPFL3S.js";
46
46
  import "./chunk-PQVCH2AE.js";
47
47
  import "./chunk-EYIEWJNI.js";
48
48
  import "./chunk-JUC24CTX.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.14.0",
3
+ "version": "9.15.1",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3045,7 +3045,7 @@
3045
3045
  "core"
3046
3046
  ],
3047
3047
  "peerDependencies": {
3048
- "@remnic/coding-graph": "^9.14.0"
3048
+ "@remnic/coding-graph": "^9.15.1"
3049
3049
  },
3050
3050
  "peerDependenciesMeta": {
3051
3051
  "@remnic/coding-graph": {
@@ -2727,6 +2727,10 @@ test("HTTP namespace/writable preflight returns the structured writability resul
2727
2727
  // is a valid 200 answer (read via `ok`), not an HTTP error.
2728
2728
  const service = {
2729
2729
  configRef: parseConfig({ memoryDir: "/tmp/remnic-http-preflight-test", defaultNamespace: "default" }),
2730
+ namespaceWritablePreflight: async ({ namespace }: { namespace?: string }) =>
2731
+ namespace && namespace !== "default"
2732
+ ? { ok: false as const, reason: "not_writable" as const, namespace }
2733
+ : { ok: true as const, namespace: "default" },
2730
2734
  } as unknown as EngramAccessService;
2731
2735
  const server = new EngramAccessHttpServer({
2732
2736
  service,
@@ -2757,9 +2761,90 @@ test("HTTP namespace/writable preflight returns the structured writability resul
2757
2761
  }
2758
2762
  });
2759
2763
 
2764
+ test("HTTP namespace/writable forwards project context to the scoped write preflight", async () => {
2765
+ let received:
2766
+ | {
2767
+ namespace?: string;
2768
+ sessionKey?: string;
2769
+ projectTag?: string;
2770
+ cwd?: string;
2771
+ }
2772
+ | undefined;
2773
+ const service = {
2774
+ configRef: parseConfig({ memoryDir: "/tmp/remnic-http-preflight-context", defaultNamespace: "default" }),
2775
+ namespaceWritablePreflight: async (request: {
2776
+ namespace?: string;
2777
+ sessionKey?: string;
2778
+ projectTag?: string;
2779
+ cwd?: string;
2780
+ }) => {
2781
+ received = request;
2782
+ return { ok: true as const, namespace: "derived-project-namespace" };
2783
+ },
2784
+ } as unknown as EngramAccessService;
2785
+ const server = new EngramAccessHttpServer({
2786
+ service,
2787
+ port: 0,
2788
+ authToken: "test-token",
2789
+ adminConsoleEnabled: false,
2790
+ });
2791
+
2792
+ const status = await server.start();
2793
+ try {
2794
+ const response = await fetch(
2795
+ `http://127.0.0.1:${status.port}/engram/v1/namespace/writable?session=s-1&projectTag=Acme%2FWebshop&cwd=%2Ftmp%2Frepo`,
2796
+ { headers: { authorization: "Bearer test-token" } },
2797
+ );
2798
+ assert.deepEqual(await response.json(), { ok: true, namespace: "derived-project-namespace" });
2799
+ assert.deepEqual(received, {
2800
+ namespace: undefined,
2801
+ sessionKey: "s-1",
2802
+ authenticatedPrincipal: undefined,
2803
+ projectTag: "Acme/Webshop",
2804
+ cwd: "/tmp/repo",
2805
+ });
2806
+ } finally {
2807
+ await server.stop();
2808
+ }
2809
+ });
2810
+
2811
+ test("HTTP namespace/writable checks token scope against the effective scoped namespace", async () => {
2812
+ const service = {
2813
+ configRef: parseConfig({ memoryDir: "/tmp/remnic-http-preflight-effective", defaultNamespace: "default" }),
2814
+ namespaceWritablePreflight: async () => ({
2815
+ ok: true as const,
2816
+ namespace: "principal-project-derived",
2817
+ }),
2818
+ } as unknown as EngramAccessService;
2819
+ const server = new EngramAccessHttpServer({
2820
+ service,
2821
+ port: 0,
2822
+ authTokenEntriesGetter: () => [
2823
+ { token: "default-only", capabilities: { version: 1, ops: ["observe"], namespaces: ["default"] } },
2824
+ ],
2825
+ adminConsoleEnabled: false,
2826
+ });
2827
+
2828
+ const status = await server.start();
2829
+ try {
2830
+ const response = await fetch(
2831
+ `http://127.0.0.1:${status.port}/engram/v1/namespace/writable?session=s-1&projectTag=Acme%2FWebshop`,
2832
+ { headers: { authorization: "Bearer default-only" } },
2833
+ );
2834
+ assert.deepEqual(await response.json(), {
2835
+ ok: false,
2836
+ reason: "not_writable",
2837
+ namespace: "principal-project-derived",
2838
+ });
2839
+ } finally {
2840
+ await server.stop();
2841
+ }
2842
+ });
2843
+
2760
2844
  test("HTTP namespace/writable preflight admits write-scoped tokens and rejects read-only ops", async () => {
2761
2845
  const service = {
2762
2846
  configRef: parseConfig({ memoryDir: "/tmp/remnic-http-preflight-ops-test", defaultNamespace: "default" }),
2847
+ namespaceWritablePreflight: async () => ({ ok: true as const, namespace: "default" }),
2763
2848
  } as unknown as EngramAccessService;
2764
2849
  const server = new EngramAccessHttpServer({
2765
2850
  service,
@@ -2800,6 +2885,12 @@ test("HTTP namespace/writable preflight admits write-scoped tokens and rejects r
2800
2885
  assert.equal(await okOf(diag), false);
2801
2886
  // A read-only token cannot write, so it has nothing to preflight → 403.
2802
2887
  assert.equal((await request("read-only")).status, 403);
2888
+ const invalidOp = await request("write-scoped", "memory_stroe");
2889
+ assert.equal(invalidOp.status, 400);
2890
+ assert.match(
2891
+ JSON.stringify(await invalidOp.json()),
2892
+ /unsupported namespace preflight operation: memory_stroe/,
2893
+ );
2803
2894
  } finally {
2804
2895
  await server.stop();
2805
2896
  }
@@ -37,7 +37,7 @@ import {
37
37
  import { expandTildePath } from "./utils/path.js";
38
38
  import { projectTagProjectId } from "./coding/coding-namespace.js";
39
39
  import { getOperation, type OperationName } from "./access-boundary.js";
40
- import { resolveNamespacePreflight } from "./scopes/scope-plan.js";
40
+ import { resolveQueryNamespaceWritablePreflight } from "./access-namespace-preflight.js";
41
41
  import {
42
42
  assertOperationAllowed,
43
43
  capabilityAllowsOp,
@@ -1467,20 +1467,19 @@ export class EngramAccessHttpServer {
1467
1467
  return;
1468
1468
  }
1469
1469
 
1470
- // Namespace-writability preflight (issue #1888 part 3): would the client's
1471
- // enabled write (`?op=observe|memory_store`, default observe) to the
1472
- // requested namespace by THIS token succeed? Out-of-allow-list → 200
1473
- // {ok:false}; any allowedByOps token may run it (HTTP + batch admit alike).
1474
1470
  if (req.method === "GET" && pathname === "/engram/v1/namespace/writable") {
1475
- const preflightOp = getOperation("namespace_writable"); // boundary marker (catalog parity, issue #1888)
1476
- const caps = tokenCapabilityStore.getStore();
1477
- if (!(preflightOp?.spec.allowedByOps ?? []).some((op) => capabilityAllowsOp(caps, op))) {
1478
- throw new EngramAccessForbiddenError("token is not permitted to run the namespace preflight");
1479
- }
1480
- const ns = parsed.searchParams.get("namespace") || undefined;
1481
- const sk = parsed.searchParams.get("session") || undefined;
1482
- const writeOp = parsed.searchParams.get("op") === "memory_store" ? "memory_store" : "observe";
1483
- this.respondJson(res, 200, resolveNamespacePreflight(caps, ns, sk, this.resolveRequestPrincipal(req), this.service.configRef, writeOp));
1471
+ if (!getOperation("namespace_writable")) throw new Error("namespace_writable operation is not registered");
1472
+ this.respondJson(
1473
+ res,
1474
+ 200,
1475
+ await resolveQueryNamespaceWritablePreflight(
1476
+ tokenCapabilityStore.getStore(),
1477
+ parsed.searchParams,
1478
+ this.resolveRequestPrincipal(req),
1479
+ this.service.configRef.defaultNamespace,
1480
+ (request) => this.service.namespaceWritablePreflight(request),
1481
+ ),
1482
+ );
1484
1483
  return;
1485
1484
  }
1486
1485