@remnic/core 9.3.621 → 9.3.623

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 (164) hide show
  1. package/dist/access-cli.js +28 -28
  2. package/dist/access-http.js +11 -11
  3. package/dist/access-mcp.js +10 -10
  4. package/dist/access-service.js +9 -9
  5. package/dist/briefing.js +6 -6
  6. package/dist/buffer-surprise.js +3 -3
  7. package/dist/calibration.js +2 -2
  8. package/dist/causal-consolidation.js +10 -10
  9. package/dist/{chunk-GLPBYIXN.js → chunk-2L54V4ZO.js} +3 -3
  10. package/dist/{chunk-PP2JH3GP.js → chunk-2UFQYU5F.js} +2 -2
  11. package/dist/{chunk-XAZOWLW4.js → chunk-3VONWEQB.js} +3 -3
  12. package/dist/{chunk-BF7ZRHH2.js → chunk-66SLUXKM.js} +2 -2
  13. package/dist/{chunk-3HPAPHUK.js → chunk-6KYMPV2O.js} +12 -11
  14. package/dist/chunk-6KYMPV2O.js.map +1 -0
  15. package/dist/{chunk-S53OYO3F.js → chunk-7VFZTJ7K.js} +2 -2
  16. package/dist/{chunk-4RR6ROTB.js → chunk-AGNBY3VG.js} +2 -2
  17. package/dist/{chunk-YEEAADCI.js → chunk-AYHXQR53.js} +2 -2
  18. package/dist/{chunk-IEUU7O4F.js → chunk-BNW5NJJH.js} +2 -2
  19. package/dist/{chunk-6GMPIJAZ.js → chunk-C3IW2F5Z.js} +2 -2
  20. package/dist/{chunk-4EWRLK3C.js → chunk-C4PZTWTG.js} +16 -16
  21. package/dist/{chunk-QVO4YOB7.js → chunk-D2B22JDF.js} +2 -2
  22. package/dist/{chunk-HA5SI4GK.js → chunk-FMGWXIES.js} +4 -4
  23. package/dist/{chunk-B6SU7YSE.js → chunk-GLWW3EJQ.js} +5 -5
  24. package/dist/{chunk-5BTCT236.js → chunk-GYTVOLNX.js} +2 -2
  25. package/dist/{chunk-IMA6GU4Y.js → chunk-H3PHZLMF.js} +3 -3
  26. package/dist/chunk-H3PHZLMF.js.map +1 -0
  27. package/dist/{chunk-TIPYPLLQ.js → chunk-I6UCUHLK.js} +4 -4
  28. package/dist/{chunk-2I2MDQIB.js → chunk-I74SUMNI.js} +2 -2
  29. package/dist/chunk-I74SUMNI.js.map +1 -0
  30. package/dist/{chunk-4H5ZJHEN.js → chunk-J6A3CX5N.js} +8 -3
  31. package/dist/{chunk-4H5ZJHEN.js.map → chunk-J6A3CX5N.js.map} +1 -1
  32. package/dist/{chunk-DEVUWMME.js → chunk-KGIGRNR6.js} +2 -2
  33. package/dist/{chunk-F4QTFIB4.js → chunk-KQFQ3IS5.js} +6 -6
  34. package/dist/{chunk-QSVPYQPG.js → chunk-LDXUBPMO.js} +2 -2
  35. package/dist/chunk-LDXUBPMO.js.map +1 -0
  36. package/dist/{chunk-JFEKNTX7.js → chunk-LN4YGHTM.js} +6 -2
  37. package/dist/chunk-LN4YGHTM.js.map +1 -0
  38. package/dist/{chunk-7XYTQGCC.js → chunk-MAV46GWQ.js} +2 -2
  39. package/dist/{chunk-KILOTVIF.js → chunk-MB5RSUW6.js} +2 -2
  40. package/dist/{chunk-WB3LYXC5.js → chunk-MON3LMO7.js} +3 -3
  41. package/dist/{chunk-APRRL26Q.js → chunk-O4UNM6OR.js} +2 -2
  42. package/dist/{chunk-AZDOWD2L.js → chunk-OZXVGYGZ.js} +2 -2
  43. package/dist/{chunk-WCYKT2DE.js → chunk-P4BC54KI.js} +23 -14
  44. package/dist/chunk-P4BC54KI.js.map +1 -0
  45. package/dist/{chunk-7MLB4NCL.js → chunk-PJGB7XRR.js} +6 -6
  46. package/dist/chunk-PJGB7XRR.js.map +1 -0
  47. package/dist/{chunk-DEPRLVLK.js → chunk-QFQQFX2H.js} +3 -3
  48. package/dist/{chunk-DEPRLVLK.js.map → chunk-QFQQFX2H.js.map} +1 -1
  49. package/dist/{chunk-QPD426WT.js → chunk-R3OQGYOU.js} +2 -2
  50. package/dist/{chunk-UZB5KHKX.js → chunk-RGMVMVMF.js} +2 -2
  51. package/dist/chunk-RGMVMVMF.js.map +1 -0
  52. package/dist/{chunk-O3U5BPUP.js → chunk-RKW6QR7W.js} +23 -19
  53. package/dist/chunk-RKW6QR7W.js.map +1 -0
  54. package/dist/{chunk-C6C7XVKG.js → chunk-UGEBPVNI.js} +3 -3
  55. package/dist/{chunk-4WMCPJWX.js → chunk-UQ7RN5HK.js} +22 -13
  56. package/dist/chunk-UQ7RN5HK.js.map +1 -0
  57. package/dist/{chunk-XQNPGNKK.js → chunk-W3BKVM64.js} +2 -2
  58. package/dist/{chunk-K5O2QY6T.js → chunk-YTWNKQ2G.js} +2 -2
  59. package/dist/chunk-YTWNKQ2G.js.map +1 -0
  60. package/dist/{chunk-2SGJY2UY.js → chunk-Z3CCEP6F.js} +3 -3
  61. package/dist/{chunk-THTIZJZA.js → chunk-ZJSZNTEI.js} +4 -4
  62. package/dist/{chunk-CIOMS6DI.js → chunk-ZZPIJPPD.js} +2 -2
  63. package/dist/chunking.js +1 -1
  64. package/dist/cli.js +23 -23
  65. package/dist/compounding/engine.js +6 -6
  66. package/dist/connectors/codex-materialize-runner.js +7 -7
  67. package/dist/connectors/codex-materialize.js +1 -1
  68. package/dist/connectors/index.js +7 -7
  69. package/dist/contradiction/index.js +2 -2
  70. package/dist/{contradiction-scan-GD7KUFWS.js → contradiction-scan-AZTGFMPY.js} +3 -3
  71. package/dist/entity-retrieval.js +6 -6
  72. package/dist/explicit-capture.js +1 -1
  73. package/dist/extraction-judge.js +3 -3
  74. package/dist/extraction.js +3 -3
  75. package/dist/fallback-llm.js +2 -2
  76. package/dist/identity-continuity.js +1 -1
  77. package/dist/index.js +45 -42
  78. package/dist/index.js.map +1 -1
  79. package/dist/json-extract.js +1 -1
  80. package/dist/lcm/engine.js +3 -3
  81. package/dist/lcm/index.js +3 -3
  82. package/dist/lcm/schema.js +2 -2
  83. package/dist/maintenance/memory-governance.js +6 -6
  84. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +6 -6
  85. package/dist/maintenance/rebuild-memory-projection.js +7 -7
  86. package/dist/memory-projection-store.js +2 -2
  87. package/dist/namespaces/migrate.js +7 -7
  88. package/dist/namespaces/storage.js +6 -6
  89. package/dist/operator-toolkit.js +9 -9
  90. package/dist/orchestrator.js +25 -25
  91. package/dist/peers/index.js +1 -1
  92. package/dist/recall-planner-llm.js +2 -2
  93. package/dist/runtime/better-sqlite.d.ts +2 -1
  94. package/dist/runtime/better-sqlite.js +3 -1
  95. package/dist/schemas.d.ts +22 -22
  96. package/dist/semantic-chunking.js +2 -2
  97. package/dist/semantic-consolidation.js +8 -8
  98. package/dist/semantic-rule-promotion.js +6 -6
  99. package/dist/semantic-rule-verifier.js +6 -6
  100. package/dist/source-attribution.js +1 -1
  101. package/dist/storage.js +5 -5
  102. package/dist/summarizer.js +3 -3
  103. package/dist/temporal-supersession.js +1 -1
  104. package/dist/transfer/export-sqlite.js +2 -2
  105. package/dist/transfer/import-sqlite.js +2 -2
  106. package/dist/transfer/types.d.ts +12 -12
  107. package/dist/verified-recall.js +6 -6
  108. package/package.json +1 -1
  109. package/src/chunking.ts +38 -23
  110. package/src/coding/review-context.ts +7 -1
  111. package/src/connectors/codex-materialize.ts +6 -1
  112. package/src/explicit-capture.ts +7 -2
  113. package/src/identity-continuity.ts +7 -1
  114. package/src/json-extract.ts +4 -1
  115. package/src/orchestrator.ts +5 -1
  116. package/src/peers/profile-reasoner.ts +4 -1
  117. package/src/runtime/better-sqlite.test.ts +29 -0
  118. package/src/runtime/better-sqlite.ts +30 -8
  119. package/src/semantic-chunking.ts +32 -16
  120. package/src/semantic-consolidation.ts +4 -1
  121. package/src/source-attribution.test.ts +21 -0
  122. package/src/source-attribution.ts +17 -2
  123. package/src/storage.ts +11 -2
  124. package/src/temporal-supersession.ts +4 -1
  125. package/dist/chunk-2I2MDQIB.js.map +0 -1
  126. package/dist/chunk-3HPAPHUK.js.map +0 -1
  127. package/dist/chunk-4WMCPJWX.js.map +0 -1
  128. package/dist/chunk-7MLB4NCL.js.map +0 -1
  129. package/dist/chunk-IMA6GU4Y.js.map +0 -1
  130. package/dist/chunk-JFEKNTX7.js.map +0 -1
  131. package/dist/chunk-K5O2QY6T.js.map +0 -1
  132. package/dist/chunk-O3U5BPUP.js.map +0 -1
  133. package/dist/chunk-QSVPYQPG.js.map +0 -1
  134. package/dist/chunk-UZB5KHKX.js.map +0 -1
  135. package/dist/chunk-WCYKT2DE.js.map +0 -1
  136. /package/dist/{chunk-GLPBYIXN.js.map → chunk-2L54V4ZO.js.map} +0 -0
  137. /package/dist/{chunk-PP2JH3GP.js.map → chunk-2UFQYU5F.js.map} +0 -0
  138. /package/dist/{chunk-XAZOWLW4.js.map → chunk-3VONWEQB.js.map} +0 -0
  139. /package/dist/{chunk-BF7ZRHH2.js.map → chunk-66SLUXKM.js.map} +0 -0
  140. /package/dist/{chunk-S53OYO3F.js.map → chunk-7VFZTJ7K.js.map} +0 -0
  141. /package/dist/{chunk-4RR6ROTB.js.map → chunk-AGNBY3VG.js.map} +0 -0
  142. /package/dist/{chunk-YEEAADCI.js.map → chunk-AYHXQR53.js.map} +0 -0
  143. /package/dist/{chunk-IEUU7O4F.js.map → chunk-BNW5NJJH.js.map} +0 -0
  144. /package/dist/{chunk-6GMPIJAZ.js.map → chunk-C3IW2F5Z.js.map} +0 -0
  145. /package/dist/{chunk-4EWRLK3C.js.map → chunk-C4PZTWTG.js.map} +0 -0
  146. /package/dist/{chunk-QVO4YOB7.js.map → chunk-D2B22JDF.js.map} +0 -0
  147. /package/dist/{chunk-HA5SI4GK.js.map → chunk-FMGWXIES.js.map} +0 -0
  148. /package/dist/{chunk-B6SU7YSE.js.map → chunk-GLWW3EJQ.js.map} +0 -0
  149. /package/dist/{chunk-5BTCT236.js.map → chunk-GYTVOLNX.js.map} +0 -0
  150. /package/dist/{chunk-TIPYPLLQ.js.map → chunk-I6UCUHLK.js.map} +0 -0
  151. /package/dist/{chunk-DEVUWMME.js.map → chunk-KGIGRNR6.js.map} +0 -0
  152. /package/dist/{chunk-F4QTFIB4.js.map → chunk-KQFQ3IS5.js.map} +0 -0
  153. /package/dist/{chunk-7XYTQGCC.js.map → chunk-MAV46GWQ.js.map} +0 -0
  154. /package/dist/{chunk-KILOTVIF.js.map → chunk-MB5RSUW6.js.map} +0 -0
  155. /package/dist/{chunk-WB3LYXC5.js.map → chunk-MON3LMO7.js.map} +0 -0
  156. /package/dist/{chunk-APRRL26Q.js.map → chunk-O4UNM6OR.js.map} +0 -0
  157. /package/dist/{chunk-AZDOWD2L.js.map → chunk-OZXVGYGZ.js.map} +0 -0
  158. /package/dist/{chunk-QPD426WT.js.map → chunk-R3OQGYOU.js.map} +0 -0
  159. /package/dist/{chunk-C6C7XVKG.js.map → chunk-UGEBPVNI.js.map} +0 -0
  160. /package/dist/{chunk-XQNPGNKK.js.map → chunk-W3BKVM64.js.map} +0 -0
  161. /package/dist/{chunk-2SGJY2UY.js.map → chunk-Z3CCEP6F.js.map} +0 -0
  162. /package/dist/{chunk-THTIZJZA.js.map → chunk-ZJSZNTEI.js.map} +0 -0
  163. /package/dist/{chunk-CIOMS6DI.js.map → chunk-ZZPIJPPD.js.map} +0 -0
  164. /package/dist/{contradiction-scan-GD7KUFWS.js.map → contradiction-scan-AZTGFMPY.js.map} +0 -0
@@ -6,8 +6,8 @@ import {
6
6
  movingAverage,
7
7
  semanticChunkContent,
8
8
  stddev
9
- } from "./chunk-WCYKT2DE.js";
10
- import "./chunk-4WMCPJWX.js";
9
+ } from "./chunk-P4BC54KI.js";
10
+ import "./chunk-UQ7RN5HK.js";
11
11
  import "./chunk-PZ5AY32C.js";
12
12
  export {
13
13
  DEFAULT_SEMANTIC_CHUNKING_CONFIG,
@@ -7,24 +7,24 @@ import {
7
7
  materializeAfterSemanticConsolidation,
8
8
  parseConsolidationResponse,
9
9
  parseOperatorAwareConsolidationResponse
10
- } from "./chunk-DEPRLVLK.js";
11
- import "./chunk-C6C7XVKG.js";
12
- import "./chunk-JFEKNTX7.js";
10
+ } from "./chunk-QFQQFX2H.js";
11
+ import "./chunk-UGEBPVNI.js";
12
+ import "./chunk-LN4YGHTM.js";
13
13
  import {
14
14
  resolveExtensionsRoot
15
15
  } from "./chunk-JLNBQWZ2.js";
16
16
  import "./chunk-3UXOZBHV.js";
17
- import "./chunk-7MLB4NCL.js";
17
+ import "./chunk-PJGB7XRR.js";
18
18
  import "./chunk-5UZXUTVO.js";
19
- import "./chunk-4H5ZJHEN.js";
19
+ import "./chunk-J6A3CX5N.js";
20
20
  import "./chunk-4R4KTDIE.js";
21
21
  import "./chunk-RULE4VG5.js";
22
22
  import "./chunk-SCU65EZI.js";
23
- import "./chunk-KILOTVIF.js";
24
- import "./chunk-3HPAPHUK.js";
23
+ import "./chunk-MB5RSUW6.js";
24
+ import "./chunk-6KYMPV2O.js";
25
25
  import "./chunk-CPPS65WS.js";
26
26
  import "./chunk-DM2T26WE.js";
27
- import "./chunk-QSVPYQPG.js";
27
+ import "./chunk-LDXUBPMO.js";
28
28
  import "./chunk-FVQJYWH7.js";
29
29
  import {
30
30
  CONSOLIDATION_OPERATORS,
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  promoteSemanticRuleFromMemory,
3
3
  setSemanticRulePromotionTestHooks
4
- } from "./chunk-CIOMS6DI.js";
5
- import "./chunk-7MLB4NCL.js";
4
+ } from "./chunk-ZZPIJPPD.js";
5
+ import "./chunk-PJGB7XRR.js";
6
6
  import "./chunk-5UZXUTVO.js";
7
- import "./chunk-4H5ZJHEN.js";
7
+ import "./chunk-J6A3CX5N.js";
8
8
  import "./chunk-4R4KTDIE.js";
9
9
  import "./chunk-RULE4VG5.js";
10
10
  import "./chunk-SCU65EZI.js";
11
- import "./chunk-KILOTVIF.js";
12
- import "./chunk-3HPAPHUK.js";
11
+ import "./chunk-MB5RSUW6.js";
12
+ import "./chunk-6KYMPV2O.js";
13
13
  import "./chunk-CPPS65WS.js";
14
14
  import "./chunk-DM2T26WE.js";
15
- import "./chunk-QSVPYQPG.js";
15
+ import "./chunk-LDXUBPMO.js";
16
16
  import "./chunk-FVQJYWH7.js";
17
17
  import "./chunk-G7D6GZ5J.js";
18
18
  import "./chunk-ALEPI75L.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  searchVerifiedSemanticRules
3
- } from "./chunk-PP2JH3GP.js";
4
- import "./chunk-7MLB4NCL.js";
3
+ } from "./chunk-2UFQYU5F.js";
4
+ import "./chunk-PJGB7XRR.js";
5
5
  import "./chunk-5UZXUTVO.js";
6
- import "./chunk-4H5ZJHEN.js";
6
+ import "./chunk-J6A3CX5N.js";
7
7
  import "./chunk-4R4KTDIE.js";
8
8
  import "./chunk-RULE4VG5.js";
9
9
  import "./chunk-SCU65EZI.js";
10
- import "./chunk-KILOTVIF.js";
11
- import "./chunk-3HPAPHUK.js";
10
+ import "./chunk-MB5RSUW6.js";
11
+ import "./chunk-6KYMPV2O.js";
12
12
  import "./chunk-CPPS65WS.js";
13
13
  import "./chunk-DM2T26WE.js";
14
- import "./chunk-QSVPYQPG.js";
14
+ import "./chunk-LDXUBPMO.js";
15
15
  import "./chunk-FVQJYWH7.js";
16
16
  import "./chunk-G7D6GZ5J.js";
17
17
  import "./chunk-ALEPI75L.js";
@@ -10,7 +10,7 @@ import {
10
10
  parseCitation,
11
11
  stripCitation,
12
12
  stripCitationForTemplate
13
- } from "./chunk-4H5ZJHEN.js";
13
+ } from "./chunk-J6A3CX5N.js";
14
14
  import "./chunk-PZ5AY32C.js";
15
15
  export {
16
16
  CITATION_UNKNOWN,
package/dist/storage.js CHANGED
@@ -8,17 +8,17 @@ import {
8
8
  normalizeEntityName,
9
9
  parseEntityFile,
10
10
  serializeEntityFile
11
- } from "./chunk-7MLB4NCL.js";
11
+ } from "./chunk-PJGB7XRR.js";
12
12
  import "./chunk-5UZXUTVO.js";
13
- import "./chunk-4H5ZJHEN.js";
13
+ import "./chunk-J6A3CX5N.js";
14
14
  import "./chunk-4R4KTDIE.js";
15
15
  import "./chunk-RULE4VG5.js";
16
16
  import "./chunk-SCU65EZI.js";
17
- import "./chunk-KILOTVIF.js";
18
- import "./chunk-3HPAPHUK.js";
17
+ import "./chunk-MB5RSUW6.js";
18
+ import "./chunk-6KYMPV2O.js";
19
19
  import "./chunk-CPPS65WS.js";
20
20
  import "./chunk-DM2T26WE.js";
21
- import "./chunk-QSVPYQPG.js";
21
+ import "./chunk-LDXUBPMO.js";
22
22
  import "./chunk-FVQJYWH7.js";
23
23
  import "./chunk-G7D6GZ5J.js";
24
24
  import "./chunk-ALEPI75L.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  HourlySummarizer
3
- } from "./chunk-XAZOWLW4.js";
3
+ } from "./chunk-3VONWEQB.js";
4
4
  import "./chunk-XJNBEDFE.js";
5
5
  import "./chunk-XZ4WBBB5.js";
6
6
  import "./chunk-77NAFXUD.js";
7
7
  import "./chunk-FF4KLI5W.js";
8
- import "./chunk-DEVUWMME.js";
8
+ import "./chunk-KGIGRNR6.js";
9
9
  import "./chunk-B5XMS73R.js";
10
10
  import "./chunk-7SI52C65.js";
11
11
  import "./chunk-L2EXJQJP.js";
12
- import "./chunk-UZB5KHKX.js";
12
+ import "./chunk-RGMVMVMF.js";
13
13
  import "./chunk-RK6F44Y6.js";
14
14
  import "./chunk-NNVTUXEB.js";
15
15
  import "./chunk-EYIEWJNI.js";
@@ -6,7 +6,7 @@ import {
6
6
  shouldFilterSupersededFromRecall,
7
7
  shouldSupersedeExisting,
8
8
  supersessionKeysForFact
9
- } from "./chunk-K5O2QY6T.js";
9
+ } from "./chunk-YTWNKQ2G.js";
10
10
  import "./chunk-MDYG7VI7.js";
11
11
  import "./chunk-2ODBA7MQ.js";
12
12
  import "./chunk-PZ5AY32C.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  exportSqlite
3
- } from "../chunk-S53OYO3F.js";
3
+ } from "../chunk-7VFZTJ7K.js";
4
4
  import "../chunk-Z734BLO3.js";
5
- import "../chunk-3HPAPHUK.js";
5
+ import "../chunk-6KYMPV2O.js";
6
6
  import "../chunk-UI3NYK34.js";
7
7
  import "../chunk-GCGJW34D.js";
8
8
  import "../chunk-PZ5AY32C.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  importSqlite
3
- } from "../chunk-4RR6ROTB.js";
3
+ } from "../chunk-AGNBY3VG.js";
4
4
  import "../chunk-Z734BLO3.js";
5
5
  import "../chunk-G4IAEX6D.js";
6
- import "../chunk-3HPAPHUK.js";
6
+ import "../chunk-6KYMPV2O.js";
7
7
  import "../chunk-GCGJW34D.js";
8
8
  import "../chunk-PZ5AY32C.js";
9
9
  export {
@@ -313,13 +313,13 @@ declare const CapsuleBlockSchema: z.ZodObject<{
313
313
  peerProfiles: boolean;
314
314
  }>;
315
315
  }, "strip", z.ZodTypeAny, {
316
- schemaVersion: string;
317
316
  includes: {
318
317
  procedural: boolean;
319
318
  taxonomy: boolean;
320
319
  identityAnchors: boolean;
321
320
  peerProfiles: boolean;
322
321
  };
322
+ schemaVersion: string;
323
323
  id: string;
324
324
  description: string;
325
325
  version: string;
@@ -334,13 +334,13 @@ declare const CapsuleBlockSchema: z.ZodObject<{
334
334
  directAnswerEnabled: boolean;
335
335
  };
336
336
  }, {
337
- schemaVersion: string;
338
337
  includes: {
339
338
  procedural: boolean;
340
339
  taxonomy: boolean;
341
340
  identityAnchors: boolean;
342
341
  peerProfiles: boolean;
343
342
  };
343
+ schemaVersion: string;
344
344
  id: string;
345
345
  description: string;
346
346
  version: string;
@@ -464,13 +464,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
464
464
  peerProfiles: boolean;
465
465
  }>;
466
466
  }, "strip", z.ZodTypeAny, {
467
- schemaVersion: string;
468
467
  includes: {
469
468
  procedural: boolean;
470
469
  taxonomy: boolean;
471
470
  identityAnchors: boolean;
472
471
  peerProfiles: boolean;
473
472
  };
473
+ schemaVersion: string;
474
474
  id: string;
475
475
  description: string;
476
476
  version: string;
@@ -485,13 +485,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
485
485
  directAnswerEnabled: boolean;
486
486
  };
487
487
  }, {
488
- schemaVersion: string;
489
488
  includes: {
490
489
  procedural: boolean;
491
490
  taxonomy: boolean;
492
491
  identityAnchors: boolean;
493
492
  peerProfiles: boolean;
494
493
  };
494
+ schemaVersion: string;
495
495
  id: string;
496
496
  description: string;
497
497
  version: string;
@@ -518,13 +518,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
518
518
  pluginVersion: string;
519
519
  includesTranscripts: boolean;
520
520
  capsule: {
521
- schemaVersion: string;
522
521
  includes: {
523
522
  procedural: boolean;
524
523
  taxonomy: boolean;
525
524
  identityAnchors: boolean;
526
525
  peerProfiles: boolean;
527
526
  };
527
+ schemaVersion: string;
528
528
  id: string;
529
529
  description: string;
530
530
  version: string;
@@ -551,13 +551,13 @@ declare const ExportManifestV2Schema: z.ZodObject<{
551
551
  pluginVersion: string;
552
552
  includesTranscripts: boolean;
553
553
  capsule: {
554
- schemaVersion: string;
555
554
  includes: {
556
555
  procedural: boolean;
557
556
  taxonomy: boolean;
558
557
  identityAnchors: boolean;
559
558
  peerProfiles: boolean;
560
559
  };
560
+ schemaVersion: string;
561
561
  id: string;
562
562
  description: string;
563
563
  version: string;
@@ -683,13 +683,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
683
683
  peerProfiles: boolean;
684
684
  }>;
685
685
  }, "strip", z.ZodTypeAny, {
686
- schemaVersion: string;
687
686
  includes: {
688
687
  procedural: boolean;
689
688
  taxonomy: boolean;
690
689
  identityAnchors: boolean;
691
690
  peerProfiles: boolean;
692
691
  };
692
+ schemaVersion: string;
693
693
  id: string;
694
694
  description: string;
695
695
  version: string;
@@ -704,13 +704,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
704
704
  directAnswerEnabled: boolean;
705
705
  };
706
706
  }, {
707
- schemaVersion: string;
708
707
  includes: {
709
708
  procedural: boolean;
710
709
  taxonomy: boolean;
711
710
  identityAnchors: boolean;
712
711
  peerProfiles: boolean;
713
712
  };
713
+ schemaVersion: string;
714
714
  id: string;
715
715
  description: string;
716
716
  version: string;
@@ -737,13 +737,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
737
737
  pluginVersion: string;
738
738
  includesTranscripts: boolean;
739
739
  capsule: {
740
- schemaVersion: string;
741
740
  includes: {
742
741
  procedural: boolean;
743
742
  taxonomy: boolean;
744
743
  identityAnchors: boolean;
745
744
  peerProfiles: boolean;
746
745
  };
746
+ schemaVersion: string;
747
747
  id: string;
748
748
  description: string;
749
749
  version: string;
@@ -770,13 +770,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
770
770
  pluginVersion: string;
771
771
  includesTranscripts: boolean;
772
772
  capsule: {
773
- schemaVersion: string;
774
773
  includes: {
775
774
  procedural: boolean;
776
775
  taxonomy: boolean;
777
776
  identityAnchors: boolean;
778
777
  peerProfiles: boolean;
779
778
  };
779
+ schemaVersion: string;
780
780
  id: string;
781
781
  description: string;
782
782
  version: string;
@@ -815,13 +815,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
815
815
  pluginVersion: string;
816
816
  includesTranscripts: boolean;
817
817
  capsule: {
818
- schemaVersion: string;
819
818
  includes: {
820
819
  procedural: boolean;
821
820
  taxonomy: boolean;
822
821
  identityAnchors: boolean;
823
822
  peerProfiles: boolean;
824
823
  };
824
+ schemaVersion: string;
825
825
  id: string;
826
826
  description: string;
827
827
  version: string;
@@ -854,13 +854,13 @@ declare const ExportBundleV2Schema: z.ZodObject<{
854
854
  pluginVersion: string;
855
855
  includesTranscripts: boolean;
856
856
  capsule: {
857
- schemaVersion: string;
858
857
  includes: {
859
858
  procedural: boolean;
860
859
  taxonomy: boolean;
861
860
  identityAnchors: boolean;
862
861
  peerProfiles: boolean;
863
862
  };
863
+ schemaVersion: string;
864
864
  id: string;
865
865
  description: string;
866
866
  version: string;
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  searchVerifiedEpisodes
3
- } from "./chunk-QPD426WT.js";
3
+ } from "./chunk-R3OQGYOU.js";
4
4
  import "./chunk-HQ6NIBL6.js";
5
- import "./chunk-7MLB4NCL.js";
5
+ import "./chunk-PJGB7XRR.js";
6
6
  import "./chunk-5UZXUTVO.js";
7
- import "./chunk-4H5ZJHEN.js";
7
+ import "./chunk-J6A3CX5N.js";
8
8
  import "./chunk-4R4KTDIE.js";
9
9
  import "./chunk-RULE4VG5.js";
10
10
  import "./chunk-SCU65EZI.js";
11
- import "./chunk-KILOTVIF.js";
12
- import "./chunk-3HPAPHUK.js";
11
+ import "./chunk-MB5RSUW6.js";
12
+ import "./chunk-6KYMPV2O.js";
13
13
  import "./chunk-CPPS65WS.js";
14
14
  import "./chunk-DM2T26WE.js";
15
- import "./chunk-QSVPYQPG.js";
15
+ import "./chunk-LDXUBPMO.js";
16
16
  import "./chunk-FVQJYWH7.js";
17
17
  import "./chunk-G7D6GZ5J.js";
18
18
  import "./chunk-ALEPI75L.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.621",
3
+ "version": "9.3.623",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/chunking.ts CHANGED
@@ -50,32 +50,47 @@ function estimateTokens(text: string): number {
50
50
  * Handles common abbreviations and edge cases.
51
51
  */
52
52
  function splitSentences(text: string): string[] {
53
- // Split on sentence-ending punctuation followed by whitespace or end of string
54
- // Preserve the punctuation with the sentence
53
+ // Split on sentence-ending punctuation (. ! ?) that is followed by whitespace
54
+ // or end of string; the punctuation stays with the sentence.
55
+ //
56
+ // Implemented as a single linear scan rather than a regex. Every regex form of
57
+ // this split is either polynomial (CodeQL js/polynomial-redos) or — once
58
+ // bounded/anchored to satisfy CodeQL — mishandles long runs or non-boundary
59
+ // punctuation (a global match silently drops a skipped prefix; a sticky match
60
+ // stops at the first interior `.` that is not a real boundary, e.g. "v1.2.3"
61
+ // or "example.com", emitting the whole document as one chunk). A character
62
+ // scan is O(n), allocation-free, drops nothing, and treats interior
63
+ // punctuation correctly. Normal prose splits identically to the previous
64
+ // /[^.!?]*[.!?]+(?:\s+|$)/g form.
55
65
  const sentences: string[] = [];
56
-
57
- // Regex to match sentence boundaries
58
- // Match: period/exclamation/question followed by space or end, but not abbreviations
59
- const sentenceRegex = /[^.!?]*[.!?]+(?:\s+|$)/g;
60
-
61
- let match: RegExpExecArray | null;
62
- let lastIndex = 0;
63
-
64
- while ((match = sentenceRegex.exec(text)) !== null) {
65
- sentences.push(match[0].trim());
66
- lastIndex = sentenceRegex.lastIndex;
67
- }
68
-
69
- // Handle remaining text without sentence-ending punctuation
70
- if (lastIndex < text.length) {
71
- const remaining = text.slice(lastIndex).trim();
72
- if (remaining) {
73
- sentences.push(remaining);
66
+ let start = 0;
67
+ for (let i = 0; i < text.length; i++) {
68
+ const ch = text[i];
69
+ if (ch !== "." && ch !== "!" && ch !== "?") continue;
70
+ // Consume a run of terminators (e.g. "?!", "...").
71
+ let end = i;
72
+ while (end + 1 < text.length) {
73
+ const n = text[end + 1];
74
+ if (n !== "." && n !== "!" && n !== "?") break;
75
+ end++;
76
+ }
77
+ const after = text[end + 1];
78
+ // A real boundary only if the terminator run ends the string or is followed
79
+ // by whitespace. Interior punctuation (no following whitespace) is left in
80
+ // place and the scan continues.
81
+ if (after === undefined || /\s/.test(after)) {
82
+ const sentence = text.slice(start, end + 1).trim();
83
+ if (sentence.length > 0) sentences.push(sentence);
84
+ start = end + 1;
74
85
  }
86
+ i = end;
75
87
  }
76
-
77
- // Filter out empty sentences
78
- return sentences.filter((s) => s.length > 0);
88
+ // Trailing text without a closing terminator.
89
+ if (start < text.length) {
90
+ const remaining = text.slice(start).trim();
91
+ if (remaining.length > 0) sentences.push(remaining);
92
+ }
93
+ return sentences;
79
94
  }
80
95
 
81
96
  /**
@@ -142,7 +142,13 @@ export function parseTouchedFiles(diff: string | null | undefined): string[] {
142
142
  // everything after the first whitespace in a quoted path.
143
143
  const headerPrefix = line.match(/^(?:---|\+\+\+)[ \t]+/);
144
144
  if (headerPrefix) {
145
- const tail = line.slice(headerPrefix[0].length).replace(/[ \t]+$/, "");
145
+ // Linear trailing space/tab trim instead of /[ \t]+$/, whose anchored
146
+ // quantifier backtracks polynomially on a long diff line (CodeQL
147
+ // js/polynomial-redos).
148
+ const sliced = line.slice(headerPrefix[0].length);
149
+ let tailEnd = sliced.length;
150
+ while (tailEnd > 0 && (sliced[tailEnd - 1] === " " || sliced[tailEnd - 1] === "\t")) tailEnd--;
151
+ const tail = sliced.slice(0, tailEnd);
146
152
  const raw = extractSingleDiffPathToken(tail);
147
153
  if (raw) {
148
154
  const stripped = stripDiffPathPrefix(raw);
@@ -550,7 +550,12 @@ export function renderMemorySummary(ctx: SummaryRenderContext): string {
550
550
  lines.push("");
551
551
  }
552
552
 
553
- const full = lines.join("\n").replace(/\n+$/u, "\n");
553
+ // Collapse trailing newlines to one without the anchored /\n+$/ quantifier,
554
+ // which backtracks polynomially (CodeQL js/polynomial-redos).
555
+ const joined = lines.join("\n");
556
+ let joinedEnd = joined.length;
557
+ while (joinedEnd > 0 && joined[joinedEnd - 1] === "\n") joinedEnd--;
558
+ const full = joinedEnd === joined.length ? joined : `${joined.slice(0, joinedEnd)}\n`;
554
559
  return truncateToTokenBudget(full, ctx.maxTokens);
555
560
  }
556
561
 
@@ -40,8 +40,13 @@ export type ValidExplicitCapture = {
40
40
  export type ExplicitCaptureSource = "memory_store" | "memory_capture" | "suggestion_submit" | "inline";
41
41
  type ExplicitCaptureValidationMode = "legacy_tool" | "strict_explicit";
42
42
 
43
- const INLINE_NOTE_RE = /<memory_note>\s*([\s\S]*?)\s*<\/memory_note>/gi;
44
- const INLINE_NOTE_MARKUP_RE = /<memory_note>\s*[\s\S]*?\s*<\/memory_note>/i;
43
+ // Bounded body {0,100000} instead of an unbounded lazy *? so scanning for the
44
+ // closing tag cannot backtrack polynomially on unterminated <memory_note>
45
+ // markup in hostile turn text (CodeQL js/polynomial-redos). 100 000 chars far
46
+ // exceeds any real inline note, so matching is behavior-preserving; the outer
47
+ // \s* groups were also dropped (body absorbs whitespace; captures are trimmed).
48
+ const INLINE_NOTE_RE = /<memory_note>([\s\S]{0,100000}?)<\/memory_note>/gi;
49
+ const INLINE_NOTE_MARKUP_RE = /<memory_note>[\s\S]{0,100000}?<\/memory_note>/i;
45
50
  const INLINE_ALLOWED_CATEGORIES = new Set<MemoryCategory>([
46
51
  "fact",
47
52
  "preference",
@@ -200,7 +200,13 @@ function splitLoopMarkdown(raw: string | null): { header: string; sections: Mark
200
200
  let current: MarkdownSection | null = null;
201
201
 
202
202
  for (const line of lines) {
203
- const sectionMatch = line.match(/^##\s+(.+?)\s*$/);
203
+ // /^##\s(.+)$/ + the trim below is exactly equivalent to the original
204
+ // /^##\s+(.+?)\s*$/ (same match/no-match and same trimmed title across all
205
+ // inputs, including "## " → no-match and "## " → empty title) but has no
206
+ // adjacent overlapping quantifiers, so it cannot backtrack polynomially
207
+ // (CodeQL js/polynomial-redos). \s matches a single fixed-width char and
208
+ // .+ runs greedily to the line end — no \s+/.* overlap.
209
+ const sectionMatch = line.match(/^##\s(.+)$/);
204
210
  if (sectionMatch) {
205
211
  if (current) sections.push({ title: current.title, body: current.body.trimEnd() });
206
212
  current = { title: sectionMatch[1].trim(), body: "" };
@@ -10,7 +10,10 @@
10
10
  */
11
11
 
12
12
  export function stripCodeFences(text: string): string {
13
- return text.replace(/```(?:json)?\s*([\s\S]*?)```/gi, (_m, inner) => String(inner).trim());
13
+ // Drop the leading \s* before the lazy body: it overlapped the body and caused
14
+ // polynomial backtracking on unterminated fences (CodeQL js/polynomial-redos).
15
+ // inner is trimmed, so captured content is identical.
16
+ return text.replace(/```(?:json)?([\s\S]*?)```/gi, (_m, inner) => String(inner).trim());
14
17
  }
15
18
 
16
19
  export function extractJsonCandidates(text: string): string[] {
@@ -943,7 +943,11 @@ export function formatCompressionGuidelinesForRecall(
943
943
  ): string | null {
944
944
  if (typeof raw !== "string" || raw.trim().length === 0) return null;
945
945
  const sectionMatch = raw.match(
946
- /## Suggested Guidelines\s*\n([\s\S]*?)(?:\n##\s+|\s*$)/i,
946
+ // End the section at `\n## ` or end-of-string. Plain $ (not \s*$): the
947
+ // \s* branch overlapped the lazy body and backtracked polynomially
948
+ // (CodeQL js/polynomial-redos). Captured lines are trimmed/filtered below,
949
+ // so trailing whitespace handling is unchanged.
950
+ /## Suggested Guidelines\s*\n([\s\S]*?)(?:\n##\s+|$)/i,
947
951
  );
948
952
  if (!sectionMatch) return null;
949
953
 
@@ -262,7 +262,10 @@ export function parsePeerProfileReasonerResponse(
262
262
  ): PeerProfileReasonerProposal[] {
263
263
  if (typeof raw !== "string" || raw.trim() === "") return [];
264
264
  const trimmed = raw.trim();
265
- const fenced = /^```(?:json)?\s*([\s\S]*?)```\s*$/u.exec(trimmed);
265
+ // Dropped the \s* groups around the lazy body (they overlapped it and
266
+ // backtracked polynomially — CodeQL js/polynomial-redos). Input is already
267
+ // trimmed and fenced[1] is trimmed below, so matches are identical.
268
+ const fenced = /^```(?:json)?([\s\S]*?)```$/u.exec(trimmed);
266
269
  const payload = fenced ? fenced[1].trim() : trimmed;
267
270
  let parsed: unknown;
268
271
  try {
@@ -1,6 +1,7 @@
1
1
  import assert from "node:assert/strict";
2
2
  import test from "node:test";
3
3
  import {
4
+ displayErrorDetail,
4
5
  isLikelyBetterSqlite3NativeBindingError,
5
6
  openBetterSqlite3,
6
7
  } from "./better-sqlite.js";
@@ -21,6 +22,34 @@ test("isLikelyBetterSqlite3NativeBindingError recognizes missing and mismatched
21
22
  assert.equal(isLikelyBetterSqlite3NativeBindingError(new Error("SQLITE_BUSY: database is locked")), false);
22
23
  });
23
24
 
25
+ test("displayErrorDetail surfaces only error class + code, never the raw message (CodeQL js/stack-trace-exposure)", () => {
26
+ // MODULE_NOT_FOUND messages embed an absolute "Require stack:" path block.
27
+ const moduleNotFound = Object.assign(
28
+ new Error("Cannot find module 'better-sqlite3'\nRequire stack:\n- /home/app/node_modules/x/index.js"),
29
+ { code: "MODULE_NOT_FOUND" },
30
+ );
31
+ const d1 = displayErrorDetail(moduleNotFound);
32
+ assert.equal(d1, "Error (MODULE_NOT_FOUND)");
33
+ assert.ok(!d1.includes("/home/app") && !d1.includes("Require stack"));
34
+
35
+ // Native loader failures can embed an absolute path (even with spaces) in the
36
+ // message; we never surface it.
37
+ const dlopen = Object.assign(
38
+ new Error("/Users/Jane Doe/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node: file too short"),
39
+ { code: "ERR_DLOPEN_FAILED" },
40
+ );
41
+ const d2 = displayErrorDetail(dlopen);
42
+ assert.equal(d2, "Error (ERR_DLOPEN_FAILED)");
43
+ assert.ok(!d2.includes("/Users/Jane Doe") && !d2.includes(".node"));
44
+
45
+ // No code → class name only. error.stack is never read.
46
+ const noCode = new Error("boom");
47
+ noCode.stack = "boom\n at /home/app/secret.js:1:1";
48
+ assert.equal(displayErrorDetail(noCode), "Error");
49
+
50
+ assert.equal(displayErrorDetail("not an error"), "");
51
+ });
52
+
24
53
  test("openBetterSqlite3 can open an in-memory database after install verification", () => {
25
54
  const db = openBetterSqlite3(":memory:");
26
55
  try {