@remnic/core 10.0.13 → 10.0.15

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 (614) hide show
  1. package/dist/abstraction-nodes.js +3 -2
  2. package/dist/access-admin-ops-surface.js +96 -92
  3. package/dist/access-authorization-probe.js +97 -93
  4. package/dist/access-boundary.js +96 -92
  5. package/dist/access-cli.js +203 -198
  6. package/dist/access-cli.js.map +1 -1
  7. package/dist/access-extraction-force-flush.js +96 -92
  8. package/dist/access-http-briefing.js +97 -93
  9. package/dist/access-http-query.js +98 -94
  10. package/dist/access-http.js +121 -117
  11. package/dist/access-idempotency.js +3 -2
  12. package/dist/access-identity-continuity-surface.js +96 -92
  13. package/dist/access-lcm-surface.js +96 -92
  14. package/dist/access-mcp.js +110 -106
  15. package/dist/access-namespace-preflight.js +96 -92
  16. package/dist/access-observe-write-category.js +18 -17
  17. package/dist/access-observe-write-surface.js +96 -92
  18. package/dist/access-offline-manifest.js +17 -15
  19. package/dist/access-operations-batch.js +101 -97
  20. package/dist/access-operations.js +108 -104
  21. package/dist/access-recall-concurrency.js +96 -92
  22. package/dist/access-recall-diagnostics.js +2 -2
  23. package/dist/access-recall-response.js +96 -92
  24. package/dist/access-recall-surface.js +96 -92
  25. package/dist/access-schema.d.ts +2 -2
  26. package/dist/access-schema.js +13 -12
  27. package/dist/access-service.js +96 -92
  28. package/dist/access-surface-catalog.js +98 -94
  29. package/dist/access-surface-catalog.js.map +1 -1
  30. package/dist/active-recall.js +43 -39
  31. package/dist/active-recall.js.map +1 -1
  32. package/dist/adapters/index.js +4 -4
  33. package/dist/adapters/registry.js +2 -2
  34. package/dist/{auto-sync-DGJOZYGT.js → auto-sync-7WWAKW6F.js} +8 -8
  35. package/dist/briefing.js +32 -28
  36. package/dist/buffer.js +13 -13
  37. package/dist/calibration.d.ts.map +1 -1
  38. package/dist/calibration.js +6 -3
  39. package/dist/calibration.js.map +1 -1
  40. package/dist/{capsule-merge-M4HETD27.js → capsule-merge-LGYURS3C.js} +6 -5
  41. package/dist/{capsule-merge-M4HETD27.js.map → capsule-merge-LGYURS3C.js.map} +1 -1
  42. package/dist/capture-write-lock-backoff.d.ts +50 -0
  43. package/dist/capture-write-lock-backoff.d.ts.map +1 -0
  44. package/dist/capture-write-lock-backoff.js +30 -0
  45. package/dist/capture-write-lock.d.ts +6 -0
  46. package/dist/capture-write-lock.d.ts.map +1 -0
  47. package/dist/capture-write-lock.js +15 -0
  48. package/dist/causal-behavior.js +4 -3
  49. package/dist/causal-behavior.js.map +1 -1
  50. package/dist/causal-chain.js +4 -3
  51. package/dist/causal-consolidation.js +36 -32
  52. package/dist/causal-consolidation.js.map +1 -1
  53. package/dist/causal-retrieval.js +4 -3
  54. package/dist/causal-retrieval.js.map +1 -1
  55. package/dist/causal-trajectory-graph.js +7 -6
  56. package/dist/causal-trajectory-graph.js.map +1 -1
  57. package/dist/causal-trajectory.js +3 -2
  58. package/dist/{chunk-KZO43HPY.js → chunk-22RM2ZUJ.js} +112 -112
  59. package/dist/{chunk-ZUMXY4KA.js → chunk-22W2XWGH.js} +3 -3
  60. package/dist/{chunk-MZBWIJJN.js → chunk-23ZQPP2G.js} +24 -19
  61. package/dist/chunk-23ZQPP2G.js.map +1 -0
  62. package/dist/{chunk-PCWXLAJY.js → chunk-2PTH4PRL.js} +2 -2
  63. package/dist/{chunk-ZIZ2G47N.js → chunk-2PYHLSXK.js} +2 -2
  64. package/dist/{chunk-B6O2YLUR.js → chunk-2Z5DIDQD.js} +6 -1
  65. package/dist/chunk-2Z5DIDQD.js.map +1 -0
  66. package/dist/{chunk-7OAIOE5P.js → chunk-33G67YZF.js} +2 -2
  67. package/dist/{chunk-AV2OQF2O.js → chunk-3F3HA3R2.js} +2 -2
  68. package/dist/{chunk-RP5SJ3XR.js → chunk-3GNIJUUE.js} +2 -2
  69. package/dist/{chunk-QZZPUREO.js → chunk-3GYSZHMT.js} +3 -3
  70. package/dist/{chunk-QWWMS4AE.js → chunk-3MO4LWYU.js} +1 -1
  71. package/dist/chunk-3MO4LWYU.js.map +1 -0
  72. package/dist/{chunk-SWIKABKI.js → chunk-3Q3XD3NO.js} +2 -2
  73. package/dist/{chunk-AL6EHLB5.js → chunk-3X3PNU3T.js} +2 -2
  74. package/dist/{chunk-BTJ6CAIA.js → chunk-4IYIGN53.js} +10 -10
  75. package/dist/{chunk-BZTRPCCH.js → chunk-4PDTVVSW.js} +2 -2
  76. package/dist/{chunk-HM7RHKS4.js → chunk-4RNBLLZR.js} +2 -2
  77. package/dist/{chunk-Y3VDGK2O.js → chunk-4SCZZ3U7.js} +282 -84
  78. package/dist/chunk-4SCZZ3U7.js.map +1 -0
  79. package/dist/{chunk-JUWJYXI4.js → chunk-5ATSXCAG.js} +4 -4
  80. package/dist/{chunk-EHRE7ZG3.js → chunk-5B5WYAHQ.js} +2 -2
  81. package/dist/{chunk-WCGJK4NQ.js → chunk-5FNZ3G6X.js} +10 -10
  82. package/dist/{chunk-Y6DZ33PA.js → chunk-5GX5457J.js} +4 -4
  83. package/dist/{chunk-EMFBC7L3.js → chunk-5KGYTX5O.js} +2 -2
  84. package/dist/{chunk-OFCHT2TN.js → chunk-5LRV557D.js} +2 -2
  85. package/dist/{chunk-DXHVD4DS.js → chunk-5SMR542T.js} +3 -3
  86. package/dist/{chunk-S7LWX2PQ.js → chunk-655FVTCD.js} +2 -2
  87. package/dist/{chunk-DGRMWDQY.js → chunk-66BCOVW2.js} +7 -7
  88. package/dist/chunk-6EDW54SQ.js +298 -0
  89. package/dist/chunk-6EDW54SQ.js.map +1 -0
  90. package/dist/{chunk-5MDM7UE4.js → chunk-6WGMZQGG.js} +2 -2
  91. package/dist/chunk-77R7BQZ2.js +152 -0
  92. package/dist/chunk-77R7BQZ2.js.map +1 -0
  93. package/dist/{chunk-IPLYGWQF.js → chunk-7LCGFUMB.js} +6 -6
  94. package/dist/{chunk-5ZJYHOJT.js → chunk-7VQ6AI7H.js} +8 -8
  95. package/dist/{chunk-KYY4EACB.js → chunk-7Z3DLNSD.js} +2 -2
  96. package/dist/{chunk-LNH76ZJX.js → chunk-AIYXVWUH.js} +27 -2
  97. package/dist/{chunk-LNH76ZJX.js.map → chunk-AIYXVWUH.js.map} +1 -1
  98. package/dist/{chunk-G7NYVKD6.js → chunk-B2NXOVZN.js} +2 -2
  99. package/dist/{chunk-B43NMCGQ.js → chunk-BK2BVLZW.js} +2 -2
  100. package/dist/{chunk-QJ622LTI.js → chunk-BQOGQULP.js} +30 -8
  101. package/dist/chunk-BQOGQULP.js.map +1 -0
  102. package/dist/{chunk-BOOFTFFE.js → chunk-C2RW36YR.js} +2 -2
  103. package/dist/{chunk-XERVJYH2.js → chunk-C6JMGAMO.js} +7 -3
  104. package/dist/chunk-C6JMGAMO.js.map +1 -0
  105. package/dist/{chunk-5JMI26Q7.js → chunk-CBH2Z4UA.js} +2 -2
  106. package/dist/{chunk-P2S6P7X6.js → chunk-CFZ4SXXH.js} +2 -2
  107. package/dist/{chunk-YRH3C2OJ.js → chunk-CIIHIAJ2.js} +13 -5
  108. package/dist/chunk-CIIHIAJ2.js.map +1 -0
  109. package/dist/{chunk-6M56RFFJ.js → chunk-CJRENHVZ.js} +3 -3
  110. package/dist/{chunk-EGDYVYU7.js → chunk-CLWBFR7Q.js} +3 -3
  111. package/dist/{chunk-375ARKRS.js → chunk-D5SSBCYY.js} +70 -59
  112. package/dist/chunk-D5SSBCYY.js.map +1 -0
  113. package/dist/{chunk-KI6UOSNR.js → chunk-DEY7B77Y.js} +2 -2
  114. package/dist/chunk-DEY7B77Y.js.map +1 -0
  115. package/dist/{chunk-6VAHJ2F6.js → chunk-DMDWFQMR.js} +2 -2
  116. package/dist/{chunk-BLVHDY2U.js → chunk-DOWACHYO.js} +5 -2
  117. package/dist/chunk-DOWACHYO.js.map +1 -0
  118. package/dist/{chunk-UZSBCQEC.js → chunk-DPSOFK4D.js} +2 -2
  119. package/dist/{chunk-IZT3BVDW.js → chunk-DQR2LD3V.js} +2 -2
  120. package/dist/{chunk-K4QY55XV.js → chunk-EH4BQ7LT.js} +2 -2
  121. package/dist/chunk-EHHQJTAU.js +131 -0
  122. package/dist/chunk-EHHQJTAU.js.map +1 -0
  123. package/dist/{chunk-EBA5DA77.js → chunk-EOU6V4IN.js} +2 -2
  124. package/dist/{chunk-GD7BWGIB.js → chunk-EU6IRUCY.js} +6 -4
  125. package/dist/{chunk-GD7BWGIB.js.map → chunk-EU6IRUCY.js.map} +1 -1
  126. package/dist/{chunk-7KYJNHGM.js → chunk-EUCYTCFP.js} +2 -2
  127. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  128. package/dist/{chunk-CKUUP64O.js → chunk-F2772ATT.js} +2 -2
  129. package/dist/{chunk-46EST7JO.js → chunk-F2XNSIPP.js} +2 -2
  130. package/dist/{chunk-2KRNPFPK.js → chunk-FLI6DEIU.js} +2 -2
  131. package/dist/{chunk-OAIWPB2I.js → chunk-FT4UQYOV.js} +2 -2
  132. package/dist/{chunk-HYNEDMYJ.js → chunk-G2OYFTUD.js} +2 -2
  133. package/dist/{chunk-XTN54NML.js → chunk-G3T6YMBO.js} +4 -4
  134. package/dist/{chunk-CNG2XVZG.js → chunk-G3UUAQOD.js} +2 -2
  135. package/dist/{chunk-2ZQJLBV6.js → chunk-GCVDFX66.js} +4 -4
  136. package/dist/{chunk-ON4ILX3G.js → chunk-GFAM2LTC.js} +2 -2
  137. package/dist/{chunk-2LUSQV4U.js → chunk-GKJJNO7C.js} +2 -2
  138. package/dist/{chunk-T2YX56QI.js → chunk-GQJKVQJR.js} +2 -2
  139. package/dist/{chunk-5AOAQR37.js → chunk-GWVNGDJW.js} +3 -3
  140. package/dist/{chunk-YDH2FSDI.js → chunk-GZXXPCWJ.js} +3 -3
  141. package/dist/{chunk-5JCLELOP.js → chunk-H5IUN433.js} +2 -2
  142. package/dist/{chunk-IWHEJXR2.js → chunk-H6FREOYX.js} +8 -8
  143. package/dist/{chunk-B7CANWCA.js → chunk-HBAOOSHU.js} +2 -2
  144. package/dist/{chunk-Q4E24IRR.js → chunk-HDN7IVIO.js} +14 -11
  145. package/dist/chunk-HDN7IVIO.js.map +1 -0
  146. package/dist/{chunk-T3FMRLWQ.js → chunk-HFSPY26A.js} +2 -2
  147. package/dist/{chunk-B657ZGDH.js → chunk-HQSK2INQ.js} +2 -2
  148. package/dist/{chunk-RT6D3WN7.js → chunk-IJMDBYCO.js} +2 -2
  149. package/dist/{chunk-CS2JEHTB.js → chunk-IUCPLBDS.js} +9 -9
  150. package/dist/{chunk-XRBHXUTQ.js → chunk-IWD33CF4.js} +6 -6
  151. package/dist/{chunk-4IHBN6WU.js → chunk-JKMIGCK6.js} +2 -2
  152. package/dist/{chunk-YYO447A7.js → chunk-JNIVZNIB.js} +41 -253
  153. package/dist/chunk-JNIVZNIB.js.map +1 -0
  154. package/dist/{chunk-ROBHL3GL.js → chunk-JWX2Q6HS.js} +2 -2
  155. package/dist/{chunk-3I3U6FFT.js → chunk-K7BN34IA.js} +2 -2
  156. package/dist/{chunk-4O6WRBGE.js → chunk-KJXP6RUG.js} +5 -1
  157. package/dist/chunk-KJXP6RUG.js.map +1 -0
  158. package/dist/{chunk-4THZGKQ2.js → chunk-KLJVTZ3R.js} +3 -3
  159. package/dist/{chunk-4G4B3Z2B.js → chunk-KW4AJ7T3.js} +2 -2
  160. package/dist/{chunk-HT2C4EXO.js → chunk-L5VCT7LU.js} +8 -4
  161. package/dist/chunk-L5VCT7LU.js.map +1 -0
  162. package/dist/{chunk-ZI7LMSNI.js → chunk-LLHZZOIB.js} +2 -2
  163. package/dist/{chunk-LS2FHUML.js → chunk-LQ5SS4OP.js} +3 -3
  164. package/dist/{chunk-NSFOERZQ.js → chunk-LWFWZTWX.js} +3 -3
  165. package/dist/{chunk-BMWN7B3Y.js → chunk-LXATZLSC.js} +3 -3
  166. package/dist/{chunk-OYKQ6T4V.js → chunk-MATDGSJ7.js} +2 -2
  167. package/dist/{chunk-3NFN4Y4P.js → chunk-MGCKZWAE.js} +5 -5
  168. package/dist/{chunk-O4KYRDRT.js → chunk-MJIOGYKX.js} +2 -2
  169. package/dist/{chunk-6OMUHXHP.js → chunk-ML7ZJAKJ.js} +2 -2
  170. package/dist/{chunk-GKIXBH7Y.js → chunk-MO6N4QYY.js} +4 -4
  171. package/dist/{chunk-A2E4WNW4.js → chunk-MWWAQXZ6.js} +2 -2
  172. package/dist/{chunk-VYPFEVOM.js → chunk-NHUX6GXA.js} +6 -6
  173. package/dist/{chunk-AKREOU5F.js → chunk-NZCKG25S.js} +2 -2
  174. package/dist/{chunk-4NDWE44P.js → chunk-NZFFGO5O.js} +2 -2
  175. package/dist/{chunk-WWSRLS4M.js → chunk-O2YPCFJT.js} +17 -17
  176. package/dist/{chunk-ZSJGYC3C.js → chunk-OQJKY3Z5.js} +2 -2
  177. package/dist/{chunk-U7VPOXVM.js → chunk-OQR42XCN.js} +82 -78
  178. package/dist/chunk-OQR42XCN.js.map +1 -0
  179. package/dist/{chunk-OFEHITAZ.js → chunk-OXNTOHL6.js} +2 -2
  180. package/dist/{chunk-FQD2KPQH.js → chunk-P55FACBG.js} +2 -2
  181. package/dist/chunk-PGRZ3FYC.js +34 -0
  182. package/dist/chunk-PGRZ3FYC.js.map +1 -0
  183. package/dist/{chunk-JYZSRNR7.js → chunk-PIITB2YZ.js} +2 -2
  184. package/dist/{chunk-PBVNVKYN.js → chunk-PIN5OPBA.js} +2 -2
  185. package/dist/chunk-PPUNC7UX.js +73 -0
  186. package/dist/chunk-PPUNC7UX.js.map +1 -0
  187. package/dist/{chunk-EQWEIIKQ.js → chunk-PQM3B54K.js} +6 -1
  188. package/dist/chunk-PQM3B54K.js.map +1 -0
  189. package/dist/{chunk-4TTGRETU.js → chunk-PRU7OF3Y.js} +5 -5
  190. package/dist/{chunk-K2FSASGZ.js → chunk-PVHQSLNN.js} +7 -7
  191. package/dist/{chunk-SVDU4OHO.js → chunk-Q35L7TYB.js} +2 -2
  192. package/dist/{chunk-5VC7J76U.js → chunk-QPH52AZB.js} +2 -2
  193. package/dist/{chunk-6T42L5FI.js → chunk-QS3OLP5I.js} +2 -2
  194. package/dist/{chunk-P34FDDB5.js → chunk-QSEUUQUF.js} +2 -2
  195. package/dist/chunk-QUIRIG2P.js +31 -0
  196. package/dist/chunk-QUIRIG2P.js.map +1 -0
  197. package/dist/{chunk-PAAJWQH5.js → chunk-QUMKDRCF.js} +2 -2
  198. package/dist/{chunk-KZEMFD6E.js → chunk-R2H4ZFBJ.js} +3 -3
  199. package/dist/{chunk-X3VID2TT.js → chunk-RI2KCQHP.js} +7 -3
  200. package/dist/chunk-RI2KCQHP.js.map +1 -0
  201. package/dist/{chunk-JFVCDEIC.js → chunk-RP7PQWZM.js} +7 -7
  202. package/dist/{chunk-KC46VZR5.js → chunk-RTTPBBAN.js} +9 -9
  203. package/dist/{chunk-ZQ3WU6JO.js → chunk-RXFCU3CY.js} +2 -2
  204. package/dist/{chunk-CBP4HWCL.js → chunk-RYYVMZBR.js} +3 -3
  205. package/dist/{chunk-2NCBDGND.js → chunk-SA6GMZJY.js} +3 -3
  206. package/dist/{chunk-VFTK5WKI.js → chunk-STBX5X6B.js} +2 -2
  207. package/dist/{chunk-WVHRNAXL.js → chunk-SWWHIJUJ.js} +2 -2
  208. package/dist/{chunk-WADSXS4K.js → chunk-SX4QDWXK.js} +2 -2
  209. package/dist/{chunk-WETFW255.js → chunk-T7ASDYNK.js} +2 -2
  210. package/dist/{chunk-XZLWYZ7C.js → chunk-THEPGZBM.js} +2 -2
  211. package/dist/{chunk-YEM7K3KD.js → chunk-TMC7HBED.js} +6 -6
  212. package/dist/{chunk-RWRQ67OR.js → chunk-TPNCXSXP.js} +2 -2
  213. package/dist/{chunk-LZKOVXMX.js → chunk-TRMJ6BYC.js} +2 -2
  214. package/dist/{chunk-A6TVQ3QP.js → chunk-UGYUBENJ.js} +3 -3
  215. package/dist/{chunk-AAM66QCP.js → chunk-UZRSI6NX.js} +2 -2
  216. package/dist/{chunk-XHWJRUVP.js → chunk-V3TXIXXY.js} +3 -3
  217. package/dist/{chunk-2CXQZXWM.js → chunk-V4MB5ONM.js} +6 -6
  218. package/dist/{chunk-UOKPJFO3.js → chunk-VNZMZPAC.js} +3 -3
  219. package/dist/{chunk-FZB4TS2W.js → chunk-VPXIKBPX.js} +5 -5
  220. package/dist/{chunk-CYEK6Z3P.js → chunk-VW6VIJOS.js} +2 -2
  221. package/dist/{chunk-QUA7RLK6.js → chunk-W3FVQBGF.js} +2 -2
  222. package/dist/{chunk-6OQ6N5RP.js → chunk-WGTR573G.js} +22 -22
  223. package/dist/{chunk-W3K3HITK.js → chunk-WLT6LTQP.js} +2 -2
  224. package/dist/{chunk-6Z2AZ4AJ.js → chunk-XKRXN63M.js} +2 -2
  225. package/dist/{chunk-3J5JKBYD.js → chunk-XLBFX63V.js} +80 -77
  226. package/dist/chunk-XLBFX63V.js.map +1 -0
  227. package/dist/{chunk-FZVROZKC.js → chunk-XVZA6VXC.js} +4 -4
  228. package/dist/{chunk-DA2INEB5.js → chunk-XYGQSDTH.js} +4 -4
  229. package/dist/chunk-YET735EZ.js +99 -0
  230. package/dist/chunk-YET735EZ.js.map +1 -0
  231. package/dist/{chunk-RBJQYMMT.js → chunk-YRULQW5J.js} +4 -4
  232. package/dist/{chunk-QUNDYIYZ.js → chunk-YYEOR4XN.js} +3 -3
  233. package/dist/{chunk-6WHJ2EAB.js → chunk-Z64TS5V4.js} +2 -2
  234. package/dist/{chunk-NHLLKEKK.js → chunk-ZAJLJ35W.js} +2 -2
  235. package/dist/{chunk-M7V65M6H.js → chunk-ZKHSAMTE.js} +2 -2
  236. package/dist/cli.d.ts.map +1 -1
  237. package/dist/cli.js +154 -150
  238. package/dist/coding/export-okf-codegraph.js +32 -28
  239. package/dist/coding/export-okf-codegraph.js.map +1 -1
  240. package/dist/coding/pre-action-gate.js +4 -3
  241. package/dist/commitment-ledger.js +3 -2
  242. package/dist/compounding/engine.js +34 -30
  243. package/dist/config.js +43 -39
  244. package/dist/connectors/codex-materialize-runner.js +32 -28
  245. package/dist/connectors/index.js +32 -28
  246. package/dist/console/trace.d.ts +5 -14
  247. package/dist/console/trace.d.ts.map +1 -1
  248. package/dist/consolidation-provenance-check.d.ts.map +1 -1
  249. package/dist/consolidation-provenance-check.js +8 -6
  250. package/dist/consolidation-undo.js +5 -4
  251. package/dist/consolidation-undo.js.map +1 -1
  252. package/dist/contradiction/index.js +9 -7
  253. package/dist/converge-config.d.ts +2 -0
  254. package/dist/converge-config.d.ts.map +1 -1
  255. package/dist/converge-config.js +7 -3
  256. package/dist/convergence-refresh.js +34 -30
  257. package/dist/corpus-watermark.js +34 -30
  258. package/dist/correction/correction-planner.d.ts.map +1 -1
  259. package/dist/cue-anchors.js +4 -3
  260. package/dist/dashboard-runtime.js +2 -2
  261. package/dist/deep-recall-http-glue.js +14 -13
  262. package/dist/deep-recall.js +2 -2
  263. package/dist/{dreams-ledger-567VKVOU.js → dreams-ledger-UCHHRQ4R.js} +3 -2
  264. package/dist/embedding-fallback.js +5 -4
  265. package/dist/embedding-generation-lock.js +4 -3
  266. package/dist/entity-retrieval.js +33 -29
  267. package/dist/eval-trajectory-store.js +4 -3
  268. package/dist/eval-trajectory.js +4 -3
  269. package/dist/evals.js +3 -2
  270. package/dist/explicit-capture.js +11 -8
  271. package/dist/external-wiki-access.js +97 -93
  272. package/dist/extraction-quote-grounding.d.ts +67 -0
  273. package/dist/extraction-quote-grounding.d.ts.map +1 -0
  274. package/dist/extraction-quote-grounding.js +27 -0
  275. package/dist/extraction-quote-grounding.js.map +1 -0
  276. package/dist/extraction-source-grounding-helpers.d.ts +8 -0
  277. package/dist/extraction-source-grounding-helpers.d.ts.map +1 -1
  278. package/dist/extraction-source-grounding-helpers.js +11 -1
  279. package/dist/extraction-source-grounding-rules.d.ts +3 -1
  280. package/dist/extraction-source-grounding-rules.d.ts.map +1 -1
  281. package/dist/extraction-source-grounding-rules.js +3 -2
  282. package/dist/extraction-source-grounding.d.ts +1 -1
  283. package/dist/extraction-source-grounding.d.ts.map +1 -1
  284. package/dist/extraction-source-grounding.js +4 -3
  285. package/dist/extraction-span-materialize.js +2 -2
  286. package/dist/extraction.js +44 -39
  287. package/dist/{first-start-migration-HYAMKJ6V.js → first-start-migration-QVD22WWS.js} +9 -8
  288. package/dist/{first-start-migration-HYAMKJ6V.js.map → first-start-migration-QVD22WWS.js.map} +1 -1
  289. package/dist/{forget-OHAJ6PSU.js → forget-GXBWFKRC.js} +5 -4
  290. package/dist/{forget-OHAJ6PSU.js.map → forget-GXBWFKRC.js.map} +1 -1
  291. package/dist/{graph-edge-decay-CZ3SYLM4.js → graph-edge-decay-BYPZVJT4.js} +10 -9
  292. package/dist/graph-edge-decay-BYPZVJT4.js.map +1 -0
  293. package/dist/graph-jsonl.js +8 -7
  294. package/dist/graph-snapshot.js +8 -7
  295. package/dist/graph-write-lock.js +4 -3
  296. package/dist/graph.js +9 -8
  297. package/dist/harmonic-construction.js +5 -4
  298. package/dist/harmonic-retrieval.js +36 -32
  299. package/dist/harmonic-source-lookup.js +3 -2
  300. package/dist/http-retry.js +2 -1
  301. package/dist/http-retry.js.map +1 -1
  302. package/dist/index.d.ts +1 -1
  303. package/dist/index.d.ts.map +1 -1
  304. package/dist/index.js +244 -237
  305. package/dist/json-store.d.ts.map +1 -1
  306. package/dist/json-store.js +2 -1
  307. package/dist/lcm/engine.js +4 -4
  308. package/dist/lcm/index.js +12 -12
  309. package/dist/location/index.js +35 -31
  310. package/dist/maintenance/dreams-ledger.d.ts.map +1 -1
  311. package/dist/maintenance/memory-governance.d.ts.map +1 -1
  312. package/dist/maintenance/memory-governance.js +32 -28
  313. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +32 -28
  314. package/dist/maintenance/rebuild-memory-projection-runner.js +34 -30
  315. package/dist/maintenance/rebuild-memory-projection.js +33 -29
  316. package/dist/memory-browse-operations.js +97 -93
  317. package/dist/memory-browse.js +7 -7
  318. package/dist/memory-subject.js +5 -4
  319. package/dist/namespaces/migrate.js +33 -29
  320. package/dist/namespaces/search.js +11 -10
  321. package/dist/namespaces/storage.d.ts.map +1 -1
  322. package/dist/namespaces/storage.js +32 -28
  323. package/dist/objective-state-writers.js +4 -3
  324. package/dist/objective-state.js +3 -2
  325. package/dist/offline-sync-changeset-generations.js +7 -6
  326. package/dist/offline-sync-embedding-generation.js +6 -5
  327. package/dist/offline-sync-impression-drain.js +4 -4
  328. package/dist/offline-sync-snapshot-stream.js +10 -9
  329. package/dist/offline-sync.d.ts.map +1 -1
  330. package/dist/offline-sync.js +11 -10
  331. package/dist/operator-doctor-corpus.js +35 -31
  332. package/dist/operator-toolkit.js +58 -54
  333. package/dist/orchestration/maintenance.js +44 -40
  334. package/dist/orchestrator.js +205 -200
  335. package/dist/page-versioning.js +5 -4
  336. package/dist/profiling.d.ts.map +1 -1
  337. package/dist/profiling.js +2 -1
  338. package/dist/qmd-daemon-session.js +2 -2
  339. package/dist/qmd.js +4 -4
  340. package/dist/recall-explain-renderer.js +3 -3
  341. package/dist/recall-navigate-access.js +2 -2
  342. package/dist/recall-navigate-disclosure.js +2 -2
  343. package/dist/recall-navigate.js +2 -2
  344. package/dist/recall-navigation-operations.js +97 -93
  345. package/dist/recall-navigation.js +96 -92
  346. package/dist/recall-state-view-admission.js +7 -7
  347. package/dist/recall-state.js +4 -3
  348. package/dist/recall-why-service.js +7 -7
  349. package/dist/recall-xray-cli.js +4 -4
  350. package/dist/recall-xray-renderer.js +3 -3
  351. package/dist/recall-xray.js +2 -2
  352. package/dist/reconcile/cursor.js +4 -2
  353. package/dist/reconcile/cursor.js.map +1 -1
  354. package/dist/reconcile/manifest.js +9 -6
  355. package/dist/reconcile/plan.js +4 -2
  356. package/dist/{resolution-EKJHREVJ.js → resolution-ZU5BIAJA.js} +10 -8
  357. package/dist/resolution-ZU5BIAJA.js.map +1 -0
  358. package/dist/resume-bundles.js +48 -44
  359. package/dist/retrieval-agents.d.ts +1 -1
  360. package/dist/retrieval-agents.d.ts.map +1 -1
  361. package/dist/retrieval-agents.js +7 -1
  362. package/dist/salvage-envelope.js +7 -6
  363. package/dist/search/document-scanner.d.ts.map +1 -1
  364. package/dist/search/document-scanner.js +2 -1
  365. package/dist/search/factory.js +10 -9
  366. package/dist/search/index.js +16 -15
  367. package/dist/search/lancedb-backend.js +3 -2
  368. package/dist/search/meilisearch-backend.js +3 -2
  369. package/dist/search/orama-backend.js +3 -2
  370. package/dist/semantic-consolidation.js +37 -33
  371. package/dist/semantic-rule-promotion.js +32 -28
  372. package/dist/semantic-rule-verifier.js +32 -28
  373. package/dist/source-agent-qualifier.js +40 -35
  374. package/dist/standup/build.js +32 -28
  375. package/dist/storage/content-hash-index.d.ts +10 -0
  376. package/dist/storage/content-hash-index.d.ts.map +1 -1
  377. package/dist/storage/entity-canonical-id-migration.d.ts.map +1 -1
  378. package/dist/storage/entity-store.d.ts +32 -1
  379. package/dist/storage/entity-store.d.ts.map +1 -1
  380. package/dist/storage/memory-read-store.d.ts.map +1 -1
  381. package/dist/storage/supersession-audit.d.ts.map +1 -1
  382. package/dist/storage/tombstone-blocked-capture-index.d.ts +3 -0
  383. package/dist/storage/tombstone-blocked-capture-index.d.ts.map +1 -1
  384. package/dist/storage/tombstone-blocked-capture-mutation.d.ts +23 -3
  385. package/dist/storage/tombstone-blocked-capture-mutation.d.ts.map +1 -1
  386. package/dist/storage.d.ts +6 -0
  387. package/dist/storage.d.ts.map +1 -1
  388. package/dist/storage.js +33 -29
  389. package/dist/subject-config.js +6 -5
  390. package/dist/summarizer.js +4 -4
  391. package/dist/summary-snapshot.js +4 -3
  392. package/dist/support-passport/index.js +99 -95
  393. package/dist/{tier-stats-RQM76XYY.js → tier-stats-C3IAMS4X.js} +6 -5
  394. package/dist/{tier-stats-RQM76XYY.js.map → tier-stats-C3IAMS4X.js.map} +1 -1
  395. package/dist/{trace-LXXCMZJA.js → trace-QBQVS5BC.js} +5 -21
  396. package/dist/trace-QBQVS5BC.js.map +1 -0
  397. package/dist/transcript.d.ts.map +1 -1
  398. package/dist/transcript.js +2 -1
  399. package/dist/transfer/autodetect.js +1 -1
  400. package/dist/transfer/backup.js +1 -1
  401. package/dist/transfer/capsule-export.js +3 -3
  402. package/dist/transfer/capsule-import.js +7 -6
  403. package/dist/transfer/export-okf.js +32 -28
  404. package/dist/trust-zones.js +3 -2
  405. package/dist/types.d.ts +9 -0
  406. package/dist/types.d.ts.map +1 -1
  407. package/dist/types.js +1 -1
  408. package/dist/utility-learner.js +4 -3
  409. package/dist/utility-runtime.js +5 -4
  410. package/dist/utility-telemetry.js +3 -2
  411. package/dist/utils/macos-replication-junk.d.ts +32 -0
  412. package/dist/utils/macos-replication-junk.d.ts.map +1 -0
  413. package/dist/utils/malformed-entity-record.d.ts +24 -0
  414. package/dist/utils/malformed-entity-record.d.ts.map +1 -0
  415. package/dist/utils/serialize-mutations.js +3 -2
  416. package/dist/utils/sleep.d.ts +6 -0
  417. package/dist/utils/sleep.d.ts.map +1 -1
  418. package/dist/verified-recall.js +32 -28
  419. package/dist/who-knows-cli.js +33 -29
  420. package/dist/who-knows.js +32 -28
  421. package/dist/work-product-ledger.js +3 -2
  422. package/dist/write-envelope.js +6 -5
  423. package/package.json +22 -2
  424. package/src/calibration.ts +3 -2
  425. package/src/capture-write-lock-backoff.test.ts +534 -0
  426. package/src/capture-write-lock-backoff.ts +140 -0
  427. package/src/capture-write-lock.ts +8 -0
  428. package/src/cli.ts +2 -2
  429. package/src/console/trace.ts +5 -36
  430. package/src/consolidation-provenance-check.ts +2 -0
  431. package/src/converge-config.ts +80 -1
  432. package/src/correction/correction-planner.ts +3 -2
  433. package/src/extraction-quote-grounding.test.ts +546 -0
  434. package/src/extraction-quote-grounding.ts +232 -0
  435. package/src/extraction-source-grounding-helpers.ts +35 -0
  436. package/src/extraction-source-grounding-rules.ts +90 -65
  437. package/src/extraction-source-grounding.ts +11 -2
  438. package/src/index.ts +1 -1
  439. package/src/json-store.ts +3 -0
  440. package/src/macos-replication-junk-scanners.test.ts +275 -0
  441. package/src/maintenance/dreams-ledger.ts +2 -0
  442. package/src/maintenance/memory-governance.ts +2 -0
  443. package/src/namespaces/storage.ts +2 -0
  444. package/src/offline-sync-macos-junk.test.ts +169 -0
  445. package/src/offline-sync.ts +7 -0
  446. package/src/profiling.ts +2 -1
  447. package/src/providers/codex-subscription.test.ts +15 -3
  448. package/src/retrieval-agents.ts +29 -12
  449. package/src/search/document-scanner.ts +4 -0
  450. package/src/storage/content-hash-index.ts +10 -0
  451. package/src/storage/entity-canonical-id-migration.ts +56 -13
  452. package/src/storage/entity-store.ts +173 -15
  453. package/src/storage/memory-read-store.ts +30 -5
  454. package/src/storage/supersession-audit.ts +2 -0
  455. package/src/storage/tombstone-blocked-capture-index.ts +8 -1
  456. package/src/storage/tombstone-blocked-capture-mutation.ts +133 -43
  457. package/src/storage.ts +16 -2
  458. package/src/transcript.ts +11 -10
  459. package/src/types.ts +9 -0
  460. package/src/utils/macos-replication-junk.test.ts +46 -0
  461. package/src/utils/macos-replication-junk.ts +65 -0
  462. package/src/utils/malformed-entity-record.ts +101 -0
  463. package/src/utils/sleep.ts +28 -0
  464. package/dist/chunk-375ARKRS.js.map +0 -1
  465. package/dist/chunk-3J5JKBYD.js.map +0 -1
  466. package/dist/chunk-4O6WRBGE.js.map +0 -1
  467. package/dist/chunk-6MINUTGJ.js +0 -64
  468. package/dist/chunk-6MINUTGJ.js.map +0 -1
  469. package/dist/chunk-7LEQREP2.js +0 -9
  470. package/dist/chunk-7LEQREP2.js.map +0 -1
  471. package/dist/chunk-B6O2YLUR.js.map +0 -1
  472. package/dist/chunk-BLVHDY2U.js.map +0 -1
  473. package/dist/chunk-EQWEIIKQ.js.map +0 -1
  474. package/dist/chunk-HT2C4EXO.js.map +0 -1
  475. package/dist/chunk-KI6UOSNR.js.map +0 -1
  476. package/dist/chunk-MZBWIJJN.js.map +0 -1
  477. package/dist/chunk-Q4E24IRR.js.map +0 -1
  478. package/dist/chunk-QJ622LTI.js.map +0 -1
  479. package/dist/chunk-QWWMS4AE.js.map +0 -1
  480. package/dist/chunk-U7VPOXVM.js.map +0 -1
  481. package/dist/chunk-X3VID2TT.js.map +0 -1
  482. package/dist/chunk-XERVJYH2.js.map +0 -1
  483. package/dist/chunk-Y3VDGK2O.js.map +0 -1
  484. package/dist/chunk-YRH3C2OJ.js.map +0 -1
  485. package/dist/chunk-YYO447A7.js.map +0 -1
  486. package/dist/trace-LXXCMZJA.js.map +0 -1
  487. /package/dist/{auto-sync-DGJOZYGT.js.map → auto-sync-7WWAKW6F.js.map} +0 -0
  488. /package/dist/{dreams-ledger-567VKVOU.js.map → capture-write-lock-backoff.js.map} +0 -0
  489. /package/dist/{graph-edge-decay-CZ3SYLM4.js.map → capture-write-lock.js.map} +0 -0
  490. /package/dist/{chunk-KZO43HPY.js.map → chunk-22RM2ZUJ.js.map} +0 -0
  491. /package/dist/{chunk-ZUMXY4KA.js.map → chunk-22W2XWGH.js.map} +0 -0
  492. /package/dist/{chunk-PCWXLAJY.js.map → chunk-2PTH4PRL.js.map} +0 -0
  493. /package/dist/{chunk-ZIZ2G47N.js.map → chunk-2PYHLSXK.js.map} +0 -0
  494. /package/dist/{chunk-7OAIOE5P.js.map → chunk-33G67YZF.js.map} +0 -0
  495. /package/dist/{chunk-AV2OQF2O.js.map → chunk-3F3HA3R2.js.map} +0 -0
  496. /package/dist/{chunk-RP5SJ3XR.js.map → chunk-3GNIJUUE.js.map} +0 -0
  497. /package/dist/{chunk-QZZPUREO.js.map → chunk-3GYSZHMT.js.map} +0 -0
  498. /package/dist/{chunk-SWIKABKI.js.map → chunk-3Q3XD3NO.js.map} +0 -0
  499. /package/dist/{chunk-AL6EHLB5.js.map → chunk-3X3PNU3T.js.map} +0 -0
  500. /package/dist/{chunk-BTJ6CAIA.js.map → chunk-4IYIGN53.js.map} +0 -0
  501. /package/dist/{chunk-BZTRPCCH.js.map → chunk-4PDTVVSW.js.map} +0 -0
  502. /package/dist/{chunk-HM7RHKS4.js.map → chunk-4RNBLLZR.js.map} +0 -0
  503. /package/dist/{chunk-JUWJYXI4.js.map → chunk-5ATSXCAG.js.map} +0 -0
  504. /package/dist/{chunk-EHRE7ZG3.js.map → chunk-5B5WYAHQ.js.map} +0 -0
  505. /package/dist/{chunk-WCGJK4NQ.js.map → chunk-5FNZ3G6X.js.map} +0 -0
  506. /package/dist/{chunk-Y6DZ33PA.js.map → chunk-5GX5457J.js.map} +0 -0
  507. /package/dist/{chunk-EMFBC7L3.js.map → chunk-5KGYTX5O.js.map} +0 -0
  508. /package/dist/{chunk-OFCHT2TN.js.map → chunk-5LRV557D.js.map} +0 -0
  509. /package/dist/{chunk-DXHVD4DS.js.map → chunk-5SMR542T.js.map} +0 -0
  510. /package/dist/{chunk-S7LWX2PQ.js.map → chunk-655FVTCD.js.map} +0 -0
  511. /package/dist/{chunk-DGRMWDQY.js.map → chunk-66BCOVW2.js.map} +0 -0
  512. /package/dist/{chunk-5MDM7UE4.js.map → chunk-6WGMZQGG.js.map} +0 -0
  513. /package/dist/{chunk-IPLYGWQF.js.map → chunk-7LCGFUMB.js.map} +0 -0
  514. /package/dist/{chunk-5ZJYHOJT.js.map → chunk-7VQ6AI7H.js.map} +0 -0
  515. /package/dist/{chunk-KYY4EACB.js.map → chunk-7Z3DLNSD.js.map} +0 -0
  516. /package/dist/{chunk-G7NYVKD6.js.map → chunk-B2NXOVZN.js.map} +0 -0
  517. /package/dist/{chunk-B43NMCGQ.js.map → chunk-BK2BVLZW.js.map} +0 -0
  518. /package/dist/{chunk-BOOFTFFE.js.map → chunk-C2RW36YR.js.map} +0 -0
  519. /package/dist/{chunk-5JMI26Q7.js.map → chunk-CBH2Z4UA.js.map} +0 -0
  520. /package/dist/{chunk-P2S6P7X6.js.map → chunk-CFZ4SXXH.js.map} +0 -0
  521. /package/dist/{chunk-6M56RFFJ.js.map → chunk-CJRENHVZ.js.map} +0 -0
  522. /package/dist/{chunk-EGDYVYU7.js.map → chunk-CLWBFR7Q.js.map} +0 -0
  523. /package/dist/{chunk-6VAHJ2F6.js.map → chunk-DMDWFQMR.js.map} +0 -0
  524. /package/dist/{chunk-UZSBCQEC.js.map → chunk-DPSOFK4D.js.map} +0 -0
  525. /package/dist/{chunk-IZT3BVDW.js.map → chunk-DQR2LD3V.js.map} +0 -0
  526. /package/dist/{chunk-K4QY55XV.js.map → chunk-EH4BQ7LT.js.map} +0 -0
  527. /package/dist/{chunk-EBA5DA77.js.map → chunk-EOU6V4IN.js.map} +0 -0
  528. /package/dist/{chunk-7KYJNHGM.js.map → chunk-EUCYTCFP.js.map} +0 -0
  529. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  530. /package/dist/{chunk-CKUUP64O.js.map → chunk-F2772ATT.js.map} +0 -0
  531. /package/dist/{chunk-46EST7JO.js.map → chunk-F2XNSIPP.js.map} +0 -0
  532. /package/dist/{chunk-2KRNPFPK.js.map → chunk-FLI6DEIU.js.map} +0 -0
  533. /package/dist/{chunk-OAIWPB2I.js.map → chunk-FT4UQYOV.js.map} +0 -0
  534. /package/dist/{chunk-HYNEDMYJ.js.map → chunk-G2OYFTUD.js.map} +0 -0
  535. /package/dist/{chunk-XTN54NML.js.map → chunk-G3T6YMBO.js.map} +0 -0
  536. /package/dist/{chunk-CNG2XVZG.js.map → chunk-G3UUAQOD.js.map} +0 -0
  537. /package/dist/{chunk-2ZQJLBV6.js.map → chunk-GCVDFX66.js.map} +0 -0
  538. /package/dist/{chunk-ON4ILX3G.js.map → chunk-GFAM2LTC.js.map} +0 -0
  539. /package/dist/{chunk-2LUSQV4U.js.map → chunk-GKJJNO7C.js.map} +0 -0
  540. /package/dist/{chunk-T2YX56QI.js.map → chunk-GQJKVQJR.js.map} +0 -0
  541. /package/dist/{chunk-5AOAQR37.js.map → chunk-GWVNGDJW.js.map} +0 -0
  542. /package/dist/{chunk-YDH2FSDI.js.map → chunk-GZXXPCWJ.js.map} +0 -0
  543. /package/dist/{chunk-5JCLELOP.js.map → chunk-H5IUN433.js.map} +0 -0
  544. /package/dist/{chunk-IWHEJXR2.js.map → chunk-H6FREOYX.js.map} +0 -0
  545. /package/dist/{chunk-B7CANWCA.js.map → chunk-HBAOOSHU.js.map} +0 -0
  546. /package/dist/{chunk-T3FMRLWQ.js.map → chunk-HFSPY26A.js.map} +0 -0
  547. /package/dist/{chunk-B657ZGDH.js.map → chunk-HQSK2INQ.js.map} +0 -0
  548. /package/dist/{chunk-RT6D3WN7.js.map → chunk-IJMDBYCO.js.map} +0 -0
  549. /package/dist/{chunk-CS2JEHTB.js.map → chunk-IUCPLBDS.js.map} +0 -0
  550. /package/dist/{chunk-XRBHXUTQ.js.map → chunk-IWD33CF4.js.map} +0 -0
  551. /package/dist/{chunk-4IHBN6WU.js.map → chunk-JKMIGCK6.js.map} +0 -0
  552. /package/dist/{chunk-ROBHL3GL.js.map → chunk-JWX2Q6HS.js.map} +0 -0
  553. /package/dist/{chunk-3I3U6FFT.js.map → chunk-K7BN34IA.js.map} +0 -0
  554. /package/dist/{chunk-4THZGKQ2.js.map → chunk-KLJVTZ3R.js.map} +0 -0
  555. /package/dist/{chunk-4G4B3Z2B.js.map → chunk-KW4AJ7T3.js.map} +0 -0
  556. /package/dist/{chunk-ZI7LMSNI.js.map → chunk-LLHZZOIB.js.map} +0 -0
  557. /package/dist/{chunk-LS2FHUML.js.map → chunk-LQ5SS4OP.js.map} +0 -0
  558. /package/dist/{chunk-NSFOERZQ.js.map → chunk-LWFWZTWX.js.map} +0 -0
  559. /package/dist/{chunk-BMWN7B3Y.js.map → chunk-LXATZLSC.js.map} +0 -0
  560. /package/dist/{chunk-OYKQ6T4V.js.map → chunk-MATDGSJ7.js.map} +0 -0
  561. /package/dist/{chunk-3NFN4Y4P.js.map → chunk-MGCKZWAE.js.map} +0 -0
  562. /package/dist/{chunk-O4KYRDRT.js.map → chunk-MJIOGYKX.js.map} +0 -0
  563. /package/dist/{chunk-6OMUHXHP.js.map → chunk-ML7ZJAKJ.js.map} +0 -0
  564. /package/dist/{chunk-GKIXBH7Y.js.map → chunk-MO6N4QYY.js.map} +0 -0
  565. /package/dist/{chunk-A2E4WNW4.js.map → chunk-MWWAQXZ6.js.map} +0 -0
  566. /package/dist/{chunk-VYPFEVOM.js.map → chunk-NHUX6GXA.js.map} +0 -0
  567. /package/dist/{chunk-AKREOU5F.js.map → chunk-NZCKG25S.js.map} +0 -0
  568. /package/dist/{chunk-4NDWE44P.js.map → chunk-NZFFGO5O.js.map} +0 -0
  569. /package/dist/{chunk-WWSRLS4M.js.map → chunk-O2YPCFJT.js.map} +0 -0
  570. /package/dist/{chunk-ZSJGYC3C.js.map → chunk-OQJKY3Z5.js.map} +0 -0
  571. /package/dist/{chunk-OFEHITAZ.js.map → chunk-OXNTOHL6.js.map} +0 -0
  572. /package/dist/{chunk-FQD2KPQH.js.map → chunk-P55FACBG.js.map} +0 -0
  573. /package/dist/{chunk-JYZSRNR7.js.map → chunk-PIITB2YZ.js.map} +0 -0
  574. /package/dist/{chunk-PBVNVKYN.js.map → chunk-PIN5OPBA.js.map} +0 -0
  575. /package/dist/{chunk-4TTGRETU.js.map → chunk-PRU7OF3Y.js.map} +0 -0
  576. /package/dist/{chunk-K2FSASGZ.js.map → chunk-PVHQSLNN.js.map} +0 -0
  577. /package/dist/{chunk-SVDU4OHO.js.map → chunk-Q35L7TYB.js.map} +0 -0
  578. /package/dist/{chunk-5VC7J76U.js.map → chunk-QPH52AZB.js.map} +0 -0
  579. /package/dist/{chunk-6T42L5FI.js.map → chunk-QS3OLP5I.js.map} +0 -0
  580. /package/dist/{chunk-P34FDDB5.js.map → chunk-QSEUUQUF.js.map} +0 -0
  581. /package/dist/{chunk-PAAJWQH5.js.map → chunk-QUMKDRCF.js.map} +0 -0
  582. /package/dist/{chunk-KZEMFD6E.js.map → chunk-R2H4ZFBJ.js.map} +0 -0
  583. /package/dist/{chunk-JFVCDEIC.js.map → chunk-RP7PQWZM.js.map} +0 -0
  584. /package/dist/{chunk-KC46VZR5.js.map → chunk-RTTPBBAN.js.map} +0 -0
  585. /package/dist/{chunk-ZQ3WU6JO.js.map → chunk-RXFCU3CY.js.map} +0 -0
  586. /package/dist/{chunk-CBP4HWCL.js.map → chunk-RYYVMZBR.js.map} +0 -0
  587. /package/dist/{chunk-2NCBDGND.js.map → chunk-SA6GMZJY.js.map} +0 -0
  588. /package/dist/{chunk-VFTK5WKI.js.map → chunk-STBX5X6B.js.map} +0 -0
  589. /package/dist/{chunk-WVHRNAXL.js.map → chunk-SWWHIJUJ.js.map} +0 -0
  590. /package/dist/{chunk-WADSXS4K.js.map → chunk-SX4QDWXK.js.map} +0 -0
  591. /package/dist/{chunk-WETFW255.js.map → chunk-T7ASDYNK.js.map} +0 -0
  592. /package/dist/{chunk-XZLWYZ7C.js.map → chunk-THEPGZBM.js.map} +0 -0
  593. /package/dist/{chunk-YEM7K3KD.js.map → chunk-TMC7HBED.js.map} +0 -0
  594. /package/dist/{chunk-RWRQ67OR.js.map → chunk-TPNCXSXP.js.map} +0 -0
  595. /package/dist/{chunk-LZKOVXMX.js.map → chunk-TRMJ6BYC.js.map} +0 -0
  596. /package/dist/{chunk-A6TVQ3QP.js.map → chunk-UGYUBENJ.js.map} +0 -0
  597. /package/dist/{chunk-AAM66QCP.js.map → chunk-UZRSI6NX.js.map} +0 -0
  598. /package/dist/{chunk-XHWJRUVP.js.map → chunk-V3TXIXXY.js.map} +0 -0
  599. /package/dist/{chunk-2CXQZXWM.js.map → chunk-V4MB5ONM.js.map} +0 -0
  600. /package/dist/{chunk-UOKPJFO3.js.map → chunk-VNZMZPAC.js.map} +0 -0
  601. /package/dist/{chunk-FZB4TS2W.js.map → chunk-VPXIKBPX.js.map} +0 -0
  602. /package/dist/{chunk-CYEK6Z3P.js.map → chunk-VW6VIJOS.js.map} +0 -0
  603. /package/dist/{chunk-QUA7RLK6.js.map → chunk-W3FVQBGF.js.map} +0 -0
  604. /package/dist/{chunk-6OQ6N5RP.js.map → chunk-WGTR573G.js.map} +0 -0
  605. /package/dist/{chunk-W3K3HITK.js.map → chunk-WLT6LTQP.js.map} +0 -0
  606. /package/dist/{chunk-6Z2AZ4AJ.js.map → chunk-XKRXN63M.js.map} +0 -0
  607. /package/dist/{chunk-FZVROZKC.js.map → chunk-XVZA6VXC.js.map} +0 -0
  608. /package/dist/{chunk-DA2INEB5.js.map → chunk-XYGQSDTH.js.map} +0 -0
  609. /package/dist/{chunk-RBJQYMMT.js.map → chunk-YRULQW5J.js.map} +0 -0
  610. /package/dist/{chunk-QUNDYIYZ.js.map → chunk-YYEOR4XN.js.map} +0 -0
  611. /package/dist/{chunk-6WHJ2EAB.js.map → chunk-Z64TS5V4.js.map} +0 -0
  612. /package/dist/{chunk-NHLLKEKK.js.map → chunk-ZAJLJ35W.js.map} +0 -0
  613. /package/dist/{chunk-M7V65M6H.js.map → chunk-ZKHSAMTE.js.map} +0 -0
  614. /package/dist/{resolution-EKJHREVJ.js.map → dreams-ledger-UCHHRQ4R.js.map} +0 -0
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Quote-anchored source grounding.
3
+ *
4
+ * An extracted fact carries the exact words that support it in `quote`. A quote
5
+ * that is a verbatim substring of the source (whitespace-normalized) is real
6
+ * evidence: the claim only has to be supported by the text around that span,
7
+ * not by word overlap against the whole conversation. Items without such a
8
+ * quote never get an anchor here and stay on the whole-source rules.
9
+ */
10
+
11
+ import type { ExtractionResult } from "./types.js";
12
+ import {
13
+ GROUNDING_MIN_SHARED_TOKENS,
14
+ areGroundingTokensCompatible,
15
+ entityNameStart,
16
+ hasDenialReporting,
17
+ hasNonAssertiveReporting,
18
+ isGroundedEntityName,
19
+ normalizedEntityIdentifierTokens,
20
+ sourceSentences,
21
+ tokenize,
22
+ } from "./extraction-source-grounding-helpers.js";
23
+
24
+ /** Shortest normalized quote that counts as evidence; "the" or "I" prove nothing. */
25
+ export const QUOTE_ANCHOR_MIN_CHARS = 12;
26
+ /** Characters of context kept on each side of the quote inside its turn. */
27
+ export const QUOTE_ANCHOR_CONTEXT_CHARS = 400;
28
+ /** Share of a claim's content words that must occur in the quote's window. */
29
+ export const QUOTE_ANCHOR_MIN_WINDOW_COVERAGE = 0.35;
30
+ /** Share of a claim's content words that must occur anywhere in the source; the rest is invented. */
31
+ export const QUOTE_ANCHOR_MIN_SOURCE_COVERAGE = 0.75;
32
+ const QUOTE_ANCHOR_MAX_OCCURRENCES = 8;
33
+ const TURN_SEPARATOR = "\n\n";
34
+ const NEGATOR_PATTERN = /\b(?:not|no|never|cannot|without|neither|nor)\b|n't\b/iu;
35
+ const EXCLUSION_PATTERN =
36
+ /\b(?:exclu\w*|avoid\w*|omit\w*|skip\w*|ignor\w*|forbid\w*|prohibit\w*|disallow\w*|prevent\w*|reject\w*|refus\w*|insufficient|instead|rather|unless|except)\b/iu;
37
+
38
+ /** A verbatim quote and the text around it inside its turn. */
39
+ export interface QuoteAnchor {
40
+ /** Whitespace-normalized quote, exactly as it appears in the source. */
41
+ quote: string;
42
+ /** `quote` with its turn-local context; `;` inside the quote is rewritten to `,`. */
43
+ window: string;
44
+ }
45
+
46
+ export type TokenPool = (token: string) => boolean;
47
+
48
+ type Entity = ExtractionResult["entities"][number];
49
+ type Relationship = NonNullable<ExtractionResult["relationships"]>[number];
50
+
51
+ function normalizeWhitespaceWithMap(source: string): { text: string; originalIndex: number[] } {
52
+ const chars: string[] = [];
53
+ const originalIndex: number[] = [];
54
+ let inSpace = false;
55
+ for (let index = 0; index < source.length; index += 1) {
56
+ const char = source[index]!;
57
+ if (/\s/u.test(char)) {
58
+ if (inSpace) continue;
59
+ inSpace = true;
60
+ chars.push(" ");
61
+ } else {
62
+ inSpace = false;
63
+ chars.push(char);
64
+ }
65
+ originalIndex.push(index);
66
+ }
67
+ return { text: chars.join(""), originalIndex };
68
+ }
69
+
70
+ function findQuoteAnchors(quote: string, source: string): QuoteAnchor[] {
71
+ const needle = quote.replace(/\s+/gu, " ").trim();
72
+ if (needle.length < QUOTE_ANCHOR_MIN_CHARS) return [];
73
+ const normalized = normalizeWhitespaceWithMap(source);
74
+ const anchors: QuoteAnchor[] = [];
75
+ let from = 0;
76
+ while (anchors.length < QUOTE_ANCHOR_MAX_OCCURRENCES) {
77
+ const at = normalized.text.indexOf(needle, from);
78
+ if (at < 0) break;
79
+ from = at + 1;
80
+ const start = normalized.originalIndex[at]!;
81
+ const end = normalized.originalIndex[at + needle.length - 1]! + 1;
82
+ if (source.slice(start, end).includes(TURN_SEPARATOR)) continue;
83
+
84
+ let before = source.slice(Math.max(0, start - QUOTE_ANCHOR_CONTEXT_CHARS), start);
85
+ const turnStart = before.lastIndexOf(TURN_SEPARATOR);
86
+ if (turnStart >= 0) before = before.slice(turnStart + TURN_SEPARATOR.length);
87
+ else if (start > QUOTE_ANCHOR_CONTEXT_CHARS) before = before.replace(/^\S+/u, "");
88
+
89
+ let after = source.slice(end, end + QUOTE_ANCHOR_CONTEXT_CHARS);
90
+ const turnEnd = after.indexOf(TURN_SEPARATOR);
91
+ if (turnEnd >= 0) after = after.slice(0, turnEnd);
92
+ else if (source.length - end > QUOTE_ANCHOR_CONTEXT_CHARS) after = after.replace(/\S+$/u, "");
93
+
94
+ anchors.push({ quote: needle, window: `${before}${needle.replace(/;/gu, ",")}${after}` });
95
+ }
96
+ return anchors;
97
+ }
98
+
99
+ /**
100
+ * Returns one anchor per place `quote` occurs verbatim in `source`, or [] when
101
+ * the quote is absent, too short, or not an exact substring. A quote that
102
+ * spans a turn separator is not one turn's words and yields no anchor; windows
103
+ * never extend past their turn.
104
+ *
105
+ * The quote is one evidence unit: a `;` inside it is rewritten to `,` in the
106
+ * window so sentence splitting cannot cut it, or a claim that merges two of
107
+ * its clauses could never be grounded in a single sentence.
108
+ *
109
+ * `source` may have been rewritten before grounding (temporal anchoring,
110
+ * pronoun resolution) while the model quoted the original words. When the raw
111
+ * quote is not found, `transformQuote` applies the same rewrite to the quote.
112
+ */
113
+ export function quoteAnchors(
114
+ quote: string | undefined,
115
+ source: string,
116
+ transformQuote?: (quote: string) => string,
117
+ ): QuoteAnchor[] {
118
+ if (typeof quote !== "string") return [];
119
+ const exact = findQuoteAnchors(quote, source);
120
+ if (exact.length > 0 || transformQuote === undefined) return exact;
121
+ return findQuoteAnchors(transformQuote(quote), source);
122
+ }
123
+
124
+ export function tokenPool(tokens: ReadonlySet<string>): TokenPool {
125
+ const list = [...tokens];
126
+ return (token) => tokens.has(token) || list.some((poolToken) => areGroundingTokensCompatible(token, poolToken));
127
+ }
128
+
129
+ function hasNegation(text: string): boolean {
130
+ return NEGATOR_PATTERN.test(text.replace(/[\u2018\u2019]/gu, "'")) || hasDenialReporting(text);
131
+ }
132
+
133
+ /**
134
+ * True when the claim asserts what a quote clause denies or does not assert:
135
+ * "did not approve the budget" or "denied approving it" restated as "approved
136
+ * the budget", "suspects Bob stole funds" or "Is Alice the CEO?" restated as a
137
+ * plain statement. A claim that keeps a negator, exclusion word, or reporting
138
+ * marker ("do not X" reworded as "X is excluded") is not a misstatement.
139
+ */
140
+ function misstatesQuote(content: string, quote: string): boolean {
141
+ const keepsNegation = hasNegation(content) || EXCLUSION_PATTERN.test(content);
142
+ const keepsReporting = hasNonAssertiveReporting(content) || content.trim().endsWith("?");
143
+ const contentHas = tokenPool(tokenize(content));
144
+ return (quote.match(/[^;.!?\n]+[;.!?]*/gu) ?? []).some((clause) => {
145
+ const negated = hasNegation(clause) && !keepsNegation;
146
+ const unasserted = (clause.trim().endsWith("?") || hasNonAssertiveReporting(clause)) && !keepsReporting;
147
+ if (!negated && !unasserted) return false;
148
+ const clauseTokens = [...tokenize(clause)];
149
+ const shared = clauseTokens.filter(contentHas).length;
150
+ return shared >= GROUNDING_MIN_SHARED_TOKENS && shared / clauseTokens.length >= 0.5;
151
+ });
152
+ }
153
+
154
+ /**
155
+ * A claim is supported by a verbatim quote when it shares at least
156
+ * GROUNDING_MIN_SHARED_TOKENS content words with the quote, a good part of its
157
+ * words sit in the text around the quote, nearly all of them occur in the
158
+ * source at all, and it does not invert a negated clause of the quote. Reworded
159
+ * and lightly elaborated claims pass; claims that bring words the conversation
160
+ * never used, or that have nothing to do with the quote, do not.
161
+ */
162
+ export function isQuoteAnchoredClaim(content: string, anchor: QuoteAnchor, sourceHas: TokenPool): boolean {
163
+ const contentTokens = [...tokenize(content)];
164
+ if (contentTokens.length === 0) return false;
165
+ const quoteHas = tokenPool(tokenize(anchor.quote));
166
+ if (contentTokens.filter(quoteHas).length < GROUNDING_MIN_SHARED_TOKENS) return false;
167
+ const windowHas = tokenPool(tokenize(anchor.window));
168
+ if (contentTokens.filter(windowHas).length / contentTokens.length < QUOTE_ANCHOR_MIN_WINDOW_COVERAGE) {
169
+ return false;
170
+ }
171
+ return contentTokens.filter(sourceHas).length / contentTokens.length >= QUOTE_ANCHOR_MIN_SOURCE_COVERAGE
172
+ && !misstatesQuote(content, anchor.quote);
173
+ }
174
+
175
+ /** Keeps the entity facts (flat and sectioned) `isSupported` accepts; undefined when none remain. */
176
+ export function filterEntityFacts(entity: Entity, isSupported: (fact: string) => boolean): Entity | undefined {
177
+ const facts = entity.facts.filter(isSupported);
178
+ const structuredSections = entity.structuredSections?.flatMap((section) => {
179
+ const groundedFacts = section.facts.filter(isSupported);
180
+ return groundedFacts.length > 0 ? [{ ...section, facts: groundedFacts }] : [];
181
+ });
182
+ if (facts.length === 0 && (structuredSections === undefined || structuredSections.length === 0)) {
183
+ return undefined;
184
+ }
185
+ const { structuredSections: _structuredSections, ...entityWithoutSections } = entity;
186
+ return {
187
+ ...entityWithoutSections,
188
+ facts,
189
+ ...(structuredSections && structuredSections.length > 0 ? { structuredSections } : {}),
190
+ };
191
+ }
192
+
193
+ /**
194
+ * Entities carry no quote of their own; the anchors of facts that kept support
195
+ * them. Returns a fact predicate, or undefined when no anchor window names the entity.
196
+ */
197
+ export function quoteAnchoredEntitySupport(
198
+ entity: Entity,
199
+ anchors: readonly QuoteAnchor[],
200
+ sourceHas: TokenPool,
201
+ ): ((fact: string) => boolean) | undefined {
202
+ const nameAnchors = anchors.filter((anchor) => isGroundedEntityName(entity.name, anchor.window));
203
+ if (nameAnchors.length === 0) return undefined;
204
+ return (fact) => nameAnchors.some((anchor) => isQuoteAnchoredClaim(fact, anchor, sourceHas));
205
+ }
206
+
207
+ /**
208
+ * The label words and both names must sit in one anchor-window sentence, source
209
+ * before target, so an invented label or a reversed edge never passes.
210
+ */
211
+ export function isQuoteAnchoredRelationship(
212
+ relationship: Relationship,
213
+ anchors: readonly QuoteAnchor[],
214
+ sourceHas: TokenPool,
215
+ ): boolean {
216
+ const labelTokens = [...tokenize(relationship.label)];
217
+ if (labelTokens.length === 0) return false;
218
+ const relationText = [
219
+ normalizedEntityIdentifierTokens(relationship.source).join(" "),
220
+ relationship.label,
221
+ normalizedEntityIdentifierTokens(relationship.target).join(" "),
222
+ ].join(" ");
223
+ return anchors.some((anchor) => {
224
+ const windowHas = tokenPool(tokenize(anchor.window));
225
+ return labelTokens.every(windowHas)
226
+ && sourceSentences(anchor.window).some((sentence) => {
227
+ const sourceStart = entityNameStart(relationship.source, sentence);
228
+ return sourceStart >= 0 && entityNameStart(relationship.target, sentence) > sourceStart;
229
+ })
230
+ && isQuoteAnchoredClaim(relationText, anchor, sourceHas);
231
+ });
232
+ }
@@ -901,3 +901,38 @@ export function hasContradictoryPolarity(candidate: string, source: string): boo
901
901
  }
902
902
  return false;
903
903
  }
904
+
905
+ export function normalizedEntityIdentifierTokens(name: string): string[] {
906
+ const identifier = normalizeForExactMatch(name).replace(/[-_]+/gu, " ");
907
+ const tokens = groundingLexemes(identifier)
908
+ .filter(({ token }) => GROUNDING_STOPWORDS[token] !== true)
909
+ .map(({ token }) => stemToken(token, true));
910
+ return tokens.length > 1 && GROUNDING_ENTITY_TYPE_PREFIXES.has(tokens[0] ?? "")
911
+ ? tokens.slice(1)
912
+ : tokens;
913
+ }
914
+
915
+ /** Index of the entity name's tokens inside the sentence's token sequence, or -1. */
916
+ export function entityNameStart(name: string, sentence: string): number {
917
+ const nameTokens = normalizedEntityIdentifierTokens(name);
918
+ if (nameTokens.length === 0) return -1;
919
+ const sentenceTokens = groundingLexemes(sentence)
920
+ .filter(({ token }) => GROUNDING_STOPWORDS[token] !== true)
921
+ .map(({ token, preserveTerminalS }) => stemToken(token, preserveTerminalS));
922
+ return sentenceTokens.findIndex((_, start) =>
923
+ nameTokens.every((token, offset) => sentenceTokens[start + offset] === token));
924
+ }
925
+
926
+ export function isGroundedEntityName(name: string, source: string): boolean {
927
+ return sourceSentences(source).some((sentence) => entityNameStart(name, sentence) >= 0);
928
+ }
929
+
930
+ /** True when the text reports a claim without asserting it ("suspects", "alleged", "said"). */
931
+ export function hasNonAssertiveReporting(text: string): boolean {
932
+ return groundingLexemes(text).some(({ token }) => isNonAssertiveReportingVerb(token));
933
+ }
934
+
935
+ /** True when the text reports a denial ("denied", "refuses"). */
936
+ export function hasDenialReporting(text: string): boolean {
937
+ return groundingLexemes(text).some(({ token }) => isDenialReportingVerb(token));
938
+ }
@@ -1,9 +1,18 @@
1
1
  import type { ExtractionResult } from "./types.js";
2
2
  import { anchorTemporalExpressions } from "./delinearize.js";
3
+ import {
4
+ filterEntityFacts,
5
+ isQuoteAnchoredClaim,
6
+ isQuoteAnchoredRelationship,
7
+ quoteAnchoredEntitySupport,
8
+ quoteAnchors,
9
+ tokenPool,
10
+ type QuoteAnchor,
11
+ type TokenPool,
12
+ } from "./extraction-quote-grounding.js";
3
13
  import {
4
14
  GROUNDING_AUXILIARY_TOKENS,
5
15
  GROUNDING_COPULAR_FORMS,
6
- GROUNDING_ENTITY_TYPE_PREFIXES,
7
16
  GROUNDING_MIN_COVERAGE,
8
17
  GROUNDING_MIN_SHARED_TOKENS,
9
18
  GROUNDING_STOPWORDS,
@@ -14,8 +23,10 @@ import {
14
23
  groundingTokenSequence,
15
24
  hasContradictoryPolarity,
16
25
  hasExplicitRoleSubjectToken,
26
+ isGroundedEntityName,
17
27
  isInterrogativeSourceSentence,
18
28
  normalizeForExactMatch,
29
+ normalizedEntityIdentifierTokens,
19
30
  normalizedGroundingAlignmentTokenSequence,
20
31
  normalizedGroundingTokenSequence,
21
32
  sourceSentences,
@@ -30,6 +41,8 @@ export interface ExtractionSourceGroundingOptions {
30
41
  sourceGrounding: boolean;
31
42
  anchorTemporalExpressions: boolean;
32
43
  spanMode?: "off" | "shadow" | "on";
44
+ /** Rewrite applied to the source before this stage, so a verbatim quote can still be located in it. */
45
+ quoteTransform?: (quote: string) => string;
33
46
  }
34
47
 
35
48
  export function applyExtractionSourceGrounding(
@@ -62,6 +75,9 @@ export function applyExtractionSourceGrounding(
62
75
  anchoredRoleSources,
63
76
  options.anchorTemporalExpressions ? anchorSource : undefined,
64
77
  options.spanMode ?? "off",
78
+ options.anchorTemporalExpressions
79
+ ? (quote) => anchorSource(options.quoteTransform?.(quote) ?? quote)
80
+ : undefined,
65
81
  );
66
82
  }
67
83
 
@@ -352,25 +368,6 @@ function isSourceGrounded(
352
368
  return isSourceGroundedClause(candidate, sourceText, includeInterrogativeSource);
353
369
  }
354
370
 
355
- function normalizedEntityIdentifierTokens(name: string): string[] {
356
- const identifier = normalizeForExactMatch(name).replace(/[-_]+/gu, " ");
357
- const tokens = groundingLexemes(identifier)
358
- .filter(({ token }) => GROUNDING_STOPWORDS[token] !== true)
359
- .map(({ token }) => stemToken(token, true));
360
- return tokens.length > 1 && GROUNDING_ENTITY_TYPE_PREFIXES.has(tokens[0] ?? "")
361
- ? tokens.slice(1)
362
- : tokens;
363
- }
364
-
365
- function isGroundedEntityName(name: string, source: string): boolean {
366
- const nameTokens = normalizedEntityIdentifierTokens(name);
367
- return nameTokens.length > 0 && sourceSentences(source).some((sentence) => {
368
- const sentenceTokens = groundingLexemes(sentence)
369
- .filter(({ token }) => GROUNDING_STOPWORDS[token] !== true)
370
- .map(({ token, preserveTerminalS }) => stemToken(token, preserveTerminalS));
371
- return containsContiguousGroundingTokens(nameTokens, sentenceTokens);
372
- });
373
- }
374
371
  function buildEntitySupportSource(name: string, source: string): string {
375
372
  const nameTokens = normalizedEntityIdentifierTokens(name);
376
373
  if (nameTokens.length === 0) return "";
@@ -596,6 +593,22 @@ function isGroundedCandidate(
596
593
  );
597
594
  }
598
595
 
596
+ function groundWithinQuoteAnchors(
597
+ content: string,
598
+ anchors: readonly QuoteAnchor[],
599
+ sourceHas: TokenPool,
600
+ ): GroundingContext | undefined {
601
+ const anchor = anchors.find((candidate) => isQuoteAnchoredClaim(content, candidate, sourceHas));
602
+ if (anchor === undefined) return undefined;
603
+ return {
604
+ source: anchor.window,
605
+ assertionSource: undefined,
606
+ allowRoleNormalization: GROUNDING_ROLE_SUBJECT_TOKENS.has(
607
+ (groundingTokenSequence(content)[0] ?? "").replace(/^[\u0000\u0001]/u, ""),
608
+ ),
609
+ };
610
+ }
611
+
599
612
  function buildFactSupportSource(
600
613
  source: string,
601
614
  supportingSentences: ReadonlyArray<string>,
@@ -656,6 +669,8 @@ function filterGroundedFact(
656
669
  roleAssertionSources: ExtractionGroundingRoleSources | undefined,
657
670
  eventTimeNormalizer: ((eventTime: string) => string) | undefined,
658
671
  spanMode: "off" | "shadow" | "on" = "off",
672
+ anchors: readonly QuoteAnchor[],
673
+ sourceHas: TokenPool,
659
674
  ): ExtractionResult["facts"][number] | undefined {
660
675
  // Span-materialized content (issue #2333) is "frame: verbatim slice". The
661
676
  // frame is generated deixis, so full-content gating would drop a verbatim
@@ -677,6 +692,7 @@ function filterGroundedFact(
677
692
  );
678
693
  let gateContent = fact.content;
679
694
  let factContext = contentContext;
695
+ let quoteAnchored = false;
680
696
  if (
681
697
  !isGroundedCandidate(
682
698
  fact.content,
@@ -686,25 +702,35 @@ function filterGroundedFact(
686
702
  contentContext.allowRoleNormalization,
687
703
  )
688
704
  ) {
689
- if (embeddedQuote === undefined) return undefined;
690
- gateContent = embeddedQuote;
691
- factContext = selectGroundingContext(
692
- gateContent,
693
- resolveGroundingContext(gateContent, source, assertionSource, roleAssertionSources),
694
- );
695
- if (!isGroundedCandidate(
696
- gateContent,
697
- factContext.source,
698
- factContext.assertionSource,
699
- false,
700
- factContext.allowRoleNormalization,
701
- )) return undefined;
705
+ const quoteContext = spanMode === "on"
706
+ ? undefined
707
+ : groundWithinQuoteAnchors(fact.content, anchors, sourceHas);
708
+ if (quoteContext !== undefined) {
709
+ factContext = quoteContext;
710
+ quoteAnchored = true;
711
+ } else {
712
+ if (embeddedQuote === undefined) return undefined;
713
+ gateContent = embeddedQuote;
714
+ factContext = selectGroundingContext(
715
+ gateContent,
716
+ resolveGroundingContext(gateContent, source, assertionSource, roleAssertionSources),
717
+ );
718
+ if (!isGroundedCandidate(
719
+ gateContent,
720
+ factContext.source,
721
+ factContext.assertionSource,
722
+ false,
723
+ factContext.allowRoleNormalization,
724
+ )) return undefined;
725
+ }
702
726
  }
703
727
  const factEventTime = fact.eventTime;
704
728
  const groundedFactEventTime = factEventTime === undefined
705
729
  ? undefined
706
730
  : eventTimeNormalizer?.(factEventTime) ?? factEventTime;
707
- const factSupportingSentences = sourceSentences(factContext.assertionSource ?? factContext.source).filter(
731
+ // A quote-anchored claim is reworded from the quote and its turn, so no single
732
+ // sentence grounds it; the anchor window is the support for its sub-fields.
733
+ const factSupportingSentences = quoteAnchored ? [] : sourceSentences(factContext.assertionSource ?? factContext.source).filter(
708
734
  (sentence) =>
709
735
  isGroundedCandidate(
710
736
  gateContent,
@@ -730,10 +756,12 @@ function filterGroundedFact(
730
756
  ? factContext.assertionSource
731
757
  : undefined;
732
758
 
733
- const factSupportSource = buildFactSupportSource(
734
- factContext.assertionSource ?? factContext.source,
735
- factSupportingSentences,
736
- );
759
+ const factSupportSource = quoteAnchored
760
+ ? factContext.source
761
+ : buildFactSupportSource(
762
+ factContext.assertionSource ?? factContext.source,
763
+ factSupportingSentences,
764
+ );
737
765
  const groundedAttributes = fact.structuredAttributes
738
766
  ? Object.fromEntries(
739
767
  Object.entries(fact.structuredAttributes)
@@ -843,33 +871,17 @@ function filterGroundedEntity(
843
871
  entity: ExtractionResult["entities"][number],
844
872
  source: string,
845
873
  assertionSource: string | undefined,
874
+ anchorSupport?: (fact: string) => boolean,
846
875
  ): ExtractionResult["entities"][number] | undefined {
847
- if (!isGroundedEntityName(entity.name, source)) return undefined;
848
- const entitySource = buildEntitySupportSource(entity.name, source);
849
- const entityAssertionSource = assertionSource === undefined
876
+ const nameGrounded = isGroundedEntityName(entity.name, source);
877
+ if (!nameGrounded && anchorSupport === undefined) return undefined;
878
+ const entitySource = nameGrounded ? buildEntitySupportSource(entity.name, source) : "";
879
+ const entityAssertionSource = !nameGrounded || assertionSource === undefined
850
880
  ? undefined
851
881
  : buildEntitySupportSource(entity.name, assertionSource);
852
- const facts = entity.facts.filter((fact) =>
853
- isGroundedCandidate(fact, entitySource, entityAssertionSource),
854
- );
855
- const structuredSections = entity.structuredSections
856
- ?.flatMap((section) => {
857
- const groundedFacts = section.facts.filter((fact) =>
858
- isGroundedCandidate(fact, entitySource, entityAssertionSource),
859
- );
860
- return groundedFacts.length > 0
861
- ? [{ ...section, facts: groundedFacts }]
862
- : [];
863
- });
864
- if (facts.length === 0 && (structuredSections === undefined || structuredSections.length === 0)) {
865
- return undefined;
866
- }
867
- const { structuredSections: _structuredSections, ...entityWithoutSections } = entity;
868
- return {
869
- ...entityWithoutSections,
870
- facts,
871
- ...(structuredSections && structuredSections.length > 0 ? { structuredSections } : {}),
872
- };
882
+ return filterEntityFacts(entity, (fact) =>
883
+ (nameGrounded && isGroundedCandidate(fact, entitySource, entityAssertionSource))
884
+ || anchorSupport?.(fact) === true);
873
885
  }
874
886
 
875
887
  function normalizedEntitySourceText(name: string): string {
@@ -1104,6 +1116,7 @@ export function filterExtractionResultBySource(
1104
1116
  roleAssertionSources?: ExtractionGroundingRoleSources,
1105
1117
  eventTimeNormalizer?: (eventTime: string) => string,
1106
1118
  spanMode: "off" | "shadow" | "on" = "off",
1119
+ quoteTransform?: (quote: string) => string,
1107
1120
  ): ExtractionResult {
1108
1121
  if (source.trim().length === 0) {
1109
1122
  return {
@@ -1117,7 +1130,13 @@ export function filterExtractionResultBySource(
1117
1130
  };
1118
1131
  }
1119
1132
 
1133
+ const quoteSource = assertionSource ?? source;
1134
+ const keptAnchors: QuoteAnchor[] = [];
1135
+ const sourceHas = tokenPool(
1136
+ result.facts.some((fact) => typeof fact.quote === "string") ? tokenize(quoteSource) : new Set(),
1137
+ );
1120
1138
  const facts = result.facts.flatMap((fact) => {
1139
+ const anchors = quoteAnchors(fact.quote, quoteSource, quoteTransform);
1121
1140
  const grounded = filterGroundedFact(
1122
1141
  fact,
1123
1142
  source,
@@ -1125,14 +1144,19 @@ export function filterExtractionResultBySource(
1125
1144
  roleAssertionSources,
1126
1145
  eventTimeNormalizer,
1127
1146
  spanMode,
1147
+ anchors,
1148
+ sourceHas,
1128
1149
  );
1129
- return grounded === undefined ? [] : [grounded];
1150
+ if (grounded === undefined) return [];
1151
+ keptAnchors.push(...anchors);
1152
+ return [grounded];
1130
1153
  });
1131
1154
  const profileUpdates = result.profileUpdates.filter((update) =>
1132
1155
  isRoleGroundedCandidate(update, source, assertionSource, roleAssertionSources),
1133
1156
  );
1134
1157
  const entities = result.entities.flatMap((entity) => {
1135
- const grounded = filterGroundedEntity(entity, source, assertionSource);
1158
+ const anchorSupport = quoteAnchoredEntitySupport(entity, keptAnchors, sourceHas);
1159
+ const grounded = filterGroundedEntity(entity, source, assertionSource, anchorSupport);
1136
1160
  return grounded === undefined ? [] : [grounded];
1137
1161
  });
1138
1162
  const questions = result.questions.flatMap((question) => {
@@ -1140,7 +1164,8 @@ export function filterExtractionResultBySource(
1140
1164
  return grounded === undefined ? [] : [grounded];
1141
1165
  });
1142
1166
  const relationships = result.relationships?.filter((relationship) =>
1143
- isGroundedRelationship(relationship, source, assertionSource),
1167
+ isGroundedRelationship(relationship, source, assertionSource)
1168
+ || isQuoteAnchoredRelationship(relationship, keptAnchors, sourceHas),
1144
1169
  );
1145
1170
  const identityReflection = result.identityReflection
1146
1171
  && isRoleGroundedCandidate(
@@ -36,7 +36,7 @@ export function applyExtractionSourceGrounding(
36
36
  sourceForGrounding(assertionSourceText) ?? assertionSourceText,
37
37
  groundedRoleSources,
38
38
  messageTimestamp,
39
- options,
39
+ { ...options, quoteTransform: (quote) => sourceForGrounding(quote) ?? quote },
40
40
  );
41
41
  }
42
42
 
@@ -100,6 +100,15 @@ export function filterExtractionResultBySource(
100
100
  roleAssertionSources?: ExtractionGroundingRoleSources,
101
101
  eventTimeNormalizer?: (eventTime: string) => string,
102
102
  spanMode: "off" | "shadow" | "on" = "off",
103
+ quoteTransform?: (quote: string) => string,
103
104
  ): ExtractionResult {
104
- return filterGroundingRules(result, source, assertionSource, roleAssertionSources, eventTimeNormalizer, spanMode);
105
+ return filterGroundingRules(
106
+ result,
107
+ source,
108
+ assertionSource,
109
+ roleAssertionSources,
110
+ eventTimeNormalizer,
111
+ spanMode,
112
+ quoteTransform,
113
+ );
105
114
  }
package/src/index.ts CHANGED
@@ -1401,7 +1401,7 @@ export type {
1401
1401
  CalendarSource,
1402
1402
  RecallDisclosure,
1403
1403
  } from "./types.js";
1404
- export { CONVERGE_CONFLICT_POLICIES, DEFAULT_CONVERGE_CONFLICT_POLICY, DEFAULT_CONVERGE_PEER_REQUEST_TIMEOUT_MS, MAX_CONVERGE_PEER_REQUEST_TIMEOUT_MS, envConvergePeerRequestTimeoutMs, normalizeConvergePeerRequestTimeoutMs, parseConvergeConfig } from "./converge-config.js";
1404
+ export { CONVERGE_CONFLICT_POLICIES, DEFAULT_CONVERGE_CONFLICT_POLICY, DEFAULT_CONVERGE_PEER_REQUEST_TIMEOUT_MS, MAX_CONVERGE_PEER_REQUEST_TIMEOUT_MS, envConvergePeerRequestTimeoutMs, normalizeConvergePeerRequestTimeoutMs, parseConvergeConfig, resolveConvergeCaptureWriteLockBackoff } from "./converge-config.js";
1405
1405
  export {
1406
1406
  DEFAULT_RECALL_DISCLOSURE,
1407
1407
  RECALL_DISCLOSURE_LEVELS,
package/src/json-store.ts CHANGED
@@ -14,6 +14,7 @@ import {
14
14
  } from "node:fs/promises";
15
15
  import path from "node:path";
16
16
  import { isErrnoCode } from "./utils/errno.js";
17
+ import { isMacOsReplicationJunkBasename } from "./utils/macos-replication-junk.js";
17
18
 
18
19
  async function listJsonFilesStrictInner(dir: string, allowMissingDirectory: boolean): Promise<string[]> {
19
20
  let entries: Dirent[];
@@ -25,6 +26,7 @@ async function listJsonFilesStrictInner(dir: string, allowMissingDirectory: bool
25
26
  }
26
27
  const out: string[] = [];
27
28
  for (const entry of entries) {
29
+ if (isMacOsReplicationJunkBasename(entry.name)) continue;
28
30
  const fullPath = path.join(dir, entry.name);
29
31
  if (entry.isDirectory()) {
30
32
  out.push(...(await listJsonFilesStrictInner(fullPath, false)));
@@ -55,6 +57,7 @@ export async function listNamedFiles(dir: string, fileName: string): Promise<str
55
57
  const entries = await readdir(dir, { withFileTypes: true });
56
58
  const out: string[] = [];
57
59
  for (const entry of entries) {
60
+ if (isMacOsReplicationJunkBasename(entry.name)) continue;
58
61
  const fullPath = path.join(dir, entry.name);
59
62
  if (entry.isDirectory()) {
60
63
  out.push(...(await listNamedFiles(fullPath, fileName)));