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
@@ -1,9 +1,8 @@
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 { envTypesafeApiKey } from './env.js';
5
- import { fetchWithRetry } from './http-retry.js';
6
- import { log } from './log.js';
4
+ import { fetchWithRetry } from '../util/http-retry.js';
5
+ import { errorMessage, log } from '../util/log.js';
7
6
  const ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
8
7
  const DEFAULT_MODEL = 'jev-1.13.0';
9
8
  const MAX_CONCURRENCY = 8;
@@ -36,10 +35,6 @@ const QUESTIONS = {
36
35
  };
37
36
  const KINDS = ['error', 'decision', 'convention', 'preference', 'trivia'];
38
37
  const VALENCES = ['critical', 'negative', 'positive', 'neutral'];
39
- /** Absent key means hippo keeps its pre-Jev behaviour and makes no HTTP call. */
40
- export function judgmentApiKey() {
41
- return envTypesafeApiKey();
42
- }
43
38
  function oneOf(value, allowed) {
44
39
  return allowed.find((option) => option === value) ?? null;
45
40
  }
@@ -68,7 +63,7 @@ async function post(content, opts) {
68
63
  }, { timeoutMs: JUDGE_TIMEOUT_MS, fetchFn: opts.fetcher });
69
64
  }
70
65
  catch (err) {
71
- log.debug(`judge: request failed: ${err instanceof Error ? err.message : String(err)}`);
66
+ log.debug(`judge: request failed: ${errorMessage(err)}`);
72
67
  return null;
73
68
  }
74
69
  return res.ok ? res : null;
@@ -90,7 +85,7 @@ export async function judge(content, opts) {
90
85
  data = await res.json();
91
86
  }
92
87
  catch (err) {
93
- log.debug(`judge: unreadable response: ${err instanceof Error ? err.message : String(err)}`);
88
+ log.debug(`judge: unreadable response: ${errorMessage(err)}`);
94
89
  return null;
95
90
  }
96
91
  const durable = data.answers?.durable?.noul;
@@ -226,9 +226,8 @@ export default function register(api) {
226
226
  async execute(_id, params) {
227
227
  const cfg = getConfig(api);
228
228
  const budget = params.budget ?? cfg.budget ?? 1500;
229
- const framing = cfg.framing ?? 'observe';
230
229
  const hippoCwd = resolveHippoCwdFromContext(api, ctx, cfg.root);
231
- const result = runHippo(['recall', params.query, '--budget', String(budget), '--framing', framing], hippoCwd);
230
+ const result = runHippo(['recall', params.query, '--budget', String(budget)], hippoCwd);
232
231
  return { content: [{ type: 'text', text: result || 'No relevant memories found.' }] };
233
232
  },
234
233
  }));
@@ -1,4 +1,5 @@
1
- import type { GraphTxDb, EntityType, RelationType, SourceObjectRef } from './types.js';
1
+ import type { DatabaseSyncLike } from '../db/index.js';
2
+ import type { EntityType, RelationType, SourceObjectRef } from '../store/graph-rows.js';
2
3
  /** What names an object-derived entity across rebuilds; v38 has no UNIQUE on it, so the diff keeps one row per key. */
3
4
  export interface NaturalKey {
4
5
  readonly entityType: EntityType;
@@ -38,7 +39,7 @@ export type GraphOp = {
38
39
  };
39
40
  export declare function entityKey(k: NaturalKey): string;
40
41
  /** Ops that turn the stored graph into `desired`, in apply order; reads only, and keeps the lowest id per natural key. */
41
- export declare function graphDelta(db: GraphTxDb, tenantId: string, desired: DesiredGraph): GraphOp[];
42
+ export declare function graphDelta(db: DatabaseSyncLike, tenantId: string, desired: DesiredGraph): GraphOp[];
42
43
  /** graphDelta on its own connection and outside any write lock; the apply re-checks each op against what changed since. */
43
44
  export declare function readGraphDelta(hippoRoot: string, tenantId: string, desired: DesiredGraph): GraphOp[];
44
45
  //# sourceMappingURL=delta.d.ts.map
@@ -1,5 +1,4 @@
1
- // Diffs the derived graph against the stored rows, so a rebuild writes only what changed and an entity keeps the id its relations hang on.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
1
+ import { loadStoredGraph, storedGraphOn } from '../store/graph-reads.js';
3
2
  const keyText = (entityType, objectType, objectId) => `${entityType}|${objectType}:${objectId}`;
4
3
  export function entityKey(k) {
5
4
  return keyText(k.entityType, k.sourceObject.type, k.sourceObject.id);
@@ -15,17 +14,12 @@ function provenanceOf(memoryId, kinds) {
15
14
  const kind = memoryId === null ? undefined : kinds.get(memoryId);
16
15
  return kind === undefined ? '|distilled' : `${memoryId}|${kind}`;
17
16
  }
18
- function memoryKindsOf(db, desired) {
17
+ function memoryIdsOf(desired) {
19
18
  const ids = new Set();
20
19
  for (const row of [...desired.entities, ...desired.relations])
21
20
  if (row.memoryId !== null)
22
21
  ids.add(row.memoryId);
23
- if (ids.size === 0)
24
- return new Map();
25
- // SAFETY: the SELECT names exactly the two columns of the row type.
26
- const rows = db.prepare(`SELECT id, kind FROM memories WHERE id IN (SELECT value FROM json_each(?))`)
27
- .all(JSON.stringify([...ids]));
28
- return new Map(rows.map((r) => [r.id, r.kind]));
22
+ return [...ids];
29
23
  }
30
24
  function firstByKey(rows, keyOf) {
31
25
  const out = new Map();
@@ -86,24 +80,16 @@ function diffRelations(stored, desired, keptKeyById, kinds) {
86
80
  inserts.push({ op: 'insertRelation', relation });
87
81
  return [...deletes, ...inserts];
88
82
  }
83
+ function deltaOf(stored, desired) {
84
+ const entityDelta = diffEntities(stored.entities, desired.entities, stored.kinds);
85
+ return [...entityDelta.ops, ...diffRelations(stored.relations, desired.relations, entityDelta.keptKeyById, stored.kinds)];
86
+ }
89
87
  /** Ops that turn the stored graph into `desired`, in apply order; reads only, and keeps the lowest id per natural key. */
90
88
  export function graphDelta(db, tenantId, desired) {
91
- const kinds = memoryKindsOf(db, desired);
92
- // SAFETY: the SELECT names exactly the columns of StoredEntity.
93
- const entities = db.prepare(`SELECT id, entity_type, name, memory_id, source_kind, source_object_type, source_object_id FROM entities WHERE tenant_id = ? ORDER BY id`).all(tenantId);
94
- // SAFETY: the SELECT names exactly the columns of StoredRelation.
95
- const relations = db.prepare(`SELECT id, from_entity_id, to_entity_id, rel_type, memory_id, source_kind, source_object_type, source_object_id FROM relations WHERE tenant_id = ? ORDER BY id`).all(tenantId);
96
- const entityDelta = diffEntities(entities, desired.entities, kinds);
97
- return [...entityDelta.ops, ...diffRelations(relations, desired.relations, entityDelta.keptKeyById, kinds)];
89
+ return deltaOf(storedGraphOn(db, tenantId, memoryIdsOf(desired)), desired);
98
90
  }
99
91
  /** graphDelta on its own connection and outside any write lock; the apply re-checks each op against what changed since. */
100
92
  export function readGraphDelta(hippoRoot, tenantId, desired) {
101
- const db = openHippoDb(hippoRoot);
102
- try {
103
- return graphDelta(db, tenantId, desired);
104
- }
105
- finally {
106
- closeHippoDb(db);
107
- }
93
+ return deltaOf(loadStoredGraph(hippoRoot, tenantId, memoryIdsOf(desired)), desired);
108
94
  }
109
95
  //# sourceMappingURL=delta.js.map
@@ -7,7 +7,7 @@
7
7
  * entities + `supersedes` relations from decisions /
8
8
  * policies / customer_notes / project_briefs (the four object types whose kind maps to the
9
9
  * `entity_type` enum), then write only their difference from the stored rows. All writes go
10
- * through the src/graph/write.ts consolidated-source guard; this module issues no raw SQL.
10
+ * through the src/store/graph-writes.ts consolidated-source guard; this module issues no raw SQL.
11
11
  *
12
12
  * Pass 3 adds the
13
13
  * first CROSS-OBJECT relations: a deterministic NAME-MATCH heuristic that emits a
@@ -19,9 +19,9 @@
19
19
  * skill/incident/process entities (not in the entity_type enum - needs a migration); the
20
20
  * `hippo sleep` enqueue-hook.
21
21
  */
22
- import { type EntityType } from './graph/types.js';
23
- import { type DesiredGraph } from './graph/delta.js';
24
- import { type WriteBudget } from './write-budget.js';
22
+ import { type EntityType } from '../store/graph-rows.js';
23
+ import { type DesiredGraph } from './delta.js';
24
+ import { type WriteBudget } from '../util/write-budget.js';
25
25
  /** Per-type load cap (the loaders default to 100). A type whose active or superseded
26
26
  * set exceeds this is truncated; `ExtractResult.truncated` records it so the
27
27
  * incompleteness is observable rather than silent. */
@@ -62,7 +62,7 @@ export interface ExtractRow {
62
62
  /** The successor's object id (Y) when this row (X) is superseded; null otherwise. */
63
63
  supersededBy: number | null;
64
64
  }
65
- /** One object type's loaded rows. */
65
+ /** One object type's rows, loaded and normalised. */
66
66
  export interface LoadedType {
67
67
  entityType: EntityType;
68
68
  rows: ExtractRow[];
@@ -85,4 +85,4 @@ export declare function extractGraph(hippoRoot: string, tenantId: string): Extra
85
85
  /** extractGraph for sleep: diffs outside the lock, then applies in transactions of about `budget.holdMs` with a pause
86
86
  * between them. A run stopped between chunks leaves a mixed graph that the next run's diff finishes. */
87
87
  export declare function extractGraphChunked(hippoRoot: string, tenantId: string, budget?: WriteBudget): Promise<ExtractResult>;
88
- //# sourceMappingURL=graph-extract.d.ts.map
88
+ //# sourceMappingURL=extract.d.ts.map
@@ -7,7 +7,7 @@
7
7
  * entities + `supersedes` relations from decisions /
8
8
  * policies / customer_notes / project_briefs (the four object types whose kind maps to the
9
9
  * `entity_type` enum), then write only their difference from the stored rows. All writes go
10
- * through the src/graph/write.ts consolidated-source guard; this module issues no raw SQL.
10
+ * through the src/store/graph-writes.ts consolidated-source guard; this module issues no raw SQL.
11
11
  *
12
12
  * Pass 3 adds the
13
13
  * first CROSS-OBJECT relations: a deterministic NAME-MATCH heuristic that emits a
@@ -19,17 +19,18 @@
19
19
  * skill/incident/process entities (not in the entity_type enum - needs a migration); the
20
20
  * `hippo sleep` enqueue-hook.
21
21
  */
22
- import { applyGraphOps, runGraphRebuildTransaction } from './graph/write.js';
23
- import { MAX_ENTITY_NAME_LEN } from './graph/types.js';
24
- import { graphDelta, readGraphDelta } from './graph/delta.js';
25
- import { WRITE_BUDGET } from './write-budget.js';
26
- import { SLEEP_DB_WAIT_MS } from './db.js';
27
- import { loadDecisions } from './decisions.js';
28
- import { loadPolicies } from './policies.js';
29
- import { loadCustomerNotes } from './customer-notes.js';
30
- import { loadProjectBriefs } from './project-briefs.js';
31
- import { assertTenantId } from './tenant.js';
32
- import { escapeRegex } from './escape.js';
22
+ import { applyGraphOps } from './write.js';
23
+ import { runGraphRebuildTransaction } from '../store/graph-writes.js';
24
+ import { MAX_ENTITY_NAME_LEN } from '../store/graph-rows.js';
25
+ import { graphDelta, readGraphDelta } from './delta.js';
26
+ import { WRITE_BUDGET } from '../util/write-budget.js';
27
+ import { SLEEP_DB_WAIT_MS } from '../db/index.js';
28
+ import { loadDecisions } from '../objects/decisions.js';
29
+ import { loadPolicies } from '../objects/policies.js';
30
+ import { loadCustomerNotes } from '../objects/customer-notes.js';
31
+ import { loadProjectBriefs } from '../objects/project-briefs.js';
32
+ import { assertTenantId } from '../store/tenant.js';
33
+ import { escapeRegex } from '../util/escape.js';
33
34
  /** Per-type load cap (the loaders default to 100). A type whose active or superseded
34
35
  * set exceeds this is truncated; `ExtractResult.truncated` records it so the
35
36
  * incompleteness is observable rather than silent. */
@@ -72,51 +73,35 @@ function pairKey(a, b) {
72
73
  return a < b ? `${a}:${b}` : `${b}:${a}`;
73
74
  }
74
75
  /**
75
- * Load a type's ACTIVE + SUPERSEDED rows (excluding `closed` = retired), normalised.
76
- * Calls the loader once per status so MAX_EXTRACT_PER_TYPE is a per-status budget
77
- * (closed rows never consume it). Sets `hitCap` when either status load is full.
76
+ * Close over one loader's row type so the table below holds uniform functions without erasing it.
77
+ * Loads ACTIVE + SUPERSEDED rows (excluding `closed` = retired) in one call per status, so
78
+ * MAX_EXTRACT_PER_TYPE is a per-status budget; `hitCap` is set when either load is full.
78
79
  */
79
- function loadType(hippoRoot, tenantId, entityType,
80
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
- loadFn,
82
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
- nameOf,
84
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
- textOf) {
86
- const rows = [];
87
- let hitCap = false;
88
- for (const status of ['active', 'superseded']) {
89
- const loaded = loadFn(hippoRoot, tenantId, { status, limit: MAX_EXTRACT_PER_TYPE });
90
- if (loaded.length === MAX_EXTRACT_PER_TYPE)
91
- hitCap = true;
92
- for (const r of loaded) {
93
- // SAFETY: loadFn is always one of loadDecisions/loadPolicies/loadCustomerNotes/
94
- // loadProjectBriefs (wired in GRAPH_SOURCES); every one of their row
95
- // types declares id: number, memoryId: string | null, supersededBy: number | null.
96
- // `any` here is the deliberate type-erasure boundary (see eslint-disable above)
97
- // that lets one loop handle all four object row shapes.
98
- rows.push({
99
- entityType,
100
- e2Id: r.id,
101
- name: nameOf(r),
102
- searchText: textOf(r),
103
- memoryId: (r.memoryId ?? null),
104
- supersededBy: (r.supersededBy ?? null),
105
- });
80
+ function source(entityType, load, nameOf, textOf) {
81
+ return (hippoRoot, tenantId) => {
82
+ const rows = [];
83
+ let hitCap = false;
84
+ for (const status of ['active', 'superseded']) {
85
+ const loaded = load(hippoRoot, tenantId, { status, limit: MAX_EXTRACT_PER_TYPE });
86
+ if (loaded.length === MAX_EXTRACT_PER_TYPE)
87
+ hitCap = true;
88
+ for (const r of loaded) {
89
+ rows.push({ entityType, e2Id: r.id, name: nameOf(r), searchText: textOf(r), memoryId: r.memoryId, supersededBy: r.supersededBy });
90
+ }
106
91
  }
107
- }
108
- return { entityType, rows, hitCap };
92
+ return { entityType, rows, hitCap };
93
+ };
109
94
  }
110
95
  const GRAPH_SOURCES = [
111
- { entityType: 'decision', loadFn: loadDecisions, nameOf: (r) => r.decisionText, textOf: (r) => [r.decisionText, r.context].filter(Boolean).join(' ') },
112
- { entityType: 'policy', loadFn: loadPolicies, nameOf: (r) => r.policyName, textOf: (r) => [r.policyName, r.policyText].filter(Boolean).join(' ') },
113
- { entityType: 'customer', loadFn: loadCustomerNotes, nameOf: (r) => r.customer, textOf: (r) => [r.customer, r.note].filter(Boolean).join(' ') },
114
- { entityType: 'project', loadFn: loadProjectBriefs, nameOf: (r) => r.repo, textOf: (r) => [r.repo, r.summary].filter(Boolean).join(' ') },
96
+ source('decision', loadDecisions, (r) => r.decisionText, (r) => [r.decisionText, r.context].filter(Boolean).join(' ')),
97
+ source('policy', loadPolicies, (r) => r.policyName, (r) => [r.policyName, r.policyText].filter(Boolean).join(' ')),
98
+ source('customer', loadCustomerNotes, (r) => r.customer, (r) => [r.customer, r.note].filter(Boolean).join(' ')),
99
+ source('project', loadProjectBriefs, (r) => r.repo, (r) => [r.repo, r.summary].filter(Boolean).join(' ')),
115
100
  ];
116
101
  /** Every source type's rows, each read on its own connection; callers load before any write lock is taken. */
117
102
  export function loadGraphSources(hippoRoot, tenantId) {
118
103
  assertTenantId('loadGraphSources', tenantId);
119
- return GRAPH_SOURCES.map((src) => loadType(hippoRoot, tenantId, src.entityType, src.loadFn, src.nameOf, src.textOf));
104
+ return GRAPH_SOURCES.map((load) => load(hippoRoot, tenantId));
120
105
  }
121
106
  /** The tenant's graph as a pure function of its loaded objects; the write side diffs it against what is stored. */
122
107
  export function deriveGraph(loaded) {
@@ -261,7 +246,7 @@ export function extractGraph(hippoRoot, tenantId) {
261
246
  // Loaded first: opening a second connection under the rebuild's BEGIN IMMEDIATE dead-locks ('database is locked').
262
247
  const derived = deriveGraph(loadGraphSources(hippoRoot, tenantId));
263
248
  // Diffed and applied under one lock, so two concurrent rebuilds serialize instead of both inserting a missing row.
264
- const skipped = runGraphRebuildTransaction(hippoRoot, tenantId, (txDb) => applyGraphOps(txDb, hippoRoot, tenantId, graphDelta(txDb, tenantId, derived), 0, { holdMs: Infinity }).skipped);
249
+ const skipped = runGraphRebuildTransaction(hippoRoot, tenantId, (txDb) => applyGraphOps(txDb, hippoRoot, tenantId, graphDelta(txDb, tenantId, derived), { from: 0, holdMs: Infinity }).skipped);
265
250
  return resultOf(derived, skipped);
266
251
  }
267
252
  /** extractGraph for sleep: diffs outside the lock, then applies in transactions of about `budget.holdMs` with a pause
@@ -278,11 +263,11 @@ export async function extractGraphChunked(hippoRoot, tenantId, budget = WRITE_BU
278
263
  await budget.pause(committedAt);
279
264
  const from = next;
280
265
  // Sleep's wait, not a server request's 250 ms: each chunk is a fresh BEGIN IMMEDIATE a hook's write could otherwise fail.
281
- const chunk = runGraphRebuildTransaction(hippoRoot, tenantId, (txDb) => applyGraphOps(txDb, hippoRoot, tenantId, ops, from, { holdMs: budget.holdMs, clock: budget.clock }), { busyWaitMs: SLEEP_DB_WAIT_MS });
266
+ const chunk = runGraphRebuildTransaction(hippoRoot, tenantId, (txDb) => applyGraphOps(txDb, hippoRoot, tenantId, ops, { from, holdMs: budget.holdMs, clock: budget.clock }), { busyWaitMs: SLEEP_DB_WAIT_MS });
282
267
  committedAt = budget.clock();
283
268
  next = chunk.next;
284
269
  skipped += chunk.skipped;
285
270
  }
286
271
  return resultOf(derived, skipped);
287
272
  }
288
- //# sourceMappingURL=graph-extract.js.map
273
+ //# sourceMappingURL=extract.js.map
@@ -1,4 +1,4 @@
1
- import { type ResultCost, type SearchResult } from './search/types.js';
1
+ import { type ResultCost, type SearchResult } from '../core/search-types.js';
2
2
  /** Hard cap on `--hops` (a higher value just walks more of a finite graph; this bounds
3
3
  * worst-case work and keeps the flag honest). */
4
4
  export declare const MAX_HOPS = 3;
@@ -52,4 +52,4 @@ export interface GraphExpandOpts {
52
52
  * graph is empty, no seed maps to an entity, or nothing new survives the filters/budget.
53
53
  */
54
54
  export declare function graphExpandRecall(baseResults: SearchResult[], opts: GraphExpandOpts): SearchResult[];
55
- //# sourceMappingURL=graph-recall.d.ts.map
55
+ //# sourceMappingURL=recall.d.ts.map
@@ -35,12 +35,12 @@
35
35
  * No graph writes (only SELECTs via graph.ts read helpers + store reads), so the
36
36
  * check-graph-writes lint permits this module living outside graph.ts.
37
37
  */
38
- import { loadEntriesByIds } from './store/entry-reads.js';
39
- import { DEFAULT_RECALL_BUDGET } from './search/types.js';
40
- import { estimateTokens } from './token-ledger.js';
41
- import { compareEntryIdentity } from './compare.js';
42
- import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from './graph/read.js';
43
- import { passesCliRecallScopeFilter, passesScopeFilterForRecall } from './recall-scope.js';
38
+ import { loadEntriesByIds } from '../store/entry-reads.js';
39
+ import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
40
+ import { estimateTokens } from '../util/token-text.js';
41
+ import { compareEntryIdentity, compareScoresDesc } from '../core/compare.js';
42
+ import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '../store/graph-reads.js';
43
+ import { passesCliRecallScopeFilter, passesScopeFilterForRecall } from '../store/recall-scope.js';
44
44
  /** Hard cap on `--hops` (a higher value just walks more of a finite graph; this bounds
45
45
  * worst-case work and keeps the flag honest). */
46
46
  export const MAX_HOPS = 3;
@@ -142,7 +142,8 @@ function passesRecallFilters(mem, via, successorValidFrom, opts) {
142
142
  }
143
143
  /** Traverse one store's graph from its seeds into `hitsByOrigin`. Pure reads; mutates `seenMemoryIds`
144
144
  * and `seenContent` so a memory, or a share/promote copy of it, surfaces at most once across stores. */
145
- function produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin, opts) {
145
+ function produceHitsForRoot(root, baseResults, accumulators, opts) {
146
+ const { baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin } = accumulators;
146
147
  const { hops, maxNeighbors, tenantId, asOfDate } = opts;
147
148
  // Seeds = graph entities (in THIS store) whose source memory is a base result.
148
149
  const seedEntities = loadEntitiesByMemoryId(root, tenantId, baseResults.map((r) => r.entry.id));
@@ -151,22 +152,9 @@ function produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds,
151
152
  const { reached, originMemByEntityId } = walkRelations(root, tenantId, seedEntities, hops, maxNeighbors);
152
153
  if (reached.size === 0)
153
154
  return;
154
- // Reached entities -> source memory ids -> load DIRECTLY by id (chunked), not lexical.
155
- // A mirror-less reached entity (memoryId === null) has no memory to load: drop its null
156
- // id BEFORE it reaches loadByIdsChunked / the Set<string> (it cannot be recall-surfaced;
157
- // it stays in entities/relations for graph extract / visualization).
158
155
  const reachedEntities = loadEntitiesByIds(root, tenantId, [...reached.keys()]);
159
- const needLoad = [...new Set(reachedEntities
160
- .map((e) => e.memoryId)
161
- .filter((id) => id !== null && !seenMemoryIds.has(id)))];
162
- const loadedById = new Map(loadByIdsChunked(root, tenantId, needLoad).map((m) => [m.id, m]));
163
- // For the bi-temporal as-of rule on a superseded reached row we need its successor's
164
- // valid_from. Batch-load the successors referenced by the loaded rows.
165
- let successorValidFrom = new Map();
166
- if (asOfDate) {
167
- const succIds = [...new Set([...loadedById.values()].map((m) => m.superseded_by).filter((id) => !!id))];
168
- successorValidFrom = new Map(loadByIdsChunked(root, tenantId, succIds).map((m) => [m.id, m.valid_from]));
169
- }
156
+ const loadedById = loadReachedMemories(root, tenantId, reachedEntities, seenMemoryIds);
157
+ const successorValidFrom = loadSuccessorValidFrom(root, tenantId, loadedById, asOfDate);
170
158
  for (const ent of reachedEntities) {
171
159
  if (ent.memoryId === null)
172
160
  continue; // mirror-less node: not recall-surfaced
@@ -184,18 +172,39 @@ function produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds,
184
172
  const originScore = baseScoreByMemId.get(origin) ?? baseResults[baseResults.length - 1].score;
185
173
  seenMemoryIds.add(mem.id);
186
174
  seenContent.add(mem.content);
187
- const hit = {
188
- entry: mem,
189
- score: originScore * (1 - HOP_DISCOUNT * via.hops),
190
- bm25: 0, cosine: 0,
191
- tokens: estimateTokens(mem.content),
192
- graphVia: via,
193
- };
175
+ const hit = buildGraphHit(mem, via, originScore);
194
176
  if (!hitsByOrigin.has(origin))
195
177
  hitsByOrigin.set(origin, []);
196
178
  hitsByOrigin.get(origin).push(hit);
197
179
  }
198
180
  }
181
+ function buildGraphHit(mem, via, originScore) {
182
+ return {
183
+ entry: mem,
184
+ score: originScore * (1 - HOP_DISCOUNT * via.hops),
185
+ bm25: 0, cosine: 0,
186
+ tokens: estimateTokens(mem.content),
187
+ graphVia: via,
188
+ };
189
+ }
190
+ // Reached entities -> source memory ids -> load DIRECTLY by id (chunked), not lexical.
191
+ // A mirror-less reached entity (memoryId === null) has no memory to load: drop its null
192
+ // id BEFORE it reaches loadByIdsChunked / the Set<string> (it cannot be recall-surfaced;
193
+ // it stays in entities/relations for graph extract / visualization).
194
+ function loadReachedMemories(root, tenantId, reachedEntities, seenMemoryIds) {
195
+ const needLoad = [...new Set(reachedEntities
196
+ .map((e) => e.memoryId)
197
+ .filter((id) => id !== null && !seenMemoryIds.has(id)))];
198
+ return new Map(loadByIdsChunked(root, tenantId, needLoad).map((m) => [m.id, m]));
199
+ }
200
+ // For the bi-temporal as-of rule on a superseded reached row we need its successor's
201
+ // valid_from. Batch-load the successors referenced by the loaded rows.
202
+ function loadSuccessorValidFrom(root, tenantId, loadedById, asOfDate) {
203
+ if (!asOfDate)
204
+ return new Map();
205
+ const succIds = [...new Set([...loadedById.values()].map((m) => m.superseded_by).filter((id) => !!id))];
206
+ return new Map(loadByIdsChunked(root, tenantId, succIds).map((m) => [m.id, m.valid_from]));
207
+ }
199
208
  /**
200
209
  * Augment `baseResults` with memories reached by walking the graph `hops` edges out from
201
210
  * the seed results' entities (across the local AND global stores). Each graph hit is
@@ -211,10 +220,8 @@ export function graphExpandRecall(baseResults, opts) {
211
220
  if (hops <= 0 || baseResults.length === 0)
212
221
  return baseResults;
213
222
  const maxNeighbors = opts.maxNeighbors ?? DEFAULT_MAX_NEIGHBORS;
214
- const budget = opts.budget ?? DEFAULT_RECALL_BUDGET;
215
223
  const includeSuperseded = opts.includeSuperseded ?? false;
216
224
  const asOfDate = opts.asOf ? new Date(opts.asOf) : null;
217
- const minResults = opts.minResults ?? 1;
218
225
  const recallScope = opts.recallScope ?? {};
219
226
  const baseScoreByMemId = new Map(baseResults.map((r) => [r.entry.id, r.score]));
220
227
  const seenMemoryIds = new Set(baseResults.map((r) => r.entry.id));
@@ -223,12 +230,18 @@ export function graphExpandRecall(baseResults, opts) {
223
230
  // Expand against each distinct store the seeds may live in (local + global).
224
231
  const roots = globalRoot && globalRoot !== hippoRoot ? [hippoRoot, globalRoot] : [hippoRoot];
225
232
  for (const root of roots) {
226
- produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin, {
233
+ produceHitsForRoot(root, baseResults, { baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin }, {
227
234
  hops, maxNeighbors, tenantId, includeSuperseded, asOfDate, recallScope,
228
235
  });
229
236
  }
230
237
  if (hitsByOrigin.size === 0)
231
238
  return baseResults;
239
+ sortHitsWithinOrigin(hitsByOrigin);
240
+ const allHits = [...hitsByOrigin.values()].flat();
241
+ const keep = selectWithinBudget(baseResults, allHits, opts);
242
+ return mergeKeptHits(baseResults, hitsByOrigin, keep);
243
+ }
244
+ function sortHitsWithinOrigin(hitsByOrigin) {
232
245
  // Closer hops first within each origin group, then by inherited score.
233
246
  // Hops asc and score desc are both true primary keys (unchanged);
234
247
  // compareEntryIdentity is only the TAIL for a same-hop, same-score tie.
@@ -237,11 +250,14 @@ export function graphExpandRecall(baseResults, opts) {
237
250
  const byHops = a.graphVia.hops - b.graphVia.hops;
238
251
  if (byHops !== 0)
239
252
  return byHops;
240
- const byScore = b.score - a.score;
253
+ const byScore = compareScoresDesc(a.score, b.score);
241
254
  return byScore !== 0 ? byScore : compareEntryIdentity(a.entry, b.entry);
242
255
  });
243
256
  }
244
- const allHits = [...hitsByOrigin.values()].flat();
257
+ }
258
+ function selectWithinBudget(baseResults, allHits, opts) {
259
+ const budget = opts.budget ?? DEFAULT_RECALL_BUDGET;
260
+ const minResults = opts.minResults ?? 1;
245
261
  // Budget SELECTION by score (not by position): a high-value graph hit (it inherits its
246
262
  // origin seed's relevance) must be able to win a token slot over a low-score lexical
247
263
  // distractor — otherwise a tight --budget keeps the noise and drops the memory --hops
@@ -259,13 +275,16 @@ export function graphExpandRecall(baseResults, opts) {
259
275
  let usedTokens = [...keep].reduce((s, r) => s + price(r), 0);
260
276
  // PLAIN stable score sort on purpose: both input lists are already deterministically
261
277
  // ordered, and a base-vs-graph-hit tie keeps the BASE result first (the concat order).
262
- for (const r of [...baseResults.slice(protectedCount), ...allHits].sort((a, b) => b.score - a.score)) {
278
+ for (const r of [...baseResults.slice(protectedCount), ...allHits].sort((a, b) => compareScoresDesc(a.score, b.score))) {
263
279
  const tokens = price(r);
264
280
  if (usedTokens + tokens > budget)
265
281
  continue;
266
282
  usedTokens += tokens;
267
283
  keep.add(r);
268
284
  }
285
+ return keep;
286
+ }
287
+ function mergeKeptHits(baseResults, hitsByOrigin, keep) {
269
288
  // DISPLAY order: base order preserved (it may be MMR-diversified); each kept new hit
270
289
  // placed directly after the seed it descends from. Hits emit ONLY under a kept seed.
271
290
  const merged = [];
@@ -283,4 +302,4 @@ export function graphExpandRecall(baseResults, opts) {
283
302
  }
284
303
  return emittedHit ? merged : baseResults; // nothing new survived budget -> original base
285
304
  }
286
- //# sourceMappingURL=graph-recall.js.map
305
+ //# sourceMappingURL=recall.js.map
@@ -23,7 +23,7 @@
23
23
  * absolute magnitude is washed out by fusion. Do not tune the scale expecting a
24
24
  * fused-score effect — only the induced order matters.
25
25
  */
26
- import type { MemoryEntry } from './memory.js';
26
+ import type { MemoryEntry } from '../core/memory.js';
27
27
  /** Default hops expanded from each seed (MVP; hard cap MAX_HOPS=3 reused from graph-recall). */
28
28
  export declare const DEFAULT_GRAPH_HOPS = 2;
29
29
  /** Default per-hop multiplicative decay applied to the seed strength. */
@@ -67,4 +67,4 @@ export declare function selectGraphSeeds(bm25Ranked: ReadonlyArray<number>, cosi
67
67
  * entity, or nothing reached is in-pool — the caller then skips the 3rd fusion list.
68
68
  */
69
69
  export declare function graphRankStream(entries: ReadonlyArray<MemoryEntry>, seeds: ReadonlyArray<GraphSeed>, opts: GraphStreamOpts): number[];
70
- //# sourceMappingURL=graph-stream.d.ts.map
70
+ //# sourceMappingURL=stream.d.ts.map
@@ -1,5 +1,5 @@
1
- import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from './graph/read.js';
2
- import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from './graph-recall.js';
1
+ import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '../store/graph-reads.js';
2
+ import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from './recall.js';
3
3
  /** Default hops expanded from each seed (MVP; hard cap MAX_HOPS=3 reused from graph-recall). */
4
4
  export const DEFAULT_GRAPH_HOPS = 2;
5
5
  /** Default per-hop multiplicative decay applied to the seed strength. */
@@ -63,7 +63,8 @@ function bestStrengthAtDepth(rels, frontierSet, visited, frontierStrength, origi
63
63
  return bestStrengthThisDepth;
64
64
  }
65
65
  /** BFS from the seed entities: entityId -> best originSeedStrength x decay^depth over every reached entity. */
66
- function reachedEntityScores(root, tenantId, seedIds, originStrength, hops, decay, maxNeighbors) {
66
+ function reachedEntityScores(root, tenantId, seedIds, originStrength, options) {
67
+ const { hops, decay, maxNeighbors } = options;
67
68
  const visited = new Set(seedIds); // seeds never re-reached
68
69
  const reachedScore = new Map(); // entityId -> best score
69
70
  let frontier = seedIds;
@@ -104,7 +105,8 @@ function reachedEntityScores(root, tenantId, seedIds, originStrength, hops, deca
104
105
  * carried UNCHANGED along each BFS path; the per-hop decay is applied as decay^depth so
105
106
  * a neighbour's score = originSeedStrength x decay^(graph distance).
106
107
  */
107
- function accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId) {
108
+ function accumulateForRoot(root, seeds, entries, options) {
109
+ const { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId } = options;
108
110
  if (seeds.length === 0)
109
111
  return;
110
112
  // The strongest seed strength per source memory id (a memId could appear once, but
@@ -127,7 +129,7 @@ function accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops,
127
129
  const st = strengthByMemId.get(e.memoryId) ?? 0;
128
130
  originStrength.set(e.id, Math.max(originStrength.get(e.id) ?? 0, st));
129
131
  }
130
- const reachedScore = reachedEntityScores(root, tenantId, seedEntities.map((e) => e.id), originStrength, hops, decay, maxNeighbors);
132
+ const reachedScore = reachedEntityScores(root, tenantId, seedEntities.map((e) => e.id), originStrength, { hops, decay, maxNeighbors });
131
133
  if (reachedScore.size === 0)
132
134
  return;
133
135
  // Reached entity ids -> source memory ids -> in-pool entry indices.
@@ -166,7 +168,7 @@ export function graphRankStream(entries, seeds, opts) {
166
168
  ? [opts.hippoRoot, opts.globalRoot]
167
169
  : [opts.hippoRoot];
168
170
  for (const root of roots) {
169
- accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops, decay, maxNeighbors, opts.tenantId);
171
+ accumulateForRoot(root, seeds, entries, { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId: opts.tenantId });
170
172
  }
171
173
  // Seed-exclusion guard: graphScore is keyed by entryIndex
172
174
  // GLOBALLY across roots, but each root's BFS visited-set is per-root, so a memory that
@@ -182,4 +184,4 @@ export function graphRankStream(entries, seeds, opts) {
182
184
  return d !== 0 ? d : a - b; // score desc, then index asc (deterministic)
183
185
  });
184
186
  }
185
- //# sourceMappingURL=graph-stream.js.map
187
+ //# sourceMappingURL=stream.js.map
@@ -2,12 +2,13 @@
2
2
  * Graph observability and visualization, READ-ONLY over the entity/relation
3
3
  * graph.
4
4
  *
5
- * This module only READS the graph (`loadEntities` / `loadRelations`) and renders
5
+ * This module only READS the graph (through the store's graph reads) and renders
6
6
  * view-models; it issues no INSERT/UPDATE/DELETE, so `scripts/check-graph-writes.mjs`
7
7
  * stays green. Used by the CLI (`hippo graph show` / `hippo graph view`) and the
8
8
  * HTTP `GET /v1/graph` route, which all build the same `GraphModel`.
9
9
  */
10
- import { type EntityType, type RelationType } from './graph/types.js';
10
+ import type { GraphRows } from '../store/port.js';
11
+ import type { EntityType, RelationType } from '../store/graph-rows.js';
11
12
  export interface GraphNode {
12
13
  id: number;
13
14
  type: EntityType;
@@ -38,6 +39,8 @@ export declare function buildGraphModel(hippoRoot: string, tenantId: string, opt
38
39
  limit?: number;
39
40
  canRead?: (scope: string | null) => boolean;
40
41
  }): GraphModel;
42
+ /** The reply model of the rows a store read: an edge with an endpoint outside the node set is dropped. */
43
+ export declare function graphModelOf({ entities, relations, truncated }: GraphRows): GraphModel;
41
44
  /**
42
45
  * Deterministic Fruchterman-Reingold-style force layout. Seeded circular init +
43
46
  * fixed iterations, NO `Math.random`, so the same model always yields the same
@@ -70,4 +73,4 @@ export declare function renderGraphHtml(model: GraphModel): string;
70
73
  * `text` field (Obsidian renders/sanitizes them).
71
74
  */
72
75
  export declare function renderGraphCanvas(model: GraphModel): string;
73
- //# sourceMappingURL=graph-view.d.ts.map
76
+ //# sourceMappingURL=view.d.ts.map