@remnic/core 9.66.1 → 9.66.2

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 (310) hide show
  1. package/dist/access-admin-ops-surface.d.ts +1 -1
  2. package/dist/access-admin-ops-surface.js +26 -26
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-authorization-probe.d.ts +1 -1
  5. package/dist/access-authorization-probe.js +27 -27
  6. package/dist/access-boundary.d.ts +1 -1
  7. package/dist/access-boundary.js +26 -26
  8. package/dist/access-cli.js +90 -88
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +1 -1
  11. package/dist/access-extraction-force-flush.js +26 -26
  12. package/dist/access-http-lcm-compaction.d.ts +1 -1
  13. package/dist/access-http-lifecycle-flush.d.ts +1 -1
  14. package/dist/access-http-offline-stream.d.ts +1 -1
  15. package/dist/access-http-query.js +28 -28
  16. package/dist/access-http.d.ts +2 -2
  17. package/dist/access-http.js +41 -41
  18. package/dist/access-identity-continuity-surface.js +26 -26
  19. package/dist/access-lcm-surface.d.ts +1 -1
  20. package/dist/access-lcm-surface.js +26 -26
  21. package/dist/access-mcp.d.ts +1 -1
  22. package/dist/access-mcp.js +33 -33
  23. package/dist/access-namespace-preflight.js +26 -26
  24. package/dist/access-observe-write-surface.d.ts +1 -1
  25. package/dist/access-observe-write-surface.js +26 -26
  26. package/dist/access-operations-batch.js +28 -28
  27. package/dist/access-operations.d.ts +6 -6
  28. package/dist/access-operations.js +32 -32
  29. package/dist/access-recall-concurrency.d.ts +1 -1
  30. package/dist/access-recall-concurrency.js +26 -26
  31. package/dist/access-recall-response.d.ts +1 -1
  32. package/dist/access-recall-response.js +26 -26
  33. package/dist/access-recall-surface.d.ts +1 -1
  34. package/dist/access-recall-surface.js +26 -26
  35. package/dist/access-schema.d.ts +89 -89
  36. package/dist/access-service-helpers.d.ts +1 -1
  37. package/dist/access-service.d.ts +1 -1
  38. package/dist/access-service.js +26 -26
  39. package/dist/access-surface-catalog.d.ts +1 -1
  40. package/dist/access-surface-catalog.js +28 -28
  41. package/dist/active-recall.js +3 -3
  42. package/dist/adapters/index.js +4 -4
  43. package/dist/adapters/registry.js +2 -2
  44. package/dist/briefing.js +10 -10
  45. package/dist/buffer.js +4 -4
  46. package/dist/causal-behavior.js +2 -2
  47. package/dist/causal-chain.js +2 -2
  48. package/dist/causal-consolidation.js +13 -13
  49. package/dist/causal-retrieval.js +2 -2
  50. package/dist/causal-trajectory-graph.js +2 -2
  51. package/dist/causal-trajectory.js +1 -1
  52. package/dist/{chunk-LYUUA6QB.js → chunk-25OLNWYG.js} +2 -2
  53. package/dist/{chunk-2X6BGKQL.js → chunk-2QSGJTDG.js} +10 -10
  54. package/dist/{chunk-ZZZWEDF4.js → chunk-2VZHB5US.js} +2 -2
  55. package/dist/{chunk-JKTV3JNX.js → chunk-36HJ36FK.js} +3 -3
  56. package/dist/{chunk-XKNHFDTT.js → chunk-3A2Z4OOS.js} +2 -2
  57. package/dist/{chunk-TCF4MU7L.js → chunk-47WWTCJY.js} +1001 -101
  58. package/dist/chunk-47WWTCJY.js.map +1 -0
  59. package/dist/{chunk-RDGKVH6T.js → chunk-4NKIGSJM.js} +2 -2
  60. package/dist/{chunk-QBNE55VA.js → chunk-4PG2CKI6.js} +2 -2
  61. package/dist/{chunk-S4CDUXQY.js → chunk-6545JDIM.js} +2 -2
  62. package/dist/{chunk-2FA7U5XY.js → chunk-65HXVEVG.js} +2 -2
  63. package/dist/{chunk-U6NGKS32.js → chunk-6BYJQ3L2.js} +8 -8
  64. package/dist/{chunk-OMX6TKXH.js → chunk-6PUF7LUO.js} +2 -2
  65. package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
  66. package/dist/{chunk-VG4SSPAW.js → chunk-AI5M4FVQ.js} +2 -2
  67. package/dist/{chunk-MUEGIKKY.js → chunk-B4B3QDV3.js} +21 -20
  68. package/dist/chunk-B4B3QDV3.js.map +1 -0
  69. package/dist/{chunk-YMOPYG3K.js → chunk-BIJAWZYW.js} +6 -6
  70. package/dist/{chunk-M5ERTI4I.js → chunk-BLHKR4GJ.js} +2 -2
  71. package/dist/chunk-BLUYQFRH.js +36 -0
  72. package/dist/chunk-BLUYQFRH.js.map +1 -0
  73. package/dist/{chunk-CEH2AFXG.js → chunk-C24UZSFW.js} +6 -6
  74. package/dist/{chunk-EH65UV2Z.js → chunk-C3ZYZKDJ.js} +2 -2
  75. package/dist/{chunk-NFP4KPTA.js → chunk-CDLPF3PX.js} +2 -2
  76. package/dist/{chunk-FFUMTH27.js → chunk-CQ6IWZDI.js} +2 -2
  77. package/dist/{chunk-KWIGDKM2.js → chunk-D2YNNDML.js} +2 -2
  78. package/dist/{chunk-65JOGLIS.js → chunk-D3DUA64S.js} +2 -2
  79. package/dist/{chunk-2ITZ74A6.js → chunk-DSEHPUID.js} +11 -11
  80. package/dist/chunk-E4X2YX2F.js +22 -0
  81. package/dist/chunk-E4X2YX2F.js.map +1 -0
  82. package/dist/{chunk-AF5H7TKI.js → chunk-EH7BNIUN.js} +2 -2
  83. package/dist/{chunk-IGZCAHFL.js → chunk-EQRD4NMH.js} +2 -2
  84. package/dist/{chunk-CX4OLNIH.js → chunk-ER2UPUMG.js} +2 -2
  85. package/dist/{chunk-SZMYGDSM.js → chunk-F2JXJABQ.js} +2 -2
  86. package/dist/{chunk-CHGG74CY.js → chunk-F4W5HTED.js} +2 -2
  87. package/dist/{chunk-H2IRSXZN.js → chunk-FFWONAAW.js} +3 -3
  88. package/dist/chunk-FYDW33ZB.js +13 -0
  89. package/dist/chunk-FYDW33ZB.js.map +1 -0
  90. package/dist/{chunk-TNGH4ZYI.js → chunk-GNWLTCKC.js} +2 -2
  91. package/dist/{chunk-OJUEUQDJ.js → chunk-JJ6ZEFXC.js} +2 -2
  92. package/dist/{chunk-U65VJSCJ.js → chunk-JMXHVJ2V.js} +10 -10
  93. package/dist/{chunk-NACLNNFQ.js → chunk-KSZKQTZS.js} +2 -2
  94. package/dist/{chunk-TCQRIIIN.js → chunk-LSR5LQXN.js} +2 -2
  95. package/dist/chunk-MAG6M3B6.js +51 -0
  96. package/dist/chunk-MAG6M3B6.js.map +1 -0
  97. package/dist/{chunk-B4AOWRYF.js → chunk-NTFXBILO.js} +4 -4
  98. package/dist/{chunk-2PSX5BJU.js → chunk-NZPFCP5A.js} +2 -2
  99. package/dist/{chunk-C5IUOBCN.js → chunk-OERZXNSK.js} +2 -2
  100. package/dist/{chunk-ZPS724LT.js → chunk-OIDICRH7.js} +2 -2
  101. package/dist/{chunk-LTBKKSCX.js → chunk-OLBZ2WGG.js} +2 -2
  102. package/dist/{chunk-PD66CVSD.js → chunk-OUKBMQ2O.js} +2 -2
  103. package/dist/{chunk-GPFZFCRN.js → chunk-PP7R754B.js} +1 -1
  104. package/dist/{chunk-GAJK3DQ5.js → chunk-PRRUK2ZH.js} +2 -2
  105. package/dist/{chunk-TBCDF556.js → chunk-PW3GKWH3.js} +3 -3
  106. package/dist/chunk-Q3SHEAXR.js +80 -0
  107. package/dist/chunk-Q3SHEAXR.js.map +1 -0
  108. package/dist/{chunk-KI64TTBL.js → chunk-R2Q6FTOX.js} +2 -2
  109. package/dist/{chunk-KJXCD7VR.js → chunk-RCPKBW7K.js} +4 -4
  110. package/dist/{chunk-INUBU6I5.js → chunk-RH3XLQG4.js} +2 -2
  111. package/dist/{chunk-JBPKEARU.js → chunk-RKNJBZ55.js} +4 -4
  112. package/dist/{chunk-NSTNGMSS.js → chunk-U4HZEW2B.js} +5 -5
  113. package/dist/{chunk-XOHYGIWF.js → chunk-UHQE37NI.js} +2 -2
  114. package/dist/{chunk-D3UXGE5D.js → chunk-UMZUKOJU.js} +7 -7
  115. package/dist/{chunk-S4Z2OBTX.js → chunk-UVYL5G7A.js} +3 -3
  116. package/dist/{chunk-4XLTUR6R.js → chunk-VKDBDJIX.js} +3 -3
  117. package/dist/{chunk-UW4RYPWC.js → chunk-VSMSYDIH.js} +2 -2
  118. package/dist/{chunk-LJABGXC4.js → chunk-W5IYHQA5.js} +3 -3
  119. package/dist/{chunk-7UOXCCCI.js → chunk-WKWY7YF3.js} +2 -2
  120. package/dist/{chunk-YWPLOJ7T.js → chunk-Y2YM4C75.js} +2 -2
  121. package/dist/{chunk-NUF7VSEX.js → chunk-YZ5VC2JJ.js} +2 -2
  122. package/dist/{chunk-EWKVYCFP.js → chunk-ZBIEX4XN.js} +1 -1
  123. package/dist/{chunk-GBEOUCBB.js → chunk-ZMVW2HJJ.js} +2 -2
  124. package/dist/{chunk-RPIS5FQ7.js → chunk-ZXROBS53.js} +44 -44
  125. package/dist/{cli-CsfFMe6n.d.ts → cli-BOuEb4Ia.d.ts} +1 -1
  126. package/dist/cli.d.ts +2 -2
  127. package/dist/cli.js +61 -61
  128. package/dist/coding/export-okf-codegraph.js +10 -10
  129. package/dist/coding/pre-action-gate.js +2 -2
  130. package/dist/compounding/engine.js +10 -10
  131. package/dist/config.js +3 -3
  132. package/dist/connectors/codex-materialize-runner.js +10 -10
  133. package/dist/connectors/index.js +10 -10
  134. package/dist/convergence-refresh.js +12 -12
  135. package/dist/corpus-watermark.js +12 -12
  136. package/dist/entity-retrieval.js +10 -10
  137. package/dist/external-wiki-access.d.ts +1 -1
  138. package/dist/external-wiki-access.js +27 -27
  139. package/dist/external-wiki-mcp-tools.d.ts +1 -1
  140. package/dist/extraction-span-wire.d.ts +17 -0
  141. package/dist/extraction-span-wire.js +13 -0
  142. package/dist/extraction-span-wire.js.map +1 -0
  143. package/dist/extraction-span.d.ts +17 -0
  144. package/dist/extraction-span.js +8 -0
  145. package/dist/extraction.js +13 -13
  146. package/dist/{graph-edge-decay-A4SDFMMS.js → graph-edge-decay-FXGELBFA.js} +4 -4
  147. package/dist/graph-edge-decay-FXGELBFA.js.map +1 -0
  148. package/dist/graph-snapshot.js +3 -3
  149. package/dist/graph.js +3 -3
  150. package/dist/harmonic-retrieval.js +1 -1
  151. package/dist/index.d.ts +887 -681
  152. package/dist/index.js +161 -108
  153. package/dist/lcm/engine.js +3 -3
  154. package/dist/lcm/index.js +11 -11
  155. package/dist/location/index.js +12 -12
  156. package/dist/maintenance/memory-governance.js +10 -10
  157. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +10 -10
  158. package/dist/maintenance/rebuild-memory-projection.js +11 -11
  159. package/dist/mcp-memory-inspector-app.d.ts +1 -1
  160. package/dist/memory-subject-cli.d.ts +1 -1
  161. package/dist/memory-subject.d.ts +1 -1
  162. package/dist/namespaces/migrate.js +11 -11
  163. package/dist/namespaces/search.js +6 -6
  164. package/dist/namespaces/storage.js +10 -10
  165. package/dist/operator-doctor-corpus.js +13 -13
  166. package/dist/operator-toolkit.js +23 -23
  167. package/dist/orchestration/maintenance.js +18 -18
  168. package/dist/orchestrator.js +90 -88
  169. package/dist/{public-http-Cwvl4QZr.d.ts → public-http-CmQRjQCD.d.ts} +1 -1
  170. package/dist/qmd.js +4 -4
  171. package/dist/recall-deep-access.d.ts +30 -0
  172. package/dist/recall-deep-access.js +50 -0
  173. package/dist/recall-deep-access.js.map +1 -0
  174. package/dist/recall-deep-render.d.ts +11 -0
  175. package/dist/recall-deep-render.js +28 -0
  176. package/dist/recall-deep-render.js.map +1 -0
  177. package/dist/recall-deep.js +6 -73
  178. package/dist/recall-deep.js.map +1 -1
  179. package/dist/recall-navigate.js +6 -42
  180. package/dist/recall-navigate.js.map +1 -1
  181. package/dist/recall-state-view-render.d.ts +18 -0
  182. package/dist/recall-state-view-render.js +22 -0
  183. package/dist/recall-state-view-render.js.map +1 -0
  184. package/dist/recall-state-view-widen.d.ts +13 -0
  185. package/dist/recall-state-view-widen.js +11 -0
  186. package/dist/recall-state-view-widen.js.map +1 -0
  187. package/dist/recall-state-view-wire.d.ts +3 -4
  188. package/dist/recall-state-view-wire.js +2 -1
  189. package/dist/resume-bundles.js +4 -4
  190. package/dist/schemas.d.ts +176 -176
  191. package/dist/search/factory.js +5 -5
  192. package/dist/search/index.js +9 -9
  193. package/dist/semantic-consolidation.js +11 -11
  194. package/dist/semantic-rule-promotion.js +10 -10
  195. package/dist/semantic-rule-verifier.js +10 -10
  196. package/dist/shared-context/manager.d.ts +6 -6
  197. package/dist/source-agent-qualifier.js +12 -12
  198. package/dist/storage.js +9 -9
  199. package/dist/support-passport/index.d.ts +4 -4
  200. package/dist/support-passport/index.js +29 -29
  201. package/dist/transfer/export-okf.js +11 -11
  202. package/dist/transfer/types.d.ts +78 -78
  203. package/dist/verified-recall.js +10 -10
  204. package/dist/who-knows-cli.d.ts +1 -1
  205. package/dist/who-knows-cli.js +11 -11
  206. package/dist/who-knows.d.ts +1 -1
  207. package/dist/who-knows.js +10 -10
  208. package/package.json +2 -2
  209. package/src/activity/index.ts +3 -0
  210. package/src/activity/journal-vault-read.test.ts +153 -0
  211. package/src/activity/journal-vault-read.ts +214 -0
  212. package/src/activity/journal.ts +1 -1
  213. package/src/activity/timeline/analysis-batch.test.ts +56 -0
  214. package/src/activity/timeline/analysis-batch.ts +45 -0
  215. package/src/activity/timeline/analysis.test.ts +413 -0
  216. package/src/activity/timeline/analysis.ts +362 -0
  217. package/src/activity/timeline/index.ts +5 -0
  218. package/src/activity/timeline/journal-recap-persist.test.ts +148 -0
  219. package/src/activity/timeline/journal-recap-persist.ts +37 -0
  220. package/src/activity/timeline/weekly-persist.test.ts +121 -0
  221. package/src/activity/timeline/weekly-persist.ts +103 -0
  222. package/src/activity/vault-path.test.ts +38 -0
  223. package/src/activity/vault-path.ts +59 -0
  224. package/src/activity/vault-publish.test.ts +102 -0
  225. package/src/activity/vault-publish.ts +92 -13
  226. package/src/dedup/merge-on-write-wire.test.ts +101 -0
  227. package/src/dedup/merge-on-write-wire.ts +34 -0
  228. package/src/extraction-span-wire.test.ts +20 -0
  229. package/src/extraction-span-wire.ts +17 -0
  230. package/src/extraction-span.test.ts +59 -0
  231. package/src/extraction-span.ts +39 -0
  232. package/src/index.ts +1 -0
  233. package/src/recall-deep-access.test.ts +58 -0
  234. package/src/recall-deep-access.ts +71 -0
  235. package/src/recall-deep-render.test.ts +68 -0
  236. package/src/recall-deep-render.ts +32 -0
  237. package/src/recall-state-view-render.test.ts +94 -0
  238. package/src/recall-state-view-render.ts +24 -0
  239. package/src/recall-state-view-widen.test.ts +66 -0
  240. package/src/recall-state-view-widen.ts +49 -0
  241. package/src/recall-state-view-wire.ts +6 -16
  242. package/src/shared-context/staleness.test.ts +36 -0
  243. package/src/shared-context/staleness.ts +38 -0
  244. package/src/shared-context/trajectories.test.ts +77 -0
  245. package/src/shared-context/trajectories.ts +49 -0
  246. package/dist/chunk-MUEGIKKY.js.map +0 -1
  247. package/dist/chunk-TCF4MU7L.js.map +0 -1
  248. package/dist/chunk-WFCWP4XU.js +0 -17
  249. package/dist/chunk-WFCWP4XU.js.map +0 -1
  250. package/dist/{access-service-C2tV2-uL.d.ts → access-service-Dz6I9AZ-.d.ts} +64 -64
  251. /package/dist/{chunk-LYUUA6QB.js.map → chunk-25OLNWYG.js.map} +0 -0
  252. /package/dist/{chunk-2X6BGKQL.js.map → chunk-2QSGJTDG.js.map} +0 -0
  253. /package/dist/{chunk-ZZZWEDF4.js.map → chunk-2VZHB5US.js.map} +0 -0
  254. /package/dist/{chunk-JKTV3JNX.js.map → chunk-36HJ36FK.js.map} +0 -0
  255. /package/dist/{chunk-XKNHFDTT.js.map → chunk-3A2Z4OOS.js.map} +0 -0
  256. /package/dist/{chunk-RDGKVH6T.js.map → chunk-4NKIGSJM.js.map} +0 -0
  257. /package/dist/{chunk-QBNE55VA.js.map → chunk-4PG2CKI6.js.map} +0 -0
  258. /package/dist/{chunk-S4CDUXQY.js.map → chunk-6545JDIM.js.map} +0 -0
  259. /package/dist/{chunk-2FA7U5XY.js.map → chunk-65HXVEVG.js.map} +0 -0
  260. /package/dist/{chunk-U6NGKS32.js.map → chunk-6BYJQ3L2.js.map} +0 -0
  261. /package/dist/{chunk-OMX6TKXH.js.map → chunk-6PUF7LUO.js.map} +0 -0
  262. /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
  263. /package/dist/{chunk-VG4SSPAW.js.map → chunk-AI5M4FVQ.js.map} +0 -0
  264. /package/dist/{chunk-YMOPYG3K.js.map → chunk-BIJAWZYW.js.map} +0 -0
  265. /package/dist/{chunk-M5ERTI4I.js.map → chunk-BLHKR4GJ.js.map} +0 -0
  266. /package/dist/{chunk-CEH2AFXG.js.map → chunk-C24UZSFW.js.map} +0 -0
  267. /package/dist/{chunk-EH65UV2Z.js.map → chunk-C3ZYZKDJ.js.map} +0 -0
  268. /package/dist/{chunk-NFP4KPTA.js.map → chunk-CDLPF3PX.js.map} +0 -0
  269. /package/dist/{chunk-FFUMTH27.js.map → chunk-CQ6IWZDI.js.map} +0 -0
  270. /package/dist/{chunk-KWIGDKM2.js.map → chunk-D2YNNDML.js.map} +0 -0
  271. /package/dist/{chunk-65JOGLIS.js.map → chunk-D3DUA64S.js.map} +0 -0
  272. /package/dist/{chunk-2ITZ74A6.js.map → chunk-DSEHPUID.js.map} +0 -0
  273. /package/dist/{chunk-AF5H7TKI.js.map → chunk-EH7BNIUN.js.map} +0 -0
  274. /package/dist/{chunk-IGZCAHFL.js.map → chunk-EQRD4NMH.js.map} +0 -0
  275. /package/dist/{chunk-CX4OLNIH.js.map → chunk-ER2UPUMG.js.map} +0 -0
  276. /package/dist/{chunk-SZMYGDSM.js.map → chunk-F2JXJABQ.js.map} +0 -0
  277. /package/dist/{chunk-CHGG74CY.js.map → chunk-F4W5HTED.js.map} +0 -0
  278. /package/dist/{chunk-H2IRSXZN.js.map → chunk-FFWONAAW.js.map} +0 -0
  279. /package/dist/{chunk-TNGH4ZYI.js.map → chunk-GNWLTCKC.js.map} +0 -0
  280. /package/dist/{chunk-OJUEUQDJ.js.map → chunk-JJ6ZEFXC.js.map} +0 -0
  281. /package/dist/{chunk-U65VJSCJ.js.map → chunk-JMXHVJ2V.js.map} +0 -0
  282. /package/dist/{chunk-NACLNNFQ.js.map → chunk-KSZKQTZS.js.map} +0 -0
  283. /package/dist/{chunk-TCQRIIIN.js.map → chunk-LSR5LQXN.js.map} +0 -0
  284. /package/dist/{chunk-B4AOWRYF.js.map → chunk-NTFXBILO.js.map} +0 -0
  285. /package/dist/{chunk-2PSX5BJU.js.map → chunk-NZPFCP5A.js.map} +0 -0
  286. /package/dist/{chunk-C5IUOBCN.js.map → chunk-OERZXNSK.js.map} +0 -0
  287. /package/dist/{chunk-ZPS724LT.js.map → chunk-OIDICRH7.js.map} +0 -0
  288. /package/dist/{chunk-LTBKKSCX.js.map → chunk-OLBZ2WGG.js.map} +0 -0
  289. /package/dist/{chunk-PD66CVSD.js.map → chunk-OUKBMQ2O.js.map} +0 -0
  290. /package/dist/{chunk-GPFZFCRN.js.map → chunk-PP7R754B.js.map} +0 -0
  291. /package/dist/{chunk-GAJK3DQ5.js.map → chunk-PRRUK2ZH.js.map} +0 -0
  292. /package/dist/{chunk-TBCDF556.js.map → chunk-PW3GKWH3.js.map} +0 -0
  293. /package/dist/{chunk-KI64TTBL.js.map → chunk-R2Q6FTOX.js.map} +0 -0
  294. /package/dist/{chunk-KJXCD7VR.js.map → chunk-RCPKBW7K.js.map} +0 -0
  295. /package/dist/{chunk-INUBU6I5.js.map → chunk-RH3XLQG4.js.map} +0 -0
  296. /package/dist/{chunk-JBPKEARU.js.map → chunk-RKNJBZ55.js.map} +0 -0
  297. /package/dist/{chunk-NSTNGMSS.js.map → chunk-U4HZEW2B.js.map} +0 -0
  298. /package/dist/{chunk-XOHYGIWF.js.map → chunk-UHQE37NI.js.map} +0 -0
  299. /package/dist/{chunk-D3UXGE5D.js.map → chunk-UMZUKOJU.js.map} +0 -0
  300. /package/dist/{chunk-S4Z2OBTX.js.map → chunk-UVYL5G7A.js.map} +0 -0
  301. /package/dist/{chunk-4XLTUR6R.js.map → chunk-VKDBDJIX.js.map} +0 -0
  302. /package/dist/{chunk-UW4RYPWC.js.map → chunk-VSMSYDIH.js.map} +0 -0
  303. /package/dist/{chunk-LJABGXC4.js.map → chunk-W5IYHQA5.js.map} +0 -0
  304. /package/dist/{chunk-7UOXCCCI.js.map → chunk-WKWY7YF3.js.map} +0 -0
  305. /package/dist/{chunk-YWPLOJ7T.js.map → chunk-Y2YM4C75.js.map} +0 -0
  306. /package/dist/{chunk-NUF7VSEX.js.map → chunk-YZ5VC2JJ.js.map} +0 -0
  307. /package/dist/{chunk-EWKVYCFP.js.map → chunk-ZBIEX4XN.js.map} +0 -0
  308. /package/dist/{chunk-GBEOUCBB.js.map → chunk-ZMVW2HJJ.js.map} +0 -0
  309. /package/dist/{chunk-RPIS5FQ7.js.map → chunk-ZXROBS53.js.map} +0 -0
  310. /package/dist/{graph-edge-decay-A4SDFMMS.js.map → extraction-span.js.map} +0 -0
@@ -0,0 +1,413 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import {
5
+ TIMELINE_ANALYSIS_BATCH_OVERLAP,
6
+ TIMELINE_ANALYSIS_BATCH_SIZE,
7
+ TIMELINE_ANALYSIS_PROMPT_VERSION,
8
+ TimelineAnalysisConfigError,
9
+ analyzeTimelineCards,
10
+ } from "./analysis.js";
11
+ import type { TimelineCard, TimelineObservation } from "./types.js";
12
+
13
+ const DATE = "2026-08-17";
14
+ const TZ = "UTC";
15
+
16
+ function card(
17
+ overrides: Partial<TimelineCard> & Pick<TimelineCard, "id" | "startUtc" | "endUtc">,
18
+ ): TimelineCard {
19
+ return {
20
+ kind: "activity",
21
+ title: "main.ts — editor",
22
+ summary: "Code editor on ws-a",
23
+ categoryId: "development",
24
+ confidence: 0.8,
25
+ dayKey: DATE,
26
+ timezone: TZ,
27
+ machine: "ws-a",
28
+ evidenceIds: [1],
29
+ evidenceRange: {
30
+ firstKey: "ws-a|2026-08-17T10:00:00.000Z|hash-1",
31
+ lastKey: "ws-a|2026-08-17T10:00:00.000Z|hash-1",
32
+ },
33
+ ...overrides,
34
+ };
35
+ }
36
+
37
+ function observation(overrides: Partial<TimelineObservation> = {}): TimelineObservation {
38
+ return {
39
+ id: 1,
40
+ machine: "ws-a",
41
+ capturedAtUtc: "2026-08-17T10:00:00.000Z",
42
+ app: "editor",
43
+ windowTitle: "main.ts — editor",
44
+ contentHash: "hash-1",
45
+ ...overrides,
46
+ };
47
+ }
48
+
49
+ function sampleCards(): TimelineCard[] {
50
+ return [
51
+ card({
52
+ id: "card-1",
53
+ startUtc: "2026-08-17T10:00:00.000Z",
54
+ endUtc: "2026-08-17T10:15:00.000Z",
55
+ }),
56
+ ];
57
+ }
58
+
59
+ test("disabled makes zero provider calls and leaves cards unchanged", async () => {
60
+ const cards = sampleCards();
61
+ let calls = 0;
62
+ const result = await analyzeTimelineCards({
63
+ enabled: false,
64
+ cards,
65
+ observations: [observation()],
66
+ provider: "local",
67
+ model: "llama",
68
+ complete: async () => {
69
+ calls += 1;
70
+ return '{"ops":[]}';
71
+ },
72
+ });
73
+ assert.equal(result.status, "disabled");
74
+ assert.equal(result.cards, cards);
75
+ assert.equal(calls, 0);
76
+ assert.equal(result.provider, undefined);
77
+ });
78
+
79
+ test("invalid provider or model throws a typed error and does not call complete", async () => {
80
+ const cards = sampleCards();
81
+ let calls = 0;
82
+ const complete = async () => {
83
+ calls += 1;
84
+ return '{"ops":[]}';
85
+ };
86
+ await assert.rejects(
87
+ () =>
88
+ analyzeTimelineCards({
89
+ enabled: true,
90
+ cards,
91
+ observations: [observation()],
92
+ provider: "",
93
+ model: "llama",
94
+ complete,
95
+ }),
96
+ (err: unknown) => {
97
+ assert.ok(err instanceof TimelineAnalysisConfigError);
98
+ assert.equal(err.code, "invalid_config");
99
+ return true;
100
+ },
101
+ );
102
+ await assert.rejects(
103
+ () =>
104
+ analyzeTimelineCards({
105
+ enabled: true,
106
+ cards,
107
+ observations: [observation()],
108
+ provider: "openai",
109
+ model: " ",
110
+ complete,
111
+ }),
112
+ TimelineAnalysisConfigError,
113
+ );
114
+ await assert.rejects(
115
+ () =>
116
+ analyzeTimelineCards({
117
+ enabled: true,
118
+ cards,
119
+ observations: [observation()],
120
+ provider: "openai",
121
+ model: "gpt-4.1",
122
+ }),
123
+ TimelineAnalysisConfigError,
124
+ );
125
+ assert.equal(calls, 0);
126
+ assert.equal(cards[0]?.title, "main.ts — editor");
127
+ });
128
+
129
+ test("timeout returns provider_failed and leaves cards unchanged", async () => {
130
+ const cards = sampleCards();
131
+ const result = await analyzeTimelineCards({
132
+ enabled: true,
133
+ cards,
134
+ observations: [observation()],
135
+ provider: "openai",
136
+ model: "gpt-4.1",
137
+ timeoutMs: 20,
138
+ complete: () => Promise.withResolvers<string>().promise,
139
+ });
140
+ assert.equal(result.status, "provider_failed");
141
+ assert.equal(result.cards, cards);
142
+ assert.equal(result.provider, "openai");
143
+ assert.equal(result.model, "gpt-4.1");
144
+ });
145
+
146
+ test("malformed JSON returns invalid_output and leaves cards unchanged", async () => {
147
+ const cards = sampleCards();
148
+ const result = await analyzeTimelineCards({
149
+ enabled: true,
150
+ cards,
151
+ observations: [observation()],
152
+ provider: "local",
153
+ model: "llama",
154
+ complete: async () => "not-json {{",
155
+ });
156
+ assert.equal(result.status, "invalid_output");
157
+ assert.equal(result.cards, cards);
158
+ });
159
+
160
+ test("empty input returns invalid_output with zero provider calls", async () => {
161
+ const cards: TimelineCard[] = [];
162
+ let calls = 0;
163
+ const result = await analyzeTimelineCards({
164
+ enabled: true,
165
+ cards,
166
+ observations: [],
167
+ provider: "local",
168
+ model: "llama",
169
+ complete: async () => {
170
+ calls += 1;
171
+ return '{"ops":[]}';
172
+ },
173
+ });
174
+ assert.equal(result.status, "invalid_output");
175
+ assert.equal(result.cards, cards);
176
+ assert.equal(calls, 0);
177
+ });
178
+
179
+ test("valid no-op preserves cards and records prompt metadata", async () => {
180
+ const cards = sampleCards();
181
+ const result = await analyzeTimelineCards({
182
+ enabled: true,
183
+ cards,
184
+ observations: [observation()],
185
+ provider: "local",
186
+ model: "llama",
187
+ date: DATE,
188
+ timezone: TZ,
189
+ complete: async () => '{"ops":[]}',
190
+ });
191
+ assert.equal(result.status, "ok");
192
+ assert.equal(result.cards, cards);
193
+ assert.equal(result.provider, "local");
194
+ assert.equal(result.model, "llama");
195
+ assert.equal(result.promptVersion, TIMELINE_ANALYSIS_PROMPT_VERSION);
196
+ });
197
+
198
+ test("prompt instructs evidence-only chronology and forbids invention", async () => {
199
+ let prompt = "";
200
+ await analyzeTimelineCards({
201
+ enabled: true,
202
+ cards: sampleCards(),
203
+ observations: [observation({ browserUrl: "https://example.test/repo" })],
204
+ provider: "openai",
205
+ model: "gpt-4.1",
206
+ date: DATE,
207
+ timezone: TZ,
208
+ complete: async (input) => {
209
+ prompt = input.prompt;
210
+ return '{"ops":[]}';
211
+ },
212
+ });
213
+ assert.match(prompt, /only supplied evidence/i);
214
+ assert.match(prompt, /chronolog/i);
215
+ assert.match(prompt, /do not invent (people|places|tasks)/i);
216
+ assert.match(prompt, /strict JSON/i);
217
+ assert.match(prompt, /productivity|emotional/i);
218
+ assert.ok(prompt.includes("main.ts — editor"));
219
+ assert.ok(prompt.includes("https://example.test/repo"));
220
+ });
221
+
222
+ test("screenshots audio OCR and clipboard are not sent", async () => {
223
+ let prompt = "";
224
+ const dirty = {
225
+ ...observation(),
226
+ screenshot: "PNG-BYTES",
227
+ audio: "WAV-BYTES",
228
+ ocr: "OCR-SECRET",
229
+ clipboard: "CLIP-SECRET",
230
+ keystrokes: "KEY-SECRET",
231
+ } as TimelineObservation;
232
+ await analyzeTimelineCards({
233
+ enabled: true,
234
+ cards: sampleCards(),
235
+ observations: [dirty],
236
+ provider: "local",
237
+ model: "llama",
238
+ complete: async (input) => {
239
+ prompt = input.prompt;
240
+ return '{"ops":[]}';
241
+ },
242
+ });
243
+ assert.equal(prompt.includes("PNG-BYTES"), false);
244
+ assert.equal(prompt.includes("WAV-BYTES"), false);
245
+ assert.equal(prompt.includes("OCR-SECRET"), false);
246
+ assert.equal(prompt.includes("CLIP-SECRET"), false);
247
+ assert.equal(prompt.includes("KEY-SECRET"), false);
248
+ });
249
+
250
+ test("rate limit and abort are provider_failed", async () => {
251
+ const cards = sampleCards();
252
+ const limited = await analyzeTimelineCards({
253
+ enabled: true,
254
+ cards,
255
+ observations: [observation()],
256
+ provider: "openai",
257
+ model: "gpt-4.1",
258
+ complete: async () => {
259
+ throw new Error("429 rate limit");
260
+ },
261
+ });
262
+ assert.equal(limited.status, "provider_failed");
263
+ assert.equal(limited.cards, cards);
264
+
265
+ const aborted = await analyzeTimelineCards({
266
+ enabled: true,
267
+ cards,
268
+ observations: [observation()],
269
+ provider: "openai",
270
+ model: "gpt-4.1",
271
+ complete: async ({ signal }) => {
272
+ const err = Object.assign(new Error("aborted"), { name: "AbortError" });
273
+ signal.throwIfAborted?.();
274
+ throw err;
275
+ },
276
+ });
277
+ assert.equal(aborted.status, "provider_failed");
278
+ assert.equal(aborted.cards, cards);
279
+ });
280
+
281
+ test("pre-aborted caller signal skips provider dispatch", async () => {
282
+ const cards = sampleCards();
283
+ let dispatched = false;
284
+ const result = await analyzeTimelineCards({
285
+ enabled: true,
286
+ cards,
287
+ observations: [observation()],
288
+ provider: "openai",
289
+ model: "gpt-4.1",
290
+ signal: AbortSignal.abort(),
291
+ complete: async () => {
292
+ dispatched = true;
293
+ return '{"ops":[]}';
294
+ },
295
+ });
296
+ assert.equal(dispatched, false);
297
+ assert.equal(result.status, "provider_failed");
298
+ assert.equal(result.cards, cards);
299
+ });
300
+
301
+ test("valid op updates allowed fields and preserves evidence and manual edits", async () => {
302
+ const locked = card({
303
+ id: "locked",
304
+ startUtc: "2026-08-17T10:00:00.000Z",
305
+ endUtc: "2026-08-17T10:10:00.000Z",
306
+ title: "Keep this title",
307
+ manualEdit: { title: "Keep this title", editedAtUtc: "2026-08-17T12:00:00.000Z" },
308
+ });
309
+ const open = card({
310
+ id: "open",
311
+ startUtc: "2026-08-17T10:10:00.000Z",
312
+ endUtc: "2026-08-17T10:20:00.000Z",
313
+ evidenceIds: [2],
314
+ evidenceRange: {
315
+ firstKey: "ws-a|2026-08-17T10:10:00.000Z|hash-2",
316
+ lastKey: "ws-a|2026-08-17T10:10:00.000Z|hash-2",
317
+ },
318
+ });
319
+ const cards = [locked, open];
320
+ const result = await analyzeTimelineCards({
321
+ enabled: true,
322
+ cards,
323
+ observations: [
324
+ observation(),
325
+ observation({
326
+ id: 2,
327
+ capturedAtUtc: "2026-08-17T10:10:00.000Z",
328
+ contentHash: "hash-2",
329
+ windowTitle: "analysis.ts — editor",
330
+ }),
331
+ ],
332
+ provider: "local",
333
+ model: "llama",
334
+ complete: async () =>
335
+ JSON.stringify({
336
+ ops: [
337
+ {
338
+ cardId: "locked",
339
+ title: "Should not apply",
340
+ summary: "ignored",
341
+ categoryId: "browsing",
342
+ confidence: 0.1,
343
+ evidenceRange: locked.evidenceRange,
344
+ },
345
+ {
346
+ cardId: "open",
347
+ title: "analysis.ts — editor",
348
+ summary: "Edited analysis.ts on ws-a",
349
+ categoryId: "development",
350
+ confidence: 0.9,
351
+ uncertainty: "low",
352
+ evidenceRange: open.evidenceRange,
353
+ },
354
+ ],
355
+ }),
356
+ });
357
+ assert.equal(result.status, "ok");
358
+ assert.notEqual(result.cards, cards);
359
+ const nextLocked = result.cards.find((item) => item.id === "locked");
360
+ const nextOpen = result.cards.find((item) => item.id === "open");
361
+ assert.equal(nextLocked?.title, "Keep this title");
362
+ assert.deepEqual(nextLocked?.manualEdit, locked.manualEdit);
363
+ assert.deepEqual(nextLocked?.evidenceRange, locked.evidenceRange);
364
+ assert.equal(nextOpen?.title, "analysis.ts — editor");
365
+ assert.equal(nextOpen?.summary, "Edited analysis.ts on ws-a");
366
+ assert.equal(nextOpen?.confidence, 0.9);
367
+ assert.deepEqual(nextOpen?.evidenceIds, [2]);
368
+ assert.deepEqual(nextOpen?.evidenceRange, open.evidenceRange);
369
+ });
370
+
371
+ test("ops without evidence ranges are invalid_output", async () => {
372
+ const cards = sampleCards();
373
+ const result = await analyzeTimelineCards({
374
+ enabled: true,
375
+ cards,
376
+ observations: [observation()],
377
+ provider: "local",
378
+ model: "llama",
379
+ complete: async () =>
380
+ JSON.stringify({
381
+ ops: [{ cardId: "card-1", title: "Invented Alice in Paris", summary: "mood" }],
382
+ }),
383
+ });
384
+ assert.equal(result.status, "invalid_output");
385
+ assert.equal(result.cards, cards);
386
+ });
387
+
388
+ test("batch constants stay bounded with explicit overlap", () => {
389
+ assert.equal(TIMELINE_ANALYSIS_BATCH_SIZE, 40);
390
+ assert.equal(TIMELINE_ANALYSIS_BATCH_OVERLAP, 2);
391
+ assert.ok(TIMELINE_ANALYSIS_BATCH_OVERLAP < TIMELINE_ANALYSIS_BATCH_SIZE);
392
+ });
393
+
394
+ test("local and remote provider ids are forwarded unchanged", async () => {
395
+ const seen: string[] = [];
396
+ for (const [provider, model] of [
397
+ ["local", "llama"],
398
+ ["openai", "gpt-4.1"],
399
+ ] as const) {
400
+ await analyzeTimelineCards({
401
+ enabled: true,
402
+ cards: sampleCards(),
403
+ observations: [observation()],
404
+ provider,
405
+ model,
406
+ complete: async (input) => {
407
+ seen.push(`${input.provider}/${input.model}`);
408
+ return '{"ops":[]}';
409
+ },
410
+ });
411
+ }
412
+ assert.deepEqual(seen, ["local/llama", "openai/gpt-4.1"]);
413
+ });