hippo-memory 1.68.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (864) hide show
  1. package/README.md +6 -3
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -30,4 +30,9 @@ export declare const RAREST_TERM_COUNT = 8;
30
30
  /** Terms sorted by ascending FTS doc count (rarest first), zero-count terms dropped, ties by term.
31
31
  * Pure: `docCount` (an FTS lookup in the caller) does the only I/O. */
32
32
  export declare function rarestPromptTerms(terms: Iterable<string>, docCount: (term: string) => number, maxTerms?: number): string[];
33
+ /** The pieces FTS5's unicode61 tokenizer indexes a term as, so `journal_mode` is `journal` and `mode`. */
34
+ export declare function ftsTermParts(term: string): string[];
35
+ /** The rarest terms as a space-joined FTS query, given each part's document count; a term counts as its rarest part,
36
+ * an upper bound on rows holding the whole term, and a term with no parts counts 0, so it is dropped. */
37
+ export declare function rarestFtsQuery(terms: readonly string[], docCount: (part: string) => number, maxTerms?: number): string;
33
38
  //# sourceMappingURL=prompt-recall.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /** Recall gated on the hook prompt, not the five newest memories (pure, no I/O). */
2
- import { tokenize } from './tokenize.js';
2
+ import { tokenize } from '../util/tokenize.js';
3
3
  import { STOP_WORDS } from './memory-quality.js';
4
4
  // Latency bound, not tuned: fixed in the prereg regardless of gate config.
5
5
  export const PROMPT_RECALL_MAX_CHARS = 4000;
@@ -64,4 +64,17 @@ export function rarestPromptTerms(terms, docCount, maxTerms = RAREST_TERM_COUNT)
64
64
  .slice(0, maxTerms)
65
65
  .map((x) => x.t);
66
66
  }
67
+ /** The pieces FTS5's unicode61 tokenizer indexes a term as, so `journal_mode` is `journal` and `mode`. */
68
+ export function ftsTermParts(term) {
69
+ return term.split(/[^\p{L}\p{N}]+/u).filter(Boolean);
70
+ }
71
+ /** The rarest terms as a space-joined FTS query, given each part's document count; a term counts as its rarest part,
72
+ * an upper bound on rows holding the whole term, and a term with no parts counts 0, so it is dropped. */
73
+ export function rarestFtsQuery(terms, docCount, maxTerms = RAREST_TERM_COUNT) {
74
+ const termCount = (t) => {
75
+ const parts = ftsTermParts(t);
76
+ return parts.length === 0 ? 0 : Math.min(...parts.map(docCount));
77
+ };
78
+ return rarestPromptTerms(terms, termCount, maxTerms).join(' ');
79
+ }
67
80
  //# sourceMappingURL=prompt-recall.js.map
@@ -5,8 +5,17 @@
5
5
  * Inspired by the biological salience network (anterior insula + dACC):
6
6
  * not everything that enters working memory deserves long-term storage.
7
7
  */
8
- import { textOverlap } from './tokenize.js';
9
- import { duplicateKey, heldTextKeys } from './same-text.js';
8
+ import { textOverlap } from '../util/tokenize.js';
9
+ import { duplicateKey, heldTextKeys } from '../util/same-text.js';
10
+ // Each store or skip reason carries a score; a novel memory adds bonuses for structure and length.
11
+ const REPEAT_ERROR_SCORE = 0.3;
12
+ const ERROR_DESPITE_OVERLAP_SCORE = 0.7;
13
+ const NEAR_DUPLICATE_SCORE = 0.5;
14
+ const DUPLICATE_SCORE = 0.1;
15
+ const NOVEL_ERROR_SCORE = 0.9;
16
+ const NOVEL_BASE_SCORE = 0.5;
17
+ const STRUCTURED_TAGS_BONUS = 0.15;
18
+ const LENGTH_BONUS = 0.1;
10
19
  const DEFAULTS = {
11
20
  recentWindow: 20,
12
21
  overlapThreshold: 0.6,
@@ -33,34 +42,40 @@ export function computeSalience(content, tags, recentMemories, options = {}) {
33
42
  return {
34
43
  decision: 'start_weak',
35
44
  reason: `repeat_error (${recentErrors} recent errors, overlap ${(duplicateMatch.overlap * 100).toFixed(0)}% with ${duplicateMatch.matchId})`,
36
- score: 0.3,
45
+ score: REPEAT_ERROR_SCORE,
37
46
  };
38
47
  }
39
- return { decision: 'store', reason: 'error_despite_overlap', score: 0.7 };
48
+ return { decision: 'store', reason: 'error_despite_overlap', score: ERROR_DESPITE_OVERLAP_SCORE };
40
49
  }
41
- // A near-duplicate may be a changed value (port 8080 then 8081), so only the same text is skipped.
42
- const key = duplicateKey(trimmed);
43
- const same = window.find((m) => heldTextKeys(m).includes(key));
44
- if (!same) {
45
- return {
46
- decision: 'store',
47
- reason: `near_duplicate (${(duplicateMatch.overlap * 100).toFixed(0)}% overlap with ${duplicateMatch.matchId})`,
48
- score: 0.5,
49
- };
50
- }
51
- return { decision: 'skip', reason: `duplicate (same text as ${same.id})`, score: 0.1 };
50
+ return judgeOverlappingNonError(trimmed, window, duplicateMatch);
52
51
  }
53
52
  if (isError) {
54
- return { decision: 'store', reason: 'error_novel', score: 0.9 };
53
+ return { decision: 'store', reason: 'error_novel', score: NOVEL_ERROR_SCORE };
54
+ }
55
+ return scoreNovel(trimmed, tags);
56
+ }
57
+ function judgeOverlappingNonError(trimmed, window, duplicateMatch) {
58
+ // A near-duplicate may be a changed value (port 8080 then 8081), so only the same text is skipped.
59
+ const key = duplicateKey(trimmed);
60
+ const same = window.find((m) => heldTextKeys(m).includes(key));
61
+ if (!same) {
62
+ return {
63
+ decision: 'store',
64
+ reason: `near_duplicate (${(duplicateMatch.overlap * 100).toFixed(0)}% overlap with ${duplicateMatch.matchId})`,
65
+ score: NEAR_DUPLICATE_SCORE,
66
+ };
55
67
  }
68
+ return { decision: 'skip', reason: `duplicate (same text as ${same.id})`, score: DUPLICATE_SCORE };
69
+ }
70
+ function scoreNovel(trimmed, tags) {
56
71
  const hasStructuredTags = tags.some(t => t.startsWith('speaker:') || t.startsWith('topic:') || t.startsWith('scope:'));
57
- let score = 0.5;
72
+ let score = NOVEL_BASE_SCORE;
58
73
  if (hasStructuredTags)
59
- score += 0.15;
74
+ score += STRUCTURED_TAGS_BONUS;
60
75
  if (trimmed.length > 100)
61
- score += 0.1;
76
+ score += LENGTH_BONUS;
62
77
  if (trimmed.length > 300)
63
- score += 0.1;
78
+ score += LENGTH_BONUS;
64
79
  return { decision: 'store', reason: 'novel', score: Math.min(score, 1.0) };
65
80
  }
66
81
  function findBestOverlap(content, memories) {
@@ -1,4 +1,4 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from './memory.js';
2
2
  export declare const DEFAULT_RECALL_BUDGET = 4000;
3
3
  export declare const DEFAULT_LOCAL_BUMP = 1.2;
4
4
  /** One score mutation applied after candidate generation; allocated only under `recall --why` or `RecallOpts.explain`. */
@@ -90,4 +90,4 @@ export interface ScoreBreakdown {
90
90
  /** 1.05 if a summary was rebuilt within 7 days; 1.0 otherwise. */
91
91
  summaryFreshnessBoost?: number;
92
92
  }
93
- //# sourceMappingURL=types.d.ts.map
93
+ //# sourceMappingURL=search-types.d.ts.map
@@ -1,4 +1,4 @@
1
1
  export const DEFAULT_RECALL_BUDGET = 4000;
2
2
  // Local memories outrank global ones by this factor; getContext applies it as a 1/x global discount.
3
3
  export const DEFAULT_LOCAL_BUMP = 1.2;
4
- //# sourceMappingURL=types.js.map
4
+ //# sourceMappingURL=search-types.js.map
@@ -0,0 +1,5 @@
1
+ import type { MemoryEntry } from './memory.js';
2
+ export declare const SESSION_DIGEST_TAG = "session-digest";
3
+ /** Facts extracted from a digest and DAG summaries over one inherit its tag, but they are not the digest itself. */
4
+ export declare function isSessionDigestRow(entry: Pick<MemoryEntry, 'source' | 'tags' | 'extracted_from'>): boolean;
5
+ //# sourceMappingURL=session-digest-row.d.ts.map
@@ -0,0 +1,6 @@
1
+ export const SESSION_DIGEST_TAG = 'session-digest';
2
+ /** Facts extracted from a digest and DAG summaries over one inherit its tag, but they are not the digest itself. */
3
+ export function isSessionDigestRow(entry) {
4
+ return entry.source === SESSION_DIGEST_TAG && entry.tags.includes(SESSION_DIGEST_TAG) && !entry.extracted_from;
5
+ }
6
+ //# sourceMappingURL=session-digest-row.js.map
@@ -1,4 +1,4 @@
1
- import type { MemoryEntry } from './memory.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
2
  import { type ActionBody } from './dashboard-params.js';
3
3
  /** What an action hands the router: a status, a JSON body, and whether the store changed. */
4
4
  export interface ActionResult {
@@ -1,9 +1,9 @@
1
1
  // The four dashboard writes, each a thin call into an existing store or api function; the router owns HTTP and the cache.
2
- import * as api from './api.js';
3
- import { NotFoundError } from './api-errors.js';
4
- import { listTouchableConflicts, resolveConflict } from './store/conflicts.js';
5
- import { readEntry } from './store/entry-reads.js';
6
- import { writeEntry } from './store/entry-writes.js';
2
+ import * as api from '../api/index.js';
3
+ import { NotFoundError } from '../core/api-errors.js';
4
+ import { listTouchableConflicts, resolveConflict } from '../store/conflicts.js';
5
+ import { readEntry } from '../store/entry-reads.js';
6
+ import { writeEntry } from '../store/entry-writes.js';
7
7
  import { ParamError, parseMemoryId } from './dashboard-params.js';
8
8
  import { isLiveMemory } from './dashboard-snapshot.js';
9
9
  const ACTOR = 'dashboard';
@@ -1,4 +1,4 @@
1
- import { type MemoryEntry } from './memory.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
2
  import { type Snapshot } from './dashboard-snapshot.js';
3
3
  import type { MemoryQuery } from './dashboard-params.js';
4
4
  import type { MemoryDetail, MemoryPage, Overview, ProjectDetail, SearchResult } from './dashboard-types.js';
@@ -10,6 +10,11 @@ export declare function buildProjectDetail(snap: Snapshot, key: string): Project
10
10
  export declare function buildMemoryPage(snap: Snapshot, key: string, query: MemoryQuery): MemoryPage | null;
11
11
  /** Substring search over content and tags across every project; it reads the snapshot and never touches recall. */
12
12
  export declare function buildSearch(snap: Snapshot, text: string): SearchResult;
13
+ export interface MemoryDetailOptions {
14
+ readonly snapshotId: number;
15
+ readonly nowMs: number;
16
+ readonly embedded: boolean;
17
+ }
13
18
  /** Full detail read fresh from the store, never from the snapshot, so the drawer is current inside the coalescing window. */
14
- export declare function buildMemoryDetail(hippoRoot: string, tenantId: string, entry: MemoryEntry, snapshotId: number, nowMs: number, embedded: boolean): MemoryDetail;
19
+ export declare function buildMemoryDetail(hippoRoot: string, tenantId: string, entry: MemoryEntry, options: MemoryDetailOptions): MemoryDetail;
15
20
  //# sourceMappingURL=dashboard-queries.d.ts.map
@@ -1,7 +1,6 @@
1
1
  // Read models over a snapshot: overview, project, memory page, search, and the fresh single-memory detail.
2
- import { calculateStrength } from './memory.js';
3
- import { listMemoryConflicts } from './store/conflicts.js';
4
- import { readEntry } from './store/entry-reads.js';
2
+ import { calculateStrength } from '../core/memory.js';
3
+ import { loadOpenConflictsOf } from '../store/conflicts.js';
5
4
  import { BANDS, DAY_MS, LAYERS, isLiveMemory, memoryFacts, projectIdentity, } from './dashboard-snapshot.js';
6
5
  const SERIES_DAYS = 90;
7
6
  /** The server words each delta for this range; the client re-slices the series for 7d and 90d. */
@@ -297,12 +296,8 @@ export function buildSearch(snap, text) {
297
296
  }
298
297
  function openConflictsOf(hippoRoot, tenantId, entry, nowMs) {
299
298
  const out = [];
300
- for (const c of listMemoryConflicts(hippoRoot, 'open', tenantId)) {
301
- if (c.memory_a_id !== entry.id && c.memory_b_id !== entry.id)
302
- continue;
303
- const otherId = c.memory_a_id === entry.id ? c.memory_b_id : c.memory_a_id;
304
- const other = readEntry(hippoRoot, otherId, tenantId);
305
- if (!other || !isLiveMemory(other))
299
+ for (const { conflict: c, other } of loadOpenConflictsOf(hippoRoot, tenantId, entry.id)) {
300
+ if (!isLiveMemory(other))
306
301
  continue;
307
302
  out.push({
308
303
  id: c.id,
@@ -319,7 +314,8 @@ function openConflictsOf(hippoRoot, tenantId, entry, nowMs) {
319
314
  return out;
320
315
  }
321
316
  /** Full detail read fresh from the store, never from the snapshot, so the drawer is current inside the coalescing window. */
322
- export function buildMemoryDetail(hippoRoot, tenantId, entry, snapshotId, nowMs, embedded) {
317
+ export function buildMemoryDetail(hippoRoot, tenantId, entry, options) {
318
+ const { snapshotId, nowMs, embedded } = options;
323
319
  const f = memoryFacts(entry, nowMs);
324
320
  const project = projectIdentity(entry.origin_project);
325
321
  return {
@@ -1,13 +1,11 @@
1
- import { Layer as MemoryLayer, type MemoryEntry } from './memory.js';
2
- import type { MemoryConflict } from './store/rows.js';
1
+ import { Layer as MemoryLayer, type ConfidenceInputs, type MemoryEntry, type StrengthInputs } from '../core/memory.js';
2
+ import { type DashboardRow, type ExcludedCounts } from '../store/dashboard-reads.js';
3
+ import type { MemoryConflict } from '../store/rows.js';
3
4
  import type { Band, ChipCounts, Layer, Overview, ProjectKind, ProjectSummary, ScatterGrid, ScatterPoints } from './dashboard-types.js';
4
- export declare const DAY_MS = 86400000;
5
+ import { DAY_MS } from '../util/time.js';
6
+ export { DAY_MS };
5
7
  export declare const LAYERS: readonly Layer[];
6
8
  export declare const BANDS: readonly Band[];
7
- /** An outside commit rebuilds the snapshot at most this often. */
8
- export declare const COALESCE_MS = 10000;
9
- /** Projected strengths track the clock, so the snapshot is rebuilt at least this often. */
10
- export declare const TTL_MS: number;
11
9
  /** The one predicate for "shown on the dashboard": not superseded, not archived, not quarantined. */
12
10
  export declare function isLiveMemory(entry: Pick<MemoryEntry, 'superseded_by' | 'kind' | 'scope'>): boolean;
13
11
  /** Wire key, display name and kind of a project. */
@@ -34,7 +32,7 @@ export interface MemoryFacts {
34
32
  wrong: boolean;
35
33
  }
36
34
  /** Strength now and at +7d and +30d, band, age and the confidence split for one entry at `nowMs`. */
37
- export declare function memoryFacts(entry: MemoryEntry, nowMs: number): MemoryFacts;
35
+ export declare function memoryFacts(entry: StrengthInputs & ConfidenceInputs & Pick<MemoryEntry, 'layer'>, nowMs: number): MemoryFacts;
38
36
  /** One live memory as the snapshot holds it: numbers and short strings only, never the full entry. */
39
37
  export interface Fact {
40
38
  id: string;
@@ -116,7 +114,9 @@ export interface SnapshotInput {
116
114
  id: number;
117
115
  tenantId: string;
118
116
  nowMs: number;
119
- entries: readonly MemoryEntry[];
117
+ entries: readonly DashboardRow[];
118
+ /** Rows counted out before `entries` was read; any entry here that is not live adds to them. */
119
+ excluded?: ExcludedCounts;
120
120
  openConflicts: readonly Pick<MemoryConflict, 'memory_a_id' | 'memory_b_id'>[];
121
121
  embeddedIds: ReadonlySet<string> | null;
122
122
  }
@@ -1,13 +1,11 @@
1
1
  // The dashboard's read model: one in-memory snapshot of a tenant's live memories, grouped by origin project.
2
2
  // Pure build functions plus one cache; the queries over it live in dashboard-queries.ts.
3
- import * as fs from 'fs';
4
- import { calculateStrength, confidenceFacets, netWrong, Layer as MemoryLayer } from './memory.js';
5
- import { isQuarantineScope } from './quarantine.js';
6
- import { listMemoryConflicts } from './store/conflicts.js';
7
- import { loadAllEntries } from './store/entry-reads.js';
8
- import { closeHippoDb, getHippoDbPath, openHippoDbReadOnly } from './db.js';
9
- import { storedVectorIds } from './vector-store.js';
10
- export const DAY_MS = 86_400_000;
3
+ import { calculateStrength, facetsOf, netWrong, Layer as MemoryLayer } from '../core/memory.js';
4
+ import { isQuarantineScope } from '../trust/quarantine.js';
5
+ import { listMemoryConflicts } from '../store/conflicts.js';
6
+ import { DashboardConnection, loadDashboardRows } from '../store/dashboard-reads.js';
7
+ import { DAY_MS } from '../util/time.js';
8
+ export { DAY_MS };
11
9
  export const LAYERS = ['buffer', 'episodic', 'semantic', 'trace'];
12
10
  // Wire order of `Band`, and the order the mockup sorts bands in.
13
11
  export const BANDS = ['pinned', 'strong', 'fading', 'atRisk'];
@@ -18,9 +16,9 @@ const BAND_AT_RISK = 3;
18
16
  const CONFIDENCE_ORDER = ['verified', 'observed', 'inferred', 'stale'];
19
17
  const HEAD_CHARS = 240;
20
18
  /** An outside commit rebuilds the snapshot at most this often. */
21
- export const COALESCE_MS = 10_000;
19
+ const COALESCE_MS = 10_000;
22
20
  /** Projected strengths track the clock, so the snapshot is rebuilt at least this often. */
23
- export const TTL_MS = 5 * 60_000;
21
+ const TTL_MS = 5 * 60_000;
24
22
  /** The one predicate for "shown on the dashboard": not superseded, not archived, not quarantined. */
25
23
  export function isLiveMemory(entry) {
26
24
  return !entry.superseded_by && (entry.kind === 'raw' || entry.kind === 'distilled') && !isQuarantineScope(entry.scope);
@@ -52,7 +50,7 @@ export function memoryFacts(entry, nowMs) {
52
50
  const strength = calculateStrength(entry, now);
53
51
  const strength7d = calculateStrength(entry, new Date(nowMs + 7 * DAY_MS));
54
52
  const strength30d = calculateStrength(entry, new Date(nowMs + 30 * DAY_MS));
55
- const facets = confidenceFacets(entry, now);
53
+ const facets = facetsOf(entry, now);
56
54
  const band = entry.pinned ? BAND_PINNED : strength30d < 0.2 ? BAND_AT_RISK : strength >= 0.5 ? BAND_STRONG : BAND_FADING;
57
55
  return {
58
56
  strength,
@@ -144,30 +142,42 @@ function toFact(entry, f, project, embedded, createdMs) {
144
142
  createdMs,
145
143
  };
146
144
  }
145
+ function tallyExcluded(entry, excluded) {
146
+ if (isQuarantineScope(entry.scope))
147
+ excluded.quarantined++;
148
+ else if (entry.superseded_by || entry.kind === 'superseded')
149
+ excluded.superseded++;
150
+ else if (entry.kind === 'archived')
151
+ excluded.archived++;
152
+ }
153
+ function draftIndexFor(identity, projectIndex, drafts) {
154
+ let p = projectIndex.get(identity.key);
155
+ if (p === undefined) {
156
+ p = drafts.length;
157
+ projectIndex.set(identity.key, p);
158
+ drafts.push(newDraft(identity));
159
+ }
160
+ return p;
161
+ }
162
+ function finishProject(d) {
163
+ d.summary.atRisk = d.summary.bands.atRisk;
164
+ d.summary.share = d.summary.live > 0 ? d.summary.atRisk / d.summary.live : 0;
165
+ d.summary.lastRetrievedDays = d.summary.live > 0 ? round1(d.lastDays) : null;
166
+ return { summary: d.summary, members: Int32Array.from(d.members), firstCreatedMs: d.firstCreatedMs };
167
+ }
147
168
  /** Builds the snapshot from already-loaded rows; it touches no store, so tests can feed it directly. */
148
169
  export function buildSnapshot(input) {
149
170
  const { entries, embeddedIds, nowMs } = input;
150
- const excluded = { superseded: 0, archived: 0, quarantined: 0 };
171
+ const excluded = { superseded: 0, archived: 0, quarantined: 0, ...input.excluded };
151
172
  const facts = [];
152
173
  const projectIndex = new Map();
153
174
  const drafts = [];
154
175
  for (const entry of entries) {
155
176
  if (!isLiveMemory(entry)) {
156
- if (isQuarantineScope(entry.scope))
157
- excluded.quarantined++;
158
- else if (entry.superseded_by || entry.kind === 'superseded')
159
- excluded.superseded++;
160
- else if (entry.kind === 'archived')
161
- excluded.archived++;
177
+ tallyExcluded(entry, excluded);
162
178
  continue;
163
179
  }
164
- const identity = projectIdentity(entry.origin_project);
165
- let p = projectIndex.get(identity.key);
166
- if (p === undefined) {
167
- p = drafts.length;
168
- projectIndex.set(identity.key, p);
169
- drafts.push(newDraft(identity));
170
- }
180
+ const p = draftIndexFor(projectIdentity(entry.origin_project), projectIndex, drafts);
171
181
  const f = memoryFacts(entry, nowMs);
172
182
  const embedded = embeddedIds !== null && embeddedIds.has(entry.id);
173
183
  const parsedCreated = Date.parse(entry.created);
@@ -187,12 +197,7 @@ export function buildSnapshot(input) {
187
197
  facts.push(toFact(entry, f, p, embedded, Number.isFinite(parsedCreated) ? parsedCreated : nowMs));
188
198
  }
189
199
  const openConflicts = countOpenConflicts(facts, drafts.map((d) => d.summary), input.openConflicts);
190
- const projects = drafts.map((d) => {
191
- d.summary.atRisk = d.summary.bands.atRisk;
192
- d.summary.share = d.summary.live > 0 ? d.summary.atRisk / d.summary.live : 0;
193
- d.summary.lastRetrievedDays = d.summary.live > 0 ? round1(d.lastDays) : null;
194
- return { summary: d.summary, members: Int32Array.from(d.members), firstCreatedMs: d.firstCreatedMs };
195
- });
200
+ const projects = drafts.map(finishProject);
196
201
  const embeddedTotal = projects.reduce((sum, p) => sum + p.summary.embedded, 0);
197
202
  return {
198
203
  id: input.id,
@@ -227,82 +232,74 @@ function countOpenConflicts(facts, summaries, conflicts) {
227
232
  }
228
233
  return total;
229
234
  }
235
+ function cacheStillServes(hit, want, wallMs) {
236
+ const age = wallMs - hit.builtAtMs;
237
+ return hit.snapshot.tenantId === want.tenantId
238
+ && (hit.dataVersion !== null || want.dataVersion === null)
239
+ && age < TTL_MS
240
+ && (hit.dataVersion === want.dataVersion || age < COALESCE_MS);
241
+ }
230
242
  // Keeps ids rising between two services created in the same millisecond of one process.
231
243
  let highestIssuedId = 0;
232
- /** Holds one read-only connection for its commit signal (`PRAGMA data_version`) and the snapshot cache; `now` dates the strength projections, `cacheClock` ages the cache. */
233
- export function createSnapshotService(hippoRoot, now, cacheClock = Date.now) {
234
- let db = null;
235
- let cached = null;
244
+ class SnapshotCacheService {
245
+ hippoRoot;
246
+ now;
247
+ cacheClock;
248
+ connection;
249
+ cached = null;
236
250
  // Wall clock, not `now`, so ids keep rising across server restarts and a client holding an old tab never sees a lower one.
237
- let lastId = Math.max(Date.now(), highestIssuedId);
238
- let lastEmbeddedIds;
239
- const dataVersion = () => {
240
- if (db === null) {
241
- if (!fs.existsSync(getHippoDbPath(hippoRoot)))
242
- return null;
243
- db = openHippoDbReadOnly(hippoRoot);
251
+ lastId = Math.max(Date.now(), highestIssuedId);
252
+ lastEmbeddedIds;
253
+ constructor(hippoRoot, now, cacheClock) {
254
+ this.hippoRoot = hippoRoot;
255
+ this.now = now;
256
+ this.cacheClock = cacheClock;
257
+ this.connection = new DashboardConnection(hippoRoot);
258
+ }
259
+ build(tenantId, dv, nowMs) {
260
+ const rows = dv === null ? null : loadDashboardRows(this.hippoRoot, tenantId);
261
+ const openConflicts = dv === null ? [] : listMemoryConflicts(this.hippoRoot, 'open', tenantId);
262
+ this.lastId += 1;
263
+ highestIssuedId = Math.max(highestIssuedId, this.lastId);
264
+ // After loadDashboardRows, whose writable open has run any pending migration and legacy embeddings.json import.
265
+ this.lastEmbeddedIds = this.connection.embeddedIds();
266
+ return buildSnapshot({ id: this.lastId, tenantId, nowMs, entries: rows?.live ?? [], excluded: rows?.excluded, openConflicts, embeddedIds: this.lastEmbeddedIds });
267
+ }
268
+ get(tenantId, fresh = false) {
269
+ const nowMs = this.now();
270
+ // A frozen eval clock (HIPPO_FAKE_NOW) would never age the cache, so reuse is timed on its own clock.
271
+ const wallMs = this.cacheClock();
272
+ // Read before the build, so a commit that lands during it shows on the next read.
273
+ const dv = this.connection.dataVersion();
274
+ const hit = this.cached;
275
+ if (hit !== null && !fresh) {
276
+ if (cacheStillServes(hit, { tenantId, dataVersion: dv }, wallMs))
277
+ return hit.snapshot;
244
278
  }
245
- // SAFETY: PRAGMA data_version returns one row with that single integer column.
246
- const row = db.prepare('PRAGMA data_version').get();
247
- return row.data_version;
248
- };
249
- // No database means no vectors; a store not yet on schema v52 has no table to count, so coverage is unknown.
250
- const readEmbeddedIds = () => {
251
- if (db === null)
252
- return new Set();
253
- // SAFETY: sqlite_master rows carry a text name; the query only tests presence.
254
- const table = db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'memory_vectors'").get();
255
- return table === undefined ? null : storedVectorIds(db);
256
- };
257
- const build = (tenantId, dv, nowMs) => {
258
- const entries = dv === null ? [] : loadAllEntries(hippoRoot, tenantId);
259
- const openConflicts = dv === null ? [] : listMemoryConflicts(hippoRoot, 'open', tenantId);
260
- lastId += 1;
261
- highestIssuedId = Math.max(highestIssuedId, lastId);
262
- // After loadAllEntries, whose writable open has run any pending migration and legacy embeddings.json import.
263
- lastEmbeddedIds = readEmbeddedIds();
264
- return buildSnapshot({ id: lastId, tenantId, nowMs, entries, openConflicts, embeddedIds: lastEmbeddedIds });
265
- };
266
- return {
267
- get(tenantId, fresh = false) {
268
- const nowMs = now();
269
- // A frozen eval clock (HIPPO_FAKE_NOW) would never age the cache, so reuse is timed on its own clock.
270
- const wallMs = cacheClock();
271
- // Read before the build, so a commit that lands during it shows on the next read.
272
- const dv = dataVersion();
273
- const hit = cached;
274
- if (hit !== null && !fresh) {
275
- const age = wallMs - hit.builtAtMs;
276
- const reusable = hit.snapshot.tenantId === tenantId
277
- && (hit.dataVersion !== null || dv === null)
278
- && age < TTL_MS
279
- && (hit.dataVersion === dv || age < COALESCE_MS);
280
- if (reusable)
281
- return hit.snapshot;
282
- }
283
- const snapshot = build(tenantId, dv, nowMs);
284
- cached = { snapshot, dataVersion: dv, builtAtMs: wallMs };
285
- return snapshot;
286
- },
287
- invalidate() {
288
- cached = null;
289
- },
290
- currentId() {
291
- return lastId;
292
- },
293
- embeddedIds() {
294
- if (lastEmbeddedIds !== undefined)
295
- return lastEmbeddedIds;
296
- dataVersion();
297
- return readEmbeddedIds();
298
- },
299
- close() {
300
- if (db !== null)
301
- closeHippoDb(db);
302
- db = null;
303
- cached = null;
304
- lastEmbeddedIds = undefined;
305
- },
306
- };
279
+ const snapshot = this.build(tenantId, dv, nowMs);
280
+ this.cached = { snapshot, dataVersion: dv, builtAtMs: wallMs };
281
+ return snapshot;
282
+ }
283
+ invalidate() {
284
+ this.cached = null;
285
+ }
286
+ currentId() {
287
+ return this.lastId;
288
+ }
289
+ embeddedIds() {
290
+ if (this.lastEmbeddedIds !== undefined)
291
+ return this.lastEmbeddedIds;
292
+ this.connection.dataVersion();
293
+ return this.connection.embeddedIds();
294
+ }
295
+ close() {
296
+ this.connection.close();
297
+ this.cached = null;
298
+ this.lastEmbeddedIds = undefined;
299
+ }
300
+ }
301
+ /** Holds one read-only connection for its commit signal (`PRAGMA data_version`) and the snapshot cache; `now` dates the strength projections, `cacheClock` ages the cache. */
302
+ export function createSnapshotService(hippoRoot, now, cacheClock = Date.now) {
303
+ return new SnapshotCacheService(hippoRoot, now, cacheClock);
307
304
  }
308
305
  //# sourceMappingURL=dashboard-snapshot.js.map