@remnic/core 9.27.0 → 9.29.0

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 (515) hide show
  1. package/dist/access-admin-ops-surface.d.ts +13 -10
  2. package/dist/access-admin-ops-surface.js +46 -41
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-authorization-probe.d.ts +13 -10
  5. package/dist/access-authorization-probe.js +47 -42
  6. package/dist/access-boundary.d.ts +13 -10
  7. package/dist/access-boundary.js +46 -41
  8. package/dist/access-cli.js +105 -96
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-health-types.d.ts +10 -1
  11. package/dist/access-http-lcm-compaction.d.ts +13 -10
  12. package/dist/access-http.d.ts +13 -10
  13. package/dist/access-http.js +56 -51
  14. package/dist/access-identity-continuity-surface.d.ts +9 -8
  15. package/dist/access-identity-continuity-surface.js +46 -41
  16. package/dist/access-lcm-surface.d.ts +13 -10
  17. package/dist/access-lcm-surface.js +46 -41
  18. package/dist/access-mcp.d.ts +13 -10
  19. package/dist/access-mcp.js +51 -46
  20. package/dist/access-memory-search-fanout.d.ts +2 -2
  21. package/dist/access-memory-search-fanout.js +3 -3
  22. package/dist/{access-namespace-preflight-wRSZEO5V.d.ts → access-namespace-preflight-DCXBkDp0.d.ts} +1 -1
  23. package/dist/access-namespace-preflight.d.ts +3 -3
  24. package/dist/access-namespace-preflight.js +46 -41
  25. package/dist/access-observe-write-surface.d.ts +13 -10
  26. package/dist/access-observe-write-surface.js +46 -41
  27. package/dist/access-operations-batch.js +48 -43
  28. package/dist/access-operations.d.ts +16 -13
  29. package/dist/access-operations.js +50 -45
  30. package/dist/access-recall-concurrency.d.ts +13 -10
  31. package/dist/access-recall-concurrency.js +46 -41
  32. package/dist/access-recall-response.d.ts +13 -10
  33. package/dist/access-recall-response.js +46 -41
  34. package/dist/access-recall-surface.d.ts +13 -10
  35. package/dist/access-recall-surface.js +46 -41
  36. package/dist/access-schema.d.ts +80 -80
  37. package/dist/access-schema.js +3 -3
  38. package/dist/{access-service-B4-Fu9x2.d.ts → access-service-DvPW_M5j.d.ts} +12 -8
  39. package/dist/access-service.d.ts +13 -10
  40. package/dist/access-service.js +46 -41
  41. package/dist/access-surface-catalog.d.ts +13 -10
  42. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  43. package/dist/action-confidence.d.ts +1 -1
  44. package/dist/active-memory-bridge.d.ts +1 -1
  45. package/dist/active-memory-bridge.js +3 -3
  46. package/dist/active-recall.d.ts +1 -1
  47. package/dist/active-recall.js +4 -2
  48. package/dist/active-recall.js.map +1 -1
  49. package/dist/adapters/index.js +4 -4
  50. package/dist/adapters/registry.js +2 -2
  51. package/dist/behavior-learner.d.ts +1 -1
  52. package/dist/behavior-signals.d.ts +1 -1
  53. package/dist/bootstrap.d.ts +9 -8
  54. package/dist/briefing.d.ts +3 -2
  55. package/dist/briefing.js +14 -12
  56. package/dist/buffer-surprise-report.d.ts +1 -1
  57. package/dist/buffer.d.ts +3 -2
  58. package/dist/buffer.js +2 -2
  59. package/dist/bulk-import/index.d.ts +3 -3
  60. package/dist/calibration.d.ts +1 -1
  61. package/dist/capabilities.d.ts +3 -2
  62. package/dist/capabilities.js +1 -1
  63. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-GWVG7LGC.js} +2 -2
  64. package/dist/{catalog-BLLxZ5L5.d.ts → catalog-BIVgftWu.d.ts} +1 -1
  65. package/dist/causal-behavior.d.ts +1 -1
  66. package/dist/causal-consolidation.d.ts +1 -1
  67. package/dist/causal-consolidation.js +15 -13
  68. package/dist/causal-consolidation.js.map +1 -1
  69. package/dist/causal-trajectory-graph.d.ts +1 -1
  70. package/dist/{chunk-CI26JDZA.js → chunk-2HNUMF5V.js} +6 -4
  71. package/dist/{chunk-CI26JDZA.js.map → chunk-2HNUMF5V.js.map} +1 -1
  72. package/dist/{chunk-NUWMZIYZ.js → chunk-2XC73SHY.js} +61 -43
  73. package/dist/chunk-2XC73SHY.js.map +1 -0
  74. package/dist/{chunk-RDQGLJRR.js → chunk-2XRE6FLM.js} +2 -1
  75. package/dist/{chunk-RDQGLJRR.js.map → chunk-2XRE6FLM.js.map} +1 -1
  76. package/dist/{chunk-2H7OEVPO.js → chunk-3GD2HFR6.js} +2 -2
  77. package/dist/{chunk-4TFIRMTE.js → chunk-4A6YGWQN.js} +2 -2
  78. package/dist/{chunk-JDOJZTFF.js → chunk-4PBVXX7L.js} +2 -2
  79. package/dist/{chunk-IKMAO55B.js → chunk-55MDBZLC.js} +2 -2
  80. package/dist/{chunk-VDX2J7OX.js → chunk-5W7CTZ2E.js} +4 -4
  81. package/dist/{chunk-B7GROTXD.js → chunk-6LKEUCEM.js} +2 -2
  82. package/dist/{chunk-2AJ72VVS.js → chunk-7BZOBA5J.js} +3 -3
  83. package/dist/{chunk-44DUJETW.js → chunk-7HXCF4RE.js} +2 -2
  84. package/dist/{chunk-X3SQYAPP.js → chunk-ACXPX4AG.js} +2 -2
  85. package/dist/{chunk-AJ7QCSIS.js → chunk-ALSGMEJR.js} +5 -5
  86. package/dist/{chunk-JGUXPJUQ.js → chunk-AS7YMSL6.js} +2 -2
  87. package/dist/{chunk-77CNV7DY.js → chunk-BLAKS3CP.js} +4 -4
  88. package/dist/{chunk-5BRT4Z2I.js → chunk-CMRQ34J5.js} +2 -2
  89. package/dist/{chunk-HEXSNYJD.js → chunk-CSMCNOPH.js} +8 -8
  90. package/dist/chunk-CVILPI77.js +432 -0
  91. package/dist/chunk-CVILPI77.js.map +1 -0
  92. package/dist/{chunk-SK3EYPKC.js → chunk-D2ANTDGO.js} +3 -3
  93. package/dist/{chunk-JCVQV6QX.js → chunk-D3LMYTBV.js} +7 -7
  94. package/dist/{chunk-GJJBPI6I.js → chunk-DRBXHRXE.js} +7 -3
  95. package/dist/chunk-DRBXHRXE.js.map +1 -0
  96. package/dist/{chunk-XY7QPJDA.js → chunk-E6EE5B67.js} +2 -2
  97. package/dist/{chunk-LLISELSY.js → chunk-EP5BVCRI.js} +2 -2
  98. package/dist/{chunk-PTN6UAUA.js → chunk-ES36HTSC.js} +4 -4
  99. package/dist/{chunk-WEAO45M4.js → chunk-ESBQWC3U.js} +4 -4
  100. package/dist/{chunk-EUSLKI4X.js → chunk-EVX44I7C.js} +5 -5
  101. package/dist/{chunk-CIQXI47W.js → chunk-FCDWWCLX.js} +1195 -271
  102. package/dist/chunk-FCDWWCLX.js.map +1 -0
  103. package/dist/{chunk-X6ROIHFE.js → chunk-G5R3D5UP.js} +2 -2
  104. package/dist/{chunk-MG6MNSP4.js → chunk-G6LBWZRF.js} +7 -7
  105. package/dist/{chunk-TKBDJTXG.js → chunk-GBJ4RDFR.js} +94 -20
  106. package/dist/chunk-GBJ4RDFR.js.map +1 -0
  107. package/dist/{chunk-FRVTCCGD.js → chunk-GGUBDXRR.js} +2 -2
  108. package/dist/{chunk-QH6CS6XJ.js → chunk-H24WNPA2.js} +2 -2
  109. package/dist/{chunk-V25OWXAC.js → chunk-HUHX2OCX.js} +1 -1
  110. package/dist/chunk-HUHX2OCX.js.map +1 -0
  111. package/dist/{chunk-TGQ2NTWH.js → chunk-IJ6WHMFB.js} +16 -2
  112. package/dist/{chunk-TGQ2NTWH.js.map → chunk-IJ6WHMFB.js.map} +1 -1
  113. package/dist/{chunk-EOLC6EXV.js → chunk-IMA2EWLV.js} +24 -3
  114. package/dist/chunk-IMA2EWLV.js.map +1 -0
  115. package/dist/{chunk-MQVINOJQ.js → chunk-IYZ5K7MU.js} +3 -3
  116. package/dist/{chunk-RPA2RX5P.js → chunk-JDZRYH2N.js} +2 -2
  117. package/dist/{chunk-M5EPMNS4.js → chunk-K5GB36ME.js} +2 -2
  118. package/dist/{chunk-UT3OQPFA.js → chunk-KUJQHXPH.js} +2 -2
  119. package/dist/{chunk-7RZJWZ46.js → chunk-LEPOP46W.js} +5 -5
  120. package/dist/{chunk-EYJSW2RV.js → chunk-NBDCZWP4.js} +4 -4
  121. package/dist/{chunk-XKGPIWGI.js → chunk-OFHFH655.js} +6 -6
  122. package/dist/{chunk-FGBJBYWP.js → chunk-OVRQLAYR.js} +3 -3
  123. package/dist/{chunk-BXLOS5AJ.js → chunk-OWHERGF2.js} +2 -2
  124. package/dist/chunk-P2BM76KT.js +528 -0
  125. package/dist/chunk-P2BM76KT.js.map +1 -0
  126. package/dist/{chunk-U3TH5Q2Q.js → chunk-P3MH72CI.js} +2 -2
  127. package/dist/{chunk-P2OZKKYP.js → chunk-PHWUFPCO.js} +2 -2
  128. package/dist/{chunk-KGTD2KZJ.js → chunk-PKRIQL3V.js} +2 -2
  129. package/dist/{chunk-BNGPHGVZ.js → chunk-Q6VFVAKZ.js} +13 -6
  130. package/dist/{chunk-BNGPHGVZ.js.map → chunk-Q6VFVAKZ.js.map} +1 -1
  131. package/dist/{chunk-4MJZTF42.js → chunk-QAOGGNE3.js} +3 -3
  132. package/dist/{chunk-RGJBM7Z3.js → chunk-QMBNMPQM.js} +84 -84
  133. package/dist/{chunk-RGJBM7Z3.js.map → chunk-QMBNMPQM.js.map} +1 -1
  134. package/dist/{chunk-2QSZNTDO.js → chunk-RKNJBZ55.js} +4 -4
  135. package/dist/chunk-RMMVQQA6.js +70 -0
  136. package/dist/chunk-RMMVQQA6.js.map +1 -0
  137. package/dist/{chunk-FCCMFVS6.js → chunk-RPSYDM6C.js} +2 -2
  138. package/dist/chunk-RPW2NOU6.js +33 -0
  139. package/dist/chunk-RPW2NOU6.js.map +1 -0
  140. package/dist/{chunk-RYHWZ52A.js → chunk-S2BBISHU.js} +4 -4
  141. package/dist/{chunk-RSYJV25N.js → chunk-SG265CVF.js} +10 -10
  142. package/dist/{chunk-UGH6VPPO.js → chunk-SH6YO3LT.js} +3 -3
  143. package/dist/{chunk-2RAC4JIG.js → chunk-T3GCXULH.js} +16 -16
  144. package/dist/chunk-T3GCXULH.js.map +1 -0
  145. package/dist/{chunk-FMLKOL2Z.js → chunk-TC3VNKGX.js} +4 -4
  146. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  147. package/dist/{chunk-BJJAX3IZ.js → chunk-UTRO5UJU.js} +2 -2
  148. package/dist/{chunk-DQEMWVMT.js → chunk-UVYI6VIX.js} +1 -1
  149. package/dist/chunk-VNA7W7QF.js +134 -0
  150. package/dist/chunk-VNA7W7QF.js.map +1 -0
  151. package/dist/{chunk-BHLN7L7M.js → chunk-VVIW3PTA.js} +17 -17
  152. package/dist/chunk-WNIUPHWV.js +152 -0
  153. package/dist/chunk-WNIUPHWV.js.map +1 -0
  154. package/dist/chunk-WOCNN776.js +742 -0
  155. package/dist/chunk-WOCNN776.js.map +1 -0
  156. package/dist/{chunk-XQ4EH6DI.js → chunk-WONS4RZ2.js} +3 -3
  157. package/dist/chunk-WRJVB3C2.js +118 -0
  158. package/dist/chunk-WRJVB3C2.js.map +1 -0
  159. package/dist/{chunk-HORJVJ6K.js → chunk-WZ7UB7XQ.js} +42 -37
  160. package/dist/chunk-WZ7UB7XQ.js.map +1 -0
  161. package/dist/{chunk-MEBQFQ26.js → chunk-XEQ7OT7U.js} +8 -6
  162. package/dist/chunk-XEQ7OT7U.js.map +1 -0
  163. package/dist/{chunk-CSXHRAJJ.js → chunk-XOZ4ALGB.js} +3 -3
  164. package/dist/{chunk-XKO7BM2C.js → chunk-YGHMSDLK.js} +187 -26
  165. package/dist/chunk-YGHMSDLK.js.map +1 -0
  166. package/dist/chunk-YXZG5TVN.js +40 -0
  167. package/dist/chunk-YXZG5TVN.js.map +1 -0
  168. package/dist/{chunk-6NNNURLK.js → chunk-Z54EM5YZ.js} +4 -4
  169. package/dist/{chunk-YSGBD3QN.js → chunk-ZGOQTOYA.js} +3 -3
  170. package/dist/{chunk-4DJQYKMN.js → chunk-ZIKENA2C.js} +2 -2
  171. package/dist/chunk-ZIKENA2C.js.map +1 -0
  172. package/dist/{chunk-RNY3BO35.js → chunk-ZXAGJFHJ.js} +4 -4
  173. package/dist/{cli-Bz7X7dGx.d.ts → cli-CxoSOiG0.d.ts} +5 -5
  174. package/dist/cli.d.ts +14 -12
  175. package/dist/cli.js +73 -68
  176. package/dist/compounding/engine.d.ts +3 -2
  177. package/dist/compounding/engine.js +15 -13
  178. package/dist/compounding/preference-consolidator.d.ts +1 -1
  179. package/dist/compression-optimizer.d.ts +1 -1
  180. package/dist/config.d.ts +1 -1
  181. package/dist/config.js +4 -2
  182. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  183. package/dist/connectors/codex-materialize-runner.js +14 -12
  184. package/dist/connectors/codex-materialize.d.ts +1 -1
  185. package/dist/connectors/index.d.ts +1 -1
  186. package/dist/connectors/index.js +15 -13
  187. package/dist/consolidation-provenance-check.d.ts +3 -2
  188. package/dist/consolidation-undo.d.ts +3 -2
  189. package/dist/contradiction/index.d.ts +3 -2
  190. package/dist/contradiction/index.js +6 -6
  191. package/dist/{contradiction-scan-HMF7CNKD.js → contradiction-scan-HYLIRMJ2.js} +3 -3
  192. package/dist/conversation-index/backend.d.ts +1 -1
  193. package/dist/conversation-index/backend.js +2 -2
  194. package/dist/conversation-index/chunker.d.ts +1 -1
  195. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  196. package/dist/conversation-index/indexer.d.ts +1 -1
  197. package/dist/conversation-index/search.d.ts +1 -1
  198. package/dist/corpus-watermark.d.ts +15 -2
  199. package/dist/corpus-watermark.js +27 -23
  200. package/dist/day-summary.d.ts +1 -1
  201. package/dist/day-summary.js +2 -2
  202. package/dist/delinearize.d.ts +1 -1
  203. package/dist/direct-answer-wiring.d.ts +1 -1
  204. package/dist/direct-answer.d.ts +1 -1
  205. package/dist/embedding-fallback.d.ts +1 -1
  206. package/dist/embedding-fallback.js +2 -2
  207. package/dist/enrichment/index.d.ts +1 -1
  208. package/dist/entity-id-normalization.d.ts +4 -0
  209. package/dist/entity-id-normalization.js +10 -0
  210. package/dist/entity-id-normalization.js.map +1 -0
  211. package/dist/entity-retrieval-boundaries.d.ts +3 -0
  212. package/dist/entity-retrieval-boundaries.js +8 -0
  213. package/dist/entity-retrieval-boundaries.js.map +1 -0
  214. package/dist/entity-retrieval.d.ts +3 -2
  215. package/dist/entity-retrieval.js +15 -12
  216. package/dist/entity-schema.d.ts +1 -1
  217. package/dist/entity-schema.js +1 -1
  218. package/dist/explicit-capture.d.ts +9 -8
  219. package/dist/explicit-capture.js +2 -2
  220. package/dist/extraction-error-classification.d.ts +1 -1
  221. package/dist/extraction-faithfulness.d.ts +1 -1
  222. package/dist/extraction-judge-telemetry.d.ts +1 -1
  223. package/dist/extraction-judge-training.d.ts +1 -1
  224. package/dist/extraction-judge.d.ts +1 -1
  225. package/dist/extraction-liveness.d.ts +1 -1
  226. package/dist/extraction-source-grounding-helpers.d.ts +34 -0
  227. package/dist/extraction-source-grounding-helpers.js +62 -0
  228. package/dist/extraction-source-grounding-helpers.js.map +1 -0
  229. package/dist/extraction-source-grounding-rules.d.ts +18 -0
  230. package/dist/extraction-source-grounding-rules.js +12 -0
  231. package/dist/extraction-source-grounding-rules.js.map +1 -0
  232. package/dist/extraction-source-grounding.d.ts +11 -0
  233. package/dist/extraction-source-grounding.js +13 -0
  234. package/dist/extraction-source-grounding.js.map +1 -0
  235. package/dist/extraction.d.ts +3 -1
  236. package/dist/extraction.js +7 -4
  237. package/dist/fallback-llm.d.ts +1 -1
  238. package/dist/{first-start-migration-LEXL3XYL.js → first-start-migration-F2QJD66E.js} +2 -2
  239. package/dist/graph-dashboard-diff.d.ts +1 -1
  240. package/dist/graph-dashboard-key.d.ts +1 -1
  241. package/dist/graph-dashboard-parser.d.ts +1 -1
  242. package/dist/graph-edge-reinforcement.d.ts +1 -1
  243. package/dist/graph-snapshot.d.ts +1 -1
  244. package/dist/graph.d.ts +1 -1
  245. package/dist/importance.d.ts +1 -1
  246. package/dist/importers/index.d.ts +1 -1
  247. package/dist/in-flight-reads.d.ts +1 -1
  248. package/dist/index.d.ts +407 -405
  249. package/dist/index.js +154 -145
  250. package/dist/intent.d.ts +1 -1
  251. package/dist/lcm/engine.d.ts +1 -1
  252. package/dist/lcm/engine.js +2 -2
  253. package/dist/lcm/index.d.ts +1 -1
  254. package/dist/lcm/index.js +2 -2
  255. package/dist/lcm/tools.d.ts +1 -1
  256. package/dist/lifecycle.d.ts +1 -1
  257. package/dist/live-connectors-runner.d.ts +1 -1
  258. package/dist/local-llm.d.ts +1 -1
  259. package/dist/local-llm.js +2 -2
  260. package/dist/local-model-endpoint.d.ts +1 -1
  261. package/dist/maintenance/memory-governance.d.ts +1 -1
  262. package/dist/maintenance/memory-governance.js +14 -12
  263. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  264. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -12
  265. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  266. package/dist/maintenance/rebuild-memory-projection.js +15 -13
  267. package/dist/{maintenance-DgnD2z8S.d.ts → maintenance-Cb-PjxQd.d.ts} +3 -3
  268. package/dist/mcp-memory-inspector-app.d.ts +13 -10
  269. package/dist/memory-action-policy.d.ts +1 -1
  270. package/dist/memory-cache.d.ts +1 -1
  271. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  272. package/dist/memory-projection-mutations.d.ts +4 -0
  273. package/dist/memory-projection-mutations.js +15 -0
  274. package/dist/memory-projection-mutations.js.map +1 -0
  275. package/dist/memory-projection-store.d.ts +1 -1
  276. package/dist/memory-provenance.d.ts +1 -1
  277. package/dist/memory-worth-outcomes.d.ts +3 -2
  278. package/dist/models-json.d.ts +1 -1
  279. package/dist/namespaces/migrate.d.ts +4 -3
  280. package/dist/namespaces/migrate.js +24 -22
  281. package/dist/namespaces/principal.d.ts +1 -1
  282. package/dist/namespaces/principal.js +2 -2
  283. package/dist/namespaces/search.d.ts +1 -1
  284. package/dist/namespaces/search.js +10 -10
  285. package/dist/namespaces/storage.d.ts +4 -3
  286. package/dist/namespaces/storage.js +14 -12
  287. package/dist/native-knowledge.d.ts +1 -1
  288. package/dist/offline-sync-impression-drain.d.ts +1 -1
  289. package/dist/offline-sync-impression-drain.js +7 -7
  290. package/dist/operator-doctor-corpus.d.ts +22 -3
  291. package/dist/operator-doctor-corpus.js +34 -24
  292. package/dist/operator-doctor-replica.d.ts +52 -0
  293. package/dist/operator-doctor-replica.js +15 -0
  294. package/dist/operator-doctor-replica.js.map +1 -0
  295. package/dist/operator-toolkit.d.ts +7 -3
  296. package/dist/operator-toolkit.js +37 -31
  297. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  298. package/dist/orchestration/compression-guideline-coordinator.js +2 -2
  299. package/dist/orchestration/maintenance.d.ts +5 -4
  300. package/dist/orchestration/maintenance.js +21 -19
  301. package/dist/{orchestrator-rIHmHpv1.d.ts → orchestrator-5GKqb_HL.d.ts} +7 -7
  302. package/dist/orchestrator.d.ts +9 -8
  303. package/dist/orchestrator.js +105 -96
  304. package/dist/patterns-cli.d.ts +1 -1
  305. package/dist/{pipeline-Bq5zU6Bp.d.ts → pipeline-3Qi1TpRo.d.ts} +1 -1
  306. package/dist/policy-runtime.d.ts +1 -1
  307. package/dist/proactive-contention.d.ts +1 -1
  308. package/dist/provenance.d.ts +1 -1
  309. package/dist/{qmd-3ILJkC70.d.ts → qmd-D9JqzzRX.d.ts} +1 -1
  310. package/dist/qmd-preflight.d.ts +2 -2
  311. package/dist/qmd-recall-cache.d.ts +1 -1
  312. package/dist/qmd.d.ts +2 -2
  313. package/dist/recall-concurrency-config.d.ts +1 -1
  314. package/dist/recall-disclosure-escalation.d.ts +1 -1
  315. package/dist/recall-explain-renderer.d.ts +1 -1
  316. package/dist/recall-explain-renderer.js +3 -3
  317. package/dist/recall-memory-map.d.ts +1 -1
  318. package/dist/recall-planner-llm.d.ts +1 -1
  319. package/dist/recall-state.d.ts +1 -1
  320. package/dist/recall-state.js +2 -2
  321. package/dist/recall-tag-filter.d.ts +1 -1
  322. package/dist/recall-timings.d.ts +1 -1
  323. package/dist/recall-xray-cli.d.ts +1 -1
  324. package/dist/recall-xray-cli.js +4 -4
  325. package/dist/recall-xray-renderer.d.ts +1 -1
  326. package/dist/recall-xray-renderer.js +3 -3
  327. package/dist/recall-xray.d.ts +1 -1
  328. package/dist/recall-xray.js +2 -2
  329. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  330. package/dist/replay/normalizers/claude.d.ts +1 -1
  331. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  332. package/dist/replay/normalizers/shared.d.ts +1 -1
  333. package/dist/replay/runner.d.ts +1 -1
  334. package/dist/replay/types.d.ts +1 -1
  335. package/dist/replica-divergence.d.ts +279 -0
  336. package/dist/replica-divergence.js +28 -0
  337. package/dist/replica-divergence.js.map +1 -0
  338. package/dist/replica-peers-config.d.ts +5 -0
  339. package/dist/replica-peers-config.js +13 -0
  340. package/dist/replica-peers-config.js.map +1 -0
  341. package/dist/resolve-auth-token.d.ts +21 -2
  342. package/dist/resolve-auth-token.js +5 -1
  343. package/dist/resume-bundles.js +5 -3
  344. package/dist/retrieval-agents.d.ts +2 -2
  345. package/dist/retrieval-tiers.d.ts +1 -1
  346. package/dist/routing/engine.d.ts +1 -1
  347. package/dist/routing/store.d.ts +1 -1
  348. package/dist/salvage-envelope.d.ts +1 -1
  349. package/dist/schemas.d.ts +54 -54
  350. package/dist/{scope-profiles-D0-ff4xT.d.ts → scope-profiles-C4g6_UdP.d.ts} +1 -1
  351. package/dist/search/embed-helper.d.ts +1 -1
  352. package/dist/search/embed-helper.js +2 -2
  353. package/dist/search/factory.d.ts +1 -1
  354. package/dist/search/factory.js +9 -9
  355. package/dist/search/index.d.ts +1 -1
  356. package/dist/search/index.js +9 -9
  357. package/dist/search/lancedb-backend.d.ts +1 -1
  358. package/dist/search/lancedb-backend.js +2 -2
  359. package/dist/search/meilisearch-backend.d.ts +1 -1
  360. package/dist/search/meilisearch-backend.js +2 -2
  361. package/dist/search/noop-backend.d.ts +1 -1
  362. package/dist/search/orama-backend.d.ts +1 -1
  363. package/dist/search/orama-backend.js +2 -2
  364. package/dist/search/port.d.ts +1 -1
  365. package/dist/search/remote-backend.d.ts +1 -1
  366. package/dist/{semantic-consolidation-4Tfh7c1g.d.ts → semantic-consolidation-BrxqnzTW.d.ts} +1 -1
  367. package/dist/semantic-consolidation.d.ts +2 -2
  368. package/dist/semantic-consolidation.js +15 -13
  369. package/dist/semantic-rule-promotion.js +14 -12
  370. package/dist/semantic-rule-verifier.d.ts +1 -1
  371. package/dist/semantic-rule-verifier.js +14 -12
  372. package/dist/{service-cTvil7D_.d.ts → service-Bi1JgxdP.d.ts} +2 -2
  373. package/dist/session-observer-bands.d.ts +1 -1
  374. package/dist/session-observer-state.d.ts +1 -1
  375. package/dist/shared-context/manager.d.ts +9 -9
  376. package/dist/shared-context/manager.js +2 -2
  377. package/dist/signal.d.ts +1 -1
  378. package/dist/{storage-C9ibpTme.d.ts → storage-CcH6yPk2.d.ts} +13 -19
  379. package/dist/storage.d.ts +3 -2
  380. package/dist/storage.js +15 -12
  381. package/dist/summarizer.d.ts +1 -1
  382. package/dist/summarizer.js +3 -3
  383. package/dist/summary-snapshot.d.ts +1 -1
  384. package/dist/temporal-supersession.d.ts +3 -2
  385. package/dist/temporal-timeline-recall.d.ts +1 -1
  386. package/dist/temporal-validity.d.ts +1 -1
  387. package/dist/threading.d.ts +1 -1
  388. package/dist/tier-migration.d.ts +3 -2
  389. package/dist/tier-routing.d.ts +1 -1
  390. package/dist/{tier-stats-XKD7SXYY.js → tier-stats-OPTSBNRH.js} +2 -2
  391. package/dist/topics.d.ts +1 -1
  392. package/dist/transcript.d.ts +1 -1
  393. package/dist/transfer/backup.js +2 -2
  394. package/dist/transfer/capsule-export.js +2 -2
  395. package/dist/transfer/capsule-import.js +2 -2
  396. package/dist/transfer/types.d.ts +66 -66
  397. package/dist/trust-score-stage.d.ts +1 -1
  398. package/dist/trust-score.d.ts +1 -1
  399. package/dist/{types-DHBxIF0s.d.ts → types-Dg0w9ADr.d.ts} +54 -4
  400. package/dist/types.d.ts +1 -1
  401. package/dist/types.js +1 -1
  402. package/dist/utility-runtime.d.ts +1 -1
  403. package/dist/verified-recall.js +14 -12
  404. package/dist/write-envelope.d.ts +1 -1
  405. package/package.json +2 -2
  406. package/src/access-health-types.ts +8 -0
  407. package/src/access-http.test.ts +4 -0
  408. package/src/access-service-health.test.ts +23 -0
  409. package/src/access-service.ts +27 -4
  410. package/src/capabilities.test.ts +1 -0
  411. package/src/capabilities.ts +7 -7
  412. package/src/cli.ts +9 -7
  413. package/src/config.test.ts +5 -0
  414. package/src/config.ts +3 -2
  415. package/src/corpus-watermark.test.ts +21 -0
  416. package/src/corpus-watermark.ts +25 -3
  417. package/src/entity-id-normalization.ts +55 -0
  418. package/src/entity-retrieval-boundaries.ts +134 -0
  419. package/src/entity-retrieval.ts +253 -27
  420. package/src/entity-schema.ts +2 -1
  421. package/src/extraction-source-grounding-helpers.ts +603 -0
  422. package/src/extraction-source-grounding-rules.ts +1031 -0
  423. package/src/extraction-source-grounding.test.ts +2337 -0
  424. package/src/extraction-source-grounding.ts +50 -0
  425. package/src/extraction.ts +120 -15
  426. package/src/memory-projection-mutations.ts +132 -0
  427. package/src/namespaces/storage.ts +5 -3
  428. package/src/operator-doctor-corpus.ts +41 -0
  429. package/src/operator-doctor-replica.test.ts +261 -0
  430. package/src/operator-doctor-replica.ts +129 -0
  431. package/src/operator-toolkit.ts +5 -4
  432. package/src/orchestration/orchestrator-init.ts +2 -2
  433. package/src/replica-divergence.test.ts +1475 -0
  434. package/src/replica-divergence.ts +910 -0
  435. package/src/replica-peers-config.ts +250 -0
  436. package/src/resolve-auth-token.ts +38 -0
  437. package/src/storage/entity-canonical-id-migration-adapter.ts +72 -0
  438. package/src/storage/entity-canonical-id-migration-runner.ts +68 -0
  439. package/src/storage/entity-canonical-id-migration.ts +904 -0
  440. package/src/storage/entity-store.ts +44 -0
  441. package/src/storage/memory-frontmatter-metadata.ts +17 -0
  442. package/src/storage/memory-migration-serialization.ts +37 -0
  443. package/src/storage/memory-read-store.ts +3 -2
  444. package/src/storage/profile-header.ts +8 -7
  445. package/src/storage-profile-timestamp.test.ts +68 -0
  446. package/src/storage.ts +68 -69
  447. package/src/types.ts +5 -5
  448. package/dist/chunk-2RAC4JIG.js.map +0 -1
  449. package/dist/chunk-4DJQYKMN.js.map +0 -1
  450. package/dist/chunk-CIQXI47W.js.map +0 -1
  451. package/dist/chunk-EOLC6EXV.js.map +0 -1
  452. package/dist/chunk-GJJBPI6I.js.map +0 -1
  453. package/dist/chunk-HORJVJ6K.js.map +0 -1
  454. package/dist/chunk-MEBQFQ26.js.map +0 -1
  455. package/dist/chunk-NUWMZIYZ.js.map +0 -1
  456. package/dist/chunk-TKBDJTXG.js.map +0 -1
  457. package/dist/chunk-V25OWXAC.js.map +0 -1
  458. package/dist/chunk-XKO7BM2C.js.map +0 -1
  459. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-GWVG7LGC.js.map} +0 -0
  460. /package/dist/{chunk-2H7OEVPO.js.map → chunk-3GD2HFR6.js.map} +0 -0
  461. /package/dist/{chunk-4TFIRMTE.js.map → chunk-4A6YGWQN.js.map} +0 -0
  462. /package/dist/{chunk-JDOJZTFF.js.map → chunk-4PBVXX7L.js.map} +0 -0
  463. /package/dist/{chunk-IKMAO55B.js.map → chunk-55MDBZLC.js.map} +0 -0
  464. /package/dist/{chunk-VDX2J7OX.js.map → chunk-5W7CTZ2E.js.map} +0 -0
  465. /package/dist/{chunk-B7GROTXD.js.map → chunk-6LKEUCEM.js.map} +0 -0
  466. /package/dist/{chunk-2AJ72VVS.js.map → chunk-7BZOBA5J.js.map} +0 -0
  467. /package/dist/{chunk-44DUJETW.js.map → chunk-7HXCF4RE.js.map} +0 -0
  468. /package/dist/{chunk-X3SQYAPP.js.map → chunk-ACXPX4AG.js.map} +0 -0
  469. /package/dist/{chunk-AJ7QCSIS.js.map → chunk-ALSGMEJR.js.map} +0 -0
  470. /package/dist/{chunk-JGUXPJUQ.js.map → chunk-AS7YMSL6.js.map} +0 -0
  471. /package/dist/{chunk-77CNV7DY.js.map → chunk-BLAKS3CP.js.map} +0 -0
  472. /package/dist/{chunk-5BRT4Z2I.js.map → chunk-CMRQ34J5.js.map} +0 -0
  473. /package/dist/{chunk-HEXSNYJD.js.map → chunk-CSMCNOPH.js.map} +0 -0
  474. /package/dist/{chunk-SK3EYPKC.js.map → chunk-D2ANTDGO.js.map} +0 -0
  475. /package/dist/{chunk-JCVQV6QX.js.map → chunk-D3LMYTBV.js.map} +0 -0
  476. /package/dist/{chunk-XY7QPJDA.js.map → chunk-E6EE5B67.js.map} +0 -0
  477. /package/dist/{chunk-LLISELSY.js.map → chunk-EP5BVCRI.js.map} +0 -0
  478. /package/dist/{chunk-PTN6UAUA.js.map → chunk-ES36HTSC.js.map} +0 -0
  479. /package/dist/{chunk-WEAO45M4.js.map → chunk-ESBQWC3U.js.map} +0 -0
  480. /package/dist/{chunk-EUSLKI4X.js.map → chunk-EVX44I7C.js.map} +0 -0
  481. /package/dist/{chunk-X6ROIHFE.js.map → chunk-G5R3D5UP.js.map} +0 -0
  482. /package/dist/{chunk-MG6MNSP4.js.map → chunk-G6LBWZRF.js.map} +0 -0
  483. /package/dist/{chunk-FRVTCCGD.js.map → chunk-GGUBDXRR.js.map} +0 -0
  484. /package/dist/{chunk-QH6CS6XJ.js.map → chunk-H24WNPA2.js.map} +0 -0
  485. /package/dist/{chunk-MQVINOJQ.js.map → chunk-IYZ5K7MU.js.map} +0 -0
  486. /package/dist/{chunk-RPA2RX5P.js.map → chunk-JDZRYH2N.js.map} +0 -0
  487. /package/dist/{chunk-M5EPMNS4.js.map → chunk-K5GB36ME.js.map} +0 -0
  488. /package/dist/{chunk-UT3OQPFA.js.map → chunk-KUJQHXPH.js.map} +0 -0
  489. /package/dist/{chunk-7RZJWZ46.js.map → chunk-LEPOP46W.js.map} +0 -0
  490. /package/dist/{chunk-EYJSW2RV.js.map → chunk-NBDCZWP4.js.map} +0 -0
  491. /package/dist/{chunk-XKGPIWGI.js.map → chunk-OFHFH655.js.map} +0 -0
  492. /package/dist/{chunk-FGBJBYWP.js.map → chunk-OVRQLAYR.js.map} +0 -0
  493. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-OWHERGF2.js.map} +0 -0
  494. /package/dist/{chunk-U3TH5Q2Q.js.map → chunk-P3MH72CI.js.map} +0 -0
  495. /package/dist/{chunk-P2OZKKYP.js.map → chunk-PHWUFPCO.js.map} +0 -0
  496. /package/dist/{chunk-KGTD2KZJ.js.map → chunk-PKRIQL3V.js.map} +0 -0
  497. /package/dist/{chunk-4MJZTF42.js.map → chunk-QAOGGNE3.js.map} +0 -0
  498. /package/dist/{chunk-2QSZNTDO.js.map → chunk-RKNJBZ55.js.map} +0 -0
  499. /package/dist/{chunk-FCCMFVS6.js.map → chunk-RPSYDM6C.js.map} +0 -0
  500. /package/dist/{chunk-RYHWZ52A.js.map → chunk-S2BBISHU.js.map} +0 -0
  501. /package/dist/{chunk-RSYJV25N.js.map → chunk-SG265CVF.js.map} +0 -0
  502. /package/dist/{chunk-UGH6VPPO.js.map → chunk-SH6YO3LT.js.map} +0 -0
  503. /package/dist/{chunk-FMLKOL2Z.js.map → chunk-TC3VNKGX.js.map} +0 -0
  504. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  505. /package/dist/{chunk-BJJAX3IZ.js.map → chunk-UTRO5UJU.js.map} +0 -0
  506. /package/dist/{chunk-DQEMWVMT.js.map → chunk-UVYI6VIX.js.map} +0 -0
  507. /package/dist/{chunk-BHLN7L7M.js.map → chunk-VVIW3PTA.js.map} +0 -0
  508. /package/dist/{chunk-XQ4EH6DI.js.map → chunk-WONS4RZ2.js.map} +0 -0
  509. /package/dist/{chunk-CSXHRAJJ.js.map → chunk-XOZ4ALGB.js.map} +0 -0
  510. /package/dist/{chunk-6NNNURLK.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  511. /package/dist/{chunk-YSGBD3QN.js.map → chunk-ZGOQTOYA.js.map} +0 -0
  512. /package/dist/{chunk-RNY3BO35.js.map → chunk-ZXAGJFHJ.js.map} +0 -0
  513. /package/dist/{contradiction-scan-HMF7CNKD.js.map → contradiction-scan-HYLIRMJ2.js.map} +0 -0
  514. /package/dist/{first-start-migration-LEXL3XYL.js.map → first-start-migration-F2QJD66E.js.map} +0 -0
  515. /package/dist/{tier-stats-XKD7SXYY.js.map → tier-stats-OPTSBNRH.js.map} +0 -0
@@ -0,0 +1,603 @@
1
+ export function isInterrogativeSourceSentence(sentence: string): boolean {
2
+ const normalized = sentence.trim();
3
+ const embeddedQuestionVerbIndex = normalized.search(
4
+ /\b(?:determine|know|wonder|ask(?:ed)?|question|decide|check|confirm|find|figure|understand|unclear)\b/iu,
5
+ );
6
+ const embeddedQuestionMarkerIndex = normalized.search(/\b(?:whether|if)\b/iu);
7
+ const hasEmbeddedQuestion = embeddedQuestionVerbIndex >= 0
8
+ && embeddedQuestionMarkerIndex > embeddedQuestionVerbIndex;
9
+ return normalized.endsWith("?")
10
+ || hasEmbeddedQuestion
11
+ || (
12
+ !normalized.includes(":")
13
+ && /^(?:suppose|assuming|assume|maybe|perhaps|hypothetically|if|whether|imagine|imagining|presume|presuming|supposing|is|are|am|was|were|do|does|did|can|could|will|would|should|has|have|had|what|which|when|where|why|how|who)\b/iu.test(
14
+ normalized,
15
+ )
16
+ );
17
+ }
18
+
19
+ export function containsContiguousGroundingTokens(
20
+ candidateTokens: ReadonlyArray<string>,
21
+ sourceTokens: ReadonlyArray<string>,
22
+ ): boolean {
23
+ if (candidateTokens.length === 0 || candidateTokens.length > sourceTokens.length) return false;
24
+ return sourceTokens.some((_, start) =>
25
+ candidateTokens.every((token, offset) => sourceTokens[start + offset] === token),
26
+ );
27
+ }
28
+
29
+ export function hasExplicitRoleSubjectToken(
30
+ candidateRole: string | undefined,
31
+ sourceTokensBySentence: ReadonlyArray<ReadonlyArray<string>>,
32
+ ): boolean {
33
+ return candidateRole !== undefined
34
+ && sourceTokensBySentence.some((tokens) => tokens.includes(candidateRole));
35
+ }
36
+
37
+ export function splitGroundingClauses(sentences: ReadonlyArray<string>): string[] {
38
+ return sentences.flatMap((sentence) =>
39
+ sentence
40
+ .split(/,\s+(?=[\p{L}][\p{L}\p{N}'’-]*\s+\S)/gu)
41
+ .flatMap((commaClause) =>
42
+ commaClause
43
+ .split(/\s*(?::|[—–])\s+|\s+\/\s+/u)
44
+ .flatMap((delimiterClause) =>
45
+ delimiterClause
46
+ .split(/\s+(?:and|but|or|while|although|because)\s+/gu)
47
+ .map((clause) => clause.trim())
48
+ .filter((clause) => clause.length > 0),
49
+ ),
50
+ ),
51
+ );
52
+ }
53
+
54
+ export const GROUNDING_STOPWORDS: Record<string, true> = {
55
+ a: true,
56
+ an: true,
57
+ and: true,
58
+ are: true,
59
+ as: true,
60
+ at: true,
61
+ be: true,
62
+ been: true,
63
+ being: true,
64
+ but: true,
65
+ by: true,
66
+ can: true,
67
+ could: true,
68
+ did: true,
69
+ do: true,
70
+ does: true,
71
+ for: true,
72
+ from: true,
73
+ had: true,
74
+ has: true,
75
+ have: true,
76
+ he: true,
77
+ her: true,
78
+ here: true,
79
+ hers: true,
80
+ him: true,
81
+ his: true,
82
+ how: true,
83
+ i: true,
84
+ if: true,
85
+ in: true,
86
+ into: true,
87
+ is: true,
88
+ it: true,
89
+ its: true,
90
+ just: true,
91
+ me: true,
92
+ my: true,
93
+ no: true,
94
+ not: true,
95
+ of: true,
96
+ on: true,
97
+ only: true,
98
+ or: true,
99
+ our: true,
100
+ ours: true,
101
+ she: true,
102
+ so: true,
103
+ than: true,
104
+ that: true,
105
+ the: true,
106
+ their: true,
107
+ them: true,
108
+ then: true,
109
+ there: true,
110
+ these: true,
111
+ they: true,
112
+ this: true,
113
+ those: true,
114
+ to: true,
115
+ too: true,
116
+ under: true,
117
+ up: true,
118
+ us: true,
119
+ very: true,
120
+ was: true,
121
+ we: true,
122
+ were: true,
123
+ what: true,
124
+ when: true,
125
+ why: true,
126
+ where: true,
127
+ which: true,
128
+ who: true,
129
+ will: true,
130
+ with: true,
131
+ would: true,
132
+ you: true,
133
+ your: true,
134
+ };
135
+
136
+ export const GROUNDING_NEGATION_TOKENS = new Set([
137
+ "no",
138
+ "not",
139
+ "false",
140
+ "untrue",
141
+ "incorrect",
142
+ "wrong",
143
+ "never",
144
+ "without",
145
+ "neither",
146
+ "nor",
147
+ "none",
148
+ "cannot",
149
+ "cant",
150
+ "can't",
151
+ "don't",
152
+ "doesn't",
153
+ "didn't",
154
+ "isn't",
155
+ "aren't",
156
+ "wasn't",
157
+ "weren't",
158
+ "won't",
159
+ "wouldn't",
160
+ "couldn't",
161
+ "shouldn't",
162
+ "haven't",
163
+ "hasn't",
164
+ "hadn't",
165
+ ]);
166
+
167
+ export const GROUNDING_AUXILIARY_TOKENS = new Set([
168
+ "am",
169
+ "are",
170
+ "be",
171
+ "been",
172
+ "being",
173
+ "can",
174
+ "could",
175
+ "did",
176
+ "do",
177
+ "does",
178
+ "had",
179
+ "has",
180
+ "have",
181
+ "is",
182
+ "was",
183
+ "were",
184
+ "will",
185
+ "would",
186
+ "should",
187
+ ]);
188
+
189
+ export const GROUNDING_COPULAR_FORMS = new Set([
190
+ "am",
191
+ "are",
192
+ "be",
193
+ "been",
194
+ "being",
195
+ "is",
196
+ "was",
197
+ "were",
198
+ ]);
199
+
200
+ export const GROUNDING_SUBJECT_PRONOUNS = new Set([
201
+ "he",
202
+ "she",
203
+ "they",
204
+ "it",
205
+ "i",
206
+ "we",
207
+ "you",
208
+ ]);
209
+ export const GROUNDING_ENTITY_TYPE_PREFIXES = new Set([
210
+ "person",
211
+ "project",
212
+ "tool",
213
+ "company",
214
+ "place",
215
+ "other",
216
+ ]);
217
+
218
+ export const GROUNDING_COMMON_VERB_FORMS = new Set([
219
+ "contains",
220
+ "employs",
221
+ "gives",
222
+ "has",
223
+ "hosts",
224
+ "likes",
225
+ "makes",
226
+ "needs",
227
+ "owns",
228
+ "prefers",
229
+ "requires",
230
+ "runs",
231
+ "shares",
232
+ "supports",
233
+ "takes",
234
+ "uses",
235
+ "wants",
236
+ "works",
237
+ ]);
238
+
239
+ export interface GroundingLexeme {
240
+ token: string;
241
+ preserveTerminalS: boolean;
242
+ }
243
+
244
+ export function groundingLexemes(text: string): GroundingLexeme[] {
245
+ return text.normalize("NFKC").match(
246
+ /[\p{L}\p{N}]+(?:['’][\p{L}\p{N}]+)?(?:\+\+[\p{L}\p{N}]*|#[\p{L}\p{N}]*)?/gu,
247
+ )
248
+ ?.map((rawToken) => {
249
+ const token = rawToken.replaceAll("’", "'").toLocaleLowerCase();
250
+ return {
251
+ token,
252
+ preserveTerminalS: /^\p{Lu}/u.test(rawToken) && !GROUNDING_COMMON_VERB_FORMS.has(token),
253
+ };
254
+ })
255
+ ?? [];
256
+ }
257
+
258
+ export function tokenSequence(text: string): string[] {
259
+ return groundingLexemes(text).map(({ token }) => token);
260
+ }
261
+
262
+ export function containsExactTokenSequence(candidate: string, source: string): boolean {
263
+ const candidateTokens = tokenSequence(candidate);
264
+ const sourceTokens = tokenSequence(source);
265
+ if (candidateTokens.length === 0 || candidateTokens.length > sourceTokens.length) return false;
266
+ return sourceTokens.some((_, index) =>
267
+ candidateTokens.every((token, offset) => sourceTokens[index + offset] === token),
268
+ );
269
+
270
+ }
271
+
272
+ export function isNegationCue(token: string): boolean {
273
+ return GROUNDING_NEGATION_TOKENS.has(token) || token.endsWith("n't");
274
+ }
275
+
276
+ export function isAttachedNegatedAuxiliary(token: string): boolean {
277
+ return token.endsWith("n't")
278
+ || token === "cannot"
279
+ || token === "cant"
280
+ || token === "can't";
281
+ }
282
+
283
+ export function isNegatedAt(tokens: ReadonlyArray<string>, index: number): boolean {
284
+ if (tokens[index - 1] === "only" && tokens[index - 2] === "not") return false;
285
+ const previousStart = Math.max(0, index - 2);
286
+ for (let i = previousStart; i < index; i += 1) {
287
+ if (isNegationCue(tokens[i])) return true;
288
+ }
289
+
290
+ if (tokens[index - 1] === "than" && tokens[index - 2] === "rather") return true;
291
+ if (tokens[index - 1] === "of" && tokens[index - 2] === "instead") return true;
292
+
293
+ const next = tokens[index + 1];
294
+ if (next !== undefined && isAttachedNegatedAuxiliary(next)) return true;
295
+ const nextNext = tokens[index + 2];
296
+ return next !== undefined
297
+ && nextNext !== undefined
298
+ && GROUNDING_AUXILIARY_TOKENS.has(next)
299
+ && isNegationCue(nextNext);
300
+ }
301
+
302
+ export const GROUNDING_MIN_SHARED_TOKENS = 2;
303
+ export const GROUNDING_MIN_COVERAGE = 0.5;
304
+
305
+ export function stemToken(token: string, preserveTerminalS = false): string {
306
+ if (token.endsWith("'s")) return token.slice(0, -2);
307
+ if (preserveTerminalS) return token;
308
+ if (token.length > 5 && token.endsWith("ing")) {
309
+ const stem = token.slice(0, -3);
310
+ return /(.)\1$/u.test(stem) ? stem.slice(0, -1) : stem;
311
+ }
312
+ if (token.length > 4 && token.endsWith("ed")) return token.slice(0, -2);
313
+ if (
314
+ !preserveTerminalS
315
+ && token.length > 3
316
+ && token.endsWith("s")
317
+ && !token.endsWith("ss")
318
+ && GROUNDING_COMMON_VERB_FORMS.has(token)
319
+ ) {
320
+ return token.slice(0, -1);
321
+ }
322
+ return token;
323
+ }
324
+
325
+
326
+ export function tokenize(text: string): Set<string> {
327
+ const tokens = new Set<string>();
328
+ for (const { token, preserveTerminalS } of groundingLexemes(text)) {
329
+ if (GROUNDING_STOPWORDS[token] !== true) tokens.add(stemToken(token, preserveTerminalS));
330
+ }
331
+ return tokens;
332
+ }
333
+
334
+ export function normalizeForExactMatch(text: string): string {
335
+ return text.normalize("NFKC").toLocaleLowerCase().replace(/\s+/gu, " ").trim();
336
+ }
337
+
338
+ export function sourceSentences(source: string): string[] {
339
+ const sentences: string[] = [];
340
+ let sentenceStart = 0;
341
+ for (let index = 0; index < source.length; index += 1) {
342
+ const character = source[index];
343
+ const nextCharacter = source[index + 1];
344
+ const boundary = character === "!"
345
+ || character === "?"
346
+ || character === ";"
347
+ || character === "\n"
348
+ || (character === "." && (
349
+ nextCharacter === undefined
350
+ || /\s/u.test(nextCharacter)
351
+ || /["')\]}]/u.test(nextCharacter)
352
+ ));
353
+ if (!boundary) continue;
354
+ let sentenceEnd = character === "\n" ? index : index + 1;
355
+ while (/[.!?;\n]/u.test(source[sentenceEnd] ?? "")) sentenceEnd += 1;
356
+ const sentence = source.slice(sentenceStart, sentenceEnd).trim();
357
+ if (sentence.length > 0) sentences.push(sentence);
358
+ sentenceStart = sentenceEnd;
359
+ index = sentenceEnd - 1;
360
+ }
361
+ const trailingSentence = source.slice(sentenceStart).trim();
362
+ if (trailingSentence.length > 0) sentences.push(trailingSentence);
363
+ return sentences.length > 0 ? sentences : [source];
364
+ }
365
+
366
+
367
+ export function groundingTokenSequence(text: string): string[] {
368
+ let lexemes = groundingLexemes(text);
369
+ while (lexemes.length > 0 && GROUNDING_AUXILIARY_TOKENS.has(lexemes[0]!.token)) {
370
+ lexemes = lexemes.slice(1);
371
+ }
372
+ return lexemes
373
+ .filter(({ token }) => GROUNDING_STOPWORDS[token] !== true)
374
+ .map(({ token, preserveTerminalS }) => stemToken(token, preserveTerminalS));
375
+ }
376
+ export function normalizedGroundingAlignmentTokenSequence(text: string): string[] {
377
+ const normalized = normalizedGroundingTokenSequence(text);
378
+ const firstLexeme = groundingLexemes(text)[0];
379
+ if (firstLexeme === undefined || !GROUNDING_SUBJECT_PRONOUNS.has(firstLexeme.token)) {
380
+ return normalized;
381
+ }
382
+ return [stemToken(firstLexeme.token, firstLexeme.preserveTerminalS), ...normalized];
383
+ }
384
+
385
+
386
+ export function normalizedGroundingTokenSequence(text: string): string[] {
387
+ return groundingTokenSequence(text).map((token) => token.replace(/'$/u, ""));
388
+ }
389
+
390
+ export function areGroundingTokensCompatible(left: string, right: string): boolean {
391
+ return left === right || `${left}e` === right || left === `${right}e`;
392
+ }
393
+ const GROUNDING_DENIAL_REPORTING_VERBS = new Set([
394
+ "deny",
395
+ "denied",
396
+ "denies",
397
+ "denying",
398
+ "dispute",
399
+ "disputed",
400
+ "disputes",
401
+ "disputing",
402
+ "reject",
403
+ "rejected",
404
+ "rejects",
405
+ "rejecting",
406
+ "refute",
407
+ "refuted",
408
+ "refutes",
409
+ "refuting",
410
+ "contradict",
411
+ "contradicted",
412
+ "contradicts",
413
+ "contradicting",
414
+ "disprove",
415
+ "disproved",
416
+ "disproves",
417
+ "disproving",
418
+ ]);
419
+
420
+ function isDenialReportingVerb(token: string): boolean {
421
+ return GROUNDING_DENIAL_REPORTING_VERBS.has(token);
422
+ }
423
+ const GROUNDING_NON_ASSERTIVE_REPORTING_VERBS = new Set([
424
+ "allege",
425
+ "alleged",
426
+ "alleges",
427
+ "alleging",
428
+ "allegedly",
429
+ "assert",
430
+ "asserted",
431
+ "asserts",
432
+ "asserting",
433
+ "believe",
434
+ "believed",
435
+ "believes",
436
+ "believing",
437
+ "claim",
438
+ "claimed",
439
+ "claims",
440
+ "claiming",
441
+ "doubt",
442
+ "doubted",
443
+ "doubts",
444
+ "doubting",
445
+ "uncertain",
446
+ "unsure",
447
+ "unclear",
448
+ "unknown",
449
+ "possibly",
450
+ "probably",
451
+ "imagine",
452
+ "imagined",
453
+ "imagines",
454
+ "imagining",
455
+ "report",
456
+ "reported",
457
+ "reports",
458
+ "reporting",
459
+ "reportedly",
460
+ "say",
461
+ "said",
462
+ "says",
463
+ "saying",
464
+ "speculate",
465
+ "speculated",
466
+ "speculates",
467
+ "speculating",
468
+ "suspect",
469
+ "suspected",
470
+ "suspects",
471
+ "suspecting",
472
+ "suppose",
473
+ "supposed",
474
+ "supposes",
475
+ "supposing",
476
+ "supposedly",
477
+ "think",
478
+ "thought",
479
+ "thinks",
480
+ "thinking",
481
+ ]);
482
+
483
+ function isNonAssertiveReportingVerb(token: string): boolean {
484
+ return GROUNDING_NON_ASSERTIVE_REPORTING_VERBS.has(token);
485
+ }
486
+
487
+ function isGroundingClauseBoundary(token: string): boolean {
488
+ return token === "and"
489
+ || token === "but"
490
+ || token === "or"
491
+ || token === "while"
492
+ || token === "although"
493
+ || token === "because";
494
+ }
495
+
496
+ function isNonAssertiveReportingAt(tokens: ReadonlyArray<string>, index: number): boolean {
497
+ let boundary = 0;
498
+ for (let cursor = 0; cursor < index; cursor += 1) {
499
+ if (isGroundingClauseBoundary(tokens[cursor]!)) boundary = cursor + 1;
500
+ }
501
+ for (let cursor = index - 1; cursor >= boundary; cursor -= 1) {
502
+ if (
503
+ tokens[cursor] === "that"
504
+ && cursor > boundary
505
+ && isNonAssertiveReportingVerb(tokens[cursor - 1]!)
506
+ ) {
507
+ return true;
508
+ }
509
+ if (isNonAssertiveReportingVerb(tokens[cursor]!) && index - cursor <= 5) return true;
510
+ }
511
+ return false;
512
+ }
513
+
514
+ function isDeniedAt(tokens: ReadonlyArray<string>, index: number): boolean {
515
+ let boundary = 0;
516
+ for (let cursor = 0; cursor < index; cursor += 1) {
517
+ if (isGroundingClauseBoundary(tokens[cursor]!)) boundary = cursor + 1;
518
+ }
519
+ for (let cursor = index - 1; cursor >= boundary; cursor -= 1) {
520
+ const token = tokens[cursor];
521
+ if (token === "that" && cursor > boundary && isDenialReportingVerb(tokens[cursor - 1]!)) {
522
+ return true;
523
+ }
524
+ if (isDenialReportingVerb(token) && index - cursor <= 5) return true;
525
+ }
526
+ return false;
527
+ }
528
+
529
+ export function hasContradictoryPolarity(candidate: string, source: string): boolean {
530
+ const candidateLexemes = groundingLexemes(candidate);
531
+ const candidateTokens = candidateLexemes.map(({ token }) => token);
532
+ let coherentContradiction = false;
533
+ for (const clause of sourceSentences(source).flatMap((sentence) =>
534
+ sentence.split(/\s+(?:and|but|or|while|although|because)\s+/gu))) {
535
+ const sourceLexemes = groundingLexemes(clause);
536
+ const sourceTokens = sourceLexemes.map(({ token }) => token);
537
+ let sourceCursor = 0;
538
+ let allTokensFound = true;
539
+ let contradiction = false;
540
+ for (const [candidateIndex, candidateToken] of candidateTokens.entries()) {
541
+ if (GROUNDING_STOPWORDS[candidateToken] === true) continue;
542
+ const sourceIndex = sourceTokens.findIndex(
543
+ (sourceToken, index) =>
544
+ index >= sourceCursor
545
+ && stemToken(sourceToken, sourceLexemes[index]?.preserveTerminalS === true)
546
+ === stemToken(candidateToken, candidateLexemes[candidateIndex]?.preserveTerminalS === true),
547
+ );
548
+ if (sourceIndex === -1) {
549
+ allTokensFound = false;
550
+ break;
551
+ }
552
+ const candidateNegated = isNegatedAt(candidateTokens, candidateIndex)
553
+ || isDeniedAt(candidateTokens, candidateIndex);
554
+ const sourceNegated = isNegatedAt(sourceTokens, sourceIndex)
555
+ || isDeniedAt(sourceTokens, sourceIndex);
556
+ const candidateNonAssertive = isNonAssertiveReportingAt(candidateTokens, candidateIndex);
557
+ const sourceNonAssertive = isNonAssertiveReportingAt(sourceTokens, sourceIndex);
558
+ if (
559
+ candidateNegated !== sourceNegated
560
+ || candidateNonAssertive !== sourceNonAssertive
561
+ ) {
562
+ contradiction = true;
563
+ }
564
+ sourceCursor = sourceIndex + 1;
565
+ }
566
+ if (allTokensFound) {
567
+ if (!contradiction) return false;
568
+ coherentContradiction = true;
569
+ }
570
+ }
571
+ if (coherentContradiction) return true;
572
+
573
+ const sourceLexemes = groundingLexemes(source);
574
+ const sourceTokens = sourceLexemes.map(({ token }) => token);
575
+ const sourcePositions = new Map<string, number[]>();
576
+ sourceLexemes.forEach(({ token, preserveTerminalS }, index) => {
577
+ const key = stemToken(token, preserveTerminalS);
578
+ const positions = sourcePositions.get(key);
579
+ if (positions) positions.push(index);
580
+ else sourcePositions.set(key, [index]);
581
+ });
582
+ for (const [candidateIndex, token] of candidateTokens.entries()) {
583
+ if (GROUNDING_STOPWORDS[token] === true) continue;
584
+ const positions = sourcePositions.get(
585
+ stemToken(token, candidateLexemes[candidateIndex]?.preserveTerminalS === true),
586
+ );
587
+ if (!positions || positions.length === 0) continue;
588
+ const sourceIndex = positions[positions.length - 1];
589
+ const candidateNegated = isNegatedAt(candidateTokens, candidateIndex)
590
+ || isDeniedAt(candidateTokens, candidateIndex);
591
+ const sourceNegated = isNegatedAt(sourceTokens, sourceIndex)
592
+ || isDeniedAt(sourceTokens, sourceIndex);
593
+ const candidateNonAssertive = isNonAssertiveReportingAt(candidateTokens, candidateIndex);
594
+ const sourceNonAssertive = isNonAssertiveReportingAt(sourceTokens, sourceIndex);
595
+ if (
596
+ candidateNegated !== sourceNegated
597
+ || candidateNonAssertive !== sourceNonAssertive
598
+ ) {
599
+ return true;
600
+ }
601
+ }
602
+ return false;
603
+ }