@remnic/core 10.0.92 → 10.0.94

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 (501) hide show
  1. package/dist/access-admin-ops-surface.js +332 -59
  2. package/dist/access-authorization-probe.js +2 -283
  3. package/dist/access-boundary.d.ts +1 -1
  4. package/dist/access-boundary.d.ts.map +1 -1
  5. package/dist/access-boundary.js +1 -282
  6. package/dist/access-cli.js +287 -303
  7. package/dist/access-cli.js.map +1 -1
  8. package/dist/access-coding-context-resolution.js +3 -3
  9. package/dist/access-extraction-force-flush.js +332 -59
  10. package/dist/access-http-briefing.js +332 -60
  11. package/dist/access-http-query.js +332 -61
  12. package/dist/access-http.js +330 -112
  13. package/dist/access-identity-continuity-surface.js +332 -59
  14. package/dist/access-lcm-surface.js +332 -59
  15. package/dist/access-mcp-frames.d.ts +20 -6
  16. package/dist/access-mcp-frames.d.ts.map +1 -1
  17. package/dist/access-mcp-frames.js +1 -1
  18. package/dist/access-mcp.d.ts +5 -0
  19. package/dist/access-mcp.d.ts.map +1 -1
  20. package/dist/access-mcp.js +330 -87
  21. package/dist/access-namespace-preflight.js +2 -282
  22. package/dist/access-observe-transcript.js +3 -3
  23. package/dist/access-observe-write-category.js +6 -6
  24. package/dist/access-observe-write-surface.js +332 -59
  25. package/dist/access-offline-manifest.js +12 -11
  26. package/dist/access-operations-batch.js +330 -64
  27. package/dist/access-operations.js +330 -73
  28. package/dist/access-recall-concurrency.js +332 -59
  29. package/dist/access-recall-diagnostics.js +5 -4
  30. package/dist/access-recall-response.js +332 -59
  31. package/dist/access-recall-surface.js +332 -59
  32. package/dist/access-schema.js +2 -2
  33. package/dist/access-service.js +335 -62
  34. package/dist/access-surface-catalog.js +6 -283
  35. package/dist/access-surface-catalog.js.map +1 -1
  36. package/dist/active-context-transform.js +1 -1
  37. package/dist/active-memory-bridge.js +3 -2
  38. package/dist/active-recall.js +36 -37
  39. package/dist/active-recall.js.map +1 -1
  40. package/dist/activity/journal-extract.d.ts +13 -1
  41. package/dist/activity/journal-extract.d.ts.map +1 -1
  42. package/dist/{auto-sync-3AZW7MXI.js → auto-sync-BO5YZKM6.js} +13 -15
  43. package/dist/{auto-sync-3AZW7MXI.js.map → auto-sync-BO5YZKM6.js.map} +1 -1
  44. package/dist/briefing.js +20 -20
  45. package/dist/buffer.js +16 -16
  46. package/dist/calibration.js +10 -10
  47. package/dist/{capsule-merge-2IIXFXN5.js → capsule-merge-6IDAYTKG.js} +6 -6
  48. package/dist/causal-consolidation.js +23 -23
  49. package/dist/{chunk-RGUUBAT5.js → chunk-2WCLTWV2.js} +3 -3
  50. package/dist/{chunk-BQZEGOZ4.js → chunk-2YODOG2O.js} +2 -2
  51. package/dist/{chunk-WYG5UNDY.js → chunk-3AUDELZL.js} +2 -2
  52. package/dist/{chunk-MB6ZJDN6.js → chunk-3FBAEPCU.js} +2 -2
  53. package/dist/{chunk-PIITB2YZ.js → chunk-3ZS3NUEI.js} +4 -4
  54. package/dist/{chunk-ATPWZ4F7.js → chunk-4EZWSDFL.js} +5 -5
  55. package/dist/{chunk-ANZZLRUX.js → chunk-4IVRQMZW.js} +2 -2
  56. package/dist/{chunk-63E37JCN.js → chunk-4RAJT5L2.js} +4 -4
  57. package/dist/{chunk-45VUHDV2.js → chunk-5CO5G4MN.js} +2 -2
  58. package/dist/{chunk-LUJCQQ3L.js → chunk-65HWAQ4F.js} +2 -2
  59. package/dist/{chunk-T67LUYCR.js → chunk-77NTFICT.js} +5 -5
  60. package/dist/chunk-A2WFUMUN.js +86 -0
  61. package/dist/chunk-A2WFUMUN.js.map +1 -0
  62. package/dist/{chunk-UE6RRXMF.js → chunk-A4F7OIC5.js} +2 -2
  63. package/dist/chunk-AHA5VQGP.js +117 -0
  64. package/dist/chunk-AHA5VQGP.js.map +1 -0
  65. package/dist/{chunk-RRJBDXAQ.js → chunk-B377OKUP.js} +2 -2
  66. package/dist/{chunk-IUKYFTGW.js → chunk-B3DR2JBZ.js} +140 -125
  67. package/dist/chunk-B3DR2JBZ.js.map +1 -0
  68. package/dist/{chunk-Z7JIZ42P.js → chunk-BN2EBCLB.js} +3 -3
  69. package/dist/{chunk-YYOMGOHB.js → chunk-BOK6BN5M.js} +2 -2
  70. package/dist/{chunk-U6UNF5ZS.js → chunk-BPK32FRM.js} +3 -3
  71. package/dist/{chunk-OH7QLI6W.js → chunk-BPPUH5JM.js} +5 -5
  72. package/dist/{chunk-O6ZSWHVR.js → chunk-C2KE5DMD.js} +4 -4
  73. package/dist/{chunk-47F6WWLQ.js → chunk-C73N66PR.js} +2 -2
  74. package/dist/{chunk-WRT7GJ2D.js → chunk-CIWMTNHW.js} +4 -4
  75. package/dist/{chunk-HF3BKUVV.js → chunk-CL4JU3DF.js} +7 -7
  76. package/dist/{chunk-O55EKIEC.js → chunk-D3ZKHLN2.js} +2 -2
  77. package/dist/chunk-D5S6RL32.js +67137 -0
  78. package/dist/chunk-D5S6RL32.js.map +1 -0
  79. package/dist/{chunk-ETZLQOUR.js → chunk-D5XG2KPS.js} +2 -2
  80. package/dist/{chunk-CD4BCCNP.js → chunk-DJ7WVEWX.js} +2 -2
  81. package/dist/{chunk-PWXPRVLK.js → chunk-DNY63QWJ.js} +2 -2
  82. package/dist/{chunk-4CJTQHEG.js → chunk-ESLOLCD4.js} +3 -3
  83. package/dist/{chunk-VILPVT4S.js → chunk-EZ47HOJ6.js} +4 -4
  84. package/dist/{chunk-EFYN5I7Z.js → chunk-F4QFU5IZ.js} +2 -2
  85. package/dist/{chunk-T6OZW2WR.js → chunk-FA7SLQ5X.js} +7 -1
  86. package/dist/chunk-FA7SLQ5X.js.map +1 -0
  87. package/dist/{chunk-BRLXOZLM.js → chunk-FQAQ63QA.js} +729 -17
  88. package/dist/chunk-FQAQ63QA.js.map +1 -0
  89. package/dist/{chunk-FSO3G4JJ.js → chunk-FWRXW7CZ.js} +5000 -2748
  90. package/dist/chunk-FWRXW7CZ.js.map +1 -0
  91. package/dist/{chunk-XYKBWTWI.js → chunk-FZZMLGWQ.js} +2 -2
  92. package/dist/{chunk-FNXQZGUS.js → chunk-GBJUTX44.js} +2 -2
  93. package/dist/{chunk-YLXETSAH.js → chunk-GCZJ7XRI.js} +2 -2
  94. package/dist/{chunk-UDKWFDV2.js → chunk-HLUHEMN4.js} +27 -3
  95. package/dist/chunk-HLUHEMN4.js.map +1 -0
  96. package/dist/{chunk-SUSW74WU.js → chunk-IL3RHBWM.js} +56 -5
  97. package/dist/chunk-IL3RHBWM.js.map +1 -0
  98. package/dist/{chunk-JV4S6VDH.js → chunk-ILY5SSOM.js} +2 -2
  99. package/dist/{chunk-EXHXJETE.js → chunk-IQ55QGY5.js} +2 -2
  100. package/dist/{chunk-4J363OAA.js → chunk-J7BIFOYP.js} +2 -2
  101. package/dist/{chunk-QFEDITXM.js → chunk-JNDMIAJ4.js} +2 -2
  102. package/dist/chunk-JTSSSR4L.js +359 -0
  103. package/dist/chunk-JTSSSR4L.js.map +1 -0
  104. package/dist/{chunk-5KBIOI4G.js → chunk-JVBAPAWZ.js} +217 -13
  105. package/dist/chunk-JVBAPAWZ.js.map +1 -0
  106. package/dist/{chunk-E5PPE4VA.js → chunk-K2VRKCPA.js} +2 -2
  107. package/dist/{chunk-MKRYQROF.js → chunk-LGEHAQHK.js} +4 -4
  108. package/dist/{chunk-7HTUYFR3.js → chunk-LLPMMMWG.js} +27 -10
  109. package/dist/chunk-LLPMMMWG.js.map +1 -0
  110. package/dist/{chunk-XYTQJD7F.js → chunk-LMJVP5CM.js} +2 -2
  111. package/dist/{chunk-E7YZXWIS.js → chunk-LNGELD2M.js} +2 -2
  112. package/dist/{chunk-FQKBJJYB.js → chunk-LPV72KRQ.js} +2 -2
  113. package/dist/{chunk-2LCRG2YV.js → chunk-M2XR6B6V.js} +2 -2
  114. package/dist/{chunk-EQ4U73UH.js → chunk-MLAMXQAW.js} +14 -2
  115. package/dist/chunk-MLAMXQAW.js.map +1 -0
  116. package/dist/{chunk-ZU5JDLOH.js → chunk-MMRTPH3J.js} +2 -2
  117. package/dist/{chunk-TVIVY7KU.js → chunk-NED7IR7B.js} +4 -4
  118. package/dist/{chunk-6F5MJFXY.js → chunk-NHVAX7MH.js} +2 -2
  119. package/dist/{chunk-TG3R2SID.js → chunk-NMGHGTVR.js} +5 -5
  120. package/dist/{chunk-YCNIGRRF.js → chunk-NS7U4ZYU.js} +13 -117
  121. package/dist/chunk-NS7U4ZYU.js.map +1 -0
  122. package/dist/{chunk-NGHDW6UU.js → chunk-NUQEREIP.js} +2 -2
  123. package/dist/{chunk-5IIQU4JZ.js → chunk-OB72KNMF.js} +4 -4
  124. package/dist/{chunk-RIMK327Y.js → chunk-OUVYYKYU.js} +7 -7
  125. package/dist/{chunk-QJPJXCS4.js → chunk-P3WRNWWM.js} +157 -4
  126. package/dist/chunk-P3WRNWWM.js.map +1 -0
  127. package/dist/{chunk-E6M225BJ.js → chunk-PC5DRBGD.js} +18 -8
  128. package/dist/chunk-PC5DRBGD.js.map +1 -0
  129. package/dist/{chunk-RWGRSKN5.js → chunk-PT4DZDJA.js} +2 -2
  130. package/dist/{chunk-7EPY3IQL.js → chunk-PZJQ46DH.js} +2 -2
  131. package/dist/{chunk-MXHMNKWG.js → chunk-QDESY76F.js} +3 -3
  132. package/dist/{chunk-E3A7ELSG.js → chunk-QHARXWTC.js} +2 -2
  133. package/dist/{chunk-BLJT6JP2.js → chunk-QMFAMOT2.js} +2 -2
  134. package/dist/{chunk-I6QGI65T.js → chunk-QRMG4HK4.js} +3 -3
  135. package/dist/{chunk-ZU3NJNO7.js → chunk-QSF5SJAM.js} +4 -4
  136. package/dist/{chunk-5IYOKDM4.js → chunk-R23JWJD3.js} +5 -5
  137. package/dist/{chunk-RHQLIHMB.js → chunk-R4BBGPI2.js} +218 -218
  138. package/dist/chunk-R4BBGPI2.js.map +1 -0
  139. package/dist/{chunk-NT7F7WJQ.js → chunk-RFUL2ZIQ.js} +291 -93
  140. package/dist/chunk-RFUL2ZIQ.js.map +1 -0
  141. package/dist/{chunk-E4IRW2FG.js → chunk-RKABLU5M.js} +233 -40
  142. package/dist/chunk-RKABLU5M.js.map +1 -0
  143. package/dist/{chunk-P4WNBSTW.js → chunk-RNG7S3FY.js} +2 -2
  144. package/dist/{chunk-IPT2OY4B.js → chunk-RQFXZYTF.js} +35 -33
  145. package/dist/chunk-RQFXZYTF.js.map +1 -0
  146. package/dist/{chunk-5HFXGXE5.js → chunk-RUTN5MMC.js} +7 -9
  147. package/dist/{chunk-5HFXGXE5.js.map → chunk-RUTN5MMC.js.map} +1 -1
  148. package/dist/{chunk-AP6NCP3V.js → chunk-S3S72HRM.js} +8 -6
  149. package/dist/chunk-S3S72HRM.js.map +1 -0
  150. package/dist/{chunk-ZGFLIK5H.js → chunk-SPAKBUJY.js} +2 -2
  151. package/dist/{chunk-ER7XANP3.js → chunk-SQ3GEIEL.js} +4 -4
  152. package/dist/{chunk-PMJFRDJI.js → chunk-SUTEBYGI.js} +2 -2
  153. package/dist/{chunk-HVX4LPNY.js → chunk-T4KY6UYF.js} +5 -3
  154. package/dist/{chunk-HVX4LPNY.js.map → chunk-T4KY6UYF.js.map} +1 -1
  155. package/dist/{chunk-R6HMAIKM.js → chunk-TOSPNM4T.js} +2 -2
  156. package/dist/{chunk-RMXS4I66.js → chunk-TVDJEUV5.js} +2 -2
  157. package/dist/{chunk-PLCYKAWH.js → chunk-TYRWSE4B.js} +2 -2
  158. package/dist/{chunk-B4QYQFGY.js → chunk-UBEKET2V.js} +383 -36
  159. package/dist/chunk-UBEKET2V.js.map +1 -0
  160. package/dist/{chunk-IQWUACVG.js → chunk-UHMHJX5G.js} +3 -3
  161. package/dist/{chunk-YODUDA6R.js → chunk-UN4RVUG2.js} +22 -22
  162. package/dist/{chunk-E6Z4FBX6.js → chunk-V2QSNFCT.js} +2 -2
  163. package/dist/{chunk-NBH6K6G5.js → chunk-V65H7MI6.js} +345 -16
  164. package/dist/chunk-V65H7MI6.js.map +1 -0
  165. package/dist/chunk-W54Z2MOP.js +4500 -0
  166. package/dist/chunk-W54Z2MOP.js.map +1 -0
  167. package/dist/{chunk-7W3RXOIG.js → chunk-WGGRZYSQ.js} +14 -14
  168. package/dist/{chunk-RIZ5NUNN.js → chunk-WQ4XKIOX.js} +4 -4
  169. package/dist/{chunk-QEYTRFR3.js → chunk-X26YOFGS.js} +2 -2
  170. package/dist/{chunk-ITHZFHST.js → chunk-X2BVB74H.js} +2 -2
  171. package/dist/{chunk-6F42QONS.js → chunk-X5HGU2EM.js} +4 -4
  172. package/dist/{chunk-GVGAO3WV.js → chunk-XJ2S5UBF.js} +3 -3
  173. package/dist/{chunk-IBJ6U753.js → chunk-XKZBZOKV.js} +4 -4
  174. package/dist/{chunk-65AUYLU3.js → chunk-XPXHQI6N.js} +2 -2
  175. package/dist/chunk-XRWWCW4H.js +102 -0
  176. package/dist/chunk-XRWWCW4H.js.map +1 -0
  177. package/dist/{chunk-HH5LY6RR.js → chunk-YIXJSW5M.js} +5 -5
  178. package/dist/{chunk-2JSDPUKD.js → chunk-YMFPFXEX.js} +2 -2
  179. package/dist/{chunk-N4KAE2NB.js → chunk-Z3FTSHT5.js} +3 -3
  180. package/dist/{chunk-7GLJMDEQ.js → chunk-ZDV5YWID.js} +6 -6
  181. package/dist/{chunk-645WOU5I.js → chunk-ZDZJNXL6.js} +4 -4
  182. package/dist/{chunk-6TCXIRP5.js → chunk-ZKE4CO6B.js} +4 -4
  183. package/dist/cli.js +303 -185
  184. package/dist/coding/export-okf-codegraph.js +29 -29
  185. package/dist/compounding/engine.js +23 -24
  186. package/dist/config.js +36 -37
  187. package/dist/connectors/codex-materialize-runner.js +20 -20
  188. package/dist/connectors/index.js +21 -21
  189. package/dist/connectors/live/google-drive.d.ts +2 -0
  190. package/dist/connectors/live/google-drive.d.ts.map +1 -1
  191. package/dist/consolidation-provenance-check.js +4 -4
  192. package/dist/consolidation-undo.js +5 -5
  193. package/dist/contradiction/index.js +7 -6
  194. package/dist/{contradiction-scan-P2MHYFVG.js → contradiction-scan-IBPYGQZF.js} +4 -3
  195. package/dist/convergence-refresh.js +22 -22
  196. package/dist/corpus-watermark.js +23 -23
  197. package/dist/deep-recall-http-glue.js +2 -2
  198. package/dist/deep-recall-policy-llm.js +4 -4
  199. package/dist/direct-answer-wiring.js +2 -2
  200. package/dist/embedding-fallback.js +1 -1
  201. package/dist/entity-retrieval.js +21 -21
  202. package/dist/eval-trajectory-store.js +2 -2
  203. package/dist/eval-trajectory.js +2 -2
  204. package/dist/event-order-recall.js +2 -2
  205. package/dist/explicit-capture.d.ts +3 -2
  206. package/dist/explicit-capture.d.ts.map +1 -1
  207. package/dist/explicit-capture.js +530 -6
  208. package/dist/explicit-cue-recall.js +2 -2
  209. package/dist/external-wiki-access.js +2 -283
  210. package/dist/extraction-faithfulness.js +4 -4
  211. package/dist/extraction-judge.js +5 -5
  212. package/dist/extraction-normalization.js +1 -1
  213. package/dist/extraction-quote-grounding.d.ts.map +1 -1
  214. package/dist/extraction-quote-grounding.js +1 -1
  215. package/dist/extraction-source-grounding-rules.js +2 -2
  216. package/dist/extraction-source-grounding.js +3 -3
  217. package/dist/extraction.js +43 -44
  218. package/dist/fallback-llm-codex-subscription.js +2 -2
  219. package/dist/fallback-llm.js +3 -3
  220. package/dist/{first-start-migration-QFI7B5SH.js → first-start-migration-FILJH3RO.js} +6 -5
  221. package/dist/{first-start-migration-QFI7B5SH.js.map → first-start-migration-FILJH3RO.js.map} +1 -1
  222. package/dist/focused-list-recall.js +2 -2
  223. package/dist/harmonic-retrieval.js +20 -20
  224. package/dist/index.js +773 -794
  225. package/dist/lcm/index.js +2 -2
  226. package/dist/live-connectors-runner.js +2 -3
  227. package/dist/local-llm-config.js +2 -2
  228. package/dist/local-llm-helpers.d.ts +4 -0
  229. package/dist/local-llm-helpers.d.ts.map +1 -1
  230. package/dist/local-llm-helpers.js +3 -1
  231. package/dist/local-llm.d.ts +4 -1
  232. package/dist/local-llm.d.ts.map +1 -1
  233. package/dist/local-llm.js +4 -4
  234. package/dist/location/index.js +27 -29
  235. package/dist/maintenance/memory-governance.js +20 -20
  236. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +20 -20
  237. package/dist/maintenance/rebuild-memory-projection-runner.js +22 -22
  238. package/dist/maintenance/rebuild-memory-projection.js +21 -21
  239. package/dist/memory-browse-operations.js +2 -283
  240. package/dist/memory-browse.js +8 -7
  241. package/dist/memory-controller.js +2 -2
  242. package/dist/memory-subject.js +2 -2
  243. package/dist/namespaces/migrate.js +21 -21
  244. package/dist/namespaces/search.js +5 -5
  245. package/dist/namespaces/storage.js +20 -20
  246. package/dist/offline-sync-changeset-generations.js +1 -1
  247. package/dist/offline-sync-embedding-generation.js +1 -1
  248. package/dist/offline-sync-impression-drain.js +6 -6
  249. package/dist/offline-sync-snapshot-stream.js +1 -1
  250. package/dist/offline-sync.js +1 -1
  251. package/dist/operator-doctor-corpus.js +24 -24
  252. package/dist/operator-toolkit.js +58 -61
  253. package/dist/orchestration/backlog-scheduler.js +278 -294
  254. package/dist/orchestration/backlog-scheduler.js.map +1 -1
  255. package/dist/orchestration/buffer-drain-runner.js +278 -294
  256. package/dist/orchestration/extraction-run.d.ts +4 -0
  257. package/dist/orchestration/extraction-run.d.ts.map +1 -1
  258. package/dist/orchestration/fact-dedup-window.d.ts +1 -1
  259. package/dist/orchestration/fact-dedup-window.d.ts.map +1 -1
  260. package/dist/orchestration/maintenance.js +39 -42
  261. package/dist/orchestrator.d.ts +9 -11
  262. package/dist/orchestrator.d.ts.map +1 -1
  263. package/dist/orchestrator.js +290 -307
  264. package/dist/page-versioning.js +3 -3
  265. package/dist/qmd-daemon-session.js +2 -2
  266. package/dist/qmd.js +3 -3
  267. package/dist/recall-explain-renderer.js +1 -1
  268. package/dist/recall-navigation-operations.js +2 -283
  269. package/dist/recall-navigation.js +332 -59
  270. package/dist/recall-planner-llm.js +3 -3
  271. package/dist/recall-state-view-admission.js +6 -6
  272. package/dist/recall-why-service.js +10 -9
  273. package/dist/recall-why.js +4 -3
  274. package/dist/recall-xray-cli.js +2 -2
  275. package/dist/recall-xray-renderer.js +1 -1
  276. package/dist/reconcile/manifest.js +3 -3
  277. package/dist/{resolution-N7H3F2E4.js → resolution-OVVIF7ZY.js} +8 -7
  278. package/dist/response-guidance-recall.js +2 -2
  279. package/dist/resume-bundles.js +40 -41
  280. package/dist/salvage-envelope.js +4 -4
  281. package/dist/search/factory.js +4 -4
  282. package/dist/search/index.js +4 -4
  283. package/dist/semantic-consolidation.js +23 -23
  284. package/dist/semantic-rule-promotion.js +20 -20
  285. package/dist/semantic-rule-verifier.js +20 -20
  286. package/dist/shared-context/manager.js +2 -3
  287. package/dist/source-agent-qualifier.js +32 -33
  288. package/dist/standup/build.js +20 -20
  289. package/dist/storage/buffer-drain-claims.d.ts +97 -12
  290. package/dist/storage/buffer-drain-claims.d.ts.map +1 -1
  291. package/dist/storage/buffer-drain-claims.js +1 -1
  292. package/dist/storage/buffer-session-files.d.ts +4 -0
  293. package/dist/storage/buffer-session-files.d.ts.map +1 -1
  294. package/dist/storage/buffer-session-files.js +1 -1
  295. package/dist/storage/content-hash-index.d.ts +10 -0
  296. package/dist/storage/content-hash-index.d.ts.map +1 -1
  297. package/dist/storage.d.ts.map +1 -1
  298. package/dist/storage.js +19 -19
  299. package/dist/subject-config.js +3 -3
  300. package/dist/summarizer.d.ts +4 -1
  301. package/dist/summarizer.d.ts.map +1 -1
  302. package/dist/summarizer.js +6 -6
  303. package/dist/support-passport/index.js +53 -297
  304. package/dist/targeted-fact-recall.js +2 -2
  305. package/dist/tier-routing.js +3 -2
  306. package/dist/{tier-stats-FQGQSFET.js → tier-stats-FXEUJN73.js} +6 -5
  307. package/dist/{tier-stats-FQGQSFET.js.map → tier-stats-FXEUJN73.js.map} +1 -1
  308. package/dist/transcript.js +2 -2
  309. package/dist/transfer/capsule-import.js +4 -4
  310. package/dist/transfer/export-okf.js +20 -20
  311. package/dist/verified-recall.js +20 -20
  312. package/dist/wearables/memory-gen.d.ts +5 -1
  313. package/dist/wearables/memory-gen.d.ts.map +1 -1
  314. package/dist/wearables/service.d.ts.map +1 -1
  315. package/dist/who-knows-cli.js +21 -21
  316. package/dist/who-knows.js +20 -20
  317. package/dist/write-envelope.js +3 -3
  318. package/package.json +2 -2
  319. package/src/access-boundary.ts +5 -1
  320. package/src/access-category-alias.test.ts +5 -0
  321. package/src/access-mcp-frames.test.ts +60 -5
  322. package/src/access-mcp-frames.ts +72 -18
  323. package/src/access-mcp.test.ts +66 -2
  324. package/src/access-mcp.ts +19 -13
  325. package/src/access-service-coding-write.test.ts +7 -0
  326. package/src/activity/journal-extract-storage.test.ts +31 -0
  327. package/src/activity/journal-extract.test.ts +1 -0
  328. package/src/activity/journal-extract.ts +24 -3
  329. package/src/buffer-drain-handover.test.ts +5 -1
  330. package/src/connectors/live/google-drive.test.ts +39 -0
  331. package/src/connectors/live/google-drive.ts +41 -12
  332. package/src/explicit-capture.test.ts +109 -17
  333. package/src/explicit-capture.ts +90 -37
  334. package/src/extraction-quote-grounding.test.ts +20 -0
  335. package/src/extraction-quote-grounding.ts +21 -11
  336. package/src/fact-dedup-window.test.ts +37 -0
  337. package/src/local-llm-helpers.ts +12 -0
  338. package/src/local-llm-shutdown.test.ts +194 -0
  339. package/src/local-llm.ts +32 -30
  340. package/src/orchestration/extraction-run.ts +12 -3
  341. package/src/orchestration/fact-dedup-window.ts +5 -1
  342. package/src/orchestrator-connector-dedup.test.ts +9 -5
  343. package/src/orchestrator.ts +47 -50
  344. package/src/storage/buffer-drain-claims.test.ts +385 -1
  345. package/src/storage/buffer-drain-claims.ts +380 -97
  346. package/src/storage/buffer-session-files.ts +4 -0
  347. package/src/storage/content-hash-index.ts +27 -2
  348. package/src/storage-fact-hash-publish-failure.test.ts +87 -0
  349. package/src/storage.ts +5 -1
  350. package/src/summarizer-shutdown.test.ts +195 -0
  351. package/src/summarizer.ts +15 -2
  352. package/src/wearables/memory-gen.test.ts +20 -0
  353. package/src/wearables/memory-gen.ts +14 -7
  354. package/src/wearables/service.ts +14 -1
  355. package/src/wearables/storage-io.test.ts +25 -0
  356. package/dist/chunk-2FGLEF7C.js +0 -61
  357. package/dist/chunk-2FGLEF7C.js.map +0 -1
  358. package/dist/chunk-3RLK65ZK.js +0 -203
  359. package/dist/chunk-3RLK65ZK.js.map +0 -1
  360. package/dist/chunk-4WR2OD7K.js +0 -43
  361. package/dist/chunk-4WR2OD7K.js.map +0 -1
  362. package/dist/chunk-5KBIOI4G.js.map +0 -1
  363. package/dist/chunk-5M5M22GW.js +0 -346
  364. package/dist/chunk-5M5M22GW.js.map +0 -1
  365. package/dist/chunk-7HTUYFR3.js.map +0 -1
  366. package/dist/chunk-AP6NCP3V.js.map +0 -1
  367. package/dist/chunk-B4QYQFGY.js.map +0 -1
  368. package/dist/chunk-BJRTMNCB.js +0 -1919
  369. package/dist/chunk-BJRTMNCB.js.map +0 -1
  370. package/dist/chunk-BRLXOZLM.js.map +0 -1
  371. package/dist/chunk-BSACVS6R.js +0 -621
  372. package/dist/chunk-BSACVS6R.js.map +0 -1
  373. package/dist/chunk-DKAA2IHQ.js +0 -3644
  374. package/dist/chunk-DKAA2IHQ.js.map +0 -1
  375. package/dist/chunk-E4IRW2FG.js.map +0 -1
  376. package/dist/chunk-E6M225BJ.js.map +0 -1
  377. package/dist/chunk-EQ4U73UH.js.map +0 -1
  378. package/dist/chunk-ETSJD5IV.js +0 -361
  379. package/dist/chunk-ETSJD5IV.js.map +0 -1
  380. package/dist/chunk-F55YQP7N.js +0 -336
  381. package/dist/chunk-F55YQP7N.js.map +0 -1
  382. package/dist/chunk-FHGWKODN.js +0 -2300
  383. package/dist/chunk-FHGWKODN.js.map +0 -1
  384. package/dist/chunk-FLRP63GU.js +0 -32219
  385. package/dist/chunk-FLRP63GU.js.map +0 -1
  386. package/dist/chunk-FSO3G4JJ.js.map +0 -1
  387. package/dist/chunk-ID6JGIMD.js +0 -25
  388. package/dist/chunk-ID6JGIMD.js.map +0 -1
  389. package/dist/chunk-IGLJNHOX.js +0 -62
  390. package/dist/chunk-IGLJNHOX.js.map +0 -1
  391. package/dist/chunk-IPT2OY4B.js.map +0 -1
  392. package/dist/chunk-IUKYFTGW.js.map +0 -1
  393. package/dist/chunk-NBH6K6G5.js.map +0 -1
  394. package/dist/chunk-NT7F7WJQ.js.map +0 -1
  395. package/dist/chunk-NTRUKAAE.js +0 -223
  396. package/dist/chunk-NTRUKAAE.js.map +0 -1
  397. package/dist/chunk-OGXXGHW6.js +0 -223
  398. package/dist/chunk-OGXXGHW6.js.map +0 -1
  399. package/dist/chunk-PPCLZ4JU.js +0 -28
  400. package/dist/chunk-PPCLZ4JU.js.map +0 -1
  401. package/dist/chunk-QJPJXCS4.js.map +0 -1
  402. package/dist/chunk-R2LBF4HH.js +0 -729
  403. package/dist/chunk-R2LBF4HH.js.map +0 -1
  404. package/dist/chunk-RHQLIHMB.js.map +0 -1
  405. package/dist/chunk-RRTVGD3J.js +0 -792
  406. package/dist/chunk-RRTVGD3J.js.map +0 -1
  407. package/dist/chunk-SUSW74WU.js.map +0 -1
  408. package/dist/chunk-T6OZW2WR.js.map +0 -1
  409. package/dist/chunk-UDKWFDV2.js.map +0 -1
  410. package/dist/chunk-V7IZKJI3.js +0 -22
  411. package/dist/chunk-V7IZKJI3.js.map +0 -1
  412. package/dist/chunk-X562NQFA.js +0 -10144
  413. package/dist/chunk-X562NQFA.js.map +0 -1
  414. package/dist/chunk-XDSCJOH7.js +0 -3991
  415. package/dist/chunk-XDSCJOH7.js.map +0 -1
  416. package/dist/chunk-YCNIGRRF.js.map +0 -1
  417. package/dist/chunk-ZTTCDQ4I.js +0 -18796
  418. package/dist/chunk-ZTTCDQ4I.js.map +0 -1
  419. /package/dist/{capsule-merge-2IIXFXN5.js.map → capsule-merge-6IDAYTKG.js.map} +0 -0
  420. /package/dist/{chunk-RGUUBAT5.js.map → chunk-2WCLTWV2.js.map} +0 -0
  421. /package/dist/{chunk-BQZEGOZ4.js.map → chunk-2YODOG2O.js.map} +0 -0
  422. /package/dist/{chunk-WYG5UNDY.js.map → chunk-3AUDELZL.js.map} +0 -0
  423. /package/dist/{chunk-MB6ZJDN6.js.map → chunk-3FBAEPCU.js.map} +0 -0
  424. /package/dist/{chunk-PIITB2YZ.js.map → chunk-3ZS3NUEI.js.map} +0 -0
  425. /package/dist/{chunk-ATPWZ4F7.js.map → chunk-4EZWSDFL.js.map} +0 -0
  426. /package/dist/{chunk-ANZZLRUX.js.map → chunk-4IVRQMZW.js.map} +0 -0
  427. /package/dist/{chunk-63E37JCN.js.map → chunk-4RAJT5L2.js.map} +0 -0
  428. /package/dist/{chunk-45VUHDV2.js.map → chunk-5CO5G4MN.js.map} +0 -0
  429. /package/dist/{chunk-LUJCQQ3L.js.map → chunk-65HWAQ4F.js.map} +0 -0
  430. /package/dist/{chunk-T67LUYCR.js.map → chunk-77NTFICT.js.map} +0 -0
  431. /package/dist/{chunk-UE6RRXMF.js.map → chunk-A4F7OIC5.js.map} +0 -0
  432. /package/dist/{chunk-RRJBDXAQ.js.map → chunk-B377OKUP.js.map} +0 -0
  433. /package/dist/{chunk-Z7JIZ42P.js.map → chunk-BN2EBCLB.js.map} +0 -0
  434. /package/dist/{chunk-YYOMGOHB.js.map → chunk-BOK6BN5M.js.map} +0 -0
  435. /package/dist/{chunk-U6UNF5ZS.js.map → chunk-BPK32FRM.js.map} +0 -0
  436. /package/dist/{chunk-OH7QLI6W.js.map → chunk-BPPUH5JM.js.map} +0 -0
  437. /package/dist/{chunk-O6ZSWHVR.js.map → chunk-C2KE5DMD.js.map} +0 -0
  438. /package/dist/{chunk-47F6WWLQ.js.map → chunk-C73N66PR.js.map} +0 -0
  439. /package/dist/{chunk-WRT7GJ2D.js.map → chunk-CIWMTNHW.js.map} +0 -0
  440. /package/dist/{chunk-HF3BKUVV.js.map → chunk-CL4JU3DF.js.map} +0 -0
  441. /package/dist/{chunk-O55EKIEC.js.map → chunk-D3ZKHLN2.js.map} +0 -0
  442. /package/dist/{chunk-ETZLQOUR.js.map → chunk-D5XG2KPS.js.map} +0 -0
  443. /package/dist/{chunk-CD4BCCNP.js.map → chunk-DJ7WVEWX.js.map} +0 -0
  444. /package/dist/{chunk-PWXPRVLK.js.map → chunk-DNY63QWJ.js.map} +0 -0
  445. /package/dist/{chunk-4CJTQHEG.js.map → chunk-ESLOLCD4.js.map} +0 -0
  446. /package/dist/{chunk-VILPVT4S.js.map → chunk-EZ47HOJ6.js.map} +0 -0
  447. /package/dist/{chunk-EFYN5I7Z.js.map → chunk-F4QFU5IZ.js.map} +0 -0
  448. /package/dist/{chunk-XYKBWTWI.js.map → chunk-FZZMLGWQ.js.map} +0 -0
  449. /package/dist/{chunk-FNXQZGUS.js.map → chunk-GBJUTX44.js.map} +0 -0
  450. /package/dist/{chunk-YLXETSAH.js.map → chunk-GCZJ7XRI.js.map} +0 -0
  451. /package/dist/{chunk-JV4S6VDH.js.map → chunk-ILY5SSOM.js.map} +0 -0
  452. /package/dist/{chunk-EXHXJETE.js.map → chunk-IQ55QGY5.js.map} +0 -0
  453. /package/dist/{chunk-4J363OAA.js.map → chunk-J7BIFOYP.js.map} +0 -0
  454. /package/dist/{chunk-QFEDITXM.js.map → chunk-JNDMIAJ4.js.map} +0 -0
  455. /package/dist/{chunk-E5PPE4VA.js.map → chunk-K2VRKCPA.js.map} +0 -0
  456. /package/dist/{chunk-MKRYQROF.js.map → chunk-LGEHAQHK.js.map} +0 -0
  457. /package/dist/{chunk-XYTQJD7F.js.map → chunk-LMJVP5CM.js.map} +0 -0
  458. /package/dist/{chunk-E7YZXWIS.js.map → chunk-LNGELD2M.js.map} +0 -0
  459. /package/dist/{chunk-FQKBJJYB.js.map → chunk-LPV72KRQ.js.map} +0 -0
  460. /package/dist/{chunk-2LCRG2YV.js.map → chunk-M2XR6B6V.js.map} +0 -0
  461. /package/dist/{chunk-ZU5JDLOH.js.map → chunk-MMRTPH3J.js.map} +0 -0
  462. /package/dist/{chunk-TVIVY7KU.js.map → chunk-NED7IR7B.js.map} +0 -0
  463. /package/dist/{chunk-6F5MJFXY.js.map → chunk-NHVAX7MH.js.map} +0 -0
  464. /package/dist/{chunk-TG3R2SID.js.map → chunk-NMGHGTVR.js.map} +0 -0
  465. /package/dist/{chunk-NGHDW6UU.js.map → chunk-NUQEREIP.js.map} +0 -0
  466. /package/dist/{chunk-5IIQU4JZ.js.map → chunk-OB72KNMF.js.map} +0 -0
  467. /package/dist/{chunk-RIMK327Y.js.map → chunk-OUVYYKYU.js.map} +0 -0
  468. /package/dist/{chunk-RWGRSKN5.js.map → chunk-PT4DZDJA.js.map} +0 -0
  469. /package/dist/{chunk-7EPY3IQL.js.map → chunk-PZJQ46DH.js.map} +0 -0
  470. /package/dist/{chunk-MXHMNKWG.js.map → chunk-QDESY76F.js.map} +0 -0
  471. /package/dist/{chunk-E3A7ELSG.js.map → chunk-QHARXWTC.js.map} +0 -0
  472. /package/dist/{chunk-BLJT6JP2.js.map → chunk-QMFAMOT2.js.map} +0 -0
  473. /package/dist/{chunk-I6QGI65T.js.map → chunk-QRMG4HK4.js.map} +0 -0
  474. /package/dist/{chunk-ZU3NJNO7.js.map → chunk-QSF5SJAM.js.map} +0 -0
  475. /package/dist/{chunk-5IYOKDM4.js.map → chunk-R23JWJD3.js.map} +0 -0
  476. /package/dist/{chunk-P4WNBSTW.js.map → chunk-RNG7S3FY.js.map} +0 -0
  477. /package/dist/{chunk-ZGFLIK5H.js.map → chunk-SPAKBUJY.js.map} +0 -0
  478. /package/dist/{chunk-ER7XANP3.js.map → chunk-SQ3GEIEL.js.map} +0 -0
  479. /package/dist/{chunk-PMJFRDJI.js.map → chunk-SUTEBYGI.js.map} +0 -0
  480. /package/dist/{chunk-R6HMAIKM.js.map → chunk-TOSPNM4T.js.map} +0 -0
  481. /package/dist/{chunk-RMXS4I66.js.map → chunk-TVDJEUV5.js.map} +0 -0
  482. /package/dist/{chunk-PLCYKAWH.js.map → chunk-TYRWSE4B.js.map} +0 -0
  483. /package/dist/{chunk-IQWUACVG.js.map → chunk-UHMHJX5G.js.map} +0 -0
  484. /package/dist/{chunk-YODUDA6R.js.map → chunk-UN4RVUG2.js.map} +0 -0
  485. /package/dist/{chunk-E6Z4FBX6.js.map → chunk-V2QSNFCT.js.map} +0 -0
  486. /package/dist/{chunk-7W3RXOIG.js.map → chunk-WGGRZYSQ.js.map} +0 -0
  487. /package/dist/{chunk-RIZ5NUNN.js.map → chunk-WQ4XKIOX.js.map} +0 -0
  488. /package/dist/{chunk-QEYTRFR3.js.map → chunk-X26YOFGS.js.map} +0 -0
  489. /package/dist/{chunk-ITHZFHST.js.map → chunk-X2BVB74H.js.map} +0 -0
  490. /package/dist/{chunk-6F42QONS.js.map → chunk-X5HGU2EM.js.map} +0 -0
  491. /package/dist/{chunk-GVGAO3WV.js.map → chunk-XJ2S5UBF.js.map} +0 -0
  492. /package/dist/{chunk-IBJ6U753.js.map → chunk-XKZBZOKV.js.map} +0 -0
  493. /package/dist/{chunk-65AUYLU3.js.map → chunk-XPXHQI6N.js.map} +0 -0
  494. /package/dist/{chunk-HH5LY6RR.js.map → chunk-YIXJSW5M.js.map} +0 -0
  495. /package/dist/{chunk-2JSDPUKD.js.map → chunk-YMFPFXEX.js.map} +0 -0
  496. /package/dist/{chunk-N4KAE2NB.js.map → chunk-Z3FTSHT5.js.map} +0 -0
  497. /package/dist/{chunk-7GLJMDEQ.js.map → chunk-ZDV5YWID.js.map} +0 -0
  498. /package/dist/{chunk-645WOU5I.js.map → chunk-ZDZJNXL6.js.map} +0 -0
  499. /package/dist/{chunk-6TCXIRP5.js.map → chunk-ZKE4CO6B.js.map} +0 -0
  500. /package/dist/{contradiction-scan-P2MHYFVG.js.map → contradiction-scan-IBPYGQZF.js.map} +0 -0
  501. /package/dist/{resolution-N7H3F2E4.js.map → resolution-OVVIF7ZY.js.map} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-QDW3E4RD.js";
7
7
  import {
8
8
  gatewayTaskChainOptions
9
- } from "./chunk-ZU5JDLOH.js";
9
+ } from "./chunk-MMRTPH3J.js";
10
10
  import {
11
11
  extractJsonCandidates
12
12
  } from "./chunk-YBA52OKG.js";
@@ -496,4 +496,4 @@ export {
496
496
  createVerdictCache,
497
497
  createDeferCountMap
498
498
  };
499
- //# sourceMappingURL=chunk-XYTQJD7F.js.map
499
+ //# sourceMappingURL=chunk-LMJVP5CM.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KJTKLXTH.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-FSO3G4JJ.js";
6
+ } from "./chunk-FWRXW7CZ.js";
7
7
  import {
8
8
  assertInjectedStorageRooted
9
9
  } from "./chunk-BNZAR6PO.js";
@@ -260,4 +260,4 @@ export {
260
260
  backupExistingLedger,
261
261
  rebuildMemoryLifecycleLedger
262
262
  };
263
- //# sourceMappingURL=chunk-E7YZXWIS.js.map
263
+ //# sourceMappingURL=chunk-LNGELD2M.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  defineOperation
3
- } from "./chunk-ZTTCDQ4I.js";
3
+ } from "./chunk-JTSSSR4L.js";
4
4
  import {
5
5
  EngramAccessInputError
6
6
  } from "./chunk-CJCTKL6Y.js";
@@ -71,4 +71,4 @@ defineOperation({
71
71
  })
72
72
  })
73
73
  });
74
- //# sourceMappingURL=chunk-FQKBJJYB.js.map
74
+ //# sourceMappingURL=chunk-LPV72KRQ.js.map
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-7RJUVTVF.js";
13
13
  import {
14
14
  ContentHashIndex
15
- } from "./chunk-UDKWFDV2.js";
15
+ } from "./chunk-HLUHEMN4.js";
16
16
  import {
17
17
  computeLegacyContentHash,
18
18
  normalizeLegacyContent
@@ -348,4 +348,4 @@ export {
348
348
  buildReconcileManifest,
349
349
  collapseActiveFactDuplicates
350
350
  };
351
- //# sourceMappingURL=chunk-2LCRG2YV.js.map
351
+ //# sourceMappingURL=chunk-M2XR6B6V.js.map
@@ -123,6 +123,10 @@ function negatedScope(clause) {
123
123
  const match = NEGATOR_PATTERN.exec(clause.replace(/[\u2018\u2019]/gu, "'"));
124
124
  return match ? clause.slice(match.index + match[0].length) : clause;
125
125
  }
126
+ function textBeforeNegator(clause) {
127
+ const match = NEGATOR_PATTERN.exec(clause.replace(/[\u2018\u2019]/gu, "'"));
128
+ return match ? clause.slice(0, match.index) : "";
129
+ }
126
130
  function misstatesQuote(content, quote) {
127
131
  const claimClauses = splitClaimClauses(content);
128
132
  return (quote.match(CLAUSE_PATTERN) ?? []).some((quoteClause) => {
@@ -135,8 +139,16 @@ function misstatesQuote(content, quote) {
135
139
  const clausesSharing = (tokens) => claimClauses.filter((claimClause) => clauseOverlap(tokens, claimClause).shared > 0);
136
140
  if (needsNegation) {
137
141
  const scopeTokens = [...tokenize(negatedScope(quoteClause))];
142
+ const subjectTokens = [...tokenize(textBeforeNegator(quoteClause))];
143
+ const scopeHas = new Set(scopeTokens);
138
144
  const related = clausesSharing(scopeTokens.length > 0 ? scopeTokens : clauseTokens);
139
- if (!related.some((text) => hasNegation(text) || EXCLUSION_PATTERN.test(text))) return true;
145
+ const keepsDenial = related.some((text) => {
146
+ if (!hasNegation(text) && !EXCLUSION_PATTERN.test(text)) return false;
147
+ if (subjectTokens.length === 0 || clauseOverlap(subjectTokens, text).shared > 0) return true;
148
+ const ownSubject = [...tokenize(textBeforeNegator(text))].filter((token) => !scopeHas.has(token));
149
+ return ownSubject.length === 0;
150
+ });
151
+ if (!keepsDenial) return true;
140
152
  }
141
153
  return needsReporting && !clausesSharing(clauseTokens).some((text) => hasNonAssertiveReporting(text) || text.trim().endsWith("?"));
142
154
  });
@@ -202,4 +214,4 @@ export {
202
214
  quoteAnchoredEntitySupport,
203
215
  isQuoteAnchoredRelationship
204
216
  };
205
- //# sourceMappingURL=chunk-EQ4U73UH.js.map
217
+ //# sourceMappingURL=chunk-MLAMXQAW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extraction-quote-grounding.ts"],"sourcesContent":["/**\n * Quote-anchored source grounding.\n *\n * An extracted fact carries the exact words that support it in `quote`. A quote\n * that is a verbatim substring of the source (whitespace-normalized) is real\n * evidence: the claim only has to be supported by the text around that span,\n * not by word overlap against the whole conversation. Items without such a\n * quote never get an anchor here and stay on the whole-source rules.\n */\n\nimport type { ExtractionResult } from \"./types.js\";\nimport {\n GROUNDING_MIN_SHARED_TOKENS,\n areGroundingTokensCompatible,\n entityNameStart,\n hasDenialReporting,\n hasNonAssertiveReporting,\n isGroundedEntityName,\n normalizedEntityIdentifierTokens,\n sourceSentences,\n tokenize,\n} from \"./extraction-source-grounding-helpers.js\";\n\n/** Shortest normalized quote that counts as evidence; \"the\" or \"I\" prove nothing. */\nexport const QUOTE_ANCHOR_MIN_CHARS = 12;\n/** Characters of context kept on each side of the quote inside its turn. */\nexport const QUOTE_ANCHOR_CONTEXT_CHARS = 400;\n/** Share of a claim's content words that must occur in the quote's window. */\nexport const QUOTE_ANCHOR_MIN_WINDOW_COVERAGE = 0.35;\n/** Share of a claim's content words that must occur anywhere in the source; the rest is invented. */\nexport const QUOTE_ANCHOR_MIN_SOURCE_COVERAGE = 0.75;\nconst QUOTE_ANCHOR_MAX_OCCURRENCES = 8;\nconst TURN_SEPARATOR = \"\\n\\n\";\nconst NEGATOR_PATTERN = /\\b(?:not|no|never|cannot|without|neither|nor)\\b|n't\\b/iu;\nconst EXCLUSION_PATTERN =\n /\\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;\n\n/** A verbatim quote and the text around it inside its turn. */\nexport interface QuoteAnchor {\n /** Whitespace-normalized quote, exactly as it appears in the source. */\n quote: string;\n /** `quote` with its turn-local context; `;` inside the quote is rewritten to `,`. */\n window: string;\n}\n\nexport type TokenPool = (token: string) => boolean;\n\ntype Entity = ExtractionResult[\"entities\"][number];\ntype Relationship = NonNullable<ExtractionResult[\"relationships\"]>[number];\n\nfunction normalizeWhitespaceWithMap(source: string): { text: string; originalIndex: number[] } {\n const chars: string[] = [];\n const originalIndex: number[] = [];\n let inSpace = false;\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index]!;\n if (/\\s/u.test(char)) {\n if (inSpace) continue;\n inSpace = true;\n chars.push(\" \");\n } else {\n inSpace = false;\n chars.push(char);\n }\n originalIndex.push(index);\n }\n return { text: chars.join(\"\"), originalIndex };\n}\n\nfunction turnStartOffsets(source: string, turns: readonly string[]): readonly number[] | undefined {\n const offsets: number[] = [];\n let at = 0;\n for (const turn of turns) {\n if (!source.startsWith(turn, at)) return undefined;\n offsets.push(at);\n at += turn.length + TURN_SEPARATOR.length;\n }\n return at - TURN_SEPARATOR.length === source.length ? offsets : undefined;\n}\n\nfunction findQuoteAnchors(quote: string, source: string, bounds?: readonly number[]): QuoteAnchor[] {\n const needle = quote.replace(/\\s+/gu, \" \").trim();\n if (needle.length < QUOTE_ANCHOR_MIN_CHARS) return [];\n const normalized = normalizeWhitespaceWithMap(source);\n const anchors: QuoteAnchor[] = [];\n let from = 0;\n while (anchors.length < QUOTE_ANCHOR_MAX_OCCURRENCES) {\n const at = normalized.text.indexOf(needle, from);\n if (at < 0) break;\n from = at + 1;\n const start = normalized.originalIndex[at]!;\n const end = normalized.originalIndex[at + needle.length - 1]! + 1;\n\n let before: string;\n let after: string;\n if (bounds === undefined) {\n if (source.slice(start, end).includes(TURN_SEPARATOR)) continue;\n before = source.slice(Math.max(0, start - QUOTE_ANCHOR_CONTEXT_CHARS), start);\n const sepBefore = before.lastIndexOf(TURN_SEPARATOR);\n if (sepBefore >= 0) before = before.slice(sepBefore + TURN_SEPARATOR.length);\n else if (start > QUOTE_ANCHOR_CONTEXT_CHARS) before = before.replace(/^\\S+/u, \"\");\n after = source.slice(end, end + QUOTE_ANCHOR_CONTEXT_CHARS);\n const sepAfter = after.indexOf(TURN_SEPARATOR);\n if (sepAfter >= 0) after = after.slice(0, sepAfter);\n else if (source.length - end > QUOTE_ANCHOR_CONTEXT_CHARS) after = after.replace(/\\S+$/u, \"\");\n } else {\n let turnStart = 0;\n let turnEnd = source.length;\n for (const bound of bounds) {\n if (bound <= start) turnStart = bound;\n else {\n turnEnd = bound - TURN_SEPARATOR.length;\n break;\n }\n }\n if (turnEnd < end) continue;\n before = source.slice(Math.max(turnStart, start - QUOTE_ANCHOR_CONTEXT_CHARS), start);\n if (start - QUOTE_ANCHOR_CONTEXT_CHARS > turnStart) before = before.replace(/^\\S+/u, \"\");\n const contextEnd = Math.min(turnEnd, end + QUOTE_ANCHOR_CONTEXT_CHARS);\n after = source.slice(end, contextEnd);\n if (end + QUOTE_ANCHOR_CONTEXT_CHARS < turnEnd) after = after.replace(/\\S+$/u, \"\");\n }\n\n anchors.push({ quote: needle, window: `${before}${needle.replace(/;/gu, \",\")}${after}` });\n }\n return anchors;\n}\n\n/**\n * Returns one anchor per place `quote` occurs verbatim in `source`, or [] when\n * the quote is absent, too short, or not an exact substring. A quote that\n * spans a turn separator is not one turn's words and yields no anchor; windows\n * never extend past their turn.\n *\n * The quote is one evidence unit: a `;` inside it is rewritten to `,` in the\n * window so sentence splitting cannot cut it, or a claim that merges two of\n * its clauses could never be grounded in a single sentence.\n *\n * `source` may have been rewritten before grounding (temporal anchoring,\n * pronoun resolution) while the model quoted the original words. When the raw\n * quote is not found, `transformQuote` applies the same rewrite to the quote.\n *\n * `turns` are the texts `source` was joined from; when they tile `source`\n * exactly, quotes and windows cut at real turn boundaries instead of any\n * blank line. Without them, every `TURN_SEPARATOR` run is a boundary.\n */\nexport function quoteAnchors(\n quote: string | undefined,\n source: string,\n transformQuote?: (quote: string) => string,\n turns?: readonly string[],\n): QuoteAnchor[] {\n if (typeof quote !== \"string\") return [];\n const bounds = turns === undefined ? undefined : turnStartOffsets(source, turns);\n const exact = findQuoteAnchors(quote, source, bounds);\n if (exact.length > 0 || transformQuote === undefined) return exact;\n return findQuoteAnchors(transformQuote(quote), source, bounds);\n}\n\nexport function tokenPool(tokens: ReadonlySet<string>): TokenPool {\n const list = [...tokens];\n return (token) => tokens.has(token) || list.some((poolToken) => areGroundingTokensCompatible(token, poolToken));\n}\n\nfunction hasNegation(text: string): boolean {\n return NEGATOR_PATTERN.test(text.replace(/[\\u2018\\u2019]/gu, \"'\")) || hasDenialReporting(text);\n}\n\nconst CLAUSE_PATTERN = /[^;.!?\\n]+[;.!?]*/gu;\n/** Split \"X, and Y\" claim coordination without touching list commas. */\nconst CLAIM_COORD_SPLIT = /,\\s{1,8}(?:and|but|or|nor)\\s{1,8}/iu;\n\nfunction splitClaimClauses(content: string): string[] {\n return (content.match(CLAUSE_PATTERN) ?? [content]).flatMap((clause) => {\n const parts = clause\n .split(CLAIM_COORD_SPLIT)\n .map((part) => part.trim())\n .filter((part) => part.length > 0);\n return parts.length > 0 ? parts : [clause];\n });\n}\n\nfunction clauseOverlap(clauseTokens: readonly string[], target: string) {\n const has = tokenPool(tokenize(target));\n const shared = clauseTokens.filter(has).length;\n return { shared, ratio: clauseTokens.length === 0 ? 0 : shared / clauseTokens.length };\n}\n\n/** What a quote clause's first negator governs: the words after it. */\nfunction negatedScope(clause: string): string {\n const match = NEGATOR_PATTERN.exec(clause.replace(/[\\u2018\\u2019]/gu, \"'\"));\n return match ? clause.slice(match.index + match[0].length) : clause;\n}\n\n/** The words before a clause's first negator, empty when it has none. */\nfunction textBeforeNegator(clause: string): string {\n const match = NEGATOR_PATTERN.exec(clause.replace(/[\\u2018\\u2019]/gu, \"'\"));\n return match ? clause.slice(0, match.index) : \"\";\n}\n\n/**\n * True when the claim asserts what a quote clause denies or does not assert.\n * A quote denial is kept only by a claim clause that shares what the negator\n * governs and does not name a different subject, so a negator about Bob does\n * not keep a denial about Alice. A clause that names no subject of its own\n * still counts, which keeps a pronoun clause and a subject-less passive. A\n * quote clause with no subject of its own keeps the clause-level check.\n */\nfunction misstatesQuote(content: string, quote: string): boolean {\n const claimClauses = splitClaimClauses(content);\n return (quote.match(CLAUSE_PATTERN) ?? []).some((quoteClause) => {\n const needsNegation = hasNegation(quoteClause);\n const needsReporting = quoteClause.trim().endsWith(\"?\") || hasNonAssertiveReporting(quoteClause);\n if (!needsNegation && !needsReporting) return false;\n const clauseTokens = [...tokenize(quoteClause)];\n const whole = clauseOverlap(clauseTokens, content);\n if (whole.shared < GROUNDING_MIN_SHARED_TOKENS || whole.ratio < 0.5) return false;\n const clausesSharing = (tokens: readonly string[]) =>\n claimClauses.filter((claimClause) => clauseOverlap(tokens, claimClause).shared > 0);\n if (needsNegation) {\n const scopeTokens = [...tokenize(negatedScope(quoteClause))];\n const subjectTokens = [...tokenize(textBeforeNegator(quoteClause))];\n const scopeHas = new Set(scopeTokens);\n const related = clausesSharing(scopeTokens.length > 0 ? scopeTokens : clauseTokens);\n const keepsDenial = related.some((text) => {\n if (!hasNegation(text) && !EXCLUSION_PATTERN.test(text)) return false;\n if (subjectTokens.length === 0 || clauseOverlap(subjectTokens, text).shared > 0) return true;\n const ownSubject = [...tokenize(textBeforeNegator(text))].filter((token) => !scopeHas.has(token));\n return ownSubject.length === 0;\n });\n if (!keepsDenial) return true;\n }\n return needsReporting\n && !clausesSharing(clauseTokens).some((text) => hasNonAssertiveReporting(text) || text.trim().endsWith(\"?\"));\n });\n}\n\n/**\n * A claim is supported by a verbatim quote when it shares at least\n * GROUNDING_MIN_SHARED_TOKENS content words with the quote, a good part of its\n * words sit in the text around the quote, nearly all of them occur in the\n * source at all, and it does not invert a negated clause of the quote. Reworded\n * and lightly elaborated claims pass; claims that bring words the conversation\n * never used, or that have nothing to do with the quote, do not.\n */\nexport function isQuoteAnchoredClaim(content: string, anchor: QuoteAnchor, sourceHas: TokenPool): boolean {\n const contentTokens = [...tokenize(content)];\n if (contentTokens.length === 0) return false;\n const quoteHas = tokenPool(tokenize(anchor.quote));\n if (contentTokens.filter(quoteHas).length < GROUNDING_MIN_SHARED_TOKENS) return false;\n const windowHas = tokenPool(tokenize(anchor.window));\n if (contentTokens.filter(windowHas).length / contentTokens.length < QUOTE_ANCHOR_MIN_WINDOW_COVERAGE) {\n return false;\n }\n return contentTokens.filter(sourceHas).length / contentTokens.length >= QUOTE_ANCHOR_MIN_SOURCE_COVERAGE\n && !misstatesQuote(content, anchor.quote);\n}\n\n/** Keeps the entity facts (flat and sectioned) `isSupported` accepts; undefined when none remain. */\nexport function filterEntityFacts(entity: Entity, isSupported: (fact: string) => boolean): Entity | undefined {\n const facts = entity.facts.filter(isSupported);\n const structuredSections = entity.structuredSections?.flatMap((section) => {\n const groundedFacts = section.facts.filter(isSupported);\n return groundedFacts.length > 0 ? [{ ...section, facts: groundedFacts }] : [];\n });\n if (facts.length === 0 && (structuredSections === undefined || structuredSections.length === 0)) {\n return undefined;\n }\n const { structuredSections: _structuredSections, ...entityWithoutSections } = entity;\n return {\n ...entityWithoutSections,\n facts,\n ...(structuredSections && structuredSections.length > 0 ? { structuredSections } : {}),\n };\n}\n\n/**\n * Entities carry no quote of their own; the anchors of facts that kept support\n * them. Returns a fact predicate, or undefined when no anchor window names the entity.\n */\nexport function quoteAnchoredEntitySupport(\n entity: Entity,\n anchors: readonly QuoteAnchor[],\n sourceHas: TokenPool,\n): ((fact: string) => boolean) | undefined {\n const nameAnchors = anchors.filter((anchor) => isGroundedEntityName(entity.name, anchor.window));\n if (nameAnchors.length === 0) return undefined;\n return (fact) => nameAnchors.some((anchor) => isQuoteAnchoredClaim(fact, anchor, sourceHas));\n}\n\n/**\n * The label words and both names must sit in one anchor-window sentence, source\n * before target, so an invented label or a reversed edge never passes.\n */\nexport function isQuoteAnchoredRelationship(\n relationship: Relationship,\n anchors: readonly QuoteAnchor[],\n sourceHas: TokenPool,\n): boolean {\n const labelTokens = [...tokenize(relationship.label)];\n if (labelTokens.length === 0) return false;\n const relationText = [\n normalizedEntityIdentifierTokens(relationship.source).join(\" \"),\n relationship.label,\n normalizedEntityIdentifierTokens(relationship.target).join(\" \"),\n ].join(\" \");\n return anchors.some((anchor) => {\n const windowHas = tokenPool(tokenize(anchor.window));\n return labelTokens.every(windowHas)\n && sourceSentences(anchor.window).some((sentence) => {\n const sourceStart = entityNameStart(relationship.source, sentence);\n return sourceStart >= 0 && entityNameStart(relationship.target, sentence) > sourceStart;\n })\n && isQuoteAnchoredClaim(relationText, anchor, sourceHas);\n });\n}\n"],"mappings":"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","names":[]}
@@ -26,7 +26,7 @@ import {
26
26
  readGatewayWorkspaceDir,
27
27
  tryCodexSubscriptionProvider,
28
28
  withCodexRuntimeShutdown
29
- } from "./chunk-ZU3NJNO7.js";
29
+ } from "./chunk-QSF5SJAM.js";
30
30
  import {
31
31
  extractJsonCandidates
32
32
  } from "./chunk-YBA52OKG.js";
@@ -843,4 +843,4 @@ export {
843
843
  gatewayTaskChainOptions,
844
844
  FallbackLlmClient
845
845
  };
846
- //# sourceMappingURL=chunk-ZU5JDLOH.js.map
846
+ //# sourceMappingURL=chunk-MMRTPH3J.js.map
@@ -5,13 +5,13 @@ import {
5
5
  import {
6
6
  unifiedDedupeAndRank
7
7
  } from "./chunk-LUPVCGYK.js";
8
- import {
9
- buildEvidencePack
10
- } from "./chunk-DGFU5MSX.js";
11
8
  import {
12
9
  lcmArchiveRowId,
13
10
  lcmEvidenceIdentity
14
11
  } from "./chunk-C37ZRXX7.js";
12
+ import {
13
+ buildEvidencePack
14
+ } from "./chunk-DGFU5MSX.js";
15
15
 
16
16
  // src/explicit-cue-recall.ts
17
17
  var DEFAULT_MAX_CHARS = 2400;
@@ -4258,4 +4258,4 @@ export {
4258
4258
  collectStructuredPlanCues,
4259
4259
  collectTemporalLexicalCues
4260
4260
  };
4261
- //# sourceMappingURL=chunk-TVIVY7KU.js.map
4261
+ //# sourceMappingURL=chunk-NED7IR7B.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseXrayFormat
3
- } from "./chunk-RHQLIHMB.js";
3
+ } from "./chunk-R4BBGPI2.js";
4
4
  import {
5
5
  RECALL_DISCLOSURE_LEVELS,
6
6
  isRecallDisclosure
@@ -50,4 +50,4 @@ export {
50
50
  parseXrayBudgetFlag,
51
51
  parseXrayCliOptions
52
52
  };
53
- //# sourceMappingURL=chunk-6F5MJFXY.js.map
53
+ //# sourceMappingURL=chunk-NHVAX7MH.js.map
@@ -3,10 +3,7 @@ import {
3
3
  } from "./chunk-QV2VZKD5.js";
4
4
  import {
5
5
  createVersion
6
- } from "./chunk-ER7XANP3.js";
7
- import {
8
- bumpMemoryCorpusVersionForDir
9
- } from "./chunk-M5GVCJSJ.js";
6
+ } from "./chunk-SQ3GEIEL.js";
10
7
  import {
11
8
  HistoricalEntityCanonicalIdCache,
12
9
  canonicalizeEntityRefFrontmatter,
@@ -16,6 +13,9 @@ import {
16
13
  requestEntityCanonicalIdReconcile,
17
14
  withRawEntityPageMutation
18
15
  } from "./chunk-IAYUTGF2.js";
16
+ import {
17
+ bumpMemoryCorpusVersionForDir
18
+ } from "./chunk-M5GVCJSJ.js";
19
19
  import {
20
20
  parseExportBundle
21
21
  } from "./chunk-WEHSQBFR.js";
@@ -296,4 +296,4 @@ function mintForkId(capsuleId, originalId, now) {
296
296
  export {
297
297
  importCapsule
298
298
  };
299
- //# sourceMappingURL=chunk-TG3R2SID.js.map
299
+ //# sourceMappingURL=chunk-NMGHGTVR.js.map
@@ -1,106 +1,18 @@
1
1
  import {
2
- normalizeNamespaceIdentity
3
- } from "./chunk-VUFL7X3H.js";
2
+ SupportPassportCardCategorySchema,
3
+ SupportPassportCardSchema,
4
+ SupportPassportCardStatusSchema,
5
+ SupportPassportMemoryIdSchema,
6
+ SupportPassportNamespaceSchema,
7
+ SupportPassportSourceMemoryIdSchema,
8
+ computeSupportPassportCardRevision
9
+ } from "./chunk-AHA5VQGP.js";
4
10
  import {
5
11
  stripAttributesSuffix
6
12
  } from "./chunk-JDSVLVCG.js";
7
- import {
8
- parseIsoOffsetTimestamp
9
- } from "./chunk-P7FMDTKL.js";
10
-
11
- // src/support-passport/contracts.ts
12
- import { createHash } from "crypto";
13
- import { z } from "zod";
14
- var SUPPORT_PASSPORT_CARD_CATEGORIES = [
15
- "communication",
16
- "environment",
17
- "transitions",
18
- "sensory",
19
- "regulation",
20
- "interests",
21
- "other"
22
- ];
23
- var SUPPORT_PASSPORT_CARD_STATUSES = [
24
- "pending_review",
25
- "active",
26
- "rejected",
27
- "superseded",
28
- "archived"
29
- ];
30
- var SupportPassportCardCategorySchema = z.enum(SUPPORT_PASSPORT_CARD_CATEGORIES);
31
- var SupportPassportCardStatusSchema = z.enum(SUPPORT_PASSPORT_CARD_STATUSES);
32
- var SupportPassportCardTitleSchema = z.string().trim().min(1).max(80).refine((title) => !title.includes("]") && !title.includes("\n") && !title.includes("\r"), {
33
- message: "card titles cannot contain closing brackets or line breaks"
34
- });
35
- var IsoTimestampSchema = z.string().datetime({ offset: true }).refine((value) => parseIsoOffsetTimestamp(value) !== null, {
36
- message: "timestamps must be valid ISO 8601 values"
37
- });
38
- var SupportPassportNamespaceSchema = z.string().min(1).refine((namespace) => namespace === normalizeNamespaceIdentity(namespace), {
39
- message: "namespaces must be canonical"
40
- });
41
- var SupportPassportMemoryIdSchema = z.string().trim().min(1).max(128).regex(/^[A-Za-z0-9._:-]+$/);
42
- var SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH = 512;
43
- var SupportPassportSourceMemoryIdSchema = z.string().trim().min(1).max(SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH);
44
- var SupportPassportCardSchema = z.object({
45
- cardId: SupportPassportMemoryIdSchema,
46
- title: SupportPassportCardTitleSchema,
47
- statement: z.string().trim().min(1).max(500),
48
- category: SupportPassportCardCategorySchema,
49
- status: SupportPassportCardStatusSchema,
50
- updatedAt: IsoTimestampSchema,
51
- reviewBy: IsoTimestampSchema,
52
- revision: z.string().regex(/^[a-f0-9]{64}$/)
53
- }).strict();
54
- var SupportPassportCardListSchema = z.array(SupportPassportCardSchema).max(100).superRefine((cards, ctx) => {
55
- const seen = /* @__PURE__ */ new Set();
56
- for (const [index, card] of cards.entries()) {
57
- if (seen.has(card.cardId)) {
58
- ctx.addIssue({
59
- code: z.ZodIssueCode.custom,
60
- message: "card IDs must be unique",
61
- path: [index, "cardId"]
62
- });
63
- }
64
- seen.add(card.cardId);
65
- }
66
- });
67
- var SupportPassportListCardsInputSchema = z.object({
68
- principal: z.string().trim().min(1).max(512)
69
- }).strict();
70
- var SupportPassportManualDraftInputSchema = z.object({
71
- principal: z.string().trim().min(1).max(512),
72
- title: SupportPassportCardTitleSchema,
73
- statement: z.string().trim().min(1).max(500),
74
- category: SupportPassportCardCategorySchema,
75
- reviewBy: IsoTimestampSchema
76
- }).strict();
77
- var SupportPassportCardMutationInputSchema = z.object({
78
- principal: z.string().trim().min(1).max(512),
79
- cardId: SupportPassportMemoryIdSchema,
80
- expectedRevision: z.string().regex(/^[a-f0-9]{64}$/),
81
- reasonCode: z.string().trim().min(1).max(64).regex(/^[a-z0-9-]+$/).optional()
82
- }).strict();
83
- var SupportPassportReplaceCardInputSchema = SupportPassportCardMutationInputSchema.extend({
84
- title: SupportPassportCardTitleSchema,
85
- statement: z.string().trim().min(1).max(500),
86
- category: SupportPassportCardCategorySchema,
87
- reviewBy: IsoTimestampSchema
88
- }).strict();
89
- function computeSupportPassportCardRevision(fields) {
90
- const canonicalFields = {
91
- cardId: fields.cardId,
92
- category: fields.category,
93
- reviewBy: fields.reviewBy,
94
- statement: fields.statement,
95
- status: fields.status,
96
- title: fields.title,
97
- updatedAt: fields.updatedAt
98
- };
99
- return createHash("sha256").update(JSON.stringify(canonicalFields)).digest("hex");
100
- }
101
13
 
102
14
  // src/support-passport/card-projection.ts
103
- import { createHash as createHash2 } from "crypto";
15
+ import { createHash } from "crypto";
104
16
  import { lstat } from "fs/promises";
105
17
  var SUPPORT_PASSPORT_CARD_TAG = "support-passport-card";
106
18
  var SUPPORT_PASSPORT_AUDIT_TAG = "support-passport-audit";
@@ -199,7 +111,7 @@ function encodeSupportPassportNamespaceAttributes(namespace) {
199
111
  const canonical = SupportPassportNamespaceSchema.parse(namespace);
200
112
  const encoded = Buffer.from(canonical, "utf8").toString("base64url");
201
113
  const chunks = encoded.match(new RegExp(`.{1,${SUPPORT_PASSPORT_NAMESPACE_CHUNK_SIZE}}`, "g")) ?? [];
202
- const digest = createHash2("sha256").update(encoded).digest("hex");
114
+ const digest = createHash("sha256").update(encoded).digest("hex");
203
115
  return Object.fromEntries([
204
116
  [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespace, chunks[0] ?? ""],
205
117
  [
@@ -233,14 +145,14 @@ function decodeSupportPassportNamespaceAttributes(attributes) {
233
145
  chunks.push(chunk);
234
146
  }
235
147
  const encoded = chunks.join("");
236
- if (createHash2("sha256").update(encoded).digest("hex") !== match[2]) return null;
148
+ if (createHash("sha256").update(encoded).digest("hex") !== match[2]) return null;
237
149
  const decoded = Buffer.from(encoded, "base64url").toString("utf8");
238
150
  if (Buffer.from(decoded, "utf8").toString("base64url") !== encoded) return null;
239
151
  const namespace = SupportPassportNamespaceSchema.safeParse(decoded);
240
152
  return namespace.success ? namespace.data : null;
241
153
  }
242
154
  function computeSupportPassportOwnerKey(principal) {
243
- return createHash2("sha256").update(principal).digest("hex");
155
+ return createHash("sha256").update(principal).digest("hex");
244
156
  }
245
157
  function activeSupportPassportReplacementPredecessorIds(cards) {
246
158
  return new Set(
@@ -369,22 +281,6 @@ function projectSupportPassportCard(memory) {
369
281
  }
370
282
 
371
283
  export {
372
- SUPPORT_PASSPORT_CARD_CATEGORIES,
373
- SUPPORT_PASSPORT_CARD_STATUSES,
374
- SupportPassportCardCategorySchema,
375
- SupportPassportCardStatusSchema,
376
- SupportPassportCardTitleSchema,
377
- SupportPassportNamespaceSchema,
378
- SupportPassportMemoryIdSchema,
379
- SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH,
380
- SupportPassportSourceMemoryIdSchema,
381
- SupportPassportCardSchema,
382
- SupportPassportCardListSchema,
383
- SupportPassportListCardsInputSchema,
384
- SupportPassportManualDraftInputSchema,
385
- SupportPassportCardMutationInputSchema,
386
- SupportPassportReplaceCardInputSchema,
387
- computeSupportPassportCardRevision,
388
284
  SUPPORT_PASSPORT_CARD_TAG,
389
285
  SUPPORT_PASSPORT_AUDIT_TAG,
390
286
  isSupportPassportPrivateMemory,
@@ -400,4 +296,4 @@ export {
400
296
  hasLiveSupportPassportCard,
401
297
  projectSupportPassportCard
402
298
  };
403
- //# sourceMappingURL=chunk-YCNIGRRF.js.map
299
+ //# sourceMappingURL=chunk-NS7U4ZYU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/support-passport/card-projection.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { lstat } from \"node:fs/promises\";\n\nimport type { OfflineSyncExcludeFile } from \"../offline-sync-file-io.js\";\nimport { stripAttributesSuffix } from \"../structured-attributes.js\";\nimport type { MemoryFile } from \"../types.js\";\nimport {\n type SupportPassportCard,\n SupportPassportCardCategorySchema,\n SupportPassportCardSchema,\n SupportPassportCardStatusSchema,\n SupportPassportMemoryIdSchema,\n SupportPassportNamespaceSchema,\n SupportPassportSourceMemoryIdSchema,\n computeSupportPassportCardRevision,\n} from \"./contracts.js\";\n\nexport const SUPPORT_PASSPORT_CARD_TAG = \"support-passport-card\";\nexport const SUPPORT_PASSPORT_AUDIT_TAG = \"support-passport-audit\";\n\nexport function isSupportPassportPrivateMemory(memory: {\n frontmatter: {\n tags?: readonly string[];\n structuredAttributes?: Readonly<Record<string, string>>;\n };\n}): boolean {\n const tags = memory.frontmatter.tags;\n if (tags?.includes(SUPPORT_PASSPORT_CARD_TAG) === true || tags?.includes(SUPPORT_PASSPORT_AUDIT_TAG) === true) {\n return true;\n }\n return Object.keys(memory.frontmatter.structuredAttributes ?? {}).some((key) => key.startsWith(\"support-passport-\"));\n}\n\nexport function excludeSupportPassportPrivateMemories<T extends Pick<MemoryFile, \"frontmatter\">>(\n memories: readonly T[]\n): T[] {\n return memories.filter((memory) => !isSupportPassportPrivateMemory(memory));\n}\n\n/**\n * Stat identity a persisted exclusion classification is keyed on. Any content\n * change rewrites the file, which moves ctime, so a matching identity implies\n * the same bytes and therefore the same classification.\n */\nexport function supportPassportStatIdentity(file: {\n dev: number;\n ino: number;\n size: number;\n mtimeMs: number;\n ctimeMs: number;\n}): string {\n return `${file.dev}:${file.ino}:${file.size}:${file.mtimeMs}:${file.ctimeMs}`;\n}\n\nexport interface PersistedSupportPassportClassification {\n statIdentity: string;\n excluded: boolean;\n}\n\n/**\n * `createSupportPassportPrivateFileExclusion` variant that consults a\n * PERSISTED classification before touching the file. The plain factory\n * classifies by reading and parsing every candidate (readMemoryByPath), which\n * is fine once per process but defeats any persisted-parse optimization: a\n * warm reconcile plan that should skip per-file reads would still read every\n * file just to decide exclusion. When the persisted stat identity matches, the\n * classification is reused and the file is not opened; on mismatch it is\n * recomputed once and recorded into `updates` so the caller can persist it.\n */\nexport function createPersistedSupportPassportPrivateFileExclusion(\n storage: {\n readMemoryByPath(filePath: string): Promise<MemoryFile | null>;\n },\n persisted: ReadonlyMap<string, { statIdentity?: string; excluded?: boolean }>,\n updates: Map<string, PersistedSupportPassportClassification>\n): OfflineSyncExcludeFile {\n const inFlight = new Map<string, { identity: string; excluded: Promise<boolean> }>();\n return async ({ filePath, path: relPath }) => {\n let file: Awaited<ReturnType<typeof lstat>>;\n try {\n file = await lstat(filePath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n inFlight.delete(filePath);\n return false;\n }\n throw error;\n }\n const identity = supportPassportStatIdentity(file);\n const known = persisted.get(relPath);\n if (known?.statIdentity === identity && known.excluded !== undefined) {\n updates.set(relPath, { statIdentity: identity, excluded: known.excluded });\n return known.excluded;\n }\n const cached = inFlight.get(filePath);\n if (cached?.identity === identity) return await cached.excluded;\n const excluded = storage\n .readMemoryByPath(filePath)\n .then((memory) => (memory ? isSupportPassportPrivateMemory(memory) : false))\n .finally(() => {\n if (inFlight.get(filePath)?.identity === identity) inFlight.delete(filePath);\n });\n inFlight.set(filePath, { identity, excluded });\n const result = await excluded;\n updates.set(relPath, { statIdentity: identity, excluded: result });\n return result;\n };\n}\n\nexport function createSupportPassportPrivateFileExclusion(storage: {\n readMemoryByPath(filePath: string): Promise<MemoryFile | null>;\n}): OfflineSyncExcludeFile {\n const classifications = new Map<string, { identity: string; excluded: Promise<boolean> }>();\n return async ({ filePath }) => {\n let file: Awaited<ReturnType<typeof lstat>>;\n try {\n file = await lstat(filePath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n classifications.delete(filePath);\n return false;\n }\n throw error;\n }\n const identity = `${file.dev}:${file.ino}:${file.size}:${file.mtimeMs}:${file.ctimeMs}`;\n const cached = classifications.get(filePath);\n if (cached?.identity === identity) return await cached.excluded;\n const excluded = storage\n .readMemoryByPath(filePath)\n .then((memory) => (memory ? isSupportPassportPrivateMemory(memory) : false));\n classifications.set(filePath, { identity, excluded });\n try {\n return await excluded;\n } catch (error) {\n if (classifications.get(filePath)?.excluded === excluded) classifications.delete(filePath);\n throw error;\n }\n };\n}\n\nexport const SUPPORT_PASSPORT_ATTRIBUTE_KEYS = Object.freeze({\n namespace: \"support-passport-namespace\",\n namespaceEncoding: \"support-passport-namespace-encoding\",\n owner: \"support-passport-owner\",\n title: \"support-passport-title\",\n category: \"support-passport-category\",\n order: \"support-passport-order\",\n reviewBy: \"support-passport-review-by\",\n sourceMemoryIds: \"support-passport-source-ids\",\n replacesDraftId: \"support-passport-replaces-draft-id\",\n replacedRevision: \"support-passport-replaced-revision\",\n draftReplacementPrepared: \"support-passport-draft-replacement-prepared\",\n replacementComplete: \"support-passport-replacement-complete\",\n generatedBatchId: \"support-passport-generated-batch-id\",\n generatedBatchSize: \"support-passport-generated-batch-size\",\n});\n\nconst SUPPORT_PASSPORT_NAMESPACE_ENCODING = \"base64url-v1\";\nconst SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX = \"support-passport-namespace-\";\nconst SUPPORT_PASSPORT_NAMESPACE_CHUNK_SIZE = 1_024;\nconst LegacySupportPassportNamespaceSchema = SupportPassportNamespaceSchema.refine(\n (namespace) =>\n !namespace.includes(\"/\") &&\n !namespace.includes(\"\\\\\") &&\n !namespace.includes(\"..\") &&\n !namespace.includes(\"]\") &&\n !namespace.includes(\"\\0\") &&\n !namespace.includes(\"\\n\") &&\n !namespace.includes(\"\\r\")\n);\n\nexport function encodeSupportPassportNamespaceAttributes(namespace: string): Record<string, string> {\n const canonical = SupportPassportNamespaceSchema.parse(namespace);\n const encoded = Buffer.from(canonical, \"utf8\").toString(\"base64url\");\n const chunks = encoded.match(new RegExp(`.{1,${SUPPORT_PASSPORT_NAMESPACE_CHUNK_SIZE}}`, \"g\")) ?? [];\n const digest = createHash(\"sha256\").update(encoded).digest(\"hex\");\n return Object.fromEntries([\n [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespace, chunks[0] ?? \"\"],\n [\n SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespaceEncoding,\n `${SUPPORT_PASSPORT_NAMESPACE_ENCODING}:${chunks.length}:${digest}`,\n ],\n ...chunks.slice(1).map((chunk, index) => [`${SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX}${index + 1}`, chunk]),\n ]);\n}\n\nexport function decodeSupportPassportNamespaceAttributes(attributes: Readonly<Record<string, string>>): string | null {\n const firstChunk = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespace];\n const encoding = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespaceEncoding];\n if (encoding === undefined) {\n const legacy = LegacySupportPassportNamespaceSchema.safeParse(firstChunk);\n return legacy.success ? legacy.data : null;\n }\n const match = /^base64url-v1:([1-9]\\d*):([a-f0-9]{64})$/.exec(encoding);\n if (!match || typeof firstChunk !== \"string\") return null;\n const chunkCount = Number(match[1]);\n if (!Number.isSafeInteger(chunkCount)) return null;\n const chunkIndexes = Object.keys(attributes).flatMap((key) => {\n const chunkMatch = /^support-passport-namespace-(\\d+)$/.exec(key);\n return chunkMatch ? [Number(chunkMatch[1])] : [];\n });\n if (\n chunkIndexes.length !== chunkCount - 1 ||\n chunkIndexes.some((index) => !Number.isSafeInteger(index) || index < 1 || index >= chunkCount)\n )\n return null;\n const chunks = [firstChunk];\n for (let index = 1; index < chunkCount; index += 1) {\n const chunk = attributes[`${SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX}${index}`];\n if (typeof chunk !== \"string\" || chunk.length === 0) return null;\n chunks.push(chunk);\n }\n const encoded = chunks.join(\"\");\n if (createHash(\"sha256\").update(encoded).digest(\"hex\") !== match[2]) return null;\n const decoded = Buffer.from(encoded, \"base64url\").toString(\"utf8\");\n if (Buffer.from(decoded, \"utf8\").toString(\"base64url\") !== encoded) return null;\n const namespace = SupportPassportNamespaceSchema.safeParse(decoded);\n return namespace.success ? namespace.data : null;\n}\n\nexport interface StoredSupportPassportCard {\n card: SupportPassportCard;\n memory: MemoryFile;\n order: number;\n sourceMemoryIds: string[];\n namespace: string;\n owner: string;\n replacesDraftId?: string;\n replacedRevision?: string;\n draftReplacementPrepared: boolean;\n generatedBatchId?: string;\n generatedBatchSize?: number;\n}\n\nexport function computeSupportPassportOwnerKey(principal: string): string {\n return createHash(\"sha256\").update(principal).digest(\"hex\");\n}\n\nexport function activeSupportPassportReplacementPredecessorIds(\n cards: readonly StoredSupportPassportCard[]\n): Set<string> {\n return new Set(\n cards\n .filter((item) => item.card.status === \"active\")\n .map((item) => item.memory.frontmatter.supersedes)\n .filter((cardId): cardId is string => typeof cardId === \"string\")\n );\n}\n\nfunction parseSourceMemoryIds(frontmatter: MemoryFile[\"frontmatter\"]): string[] | null {\n const lineage = frontmatter.lineage;\n const legacyValue = frontmatter.structuredAttributes?.[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.sourceMemoryIds];\n const rawIds = lineage ?? (legacyValue === undefined || legacyValue === \"\" ? [] : legacyValue.split(\",\"));\n if (rawIds.length > 5) return null;\n const normalized: string[] = [];\n for (const rawId of rawIds) {\n const parsed = SupportPassportSourceMemoryIdSchema.safeParse(rawId);\n if (!parsed.success) return null;\n normalized.push(parsed.data);\n }\n if (new Set(normalized).size !== normalized.length) return null;\n return normalized;\n}\n\ninterface SupportPassportCardMetadata {\n fields: Omit<SupportPassportCard, \"revision\" | \"statement\">;\n order: number;\n sourceMemoryIds: string[];\n namespace: string;\n owner: string;\n replacesDraftId?: string;\n replacedRevision?: string;\n draftReplacementPrepared: boolean;\n generatedBatchId?: string;\n generatedBatchSize?: number;\n}\n\nfunction parseSupportPassportCardMetadata(memory: Pick<MemoryFile, \"frontmatter\">): SupportPassportCardMetadata | null {\n const frontmatter = memory.frontmatter;\n const attributes = frontmatter.structuredAttributes;\n if (frontmatter.category !== \"preference\") return null;\n if (!frontmatter.tags?.includes(SUPPORT_PASSPORT_CARD_TAG)) return null;\n if (!attributes || frontmatter.blockedBy || frontmatter.archivedAt || frontmatter.supersededBy) return null;\n\n const category = SupportPassportCardCategorySchema.safeParse(attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category]);\n const status = SupportPassportCardStatusSchema.safeParse(frontmatter.status);\n const rawOrder = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.order];\n const order = Number(rawOrder);\n const sourceMemoryIds = parseSourceMemoryIds(frontmatter);\n const namespace = decodeSupportPassportNamespaceAttributes(attributes);\n const owner = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.owner];\n let replacesDraftId: string | undefined;\n const rawReplacesDraftId = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacesDraftId];\n if (rawReplacesDraftId !== undefined) {\n const parsedReplacesDraftId = SupportPassportMemoryIdSchema.safeParse(rawReplacesDraftId);\n if (!parsedReplacesDraftId.success) return null;\n replacesDraftId = parsedReplacesDraftId.data;\n }\n let replacedRevision: string | undefined;\n const rawReplacedRevision = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacedRevision];\n if (rawReplacedRevision !== undefined) {\n if (!/^[a-f0-9]{64}$/.test(rawReplacedRevision)) return null;\n replacedRevision = rawReplacedRevision;\n }\n const generatedBatchId = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.generatedBatchId];\n const rawGeneratedBatchSize = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.generatedBatchSize];\n let generatedBatchSize: number | undefined;\n if (generatedBatchId !== undefined) {\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(generatedBatchId)) {\n return null;\n }\n if (typeof rawGeneratedBatchSize !== \"string\" || !/^[1-8]$/.test(rawGeneratedBatchSize)) {\n return null;\n }\n generatedBatchSize = Number(rawGeneratedBatchSize);\n } else if (rawGeneratedBatchSize !== undefined) {\n return null;\n }\n if (\n !category.success ||\n !status.success ||\n status.data === \"superseded\" ||\n typeof rawOrder !== \"string\" ||\n !/^(?:0|[1-9]\\d*)$/.test(rawOrder) ||\n !Number.isSafeInteger(order) ||\n namespace === null ||\n typeof owner !== \"string\" ||\n !/^[a-f0-9]{64}$/.test(owner) ||\n !sourceMemoryIds\n )\n return null;\n const fields = SupportPassportCardSchema.omit({\n revision: true,\n statement: true,\n }).safeParse({\n cardId: frontmatter.id,\n title: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.title],\n category: category.data,\n status: status.data,\n updatedAt: frontmatter.updated,\n reviewBy: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.reviewBy],\n });\n if (!fields.success) return null;\n return {\n fields: fields.data,\n order,\n sourceMemoryIds,\n namespace,\n owner,\n replacesDraftId,\n replacedRevision,\n draftReplacementPrepared: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.draftReplacementPrepared] === \"true\",\n generatedBatchId,\n generatedBatchSize,\n };\n}\n\nexport function hasLiveSupportPassportCard(memory: Pick<MemoryFile, \"frontmatter\" | \"content\">): boolean {\n const metadata = parseSupportPassportCardMetadata(memory);\n if (metadata?.fields.status !== \"active\" && metadata?.fields.status !== \"pending_review\") return false;\n if (metadata.sourceMemoryIds.length === 0) return false;\n return SupportPassportCardSchema.omit({ revision: true }).safeParse({\n ...metadata.fields,\n statement: stripAttributesSuffix(memory.content),\n }).success;\n}\n\nexport function projectSupportPassportCard(memory: MemoryFile): StoredSupportPassportCard | null {\n const metadata = parseSupportPassportCardMetadata(memory);\n if (!metadata) return null;\n\n const fields = {\n ...metadata.fields,\n statement: stripAttributesSuffix(memory.content),\n };\n const normalized = SupportPassportCardSchema.omit({\n revision: true,\n }).safeParse(fields);\n if (!normalized.success) return null;\n const parsed = SupportPassportCardSchema.safeParse({\n ...normalized.data,\n revision: computeSupportPassportCardRevision(normalized.data),\n });\n if (!parsed.success) return null;\n return {\n card: parsed.data,\n memory,\n order: metadata.order,\n sourceMemoryIds: metadata.sourceMemoryIds,\n namespace: metadata.namespace,\n owner: metadata.owner,\n replacesDraftId: metadata.replacesDraftId,\n replacedRevision: metadata.replacedRevision,\n draftReplacementPrepared: metadata.draftReplacementPrepared,\n generatedBatchId: metadata.generatedBatchId,\n generatedBatchSize: metadata.generatedBatchSize,\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  projectTagProjectId,
3
3
  resolveGitContext
4
- } from "./chunk-63E37JCN.js";
4
+ } from "./chunk-4RAJT5L2.js";
5
5
 
6
6
  // src/access-coding-context-resolution.ts
7
7
  async function resolveCodingContextFromOptions(options) {
@@ -33,4 +33,4 @@ async function resolveCodingContextFromOptions(options) {
33
33
  export {
34
34
  resolveCodingContextFromOptions
35
35
  };
36
- //# sourceMappingURL=chunk-NGHDW6UU.js.map
36
+ //# sourceMappingURL=chunk-NUQEREIP.js.map
@@ -1,9 +1,9 @@
1
- import {
2
- isDirectAnswerEligible
3
- } from "./chunk-PYIR4SSB.js";
4
1
  import {
5
2
  cjkBigrams
6
3
  } from "./chunk-CIO7GCWE.js";
4
+ import {
5
+ isDirectAnswerEligible
6
+ } from "./chunk-PYIR4SSB.js";
7
7
  import {
8
8
  normalizeRecallTokens
9
9
  } from "./chunk-YCVB7X56.js";
@@ -179,4 +179,4 @@ export {
179
179
  resolveCategory,
180
180
  tryDirectAnswer
181
181
  };
182
- //# sourceMappingURL=chunk-5IIQU4JZ.js.map
182
+ //# sourceMappingURL=chunk-OB72KNMF.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-GZFKCLRC.js";
11
11
  import {
12
12
  StorageManager
13
- } from "./chunk-FSO3G4JJ.js";
13
+ } from "./chunk-FWRXW7CZ.js";
14
14
  import {
15
15
  normalizeEntityName
16
16
  } from "./chunk-YXZG5TVN.js";
@@ -19,18 +19,18 @@ import {
19
19
  } from "./chunk-YBA52OKG.js";
20
20
  import {
21
21
  excludeSupportPassportPrivateMemories
22
- } from "./chunk-YCNIGRRF.js";
22
+ } from "./chunk-NS7U4ZYU.js";
23
23
  import {
24
24
  serializeMutations
25
25
  } from "./chunk-EBV6VXKF.js";
26
- import {
27
- readEnvVar,
28
- resolveHomeDir
29
- } from "./chunk-P2QRMMVQ.js";
30
26
  import {
31
27
  isAbortError,
32
28
  throwIfAborted
33
29
  } from "./chunk-R2MBW2S4.js";
30
+ import {
31
+ readEnvVar,
32
+ resolveHomeDir
33
+ } from "./chunk-P2QRMMVQ.js";
34
34
  import {
35
35
  log
36
36
  } from "./chunk-3WCASNQZ.js";
@@ -974,4 +974,4 @@ export {
974
974
  resolveBriefingSaveDir,
975
975
  briefingFilename
976
976
  };
977
- //# sourceMappingURL=chunk-RIMK327Y.js.map
977
+ //# sourceMappingURL=chunk-OUVYYKYU.js.map