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
package/dist/doctor.js CHANGED
@@ -7,18 +7,21 @@
7
7
  import * as fs from 'node:fs';
8
8
  import * as os from 'node:os';
9
9
  import * as path from 'node:path';
10
- import { findHippoStoreDir } from './project-identity.js';
11
- import { getGlobalRoot } from './shared.js';
10
+ import { findHippoStoreDir } from './core/project-identity.js';
11
+ import { getGlobalRoot } from './sharing/shared.js';
12
12
  import { isInitialized } from './store/open.js';
13
- import { loadConfig } from './config.js';
14
- import { openHippoDbReadOnly, closeHippoDb, getSchemaVersion, getCurrentSchemaVersion, countTableRows, ftsRowCounts, IncompatibleBinaryError } from './db.js';
15
- import { REPLAY_AFTER_MS, TRANSCRIPT_FILL_WINDOW_MS } from './compaction-record.js';
16
- import { SPOOL_DIR, spoolCounts } from './compaction-spool.js';
17
- import { isEmbeddingAvailable } from './local-embedding.js';
18
- import { CODEX_TRUST_LINE, claudeConfigDir, codexHomeDir, isCodexPresent, isJsonObject } from './hooks/shared.js';
19
- import { planProjectRepair } from './project-merge.js';
20
- import { resolveTenantId } from './tenant.js';
21
- import { readJsonFile } from './json.js';
13
+ import { readStoreHealth } from './store/diagnostics.js';
14
+ import { loadConfig } from './core/config.js';
15
+ import { openHippoDbReadOnly, closeHippoDb, getCurrentSchemaVersion, IncompatibleBinaryError } from './db/index.js';
16
+ import { REPLAY_AFTER_MS, TRANSCRIPT_FILL_WINDOW_MS } from './capture/compaction-record.js';
17
+ import { SPOOL_DIR, spoolCounts } from './capture/compaction-spool.js';
18
+ import { isEmbeddingAvailable } from './store/embeddings/local.js';
19
+ import { CODEX_TRUST_LINE, claudeConfigDir, codexHomeDir, isCodexPresent } from './hooks/shared.js';
20
+ import { planProjectRepair } from './sharing/project-merge.js';
21
+ import { resolveTenantId } from './store/tenant.js';
22
+ import { errorMessage, log } from './util/log.js';
23
+ import { readJsonFile, isJsonObjectLiteral } from './util/json.js';
24
+ import { DAY_MS } from './util/time.js';
22
25
  /** Minimum Node.js version hippo supports (package.json engines). */
23
26
  export const MIN_NODE = '22.16.0';
24
27
  function versionAtLeast(actual, min) {
@@ -46,7 +49,7 @@ function codexCheck(home) {
46
49
  const file = path.join(codexHomeDir(home), 'hooks.json');
47
50
  const parsed = readJson(file);
48
51
  // Codex drops every hook in a hooks.json it cannot parse, hippo's included.
49
- if (fs.existsSync(file) && !isJsonObject(parsed)) {
52
+ if (fs.existsSync(file) && !isJsonObjectLiteral(parsed)) {
50
53
  return { id: 'codex', status: 'warn', detail: "Codex's hooks.json is not a JSON object, so Codex runs no hook from it", fix: 'repair hooks.json, then run: hippo hook install codex' };
51
54
  }
52
55
  const text = JSON.stringify(parsed ?? '');
@@ -67,40 +70,30 @@ function codexCheck(home) {
67
70
  // Migration 46 creates failure_log; a read-only open no longer creates it on an older store.
68
71
  const FAILURE_LOG_SCHEMA = 46;
69
72
  /** The failed-tool-call count over the last 7 days, or why it could not be read. */
70
- function failuresCheck(db, since, schemaVersion) {
71
- try {
72
- // SAFETY: COUNT aggregate row.
73
- const row = db.prepare(`SELECT COUNT(*) AS n FROM failure_log WHERE ts >= ?`).get(since);
74
- return { id: 'failures', status: 'info', detail: `${Number(row?.n ?? 0)} failed tool calls logged in 7 days (hippo failures for detail)` };
73
+ function failuresCheck(failures, schemaVersion) {
74
+ if (failures.ok) {
75
+ return { id: 'failures', status: 'info', detail: `${failures.value} failed tool calls logged in 7 days (hippo failures for detail)` };
75
76
  }
76
- catch (err) {
77
- const message = err instanceof Error ? err.message : String(err);
78
- if (!message.includes('no such table')) {
79
- return { id: 'failures', status: 'warn', detail: `cannot read the failure log: ${message}` };
80
- }
81
- return schemaVersion < FAILURE_LOG_SCHEMA
82
- ? { id: 'failures', status: 'info', detail: 'no failure log yet (hippo creates it on the next write)' }
83
- : { id: 'failures', status: 'warn', detail: 'the failure_log table is missing, so failed tool calls are not being logged' };
77
+ if (!failures.message.includes('no such table')) {
78
+ return { id: 'failures', status: 'warn', detail: `cannot read the failure log: ${failures.message}` };
84
79
  }
80
+ return schemaVersion < FAILURE_LOG_SCHEMA
81
+ ? { id: 'failures', status: 'info', detail: 'no failure log yet (hippo creates it on the next write)' }
82
+ : { id: 'failures', status: 'warn', detail: 'the failure_log table is missing, so failed tool calls are not being logged' };
85
83
  }
86
84
  /** How long ago the store last slept (consolidated), or why that history could not be read. */
87
- function sleepCheck(db, now) {
88
- try {
89
- // SAFETY: row's shape matches the single `timestamp` column named in the SELECT above.
90
- const row = db.prepare(`SELECT timestamp FROM consolidation_runs ORDER BY timestamp DESC, id DESC LIMIT 1`).get();
91
- const when = row?.timestamp !== undefined ? Date.parse(row.timestamp) : Number.NaN;
92
- if (Number.isNaN(when)) {
93
- return { id: 'sleep', status: 'warn', detail: 'hippo has never slept (consolidated) in this store', fix: 'hippo sleep (the session-end hook runs it automatically)' };
94
- }
95
- const days = Math.floor((now.getTime() - when) / 86_400_000);
96
- return days > 7
97
- ? { id: 'sleep', status: 'warn', detail: `last sleep ${days} days ago`, fix: 'hippo sleep, and check the session-end hook is installed' }
98
- : { id: 'sleep', status: 'pass', detail: `last sleep ${days === 0 ? 'today' : `${days} day${days === 1 ? '' : 's'} ago`}` };
99
- }
100
- catch (err) {
101
- const message = err instanceof Error ? err.message : String(err);
102
- return { id: 'sleep', status: 'info', detail: `sleep history unavailable (${message})` };
103
- }
85
+ function sleepCheck(lastSleep, now) {
86
+ if (!lastSleep.ok)
87
+ return { id: 'sleep', status: 'info', detail: `sleep history unavailable (${lastSleep.message})` };
88
+ const last = lastSleep.value;
89
+ const when = last !== undefined ? Date.parse(last) : Number.NaN;
90
+ if (Number.isNaN(when)) {
91
+ return { id: 'sleep', status: 'warn', detail: 'hippo has never slept (consolidated) in this store', fix: 'hippo sleep (the session-end hook runs it automatically)' };
92
+ }
93
+ const days = Math.floor((now.getTime() - when) / DAY_MS);
94
+ return days > 7
95
+ ? { id: 'sleep', status: 'warn', detail: `last sleep ${days} days ago`, fix: 'hippo sleep, and check the session-end hook is installed' }
96
+ : { id: 'sleep', status: 'pass', detail: `last sleep ${days === 0 ? 'today' : `${days} day${days === 1 ? '' : 's'} ago`}` };
104
97
  }
105
98
  /** Spool counts in their own try, so a spool that cannot be read never hides the database counts. */
106
99
  function readSpool(store, now) {
@@ -108,44 +101,32 @@ function readSpool(store, now) {
108
101
  return { counts: spoolCounts(store, now, REPLAY_AFTER_MS), unread: '' };
109
102
  }
110
103
  catch (err) {
111
- return { counts: { waiting: 0, stale: 0, bad: 0 }, unread: `; spool not read: ${err instanceof Error ? err.message : String(err)}` };
104
+ return { counts: { waiting: 0, stale: 0, bad: 0 }, unread: `; spool not read: ${errorMessage(err)}` };
112
105
  }
113
106
  }
114
107
  /** Compaction records the PostCompact hook left unfinished and spool files a replay has not finished, which `hippo sleep` replays. */
115
- function compactionsCheck(db, store, now) {
116
- const stuckBefore = new Date(now.getTime() - REPLAY_AFTER_MS).toISOString();
117
- const transcriptFloor = new Date(now.getTime() - TRANSCRIPT_FILL_WINDOW_MS).toISOString();
118
- try {
119
- // SAFETY: COUNT aggregate row.
120
- const row = db.prepare(`SELECT COUNT(*) AS total,
121
- COUNT(CASE WHEN status = 'summarised' AND summarised_at < ? THEN 1 END) AS summarised,
122
- COUNT(CASE WHEN status = 'started' AND started_at < ? AND started_at > ? AND transcript_path IS NOT NULL THEN 1 END) AS started
123
- FROM compactions`).get(stuckBefore, stuckBefore, transcriptFloor);
124
- const total = Number(row?.total ?? 0);
125
- const summarised = Number(row?.summarised ?? 0);
126
- const started = Number(row?.started ?? 0);
127
- const stuck = summarised + started;
128
- const { counts: spool, unread } = readSpool(store, now);
129
- const spooled = spool.waiting + spool.stale + spool.bad > 0;
130
- const recorded = `${total} compaction${total === 1 ? '' : 's'} recorded, none stuck`;
131
- if (stuck === 0 && !spooled && unread === '')
132
- return { id: 'compactions', status: 'pass', detail: recorded };
133
- const fix = [
134
- stuck + spool.waiting + spool.stale > 0 ? 'hippo sleep (replays them)' : '',
135
- spool.bad > 0 ? `open the .bad files in ${path.join(store, SPOOL_DIR)}, save what you still need with hippo remember, then delete them` : '',
136
- ].filter((s) => s !== '');
137
- const unfinished = stuck === 0
138
- ? `${recorded} in the store`
139
- : `${stuck} compaction${stuck === 1 ? '' : 's'} unfinished after 10 minutes (${summarised} with a summary whose memories are not saved yet, ${started} with no summary yet)`;
140
- const note = spooled ? `; spool: ${spool.waiting} waiting, ${spool.stale} left by a replay that stopped, ${spool.bad} .bad` : '';
141
- return { id: 'compactions', status: 'warn', detail: `${unfinished}${note}${unread}`, fix: fix.join('; ') };
142
- }
143
- catch (err) {
144
- const message = err instanceof Error ? err.message : String(err);
145
- return message.includes('no such table')
108
+ function compactionsCheck(compactions, store, now) {
109
+ if (!compactions.ok) {
110
+ return compactions.message.includes('no such table')
146
111
  ? { id: 'compactions', status: 'info', detail: 'no compaction records yet (hippo creates them on the next write)' }
147
- : { id: 'compactions', status: 'warn', detail: `cannot read the compaction records: ${message}` };
148
- }
112
+ : { id: 'compactions', status: 'warn', detail: `cannot read the compaction records: ${compactions.message}` };
113
+ }
114
+ const { total, summarised, started } = compactions.value;
115
+ const stuck = summarised + started;
116
+ const { counts: spool, unread } = readSpool(store, now);
117
+ const spooled = spool.waiting + spool.stale + spool.bad > 0;
118
+ const recorded = `${total} compaction${total === 1 ? '' : 's'} recorded, none stuck`;
119
+ if (stuck === 0 && !spooled && unread === '')
120
+ return { id: 'compactions', status: 'pass', detail: recorded };
121
+ const fix = [
122
+ stuck + spool.waiting + spool.stale > 0 ? 'hippo sleep (replays them)' : '',
123
+ spool.bad > 0 ? `open the .bad files in ${path.join(store, SPOOL_DIR)}, save what you still need with hippo remember, then delete them` : '',
124
+ ].filter((s) => s !== '');
125
+ const unfinished = stuck === 0
126
+ ? `${recorded} in the store`
127
+ : `${stuck} compaction${stuck === 1 ? '' : 's'} unfinished after 10 minutes (${summarised} with a summary whose memories are not saved yet, ${started} with no summary yet)`;
128
+ const note = spooled ? `; spool: ${spool.waiting} waiting, ${spool.stale} left by a replay that stopped, ${spool.bad} .bad` : '';
129
+ return { id: 'compactions', status: 'warn', detail: `${unfinished}${note}${unread}`, fix: fix.join('; ') };
149
130
  }
150
131
  /** Old project tags in the global store, counted by the repair's own plan so a truly user-global merge never warns. */
151
132
  function projectsCheck(globalRoot) {
@@ -164,7 +145,7 @@ function projectsCheck(globalRoot) {
164
145
  : { id: 'projects', status: 'warn', detail: `global store: ${found.join('; ')}`, fix: 'hippo projects repair --global (dry run; add --apply to write)' };
165
146
  }
166
147
  catch (err) {
167
- return { id: 'projects', status: 'info', detail: `project tags not checked (${err instanceof Error ? err.message : String(err)})` };
148
+ return { id: 'projects', status: 'info', detail: `project tags not checked (${errorMessage(err)})` };
168
149
  }
169
150
  finally {
170
151
  if (db !== null)
@@ -197,9 +178,7 @@ function schemaCheck(have, want) {
197
178
  ? { id: 'schema', status: 'fail', detail: `database schema v${have} is newer than this hippo (v${want})`, fix: 'npm install -g hippo-memory@latest' }
198
179
  : { id: 'schema', status: 'info', detail: `database schema v${have}; hippo migrates it to v${want} on the next write` };
199
180
  }
200
- function memoriesCheck(db) {
201
- const memories = countTableRows(db, 'memories');
202
- const dormant = countTableRows(db, 'dormant_memories');
181
+ function memoriesCheck(memories, dormant) {
203
182
  const memoryCheck = { id: 'memories', status: 'info', detail: `${memories ?? '?'} memories${dormant !== null ? `, ${dormant} dormant` : ''}` };
204
183
  if (memories === 0) {
205
184
  memoryCheck.status = 'warn';
@@ -208,70 +187,60 @@ function memoriesCheck(db) {
208
187
  return memoryCheck;
209
188
  }
210
189
  /** Whether the full-text index still matches `memories`; opening a current store no longer checks, so doctor reports and sleep repairs. */
211
- function ftsCheck(db) {
212
- try {
213
- const counts = ftsRowCounts(db);
214
- if (counts === null)
215
- return { id: 'fts', status: 'info', detail: 'no full-text index; search uses slower LIKE matching' };
216
- if (counts.memories === counts.fts)
217
- return { id: 'fts', status: 'pass', detail: `full-text index in sync (${counts.fts} rows)` };
218
- return {
219
- id: 'fts',
220
- status: 'warn',
221
- detail: `full-text index out of sync: ${counts.fts} indexed rows for ${counts.memories} memories, so search can miss memories or match removed ones`,
222
- fix: 'hippo sleep (re-syncs the index)',
223
- };
224
- }
225
- catch (err) {
226
- return { id: 'fts', status: 'warn', detail: `cannot read the full-text index: ${err instanceof Error ? err.message : String(err)}` };
227
- }
190
+ function ftsCheck(fts) {
191
+ if (!fts.ok)
192
+ return { id: 'fts', status: 'warn', detail: `cannot read the full-text index: ${fts.message}` };
193
+ const counts = fts.value;
194
+ if (counts === null)
195
+ return { id: 'fts', status: 'info', detail: 'no full-text index; search uses slower LIKE matching' };
196
+ if (counts.memories === counts.fts)
197
+ return { id: 'fts', status: 'pass', detail: `full-text index in sync (${counts.fts} rows)` };
198
+ return {
199
+ id: 'fts',
200
+ status: 'warn',
201
+ detail: `full-text index out of sync: ${counts.fts} indexed rows for ${counts.memories} memories, so search can miss memories or match removed ones`,
202
+ fix: 'hippo sleep (re-syncs the index)',
203
+ };
228
204
  }
229
- function tokensCheck(db, since) {
230
- try {
231
- // SAFETY: COUNT/SUM aggregate row.
232
- const row = db.prepare(`SELECT COUNT(CASE WHEN event = 'inject' THEN 1 END) AS n,
233
- COALESCE(SUM(CASE WHEN event = 'inject' THEN tokens END), 0) AS t,
234
- COALESCE(SUM(CASE WHEN event = 'reread' THEN tokens END), 0) AS r
235
- FROM token_ledger WHERE ts >= ?`).get(since);
236
- return {
237
- id: 'tokens',
238
- status: 'info',
239
- detail: `${Number(row?.n ?? 0)} memory blocks sent to agents in 7 days, about ${Number(row?.t ?? 0)} tokens sent and ${Number(row?.r ?? 0)} re-read by later model calls (hippo tokens for detail)`,
240
- };
241
- }
242
- catch {
205
+ function tokensCheck(tokens) {
206
+ if (!tokens.ok) {
207
+ log.debug(`doctor: token ledger not read: ${tokens.message}`);
243
208
  return { id: 'tokens', status: 'info', detail: 'no token ledger yet (created on the next write)' };
244
209
  }
210
+ const tally = tokens.value;
211
+ return {
212
+ id: 'tokens',
213
+ status: 'info',
214
+ detail: `${tally.injected} memory blocks sent to agents in 7 days, about ${tally.tokensSent} tokens sent and ${tally.tokensReread} re-read by later model calls (hippo tokens for detail)`,
215
+ };
245
216
  }
246
- /** Checks that read the store's database; a failed open becomes a failed schema check after whatever already passed. */
217
+ /** Checks that read the store's database; a store that cannot be opened becomes one failed schema check. */
247
218
  function databaseChecks(store, now) {
248
- const checks = [];
249
- let db = null;
219
+ let health;
250
220
  try {
251
- db = openHippoDbReadOnly(store);
252
- const have = getSchemaVersion(db);
253
- checks.push(schemaCheck(have, getCurrentSchemaVersion()));
254
- checks.push(memoriesCheck(db));
255
- checks.push(ftsCheck(db));
256
- const since = new Date(now.getTime() - 7 * 86_400_000).toISOString();
257
- checks.push(tokensCheck(db, since));
258
- checks.push(failuresCheck(db, since, have));
259
- checks.push(sleepCheck(db, now));
260
- checks.push(compactionsCheck(db, store, now));
261
- }
262
- catch (err) {
263
- checks.push({
264
- id: 'schema',
265
- status: 'fail',
266
- detail: `cannot open the database: ${err instanceof Error ? err.message : String(err)}`,
267
- fix: err instanceof IncompatibleBinaryError ? 'npm install -g hippo-memory@latest' : 'check file permissions on the .hippo folder',
221
+ health = readStoreHealth(store, {
222
+ since: new Date(now.getTime() - 7 * DAY_MS).toISOString(),
223
+ stuckBefore: new Date(now.getTime() - REPLAY_AFTER_MS).toISOString(),
224
+ transcriptFloor: new Date(now.getTime() - TRANSCRIPT_FILL_WINDOW_MS).toISOString(),
268
225
  });
269
226
  }
270
- finally {
271
- if (db !== null)
272
- closeHippoDb(db);
273
- }
274
- return checks;
227
+ catch (err) {
228
+ return [{
229
+ id: 'schema',
230
+ status: 'fail',
231
+ detail: `cannot open the database: ${errorMessage(err)}`,
232
+ fix: err instanceof IncompatibleBinaryError ? 'npm install -g hippo-memory@latest' : 'check file permissions on the .hippo folder',
233
+ }];
234
+ }
235
+ return [
236
+ schemaCheck(health.schemaVersion, getCurrentSchemaVersion()),
237
+ memoriesCheck(health.memories, health.dormant),
238
+ ftsCheck(health.fts),
239
+ tokensCheck(health.tokens),
240
+ failuresCheck(health.failures, health.schemaVersion),
241
+ sleepCheck(health.lastSleep, now),
242
+ compactionsCheck(health.compactions, store, now),
243
+ ];
275
244
  }
276
245
  // Each hook and what it does, so a partial install says what is missing.
277
246
  const CLAUDE_CODE_HOOKS = [
@@ -1,3 +1,3 @@
1
1
  export { installJsonHooks, resolveJsonHookPaths, uninstallJsonHooks, writeSettingsFile, type InstallResult, type JsonHookPaths } from '../hooks/json-hooks.js';
2
- export { readJsonFile } from '../json.js';
2
+ export { readJsonFile } from '../util/json.js';
3
3
  //# sourceMappingURL=json-hooks.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // The hippo-memory/json-hooks subpath: only what the changelog publishes, so the module's other exports stay internal.
2
2
  export { installJsonHooks, resolveJsonHookPaths, uninstallJsonHooks, writeSettingsFile } from '../hooks/json-hooks.js';
3
- export { readJsonFile } from '../json.js';
3
+ export { readJsonFile } from '../util/json.js';
4
4
  //# sourceMappingURL=json-hooks.js.map
@@ -1,2 +1,2 @@
1
- export { MAX_PROJECT_ALIASES, MCP_PROJECT_SCOPED_HEADER, resolveProjectIdentity, type ProjectIdentity, type ResolveProjectIdentityOpts } from '../project-identity.js';
1
+ export { MAX_PROJECT_ALIASES, MCP_PROJECT_SCOPED_HEADER, resolveProjectIdentity, type ProjectIdentity, type ResolveProjectIdentityOpts } from '../core/project-identity.js';
2
2
  //# sourceMappingURL=project-identity.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // The hippo-memory/project-identity subpath: only what the changelog publishes, so the module's other exports stay internal.
2
- export { MAX_PROJECT_ALIASES, MCP_PROJECT_SCOPED_HEADER, resolveProjectIdentity } from '../project-identity.js';
2
+ export { MAX_PROJECT_ALIASES, MCP_PROJECT_SCOPED_HEADER, resolveProjectIdentity } from '../core/project-identity.js';
3
3
  //# sourceMappingURL=project-identity.js.map
@@ -1,7 +1,7 @@
1
1
  export { collectSessionTurns, sessionTail, type SessionTurn } from '../capture/transcript.js';
2
- export { scrubForSharing } from '../share-scrub.js';
2
+ export { scrubForSharing } from '../capture/share-scrub.js';
3
3
  export { transcriptWorkingState, WORKING_STATE_CAPS } from '../capture/working-state.js';
4
4
  export { lessonFromFailure, failureReport, type FailureReport } from '../capture/failure-reading.js';
5
- export { collectHandoffEvidence } from '../handoff-evidence.js';
6
- export { compactSummaryBody, parseCompactionItems, COMPACTION_ITEM_MAX_CHARS, COMPACTION_ITEM_ROW_CAP } from '../compaction-items.js';
5
+ export { collectHandoffEvidence } from '../capture/handoff-evidence.js';
6
+ export { compactSummaryBody, parseCompactionItems, COMPACTION_ITEM_MAX_CHARS, COMPACTION_ITEM_ROW_CAP } from '../capture/compaction-items.js';
7
7
  //# sourceMappingURL=session-text.d.ts.map
@@ -1,8 +1,8 @@
1
1
  // The hippo-memory/session-text subpath: what a hook reads from a session (turns, working state, failures, git state, compaction items) and the sharing scrub, with no store, database or server in its imports.
2
2
  export { collectSessionTurns, sessionTail } from '../capture/transcript.js';
3
- export { scrubForSharing } from '../share-scrub.js';
3
+ export { scrubForSharing } from '../capture/share-scrub.js';
4
4
  export { transcriptWorkingState, WORKING_STATE_CAPS } from '../capture/working-state.js';
5
5
  export { lessonFromFailure, failureReport } from '../capture/failure-reading.js';
6
- export { collectHandoffEvidence } from '../handoff-evidence.js';
7
- export { compactSummaryBody, parseCompactionItems, COMPACTION_ITEM_MAX_CHARS, COMPACTION_ITEM_ROW_CAP } from '../compaction-items.js';
6
+ export { collectHandoffEvidence } from '../capture/handoff-evidence.js';
7
+ export { compactSummaryBody, parseCompactionItems, COMPACTION_ITEM_MAX_CHARS, COMPACTION_ITEM_ROW_CAP } from '../capture/compaction-items.js';
8
8
  //# sourceMappingURL=session-text.js.map
@@ -11,6 +11,9 @@
11
11
  * Deterministic: every resampling function takes a seed, so a published
12
12
  * result can be reproduced exactly.
13
13
  */
14
+ const DEFAULT_ITERATIONS = 5000;
15
+ const DEFAULT_TWO_LEVEL_ITERATIONS = 10_000;
16
+ const DEFAULT_ALPHA = 0.05;
14
17
  /** Sum several usages bucket by bucket. */
15
18
  export function addUsage(...usages) {
16
19
  const total = { inputTokens: 0, cacheWriteTokens: 0, cacheReadTokens: 0, outputTokens: 0 };
@@ -64,8 +67,8 @@ function mean(xs) {
64
67
  * calling a difference real.
65
68
  */
66
69
  export function pairedBootstrap(diffs, opts = {}) {
67
- const iterations = opts.iterations ?? 5000;
68
- const alpha = opts.alpha ?? 0.05;
70
+ const iterations = opts.iterations ?? DEFAULT_ITERATIONS;
71
+ const alpha = opts.alpha ?? DEFAULT_ALPHA;
69
72
  if (diffs.length === 0)
70
73
  return { estimate: 0, low: 0, high: 0, iterations: 0 };
71
74
  const rand = seededRandom(opts.seed ?? 1);
@@ -85,8 +88,8 @@ export function pairedBootstrap(diffs, opts = {}) {
85
88
  * cluster share causes and are not independent draws.
86
89
  */
87
90
  export function clusteredPairedBootstrap(diffsByCluster, opts = {}) {
88
- const iterations = opts.iterations ?? 5000;
89
- const alpha = opts.alpha ?? 0.05;
91
+ const iterations = opts.iterations ?? DEFAULT_ITERATIONS;
92
+ const alpha = opts.alpha ?? DEFAULT_ALPHA;
90
93
  const clusters = [...diffsByCluster.values()].filter((c) => c.length > 0);
91
94
  const all = clusters.flat();
92
95
  if (all.length === 0)
@@ -123,8 +126,8 @@ export function costPerResolvedDelta(control, treatment, opts = {}) {
123
126
  if (control.length !== treatment.length) {
124
127
  throw new Error('control and treatment must list the same tasks in the same order');
125
128
  }
126
- const iterations = opts.iterations ?? 5000;
127
- const alpha = opts.alpha ?? 0.05;
129
+ const iterations = opts.iterations ?? DEFAULT_ITERATIONS;
130
+ const alpha = opts.alpha ?? DEFAULT_ALPHA;
128
131
  const c = costPerResolved(control);
129
132
  const t = costPerResolved(treatment);
130
133
  const rand = seededRandom(opts.seed ?? 1);
@@ -213,7 +216,7 @@ function twoSidedP(samples, nullValue) {
213
216
  /** Resamples repositories, then families inside each; only the repository draw carries a shared-store fault.
214
217
  * The statistic never uses the PRNG, so a second call on one seed draws the same resamples. */
215
218
  export function twoLevelBootstrap(repos, statistic, opts = {}) {
216
- const requested = opts.iterations ?? 10_000;
219
+ const requested = opts.iterations ?? DEFAULT_TWO_LEVEL_ITERATIONS;
217
220
  if (!Number.isInteger(requested) || requested <= 0) {
218
221
  throw new RangeError(`iterations must be a positive integer, got ${requested}`);
219
222
  }
@@ -233,7 +236,7 @@ export function twoLevelBootstrap(repos, statistic, opts = {}) {
233
236
  return notANumber(nullValue, dropped);
234
237
  const estimate = statistic(kept.flatMap((r) => r.flat()));
235
238
  const p = kept.length < 2 ? Number.NaN : twoSidedP(samples, nullValue);
236
- const interval = percentileInterval(samples, opts.alpha ?? 0.05);
239
+ const interval = percentileInterval(samples, opts.alpha ?? DEFAULT_ALPHA);
237
240
  return { estimate, ...interval, p, iterations: samples.length, dropped, nullValue };
238
241
  }
239
242
  /** Holm step-down in input order; the family size is `ps.length`, as preregistered.
@@ -263,7 +266,7 @@ export function verdict(e, adjustedP, spec) {
263
266
  return inconclusive;
264
267
  const nullValue = e.nullValue;
265
268
  const lowerIsHelpful = spec.helpful === 'lower';
266
- if (adjustedP < (spec.alpha ?? 0.05)) {
269
+ if (adjustedP < (spec.alpha ?? DEFAULT_ALPHA)) {
267
270
  const helpfulSide = lowerIsHelpful ? e.estimate < nullValue : e.estimate > nullValue;
268
271
  const harmfulSide = lowerIsHelpful ? e.estimate > nullValue : e.estimate < nullValue;
269
272
  if (harmfulSide)
@@ -11,7 +11,7 @@
11
11
  * - Fast (<60s for full suite)
12
12
  * - Per-feature breakdown so you see exactly what a change helped/hurt
13
13
  */
14
- import { type MemoryEntry } from './memory.js';
14
+ import { type MemoryEntry } from '../core/memory.js';
15
15
  export type FeatureCategory = 'direct-recall' | 'extraction-preference' | 'dag-drilldown' | 'temporal' | 'noise-resistance' | 'multi-hop';
16
16
  export interface FeatureTestCase {
17
17
  id: string;
@@ -11,16 +11,17 @@
11
11
  * - Fast (<60s for full suite)
12
12
  * - Per-feature breakdown so you see exactly what a change helped/hurt
13
13
  */
14
- import { createMemory, Layer } from './memory.js';
15
- import { search } from './search/bm25-search.js';
16
- import { multihopSearch } from './multihop.js';
14
+ import { createMemory, Layer } from '../core/memory.js';
15
+ import { search } from '../search/bm25-search.js';
16
+ import { multihopSearch } from '../search/multihop.js';
17
17
  import { mrr, recallAtK, ndcgAtK } from './eval.js';
18
+ import { DAY_MS } from '../util/time.js';
18
19
  // ---------------------------------------------------------------------------
19
20
  // Synthetic corpus — deterministic, no API calls
20
21
  // ---------------------------------------------------------------------------
21
22
  const BASE_DATE = new Date('2026-01-15T10:00:00Z');
22
23
  function dateOffset(days) {
23
- const d = new Date(BASE_DATE.getTime() + days * 86400000);
24
+ const d = new Date(BASE_DATE.getTime() + days * DAY_MS);
24
25
  return d.toISOString();
25
26
  }
26
27
  function mem(id, content, opts = {}) {
@@ -142,9 +143,25 @@ export function buildSyntheticCorpus() {
142
143
  addMultiHop(entries, cases);
143
144
  return { entries, cases };
144
145
  }
145
- // ---------------------------------------------------------------------------
146
- // Runner — evaluates each case against the synthetic corpus
147
- // ---------------------------------------------------------------------------
146
+ /** Each category's mean scores, in the order the corpus first names the category. */
147
+ function featureAverages(cases, caseResults) {
148
+ const categories = [...new Set(cases.map(c => c.category))];
149
+ return categories.map(cat => {
150
+ const catCases = caseResults.filter(r => r.case.category === cat);
151
+ const n = catCases.length;
152
+ const avgMrr = catCases.reduce((s, r) => s + r.mrrVal, 0) / n;
153
+ const avgR5 = catCases.reduce((s, r) => s + r.r5, 0) / n;
154
+ const avgNdcg5 = catCases.reduce((s, r) => s + r.ndcg5, 0) / n;
155
+ return {
156
+ category: cat,
157
+ cases: n,
158
+ mrr: avgMrr,
159
+ recallAt5: avgR5,
160
+ ndcgAt5: avgNdcg5,
161
+ passed: true,
162
+ };
163
+ });
164
+ }
148
165
  export async function runFeatureEval(version) {
149
166
  const start = Date.now();
150
167
  const { entries, cases } = buildSyntheticCorpus();
@@ -166,22 +183,7 @@ export async function runFeatureEval(version) {
166
183
  ndcg5: ndcgAtK(returnedIds, c.expectedIds, 5),
167
184
  });
168
185
  }
169
- const categories = [...new Set(cases.map(c => c.category))];
170
- const features = categories.map(cat => {
171
- const catCases = caseResults.filter(r => r.case.category === cat);
172
- const n = catCases.length;
173
- const avgMrr = catCases.reduce((s, r) => s + r.mrrVal, 0) / n;
174
- const avgR5 = catCases.reduce((s, r) => s + r.r5, 0) / n;
175
- const avgNdcg5 = catCases.reduce((s, r) => s + r.ndcg5, 0) / n;
176
- return {
177
- category: cat,
178
- cases: n,
179
- mrr: avgMrr,
180
- recallAt5: avgR5,
181
- ndcgAt5: avgNdcg5,
182
- passed: true,
183
- };
184
- });
186
+ const features = featureAverages(cases, caseResults);
185
187
  const totalCases = caseResults.length;
186
188
  const overallMrr = caseResults.reduce((s, r) => s + r.mrrVal, 0) / totalCases;
187
189
  const overallR5 = caseResults.reduce((s, r) => s + r.r5, 0) / totalCases;
@@ -8,7 +8,7 @@
8
8
  * weights, and future scoring tweaks can be tuned against evidence instead
9
9
  * of intuition.
10
10
  */
11
- import type { MemoryEntry } from './memory.js';
11
+ import type { MemoryEntry } from '../core/memory.js';
12
12
  export interface EvalCase {
13
13
  /** Free-form ID for humans to reference the case. */
14
14
  id: string;
@@ -8,9 +8,12 @@
8
8
  * weights, and future scoring tweaks can be tuned against evidence instead
9
9
  * of intuition.
10
10
  */
11
- import { hybridSearch } from './search/hybrid.js';
12
- import { searchBothHybrid } from './shared.js';
13
- import { isInitialized } from './store/open.js';
11
+ import { hybridSearch } from '../search/hybrid.js';
12
+ import { searchBothHybrid } from '../sharing/shared.js';
13
+ import { isInitialized } from '../store/open.js';
14
+ // Generous so metrics are not truncated.
15
+ const DEFAULT_EVAL_BUDGET = 100_000;
16
+ const QUERY_WORDS = 8;
14
17
  // ---------------------------------------------------------------------------
15
18
  // Metrics — pure functions. K is inclusive of position K.
16
19
  // ---------------------------------------------------------------------------
@@ -64,28 +67,11 @@ export function ndcgAtK(returned, expected, k) {
64
67
  // Runner
65
68
  // ---------------------------------------------------------------------------
66
69
  export async function runEval(cases, entries, options = {}) {
67
- const budget = options.budget ?? 100_000; // generous so metrics aren't truncated
68
70
  const start = Date.now();
69
71
  const results = [];
70
72
  const useBothStores = Boolean(options.globalRoot && options.hippoRoot && isInitialized(options.globalRoot));
71
73
  for (const c of cases) {
72
- const ranked = useBothStores
73
- ? await searchBothHybrid(c.query, options.hippoRoot, options.globalRoot, {
74
- budget,
75
- now: options.now,
76
- embeddingWeight: options.embeddingWeight,
77
- mmr: options.mmr,
78
- mmrLambda: options.mmrLambda,
79
- localBump: options.localBump,
80
- })
81
- : await hybridSearch(c.query, entries, {
82
- budget,
83
- now: options.now,
84
- hippoRoot: options.hippoRoot,
85
- embeddingWeight: options.embeddingWeight,
86
- mmr: options.mmr,
87
- mmrLambda: options.mmrLambda,
88
- });
74
+ const ranked = await rankForCase(c.query, entries, options, useBothStores);
89
75
  const returnedIds = ranked.map((r) => r.entry.id);
90
76
  results.push({
91
77
  case: c,
@@ -110,6 +96,27 @@ export async function runEval(cases, entries, options = {}) {
110
96
  durationMs: Date.now() - start,
111
97
  };
112
98
  }
99
+ /** One case's ranking: across the local and global stores when `useBothStores`, else over `entries` alone. */
100
+ function rankForCase(query, entries, options, useBothStores) {
101
+ const budget = options.budget ?? DEFAULT_EVAL_BUDGET;
102
+ return useBothStores
103
+ ? searchBothHybrid(query, options.hippoRoot, options.globalRoot, {
104
+ budget,
105
+ now: options.now,
106
+ embeddingWeight: options.embeddingWeight,
107
+ mmr: options.mmr,
108
+ mmrLambda: options.mmrLambda,
109
+ localBump: options.localBump,
110
+ })
111
+ : hybridSearch(query, entries, {
112
+ budget,
113
+ now: options.now,
114
+ hippoRoot: options.hippoRoot,
115
+ embeddingWeight: options.embeddingWeight,
116
+ mmr: options.mmr,
117
+ mmrLambda: options.mmrLambda,
118
+ });
119
+ }
113
120
  /**
114
121
  * Compute pairwise deltas between a baseline and a current eval summary.
115
122
  * Cases are matched by EvalCase.id; any mismatch is surfaced in the onlyIn
@@ -174,7 +181,7 @@ export function bootstrapCorpus(entries, maxCases = 50) {
174
181
  const words = e.content.trim().split(/\s+/).filter((w) => w.length > 2);
175
182
  if (words.length < 3)
176
183
  continue;
177
- const query = words.slice(0, 8).join(' ');
184
+ const query = words.slice(0, QUERY_WORDS).join(' ');
178
185
  cases.push({
179
186
  id: `bootstrap_${e.id}`,
180
187
  query,
@@ -1,7 +1,7 @@
1
1
  /** Typed judgment over capture candidates via TypeSafe's Jev (System One).
2
2
  * Regex picks WHAT is a candidate; it cannot say what is worth keeping, so
3
3
  * every captured memory currently lands on a flat schema_fit of 0.5. */
4
- import { ConfidenceLevel, EmotionalValence } from './memory.js';
4
+ import { ConfidenceLevel, EmotionalValence } from '../core/memory.js';
5
5
  export type JudgedKind = 'error' | 'decision' | 'convention' | 'preference' | 'trivia';
6
6
  export interface Judgment {
7
7
  /** Jev noul, 0..1. Maps to `schema_fit` on the written entry. */
@@ -20,8 +20,6 @@ export interface JudgeOptions {
20
20
  /** Bounded parallelism for `judgeAll`. */
21
21
  concurrency?: number;
22
22
  }
23
- /** Absent key means hippo keeps its pre-Jev behaviour and makes no HTTP call. */
24
- export declare function judgmentApiKey(): string | undefined;
25
23
  /** `null` on any failure, so a Jev outage degrades capture to today's
26
24
  * behaviour instead of blocking the write. */
27
25
  export declare function judge(content: string, opts: JudgeOptions): Promise<Judgment | null>;