hippo-memory 1.70.0 → 1.72.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 (855) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-memories/apply.d.ts +0 -11
  3. package/dist/agent-memories/apply.js +6 -21
  4. package/dist/agent-memories/claude-code.d.ts +4 -2
  5. package/dist/agent-memories/claude-code.js +15 -6
  6. package/dist/agent-memories/codex.js +1 -1
  7. package/dist/agent-memories/copilot.d.ts +1 -3
  8. package/dist/agent-memories/copilot.js +1 -17
  9. package/dist/agent-memories/files.js +23 -12
  10. package/dist/agent-memories/markdown.d.ts +1 -3
  11. package/dist/agent-memories/markdown.js +1 -3
  12. package/dist/agent-memories/project-folds.d.ts +10 -0
  13. package/dist/agent-memories/project-folds.js +34 -0
  14. package/dist/agent-memories/report.js +2 -1
  15. package/dist/agent-memories/sync.d.ts +4 -2
  16. package/dist/agent-memories/sync.js +18 -11
  17. package/dist/api/assemble.d.ts +7 -44
  18. package/dist/api/assemble.js +3 -23
  19. package/dist/api/audit.d.ts +33 -1
  20. package/dist/api/audit.js +48 -1
  21. package/dist/api/auth.d.ts +20 -26
  22. package/dist/api/auth.js +43 -29
  23. package/dist/api/auto-sleep.d.ts +5 -2
  24. package/dist/api/auto-sleep.js +9 -5
  25. package/dist/api/availability.d.ts +2 -15
  26. package/dist/api/availability.js +4 -18
  27. package/dist/api/cards.d.ts +42 -0
  28. package/dist/api/cards.js +52 -0
  29. package/dist/api/conflicts.d.ts +28 -0
  30. package/dist/api/conflicts.js +61 -0
  31. package/dist/api/context-render.js +4 -3
  32. package/dist/api/context-select.js +12 -15
  33. package/dist/api/context-types.d.ts +10 -35
  34. package/dist/api/context.d.ts +5 -22
  35. package/dist/api/context.js +38 -46
  36. package/dist/api/continuity.d.ts +47 -0
  37. package/dist/api/continuity.js +66 -0
  38. package/dist/{cli → api}/correction-latency.d.ts +2 -14
  39. package/dist/{cli → api}/correction-latency.js +2 -14
  40. package/dist/api/dormant.d.ts +5 -21
  41. package/dist/api/dormant.js +11 -28
  42. package/dist/api/drill-down.d.ts +7 -46
  43. package/dist/api/drill-down.js +6 -27
  44. package/dist/api/embeddings.d.ts +17 -0
  45. package/dist/api/embeddings.js +28 -0
  46. package/dist/api/error-reply.d.ts +8 -0
  47. package/dist/api/error-reply.js +21 -0
  48. package/dist/api/forget.d.ts +11 -26
  49. package/dist/api/forget.js +23 -35
  50. package/dist/api/goals.d.ts +1 -1
  51. package/dist/api/goals.js +5 -9
  52. package/dist/api/graph.d.ts +8 -0
  53. package/dist/api/graph.js +7 -0
  54. package/dist/api/index.d.ts +6 -2
  55. package/dist/api/index.js +6 -2
  56. package/dist/api/instruction-detect.js +21 -6
  57. package/dist/api/learn.d.ts +4 -0
  58. package/dist/api/learn.js +53 -27
  59. package/dist/api/ledger-db.d.ts +2 -5
  60. package/dist/api/ledger-db.js +5 -35
  61. package/dist/api/memories.d.ts +23 -0
  62. package/dist/api/memories.js +46 -0
  63. package/dist/api/objects.d.ts +9 -0
  64. package/dist/api/objects.js +11 -0
  65. package/dist/api/on-store.js +5 -3
  66. package/dist/api/outcome.js +1 -1
  67. package/dist/api/pilot-arm.d.ts +1 -11
  68. package/dist/api/pilot-arm.js +5 -45
  69. package/dist/api/predictions.d.ts +11 -0
  70. package/dist/api/predictions.js +24 -0
  71. package/dist/api/projects.d.ts +21 -0
  72. package/dist/api/projects.js +24 -0
  73. package/dist/api/promote.d.ts +13 -17
  74. package/dist/api/promote.js +12 -20
  75. package/dist/api/prompt-hook.d.ts +19 -6
  76. package/dist/api/prompt-hook.js +54 -13
  77. package/dist/api/provenance-coverage.d.ts +14 -0
  78. package/dist/{cli → api}/provenance-coverage.js +2 -6
  79. package/dist/api/recall-cli.d.ts +58 -0
  80. package/dist/api/recall-cli.js +103 -0
  81. package/dist/api/recall-core.js +17 -9
  82. package/dist/api/recall-finish.d.ts +53 -0
  83. package/dist/api/recall-finish.js +30 -0
  84. package/dist/api/recall-history.d.ts +17 -84
  85. package/dist/api/recall-history.js +15 -88
  86. package/dist/api/recall-pipeline.d.ts +2 -3
  87. package/dist/api/recall-pipeline.js +21 -15
  88. package/dist/api/recall-request.js +1 -1
  89. package/dist/api/recall-types.d.ts +64 -304
  90. package/dist/api/recall.d.ts +3 -34
  91. package/dist/api/recall.js +63 -89
  92. package/dist/api/refine.d.ts +7 -0
  93. package/dist/api/refine.js +10 -0
  94. package/dist/api/remember-local.d.ts +57 -0
  95. package/dist/api/remember-local.js +90 -0
  96. package/dist/api/remember.d.ts +20 -2
  97. package/dist/api/remember.js +16 -3
  98. package/dist/api/session-end.d.ts +22 -0
  99. package/dist/api/session-end.js +101 -0
  100. package/dist/api/sleep-run.d.ts +2 -4
  101. package/dist/api/sleep-run.js +28 -28
  102. package/dist/api/sleep.d.ts +9 -28
  103. package/dist/api/status.d.ts +24 -0
  104. package/dist/api/status.js +40 -0
  105. package/dist/api/store-init.d.ts +4 -0
  106. package/dist/api/store-init.js +9 -0
  107. package/dist/api/tokens.d.ts +3 -10
  108. package/dist/api/tokens.js +4 -11
  109. package/dist/api/types.d.ts +8 -29
  110. package/dist/api/types.js +10 -23
  111. package/dist/capture/caller-session.d.ts +0 -3
  112. package/dist/capture/caller-session.js +1 -12
  113. package/dist/capture/capture-error.d.ts +2 -2
  114. package/dist/capture/capture-error.js +23 -18
  115. package/dist/capture/codex-patch.js +3 -1
  116. package/dist/capture/command.d.ts +4 -12
  117. package/dist/capture/command.js +39 -114
  118. package/dist/capture/compact.d.ts +4 -15
  119. package/dist/capture/compact.js +26 -30
  120. package/dist/capture/compaction-items-caller.js +11 -20
  121. package/dist/capture/compaction-record.d.ts +7 -93
  122. package/dist/capture/compaction-record.js +34 -399
  123. package/dist/capture/compaction-spool.d.ts +5 -3
  124. package/dist/capture/compaction-spool.js +21 -7
  125. package/dist/capture/copilot-transcript.d.ts +2 -1
  126. package/dist/capture/copilot-transcript.js +2 -1
  127. package/dist/capture/extract.d.ts +5 -2
  128. package/dist/capture/extract.js +4 -3
  129. package/dist/capture/failure-caller.d.ts +1 -1
  130. package/dist/capture/failure-caller.js +21 -16
  131. package/dist/capture/failure-reading.d.ts +2 -1
  132. package/dist/capture/failure-reading.js +7 -9
  133. package/dist/capture/pre-compact-caller.js +5 -4
  134. package/dist/capture/session-digest.d.ts +1 -1
  135. package/dist/capture/session-digest.js +17 -10
  136. package/dist/capture/session-end-caller.js +2 -1
  137. package/dist/capture/session-worker.js +3 -4
  138. package/dist/capture/transcript.d.ts +4 -11
  139. package/dist/capture/transcript.js +10 -21
  140. package/dist/capture/working-state.d.ts +4 -2
  141. package/dist/capture/working-state.js +4 -2
  142. package/dist/cli/api-context.d.ts +3 -0
  143. package/dist/cli/api-context.js +6 -0
  144. package/dist/cli/audit-prune.d.ts +1 -59
  145. package/dist/cli/audit-prune.js +2 -61
  146. package/dist/cli/audit.d.ts +1 -1
  147. package/dist/cli/audit.js +42 -43
  148. package/dist/cli/auth.d.ts +2 -2
  149. package/dist/cli/auth.js +61 -44
  150. package/dist/cli/briefs.d.ts +1 -4
  151. package/dist/cli/briefs.js +42 -301
  152. package/dist/cli/card.d.ts +2 -2
  153. package/dist/cli/card.js +63 -56
  154. package/dist/cli/client.d.ts +12 -27
  155. package/dist/cli/client.js +41 -44
  156. package/dist/cli/compact-resume-payload.js +4 -3
  157. package/dist/cli/context.d.ts +2 -3
  158. package/dist/cli/context.js +22 -18
  159. package/dist/cli/continuity.d.ts +6 -6
  160. package/dist/cli/continuity.js +81 -86
  161. package/dist/cli/curate.d.ts +13 -17
  162. package/dist/cli/curate.js +88 -116
  163. package/dist/cli/dag.d.ts +4 -4
  164. package/dist/cli/dag.js +55 -34
  165. package/dist/cli/decisions.d.ts +2 -4
  166. package/dist/cli/decisions.js +18 -309
  167. package/dist/cli/eval.d.ts +1 -1
  168. package/dist/cli/eval.js +27 -26
  169. package/dist/cli/exit.d.ts +6 -0
  170. package/dist/cli/exit.js +11 -0
  171. package/dist/cli/explain.d.ts +2 -3
  172. package/dist/cli/explain.js +25 -27
  173. package/dist/cli/flag-values.d.ts +6 -1
  174. package/dist/cli/flag-values.js +42 -15
  175. package/dist/cli/flags.d.ts +0 -288
  176. package/dist/cli/flags.js +3 -138
  177. package/dist/cli/github.d.ts +14 -0
  178. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  179. package/dist/cli/goals.d.ts +2 -2
  180. package/dist/cli/goals.js +46 -50
  181. package/dist/cli/graph.d.ts +3 -0
  182. package/dist/cli/graph.js +83 -0
  183. package/dist/cli/hook-runtime.d.ts +12 -32
  184. package/dist/cli/hook-runtime.js +21 -64
  185. package/dist/cli/incidents.d.ts +3 -0
  186. package/dist/cli/incidents.js +112 -0
  187. package/dist/cli/init.d.ts +2 -2
  188. package/dist/cli/init.js +33 -30
  189. package/dist/cli/install-steps.d.ts +2 -1
  190. package/dist/cli/install-steps.js +13 -14
  191. package/dist/cli/last-sleep.d.ts +2 -1
  192. package/dist/cli/last-sleep.js +4 -1
  193. package/dist/cli/lenient-id.d.ts +2 -0
  194. package/dist/cli/lenient-id.js +13 -0
  195. package/dist/cli/maintenance.d.ts +5 -5
  196. package/dist/cli/maintenance.js +37 -43
  197. package/dist/cli/notes.d.ts +2 -0
  198. package/dist/cli/notes.js +41 -0
  199. package/dist/cli/object-verbs.js +4 -3
  200. package/dist/cli/open-browser.d.ts +14 -0
  201. package/dist/cli/open-browser.js +26 -0
  202. package/dist/cli/owner-validation.d.ts +5 -28
  203. package/dist/cli/owner-validation.js +5 -28
  204. package/dist/cli/playbooks.d.ts +3 -4
  205. package/dist/cli/playbooks.js +131 -300
  206. package/dist/cli/predictions.d.ts +3 -0
  207. package/dist/cli/predictions.js +175 -0
  208. package/dist/cli/print.d.ts +2 -5
  209. package/dist/cli/print.js +3 -5
  210. package/dist/cli/projects.d.ts +2 -2
  211. package/dist/cli/projects.js +31 -25
  212. package/dist/cli/quality-repair-once.d.ts +1 -1
  213. package/dist/cli/quality-repair-once.js +7 -6
  214. package/dist/cli/recall.d.ts +2 -4
  215. package/dist/cli/recall.js +67 -137
  216. package/dist/cli/refine-llm.d.ts +5 -31
  217. package/dist/cli/refine-llm.js +23 -50
  218. package/dist/cli/remember.d.ts +3 -3
  219. package/dist/cli/remember.js +134 -192
  220. package/dist/cli/scheduler.d.ts +2 -17
  221. package/dist/cli/scheduler.js +14 -19
  222. package/dist/cli/serve.js +23 -14
  223. package/dist/cli/session-hooks.d.ts +11 -19
  224. package/dist/cli/session-hooks.js +143 -214
  225. package/dist/cli/setup.d.ts +4 -4
  226. package/dist/cli/setup.js +35 -30
  227. package/dist/cli/shared.d.ts +7 -25
  228. package/dist/cli/shared.js +17 -60
  229. package/dist/cli/slack.d.ts +2 -2
  230. package/dist/cli/slack.js +19 -23
  231. package/dist/cli/sleep-render.js +6 -3
  232. package/dist/cli/sleep.d.ts +3 -2
  233. package/dist/cli/sleep.js +17 -49
  234. package/dist/cli/status.d.ts +11 -14
  235. package/dist/cli/status.js +74 -120
  236. package/dist/cli/stdin.d.ts +4 -6
  237. package/dist/cli/stdin.js +2 -3
  238. package/dist/cli/transfer.d.ts +9 -9
  239. package/dist/cli/transfer.js +87 -108
  240. package/dist/cli/usage.d.ts +0 -79
  241. package/dist/cli/usage.js +1 -689
  242. package/dist/cli/verb-row.d.ts +32 -0
  243. package/dist/cli/verb-row.js +6 -0
  244. package/dist/cli/verbs/health.d.ts +27 -0
  245. package/dist/cli/verbs/health.js +232 -0
  246. package/dist/cli/verbs/memory.d.ts +16 -0
  247. package/dist/cli/verbs/memory.js +244 -0
  248. package/dist/cli/verbs/objects.d.ts +20 -0
  249. package/dist/cli/verbs/objects.js +254 -0
  250. package/dist/cli/verbs/sessions.d.ts +31 -0
  251. package/dist/cli/verbs/sessions.js +312 -0
  252. package/dist/cli/verbs.d.ts +81 -0
  253. package/dist/cli/verbs.js +7 -0
  254. package/dist/cli/versioned-verbs.d.ts +51 -0
  255. package/dist/cli/versioned-verbs.js +79 -0
  256. package/dist/cli.d.ts +1 -654
  257. package/dist/cli.js +44 -510
  258. package/dist/connectors/dlq.d.ts +39 -3
  259. package/dist/connectors/dlq.js +37 -3
  260. package/dist/connectors/github/backfill.d.ts +5 -25
  261. package/dist/connectors/github/backfill.js +26 -52
  262. package/dist/connectors/github/deletion.d.ts +4 -18
  263. package/dist/connectors/github/deletion.js +2 -15
  264. package/dist/connectors/github/dlq.d.ts +8 -33
  265. package/dist/connectors/github/dlq.js +34 -93
  266. package/dist/connectors/github/ingest.d.ts +4 -12
  267. package/dist/connectors/github/ingest.js +5 -36
  268. package/dist/connectors/github/octokit-client.d.ts +4 -16
  269. package/dist/connectors/github/octokit-client.js +27 -24
  270. package/dist/connectors/github/ratelimit.d.ts +3 -14
  271. package/dist/connectors/github/ratelimit.js +3 -14
  272. package/dist/connectors/github/scope.d.ts +3 -5
  273. package/dist/connectors/github/scope.js +3 -5
  274. package/dist/connectors/github/signature.d.ts +4 -26
  275. package/dist/connectors/github/signature.js +4 -26
  276. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  277. package/dist/connectors/github/tenant-routing.js +4 -26
  278. package/dist/connectors/github/transform.js +2 -16
  279. package/dist/connectors/github/types.d.ts +3 -15
  280. package/dist/connectors/github/types.js +2 -9
  281. package/dist/connectors/github/webhook.d.ts +3 -16
  282. package/dist/connectors/github/webhook.js +38 -23
  283. package/dist/connectors/ingest.d.ts +10 -0
  284. package/dist/connectors/ingest.js +28 -0
  285. package/dist/connectors/slack/backfill.d.ts +4 -17
  286. package/dist/connectors/slack/backfill.js +4 -13
  287. package/dist/connectors/slack/dlq.d.ts +2 -19
  288. package/dist/connectors/slack/dlq.js +51 -90
  289. package/dist/connectors/slack/ingest.d.ts +4 -9
  290. package/dist/connectors/slack/ingest.js +4 -30
  291. package/dist/connectors/slack/scope.d.ts +2 -8
  292. package/dist/connectors/slack/scope.js +2 -8
  293. package/dist/connectors/slack/signature.d.ts +1 -6
  294. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  295. package/dist/connectors/slack/tenant-routing.js +2 -21
  296. package/dist/connectors/slack/transform.d.ts +2 -18
  297. package/dist/connectors/slack/transform.js +2 -18
  298. package/dist/connectors/slack/types.d.ts +3 -9
  299. package/dist/connectors/slack/types.js +2 -4
  300. package/dist/connectors/slack/web-client.js +33 -27
  301. package/dist/connectors/slack/webhook.d.ts +3 -19
  302. package/dist/connectors/slack/webhook.js +6 -26
  303. package/dist/connectors/slack/workspaces.d.ts +4 -24
  304. package/dist/connectors/slack/workspaces.js +4 -24
  305. package/dist/consolidate/conflicts.js +7 -15
  306. package/dist/consolidate/dag-summary.d.ts +8 -0
  307. package/dist/consolidate/dag-summary.js +41 -0
  308. package/dist/consolidate/dag.d.ts +5 -28
  309. package/dist/consolidate/dag.js +29 -84
  310. package/dist/consolidate/decay.js +7 -19
  311. package/dist/consolidate/dedupe.d.ts +13 -52
  312. package/dist/consolidate/dedupe.js +18 -74
  313. package/dist/consolidate/flush-units.d.ts +3 -4
  314. package/dist/consolidate/flush-units.js +3 -3
  315. package/dist/consolidate/half-life-migration.d.ts +3 -26
  316. package/dist/consolidate/half-life-migration.js +11 -28
  317. package/dist/consolidate/llm-passes.js +49 -40
  318. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  319. package/dist/consolidate/memory-value-weights.js +2 -13
  320. package/dist/consolidate/memory-value.d.ts +11 -84
  321. package/dist/consolidate/memory-value.js +18 -105
  322. package/dist/consolidate/merge.js +12 -33
  323. package/dist/consolidate/physics-pass.d.ts +6 -1
  324. package/dist/consolidate/physics-pass.js +27 -9
  325. package/dist/consolidate/replay.d.ts +6 -38
  326. package/dist/consolidate/replay.js +25 -56
  327. package/dist/consolidate/run.js +1 -1
  328. package/dist/consolidate/sleep.d.ts +1 -8
  329. package/dist/consolidate/sleep.js +13 -22
  330. package/dist/consolidate/trace.d.ts +3 -18
  331. package/dist/consolidate/trace.js +3 -18
  332. package/dist/consolidate/traces.js +9 -25
  333. package/dist/core/ablation.d.ts +14 -91
  334. package/dist/core/ablation.js +16 -91
  335. package/dist/core/active-scope.d.ts +7 -0
  336. package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
  337. package/dist/core/ambient.d.ts +5 -8
  338. package/dist/core/ambient.js +40 -26
  339. package/dist/core/api-errors.d.ts +16 -0
  340. package/dist/core/api-errors.js +20 -0
  341. package/dist/core/capture-contract.d.ts +4 -2
  342. package/dist/core/capture-contract.js +4 -2
  343. package/dist/core/card.d.ts +4 -1
  344. package/dist/core/card.js +11 -1
  345. package/dist/core/compaction-timing.d.ts +7 -0
  346. package/dist/core/compaction-timing.js +9 -0
  347. package/dist/core/compare.d.ts +11 -67
  348. package/dist/core/compare.js +9 -63
  349. package/dist/core/config.d.ts +10 -24
  350. package/dist/core/config.js +20 -16
  351. package/dist/core/cosine.d.ts +3 -0
  352. package/dist/core/cosine.js +19 -0
  353. package/dist/core/handoff.d.ts +1 -7
  354. package/dist/core/handoff.js +1 -7
  355. package/dist/core/markdown.d.ts +6 -0
  356. package/dist/{store → core}/markdown.js +23 -22
  357. package/dist/core/memory-audit.d.ts +17 -0
  358. package/dist/core/memory-audit.js +54 -0
  359. package/dist/core/memory-quality.js +1 -1
  360. package/dist/core/memory.d.ts +51 -168
  361. package/dist/core/memory.js +76 -239
  362. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  363. package/dist/{consolidate → core}/merged-row.js +3 -2
  364. package/dist/core/package-root.d.ts +3 -0
  365. package/dist/core/package-root.js +5 -0
  366. package/dist/core/physics-config.d.ts +1 -4
  367. package/dist/core/physics-config.js +3 -8
  368. package/dist/core/physics.d.ts +15 -61
  369. package/dist/core/physics.js +65 -138
  370. package/dist/core/prediction.d.ts +3 -0
  371. package/dist/core/prediction.js +6 -0
  372. package/dist/core/project-identity.d.ts +20 -58
  373. package/dist/core/project-identity.js +27 -39
  374. package/dist/core/project-remote.js +13 -2
  375. package/dist/core/raw-append-only.d.ts +5 -0
  376. package/dist/core/raw-append-only.js +7 -0
  377. package/dist/core/recall-scope.d.ts +69 -0
  378. package/dist/core/recall-scope.js +138 -0
  379. package/dist/core/salience.d.ts +1 -7
  380. package/dist/core/salience.js +1 -7
  381. package/dist/dashboard/dashboard-actions.js +2 -2
  382. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  383. package/dist/dashboard/dashboard-snapshot.js +11 -2
  384. package/dist/dashboard/dashboard-types.d.ts +2 -1
  385. package/dist/dashboard/dashboard.d.ts +1 -0
  386. package/dist/dashboard/dashboard.js +50 -4
  387. package/dist/db/busy.d.ts +3 -8
  388. package/dist/db/busy.js +37 -33
  389. package/dist/db/connect.js +7 -8
  390. package/dist/db/index.d.ts +3 -3
  391. package/dist/db/index.js +3 -3
  392. package/dist/db/migrate.js +3 -3
  393. package/dist/db/migrations/index.d.ts +1 -1
  394. package/dist/db/migrations/index.js +3 -1
  395. package/dist/db/migrations/types.d.ts +2 -5
  396. package/dist/db/migrations/v14.js +2 -3
  397. package/dist/db/migrations/v15.js +2 -8
  398. package/dist/db/migrations/v16.js +2 -3
  399. package/dist/db/migrations/v17.js +2 -3
  400. package/dist/db/migrations/v19.js +2 -5
  401. package/dist/db/migrations/v20.js +2 -7
  402. package/dist/db/migrations/v22.js +4 -17
  403. package/dist/db/migrations/v23.js +3 -14
  404. package/dist/db/migrations/v24.js +2 -4
  405. package/dist/db/migrations/v25.js +3 -8
  406. package/dist/db/migrations/v26.js +2 -13
  407. package/dist/db/migrations/v27.js +3 -11
  408. package/dist/db/migrations/v28.js +2 -14
  409. package/dist/db/migrations/v29.js +4 -18
  410. package/dist/db/migrations/v30.js +4 -16
  411. package/dist/db/migrations/v31.js +2 -15
  412. package/dist/db/migrations/v32.js +4 -22
  413. package/dist/db/migrations/v33.js +2 -15
  414. package/dist/db/migrations/v34.js +2 -11
  415. package/dist/db/migrations/v35.js +2 -11
  416. package/dist/db/migrations/v36.js +2 -11
  417. package/dist/db/migrations/v37.js +8 -33
  418. package/dist/db/migrations/v38.js +5 -38
  419. package/dist/db/migrations/v39.js +9 -20
  420. package/dist/db/migrations/v40.js +2 -9
  421. package/dist/db/migrations/v41.js +2 -24
  422. package/dist/db/migrations/v43.js +1 -1
  423. package/dist/db/migrations/v44.js +2 -8
  424. package/dist/db/migrations/v45.js +2 -7
  425. package/dist/db/migrations/v47.js +2 -3
  426. package/dist/db/migrations/v51.js +1 -1
  427. package/dist/db/migrations/v55.d.ts +3 -0
  428. package/dist/db/migrations/v55.js +17 -0
  429. package/dist/db/open.d.ts +2 -2
  430. package/dist/db/open.js +21 -9
  431. package/dist/db/physics-state.d.ts +6 -22
  432. package/dist/db/physics-state.js +28 -39
  433. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  434. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  435. package/dist/db/tables.d.ts +2 -0
  436. package/dist/db/tables.js +6 -2
  437. package/dist/db/vector-store.d.ts +2 -0
  438. package/dist/db/vector-store.js +25 -5
  439. package/dist/db/wal-checkpointer.js +2 -1
  440. package/dist/doctor.js +85 -27
  441. package/dist/embeddings/local.d.ts +62 -0
  442. package/dist/embeddings/local.js +146 -0
  443. package/dist/embeddings/provider.d.ts +43 -0
  444. package/dist/{store/embeddings → embeddings}/provider.js +58 -83
  445. package/dist/embeddings/transformers.d.ts +26 -0
  446. package/dist/embeddings/transformers.js +89 -0
  447. package/dist/entry/session-text.d.ts +1 -1
  448. package/dist/entry/session-text.js +3 -2
  449. package/dist/eval/eval-stats.d.ts +15 -53
  450. package/dist/eval/eval-stats.js +12 -42
  451. package/dist/eval/eval-suite.d.ts +2 -13
  452. package/dist/eval/eval-suite.js +91 -45
  453. package/dist/eval/eval.d.ts +6 -24
  454. package/dist/eval/eval.js +8 -35
  455. package/dist/eval/judgment.d.ts +0 -3
  456. package/dist/eval/judgment.js +30 -15
  457. package/dist/extensions/openclaw-plugin/index.js +1 -1
  458. package/dist/graph/extract.d.ts +5 -27
  459. package/dist/graph/extract.js +10 -36
  460. package/dist/graph/recall.d.ts +7 -20
  461. package/dist/graph/recall.js +15 -77
  462. package/dist/graph/stream.d.ts +7 -39
  463. package/dist/graph/stream.js +11 -34
  464. package/dist/graph/view.d.ts +9 -35
  465. package/dist/graph/view.js +24 -44
  466. package/dist/graph/write.d.ts +1 -1
  467. package/dist/graph/write.js +9 -9
  468. package/dist/hooks/codex-session.js +3 -2
  469. package/dist/hooks/codex-wrapper.js +4 -3
  470. package/dist/hooks/copilot.js +2 -1
  471. package/dist/hooks/hook-blocks.d.ts +6 -2
  472. package/dist/hooks/hook-blocks.js +37 -124
  473. package/dist/hooks/json-hooks.d.ts +4 -36
  474. package/dist/hooks/json-hooks.js +22 -59
  475. package/dist/hooks/opencode.d.ts +0 -38
  476. package/dist/hooks/opencode.js +17 -81
  477. package/dist/hooks/shared.d.ts +6 -21
  478. package/dist/hooks/shared.js +31 -33
  479. package/dist/importers/core.d.ts +12 -37
  480. package/dist/importers/core.js +10 -28
  481. package/dist/importers/markdown-parse.d.ts +8 -22
  482. package/dist/importers/markdown-parse.js +8 -25
  483. package/dist/importers/markdown.js +3 -12
  484. package/dist/importers/sources.js +12 -39
  485. package/dist/importers/vault.d.ts +2 -8
  486. package/dist/importers/vault.js +31 -85
  487. package/dist/index.d.ts +8 -3
  488. package/dist/index.js +8 -3
  489. package/dist/learn/autolearn.d.ts +23 -42
  490. package/dist/learn/autolearn.js +45 -52
  491. package/dist/learn/churn-git.js +13 -4
  492. package/dist/learn/extract.d.ts +3 -2
  493. package/dist/learn/extract.js +8 -8
  494. package/dist/learn/forward-claim-detector.d.ts +6 -30
  495. package/dist/learn/forward-claim-detector.js +18 -68
  496. package/dist/learn/invalidation.d.ts +6 -18
  497. package/dist/learn/invalidation.js +18 -31
  498. package/dist/mcp/admin-tools.d.ts +2 -2
  499. package/dist/mcp/admin-tools.js +30 -53
  500. package/dist/mcp/format.js +3 -2
  501. package/dist/mcp/framing.d.ts +1 -0
  502. package/dist/mcp/framing.js +1 -1
  503. package/dist/mcp/memory-tools.js +7 -10
  504. package/dist/mcp/protocol.d.ts +15 -29
  505. package/dist/mcp/protocol.js +26 -16
  506. package/dist/mcp/recall-tools.js +14 -11
  507. package/dist/mcp/request.d.ts +3 -11
  508. package/dist/mcp/request.js +12 -27
  509. package/dist/mcp/server.d.ts +3 -9
  510. package/dist/mcp/server.js +5 -16
  511. package/dist/mcp/session-state.d.ts +1 -1
  512. package/dist/mcp/session-state.js +5 -11
  513. package/dist/mcp/stdio.d.ts +2 -6
  514. package/dist/mcp/stdio.js +68 -16
  515. package/dist/mcp/tool-args.js +2 -1
  516. package/dist/mcp/tools.js +47 -22
  517. package/dist/objects/customer-notes.d.ts +9 -44
  518. package/dist/objects/customer-notes.js +7 -48
  519. package/dist/objects/decisions.d.ts +14 -52
  520. package/dist/objects/decisions.js +15 -53
  521. package/dist/objects/descriptor.d.ts +1 -1
  522. package/dist/objects/incidents.d.ts +9 -40
  523. package/dist/objects/incidents.js +7 -41
  524. package/dist/objects/lifecycle.d.ts +1 -1
  525. package/dist/objects/lifecycle.js +2 -1
  526. package/dist/objects/policies.d.ts +13 -91
  527. package/dist/objects/policies.js +13 -99
  528. package/dist/objects/processes.d.ts +9 -54
  529. package/dist/objects/processes.js +7 -61
  530. package/dist/objects/project-briefs.d.ts +13 -57
  531. package/dist/objects/project-briefs.js +16 -78
  532. package/dist/objects/skills.d.ts +9 -44
  533. package/dist/objects/skills.js +8 -54
  534. package/dist/postinstall.js +7 -20
  535. package/dist/predictions/planning-fallacy.d.ts +11 -34
  536. package/dist/rerankers/clef.js +6 -37
  537. package/dist/rerankers/cross-encoder.d.ts +31 -2
  538. package/dist/rerankers/cross-encoder.js +65 -101
  539. package/dist/rerankers/index.js +5 -4
  540. package/dist/rerankers/jev.js +11 -10
  541. package/dist/rerankers/llm.d.ts +2 -11
  542. package/dist/rerankers/llm.js +14 -14
  543. package/dist/rerankers/outage-warning.d.ts +5 -2
  544. package/dist/rerankers/outage-warning.js +7 -4
  545. package/dist/rerankers/remote.d.ts +1 -0
  546. package/dist/rerankers/remote.js +2 -0
  547. package/dist/rerankers/types.d.ts +2 -14
  548. package/dist/search/bm25-search.js +1 -1
  549. package/dist/search/boosts.d.ts +0 -2
  550. package/dist/search/boosts.js +3 -3
  551. package/dist/search/embed-memories.d.ts +9 -0
  552. package/dist/search/embed-memories.js +377 -0
  553. package/dist/search/goal-boost.d.ts +23 -0
  554. package/dist/search/goal-boost.js +93 -0
  555. package/dist/search/hybrid.d.ts +11 -2
  556. package/dist/search/hybrid.js +9 -4
  557. package/dist/search/multihop.js +2 -3
  558. package/dist/search/path-context.d.ts +5 -18
  559. package/dist/search/path-context.js +5 -18
  560. package/dist/search/physics-search.d.ts +6 -3
  561. package/dist/search/physics-search.js +29 -19
  562. package/dist/search/rerank.js +1 -1
  563. package/dist/search/rrf.d.ts +7 -35
  564. package/dist/search/rrf.js +5 -30
  565. package/dist/search/vector.d.ts +13 -4
  566. package/dist/search/vector.js +40 -13
  567. package/dist/server/auth.d.ts +11 -28
  568. package/dist/server/auth.js +49 -32
  569. package/dist/server/boot.d.ts +2 -21
  570. package/dist/server/boot.js +69 -161
  571. package/dist/server/client-ip.d.ts +3 -21
  572. package/dist/server/client-ip.js +8 -30
  573. package/dist/server/deadline.d.ts +0 -2
  574. package/dist/server/deadline.js +1 -7
  575. package/dist/server/defaults.d.ts +4 -0
  576. package/dist/server/defaults.js +5 -0
  577. package/dist/server/key-check-bounds.d.ts +2 -1
  578. package/dist/server/lifecycle.d.ts +5 -4
  579. package/dist/server/lifecycle.js +19 -4
  580. package/dist/server/mcp-http.js +24 -53
  581. package/dist/server/rate-limit.d.ts +5 -18
  582. package/dist/server/rate-limit.js +4 -13
  583. package/dist/server/request.d.ts +4 -8
  584. package/dist/server/request.js +16 -19
  585. package/dist/server/route-checks.d.ts +7 -0
  586. package/dist/server/route-checks.js +42 -0
  587. package/dist/server/route-table.d.ts +9 -8
  588. package/dist/server/route-table.js +127 -139
  589. package/dist/server/routes/admin.d.ts +8 -8
  590. package/dist/server/routes/admin.js +35 -49
  591. package/dist/server/routes/customer-notes.d.ts +6 -6
  592. package/dist/server/routes/customer-notes.js +8 -14
  593. package/dist/server/routes/decisions.d.ts +6 -6
  594. package/dist/server/routes/decisions.js +12 -21
  595. package/dist/server/routes/incidents.d.ts +6 -6
  596. package/dist/server/routes/incidents.js +14 -25
  597. package/dist/server/routes/memories.d.ts +9 -9
  598. package/dist/server/routes/memories.js +20 -63
  599. package/dist/server/routes/object-routes.d.ts +6 -11
  600. package/dist/server/routes/object-routes.js +11 -22
  601. package/dist/server/routes/policies.d.ts +7 -7
  602. package/dist/server/routes/policies.js +12 -22
  603. package/dist/server/routes/predictions.d.ts +6 -6
  604. package/dist/server/routes/predictions.js +22 -38
  605. package/dist/server/routes/processes.d.ts +6 -6
  606. package/dist/server/routes/processes.js +17 -28
  607. package/dist/server/routes/project-briefs.d.ts +7 -7
  608. package/dist/server/routes/project-briefs.js +11 -20
  609. package/dist/server/routes/recall.d.ts +5 -5
  610. package/dist/server/routes/recall.js +16 -45
  611. package/dist/server/routes/skills.d.ts +7 -7
  612. package/dist/server/routes/skills.js +10 -22
  613. package/dist/server/server-detect.d.ts +15 -53
  614. package/dist/server/server-detect.js +55 -96
  615. package/dist/server/sleep-child.js +26 -7
  616. package/dist/server/sleep-offload.d.ts +11 -5
  617. package/dist/server/sleep-offload.js +21 -12
  618. package/dist/server/types.d.ts +32 -18
  619. package/dist/server/validation.d.ts +3 -2
  620. package/dist/server/validation.js +15 -33
  621. package/dist/server.d.ts +7 -6
  622. package/dist/server.js +8 -6
  623. package/dist/sharing/global-store.d.ts +19 -0
  624. package/dist/sharing/global-store.js +75 -0
  625. package/dist/sharing/global-sync.d.ts +6 -0
  626. package/dist/sharing/global-sync.js +73 -0
  627. package/dist/sharing/project-merge.d.ts +11 -19
  628. package/dist/sharing/project-merge.js +63 -125
  629. package/dist/sharing/search-both.d.ts +60 -0
  630. package/dist/sharing/search-both.js +138 -0
  631. package/dist/sharing/share.d.ts +40 -0
  632. package/dist/sharing/share.js +229 -0
  633. package/dist/store/ambient.js +9 -15
  634. package/dist/store/audit-event.d.ts +5 -13
  635. package/dist/store/audit-event.js +4 -12
  636. package/dist/store/audit.d.ts +2 -21
  637. package/dist/store/audit.js +8 -67
  638. package/dist/store/auth.d.ts +10 -8
  639. package/dist/store/auth.js +17 -12
  640. package/dist/store/candidates.d.ts +23 -5
  641. package/dist/store/candidates.js +119 -71
  642. package/dist/store/capture-write.d.ts +17 -0
  643. package/dist/store/capture-write.js +35 -0
  644. package/dist/store/card-detail.d.ts +2 -1
  645. package/dist/store/card-detail.js +2 -1
  646. package/dist/store/cards.d.ts +14 -9
  647. package/dist/store/cards.js +72 -126
  648. package/dist/store/compaction-caller.d.ts +18 -0
  649. package/dist/store/compaction-caller.js +29 -0
  650. package/dist/store/compactions-record.d.ts +115 -0
  651. package/dist/store/compactions-record.js +417 -0
  652. package/dist/store/compactions.js +6 -4
  653. package/dist/store/conflicts.d.ts +4 -21
  654. package/dist/store/conflicts.js +76 -152
  655. package/dist/store/connectors/dlq.d.ts +10 -0
  656. package/dist/store/connectors/dlq.js +32 -0
  657. package/dist/store/connectors/github.d.ts +14 -16
  658. package/dist/store/connectors/github.js +34 -57
  659. package/dist/store/connectors/slack.d.ts +2 -11
  660. package/dist/store/connectors/slack.js +18 -47
  661. package/dist/store/dashboard-reads.js +11 -14
  662. package/dist/store/delete-and-batch.d.ts +17 -31
  663. package/dist/store/delete-and-batch.js +84 -67
  664. package/dist/store/delivery-recorder.d.ts +15 -4
  665. package/dist/store/delivery-recorder.js +34 -17
  666. package/dist/store/descendant-page.js +6 -3
  667. package/dist/store/diagnostics.js +6 -13
  668. package/dist/store/dormant.d.ts +8 -30
  669. package/dist/store/dormant.js +18 -57
  670. package/dist/store/embeddings/index.d.ts +11 -90
  671. package/dist/store/embeddings/index.js +18 -523
  672. package/dist/store/entry-reads.d.ts +34 -61
  673. package/dist/store/entry-reads.js +111 -136
  674. package/dist/store/entry-row.d.ts +6 -35
  675. package/dist/store/entry-row.js +9 -37
  676. package/dist/store/entry-writes.d.ts +12 -18
  677. package/dist/store/entry-writes.js +46 -44
  678. package/dist/store/failure-log-at.d.ts +8 -0
  679. package/dist/store/failure-log-at.js +16 -0
  680. package/dist/store/failure-log.d.ts +2 -2
  681. package/dist/store/failure-log.js +5 -3
  682. package/dist/{trust → store}/gated-write.d.ts +3 -1
  683. package/dist/{trust → store}/gated-write.js +7 -5
  684. package/dist/store/goals.d.ts +3 -40
  685. package/dist/store/goals.js +41 -178
  686. package/dist/store/graph-queue.d.ts +6 -22
  687. package/dist/store/graph-queue.js +14 -45
  688. package/dist/store/graph-reads.d.ts +11 -35
  689. package/dist/store/graph-reads.js +24 -60
  690. package/dist/store/graph-rows.d.ts +3 -6
  691. package/dist/store/graph-rows.js +6 -9
  692. package/dist/store/graph-view-rows.d.ts +2 -1
  693. package/dist/store/graph-view-rows.js +2 -1
  694. package/dist/store/graph-writes.d.ts +10 -35
  695. package/dist/store/graph-writes.js +59 -106
  696. package/dist/store/half-life.d.ts +2 -1
  697. package/dist/store/half-life.js +14 -16
  698. package/dist/store/handoffs.d.ts +6 -12
  699. package/dist/store/handoffs.js +22 -40
  700. package/dist/store/index-and-stats.d.ts +6 -19
  701. package/dist/store/index-and-stats.js +36 -84
  702. package/dist/store/key-writes.js +1 -1
  703. package/dist/store/ledger-turn.d.ts +9 -0
  704. package/dist/store/ledger-turn.js +38 -0
  705. package/dist/store/mirrors.d.ts +2 -6
  706. package/dist/store/mirrors.js +24 -29
  707. package/dist/store/open.d.ts +0 -4
  708. package/dist/store/open.js +42 -62
  709. package/dist/store/pilot-arm.d.ts +12 -0
  710. package/dist/store/pilot-arm.js +42 -0
  711. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  712. package/dist/store/planning-fallacy-evidence.js +8 -37
  713. package/dist/store/port.d.ts +91 -82
  714. package/dist/store/port.js +8 -0
  715. package/dist/store/predictions.d.ts +12 -53
  716. package/dist/store/predictions.js +41 -125
  717. package/dist/store/project-tags.d.ts +62 -0
  718. package/dist/store/project-tags.js +67 -0
  719. package/dist/{cli → store}/quality-repair.js +15 -31
  720. package/dist/store/quarantine.js +2 -1
  721. package/dist/store/raw-archive.d.ts +4 -16
  722. package/dist/store/raw-archive.js +14 -29
  723. package/dist/store/recall-trace.d.ts +12 -77
  724. package/dist/store/recall-trace.js +37 -97
  725. package/dist/store/rejected-values.js +9 -20
  726. package/dist/store/rejection-probe.d.ts +4 -0
  727. package/dist/store/rejection-probe.js +19 -0
  728. package/dist/store/rejection.d.ts +10 -73
  729. package/dist/store/rejection.js +12 -84
  730. package/dist/store/report-reads.d.ts +6 -0
  731. package/dist/store/report-reads.js +29 -0
  732. package/dist/store/rows.d.ts +9 -19
  733. package/dist/store/rows.js +36 -34
  734. package/dist/store/rule-sql.d.ts +14 -0
  735. package/dist/store/rule-sql.js +56 -0
  736. package/dist/store/search-rows.d.ts +7 -38
  737. package/dist/store/search-rows.js +23 -54
  738. package/dist/store/sessions.d.ts +10 -47
  739. package/dist/store/sessions.js +21 -75
  740. package/dist/store/set-aside.d.ts +14 -0
  741. package/dist/store/set-aside.js +23 -0
  742. package/dist/store/sqlite/busy.d.ts +3 -0
  743. package/dist/store/sqlite/busy.js +8 -0
  744. package/dist/store/sqlite/connector-events-group.js +5 -8
  745. package/dist/store/sqlite/connector-writes-group.js +3 -3
  746. package/dist/store/sqlite/entry-writes-group.js +4 -4
  747. package/dist/store/sqlite/error-codec.js +8 -5
  748. package/dist/store/sqlite/executor.d.ts +2 -1
  749. package/dist/store/sqlite/executor.js +12 -5
  750. package/dist/store/sqlite/graph-reads-group.js +1 -1
  751. package/dist/store/sqlite/held-connection.d.ts +9 -0
  752. package/dist/store/sqlite/held-connection.js +41 -0
  753. package/dist/store/sqlite/local.d.ts +3 -3
  754. package/dist/store/sqlite/local.js +1 -0
  755. package/dist/store/sqlite/object-rows.d.ts +1 -1
  756. package/dist/store/sqlite/object-rows.js +6 -3
  757. package/dist/store/sqlite/objects-group.d.ts +1 -1
  758. package/dist/store/sqlite/objects-group.js +5 -3
  759. package/dist/store/sqlite/quarantine-group.js +2 -2
  760. package/dist/store/sqlite/store.d.ts +1 -4
  761. package/dist/store/sqlite/store.js +16 -15
  762. package/dist/store/sqlite/vector-reads-group.js +2 -2
  763. package/dist/store/sqlite/worker-jobs.js +1 -1
  764. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  765. package/dist/store/sqlite/worker-ops.js +13 -2
  766. package/dist/store/sqlite/worker-store.js +5 -2
  767. package/dist/store/summaries.d.ts +11 -63
  768. package/dist/store/summaries.js +37 -148
  769. package/dist/store/summary-dirty.js +1 -1
  770. package/dist/store/tenant-lookup.d.ts +6 -1
  771. package/dist/store/tenant-lookup.js +7 -0
  772. package/dist/store/tenant.d.ts +2 -16
  773. package/dist/store/tenant.js +4 -19
  774. package/dist/store/token-ledger.d.ts +13 -50
  775. package/dist/store/token-ledger.js +19 -85
  776. package/dist/store/usage-reports.js +5 -13
  777. package/dist/store/vector-index.d.ts +46 -0
  778. package/dist/store/vector-index.js +171 -0
  779. package/dist/store/working-memory.d.ts +6 -25
  780. package/dist/store/working-memory.js +18 -52
  781. package/dist/support-bundle.js +9 -8
  782. package/dist/trust/reject-flow.js +3 -5
  783. package/dist/util/agent-homes.d.ts +15 -0
  784. package/dist/util/agent-homes.js +34 -0
  785. package/dist/util/anthropic-messages.d.ts +3 -0
  786. package/dist/util/anthropic-messages.js +35 -6
  787. package/dist/util/atomic-write.d.ts +2 -1
  788. package/dist/util/atomic-write.js +35 -4
  789. package/dist/util/capped-json.d.ts +6 -0
  790. package/dist/util/capped-json.js +46 -0
  791. package/dist/util/chunked.d.ts +3 -0
  792. package/dist/util/chunked.js +10 -0
  793. package/dist/util/crash-handlers.d.ts +8 -1
  794. package/dist/util/crash-handlers.js +52 -10
  795. package/dist/util/ellipsize.d.ts +3 -0
  796. package/dist/util/ellipsize.js +5 -0
  797. package/dist/util/env.d.ts +14 -6
  798. package/dist/util/env.js +15 -7
  799. package/dist/util/format.d.ts +3 -0
  800. package/dist/util/format.js +6 -0
  801. package/dist/util/home-path.d.ts +2 -1
  802. package/dist/util/home-path.js +4 -2
  803. package/dist/util/hook-payload.d.ts +8 -0
  804. package/dist/util/hook-payload.js +37 -0
  805. package/dist/util/http-retry.d.ts +9 -1
  806. package/dist/util/http-retry.js +67 -8
  807. package/dist/util/http-util.d.ts +0 -8
  808. package/dist/util/http-util.js +10 -21
  809. package/dist/util/limits.d.ts +7 -0
  810. package/dist/util/limits.js +14 -0
  811. package/dist/util/log.d.ts +7 -2
  812. package/dist/util/log.js +34 -9
  813. package/dist/util/request-scope.d.ts +5 -2
  814. package/dist/util/request-scope.js +13 -7
  815. package/dist/util/secret-detect.d.ts +5 -30
  816. package/dist/util/secret-detect.js +19 -40
  817. package/dist/util/sqlite-blocked.d.ts +2 -0
  818. package/dist/util/sqlite-blocked.js +5 -0
  819. package/dist/util/stored-json.d.ts +1 -1
  820. package/dist/util/stored-json.js +1 -1
  821. package/dist/util/stream-tee.d.ts +3 -0
  822. package/dist/util/stream-tee.js +35 -0
  823. package/dist/util/time.d.ts +4 -0
  824. package/dist/util/time.js +4 -0
  825. package/dist/util/token-text.d.ts +1 -4
  826. package/dist/util/token-text.js +1 -4
  827. package/dist/util/transcript-tail.d.ts +2 -0
  828. package/dist/util/transcript-tail.js +24 -23
  829. package/dist/util/version.d.ts +5 -20
  830. package/dist/util/version.js +5 -20
  831. package/dist/{store → util}/yaml.d.ts +1 -5
  832. package/dist/{store → util}/yaml.js +2 -6
  833. package/extensions/openclaw-plugin/index.ts +1 -1
  834. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  835. package/extensions/openclaw-plugin/package.json +1 -1
  836. package/openclaw.plugin.json +1 -1
  837. package/package.json +2 -2
  838. package/dist/cli/provenance-coverage.d.ts +0 -18
  839. package/dist/connectors/github/cli-impl.d.ts +0 -25
  840. package/dist/sharing/scope.d.ts +0 -14
  841. package/dist/sharing/shared.d.ts +0 -187
  842. package/dist/sharing/shared.js +0 -563
  843. package/dist/store/embeddings/local.d.ts +0 -15
  844. package/dist/store/embeddings/local.js +0 -192
  845. package/dist/store/embeddings/provider.d.ts +0 -77
  846. package/dist/store/markdown.d.ts +0 -10
  847. package/dist/store/recall-scope.d.ts +0 -138
  848. package/dist/store/recall-scope.js +0 -216
  849. package/dist/store/vector-writes.d.ts +0 -13
  850. package/dist/store/vector-writes.js +0 -89
  851. /package/dist/{store → core}/object-types.d.ts +0 -0
  852. /package/dist/{store → core}/object-types.js +0 -0
  853. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
  854. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  855. /package/dist/{capture → util}/compaction-items.js +0 -0
@@ -1,18 +1,12 @@
1
1
  // Per-process state the MCP tools share across calls: recall rings, last recalled ids, auto-sleep runs.
2
+ import { DEFAULT_TENANT_ID } from '../util/env.js';
2
3
  import { resetSessionRings } from '../api/recall-record.js';
3
4
  /** Test-only: reset the MCP recall rings. Call from beforeEach. */
4
- export function __resetSessionRecallHistoryMcp() {
5
+ export function _resetSessionRecallHistoryMcpForTests() {
5
6
  resetSessionRings('mcp');
6
7
  }
7
- // ── Track last recalled IDs for outcome feedback ──
8
- //
9
- // Keyed per-client so two HTTP-MCP clients hitting the same tenant cannot
10
- // poison each other's outcome feedback. The key is `ctx.clientKey` when the
11
- // transport supplies one (HTTP-MCP via src/server.ts builds
12
- // hash(bearer+remoteAddr)); stdio and any caller without a clientKey falls
13
- // back to `'stdio-${pid}'` (one process = one client) or
14
- // `${tenantId}:default` if a McpContext is constructed in tests without a
15
- // pid-bound transport.
8
+ // Last recalled IDs per client for outcome feedback, so two HTTP-MCP clients on one tenant cannot poison each other: key is `ctx.clientKey` (hash of
9
+ // bearer+remoteAddr over HTTP), else 'stdio-${pid}', else `${tenantId}:default` for a McpContext built in tests.
16
10
  const MAX_RECALL_CLIENTS = 4096;
17
11
  // The caller names the project half of each key, so a set past the cap drops the client that recalled longest ago.
18
12
  class RecentRecalls extends Map {
@@ -28,7 +22,7 @@ class RecentRecalls extends Map {
28
22
  export const lastRecalledIds = new RecentRecalls();
29
23
  export { autoSleepInFlight } from '../api/auto-sleep.js';
30
24
  export function resolveClientKey(ctx) {
31
- const base = ctx?.clientKey ? ctx.clientKey : `stdio-${process.pid}:${ctx?.tenantId || 'default'}`;
25
+ const base = ctx?.clientKey ? ctx.clientKey : `stdio-${process.pid}:${ctx?.tenantId || DEFAULT_TENANT_ID}`;
32
26
  return ctx?.project ? `${base}:${ctx.project.name}` : base;
33
27
  }
34
28
  //# sourceMappingURL=session-state.js.map
@@ -1,8 +1,4 @@
1
- /**
2
- * Wire stdin/stdout to the dispatcher. Idempotent — only the entrypoint
3
- * (cli.ts `hippo mcp`, or running this file directly) should call this.
4
- * src/server.ts imports `handleMcpRequest` without invoking this, so the
5
- * HTTP daemon does not steal stdin or exit when its parent closes a pipe.
6
- */
1
+ /** Wires stdin/stdout to the dispatcher; idempotent. Only the entrypoint (cli.ts `hippo mcp`, or this file run directly) should call it, so the HTTP daemon
2
+ * (which imports `handleMcpRequest`) does not steal stdin or exit when its parent closes a pipe. */
7
3
  export declare function startStdioLoop(): void;
8
4
  //# sourceMappingURL=stdio.d.ts.map
package/dist/mcp/stdio.js CHANGED
@@ -1,19 +1,24 @@
1
1
  // Stdio transport: newline-delimited JSON-RPC frames in on stdin, replies out on stdout.
2
2
  import { exitAfterFlush, installCrashHandlers } from '../util/crash-handlers.js';
3
- import { errorMessage, log } from '../util/log.js';
3
+ import { errorFields, errorMessage, log } from '../util/log.js';
4
+ import { requestDeadlineMs } from '../util/request-scope.js';
5
+ import { MAX_BODY_BYTES } from '../util/http-util.js';
4
6
  import { parseFrame } from './framing.js';
5
7
  import { mcpErrorResponse } from './protocol.js';
6
8
  import { handleMcpRequest } from './request.js';
7
9
  import { isJsonNumber, isJsonString, isJsonObject } from '../util/json.js';
8
10
  import { randomUUID } from 'node:crypto';
9
- import { runWithRequestId } from '../util/request-scope.js';
11
+ import { currentRequestId, runWithRequestId } from '../util/request-scope.js';
10
12
  // MCP stdio transport spec: messages are newline-delimited JSON-RPC, no embedded newlines.
11
13
  // https://modelcontextprotocol.io/specification/.../basic/transports#stdio
12
14
  function send(msg) {
13
15
  process.stdout.write(JSON.stringify(msg) + '\n');
14
16
  }
15
17
  // ── Stdio transport ──
16
- let buffer = Buffer.alloc(0);
18
+ let pending = [];
19
+ let pendingBytes = 0;
20
+ // Set when the pending bytes hold a Content-Length header whose body has not fully arrived.
21
+ let needs;
17
22
  // The part of a refused frame still on its way, dropped as it arrives so it is never buffered or read as a new frame.
18
23
  let refused = 0;
19
24
  function withoutRefused(chunk) {
@@ -61,6 +66,40 @@ async function exitWhenDrained() {
61
66
  }
62
67
  exitAfterFlush(0);
63
68
  }
69
+ // The code the MCP SDKs give a request that timed out.
70
+ const REQUEST_TIMEOUT_CODE = -32001;
71
+ /** The method, with the tool's name for a tool call, so a timeout names what ran. */
72
+ function callName(req) {
73
+ const tool = req.params?.name;
74
+ return isJsonString(tool) ? `${req.method} ${tool.slice(0, 128)}` : req.method;
75
+ }
76
+ /** Answers `req` with one timeout error at the deadline a served request has. The returned function stops the timer and says whether that
77
+ * answer went out, so a later reply is dropped. */
78
+ function watchDeadline(req, owedReply) {
79
+ const ms = requestDeadlineMs();
80
+ if (ms === 0)
81
+ return () => false;
82
+ let expired = false;
83
+ const timer = setTimeout(() => {
84
+ expired = true;
85
+ const name = callName(req);
86
+ log.warn(`mcp: ${name} did not answer within ${ms} ms; it keeps running and its reply will be dropped`, { method: req.method });
87
+ if (!owedReply)
88
+ return;
89
+ const requestId = currentRequestId();
90
+ const message = `Request timed out: ${name} did not finish within ${ms} ms; a write it started may or may not be saved`;
91
+ const error = { code: REQUEST_TIMEOUT_CODE, message };
92
+ if (requestId !== undefined)
93
+ error.data = { requestId };
94
+ send({ jsonrpc: '2.0', id: req.id, error });
95
+ }, ms);
96
+ // Stdin and the call keep the process alive; this timer alone must not.
97
+ timer.unref();
98
+ return () => {
99
+ clearTimeout(timer);
100
+ return expired;
101
+ };
102
+ }
64
103
  function dispatch(body) {
65
104
  let parsed;
66
105
  try {
@@ -77,29 +116,40 @@ function dispatch(body) {
77
116
  }
78
117
  const req = parsed;
79
118
  if (req.method.startsWith('notifications/')) {
119
+ const stopWatching = watchDeadline(req, false);
80
120
  track(req.method, handleMcpRequest(req).then(() => { }).catch((err) => {
81
- log.error(`mcp notification ${req.method} failed: ${errorMessage(err)}`);
82
- }));
121
+ log.error(`mcp notification ${req.method} failed: ${errorMessage(err)}`, errorFields(err));
122
+ }).finally(stopWatching));
83
123
  return;
84
124
  }
85
- track(req.method, handleMcpRequest(req).then((resp) => { if (resp)
125
+ // A frame with no id is a notification under any method name, and JSON-RPC forbids answering one.
126
+ const timedOut = watchDeadline(req, isJsonString(req.id) || isJsonNumber(req.id));
127
+ track(req.method, handleMcpRequest(req).then((resp) => { if (!timedOut() && resp)
86
128
  send(resp); }).catch((err) => {
87
- send(mcpErrorResponse(req.id, err));
129
+ if (timedOut())
130
+ log.error(`mcp: ${callName(req)} failed after its timeout reply: ${errorMessage(err)}`, errorFields(err));
131
+ else
132
+ send(mcpErrorResponse(req.id, err, undefined, callName(req)));
88
133
  }));
89
134
  }
90
- /**
91
- * Wire stdin/stdout to the dispatcher. Idempotent — only the entrypoint
92
- * (cli.ts `hippo mcp`, or running this file directly) should call this.
93
- * src/server.ts imports `handleMcpRequest` without invoking this, so the
94
- * HTTP daemon does not steal stdin or exit when its parent closes a pipe.
95
- */
135
+ /** Wires stdin/stdout to the dispatcher; idempotent. Only the entrypoint (cli.ts `hippo mcp`, or this file run directly) should call it, so the HTTP daemon
136
+ * (which imports `handleMcpRequest`) does not steal stdin or exit when its parent closes a pipe. */
96
137
  export function startStdioLoop() {
97
- process.stdin.on('data', (chunk) => {
98
- buffer = Buffer.concat([buffer, withoutRefused(chunk)]);
138
+ process.stdin.on('data', (raw) => {
139
+ const chunk = withoutRefused(raw);
140
+ pending.push(chunk);
141
+ pendingBytes += chunk.length;
142
+ // Joining on every chunk would copy the whole pending frame each time; wait until a frame can have ended.
143
+ if (needs === undefined ? !chunk.includes(0x0a) && pendingBytes <= MAX_BODY_BYTES : pendingBytes < needs)
144
+ return;
145
+ let buffer = Buffer.concat(pending, pendingBytes);
146
+ needs = undefined;
99
147
  while (true) {
100
148
  const result = parseFrame(buffer);
101
- if (result.kind === 'incomplete')
149
+ if (result.kind === 'incomplete') {
150
+ needs = result.needs;
102
151
  break;
152
+ }
103
153
  buffer = result.rest;
104
154
  if (result.kind === 'oversize') {
105
155
  refused = result.remainder;
@@ -111,6 +161,8 @@ export function startStdioLoop() {
111
161
  if (result.kind === 'message')
112
162
  runWithRequestId(randomUUID(), () => dispatch(result.body));
113
163
  }
164
+ pending = buffer.length > 0 ? [buffer] : [];
165
+ pendingBytes = buffer.length;
114
166
  });
115
167
  process.stdin.on('end', () => { void exitWhenDrained(); });
116
168
  installCrashHandlers('mcp');
@@ -1,4 +1,5 @@
1
1
  // Hand-written for the JSON Schema subset the hippo tool definitions use, so the MCP server needs no validator dependency.
2
+ import { truncateWithEllipsis } from '../util/ellipsize.js';
2
3
  const ARG_PREVIEW_CHARS = 40;
3
4
  function isArgString(v) {
4
5
  return typeof v === 'string';
@@ -24,7 +25,7 @@ function describeValue(v) {
24
25
  if (Array.isArray(v))
25
26
  return 'array';
26
27
  if (isArgString(v))
27
- return JSON.stringify(v.length > ARG_PREVIEW_CHARS ? `${v.slice(0, ARG_PREVIEW_CHARS)}...` : v);
28
+ return JSON.stringify(truncateWithEllipsis(v, ARG_PREVIEW_CHARS));
28
29
  if (isArgNumber(v) || isArgBoolean(v))
29
30
  return String(v);
30
31
  return 'object';
package/dist/mcp/tools.js CHANGED
@@ -1,16 +1,18 @@
1
1
  // Tool definitions and input schemas served by tools/list.
2
2
  import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
3
3
  import { DEFAULT_ASSEMBLE_BUDGET } from '../api/assemble.js';
4
- import { MAX_ID_LEN } from '../util/http-util.js';
4
+ import { MAX_ID_LEN, MAX_LIST_LIMIT } from '../util/limits.js';
5
+ import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
6
+ import { DEFAULT_CONFIG } from '../core/config.js';
5
7
  // ── Tool definitions ──
6
8
  // HTTP sets no budget cap; 25x the recall default leaves room for large-context clients while bounding one call's work.
7
9
  const MAX_BUDGET_TOKENS = 25 * DEFAULT_RECALL_BUDGET;
8
- // Same ceiling as the HTTP list routes' parseListLimit.
9
- const MAX_LIST_LIMIT = 1000;
10
10
  export const TOOLS = [
11
11
  {
12
12
  name: 'hippo_recall',
13
- description: 'Retrieve relevant memories from the project memory store. Returns memories ranked by relevance, strength, and recency within the token budget. Use at session start or when you need context about a topic. Pass include_continuity=true to also surface the active task snapshot, latest matching session handoff, and recent session events as a "## Continuity" appendix.',
13
+ description: 'Retrieve relevant memories from the project memory store. Returns memories ranked by relevance, strength, and recency within the token budget. Use ' +
14
+ 'at session start or when you need context about a topic. Pass include_continuity=true to also surface the active task snapshot, latest matching ' +
15
+ 'session handoff, and recent session events as a "## Continuity" appendix.',
14
16
  inputSchema: {
15
17
  type: 'object',
16
18
  properties: {
@@ -27,28 +29,37 @@ export const TOOLS = [
27
29
  },
28
30
  scope: {
29
31
  type: 'string',
30
- description: 'Restrict results and continuity to memories/rows matching this scope exactly. When omitted, default-deny applies to ANY <source>:private:* (slack, github, ...) and unknown-legacy rows.',
32
+ description: 'Restrict results and continuity to memories/rows matching this scope exactly. When omitted, default-deny applies to ANY ' +
33
+ '<source>:private:* (slack, github, ...) and unknown-legacy rows.',
31
34
  },
32
35
  fresh_tail_count: {
33
36
  type: 'number',
34
- description: 'When > 0, surface the last N kind=raw rows tagged isFreshTail=true regardless of query match. Useful for "what did I just see" continuity. Capped at 200.',
37
+ description: 'When > 0, surface the last N kind=raw rows tagged isFreshTail=true regardless of query match. Useful for "what did I just see" ' +
38
+ 'continuity. Capped at 200.',
35
39
  },
36
40
  fresh_tail_session_id: {
37
41
  type: 'string',
38
- description: 'Restrict the fresh-tail window to a specific session. Without this, fresh-tail is tenant-wide (legacy v1.5.2 behaviour, pre-v1.6.3 default).',
42
+ description: 'Restrict the fresh-tail window to a specific session. Without this, fresh-tail is tenant-wide (legacy v1.5.2 behaviour, pre-v1.6.3 ' +
43
+ 'default).',
39
44
  },
40
45
  summarize_overflow: {
41
46
  type: 'boolean',
42
- description: 'When true (default), entries that overflow the limit and share a level-2 parent summary cause that summary to be appended in their place. Set false for strict-limit behaviour.',
47
+ description: 'When true (default), entries that overflow the limit and share a level-2 parent summary cause that summary to be appended in their ' +
48
+ 'place. Set false for strict-limit behaviour.',
43
49
  },
44
50
  scorer_window: {
45
51
  type: 'number',
46
- description: 'How many of the top-ranked memories the fresh-tail and summarize-overflow appendix is worked out against. The main list ranks the whole tenant store, so scorer_window does not narrow it. Default 200. Rejected as RecallContractError code=invalid_scorer_window if 0/negative/non-finite/non-numeric.',
52
+ description: `How many of the top-ranked memories the fresh-tail and summarize-overflow appendix is worked out against. ` +
53
+ `The main list ranks the whole tenant store, so scorer_window does not narrow it. ` +
54
+ `Default ${DEFAULT_SEARCH_CANDIDATE_LIMIT}. ` +
55
+ `Rejected as RecallContractError code=invalid_scorer_window if 0/negative/non-finite/non-numeric.`,
47
56
  },
48
57
  session_id: {
49
58
  type: 'string',
50
59
  maxLength: MAX_ID_LEN,
51
- description: `Optional session id (v1.7.4). When set AND (tenant, session) has active goals, applies the dlPFC goal-stack boost to the ranked memories before formatting. Mirrors fresh_tail_session_id shape (${MAX_ID_LEN}-char cap).`,
60
+ description: `Optional session id (v1.7.4). When set AND (tenant, session) has active goals, ` +
61
+ `applies the dlPFC goal-stack boost to the ranked memories before formatting. ` +
62
+ `Mirrors fresh_tail_session_id shape (${MAX_ID_LEN}-char cap).`,
52
63
  },
53
64
  },
54
65
  required: ['query'],
@@ -56,7 +67,9 @@ export const TOOLS = [
56
67
  },
57
68
  {
58
69
  name: 'hippo_assemble',
59
- description: 'Build a chronologically-ordered context window for a session. Returns ordered items: fresh-tail raw rows + level-2 summary substitutions for older rows + budget-fit. Hippo-additive vs lossless-claw: eviction picks lowest-strength non-fresh-tail items first instead of oldest-first. Tenant-scoped; default-deny on private scopes.',
70
+ description: 'Build a chronologically-ordered context window for a session. Returns ordered items: fresh-tail raw rows + level-2 summary substitutions for older ' +
71
+ 'rows + budget-fit. Hippo-additive vs lossless-claw: eviction picks lowest-strength non-fresh-tail items first instead of oldest-first. ' +
72
+ 'Tenant-scoped; default-deny on private scopes.',
60
73
  inputSchema: {
61
74
  type: 'object',
62
75
  properties: {
@@ -80,7 +93,8 @@ export const TOOLS = [
80
93
  },
81
94
  scope: {
82
95
  type: 'string',
83
- description: 'Restrict to memories whose scope matches exactly. When omitted, default-deny applies to ANY <source>:private:* scope and unknown:legacy rows. Pass an explicit scope to assemble a private session with consent.',
96
+ description: 'Restrict to memories whose scope matches exactly. When omitted, default-deny applies to ANY <source>:private:* scope and ' +
97
+ 'unknown:legacy rows. Pass an explicit scope to assemble a private session with consent.',
84
98
  },
85
99
  },
86
100
  required: ['session_id'],
@@ -88,7 +102,8 @@ export const TOOLS = [
88
102
  },
89
103
  {
90
104
  name: 'hippo_drill',
91
- description: 'Walk one step down the DAG from a level-2+ topic summary to its direct children. Companion to hippo_recall: when recall returns an item with isSummary=true and substitutedFor=[ids], pass the summary id here to recover the original detail. Tenant-scoped; default-deny on private scopes.',
105
+ description: 'Walk one step down the DAG from a level-2+ topic summary to its direct children. Companion to hippo_recall: when recall returns an item with ' +
106
+ 'isSummary=true and substitutedFor=[ids], pass the summary id here to recover the original detail. Tenant-scoped; default-deny on private scopes.',
92
107
  inputSchema: {
93
108
  type: 'object',
94
109
  properties: {
@@ -112,7 +127,8 @@ export const TOOLS = [
112
127
  type: 'integer',
113
128
  minimum: 1,
114
129
  maximum: 10,
115
- description: 'v0.30 / E5: walk N levels down (default 1 = direct children only). Higher values include children of children. Token budget remains GLOBAL across levels. Hard cap 10.',
130
+ description: 'v0.30 / E5: walk N levels down (default 1 = direct children only). Higher values include children of children. Token budget remains ' +
131
+ 'GLOBAL across levels. Hard cap 10.',
116
132
  },
117
133
  },
118
134
  required: ['summary_id'],
@@ -120,7 +136,8 @@ export const TOOLS = [
120
136
  },
121
137
  {
122
138
  name: 'hippo_remember',
123
- description: 'Store a new memory. Use when you learn something non-obvious, hit an error, or discover a useful pattern. Memories decay over time unless retrieved. Errors get 2x half-life.',
139
+ description: 'Store a new memory. Use when you learn something non-obvious, hit an error, or discover a useful pattern. Memories decay over time unless retrieved. ' +
140
+ 'Errors get 2x half-life.',
124
141
  inputSchema: {
125
142
  type: 'object',
126
143
  properties: {
@@ -131,14 +148,16 @@ export const TOOLS = [
131
148
  error: { type: 'boolean', description: 'Mark as error memory (doubles half-life)' },
132
149
  pin: { type: 'boolean', description: 'Pin memory (never decays)' },
133
150
  tag: { type: 'string', description: 'Optional tag for categorization' },
134
- personal: { type: 'boolean', description: 'Store it as your own private memory: only you can recall it, in every project. Needs a key you minted or a sign-in.' },
151
+ personal: { type: 'boolean', description: 'Store it as your own private memory: only you can recall it, in every project. Needs a key you minted or ' +
152
+ 'a sign-in.' },
135
153
  },
136
154
  required: ['text'],
137
155
  },
138
156
  },
139
157
  {
140
158
  name: 'hippo_outcome',
141
- description: 'Report whether recalled memories were useful. Strengthens good memories (+5 days half-life) and weakens bad ones (-3 days). Call after completing work.',
159
+ description: "Report whether recalled memories were useful. Good outcomes slow a memory's decay and bad ones speed it up, in proportion to its record. Call after " +
160
+ "completing work.",
142
161
  inputSchema: {
143
162
  type: 'object',
144
163
  properties: {
@@ -152,7 +171,9 @@ export const TOOLS = [
152
171
  },
153
172
  {
154
173
  name: 'hippo_context',
155
- description: 'Smart context injection: auto-detects current task from git state and returns relevant memories plus the active task snapshot, session handoff and recent session trail (the same bundle as GET /v1/context). Use at the start of any session. Memories and those sections are scope-filtered: a no-scope caller does NOT see ANY <source>:private:* (slack, github, ...) or legacy-quarantine rows.',
174
+ description: 'Smart context injection: auto-detects current task from git state and returns relevant memories plus the active task snapshot, session handoff and ' +
175
+ 'recent session trail (the same bundle as GET /v1/context). Use at the start of any session. Memories and those sections are scope-filtered: a ' +
176
+ 'no-scope caller does NOT see ANY <source>:private:* (slack, github, ...) or legacy-quarantine rows.',
156
177
  inputSchema: {
157
178
  type: 'object',
158
179
  properties: {
@@ -160,11 +181,12 @@ export const TOOLS = [
160
181
  type: 'number',
161
182
  minimum: 0,
162
183
  maximum: MAX_BUDGET_TOKENS,
163
- description: `Max tokens (default: config.defaultContextBudget, 3000; max ${MAX_BUDGET_TOKENS})`,
184
+ description: `Max tokens (default: config.defaultContextBudget, ${DEFAULT_CONFIG.defaultContextBudget}; max ${MAX_BUDGET_TOKENS})`,
164
185
  },
165
186
  scope: {
166
187
  type: 'string',
167
- description: 'Restrict memories, snapshot, handoff and trail to this scope exactly. When omitted, default-deny applies to ANY <source>:private:* (slack, github, ...) and unknown-legacy rows.',
188
+ description: 'Restrict memories, snapshot, handoff and trail to this scope exactly. When omitted, default-deny applies to ANY <source>:private:* ' +
189
+ '(slack, github, ...) and unknown-legacy rows.',
168
190
  },
169
191
  },
170
192
  },
@@ -232,13 +254,16 @@ export const TOOLS = [
232
254
  },
233
255
  {
234
256
  name: 'hippo_predict_baserate',
235
- description: 'J3 reference-class / planning-fallacy detector. Get base-rate stats for closed predictions in a class. Call this when you make a forward-looking claim (effort estimate, rollout risk, deadline) to anchor on the past track record rather than the inside view. Returns count + mean estimate + mean actual + mean ratio + median ratio + MAE + a human-readable summary. Tenant-scoped.',
257
+ description: 'J3 reference-class / planning-fallacy detector. Get base-rate stats for closed predictions in a class. Call this when you make a forward-looking ' +
258
+ 'claim (effort estimate, rollout risk, deadline) to anchor on the past track record rather than the inside view. Returns count + mean estimate + ' +
259
+ 'mean actual + mean ratio + median ratio + MAE + a human-readable summary. Tenant-scoped.',
236
260
  inputSchema: {
237
261
  type: 'object',
238
262
  properties: {
239
263
  class_tag: {
240
264
  type: 'string',
241
- description: 'Cohort label, e.g. "migration-effort", "rollout-risk", "deadline-week". Must match the class_tag used when the predictions were created via hippo_predict (or `hippo predict ...`).',
265
+ description: 'Cohort label, e.g. "migration-effort", "rollout-risk", "deadline-week". Must match the class_tag used when the predictions were ' +
266
+ 'created via hippo_predict (or `hippo predict ...`).',
242
267
  },
243
268
  },
244
269
  required: ['class_tag'],
@@ -1,27 +1,9 @@
1
- /**
2
- * customer_note first-class object.
3
- *
4
- * A `customer_note` is a discrete note recorded against an account/customer entity:
5
- * a `note` body scoped to a `customer`, evolving via the supersede delta lifecycle.
6
- * Entity-scoping is a free-form `customer` column (the `entities` table is unbuilt,
7
- * so an FK is deferred). Unlike project_brief's one-summary-per-repo,
8
- * a customer accrues MANY discrete notes over time, each with its own supersede chain
9
- * (correct a note -> a new version preserving history; close retires it).
10
- *
11
- * Reuses the project_brief/skill supersede machinery verbatim (superseded_by self-FK
12
- * + CAS + INSERT-preflight + server-derived version + change_summary + supersede
13
- * tenant-match trigger). It has NO assembler/renderer (the simplest first-class object): the
14
- * contribution is purely the entity-scoping dimension.
15
- *
16
- * The `customer_notes` table is the source of truth (survives memory decay); the
17
- * memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
18
- *
19
- * Lifecycle: active -> superseded (a corrected version) or active -> closed (retired).
20
- */
1
+ /** customer_note object: many discrete notes per free-form `customer` column (no entities FK yet), each with its own supersede chain.
2
+ * The `customer_notes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
21
3
  import type { KeysetPosition } from '../util/keyset.js';
22
4
  import type { SavableDescriptor } from './descriptor.js';
23
- import type { CustomerNote, NoteStatus } from '../store/object-types.js';
24
- export type { CustomerNote, NoteStatus } from '../store/object-types.js';
5
+ import type { CustomerNote, NoteStatus } from '../core/object-types.js';
6
+ export type { CustomerNote, NoteStatus } from '../core/object-types.js';
25
7
  export declare const VALID_NOTE_STATES: ReadonlySet<NoteStatus>;
26
8
  /** Field caps (untrusted at the HTTP/SDK boundary). note is a body, so a larger cap
27
9
  * than the 4096 short-field convention. */
@@ -47,32 +29,15 @@ export interface ListCustomerNotesOpts {
47
29
  after?: KeysetPosition;
48
30
  }
49
31
  export declare const CUSTOMER_NOTE: SavableDescriptor<'customer_note', SaveCustomerNoteOpts>;
50
- /**
51
- * Create a customer_note (or a new version that supersedes an existing one). Writes
52
- * the memory mirror + the customer_notes row in the `objects` store group's one transaction.
53
- * When supersedesNoteId is given, the referenced ACTIVE row is preflighted (status +
54
- * version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
55
- * the new version = predecessor.version + 1 (server-derived).
56
- *
57
- * The memory mirror carries a `customer:<lc>` tag (in addition to ['customer_note']
58
- * + caller extraTags) so scope-aware recall treats the note as entity-local. There is
59
- * no self-recursion path (customer_note has no receipt-query/refresh).
60
- */
32
+ /** Create a customer_note, or a new version superseding an existing one, in the `objects` store group's one transaction.
33
+ * The mirror carries a `customer:<lc>` tag so scope-aware recall treats the note as entity-local. */
61
34
  export declare function saveCustomerNote(hippoRoot: string, tenantId: string, opts: SaveCustomerNoteOpts, actor?: string): CustomerNote;
62
- /**
63
- * Close (retire) an active note. CAS guard WHERE status='active'; 0 changes
64
- * distinguishes not-found from not-active. A superseded row is terminal.
65
- */
35
+ /** Close (retire) an active note; CAS on status='active', 0 changes means not-found or not-active. */
66
36
  export declare function closeCustomerNote(hippoRoot: string, tenantId: string, id: number, actor?: string): CustomerNote;
67
37
  export declare function loadCustomerNoteById(hippoRoot: string, tenantId: string, id: number): CustomerNote | null;
68
38
  export declare function loadCustomerNotes(hippoRoot: string, tenantId: string, opts?: ListCustomerNotesOpts): CustomerNote[];
69
- /**
70
- * All ACTIVE notes for a customer, newest first. Returns a LIST (a customer accrues
71
- * MANY notes) - this deliberately DIVERGES from project_brief's
72
- * loadActiveBriefForRepo, which returns a single brief-or-null because a repo has one
73
- * evolving summary. A future caller cloning the project_brief shape by analogy must
74
- * not assume a single-return here; the plural name signals the list contract.
75
- */
39
+ /** All ACTIVE notes for a customer, newest first. Returns a LIST, unlike project_brief's single-or-null
40
+ * loadActiveBriefForRepo: a customer accrues many notes. */
76
41
  export declare function loadActiveNotesForCustomer(hippoRoot: string, tenantId: string, customer: string, opts?: {
77
42
  limit?: number;
78
43
  }): CustomerNote[];
@@ -1,28 +1,7 @@
1
- /**
2
- * customer_note first-class object.
3
- *
4
- * A `customer_note` is a discrete note recorded against an account/customer entity:
5
- * a `note` body scoped to a `customer`, evolving via the supersede delta lifecycle.
6
- * Entity-scoping is a free-form `customer` column (the `entities` table is unbuilt,
7
- * so an FK is deferred). Unlike project_brief's one-summary-per-repo,
8
- * a customer accrues MANY discrete notes over time, each with its own supersede chain
9
- * (correct a note -> a new version preserving history; close retires it).
10
- *
11
- * Reuses the project_brief/skill supersede machinery verbatim (superseded_by self-FK
12
- * + CAS + INSERT-preflight + server-derived version + change_summary + supersede
13
- * tenant-match trigger). It has NO assembler/renderer (the simplest first-class object): the
14
- * contribution is purely the entity-scoping dimension.
15
- *
16
- * The `customer_notes` table is the source of truth (survives memory decay); the
17
- * memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
18
- *
19
- * Lifecycle: active -> superseded (a corrected version) or active -> closed (retired).
20
- */
1
+ /** customer_note object: many discrete notes per free-form `customer` column (no entities FK yet), each with its own supersede chain.
2
+ * The `customer_notes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
21
3
  import { checkText, requireLine } from './fields.js';
22
4
  import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
23
- // ---------------------------------------------------------------------------
24
- // Domain types
25
- // ---------------------------------------------------------------------------
26
5
  export const VALID_NOTE_STATES = new Set([
27
6
  'active',
28
7
  'superseded',
@@ -69,27 +48,12 @@ export const CUSTOMER_NOTE = {
69
48
  };
70
49
  },
71
50
  };
72
- // ---------------------------------------------------------------------------
73
- // Public API
74
- // ---------------------------------------------------------------------------
75
- /**
76
- * Create a customer_note (or a new version that supersedes an existing one). Writes
77
- * the memory mirror + the customer_notes row in the `objects` store group's one transaction.
78
- * When supersedesNoteId is given, the referenced ACTIVE row is preflighted (status +
79
- * version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
80
- * the new version = predecessor.version + 1 (server-derived).
81
- *
82
- * The memory mirror carries a `customer:<lc>` tag (in addition to ['customer_note']
83
- * + caller extraTags) so scope-aware recall treats the note as entity-local. There is
84
- * no self-recursion path (customer_note has no receipt-query/refresh).
85
- */
51
+ /** Create a customer_note, or a new version superseding an existing one, in the `objects` store group's one transaction.
52
+ * The mirror carries a `customer:<lc>` tag so scope-aware recall treats the note as entity-local. */
86
53
  export function saveCustomerNote(hippoRoot, tenantId, opts, actor = 'cli') {
87
54
  return saveObjectAt(CUSTOMER_NOTE, { hippoRoot, tenantId, actor }, opts);
88
55
  }
89
- /**
90
- * Close (retire) an active note. CAS guard WHERE status='active'; 0 changes
91
- * distinguishes not-found from not-active. A superseded row is terminal.
92
- */
56
+ /** Close (retire) an active note; CAS on status='active', 0 changes means not-found or not-active. */
93
57
  export function closeCustomerNote(hippoRoot, tenantId, id, actor = 'cli') {
94
58
  return closeObjectAt(hippoRoot, CUSTOMER_NOTE, tenantId, id, actor);
95
59
  }
@@ -99,13 +63,8 @@ export function loadCustomerNoteById(hippoRoot, tenantId, id) {
99
63
  export function loadCustomerNotes(hippoRoot, tenantId, opts = {}) {
100
64
  return listObjectsAt(hippoRoot, CUSTOMER_NOTE, tenantId, { status: opts.status, filter: opts.customer, limit: opts.limit, after: opts.after });
101
65
  }
102
- /**
103
- * All ACTIVE notes for a customer, newest first. Returns a LIST (a customer accrues
104
- * MANY notes) - this deliberately DIVERGES from project_brief's
105
- * loadActiveBriefForRepo, which returns a single brief-or-null because a repo has one
106
- * evolving summary. A future caller cloning the project_brief shape by analogy must
107
- * not assume a single-return here; the plural name signals the list contract.
108
- */
66
+ /** All ACTIVE notes for a customer, newest first. Returns a LIST, unlike project_brief's single-or-null
67
+ * loadActiveBriefForRepo: a customer accrues many notes. */
109
68
  export function loadActiveNotesForCustomer(hippoRoot, tenantId, customer, opts = {}) {
110
69
  return loadCustomerNotes(hippoRoot, tenantId, { customer, status: 'active', limit: opts.limit });
111
70
  }
@@ -1,38 +1,16 @@
1
- /**
2
- * Decision first-class object.
3
- *
4
- * `hippo decide` used to write only a tagged memory (tags ['decision'], source
5
- * 'decision') with a 90-day half-life, so an in-force decision decayed out of
6
- * recall even though it was never reversed. The `decisions` table is now the
7
- * source of truth: a decision stays `active` regardless of memory decay, and
8
- * `hippo decide list --status active` is authoritative. A memory row still
9
- * mirrors the decision for recall surfaces but is NOT canonical — memory_id is
10
- * NULLABLE with ON DELETE SET NULL so forget/consolidate/archive gracefully
11
- * orphans the decision row.
12
- *
13
- * Lifecycle: active -> superseded (a newer decision replaces it; superseded_by
14
- * points to the successor) or active -> closed (retired with no successor).
15
- *
16
- * Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
17
- * enforce decisions.tenant_id == the referenced memory's tenant_id, and a
18
- * superseded_by same-tenant trigger makes cross-tenant supersession
19
- * unrepresentable. Mirrors the predictions pattern (src/predictions.ts).
20
- *
21
- * Dual-write atomicity: `saveDecision` hands the memory and the decision to the
22
- * `objects` store group, which commits them (and, when superseding, the old
23
- * row's UPDATE) together, so a failure in any step rolls all of them back.
24
- */
1
+ /** Decision object: the `decisions` table is the source of truth, so an in-force decision stays `active` despite memory decay.
2
+ * The memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall only; saveDecision commits both in one `objects` transaction. */
3
+ import type { MemoryEntry } from '../core/memory.js';
25
4
  import type { KeysetPosition } from '../util/keyset.js';
26
5
  import type { SavableDescriptor } from './descriptor.js';
27
- import type { Decision, DecisionStatus } from '../store/object-types.js';
28
- export type { Decision, DecisionStatus } from '../store/object-types.js';
6
+ import type { Decision, DecisionStatus } from '../core/object-types.js';
7
+ export type { Decision, DecisionStatus } from '../core/object-types.js';
29
8
  export declare const VALID_DECISION_STATES: ReadonlySet<DecisionStatus>;
30
9
  export interface SaveDecisionOpts {
31
10
  decisionText: string;
32
11
  context?: string;
33
- /** Table id of an ACTIVE decision this one supersedes. The CLI resolves it
34
- * from a `--supersedes <memory-id>` via resolveActiveDecisionIdByMemory;
35
- * HTTP/SDK pass the table id directly. */
12
+ /** Table id of an ACTIVE decision this one supersedes; the CLI resolves a `--supersedes <memory-id>`
13
+ * via resolveActiveDecisionIdByMemory, HTTP/SDK pass the table id. */
36
14
  supersedesDecisionId?: number;
37
15
  /** Extra memory tags merged after ['decision'] (the CLI passes path-context
38
16
  * tags; HTTP/SDK pass none). */
@@ -45,35 +23,19 @@ export interface ListDecisionsOpts {
45
23
  after?: KeysetPosition;
46
24
  }
47
25
  export declare const DECISION: SavableDescriptor<'decision', SaveDecisionOpts>;
48
- /**
49
- * Create a decision. The memory mirror and the decisions row are written in
50
- * one transaction by the `objects` store group. When supersedesDecisionId is
51
- * given, the referenced ACTIVE row is UPDATEd -> superseded in the SAME
52
- * transaction (CAS: WHERE status='active'; zero rows changed means a duplicate
53
- * supersede aborts the whole write rather than orphaning a successor).
54
- *
55
- * The memory mirror preserves the legacy `hippo decide` shape: tags
56
- * ['decision', ...extraTags], source 'decision', confidence 'verified',
57
- * the configured default half-life, content = "<text>\n\nContext: <context>"
58
- * when context is given (so existing recall output is unchanged).
59
- */
26
+ /** Create a decision; the memory mirror and the row commit in one transaction.
27
+ * Superseding CASes the old row (WHERE status='active'), so a duplicate supersede aborts the whole write. */
60
28
  export declare function saveDecision(hippoRoot: string, tenantId: string, opts: SaveDecisionOpts, actor?: string): Decision;
61
- /**
62
- * Close (retire) an active decision with no successor. Updates the decisions
63
- * row only; the memory mirror is not mutated.
64
- */
29
+ /** Weaken the memory a new decision replaces, once the save has committed: half-life halved to a day at least, marked stale, tagged `superseded`. */
30
+ export declare function weakenSupersededMemory(hippoRoot: string, entry: MemoryEntry, actor?: string): void;
31
+ /** Close (retire) an active decision with no successor; the memory mirror is not mutated. */
65
32
  export declare function closeDecision(hippoRoot: string, tenantId: string, id: number, actor?: string): Decision;
66
33
  export declare function loadDecisionById(hippoRoot: string, tenantId: string, id: number): Decision | null;
67
34
  export declare function loadDecisions(hippoRoot: string, tenantId: string, opts?: ListDecisionsOpts): Decision[];
68
35
  export declare function loadActiveDecisions(hippoRoot: string, tenantId: string, opts?: {
69
36
  limit?: number;
70
37
  }): Decision[];
71
- /**
72
- * Resolve a `--supersedes <memory-id>` (the legacy CLI contract) to the table id
73
- * of the ACTIVE decision backed by that memory, or null when the memory has no
74
- * active decision row (a legacy pre-episode decision-tagged memory). Extracted
75
- * so the CLI's backward-compat path is unit-testable at the store layer without
76
- * exporting cmdDecide.
77
- */
38
+ /** Resolve a `--supersedes <memory-id>` to the table id of the ACTIVE decision backed by that memory, or null.
39
+ * Exported so the CLI's backward-compat path is testable at the store layer. */
78
40
  export declare function resolveActiveDecisionIdByMemory(hippoRoot: string, tenantId: string, memoryId: string): number | null;
79
41
  //# sourceMappingURL=decisions.d.ts.map