hippo-memory 2.0.0 → 2.1.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 (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -1,8 +1,8 @@
1
1
  // Sleep and the daily runner clean a store's old automatic memories once, so an upgrade needs no command.
2
2
  import * as path from 'path';
3
- import { errorMessage, log } from '../util/log.js';
3
+ import { errorMessage, log, errorFields } from '../util/log.js';
4
4
  import { getGlobalRoot } from '../sharing/global-store.js';
5
- import { repairMemoryQualityOnce } from '../api/audit.js';
5
+ import { repairMemoryQualityOnce } from '../api/auth/audit.js';
6
6
  import { cliApiContext } from './api-context.js';
7
7
  /** Fault-isolated like the project tag repair: a failure warns, leaves the store unmarked and runs again next time. */
8
8
  export async function repairQualityOnceAt(root, tenantId) {
@@ -25,13 +25,14 @@ export async function repairQualityOnceAt(root, tenantId) {
25
25
  const review = result.issues.filter((issue) => issue.disposition === 'review').length;
26
26
  if (review > 0) {
27
27
  const lead = moved > 0 ? ` ${review} more` : `Checked old automatic memories once after the upgrade: ${review}`;
28
- console.log(`${lead} ${review === 1 ? 'looks' : 'look'} doubtful and ${review === 1 ? 'was' : 'were'} kept; hippo audit repair${scope} lists them.`);
28
+ console.log(`${lead} ${review === 1 ? 'looks' : 'look'} doubtful and ${review === 1 ? 'was' : 'were'} kept; hippo audit ` +
29
+ `repair${scope} lists them.`);
29
30
  }
30
31
  for (const warning of result.warnings)
31
32
  log.warn(warning);
32
33
  }
33
34
  catch (err) {
34
- log.warn(`memory quality repair skipped, tried again next time: ${errorMessage(err)}`);
35
+ log.warn(`memory quality repair skipped, tried again next time: ${errorMessage(err)}`, errorFields(err));
35
36
  }
36
37
  }
37
38
  //# sourceMappingURL=quality-repair-once.js.map
@@ -6,22 +6,20 @@ import { loadConfig } from '../core/config.js';
6
6
  import { estimateTokens } from '../util/token-text.js';
7
7
  import { dropHeldCopies } from '../util/same-text.js';
8
8
  import * as api from '../api/index.js';
9
- import { detectAnchoring, hashQueryText, biasHintEnabled, snapshotRing } from '../api/recall-history.js';
10
- import { sessionRing, shownRecallRows } from '../api/recall-record.js';
11
- import { detectAvailabilityBias } from '../api/availability.js';
12
- import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGHBORS, fitRecallRows, loadCliRecallContinuity, MAX_HOPS, recallJsonRow, } from '../api/recall-cli.js';
9
+ import { availabilityPool, cutoffClauses, detectRecallHints, handoffText, hashQueryText, printedTokens, sessionRing, sessionTrailText, settleTokens, shownRecallRows, shrinkToFit, snapshotText, suppressionSummary, tokenPurse, } from '../api/cli-surface.js';
10
+ import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGHBORS, fitRecallRows, loadCliRecallContinuity, MAX_HOPS, recallJsonRow, } from '../api/recall/rows.js';
13
11
  import { cliApiContext } from './api-context.js';
14
- import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
15
12
  import { printError } from './output.js';
16
- import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, numberFlag, } from './flag-values.js';
13
+ import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, isStringFlag, numberFlag, stringFlag, stringFlagOrExit, } from './flag-values.js';
17
14
  import { requireInit } from './shared.js';
18
- import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
15
+ import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole, } from './print.js';
19
16
  import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
20
- import { CliExit } from './exit.js';
17
+ import { fail } from './exit.js';
21
18
  // JSON.stringify keeps quotes or parens in the matched phrase from blurring the line.
22
19
  function planningLine(p) {
23
- if (p.hint)
20
+ if (p.hint) {
24
21
  return `Planning fallacy hint (class: ${p.hint.classTag}): ${p.hint.baserateSummary} [detected: ${JSON.stringify(p.hint.detectedPhrase)}]`;
22
+ }
25
23
  if (p.watching) {
26
24
  return `Planning fallacy: watching this query (reason: ${p.watching.reason}). ${p.watching.suggestion} ` +
27
25
  `[detected: ${JSON.stringify(p.watching.detectedPhrase)}]`;
@@ -29,45 +27,38 @@ function planningLine(p) {
29
27
  return null;
30
28
  }
31
29
  function cutoffLine(shown, s) {
32
- const clauses = [];
33
- // The residual covers rank, budget and limit drops alike, and fires with no --limit at all.
34
- if (s.droppedByBudget > 0)
35
- clauses.push(`${s.droppedByBudget} not shown (rank, budget or limit)`);
36
- if (s.droppedPreRank > 0)
37
- clauses.push(`${s.droppedPreRank} filtered pre-rank`);
38
- if (s.summarySubstitutionsAdded > 0)
39
- clauses.push(`${s.summarySubstitutionsAdded} summary substitutions added`);
40
- if (s.freshTailAdded > 0)
41
- clauses.push(`${s.freshTailAdded} fresh-tail added`);
42
- if (s.suppressedByInterference > 0)
43
- clauses.push(`${s.suppressedByInterference} suppressed by interference`);
44
- return clauses.length > 0 ? `Cutoff: showing ${shown} of ${s.totalCandidates} candidates; ${clauses.join('; ')}.` : null;
30
+ const clauses = cutoffClauses(s);
31
+ return clauses.length > 0
32
+ ? `Cutoff: showing ${shown} of ${s.totalCandidates} candidates; ${clauses.join('; ')}.`
33
+ : null;
45
34
  }
46
35
  function failWith(message) {
47
36
  return () => {
48
- printError(message);
49
- throw new CliExit(1);
37
+ fail(message);
50
38
  };
51
39
  }
52
40
  /** `--graph-stream` implies rrf fusion as well as the graph stream; the CLI fuses the local store only. */
53
41
  function parseGraphStreamFlags(flags) {
54
42
  let hops;
55
43
  if (flags['graph-hops'] !== undefined) {
56
- if (isBooleanFlag(flags['graph-hops']))
44
+ if (isBooleanFlag(flags['graph-hops'])) {
57
45
  failWith(`--graph-hops requires an integer value 1..${MAX_HOPS} (e.g. --graph-hops 2).`)();
46
+ }
58
47
  const h = Number(flags['graph-hops']);
59
48
  if (!Number.isInteger(h) || h < 1 || h > MAX_HOPS) {
60
- failWith(`Invalid --graph-hops: "${String(flags['graph-hops'])}". Must be an integer 1..${MAX_HOPS}.`)();
49
+ failWith(`Invalid --graph-hops: "${stringFlag(flags, 'graph-hops')}". Must be an integer 1..${MAX_HOPS}.`)();
61
50
  }
62
51
  hops = h;
63
52
  }
64
53
  let seeds;
65
54
  if (flags['graph-seeds'] !== undefined) {
66
- if (isBooleanFlag(flags['graph-seeds']))
55
+ if (isBooleanFlag(flags['graph-seeds'])) {
67
56
  failWith('--graph-seeds requires a positive integer value (e.g. --graph-seeds 10).')();
57
+ }
68
58
  const s = Number(flags['graph-seeds']);
69
- if (!Number.isInteger(s) || s < 1)
70
- failWith(`Invalid --graph-seeds: "${String(flags['graph-seeds'])}". Must be a positive integer.`)();
59
+ if (!Number.isInteger(s) || s < 1) {
60
+ failWith(`Invalid --graph-seeds: "${stringFlag(flags, 'graph-seeds')}". Must be a positive integer.`)();
61
+ }
71
62
  seeds = s;
72
63
  }
73
64
  return { hops, seeds };
@@ -76,11 +67,12 @@ function parseHopsFlags(flags) {
76
67
  if (flags['hops'] === undefined)
77
68
  return {};
78
69
  // A value-less `--hops` parses as true, and Number(true) === 1 would silently run a 1-hop expansion.
79
- if (isBooleanFlag(flags['hops']))
70
+ if (isBooleanFlag(flags['hops'])) {
80
71
  return { fail: failWith(`--hops requires an integer value 0..${MAX_HOPS} (e.g. --hops 1).`) };
72
+ }
81
73
  const hops = Number(flags['hops']);
82
74
  if (!Number.isInteger(hops) || hops < 0 || hops > MAX_HOPS) {
83
- return { fail: failWith(`Invalid --hops: "${String(flags['hops'])}". Must be an integer 0..${MAX_HOPS}.`) };
75
+ return { fail: failWith(`Invalid --hops: "${stringFlag(flags, 'hops')}". Must be an integer 0..${MAX_HOPS}.`) };
84
76
  }
85
77
  const raw = flags['max-neighbors'];
86
78
  if (raw === undefined)
@@ -94,7 +86,10 @@ function parseHopsFlags(flags) {
94
86
  return { value: { hops, maxNeighbors } };
95
87
  }
96
88
  function parseRerankerFlag(flags) {
97
- const name = flags['reranker'] !== undefined ? String(flags['reranker']).trim() : '';
89
+ const nameRaw = flags['reranker'];
90
+ if (nameRaw !== undefined && !isStringFlag(nameRaw))
91
+ return { fail: failWith('--reranker requires a value.') };
92
+ const name = nameRaw?.trim() ?? '';
98
93
  let picked;
99
94
  try {
100
95
  picked = cliRecallReranker(name);
@@ -125,11 +120,16 @@ function parseSalienceFlag(flags) {
125
120
  return { value: threshold };
126
121
  }
127
122
  function parseChoiceFlag(flags, name, valid) {
128
- const value = flags[name] !== undefined ? String(flags[name]).trim() : '';
123
+ const raw = flags[name];
124
+ if (raw !== undefined && !isStringFlag(raw)) {
125
+ return { fail: failWith(`--${name} requires a value. Must be one of: ${valid.join(', ')}.`) };
126
+ }
127
+ const value = raw?.trim() ?? '';
129
128
  if (!value)
130
129
  return {};
131
- if (!valid.includes(value))
130
+ if (!valid.includes(value)) {
132
131
  return { fail: failWith(`Invalid --${name}: "${value}". Must be one of: ${valid.join(', ')}.`) };
132
+ }
133
133
  return { value };
134
134
  }
135
135
  /** Parses every flag a ranking stage reads; the first invalid one in pipeline order becomes `error`. */
@@ -140,7 +140,11 @@ function parseRecallLateFlags(flags) {
140
140
  const outcome = parseChoiceFlag(flags, 'outcome', ['success', 'failure', 'partial']);
141
141
  const layer = parseChoiceFlag(flags, 'layer', Object.values(Layer));
142
142
  const staged = [
143
- ['expand', graphHops.fail], ['rerank', reranker.fail], ['salience', salience.fail], ['outcome', outcome.fail], ['layer', layer.fail],
143
+ ['expand', graphHops.fail],
144
+ ['rerank', reranker.fail],
145
+ ['salience', salience.fail],
146
+ ['outcome', outcome.fail],
147
+ ['layer', layer.fail],
144
148
  ];
145
149
  let error;
146
150
  for (const [stage, fail] of staged) {
@@ -158,7 +162,8 @@ function parseRecallLateFlags(flags) {
158
162
  error,
159
163
  };
160
164
  }
161
- /** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records, then the block prints. */
165
+ /** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records,
166
+ * then the block prints. */
162
167
  async function cmdRecall(hippoRoot, tenantId, query, flags) {
163
168
  requireInit(hippoRoot);
164
169
  const ctx = cliApiContext(hippoRoot, tenantId);
@@ -173,11 +178,13 @@ async function cmdRecall(hippoRoot, tenantId, query, flags) {
173
178
  cliCore: {
174
179
  rank: rankOptions(query, flags, o, priced),
175
180
  // The global store is a second source for this surface alone, and never when it is the store being searched.
176
- sources: { globalRoot: globalRoot !== hippoRoot && priced.globalOn ? globalRoot : undefined },
181
+ sources: globalRoot !== hippoRoot && priced.globalOn
182
+ ? { globalRoot, globalStore: cliApiContext(globalRoot, tenantId).store }
183
+ : undefined,
177
184
  note: (line) => printError(line),
178
185
  hostSessionId: hostSessionId(),
179
- show: (rank, planning) => {
180
- slot.presented = presentRecall(ctx, query, o, { rank, ...priced }, planning);
186
+ show: async (rank, planning) => {
187
+ slot.presented = await presentRecall(ctx, query, o, { rank, ...priced }, planning);
181
188
  return slot.presented.shown;
182
189
  },
183
190
  },
@@ -197,16 +204,14 @@ function parseRecallOptions(ctx, flags) {
197
204
  const includeSuperseded = boolFlag(flags, 'include-superseded');
198
205
  const asOf = parseAsOfFlag(flags);
199
206
  // The explicit --scope is the filter input; the detected scope only boosts, so auto-detection never filters.
200
- const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
207
+ const explicitScope = stringFlagOrExit(flags, 'scope') ?? null;
201
208
  const setting = cliRecallSetting(ctx, explicitScope);
202
209
  const config = loadConfig(ctx.hippoRoot);
203
210
  const minResults = numberFlag(flags, 'min-results');
204
211
  const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
205
212
  const late = parseRecallLateFlags(flags);
206
- const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
207
- const sessionId = (flags['session-id'] !== undefined
208
- ? String(flags['session-id'])
209
- : envHippoSessionId() ?? '').trim();
213
+ const goalTag = stringFlagOrExit(flags, 'goal') ?? '';
214
+ const sessionId = (stringFlagOrExit(flags, 'session-id') ?? envHippoSessionId() ?? '').trim();
210
215
  return {
211
216
  budget, limit, asJson, showWhy, includeSuperseded, asOf, setting, tenantId: ctx.tenantId,
212
217
  explicitScope, config, minResults, graphStream, late, goalTag, sessionId,
@@ -226,8 +231,14 @@ function rankOptions(query, flags, o, priced) {
226
231
  // Engines spend the budget on the text each result prints as, less the header, so selection and print agree.
227
232
  const entryBudget = Math.max(0, o.budget - printedTokens(recallHeading(o.budget, o.budget, query)));
228
233
  return {
229
- budget: entryBudget, cost: priced.printCost, limit: o.limit, why: o.showWhy, includeSuperseded: o.includeSuperseded, asOf: o.asOf,
230
- explicitScope: o.explicitScope, activeScope: o.setting.activeScope,
234
+ budget: entryBudget,
235
+ cost: priced.printCost,
236
+ limit: o.limit,
237
+ why: o.showWhy,
238
+ includeSuperseded: o.includeSuperseded,
239
+ asOf: o.asOf,
240
+ explicitScope: o.explicitScope,
241
+ activeScope: o.setting.activeScope,
231
242
  search: {
232
243
  ...engineFlags(flags, o.config),
233
244
  multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled,
@@ -253,23 +264,17 @@ function recallHinter(query, o, rank) {
253
264
  // HIPPO_ANCHORING=off and HIPPO_AVAILABILITY=off skip the work entirely.
254
265
  const anchorRing = sessionRing('cli', tenantId, sessionId);
255
266
  const queryHash = hashQueryText(query);
256
- const availabilityPool = biasHintEnabled('availability')
257
- ? [...rank.localEntries, ...rank.globalEntries].map((e) => ({ id: e.id, created: e.created }))
258
- : null;
267
+ const pool = availabilityPool(() => [...rank.localEntries, ...rank.globalEntries]);
259
268
  const hintsFor = (list, held) => {
260
- const anchoring = anchorRing ? detectAnchoring(snapshotRing(anchorRing), queryHash, list[0]?.entry.id ?? null) : null;
261
- const availability = availabilityPool
262
- ? detectAvailabilityBias({ topK: list.map((r) => ({ id: r.entry.id, created: r.entry.created })), pool: availabilityPool })
263
- : null;
264
- const summary = {
265
- // The published total includes graph-surfaced rows, so total == preRank + byBudget + returned holds for callers.
269
+ const { anchoring, availability } = detectRecallHints({ list, pool, anchorRing, queryHash });
270
+ const summary = suppressionSummary({
271
+ // The total includes graph-surfaced rows, so total == preRank + byBudget + returned holds for callers.
266
272
  totalCandidates: rank.totalCandidates + rank.graphAdded,
267
273
  droppedPreRank: rank.droppedPreRank + held,
268
274
  droppedByBudget: Math.max(0, rank.totalCandidates + rank.graphAdded - rank.droppedPreRank - held - list.length),
269
275
  summarySubstitutionsAdded: 0,
270
276
  freshTailAdded: 0,
271
- suppressedByInterference: anchoring?.reason === 'memory_dominance' ? 1 : 0, // a query_repeat is a re-ask, not competition
272
- };
277
+ }, anchoring);
273
278
  return { anchoring, availability, summary };
274
279
  };
275
280
  return { anchorRing, hintsFor };
@@ -325,59 +330,89 @@ function renderRecallBlock(list, h, v) {
325
330
  console.log(entryText(r));
326
331
  }));
327
332
  }
328
- /** Pays the continuity sections and the plan hint first, then fits the memories into what is left. */
329
- function fitRecallBlock(query, o, ranked, loaded, planning) {
330
- const { budget } = o;
333
+ /** Pays the continuity sections in print order after the header; one that does not fit is dropped. */
334
+ function payContinuity(loaded, sectionBudget) {
331
335
  let { activeSnapshot, sessionHandoff, recentSessionEvents } = loaded;
332
- // Sections print ahead of the memories, so they are paid first, after the header; one that does not fit is dropped.
333
- const sectionBudget = budget - printedTokens(recallHeading(budget, budget, query));
334
- let left = sectionBudget;
335
- const pays = (tokens) => { if (tokens > left)
336
- return false; left -= tokens; return true; };
336
+ const { pays, left } = tokenPurse(sectionBudget);
337
337
  if (activeSnapshot && !pays(printedTokens(snapshotText(activeSnapshot))))
338
338
  activeSnapshot = null;
339
339
  if (sessionHandoff && !pays(printedTokens(handoffText(sessionHandoff))))
340
340
  sessionHandoff = null;
341
- if (recentSessionEvents.length > 0 && !pays(printedTokens(sessionTrailText(recentSessionEvents))))
341
+ if (recentSessionEvents.length > 0 && !pays(printedTokens(sessionTrailText(recentSessionEvents)))) {
342
342
  recentSessionEvents = [];
343
- const continuityTokens = sectionBudget - left;
343
+ }
344
344
  const continuity = { activeSnapshot, sessionHandoff, recentSessionEvents };
345
+ return { continuity, continuityTokens: sectionBudget - left() };
346
+ }
347
+ /** Drops the lowest-ranked entry until the whole block, hints and header included, fits the budget. */
348
+ function renderWithinBudget(fitted, hintsFor, view, floor, budget) {
349
+ // Copies go after every cut, so a merged row the budget drops never hides its sources.
350
+ const render = (kept) => {
351
+ const results = dropHeldCopies(fitted.slice(0, kept), (r) => r.entry);
352
+ const hints = hintsFor(results, kept - results.length);
353
+ return { results, hints, recallText: renderRecallBlock(results, hints, view) };
354
+ };
355
+ return shrinkToFit(fitted.length, floor, budget, render, (r) => r.recallText);
356
+ }
357
+ /** Pays the continuity sections and the plan hint first, then fits the memories into what is left. */
358
+ function fitRecallBlock(query, o, ranked, loaded, planning) {
359
+ const { budget } = o;
360
+ // Sections print ahead of the memories, so they are paid first, after the header; one that does not fit is dropped.
361
+ const sectionBudget = budget - printedTokens(recallHeading(budget, budget, query));
362
+ const { continuity, continuityTokens } = payContinuity(loaded, sectionBudget);
363
+ let left = sectionBudget - continuityTokens;
364
+ const { activeSnapshot, sessionHandoff, recentSessionEvents } = continuity;
345
365
  const hasContinuity = activeSnapshot !== null || sessionHandoff !== null || recentSessionEvents.length > 0;
346
366
  // The baserate hint depends on the query alone, so `retrieve` evaluates it and this only prices the line.
347
367
  const planText = planningLine(planning);
348
- const showPlan = planText !== null && pays(printedTokens(`${planText}\n`));
349
- const cmdPlanningFallacyHint = showPlan ? planning.hint ?? null : null;
350
- const cmdPlanningFallacyWatching = showPlan ? planning.watching ?? null : null;
368
+ const planTokens = planText === null ? 0 : printedTokens(`${planText}\n`);
369
+ const showPlan = planText !== null && planTokens <= left;
370
+ if (showPlan)
371
+ left -= planTokens;
372
+ const cmdPlanningFallacyHint = showPlan ? (planning.hint ?? null) : null;
373
+ const cmdPlanningFallacyWatching = showPlan ? (planning.watching ?? null) : null;
351
374
  // The first --min-results are kept whatever they cost (the documented exception); the rest skip and continue.
352
375
  const floor = o.minResults ?? 1;
353
376
  const fitted = fitRecallRows(ranked.rank.results, left, floor, ranked.printCost);
354
- // Copies go after every cut, so a merged row the budget drops never hides its sources.
355
- const shown = (n) => dropHeldCopies(fitted.slice(0, n), (r) => r.entry);
356
- let kept = fitted.length;
357
- let results = shown(kept);
358
377
  const { anchorRing, hintsFor } = recallHinter(query, o, ranked.rank);
359
- const view = { query, showWhy: o.showWhy, showPlan, planText, hasContinuity, continuity, entryText: ranked.entryText };
360
- let hints = hintsFor(results, kept - results.length);
361
- let recallText = renderRecallBlock(results, hints, view);
362
- // The hints, Cutoff line and header vary with the list, so the lowest-ranked entry goes until the whole block fits.
363
- while (kept > floor && estimateTokens(recallText) > budget) {
364
- kept--;
365
- results = shown(kept);
366
- hints = hintsFor(results, kept - results.length);
367
- recallText = renderRecallBlock(results, hints, view);
368
- }
369
- return { results, hints, recallText, continuity, continuityTokens, cmdPlanningFallacyHint, cmdPlanningFallacyWatching, anchorRing };
378
+ const view = {
379
+ query,
380
+ showWhy: o.showWhy,
381
+ showPlan,
382
+ planText,
383
+ hasContinuity,
384
+ continuity,
385
+ entryText: ranked.entryText,
386
+ };
387
+ const { results, hints, recallText } = renderWithinBudget(fitted, hintsFor, view, floor, budget);
388
+ return {
389
+ results,
390
+ hints,
391
+ recallText,
392
+ continuity,
393
+ continuityTokens,
394
+ cmdPlanningFallacyHint,
395
+ cmdPlanningFallacyWatching,
396
+ anchorRing,
397
+ };
370
398
  }
371
- /** The presenter `retrieve` calls once ranking ends: fits and renders the block, and names the rows and hint rows to record. */
372
- function presentRecall(ctx, query, o, ranked, planning) {
399
+ /** The presenter `retrieve` calls once ranking ends: fits and
400
+ * renders the block, and names the rows and hint rows to record. */
401
+ async function presentRecall(ctx, query, o, ranked, planning) {
373
402
  // Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet.
374
- const fit = fitRecallBlock(query, o, ranked, loadCliRecallContinuity(ctx, o.setting, o.includeContinuity), planning);
403
+ const loaded = await loadCliRecallContinuity(ctx, o.setting, o.includeContinuity);
404
+ const fit = fitRecallBlock(query, o, ranked, loaded, planning);
375
405
  const { results, hints } = fit;
376
406
  const text = recallOutput(query, o, fit, ranked.isGlobal);
377
407
  const audit = shownRecallRows({ tenantId: o.tenantId, actor: 'cli' }, {
378
- query, ring: fit.anchorRing, topId: results[0]?.entry.id ?? null, anchoring: hints.anchoring, availability: hints.availability,
408
+ query,
409
+ ring: fit.anchorRing,
410
+ topId: results[0]?.entry.id ?? null,
411
+ anchoring: hints.anchoring,
412
+ availability: hints.availability,
379
413
  });
380
- // The token ledger books the text this recall prints, on whichever exit it takes; the ring keeps the hint the final detect made.
414
+ // The token ledger books the text this recall prints, on whichever
415
+ // exit it takes; the ring keeps the hint the final detect made.
381
416
  return { text, shown: { results, audit, tokens: estimateTokens(text), anchoredOn: hints.anchoring?.memoryId } };
382
417
  }
383
418
  /** What this recall prints: the JSON object, or the fitted block. */
@@ -386,7 +421,9 @@ function recallOutput(query, o, fit, isGlobal) {
386
421
  const { results, recallText } = fit;
387
422
  if (results.length === 0) {
388
423
  // HTTP and MCP surface the hint whatever matched, so the zero-result JSON keeps it for parity.
389
- return asJson ? JSON.stringify({ query, results: [], total: 0, ...recallJsonTail(fit, includeContinuity) }) : recallText;
424
+ return asJson
425
+ ? JSON.stringify({ query, results: [], total: 0, ...recallJsonTail(fit, includeContinuity) })
426
+ : recallText;
390
427
  }
391
428
  if (!asJson)
392
429
  return recallText;
@@ -426,8 +463,7 @@ function recallJsonTail(fit, includeContinuity) {
426
463
  export async function handleRecall({ hippoRoot, tenantId, args, flags }) {
427
464
  const query = args.join(' ').trim();
428
465
  if (!query) {
429
- printError('Please provide a search query.');
430
- throw new CliExit(1);
466
+ fail('Please provide a search query.');
431
467
  }
432
468
  await cmdRecall(hookStoreRoot(hippoRoot), tenantId, query, flags);
433
469
  }
@@ -1,4 +1,6 @@
1
- /** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
1
+ /**
2
+ * LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in;
3
+ * idempotent via the `llm-refined` tag.
2
4
  * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
3
5
  import { MemoryEntry } from '../core/memory.js';
4
6
  export interface RefineOptions {
@@ -10,7 +12,10 @@ export interface RefineOptions {
10
12
  all?: boolean;
11
13
  /** Injected for testing — defaults to the real fetch. */
12
14
  fetcher?: typeof fetch;
13
- /** Tenant scope: only that tenant's consolidated entries are scanned; cross-tenant parents return null and are skipped. */
15
+ /**
16
+ * Tenant scope: only that tenant's consolidated entries are scanned; cross-tenant parents return null and are
17
+ * skipped.
18
+ */
14
19
  tenantId?: string;
15
20
  }
16
21
  export interface RefineResult {
@@ -24,12 +29,18 @@ export interface RefineResult {
24
29
  reason?: string;
25
30
  }>;
26
31
  }
27
- /** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
32
+ /**
33
+ * Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API
34
+ * call failed.
35
+ */
28
36
  export declare function refineSemanticMemory(merged: string, sources: MemoryEntry[], opts: {
29
37
  apiKey: string;
30
38
  model?: string;
31
39
  fetcher?: typeof fetch;
32
40
  }): Promise<string | null>;
33
- /** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
41
+ /**
42
+ * Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it
43
+ * (unless `all`).
44
+ */
34
45
  export declare function refineStore(hippoRoot: string, opts: RefineOptions): Promise<RefineResult>;
35
46
  //# sourceMappingURL=refine-llm.d.ts.map
@@ -1,8 +1,10 @@
1
- /** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
1
+ /**
2
+ * LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in;
3
+ * idempotent via the `llm-refined` tag.
2
4
  * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
3
5
  import { Layer } from '../core/memory.js';
4
6
  import { REFINED_TAG, storeRefinement } from '../api/index.js';
5
- import { listMemories, listMemoriesByIds } from '../api/memories.js';
7
+ import { listMemories, listMemoriesByIds } from '../api/memories/memories.js';
6
8
  import { cliApiContext } from './api-context.js';
7
9
  import { chunked } from '../util/chunked.js';
8
10
  import { redactSecretsStrict } from '../util/secret-detect.js';
@@ -17,7 +19,10 @@ const CONSOLIDATED_MARKERS = [
17
19
  '[Consolidated from',
18
20
  '[Consolidated pattern from',
19
21
  ];
20
- /** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
22
+ /**
23
+ * Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API
24
+ * call failed.
25
+ */
21
26
  export async function refineSemanticMemory(merged, sources, opts) {
22
27
  const sourceBlock = sources
23
28
  .slice(0, MAX_REFINE_SOURCES)
@@ -69,7 +74,10 @@ function isConsolidated(entry) {
69
74
  return false;
70
75
  return CONSOLIDATED_MARKERS.some((m) => entry.content.startsWith(m));
71
76
  }
72
- /** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
77
+ /**
78
+ * Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it
79
+ * (unless `all`).
80
+ */
73
81
  export async function refineStore(hippoRoot, opts) {
74
82
  const result = {
75
83
  scanned: 0,
@@ -81,7 +89,7 @@ export async function refineStore(hippoRoot, opts) {
81
89
  // No tenant means every tenant, so the ctx's own tenant is never read.
82
90
  const ctx = cliApiContext(hippoRoot, opts.tenantId ?? '');
83
91
  const reach = { everyTenant: opts.tenantId === undefined };
84
- const entries = listMemories(ctx, reach);
92
+ const entries = await listMemories(ctx, reach);
85
93
  let processed = 0;
86
94
  for (const entry of entries) {
87
95
  if (!isConsolidated(entry))
@@ -105,7 +113,8 @@ async function refineOneEntry(ctx, reach, entry, opts, result) {
105
113
  const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
106
114
  // Parent lookup is tenant-scoped; cross-tenant parents are absent and skipped,
107
115
  // so refine still works from the merged content alone.
108
- const found = new Map(chunked(parentIds).flatMap((chunk) => listMemoriesByIds(ctx, chunk, reach)).map((p) => [p.id, p]));
116
+ const chunks = await Promise.all(chunked(parentIds).map((chunk) => listMemoriesByIds(ctx, chunk, reach)));
117
+ const found = new Map(chunks.flat().map((p) => [p.id, p]));
109
118
  const sources = parentIds.flatMap((pid) => found.get(pid) ?? []);
110
119
  const refined = await refineSemanticMemory(entry.content, sources, {
111
120
  apiKey: opts.apiKey,
@@ -122,7 +131,7 @@ async function refineOneEntry(ctx, reach, entry, opts, result) {
122
131
  result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
123
132
  return;
124
133
  }
125
- storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenant_id), entry, refined);
134
+ await storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenant_id), entry, refined);
126
135
  result.refined++;
127
136
  result.details.push({ id: entry.id, status: 'refined' });
128
137
  }