@remnic/core 1.1.10 → 1.1.12

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 (299) hide show
  1. package/README.md +3 -3
  2. package/dist/access-cli.js +67 -59
  3. package/dist/access-cli.js.map +1 -1
  4. package/dist/access-http.d.ts +7 -4
  5. package/dist/access-http.js +30 -26
  6. package/dist/access-mcp.d.ts +9 -4
  7. package/dist/access-mcp.js +29 -25
  8. package/dist/access-schema.d.ts +188 -8
  9. package/dist/access-schema.js +12 -3
  10. package/dist/{access-service-BTTNyo1i.d.ts → access-service-DDjzFALq.d.ts} +54 -5
  11. package/dist/access-service.d.ts +7 -4
  12. package/dist/access-service.js +26 -23
  13. package/dist/action-confidence.d.ts +83 -0
  14. package/dist/action-confidence.js +22 -0
  15. package/dist/active-memory-bridge.d.ts +1 -1
  16. package/dist/active-recall.d.ts +1 -1
  17. package/dist/behavior-learner.d.ts +1 -1
  18. package/dist/behavior-signals.d.ts +1 -1
  19. package/dist/bootstrap.d.ts +4 -2
  20. package/dist/briefing.d.ts +1 -1
  21. package/dist/briefing.js +5 -5
  22. package/dist/buffer-surprise-report.d.ts +1 -1
  23. package/dist/buffer.d.ts +1 -1
  24. package/dist/calibration.d.ts +1 -1
  25. package/dist/calibration.js +4 -4
  26. package/dist/{capsule-export-LLEVB2RG.js → capsule-export-7QNCBZOQ.js} +3 -3
  27. package/dist/{capsule-import-UW45R2MZ.js → capsule-import-EPBHD2EN.js} +3 -3
  28. package/dist/causal-behavior.d.ts +1 -1
  29. package/dist/causal-consolidation.d.ts +1 -1
  30. package/dist/causal-consolidation.js +11 -11
  31. package/dist/{chunk-VQXK37XA.js → chunk-23ZZK64Y.js} +1 -1
  32. package/dist/chunk-23ZZK64Y.js.map +1 -0
  33. package/dist/{chunk-HJYHRE4S.js → chunk-242S3I2A.js} +2 -2
  34. package/dist/{chunk-MCC6KDQF.js → chunk-3B6KIRBH.js} +131 -13
  35. package/dist/chunk-3B6KIRBH.js.map +1 -0
  36. package/dist/chunk-4RA3C3EV.js +60 -0
  37. package/dist/chunk-4RA3C3EV.js.map +1 -0
  38. package/dist/{chunk-EYNQTST2.js → chunk-4YM32CRU.js} +4 -4
  39. package/dist/{chunk-6AUUAZEX.js → chunk-5NXIJZFX.js} +38 -8
  40. package/dist/chunk-5NXIJZFX.js.map +1 -0
  41. package/dist/chunk-6NKAQ74D.js +2237 -0
  42. package/dist/chunk-6NKAQ74D.js.map +1 -0
  43. package/dist/{chunk-PHNGXFQ6.js → chunk-7V22HTMD.js} +3 -3
  44. package/dist/{chunk-363MWCD3.js → chunk-7ZM3BFKK.js} +84 -62
  45. package/dist/chunk-7ZM3BFKK.js.map +1 -0
  46. package/dist/chunk-AC5LO7IU.js +308 -0
  47. package/dist/chunk-AC5LO7IU.js.map +1 -0
  48. package/dist/chunk-AH2JUU6X.js +336 -0
  49. package/dist/chunk-AH2JUU6X.js.map +1 -0
  50. package/dist/{chunk-VX2IUQFE.js → chunk-AQJNPMOA.js} +41 -11
  51. package/dist/chunk-AQJNPMOA.js.map +1 -0
  52. package/dist/{chunk-P73JTV34.js → chunk-BBE34QBJ.js} +4 -4
  53. package/dist/{chunk-5GCNE7CN.js → chunk-BZSQEPRW.js} +454 -140
  54. package/dist/chunk-BZSQEPRW.js.map +1 -0
  55. package/dist/chunk-C5BCH4ZS.js +317 -0
  56. package/dist/chunk-C5BCH4ZS.js.map +1 -0
  57. package/dist/{chunk-C5HUWVH2.js → chunk-CPKTBRS2.js} +6 -6
  58. package/dist/{chunk-IBX3VFOM.js → chunk-D4GAOFF6.js} +118 -2
  59. package/dist/chunk-D4GAOFF6.js.map +1 -0
  60. package/dist/chunk-DB5A3NHS.js +906 -0
  61. package/dist/chunk-DB5A3NHS.js.map +1 -0
  62. package/dist/{chunk-I6BQZSML.js → chunk-DZZPC36E.js} +10 -10
  63. package/dist/{chunk-O4XJUPSF.js → chunk-E2UCDP5S.js} +39 -2
  64. package/dist/chunk-E2UCDP5S.js.map +1 -0
  65. package/dist/{chunk-SRBJUAMP.js → chunk-FMEBPEAO.js} +11 -67
  66. package/dist/chunk-FMEBPEAO.js.map +1 -0
  67. package/dist/{chunk-4DXC6HQQ.js → chunk-FQDPCE3I.js} +5 -5
  68. package/dist/{chunk-NN3LPQ5D.js → chunk-HELQZFZO.js} +155 -16
  69. package/dist/chunk-HELQZFZO.js.map +1 -0
  70. package/dist/{chunk-57QNCUEZ.js → chunk-HL5LRPNA.js} +2 -2
  71. package/dist/{chunk-VTU2B4VF.js → chunk-HQZVVSVB.js} +2 -1
  72. package/dist/chunk-HQZVVSVB.js.map +1 -0
  73. package/dist/{chunk-6Z6UH6TK.js → chunk-HY3L4WKC.js} +69 -3
  74. package/dist/chunk-HY3L4WKC.js.map +1 -0
  75. package/dist/{chunk-QIGOEM65.js → chunk-IB3BFHGN.js} +5 -5
  76. package/dist/{chunk-RXTFCYQF.js → chunk-JESOB2HO.js} +6 -6
  77. package/dist/{chunk-2YMTO4ZJ.js → chunk-JKDVIE52.js} +9 -2
  78. package/dist/chunk-JKDVIE52.js.map +1 -0
  79. package/dist/{chunk-WGK4VHGP.js → chunk-MNU6ZBWT.js} +302 -140
  80. package/dist/chunk-MNU6ZBWT.js.map +1 -0
  81. package/dist/chunk-OAZ5MFUB.js +4124 -0
  82. package/dist/chunk-OAZ5MFUB.js.map +1 -0
  83. package/dist/{chunk-ZTSE2ZJ6.js → chunk-OIGNEXKZ.js} +50 -3
  84. package/dist/chunk-OIGNEXKZ.js.map +1 -0
  85. package/dist/chunk-OZKZ2TRP.js +3729 -0
  86. package/dist/chunk-OZKZ2TRP.js.map +1 -0
  87. package/dist/{chunk-GGD5W7TB.js → chunk-PD6O7AXF.js} +7 -2
  88. package/dist/chunk-PD6O7AXF.js.map +1 -0
  89. package/dist/{chunk-S3IP6R6K.js → chunk-PH4C2U43.js} +23 -3
  90. package/dist/chunk-PH4C2U43.js.map +1 -0
  91. package/dist/chunk-PYPOFEMK.js +294 -0
  92. package/dist/chunk-PYPOFEMK.js.map +1 -0
  93. package/dist/{chunk-EQINRHYR.js → chunk-QDZ2RLEC.js} +243 -7
  94. package/dist/chunk-QDZ2RLEC.js.map +1 -0
  95. package/dist/{chunk-KWBPHZUU.js → chunk-RK6F44Y6.js} +3 -2
  96. package/dist/chunk-RK6F44Y6.js.map +1 -0
  97. package/dist/{chunk-36CTNQY7.js → chunk-RVPLBATS.js} +42 -10
  98. package/dist/chunk-RVPLBATS.js.map +1 -0
  99. package/dist/chunk-SOAU2OE2.js +125 -0
  100. package/dist/chunk-SOAU2OE2.js.map +1 -0
  101. package/dist/{chunk-A4ACKWIW.js → chunk-U5JMRGKX.js} +55 -4
  102. package/dist/chunk-U5JMRGKX.js.map +1 -0
  103. package/dist/{chunk-LIO5X3CM.js → chunk-UVMUAWVT.js} +2 -2
  104. package/dist/chunk-VWT3F4IV.js +2161 -0
  105. package/dist/chunk-VWT3F4IV.js.map +1 -0
  106. package/dist/{chunk-PB5KW5PL.js → chunk-WEJG4TB5.js} +6 -6
  107. package/dist/{chunk-KBYWQWSB.js → chunk-X7HPGUVG.js} +2 -2
  108. package/dist/{chunk-Y5KDIOKF.js → chunk-XAMBKFQS.js} +383 -9
  109. package/dist/chunk-XAMBKFQS.js.map +1 -0
  110. package/dist/{chunk-ZL4S7ARC.js → chunk-Y3VMVTYX.js} +3 -3
  111. package/dist/{chunk-Z5S5HNGY.js → chunk-ZG7PTKBK.js} +21 -5
  112. package/dist/chunk-ZG7PTKBK.js.map +1 -0
  113. package/dist/{chunk-6XA7UN4Z.js → chunk-ZNQN6ZTA.js} +2 -2
  114. package/dist/{chunk-WTFWLUSX.js → chunk-ZVTKDVVM.js} +2 -2
  115. package/dist/{cli-BrEwQTnW.d.ts → cli-BR8KpIU0.d.ts} +2 -2
  116. package/dist/cli.d.ts +7 -4
  117. package/dist/cli.js +44 -40
  118. package/dist/codex-cli-fallback.d.ts +1 -0
  119. package/dist/codex-cli-fallback.js +1 -1
  120. package/dist/compression-optimizer.d.ts +1 -1
  121. package/dist/config.d.ts +1 -1
  122. package/dist/config.js +1 -1
  123. package/dist/consolidation-provenance-check.d.ts +1 -1
  124. package/dist/consolidation-undo.d.ts +1 -1
  125. package/dist/{contradiction-scan-3Z6YW7YA.js → contradiction-scan-QTXAMBUA.js} +3 -2
  126. package/dist/contradiction-scan-QTXAMBUA.js.map +1 -0
  127. package/dist/day-summary.d.ts +1 -1
  128. package/dist/delinearize.d.ts +1 -1
  129. package/dist/direct-answer-wiring.d.ts +1 -1
  130. package/dist/direct-answer-wiring.js +1 -1
  131. package/dist/direct-answer.d.ts +1 -1
  132. package/dist/embedding-fallback.d.ts +1 -1
  133. package/dist/{engine-FOC3IJLA.js → engine-35M5BKQ7.js} +7 -7
  134. package/dist/entity-retrieval.d.ts +1 -1
  135. package/dist/entity-retrieval.js +5 -5
  136. package/dist/entity-schema.d.ts +1 -1
  137. package/dist/event-order-recall.d.ts +17 -0
  138. package/dist/event-order-recall.js +11 -0
  139. package/dist/event-order-recall.js.map +1 -0
  140. package/dist/evidence-pack.d.ts +3 -1
  141. package/dist/evidence-pack.js +5 -3
  142. package/dist/explicit-capture.d.ts +4 -2
  143. package/dist/explicit-cue-recall.d.ts +19 -1
  144. package/dist/explicit-cue-recall.js +10 -4
  145. package/dist/extraction-judge-telemetry.d.ts +1 -1
  146. package/dist/extraction-judge-training.d.ts +1 -1
  147. package/dist/extraction-judge.d.ts +1 -1
  148. package/dist/extraction.d.ts +1 -1
  149. package/dist/extraction.js +8 -7
  150. package/dist/fallback-llm.d.ts +2 -1
  151. package/dist/fallback-llm.js +4 -4
  152. package/dist/focused-list-recall.d.ts +17 -0
  153. package/dist/focused-list-recall.js +11 -0
  154. package/dist/focused-list-recall.js.map +1 -0
  155. package/dist/identity-continuity.d.ts +1 -1
  156. package/dist/importance.d.ts +1 -1
  157. package/dist/{index-1qIcnbG1.d.ts → index-DJ9QWMw-.d.ts} +3 -2
  158. package/dist/index.d.ts +49 -12
  159. package/dist/index.js +289 -115
  160. package/dist/index.js.map +1 -1
  161. package/dist/intent.d.ts +1 -1
  162. package/dist/intent.js +1 -1
  163. package/dist/lifecycle.d.ts +1 -1
  164. package/dist/live-connectors-runner.d.ts +1 -1
  165. package/dist/local-llm.d.ts +8 -4
  166. package/dist/local-llm.js +1 -1
  167. package/dist/mcp-memory-inspector-app.d.ts +106 -0
  168. package/dist/mcp-memory-inspector-app.js +20 -0
  169. package/dist/mcp-memory-inspector-app.js.map +1 -0
  170. package/dist/memory-action-policy.d.ts +1 -1
  171. package/dist/memory-cache.d.ts +1 -1
  172. package/dist/{memory-governance-F3QOJGEY.js → memory-governance-IMPQZXFC.js} +7 -7
  173. package/dist/memory-governance-IMPQZXFC.js.map +1 -0
  174. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  175. package/dist/memory-projection-store.d.ts +1 -1
  176. package/dist/memory-provenance.d.ts +57 -0
  177. package/dist/memory-provenance.js +13 -0
  178. package/dist/memory-provenance.js.map +1 -0
  179. package/dist/memory-worth-outcomes.d.ts +1 -1
  180. package/dist/models-json.d.ts +1 -1
  181. package/dist/native-knowledge.d.ts +1 -1
  182. package/dist/objective-state-writers.d.ts +1 -1
  183. package/dist/objective-state-writers.js +2 -2
  184. package/dist/operator-toolkit.d.ts +1 -1
  185. package/dist/operator-toolkit.js +11 -11
  186. package/dist/{orchestrator-6IvQ-Phj.d.ts → orchestrator-DDMPqU6R.d.ts} +10 -1
  187. package/dist/orchestrator.d.ts +4 -2
  188. package/dist/orchestrator.js +53 -46
  189. package/dist/patterns-cli.d.ts +1 -1
  190. package/dist/policy-runtime.d.ts +1 -1
  191. package/dist/qmd-recall-cache.d.ts +1 -1
  192. package/dist/qmd.d.ts +1 -1
  193. package/dist/recall-disclosure-escalation.d.ts +1 -1
  194. package/dist/recall-explain-renderer.d.ts +3 -1
  195. package/dist/recall-explain-renderer.js +5 -3
  196. package/dist/recall-state.d.ts +1 -1
  197. package/dist/recall-tag-filter.d.ts +3 -1
  198. package/dist/recall-xray-cli.d.ts +3 -1
  199. package/dist/recall-xray-cli.js +6 -4
  200. package/dist/recall-xray-renderer.d.ts +3 -1
  201. package/dist/recall-xray-renderer.js +5 -3
  202. package/dist/recall-xray.d.ts +8 -1
  203. package/dist/recall-xray.js +4 -2
  204. package/dist/resolve-auth-token.d.ts +1 -1
  205. package/dist/resolve-provider-secret.js +1 -1
  206. package/dist/response-guidance-recall.d.ts +18 -0
  207. package/dist/response-guidance-recall.js +11 -0
  208. package/dist/response-guidance-recall.js.map +1 -0
  209. package/dist/resume-bundles.js +3 -3
  210. package/dist/retrieval-agents.d.ts +1 -1
  211. package/dist/retrieval-tiers.d.ts +1 -1
  212. package/dist/sdk-compat.d.ts +3 -2
  213. package/dist/sdk-compat.js.map +1 -1
  214. package/dist/semantic-consolidation.d.ts +1 -1
  215. package/dist/semantic-consolidation.js +6 -6
  216. package/dist/semantic-rule-promotion.js +5 -5
  217. package/dist/semantic-rule-verifier.d.ts +1 -1
  218. package/dist/semantic-rule-verifier.js +6 -6
  219. package/dist/session-observer-bands.d.ts +1 -1
  220. package/dist/session-observer-state.d.ts +1 -1
  221. package/dist/signal.d.ts +1 -1
  222. package/dist/storage.d.ts +3 -1
  223. package/dist/storage.js +4 -4
  224. package/dist/summarizer.d.ts +1 -1
  225. package/dist/summarizer.js +6 -6
  226. package/dist/summary-snapshot.d.ts +1 -1
  227. package/dist/targeted-fact-recall.d.ts +17 -0
  228. package/dist/targeted-fact-recall.js +11 -0
  229. package/dist/targeted-fact-recall.js.map +1 -0
  230. package/dist/telemetry-transcript.d.ts +7 -0
  231. package/dist/telemetry-transcript.js +16 -0
  232. package/dist/telemetry-transcript.js.map +1 -0
  233. package/dist/temporal-supersession.d.ts +1 -1
  234. package/dist/temporal-supersession.js +2 -1
  235. package/dist/temporal-validity.d.ts +1 -1
  236. package/dist/threading.d.ts +1 -1
  237. package/dist/tier-migration.d.ts +1 -1
  238. package/dist/tier-routing.d.ts +1 -1
  239. package/dist/tokens.js +1 -1
  240. package/dist/topics.d.ts +1 -1
  241. package/dist/transcript.d.ts +1 -1
  242. package/dist/trust-zones.d.ts +3 -2
  243. package/dist/trust-zones.js +1 -1
  244. package/dist/types.d.ts +60 -2
  245. package/dist/types.js +1 -1
  246. package/dist/user-model.d.ts +37 -0
  247. package/dist/user-model.js +28 -0
  248. package/dist/user-model.js.map +1 -0
  249. package/dist/utility-runtime.d.ts +1 -1
  250. package/dist/verified-recall.js +6 -6
  251. package/package.json +1 -1
  252. package/dist/chunk-2YMTO4ZJ.js.map +0 -1
  253. package/dist/chunk-363MWCD3.js.map +0 -1
  254. package/dist/chunk-36CTNQY7.js.map +0 -1
  255. package/dist/chunk-5GCNE7CN.js.map +0 -1
  256. package/dist/chunk-6AUUAZEX.js.map +0 -1
  257. package/dist/chunk-6Z6UH6TK.js.map +0 -1
  258. package/dist/chunk-74WWN7ZW.js +0 -82
  259. package/dist/chunk-74WWN7ZW.js.map +0 -1
  260. package/dist/chunk-A4ACKWIW.js.map +0 -1
  261. package/dist/chunk-EQINRHYR.js.map +0 -1
  262. package/dist/chunk-ERUDW6DU.js +0 -965
  263. package/dist/chunk-ERUDW6DU.js.map +0 -1
  264. package/dist/chunk-GGD5W7TB.js.map +0 -1
  265. package/dist/chunk-IBX3VFOM.js.map +0 -1
  266. package/dist/chunk-KWBPHZUU.js.map +0 -1
  267. package/dist/chunk-MCC6KDQF.js.map +0 -1
  268. package/dist/chunk-NN3LPQ5D.js.map +0 -1
  269. package/dist/chunk-O4XJUPSF.js.map +0 -1
  270. package/dist/chunk-S3IP6R6K.js.map +0 -1
  271. package/dist/chunk-SRBJUAMP.js.map +0 -1
  272. package/dist/chunk-VQXK37XA.js.map +0 -1
  273. package/dist/chunk-VTU2B4VF.js.map +0 -1
  274. package/dist/chunk-VX2IUQFE.js.map +0 -1
  275. package/dist/chunk-WGK4VHGP.js.map +0 -1
  276. package/dist/chunk-Y5KDIOKF.js.map +0 -1
  277. package/dist/chunk-Z5S5HNGY.js.map +0 -1
  278. package/dist/chunk-ZTSE2ZJ6.js.map +0 -1
  279. package/dist/contradiction-scan-3Z6YW7YA.js.map +0 -1
  280. /package/dist/{capsule-export-LLEVB2RG.js.map → action-confidence.js.map} +0 -0
  281. /package/dist/{capsule-import-UW45R2MZ.js.map → capsule-export-7QNCBZOQ.js.map} +0 -0
  282. /package/dist/{engine-FOC3IJLA.js.map → capsule-import-EPBHD2EN.js.map} +0 -0
  283. /package/dist/{chunk-HJYHRE4S.js.map → chunk-242S3I2A.js.map} +0 -0
  284. /package/dist/{chunk-EYNQTST2.js.map → chunk-4YM32CRU.js.map} +0 -0
  285. /package/dist/{chunk-PHNGXFQ6.js.map → chunk-7V22HTMD.js.map} +0 -0
  286. /package/dist/{chunk-P73JTV34.js.map → chunk-BBE34QBJ.js.map} +0 -0
  287. /package/dist/{chunk-C5HUWVH2.js.map → chunk-CPKTBRS2.js.map} +0 -0
  288. /package/dist/{chunk-I6BQZSML.js.map → chunk-DZZPC36E.js.map} +0 -0
  289. /package/dist/{chunk-4DXC6HQQ.js.map → chunk-FQDPCE3I.js.map} +0 -0
  290. /package/dist/{chunk-57QNCUEZ.js.map → chunk-HL5LRPNA.js.map} +0 -0
  291. /package/dist/{chunk-QIGOEM65.js.map → chunk-IB3BFHGN.js.map} +0 -0
  292. /package/dist/{chunk-RXTFCYQF.js.map → chunk-JESOB2HO.js.map} +0 -0
  293. /package/dist/{chunk-LIO5X3CM.js.map → chunk-UVMUAWVT.js.map} +0 -0
  294. /package/dist/{chunk-PB5KW5PL.js.map → chunk-WEJG4TB5.js.map} +0 -0
  295. /package/dist/{chunk-KBYWQWSB.js.map → chunk-X7HPGUVG.js.map} +0 -0
  296. /package/dist/{chunk-ZL4S7ARC.js.map → chunk-Y3VMVTYX.js.map} +0 -0
  297. /package/dist/{chunk-6XA7UN4Z.js.map → chunk-ZNQN6ZTA.js.map} +0 -0
  298. /package/dist/{chunk-WTFWLUSX.js.map → chunk-ZVTKDVVM.js.map} +0 -0
  299. /package/dist/{memory-governance-F3QOJGEY.js.map → engine-35M5BKQ7.js.map} +0 -0
@@ -0,0 +1,308 @@
1
+ import {
2
+ isUserBoundaryScope,
3
+ normalizeUserContextScope
4
+ } from "./chunk-SOAU2OE2.js";
5
+
6
+ // src/memory-provenance.ts
7
+ var MEMORY_STATUS_VALUES = [
8
+ "active",
9
+ "pending_review",
10
+ "rejected",
11
+ "quarantined",
12
+ "superseded",
13
+ "archived",
14
+ "forgotten"
15
+ ];
16
+ var LIFECYCLE_STATE_VALUES = [
17
+ "candidate",
18
+ "validated",
19
+ "active",
20
+ "stale",
21
+ "archived"
22
+ ];
23
+ var VERIFICATION_STATE_VALUES = [
24
+ "unverified",
25
+ "user_confirmed",
26
+ "system_inferred",
27
+ "disputed"
28
+ ];
29
+ var POLICY_CLASS_VALUES = [
30
+ "ephemeral",
31
+ "durable",
32
+ "protected"
33
+ ];
34
+ var SAFETY_VALUES = [
35
+ "safe",
36
+ "requires-review",
37
+ "blocked"
38
+ ];
39
+ var CORRECTION_STATE_VALUES = [
40
+ "none",
41
+ "correction",
42
+ "superseded",
43
+ "disputed",
44
+ "forgotten"
45
+ ];
46
+ function buildRetrievedMemoryProvenance(memory, options = {}) {
47
+ const frontmatter = memory.frontmatter;
48
+ const nowMs = safeNow(options.now);
49
+ const namespace = nonEmptyString(options.namespace);
50
+ const scope = nonEmptyString(options.scope) ?? (namespace ? `namespace:${namespace}` : nonEmptyString(memory.path) ?? "unknown");
51
+ const userContextScopes = inferUserContextScopes(frontmatter);
52
+ const currentContextScopes = normalizeScopeList(options.currentContextScopes);
53
+ const stale = isStale(frontmatter, nowMs);
54
+ const correctionState = inferCorrectionState(frontmatter);
55
+ const corrected = correctionState !== "none";
56
+ const safetyReasons = inferSafetyReasons({
57
+ frontmatter,
58
+ stale,
59
+ userContextScopes,
60
+ currentContextScopes
61
+ });
62
+ const safety = inferSafety(safetyReasons);
63
+ const provenance = {
64
+ source: nonEmptyString(frontmatter.source) ?? "unknown",
65
+ scope,
66
+ userContextScopes,
67
+ retrievalReason: nonEmptyString(options.retrievalReason) ?? "retrieved",
68
+ confidence: clamp01(frontmatter.confidence),
69
+ stale,
70
+ corrected,
71
+ correctionState,
72
+ safeToUse: safety === "safe",
73
+ safety,
74
+ safetyReasons
75
+ };
76
+ assignString(provenance, "created", frontmatter.created);
77
+ assignString(provenance, "updated", frontmatter.updated);
78
+ assignString(provenance, "namespace", namespace);
79
+ assignStatus(provenance, "status", frontmatter.status);
80
+ assignLifecycleState(provenance, "lifecycleState", frontmatter.lifecycleState);
81
+ assignVerificationState(provenance, "verificationState", frontmatter.verificationState);
82
+ assignPolicyClass(provenance, "policyClass", frontmatter.policyClass);
83
+ assignString(provenance, "sourceMemoryId", frontmatter.sourceMemoryId);
84
+ assignString(provenance, "sourceTurnId", frontmatter.sourceTurnId);
85
+ assignString(provenance, "validAt", frontmatter.valid_at);
86
+ assignString(provenance, "invalidAt", frontmatter.invalid_at);
87
+ assignString(provenance, "forgottenAt", frontmatter.forgottenAt);
88
+ assignString(provenance, "forgottenReason", frontmatter.forgottenReason);
89
+ if (Array.isArray(frontmatter.derived_from) && frontmatter.derived_from.length > 0) {
90
+ provenance.derivedFrom = stringList(frontmatter.derived_from);
91
+ }
92
+ if (frontmatter.derived_via !== void 0) {
93
+ provenance.derivedVia = frontmatter.derived_via;
94
+ }
95
+ return provenance;
96
+ }
97
+ function normalizeRetrievedMemoryProvenance(value) {
98
+ if (!value || typeof value !== "object") return void 0;
99
+ const raw = value;
100
+ const source = nonEmptyString(raw.source) ?? "unknown";
101
+ const scope = nonEmptyString(raw.scope) ?? "unknown";
102
+ const retrievalReason = nonEmptyString(raw.retrievalReason) ?? "retrieved";
103
+ let safety = isRetrievedMemorySafety(raw.safety) ? raw.safety : raw.safeToUse === false ? "requires-review" : "safe";
104
+ if (raw.safeToUse === false && safety === "safe") {
105
+ safety = "requires-review";
106
+ }
107
+ const correctionState = isRetrievedMemoryCorrectionState(raw.correctionState) ? raw.correctionState : raw.corrected === true ? "correction" : "none";
108
+ const safetyReasons = stringList(raw.safetyReasons);
109
+ const provenance = {
110
+ source,
111
+ scope,
112
+ userContextScopes: normalizeScopeList(raw.userContextScopes),
113
+ retrievalReason,
114
+ confidence: clamp01(raw.confidence),
115
+ stale: raw.stale === true,
116
+ corrected: raw.corrected === true || correctionState !== "none",
117
+ correctionState,
118
+ safeToUse: safety === "safe",
119
+ safety,
120
+ safetyReasons
121
+ };
122
+ assignString(provenance, "created", raw.created);
123
+ assignString(provenance, "updated", raw.updated);
124
+ assignString(provenance, "namespace", raw.namespace);
125
+ assignStatus(provenance, "status", raw.status);
126
+ assignLifecycleState(provenance, "lifecycleState", raw.lifecycleState);
127
+ assignVerificationState(provenance, "verificationState", raw.verificationState);
128
+ assignPolicyClass(provenance, "policyClass", raw.policyClass);
129
+ assignString(provenance, "sourceMemoryId", raw.sourceMemoryId);
130
+ assignString(provenance, "sourceTurnId", raw.sourceTurnId);
131
+ assignString(provenance, "validAt", raw.validAt);
132
+ assignString(provenance, "invalidAt", raw.invalidAt);
133
+ assignString(provenance, "forgottenAt", raw.forgottenAt);
134
+ assignString(provenance, "forgottenReason", raw.forgottenReason);
135
+ const derivedFrom = stringList(raw.derivedFrom);
136
+ if (derivedFrom.length > 0) provenance.derivedFrom = derivedFrom;
137
+ if (raw.derivedVia === "split" || raw.derivedVia === "merge" || raw.derivedVia === "update" || raw.derivedVia === "pattern-reinforcement") {
138
+ provenance.derivedVia = raw.derivedVia;
139
+ }
140
+ return provenance;
141
+ }
142
+ function summarizeRetrievedMemoryProvenance(provenance) {
143
+ return [
144
+ `source=${provenance.source}`,
145
+ `created=${provenance.created ?? "unknown"}`,
146
+ `scope=${provenance.scope}`,
147
+ `confidence=${provenance.confidence.toFixed(2)}`,
148
+ `stale=${provenance.stale ? "true" : "false"}`,
149
+ `corrected=${provenance.corrected ? provenance.correctionState : "false"}`,
150
+ `safe=${provenance.safeToUse ? "true" : "false"}`
151
+ ].join(" ");
152
+ }
153
+ function inferUserContextScopes(frontmatter) {
154
+ const scoped = frontmatter;
155
+ return normalizeScopeList([
156
+ ...Array.isArray(scoped.userContextScopes) ? scoped.userContextScopes : [],
157
+ ...Array.isArray(frontmatter.tags) ? frontmatter.tags : []
158
+ ]);
159
+ }
160
+ function normalizeScopeList(values) {
161
+ const input = Array.isArray(values) ? values : [];
162
+ const seen = /* @__PURE__ */ new Set();
163
+ const normalized = [];
164
+ for (const value of input) {
165
+ const scope = normalizeUserContextScope(value);
166
+ if (!scope || seen.has(scope)) continue;
167
+ seen.add(scope);
168
+ normalized.push(scope);
169
+ }
170
+ return normalized;
171
+ }
172
+ function isStale(frontmatter, nowMs) {
173
+ if (frontmatter.status === "superseded" || frontmatter.status === "archived" || frontmatter.status === "forgotten") {
174
+ return true;
175
+ }
176
+ if (frontmatter.lifecycleState === "stale" || frontmatter.lifecycleState === "archived") {
177
+ return true;
178
+ }
179
+ const expiresAtMs = parseEpochMs(frontmatter.expiresAt);
180
+ if (expiresAtMs !== null && expiresAtMs <= nowMs) return true;
181
+ const invalidAtMs = parseEpochMs(frontmatter.invalid_at);
182
+ if (invalidAtMs !== null && invalidAtMs <= nowMs) return true;
183
+ return false;
184
+ }
185
+ function inferCorrectionState(frontmatter) {
186
+ if (frontmatter.status === "forgotten") return "forgotten";
187
+ if (frontmatter.status === "superseded" || frontmatter.supersededBy || frontmatter.supersededAt) {
188
+ return "superseded";
189
+ }
190
+ if (frontmatter.verificationState === "disputed") return "disputed";
191
+ if (frontmatter.category === "correction" || frontmatter.supersedes) {
192
+ return "correction";
193
+ }
194
+ return "none";
195
+ }
196
+ function inferSafetyReasons(input) {
197
+ const reasons = [];
198
+ const { frontmatter, stale, userContextScopes, currentContextScopes } = input;
199
+ if (frontmatter.status === "forgotten") reasons.push("status=forgotten");
200
+ if (frontmatter.status === "rejected") reasons.push("status=rejected");
201
+ if (frontmatter.status === "quarantined") reasons.push("status=quarantined");
202
+ if (frontmatter.status === "pending_review") reasons.push("status=pending_review");
203
+ if (frontmatter.status === "superseded") reasons.push("status=superseded");
204
+ if (frontmatter.status === "archived") reasons.push("status=archived");
205
+ if (frontmatter.verificationState === "disputed") {
206
+ reasons.push("verification=disputed");
207
+ }
208
+ if (stale) reasons.push("stale=true");
209
+ const boundaryScopes = userContextScopes.filter(isUserBoundaryScope);
210
+ if (boundaryScopes.length > 0) {
211
+ const current = new Set(currentContextScopes);
212
+ const hasMatchingBoundary = boundaryScopes.some((scope) => current.has(scope));
213
+ if (!hasMatchingBoundary) {
214
+ const joined = boundaryScopes.join(",");
215
+ if (boundaryScopes.includes("do-not-use-outside-this-context")) {
216
+ reasons.push(`boundary-blocked=${joined}`);
217
+ } else {
218
+ reasons.push(`boundary-review=${joined}`);
219
+ }
220
+ }
221
+ }
222
+ return uniqueStrings(reasons);
223
+ }
224
+ function inferSafety(reasons) {
225
+ if (reasons.some(
226
+ (reason) => reason === "status=forgotten" || reason === "status=rejected" || reason === "status=quarantined" || reason.startsWith("boundary-blocked=")
227
+ )) {
228
+ return "blocked";
229
+ }
230
+ return reasons.length > 0 ? "requires-review" : "safe";
231
+ }
232
+ function safeNow(now) {
233
+ const value = now ? now() : Date.now();
234
+ return Number.isFinite(value) ? value : Date.now();
235
+ }
236
+ function parseEpochMs(value) {
237
+ if (typeof value !== "string" || value.trim().length === 0) return null;
238
+ const parsed = Date.parse(value);
239
+ return Number.isFinite(parsed) ? parsed : null;
240
+ }
241
+ function clamp01(value) {
242
+ if (typeof value !== "number" || !Number.isFinite(value)) return 0;
243
+ return Math.min(1, Math.max(0, value));
244
+ }
245
+ function nonEmptyString(value) {
246
+ if (typeof value !== "string") return void 0;
247
+ const trimmed = value.trim();
248
+ return trimmed.length > 0 ? trimmed : void 0;
249
+ }
250
+ function stringList(value) {
251
+ if (!Array.isArray(value)) return [];
252
+ return uniqueStrings(
253
+ value.filter((item) => typeof item === "string").map((item) => item.trim()).filter((item) => item.length > 0)
254
+ );
255
+ }
256
+ function uniqueStrings(values) {
257
+ const seen = /* @__PURE__ */ new Set();
258
+ const out = [];
259
+ for (const value of values) {
260
+ if (seen.has(value)) continue;
261
+ seen.add(value);
262
+ out.push(value);
263
+ }
264
+ return out;
265
+ }
266
+ function assignString(target, key, value) {
267
+ const normalized = nonEmptyString(value);
268
+ if (normalized !== void 0) {
269
+ target[key] = normalized;
270
+ }
271
+ }
272
+ function assignStatus(target, key, value) {
273
+ if (isMemoryStatus(value)) target[key] = value;
274
+ }
275
+ function assignLifecycleState(target, key, value) {
276
+ if (isLifecycleState(value)) target[key] = value;
277
+ }
278
+ function assignVerificationState(target, key, value) {
279
+ if (isVerificationState(value)) target[key] = value;
280
+ }
281
+ function assignPolicyClass(target, key, value) {
282
+ if (isPolicyClass(value)) target[key] = value;
283
+ }
284
+ function isMemoryStatus(value) {
285
+ return typeof value === "string" && MEMORY_STATUS_VALUES.includes(value);
286
+ }
287
+ function isLifecycleState(value) {
288
+ return typeof value === "string" && LIFECYCLE_STATE_VALUES.includes(value);
289
+ }
290
+ function isVerificationState(value) {
291
+ return typeof value === "string" && VERIFICATION_STATE_VALUES.includes(value);
292
+ }
293
+ function isPolicyClass(value) {
294
+ return typeof value === "string" && POLICY_CLASS_VALUES.includes(value);
295
+ }
296
+ function isRetrievedMemorySafety(value) {
297
+ return typeof value === "string" && SAFETY_VALUES.includes(value);
298
+ }
299
+ function isRetrievedMemoryCorrectionState(value) {
300
+ return typeof value === "string" && CORRECTION_STATE_VALUES.includes(value);
301
+ }
302
+
303
+ export {
304
+ buildRetrievedMemoryProvenance,
305
+ normalizeRetrievedMemoryProvenance,
306
+ summarizeRetrievedMemoryProvenance
307
+ };
308
+ //# sourceMappingURL=chunk-AC5LO7IU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/memory-provenance.ts"],"sourcesContent":["import type {\n LifecycleState,\n MemoryFile,\n MemoryFrontmatter,\n MemoryStatus,\n PolicyClass,\n VerificationState,\n} from \"./types.js\";\nimport {\n isUserBoundaryScope,\n normalizeUserContextScope,\n type UserContextScope,\n} from \"./user-model.js\";\n\nexport type RetrievedMemoryCorrectionState =\n | \"none\"\n | \"correction\"\n | \"superseded\"\n | \"disputed\"\n | \"forgotten\";\n\nexport type RetrievedMemorySafety = \"safe\" | \"requires-review\" | \"blocked\";\n\nexport interface RetrievedMemoryProvenance {\n /** Frontmatter source, for example conversation, artifact, import, or consolidation. */\n source: string;\n /** ISO timestamp the memory was created, when known. */\n created?: string;\n /** ISO timestamp the memory was last updated, when known. */\n updated?: string;\n /** Namespace that produced the result, when known. */\n namespace?: string;\n /** Concrete retrieval scope. Defaults to namespace:<name> or the storage path. */\n scope: string;\n /** User-aware context scopes inferred from explicit scope metadata or tags. */\n userContextScopes: UserContextScope[];\n /** Why this memory was retrieved for the current response. */\n retrievalReason: string;\n /** Memory confidence clamped into [0, 1]. */\n confidence: number;\n /** Whether lifecycle, validity, or expiry metadata says this memory is stale now. */\n stale: boolean;\n /** Whether this result represents, has, or is affected by a user/system correction. */\n corrected: boolean;\n correctionState: RetrievedMemoryCorrectionState;\n /** Whether the memory is safe to use in the current context without asking first. */\n safeToUse: boolean;\n safety: RetrievedMemorySafety;\n safetyReasons: string[];\n status?: MemoryStatus;\n lifecycleState?: LifecycleState;\n verificationState?: VerificationState;\n policyClass?: PolicyClass;\n sourceMemoryId?: string;\n sourceTurnId?: string;\n derivedFrom?: string[];\n derivedVia?: MemoryFrontmatter[\"derived_via\"];\n validAt?: string;\n invalidAt?: string;\n forgottenAt?: string;\n forgottenReason?: string;\n}\n\nexport interface BuildRetrievedMemoryProvenanceOptions {\n namespace?: string;\n scope?: string;\n retrievalReason?: string;\n currentContextScopes?: readonly unknown[];\n now?: () => number;\n}\n\nconst MEMORY_STATUS_VALUES: readonly MemoryStatus[] = [\n \"active\",\n \"pending_review\",\n \"rejected\",\n \"quarantined\",\n \"superseded\",\n \"archived\",\n \"forgotten\",\n];\n\nconst LIFECYCLE_STATE_VALUES: readonly LifecycleState[] = [\n \"candidate\",\n \"validated\",\n \"active\",\n \"stale\",\n \"archived\",\n];\n\nconst VERIFICATION_STATE_VALUES: readonly VerificationState[] = [\n \"unverified\",\n \"user_confirmed\",\n \"system_inferred\",\n \"disputed\",\n];\n\nconst POLICY_CLASS_VALUES: readonly PolicyClass[] = [\n \"ephemeral\",\n \"durable\",\n \"protected\",\n];\n\nconst SAFETY_VALUES: readonly RetrievedMemorySafety[] = [\n \"safe\",\n \"requires-review\",\n \"blocked\",\n];\n\nconst CORRECTION_STATE_VALUES: readonly RetrievedMemoryCorrectionState[] = [\n \"none\",\n \"correction\",\n \"superseded\",\n \"disputed\",\n \"forgotten\",\n];\n\nexport function buildRetrievedMemoryProvenance(\n memory: MemoryFile,\n options: BuildRetrievedMemoryProvenanceOptions = {},\n): RetrievedMemoryProvenance {\n const frontmatter = memory.frontmatter;\n const nowMs = safeNow(options.now);\n const namespace = nonEmptyString(options.namespace);\n const scope =\n nonEmptyString(options.scope) ??\n (namespace ? `namespace:${namespace}` : nonEmptyString(memory.path) ?? \"unknown\");\n const userContextScopes = inferUserContextScopes(frontmatter);\n const currentContextScopes = normalizeScopeList(options.currentContextScopes);\n const stale = isStale(frontmatter, nowMs);\n const correctionState = inferCorrectionState(frontmatter);\n const corrected = correctionState !== \"none\";\n const safetyReasons = inferSafetyReasons({\n frontmatter,\n stale,\n userContextScopes,\n currentContextScopes,\n });\n const safety = inferSafety(safetyReasons);\n const provenance: RetrievedMemoryProvenance = {\n source: nonEmptyString(frontmatter.source) ?? \"unknown\",\n scope,\n userContextScopes,\n retrievalReason: nonEmptyString(options.retrievalReason) ?? \"retrieved\",\n confidence: clamp01(frontmatter.confidence),\n stale,\n corrected,\n correctionState,\n safeToUse: safety === \"safe\",\n safety,\n safetyReasons,\n };\n\n assignString(provenance, \"created\", frontmatter.created);\n assignString(provenance, \"updated\", frontmatter.updated);\n assignString(provenance, \"namespace\", namespace);\n assignStatus(provenance, \"status\", frontmatter.status);\n assignLifecycleState(provenance, \"lifecycleState\", frontmatter.lifecycleState);\n assignVerificationState(provenance, \"verificationState\", frontmatter.verificationState);\n assignPolicyClass(provenance, \"policyClass\", frontmatter.policyClass);\n assignString(provenance, \"sourceMemoryId\", frontmatter.sourceMemoryId);\n assignString(provenance, \"sourceTurnId\", frontmatter.sourceTurnId);\n assignString(provenance, \"validAt\", frontmatter.valid_at);\n assignString(provenance, \"invalidAt\", frontmatter.invalid_at);\n assignString(provenance, \"forgottenAt\", frontmatter.forgottenAt);\n assignString(provenance, \"forgottenReason\", frontmatter.forgottenReason);\n if (Array.isArray(frontmatter.derived_from) && frontmatter.derived_from.length > 0) {\n provenance.derivedFrom = stringList(frontmatter.derived_from);\n }\n if (frontmatter.derived_via !== undefined) {\n provenance.derivedVia = frontmatter.derived_via;\n }\n\n return provenance;\n}\n\nexport function normalizeRetrievedMemoryProvenance(\n value: unknown,\n): RetrievedMemoryProvenance | undefined {\n if (!value || typeof value !== \"object\") return undefined;\n const raw = value as Record<string, unknown>;\n const source = nonEmptyString(raw.source) ?? \"unknown\";\n const scope = nonEmptyString(raw.scope) ?? \"unknown\";\n const retrievalReason = nonEmptyString(raw.retrievalReason) ?? \"retrieved\";\n let safety = isRetrievedMemorySafety(raw.safety)\n ? raw.safety\n : raw.safeToUse === false\n ? \"requires-review\"\n : \"safe\";\n if (raw.safeToUse === false && safety === \"safe\") {\n safety = \"requires-review\";\n }\n const correctionState = isRetrievedMemoryCorrectionState(raw.correctionState)\n ? raw.correctionState\n : raw.corrected === true\n ? \"correction\"\n : \"none\";\n const safetyReasons = stringList(raw.safetyReasons);\n const provenance: RetrievedMemoryProvenance = {\n source,\n scope,\n userContextScopes: normalizeScopeList(raw.userContextScopes),\n retrievalReason,\n confidence: clamp01(raw.confidence),\n stale: raw.stale === true,\n corrected: raw.corrected === true || correctionState !== \"none\",\n correctionState,\n safeToUse: safety === \"safe\",\n safety,\n safetyReasons,\n };\n\n assignString(provenance, \"created\", raw.created);\n assignString(provenance, \"updated\", raw.updated);\n assignString(provenance, \"namespace\", raw.namespace);\n assignStatus(provenance, \"status\", raw.status);\n assignLifecycleState(provenance, \"lifecycleState\", raw.lifecycleState);\n assignVerificationState(provenance, \"verificationState\", raw.verificationState);\n assignPolicyClass(provenance, \"policyClass\", raw.policyClass);\n assignString(provenance, \"sourceMemoryId\", raw.sourceMemoryId);\n assignString(provenance, \"sourceTurnId\", raw.sourceTurnId);\n assignString(provenance, \"validAt\", raw.validAt);\n assignString(provenance, \"invalidAt\", raw.invalidAt);\n assignString(provenance, \"forgottenAt\", raw.forgottenAt);\n assignString(provenance, \"forgottenReason\", raw.forgottenReason);\n const derivedFrom = stringList(raw.derivedFrom);\n if (derivedFrom.length > 0) provenance.derivedFrom = derivedFrom;\n if (\n raw.derivedVia === \"split\" ||\n raw.derivedVia === \"merge\" ||\n raw.derivedVia === \"update\" ||\n raw.derivedVia === \"pattern-reinforcement\"\n ) {\n provenance.derivedVia = raw.derivedVia;\n }\n return provenance;\n}\n\nexport function summarizeRetrievedMemoryProvenance(\n provenance: RetrievedMemoryProvenance,\n): string {\n return [\n `source=${provenance.source}`,\n `created=${provenance.created ?? \"unknown\"}`,\n `scope=${provenance.scope}`,\n `confidence=${provenance.confidence.toFixed(2)}`,\n `stale=${provenance.stale ? \"true\" : \"false\"}`,\n `corrected=${provenance.corrected ? provenance.correctionState : \"false\"}`,\n `safe=${provenance.safeToUse ? \"true\" : \"false\"}`,\n ].join(\" \");\n}\n\nfunction inferUserContextScopes(frontmatter: MemoryFrontmatter): UserContextScope[] {\n const scoped = frontmatter as MemoryFrontmatter & {\n userContextScopes?: readonly unknown[];\n };\n return normalizeScopeList([\n ...(Array.isArray(scoped.userContextScopes) ? scoped.userContextScopes : []),\n ...(Array.isArray(frontmatter.tags) ? frontmatter.tags : []),\n ]);\n}\n\nfunction normalizeScopeList(values: unknown): UserContextScope[] {\n const input = Array.isArray(values) ? values : [];\n const seen = new Set<UserContextScope>();\n const normalized: UserContextScope[] = [];\n for (const value of input) {\n const scope = normalizeUserContextScope(value);\n if (!scope || seen.has(scope)) continue;\n seen.add(scope);\n normalized.push(scope);\n }\n return normalized;\n}\n\nfunction isStale(frontmatter: MemoryFrontmatter, nowMs: number): boolean {\n if (\n frontmatter.status === \"superseded\" ||\n frontmatter.status === \"archived\" ||\n frontmatter.status === \"forgotten\"\n ) {\n return true;\n }\n if (\n frontmatter.lifecycleState === \"stale\" ||\n frontmatter.lifecycleState === \"archived\"\n ) {\n return true;\n }\n const expiresAtMs = parseEpochMs(frontmatter.expiresAt);\n if (expiresAtMs !== null && expiresAtMs <= nowMs) return true;\n const invalidAtMs = parseEpochMs(frontmatter.invalid_at);\n if (invalidAtMs !== null && invalidAtMs <= nowMs) return true;\n return false;\n}\n\nfunction inferCorrectionState(\n frontmatter: MemoryFrontmatter,\n): RetrievedMemoryCorrectionState {\n if (frontmatter.status === \"forgotten\") return \"forgotten\";\n if (\n frontmatter.status === \"superseded\" ||\n frontmatter.supersededBy ||\n frontmatter.supersededAt\n ) {\n return \"superseded\";\n }\n if (frontmatter.verificationState === \"disputed\") return \"disputed\";\n if (frontmatter.category === \"correction\" || frontmatter.supersedes) {\n return \"correction\";\n }\n return \"none\";\n}\n\nfunction inferSafetyReasons(input: {\n frontmatter: MemoryFrontmatter;\n stale: boolean;\n userContextScopes: UserContextScope[];\n currentContextScopes: UserContextScope[];\n}): string[] {\n const reasons: string[] = [];\n const { frontmatter, stale, userContextScopes, currentContextScopes } = input;\n if (frontmatter.status === \"forgotten\") reasons.push(\"status=forgotten\");\n if (frontmatter.status === \"rejected\") reasons.push(\"status=rejected\");\n if (frontmatter.status === \"quarantined\") reasons.push(\"status=quarantined\");\n if (frontmatter.status === \"pending_review\") reasons.push(\"status=pending_review\");\n if (frontmatter.status === \"superseded\") reasons.push(\"status=superseded\");\n if (frontmatter.status === \"archived\") reasons.push(\"status=archived\");\n if (frontmatter.verificationState === \"disputed\") {\n reasons.push(\"verification=disputed\");\n }\n if (stale) reasons.push(\"stale=true\");\n\n const boundaryScopes = userContextScopes.filter(isUserBoundaryScope);\n if (boundaryScopes.length > 0) {\n const current = new Set(currentContextScopes);\n const hasMatchingBoundary = boundaryScopes.some((scope) => current.has(scope));\n if (!hasMatchingBoundary) {\n const joined = boundaryScopes.join(\",\");\n if (boundaryScopes.includes(\"do-not-use-outside-this-context\")) {\n reasons.push(`boundary-blocked=${joined}`);\n } else {\n reasons.push(`boundary-review=${joined}`);\n }\n }\n }\n return uniqueStrings(reasons);\n}\n\nfunction inferSafety(reasons: readonly string[]): RetrievedMemorySafety {\n if (\n reasons.some((reason) =>\n reason === \"status=forgotten\" ||\n reason === \"status=rejected\" ||\n reason === \"status=quarantined\" ||\n reason.startsWith(\"boundary-blocked=\"),\n )\n ) {\n return \"blocked\";\n }\n return reasons.length > 0 ? \"requires-review\" : \"safe\";\n}\n\nfunction safeNow(now: (() => number) | undefined): number {\n const value = now ? now() : Date.now();\n return Number.isFinite(value) ? value : Date.now();\n}\n\nfunction parseEpochMs(value: unknown): number | null {\n if (typeof value !== \"string\" || value.trim().length === 0) return null;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction clamp01(value: unknown): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return 0;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction stringList(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return uniqueStrings(\n value\n .filter((item): item is string => typeof item === \"string\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0),\n );\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n if (seen.has(value)) continue;\n seen.add(value);\n out.push(value);\n }\n return out;\n}\n\ntype RetrievedMemoryProvenanceStringField =\n | \"created\"\n | \"updated\"\n | \"namespace\"\n | \"sourceMemoryId\"\n | \"sourceTurnId\"\n | \"validAt\"\n | \"invalidAt\"\n | \"forgottenAt\"\n | \"forgottenReason\";\n\nfunction assignString(\n target: RetrievedMemoryProvenance,\n key: RetrievedMemoryProvenanceStringField,\n value: unknown,\n): void {\n const normalized = nonEmptyString(value);\n if (normalized !== undefined) {\n target[key] = normalized;\n }\n}\n\nfunction assignStatus(\n target: RetrievedMemoryProvenance,\n key: \"status\",\n value: unknown,\n): void {\n if (isMemoryStatus(value)) target[key] = value;\n}\n\nfunction assignLifecycleState(\n target: RetrievedMemoryProvenance,\n key: \"lifecycleState\",\n value: unknown,\n): void {\n if (isLifecycleState(value)) target[key] = value;\n}\n\nfunction assignVerificationState(\n target: RetrievedMemoryProvenance,\n key: \"verificationState\",\n value: unknown,\n): void {\n if (isVerificationState(value)) target[key] = value;\n}\n\nfunction assignPolicyClass(\n target: RetrievedMemoryProvenance,\n key: \"policyClass\",\n value: unknown,\n): void {\n if (isPolicyClass(value)) target[key] = value;\n}\n\nfunction isMemoryStatus(value: unknown): value is MemoryStatus {\n return typeof value === \"string\" && MEMORY_STATUS_VALUES.includes(value as MemoryStatus);\n}\n\nfunction isLifecycleState(value: unknown): value is LifecycleState {\n return typeof value === \"string\" && LIFECYCLE_STATE_VALUES.includes(value as LifecycleState);\n}\n\nfunction isVerificationState(value: unknown): value is VerificationState {\n return typeof value === \"string\" && VERIFICATION_STATE_VALUES.includes(value as VerificationState);\n}\n\nfunction isPolicyClass(value: unknown): value is PolicyClass {\n return typeof value === \"string\" && POLICY_CLASS_VALUES.includes(value as PolicyClass);\n}\n\nfunction isRetrievedMemorySafety(value: unknown): value is RetrievedMemorySafety {\n return typeof value === \"string\" && SAFETY_VALUES.includes(value as RetrievedMemorySafety);\n}\n\nfunction isRetrievedMemoryCorrectionState(\n value: unknown,\n): value is RetrievedMemoryCorrectionState {\n return typeof value === \"string\" && CORRECTION_STATE_VALUES.includes(value as RetrievedMemoryCorrectionState);\n}\n"],"mappings":"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","names":[]}