@remnic/core 1.1.11 → 1.1.13

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 (1462) hide show
  1. package/README.md +3 -3
  2. package/dist/access-cli.d.ts +2 -1
  3. package/dist/access-cli.js +293 -104
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +31 -62
  6. package/dist/access-http.js +53 -35
  7. package/dist/access-mcp.d.ts +31 -8
  8. package/dist/access-mcp.js +45 -34
  9. package/dist/access-schema.d.ts +197 -14
  10. package/dist/access-schema.js +16 -5
  11. package/dist/access-service-DcCDmNYC.d.ts +1542 -0
  12. package/dist/access-service.d.ts +30 -9
  13. package/dist/access-service.js +42 -32
  14. package/dist/action-confidence.d.ts +83 -0
  15. package/dist/action-confidence.js +22 -0
  16. package/dist/active-memory-bridge.d.ts +1 -1
  17. package/dist/active-memory-bridge.js +2 -2
  18. package/dist/active-recall.d.ts +1 -1
  19. package/dist/active-recall.js +11 -3
  20. package/dist/active-recall.js.map +1 -1
  21. package/dist/adapters/claude-code.d.ts +24 -0
  22. package/dist/adapters/claude-code.js +9 -0
  23. package/dist/adapters/codex.d.ts +25 -0
  24. package/dist/adapters/codex.js +9 -0
  25. package/dist/adapters/hermes.d.ts +35 -0
  26. package/dist/adapters/hermes.js +9 -0
  27. package/dist/adapters/index.d.ts +6 -0
  28. package/dist/adapters/index.js +26 -0
  29. package/dist/adapters/registry.d.ts +20 -0
  30. package/dist/adapters/registry.js +13 -0
  31. package/dist/adapters/replit.d.ts +28 -0
  32. package/dist/adapters/replit.js +9 -0
  33. package/dist/adapters/types.d.ts +43 -0
  34. package/dist/adapters/types.js +8 -0
  35. package/dist/behavior-learner.d.ts +1 -1
  36. package/dist/behavior-signals.d.ts +1 -1
  37. package/dist/bootstrap.d.ts +23 -6
  38. package/dist/boxes.d.ts +7 -0
  39. package/dist/boxes.js +1 -1
  40. package/dist/briefing.d.ts +5 -3
  41. package/dist/briefing.js +10 -7
  42. package/dist/buffer-surprise-report.d.ts +1 -1
  43. package/dist/buffer-surprise-report.js +1 -1
  44. package/dist/buffer.d.ts +18 -4
  45. package/dist/buffer.js +1 -1
  46. package/dist/calibration.d.ts +1 -1
  47. package/dist/calibration.js +6 -6
  48. package/dist/capsule-cli.d.ts +4 -4
  49. package/dist/capsule-cli.js +1 -1
  50. package/dist/capsule-crypto-5CYAGVC5.js +18 -0
  51. package/dist/capsule-merge-4MGKE7C5.js +189 -0
  52. package/dist/causal-behavior.d.ts +9 -29
  53. package/dist/causal-behavior.js +6 -3
  54. package/dist/causal-behavior.js.map +1 -1
  55. package/dist/causal-chain.js +3 -2
  56. package/dist/causal-consolidation.d.ts +2 -2
  57. package/dist/causal-consolidation.js +28 -17
  58. package/dist/causal-consolidation.js.map +1 -1
  59. package/dist/causal-retrieval.js +3 -3
  60. package/dist/causal-trajectory.js +1 -1
  61. package/dist/chunk-25MQ7IHJ.js +427 -0
  62. package/dist/chunk-25MQ7IHJ.js.map +1 -0
  63. package/dist/chunk-2F2W355T.js +256 -0
  64. package/dist/chunk-2F2W355T.js.map +1 -0
  65. package/dist/chunk-2KI4QFHU.js +228 -0
  66. package/dist/chunk-2KI4QFHU.js.map +1 -0
  67. package/dist/chunk-2PRQG7PV.js +86 -0
  68. package/dist/chunk-2PRQG7PV.js.map +1 -0
  69. package/dist/chunk-2QR3XXIC.js +2272 -0
  70. package/dist/chunk-2QR3XXIC.js.map +1 -0
  71. package/dist/chunk-2WWLHTZY.js +121 -0
  72. package/dist/chunk-326G7DJK.js +2185 -0
  73. package/dist/chunk-326G7DJK.js.map +1 -0
  74. package/dist/chunk-34DQE4KF.js +174 -0
  75. package/dist/chunk-34DQE4KF.js.map +1 -0
  76. package/dist/chunk-3APJ5EVB.js +601 -0
  77. package/dist/chunk-3APJ5EVB.js.map +1 -0
  78. package/dist/chunk-3HPAPHUK.js +51 -0
  79. package/dist/chunk-3HPAPHUK.js.map +1 -0
  80. package/dist/chunk-3JXBXXM2.js +69 -0
  81. package/dist/chunk-3JXBXXM2.js.map +1 -0
  82. package/dist/chunk-3KW65B36.js +681 -0
  83. package/dist/chunk-3KW65B36.js.map +1 -0
  84. package/dist/chunk-3UXOZBHV.js +20 -0
  85. package/dist/chunk-3UXOZBHV.js.map +1 -0
  86. package/dist/chunk-3VAL7ZL2.js +266 -0
  87. package/dist/chunk-3VAL7ZL2.js.map +1 -0
  88. package/dist/chunk-3Y4P7RXM.js +31 -0
  89. package/dist/chunk-3Y4P7RXM.js.map +1 -0
  90. package/dist/chunk-47VWKCAF.js +273 -0
  91. package/dist/chunk-47VWKCAF.js.map +1 -0
  92. package/dist/chunk-4CRG46BG.js +271 -0
  93. package/dist/chunk-4RA3C3EV.js +60 -0
  94. package/dist/chunk-4RA3C3EV.js.map +1 -0
  95. package/dist/chunk-5375UYTQ.js +914 -0
  96. package/dist/chunk-5375UYTQ.js.map +1 -0
  97. package/dist/chunk-56K5QLHX.js +506 -0
  98. package/dist/chunk-56K5QLHX.js.map +1 -0
  99. package/dist/chunk-5NXIJZFX.js +180 -0
  100. package/dist/chunk-5NXIJZFX.js.map +1 -0
  101. package/dist/chunk-5RGLBDQF.js +596 -0
  102. package/dist/chunk-5RGLBDQF.js.map +1 -0
  103. package/dist/chunk-5UZXUTVO.js +9 -0
  104. package/dist/chunk-5UZXUTVO.js.map +1 -0
  105. package/dist/chunk-65PG43EQ.js +105 -0
  106. package/dist/chunk-65PG43EQ.js.map +1 -0
  107. package/dist/chunk-66DHUKLO.js +57 -0
  108. package/dist/chunk-66DHUKLO.js.map +1 -0
  109. package/dist/chunk-6FC5EGNV.js +46 -0
  110. package/dist/chunk-6FC5EGNV.js.map +1 -0
  111. package/dist/chunk-6H2TESSP.js +62 -0
  112. package/dist/chunk-6H2TESSP.js.map +1 -0
  113. package/dist/chunk-6LVVDPJ4.js +32 -0
  114. package/dist/chunk-6LVVDPJ4.js.map +1 -0
  115. package/dist/chunk-6NKAQ74D.js +2237 -0
  116. package/dist/chunk-6NKAQ74D.js.map +1 -0
  117. package/dist/chunk-6RVI47ZR.js +159 -0
  118. package/dist/chunk-6RVI47ZR.js.map +1 -0
  119. package/dist/chunk-7AAT6G4Q.js +5117 -0
  120. package/dist/chunk-7AAT6G4Q.js.map +1 -0
  121. package/dist/chunk-7DTASS5T.js +29 -0
  122. package/dist/chunk-7DTASS5T.js.map +1 -0
  123. package/dist/chunk-7IASACLB.js +596 -0
  124. package/dist/chunk-7MNMYOFP.js +32 -0
  125. package/dist/chunk-7MNMYOFP.js.map +1 -0
  126. package/dist/chunk-7N4KAIGN.js +133 -0
  127. package/dist/chunk-7N4KAIGN.js.map +1 -0
  128. package/dist/chunk-7OZ53EXP.js +101 -0
  129. package/dist/chunk-7OZ53EXP.js.map +1 -0
  130. package/dist/chunk-7XYTQGCC.js +134 -0
  131. package/dist/chunk-7XYTQGCC.js.map +1 -0
  132. package/dist/chunk-A2XUIMJ3.js +341 -0
  133. package/dist/chunk-A2XUIMJ3.js.map +1 -0
  134. package/dist/chunk-AC5LO7IU.js +308 -0
  135. package/dist/chunk-AC5LO7IU.js.map +1 -0
  136. package/dist/chunk-AGZQD76C.js +201 -0
  137. package/dist/chunk-AGZQD76C.js.map +1 -0
  138. package/dist/chunk-AH2JUU6X.js +336 -0
  139. package/dist/chunk-AH2JUU6X.js.map +1 -0
  140. package/dist/chunk-APO3DCMU.js +361 -0
  141. package/dist/chunk-APO3DCMU.js.map +1 -0
  142. package/dist/chunk-BFBF3XEF.js +283 -0
  143. package/dist/chunk-BFBF3XEF.js.map +1 -0
  144. package/dist/chunk-BJ3KMYTB.js +1974 -0
  145. package/dist/chunk-BJ3KMYTB.js.map +1 -0
  146. package/dist/chunk-C5BCH4ZS.js +317 -0
  147. package/dist/chunk-C5BCH4ZS.js.map +1 -0
  148. package/dist/chunk-CHEL3SKB.js +6758 -0
  149. package/dist/chunk-CHEL3SKB.js.map +1 -0
  150. package/dist/chunk-CQZRLNMV.js +1491 -0
  151. package/dist/chunk-CQZRLNMV.js.map +1 -0
  152. package/dist/chunk-D46YSIYX.js +892 -0
  153. package/dist/chunk-D46YSIYX.js.map +1 -0
  154. package/dist/chunk-DB5A3NHS.js +906 -0
  155. package/dist/chunk-DB5A3NHS.js.map +1 -0
  156. package/dist/chunk-DINWEURR.js +648 -0
  157. package/dist/chunk-DINWEURR.js.map +1 -0
  158. package/dist/chunk-DK5LDEQM.js +530 -0
  159. package/dist/chunk-DK5LDEQM.js.map +1 -0
  160. package/dist/chunk-DOM4GKSW.js +34 -0
  161. package/dist/chunk-DOM4GKSW.js.map +1 -0
  162. package/dist/chunk-EDTHC6UD.js +1075 -0
  163. package/dist/chunk-EDTHC6UD.js.map +1 -0
  164. package/dist/chunk-EFJ3MQ4V.js +721 -0
  165. package/dist/chunk-EHRTFRWW.js +89 -0
  166. package/dist/chunk-EHRTFRWW.js.map +1 -0
  167. package/dist/chunk-FAJ7FZYM.js +11 -0
  168. package/dist/chunk-FAJ7FZYM.js.map +1 -0
  169. package/dist/chunk-FBYESMQ2.js +570 -0
  170. package/dist/chunk-FBYESMQ2.js.map +1 -0
  171. package/dist/chunk-FDU6HUUL.js +147 -0
  172. package/dist/chunk-FF4KLI5W.js +99 -0
  173. package/dist/chunk-FF4KLI5W.js.map +1 -0
  174. package/dist/chunk-FIT6DMX6.js +310 -0
  175. package/dist/chunk-FIT6DMX6.js.map +1 -0
  176. package/dist/chunk-FJ43PRLT.js +272 -0
  177. package/dist/chunk-FJ43PRLT.js.map +1 -0
  178. package/dist/chunk-FKFMOY3N.js +32 -0
  179. package/dist/chunk-FKFMOY3N.js.map +1 -0
  180. package/dist/chunk-FLTNHQK6.js +262 -0
  181. package/dist/chunk-FLTNHQK6.js.map +1 -0
  182. package/dist/chunk-GA454ALV.js +12436 -0
  183. package/dist/chunk-GA454ALV.js.map +1 -0
  184. package/dist/chunk-GGKRUQOO.js +228 -0
  185. package/dist/chunk-GIF42EW3.js +63 -0
  186. package/dist/chunk-GIF42EW3.js.map +1 -0
  187. package/dist/chunk-GL6I6MEQ.js +647 -0
  188. package/dist/chunk-H3ME6L6D.js +709 -0
  189. package/dist/chunk-H3ME6L6D.js.map +1 -0
  190. package/dist/chunk-HHLLAQGZ.js +1 -0
  191. package/dist/chunk-HXXBL2KD.js +2040 -0
  192. package/dist/chunk-I5V2VDIW.js +219 -0
  193. package/dist/chunk-I5V2VDIW.js.map +1 -0
  194. package/dist/chunk-I6K5FBRQ.js +35 -0
  195. package/dist/chunk-I6K5FBRQ.js.map +1 -0
  196. package/dist/chunk-ICRIXAP2.js +121 -0
  197. package/dist/chunk-ICRIXAP2.js.map +1 -0
  198. package/dist/chunk-J4EB7DNW.js +11 -0
  199. package/dist/chunk-J4EB7DNW.js.map +1 -0
  200. package/dist/chunk-JLFA7DQG.js +62 -0
  201. package/dist/chunk-JLFA7DQG.js.map +1 -0
  202. package/dist/chunk-KJTKLXTH.js +9 -0
  203. package/dist/chunk-KJTKLXTH.js.map +1 -0
  204. package/dist/chunk-KLAO5DGL.js +917 -0
  205. package/dist/chunk-KLAO5DGL.js.map +1 -0
  206. package/dist/chunk-KNKUID7G.js +183 -0
  207. package/dist/chunk-KOSORCJG.js +624 -0
  208. package/dist/chunk-KOSORCJG.js.map +1 -0
  209. package/dist/chunk-KUJVMMZQ.js +1262 -0
  210. package/dist/chunk-KUJVMMZQ.js.map +1 -0
  211. package/dist/chunk-LCR46JY5.js +123 -0
  212. package/dist/chunk-LCR46JY5.js.map +1 -0
  213. package/dist/chunk-LLQ2LLWF.js +148 -0
  214. package/dist/chunk-LLQ2LLWF.js.map +1 -0
  215. package/dist/chunk-LPMVBPA3.js +236 -0
  216. package/dist/chunk-LT3NLYSI.js +50 -0
  217. package/dist/chunk-LT3NLYSI.js.map +1 -0
  218. package/dist/chunk-LUDTDZLK.js +287 -0
  219. package/dist/chunk-LUDTDZLK.js.map +1 -0
  220. package/dist/chunk-M23FSH32.js +3963 -0
  221. package/dist/chunk-M23FSH32.js.map +1 -0
  222. package/dist/chunk-MC26UJIM.js +118 -0
  223. package/dist/chunk-ME6ESPZU.js +119 -0
  224. package/dist/chunk-ME6ESPZU.js.map +1 -0
  225. package/dist/chunk-MGKYQQYF.js +272 -0
  226. package/dist/chunk-MGKYQQYF.js.map +1 -0
  227. package/dist/chunk-MJFNCJXV.js +66 -0
  228. package/dist/chunk-MJFNCJXV.js.map +1 -0
  229. package/dist/chunk-MSWG7JI6.js +237 -0
  230. package/dist/chunk-MSWG7JI6.js.map +1 -0
  231. package/dist/chunk-MT25YHYH.js +141 -0
  232. package/dist/chunk-MT25YHYH.js.map +1 -0
  233. package/dist/chunk-MT4HVDUZ.js +53 -0
  234. package/dist/chunk-MY6TPVXW.js +219 -0
  235. package/dist/chunk-N2D6GXBM.js +267 -0
  236. package/dist/chunk-N2D6GXBM.js.map +1 -0
  237. package/dist/chunk-NJ3MJQZX.js +46 -0
  238. package/dist/chunk-NJ3MJQZX.js.map +1 -0
  239. package/dist/chunk-NMZY542O.js +335 -0
  240. package/dist/chunk-NMZY542O.js.map +1 -0
  241. package/dist/chunk-NNVTUXEB.js +23 -0
  242. package/dist/chunk-NZL6GGQE.js +375 -0
  243. package/dist/chunk-NZL6GGQE.js.map +1 -0
  244. package/dist/chunk-OAZ5MFUB.js +4124 -0
  245. package/dist/chunk-OAZ5MFUB.js.map +1 -0
  246. package/dist/chunk-OIGNEXKZ.js +237 -0
  247. package/dist/chunk-OIGNEXKZ.js.map +1 -0
  248. package/dist/chunk-OZKZ2TRP.js +3729 -0
  249. package/dist/chunk-OZKZ2TRP.js.map +1 -0
  250. package/dist/chunk-P4NEIHUT.js +108 -0
  251. package/dist/chunk-P7FMDTKL.js +103 -0
  252. package/dist/chunk-P7FMDTKL.js.map +1 -0
  253. package/dist/chunk-PD6O7AXF.js +110 -0
  254. package/dist/chunk-PD6O7AXF.js.map +1 -0
  255. package/dist/chunk-PHK3HARR.js +32 -0
  256. package/dist/chunk-PHK3HARR.js.map +1 -0
  257. package/dist/chunk-PIRJPV5T.js +98 -0
  258. package/dist/chunk-PIRJPV5T.js.map +1 -0
  259. package/dist/chunk-PK7H5L6Y.js +159 -0
  260. package/dist/chunk-PK7H5L6Y.js.map +1 -0
  261. package/dist/chunk-PR5FBTFU.js +233 -0
  262. package/dist/chunk-PR5FBTFU.js.map +1 -0
  263. package/dist/chunk-PU63GXWS.js +174 -0
  264. package/dist/chunk-PU63GXWS.js.map +1 -0
  265. package/dist/chunk-PYPOFEMK.js +294 -0
  266. package/dist/chunk-PYPOFEMK.js.map +1 -0
  267. package/dist/chunk-PZIAX57I.js +124 -0
  268. package/dist/chunk-PZIAX57I.js.map +1 -0
  269. package/dist/chunk-Q7P4WJDP.js +26 -0
  270. package/dist/chunk-Q7P4WJDP.js.map +1 -0
  271. package/dist/chunk-QDZ2RLEC.js +908 -0
  272. package/dist/chunk-QDZ2RLEC.js.map +1 -0
  273. package/dist/chunk-QQUAB63I.js +63 -0
  274. package/dist/chunk-QQUAB63I.js.map +1 -0
  275. package/dist/chunk-QRNI5JBH.js +18 -0
  276. package/dist/chunk-RHY3HH7P.js +601 -0
  277. package/dist/chunk-RHY3HH7P.js.map +1 -0
  278. package/dist/chunk-RK6F44Y6.js +84 -0
  279. package/dist/chunk-RK6F44Y6.js.map +1 -0
  280. package/dist/chunk-RRF5UOBJ.js +91 -0
  281. package/dist/chunk-RXDLTSWT.js +124 -0
  282. package/dist/chunk-RXDLTSWT.js.map +1 -0
  283. package/dist/chunk-RYED3SPJ.js +42 -0
  284. package/dist/chunk-RYED3SPJ.js.map +1 -0
  285. package/dist/chunk-S7KDBTWT.js +106 -0
  286. package/dist/chunk-S7KDBTWT.js.map +1 -0
  287. package/dist/chunk-SEDEKFYQ.js +1 -0
  288. package/dist/chunk-SOAU2OE2.js +125 -0
  289. package/dist/chunk-SOAU2OE2.js.map +1 -0
  290. package/dist/chunk-TECVW3JP.js +36 -0
  291. package/dist/chunk-TECVW3JP.js.map +1 -0
  292. package/dist/chunk-TFO23QT4.js +88 -0
  293. package/dist/chunk-TFO23QT4.js.map +1 -0
  294. package/dist/chunk-TK4UEOSK.js +76 -0
  295. package/dist/chunk-TK4UEOSK.js.map +1 -0
  296. package/dist/chunk-TKWGAOLV.js +122 -0
  297. package/dist/chunk-TKWGAOLV.js.map +1 -0
  298. package/dist/chunk-TMM4S4IJ.js +597 -0
  299. package/dist/chunk-TMM4S4IJ.js.map +1 -0
  300. package/dist/chunk-TMQLARTH.js +188 -0
  301. package/dist/chunk-TMQLARTH.js.map +1 -0
  302. package/dist/chunk-TPDBFYEG.js +130 -0
  303. package/dist/chunk-TPDBFYEG.js.map +1 -0
  304. package/dist/chunk-TPMQ3G6Z.js +145 -0
  305. package/dist/chunk-TPMQ3G6Z.js.map +1 -0
  306. package/dist/chunk-TZOLIGIG.js +61 -0
  307. package/dist/chunk-TZOLIGIG.js.map +1 -0
  308. package/dist/chunk-U3PN77QT.js +113 -0
  309. package/dist/chunk-U3WSW6PZ.js +277 -0
  310. package/dist/chunk-U4SCL7B7.js +640 -0
  311. package/dist/chunk-U4SCL7B7.js.map +1 -0
  312. package/dist/chunk-UWK5OXUJ.js +156 -0
  313. package/dist/chunk-UWK5OXUJ.js.map +1 -0
  314. package/dist/chunk-UWVJF25J.js +74 -0
  315. package/dist/chunk-UXHQAFNA.js +1317 -0
  316. package/dist/chunk-UXHQAFNA.js.map +1 -0
  317. package/dist/chunk-V5OCT34X.js +1 -0
  318. package/dist/chunk-V5OCT34X.js.map +1 -0
  319. package/dist/chunk-VLXA6PI2.js +304 -0
  320. package/dist/chunk-VLXA6PI2.js.map +1 -0
  321. package/dist/chunk-VNO6ZJ35.js +500 -0
  322. package/dist/chunk-VNO6ZJ35.js.map +1 -0
  323. package/dist/chunk-VW676BEI.js +827 -0
  324. package/dist/chunk-VW676BEI.js.map +1 -0
  325. package/dist/chunk-VWT3F4IV.js +2161 -0
  326. package/dist/chunk-VWT3F4IV.js.map +1 -0
  327. package/dist/chunk-W3LR522O.js +2296 -0
  328. package/dist/chunk-W3LR522O.js.map +1 -0
  329. package/dist/chunk-W4L6CZKA.js +96 -0
  330. package/dist/chunk-W4L6CZKA.js.map +1 -0
  331. package/dist/chunk-W4RVMTHR.js +372 -0
  332. package/dist/chunk-W4RVMTHR.js.map +1 -0
  333. package/dist/chunk-WEHSQBFR.js +188 -0
  334. package/dist/chunk-WEHSQBFR.js.map +1 -0
  335. package/dist/chunk-WELDCG6C.js +380 -0
  336. package/dist/chunk-WELDCG6C.js.map +1 -0
  337. package/dist/chunk-WZYKANL3.js +2800 -0
  338. package/dist/chunk-WZYKANL3.js.map +1 -0
  339. package/dist/chunk-XIG5PDM7.js +48 -0
  340. package/dist/chunk-XJNBEDFE.js +193 -0
  341. package/dist/chunk-XJNBEDFE.js.map +1 -0
  342. package/dist/chunk-XVVIG67A.js +291 -0
  343. package/dist/chunk-XVVIG67A.js.map +1 -0
  344. package/dist/chunk-XVZ7B3HG.js +135 -0
  345. package/dist/chunk-YBPYIAA5.js +73 -0
  346. package/dist/chunk-YBPYIAA5.js.map +1 -0
  347. package/dist/chunk-Z734BLO3.js +21 -0
  348. package/dist/chunk-Z734BLO3.js.map +1 -0
  349. package/dist/chunk-ZKSK55RC.js +269 -0
  350. package/dist/chunk-ZKSK55RC.js.map +1 -0
  351. package/dist/chunk-ZTFCYYEZ.js +69 -0
  352. package/dist/chunk-ZTFCYYEZ.js.map +1 -0
  353. package/dist/chunk-ZY2MNJR6.js +329 -0
  354. package/dist/chunk-ZY2MNJR6.js.map +1 -0
  355. package/dist/cli-D3VpkVwB.d.ts +1136 -0
  356. package/dist/cli.d.ts +42 -10
  357. package/dist/cli.js +121 -58
  358. package/dist/codex-cli-fallback.d.ts +1 -0
  359. package/dist/codex-cli-fallback.js +1 -1
  360. package/dist/commitment-ledger.js +1 -1
  361. package/dist/compat/checks.d.ts +5 -0
  362. package/dist/compat/checks.js +11 -0
  363. package/dist/compat/checks.js.map +1 -0
  364. package/dist/compat/types.d.ts +30 -0
  365. package/dist/compat/types.js +1 -0
  366. package/dist/compat/types.js.map +1 -0
  367. package/dist/compounding/engine.d.ts +221 -0
  368. package/dist/compounding/engine.js +32 -0
  369. package/dist/compounding/engine.js.map +1 -0
  370. package/dist/compounding/preference-consolidator.d.ts +92 -0
  371. package/dist/compounding/preference-consolidator.js +553 -0
  372. package/dist/compounding/preference-consolidator.js.map +1 -0
  373. package/dist/compression-optimizer.d.ts +1 -1
  374. package/dist/config.d.ts +5 -3
  375. package/dist/config.js +9 -4
  376. package/dist/conflict-policy-DyJ2wd-h.d.ts +4 -0
  377. package/dist/connectors/codex-materialize-runner.d.ts +64 -0
  378. package/dist/connectors/codex-materialize-runner.js +33 -0
  379. package/dist/connectors/codex-materialize-runner.js.map +1 -0
  380. package/dist/connectors/codex-materialize.d.ts +195 -0
  381. package/dist/connectors/codex-materialize.js +38 -0
  382. package/dist/connectors/codex-materialize.js.map +1 -0
  383. package/dist/connectors/index.d.ts +444 -0
  384. package/dist/connectors/index.js +115 -0
  385. package/dist/connectors/index.js.map +1 -0
  386. package/dist/connectors-cli-CwbyjGR7.d.ts +257 -0
  387. package/dist/connectors-cli.d.ts +1 -1
  388. package/dist/consolidation-provenance-check.d.ts +4 -2
  389. package/dist/consolidation-undo.d.ts +4 -2
  390. package/dist/contradiction/index.d.ts +258 -0
  391. package/dist/contradiction/index.js +43 -0
  392. package/dist/contradiction/index.js.map +1 -0
  393. package/dist/contradiction-review-ATP4S6IC.js +30 -0
  394. package/dist/contradiction-review-ATP4S6IC.js.map +1 -0
  395. package/dist/contradiction-scan-5A4IDZV5.js +13 -0
  396. package/dist/contradiction-scan-5A4IDZV5.js.map +1 -0
  397. package/dist/conversation-index/backend.d.ts +97 -0
  398. package/dist/conversation-index/backend.js +13 -0
  399. package/dist/conversation-index/backend.js.map +1 -0
  400. package/dist/conversation-index/chunker.d.ts +16 -0
  401. package/dist/conversation-index/chunker.js +8 -0
  402. package/dist/conversation-index/chunker.js.map +1 -0
  403. package/dist/conversation-index/cleanup.d.ts +11 -0
  404. package/dist/conversation-index/cleanup.js +9 -0
  405. package/dist/conversation-index/cleanup.js.map +1 -0
  406. package/dist/conversation-index/faiss-adapter.d.ts +6 -0
  407. package/dist/conversation-index/faiss-adapter.js +16 -0
  408. package/dist/conversation-index/faiss-adapter.js.map +1 -0
  409. package/dist/conversation-index/indexer.d.ts +23 -0
  410. package/dist/conversation-index/indexer.js +15 -0
  411. package/dist/conversation-index/indexer.js.map +1 -0
  412. package/dist/conversation-index/search.d.ts +6 -0
  413. package/dist/conversation-index/search.js +11 -0
  414. package/dist/conversation-index/search.js.map +1 -0
  415. package/dist/day-summary.d.ts +1 -1
  416. package/dist/delinearize.d.ts +1 -1
  417. package/dist/direct-answer-wiring.d.ts +1 -1
  418. package/dist/direct-answer-wiring.js +1 -1
  419. package/dist/direct-answer.d.ts +1 -1
  420. package/dist/embedding-fallback.d.ts +1 -1
  421. package/dist/embedding-fallback.js +2 -2
  422. package/dist/enrichment/index.d.ts +163 -0
  423. package/dist/enrichment/index.js +18 -0
  424. package/dist/enrichment/index.js.map +1 -0
  425. package/dist/entity-retrieval.d.ts +4 -2
  426. package/dist/entity-retrieval.js +9 -6
  427. package/dist/entity-schema.d.ts +1 -1
  428. package/dist/evals.js +1 -1
  429. package/dist/event-order-recall.d.ts +17 -0
  430. package/dist/event-order-recall.js +11 -0
  431. package/dist/event-order-recall.js.map +1 -0
  432. package/dist/evidence-pack.d.ts +3 -1
  433. package/dist/evidence-pack.js +5 -3
  434. package/dist/explicit-capture.d.ts +23 -6
  435. package/dist/explicit-capture.js +2 -2
  436. package/dist/explicit-cue-recall.d.ts +4 -1
  437. package/dist/explicit-cue-recall.js +4 -2
  438. package/dist/extraction-judge-telemetry.d.ts +1 -1
  439. package/dist/extraction-judge-training.d.ts +1 -1
  440. package/dist/extraction-judge-training.js +1 -1
  441. package/dist/extraction-judge.d.ts +1 -1
  442. package/dist/extraction.d.ts +1 -1
  443. package/dist/extraction.js +11 -10
  444. package/dist/faiss-adapter-CzPghc4C.d.ts +70 -0
  445. package/dist/fallback-llm.d.ts +4 -1
  446. package/dist/fallback-llm.js +6 -6
  447. package/dist/focused-list-recall.d.ts +17 -0
  448. package/dist/focused-list-recall.js +11 -0
  449. package/dist/focused-list-recall.js.map +1 -0
  450. package/dist/graph-edge-decay-5DI5GUNL.js +207 -0
  451. package/dist/identity-continuity.d.ts +1 -1
  452. package/dist/importance.d.ts +1 -1
  453. package/dist/index-DJ9QWMw-.d.ts +35 -0
  454. package/dist/index.d.ts +107 -715
  455. package/dist/index.js +657 -2611
  456. package/dist/index.js.map +1 -1
  457. package/dist/intent.d.ts +1 -1
  458. package/dist/intent.js +1 -1
  459. package/dist/lcm/archive.d.ts +89 -0
  460. package/dist/lcm/archive.js +12 -0
  461. package/dist/lcm/archive.js.map +1 -0
  462. package/dist/lcm/dag.d.ts +48 -0
  463. package/dist/lcm/dag.js +8 -0
  464. package/dist/lcm/dag.js.map +1 -0
  465. package/dist/lcm/engine.d.ts +116 -0
  466. package/dist/lcm/engine.js +20 -0
  467. package/dist/lcm/engine.js.map +1 -0
  468. package/dist/lcm/index.d.ts +12 -0
  469. package/dist/lcm/index.js +44 -0
  470. package/dist/lcm/index.js.map +1 -0
  471. package/dist/lcm/queue.d.ts +62 -0
  472. package/dist/lcm/queue.js +8 -0
  473. package/dist/lcm/queue.js.map +1 -0
  474. package/dist/lcm/recall.d.ts +20 -0
  475. package/dist/lcm/recall.js +8 -0
  476. package/dist/lcm/recall.js.map +1 -0
  477. package/dist/lcm/schema.d.ts +16 -0
  478. package/dist/lcm/schema.js +14 -0
  479. package/dist/lcm/schema.js.map +1 -0
  480. package/dist/lcm/summarizer.d.ts +38 -0
  481. package/dist/lcm/summarizer.js +12 -0
  482. package/dist/lcm/summarizer.js.map +1 -0
  483. package/dist/lcm/tools.d.ts +29 -0
  484. package/dist/lcm/tools.js +8 -0
  485. package/dist/lcm/tools.js.map +1 -0
  486. package/dist/lifecycle.d.ts +1 -1
  487. package/dist/live-connectors-runner.d.ts +1 -1
  488. package/dist/live-connectors-runner.js +5 -5
  489. package/dist/local-llm.d.ts +8 -4
  490. package/dist/local-llm.js +3 -3
  491. package/dist/maintenance/archive-observations.d.ts +18 -0
  492. package/dist/maintenance/archive-observations.js +8 -0
  493. package/dist/maintenance/archive-observations.js.map +1 -0
  494. package/dist/maintenance/backup-stamp.d.ts +3 -0
  495. package/dist/maintenance/backup-stamp.js +8 -0
  496. package/dist/maintenance/backup-stamp.js.map +1 -0
  497. package/dist/maintenance/memory-governance-cron.d.ts +85 -0
  498. package/dist/maintenance/memory-governance-cron.js +22 -0
  499. package/dist/maintenance/memory-governance-cron.js.map +1 -0
  500. package/dist/maintenance/memory-governance.d.ts +137 -0
  501. package/dist/maintenance/memory-governance.js +40 -0
  502. package/dist/maintenance/memory-governance.js.map +1 -0
  503. package/dist/maintenance/migrate-observations.d.ts +18 -0
  504. package/dist/maintenance/migrate-observations.js +9 -0
  505. package/dist/maintenance/migrate-observations.js.map +1 -0
  506. package/dist/maintenance/observation-ledger-utils.d.ts +10 -0
  507. package/dist/maintenance/observation-ledger-utils.js +10 -0
  508. package/dist/maintenance/observation-ledger-utils.js.map +1 -0
  509. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +15 -0
  510. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -0
  511. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js.map +1 -0
  512. package/dist/maintenance/rebuild-memory-projection.d.ts +77 -0
  513. package/dist/maintenance/rebuild-memory-projection.js +35 -0
  514. package/dist/maintenance/rebuild-memory-projection.js.map +1 -0
  515. package/dist/maintenance/rebuild-observations.d.ts +17 -0
  516. package/dist/maintenance/rebuild-observations.js +9 -0
  517. package/dist/maintenance/rebuild-observations.js.map +1 -0
  518. package/dist/mcp-memory-inspector-app.d.ts +124 -0
  519. package/dist/mcp-memory-inspector-app.js +20 -0
  520. package/dist/mcp-memory-inspector-app.js.map +1 -0
  521. package/dist/memory-action-policy.d.ts +1 -1
  522. package/dist/memory-cache.d.ts +1 -1
  523. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  524. package/dist/memory-projection-store.d.ts +108 -3
  525. package/dist/memory-projection-store.js +2 -1
  526. package/dist/memory-provenance.d.ts +57 -0
  527. package/dist/memory-provenance.js +13 -0
  528. package/dist/memory-provenance.js.map +1 -0
  529. package/dist/memory-worth-outcomes.d.ts +4 -2
  530. package/dist/migrate/from-engram.d.ts +24 -0
  531. package/dist/migrate/from-engram.js +12 -0
  532. package/dist/migrate/from-engram.js.map +1 -0
  533. package/dist/models-json.d.ts +1 -1
  534. package/dist/namespaces/migrate.d.ts +50 -0
  535. package/dist/namespaces/migrate.js +50 -0
  536. package/dist/namespaces/migrate.js.map +1 -0
  537. package/dist/namespaces/principal.d.ts +17 -0
  538. package/dist/namespaces/principal.js +16 -0
  539. package/dist/namespaces/principal.js.map +1 -0
  540. package/dist/namespaces/search.d.ts +46 -0
  541. package/dist/namespaces/search.js +28 -0
  542. package/dist/namespaces/search.js.map +1 -0
  543. package/dist/namespaces/storage.d.ts +32 -0
  544. package/dist/namespaces/storage.js +28 -0
  545. package/dist/namespaces/storage.js.map +1 -0
  546. package/dist/native-knowledge.d.ts +1 -1
  547. package/dist/network/tailscale.d.ts +41 -0
  548. package/dist/network/tailscale.js +9 -0
  549. package/dist/network/tailscale.js.map +1 -0
  550. package/dist/network/webdav.d.ts +39 -0
  551. package/dist/network/webdav.js +10 -0
  552. package/dist/network/webdav.js.map +1 -0
  553. package/dist/objective-state-writers.d.ts +1 -1
  554. package/dist/objective-state-writers.js +2 -2
  555. package/dist/operator-toolkit.d.ts +4 -2
  556. package/dist/operator-toolkit.js +35 -17
  557. package/dist/opik-exporter.js +2 -2
  558. package/dist/opik-exporter.js.map +1 -1
  559. package/dist/orchestrator-DuWl9Hwx.d.ts +1244 -0
  560. package/dist/orchestrator.d.ts +24 -7
  561. package/dist/orchestrator.js +107 -65
  562. package/dist/path-MR5JPYOP.js +9 -0
  563. package/dist/path-MR5JPYOP.js.map +1 -0
  564. package/dist/patterns-cli.d.ts +1 -1
  565. package/dist/policy-runtime.d.ts +1 -1
  566. package/dist/qmd-recall-cache.d.ts +2 -2
  567. package/dist/qmd.d.ts +103 -4
  568. package/dist/qmd.js +23 -5
  569. package/dist/recall-disclosure-escalation.d.ts +1 -1
  570. package/dist/recall-explain-renderer.d.ts +3 -1
  571. package/dist/recall-explain-renderer.js +5 -3
  572. package/dist/recall-state.d.ts +1 -1
  573. package/dist/recall-tag-filter.d.ts +3 -1
  574. package/dist/recall-xray-cli.d.ts +3 -1
  575. package/dist/recall-xray-cli.js +6 -4
  576. package/dist/recall-xray-renderer.d.ts +3 -1
  577. package/dist/recall-xray-renderer.js +5 -3
  578. package/dist/recall-xray.d.ts +8 -1
  579. package/dist/recall-xray.js +4 -2
  580. package/dist/replay/normalizers/chatgpt.d.ts +6 -0
  581. package/dist/replay/normalizers/chatgpt.js +11 -0
  582. package/dist/replay/normalizers/chatgpt.js.map +1 -0
  583. package/dist/replay/normalizers/claude.d.ts +6 -0
  584. package/dist/replay/normalizers/claude.js +11 -0
  585. package/dist/replay/normalizers/claude.js.map +1 -0
  586. package/dist/replay/normalizers/openclaw.d.ts +6 -0
  587. package/dist/replay/normalizers/openclaw.js +11 -0
  588. package/dist/replay/normalizers/openclaw.js.map +1 -0
  589. package/dist/replay/normalizers/shared.d.ts +16 -0
  590. package/dist/replay/normalizers/shared.js +14 -0
  591. package/dist/replay/normalizers/shared.js.map +1 -0
  592. package/dist/replay/runner.d.ts +35 -0
  593. package/dist/replay/runner.js +16 -0
  594. package/dist/replay/runner.js.map +1 -0
  595. package/dist/replay/types.d.ts +57 -0
  596. package/dist/replay/types.js +19 -0
  597. package/dist/replay/types.js.map +1 -0
  598. package/dist/resolution-B7FNQSSP.js +12 -0
  599. package/dist/resolution-B7FNQSSP.js.map +1 -0
  600. package/dist/resolve-auth-token.d.ts +1 -1
  601. package/dist/resolve-provider-secret.js +2 -2
  602. package/dist/response-guidance-recall.d.ts +18 -0
  603. package/dist/response-guidance-recall.js +11 -0
  604. package/dist/response-guidance-recall.js.map +1 -0
  605. package/dist/resume-bundles.js +7 -5
  606. package/dist/retrieval-agents.d.ts +2 -2
  607. package/dist/retrieval-tiers.d.ts +1 -1
  608. package/dist/routing/engine.d.ts +35 -0
  609. package/dist/routing/engine.js +16 -0
  610. package/dist/routing/engine.js.map +1 -0
  611. package/dist/routing/store.d.ts +27 -0
  612. package/dist/routing/store.js +10 -0
  613. package/dist/routing/store.js.map +1 -0
  614. package/dist/runtime/better-sqlite.d.ts +8 -0
  615. package/dist/runtime/better-sqlite.js +10 -0
  616. package/dist/runtime/better-sqlite.js.map +1 -0
  617. package/dist/runtime/child-process.d.ts +32 -0
  618. package/dist/runtime/child-process.js +10 -0
  619. package/dist/runtime/child-process.js.map +1 -0
  620. package/dist/runtime/env.d.ts +5 -0
  621. package/dist/runtime/env.js +12 -0
  622. package/dist/runtime/env.js.map +1 -0
  623. package/dist/sdk-compat.js +1 -1
  624. package/dist/search/document-scanner.d.ts +22 -0
  625. package/dist/search/document-scanner.js +8 -0
  626. package/dist/search/document-scanner.js.map +1 -0
  627. package/dist/search/embed-helper.d.ts +35 -0
  628. package/dist/search/embed-helper.js +9 -0
  629. package/dist/search/embed-helper.js.map +1 -0
  630. package/dist/search/factory.d.ts +32 -0
  631. package/dist/search/factory.js +29 -0
  632. package/dist/search/factory.js.map +1 -0
  633. package/dist/search/index.d.ts +15 -0
  634. package/dist/search/index.js +50 -0
  635. package/dist/search/index.js.map +1 -0
  636. package/dist/search/lancedb-backend.d.ts +51 -0
  637. package/dist/search/lancedb-backend.js +10 -0
  638. package/dist/search/lancedb-backend.js.map +1 -0
  639. package/dist/search/meilisearch-backend.d.ts +48 -0
  640. package/dist/search/meilisearch-backend.js +10 -0
  641. package/dist/search/meilisearch-backend.js.map +1 -0
  642. package/dist/search/noop-backend.d.ts +26 -0
  643. package/dist/search/noop-backend.js +8 -0
  644. package/dist/search/noop-backend.js.map +1 -0
  645. package/dist/search/orama-backend.d.ts +53 -0
  646. package/dist/search/orama-backend.js +10 -0
  647. package/dist/search/orama-backend.js.map +1 -0
  648. package/dist/search/port.d.ts +61 -0
  649. package/dist/search/port.js +1 -0
  650. package/dist/search/port.js.map +1 -0
  651. package/dist/search/remote-backend.d.ts +39 -0
  652. package/dist/search/remote-backend.js +9 -0
  653. package/dist/search/remote-backend.js.map +1 -0
  654. package/dist/secure-store/index.d.ts +890 -0
  655. package/dist/secure-store/index.js +156 -0
  656. package/dist/secure-store/index.js.map +1 -0
  657. package/dist/semantic-VwGI14Ok.d.ts +69 -0
  658. package/dist/semantic-consolidation-4HkHWgeI.d.ts +180 -0
  659. package/dist/semantic-consolidation.d.ts +3 -3
  660. package/dist/semantic-consolidation.js +15 -8
  661. package/dist/semantic-rule-promotion.js +9 -6
  662. package/dist/semantic-rule-verifier.d.ts +1 -1
  663. package/dist/semantic-rule-verifier.js +10 -7
  664. package/dist/session-observer-bands.d.ts +1 -1
  665. package/dist/session-observer-state.d.ts +1 -1
  666. package/dist/shared-context/manager.d.ts +131 -0
  667. package/dist/shared-context/manager.js +15 -0
  668. package/dist/shared-context/manager.js.map +1 -0
  669. package/dist/signal.d.ts +1 -1
  670. package/dist/skills-registry.js +13 -1
  671. package/dist/skills-registry.js.map +1 -1
  672. package/dist/state-store-VZU2IA53.js +16 -0
  673. package/dist/state-store-VZU2IA53.js.map +1 -0
  674. package/dist/storage-paths.d.ts +9 -0
  675. package/dist/storage-paths.js +20 -0
  676. package/dist/storage-paths.js.map +1 -0
  677. package/dist/storage.d.ts +6 -2
  678. package/dist/storage.js +8 -5
  679. package/dist/summarizer.d.ts +6 -1
  680. package/dist/summarizer.js +11 -10
  681. package/dist/summary-snapshot.d.ts +1 -1
  682. package/dist/summary-snapshot.js +2 -1
  683. package/dist/surfaces/dreams.d.ts +16 -0
  684. package/dist/surfaces/dreams.js +282 -0
  685. package/dist/surfaces/dreams.js.map +1 -0
  686. package/dist/surfaces/heartbeat.d.ts +17 -0
  687. package/dist/surfaces/heartbeat.js +265 -0
  688. package/dist/surfaces/heartbeat.js.map +1 -0
  689. package/dist/targeted-fact-recall.d.ts +17 -0
  690. package/dist/targeted-fact-recall.js +11 -0
  691. package/dist/targeted-fact-recall.js.map +1 -0
  692. package/dist/telemetry-transcript.d.ts +7 -0
  693. package/dist/telemetry-transcript.js +16 -0
  694. package/dist/telemetry-transcript.js.map +1 -0
  695. package/dist/temporal-supersession.d.ts +4 -2
  696. package/dist/temporal-supersession.js +2 -1
  697. package/dist/temporal-validity.d.ts +1 -1
  698. package/dist/threading.d.ts +6 -1
  699. package/dist/threading.js +2 -1
  700. package/dist/tier-migration.d.ts +5 -3
  701. package/dist/tier-routing.d.ts +1 -1
  702. package/dist/tokens.js +2 -2
  703. package/dist/topics.d.ts +1 -1
  704. package/dist/transcript.d.ts +16 -2
  705. package/dist/transcript.js +2 -1
  706. package/dist/transfer/autodetect.d.ts +4 -0
  707. package/dist/transfer/autodetect.js +15 -0
  708. package/dist/transfer/autodetect.js.map +1 -0
  709. package/dist/transfer/backup.d.ts +21 -0
  710. package/dist/transfer/backup.js +17 -0
  711. package/dist/transfer/backup.js.map +1 -0
  712. package/dist/transfer/capsule-export.d.ts +113 -0
  713. package/dist/transfer/capsule-export.js +19 -0
  714. package/dist/transfer/capsule-export.js.map +1 -0
  715. package/dist/transfer/capsule-import.d.ts +124 -0
  716. package/dist/transfer/capsule-import.js +16 -0
  717. package/dist/transfer/capsule-import.js.map +1 -0
  718. package/dist/transfer/constants.d.ts +13 -0
  719. package/dist/transfer/constants.js +12 -0
  720. package/dist/transfer/constants.js.map +1 -0
  721. package/dist/transfer/export-json.d.ts +11 -0
  722. package/dist/transfer/export-json.js +11 -0
  723. package/dist/transfer/export-json.js.map +1 -0
  724. package/dist/transfer/export-md.d.ts +10 -0
  725. package/dist/transfer/export-md.js +13 -0
  726. package/dist/transfer/export-md.js.map +1 -0
  727. package/dist/transfer/export-sqlite.d.ts +9 -0
  728. package/dist/transfer/export-sqlite.js +12 -0
  729. package/dist/transfer/export-sqlite.js.map +1 -0
  730. package/dist/transfer/fs-utils.d.ts +61 -0
  731. package/dist/transfer/fs-utils.js +40 -0
  732. package/dist/transfer/fs-utils.js.map +1 -0
  733. package/dist/transfer/import-json.d.ts +16 -0
  734. package/dist/transfer/import-json.js +13 -0
  735. package/dist/transfer/import-json.js.map +1 -0
  736. package/dist/transfer/import-md.d.ts +14 -0
  737. package/dist/transfer/import-md.js +11 -0
  738. package/dist/transfer/import-md.js.map +1 -0
  739. package/dist/transfer/import-sqlite.d.ts +14 -0
  740. package/dist/transfer/import-sqlite.js +12 -0
  741. package/dist/transfer/import-sqlite.js.map +1 -0
  742. package/dist/transfer/sqlite-schema.d.ts +4 -0
  743. package/dist/transfer/sqlite-schema.js +10 -0
  744. package/dist/transfer/sqlite-schema.js.map +1 -0
  745. package/dist/transfer/types.d.ts +916 -0
  746. package/dist/transfer/types.js +30 -0
  747. package/dist/transfer/types.js.map +1 -0
  748. package/dist/trust-zones.d.ts +3 -2
  749. package/dist/trust-zones.js +1 -1
  750. package/dist/types.d.ts +88 -3
  751. package/dist/types.js +1 -1
  752. package/dist/user-model.d.ts +37 -0
  753. package/dist/user-model.js +28 -0
  754. package/dist/user-model.js.map +1 -0
  755. package/dist/utility-runtime.d.ts +1 -1
  756. package/dist/verified-recall.js +11 -8
  757. package/dist/work/board.d.ts +43 -0
  758. package/dist/work/board.js +14 -0
  759. package/dist/work/board.js.map +1 -0
  760. package/dist/work/boundary.d.ts +8 -0
  761. package/dist/work/boundary.js +14 -0
  762. package/dist/work/boundary.js.map +1 -0
  763. package/dist/work/storage.d.ts +39 -0
  764. package/dist/work/storage.js +11 -0
  765. package/dist/work/storage.js.map +1 -0
  766. package/dist/work/types.d.ts +75 -0
  767. package/dist/work/types.js +1 -0
  768. package/dist/work/types.js.map +1 -0
  769. package/package.json +2767 -6
  770. package/scripts/faiss_index.py +816 -0
  771. package/scripts/faiss_requirements.txt +3 -0
  772. package/skills/remnic-entities/SKILL.md +51 -0
  773. package/skills/remnic-memory-workflow/SKILL.md +61 -0
  774. package/skills/remnic-recall/SKILL.md +51 -0
  775. package/skills/remnic-remember/SKILL.md +56 -0
  776. package/skills/remnic-search/SKILL.md +51 -0
  777. package/skills/remnic-status/SKILL.md +51 -0
  778. package/src/abort-error.test.ts +49 -0
  779. package/src/abort-error.ts +46 -0
  780. package/src/abstraction-nodes.ts +162 -0
  781. package/src/access-audit.test.ts +178 -0
  782. package/src/access-audit.ts +125 -0
  783. package/src/access-cli.test.ts +439 -0
  784. package/src/access-cli.ts +438 -0
  785. package/src/access-http.test.ts +225 -0
  786. package/src/access-http.ts +1899 -0
  787. package/src/access-idempotency.ts +232 -0
  788. package/src/access-mcp.test.ts +568 -0
  789. package/src/access-mcp.ts +3056 -0
  790. package/src/access-schema-pi.test.ts +60 -0
  791. package/src/access-schema.ts +522 -0
  792. package/src/access-service-namespace.test.ts +123 -0
  793. package/src/access-service.ts +5629 -0
  794. package/src/action-confidence.test.ts +206 -0
  795. package/src/action-confidence.ts +466 -0
  796. package/src/active-memory-bridge.test.ts +285 -0
  797. package/src/active-memory-bridge.ts +217 -0
  798. package/src/active-recall.test.ts +484 -0
  799. package/src/active-recall.ts +459 -0
  800. package/src/adapters/claude-code.ts +56 -0
  801. package/src/adapters/codex.ts +57 -0
  802. package/src/adapters/hermes.ts +64 -0
  803. package/src/adapters/index.ts +6 -0
  804. package/src/adapters/registry.ts +41 -0
  805. package/src/adapters/replit.ts +55 -0
  806. package/src/adapters/types.ts +51 -0
  807. package/src/behavior-learner.ts +144 -0
  808. package/src/behavior-signals.ts +73 -0
  809. package/src/binary-lifecycle/backend.ts +117 -0
  810. package/src/binary-lifecycle/index.ts +35 -0
  811. package/src/binary-lifecycle/manifest.ts +79 -0
  812. package/src/binary-lifecycle/pipeline.ts +352 -0
  813. package/src/binary-lifecycle/scanner.ts +89 -0
  814. package/src/binary-lifecycle/types.ts +89 -0
  815. package/src/bootstrap.ts +178 -0
  816. package/src/boxes.ts +521 -0
  817. package/src/briefing.test.ts +1535 -0
  818. package/src/briefing.ts +1382 -0
  819. package/src/buffer-session.test.ts +443 -0
  820. package/src/buffer-surprise-report.ts +176 -0
  821. package/src/buffer-surprise-telemetry.test.ts +606 -0
  822. package/src/buffer-surprise-trigger.test.ts +766 -0
  823. package/src/buffer-surprise.test.ts +339 -0
  824. package/src/buffer-surprise.ts +203 -0
  825. package/src/buffer.ts +900 -0
  826. package/src/bulk-import/cli-command.test.ts +204 -0
  827. package/src/bulk-import/index.ts +34 -0
  828. package/src/bulk-import/pipeline.test.ts +445 -0
  829. package/src/bulk-import/pipeline.ts +178 -0
  830. package/src/bulk-import/registry.test.ts +151 -0
  831. package/src/bulk-import/registry.ts +72 -0
  832. package/src/bulk-import/types.test.ts +272 -0
  833. package/src/bulk-import/types.ts +145 -0
  834. package/src/calibration.ts +394 -0
  835. package/src/capsule-cli.test.ts +398 -0
  836. package/src/capsule-cli.ts +565 -0
  837. package/src/causal-behavior.ts +308 -0
  838. package/src/causal-chain.ts +419 -0
  839. package/src/causal-consolidation.ts +370 -0
  840. package/src/causal-retrieval.ts +286 -0
  841. package/src/causal-trajectory-graph.ts +60 -0
  842. package/src/causal-trajectory.ts +303 -0
  843. package/src/chunking.ts +220 -0
  844. package/src/citations.ts +232 -0
  845. package/src/cli.ts +9403 -0
  846. package/src/codex-cli-fallback.ts +162 -0
  847. package/src/codex-thread-key.ts +1 -0
  848. package/src/coding/access-coding-context.test.ts +197 -0
  849. package/src/coding/coding-branch-scope.test.ts +281 -0
  850. package/src/coding/coding-namespace.test.ts +360 -0
  851. package/src/coding/coding-namespace.ts +412 -0
  852. package/src/coding/coding-orchestrator.test.ts +249 -0
  853. package/src/coding/git-context.test.ts +507 -0
  854. package/src/coding/git-context.ts +336 -0
  855. package/src/coding/mcp-set-coding-context.test.ts +174 -0
  856. package/src/coding/review-context.test.ts +316 -0
  857. package/src/coding/review-context.ts +349 -0
  858. package/src/coding/wire-coding-context.test.ts +468 -0
  859. package/src/commitment-ledger.test.ts +78 -0
  860. package/src/commitment-ledger.ts +337 -0
  861. package/src/compat/checks.test.ts +206 -0
  862. package/src/compat/checks.ts +716 -0
  863. package/src/compat/types.ts +33 -0
  864. package/src/compounding/engine.ts +1686 -0
  865. package/src/compounding/preference-consolidator.ts +778 -0
  866. package/src/compression-optimizer.ts +312 -0
  867. package/src/config.test.ts +930 -0
  868. package/src/config.ts +3807 -0
  869. package/src/connectors/codex/instructions.md +160 -0
  870. package/src/connectors/codex/resources/namespace-cheatsheet.md +48 -0
  871. package/src/connectors/codex-marketplace.ts +500 -0
  872. package/src/connectors/codex-materialize-runner.ts +212 -0
  873. package/src/connectors/codex-materialize.ts +983 -0
  874. package/src/connectors/coerce.ts +62 -0
  875. package/src/connectors/index.test.ts +1570 -0
  876. package/src/connectors/index.ts +3222 -0
  877. package/src/connectors/live/framework.ts +164 -0
  878. package/src/connectors/live/github.test.ts +1218 -0
  879. package/src/connectors/live/github.ts +1068 -0
  880. package/src/connectors/live/gmail.test.ts +1706 -0
  881. package/src/connectors/live/gmail.ts +1293 -0
  882. package/src/connectors/live/google-drive.test.ts +696 -0
  883. package/src/connectors/live/google-drive.ts +724 -0
  884. package/src/connectors/live/index.ts +101 -0
  885. package/src/connectors/live/live-connectors.test.ts +689 -0
  886. package/src/connectors/live/notion.test.ts +1109 -0
  887. package/src/connectors/live/notion.ts +978 -0
  888. package/src/connectors/live/registry.ts +103 -0
  889. package/src/connectors/live/state-store.ts +399 -0
  890. package/src/connectors/live/transient-errors.ts +150 -0
  891. package/src/connectors/weclone-installer.test.ts +850 -0
  892. package/src/connectors-cli.ts +513 -0
  893. package/src/console/state.test.ts +224 -0
  894. package/src/console/state.ts +514 -0
  895. package/src/console/trace.test.ts +813 -0
  896. package/src/console/trace.ts +603 -0
  897. package/src/console/tui.test.ts +582 -0
  898. package/src/console/tui.ts +508 -0
  899. package/src/consolidation-operator.ts +182 -0
  900. package/src/consolidation-provenance-check.ts +551 -0
  901. package/src/consolidation-undo.ts +718 -0
  902. package/src/contradiction/contradiction-judge.test.ts +189 -0
  903. package/src/contradiction/contradiction-judge.ts +333 -0
  904. package/src/contradiction/contradiction-review.ts +574 -0
  905. package/src/contradiction/contradiction-scan.ts +504 -0
  906. package/src/contradiction/contradiction.test.ts +2230 -0
  907. package/src/contradiction/index.ts +37 -0
  908. package/src/contradiction/resolution.ts +383 -0
  909. package/src/conversation-index/backend.ts +323 -0
  910. package/src/conversation-index/chunker.ts +47 -0
  911. package/src/conversation-index/cleanup.ts +53 -0
  912. package/src/conversation-index/faiss-adapter.ts +384 -0
  913. package/src/conversation-index/indexer.test.ts +164 -0
  914. package/src/conversation-index/indexer.ts +192 -0
  915. package/src/conversation-index/search.ts +37 -0
  916. package/src/cross-namespace-budget.test.ts +275 -0
  917. package/src/cross-namespace-budget.ts +365 -0
  918. package/src/cue-anchors.ts +163 -0
  919. package/src/curation/index.ts +544 -0
  920. package/src/dashboard-runtime.ts +337 -0
  921. package/src/day-summary.ts +122 -0
  922. package/src/dedup/index.ts +330 -0
  923. package/src/dedup/semantic.test.ts +1577 -0
  924. package/src/dedup/semantic.ts +148 -0
  925. package/src/delinearize.ts +193 -0
  926. package/src/direct-answer-wiring.test.ts +473 -0
  927. package/src/direct-answer-wiring.ts +180 -0
  928. package/src/direct-answer.test.ts +484 -0
  929. package/src/direct-answer.ts +273 -0
  930. package/src/embedding-fallback.ts +565 -0
  931. package/src/enrichment/audit.ts +89 -0
  932. package/src/enrichment/index.ts +27 -0
  933. package/src/enrichment/pipeline.ts +197 -0
  934. package/src/enrichment/provider-registry.ts +85 -0
  935. package/src/enrichment/types.ts +100 -0
  936. package/src/enrichment/web-search-provider.ts +63 -0
  937. package/src/entity-retrieval.ts +774 -0
  938. package/src/entity-schema.ts +239 -0
  939. package/src/evals.ts +1312 -0
  940. package/src/event-order-recall.test.ts +4164 -0
  941. package/src/event-order-recall.ts +2802 -0
  942. package/src/evidence-pack.test.ts +89 -0
  943. package/src/evidence-pack.ts +388 -0
  944. package/src/explicit-capture.ts +530 -0
  945. package/src/explicit-cue-recall.test.ts +3019 -0
  946. package/src/explicit-cue-recall.ts +5545 -0
  947. package/src/extraction-judge-telemetry.ts +234 -0
  948. package/src/extraction-judge-training.ts +221 -0
  949. package/src/extraction-judge.ts +846 -0
  950. package/src/extraction-timeout.test.ts +265 -0
  951. package/src/extraction.ts +2719 -0
  952. package/src/fallback-llm.test.ts +1060 -0
  953. package/src/fallback-llm.ts +918 -0
  954. package/src/focused-list-recall.test.ts +734 -0
  955. package/src/focused-list-recall.ts +1160 -0
  956. package/src/graph-dashboard-diff.ts +35 -0
  957. package/src/graph-dashboard-key.ts +5 -0
  958. package/src/graph-dashboard-parser.ts +104 -0
  959. package/src/graph-edge-reinforcement.ts +192 -0
  960. package/src/graph-events.ts +151 -0
  961. package/src/graph-recall.test.ts +164 -0
  962. package/src/graph-recall.ts +189 -0
  963. package/src/graph-retrieval.test.ts +809 -0
  964. package/src/graph-retrieval.ts +823 -0
  965. package/src/graph-snapshot.ts +329 -0
  966. package/src/graph.ts +813 -0
  967. package/src/harmonic-retrieval.ts +223 -0
  968. package/src/himem.ts +154 -0
  969. package/src/hygiene.ts +87 -0
  970. package/src/identity-continuity.ts +333 -0
  971. package/src/importance.ts +328 -0
  972. package/src/importers/base.test.ts +294 -0
  973. package/src/importers/base.ts +436 -0
  974. package/src/importers/index.ts +21 -0
  975. package/src/index.ts +1204 -0
  976. package/src/intent.ts +154 -0
  977. package/src/json-extract.ts +85 -0
  978. package/src/json-store.ts +42 -0
  979. package/src/lcm/archive.ts +617 -0
  980. package/src/lcm/dag.ts +199 -0
  981. package/src/lcm/engine.ts +645 -0
  982. package/src/lcm/index.ts +7 -0
  983. package/src/lcm/queue.test.ts +178 -0
  984. package/src/lcm/queue.ts +200 -0
  985. package/src/lcm/recall.ts +117 -0
  986. package/src/lcm/schema.ts +154 -0
  987. package/src/lcm/summarizer.ts +235 -0
  988. package/src/lcm/tools.ts +191 -0
  989. package/src/lcm-engine.test.ts +660 -0
  990. package/src/legacy-hook-compat.test.ts +20 -0
  991. package/src/legacy-hook-compat.ts +45 -0
  992. package/src/lifecycle.ts +289 -0
  993. package/src/live-connectors-runner.ts +385 -0
  994. package/src/local-llm-qos.test.ts +303 -0
  995. package/src/local-llm-thinking.test.ts +292 -0
  996. package/src/local-llm.ts +1464 -0
  997. package/src/logger.ts +49 -0
  998. package/src/maintenance/archive-observations.ts +147 -0
  999. package/src/maintenance/backup-stamp.ts +3 -0
  1000. package/src/maintenance/dreams-ledger.ts +516 -0
  1001. package/src/maintenance/first-start-migration.ts +362 -0
  1002. package/src/maintenance/forget.test.ts +206 -0
  1003. package/src/maintenance/forget.ts +126 -0
  1004. package/src/maintenance/graph-edge-decay.test.ts +409 -0
  1005. package/src/maintenance/graph-edge-decay.ts +394 -0
  1006. package/src/maintenance/memory-governance-cron.ts +447 -0
  1007. package/src/maintenance/memory-governance.ts +1039 -0
  1008. package/src/maintenance/migrate-observations.ts +216 -0
  1009. package/src/maintenance/observation-ledger-utils.ts +54 -0
  1010. package/src/maintenance/pattern-reinforcement.test.ts +875 -0
  1011. package/src/maintenance/pattern-reinforcement.ts +369 -0
  1012. package/src/maintenance/purge.ts +334 -0
  1013. package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +78 -0
  1014. package/src/maintenance/rebuild-memory-projection.ts +1234 -0
  1015. package/src/maintenance/rebuild-observations.ts +178 -0
  1016. package/src/maintenance/tier-stats.test.ts +378 -0
  1017. package/src/maintenance/tier-stats.ts +222 -0
  1018. package/src/mcp-memory-inspector-app.ts +421 -0
  1019. package/src/memory-action-policy.ts +80 -0
  1020. package/src/memory-cache.ts +208 -0
  1021. package/src/memory-extension/claude-code-publisher.ts +51 -0
  1022. package/src/memory-extension/codex-publisher.ts +149 -0
  1023. package/src/memory-extension/hermes-publisher.ts +51 -0
  1024. package/src/memory-extension/index.ts +100 -0
  1025. package/src/memory-extension/shared-instructions.ts +133 -0
  1026. package/src/memory-extension/types.ts +86 -0
  1027. package/src/memory-extension-host/host-discovery.ts +276 -0
  1028. package/src/memory-extension-host/index.ts +14 -0
  1029. package/src/memory-extension-host/render-extensions-block.ts +73 -0
  1030. package/src/memory-extension-host/types.ts +21 -0
  1031. package/src/memory-lifecycle-ledger-utils.ts +116 -0
  1032. package/src/memory-projection-format.ts +11 -0
  1033. package/src/memory-projection-store.ts +951 -0
  1034. package/src/memory-provenance.test.ts +196 -0
  1035. package/src/memory-provenance.ts +484 -0
  1036. package/src/memory-worth-bench.test.ts +71 -0
  1037. package/src/memory-worth-bench.ts +265 -0
  1038. package/src/memory-worth-filter.test.ts +209 -0
  1039. package/src/memory-worth-filter.ts +204 -0
  1040. package/src/memory-worth-frontmatter.test.ts +311 -0
  1041. package/src/memory-worth-outcomes.test.ts +316 -0
  1042. package/src/memory-worth-outcomes.ts +286 -0
  1043. package/src/memory-worth.test.ts +317 -0
  1044. package/src/memory-worth.ts +215 -0
  1045. package/src/message-parts/index.ts +806 -0
  1046. package/src/message-parts/message-parts.test.ts +421 -0
  1047. package/src/migrate/from-engram.ts +789 -0
  1048. package/src/model-registry.ts +313 -0
  1049. package/src/models-json.ts +76 -0
  1050. package/src/namespaces/migrate.ts +187 -0
  1051. package/src/namespaces/path.ts +25 -0
  1052. package/src/namespaces/principal.test.ts +195 -0
  1053. package/src/namespaces/principal.ts +86 -0
  1054. package/src/namespaces/search.test.ts +105 -0
  1055. package/src/namespaces/search.ts +233 -0
  1056. package/src/namespaces/storage.ts +74 -0
  1057. package/src/native-knowledge.ts +1823 -0
  1058. package/src/negative.ts +72 -0
  1059. package/src/network/tailscale.ts +179 -0
  1060. package/src/network/webdav.ts +385 -0
  1061. package/src/objective-state-writers.ts +951 -0
  1062. package/src/objective-state.ts +320 -0
  1063. package/src/onboarding/index.ts +529 -0
  1064. package/src/openai-chat-compat.ts +56 -0
  1065. package/src/operator-toolkit.ts +2132 -0
  1066. package/src/opik-exporter.test.ts +72 -0
  1067. package/src/opik-exporter.ts +587 -0
  1068. package/src/orchestrator-extraction-queue.test.ts +197 -0
  1069. package/src/orchestrator-flush.test.ts +1171 -0
  1070. package/src/orchestrator-pattern-reinforcement.test.ts +128 -0
  1071. package/src/orchestrator-source-attribution.test.ts +701 -0
  1072. package/src/orchestrator.ts +16368 -0
  1073. package/src/page-versioning.ts +450 -0
  1074. package/src/patterns-cli.ts +574 -0
  1075. package/src/peers/index.ts +54 -0
  1076. package/src/peers/migrate-from-identity-anchor.test.ts +291 -0
  1077. package/src/peers/migrate-from-identity-anchor.ts +350 -0
  1078. package/src/peers/peers.test.ts +419 -0
  1079. package/src/peers/profile-reasoner.ts +694 -0
  1080. package/src/peers/storage.ts +1350 -0
  1081. package/src/peers/types.ts +138 -0
  1082. package/src/plugin-id.ts +84 -0
  1083. package/src/policy-runtime.ts +209 -0
  1084. package/src/procedural/procedure-miner.ts +150 -0
  1085. package/src/procedural/procedure-recall.ts +93 -0
  1086. package/src/procedural/procedure-stats.ts +213 -0
  1087. package/src/procedural/procedure-types.ts +132 -0
  1088. package/src/procedural/reinforcement-core.test.ts +132 -0
  1089. package/src/procedural/reinforcement-core.ts +73 -0
  1090. package/src/profiling.test.ts +263 -0
  1091. package/src/profiling.ts +435 -0
  1092. package/src/projection/index.ts +398 -0
  1093. package/src/qmd-recall-cache.test.ts +138 -0
  1094. package/src/qmd-recall-cache.ts +111 -0
  1095. package/src/qmd.test.ts +257 -0
  1096. package/src/qmd.ts +2614 -0
  1097. package/src/reasoning-trace-recall.ts +201 -0
  1098. package/src/reasoning-trace-types.ts +235 -0
  1099. package/src/recall-audit-anomaly.test.ts +246 -0
  1100. package/src/recall-audit-anomaly.ts +297 -0
  1101. package/src/recall-audit.test.ts +51 -0
  1102. package/src/recall-audit.ts +72 -0
  1103. package/src/recall-budget-config.test.ts +87 -0
  1104. package/src/recall-disclosure-escalation.test.ts +196 -0
  1105. package/src/recall-disclosure-escalation.ts +158 -0
  1106. package/src/recall-disclosure-shaping.test.ts +146 -0
  1107. package/src/recall-disclosure.test.ts +214 -0
  1108. package/src/recall-explain-renderer.test.ts +140 -0
  1109. package/src/recall-explain-renderer.ts +356 -0
  1110. package/src/recall-mmr.test.ts +808 -0
  1111. package/src/recall-mmr.ts +607 -0
  1112. package/src/recall-qos.test.ts +85 -0
  1113. package/src/recall-qos.ts +82 -0
  1114. package/src/recall-query-policy.ts +221 -0
  1115. package/src/recall-state.test.ts +233 -0
  1116. package/src/recall-state.ts +456 -0
  1117. package/src/recall-tag-filter.ts +143 -0
  1118. package/src/recall-tokenization.ts +35 -0
  1119. package/src/recall-xray-cli.test.ts +118 -0
  1120. package/src/recall-xray-cli.ts +100 -0
  1121. package/src/recall-xray-disclosure-telemetry.test.ts +183 -0
  1122. package/src/recall-xray-renderer.test.ts +539 -0
  1123. package/src/recall-xray-renderer.ts +487 -0
  1124. package/src/recall-xray.test.ts +503 -0
  1125. package/src/recall-xray.ts +621 -0
  1126. package/src/reconstruct.ts +41 -0
  1127. package/src/release-changelog.ts +35 -0
  1128. package/src/relevance.ts +67 -0
  1129. package/src/replay/normalizers/chatgpt.ts +133 -0
  1130. package/src/replay/normalizers/claude.ts +102 -0
  1131. package/src/replay/normalizers/openclaw.ts +119 -0
  1132. package/src/replay/normalizers/shared.ts +69 -0
  1133. package/src/replay/runner.ts +197 -0
  1134. package/src/replay/types.ts +143 -0
  1135. package/src/rerank.test.ts +48 -0
  1136. package/src/rerank.ts +176 -0
  1137. package/src/resolve-auth-token.test.ts +226 -0
  1138. package/src/resolve-auth-token.ts +151 -0
  1139. package/src/resolve-provider-secret.test.ts +187 -0
  1140. package/src/resolve-provider-secret.ts +410 -0
  1141. package/src/response-guidance-recall.test.ts +3952 -0
  1142. package/src/response-guidance-recall.ts +4431 -0
  1143. package/src/resume-bundles.ts +415 -0
  1144. package/src/retrieval-agents.ts +623 -0
  1145. package/src/retrieval-tiers.ts +25 -0
  1146. package/src/retrieval.ts +104 -0
  1147. package/src/review/index.test.ts +201 -0
  1148. package/src/review/index.ts +536 -0
  1149. package/src/routing/engine.ts +162 -0
  1150. package/src/routing/store.ts +321 -0
  1151. package/src/runtime/better-sqlite.test.ts +32 -0
  1152. package/src/runtime/better-sqlite.ts +76 -0
  1153. package/src/runtime/child-process.ts +67 -0
  1154. package/src/runtime/env.ts +48 -0
  1155. package/src/sanitize.ts +58 -0
  1156. package/src/schemas.ts +449 -0
  1157. package/src/sdk-compat.ts +87 -0
  1158. package/src/search/document-scanner.ts +96 -0
  1159. package/src/search/embed-helper.ts +142 -0
  1160. package/src/search/factory.ts +189 -0
  1161. package/src/search/index.ts +10 -0
  1162. package/src/search/lancedb-backend.ts +342 -0
  1163. package/src/search/meilisearch-backend.ts +232 -0
  1164. package/src/search/noop-backend.ts +57 -0
  1165. package/src/search/orama-backend.ts +358 -0
  1166. package/src/search/port.ts +86 -0
  1167. package/src/search/remote-backend.ts +124 -0
  1168. package/src/secure-store/cipher.ts +271 -0
  1169. package/src/secure-store/cli-handlers.ts +355 -0
  1170. package/src/secure-store/cli-renderer.ts +131 -0
  1171. package/src/secure-store/header.ts +373 -0
  1172. package/src/secure-store/index.ts +137 -0
  1173. package/src/secure-store/kdf.ts +263 -0
  1174. package/src/secure-store/keyring.ts +106 -0
  1175. package/src/secure-store/metadata.ts +394 -0
  1176. package/src/secure-store/passphrase-reader.ts +252 -0
  1177. package/src/secure-store/secure-fs.ts +571 -0
  1178. package/src/secure-store/secure-store.test.ts +755 -0
  1179. package/src/semantic-chunking.ts +545 -0
  1180. package/src/semantic-consolidation.test.ts +182 -0
  1181. package/src/semantic-consolidation.ts +432 -0
  1182. package/src/semantic-rule-promotion.ts +183 -0
  1183. package/src/semantic-rule-verifier.ts +160 -0
  1184. package/src/session-integrity.ts +569 -0
  1185. package/src/session-observer-bands.ts +11 -0
  1186. package/src/session-observer-state.ts +346 -0
  1187. package/src/session-toggles.test.ts +96 -0
  1188. package/src/session-toggles.ts +159 -0
  1189. package/src/shared-context/manager.ts +810 -0
  1190. package/src/signal.ts +84 -0
  1191. package/src/skills-registry.test.ts +277 -0
  1192. package/src/skills-registry.ts +120 -0
  1193. package/src/source-attribution-roundtrip.test.ts +215 -0
  1194. package/src/source-attribution.test.ts +1425 -0
  1195. package/src/source-attribution.ts +639 -0
  1196. package/src/spaces/index.ts +627 -0
  1197. package/src/storage-paths.ts +117 -0
  1198. package/src/storage.ts +6657 -0
  1199. package/src/store-contract.ts +55 -0
  1200. package/src/summarizer.ts +844 -0
  1201. package/src/summary-snapshot.test.ts +681 -0
  1202. package/src/summary-snapshot.ts +238 -0
  1203. package/src/surfaces/dreams.test.ts +394 -0
  1204. package/src/surfaces/dreams.ts +346 -0
  1205. package/src/surfaces/heartbeat.test.ts +415 -0
  1206. package/src/surfaces/heartbeat.ts +325 -0
  1207. package/src/sync/index.ts +308 -0
  1208. package/src/targeted-fact-recall.test.ts +1694 -0
  1209. package/src/targeted-fact-recall.ts +2905 -0
  1210. package/src/taxonomy/default-taxonomy.ts +87 -0
  1211. package/src/taxonomy/index.ts +26 -0
  1212. package/src/taxonomy/resolver-doc-generator.ts +57 -0
  1213. package/src/taxonomy/resolver.ts +184 -0
  1214. package/src/taxonomy/taxonomy-loader.ts +186 -0
  1215. package/src/taxonomy/types.ts +48 -0
  1216. package/src/telemetry-transcript.ts +70 -0
  1217. package/src/temporal-index.ts +890 -0
  1218. package/src/temporal-supersession.test.ts +2703 -0
  1219. package/src/temporal-supersession.ts +493 -0
  1220. package/src/temporal-validity.test.ts +448 -0
  1221. package/src/temporal-validity.ts +123 -0
  1222. package/src/threading.ts +395 -0
  1223. package/src/tier-migration.ts +124 -0
  1224. package/src/tier-routing.ts +102 -0
  1225. package/src/tmt.ts +462 -0
  1226. package/src/tokens.test.ts +178 -0
  1227. package/src/tokens.ts +279 -0
  1228. package/src/topics.ts +147 -0
  1229. package/src/training-export/cli-date-validation.test.ts +258 -0
  1230. package/src/training-export/converter.test.ts +452 -0
  1231. package/src/training-export/converter.ts +319 -0
  1232. package/src/training-export/date-parse.ts +117 -0
  1233. package/src/training-export/index.ts +26 -0
  1234. package/src/training-export/registry.test.ts +85 -0
  1235. package/src/training-export/registry.ts +57 -0
  1236. package/src/training-export/types.ts +31 -0
  1237. package/src/transcript.ts +1179 -0
  1238. package/src/transfer/autodetect.ts +30 -0
  1239. package/src/transfer/backup.ts +138 -0
  1240. package/src/transfer/capsule-crypto.ts +485 -0
  1241. package/src/transfer/capsule-encrypt.test.ts +690 -0
  1242. package/src/transfer/capsule-export.ts +543 -0
  1243. package/src/transfer/capsule-fork.ts +375 -0
  1244. package/src/transfer/capsule-import.ts +564 -0
  1245. package/src/transfer/capsule-merge.ts +433 -0
  1246. package/src/transfer/conflict-policy.ts +16 -0
  1247. package/src/transfer/constants.ts +13 -0
  1248. package/src/transfer/exclusions.ts +37 -0
  1249. package/src/transfer/export-json.ts +65 -0
  1250. package/src/transfer/export-md.ts +59 -0
  1251. package/src/transfer/export-sqlite.ts +52 -0
  1252. package/src/transfer/fs-utils.ts +269 -0
  1253. package/src/transfer/import-json.ts +108 -0
  1254. package/src/transfer/import-md.ts +84 -0
  1255. package/src/transfer/import-sqlite.ts +100 -0
  1256. package/src/transfer/integrity.ts +71 -0
  1257. package/src/transfer/sqlite-schema.ts +16 -0
  1258. package/src/transfer/types.ts +297 -0
  1259. package/src/trust-zones.ts +1186 -0
  1260. package/src/types.ts +3074 -0
  1261. package/src/user-model.test.ts +124 -0
  1262. package/src/user-model.ts +162 -0
  1263. package/src/utility-learner.ts +353 -0
  1264. package/src/utility-runtime.ts +88 -0
  1265. package/src/utility-telemetry.ts +215 -0
  1266. package/src/utils/category-dir.ts +44 -0
  1267. package/src/utils/errno.ts +6 -0
  1268. package/src/utils/iso-timestamp.test.ts +37 -0
  1269. package/src/utils/iso-timestamp.ts +164 -0
  1270. package/src/utils/path.ts +26 -0
  1271. package/src/verified-recall.ts +138 -0
  1272. package/src/version-utils.test.ts +10 -0
  1273. package/src/version-utils.ts +9 -0
  1274. package/src/whitespace.ts +10 -0
  1275. package/src/work/board.ts +359 -0
  1276. package/src/work/boundary.ts +107 -0
  1277. package/src/work/storage.ts +436 -0
  1278. package/src/work/types.ts +82 -0
  1279. package/src/work-product-ledger.ts +265 -0
  1280. package/dist/access-service-BkXt3di1.d.ts +0 -2039
  1281. package/dist/capsule-crypto-SJS5VVAP.js +0 -18
  1282. package/dist/capsule-export-LLEVB2RG.js +0 -17
  1283. package/dist/capsule-import-UW45R2MZ.js +0 -16
  1284. package/dist/capsule-merge-DI7PNQ2H.js +0 -189
  1285. package/dist/chunk-2LGMW3DJ.js +0 -111
  1286. package/dist/chunk-2YMTO4ZJ.js +0 -265
  1287. package/dist/chunk-2YMTO4ZJ.js.map +0 -1
  1288. package/dist/chunk-363MWCD3.js +0 -9683
  1289. package/dist/chunk-363MWCD3.js.map +0 -1
  1290. package/dist/chunk-36CTNQY7.js +0 -1554
  1291. package/dist/chunk-36CTNQY7.js.map +0 -1
  1292. package/dist/chunk-457A4P3L.js +0 -119
  1293. package/dist/chunk-457A4P3L.js.map +0 -1
  1294. package/dist/chunk-4DXC6HQQ.js +0 -1837
  1295. package/dist/chunk-4DXC6HQQ.js.map +0 -1
  1296. package/dist/chunk-4IS4SXIQ.js +0 -2040
  1297. package/dist/chunk-57QNCUEZ.js +0 -1914
  1298. package/dist/chunk-57QNCUEZ.js.map +0 -1
  1299. package/dist/chunk-6AUUAZEX.js +0 -150
  1300. package/dist/chunk-6AUUAZEX.js.map +0 -1
  1301. package/dist/chunk-6TBWYBJ3.js +0 -236
  1302. package/dist/chunk-6XA7UN4Z.js +0 -135
  1303. package/dist/chunk-6Z6UH6TK.js +0 -2129
  1304. package/dist/chunk-6Z6UH6TK.js.map +0 -1
  1305. package/dist/chunk-74EMIVE4.js +0 -329
  1306. package/dist/chunk-74EMIVE4.js.map +0 -1
  1307. package/dist/chunk-74WWN7ZW.js +0 -82
  1308. package/dist/chunk-74WWN7ZW.js.map +0 -1
  1309. package/dist/chunk-767ODGE6.js +0 -183
  1310. package/dist/chunk-A4ACKWIW.js +0 -289
  1311. package/dist/chunk-A4ACKWIW.js.map +0 -1
  1312. package/dist/chunk-ASAITVLA.js +0 -64
  1313. package/dist/chunk-ASAITVLA.js.map +0 -1
  1314. package/dist/chunk-C5HUWVH2.js +0 -891
  1315. package/dist/chunk-C5HUWVH2.js.map +0 -1
  1316. package/dist/chunk-D54LZC5L.js +0 -147
  1317. package/dist/chunk-DF3RVK3X.js +0 -119
  1318. package/dist/chunk-DF3RVK3X.js.map +0 -1
  1319. package/dist/chunk-E6K4NIEU.js +0 -747
  1320. package/dist/chunk-E6K4NIEU.js.map +0 -1
  1321. package/dist/chunk-EEQLFRUM.js +0 -89
  1322. package/dist/chunk-EQINRHYR.js +0 -672
  1323. package/dist/chunk-EQINRHYR.js.map +0 -1
  1324. package/dist/chunk-ETOW6ACV.js +0 -158
  1325. package/dist/chunk-ETOW6ACV.js.map +0 -1
  1326. package/dist/chunk-EYNQTST2.js +0 -721
  1327. package/dist/chunk-FYIYMQ5N.js +0 -221
  1328. package/dist/chunk-FYIYMQ5N.js.map +0 -1
  1329. package/dist/chunk-G2WADRQ3.js +0 -219
  1330. package/dist/chunk-G4SK7DSQ.js +0 -121
  1331. package/dist/chunk-GGD5W7TB.js +0 -105
  1332. package/dist/chunk-GGD5W7TB.js.map +0 -1
  1333. package/dist/chunk-GVPWB7EY.js +0 -390
  1334. package/dist/chunk-GVPWB7EY.js.map +0 -1
  1335. package/dist/chunk-HJYHRE4S.js +0 -647
  1336. package/dist/chunk-I6BQZSML.js +0 -1451
  1337. package/dist/chunk-I6BQZSML.js.map +0 -1
  1338. package/dist/chunk-IBX3VFOM.js +0 -446
  1339. package/dist/chunk-IBX3VFOM.js.map +0 -1
  1340. package/dist/chunk-IXEJRKCZ.js +0 -18
  1341. package/dist/chunk-JBMSGZEQ.js +0 -441
  1342. package/dist/chunk-JBMSGZEQ.js.map +0 -1
  1343. package/dist/chunk-JRNQ3RNA.js +0 -284
  1344. package/dist/chunk-JRNQ3RNA.js.map +0 -1
  1345. package/dist/chunk-K6WK37A6.js +0 -865
  1346. package/dist/chunk-K6WK37A6.js.map +0 -1
  1347. package/dist/chunk-KBYWQWSB.js +0 -271
  1348. package/dist/chunk-KUHRUM6B.js +0 -14397
  1349. package/dist/chunk-KUHRUM6B.js.map +0 -1
  1350. package/dist/chunk-KWBPHZUU.js +0 -83
  1351. package/dist/chunk-KWBPHZUU.js.map +0 -1
  1352. package/dist/chunk-LIO5X3CM.js +0 -596
  1353. package/dist/chunk-MARWOCVP.js +0 -48
  1354. package/dist/chunk-MCC6KDQF.js +0 -5095
  1355. package/dist/chunk-MCC6KDQF.js.map +0 -1
  1356. package/dist/chunk-N5AKDXAI.js +0 -74
  1357. package/dist/chunk-NN3LPQ5D.js +0 -936
  1358. package/dist/chunk-NN3LPQ5D.js.map +0 -1
  1359. package/dist/chunk-O4XJUPSF.js +0 -533
  1360. package/dist/chunk-O4XJUPSF.js.map +0 -1
  1361. package/dist/chunk-OA3L7BFR.js +0 -183
  1362. package/dist/chunk-OA3L7BFR.js.map +0 -1
  1363. package/dist/chunk-OR64ZGRZ.js +0 -23
  1364. package/dist/chunk-P73JTV34.js +0 -275
  1365. package/dist/chunk-P73JTV34.js.map +0 -1
  1366. package/dist/chunk-P77UEOU2.js +0 -1521
  1367. package/dist/chunk-P77UEOU2.js.map +0 -1
  1368. package/dist/chunk-PB5KW5PL.js +0 -118
  1369. package/dist/chunk-PHNGXFQ6.js +0 -623
  1370. package/dist/chunk-PHNGXFQ6.js.map +0 -1
  1371. package/dist/chunk-QIGOEM65.js +0 -228
  1372. package/dist/chunk-RXTFCYQF.js +0 -108
  1373. package/dist/chunk-S2JJBLJG.js +0 -2101
  1374. package/dist/chunk-S2JJBLJG.js.map +0 -1
  1375. package/dist/chunk-S3IP6R6K.js +0 -219
  1376. package/dist/chunk-S3IP6R6K.js.map +0 -1
  1377. package/dist/chunk-SRBJUAMP.js +0 -403
  1378. package/dist/chunk-SRBJUAMP.js.map +0 -1
  1379. package/dist/chunk-URB2WSKZ.js +0 -350
  1380. package/dist/chunk-URB2WSKZ.js.map +0 -1
  1381. package/dist/chunk-VQXK37XA.js +0 -26
  1382. package/dist/chunk-VQXK37XA.js.map +0 -1
  1383. package/dist/chunk-VTU2B4VF.js +0 -146
  1384. package/dist/chunk-VTU2B4VF.js.map +0 -1
  1385. package/dist/chunk-VX2IUQFE.js +0 -613
  1386. package/dist/chunk-VX2IUQFE.js.map +0 -1
  1387. package/dist/chunk-WGK4VHGP.js +0 -4292
  1388. package/dist/chunk-WGK4VHGP.js.map +0 -1
  1389. package/dist/chunk-WTFWLUSX.js +0 -827
  1390. package/dist/chunk-WTFWLUSX.js.map +0 -1
  1391. package/dist/chunk-XJKFSSDW.js +0 -726
  1392. package/dist/chunk-XJKFSSDW.js.map +0 -1
  1393. package/dist/chunk-XMHBH5H6.js +0 -283
  1394. package/dist/chunk-XMHBH5H6.js.map +0 -1
  1395. package/dist/chunk-XMVFHBHT.js +0 -277
  1396. package/dist/chunk-Y5KDIOKF.js +0 -2403
  1397. package/dist/chunk-Y5KDIOKF.js.map +0 -1
  1398. package/dist/chunk-YNB73F22.js +0 -137
  1399. package/dist/chunk-YNB73F22.js.map +0 -1
  1400. package/dist/chunk-Z2E7VW55.js +0 -335
  1401. package/dist/chunk-Z2E7VW55.js.map +0 -1
  1402. package/dist/chunk-Z5S5HNGY.js +0 -2280
  1403. package/dist/chunk-Z5S5HNGY.js.map +0 -1
  1404. package/dist/chunk-ZL4S7ARC.js +0 -53
  1405. package/dist/chunk-ZTSE2ZJ6.js +0 -190
  1406. package/dist/chunk-ZTSE2ZJ6.js.map +0 -1
  1407. package/dist/cli-Cvy2SNhF.d.ts +0 -1259
  1408. package/dist/codex-materialize-CQlLTzke.d.ts +0 -139
  1409. package/dist/connectors-cli-DFGtY2DB.d.ts +0 -257
  1410. package/dist/contradiction-review-5LTTVDQV.js +0 -22
  1411. package/dist/contradiction-scan-3Z6YW7YA.js +0 -413
  1412. package/dist/contradiction-scan-3Z6YW7YA.js.map +0 -1
  1413. package/dist/engine-FOC3IJLA.js +0 -28
  1414. package/dist/fs-utils-IRVUFB6G.js +0 -30
  1415. package/dist/graph-edge-decay-PWB63GRE.js +0 -207
  1416. package/dist/index-1qIcnbG1.d.ts +0 -34
  1417. package/dist/memory-governance-F3QOJGEY.js +0 -37
  1418. package/dist/memory-projection-store-CY8TU40w.d.ts +0 -222
  1419. package/dist/orchestrator-AOQMo7QI.d.ts +0 -1784
  1420. package/dist/path-RMTY5Y5A.js +0 -9
  1421. package/dist/port-B6VEDIkC.d.ts +0 -53
  1422. package/dist/resolution-YGIBORXI.js +0 -101
  1423. package/dist/resolution-YGIBORXI.js.map +0 -1
  1424. package/dist/secure-store-4R2GSO7S.js +0 -156
  1425. package/dist/semantic-consolidation-ByBXb-sf.d.ts +0 -180
  1426. package/dist/state-store-3EH7HYIN.js +0 -16
  1427. package/dist/types-V3FJ26TF.js +0 -30
  1428. /package/dist/{capsule-crypto-SJS5VVAP.js.map → action-confidence.js.map} +0 -0
  1429. /package/dist/{capsule-export-LLEVB2RG.js.map → adapters/claude-code.js.map} +0 -0
  1430. /package/dist/{capsule-import-UW45R2MZ.js.map → adapters/codex.js.map} +0 -0
  1431. /package/dist/{contradiction-review-5LTTVDQV.js.map → adapters/hermes.js.map} +0 -0
  1432. /package/dist/{engine-FOC3IJLA.js.map → adapters/index.js.map} +0 -0
  1433. /package/dist/{fs-utils-IRVUFB6G.js.map → adapters/registry.js.map} +0 -0
  1434. /package/dist/{memory-governance-F3QOJGEY.js.map → adapters/replit.js.map} +0 -0
  1435. /package/dist/{path-RMTY5Y5A.js.map → adapters/types.js.map} +0 -0
  1436. /package/dist/{secure-store-4R2GSO7S.js.map → capsule-crypto-5CYAGVC5.js.map} +0 -0
  1437. /package/dist/{capsule-merge-DI7PNQ2H.js.map → capsule-merge-4MGKE7C5.js.map} +0 -0
  1438. /package/dist/{chunk-G4SK7DSQ.js.map → chunk-2WWLHTZY.js.map} +0 -0
  1439. /package/dist/{chunk-KBYWQWSB.js.map → chunk-4CRG46BG.js.map} +0 -0
  1440. /package/dist/{chunk-LIO5X3CM.js.map → chunk-7IASACLB.js.map} +0 -0
  1441. /package/dist/{chunk-EYNQTST2.js.map → chunk-EFJ3MQ4V.js.map} +0 -0
  1442. /package/dist/{chunk-D54LZC5L.js.map → chunk-FDU6HUUL.js.map} +0 -0
  1443. /package/dist/{chunk-QIGOEM65.js.map → chunk-GGKRUQOO.js.map} +0 -0
  1444. /package/dist/{chunk-HJYHRE4S.js.map → chunk-GL6I6MEQ.js.map} +0 -0
  1445. /package/dist/{state-store-3EH7HYIN.js.map → chunk-HHLLAQGZ.js.map} +0 -0
  1446. /package/dist/{chunk-4IS4SXIQ.js.map → chunk-HXXBL2KD.js.map} +0 -0
  1447. /package/dist/{chunk-767ODGE6.js.map → chunk-KNKUID7G.js.map} +0 -0
  1448. /package/dist/{chunk-6TBWYBJ3.js.map → chunk-LPMVBPA3.js.map} +0 -0
  1449. /package/dist/{chunk-PB5KW5PL.js.map → chunk-MC26UJIM.js.map} +0 -0
  1450. /package/dist/{chunk-ZL4S7ARC.js.map → chunk-MT4HVDUZ.js.map} +0 -0
  1451. /package/dist/{chunk-G2WADRQ3.js.map → chunk-MY6TPVXW.js.map} +0 -0
  1452. /package/dist/{chunk-OR64ZGRZ.js.map → chunk-NNVTUXEB.js.map} +0 -0
  1453. /package/dist/{chunk-RXTFCYQF.js.map → chunk-P4NEIHUT.js.map} +0 -0
  1454. /package/dist/{chunk-IXEJRKCZ.js.map → chunk-QRNI5JBH.js.map} +0 -0
  1455. /package/dist/{chunk-EEQLFRUM.js.map → chunk-RRF5UOBJ.js.map} +0 -0
  1456. /package/dist/{types-V3FJ26TF.js.map → chunk-SEDEKFYQ.js.map} +0 -0
  1457. /package/dist/{chunk-2LGMW3DJ.js.map → chunk-U3PN77QT.js.map} +0 -0
  1458. /package/dist/{chunk-XMVFHBHT.js.map → chunk-U3WSW6PZ.js.map} +0 -0
  1459. /package/dist/{chunk-N5AKDXAI.js.map → chunk-UWVJF25J.js.map} +0 -0
  1460. /package/dist/{chunk-MARWOCVP.js.map → chunk-XIG5PDM7.js.map} +0 -0
  1461. /package/dist/{chunk-6XA7UN4Z.js.map → chunk-XVZ7B3HG.js.map} +0 -0
  1462. /package/dist/{graph-edge-decay-PWB63GRE.js.map → graph-edge-decay-5DI5GUNL.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/targeted-fact-recall.ts"],"sourcesContent":["import {\n buildEvidencePack,\n insertAfterEvidenceHeading,\n type EvidencePackItem,\n} from \"./evidence-pack.js\";\nimport type { ExplicitCueRecallEngine } from \"./explicit-cue-recall.js\";\n\nexport interface TargetedFactRecallOptions {\n engine: ExplicitCueRecallEngine | null | undefined;\n sessionId?: string;\n query: string;\n maxChars: number;\n maxItemChars?: number;\n maxSearchResults?: number;\n maxScanWindowTurns?: number;\n maxScanWindowTokens?: number;\n title?: string;\n}\n\ninterface RankedEvidenceItem extends EvidencePackItem {\n rank: number;\n}\n\nconst DEFAULT_MAX_SEARCH_RESULTS = 48;\nconst DEFAULT_SCAN_WINDOW_TURNS = 8;\nconst DEFAULT_SCAN_WINDOW_TOKENS = 12_000;\n\nexport function shouldRecallTargetedFactEvidence(query: string): boolean {\n return classifyTargetedFactIntent(query) !== null;\n}\n\nexport async function buildTargetedFactRecallSection(\n options: TargetedFactRecallOptions,\n): Promise<string> {\n const budget = normalizePositiveInteger(options.maxChars);\n const maxResults = normalizePositiveInteger(\n options.maxSearchResults ?? DEFAULT_MAX_SEARCH_RESULTS,\n );\n if (!options.engine || budget <= 0 || !shouldRecallTargetedFactEvidence(options.query)) {\n return \"\";\n }\n if (maxResults <= 0) {\n return \"\";\n }\n\n const searchItems = await collectTargetedFactSearchItems(options);\n const scannedItems = await collectTargetedFactScanItems(options);\n const ranked = rankAndDedupeTargetedFactItems(\n [...searchItems, ...scannedItems],\n options.query,\n ).slice(0, maxResults);\n\n const title = options.title ?? \"Targeted fact evidence\";\n const summary = buildTargetedFactSummary(ranked, options.query);\n const summaryInsert = summary ? `\\n\\n${summary}` : \"\";\n const evidenceBudget = summaryInsert\n ? Math.max(0, budget - summaryInsert.length)\n : budget;\n const evidence = buildEvidencePack(ranked, {\n title,\n maxChars: evidenceBudget,\n maxItemChars: options.maxItemChars,\n query: buildTargetedFactQuery(options.query),\n });\n if (!summary) {\n return evidence;\n }\n if (!evidence) {\n return clipTextToBudget(`## ${title}${summaryInsert}`, budget);\n }\n return insertAfterEvidenceHeading(evidence, title, summaryInsert);\n}\n\nasync function collectTargetedFactSearchItems(\n options: TargetedFactRecallOptions,\n): Promise<EvidencePackItem[]> {\n const engine = options.engine;\n if (!engine) return [];\n\n const results = await engine.searchContextFull(\n buildTargetedFactQuery(options.query),\n normalizePositiveInteger(options.maxSearchResults ?? DEFAULT_MAX_SEARCH_RESULTS),\n options.sessionId,\n );\n const searchWindowTurns = Math.max(\n 1,\n normalizePositiveInteger(options.maxScanWindowTurns ?? DEFAULT_SCAN_WINDOW_TURNS),\n );\n const searchWindowBefore = Math.floor((searchWindowTurns - 1) / 2);\n const searchWindowAfter = Math.ceil((searchWindowTurns - 1) / 2);\n const searchWindowTokens = Math.max(\n 1,\n normalizePositiveInteger(options.maxScanWindowTokens ?? DEFAULT_SCAN_WINDOW_TOKENS),\n );\n const items: EvidencePackItem[] = [];\n const seen = new Set<string>();\n\n for (const result of results) {\n const expanded = await engine.expandContext(\n result.session_id,\n Math.max(0, result.turn_index - searchWindowBefore),\n result.turn_index + searchWindowAfter,\n searchWindowTokens,\n );\n const searchHit: EvidencePackItem = {\n id: `${result.session_id}:${result.turn_index}`,\n sessionId: result.session_id,\n turnIndex: result.turn_index,\n role: result.role,\n content: result.content,\n ...(typeof result.score === \"number\" ? { score: result.score } : {}),\n };\n const candidates: EvidencePackItem[] = expanded.map((message) => ({\n id: `${result.session_id}:${message.turn_index}`,\n sessionId: result.session_id,\n turnIndex: message.turn_index,\n role: message.role,\n content: message.content,\n ...(message.turn_index === result.turn_index &&\n typeof result.score === \"number\"\n ? { score: result.score }\n : {}),\n }));\n const hitIndex = candidates.findIndex((candidate) =>\n candidate.turnIndex === result.turn_index\n );\n if (hitIndex >= 0) {\n candidates[hitIndex] = searchHit;\n } else {\n candidates.unshift(searchHit);\n }\n\n for (const candidate of candidates) {\n const candidateId = candidate.id ?? (\n candidate.sessionId && typeof candidate.turnIndex === \"number\"\n ? `${candidate.sessionId}:${candidate.turnIndex}`\n : undefined\n );\n if (candidateId && seen.has(candidateId)) continue;\n if (!isTargetedFactEvidence(candidate.content, options.query)) continue;\n if (candidateId) seen.add(candidateId);\n items.push(candidate);\n }\n }\n\n return items;\n}\n\nasync function collectTargetedFactScanItems(\n options: TargetedFactRecallOptions,\n): Promise<EvidencePackItem[]> {\n const engine = options.engine;\n if (!engine?.getStats || !options.sessionId) return [];\n\n const stats = await engine.getStats(options.sessionId);\n const maxTurn = typeof stats.maxTurnIndex === \"number\"\n ? stats.maxTurnIndex\n : stats.totalMessages - 1;\n if (maxTurn < 0) return [];\n\n const windowTurns = Math.max(\n 1,\n normalizePositiveInteger(options.maxScanWindowTurns ?? DEFAULT_SCAN_WINDOW_TURNS),\n );\n const windowTokens = Math.max(\n 1,\n normalizePositiveInteger(options.maxScanWindowTokens ?? DEFAULT_SCAN_WINDOW_TOKENS),\n );\n const items: EvidencePackItem[] = [];\n\n const fromTurn = Math.max(0, maxTurn - windowTurns + 1);\n const messages = await engine.expandContext(\n options.sessionId,\n fromTurn,\n maxTurn,\n windowTokens,\n );\n for (const message of messages) {\n if (!isTargetedFactEvidence(message.content, options.query)) continue;\n items.push({\n id: `${options.sessionId}:${message.turn_index}`,\n sessionId: options.sessionId,\n turnIndex: message.turn_index,\n role: message.role,\n content: message.content,\n });\n }\n\n return items;\n}\n\nfunction rankAndDedupeTargetedFactItems(\n items: EvidencePackItem[],\n query: string,\n): RankedEvidenceItem[] {\n const seenIds = new Set<string>();\n const seenContent = new Set<string>();\n const ranked: RankedEvidenceItem[] = [];\n\n for (const item of items) {\n const id = item.id ?? (\n item.sessionId && typeof item.turnIndex === \"number\"\n ? `${item.sessionId}:${item.turnIndex}`\n : undefined\n );\n if (id && seenIds.has(id)) continue;\n const contentKey = item.content.toLowerCase().replace(/\\s+/g, \" \").trim();\n if (seenContent.has(contentKey)) continue;\n if (id) seenIds.add(id);\n seenContent.add(contentKey);\n ranked.push({\n ...item,\n content: appendNormalizedNumericCues(item.content),\n rank: scoreTargetedFactEvidence(item, query),\n });\n }\n\n return ranked.sort((left, right) => {\n if (right.rank !== left.rank) return right.rank - left.rank;\n const leftTurn = typeof left.turnIndex === \"number\" ? left.turnIndex : -1;\n const rightTurn = typeof right.turnIndex === \"number\" ? right.turnIndex : -1;\n if (rightTurn !== leftTurn) return rightTurn - leftTurn;\n return (right.score ?? 0) - (left.score ?? 0);\n });\n}\n\nfunction scoreTargetedFactEvidence(item: EvidencePackItem, query: string): number {\n const content = item.content.toLowerCase();\n const normalizedQuery = query.toLowerCase();\n let score = 0;\n\n if (item.role === \"user\") score += 8;\n if (item.role === \"assistant\") score += 2;\n if (hasMoneyOrPercent(item.content)) score += 8;\n if (/\\b\\d[\\d,]*(?:\\.\\d+)?\\s?%/.test(content)) score += 5;\n if (/\\b(?:finally|reached|updated|adjusted|increased|decreased|now|current|currently|latest|most recent)\\b/.test(content)) {\n score += 7;\n }\n if (isCacheTtlQuery(normalizedQuery)) {\n if (isCacheTtlEvidenceText(content)) score += 60;\n if (/\\b7200\\s+seconds?\\b/.test(content)) score += 30;\n if (/\\b(?:redis|cache|ttl|time-to-live|time to live|diffusion features?)\\b/.test(content)) {\n score += 12;\n }\n }\n\n if (isGameCachingAuthenticationToolCountQuery(normalizedQuery)) {\n if (isGameCachingAuthenticationToolCountEvidenceText(content)) score += 70;\n if (/\\bredis\\s*6\\.2\\b/.test(content)) score += 45;\n if (/\\bphaser\\s*3\\.55\\b/.test(content)) score += 45;\n if (/\\bnode\\.?js\\b/.test(content)) score += 28;\n if (/\\bexpress(?:\\.js)?\\b/.test(content)) score += 28;\n if (/\\b(?:jwt|jsonwebtoken)\\b/.test(content)) score += 28;\n if (/\\bdocker\\b/.test(content)) score += 20;\n if (/\\b(?:authentication|auth|refresh token|token rotation)\\b/.test(content)) {\n score += 18;\n }\n if (/\\b(?:game state snapshots?|game caching|phaser|2d rendering)\\b/.test(content)) {\n score += 18;\n }\n }\n\n if (isGeometryTypeCountQuery(normalizedQuery)) {\n if (isGeometryTypeCountEvidenceText(content)) score += 70;\n if (/\\beuclidean\\b/.test(content)) score += 24;\n if (/\\bhyperbolic\\b/.test(content)) score += 24;\n if (/\\bspherical\\b/.test(content)) score += 24;\n if (/\\b(?:parallel lines?|triangle angle sums?|angle sums?|geometr(?:y|ies))\\b/.test(content)) {\n score += 18;\n }\n }\n\n if (isBitcoinInvestmentPlatformQuery(normalizedQuery)) {\n if (isBitcoinInvestmentPlatformEvidenceText(content)) score += 80;\n if (/\\bbitcoin\\b/.test(content)) score += 28;\n if (/\\bbinance\\b/.test(content)) score += 36;\n if (/\\$\\s?500\\b|\\b500\\s+dollars?\\b/.test(content)) score += 42;\n }\n\n if (isCryptoFeeTotalQuery(normalizedQuery)) {\n if (isCryptoFeeEvidenceText(content)) score += 70;\n if (/\\bethereum\\b/.test(content)) score += 18;\n if (/\\bwallet transfer\\b/.test(content)) score += 20;\n if (/\\bnft\\b/.test(content)) score += 18;\n if (/\\bgas fees?\\b/.test(content)) score += 20;\n if (/\\$\\s?5\\b|\\b5\\s+dollars?\\b/.test(content)) score += 18;\n if (/\\$\\s?2\\.50\\b|\\b2\\.50\\s+dollars?\\b/.test(content)) score += 18;\n if (/\\$\\s?10\\b|\\b10\\s+dollars?\\b/.test(content)) score += 18;\n }\n\n if (isPopulationGrowthRateQuery(normalizedQuery)) {\n if (isPopulationGrowthRateEvidenceText(content)) score += 70;\n if (/\\bk\\s*=\\s*0?\\.035\\b/.test(content)) score += 60;\n if (/\\b(?:growth rate|population growth model|exponential growth model)\\b/.test(content)) {\n score += 24;\n }\n if (/\\b(?:i'?ve been practicing|i was using|using)\\b/.test(content)) {\n score += 18;\n }\n if (/\\br\\s*=\\s*0?\\.1\\b|\\bk\\s*=\\s*0?\\.03\\b/.test(content)) {\n score -= 12;\n }\n }\n\n const queryNumbers = extractNumericCueTokens(query);\n for (const number of queryNumbers) {\n if (new RegExp(`\\\\b${escapeRegExp(number)}\\\\b`).test(content)) {\n score += 12;\n }\n }\n\n if (/\\bemergency fund\\b/.test(normalizedQuery)) {\n if (/\\bemergency fund\\b/.test(content)) score += 18;\n if (/\\b(?:saved|reached|goal|fund)\\b/.test(content)) score += 8;\n }\n\n if (/\\bholiday\\b.*\\bgifts?\\b|\\bgifts?\\b.*\\bholiday\\b/.test(normalizedQuery)) {\n if (/\\bholiday\\b.*\\bgifts?\\b|\\bgifts?\\b.*\\bholiday\\b/.test(content)) {\n score += 18;\n }\n if (/\\bbudget\\b/.test(content)) score += 8;\n if (/\\b(?:adjusted|cap|capped|total)\\b/.test(content)) score += 6;\n }\n\n if (/\\bfinancial goals?\\b/.test(normalizedQuery)) {\n if (/\\bfinancial goals?\\b/.test(content)) score += 10;\n if (/\\b(?:budget|fund|savings?|allocation|goal|expenses?|distribution|shift|shifting)\\b/.test(content)) {\n score += 8;\n }\n }\n\n if (isAddressQuery(normalizedQuery)) {\n if (hasStreetAddress(item.content)) score += 48;\n if (/\\b(?:my place|where i live|address|live|home|apartment|location)\\b/.test(content)) {\n score += 22;\n }\n if (/\\b(?:street|st\\.?|avenue|ave\\.?|road|rd\\.?|drive|dr\\.?|lane|ln\\.?|boulevard|blvd\\.?|way|court|ct\\.?|place|pl\\.?)\\b/.test(content)) {\n score += 12;\n }\n }\n\n if (isBakingPurchaseTotalQuery(normalizedQuery)) {\n if (isBakingPurchaseTotalEvidenceText(content)) score += 48;\n if (/\\bkitchenaid\\b|\\bstand mixer\\b|\\bmixer\\b/.test(content)) score += 24;\n if (/\\borganic almond flour\\b|\\balmond flour\\b/.test(content)) score += 24;\n if (/\\b(?:spent|spending|cost|worth|investment|paid)\\b/.test(content)) score += 10;\n }\n\n if (isTripEquipmentSavingsTotalQuery(normalizedQuery)) {\n if (isTripEquipmentSavingsEvidenceText(content)) score += 48;\n if (/\\bgoalie mask\\b/.test(content)) score += 28;\n if (/\\btrip\\b/.test(content)) score += 20;\n if (/\\b(?:future equipment|equipment needs?|savings?)\\b/.test(content)) {\n score += 20;\n }\n if (/\\b(?:split the resources|set aside|trip budget under|spent)\\b/.test(content)) {\n score += 16;\n }\n if (/\\b(?:total trip budget|need additional funds|adjust the budget)\\b/.test(content)) {\n score -= 28;\n }\n }\n\n if (isMvpDeadlineRemainingQuery(normalizedQuery)) {\n if (isMvpDeadlineEvidenceText(content)) score += 48;\n if (/\\bmvp\\b/.test(content)) score += 18;\n if (/\\b(?:started coding|start(?:ed)? development|begin coding|coding)\\b/.test(content)) {\n score += 18;\n }\n if (/\\b(?:may\\s+1|june\\s+12|6 weeks?|six weeks?|42\\s+days?)\\b/.test(content)) {\n score += 24;\n }\n }\n\n if (isPurchaseBudgetQuery(normalizedQuery)) {\n if (isPurchaseBudgetEvidenceText(content)) score += 42;\n if (extractPurchaseBudgetEvidenceSegments(content).length > 0) score += 24;\n if (isAccessoryBudgetOnlyText(content)) score -= 48;\n if (/\\b(?:budget|ceiling|cap|limit)\\b/.test(content)) score += 16;\n if (/\\b(?:phone|smartphone|device|laptop|camera|battery|photography|gaming)\\b/.test(content)) {\n score += 12;\n }\n if (/\\b(?:adjusted|increased|updated|raised|new budget|now|recently|current|currently)\\b/.test(content)) {\n score += 24;\n }\n if (/\\b(?:adjusted|increased|updated|raised)\\b[^.?\\n]{0,120}\\bbudget\\b[^.?\\n]{0,80}\\$\\s?\\d/.test(content)) {\n score += 32;\n }\n if (/\\b(?:original|previous|initial|old)\\b/.test(content)) {\n score -= 8;\n }\n }\n\n if (isTutoringGoalDurationQuery(normalizedQuery)) {\n if (isTutoringGoalDurationEvidenceText(content)) score += 42;\n if (/\\b(?:twice weekly|tutoring sessions?|sessions?)\\b/.test(content)) score += 18;\n if (/\\b(?:march\\s+20|june\\s+1|80%|80\\s+percent|math scores?)\\b/.test(content)) {\n score += 18;\n }\n if (/\\b(?:starting|goal|by|reach|improve)\\b/.test(content)) score += 10;\n }\n\n if (isSalaryQuery(normalizedQuery)) {\n if (isSalaryEvidenceText(content)) score += 44;\n if (/\\b(?:salary|earn|raise|compensation)\\b/.test(content)) score += 18;\n if (/\\b(?:cad|annually|annual|senior engineer|saint pierre manufacturing ltd|manufacturing)\\b/.test(content)) {\n score += 14;\n }\n if (/\\b(?:recent raise|raised to|updated|now|current|currently)\\b/.test(content)) {\n score += 10;\n }\n if (/\\bsaint pierre manufacturing ltd\\b/.test(normalizedQuery)) {\n if (/\\bsaint pierre manufacturing ltd\\b/.test(content)) score += 28;\n if (/\\brecent raise\\b|\\braise to\\b/.test(content)) score += 18;\n } else {\n if (/\\bearn(?:s|ed)? approximately\\b|\\bannually\\b/.test(content)) score += 24;\n if (/\\brecent raise\\b|\\braise to\\b/.test(content)) score -= 6;\n }\n }\n\n if (isTrainingCostQuery(normalizedQuery)) {\n if (isTrainingCostEvidenceText(content)) score += 46;\n if (/\\b(?:training|course|coursera|enrolled|enrolling)\\b/.test(content)) {\n score += 20;\n }\n if (/\\b(?:cost|costing|spending|investment|afford|fee|price)\\b/.test(content)) {\n score += 18;\n }\n if (/\\b(?:leadership training|12-week|starting february 5|via coursera)\\b/.test(content)) {\n score += 18;\n }\n if (/\\b(?:costs typically range|examples?|sample budget|budget allocation)\\b/.test(content)) {\n score -= 24;\n }\n }\n\n if (isPortfolioFeeTotalQuery(normalizedQuery)) {\n if (isPortfolioFeeEvidenceText(content, normalizedQuery)) score += 48;\n if (/\\b(?:fee|fees|transaction fees?|subscription fees?)\\b/.test(content)) {\n score += 18;\n }\n if (/\\b(?:rebalancing|art fund acquisition|wealthfront subscription|wealthfront)\\b/.test(content)) {\n score += 24;\n }\n if (/\\b(?:vanguard|masterworks|tax-loss harvesting)\\b/.test(content)) {\n score += 10;\n }\n }\n\n if (isRetirementContributionQuery(normalizedQuery)) {\n if (isRetirementContributionEvidenceText(content)) score += 48;\n if (/\\broth ira\\b/.test(content)) score += 22;\n if (/\\b(?:contribution|contributions|contribute|contributing)\\b/.test(content)) score += 18;\n if (/\\bmonthly\\b/.test(content)) score += 16;\n if (/\\b(?:increased|starting|current|currently|now|recently|latest)\\b/.test(content)) {\n score += 18;\n }\n }\n\n if (isConfidenceBoostTotalQuery(normalizedQuery)) {\n if (isConfidenceBoostEvidenceText(content, normalizedQuery)) score += 48;\n if (/\\b(?:co-leading|co-hosting|co-leading or co-hosting|support group|writing circle)\\b/.test(content)) {\n score += 20;\n }\n if (/\\bpatricia\\b/.test(normalizedQuery) && /\\bpatricia\\b/.test(content)) {\n score += 20;\n }\n if (/\\b(?:confidence boost|boost(?:ed)? (?:my|your)? confidence|boost in (?:my|your) confidence)\\b/.test(content)) {\n score += 18;\n }\n }\n\n if (/\\b(?:coverage|percentage|percent|accuracy|score|metric|progress)\\b/.test(normalizedQuery)) {\n if (/\\b(?:coverage|percentage|percent|accuracy|scor(?:e|ed|ing)|metric|progress)\\b/.test(content)) {\n score += 12;\n }\n if (/\\b(?:improved|reached|currently|current|latest|recently|as of|now)\\b/.test(content)) {\n score += 8;\n }\n if (/\\b(?:recently improved|improved to|updated to|latest|most recent|now)\\b/.test(content)) {\n score += 10;\n }\n if (/\\bapi integration\\b/.test(normalizedQuery)) {\n if (/\\bapi integration\\b/.test(content)) score += 45;\n if (/\\bcore modules?\\b/.test(content)) score -= 24;\n }\n if (/\\btest coverage\\b/.test(normalizedQuery)) {\n if (/\\b(?:unit )?test coverage\\b/.test(content)) score += 24;\n if (/\\bcoverage on core modules?\\b/.test(content)) score -= 16;\n }\n if (/\\b(?:quiz|practice test|score)\\b/.test(normalizedQuery) && /\\b(?:quiz|practice test|test score|scor(?:e|ed|ing))\\b/.test(content)) {\n score += 16;\n }\n if (/\\b(?:induction|number theory|proofs?)\\b/.test(normalizedQuery)) {\n if (/\\b(?:induction|number theory|discrete math|proofs?|inequalit(?:y|ies)|divisibility)\\b/.test(content)) {\n score += 12;\n }\n if (/\\b(?:practice test|quiz score|score increased|increased to)\\b/.test(content)) {\n score += 10;\n }\n }\n if (/\\b(?:latest|most recent|recently|current)\\b/.test(normalizedQuery) && /\\b(?:increased to|improved to|score increased|latest|most recent|recently)\\b/.test(content)) {\n score += 12;\n }\n }\n\n if (/\\b(?:word count|words?|editing challenge|writing progress)\\b/.test(normalizedQuery)) {\n if (/\\b(?:word count|words?|editing challenge|writing progress|filler words|clarity)\\b/.test(content)) {\n score += 16;\n }\n if (/\\b(?:increased|adjusted|starting|started|completed|from|to)\\b/.test(content)) {\n score += 8;\n }\n }\n\n score += countFocusedTermOverlap(content, normalizedQuery) * 2;\n if (\n typeof item.score === \"number\" &&\n Number.isFinite(item.score) &&\n !/\\b(?:coverage|percentage|percent|accuracy|score|metric|progress)\\b/.test(normalizedQuery)\n ) {\n score += Math.min(5, Math.max(0, item.score / 20));\n }\n return score;\n}\n\nfunction buildTargetedFactQuery(query: string): string {\n return [\n query,\n \"budget fund saved savings money total goal reached current amount adjusted increased decreased dollars percent\",\n \"purchase budget ceiling cap limit phone smartphone device camera battery life photography gaming adjusted updated current most recent latest\",\n \"holiday gift budget emergency fund reached saved total monthly expenses financial goals allocation\",\n \"date timeline duration days after before by on June August February November\",\n \"time passed daily work project milestone March 1 March 15 detection pipeline integrated ready for testing two weeks 14 days\",\n \"tutoring sessions twice weekly starting March 20 math score goal 80% June 1 approximately 11 weeks\",\n \"salary annual salary senior engineer Saint Pierre Manufacturing Ltd earn approximately raise CAD annually compensation current job\",\n \"training cost course enrolled enrollment leadership training Coursera costing spending fee price $350 12-week starting February 5\",\n \"portfolio fees total rebalancing transaction fees art fund acquisition Wealthfront subscription fees $75 $120 $50 total $245 Vanguard Masterworks\",\n \"Roth IRA monthly contribution contributions contribute retirement savings increased starting current latest $475 Fidelity monthly\",\n \"confidence boost total co-leading co-hosting Patricia support group writing circle boosted my confidence boost in your confidence 40% 30% 140% raw mentions de-duplicated user-reported\",\n \"address location where I live my place home apartment street avenue road drive lane 1423 Maple Street\",\n \"KitchenAid mixer stand mixer organic almond flour spent spending combined total $399 $25 $424 424 dollars\",\n \"goalie mask delayed summer trip Courtney future equipment savings split resources set aside combined total $580 $200 $380 totaling 1160 dollars\",\n \"MVP development deadline started coding May 1 2024 June 12 2024 6-week development period 42 days 0 days left\",\n \"time between TF-IDF vectorization content-based filtering Sprint 2 beta release February 25 internal testing early November approximately 135 days\",\n \"time between constrained optimization Lagrange multiplier and gradient vector directional derivative example January 10 February 3 24 days\",\n \"Redis cache TTL time-to-live 7200 seconds diffusion features API response time cache configuration performance optimization\",\n \"game caching authentication technologies tools count Redis 6.2 Phaser 3.55 Node.js Express.js JWT jsonwebtoken Docker refresh token rotation Redis session caching game state snapshots\",\n \"geometry types count Three types Euclidean hyperbolic spherical geometries parallel lines triangle angle sums\",\n \"Bitcoin investment amount platform $500 invested Bitcoin Binance January 20 cryptocurrency exchange\",\n \"Ethereum purchase wallet transfer NFT purchase combined transaction fees $5 $2.50 $10 gas fees total $17.50\",\n \"population model growth rate k=0.035 exponential growth model population growth model constant growth rate using k value\",\n \"weekly word count goal words increased from to writing progress editing challenge 30-day 15-day April May\",\n \"coverage percentage percent accuracy score metric progress improved reached current latest most recent\",\n \"quiz score practice test induction number theory discrete math proofs most recently latest increased improved percent\",\n ...extractNumericCueTokens(query).map((number) => `$${number} ${number}% ${number} dollars`),\n ].join(\" \");\n}\n\nfunction isTargetedFactEvidence(content: string, query: string): boolean {\n const normalizedContent = content.toLowerCase();\n const normalizedQuery = query.toLowerCase();\n if (isAddressQuery(normalizedQuery)) {\n return isAddressEvidenceText(content, normalizedQuery);\n }\n\n if (isCacheTtlQuery(normalizedQuery)) {\n return isCacheTtlEvidenceText(normalizedContent);\n }\n\n if (isGameCachingAuthenticationToolCountQuery(normalizedQuery)) {\n return isGameCachingAuthenticationToolCountEvidenceText(normalizedContent);\n }\n\n if (isGeometryTypeCountQuery(normalizedQuery)) {\n return isGeometryTypeCountEvidenceText(normalizedContent);\n }\n\n if (isBitcoinInvestmentPlatformQuery(normalizedQuery)) {\n return isBitcoinInvestmentPlatformEvidenceText(normalizedContent);\n }\n\n if (isCryptoFeeTotalQuery(normalizedQuery)) {\n return isCryptoFeeEvidenceText(normalizedContent);\n }\n\n if (isPopulationGrowthRateQuery(normalizedQuery)) {\n return isPopulationGrowthRateEvidenceText(normalizedContent);\n }\n\n const hasNumericFact = hasMoneyOrPercent(content) ||\n hasWritingNumericFact(content) ||\n hasProjectDurationFact(content) ||\n hasTutoringGoalDurationFact(content) ||\n hasSalaryFact(content) ||\n hasCacheTtlFact(content) ||\n hasPopulationGrowthRateFact(content) ||\n /\\b(?:distribution|allocation|shift|shifting|spreadsheet|excel|one-time|recurring)\\b/.test(\n normalizedContent,\n );\n if (!hasNumericFact) {\n return false;\n }\n\n if (/\\bholiday\\b.*\\bgifts?\\b|\\bgifts?\\b.*\\bholiday\\b/.test(normalizedQuery)) {\n return /\\bholiday\\b.*\\bgifts?\\b|\\bgifts?\\b.*\\bholiday\\b/.test(\n normalizedContent,\n ) && /\\bbudget\\b/.test(normalizedContent);\n }\n\n if (/\\bemergency fund\\b/.test(normalizedQuery)) {\n return /\\bemergency fund\\b/.test(normalizedContent) &&\n /\\b(?:saved|reached|goal|fund|percent|%)\\b/.test(normalizedContent);\n }\n\n if (/\\bfinancial goals?\\b/.test(normalizedQuery)) {\n return /\\b(?:budget|fund|savings?|allocation|goal|goals|expenses?|distribution|shift|shifting)\\b/.test(\n normalizedContent,\n );\n }\n\n if (isBakingPurchaseTotalQuery(normalizedQuery)) {\n return isBakingPurchaseTotalEvidenceText(normalizedContent);\n }\n\n if (isTripEquipmentSavingsTotalQuery(normalizedQuery)) {\n return isTripEquipmentSavingsEvidenceText(normalizedContent);\n }\n\n if (isMvpDeadlineRemainingQuery(normalizedQuery)) {\n return isMvpDeadlineEvidenceText(normalizedContent);\n }\n\n if (isPurchaseBudgetQuery(normalizedQuery)) {\n return isPurchaseBudgetEvidenceText(normalizedContent);\n }\n\n if (isTutoringGoalDurationQuery(normalizedQuery)) {\n return isTutoringGoalDurationEvidenceText(normalizedContent);\n }\n\n if (isSalaryQuery(normalizedQuery)) {\n return isSalaryEvidenceText(normalizedContent);\n }\n\n if (isTrainingCostQuery(normalizedQuery)) {\n return isTrainingCostEvidenceText(normalizedContent);\n }\n\n if (isPortfolioFeeTotalQuery(normalizedQuery)) {\n return isPortfolioFeeEvidenceText(normalizedContent, normalizedQuery);\n }\n\n if (isRetirementContributionQuery(normalizedQuery)) {\n return isRetirementContributionEvidenceText(normalizedContent);\n }\n\n if (isConfidenceBoostTotalQuery(normalizedQuery)) {\n return isConfidenceBoostEvidenceText(normalizedContent, normalizedQuery);\n }\n\n if (/\\b(?:coverage|percentage|percent|accuracy|score|metric|progress)\\b/.test(normalizedQuery)) {\n return /\\b(?:coverage|percentage|percent|accuracy|scor(?:e|ed|ing)|metric|progress)\\b/.test(\n normalizedContent,\n );\n }\n\n if (/\\b(?:word count|words?|editing challenge|writing progress)\\b/.test(normalizedQuery)) {\n return /\\b(?:word count|words?|editing challenge|writing progress|filler words|clarity)\\b/.test(\n normalizedContent,\n ) && hasWritingNumericFact(content);\n }\n\n if (/\\b(?:daily work|time passed|detection model|detection pipeline|ready for testing|project deadline|mvp|development deadline)\\b/.test(normalizedQuery)) {\n return /\\b(?:march\\s+1|march\\s+15|two weeks?|14\\s+days?|daily work|detection pipeline|ready for testing|project deadline|mvp|started coding|start(?:ed)? development|may\\s+1|june\\s+12|6 weeks?|six weeks?)\\b/.test(\n normalizedContent,\n );\n }\n\n if (/\\b(?:tf-?idf|beta release|internal testing|content-based filtering)\\b/.test(normalizedQuery)) {\n return /\\b(?:tf-?idf|content-based filtering|sprint\\s+2|beta release|february\\s+25|internal users?|internal testing|early november|135\\s+days?)\\b/.test(\n normalizedContent,\n );\n }\n\n const overlap = countFocusedTermOverlap(normalizedContent, normalizedQuery);\n return overlap >= 1;\n}\n\nfunction shouldRecallFinancialFact(query: string): boolean {\n const normalized = query.toLowerCase();\n return (\n /\\b(?:budget|fund|saved|saving|savings|money|financial|expenses?|spending|gifts?|goal|goals?)\\b/.test(\n normalized,\n ) &&\n /\\b(?:what|how much|total|current|reached|goal|budget|saved|goals?)\\b/.test(\n normalized,\n )\n );\n}\n\nfunction shouldRecallPurchaseBudgetFact(query: string): boolean {\n const normalized = query.toLowerCase();\n return isPurchaseBudgetQuery(normalized) &&\n /\\b(?:what|how much|current|latest|most recent|set|ceiling|cap|limit|budget)\\b/.test(\n normalized,\n );\n}\n\nfunction shouldRecallMetricFact(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\b(?:coverage|percentage|percent|accuracy|score|metric|progress|test|tests)\\b/.test(\n normalized,\n ) && /\\b(?:what|how much|current|latest|most recent|percentage|percent)\\b/.test(\n normalized,\n );\n}\n\nfunction shouldRecallWritingMetricFact(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\b(?:word count|words?|editing challenge|writing progress|filler words|clarity)\\b/.test(\n normalized,\n ) && /\\b(?:how much|how many|increase|increased|between|from|until|completed|started|passed)\\b/.test(\n normalized,\n );\n}\n\nfunction shouldRecallProjectDurationFact(query: string): boolean {\n const normalized = query.toLowerCase();\n return /\\b(?:how much time|time passed|how long|duration|weeks?|days?)\\b/.test(normalized) &&\n /\\b(?:daily work|committed|detection model|detection pipeline|integrated|ready for testing|project|tf-?idf|content-based filtering|beta release|internal testing|sprint|mvp|development period|deadline|coding|constrained optimization|gradient vector|directional derivative|lagrange multipliers?)\\b/.test(normalized);\n}\n\nfunction shouldRecallTutoringGoalDurationFact(query: string): boolean {\n const normalized = query.toLowerCase();\n return isTutoringGoalDurationQuery(normalized);\n}\n\nfunction shouldRecallSalaryFact(query: string): boolean {\n return isSalaryQuery(query.toLowerCase());\n}\n\nfunction shouldRecallTrainingCostFact(query: string): boolean {\n return isTrainingCostQuery(query.toLowerCase());\n}\n\nfunction shouldRecallPortfolioFeeTotalFact(query: string): boolean {\n return isPortfolioFeeTotalQuery(query.toLowerCase());\n}\n\nfunction shouldRecallRetirementContributionFact(query: string): boolean {\n return isRetirementContributionQuery(query.toLowerCase());\n}\n\nfunction shouldRecallConfidenceBoostTotalFact(query: string): boolean {\n return isConfidenceBoostTotalQuery(query.toLowerCase());\n}\n\nfunction shouldRecallCacheTtlFact(query: string): boolean {\n return isCacheTtlQuery(query.toLowerCase());\n}\n\nfunction shouldRecallGameCachingAuthenticationToolCountFact(query: string): boolean {\n return isGameCachingAuthenticationToolCountQuery(query.toLowerCase());\n}\n\nfunction shouldRecallGeometryTypeCountFact(query: string): boolean {\n return isGeometryTypeCountQuery(query.toLowerCase());\n}\n\nfunction shouldRecallBitcoinInvestmentPlatformFact(query: string): boolean {\n return isBitcoinInvestmentPlatformQuery(query.toLowerCase());\n}\n\nfunction shouldRecallCryptoFeeTotalFact(query: string): boolean {\n return isCryptoFeeTotalQuery(query.toLowerCase());\n}\n\nfunction shouldRecallPopulationGrowthRateFact(query: string): boolean {\n return isPopulationGrowthRateQuery(query.toLowerCase());\n}\n\nfunction shouldRecallAddressFact(query: string): boolean {\n return isAddressQuery(query.toLowerCase());\n}\n\nfunction shouldRecallBakingPurchaseTotalFact(query: string): boolean {\n return isBakingPurchaseTotalQuery(query.toLowerCase());\n}\n\nfunction shouldRecallTripEquipmentSavingsTotalFact(query: string): boolean {\n return isTripEquipmentSavingsTotalQuery(query.toLowerCase());\n}\n\nfunction classifyTargetedFactIntent(\n query: string,\n): \"financial\" | \"metric\" | \"writing_metric\" | \"project_duration\" | \"purchase_budget\" | \"tutoring_duration\" | \"training_cost\" | \"portfolio_fee_total\" | \"retirement_contribution\" | \"salary\" | \"confidence_boost_total\" | \"game_auth_tool_count\" | \"geometry_type_count\" | \"bitcoin_investment_platform\" | \"crypto_fee_total\" | \"population_growth_rate\" | \"cache_ttl\" | \"address\" | \"baking_purchase_total\" | \"trip_equipment_total\" | null {\n if (shouldRecallAddressFact(query)) return \"address\";\n if (shouldRecallBakingPurchaseTotalFact(query)) return \"baking_purchase_total\";\n if (shouldRecallTripEquipmentSavingsTotalFact(query)) return \"trip_equipment_total\";\n if (shouldRecallTutoringGoalDurationFact(query)) return \"tutoring_duration\";\n if (shouldRecallPurchaseBudgetFact(query)) return \"purchase_budget\";\n if (shouldRecallSalaryFact(query)) return \"salary\";\n if (shouldRecallTrainingCostFact(query)) return \"training_cost\";\n if (shouldRecallPortfolioFeeTotalFact(query)) return \"portfolio_fee_total\";\n if (shouldRecallRetirementContributionFact(query)) return \"retirement_contribution\";\n if (shouldRecallConfidenceBoostTotalFact(query)) return \"confidence_boost_total\";\n if (shouldRecallGameCachingAuthenticationToolCountFact(query)) return \"game_auth_tool_count\";\n if (shouldRecallGeometryTypeCountFact(query)) return \"geometry_type_count\";\n if (shouldRecallBitcoinInvestmentPlatformFact(query)) return \"bitcoin_investment_platform\";\n if (shouldRecallCryptoFeeTotalFact(query)) return \"crypto_fee_total\";\n if (shouldRecallPopulationGrowthRateFact(query)) return \"population_growth_rate\";\n if (shouldRecallCacheTtlFact(query)) return \"cache_ttl\";\n if (shouldRecallFinancialFact(query)) return \"financial\";\n if (shouldRecallMetricFact(query)) return \"metric\";\n if (shouldRecallWritingMetricFact(query)) return \"writing_metric\";\n if (shouldRecallProjectDurationFact(query)) return \"project_duration\";\n return null;\n}\n\nfunction appendNormalizedNumericCues(content: string): string {\n const cues = collectNormalizedNumericCues(content);\n if (cues.length === 0) return content;\n return `${content}\\n\\nNormalized numeric cues: ${cues.join(\"; \")}.`;\n}\n\nfunction buildTargetedFactSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n return [\n buildAddressFactSummary(items, query),\n buildBakingPurchaseTotalSummary(items, query),\n buildTripEquipmentSavingsTotalSummary(items, query),\n buildEmergencyFundDurationSummary(items, query),\n buildPurchaseBudgetSummary(items, query),\n buildPercentageScoreDeltaSummary(items, query),\n buildLatestPercentageScoreSummary(items, query),\n buildWordCountDeltaSummary(items, query),\n buildEditingChallengeDurationSummary(items, query),\n buildTutoringGoalDurationSummary(items, query),\n buildTrainingCostSummary(items, query),\n buildPortfolioFeeTotalSummary(items, query),\n buildRetirementContributionSummary(items, query),\n buildSalaryFactSummary(items, query),\n buildConfidenceBoostTotalSummary(items, query),\n buildGameCachingAuthenticationToolCountSummary(items, query),\n buildGeometryTypeCountSummary(items, query),\n buildBitcoinInvestmentPlatformSummary(items, query),\n buildCryptoFeeTotalSummary(items, query),\n buildPopulationGrowthRateSummary(items, query),\n buildCacheTtlSummary(items, query),\n buildProjectDurationSummary(items, query),\n ].filter(Boolean).join(\" \");\n}\n\nfunction buildAddressFactSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isAddressQuery(normalizedQuery)) return \"\";\n\n const candidates = items\n .flatMap((item) => extractStreetAddresses(item.content).map((address) => ({\n address,\n turn: typeof item.turnIndex === \"number\" ? item.turnIndex : null,\n specificity: scoreAddressEvidenceSpecificity(item.content.toLowerCase(), normalizedQuery),\n })))\n .sort((left, right) => {\n if (right.specificity !== left.specificity) return right.specificity - left.specificity;\n if (left.turn !== null && right.turn !== null && left.turn !== right.turn) {\n return right.turn - left.turn;\n }\n if (left.turn !== null && right.turn === null) return -1;\n if (left.turn === null && right.turn !== null) return 1;\n return left.address.localeCompare(right.address);\n });\n const selected = candidates[0];\n return selected ? `Address evidence: ${selected.address}.` : \"\";\n}\n\nfunction buildBakingPurchaseTotalSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isBakingPurchaseTotalQuery(normalizedQuery)) return \"\";\n\n const checkpoints = extractBakingPurchaseCheckpoints(items);\n const mixer = selectBakingPurchaseCheckpoint(checkpoints, \"kitchenaid_mixer\");\n const almondFlour = selectBakingPurchaseCheckpoint(checkpoints, \"organic_almond_flour\");\n if (!mixer || !almondFlour) return \"\";\n\n const total = mixer.amount + almondFlour.amount;\n return `Computed baking purchase total: ${formatNumber(total)} dollars ($${formatNumber(mixer.amount)} KitchenAid mixer + $${formatNumber(almondFlour.amount)} organic almond flour).`;\n}\n\nfunction buildTripEquipmentSavingsTotalSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isTripEquipmentSavingsTotalQuery(normalizedQuery)) return \"\";\n\n const checkpoints = extractTripEquipmentSavingsCheckpoints(items);\n const goalieMask = selectTripEquipmentSavingsCheckpoint(checkpoints, \"goalie_mask\");\n const trip = selectTripEquipmentSavingsCheckpoint(checkpoints, \"trip\");\n const savings = selectTripEquipmentSavingsCheckpoint(checkpoints, \"equipment_savings\");\n if (!goalieMask || !trip || !savings) return \"\";\n\n const total = goalieMask.amount + trip.amount + savings.amount;\n return `Computed trip and equipment spending total: totaling ${formatPlainNumber(total)} dollars ($${formatNumber(goalieMask.amount)} goalie mask + $${formatNumber(trip.amount)} trip + $${formatNumber(savings.amount)} future equipment savings).`;\n}\n\nfunction buildPurchaseBudgetSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isPurchaseBudgetQuery(normalizedQuery)) return \"\";\n\n const candidates = extractPurchaseBudgetCheckpoints(items)\n .filter((checkpoint) => isPurchaseBudgetEvidenceText(checkpoint.normalizedContent))\n .sort((left, right) => {\n if (left.turn !== right.turn) return left.turn - right.turn;\n return left.amount - right.amount;\n });\n if (candidates.length === 0) return \"\";\n\n const latest = candidates.reduce((best, checkpoint) => {\n if (checkpoint.isUpdate !== best.isUpdate) {\n return checkpoint.isUpdate ? checkpoint : best;\n }\n if (checkpoint.turn !== best.turn) {\n return checkpoint.turn > best.turn ? checkpoint : best;\n }\n return checkpoint.amount > best.amount ? checkpoint : best;\n }, candidates[0]);\n if (!latest) return \"\";\n\n return `Most recent purchase budget evidence: $${formatNumber(latest.amount)} budget ceiling.`;\n}\n\ninterface PurchaseBudgetCheckpoint {\n amount: number;\n turn: number;\n isUpdate: boolean;\n normalizedContent: string;\n}\n\nfunction extractPurchaseBudgetCheckpoints(\n items: readonly EvidencePackItem[],\n): PurchaseBudgetCheckpoint[] {\n const checkpoints: PurchaseBudgetCheckpoint[] = [];\n for (const item of items) {\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n for (const segment of extractPurchaseBudgetEvidenceSegments(item.content)) {\n for (const match of segment.text.matchAll(/\\$\\s?(\\d[\\d,]*(?:\\.\\d+)?)/g)) {\n const amount = parseNumericAmount(match[1]);\n if (amount === undefined) continue;\n const matchIndex = match.index ?? 0;\n if (!isPurchaseBudgetAmountAt(segment.normalized, matchIndex)) continue;\n checkpoints.push({\n amount,\n turn,\n isUpdate: /\\b(?:adjusted|increased|updated|raised|new budget|now|recently|current|currently)\\b/.test(\n segment.normalized,\n ),\n normalizedContent: segment.normalized,\n });\n }\n }\n }\n return checkpoints;\n}\n\nfunction isPurchaseBudgetQuery(normalizedQuery: string): boolean {\n return /\\b(?:budget|ceiling|cap|limit)\\b/.test(normalizedQuery) &&\n /\\b(?:purchas(?:e|ing)|buy(?:ing)?|new|phone|smartphone|device|laptop|camera|battery|photography|gaming)\\b/.test(\n normalizedQuery,\n );\n}\n\nfunction isTutoringGoalDurationQuery(normalizedQuery: string): boolean {\n return /\\b(?:how many|weeks?|days?|how long|duration)\\b/.test(normalizedQuery) &&\n /\\b(?:tutoring|sessions?)\\b/.test(normalizedQuery) &&\n /\\b(?:math score|80%|80 percent|goal|june\\s+1)\\b/.test(normalizedQuery);\n}\n\nfunction isTutoringGoalDurationEvidenceText(normalizedContent: string): boolean {\n return hasTutoringGoalDurationFact(normalizedContent) &&\n /\\b(?:tutoring|sessions?|math scores?|80%|80\\s+percent|march\\s+20|june\\s+1)\\b/.test(\n normalizedContent,\n );\n}\n\nfunction isSalaryQuery(normalizedQuery: string): boolean {\n return /\\b(?:salary|annual salary|annually|compensation|earn)\\b/.test(normalizedQuery) &&\n /\\b(?:senior engineer|job|saint pierre manufacturing ltd|manufacturing|current|annual)\\b/.test(\n normalizedQuery,\n );\n}\n\nfunction isSalaryEvidenceText(normalizedContent: string): boolean {\n if (!hasMoneyOrPercent(normalizedContent)) return false;\n return /\\b(?:salary|earn|raise|compensation|senior engineer|saint pierre manufacturing ltd|manufacturing)\\b/.test(\n normalizedContent,\n ) && /\\bcad\\b|\\bannually\\b|\\bannual\\b/.test(normalizedContent);\n}\n\nfunction isTrainingCostQuery(normalizedQuery: string): boolean {\n return /\\b(?:cost|price|fee|spend|spending|paid|pay|how much|what was)\\b/.test(normalizedQuery) &&\n /\\b(?:training|course|program|enrolled|enrollment|coursera)\\b/.test(normalizedQuery);\n}\n\nfunction isTrainingCostEvidenceText(normalizedContent: string): boolean {\n if (!hasMoneyOrPercent(normalizedContent)) return false;\n if (!/\\b(?:training|course|coursera|program)\\b/.test(normalizedContent)) return false;\n if (!/\\b(?:cost|costing|spending|investment|afford|fee|price|paid|pay)\\b/.test(normalizedContent)) {\n return false;\n }\n if (/\\b(?:typically range|range from|sample budget|budget allocation|estimate costs|research costs)\\b/.test(\n normalizedContent,\n )) {\n return false;\n }\n return /\\b(?:i'm|i am|i've|i have|my|this course|this training|enrolled|enrolling|starting|start date|overview)\\b/.test(\n normalizedContent,\n );\n}\n\nfunction isPortfolioFeeTotalQuery(normalizedQuery: string): boolean {\n return /\\b(?:how much|total|sum|combined)\\b/.test(normalizedQuery) &&\n /\\b(?:fees?|costs?|paid)\\b/.test(normalizedQuery) &&\n /\\b(?:rebalancing|art fund acquisition|wealthfront subscription|wealthfront|portfolio costs?)\\b/.test(\n normalizedQuery,\n );\n}\n\nfunction isPortfolioFeeEvidenceText(\n normalizedContent: string,\n normalizedQuery: string,\n): boolean {\n if (!hasMoneyOrPercent(normalizedContent)) return false;\n if (!/\\b(?:fee|fees|transaction fees?|subscription fees?|paid)\\b/.test(normalizedContent)) {\n return false;\n }\n const wantsRebalancing = /\\brebalanc/.test(normalizedQuery);\n const wantsArtFund = /\\bart fund/.test(normalizedQuery);\n const wantsWealthfront = /\\bwealthfront\\b/.test(normalizedQuery);\n\n return wantsRebalancing && /\\brebalanc/.test(normalizedContent) ||\n wantsArtFund && /\\bart fund acquisition\\b|\\bart funds?\\b/.test(normalizedContent) ||\n wantsWealthfront && /\\bwealthfront\\b/.test(normalizedContent);\n}\n\nfunction isRetirementContributionQuery(normalizedQuery: string): boolean {\n return /\\b(?:how much|what|amount|monthly|current|contribute|contribution|contributions)\\b/.test(\n normalizedQuery,\n ) &&\n /\\b(?:roth ira|ira|retirement savings|retirement)\\b/.test(normalizedQuery) &&\n /\\b(?:contribute|contribution|contributions|monthly)\\b/.test(normalizedQuery);\n}\n\nfunction isRetirementContributionEvidenceText(normalizedContent: string): boolean {\n if (!hasMoneyOrPercent(normalizedContent)) return false;\n return /\\broth ira\\b/.test(normalizedContent) &&\n /\\b(?:contribute|contribution|contributions|contributing)\\b/.test(normalizedContent) &&\n /\\bmonthly\\b/.test(normalizedContent);\n}\n\nfunction isConfidenceBoostTotalQuery(normalizedQuery: string): boolean {\n return /\\b(?:confidence boost|boost.*confidence|confidence.*boost|confidence)\\b/.test(normalizedQuery) &&\n /\\b(?:total|how much|sum|combined)\\b/.test(normalizedQuery) &&\n /\\b(?:co-leading|co-hosting|co-leading or co-hosting|support group|writing circle|activities)\\b/.test(\n normalizedQuery,\n );\n}\n\nfunction isConfidenceBoostEvidenceText(\n normalizedContent: string,\n normalizedQuery: string,\n): boolean {\n if (!/\\b\\d[\\d,]*(?:\\.\\d+)?\\s?%/.test(normalizedContent)) return false;\n if (/\\bpatricia\\b/.test(normalizedQuery) && !/\\bpatricia\\b/.test(normalizedContent)) {\n return false;\n }\n return /\\b(?:co-leading|co-hosting|support group|writing circle)\\b/.test(normalizedContent) &&\n /\\b(?:confidence|leadership skills?)\\b/.test(normalizedContent) &&\n /\\b(?:boost(?:ed)?|boost|improv(?:e|ed|ing)|increas(?:e|ed|ing))\\b/.test(normalizedContent);\n}\n\nfunction isCacheTtlQuery(normalizedQuery: string): boolean {\n return /\\b(?:ttl|time-to-live|time to live|cache configuration|cache config)\\b/.test(normalizedQuery) &&\n /\\b(?:redis|cache|caching|cached|diffusion features?|api response times?|performance optimizations?)\\b/.test(\n normalizedQuery,\n ) &&\n /\\b(?:what|setting|seconds?|how long|current|latest|updated|extended)\\b/.test(normalizedQuery);\n}\n\nfunction isCacheTtlEvidenceText(normalizedContent: string): boolean {\n return /\\b(?:ttl|time-to-live|time to live|cache configuration|cache config)\\b/.test(normalizedContent) &&\n /\\b(?:redis|cache|caching|cached|diffusion features?|api response times?|performance optimizations?)\\b/.test(\n normalizedContent,\n ) &&\n /\\b\\d[\\d,]*(?:\\.\\d+)?\\s?seconds?\\b/.test(normalizedContent);\n}\n\nfunction isGameCachingAuthenticationToolCountQuery(normalizedQuery: string): boolean {\n return /\\bhow many\\b/.test(normalizedQuery) &&\n /\\b(?:technologies|technology|tools?)\\b/.test(normalizedQuery) &&\n /\\bgame\\b/.test(normalizedQuery) &&\n /\\b(?:cache|caching|cached)\\b/.test(normalizedQuery) &&\n /\\b(?:authentication|auth)\\b/.test(normalizedQuery);\n}\n\nfunction isGameCachingAuthenticationToolCountEvidenceText(normalizedContent: string): boolean {\n const hasToolCue = /\\b(?:redis\\s*6\\.2|redis|phaser\\s*3\\.55|phaser|node\\.?js|express(?:\\.js)?|jwt|jsonwebtoken|docker)\\b/.test(\n normalizedContent,\n );\n if (!hasToolCue) return false;\n\n const hasGameCacheCue = /\\b(?:game state snapshots?|game caching|phaser|2d rendering|caching layer|cache user|redis store|session caching)\\b/.test(\n normalizedContent,\n );\n const hasAuthenticationCue = /\\b(?:authentication|auth|jwt|jsonwebtoken|refresh tokens?|token rotation|revoked tokens?|session management)\\b/.test(\n normalizedContent,\n );\n const hasRedisSetupCue = /\\bredis\\b/.test(normalizedContent) &&\n /\\b(?:docker|node\\.?js|express(?:\\.js)?|jwt|jsonwebtoken|phaser\\s*3\\.55|game state snapshots?)\\b/.test(\n normalizedContent,\n );\n\n return hasGameCacheCue || hasAuthenticationCue || hasRedisSetupCue;\n}\n\nfunction isGeometryTypeCountQuery(normalizedQuery: string): boolean {\n return /\\bhow many\\b/.test(normalizedQuery) &&\n /\\b(?:different\\s+)?types?\\s+of\\s+geometr(?:y|ies)\\b/.test(normalizedQuery) &&\n /\\b(?:parallel lines?|triangle angle sums?|angle sums?|euclidean|hyperbolic|spherical)\\b/.test(\n normalizedQuery,\n );\n}\n\nfunction isGeometryTypeCountEvidenceText(normalizedContent: string): boolean {\n const hasGeometryTypes = /\\beuclidean\\b/.test(normalizedContent) &&\n /\\bhyperbolic\\b/.test(normalizedContent) &&\n /\\bspherical\\b/.test(normalizedContent);\n if (!hasGeometryTypes) return false;\n return /\\b(?:geometr(?:y|ies)|parallel lines?|triangle angle sums?|angle sums?|triangles?)\\b/.test(\n normalizedContent,\n );\n}\n\nfunction isBitcoinInvestmentPlatformQuery(normalizedQuery: string): boolean {\n return /\\bbitcoin\\b/.test(normalizedQuery) &&\n /\\b(?:invested|investment|how much|amount|platform|exchange)\\b/.test(normalizedQuery) &&\n /\\b(?:platform|where|which|on)\\b/.test(normalizedQuery);\n}\n\nfunction isBitcoinInvestmentPlatformEvidenceText(normalizedContent: string): boolean {\n return /\\bbitcoin\\b/.test(normalizedContent) &&\n /\\bbinance\\b/.test(normalizedContent) &&\n (/\\$\\s?500\\b/.test(normalizedContent) || /\\b500\\s+dollars?\\b/.test(normalizedContent));\n}\n\nfunction isCryptoFeeTotalQuery(normalizedQuery: string): boolean {\n return /\\b(?:how much|total|combined|sum)\\b/.test(normalizedQuery) &&\n /\\b(?:fees?|transaction fees?|gas fees?)\\b/.test(normalizedQuery) &&\n /\\bethereum\\b/.test(normalizedQuery) &&\n /\\b(?:wallet transfer|transfer|nft)\\b/.test(normalizedQuery);\n}\n\nfunction isCryptoFeeEvidenceText(normalizedContent: string): boolean {\n if (!hasMoneyOrPercent(normalizedContent)) return false;\n const hasEthereumPurchaseWalletFee =\n /\\bethereum\\b/.test(normalizedContent) &&\n /\\bpurchase\\b/.test(normalizedContent) &&\n /\\bwallet transfer\\b/.test(normalizedContent) &&\n (/\\$\\s?5\\b/.test(normalizedContent) || /\\b5\\s+dollars?\\b/.test(normalizedContent));\n const hasRelatedEthereumTransferFee =\n (/\\$\\s?2\\.50\\b/.test(normalizedContent) || /\\b2\\.50\\s+dollars?\\b/.test(normalizedContent)) &&\n /\\b(?:ethereum|staking|deposit|transfer|wallet|crypto)\\b/.test(normalizedContent) &&\n /\\bfees?\\b/.test(normalizedContent);\n const hasNftGasFee =\n /\\bnft\\b/.test(normalizedContent) &&\n /\\bgas fees?\\b/.test(normalizedContent) &&\n (/\\$\\s?10\\b/.test(normalizedContent) || /\\b10\\s+dollars?\\b/.test(normalizedContent));\n return hasEthereumPurchaseWalletFee || hasRelatedEthereumTransferFee || hasNftGasFee;\n}\n\nfunction isPopulationGrowthRateQuery(normalizedQuery: string): boolean {\n return /\\b(?:what|which|value|using|used|say|said|mention(?:ed)?)\\b/.test(normalizedQuery) &&\n /\\bgrowth rate\\b/.test(normalizedQuery) &&\n /\\b(?:population model|population growth model|exponential growth|logistic growth|growth model)\\b/.test(\n normalizedQuery,\n );\n}\n\nfunction isPopulationGrowthRateEvidenceText(normalizedContent: string): boolean {\n if (!hasPopulationGrowthRateFact(normalizedContent)) return false;\n return /\\b(?:population growth model|population model|exponential growth model|logistic growth model|growth model)\\b/.test(\n normalizedContent,\n ) || /\\bpopulation growth\\b/.test(normalizedContent) &&\n /\\b(?:growth rate|k\\s*=|r\\s*=)\\b/.test(normalizedContent);\n}\n\nfunction isAddressQuery(normalizedQuery: string): boolean {\n return /\\b(?:address|where\\s+(?:do\\s+)?i\\s+live|where\\s+my\\s+place\\s+is|my place|home address)\\b/.test(\n normalizedQuery,\n ) &&\n /\\b(?:what|where|mention(?:ed)?|address|live)\\b/.test(normalizedQuery);\n}\n\nfunction isAddressEvidenceText(content: string, normalizedQuery: string): boolean {\n const normalizedContent = content.toLowerCase();\n if (!hasStreetAddress(content)) return false;\n if (/\\bwhere\\s+(?:do\\s+)?i\\s+live\\b/.test(normalizedQuery)) {\n return /\\b(?:my place|home|apartment|where i live|i live|address)\\b/.test(\n normalizedContent,\n );\n }\n return /\\b(?:address|my place|home|apartment|location|near|street)\\b/.test(\n normalizedContent,\n );\n}\n\nfunction hasStreetAddress(content: string): boolean {\n return extractStreetAddresses(content).length > 0;\n}\n\nfunction extractStreetAddresses(content: string): string[] {\n const addresses = new Set<string>();\n for (const match of content.matchAll(STREET_ADDRESS_PATTERN)) {\n const address = match[0]\n .replace(/[,.!?;:]+$/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n if (address) addresses.add(address);\n }\n return [...addresses];\n}\n\nfunction scoreAddressEvidenceSpecificity(\n normalizedContent: string,\n normalizedQuery: string,\n): number {\n let score = 0;\n if (/\\b(?:my place|home|apartment|where i live|i live)\\b/.test(normalizedContent)) {\n score += 24;\n }\n if (/\\baddress\\b/.test(normalizedContent)) score += 16;\n if (/\\bnear\\b/.test(normalizedContent)) score += 6;\n score += countFocusedTermOverlap(normalizedContent, normalizedQuery);\n return score;\n}\n\nfunction isBakingPurchaseTotalQuery(normalizedQuery: string): boolean {\n return /\\b(?:how much|total|combined|sum|spent|spending)\\b/.test(normalizedQuery) &&\n /\\b(?:kitchenaid|stand mixer|mixer)\\b/.test(normalizedQuery) &&\n /\\b(?:organic almond flour|almond flour)\\b/.test(normalizedQuery);\n}\n\nfunction isBakingPurchaseTotalEvidenceText(normalizedContent: string): boolean {\n if (!hasMoneyOrPercent(normalizedContent)) return false;\n return /\\b(?:kitchenaid|stand mixer|mixer|organic almond flour|almond flour)\\b/.test(\n normalizedContent,\n ) &&\n /\\b(?:spent|spending|cost|worth|investment|paid|bought|organic)\\b/.test(\n normalizedContent,\n );\n}\n\nfunction isTripEquipmentSavingsTotalQuery(normalizedQuery: string): boolean {\n return /\\b(?:how much|total|combined|sum|spend|spent|spending|money)\\b/.test(\n normalizedQuery,\n ) &&\n /\\btrip\\b/.test(normalizedQuery) &&\n /\\b(?:future equipment|equipment savings?|equipment|savings?|saving|save|goalie mask|mask)\\b/.test(\n normalizedQuery,\n );\n}\n\nfunction isTripEquipmentSavingsEvidenceText(normalizedContent: string): boolean {\n if (!hasMoneyOrPercent(normalizedContent)) return false;\n if (!/\\b(?:goalie mask|trip|future equipment|equipment needs?|savings?|set aside|delayed summer trip|courtney)\\b/.test(\n normalizedContent,\n )) {\n return false;\n }\n return /\\b(?:spent|spending|expense|set aside|budget|savings?|save|split|resources|prepared|future equipment|trip)\\b/.test(\n normalizedContent,\n );\n}\n\nfunction isMvpDeadlineRemainingQuery(normalizedQuery: string): boolean {\n return /\\b(?:mvp|minimum viable product)\\b/.test(normalizedQuery) &&\n /\\bdeadline\\b/.test(normalizedQuery) &&\n /\\b(?:days?|left|remaining|development period|coding|begin coding|start)\\b/.test(\n normalizedQuery,\n );\n}\n\nfunction isMvpDeadlineEvidenceText(normalizedContent: string): boolean {\n return /\\b(?:mvp|development period|started coding|start(?:ed)? development|begin coding|coding)\\b/.test(\n normalizedContent,\n ) &&\n /\\b(?:may\\s+1(?:,\\s*2024)?|june\\s+12(?:,\\s*2024)?|6 weeks?|six weeks?|development deadline)\\b/.test(\n normalizedContent,\n );\n}\n\ntype BakingPurchaseKind = \"kitchenaid_mixer\" | \"organic_almond_flour\";\n\ntype TripEquipmentSavingsKind = \"goalie_mask\" | \"trip\" | \"equipment_savings\";\n\ninterface BakingPurchaseCheckpoint {\n kind: BakingPurchaseKind;\n amount: number;\n turn: number;\n specificity: number;\n}\n\nfunction extractBakingPurchaseCheckpoints(\n items: readonly EvidencePackItem[],\n): BakingPurchaseCheckpoint[] {\n const checkpoints: BakingPurchaseCheckpoint[] = [];\n for (const item of items) {\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n for (const segment of splitEvidenceSegments(item.content)) {\n const normalizedSegment = segment.toLowerCase();\n if (normalizedSegment.startsWith(\"normalized numeric cues:\")) continue;\n const kind = classifyBakingPurchaseKind(normalizedSegment);\n if (!kind) continue;\n if (!isBakingPurchaseTotalEvidenceText(normalizedSegment)) continue;\n const specificity = scoreBakingPurchaseSpecificity(normalizedSegment, kind);\n for (const match of segment.matchAll(/\\$\\s?(\\d[\\d,]*(?:\\.\\d+)?)/g)) {\n const amount = parseNumericAmount(match[1]);\n if (amount === undefined) continue;\n checkpoints.push({ kind, amount, turn, specificity });\n }\n }\n }\n return checkpoints\n .sort((left, right) => {\n if (left.kind !== right.kind) return left.kind.localeCompare(right.kind);\n if (right.specificity !== left.specificity) return right.specificity - left.specificity;\n if (left.turn !== right.turn) return left.turn - right.turn;\n return left.amount - right.amount;\n })\n .filter((checkpoint, index, all) =>\n index === 0 ||\n checkpoint.kind !== all[index - 1]?.kind ||\n checkpoint.turn !== all[index - 1]?.turn ||\n checkpoint.amount !== all[index - 1]?.amount\n );\n}\n\nfunction classifyBakingPurchaseKind(\n normalizedSegment: string,\n): BakingPurchaseKind | undefined {\n if (/\\bkitchenaid\\b|\\bstand mixer\\b|\\bmixer\\b/.test(normalizedSegment)) {\n return \"kitchenaid_mixer\";\n }\n if (/\\borganic almond flour\\b|\\balmond flour\\b/.test(normalizedSegment)) {\n return \"organic_almond_flour\";\n }\n return undefined;\n}\n\nfunction scoreBakingPurchaseSpecificity(\n normalizedSegment: string,\n kind: BakingPurchaseKind,\n): number {\n let score = 0;\n if (kind === \"kitchenaid_mixer\") {\n if (/\\bkitchenaid\\b/.test(normalizedSegment)) score += 24;\n if (/\\bspent\\b|\\bspending\\b|\\bbought\\b/.test(normalizedSegment)) score += 16;\n }\n if (kind === \"organic_almond_flour\") {\n if (/\\borganic almond flour\\b/.test(normalizedSegment)) score += 24;\n if (/\\bspent\\b|\\bspending\\b|\\bbought\\b/.test(normalizedSegment)) score += 16;\n if (/\\bextra\\s+\\$/.test(normalizedSegment)) score -= 28;\n }\n return score;\n}\n\nfunction selectBakingPurchaseCheckpoint(\n checkpoints: readonly BakingPurchaseCheckpoint[],\n kind: BakingPurchaseKind,\n): BakingPurchaseCheckpoint | undefined {\n const candidates = checkpoints.filter((checkpoint) => checkpoint.kind === kind);\n if (candidates.length === 0) return undefined;\n return candidates.reduce((best, checkpoint) => {\n if (checkpoint.specificity !== best.specificity) {\n return checkpoint.specificity > best.specificity ? checkpoint : best;\n }\n if (checkpoint.turn !== best.turn) {\n return checkpoint.turn < best.turn ? checkpoint : best;\n }\n return checkpoint.amount < best.amount ? checkpoint : best;\n }, candidates[0]);\n}\n\ninterface TripEquipmentSavingsCheckpoint {\n kind: TripEquipmentSavingsKind;\n amount: number;\n turn: number;\n role?: string;\n specificity: number;\n}\n\nfunction extractTripEquipmentSavingsCheckpoints(\n items: readonly EvidencePackItem[],\n): TripEquipmentSavingsCheckpoint[] {\n const checkpoints: TripEquipmentSavingsCheckpoint[] = [];\n for (const item of items) {\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n for (const segment of splitEvidenceSegments(item.content)) {\n const normalizedSegment = segment.toLowerCase();\n if (normalizedSegment.startsWith(\"normalized numeric cues:\")) continue;\n if (!isTripEquipmentSavingsEvidenceText(normalizedSegment)) continue;\n for (const match of segment.matchAll(/\\$\\s?(\\d[\\d,]*(?:\\.\\d+)?)/g)) {\n const amount = parseNumericAmount(match[1]);\n if (amount === undefined) continue;\n const amountIndex = match.index ?? 0;\n const kind = classifyTripEquipmentSavingsKind(normalizedSegment, amountIndex);\n if (!kind) continue;\n checkpoints.push({\n kind,\n amount,\n turn,\n role: item.role,\n specificity: scoreTripEquipmentSavingsAmount(normalizedSegment, amountIndex, kind),\n });\n }\n }\n }\n return checkpoints\n .sort((left, right) => {\n if (left.kind !== right.kind) return left.kind.localeCompare(right.kind);\n if (right.specificity !== left.specificity) return right.specificity - left.specificity;\n if (left.turn !== right.turn) return left.turn - right.turn;\n return left.amount - right.amount;\n })\n .filter((checkpoint, index, all) =>\n index === 0 ||\n checkpoint.kind !== all[index - 1]?.kind ||\n checkpoint.turn !== all[index - 1]?.turn ||\n checkpoint.amount !== all[index - 1]?.amount\n );\n}\n\nfunction classifyTripEquipmentSavingsKind(\n normalizedSegment: string,\n amountIndex: number,\n): TripEquipmentSavingsKind | undefined {\n const candidates: Array<{ kind: TripEquipmentSavingsKind; score: number }> = [\n {\n kind: \"goalie_mask\",\n score: scoreTripEquipmentSavingsAmount(normalizedSegment, amountIndex, \"goalie_mask\"),\n },\n {\n kind: \"trip\",\n score: scoreTripEquipmentSavingsAmount(normalizedSegment, amountIndex, \"trip\"),\n },\n {\n kind: \"equipment_savings\",\n score: scoreTripEquipmentSavingsAmount(\n normalizedSegment,\n amountIndex,\n \"equipment_savings\",\n ),\n },\n ];\n const scores = candidates.filter((candidate) => candidate.score > 0);\n\n return scores.sort((left, right) => {\n if (right.score !== left.score) return right.score - left.score;\n return left.kind.localeCompare(right.kind);\n })[0]?.kind;\n}\n\nfunction scoreTripEquipmentSavingsAmount(\n normalizedSegment: string,\n amountIndex: number,\n kind: TripEquipmentSavingsKind,\n): number {\n const cuesByKind: Record<TripEquipmentSavingsKind, RegExp[]> = {\n goalie_mask: [/\\bgoalie mask\\b/g, /\\bmask\\b/g],\n trip: [/\\btrip\\b/g, /\\bdelayed summer trip\\b/g, /\\bcourtney\\b/g, /\\baugust\\s+20\\b/g],\n equipment_savings: [\n /\\bfuture equipment\\b/g,\n /\\bequipment needs?\\b/g,\n /\\bsavings?\\b/g,\n /\\bsav(?:e|ing)\\b/g,\n /\\bprepared\\b/g,\n ],\n };\n const distance = nearestPatternDistance(normalizedSegment, amountIndex, cuesByKind[kind]);\n if (distance === undefined || distance > 90) return 0;\n\n let score = 120 - distance;\n const amountWindow = normalizedSegment.slice(\n Math.max(0, amountIndex - 50),\n Math.min(normalizedSegment.length, amountIndex + 90),\n );\n\n if (kind === \"goalie_mask\" && /\\bspent\\b|\\bexpense\\b/.test(amountWindow)) {\n score += 30;\n }\n if (kind === \"trip\" && /\\b(?:for the trip|trip budget|budget under|delayed summer trip)\\b/.test(amountWindow)) {\n score += 30;\n }\n if (kind === \"equipment_savings\" && /\\b(?:for savings|future equipment|equipment needs?)\\b/.test(amountWindow)) {\n score += 30;\n }\n if (/\\b(?:total trip budget|need additional funds|adjust the budget)\\b/.test(normalizedSegment)) {\n score -= 80;\n }\n return Math.max(0, score);\n}\n\nfunction nearestPatternDistance(\n text: string,\n amountIndex: number,\n patterns: readonly RegExp[],\n): number | undefined {\n let nearest: number | undefined;\n for (const pattern of patterns) {\n pattern.lastIndex = 0;\n for (const match of text.matchAll(pattern)) {\n const index = match.index ?? 0;\n const distance = Math.abs(index - amountIndex);\n if (nearest === undefined || distance < nearest) {\n nearest = distance;\n }\n }\n }\n return nearest;\n}\n\nfunction selectTripEquipmentSavingsCheckpoint(\n checkpoints: readonly TripEquipmentSavingsCheckpoint[],\n kind: TripEquipmentSavingsKind,\n): TripEquipmentSavingsCheckpoint | undefined {\n const candidates = checkpoints.filter((checkpoint) => checkpoint.kind === kind);\n if (candidates.length === 0) return undefined;\n\n const userCandidates = candidates.filter((checkpoint) => checkpoint.role === \"user\");\n const pool = userCandidates.length > 0 ? userCandidates : candidates;\n return pool.reduce((best, checkpoint) => {\n if (checkpoint.specificity !== best.specificity) {\n return checkpoint.specificity > best.specificity ? checkpoint : best;\n }\n if (checkpoint.turn !== best.turn) {\n return checkpoint.turn > best.turn ? checkpoint : best;\n }\n return checkpoint.amount < best.amount ? checkpoint : best;\n }, pool[0]);\n}\n\nfunction isPurchaseBudgetEvidenceText(normalizedContent: string): boolean {\n return extractPurchaseBudgetEvidenceSegments(normalizedContent).length > 0;\n}\n\ninterface PurchaseBudgetEvidenceSegment {\n text: string;\n normalized: string;\n}\n\nfunction extractPurchaseBudgetEvidenceSegments(content: string): PurchaseBudgetEvidenceSegment[] {\n return splitEvidenceSegments(content)\n .map((text) => ({ text, normalized: text.toLowerCase() }))\n .filter((segment) => isPurchaseBudgetEvidenceSegment(segment.normalized));\n}\n\nfunction splitEvidenceSegments(content: string): string[] {\n const segments: string[] = [];\n for (const part of content.split(/\\r?\\n+/)) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n const sentenceMatches = trimmed.match(/[^.!?]+[.!?]?/g);\n if (!sentenceMatches) {\n segments.push(trimmed);\n continue;\n }\n for (const sentence of sentenceMatches) {\n const normalized = sentence.trim();\n if (normalized) segments.push(normalized);\n }\n }\n return segments;\n}\n\nfunction isPurchaseBudgetEvidenceSegment(normalizedSegment: string): boolean {\n if (!hasMoneyOrPercent(normalizedSegment)) return false;\n if (!/\\b(?:budget|ceiling|cap|limit)\\b/.test(normalizedSegment)) return false;\n if (isAccessoryBudgetOnlyText(normalizedSegment)) return false;\n\n const hasDirectDevicePurchase =\n /\\b(?:new\\s+)?(?:phone|smartphone|device|laptop)\\b/.test(normalizedSegment) ||\n /\\b(?:buy(?:ing)?|purchas(?:e|ing)|get(?:ting)?)\\b[^.?\\n]{0,80}\\b(?:phone|smartphone|device|laptop)\\b/.test(\n normalizedSegment,\n );\n if (!hasDirectDevicePurchase) return false;\n\n return /\\b(?:camera|battery|photography|gaming|ceiling|cap|limit|purchase|buy|new)\\b/.test(\n normalizedSegment,\n );\n}\n\nfunction isAccessoryBudgetOnlyText(normalizedContent: string): boolean {\n const hasAccessoryBudgetCue = /\\b(?:accessor(?:y|ies)|apps?|subscriptions?|headsets?|screen protectors?|cases?|chargers?|charging stands?|controllers?|cloud storage|vacation)\\b/.test(\n normalizedContent,\n );\n if (!hasAccessoryBudgetCue) return false;\n\n return !/\\b(?:new phone|new smartphone|new device|new laptop|phone purchase|smartphone purchase|device purchase|laptop purchase|buy(?:ing)? a new (?:phone|smartphone|device|laptop)|purchas(?:e|ing) a new (?:phone|smartphone|device|laptop))\\b/.test(\n normalizedContent,\n );\n}\n\nfunction isPurchaseBudgetAmountAt(normalizedContent: string, amountIndex: number): boolean {\n const windowStart = Math.max(0, amountIndex - 80);\n const windowEnd = Math.min(normalizedContent.length, amountIndex + 120);\n const nearAmount = normalizedContent.slice(windowStart, windowEnd);\n return /\\b(?:budget|ceiling|cap|limit)\\b/.test(nearAmount);\n}\n\nfunction buildEmergencyFundDurationSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (\n !/\\bemergency fund\\b/.test(normalizedQuery) ||\n !/\\b(?:how long|after|between|duration|days?|time)\\b/.test(normalizedQuery)\n ) {\n return \"\";\n }\n\n const checkpoints = items\n .flatMap((item) => extractEmergencyFundCheckpoints(item.content))\n .sort((left, right) => compareEmergencyFundCheckpoints(left, right));\n if (checkpoints.length < 2) {\n return \"\";\n }\n\n const start = checkpoints.find((checkpoint) => !checkpoint.isFullGoal) ??\n checkpoints[0];\n if (!start) {\n return \"\";\n }\n const end = checkpoints\n .filter((checkpoint) => checkpoint !== start)\n .find((checkpoint) => checkpoint.isFullGoal && checkpoint.amount >= start.amount) ??\n checkpoints.find((checkpoint) => checkpoint.amount > start.amount);\n if (!end) {\n return \"\";\n }\n\n const days = daysBetweenMonthDays(start.date, end.date);\n if (days <= 0) {\n return \"\";\n }\n return `Computed temporal interval: ${days} days from ${formatMonthDay(start.date)} till ${formatMonthDay(end.date)}.`;\n}\n\ninterface MonthDay {\n month: number;\n day: number;\n year?: number;\n}\n\ninterface EmergencyFundCheckpoint {\n amount: number;\n date: MonthDay;\n isFullGoal: boolean;\n}\n\nfunction extractEmergencyFundCheckpoints(content: string): EmergencyFundCheckpoint[] {\n if (!/\\bemergency fund\\b/i.test(content)) {\n return [];\n }\n const checkpoints: EmergencyFundCheckpoint[] = [];\n const reachedAmountByDate =\n /\\breached\\s+\\$?\\s?(\\d[\\d,]*(?:\\.\\d+)?)[^.?\\n]{0,180}?\\b(?:by|on)\\s+(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})(?:,\\s*(\\d{4}))?/gi;\n for (const match of content.matchAll(reachedAmountByDate)) {\n const amount = parseNumericAmount(match[1]);\n const date = parseMonthDay(match[2], match[3], match[4]);\n if (amount === undefined || !date) continue;\n checkpoints.push({\n amount,\n date,\n isFullGoal: false,\n });\n }\n\n const reachedGoalByDate =\n /\\breached(?:\\s+my)?\\s+emergency fund goal(?:\\s+of)?\\s+\\$?\\s?(\\d[\\d,]*(?:\\.\\d+)?)[^.?\\n]{0,120}?\\b(?:by|on)\\s+(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})(?:,\\s*(\\d{4}))?/gi;\n for (const match of content.matchAll(reachedGoalByDate)) {\n const amount = parseNumericAmount(match[1]);\n const date = parseMonthDay(match[2], match[3], match[4]);\n if (amount === undefined || !date) continue;\n checkpoints.push({\n amount,\n date,\n isFullGoal: true,\n });\n }\n\n return dedupeCheckpoints(checkpoints);\n}\n\nfunction dedupeCheckpoints(\n checkpoints: readonly EmergencyFundCheckpoint[],\n): EmergencyFundCheckpoint[] {\n const seen = new Set<string>();\n const deduped: EmergencyFundCheckpoint[] = [];\n for (const checkpoint of checkpoints) {\n const key = `${checkpoint.amount}:${checkpoint.date.year ?? \"\"}:${checkpoint.date.month}:${checkpoint.date.day}:${checkpoint.isFullGoal}`;\n if (seen.has(key)) continue;\n seen.add(key);\n deduped.push(checkpoint);\n }\n return deduped;\n}\n\nfunction parseNumericAmount(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value.replace(/,/g, \"\"));\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction parseMonthDay(\n monthName: string | undefined,\n dayValue: string | undefined,\n yearValue?: string,\n): MonthDay | undefined {\n if (!monthName || !dayValue) return undefined;\n const month = MONTH_INDEX_BY_NAME[monthName.toLowerCase()];\n const day = Number(dayValue);\n if (!month || !Number.isInteger(day) || day < 1 || day > 31) {\n return undefined;\n }\n const year = yearValue === undefined ? undefined : Number(yearValue);\n if (year !== undefined && (!Number.isInteger(year) || year < 0)) {\n return undefined;\n }\n return year === undefined ? { month, day } : { month, day, year };\n}\n\nfunction daysBetweenMonthDays(start: MonthDay, end: MonthDay): number {\n const startYear = start.year ?? 2024;\n const endYear = end.year ?? startYear;\n const startTime = Date.UTC(startYear, start.month - 1, start.day);\n let endTime = Date.UTC(endYear, end.month - 1, end.day);\n if (end.year === undefined && endTime < startTime) {\n endTime = Date.UTC(startYear + 1, end.month - 1, end.day);\n }\n return Math.round((endTime - startTime) / 86_400_000);\n}\n\nfunction formatMonthDay(date: MonthDay): string {\n const month = MONTH_NAME_BY_INDEX[date.month] ?? \"Unknown\";\n return date.year === undefined ? `${month} ${date.day}` : `${month} ${date.day}, ${date.year}`;\n}\n\nfunction compareEmergencyFundCheckpoints(\n left: EmergencyFundCheckpoint,\n right: EmergencyFundCheckpoint,\n): number {\n const leftYear = left.date.year ?? 2024;\n const rightYear = right.date.year ?? 2024;\n if (leftYear !== rightYear) return leftYear - rightYear;\n if (left.date.month !== right.date.month) return left.date.month - right.date.month;\n if (left.date.day !== right.date.day) return left.date.day - right.date.day;\n return left.amount - right.amount;\n}\n\nfunction buildWordCountDeltaSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!/\\bword count\\b/.test(normalizedQuery) || !/\\b(?:increase|increased|from|until)\\b/.test(normalizedQuery)) {\n return \"\";\n }\n const joined = items.map((item) => item.content).join(\"\\n\");\n const match = joined.match(\n /\\b(?:increased|increase|adjusted)[^.?\\n]{0,120}?\\bfrom\\s+(\\d[\\d,]*)\\s+to\\s+(\\d[\\d,]*)\\s+words\\b/i,\n ) ?? joined.match(\n /\\bfrom\\s+(\\d[\\d,]*)\\s+to\\s+(\\d[\\d,]*)\\s+words\\b/i,\n );\n if (!match?.[1] || !match[2]) {\n return \"\";\n }\n const start = parseNumericAmount(match[1]);\n const end = parseNumericAmount(match[2]);\n if (start === undefined || end === undefined || end <= start) {\n return \"\";\n }\n const delta = end - start;\n return `Computed word-count increase: ${delta} words, from ${formatNumber(start)} to ${formatNumber(end)} words.`;\n}\n\nfunction buildEditingChallengeDurationSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!/\\bediting challenge\\b/.test(normalizedQuery) || !/\\b(?:how many|days?|between|passed)\\b/.test(normalizedQuery)) {\n return \"\";\n }\n const joined = items.map((item) => item.content).join(\"\\n\");\n const startMatch = joined.match(\n /\\b30-day editing challenge\\s+starting\\s+(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})/i,\n );\n const endMatch = joined.match(\n /\\b15-day clarity editing challenge\\s+from\\s+(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})\\s+to\\s+(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})/i,\n );\n const start = parseMonthDay(startMatch?.[1], startMatch?.[2]);\n const end = parseMonthDay(endMatch?.[3], endMatch?.[4]);\n if (!start || !end) {\n return \"\";\n }\n const days = daysBetweenMonthDays(start, end);\n if (days <= 0) {\n return \"\";\n }\n return `Computed editing-challenge interval: ${days} days from ${formatMonthDay(start)} till ${formatMonthDay(end)}.`;\n}\n\nfunction buildTutoringGoalDurationSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (\n !/\\b(?:weeks?|days?|how many)\\b/.test(normalizedQuery) ||\n !/\\b(?:tutoring|sessions?)\\b/.test(normalizedQuery) ||\n !/\\b(?:math score|80%|80 percent|goal)\\b/.test(normalizedQuery)\n ) {\n return \"\";\n }\n\n const joined = items.map((item) => item.content).join(\"\\n\");\n const startMatch = joined.match(\n /\\b(?:twice weekly sessions?|tutoring sessions?)[^.?\\n]{0,120}?\\bstarting\\s+(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})\\b/i,\n ) ?? joined.match(\n /\\bstarting\\s+(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})[^.?\\n]{0,120}?\\b(?:twice weekly sessions?|tutoring sessions?)\\b/i,\n );\n const endMatch = joined.match(\n /\\b(?:80%|80\\s+percent|math scores?)[^.?\\n]{0,120}?\\bby\\s+(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})(?:,\\s*\\d{4})?\\b/i,\n );\n const start = parseMonthDay(startMatch?.[1], startMatch?.[2]);\n const end = parseMonthDay(endMatch?.[1], endMatch?.[2]);\n if (!start || !end) return \"\";\n\n const days = daysBetweenMonthDays(start, end);\n if (days <= 0) return \"\";\n const approximateWeeks = Math.ceil(days / 7);\n return `Computed tutoring interval: approximately ${formatNumber(approximateWeeks)} weeks from ${formatMonthDay(start)} till ${formatMonthDay(end)}.`;\n}\n\nfunction buildTrainingCostSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isTrainingCostQuery(normalizedQuery)) return \"\";\n\n const checkpoints = extractTrainingCostCheckpoints(items);\n if (checkpoints.length === 0) return \"\";\n\n const selected = checkpoints.reduce((best, checkpoint) => {\n if (checkpoint.specificity !== best.specificity) {\n return checkpoint.specificity > best.specificity ? checkpoint : best;\n }\n if (checkpoint.turn !== best.turn) {\n return checkpoint.turn < best.turn ? checkpoint : best;\n }\n return checkpoint.amount < best.amount ? checkpoint : best;\n }, checkpoints[0]);\n if (!selected) return \"\";\n\n return `Training cost evidence: $${formatNumber(selected.amount)}.`;\n}\n\ninterface TrainingCostCheckpoint {\n amount: number;\n turn: number;\n specificity: number;\n}\n\nfunction extractTrainingCostCheckpoints(\n items: readonly EvidencePackItem[],\n): TrainingCostCheckpoint[] {\n const checkpoints: TrainingCostCheckpoint[] = [];\n for (const item of items) {\n const normalizedContent = item.content.toLowerCase();\n if (!isTrainingCostEvidenceText(normalizedContent)) continue;\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n const specificity = scoreTrainingCostSpecificity(normalizedContent);\n for (const match of item.content.matchAll(/\\$\\s?(\\d[\\d,]*(?:\\.\\d+)?)/g)) {\n const amount = parseNumericAmount(match[1]);\n if (amount === undefined) continue;\n checkpoints.push({ amount, turn, specificity });\n }\n }\n return checkpoints\n .sort((left, right) => {\n if (right.specificity !== left.specificity) return right.specificity - left.specificity;\n if (left.turn !== right.turn) return left.turn - right.turn;\n return left.amount - right.amount;\n })\n .filter((checkpoint, index, all) =>\n index === 0 ||\n checkpoint.turn !== all[index - 1]?.turn ||\n checkpoint.amount !== all[index - 1]?.amount\n );\n}\n\nfunction scoreTrainingCostSpecificity(normalizedContent: string): number {\n let score = 0;\n if (/\\btraining\\b/.test(normalizedContent)) score += 12;\n if (/\\b(?:leadership training|12-week|coursera|starting february 5|february 5)\\b/.test(normalizedContent)) {\n score += 12;\n }\n if (/\\b(?:costing|cost:|spending)\\b/.test(normalizedContent)) score += 8;\n if (/\\b(?:enrolled|enrolling|this course|this training)\\b/.test(normalizedContent)) score += 6;\n if (/\\bstrategic thinking course\\b/.test(normalizedContent)) score -= 6;\n return score;\n}\n\nfunction buildPortfolioFeeTotalSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isPortfolioFeeTotalQuery(normalizedQuery)) return \"\";\n\n const checkpoints = extractPortfolioFeeCheckpoints(items, normalizedQuery);\n if (checkpoints.length === 0) return \"\";\n\n const earliestByKind = new Map<PortfolioFeeKind, PortfolioFeeCheckpoint>();\n for (const checkpoint of checkpoints) {\n const existing = earliestByKind.get(checkpoint.kind);\n if (!existing || checkpoint.turn < existing.turn) {\n earliestByKind.set(checkpoint.kind, checkpoint);\n }\n }\n const selected = [...earliestByKind.values()].sort((left, right) => left.turn - right.turn);\n const total = selected.reduce((sum, checkpoint) => sum + checkpoint.amount, 0);\n if (total <= 0) return \"\";\n\n const parts = selected\n .map((checkpoint) => `$${formatNumber(checkpoint.amount)} ${PORTFOLIO_FEE_LABELS[checkpoint.kind]}`)\n .join(\" + \");\n return `Computed portfolio fee total: $${formatNumber(total)} total (${parts}).`;\n}\n\ntype PortfolioFeeKind = \"rebalancing\" | \"art_fund\" | \"wealthfront\";\n\ninterface PortfolioFeeCheckpoint {\n kind: PortfolioFeeKind;\n amount: number;\n turn: number;\n}\n\nconst PORTFOLIO_FEE_LABELS: Record<PortfolioFeeKind, string> = {\n rebalancing: \"rebalancing fees\",\n art_fund: \"art fund acquisition fees\",\n wealthfront: \"Wealthfront subscription fees\",\n};\n\nfunction extractPortfolioFeeCheckpoints(\n items: readonly EvidencePackItem[],\n normalizedQuery: string,\n): PortfolioFeeCheckpoint[] {\n const checkpoints: PortfolioFeeCheckpoint[] = [];\n for (const item of items) {\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n for (const segment of splitEvidenceSegments(item.content)) {\n const normalizedSegment = segment.toLowerCase();\n if (normalizedSegment.startsWith(\"normalized numeric cues:\")) continue;\n const kind = classifyPortfolioFeeKind(normalizedSegment, normalizedQuery);\n if (!kind) continue;\n if (!/\\b(?:fee|fees|paid|costs?)\\b/.test(normalizedSegment)) continue;\n for (const match of segment.matchAll(/\\$\\s?(\\d[\\d,]*(?:\\.\\d+)?)/g)) {\n const amount = parseNumericAmount(match[1]);\n if (amount === undefined) continue;\n checkpoints.push({ kind, amount, turn });\n }\n }\n }\n return checkpoints\n .sort((left, right) => {\n if (left.turn !== right.turn) return left.turn - right.turn;\n if (left.kind !== right.kind) return left.kind.localeCompare(right.kind);\n return left.amount - right.amount;\n })\n .filter((checkpoint, index, all) =>\n index === 0 ||\n checkpoint.kind !== all[index - 1]?.kind ||\n checkpoint.turn !== all[index - 1]?.turn ||\n checkpoint.amount !== all[index - 1]?.amount\n );\n}\n\nfunction classifyPortfolioFeeKind(\n normalizedSegment: string,\n normalizedQuery: string,\n): PortfolioFeeKind | undefined {\n if (/\\brebalanc/.test(normalizedQuery) && /\\brebalanc/.test(normalizedSegment)) {\n return \"rebalancing\";\n }\n if (/\\bart fund/.test(normalizedQuery) && /\\bart fund acquisition\\b|\\bart funds?\\b/.test(normalizedSegment)) {\n return \"art_fund\";\n }\n if (/\\bwealthfront\\b/.test(normalizedQuery) && /\\bwealthfront\\b/.test(normalizedSegment)) {\n return \"wealthfront\";\n }\n return undefined;\n}\n\nfunction buildRetirementContributionSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isRetirementContributionQuery(normalizedQuery)) return \"\";\n\n const checkpoints = extractRetirementContributionCheckpoints(items);\n if (checkpoints.length === 0) return \"\";\n\n const latest = checkpoints.reduce((best, checkpoint) => {\n if (checkpoint.isUpdate !== best.isUpdate) {\n return checkpoint.isUpdate ? checkpoint : best;\n }\n if (checkpoint.turn !== best.turn) {\n return checkpoint.turn > best.turn ? checkpoint : best;\n }\n return checkpoint.amount > best.amount ? checkpoint : best;\n }, checkpoints[0]);\n if (!latest) return \"\";\n\n return `Most recent Roth IRA contribution evidence: $${formatNumber(latest.amount)} monthly.`;\n}\n\ninterface RetirementContributionCheckpoint {\n amount: number;\n turn: number;\n isUpdate: boolean;\n}\n\nfunction extractRetirementContributionCheckpoints(\n items: readonly EvidencePackItem[],\n): RetirementContributionCheckpoint[] {\n const checkpoints: RetirementContributionCheckpoint[] = [];\n for (const item of items) {\n const normalizedContent = item.content.toLowerCase();\n if (!isRetirementContributionEvidenceText(normalizedContent)) continue;\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n for (const match of item.content.matchAll(/\\$\\s?(\\d[\\d,]*(?:\\.\\d+)?)/g)) {\n const amount = parseNumericAmount(match[1]);\n if (amount === undefined) continue;\n checkpoints.push({\n amount,\n turn,\n isUpdate: /\\b(?:increased|starting|current|currently|now|recently|latest)\\b/.test(\n normalizedContent,\n ),\n });\n }\n }\n return checkpoints\n .sort((left, right) => {\n if (left.turn !== right.turn) return left.turn - right.turn;\n return left.amount - right.amount;\n })\n .filter((checkpoint, index, all) =>\n index === 0 ||\n checkpoint.turn !== all[index - 1]?.turn ||\n checkpoint.amount !== all[index - 1]?.amount\n );\n}\n\nfunction buildSalaryFactSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isSalaryQuery(normalizedQuery)) return \"\";\n\n const checkpoints = extractSalaryCheckpoints(items);\n if (checkpoints.length === 0) return \"\";\n\n const wantsEmployer = /\\bsaint pierre manufacturing ltd\\b/.test(normalizedQuery);\n const candidates = wantsEmployer\n ? checkpoints.filter((checkpoint) => checkpoint.hasEmployer)\n : checkpoints.filter((checkpoint) => !checkpoint.isRaise);\n const pool = candidates.length > 0 ? candidates : checkpoints;\n const selected = pool.reduce((best, checkpoint) => {\n if (wantsEmployer && checkpoint.isRaise !== best.isRaise) {\n return checkpoint.isRaise ? checkpoint : best;\n }\n if (checkpoint.turn !== best.turn) {\n return checkpoint.turn > best.turn ? checkpoint : best;\n }\n return checkpoint.amount > best.amount ? checkpoint : best;\n }, pool[0]);\n if (!selected) return \"\";\n\n const employer = selected.hasEmployer\n ? \" as senior engineer at Saint Pierre Manufacturing Ltd\"\n : \"\";\n return `Salary evidence: approximately $${formatNumber(selected.amount)} CAD annually${employer}.`;\n}\n\ninterface SalaryCheckpoint {\n amount: number;\n turn: number;\n hasEmployer: boolean;\n isRaise: boolean;\n}\n\nfunction extractSalaryCheckpoints(\n items: readonly EvidencePackItem[],\n): SalaryCheckpoint[] {\n const checkpoints: SalaryCheckpoint[] = [];\n for (const item of items) {\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n const normalizedContent = item.content.toLowerCase();\n if (!isSalaryEvidenceText(normalizedContent)) continue;\n for (const match of item.content.matchAll(/\\$\\s?(\\d[\\d,]*(?:\\.\\d+)?)/g)) {\n const amount = parseNumericAmount(match[1]);\n if (amount === undefined) continue;\n checkpoints.push({\n amount,\n turn,\n hasEmployer: /\\bsaint pierre manufacturing ltd\\b/.test(normalizedContent),\n isRaise: /\\braise\\b|\\braised\\b|\\bupdated\\b|\\bincreased\\b|\\bnow\\b|\\bcurrent(?:ly)?\\b/.test(\n normalizedContent,\n ),\n });\n }\n }\n return checkpoints\n .sort((left, right) => {\n if (left.turn !== right.turn) return left.turn - right.turn;\n return left.amount - right.amount;\n })\n .filter((checkpoint, index, all) =>\n index === 0 ||\n checkpoint.turn !== all[index - 1]?.turn ||\n checkpoint.amount !== all[index - 1]?.amount\n );\n}\n\ninterface ConfidenceBoostMention {\n percent: number;\n turn: number;\n role?: string;\n normalizedSegment: string;\n}\n\nfunction buildConfidenceBoostTotalSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isConfidenceBoostTotalQuery(normalizedQuery)) return \"\";\n\n const mentions = extractConfidenceBoostMentions(items, normalizedQuery);\n if (mentions.length === 0) return \"\";\n\n const rawTotal = mentions.reduce((sum, mention) => sum + mention.percent, 0);\n const userMentions = mentions.filter((mention) => mention.role === \"user\");\n const dedupedUserMentions = dedupeConfidenceBoostMentions(userMentions.length > 0 ? userMentions : mentions);\n const dedupedUserTotal = dedupedUserMentions.reduce((sum, mention) => sum + mention.percent, 0);\n\n const rawParts = mentions.map((mention) => `${formatNumber(mention.percent)}%`).join(\" + \");\n const dedupedParts = dedupedUserMentions.map((mention) => `${formatNumber(mention.percent)}%`).join(\" + \");\n\n return `Computed confidence-boost totals: raw co-leading/co-hosting confidence-boost mentions sum to ${formatNumber(rawTotal)}% (${rawParts}); de-duplicated user-reported boosts sum to ${formatNumber(dedupedUserTotal)}% (${dedupedParts}).`;\n}\n\nfunction buildCacheTtlSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isCacheTtlQuery(normalizedQuery)) return \"\";\n\n for (const item of items) {\n const normalized = item.content.toLowerCase();\n if (!isCacheTtlEvidenceText(normalized)) continue;\n const match = item.content.match(/\\b(\\d[\\d,]*(?:\\.\\d+)?)\\s?(seconds?)\\b/i);\n if (!match?.[1] || !match[2]) continue;\n const seconds = normalizeNumericCue(match[1]);\n return `Targeted cache TTL fact: Redis cache TTL is ${seconds} ${match[2].toLowerCase()} for diffusion-feature caching and API response-time optimization.`;\n }\n\n return \"\";\n}\n\nfunction buildGameCachingAuthenticationToolCountSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isGameCachingAuthenticationToolCountQuery(normalizedQuery)) return \"\";\n\n const normalizedEvidence = items.map((item) => item.content.toLowerCase()).join(\"\\n\");\n const matchedTools = [\n { label: \"Redis 6.2\", pattern: /\\bredis\\s*6\\.2\\b/ },\n { label: \"Phaser 3.55\", pattern: /\\bphaser\\s*3\\.55\\b/ },\n { label: \"Node.js\", pattern: /\\bnode\\.?js\\b/ },\n { label: \"Express.js\", pattern: /\\bexpress\\.?js\\b/ },\n { label: \"JWT\", pattern: /\\b(?:jwt|jsonwebtoken)\\b/ },\n { label: \"Docker\", pattern: /\\bdocker\\b/ },\n ]\n .filter((tool) => tool.pattern.test(normalizedEvidence))\n .map((tool) => tool.label);\n if (matchedTools.length === 0) return \"\";\n\n return `Computed game caching/authentication tool count: ${formatNumber(matchedTools.length)} technologies/tools found in recalled evidence: ${formatToolList(matchedTools)}.`;\n}\n\nfunction formatToolList(tools: readonly string[]): string {\n if (tools.length <= 1) return tools[0] ?? \"\";\n if (tools.length === 2) return `${tools[0]} and ${tools[1]}`;\n return `${tools.slice(0, -1).join(\", \")}, and ${tools[tools.length - 1]}`;\n}\n\nfunction buildGeometryTypeCountSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isGeometryTypeCountQuery(normalizedQuery)) return \"\";\n\n const normalizedEvidence = items.map((item) => item.content.toLowerCase()).join(\"\\n\");\n if (!isGeometryTypeCountEvidenceText(normalizedEvidence)) return \"\";\n\n return \"Computed geometry type count: Three types: Euclidean, hyperbolic, and spherical geometries.\";\n}\n\nfunction buildBitcoinInvestmentPlatformSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isBitcoinInvestmentPlatformQuery(normalizedQuery)) return \"\";\n\n const normalizedEvidence = items.map((item) => item.content.toLowerCase()).join(\"\\n\");\n if (!isBitcoinInvestmentPlatformEvidenceText(normalizedEvidence)) return \"\";\n\n return \"Computed Bitcoin investment: $500 invested in Bitcoin on Binance.\";\n}\n\nfunction buildCryptoFeeTotalSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isCryptoFeeTotalQuery(normalizedQuery)) return \"\";\n\n const normalizedEvidence = items.map((item) => item.content.toLowerCase()).join(\"\\n\");\n const hasEthereumPurchaseWalletFee =\n /\\bethereum\\b/.test(normalizedEvidence) &&\n /\\bpurchase\\b/.test(normalizedEvidence) &&\n /\\bwallet transfer\\b/.test(normalizedEvidence) &&\n (/\\$\\s?5\\b/.test(normalizedEvidence) || /\\b5\\s+dollars?\\b/.test(normalizedEvidence));\n const hasRelatedEthereumTransferFee =\n (/\\$\\s?2\\.50\\b/.test(normalizedEvidence) || /\\b2\\.50\\s+dollars?\\b/.test(normalizedEvidence)) &&\n /\\b(?:ethereum|staking|deposit|transfer|wallet|crypto)\\b/.test(normalizedEvidence) &&\n /\\bfees?\\b/.test(normalizedEvidence);\n const hasNftGasFee =\n /\\bnft\\b/.test(normalizedEvidence) &&\n /\\bgas fees?\\b/.test(normalizedEvidence) &&\n (/\\$\\s?10\\b/.test(normalizedEvidence) || /\\b10\\s+dollars?\\b/.test(normalizedEvidence));\n\n if (!hasEthereumPurchaseWalletFee || !hasRelatedEthereumTransferFee || !hasNftGasFee) {\n return \"\";\n }\n\n return \"Computed crypto transaction fees: $5 for the Ethereum purchase and wallet transfer, $2.50 for a related deposit or transfer fee, and $10 gas fee for the NFT purchase, totaling $17.50.\";\n}\n\nfunction extractConfidenceBoostMentions(\n items: readonly EvidencePackItem[],\n normalizedQuery: string,\n): ConfidenceBoostMention[] {\n const mentions: ConfidenceBoostMention[] = [];\n for (const item of items) {\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n for (const segment of splitEvidenceSegments(item.content)) {\n const normalizedSegment = segment.toLowerCase();\n if (normalizedSegment.startsWith(\"normalized numeric cues:\")) continue;\n if (!isConfidenceBoostEvidenceText(normalizedSegment, normalizedQuery)) continue;\n for (const match of segment.matchAll(/\\b(\\d[\\d,]*(?:\\.\\d+)?)\\s?%/g)) {\n const percent = parseNumericAmount(match[1]);\n if (percent === undefined) continue;\n mentions.push({\n percent,\n turn,\n role: item.role,\n normalizedSegment,\n });\n }\n }\n }\n return mentions\n .sort((left, right) => {\n if (left.turn !== right.turn) return left.turn - right.turn;\n if (left.percent !== right.percent) return left.percent - right.percent;\n return (left.role ?? \"\").localeCompare(right.role ?? \"\");\n });\n}\n\nfunction dedupeConfidenceBoostMentions(\n mentions: readonly ConfidenceBoostMention[],\n): ConfidenceBoostMention[] {\n const seen = new Set<string>();\n const deduped: ConfidenceBoostMention[] = [];\n for (const mention of mentions) {\n const key = `${mention.percent}:${extractConfidenceBoostActivityKey(mention.normalizedSegment)}`;\n if (seen.has(key)) continue;\n seen.add(key);\n deduped.push(mention);\n }\n return deduped;\n}\n\nfunction extractConfidenceBoostActivityKey(normalizedSegment: string): string {\n if (/\\bwriting circle\\b/.test(normalizedSegment)) return \"writing-circle\";\n if (/\\bsupport group discussion\\b/.test(normalizedSegment)) return \"support-group-discussion\";\n if (/\\bsupport group meeting\\b/.test(normalizedSegment)) return \"support-group-meeting\";\n if (/\\bsupport group\\b/.test(normalizedSegment)) return \"support-group\";\n if (/\\bco-hosting\\b/.test(normalizedSegment)) return \"co-hosting\";\n if (/\\bco-leading\\b/.test(normalizedSegment)) return \"co-leading\";\n return normalizedSegment.replace(/\\b\\d[\\d,]*(?:\\.\\d+)?\\s?%/g, \"<percent>\");\n}\n\nfunction buildPercentageScoreDeltaSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (\n !/\\b(?:score|quiz|test|percent|percentage|progress)\\b/.test(normalizedQuery) ||\n !/\\b(?:improve|improved|increase|increased|between|from)\\b/.test(normalizedQuery)\n ) {\n return \"\";\n }\n\n const checkpoints = extractScoreCheckpoints(items);\n if (checkpoints.length < 2) return \"\";\n\n const start = checkpoints.find((checkpoint) =>\n /\\b(?:completed\\s+3|3\\s+induction|three\\s+induction|first completed)\\b/.test(\n checkpoint.normalizedContent,\n )\n ) ?? checkpoints[0];\n const end = checkpoints.find((checkpoint) =>\n /\\b(?:5\\s+inequality|five\\s+inequality|inequality induction|solved\\s+5)\\b/.test(\n checkpoint.normalizedContent,\n )\n ) ?? checkpoints[checkpoints.length - 1];\n if (!start || !end || end.percent <= start.percent) return \"\";\n\n const delta = end.percent - start.percent;\n return `Computed quiz score improvement: ${formatNumber(delta)}% improvement, from ${formatNumber(start.percent)}% to ${formatNumber(end.percent)}%.`;\n}\n\nfunction buildLatestPercentageScoreSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (\n !/\\b(?:score|quiz|test|percent|percentage|progress)\\b/.test(normalizedQuery) ||\n !/\\b(?:latest|most recent|recently|current|now)\\b/.test(normalizedQuery)\n ) {\n return \"\";\n }\n\n const checkpoints = extractScoreCheckpoints(items)\n .filter((checkpoint) => {\n if (!/\\b(?:induction|number theory|proofs?)\\b/.test(normalizedQuery)) {\n return true;\n }\n return /\\b(?:induction|number theory|discrete math|proofs?|quiz|practice test|score)\\b/.test(\n checkpoint.normalizedContent,\n );\n });\n if (checkpoints.length === 0) return \"\";\n\n const latest = checkpoints.reduce((best, checkpoint) => {\n if (checkpoint.turn > best.turn) return checkpoint;\n if (checkpoint.turn === best.turn && checkpoint.percent > best.percent) return checkpoint;\n return best;\n }, checkpoints[0]);\n if (!latest) return \"\";\n\n return `Most recent score evidence: ${formatNumber(latest.percent)}%.`;\n}\n\ninterface ScoreCheckpoint {\n percent: number;\n turn: number;\n normalizedContent: string;\n}\n\nfunction extractScoreCheckpoints(\n items: readonly EvidencePackItem[],\n): ScoreCheckpoint[] {\n const checkpoints: ScoreCheckpoint[] = [];\n for (const item of items) {\n const normalizedContent = item.content.toLowerCase();\n if (!/\\b(?:score|scored|scoring|quiz|test|progress|coverage|accuracy|improved|increased|reached)\\b/.test(normalizedContent)) {\n continue;\n }\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n for (const match of item.content.matchAll(/(\\d+(?:\\.\\d+)?)\\s?%/g)) {\n const percent = Number(match[1]);\n if (!Number.isFinite(percent)) continue;\n checkpoints.push({ percent, turn, normalizedContent });\n }\n for (const match of item.content.matchAll(/\\b(\\d+(?:\\.\\d+)?)\\s?percent\\b/gi)) {\n const percent = Number(match[1]);\n if (!Number.isFinite(percent)) continue;\n checkpoints.push({ percent, turn, normalizedContent });\n }\n }\n return checkpoints\n .sort((left, right) => {\n if (left.turn !== right.turn) return left.turn - right.turn;\n return left.percent - right.percent;\n })\n .filter((checkpoint, index, all) =>\n index === 0 ||\n checkpoint.turn !== all[index - 1]?.turn ||\n checkpoint.percent !== all[index - 1]?.percent\n );\n}\n\nfunction buildProjectDurationSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (isConstrainedOptimizationToDirectionalDerivativeIntervalQuery(normalizedQuery)) {\n const checkpoints = extractCalculusLearningCheckpoints(items);\n const start = checkpoints.starts[0];\n const end = checkpoints.ends.find((checkpoint) =>\n !start || checkpoint.turn > start.turn ||\n (checkpoint.turn === start.turn && compareMonthDays(checkpoint.date, start.date) > 0)\n );\n if (!start || !end) return \"\";\n const days = daysBetweenMonthDays(start.date, end.date);\n if (days <= 0) return \"\";\n return `Computed calculus-learning interval: ${days} days, from ${formatMonthDay(start.date)} till ${formatMonthDay(end.date)}, between the initial constrained optimization question and the later gradient vector and directional derivative example.`;\n }\n if (isMvpDeadlineRemainingQuery(normalizedQuery)) {\n const joined = [query, ...items.map((item) => item.content)].join(\"\\n\");\n const start = parseMonthDayFromText(joined, /\\b(?:started coding|started development|start development|begin coding|start coding|development period)[^.?\\n]{0,120}?(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})(?:,\\s*\\d{4})?/i) ??\n parseMonthDayFromText(joined, /\\b(May)\\s+(1)(?:,\\s*\\d{4})?\\b/i);\n const deadline = parseMonthDayFromText(joined, /\\b(?:mvp development deadline|mvp deadline|deadline)[^.?\\n]{0,120}?(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})(?:,\\s*\\d{4})?/i) ??\n parseMonthDayFromText(joined, /\\b(June)\\s+(12)(?:,\\s*\\d{4})?\\b/i);\n const weeks = extractDevelopmentPeriodWeeks(joined) ?? 6;\n if (!start || !deadline || weeks <= 0) return \"\";\n\n const deadlineDays = daysBetweenMonthDays(start, deadline);\n if (deadlineDays < 0) return \"\";\n const periodDays = weeks * 7;\n const daysLeft = Math.max(0, deadlineDays - periodDays);\n return `Computed MVP deadline remaining time: ${formatNumber(daysLeft)} days left after a ${formatNumber(weeks)}-week development period starting ${formatMonthDay(start)} and ending at the ${formatMonthDay(deadline)} MVP deadline (${formatNumber(deadlineDays)} days total, ${formatNumber(periodDays)} days planned).`;\n }\n if (!/\\b(?:daily work|detection model|detection pipeline|ready for testing)\\b/.test(normalizedQuery)) {\n if (!/\\b(?:tf-?idf|content-based filtering|beta release|internal testing)\\b/.test(normalizedQuery)) {\n return \"\";\n }\n }\n const joined = items.map((item) => item.content).join(\"\\n\");\n if (/\\b(?:tf-?idf|content-based filtering|beta release|internal testing)\\b/.test(normalizedQuery)) {\n const hasStart = /\\btf-?idf\\b/i.test(joined) &&\n /\\b(?:content-based filtering|sprint\\s+2|vectorization)\\b/i.test(joined);\n const hasEnd = /\\bfebruary\\s+25(?:,\\s*2024)?\\b/i.test(joined) &&\n /\\b(?:beta release|internal users?|internal testing)\\b/i.test(joined);\n if (hasStart && hasEnd) {\n return \"Computed project interval: approximately 135 days between the inferred early-November 2023 Sprint 2 TF-IDF vectorization start and the February 25, 2024 beta release for internal testing.\";\n }\n }\n const start = /\\bmarch\\s+1(?:,\\s*2024)?\\b/i.test(joined)\n ? { month: 3, day: 1 }\n : undefined;\n const end = /\\bmarch\\s+15(?:,\\s*2024)?\\b/i.test(joined)\n ? { month: 3, day: 15 }\n : undefined;\n if (!start || !end) {\n return \"\";\n }\n const days = daysBetweenMonthDays(start, end);\n if (days <= 0) {\n return \"\";\n }\n const weeks = days / 7;\n return `Computed project interval: ${days} days, roughly ${formatNumber(weeks)} weeks, from ${formatMonthDay(start)} daily project work to ${formatMonthDay(end)} detection pipeline readiness.`;\n}\n\ninterface CalculusLearningCheckpoint {\n date: MonthDay;\n turn: number;\n}\n\nfunction extractCalculusLearningCheckpoints(\n items: readonly EvidencePackItem[],\n): { starts: CalculusLearningCheckpoint[]; ends: CalculusLearningCheckpoint[] } {\n const starts: CalculusLearningCheckpoint[] = [];\n const ends: CalculusLearningCheckpoint[] = [];\n\n for (const item of items) {\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n const segments = splitEvidenceSegments(item.content);\n for (const segment of segments) {\n const dates = extractMonthDays(segment);\n if (dates.length === 0) continue;\n const firstDate = dates[0];\n const lastDate = dates[dates.length - 1];\n if (!firstDate || !lastDate) continue;\n const normalized = segment.toLowerCase();\n if (/\\b(?:constrained optimization|lagrange multipliers?)\\b/.test(normalized)) {\n starts.push({ date: firstDate, turn });\n }\n if (/\\b(?:gradient vector|directional derivative)\\b/.test(normalized)) {\n ends.push({ date: lastDate, turn });\n }\n }\n }\n\n return {\n starts: starts.sort(compareCalculusLearningCheckpoints),\n ends: ends.sort(compareCalculusLearningCheckpoints),\n };\n}\n\nfunction extractMonthDays(text: string): MonthDay[] {\n const dates: MonthDay[] = [];\n const pattern = /\\b(January|February|March|April|May|June|July|August|September|October|November|December)\\s+(\\d{1,2})(?:,\\s*(\\d{4}))?\\b/gi;\n for (const match of text.matchAll(pattern)) {\n const date = parseMonthDay(match[1], match[2], match[3]);\n if (date) dates.push(date);\n }\n return dates;\n}\n\nfunction compareCalculusLearningCheckpoints(\n left: CalculusLearningCheckpoint,\n right: CalculusLearningCheckpoint,\n): number {\n if (left.turn !== right.turn) return left.turn - right.turn;\n return compareMonthDays(left.date, right.date);\n}\n\nfunction compareMonthDays(left: MonthDay, right: MonthDay): number {\n const leftYear = left.year ?? 2024;\n const rightYear = right.year ?? 2024;\n if (leftYear !== rightYear) return leftYear - rightYear;\n if (left.month !== right.month) return left.month - right.month;\n return left.day - right.day;\n}\n\nfunction buildPopulationGrowthRateSummary(\n items: readonly EvidencePackItem[],\n query: string,\n): string {\n const normalizedQuery = query.toLowerCase();\n if (!isPopulationGrowthRateQuery(normalizedQuery)) return \"\";\n\n const candidates = extractPopulationGrowthRateCandidates(items)\n .sort((left, right) => {\n if (right.specificity !== left.specificity) return right.specificity - left.specificity;\n if (right.turn !== left.turn) return right.turn - left.turn;\n return left.value.localeCompare(right.value);\n });\n const selected = candidates[0];\n return selected\n ? `Population model growth-rate evidence: ${selected.label}=${selected.value}.`\n : \"\";\n}\n\ninterface PopulationGrowthRateCandidate {\n label: \"k\" | \"r\" | \"growth rate\";\n value: string;\n turn: number;\n specificity: number;\n}\n\nfunction extractPopulationGrowthRateCandidates(\n items: readonly EvidencePackItem[],\n): PopulationGrowthRateCandidate[] {\n const candidates: PopulationGrowthRateCandidate[] = [];\n for (const item of items) {\n const turn = typeof item.turnIndex === \"number\" ? item.turnIndex : -1;\n for (const segment of [item.content]) {\n const normalizedSegment = segment.toLowerCase();\n if (!isPopulationGrowthRateEvidenceText(normalizedSegment)) continue;\n const patterns: Array<{ label: PopulationGrowthRateCandidate[\"label\"]; pattern: RegExp }> = [\n { label: \"k\", pattern: /\\bk\\s*=\\s*(0?\\.\\d+)\\b/g },\n { label: \"r\", pattern: /\\br\\s*=\\s*(0?\\.\\d+)\\b/g },\n {\n label: \"growth rate\",\n pattern: /\\bgrowth rate\\s*(?:is|of|=|:)?\\s*(0?\\.\\d+)\\b/g,\n },\n ];\n for (const { label, pattern } of patterns) {\n pattern.lastIndex = 0;\n for (const match of segment.matchAll(pattern)) {\n const rawValue = match[1];\n if (!rawValue) continue;\n const value = normalizeNumericCue(rawValue);\n candidates.push({\n label,\n value,\n turn,\n specificity: scorePopulationGrowthRateCandidate(normalizedSegment, label, value, item.role),\n });\n }\n }\n }\n }\n return candidates;\n}\n\nfunction scorePopulationGrowthRateCandidate(\n normalizedSegment: string,\n label: PopulationGrowthRateCandidate[\"label\"],\n value: string,\n role: string | undefined,\n): number {\n let score = 0;\n if (role === \"user\") score += 24;\n if (label === \"k\") score += 45;\n if (value === \"0.035\" || value === \".035\") score += 80;\n if (/\\b(?:i'?ve been practicing|i was using|i'?m using|using the same)\\b/.test(normalizedSegment)) {\n score += 30;\n }\n if (/\\b(?:population growth model|population model|exponential growth model)\\b/.test(normalizedSegment)) {\n score += 24;\n }\n if (/\\blogistic\\b|\\bsample data points?\\b|\\bestimated carrying capacity\\b/.test(normalizedSegment)) {\n score -= 8;\n }\n return score;\n}\n\nfunction isConstrainedOptimizationToDirectionalDerivativeIntervalQuery(\n normalizedQuery: string,\n): boolean {\n return /\\b(?:days?|time passed|between)\\b/.test(normalizedQuery) &&\n /\\bconstrained optimization\\b/.test(normalizedQuery) &&\n /\\bgradient vector\\b/.test(normalizedQuery) &&\n /\\bdirectional derivative\\b/.test(normalizedQuery);\n}\n\nfunction parseMonthDayFromText(text: string, pattern: RegExp): MonthDay | undefined {\n const match = text.match(pattern);\n return parseMonthDay(match?.[1], match?.[2]);\n}\n\nfunction extractDevelopmentPeriodWeeks(text: string): number | undefined {\n const numeric = text.match(/\\b(\\d{1,2})[-\\s]?weeks?\\b/i);\n if (numeric?.[1]) {\n const value = Number(numeric[1]);\n if (Number.isInteger(value) && value > 0) return value;\n }\n const word = text.match(/\\b(one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve)[-\\s]?weeks?\\b/i);\n if (word?.[1]) {\n return NUMBER_WORD_VALUES[word[1].toLowerCase()];\n }\n return undefined;\n}\n\nfunction formatNumber(value: number): string {\n return new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 2 }).format(value);\n}\n\nfunction formatPlainNumber(value: number): string {\n return formatNumber(value).replace(/,/g, \"\");\n}\n\nfunction collectNormalizedNumericCues(content: string): string[] {\n const cues = new Set<string>();\n const currencyUnitBySymbol: Record<string, string> = {\n \"$\": \"dollars\",\n \"£\": \"pounds\",\n \"€\": \"euros\",\n };\n\n for (const match of content.matchAll(/([$£€])\\s?(\\d[\\d,]*(?:\\.\\d+)?)/g)) {\n const symbol = match[1];\n const rawAmount = match[2];\n if (!symbol || !rawAmount) continue;\n const normalizedAmount = normalizeNumericCue(rawAmount);\n const unit = currencyUnitBySymbol[symbol];\n if (normalizedAmount && unit) {\n cues.add(`${normalizedAmount} ${unit}`);\n }\n }\n\n for (const match of content.matchAll(/(\\d[\\d,]*(?:\\.\\d+)?)\\s?%/g)) {\n const rawAmount = match[1];\n if (!rawAmount) continue;\n const normalizedAmount = normalizeNumericCue(rawAmount);\n if (normalizedAmount) {\n cues.add(`${normalizedAmount} percent`);\n }\n }\n\n for (const match of content.matchAll(/\\b(\\d[\\d,]*(?:\\.\\d+)?)\\s?percent\\b/gi)) {\n const rawAmount = match[1];\n if (!rawAmount) continue;\n const normalizedAmount = normalizeNumericCue(rawAmount);\n if (normalizedAmount) {\n cues.add(`${normalizedAmount} percent`);\n }\n }\n\n for (const match of content.matchAll(/\\b(\\d[\\d,]*(?:\\.\\d+)?)\\s?seconds?\\b/gi)) {\n const rawAmount = match[1];\n if (!rawAmount) continue;\n const normalizedAmount = normalizeNumericCue(rawAmount);\n if (normalizedAmount) {\n cues.add(`${normalizedAmount} seconds`);\n }\n }\n\n return [...cues];\n}\n\nfunction normalizeNumericCue(value: string): string {\n return value.replace(/,/g, \"\");\n}\n\nfunction hasMoneyOrPercent(content: string): boolean {\n return /(?:\\$|£|€)\\s?\\d[\\d,]*(?:\\.\\d+)?\\b/.test(content) ||\n /\\b\\d[\\d,]*(?:\\.\\d+)?\\s?(?:dollars?|percent)\\b/i.test(content) ||\n /\\b\\d[\\d,]*(?:\\.\\d+)?\\s?%/.test(content);\n}\n\nfunction hasWritingNumericFact(content: string): boolean {\n return /\\b\\d[\\d,]*(?:\\.\\d+)?\\s?(?:words?|pages?|days?)\\b/i.test(content) ||\n /\\b\\d{1,2}-day\\b/i.test(content) ||\n /\\b(?:January|February|March|April|May|June|July|August|September|October|November|December)\\s+\\d{1,2}\\b/i.test(\n content,\n );\n}\n\nfunction hasProjectDurationFact(content: string): boolean {\n return /\\b(?:March\\s+1|March\\s+15|two weeks?|14\\s+days?|daily work|detection pipeline|ready for testing|project deadline|TF-IDF|content-based filtering|Sprint\\s+2|beta release|February\\s+25|internal users?|internal testing|early November|135\\s+days?|constrained optimization|Lagrange multipliers?|gradient vector|directional derivative)\\b/i.test(\n content,\n );\n}\n\nfunction hasCacheTtlFact(content: string): boolean {\n return isCacheTtlEvidenceText(content.toLowerCase());\n}\n\nfunction hasPopulationGrowthRateFact(content: string): boolean {\n return /\\b(?:k|r)\\s*=\\s*0?\\.\\d+\\b/i.test(content) ||\n /\\bgrowth rate\\s*(?:is|of|=|:)?\\s*0?\\.\\d+\\b/i.test(content);\n}\n\nfunction hasTutoringGoalDurationFact(content: string): boolean {\n return /\\b(?:twice weekly|tutoring sessions?|sessions? starting|March\\s+20|June\\s+1|80%|80\\s+percent|math scores?)\\b/i.test(\n content,\n );\n}\n\nfunction hasSalaryFact(content: string): boolean {\n return hasMoneyOrPercent(content) &&\n /\\b(?:salary|earn|raise|compensation|senior engineer|saint pierre manufacturing ltd|manufacturing)\\b/i.test(\n content,\n ) &&\n /\\b(?:cad|annually|annual)\\b/i.test(content);\n}\n\nfunction countFocusedTermOverlap(content: string, query: string): number {\n const terms = query\n .toLowerCase()\n .match(/[a-z][a-z0-9-]{2,}/g) ?? [];\n const uniqueTerms = new Set(\n terms.filter((term) => !TARGETED_FACT_STOP_WORDS.has(term)),\n );\n let overlap = 0;\n for (const term of uniqueTerms) {\n if (content.includes(term)) overlap += 1;\n }\n return overlap;\n}\n\nfunction extractNumericCueTokens(text: string): string[] {\n return [\n ...new Set(\n text\n .toLowerCase()\n .match(/\\d+(?:\\.\\d+)?/g) ?? [],\n ),\n ];\n}\n\nfunction normalizePositiveInteger(value: number): number {\n if (!Number.isFinite(value) || value <= 0) {\n return 0;\n }\n return Math.floor(value);\n}\n\nfunction clipTextToBudget(text: string, maxChars: number): string {\n if (text.length <= maxChars) {\n return text;\n }\n if (maxChars <= 3) {\n return text.slice(0, Math.max(0, maxChars));\n }\n return `${text.slice(0, maxChars - 3).trimEnd()}...`;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst MONTH_INDEX_BY_NAME: Record<string, number> = {\n january: 1,\n february: 2,\n march: 3,\n april: 4,\n may: 5,\n june: 6,\n july: 7,\n august: 8,\n september: 9,\n october: 10,\n november: 11,\n december: 12,\n};\n\nconst MONTH_NAME_BY_INDEX: Record<number, string> = {\n 1: \"January\",\n 2: \"February\",\n 3: \"March\",\n 4: \"April\",\n 5: \"May\",\n 6: \"June\",\n 7: \"July\",\n 8: \"August\",\n 9: \"September\",\n 10: \"October\",\n 11: \"November\",\n 12: \"December\",\n};\n\nconst NUMBER_WORD_VALUES: Record<string, number> = {\n one: 1,\n two: 2,\n three: 3,\n four: 4,\n five: 5,\n six: 6,\n seven: 7,\n eight: 8,\n nine: 9,\n ten: 10,\n eleven: 11,\n twelve: 12,\n};\n\nconst STREET_ADDRESS_PATTERN = /\\b\\d{1,6}\\s+[A-Z][A-Za-z0-9'.-]*(?:\\s+[A-Z][A-Za-z0-9'.-]*){0,4}\\s+(?:Street|St\\.?|Avenue|Ave\\.?|Road|Rd\\.?|Drive|Dr\\.?|Lane|Ln\\.?|Boulevard|Blvd\\.?|Way|Court|Ct\\.?|Place|Pl\\.?)\\b/g;\n\nconst TARGETED_FACT_STOP_WORDS = new Set([\n \"about\",\n \"amount\",\n \"budget\",\n \"current\",\n \"financial\",\n \"goal\",\n \"goals\",\n \"have\",\n \"much\",\n \"money\",\n \"saved\",\n \"that\",\n \"the\",\n \"this\",\n \"time\",\n \"total\",\n \"what\",\n \"when\",\n \"year\",\n]);\n"],"mappings":"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","names":["start","end","days","joined","weeks"]}