@remnic/core 9.3.761 → 9.3.763

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 (134) hide show
  1. package/dist/access-admin-ops-surface.js +10 -9
  2. package/dist/access-boundary.js +11 -10
  3. package/dist/access-cli.js +45 -44
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.js +17 -16
  6. package/dist/access-identity-continuity-surface.js +10 -9
  7. package/dist/access-lcm-surface.js +10 -9
  8. package/dist/access-mcp.js +14 -13
  9. package/dist/access-observe-write-surface.js +10 -9
  10. package/dist/access-operations-batch.js +12 -11
  11. package/dist/access-operations.js +13 -12
  12. package/dist/access-recall-surface.js +10 -9
  13. package/dist/access-service.js +10 -9
  14. package/dist/adapters/index.js +4 -4
  15. package/dist/adapters/registry.js +2 -2
  16. package/dist/briefing.js +5 -4
  17. package/dist/causal-consolidation.js +6 -5
  18. package/dist/causal-consolidation.js.map +1 -1
  19. package/dist/{chunk-742MWWVL.js → chunk-2RLECZ6J.js} +2 -2
  20. package/dist/{chunk-CFHDI5CV.js → chunk-6YEENRE3.js} +4 -4
  21. package/dist/{chunk-JYH3XYWM.js → chunk-6ZFE2TPO.js} +3 -3
  22. package/dist/{chunk-LG2MCUBC.js → chunk-A4FMQIST.js} +2 -2
  23. package/dist/{chunk-APJQ6UEA.js → chunk-AGNBY3VG.js} +4 -4
  24. package/dist/{chunk-OCPVA4TH.js → chunk-AS2NRB45.js} +2 -2
  25. package/dist/{chunk-W4ADKEIY.js → chunk-BAF7MBEH.js} +22 -22
  26. package/dist/{chunk-ICVNVSKN.js → chunk-BRYPUVJU.js} +2 -2
  27. package/dist/{chunk-IV4INTAU.js → chunk-CVINPTKG.js} +2 -2
  28. package/dist/{chunk-IRFHFRHP.js → chunk-D6YTILJO.js} +25 -25
  29. package/dist/chunk-DQC3ZZYM.js +35 -0
  30. package/dist/chunk-DQC3ZZYM.js.map +1 -0
  31. package/dist/{chunk-3DAIQSVS.js → chunk-DTTVX6EO.js} +23 -8
  32. package/dist/chunk-DTTVX6EO.js.map +1 -0
  33. package/dist/{chunk-P7UA66OG.js → chunk-IVFIYAIP.js} +2 -2
  34. package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
  35. package/dist/{chunk-Y3XEN5TL.js → chunk-K4EDULCP.js} +3 -3
  36. package/dist/{chunk-P7N2DQLC.js → chunk-KXG7HHIQ.js} +3 -3
  37. package/dist/{chunk-4WOXD56B.js → chunk-LDCFFJ67.js} +5 -5
  38. package/dist/{chunk-5AZQZFJG.js → chunk-N3QDLE2N.js} +5 -5
  39. package/dist/{chunk-2B3BTQN4.js → chunk-N4ZA2I7M.js} +2 -2
  40. package/dist/chunk-NDXJJKT2.js +118 -0
  41. package/dist/chunk-NDXJJKT2.js.map +1 -0
  42. package/dist/{chunk-HP23UD6W.js → chunk-NFWTMM2M.js} +2 -2
  43. package/dist/{chunk-3QLPBCFG.js → chunk-NKP6II6G.js} +4 -4
  44. package/dist/{chunk-HHCMZEUC.js → chunk-OX272PBW.js} +2 -2
  45. package/dist/{chunk-YU4CLTZY.js → chunk-QPTP6SKC.js} +2 -2
  46. package/dist/{chunk-6S2C5FQ4.js → chunk-R3K4CXPR.js} +2 -2
  47. package/dist/{chunk-XDFWMY4X.js → chunk-SFNQDXXL.js} +108 -14
  48. package/dist/chunk-SFNQDXXL.js.map +1 -0
  49. package/dist/{chunk-MB5RSUW6.js → chunk-SXN3LCUT.js} +114 -28
  50. package/dist/chunk-SXN3LCUT.js.map +1 -0
  51. package/dist/{chunk-3CBSKDRL.js → chunk-TIOXQPD7.js} +9 -9
  52. package/dist/{chunk-CXW6Y7SI.js → chunk-V5RVMULT.js} +4 -4
  53. package/dist/{chunk-DUU4VLOW.js → chunk-VKHZFF5P.js} +2 -2
  54. package/dist/{chunk-NPZTEHR7.js → chunk-X7HTU4HO.js} +2 -2
  55. package/dist/{chunk-ZAIU7ZEA.js → chunk-YDYC6PIS.js} +2 -2
  56. package/dist/cli.js +34 -33
  57. package/dist/compounding/engine.js +5 -4
  58. package/dist/connectors/codex-materialize-runner.js +5 -4
  59. package/dist/connectors/index.js +5 -4
  60. package/dist/entity-retrieval.js +5 -4
  61. package/dist/{forget-OEE5OELK.js → forget-WYLR4ZFV.js} +2 -2
  62. package/dist/index.js +47 -46
  63. package/dist/lcm/engine.js +2 -2
  64. package/dist/lcm/index.js +4 -4
  65. package/dist/maintenance/memory-governance.js +5 -4
  66. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +11 -1
  67. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +5 -4
  68. package/dist/maintenance/rebuild-memory-projection.d.ts +22 -1
  69. package/dist/maintenance/rebuild-memory-projection.js +6 -5
  70. package/dist/memory-projection-store.d.ts +6 -2
  71. package/dist/memory-projection-store.js +9 -3
  72. package/dist/namespaces/migrate.js +9 -8
  73. package/dist/namespaces/search.js +3 -3
  74. package/dist/namespaces/storage.js +5 -4
  75. package/dist/operator-toolkit.js +12 -11
  76. package/dist/orchestration/maintenance.js +7 -6
  77. package/dist/orchestrator.js +45 -44
  78. package/dist/{purge-6ATBGT77.js → purge-IHRX4Z7X.js} +7 -1
  79. package/dist/purge-IHRX4Z7X.js.map +1 -0
  80. package/dist/schemas.d.ts +22 -22
  81. package/dist/search/factory.js +2 -2
  82. package/dist/search/index.js +4 -4
  83. package/dist/semantic-consolidation.js +6 -5
  84. package/dist/semantic-rule-promotion.js +5 -4
  85. package/dist/semantic-rule-verifier.js +5 -4
  86. package/dist/storage-guards.d.ts +9 -0
  87. package/dist/storage-guards.js +11 -0
  88. package/dist/storage-guards.js.map +1 -0
  89. package/dist/storage.js +4 -3
  90. package/dist/transfer/import-sqlite.js +2 -2
  91. package/dist/transfer/types.d.ts +12 -12
  92. package/dist/verified-recall.js +5 -4
  93. package/package.json +2 -2
  94. package/src/maintenance/purge.test.ts +76 -0
  95. package/src/maintenance/purge.ts +3 -0
  96. package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +59 -8
  97. package/src/maintenance/rebuild-memory-projection.ts +154 -10
  98. package/src/memory-projection-store.ts +143 -35
  99. package/src/storage-guards.ts +30 -0
  100. package/src/storage.ts +16 -16
  101. package/dist/chunk-3DAIQSVS.js.map +0 -1
  102. package/dist/chunk-GYJESQS5.js +0 -77
  103. package/dist/chunk-GYJESQS5.js.map +0 -1
  104. package/dist/chunk-MB5RSUW6.js.map +0 -1
  105. package/dist/chunk-XDFWMY4X.js.map +0 -1
  106. package/dist/purge-6ATBGT77.js.map +0 -1
  107. /package/dist/{chunk-742MWWVL.js.map → chunk-2RLECZ6J.js.map} +0 -0
  108. /package/dist/{chunk-CFHDI5CV.js.map → chunk-6YEENRE3.js.map} +0 -0
  109. /package/dist/{chunk-JYH3XYWM.js.map → chunk-6ZFE2TPO.js.map} +0 -0
  110. /package/dist/{chunk-LG2MCUBC.js.map → chunk-A4FMQIST.js.map} +0 -0
  111. /package/dist/{chunk-APJQ6UEA.js.map → chunk-AGNBY3VG.js.map} +0 -0
  112. /package/dist/{chunk-OCPVA4TH.js.map → chunk-AS2NRB45.js.map} +0 -0
  113. /package/dist/{chunk-W4ADKEIY.js.map → chunk-BAF7MBEH.js.map} +0 -0
  114. /package/dist/{chunk-ICVNVSKN.js.map → chunk-BRYPUVJU.js.map} +0 -0
  115. /package/dist/{chunk-IV4INTAU.js.map → chunk-CVINPTKG.js.map} +0 -0
  116. /package/dist/{chunk-IRFHFRHP.js.map → chunk-D6YTILJO.js.map} +0 -0
  117. /package/dist/{chunk-P7UA66OG.js.map → chunk-IVFIYAIP.js.map} +0 -0
  118. /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
  119. /package/dist/{chunk-Y3XEN5TL.js.map → chunk-K4EDULCP.js.map} +0 -0
  120. /package/dist/{chunk-P7N2DQLC.js.map → chunk-KXG7HHIQ.js.map} +0 -0
  121. /package/dist/{chunk-4WOXD56B.js.map → chunk-LDCFFJ67.js.map} +0 -0
  122. /package/dist/{chunk-5AZQZFJG.js.map → chunk-N3QDLE2N.js.map} +0 -0
  123. /package/dist/{chunk-2B3BTQN4.js.map → chunk-N4ZA2I7M.js.map} +0 -0
  124. /package/dist/{chunk-HP23UD6W.js.map → chunk-NFWTMM2M.js.map} +0 -0
  125. /package/dist/{chunk-3QLPBCFG.js.map → chunk-NKP6II6G.js.map} +0 -0
  126. /package/dist/{chunk-HHCMZEUC.js.map → chunk-OX272PBW.js.map} +0 -0
  127. /package/dist/{chunk-YU4CLTZY.js.map → chunk-QPTP6SKC.js.map} +0 -0
  128. /package/dist/{chunk-6S2C5FQ4.js.map → chunk-R3K4CXPR.js.map} +0 -0
  129. /package/dist/{chunk-3CBSKDRL.js.map → chunk-TIOXQPD7.js.map} +0 -0
  130. /package/dist/{chunk-CXW6Y7SI.js.map → chunk-V5RVMULT.js.map} +0 -0
  131. /package/dist/{chunk-DUU4VLOW.js.map → chunk-VKHZFF5P.js.map} +0 -0
  132. /package/dist/{chunk-NPZTEHR7.js.map → chunk-X7HTU4HO.js.map} +0 -0
  133. /package/dist/{chunk-ZAIU7ZEA.js.map → chunk-YDYC6PIS.js.map} +0 -0
  134. /package/dist/{forget-OEE5OELK.js.map → forget-WYLR4ZFV.js.map} +0 -0
@@ -0,0 +1,35 @@
1
+ import {
2
+ log
3
+ } from "./chunk-NU3CSQ4H.js";
4
+
5
+ // src/storage-guards.ts
6
+ var PROJECTION_FALLBACK_WARN_INTERVAL_MS = 5 * 6e4;
7
+ var projectionFallbackWarnedAt = /* @__PURE__ */ new Map();
8
+ function assertMemoryFrontmatterId(fm) {
9
+ if (typeof fm.id !== "string" || fm.id.trim().length === 0) {
10
+ const context = [
11
+ fm.category ? `category=${fm.category}` : null,
12
+ fm.created ? `created=${fm.created}` : null,
13
+ fm.entityRef ? `entityRef=${fm.entityRef}` : null
14
+ ].filter(Boolean).join(" ");
15
+ throw new Error(
16
+ `memory frontmatter id must not be blank${context ? ` (${context})` : ""}`
17
+ );
18
+ }
19
+ }
20
+ function warnProjectionFallback(memoryDir, consumer) {
21
+ const key = `${memoryDir}\0${consumer}`;
22
+ const now = Date.now();
23
+ const warnedAt = projectionFallbackWarnedAt.get(key) ?? 0;
24
+ if (now - warnedAt >= PROJECTION_FALLBACK_WARN_INTERVAL_MS) {
25
+ projectionFallbackWarnedAt.set(key, now);
26
+ log.warn(`storage.${consumer}: memory projection absent or empty; falling back to full corpus`);
27
+ }
28
+ return null;
29
+ }
30
+
31
+ export {
32
+ assertMemoryFrontmatterId,
33
+ warnProjectionFallback
34
+ };
35
+ //# sourceMappingURL=chunk-DQC3ZZYM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storage-guards.ts"],"sourcesContent":["import { log } from \"./logger.js\";\n\nconst PROJECTION_FALLBACK_WARN_INTERVAL_MS = 5 * 60_000;\nconst projectionFallbackWarnedAt = new Map<string, number>();\n\nexport function assertMemoryFrontmatterId(\n fm: { id: string; category?: string; created?: string; entityRef?: string },\n): void {\n if (typeof fm.id !== \"string\" || fm.id.trim().length === 0) {\n const context = [\n fm.category ? `category=${fm.category}` : null,\n fm.created ? `created=${fm.created}` : null,\n fm.entityRef ? `entityRef=${fm.entityRef}` : null,\n ].filter(Boolean).join(\" \");\n throw new Error(\n `memory frontmatter id must not be blank${context ? ` (${context})` : \"\"}`,\n );\n }\n}\n\nexport function warnProjectionFallback(memoryDir: string, consumer: string): null {\n const key = `${memoryDir}\\0${consumer}`;\n const now = Date.now();\n const warnedAt = projectionFallbackWarnedAt.get(key) ?? 0;\n if (now - warnedAt >= PROJECTION_FALLBACK_WARN_INTERVAL_MS) {\n projectionFallbackWarnedAt.set(key, now);\n log.warn(`storage.${consumer}: memory projection absent or empty; falling back to full corpus`);\n }\n return null;\n}\n"],"mappings":";;;;;AAEA,IAAM,uCAAuC,IAAI;AACjD,IAAM,6BAA6B,oBAAI,IAAoB;AAEpD,SAAS,0BACd,IACM;AACN,MAAI,OAAO,GAAG,OAAO,YAAY,GAAG,GAAG,KAAK,EAAE,WAAW,GAAG;AAC1D,UAAM,UAAU;AAAA,MACd,GAAG,WAAW,YAAY,GAAG,QAAQ,KAAK;AAAA,MAC1C,GAAG,UAAU,WAAW,GAAG,OAAO,KAAK;AAAA,MACvC,GAAG,YAAY,aAAa,GAAG,SAAS,KAAK;AAAA,IAC/C,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC1B,UAAM,IAAI;AAAA,MACR,0CAA0C,UAAU,KAAK,OAAO,MAAM,EAAE;AAAA,IAC1E;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB,WAAmB,UAAwB;AAChF,QAAM,MAAM,GAAG,SAAS,KAAK,QAAQ;AACrC,QAAM,MAAM,KAAK,IAAI;AACrB,QAAM,WAAW,2BAA2B,IAAI,GAAG,KAAK;AACxD,MAAI,MAAM,YAAY,sCAAsC;AAC1D,+BAA2B,IAAI,KAAK,GAAG;AACvC,QAAI,KAAK,WAAW,QAAQ,kEAAkE;AAAA,EAChG;AACA,SAAO;AACT;","names":[]}
@@ -21,6 +21,10 @@ import {
21
21
  hasCitation,
22
22
  stripCitationForTemplate
23
23
  } from "./chunk-J6A3CX5N.js";
24
+ import {
25
+ assertMemoryFrontmatterId,
26
+ warnProjectionFallback
27
+ } from "./chunk-DQC3ZZYM.js";
24
28
  import {
25
29
  stripAttributesSuffix
26
30
  } from "./chunk-SVOZFLIQ.js";
@@ -44,11 +48,13 @@ import {
44
48
  normalizeProjectionTags
45
49
  } from "./chunk-SCU65EZI.js";
46
50
  import {
51
+ markProjectedMemoryPathInvalid,
47
52
  readProjectedGovernanceRecord,
48
53
  readProjectedMemoryBrowse,
49
54
  readProjectedMemoryState,
50
- readProjectedMemoryTimeline
51
- } from "./chunk-MB5RSUW6.js";
55
+ readProjectedMemoryTimeline,
56
+ updateProjectedMemoryPath
57
+ } from "./chunk-SXN3LCUT.js";
52
58
  import {
53
59
  rotateMarkdownFileToArchive
54
60
  } from "./chunk-DM2T26WE.js";
@@ -1389,6 +1395,7 @@ function stripCitationMarkersForHashRemoval(value, template) {
1389
1395
  return removed ? trimLeadingSpacesAndTabs(result) : value;
1390
1396
  }
1391
1397
  function serializeFrontmatter(fm) {
1398
+ assertMemoryFrontmatterId(fm);
1392
1399
  const lines = [
1393
1400
  "---",
1394
1401
  `id: ${fm.id}`,
@@ -4617,6 +4624,7 @@ ${memory.content}
4617
4624
  }
4618
4625
  }
4619
4626
  this.invalidateAllMemoriesCache();
4627
+ updateProjectedMemoryPath(this.baseDir, memory.frontmatter.id, toMemoryPathRel(this.baseDir, targetPath));
4620
4628
  }
4621
4629
  }
4622
4630
  async migrateMemoryToTier(memory, targetTier) {
@@ -4636,6 +4644,7 @@ ${memory.content}
4636
4644
  throw err;
4637
4645
  }
4638
4646
  }
4647
+ updateProjectedMemoryPath(this.baseDir, memory.frontmatter.id, toMemoryPathRel(this.baseDir, targetPath));
4639
4648
  this.bumpMemoryStatusVersion();
4640
4649
  return { changed: false, targetPath };
4641
4650
  }
@@ -4674,6 +4683,7 @@ ${memory.content}
4674
4683
  const destPath = path4.join(destDir, path4.basename(memory.path));
4675
4684
  await this.writeStorageSecureFile(destPath, fileContent);
4676
4685
  await unlink2(memory.path);
4686
+ markProjectedMemoryPathInvalid(this.baseDir, memory.frontmatter.id);
4677
4687
  this.invalidateAllMemoriesCache();
4678
4688
  await this.appendGeneratedMemoryLifecycleEventFailOpen(
4679
4689
  "storage.archiveMemory",
@@ -4755,6 +4765,7 @@ ${memory.content}
4755
4765
  if (!memory) return false;
4756
4766
  try {
4757
4767
  await unlink2(memory.path);
4768
+ markProjectedMemoryPathInvalid(this.baseDir, id);
4758
4769
  this.invalidateAllMemoriesCache();
4759
4770
  this.bumpMemoryStatusVersion();
4760
4771
  log.debug(`invalidated memory ${id}`);
@@ -4878,6 +4889,7 @@ ${memory.content}
4878
4889
  if (expiresAt < now) {
4879
4890
  try {
4880
4891
  await unlink2(m.path);
4892
+ markProjectedMemoryPathInvalid(this.baseDir, m.frontmatter.id);
4881
4893
  deleted.push(m);
4882
4894
  log.debug(`cleaned expired memory ${m.frontmatter.id} (TTL expired)`);
4883
4895
  } catch {
@@ -5693,6 +5705,7 @@ ${reflection}
5693
5705
  if (updatedAt < cutoff) {
5694
5706
  try {
5695
5707
  await unlink2(m.path);
5708
+ markProjectedMemoryPathInvalid(this.baseDir, m.frontmatter.id);
5696
5709
  deleted.push(m);
5697
5710
  log.debug(`cleaned expired commitment ${m.frontmatter.id}`);
5698
5711
  } catch {
@@ -5724,11 +5737,11 @@ ${reflection}
5724
5737
  accessCount: entry.newCount,
5725
5738
  lastAccessed: entry.lastAccessed
5726
5739
  };
5727
- const fileContent = `${serializeFrontmatter(newFm)}
5740
+ try {
5741
+ const fileContent = `${serializeFrontmatter(newFm)}
5728
5742
 
5729
5743
  ${memory.content}
5730
5744
  `;
5731
- try {
5732
5745
  await this.writeStorageSecureFile(memory.path, fileContent);
5733
5746
  updated++;
5734
5747
  } catch (err) {
@@ -5773,6 +5786,7 @@ ${memory.content}
5773
5786
  async getProjectedMemoryState(id) {
5774
5787
  const projected = readProjectedMemoryState(this.baseDir, id);
5775
5788
  if (projected) return projected;
5789
+ warnProjectionFallback(this.baseDir, "getProjectedMemoryState");
5776
5790
  const active = await this.getMemoryById(id);
5777
5791
  if (active) return this.toProjectedCurrentState(active, "active");
5778
5792
  const archived = (await this.readArchivedMemories()).find((memory) => memory.frontmatter.id === id);
@@ -5780,7 +5794,7 @@ ${memory.content}
5780
5794
  return this.toProjectedCurrentState(archived, "archived");
5781
5795
  }
5782
5796
  async browseProjectedMemories(options) {
5783
- return readProjectedMemoryBrowse(this.baseDir, options);
5797
+ return readProjectedMemoryBrowse(this.baseDir, options) ?? warnProjectionFallback(this.baseDir, "browseProjectedMemories");
5784
5798
  }
5785
5799
  async getProjectedGovernanceRecord() {
5786
5800
  return readProjectedGovernanceRecord(this.baseDir);
@@ -5814,6 +5828,7 @@ ${memory.content}
5814
5828
  if (cappedLimit === 0) return [];
5815
5829
  const projected = readProjectedMemoryTimeline(this.baseDir, memoryId, cappedLimit);
5816
5830
  if (projected && projected.length > 0) return projected;
5831
+ warnProjectionFallback(this.baseDir, "getMemoryTimeline");
5817
5832
  const events = await this.readAllMemoryLifecycleEvents();
5818
5833
  return events.filter((event) => event.memoryId === memoryId).slice(-cappedLimit);
5819
5834
  }
@@ -6000,11 +6015,11 @@ Reason: ${reason}`, {
6000
6015
  archivedAt: now,
6001
6016
  updated: now
6002
6017
  };
6003
- const fileContent = `${serializeFrontmatter(updatedFm)}
6018
+ try {
6019
+ const fileContent = `${serializeFrontmatter(updatedFm)}
6004
6020
 
6005
6021
  ${memory.content}
6006
6022
  `;
6007
- try {
6008
6023
  await this.writeStorageSecureFile(memory.path, fileContent);
6009
6024
  await this.appendGeneratedMemoryLifecycleEventFailOpen("storage.archiveMemories", {
6010
6025
  memoryId: id,
@@ -6139,4 +6154,4 @@ export {
6139
6154
  isValidBufferSurpriseEvent,
6140
6155
  StorageManager3 as StorageManager
6141
6156
  };
6142
- //# sourceMappingURL=chunk-3DAIQSVS.js.map
6157
+ //# sourceMappingURL=chunk-DTTVX6EO.js.map