hippo-memory 1.60.0 → 1.61.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 (585) hide show
  1. package/README.md +1 -1
  2. package/dist/ablation.js +9 -27
  3. package/dist/agent-memories/apply.js +4 -1
  4. package/dist/agent-memories/claude-code.js +1 -1
  5. package/dist/agent-memories/codex.js +1 -1
  6. package/dist/agent-memories/gemini.js +1 -1
  7. package/dist/agent-memories/legacy.js +1 -1
  8. package/dist/agent-memories/source.js +1 -1
  9. package/dist/agent-memories/sync.js +8 -3
  10. package/dist/ambient-store.d.ts +14 -0
  11. package/dist/ambient-store.js +90 -0
  12. package/dist/ambient.d.ts +23 -0
  13. package/dist/ambient.js +72 -50
  14. package/dist/api/assemble.d.ts +93 -0
  15. package/dist/api/assemble.js +152 -0
  16. package/dist/api/audit.d.ts +17 -0
  17. package/dist/api/audit.js +23 -0
  18. package/dist/api/auth.d.ts +79 -0
  19. package/dist/api/auth.js +178 -0
  20. package/dist/api/context-types.d.ts +105 -0
  21. package/dist/api/context-types.js +3 -0
  22. package/dist/api/context.d.ts +31 -0
  23. package/dist/api/context.js +705 -0
  24. package/dist/api/dormant.d.ts +30 -0
  25. package/dist/api/dormant.js +140 -0
  26. package/dist/api/drill-down.d.ts +84 -0
  27. package/dist/api/drill-down.js +123 -0
  28. package/dist/api/forget.d.ts +57 -0
  29. package/dist/api/forget.js +87 -0
  30. package/dist/api/goals.d.ts +18 -0
  31. package/dist/api/goals.js +33 -0
  32. package/dist/api/learn.d.ts +31 -0
  33. package/dist/api/learn.js +88 -0
  34. package/dist/api/outcome.d.ts +61 -0
  35. package/dist/api/outcome.js +66 -0
  36. package/dist/api/promote.d.ts +54 -0
  37. package/dist/api/promote.js +203 -0
  38. package/dist/api/quarantine.d.ts +24 -0
  39. package/dist/api/quarantine.js +121 -0
  40. package/dist/api/recall-types.d.ts +390 -0
  41. package/dist/api/recall-types.js +3 -0
  42. package/dist/api/recall.d.ts +36 -0
  43. package/dist/api/recall.js +634 -0
  44. package/dist/api/remember.d.ts +35 -0
  45. package/dist/api/remember.js +43 -0
  46. package/dist/api/sleep.d.ts +136 -0
  47. package/dist/api/sleep.js +271 -0
  48. package/dist/api/tokens.d.ts +26 -0
  49. package/dist/api/tokens.js +60 -0
  50. package/dist/api/types.d.ts +56 -0
  51. package/dist/api/types.js +38 -0
  52. package/dist/api.d.ts +20 -1262
  53. package/dist/api.js +25 -2727
  54. package/dist/audit.d.ts +3 -0
  55. package/dist/audit.js +6 -3
  56. package/dist/auth.d.ts +45 -4
  57. package/dist/auth.js +125 -48
  58. package/dist/autolearn.js +2 -2
  59. package/dist/capture/command.d.ts +33 -0
  60. package/dist/capture/command.js +264 -0
  61. package/dist/capture/compact.d.ts +44 -0
  62. package/dist/capture/compact.js +354 -0
  63. package/dist/capture/extract.d.ts +21 -0
  64. package/dist/capture/extract.js +464 -0
  65. package/dist/capture/transcript.d.ts +40 -0
  66. package/dist/capture/transcript.js +193 -0
  67. package/dist/capture-error.js +2 -1
  68. package/dist/churn-git.js +4 -2
  69. package/dist/cli/audit.d.ts +3 -0
  70. package/dist/cli/audit.js +159 -0
  71. package/dist/cli/auth.d.ts +2 -0
  72. package/dist/cli/auth.js +171 -0
  73. package/dist/cli/briefs.d.ts +4 -0
  74. package/dist/cli/briefs.js +435 -0
  75. package/dist/cli/card.d.ts +3 -0
  76. package/dist/cli/card.js +333 -0
  77. package/dist/cli/context.d.ts +15 -0
  78. package/dist/cli/context.js +366 -0
  79. package/dist/cli/continuity.d.ts +6 -0
  80. package/dist/cli/continuity.js +445 -0
  81. package/dist/cli/curate.d.ts +19 -0
  82. package/dist/cli/curate.js +555 -0
  83. package/dist/cli/dag.d.ts +5 -0
  84. package/dist/cli/dag.js +177 -0
  85. package/dist/cli/decisions.d.ts +4 -0
  86. package/dist/cli/decisions.js +528 -0
  87. package/dist/cli/eval.d.ts +5 -0
  88. package/dist/cli/eval.js +213 -0
  89. package/dist/cli/explain.d.ts +4 -0
  90. package/dist/cli/explain.js +150 -0
  91. package/dist/cli/goals.d.ts +2 -0
  92. package/dist/cli/goals.js +196 -0
  93. package/dist/cli/hook-blocks.d.ts +18 -0
  94. package/dist/cli/hook-blocks.js +233 -0
  95. package/dist/cli/init.d.ts +2 -0
  96. package/dist/cli/init.js +305 -0
  97. package/dist/cli/maintenance.d.ts +4 -0
  98. package/dist/cli/maintenance.js +179 -0
  99. package/dist/cli/playbooks.d.ts +4 -0
  100. package/dist/cli/playbooks.js +556 -0
  101. package/dist/cli/projects.js +1 -1
  102. package/dist/cli/recall.d.ts +7 -0
  103. package/dist/cli/recall.js +597 -0
  104. package/dist/cli/remember.d.ts +5 -0
  105. package/dist/cli/remember.js +442 -0
  106. package/dist/cli/serve.d.ts +5 -0
  107. package/dist/cli/serve.js +40 -0
  108. package/dist/cli/session-hooks.d.ts +29 -0
  109. package/dist/cli/session-hooks.js +637 -0
  110. package/dist/cli/setup.d.ts +4 -0
  111. package/dist/cli/setup.js +376 -0
  112. package/dist/cli/shared.d.ts +15 -19
  113. package/dist/cli/shared.js +50 -341
  114. package/dist/cli/slack.d.ts +2 -0
  115. package/dist/cli/slack.js +171 -0
  116. package/dist/cli/status.d.ts +18 -0
  117. package/dist/cli/status.js +400 -0
  118. package/dist/cli/transfer.d.ts +10 -0
  119. package/dist/cli/transfer.js +438 -0
  120. package/dist/cli/usage.d.ts +85 -0
  121. package/dist/cli/usage.js +741 -0
  122. package/dist/cli.d.ts +71 -120
  123. package/dist/cli.js +170 -8469
  124. package/dist/client.js +15 -8
  125. package/dist/compaction-record.js +6 -4
  126. package/dist/connectors/github/backfill.js +94 -87
  127. package/dist/connectors/github/cli-impl.js +4 -3
  128. package/dist/connectors/github/dlq.js +67 -54
  129. package/dist/connectors/github/ingest.js +34 -35
  130. package/dist/connectors/github/tenant-routing.js +3 -2
  131. package/dist/connectors/github/webhook.js +135 -216
  132. package/dist/connectors/slack/dlq.js +49 -61
  133. package/dist/connectors/slack/ingest.js +55 -48
  134. package/dist/connectors/slack/tenant-routing.js +4 -3
  135. package/dist/connectors/slack/webhook.js +72 -74
  136. package/dist/consolidate/conflicts.d.ts +10 -0
  137. package/dist/consolidate/conflicts.js +178 -0
  138. package/dist/consolidate/decay.d.ts +12 -0
  139. package/dist/consolidate/decay.js +145 -0
  140. package/dist/consolidate/llm-passes.d.ts +3 -0
  141. package/dist/consolidate/llm-passes.js +141 -0
  142. package/dist/consolidate/merge.d.ts +7 -0
  143. package/dist/consolidate/merge.js +251 -0
  144. package/dist/consolidate/physics-pass.d.ts +3 -0
  145. package/dist/consolidate/physics-pass.js +60 -0
  146. package/dist/consolidate/run.d.ts +69 -0
  147. package/dist/consolidate/run.js +76 -0
  148. package/dist/consolidate/sleep.d.ts +18 -0
  149. package/dist/consolidate/sleep.js +209 -0
  150. package/dist/consolidate/traces.d.ts +4 -0
  151. package/dist/consolidate/traces.js +178 -0
  152. package/dist/context-auto.js +7 -11
  153. package/dist/context-render.d.ts +1 -1
  154. package/dist/context-render.js +1 -1
  155. package/dist/customer-notes.d.ts +3 -0
  156. package/dist/customer-notes.js +6 -4
  157. package/dist/dag.js +6 -5
  158. package/dist/dashboard-actions.d.ts +20 -0
  159. package/dist/dashboard-actions.js +88 -0
  160. package/dist/dashboard-params.d.ts +45 -0
  161. package/dist/dashboard-params.js +127 -0
  162. package/dist/dashboard-queries.d.ts +15 -0
  163. package/dist/dashboard-queries.js +355 -0
  164. package/dist/dashboard-snapshot.d.ts +138 -0
  165. package/dist/dashboard-snapshot.js +308 -0
  166. package/dist/dashboard-types.d.ts +163 -0
  167. package/dist/dashboard-types.js +3 -0
  168. package/dist/dashboard.d.ts +6 -7
  169. package/dist/dashboard.js +228 -202
  170. package/dist/db/busy.d.ts +5 -0
  171. package/dist/db/busy.js +24 -0
  172. package/dist/db/continuity.d.ts +5 -0
  173. package/dist/db/continuity.js +145 -0
  174. package/dist/db/meta.d.ts +8 -0
  175. package/dist/db/meta.js +35 -0
  176. package/dist/db/migrate.d.ts +9 -0
  177. package/dist/db/migrate.js +138 -0
  178. package/dist/db/migrations/index.d.ts +5 -0
  179. package/dist/db/migrations/index.js +109 -0
  180. package/dist/db/migrations/types.d.ts +14 -0
  181. package/dist/db/migrations/types.js +2 -0
  182. package/dist/db/migrations/v01.d.ts +3 -0
  183. package/dist/db/migrations/v01.js +38 -0
  184. package/dist/db/migrations/v02.d.ts +3 -0
  185. package/dist/db/migrations/v02.js +21 -0
  186. package/dist/db/migrations/v03.d.ts +3 -0
  187. package/dist/db/migrations/v03.js +22 -0
  188. package/dist/db/migrations/v04.d.ts +3 -0
  189. package/dist/db/migrations/v04.js +28 -0
  190. package/dist/db/migrations/v05.d.ts +3 -0
  191. package/dist/db/migrations/v05.js +21 -0
  192. package/dist/db/migrations/v06.d.ts +3 -0
  193. package/dist/db/migrations/v06.js +25 -0
  194. package/dist/db/migrations/v07.d.ts +3 -0
  195. package/dist/db/migrations/v07.js +13 -0
  196. package/dist/db/migrations/v08.d.ts +3 -0
  197. package/dist/db/migrations/v08.js +8 -0
  198. package/dist/db/migrations/v09.d.ts +3 -0
  199. package/dist/db/migrations/v09.js +13 -0
  200. package/dist/db/migrations/v10.d.ts +3 -0
  201. package/dist/db/migrations/v10.js +17 -0
  202. package/dist/db/migrations/v11.d.ts +3 -0
  203. package/dist/db/migrations/v11.js +15 -0
  204. package/dist/db/migrations/v12.d.ts +3 -0
  205. package/dist/db/migrations/v12.js +11 -0
  206. package/dist/db/migrations/v13.d.ts +3 -0
  207. package/dist/db/migrations/v13.js +15 -0
  208. package/dist/db/migrations/v14.d.ts +3 -0
  209. package/dist/db/migrations/v14.js +66 -0
  210. package/dist/db/migrations/v15.d.ts +3 -0
  211. package/dist/db/migrations/v15.js +42 -0
  212. package/dist/db/migrations/v16.d.ts +3 -0
  213. package/dist/db/migrations/v16.js +61 -0
  214. package/dist/db/migrations/v17.d.ts +3 -0
  215. package/dist/db/migrations/v17.js +46 -0
  216. package/dist/db/migrations/v18.d.ts +3 -0
  217. package/dist/db/migrations/v18.js +60 -0
  218. package/dist/db/migrations/v19.d.ts +3 -0
  219. package/dist/db/migrations/v19.js +28 -0
  220. package/dist/db/migrations/v20.d.ts +3 -0
  221. package/dist/db/migrations/v20.js +42 -0
  222. package/dist/db/migrations/v21.d.ts +3 -0
  223. package/dist/db/migrations/v21.js +16 -0
  224. package/dist/db/migrations/v22.d.ts +3 -0
  225. package/dist/db/migrations/v22.js +82 -0
  226. package/dist/db/migrations/v23.d.ts +3 -0
  227. package/dist/db/migrations/v23.js +48 -0
  228. package/dist/db/migrations/v24.d.ts +3 -0
  229. package/dist/db/migrations/v24.js +72 -0
  230. package/dist/db/migrations/v25.d.ts +3 -0
  231. package/dist/db/migrations/v25.js +46 -0
  232. package/dist/db/migrations/v26.d.ts +3 -0
  233. package/dist/db/migrations/v26.js +23 -0
  234. package/dist/db/migrations/v27.d.ts +3 -0
  235. package/dist/db/migrations/v27.js +57 -0
  236. package/dist/db/migrations/v28.d.ts +3 -0
  237. package/dist/db/migrations/v28.js +38 -0
  238. package/dist/db/migrations/v29.d.ts +3 -0
  239. package/dist/db/migrations/v29.js +78 -0
  240. package/dist/db/migrations/v30.d.ts +3 -0
  241. package/dist/db/migrations/v30.js +92 -0
  242. package/dist/db/migrations/v31.d.ts +3 -0
  243. package/dist/db/migrations/v31.js +74 -0
  244. package/dist/db/migrations/v32.d.ts +3 -0
  245. package/dist/db/migrations/v32.js +102 -0
  246. package/dist/db/migrations/v33.d.ts +3 -0
  247. package/dist/db/migrations/v33.js +104 -0
  248. package/dist/db/migrations/v34.d.ts +3 -0
  249. package/dist/db/migrations/v34.js +93 -0
  250. package/dist/db/migrations/v35.d.ts +3 -0
  251. package/dist/db/migrations/v35.js +98 -0
  252. package/dist/db/migrations/v36.d.ts +3 -0
  253. package/dist/db/migrations/v36.js +98 -0
  254. package/dist/db/migrations/v37.d.ts +3 -0
  255. package/dist/db/migrations/v37.js +219 -0
  256. package/dist/db/migrations/v38.d.ts +3 -0
  257. package/dist/db/migrations/v38.js +277 -0
  258. package/dist/db/migrations/v39.d.ts +3 -0
  259. package/dist/db/migrations/v39.js +59 -0
  260. package/dist/db/migrations/v40.d.ts +3 -0
  261. package/dist/db/migrations/v40.js +74 -0
  262. package/dist/db/migrations/v41.d.ts +3 -0
  263. package/dist/db/migrations/v41.js +43 -0
  264. package/dist/db/migrations/v42.d.ts +3 -0
  265. package/dist/db/migrations/v42.js +41 -0
  266. package/dist/db/migrations/v43.d.ts +3 -0
  267. package/dist/db/migrations/v43.js +67 -0
  268. package/dist/db/migrations/v44.d.ts +3 -0
  269. package/dist/db/migrations/v44.js +28 -0
  270. package/dist/db/migrations/v45.d.ts +3 -0
  271. package/dist/db/migrations/v45.js +30 -0
  272. package/dist/db/migrations/v46.d.ts +3 -0
  273. package/dist/db/migrations/v46.js +25 -0
  274. package/dist/db/migrations/v47.d.ts +3 -0
  275. package/dist/db/migrations/v47.js +17 -0
  276. package/dist/db/migrations/v48.d.ts +3 -0
  277. package/dist/db/migrations/v48.js +10 -0
  278. package/dist/db/migrations/v49.d.ts +3 -0
  279. package/dist/db/migrations/v49.js +31 -0
  280. package/dist/db/migrations/v50.d.ts +3 -0
  281. package/dist/db/migrations/v50.js +67 -0
  282. package/dist/db/migrations/v51.d.ts +3 -0
  283. package/dist/db/migrations/v51.js +14 -0
  284. package/dist/db/migrations/v52.d.ts +3 -0
  285. package/dist/db/migrations/v52.js +7 -0
  286. package/dist/db/open.d.ts +23 -0
  287. package/dist/db/open.js +146 -0
  288. package/dist/db/sqlite.d.ts +21 -0
  289. package/dist/db/sqlite.js +8 -0
  290. package/dist/db/tables.d.ts +7 -0
  291. package/dist/db/tables.js +38 -0
  292. package/dist/db.d.ts +6 -46
  293. package/dist/db.js +5 -3049
  294. package/dist/decisions.d.ts +4 -1
  295. package/dist/decisions.js +9 -7
  296. package/dist/dedupe.js +3 -2
  297. package/dist/delivery-recorder.js +4 -1
  298. package/dist/doctor.js +3 -3
  299. package/dist/embedding-provider.d.ts +1 -1
  300. package/dist/embedding-provider.js +4 -3
  301. package/dist/embeddings.d.ts +9 -52
  302. package/dist/embeddings.js +43 -297
  303. package/dist/env.d.ts +75 -0
  304. package/dist/env.js +119 -0
  305. package/dist/eval-suite.js +1 -1
  306. package/dist/eval.js +2 -2
  307. package/dist/extract.js +1 -1
  308. package/dist/gated-write.js +3 -1
  309. package/dist/goals.d.ts +3 -1
  310. package/dist/goals.js +18 -0
  311. package/dist/graph/read.d.ts +73 -0
  312. package/dist/graph/read.js +325 -0
  313. package/dist/graph/rows.d.ts +45 -0
  314. package/dist/graph/rows.js +51 -0
  315. package/dist/graph/types.d.ts +83 -0
  316. package/dist/graph/types.js +11 -0
  317. package/dist/graph/write.d.ts +93 -0
  318. package/dist/{graph.js → graph/write.js} +6 -384
  319. package/dist/graph-extract.js +2 -1
  320. package/dist/graph-recall.d.ts +1 -1
  321. package/dist/graph-recall.js +2 -2
  322. package/dist/graph-stream.js +1 -1
  323. package/dist/graph-view.d.ts +1 -1
  324. package/dist/graph-view.js +1 -1
  325. package/dist/half-life-migration.d.ts +1 -1
  326. package/dist/half-life-migration.js +2 -1
  327. package/dist/hooks/codex-session.d.ts +8 -0
  328. package/dist/hooks/codex-session.js +76 -0
  329. package/dist/hooks/codex-wrapper.d.ts +55 -0
  330. package/dist/hooks/codex-wrapper.js +288 -0
  331. package/dist/hooks/json-hooks.d.ts +63 -0
  332. package/dist/hooks/json-hooks.js +356 -0
  333. package/dist/hooks/opencode.d.ts +50 -0
  334. package/dist/hooks/opencode.js +202 -0
  335. package/dist/hooks/shared.d.ts +54 -0
  336. package/dist/hooks/shared.js +77 -0
  337. package/dist/http-retry.d.ts +2 -0
  338. package/dist/http-retry.js +4 -3
  339. package/dist/http-util.d.ts +3 -0
  340. package/dist/http-util.js +10 -0
  341. package/dist/{importers.d.ts → importers/core.d.ts} +13 -17
  342. package/dist/importers/core.js +141 -0
  343. package/dist/importers/markdown-parse.d.ts +41 -0
  344. package/dist/importers/markdown-parse.js +132 -0
  345. package/dist/importers/markdown.d.ts +3 -0
  346. package/dist/importers/markdown.js +92 -0
  347. package/dist/importers/sources.d.ts +7 -0
  348. package/dist/importers/sources.js +229 -0
  349. package/dist/importers/vault.d.ts +11 -0
  350. package/dist/importers/vault.js +352 -0
  351. package/dist/incidents.d.ts +3 -0
  352. package/dist/incidents.js +7 -5
  353. package/dist/index.d.ts +25 -6
  354. package/dist/index.js +23 -6
  355. package/dist/invalidation.js +2 -1
  356. package/dist/judgment.js +2 -1
  357. package/dist/keyset.d.ts +13 -0
  358. package/dist/keyset.js +8 -0
  359. package/dist/local-embedding.d.ts +13 -0
  360. package/dist/local-embedding.js +165 -0
  361. package/dist/log.d.ts +7 -0
  362. package/dist/log.js +19 -1
  363. package/dist/mcp/admin-tools.d.ts +8 -0
  364. package/dist/mcp/admin-tools.js +116 -0
  365. package/dist/mcp/format.d.ts +27 -0
  366. package/dist/mcp/format.js +135 -0
  367. package/dist/mcp/memory-tools.d.ts +5 -0
  368. package/dist/mcp/memory-tools.js +83 -0
  369. package/dist/mcp/protocol.d.ts +83 -0
  370. package/dist/mcp/protocol.js +55 -0
  371. package/dist/mcp/recall-tools.d.ts +6 -0
  372. package/dist/mcp/recall-tools.js +320 -0
  373. package/dist/mcp/request.d.ts +10 -0
  374. package/dist/mcp/request.js +163 -0
  375. package/dist/mcp/server.d.ts +4 -75
  376. package/dist/mcp/server.js +7 -1190
  377. package/dist/mcp/session-state.d.ts +11 -0
  378. package/dist/mcp/session-state.js +28 -0
  379. package/dist/mcp/stdio.d.ts +8 -0
  380. package/dist/mcp/stdio.js +79 -0
  381. package/dist/mcp/tools.d.ts +11 -0
  382. package/dist/mcp/tools.js +247 -0
  383. package/dist/memory.d.ts +3 -0
  384. package/dist/memory.js +27 -1
  385. package/dist/multihop.d.ts +1 -1
  386. package/dist/multihop.js +2 -1
  387. package/dist/owner-validation.js +2 -1
  388. package/dist/physics-state.js +10 -7
  389. package/dist/policies.d.ts +3 -0
  390. package/dist/policies.js +8 -6
  391. package/dist/postinstall.js +3 -2
  392. package/dist/predictions/planning-fallacy.d.ts +100 -0
  393. package/dist/predictions/planning-fallacy.js +190 -0
  394. package/dist/{predictions.d.ts → predictions/store.d.ts} +7 -102
  395. package/dist/predictions/store.js +434 -0
  396. package/dist/processes.d.ts +3 -0
  397. package/dist/processes.js +7 -5
  398. package/dist/project-briefs.d.ts +3 -0
  399. package/dist/project-briefs.js +7 -5
  400. package/dist/project-identity.js +3 -2
  401. package/dist/project-merge.js +3 -1
  402. package/dist/quarantine.d.ts +2 -1
  403. package/dist/quarantine.js +8 -5
  404. package/dist/raw-archive.js +1 -1
  405. package/dist/recall-history.js +3 -2
  406. package/dist/recall-pipeline.d.ts +2 -2
  407. package/dist/recall-pipeline.js +16 -8
  408. package/dist/recall-scope.js +1 -1
  409. package/dist/recall-trace.d.ts +1 -1
  410. package/dist/refine-llm.js +2 -1
  411. package/dist/reject-flow.js +6 -1
  412. package/dist/rerankers/clef.js +6 -5
  413. package/dist/rerankers/jev.d.ts +1 -1
  414. package/dist/rerankers/jev.js +4 -4
  415. package/dist/rerankers/llm.d.ts +4 -2
  416. package/dist/rerankers/llm.js +58 -38
  417. package/dist/rerankers/types.d.ts +1 -1
  418. package/dist/salience.js +1 -1
  419. package/dist/scheduler.d.ts +1 -0
  420. package/dist/scheduler.js +26 -4
  421. package/dist/scope.js +4 -3
  422. package/dist/search/as-of.d.ts +10 -0
  423. package/dist/search/as-of.js +22 -0
  424. package/dist/search/bm25-search.d.ts +14 -0
  425. package/dist/search/bm25-search.js +43 -0
  426. package/dist/search/bm25.d.ts +15 -0
  427. package/dist/search/bm25.js +54 -0
  428. package/dist/search/boosts.d.ts +54 -0
  429. package/dist/search/boosts.js +94 -0
  430. package/dist/search/breakdown.d.ts +7 -0
  431. package/dist/search/breakdown.js +20 -0
  432. package/dist/search/explain.d.ts +25 -0
  433. package/dist/search/explain.js +31 -0
  434. package/dist/search/finalize.d.ts +8 -0
  435. package/dist/search/finalize.js +52 -0
  436. package/dist/search/fusion.d.ts +27 -0
  437. package/dist/search/fusion.js +42 -0
  438. package/dist/search/hybrid-score.d.ts +20 -0
  439. package/dist/search/hybrid-score.js +73 -0
  440. package/dist/search/hybrid.d.ts +46 -0
  441. package/dist/search/hybrid.js +64 -0
  442. package/dist/search/physics-search.d.ts +29 -0
  443. package/dist/search/physics-search.js +162 -0
  444. package/dist/search/rerank.d.ts +10 -0
  445. package/dist/search/rerank.js +72 -0
  446. package/dist/search/temporal.d.ts +15 -0
  447. package/dist/search/temporal.js +45 -0
  448. package/dist/search/types.d.ts +91 -0
  449. package/dist/search/types.js +2 -0
  450. package/dist/search/vector.d.ts +30 -0
  451. package/dist/search/vector.js +71 -0
  452. package/dist/secret-detect.d.ts +2 -0
  453. package/dist/secret-detect.js +2 -1
  454. package/dist/server/auth.d.ts +52 -0
  455. package/dist/server/auth.js +221 -0
  456. package/dist/server/client-ip.d.ts +25 -0
  457. package/dist/server/client-ip.js +92 -0
  458. package/dist/server/cursor.d.ts +23 -0
  459. package/dist/server/cursor.js +58 -0
  460. package/dist/server/lifecycle.d.ts +7 -0
  461. package/dist/server/lifecycle.js +29 -0
  462. package/dist/server/mcp-http.d.ts +5 -0
  463. package/dist/server/mcp-http.js +199 -0
  464. package/dist/server/request.d.ts +33 -0
  465. package/dist/server/request.js +103 -0
  466. package/dist/server/routes/admin.d.ts +9 -0
  467. package/dist/server/routes/admin.js +158 -0
  468. package/dist/server/routes/customer-notes.d.ts +7 -0
  469. package/dist/server/routes/customer-notes.js +112 -0
  470. package/dist/server/routes/decisions.d.ts +7 -0
  471. package/dist/server/routes/decisions.js +133 -0
  472. package/dist/server/routes/incidents.d.ts +7 -0
  473. package/dist/server/routes/incidents.js +126 -0
  474. package/dist/server/routes/memories.d.ts +10 -0
  475. package/dist/server/routes/memories.js +179 -0
  476. package/dist/server/routes/policies.d.ts +8 -0
  477. package/dist/server/routes/policies.js +151 -0
  478. package/dist/server/routes/predictions.d.ts +7 -0
  479. package/dist/server/routes/predictions.js +164 -0
  480. package/dist/server/routes/processes.d.ts +7 -0
  481. package/dist/server/routes/processes.js +161 -0
  482. package/dist/server/routes/project-briefs.d.ts +8 -0
  483. package/dist/server/routes/project-briefs.js +136 -0
  484. package/dist/server/routes/recall.d.ts +8 -0
  485. package/dist/server/routes/recall.js +340 -0
  486. package/dist/server/routes/skills.d.ts +8 -0
  487. package/dist/server/routes/skills.js +150 -0
  488. package/dist/server/types.d.ts +56 -0
  489. package/dist/server/types.js +2 -0
  490. package/dist/server/validation.d.ts +14 -0
  491. package/dist/server/validation.js +91 -0
  492. package/dist/server.d.ts +7 -61
  493. package/dist/server.js +69 -2362
  494. package/dist/session-digest.d.ts +1 -1
  495. package/dist/session-digest.js +9 -2
  496. package/dist/shared.d.ts +3 -1
  497. package/dist/shared.js +26 -22
  498. package/dist/skills.d.ts +3 -0
  499. package/dist/skills.js +7 -5
  500. package/dist/stdin.js +2 -2
  501. package/dist/store/audit-event.d.ts +19 -0
  502. package/dist/store/audit-event.js +33 -0
  503. package/dist/store/candidates.d.ts +42 -0
  504. package/dist/store/candidates.js +152 -0
  505. package/dist/store/conflicts.d.ts +44 -0
  506. package/dist/store/conflicts.js +444 -0
  507. package/dist/store/delete-and-batch.d.ts +63 -0
  508. package/dist/store/delete-and-batch.js +310 -0
  509. package/dist/store/entry-reads.d.ts +92 -0
  510. package/dist/store/entry-reads.js +255 -0
  511. package/dist/store/entry-row.d.ts +67 -0
  512. package/dist/store/entry-row.js +208 -0
  513. package/dist/store/entry-writes.d.ts +46 -0
  514. package/dist/store/entry-writes.js +148 -0
  515. package/dist/store/handoffs.d.ts +26 -0
  516. package/dist/store/handoffs.js +184 -0
  517. package/dist/store/index-and-stats.d.ts +52 -0
  518. package/dist/store/index-and-stats.js +214 -0
  519. package/dist/store/markdown.d.ts +10 -0
  520. package/dist/store/markdown.js +108 -0
  521. package/dist/store/mirrors.d.ts +49 -0
  522. package/dist/store/mirrors.js +312 -0
  523. package/dist/store/open.d.ts +15 -0
  524. package/dist/store/open.js +223 -0
  525. package/dist/store/rows.d.ts +178 -0
  526. package/dist/store/rows.js +158 -0
  527. package/dist/store/search-rows.d.ts +86 -0
  528. package/dist/store/search-rows.js +254 -0
  529. package/dist/store/sessions.d.ts +83 -0
  530. package/dist/store/sessions.js +272 -0
  531. package/dist/store/summaries.d.ts +94 -0
  532. package/dist/store/summaries.js +377 -0
  533. package/dist/store/tenant-lookup.d.ts +12 -0
  534. package/dist/store/tenant-lookup.js +16 -0
  535. package/dist/store-cards.js +2 -1
  536. package/dist/summary-dirty.d.ts +4 -0
  537. package/dist/summary-dirty.js +32 -0
  538. package/dist/support-bundle.js +4 -3
  539. package/dist/tenant.js +2 -2
  540. package/dist/tokenize.d.ts +2 -0
  541. package/dist/tokenize.js +16 -0
  542. package/dist/transcript-tail.d.ts +7 -0
  543. package/dist/transcript-tail.js +48 -0
  544. package/dist/vector-store.d.ts +27 -0
  545. package/dist/vector-store.js +210 -0
  546. package/dist/version.d.ts +2 -2
  547. package/dist/version.js +2 -2
  548. package/dist/working-memory.js +1 -1
  549. package/dist/yaml.js +36 -11
  550. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  551. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  552. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  553. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  554. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  555. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  556. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  557. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  558. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  559. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  560. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  561. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  562. package/dist-ui/assets/index-DPN7cP19.js +33 -0
  563. package/dist-ui/assets/index-dFloKRVr.css +1 -0
  564. package/dist-ui/index.html +3 -25
  565. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  566. package/extensions/openclaw-plugin/package.json +1 -1
  567. package/openclaw.plugin.json +1 -1
  568. package/package.json +1 -1
  569. package/dist/capture.d.ts +0 -155
  570. package/dist/capture.js +0 -1295
  571. package/dist/consolidate.d.ts +0 -58
  572. package/dist/consolidate.js +0 -1124
  573. package/dist/graph.d.ts +0 -245
  574. package/dist/hooks.d.ts +0 -208
  575. package/dist/hooks.js +0 -1076
  576. package/dist/importers.js +0 -900
  577. package/dist/predictions.js +0 -620
  578. package/dist/search.d.ts +0 -320
  579. package/dist/search.js +0 -970
  580. package/dist/store.d.ts +0 -776
  581. package/dist/store.js +0 -3473
  582. package/dist-ui/assets/d3-BiWEKnn4.js +0 -1
  583. package/dist-ui/assets/index-BhT8RvO6.js +0 -61
  584. package/dist-ui/assets/index-RoXXJ5dq.css +0 -1
  585. package/dist-ui/assets/three-BDgTxR1l.js +0 -4112
@@ -0,0 +1,178 @@
1
+ import { Layer, type MemoryEntry, type ConfidenceLevel } from '../memory.js';
2
+ /** A value that round-trips through JSON.stringify/JSON.parse unchanged. */
3
+ export type JsonValue = string | number | boolean | null | JsonValue[] | {
4
+ [key: string]: JsonValue;
5
+ };
6
+ export interface IndexEntry {
7
+ id: string;
8
+ file: string;
9
+ layer: Layer;
10
+ strength: number;
11
+ tags: string[];
12
+ created: string;
13
+ last_retrieved: string;
14
+ pinned: boolean;
15
+ }
16
+ export interface HippoIndex {
17
+ version: number;
18
+ entries: Record<string, IndexEntry>;
19
+ last_retrieval_ids: string[];
20
+ /** LC1 (docs/plans/2026-08-02-lc1-recall-trace-persistence.md): id of the
21
+ * most recent recall_traces row written by getContext/cmdRecall, mirrored
22
+ * from the `last_trace_id` meta key exactly like last_retrieval_ids. null
23
+ * when no trace has been written yet (fresh store, pre-v40 flow, or
24
+ * api.recall-only usage — api.recall never sets this). */
25
+ last_trace_id: string | null;
26
+ }
27
+ export interface MemoryRow {
28
+ id: string;
29
+ created: string;
30
+ last_retrieved: string;
31
+ retrieval_count: number;
32
+ strength: number;
33
+ half_life_days: number;
34
+ layer: string;
35
+ tags_json: string;
36
+ emotional_valence: MemoryEntry['emotional_valence'];
37
+ schema_fit: number;
38
+ source: string;
39
+ outcome_score: number | null;
40
+ outcome_positive: number;
41
+ outcome_negative: number;
42
+ conflicts_with_json: string;
43
+ pinned: number;
44
+ confidence: ConfidenceLevel;
45
+ content: string;
46
+ parents_json: string;
47
+ starred: number;
48
+ trace_outcome: MemoryEntry['trace_outcome'];
49
+ source_session_id: string | null;
50
+ valid_from: string | null;
51
+ superseded_by: string | null;
52
+ extracted_from: string | null;
53
+ dag_level: number;
54
+ dag_parent_id: string | null;
55
+ kind: string | null;
56
+ scope: string | null;
57
+ owner: string | null;
58
+ artifact_ref: string | null;
59
+ tenant_id: string | null;
60
+ origin_project: string | null;
61
+ descendant_count: number | null;
62
+ earliest_at: string | null;
63
+ latest_at: string | null;
64
+ summary_dirty: number | null;
65
+ last_rebuilt_at: string | null;
66
+ rebuild_count: number | null;
67
+ dag_level_3_built_at: string | null;
68
+ bm25_score?: number;
69
+ }
70
+ export interface ConsolidationRunRow {
71
+ timestamp: string;
72
+ decayed: number;
73
+ merged: number;
74
+ removed: number;
75
+ }
76
+ export interface TaskSnapshotRow {
77
+ id: number;
78
+ task: string;
79
+ summary: string;
80
+ next_step: string;
81
+ status: string;
82
+ source: string;
83
+ session_id: string | null;
84
+ scope: string | null;
85
+ created_at: string;
86
+ updated_at: string;
87
+ }
88
+ export interface MemoryConflictRow {
89
+ id: number;
90
+ memory_a_id: string;
91
+ memory_b_id: string;
92
+ reason: string;
93
+ score: number;
94
+ status: string;
95
+ detected_at: string;
96
+ updated_at: string;
97
+ }
98
+ export interface SessionEventRow {
99
+ id: number;
100
+ session_id: string;
101
+ task: string | null;
102
+ event_type: string;
103
+ content: string;
104
+ source: string;
105
+ scope: string | null;
106
+ metadata_json: string;
107
+ created_at: string;
108
+ }
109
+ export interface TaskSnapshot {
110
+ id: number;
111
+ task: string;
112
+ summary: string;
113
+ next_step: string;
114
+ status: string;
115
+ source: string;
116
+ session_id: string | null;
117
+ scope: string | null;
118
+ created_at: string;
119
+ updated_at: string;
120
+ }
121
+ export interface MemoryConflict {
122
+ id: number;
123
+ memory_a_id: string;
124
+ memory_b_id: string;
125
+ reason: string;
126
+ score: number;
127
+ status: string;
128
+ detected_at: string;
129
+ updated_at: string;
130
+ }
131
+ export interface SessionEvent {
132
+ id: number;
133
+ session_id: string;
134
+ task: string | null;
135
+ event_type: string;
136
+ content: string;
137
+ source: string;
138
+ scope: string | null;
139
+ metadata: Record<string, JsonValue>;
140
+ created_at: string;
141
+ }
142
+ export declare const INDEX_VERSION = 3;
143
+ export declare const MEMORY_SELECT_COLUMNS = "id, created, last_retrieved, retrieval_count, strength, half_life_days, layer, tags_json, emotional_valence, schema_fit, source, outcome_score, outcome_positive, outcome_negative, conflicts_with_json, pinned, confidence, content, parents_json, starred, trace_outcome, source_session_id, valid_from, superseded_by, extracted_from, dag_level, dag_parent_id, kind, scope, owner, artifact_ref, tenant_id, origin_project, descendant_count, earliest_at, latest_at, summary_dirty, last_rebuilt_at, rebuild_count, dag_level_3_built_at";
144
+ export declare const MEMORY_SEARCH_COLUMNS = "m.id AS id, m.created AS created, m.last_retrieved AS last_retrieved, m.retrieval_count AS retrieval_count, m.strength AS strength, m.half_life_days AS half_life_days, m.layer AS layer, m.tags_json AS tags_json, m.emotional_valence AS emotional_valence, m.schema_fit AS schema_fit, m.source AS source, m.outcome_score AS outcome_score, m.outcome_positive AS outcome_positive, m.outcome_negative AS outcome_negative, m.conflicts_with_json AS conflicts_with_json, m.pinned AS pinned, m.confidence AS confidence, m.content AS content, m.parents_json AS parents_json, m.starred AS starred, m.trace_outcome AS trace_outcome, m.source_session_id AS source_session_id, m.valid_from AS valid_from, m.superseded_by AS superseded_by, m.extracted_from AS extracted_from, m.dag_level AS dag_level, m.dag_parent_id AS dag_parent_id, m.kind AS kind, m.scope AS scope, m.owner AS owner, m.artifact_ref AS artifact_ref, m.tenant_id AS tenant_id, m.origin_project AS origin_project, m.descendant_count AS descendant_count, m.earliest_at AS earliest_at, m.latest_at AS latest_at, m.summary_dirty AS summary_dirty, m.last_rebuilt_at AS last_rebuilt_at, m.rebuild_count AS rebuild_count, m.dag_level_3_built_at AS dag_level_3_built_at, bm25(memories_fts) AS bm25_score";
145
+ /**
146
+ * Default candidate-pool size for `loadSearchEntries` when called with
147
+ * `limit === undefined`. Single source of truth; `api.recall` imports
148
+ * this for `RecallResult.windowSize` reporting so the two cannot drift.
149
+ */
150
+ export declare const DEFAULT_SEARCH_CANDIDATE_LIMIT = 200;
151
+ export declare function rowToEntry(row: MemoryRow): MemoryEntry;
152
+ export declare function parseJsonArray(raw: string | null | undefined): string[];
153
+ /**
154
+ * Strict parse for the `last_trace_id` meta value (LC1 F1(d) structural
155
+ * fix). A bare Number(raw) would turn '', whitespace, or garbage into a
156
+ * usable-looking 0/NaN — a consumer INSERTing recall_trace_outcomes with
157
+ * trace_id=0 would hit a masked FK violation (row id 0 never exists).
158
+ * Require a clean positive integer string; anything else is treated as
159
+ * unset. This is the ONE place that decides "clean" — every consumer of
160
+ * `HippoIndex.last_trace_id` (outcomeForLastRecall, tests) reads the
161
+ * already-validated value out of `buildIndexFromDb`'s result and never
162
+ * re-parses the raw meta string itself.
163
+ */
164
+ export declare function parseLastTraceId(raw: string | null | undefined): string | null;
165
+ export declare function isPlainJsonObject(x: JsonValue): x is Record<string, JsonValue>;
166
+ export declare function rowToTaskSnapshot(row: TaskSnapshotRow): TaskSnapshot;
167
+ export declare function rowToMemoryConflict(row: MemoryConflictRow): MemoryConflict;
168
+ export declare function rowToSessionEvent(row: SessionEventRow): SessionEvent;
169
+ /** Named field set for the legacy `stats.json` mirror — the only fields any
170
+ * caller reads (see loadLegacyStatsFile's callers below). */
171
+ export interface LegacyStats {
172
+ [key: string]: JsonValue;
173
+ total_remembered: JsonValue;
174
+ total_recalled: JsonValue;
175
+ total_forgotten: JsonValue;
176
+ consolidation_runs: JsonValue;
177
+ }
178
+ //# sourceMappingURL=rows.d.ts.map
@@ -0,0 +1,158 @@
1
+ import { log } from '../log.js';
2
+ export const INDEX_VERSION = 3;
3
+ export const MEMORY_SELECT_COLUMNS = `id, created, last_retrieved, retrieval_count, strength, half_life_days, layer, tags_json, emotional_valence, schema_fit, source, outcome_score, outcome_positive, outcome_negative, conflicts_with_json, pinned, confidence, content, parents_json, starred, trace_outcome, source_session_id, valid_from, superseded_by, extracted_from, dag_level, dag_parent_id, kind, scope, owner, artifact_ref, tenant_id, origin_project, descendant_count, earliest_at, latest_at, summary_dirty, last_rebuilt_at, rebuild_count, dag_level_3_built_at`;
4
+ // F1 (v1.7.0): qualified-and-aliased columns for the FTS join in
5
+ // loadSearchRows. Every column is `m.<col> AS <col>` so rowToEntry's
6
+ // unqualified field reads keep working unchanged. The trailing
7
+ // bm25(memories_fts) AS bm25_score adds the FTS rank as a result column.
8
+ // Only used inside the FTS path; non-FTS paths keep MEMORY_SELECT_COLUMNS.
9
+ export const MEMORY_SEARCH_COLUMNS = `m.id AS id, m.created AS created, m.last_retrieved AS last_retrieved, m.retrieval_count AS retrieval_count, m.strength AS strength, m.half_life_days AS half_life_days, m.layer AS layer, m.tags_json AS tags_json, m.emotional_valence AS emotional_valence, m.schema_fit AS schema_fit, m.source AS source, m.outcome_score AS outcome_score, m.outcome_positive AS outcome_positive, m.outcome_negative AS outcome_negative, m.conflicts_with_json AS conflicts_with_json, m.pinned AS pinned, m.confidence AS confidence, m.content AS content, m.parents_json AS parents_json, m.starred AS starred, m.trace_outcome AS trace_outcome, m.source_session_id AS source_session_id, m.valid_from AS valid_from, m.superseded_by AS superseded_by, m.extracted_from AS extracted_from, m.dag_level AS dag_level, m.dag_parent_id AS dag_parent_id, m.kind AS kind, m.scope AS scope, m.owner AS owner, m.artifact_ref AS artifact_ref, m.tenant_id AS tenant_id, m.origin_project AS origin_project, m.descendant_count AS descendant_count, m.earliest_at AS earliest_at, m.latest_at AS latest_at, m.summary_dirty AS summary_dirty, m.last_rebuilt_at AS last_rebuilt_at, m.rebuild_count AS rebuild_count, m.dag_level_3_built_at AS dag_level_3_built_at, bm25(memories_fts) AS bm25_score`;
10
+ /**
11
+ * Default candidate-pool size for `loadSearchEntries` when called with
12
+ * `limit === undefined`. Single source of truth; `api.recall` imports
13
+ * this for `RecallResult.windowSize` reporting so the two cannot drift.
14
+ */
15
+ export const DEFAULT_SEARCH_CANDIDATE_LIMIT = 200;
16
+ export function rowToEntry(row) {
17
+ // SAFETY: every `as X` below narrows a SQLite column value to an
18
+ // enum/union member of MemoryEntry; `row` comes from MEMORY_SELECT_COLUMNS
19
+ // / MEMORY_SEARCH_COLUMNS, which are the only queries producing MemoryRow,
20
+ // and the DB layer only ever writes these columns from the same enums.
21
+ const entry = {
22
+ id: row.id,
23
+ created: row.created,
24
+ last_retrieved: row.last_retrieved,
25
+ retrieval_count: Number(row.retrieval_count ?? 0),
26
+ strength: Number(row.strength ?? 1),
27
+ half_life_days: Number(row.half_life_days ?? 7),
28
+ layer: row.layer,
29
+ tags: parseJsonArray(row.tags_json),
30
+ emotional_valence: row.emotional_valence ?? 'neutral',
31
+ schema_fit: Number(row.schema_fit ?? 0.5),
32
+ source: row.source ?? 'cli',
33
+ outcome_score: row.outcome_score === null || row.outcome_score === undefined ? null : Number(row.outcome_score),
34
+ outcome_positive: Number(row.outcome_positive ?? 0),
35
+ outcome_negative: Number(row.outcome_negative ?? 0),
36
+ conflicts_with: parseJsonArray(row.conflicts_with_json),
37
+ pinned: Boolean(row.pinned),
38
+ confidence: row.confidence ?? 'observed',
39
+ content: row.content,
40
+ parents: parseJsonArray(row.parents_json),
41
+ starred: Boolean(row.starred),
42
+ trace_outcome: row.trace_outcome ?? null,
43
+ source_session_id: row.source_session_id ?? null,
44
+ valid_from: row.valid_from ?? row.created,
45
+ superseded_by: row.superseded_by ?? null,
46
+ extracted_from: row.extracted_from ?? null,
47
+ dag_level: Number(row.dag_level ?? 0),
48
+ dag_parent_id: row.dag_parent_id ?? null,
49
+ kind: (row.kind ?? 'distilled'),
50
+ scope: row.scope ?? null,
51
+ owner: row.owner ?? null,
52
+ artifact_ref: row.artifact_ref ?? null,
53
+ tenantId: row.tenant_id ?? 'default',
54
+ origin_project: row.origin_project ?? null,
55
+ descendant_count: Number(row.descendant_count ?? 0),
56
+ earliest_at: row.earliest_at ?? null,
57
+ latest_at: row.latest_at ?? null,
58
+ // v0.30 / E1 of DAG live-coupling (schema v28). Symmetric with v25 cache.
59
+ summary_dirty: (Number(row.summary_dirty ?? 0) === 1 ? 1 : 0),
60
+ last_rebuilt_at: row.last_rebuilt_at ?? null,
61
+ rebuild_count: Number(row.rebuild_count ?? 0),
62
+ dag_level_3_built_at: row.dag_level_3_built_at ?? null,
63
+ };
64
+ // F1 (v1.7.0): preserve bm25_score from the FTS path. `'bm25_score' in row`
65
+ // distinguishes "absent column" (non-FTS path) from "column present but
66
+ // value 0" — though FTS5 bm25() never returns 0, this is defensive.
67
+ if ('bm25_score' in row && row.bm25_score !== undefined && row.bm25_score !== null) {
68
+ entry.bm25_score = Number(row.bm25_score);
69
+ }
70
+ return entry;
71
+ }
72
+ export function parseJsonArray(raw) {
73
+ if (!raw)
74
+ return [];
75
+ try {
76
+ const parsed = JSON.parse(raw);
77
+ return Array.isArray(parsed) ? parsed.map((item) => String(item)) : [];
78
+ }
79
+ catch (err) {
80
+ log.debug(`store: corrupt JSON array column read as empty: ${err instanceof Error ? err.message : String(err)}`);
81
+ return [];
82
+ }
83
+ }
84
+ /**
85
+ * Strict parse for the `last_trace_id` meta value (LC1 F1(d) structural
86
+ * fix). A bare Number(raw) would turn '', whitespace, or garbage into a
87
+ * usable-looking 0/NaN — a consumer INSERTing recall_trace_outcomes with
88
+ * trace_id=0 would hit a masked FK violation (row id 0 never exists).
89
+ * Require a clean positive integer string; anything else is treated as
90
+ * unset. This is the ONE place that decides "clean" — every consumer of
91
+ * `HippoIndex.last_trace_id` (outcomeForLastRecall, tests) reads the
92
+ * already-validated value out of `buildIndexFromDb`'s result and never
93
+ * re-parses the raw meta string itself.
94
+ */
95
+ export function parseLastTraceId(raw) {
96
+ const trimmed = (raw ?? '').trim();
97
+ if (!/^\d+$/.test(trimmed) || Number(trimmed) <= 0)
98
+ return null;
99
+ return trimmed;
100
+ }
101
+ export function isPlainJsonObject(x) {
102
+ return x !== null && typeof x === 'object' && !Array.isArray(x);
103
+ }
104
+ function parseJsonObject(raw) {
105
+ if (!raw)
106
+ return {};
107
+ try {
108
+ const parsed = JSON.parse(raw);
109
+ if (isPlainJsonObject(parsed)) {
110
+ return parsed;
111
+ }
112
+ return {};
113
+ }
114
+ catch (err) {
115
+ log.debug(`store: corrupt JSON object column read as empty: ${err instanceof Error ? err.message : String(err)}`);
116
+ return {};
117
+ }
118
+ }
119
+ export function rowToTaskSnapshot(row) {
120
+ return {
121
+ id: Number(row.id),
122
+ task: row.task,
123
+ summary: row.summary,
124
+ next_step: row.next_step,
125
+ status: row.status,
126
+ source: row.source,
127
+ session_id: row.session_id ?? null,
128
+ scope: row.scope ?? null,
129
+ created_at: row.created_at,
130
+ updated_at: row.updated_at,
131
+ };
132
+ }
133
+ export function rowToMemoryConflict(row) {
134
+ return {
135
+ id: Number(row.id),
136
+ memory_a_id: row.memory_a_id,
137
+ memory_b_id: row.memory_b_id,
138
+ reason: row.reason,
139
+ score: Number(row.score ?? 0),
140
+ status: row.status,
141
+ detected_at: row.detected_at,
142
+ updated_at: row.updated_at,
143
+ };
144
+ }
145
+ export function rowToSessionEvent(row) {
146
+ return {
147
+ id: Number(row.id),
148
+ session_id: row.session_id,
149
+ task: row.task ?? null,
150
+ event_type: row.event_type,
151
+ content: row.content,
152
+ source: row.source,
153
+ scope: row.scope ?? null,
154
+ metadata: parseJsonObject(row.metadata_json),
155
+ created_at: row.created_at,
156
+ };
157
+ }
158
+ //# sourceMappingURL=rows.js.map
@@ -0,0 +1,86 @@
1
+ import type { MemoryEntry } from '../memory.js';
2
+ import { type DatabaseSyncLike } from '../db.js';
3
+ /**
4
+ * v1.7.2 — recall-mode scope filter shape, exported so callers
5
+ * (`loadRecallSearchEntries`) and tests can refer to it symbolically without
6
+ * `Parameters<typeof loadSearchRows>[N]` indirection.
7
+ *
8
+ * Three modes:
9
+ * - 'default-deny' — exclude scopes in `RECALL_DEFAULT_DENY_SCOPES` (T2).
10
+ * - 'exact' — exact match on `m.scope = value` (api.recall's explicit-scope
11
+ * request semantics).
12
+ * - 'default-deny-or-exact' (v1.25.0) — the default-admitted set PLUS rows
13
+ * whose scope equals `value`. This is the CLI `--scope` semantics: the
14
+ * flag predates the envelope column as a TAG-boost ranking hint
15
+ * (`scope:<v>` tags, HIPPO_SCOPE), so an explicit flag must UNLOCK the
16
+ * named envelope scope in addition to the normal set rather than narrow
17
+ * the result to it — narrowing would return zero rows for every
18
+ * tag-scoped workflow (envelope scope NULL). Strictly safer than the
19
+ * pre-v1.25.0 CLI behavior (no filter at all): other private scopes and
20
+ * quarantine buckets stay denied.
21
+ *
22
+ * Background pipelines (`consolidate`, `embeddings`, `refine-llm`, ...) call
23
+ * `loadSearchEntries` (no scopeFilter arg) and see all rows including
24
+ * quarantine.
25
+ */
26
+ /** @internal v1.7.2 — internal SQL-builder shape; not on the public API
27
+ * surface (not re-exported from `src/index.ts`). Subject to change. */
28
+ export type RecallScopeFilter = {
29
+ mode: 'default-deny';
30
+ } | {
31
+ mode: 'exact';
32
+ value: string;
33
+ } | {
34
+ mode: 'default-deny-or-exact';
35
+ value: string;
36
+ };
37
+ /** Scope rule for recall: none requested is default-deny; 'exact' narrows to the request; 'additive' adds it to the default set. */
38
+ export declare function recallScopeFilter(requestedScope: string | undefined, mode: 'exact' | 'additive'): RecallScopeFilter;
39
+ /**
40
+ * Load likely search candidates directly from SQLite.
41
+ * Uses FTS5 when available, falls back to LIKE matching, then full-store fallback.
42
+ *
43
+ * When `tenantId` is provided, every SELECT (FTS join, LIKE, fallback) filters
44
+ * by tenant_id. Cross-tenant memories never surface. Omitted = no filter.
45
+ */
46
+ export declare function loadSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string): MemoryEntry[];
47
+ /**
48
+ * v1.7.1 — recall-mode loader. Pushes the recall-side scope predicate into
49
+ * SQL so `unknown:legacy` cannot leak via any consumer that hasn't remembered
50
+ * to re-filter (root-cause-over-patches: codex flagged this on v1.6.5 review).
51
+ *
52
+ * - `requestedScope` undefined / '': default-deny on `unknown:legacy`.
53
+ * - `requestedScope` non-empty string: exact match on `m.scope = requestedScope`.
54
+ *
55
+ * Private-scope (`<source>:private:*`) exclusion: SQL applies a conservative
56
+ * pre-window approximation (`NOT LIKE '%:private:%'`, v1.25.0 — codex P2:
57
+ * post-window-only filtering let private rows starve admitted candidates out
58
+ * of the LIMIT window); the exact anchored regex
59
+ * (`passesScopeFilterForRecall`) remains the authoritative JS post-filter in
60
+ * the recall consumers.
61
+ *
62
+ * Consumers: `api.recall` (v1.7.1+), `cmdRecall`/`cmdExplain` direct CLI paths
63
+ * and `searchBothHybrid` recall mode (v1.25.0). Background pipelines
64
+ * (`consolidate`, `embeddings`, `refine-llm`, ...) keep using
65
+ * `loadSearchEntries` so they can see quarantined rows when needed.
66
+ *
67
+ * `tenantId` widened to optional in v1.25.0 for the searchBothHybrid recall
68
+ * mode (its `tenantId` option is optional); `loadSearchRows` already treats
69
+ * undefined as "no tenant filter" for legacy callers.
70
+ */
71
+ export declare function loadRecallSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive', includeSuperseded?: boolean): MemoryEntry[];
72
+ export declare function loadRecallSearchEntriesFromDb(db: DatabaseSyncLike, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive', includeSuperseded?: boolean): MemoryEntry[];
73
+ /** Which rows the vector arm of hybrid search may add: the same tenant, scope and superseded rules as the lexical load. */
74
+ export interface VectorCandidateSpec {
75
+ tenantId?: string;
76
+ scope?: RecallScopeFilter;
77
+ includeSuperseded: boolean;
78
+ /** How many nearest rows to add; default 50. */
79
+ limit?: number;
80
+ }
81
+ /** The rows nearest `queryVector` that pass `spec`, nearest first. */
82
+ export declare function loadVectorCandidateEntries(hippoRoot: string, queryVector: readonly number[], spec: VectorCandidateSpec): MemoryEntry[];
83
+ /** Rarest-K prompt terms for this connection's FTS index, as a space-joined query string.
84
+ * Without FTS, returns the first 32 terms, as before rarest-term selection. */
85
+ export declare function pickRarestFtsQuery(db: DatabaseSyncLike, terms: readonly string[], maxTerms?: number): string;
86
+ //# sourceMappingURL=search-rows.d.ts.map