hippo-memory 1.70.0 → 1.71.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 (629) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-memories/claude-code.d.ts +4 -2
  3. package/dist/agent-memories/claude-code.js +14 -5
  4. package/dist/agent-memories/files.js +23 -12
  5. package/dist/agent-memories/markdown.d.ts +1 -3
  6. package/dist/agent-memories/markdown.js +1 -3
  7. package/dist/agent-memories/report.js +2 -1
  8. package/dist/agent-memories/sync.d.ts +4 -2
  9. package/dist/agent-memories/sync.js +10 -5
  10. package/dist/api/assemble.d.ts +7 -44
  11. package/dist/api/assemble.js +2 -22
  12. package/dist/api/audit.d.ts +5 -1
  13. package/dist/api/audit.js +9 -1
  14. package/dist/api/auth.d.ts +13 -22
  15. package/dist/api/auth.js +34 -24
  16. package/dist/api/auto-sleep.js +2 -2
  17. package/dist/api/availability.d.ts +2 -15
  18. package/dist/api/availability.js +2 -15
  19. package/dist/api/context-select.js +3 -4
  20. package/dist/api/context-types.d.ts +10 -35
  21. package/dist/api/context.d.ts +5 -22
  22. package/dist/api/context.js +21 -38
  23. package/dist/api/dormant.d.ts +5 -21
  24. package/dist/api/dormant.js +7 -26
  25. package/dist/api/drill-down.d.ts +7 -46
  26. package/dist/api/drill-down.js +5 -26
  27. package/dist/api/forget.d.ts +5 -24
  28. package/dist/api/forget.js +5 -28
  29. package/dist/api/graph.d.ts +8 -0
  30. package/dist/api/graph.js +7 -0
  31. package/dist/api/index.d.ts +2 -0
  32. package/dist/api/index.js +2 -0
  33. package/dist/api/instruction-detect.js +16 -5
  34. package/dist/api/ledger-db.d.ts +2 -1
  35. package/dist/api/ledger-db.js +5 -3
  36. package/dist/api/memories.d.ts +5 -0
  37. package/dist/api/memories.js +7 -0
  38. package/dist/api/objects.d.ts +9 -0
  39. package/dist/api/objects.js +11 -0
  40. package/dist/api/on-store.js +5 -3
  41. package/dist/api/predictions.d.ts +9 -0
  42. package/dist/api/predictions.js +18 -0
  43. package/dist/api/promote.d.ts +13 -17
  44. package/dist/api/promote.js +11 -19
  45. package/dist/api/prompt-hook.d.ts +4 -4
  46. package/dist/api/prompt-hook.js +10 -9
  47. package/dist/api/recall-cli.d.ts +55 -0
  48. package/dist/api/recall-cli.js +94 -0
  49. package/dist/api/recall-core.js +14 -6
  50. package/dist/api/recall-finish.d.ts +53 -0
  51. package/dist/api/recall-finish.js +30 -0
  52. package/dist/api/recall-history.d.ts +17 -84
  53. package/dist/api/recall-history.js +15 -88
  54. package/dist/api/recall-pipeline.d.ts +2 -3
  55. package/dist/api/recall-pipeline.js +16 -9
  56. package/dist/api/recall-types.d.ts +64 -304
  57. package/dist/api/recall.d.ts +5 -33
  58. package/dist/api/recall.js +59 -60
  59. package/dist/api/refine.d.ts +7 -0
  60. package/dist/api/refine.js +10 -0
  61. package/dist/api/remember-local.d.ts +57 -0
  62. package/dist/api/remember-local.js +90 -0
  63. package/dist/api/remember.d.ts +18 -1
  64. package/dist/api/remember.js +13 -1
  65. package/dist/api/sleep-run.d.ts +1 -3
  66. package/dist/api/sleep-run.js +17 -21
  67. package/dist/api/sleep.d.ts +9 -28
  68. package/dist/api/tokens.d.ts +3 -10
  69. package/dist/api/tokens.js +3 -10
  70. package/dist/api/types.d.ts +6 -29
  71. package/dist/api/types.js +4 -22
  72. package/dist/capture/command.d.ts +4 -12
  73. package/dist/capture/command.js +6 -22
  74. package/dist/capture/compact.d.ts +4 -15
  75. package/dist/capture/compact.js +16 -25
  76. package/dist/capture/compaction-record.js +101 -69
  77. package/dist/capture/compaction-spool.d.ts +1 -1
  78. package/dist/capture/compaction-spool.js +1 -1
  79. package/dist/capture/session-digest.d.ts +1 -1
  80. package/dist/capture/session-digest.js +13 -7
  81. package/dist/capture/transcript.d.ts +2 -10
  82. package/dist/capture/transcript.js +4 -18
  83. package/dist/cli/api-context.d.ts +3 -0
  84. package/dist/cli/api-context.js +6 -0
  85. package/dist/cli/audit-prune.d.ts +6 -39
  86. package/dist/cli/audit-prune.js +6 -39
  87. package/dist/cli/audit.d.ts +1 -1
  88. package/dist/cli/audit.js +33 -34
  89. package/dist/cli/auth.d.ts +2 -2
  90. package/dist/cli/auth.js +57 -39
  91. package/dist/cli/briefs.d.ts +4 -4
  92. package/dist/cli/briefs.js +18 -22
  93. package/dist/cli/card.d.ts +2 -2
  94. package/dist/cli/card.js +31 -32
  95. package/dist/cli/client.d.ts +7 -27
  96. package/dist/cli/client.js +24 -43
  97. package/dist/cli/compact-resume-payload.js +3 -2
  98. package/dist/cli/context.d.ts +1 -2
  99. package/dist/cli/context.js +12 -8
  100. package/dist/cli/continuity.d.ts +6 -6
  101. package/dist/cli/continuity.js +62 -64
  102. package/dist/cli/correction-latency.d.ts +2 -14
  103. package/dist/cli/correction-latency.js +2 -14
  104. package/dist/cli/curate.d.ts +13 -17
  105. package/dist/cli/curate.js +68 -92
  106. package/dist/cli/dag.d.ts +4 -4
  107. package/dist/cli/dag.js +33 -27
  108. package/dist/cli/decisions.d.ts +4 -4
  109. package/dist/cli/decisions.js +33 -47
  110. package/dist/cli/eval.js +15 -13
  111. package/dist/cli/exit.d.ts +6 -0
  112. package/dist/cli/exit.js +11 -0
  113. package/dist/cli/explain.d.ts +1 -2
  114. package/dist/cli/explain.js +6 -4
  115. package/dist/cli/flag-values.d.ts +6 -1
  116. package/dist/cli/flag-values.js +27 -10
  117. package/dist/cli/flags.d.ts +1 -0
  118. package/dist/cli/flags.js +1 -1
  119. package/dist/cli/github.d.ts +14 -0
  120. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  121. package/dist/cli/goals.d.ts +2 -2
  122. package/dist/cli/goals.js +46 -50
  123. package/dist/cli/hook-runtime.d.ts +9 -27
  124. package/dist/cli/hook-runtime.js +15 -31
  125. package/dist/cli/init.d.ts +2 -2
  126. package/dist/cli/init.js +6 -12
  127. package/dist/cli/install-steps.js +3 -12
  128. package/dist/cli/last-sleep.d.ts +2 -1
  129. package/dist/cli/last-sleep.js +3 -0
  130. package/dist/cli/maintenance.d.ts +4 -4
  131. package/dist/cli/maintenance.js +14 -19
  132. package/dist/cli/object-verbs.js +4 -3
  133. package/dist/cli/owner-validation.d.ts +5 -28
  134. package/dist/cli/owner-validation.js +5 -28
  135. package/dist/cli/playbooks.d.ts +4 -4
  136. package/dist/cli/playbooks.js +23 -28
  137. package/dist/cli/print.d.ts +2 -5
  138. package/dist/cli/print.js +1 -4
  139. package/dist/cli/projects.d.ts +2 -2
  140. package/dist/cli/projects.js +1 -3
  141. package/dist/cli/provenance-coverage.d.ts +2 -6
  142. package/dist/cli/provenance-coverage.js +2 -6
  143. package/dist/cli/quality-repair-once.js +2 -2
  144. package/dist/cli/recall.d.ts +2 -4
  145. package/dist/cli/recall.js +55 -131
  146. package/dist/cli/refine-llm.d.ts +5 -31
  147. package/dist/cli/refine-llm.js +9 -36
  148. package/dist/cli/remember.d.ts +3 -3
  149. package/dist/cli/remember.js +122 -180
  150. package/dist/cli/scheduler.d.ts +2 -17
  151. package/dist/cli/scheduler.js +12 -18
  152. package/dist/cli/serve.js +21 -12
  153. package/dist/cli/session-hooks.d.ts +10 -18
  154. package/dist/cli/session-hooks.js +112 -113
  155. package/dist/cli/setup.d.ts +4 -4
  156. package/dist/cli/setup.js +19 -21
  157. package/dist/cli/shared.d.ts +9 -23
  158. package/dist/cli/shared.js +9 -32
  159. package/dist/cli/slack.d.ts +2 -2
  160. package/dist/cli/slack.js +19 -23
  161. package/dist/cli/sleep.d.ts +3 -2
  162. package/dist/cli/sleep.js +15 -16
  163. package/dist/cli/status.d.ts +9 -12
  164. package/dist/cli/status.js +55 -98
  165. package/dist/cli/stdin.d.ts +4 -6
  166. package/dist/cli/stdin.js +2 -3
  167. package/dist/cli/transfer.d.ts +9 -9
  168. package/dist/cli/transfer.js +66 -89
  169. package/dist/cli/usage.js +11 -5
  170. package/dist/cli.d.ts +66 -448
  171. package/dist/cli.js +87 -263
  172. package/dist/connectors/github/backfill.d.ts +5 -25
  173. package/dist/connectors/github/backfill.js +14 -49
  174. package/dist/connectors/github/deletion.d.ts +4 -18
  175. package/dist/connectors/github/deletion.js +2 -15
  176. package/dist/connectors/github/dlq.d.ts +8 -33
  177. package/dist/connectors/github/dlq.js +12 -29
  178. package/dist/connectors/github/ingest.d.ts +2 -6
  179. package/dist/connectors/github/ingest.js +4 -10
  180. package/dist/connectors/github/octokit-client.d.ts +4 -16
  181. package/dist/connectors/github/octokit-client.js +27 -24
  182. package/dist/connectors/github/ratelimit.d.ts +3 -14
  183. package/dist/connectors/github/ratelimit.js +3 -14
  184. package/dist/connectors/github/scope.d.ts +3 -5
  185. package/dist/connectors/github/scope.js +3 -5
  186. package/dist/connectors/github/signature.d.ts +4 -26
  187. package/dist/connectors/github/signature.js +4 -26
  188. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  189. package/dist/connectors/github/tenant-routing.js +4 -26
  190. package/dist/connectors/github/transform.js +2 -16
  191. package/dist/connectors/github/types.d.ts +3 -15
  192. package/dist/connectors/github/types.js +2 -9
  193. package/dist/connectors/github/webhook.d.ts +2 -16
  194. package/dist/connectors/github/webhook.js +6 -22
  195. package/dist/connectors/slack/backfill.d.ts +4 -17
  196. package/dist/connectors/slack/backfill.js +4 -13
  197. package/dist/connectors/slack/dlq.d.ts +2 -19
  198. package/dist/connectors/slack/dlq.js +2 -19
  199. package/dist/connectors/slack/ingest.d.ts +2 -3
  200. package/dist/connectors/slack/ingest.js +2 -3
  201. package/dist/connectors/slack/scope.d.ts +2 -8
  202. package/dist/connectors/slack/scope.js +2 -8
  203. package/dist/connectors/slack/signature.d.ts +1 -6
  204. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  205. package/dist/connectors/slack/tenant-routing.js +2 -21
  206. package/dist/connectors/slack/transform.d.ts +2 -18
  207. package/dist/connectors/slack/transform.js +2 -18
  208. package/dist/connectors/slack/types.d.ts +3 -9
  209. package/dist/connectors/slack/types.js +2 -4
  210. package/dist/connectors/slack/web-client.js +33 -27
  211. package/dist/connectors/slack/webhook.d.ts +2 -19
  212. package/dist/connectors/slack/webhook.js +5 -26
  213. package/dist/connectors/slack/workspaces.d.ts +4 -24
  214. package/dist/connectors/slack/workspaces.js +4 -24
  215. package/dist/consolidate/conflicts.js +6 -14
  216. package/dist/consolidate/dag-summary.d.ts +8 -0
  217. package/dist/consolidate/dag-summary.js +41 -0
  218. package/dist/consolidate/dag.d.ts +5 -28
  219. package/dist/consolidate/dag.js +14 -75
  220. package/dist/consolidate/decay.js +7 -19
  221. package/dist/consolidate/dedupe.d.ts +6 -52
  222. package/dist/consolidate/dedupe.js +13 -71
  223. package/dist/consolidate/flush-units.d.ts +3 -4
  224. package/dist/consolidate/flush-units.js +3 -3
  225. package/dist/consolidate/half-life-migration.d.ts +3 -26
  226. package/dist/consolidate/half-life-migration.js +11 -28
  227. package/dist/consolidate/llm-passes.js +4 -21
  228. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  229. package/dist/consolidate/memory-value-weights.js +2 -13
  230. package/dist/consolidate/memory-value.d.ts +11 -84
  231. package/dist/consolidate/memory-value.js +16 -104
  232. package/dist/consolidate/merge.js +10 -31
  233. package/dist/consolidate/merged-row.js +2 -1
  234. package/dist/consolidate/physics-pass.js +1 -3
  235. package/dist/consolidate/replay.d.ts +6 -38
  236. package/dist/consolidate/replay.js +14 -52
  237. package/dist/consolidate/run.js +1 -1
  238. package/dist/consolidate/sleep.d.ts +1 -8
  239. package/dist/consolidate/sleep.js +5 -17
  240. package/dist/consolidate/trace.d.ts +3 -18
  241. package/dist/consolidate/trace.js +3 -18
  242. package/dist/consolidate/traces.js +6 -22
  243. package/dist/core/ablation.d.ts +4 -91
  244. package/dist/core/ablation.js +4 -91
  245. package/dist/core/ambient.d.ts +1 -8
  246. package/dist/core/ambient.js +1 -8
  247. package/dist/core/capture-contract.d.ts +4 -2
  248. package/dist/core/capture-contract.js +4 -2
  249. package/dist/core/card.d.ts +4 -1
  250. package/dist/core/card.js +8 -0
  251. package/dist/core/compare.d.ts +11 -67
  252. package/dist/core/compare.js +9 -63
  253. package/dist/core/config.d.ts +10 -24
  254. package/dist/core/config.js +13 -14
  255. package/dist/core/handoff.d.ts +1 -7
  256. package/dist/core/handoff.js +1 -7
  257. package/dist/core/memory-quality.js +1 -1
  258. package/dist/core/memory.d.ts +41 -164
  259. package/dist/core/memory.js +51 -221
  260. package/dist/core/package-root.d.ts +3 -0
  261. package/dist/core/package-root.js +5 -0
  262. package/dist/core/physics-config.d.ts +1 -4
  263. package/dist/core/physics-config.js +3 -8
  264. package/dist/core/physics.d.ts +15 -61
  265. package/dist/core/physics.js +59 -122
  266. package/dist/core/project-identity.d.ts +17 -58
  267. package/dist/core/project-identity.js +17 -38
  268. package/dist/core/project-remote.js +13 -2
  269. package/dist/core/raw-append-only.d.ts +5 -0
  270. package/dist/core/raw-append-only.js +7 -0
  271. package/dist/core/salience.d.ts +1 -7
  272. package/dist/core/salience.js +1 -7
  273. package/dist/dashboard/dashboard-actions.js +2 -2
  274. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  275. package/dist/dashboard/dashboard-snapshot.js +11 -2
  276. package/dist/dashboard/dashboard-types.d.ts +2 -1
  277. package/dist/dashboard/dashboard.d.ts +1 -0
  278. package/dist/dashboard/dashboard.js +50 -4
  279. package/dist/db/busy.d.ts +1 -1
  280. package/dist/db/busy.js +17 -8
  281. package/dist/db/connect.d.ts +1 -0
  282. package/dist/db/connect.js +3 -3
  283. package/dist/db/migrate.js +3 -3
  284. package/dist/db/migrations/types.d.ts +2 -5
  285. package/dist/db/migrations/v14.js +2 -3
  286. package/dist/db/migrations/v15.js +2 -8
  287. package/dist/db/migrations/v16.js +2 -3
  288. package/dist/db/migrations/v17.js +2 -3
  289. package/dist/db/migrations/v19.js +2 -5
  290. package/dist/db/migrations/v20.js +2 -7
  291. package/dist/db/migrations/v22.js +4 -17
  292. package/dist/db/migrations/v23.js +3 -14
  293. package/dist/db/migrations/v24.js +2 -4
  294. package/dist/db/migrations/v25.js +3 -8
  295. package/dist/db/migrations/v26.js +2 -13
  296. package/dist/db/migrations/v27.js +3 -11
  297. package/dist/db/migrations/v28.js +2 -14
  298. package/dist/db/migrations/v29.js +4 -18
  299. package/dist/db/migrations/v30.js +4 -16
  300. package/dist/db/migrations/v31.js +2 -15
  301. package/dist/db/migrations/v32.js +4 -22
  302. package/dist/db/migrations/v33.js +2 -15
  303. package/dist/db/migrations/v34.js +2 -11
  304. package/dist/db/migrations/v35.js +2 -11
  305. package/dist/db/migrations/v36.js +2 -11
  306. package/dist/db/migrations/v37.js +8 -33
  307. package/dist/db/migrations/v38.js +5 -38
  308. package/dist/db/migrations/v39.js +9 -20
  309. package/dist/db/migrations/v40.js +2 -9
  310. package/dist/db/migrations/v41.js +2 -24
  311. package/dist/db/migrations/v43.js +1 -1
  312. package/dist/db/migrations/v44.js +2 -8
  313. package/dist/db/migrations/v45.js +2 -7
  314. package/dist/db/migrations/v47.js +2 -3
  315. package/dist/db/migrations/v51.js +1 -1
  316. package/dist/db/open.d.ts +2 -0
  317. package/dist/db/open.js +17 -1
  318. package/dist/db/physics-state.d.ts +6 -22
  319. package/dist/db/physics-state.js +25 -36
  320. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  321. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  322. package/dist/db/vector-store.d.ts +2 -0
  323. package/dist/db/vector-store.js +8 -1
  324. package/dist/doctor.js +74 -19
  325. package/dist/entry/session-text.js +2 -1
  326. package/dist/eval/eval-stats.d.ts +15 -53
  327. package/dist/eval/eval-stats.js +12 -42
  328. package/dist/eval/eval-suite.d.ts +2 -13
  329. package/dist/eval/eval-suite.js +74 -34
  330. package/dist/eval/eval.d.ts +6 -24
  331. package/dist/eval/eval.js +7 -34
  332. package/dist/eval/judgment.d.ts +0 -3
  333. package/dist/eval/judgment.js +19 -11
  334. package/dist/extensions/openclaw-plugin/index.js +1 -1
  335. package/dist/graph/extract.d.ts +5 -27
  336. package/dist/graph/extract.js +7 -33
  337. package/dist/graph/recall.d.ts +7 -20
  338. package/dist/graph/recall.js +14 -76
  339. package/dist/graph/stream.d.ts +7 -39
  340. package/dist/graph/stream.js +11 -34
  341. package/dist/graph/view.d.ts +9 -35
  342. package/dist/graph/view.js +11 -39
  343. package/dist/hooks/codex-wrapper.js +2 -2
  344. package/dist/hooks/copilot.js +2 -1
  345. package/dist/hooks/hook-blocks.d.ts +6 -2
  346. package/dist/hooks/hook-blocks.js +37 -124
  347. package/dist/hooks/json-hooks.d.ts +4 -36
  348. package/dist/hooks/json-hooks.js +18 -57
  349. package/dist/hooks/opencode.d.ts +0 -38
  350. package/dist/hooks/opencode.js +9 -76
  351. package/dist/hooks/shared.d.ts +8 -17
  352. package/dist/hooks/shared.js +29 -20
  353. package/dist/importers/core.d.ts +12 -37
  354. package/dist/importers/core.js +9 -27
  355. package/dist/importers/markdown-parse.d.ts +8 -22
  356. package/dist/importers/markdown-parse.js +8 -25
  357. package/dist/importers/markdown.js +3 -12
  358. package/dist/importers/sources.js +7 -35
  359. package/dist/importers/vault.d.ts +2 -8
  360. package/dist/importers/vault.js +25 -81
  361. package/dist/index.d.ts +6 -2
  362. package/dist/index.js +6 -2
  363. package/dist/learn/autolearn.d.ts +14 -41
  364. package/dist/learn/autolearn.js +14 -41
  365. package/dist/learn/extract.js +2 -4
  366. package/dist/learn/forward-claim-detector.d.ts +6 -30
  367. package/dist/learn/forward-claim-detector.js +14 -66
  368. package/dist/learn/invalidation.d.ts +6 -18
  369. package/dist/learn/invalidation.js +9 -26
  370. package/dist/mcp/admin-tools.js +3 -5
  371. package/dist/mcp/memory-tools.js +4 -9
  372. package/dist/mcp/protocol.d.ts +8 -26
  373. package/dist/mcp/protocol.js +3 -6
  374. package/dist/mcp/recall-tools.js +3 -3
  375. package/dist/mcp/request.d.ts +3 -11
  376. package/dist/mcp/request.js +10 -26
  377. package/dist/mcp/server.d.ts +3 -9
  378. package/dist/mcp/server.js +5 -16
  379. package/dist/mcp/session-state.d.ts +1 -1
  380. package/dist/mcp/session-state.js +5 -11
  381. package/dist/mcp/stdio.d.ts +2 -6
  382. package/dist/mcp/stdio.js +48 -12
  383. package/dist/mcp/tools.js +5 -3
  384. package/dist/objects/customer-notes.d.ts +7 -42
  385. package/dist/objects/customer-notes.js +7 -48
  386. package/dist/objects/decisions.d.ts +12 -50
  387. package/dist/objects/decisions.js +15 -53
  388. package/dist/objects/incidents.d.ts +7 -38
  389. package/dist/objects/incidents.js +7 -41
  390. package/dist/objects/policies.d.ts +11 -89
  391. package/dist/objects/policies.js +11 -98
  392. package/dist/objects/processes.d.ts +7 -52
  393. package/dist/objects/processes.js +7 -61
  394. package/dist/objects/project-briefs.d.ts +11 -55
  395. package/dist/objects/project-briefs.js +14 -75
  396. package/dist/objects/skills.d.ts +7 -42
  397. package/dist/objects/skills.js +8 -54
  398. package/dist/postinstall.js +6 -19
  399. package/dist/predictions/planning-fallacy.d.ts +11 -34
  400. package/dist/rerankers/clef.js +3 -31
  401. package/dist/rerankers/cross-encoder.js +4 -6
  402. package/dist/rerankers/jev.js +9 -6
  403. package/dist/rerankers/llm.d.ts +2 -11
  404. package/dist/rerankers/llm.js +14 -14
  405. package/dist/rerankers/outage-warning.d.ts +2 -1
  406. package/dist/rerankers/outage-warning.js +2 -1
  407. package/dist/rerankers/remote.d.ts +1 -0
  408. package/dist/rerankers/remote.js +2 -0
  409. package/dist/rerankers/types.d.ts +2 -14
  410. package/dist/search/boosts.d.ts +0 -2
  411. package/dist/search/boosts.js +2 -2
  412. package/dist/search/goal-boost.d.ts +23 -0
  413. package/dist/search/goal-boost.js +90 -0
  414. package/dist/search/hybrid.d.ts +2 -0
  415. package/dist/search/multihop.js +2 -3
  416. package/dist/search/path-context.d.ts +5 -18
  417. package/dist/search/path-context.js +5 -18
  418. package/dist/search/physics-search.js +11 -8
  419. package/dist/search/rrf.d.ts +7 -35
  420. package/dist/search/rrf.js +5 -30
  421. package/dist/search/vector.d.ts +7 -0
  422. package/dist/search/vector.js +35 -5
  423. package/dist/server/auth.d.ts +9 -28
  424. package/dist/server/auth.js +32 -25
  425. package/dist/server/boot.d.ts +2 -21
  426. package/dist/server/boot.js +63 -96
  427. package/dist/server/client-ip.d.ts +3 -19
  428. package/dist/server/client-ip.js +5 -28
  429. package/dist/server/defaults.d.ts +3 -0
  430. package/dist/server/defaults.js +4 -0
  431. package/dist/server/key-check-bounds.d.ts +2 -1
  432. package/dist/server/lifecycle.d.ts +5 -4
  433. package/dist/server/lifecycle.js +19 -4
  434. package/dist/server/mcp-http.js +10 -44
  435. package/dist/server/rate-limit.d.ts +5 -18
  436. package/dist/server/rate-limit.js +4 -13
  437. package/dist/server/request.d.ts +4 -8
  438. package/dist/server/request.js +9 -17
  439. package/dist/server/route-table.js +42 -49
  440. package/dist/server/routes/admin.js +22 -28
  441. package/dist/server/routes/customer-notes.js +7 -12
  442. package/dist/server/routes/decisions.js +10 -17
  443. package/dist/server/routes/incidents.js +12 -20
  444. package/dist/server/routes/memories.js +12 -32
  445. package/dist/server/routes/object-routes.d.ts +0 -5
  446. package/dist/server/routes/object-routes.js +7 -15
  447. package/dist/server/routes/policies.js +10 -18
  448. package/dist/server/routes/predictions.js +13 -25
  449. package/dist/server/routes/processes.js +16 -26
  450. package/dist/server/routes/project-briefs.js +9 -16
  451. package/dist/server/routes/recall.js +10 -35
  452. package/dist/server/routes/skills.js +8 -18
  453. package/dist/server/server-detect.d.ts +9 -53
  454. package/dist/server/server-detect.js +24 -90
  455. package/dist/server/sleep-offload.js +4 -1
  456. package/dist/server/types.d.ts +12 -10
  457. package/dist/server/validation.d.ts +3 -1
  458. package/dist/server/validation.js +10 -23
  459. package/dist/server.d.ts +2 -2
  460. package/dist/server.js +3 -2
  461. package/dist/sharing/global-store.d.ts +19 -0
  462. package/dist/sharing/global-store.js +75 -0
  463. package/dist/sharing/global-sync.d.ts +6 -0
  464. package/dist/sharing/global-sync.js +80 -0
  465. package/dist/sharing/project-merge.d.ts +4 -5
  466. package/dist/sharing/project-merge.js +9 -7
  467. package/dist/sharing/scope.d.ts +4 -11
  468. package/dist/sharing/scope.js +4 -11
  469. package/dist/sharing/search-both.d.ts +60 -0
  470. package/dist/sharing/search-both.js +138 -0
  471. package/dist/sharing/share.d.ts +38 -0
  472. package/dist/sharing/share.js +226 -0
  473. package/dist/store/ambient.js +4 -9
  474. package/dist/store/audit-event.d.ts +4 -12
  475. package/dist/store/audit-event.js +4 -12
  476. package/dist/store/audit.d.ts +2 -5
  477. package/dist/store/audit.js +4 -12
  478. package/dist/store/auth.d.ts +6 -6
  479. package/dist/store/auth.js +10 -9
  480. package/dist/store/candidates.d.ts +20 -3
  481. package/dist/store/candidates.js +77 -48
  482. package/dist/store/card-detail.d.ts +2 -1
  483. package/dist/store/card-detail.js +2 -1
  484. package/dist/store/cards.d.ts +14 -9
  485. package/dist/store/cards.js +72 -126
  486. package/dist/store/conflicts.d.ts +4 -21
  487. package/dist/store/conflicts.js +71 -150
  488. package/dist/store/connectors/github.d.ts +10 -10
  489. package/dist/store/connectors/github.js +10 -10
  490. package/dist/store/dashboard-reads.js +4 -8
  491. package/dist/store/delete-and-batch.d.ts +11 -31
  492. package/dist/store/delete-and-batch.js +48 -64
  493. package/dist/store/delivery-recorder.d.ts +8 -4
  494. package/dist/store/delivery-recorder.js +25 -15
  495. package/dist/store/diagnostics.js +6 -13
  496. package/dist/store/dormant.d.ts +7 -29
  497. package/dist/store/dormant.js +15 -56
  498. package/dist/store/embeddings/index.d.ts +11 -80
  499. package/dist/store/embeddings/index.js +71 -207
  500. package/dist/store/embeddings/local.js +15 -32
  501. package/dist/store/embeddings/provider.d.ts +16 -53
  502. package/dist/store/embeddings/provider.js +41 -69
  503. package/dist/store/entry-reads.d.ts +21 -57
  504. package/dist/store/entry-reads.js +65 -126
  505. package/dist/store/entry-row.d.ts +6 -35
  506. package/dist/store/entry-row.js +9 -37
  507. package/dist/store/entry-writes.d.ts +10 -16
  508. package/dist/store/entry-writes.js +17 -35
  509. package/dist/store/goals.d.ts +3 -40
  510. package/dist/store/goals.js +21 -160
  511. package/dist/store/graph-queue.d.ts +6 -22
  512. package/dist/store/graph-queue.js +14 -45
  513. package/dist/store/graph-reads.d.ts +11 -35
  514. package/dist/store/graph-reads.js +20 -58
  515. package/dist/store/graph-rows.d.ts +3 -6
  516. package/dist/store/graph-rows.js +6 -9
  517. package/dist/store/graph-view-rows.d.ts +2 -1
  518. package/dist/store/graph-view-rows.js +2 -1
  519. package/dist/store/graph-writes.d.ts +6 -31
  520. package/dist/store/graph-writes.js +13 -37
  521. package/dist/store/half-life.d.ts +2 -1
  522. package/dist/store/half-life.js +14 -16
  523. package/dist/store/handoffs.d.ts +5 -11
  524. package/dist/store/handoffs.js +16 -34
  525. package/dist/store/index-and-stats.d.ts +6 -19
  526. package/dist/store/index-and-stats.js +34 -82
  527. package/dist/store/markdown.d.ts +2 -6
  528. package/dist/store/markdown.js +21 -20
  529. package/dist/store/mirrors.d.ts +2 -6
  530. package/dist/store/mirrors.js +14 -23
  531. package/dist/store/open.js +6 -13
  532. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  533. package/dist/store/planning-fallacy-evidence.js +8 -37
  534. package/dist/store/port.d.ts +82 -79
  535. package/dist/store/predictions.d.ts +11 -51
  536. package/dist/store/predictions.js +38 -119
  537. package/dist/{cli → store}/quality-repair.js +15 -31
  538. package/dist/store/raw-archive.d.ts +4 -16
  539. package/dist/store/raw-archive.js +14 -29
  540. package/dist/store/recall-scope.d.ts +19 -79
  541. package/dist/store/recall-scope.js +21 -82
  542. package/dist/store/recall-trace.d.ts +10 -77
  543. package/dist/store/recall-trace.js +19 -95
  544. package/dist/store/rejected-values.js +7 -19
  545. package/dist/store/rejection.d.ts +12 -58
  546. package/dist/store/rejection.js +13 -65
  547. package/dist/store/report-reads.d.ts +6 -0
  548. package/dist/store/report-reads.js +29 -0
  549. package/dist/store/rows.d.ts +9 -19
  550. package/dist/store/rows.js +36 -34
  551. package/dist/store/rule-sql.d.ts +5 -0
  552. package/dist/store/rule-sql.js +37 -0
  553. package/dist/store/search-rows.d.ts +7 -38
  554. package/dist/store/search-rows.js +14 -50
  555. package/dist/store/sessions.d.ts +10 -47
  556. package/dist/store/sessions.js +17 -73
  557. package/dist/store/sqlite/connector-events-group.js +2 -2
  558. package/dist/store/sqlite/entry-writes-group.js +2 -2
  559. package/dist/store/sqlite/error-codec.js +4 -2
  560. package/dist/store/sqlite/executor.d.ts +2 -1
  561. package/dist/store/sqlite/executor.js +2 -1
  562. package/dist/store/sqlite/local.d.ts +3 -3
  563. package/dist/store/sqlite/local.js +1 -0
  564. package/dist/store/sqlite/object-rows.js +6 -3
  565. package/dist/store/sqlite/objects-group.js +4 -2
  566. package/dist/store/sqlite/quarantine-group.js +2 -2
  567. package/dist/store/sqlite/store.d.ts +1 -4
  568. package/dist/store/sqlite/store.js +2 -3
  569. package/dist/store/sqlite/vector-reads-group.js +2 -2
  570. package/dist/store/sqlite/worker-jobs.js +1 -1
  571. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  572. package/dist/store/sqlite/worker-ops.js +13 -2
  573. package/dist/store/sqlite/worker-store.js +5 -2
  574. package/dist/store/summaries.d.ts +10 -62
  575. package/dist/store/summaries.js +34 -146
  576. package/dist/store/summary-dirty.js +1 -1
  577. package/dist/store/tenant-lookup.d.ts +6 -1
  578. package/dist/store/tenant-lookup.js +7 -0
  579. package/dist/store/tenant.d.ts +2 -16
  580. package/dist/store/tenant.js +4 -19
  581. package/dist/store/token-ledger.d.ts +13 -43
  582. package/dist/store/token-ledger.js +19 -50
  583. package/dist/store/usage-reports.js +5 -13
  584. package/dist/store/vector-index.d.ts +46 -0
  585. package/dist/store/vector-index.js +170 -0
  586. package/dist/store/working-memory.d.ts +6 -25
  587. package/dist/store/working-memory.js +18 -52
  588. package/dist/store/yaml.d.ts +1 -5
  589. package/dist/store/yaml.js +2 -6
  590. package/dist/support-bundle.js +7 -5
  591. package/dist/trust/reject-flow.js +1 -3
  592. package/dist/util/anthropic-messages.js +14 -2
  593. package/dist/util/atomic-write.d.ts +2 -1
  594. package/dist/util/atomic-write.js +35 -4
  595. package/dist/util/capped-json.d.ts +6 -0
  596. package/dist/util/capped-json.js +46 -0
  597. package/dist/util/crash-handlers.d.ts +8 -1
  598. package/dist/util/crash-handlers.js +52 -10
  599. package/dist/util/env.d.ts +13 -6
  600. package/dist/util/env.js +14 -7
  601. package/dist/util/home-path.d.ts +2 -1
  602. package/dist/util/home-path.js +4 -2
  603. package/dist/util/http-retry.d.ts +3 -1
  604. package/dist/util/http-retry.js +26 -5
  605. package/dist/util/log.d.ts +3 -2
  606. package/dist/util/log.js +25 -9
  607. package/dist/util/request-scope.d.ts +2 -1
  608. package/dist/util/request-scope.js +2 -1
  609. package/dist/util/secret-detect.d.ts +5 -30
  610. package/dist/util/secret-detect.js +13 -39
  611. package/dist/util/stored-json.d.ts +1 -1
  612. package/dist/util/stored-json.js +1 -1
  613. package/dist/util/token-text.d.ts +1 -4
  614. package/dist/util/token-text.js +1 -4
  615. package/dist/util/transcript-tail.d.ts +2 -0
  616. package/dist/util/transcript-tail.js +24 -23
  617. package/dist/util/version.d.ts +5 -20
  618. package/dist/util/version.js +5 -20
  619. package/extensions/openclaw-plugin/index.ts +1 -1
  620. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  621. package/extensions/openclaw-plugin/package.json +1 -1
  622. package/openclaw.plugin.json +1 -1
  623. package/package.json +1 -1
  624. package/dist/connectors/github/cli-impl.d.ts +0 -25
  625. package/dist/sharing/shared.d.ts +0 -187
  626. package/dist/sharing/shared.js +0 -563
  627. package/dist/store/vector-writes.d.ts +0 -13
  628. package/dist/store/vector-writes.js +0 -89
  629. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
@@ -1,35 +1,23 @@
1
1
  // The `hippo recall` verb; main() loads it lazily from the command table.
2
2
  import { envHippoSessionId } from '../util/env.js';
3
- import { confidenceFacets, Layer } from '../core/memory.js';
4
- import { isInitialized } from '../store/open.js';
5
- import { loadIndex } from '../store/index-and-stats.js';
6
- import { loadActiveTaskSnapshot, listSessionEvents } from '../store/sessions.js';
7
- import { loadLatestHandoff } from '../store/handoffs.js';
8
- import { passesScopeFilterForRecall } from '../store/recall-scope.js';
9
- import { fitBudget } from '../search/finalize.js';
10
- import { explainMatch } from '../search/explain.js';
3
+ import { Layer } from '../core/memory.js';
11
4
  import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
12
5
  import { loadConfig } from '../core/config.js';
13
6
  import { estimateTokens } from '../util/token-text.js';
14
7
  import { dropHeldCopies } from '../util/same-text.js';
15
- import { isGlobalStoreRoot } from '../core/project-identity.js';
16
- import { detectScope } from '../sharing/scope.js';
17
- import { getGlobalRoot } from '../sharing/shared.js';
18
8
  import * as api from '../api/index.js';
19
9
  import { detectAnchoring, hashQueryText, biasHintEnabled, snapshotRing } from '../api/recall-history.js';
20
- import { noteRecall, sessionRing, shownRecallRows } from '../api/recall-record.js';
10
+ import { sessionRing, shownRecallRows } from '../api/recall-record.js';
21
11
  import { detectAvailabilityBias } from '../api/availability.js';
22
- import { resolveTenantId } from '../store/tenant.js';
23
- import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from '../graph/recall.js';
24
- import { getReranker } from '../rerankers/index.js';
25
- import { JEV_DEFAULT_TOP_K } from '../rerankers/jev.js';
26
- import { isClefModel } from '../rerankers/clef.js';
12
+ import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGHBORS, fitRecallRows, loadCliRecallContinuity, MAX_HOPS, recallJsonRow, } from '../api/recall-cli.js';
13
+ import { cliApiContext } from './api-context.js';
27
14
  import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
28
15
  import { printError } from './output.js';
29
- import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue } from './flag-values.js';
16
+ import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, } from './flag-values.js';
30
17
  import { requireInit } from './shared.js';
31
18
  import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
32
19
  import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
20
+ import { CliExit } from './exit.js';
33
21
  // JSON.stringify keeps quotes or parens in the matched phrase from blurring the line.
34
22
  function planningLine(p) {
35
23
  if (p.hint)
@@ -56,14 +44,14 @@ function cutoffLine(shown, s) {
56
44
  function failWith(message) {
57
45
  return () => {
58
46
  printError(message);
59
- process.exit(1);
47
+ throw new CliExit(1);
60
48
  };
61
49
  }
62
50
  /** `--graph-stream` implies rrf fusion as well as the graph stream; the CLI fuses the local store only. */
63
51
  function parseGraphStreamFlags(flags) {
64
52
  let hops;
65
53
  if (flags['graph-hops'] !== undefined) {
66
- if (typeof flags['graph-hops'] === 'boolean')
54
+ if (isBooleanFlag(flags['graph-hops']))
67
55
  failWith(`--graph-hops requires an integer value 1..${MAX_HOPS} (e.g. --graph-hops 2).`)();
68
56
  const h = Number(flags['graph-hops']);
69
57
  if (!Number.isInteger(h) || h < 1 || h > MAX_HOPS) {
@@ -73,7 +61,7 @@ function parseGraphStreamFlags(flags) {
73
61
  }
74
62
  let seeds;
75
63
  if (flags['graph-seeds'] !== undefined) {
76
- if (typeof flags['graph-seeds'] === 'boolean')
64
+ if (isBooleanFlag(flags['graph-seeds']))
77
65
  failWith('--graph-seeds requires a positive integer value (e.g. --graph-seeds 10).')();
78
66
  const s = Number(flags['graph-seeds']);
79
67
  if (!Number.isInteger(s) || s < 1)
@@ -86,7 +74,7 @@ function parseHopsFlags(flags) {
86
74
  if (flags['hops'] === undefined)
87
75
  return {};
88
76
  // A value-less `--hops` parses as true, and Number(true) === 1 would silently run a 1-hop expansion.
89
- if (typeof flags['hops'] === 'boolean')
77
+ if (isBooleanFlag(flags['hops']))
90
78
  return { fail: failWith(`--hops requires an integer value 0..${MAX_HOPS} (e.g. --hops 1).`) };
91
79
  const hops = Number(flags['hops']);
92
80
  if (!Number.isInteger(hops) || hops < 0 || hops > MAX_HOPS) {
@@ -95,7 +83,7 @@ function parseHopsFlags(flags) {
95
83
  const raw = flags['max-neighbors'];
96
84
  if (raw === undefined)
97
85
  return { value: { hops, maxNeighbors: DEFAULT_MAX_NEIGHBORS } };
98
- if (typeof raw === 'boolean')
86
+ if (isBooleanFlag(raw))
99
87
  return { fail: failWith(`--max-neighbors requires an integer value 1..200.`) };
100
88
  const maxNeighbors = Number(raw);
101
89
  if (!Number.isInteger(maxNeighbors) || maxNeighbors < 1 || maxNeighbors > 200) {
@@ -105,18 +93,19 @@ function parseHopsFlags(flags) {
105
93
  }
106
94
  function parseRerankerFlag(flags) {
107
95
  const name = flags['reranker'] !== undefined ? String(flags['reranker']).trim() : '';
108
- let fn;
96
+ let picked;
109
97
  try {
110
- fn = getReranker(name);
98
+ picked = cliRecallReranker(name);
111
99
  }
112
100
  catch (err) {
113
101
  // An unknown name throws to the top-level handler, as it did when the lookup sat mid-pipeline.
114
102
  return { fail: () => { throw err; } };
115
103
  }
116
- if (!fn)
104
+ if (!picked)
117
105
  return {};
106
+ const { fn } = picked;
118
107
  const raw = flags['reranker-top-k'];
119
- const topK = raw !== undefined ? Number(raw) : name === 'jev' || isClefModel(name) ? JEV_DEFAULT_TOP_K : 50;
108
+ const topK = raw !== undefined ? Number(raw) : picked.defaultTopK;
120
109
  // slice(0, -1) would quietly drop the last candidate rather than fail.
121
110
  if (!Number.isInteger(topK) || topK < 1) {
122
111
  return { fail: failWith(`Invalid --reranker-top-k: "${String(raw)}". Must be a positive integer.`) };
@@ -168,23 +157,25 @@ function parseRecallLateFlags(flags) {
168
157
  };
169
158
  }
170
159
  /** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records, then the block prints. */
171
- export async function cmdRecall(hippoRoot, query, flags) {
160
+ async function cmdRecall(hippoRoot, tenantId, query, flags) {
172
161
  requireInit(hippoRoot);
173
- const o = parseRecallOptions(hippoRoot, flags);
174
- const priced = priceRecallEntries(hippoRoot, query, o);
162
+ const ctx = cliApiContext(hippoRoot, tenantId);
163
+ const o = parseRecallOptions(ctx, flags);
164
+ const priced = priceRecallEntries(ctx, query, o);
165
+ const { globalRoot } = o.setting;
175
166
  const slot = {};
176
- await api.retrieve({ hippoRoot, tenantId: o.tenantId, actor: api.adminActor('cli') }, {
167
+ await api.retrieve(ctx, {
177
168
  query,
178
169
  goalTag: o.goalTag,
179
170
  sessionId: o.sessionId,
180
171
  cliCore: {
181
172
  rank: rankOptions(query, flags, o, priced),
182
173
  // The global store is a second source for this surface alone, and never when it is the store being searched.
183
- sources: { globalRoot: o.globalRoot !== hippoRoot && priced.globalOn ? o.globalRoot : undefined },
174
+ sources: { globalRoot: globalRoot !== hippoRoot && priced.globalOn ? globalRoot : undefined },
184
175
  note: (line) => printError(line),
185
176
  hostSessionId: hostSessionId(),
186
177
  show: (rank, planning) => {
187
- slot.presented = presentRecall(hippoRoot, query, o, { rank, ...priced }, planning);
178
+ slot.presented = presentRecall(ctx, query, o, { rank, ...priced }, planning);
188
179
  return slot.presented.shown;
189
180
  },
190
181
  },
@@ -193,32 +184,23 @@ export async function cmdRecall(hippoRoot, query, flags) {
193
184
  o.late.error?.fail();
194
185
  if (!slot.presented)
195
186
  throw new Error('recall ranked but presented nothing');
196
- const { fit, text } = slot.presented;
197
- const { results, hints } = fit;
198
- // Fed after the final detect, so the next recall's cooldown reads the top row and hint this one showed.
199
- if (fit.anchorRing)
200
- noteRecall(fit.anchorRing, query, results[0]?.entry.id ?? null, hints.anchoring?.memoryId);
201
- console.log(text);
187
+ console.log(slot.presented.text);
202
188
  }
203
189
  /** Every flag recall reads, parsed in the order the single-body command checked them. */
204
- function parseRecallOptions(hippoRoot, flags) {
190
+ function parseRecallOptions(ctx, flags) {
205
191
  const budget = parseBudgetFlag(flags['budget'], DEFAULT_RECALL_BUDGET);
206
192
  const limit = parseLimitFlag(flags['limit']);
207
193
  const asJson = boolFlag(flags, 'json');
208
194
  const showWhy = boolFlag(flags, 'why');
209
195
  const includeSuperseded = boolFlag(flags, 'include-superseded');
210
196
  const asOf = parseAsOfFlag(flags);
211
- const globalRoot = getGlobalRoot();
212
- const primaryIsGlobal = isGlobalStoreRoot(hippoRoot);
213
- // Cross-tenant rows must never surface, so the tenant is resolved once and threaded through every load.
214
- const tenantId = resolveTenantId({});
215
197
  // The explicit --scope is the filter input; the detected scope only boosts, so auto-detection never filters.
216
198
  const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
217
- const config = loadConfig(hippoRoot);
199
+ const setting = cliRecallSetting(ctx, explicitScope);
200
+ const config = loadConfig(ctx.hippoRoot);
218
201
  const minResults = flags['min-results'] !== undefined
219
202
  ? parseInt(String(flags['min-results']), 10)
220
203
  : undefined;
221
- const activeScope = explicitScope || detectScope();
222
204
  const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
223
205
  const late = parseRecallLateFlags(flags);
224
206
  const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
@@ -226,19 +208,18 @@ function parseRecallOptions(hippoRoot, flags) {
226
208
  ? String(flags['session-id'])
227
209
  : envHippoSessionId() ?? '').trim();
228
210
  return {
229
- budget, limit, asJson, showWhy, includeSuperseded, asOf, globalRoot, primaryIsGlobal, tenantId,
230
- explicitScope, config, minResults, activeScope, graphStream, late, goalTag, sessionId,
211
+ budget, limit, asJson, showWhy, includeSuperseded, asOf, setting, tenantId: ctx.tenantId,
212
+ explicitScope, config, minResults, graphStream, late, goalTag, sessionId,
231
213
  includeContinuity: boolFlag(flags, 'continuity'),
232
214
  };
233
215
  }
234
216
  /** Each entry priced as the line it prints, with the source marker `--why` shows. */
235
- function priceRecallEntries(hippoRoot, query, o) {
236
- const localIndex = loadIndex(hippoRoot);
237
- const globalOn = isInitialized(o.globalRoot);
238
- const isGlobal = (r) => o.primaryIsGlobal || (globalOn && !localIndex.entries[r.entry.id]);
217
+ function priceRecallEntries(ctx, query, o) {
218
+ const origin = cliRecallOrigin(ctx, o.setting);
219
+ const isGlobal = (r) => origin.isGlobal(r.entry.id);
239
220
  const entryText = (r) => recallEntryText(r, query, o.showWhy, isGlobal(r));
240
221
  const printCost = (r) => printedTokens(entryText(r));
241
- return { globalOn, isGlobal, entryText, printCost };
222
+ return { globalOn: origin.globalOn, isGlobal, entryText, printCost };
242
223
  }
243
224
  /** The ranking core's options; a late flag error halts it before the stage that reads the flag. */
244
225
  function rankOptions(query, flags, o, priced) {
@@ -246,7 +227,7 @@ function rankOptions(query, flags, o, priced) {
246
227
  const entryBudget = Math.max(0, o.budget - printedTokens(recallHeading(o.budget, o.budget, query)));
247
228
  return {
248
229
  budget: entryBudget, cost: priced.printCost, limit: o.limit, why: o.showWhy, includeSuperseded: o.includeSuperseded, asOf: o.asOf,
249
- explicitScope: o.explicitScope, activeScope: o.activeScope,
230
+ explicitScope: o.explicitScope, activeScope: o.setting.activeScope,
250
231
  search: { ...engineFlags(flags, o.config), multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled, graphStream: o.graphStream, minResults: o.minResults, explain: false },
251
232
  graphHops: o.late.graphHops,
252
233
  evcAdaptive: boolFlag(flags, 'evc-adaptive'),
@@ -260,27 +241,6 @@ function rankOptions(query, flags, o, priced) {
260
241
  haltBefore: o.late.error?.stage,
261
242
  };
262
243
  }
263
- /** Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet. */
264
- function loadRecallContinuity(hippoRoot, o) {
265
- if (!o.includeContinuity || o.primaryIsGlobal)
266
- return { activeSnapshot: null, sessionHandoff: null, recentSessionEvents: [] };
267
- const rawSnapshot = loadActiveTaskSnapshot(hippoRoot, o.tenantId);
268
- const sessionId = rawSnapshot?.session_id ?? undefined;
269
- const rawHandoff = sessionId
270
- ? loadLatestHandoff(hippoRoot, o.tenantId, sessionId)
271
- : null;
272
- const rawEvents = sessionId
273
- ? listSessionEvents(hippoRoot, o.tenantId, { session_id: sessionId, limit: 5 })
274
- : [];
275
- // The same shared scope rule as api.recall; the active scope merges --scope and detectScope().
276
- const effectiveScope = o.activeScope || undefined;
277
- const rowScope = (r) => r?.scope ?? null;
278
- return {
279
- activeSnapshot: rawSnapshot && passesScopeFilterForRecall(rowScope(rawSnapshot), effectiveScope) ? rawSnapshot : null,
280
- sessionHandoff: rawHandoff && passesScopeFilterForRecall(rowScope(rawHandoff), effectiveScope) ? rawHandoff : null,
281
- recentSessionEvents: rawEvents.filter((e) => passesScopeFilterForRecall(rowScope(e), effectiveScope)),
282
- };
283
- }
284
244
  /** Each pipeline computes its hints over the list it returns, so they follow the list as it shrinks. */
285
245
  function recallHinter(query, o, rank) {
286
246
  const { tenantId, sessionId } = o;
@@ -295,7 +255,7 @@ function recallHinter(query, o, rank) {
295
255
  const availability = availabilityPool
296
256
  ? detectAvailabilityBias({ topK: list.map((r) => ({ id: r.entry.id, created: r.entry.created })), pool: availabilityPool })
297
257
  : null;
298
- const summary = api.buildSuppressionSummary({
258
+ const summary = {
299
259
  // The published total includes graph-surfaced rows, so total == preRank + byBudget + returned holds for callers.
300
260
  totalCandidates: rank.totalCandidates + rank.graphAdded,
301
261
  droppedPreRank: rank.droppedPreRank + held,
@@ -303,7 +263,7 @@ function recallHinter(query, o, rank) {
303
263
  summarySubstitutionsAdded: 0,
304
264
  freshTailAdded: 0,
305
265
  suppressedByInterference: anchoring?.reason === 'memory_dominance' ? 1 : 0, // a query_repeat is a re-ask, not competition
306
- });
266
+ };
307
267
  return { anchoring, availability, summary };
308
268
  };
309
269
  return { anchorRing, hintsFor };
@@ -384,7 +344,7 @@ function fitRecallBlock(query, o, ranked, loaded, planning) {
384
344
  const cmdPlanningFallacyWatching = showPlan ? planning.watching ?? null : null;
385
345
  // The first --min-results are kept whatever they cost (the documented exception); the rest skip and continue.
386
346
  const floor = o.minResults ?? 1;
387
- const fitted = fitBudget(ranked.rank.results, left, floor, ranked.printCost);
347
+ const fitted = fitRecallRows(ranked.rank.results, left, floor, ranked.printCost);
388
348
  // Copies go after every cut, so a merged row the budget drops never hides its sources.
389
349
  const shown = (n) => dropHeldCopies(fitted.slice(0, n), (r) => r.entry);
390
350
  let kept = fitted.length;
@@ -403,15 +363,16 @@ function fitRecallBlock(query, o, ranked, loaded, planning) {
403
363
  return { results, hints, recallText, continuity, continuityTokens, cmdPlanningFallacyHint, cmdPlanningFallacyWatching, anchorRing };
404
364
  }
405
365
  /** The presenter `retrieve` calls once ranking ends: fits and renders the block, and names the rows and hint rows to record. */
406
- function presentRecall(hippoRoot, query, o, ranked, planning) {
407
- const fit = fitRecallBlock(query, o, ranked, loadRecallContinuity(hippoRoot, o), planning);
366
+ function presentRecall(ctx, query, o, ranked, planning) {
367
+ // Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet.
368
+ const fit = fitRecallBlock(query, o, ranked, loadCliRecallContinuity(ctx, o.setting, o.includeContinuity), planning);
408
369
  const { results, hints } = fit;
409
370
  const text = recallOutput(query, o, fit, ranked.isGlobal);
410
371
  const audit = shownRecallRows({ tenantId: o.tenantId, actor: 'cli' }, {
411
372
  query, ring: fit.anchorRing, topId: results[0]?.entry.id ?? null, anchoring: hints.anchoring, availability: hints.availability,
412
373
  });
413
- // The token ledger books the text this recall prints, on whichever exit it takes.
414
- return { fit, text, shown: { results, audit, tokens: estimateTokens(text) } };
374
+ // The token ledger books the text this recall prints, on whichever exit it takes; the ring keeps the hint the final detect made.
375
+ return { text, shown: { results, audit, tokens: estimateTokens(text), anchoredOn: hints.anchoring?.memoryId } };
415
376
  }
416
377
  /** What this recall prints: the JSON object, or the fitted block. */
417
378
  function recallOutput(query, o, fit, isGlobal) {
@@ -437,13 +398,15 @@ function recallJsonTail(fit, includeContinuity) {
437
398
  const { cmdPlanningFallacyHint, cmdPlanningFallacyWatching, continuityTokens } = fit;
438
399
  const { activeSnapshot, sessionHandoff, recentSessionEvents } = fit.continuity;
439
400
  const { anchoring: cmdAnchoringHint, availability: cmdAvailabilityHint, summary: cmdSuppressionSummary } = fit.hints;
440
- const tail = {
441
- suppressionSummary: cmdSuppressionSummary,
442
- ...(cmdPlanningFallacyHint ? { planningFallacyHint: cmdPlanningFallacyHint } : {}),
443
- ...(cmdPlanningFallacyWatching ? { planningFallacyWatching: cmdPlanningFallacyWatching } : {}),
444
- ...(cmdAnchoringHint ? { anchoringHint: cmdAnchoringHint } : {}),
445
- ...(cmdAvailabilityHint ? { availabilityHint: cmdAvailabilityHint } : {}),
446
- };
401
+ const tail = { suppressionSummary: cmdSuppressionSummary };
402
+ if (cmdPlanningFallacyHint)
403
+ tail.planningFallacyHint = cmdPlanningFallacyHint;
404
+ if (cmdPlanningFallacyWatching)
405
+ tail.planningFallacyWatching = cmdPlanningFallacyWatching;
406
+ if (cmdAnchoringHint)
407
+ tail.anchoringHint = cmdAnchoringHint;
408
+ if (cmdAvailabilityHint)
409
+ tail.availabilityHint = cmdAvailabilityHint;
447
410
  if (includeContinuity) {
448
411
  tail.continuity = {
449
412
  activeSnapshot,
@@ -454,51 +417,12 @@ function recallJsonTail(fit, includeContinuity) {
454
417
  }
455
418
  return tail;
456
419
  }
457
- function recallJsonRow(r, query, showWhy, isGlobal) {
458
- const base = {
459
- id: r.entry.id,
460
- score: r.score,
461
- strength: r.entry.strength,
462
- tokens: r.tokens,
463
- tags: r.entry.tags,
464
- content: r.entry.content,
465
- layer: r.entry.layer,
466
- };
467
- if (r.entry.layer === Layer.Trace) {
468
- base.trace_outcome = r.entry.trace_outcome;
469
- }
470
- if (r.entry.superseded_by) {
471
- base.superseded = true;
472
- base.superseded_by = r.entry.superseded_by;
473
- }
474
- if (r.graphVia) {
475
- base.graphVia = r.graphVia;
476
- }
477
- if (showWhy) {
478
- const explanation = explainMatch(query, r);
479
- const facets = confidenceFacets(r.entry);
480
- base.confidence = facets.tier;
481
- base.aged_out = facets.agedOut;
482
- base.source = isGlobal ? 'global' : 'local';
483
- base.reason = explanation.reason;
484
- base.bm25 = r.bm25;
485
- base.cosine = r.cosine;
486
- if (explanation.envelope) {
487
- base.envelope = explanation.envelope;
488
- }
489
- // The ordered lifecycle re-ranking steps, so a caller can see why a row moved.
490
- if (r.rerankTrace && r.rerankTrace.length > 0) {
491
- base.rerankTrace = r.rerankTrace;
492
- }
493
- }
494
- return base;
495
- }
496
- export async function handleRecall({ hippoRoot, args, flags }) {
420
+ export async function handleRecall({ hippoRoot, tenantId, args, flags }) {
497
421
  const query = args.join(' ').trim();
498
422
  if (!query) {
499
423
  printError('Please provide a search query.');
500
- process.exit(1);
424
+ throw new CliExit(1);
501
425
  }
502
- await cmdRecall(hookStoreRoot(hippoRoot), query, flags);
426
+ await cmdRecall(hookStoreRoot(hippoRoot), tenantId, query, flags);
503
427
  }
504
428
  //# sourceMappingURL=recall.js.map
@@ -1,17 +1,5 @@
1
- /**
2
- * LLM-powered refinement of consolidated semantic memories.
3
- *
4
- * The rule-based `mergeContents` in consolidate.ts produces functional but
5
- * ugly semantic memories — typically "[Consolidated from N related memories]"
6
- * prepended to the longest source, or a bulleted list. `hippo refine` takes
7
- * those and asks Claude to synthesize a clean, generalized principle.
8
- *
9
- * Design choices:
10
- * - Separate command (not baked into `hippo sleep`) so API-key users opt in.
11
- * - Idempotent via the `llm-refined` tag — re-running skips already-refined.
12
- * - Uses fetch directly so no SDK dependency.
13
- * - On failure (API error, bad response), the original memory is untouched.
14
- */
1
+ /** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
2
+ * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
15
3
  import { MemoryEntry } from '../core/memory.js';
16
4
  export interface RefineOptions {
17
5
  apiKey: string;
@@ -22,13 +10,7 @@ export interface RefineOptions {
22
10
  all?: boolean;
23
11
  /** Injected for testing — defaults to the real fetch. */
24
12
  fetcher?: typeof fetch;
25
- /**
26
- * Tenant scope. When provided, refineStore only scans consolidated
27
- * entries belonging to this tenant, and parent lookups are scoped to the
28
- * same tenant. Cross-tenant parents return null from readEntry and are
29
- * silently skipped (refine still produces output from merged content).
30
- * Undefined preserves pre-1.12.1 host-wide scan behaviour.
31
- */
13
+ /** Tenant scope: only that tenant's consolidated entries are scanned; cross-tenant parents return null and are skipped. */
32
14
  tenantId?: string;
33
15
  }
34
16
  export interface RefineResult {
@@ -42,20 +24,12 @@ export interface RefineResult {
42
24
  reason?: string;
43
25
  }>;
44
26
  }
45
- /**
46
- * Ask Claude to synthesize a clean semantic memory from the merged content
47
- * plus the original source memories. Returns the refined content string or
48
- * `null` when the API call failed.
49
- */
27
+ /** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
50
28
  export declare function refineSemanticMemory(merged: string, sources: MemoryEntry[], opts: {
51
29
  apiKey: string;
52
30
  model?: string;
53
31
  fetcher?: typeof fetch;
54
32
  }): Promise<string | null>;
55
- /**
56
- * Scan the store for consolidated semantic memories, refine each with the
57
- * LLM, and write the refined content back. Tags with `llm-refined` so
58
- * repeated runs are idempotent (unless `all` is set).
59
- */
33
+ /** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
60
34
  export declare function refineStore(hippoRoot: string, opts: RefineOptions): Promise<RefineResult>;
61
35
  //# sourceMappingURL=refine-llm.d.ts.map
@@ -1,26 +1,14 @@
1
- /**
2
- * LLM-powered refinement of consolidated semantic memories.
3
- *
4
- * The rule-based `mergeContents` in consolidate.ts produces functional but
5
- * ugly semantic memories — typically "[Consolidated from N related memories]"
6
- * prepended to the longest source, or a bulleted list. `hippo refine` takes
7
- * those and asks Claude to synthesize a clean, generalized principle.
8
- *
9
- * Design choices:
10
- * - Separate command (not baked into `hippo sleep`) so API-key users opt in.
11
- * - Idempotent via the `llm-refined` tag — re-running skips already-refined.
12
- * - Uses fetch directly so no SDK dependency.
13
- * - On failure (API error, bad response), the original memory is untouched.
14
- */
1
+ /** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
2
+ * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
15
3
  import { Layer } from '../core/memory.js';
16
- import { writeEntry } from '../store/entry-writes.js';
4
+ import { REFINED_TAG, storeRefinement } from '../api/index.js';
5
+ import { cliApiContext } from './api-context.js';
17
6
  import { loadAllEntries, readEntry } from '../store/entry-reads.js';
18
7
  import { redactSecretsStrict } from '../util/secret-detect.js';
19
8
  import { sendAnthropicMessage } from '../util/anthropic-messages.js';
20
9
  import { log } from '../util/log.js';
21
10
  const MAX_REFINE_SOURCES = 8;
22
11
  const REFINE_SOURCE_CHARS = 400;
23
- const REFINED_TAG = 'llm-refined';
24
12
  // Output budget for one refined memory, and the shortest reply kept as a refinement.
25
13
  const REFINE_MAX_TOKENS = 800;
26
14
  const REFINE_MIN_CHARS = 10;
@@ -28,11 +16,7 @@ const CONSOLIDATED_MARKERS = [
28
16
  '[Consolidated from',
29
17
  '[Consolidated pattern from',
30
18
  ];
31
- /**
32
- * Ask Claude to synthesize a clean semantic memory from the merged content
33
- * plus the original source memories. Returns the refined content string or
34
- * `null` when the API call failed.
35
- */
19
+ /** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
36
20
  export async function refineSemanticMemory(merged, sources, opts) {
37
21
  const sourceBlock = sources
38
22
  .slice(0, MAX_REFINE_SOURCES)
@@ -81,11 +65,7 @@ function isConsolidated(entry) {
81
65
  return false;
82
66
  return CONSOLIDATED_MARKERS.some((m) => entry.content.startsWith(m));
83
67
  }
84
- /**
85
- * Scan the store for consolidated semantic memories, refine each with the
86
- * LLM, and write the refined content back. Tags with `llm-refined` so
87
- * repeated runs are idempotent (unless `all` is set).
88
- */
68
+ /** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
89
69
  export async function refineStore(hippoRoot, opts) {
90
70
  const result = {
91
71
  scanned: 0,
@@ -120,10 +100,8 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
120
100
  const sources = [];
121
101
  const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
122
102
  for (const pid of parentIds) {
123
- // Parent lookup scoped by opts.tenantId when provided.
124
- // Cross-tenant parents return null and are silently skipped — refine
125
- // still produces output from the merged content alone (graceful
126
- // degradation rather than refuse-to-refine).
103
+ // Parent lookup is tenant-scoped; cross-tenant parents return null and are skipped,
104
+ // so refine still works from the merged content alone.
127
105
  const p = readEntry(hippoRoot, pid, opts.tenantId);
128
106
  if (p)
129
107
  sources.push(p);
@@ -143,12 +121,7 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
143
121
  result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
144
122
  return;
145
123
  }
146
- const updated = {
147
- ...entry,
148
- content: refined,
149
- tags: entry.tags.includes(REFINED_TAG) ? entry.tags : [...entry.tags, REFINED_TAG],
150
- };
151
- writeEntry(hippoRoot, updated);
124
+ storeRefinement(cliApiContext(hippoRoot, entry.tenantId), entry, refined);
152
125
  result.refined++;
153
126
  result.details.push({ id: entry.id, status: 'refined' });
154
127
  }
@@ -1,5 +1,5 @@
1
1
  import { type CommandContext } from './flag-values.js';
2
- export declare function handleRemember({ hippoRoot, args, flags }: CommandContext): Promise<void>;
3
- export declare function handleSupersede({ hippoRoot, args, flags }: CommandContext): void;
4
- export declare function handleTrace({ hippoRoot, args, flags }: CommandContext): void;
2
+ export declare function handleRemember({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
3
+ export declare function handleSupersede({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
4
+ export declare function handleTrace({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
5
5
  //# sourceMappingURL=remember.d.ts.map