hippo-memory 1.44.0 → 1.46.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 (554) hide show
  1. package/README.md +68 -24
  2. package/bin/hippo.js +3 -1
  3. package/dist/ablation.d.ts +10 -1
  4. package/dist/ablation.js +17 -1
  5. package/dist/api.d.ts +81 -22
  6. package/dist/api.js +258 -49
  7. package/dist/audit.d.ts +2 -2
  8. package/dist/audit.js +9 -0
  9. package/dist/autolearn.d.ts +1 -1
  10. package/dist/autolearn.js +2 -1
  11. package/dist/capture-error.d.ts +20 -0
  12. package/dist/capture-error.js +82 -0
  13. package/dist/capture.d.ts +25 -8
  14. package/dist/capture.js +100 -5
  15. package/dist/cli.d.ts +9 -1
  16. package/dist/cli.js +531 -119
  17. package/dist/client.d.ts +4 -21
  18. package/dist/client.js +3 -112
  19. package/dist/config.d.ts +20 -0
  20. package/dist/config.js +37 -1
  21. package/dist/consolidate.d.ts +9 -0
  22. package/dist/consolidate.js +133 -46
  23. package/dist/dag.d.ts +1 -0
  24. package/dist/dag.js +10 -5
  25. package/dist/dashboard.js +7 -3
  26. package/dist/db.js +69 -24
  27. package/dist/dedupe.d.ts +1 -0
  28. package/dist/dedupe.js +4 -7
  29. package/dist/doctor.d.ts +34 -0
  30. package/dist/doctor.js +174 -0
  31. package/dist/dormant.d.ts +91 -0
  32. package/dist/dormant.js +121 -0
  33. package/dist/embedding-provider.js +2 -1
  34. package/dist/embeddings.js +81 -8
  35. package/dist/eval-stats.d.ts +123 -0
  36. package/dist/eval-stats.js +187 -0
  37. package/dist/extract.d.ts +2 -0
  38. package/dist/extract.js +9 -4
  39. package/dist/half-life-migration.d.ts +55 -0
  40. package/dist/half-life-migration.js +111 -0
  41. package/dist/hooks.d.ts +4 -0
  42. package/dist/hooks.js +47 -0
  43. package/dist/mcp/server.d.ts +6 -0
  44. package/dist/mcp/server.js +90 -48
  45. package/dist/memory.d.ts +18 -1
  46. package/dist/memory.js +33 -5
  47. package/dist/physics-config.js +5 -1
  48. package/dist/recall-scope.d.ts +24 -0
  49. package/dist/recall-scope.js +41 -0
  50. package/dist/refine-llm.js +3 -2
  51. package/dist/reject-flow.d.ts +3 -3
  52. package/dist/reject-flow.js +10 -3
  53. package/dist/rerankers/jev.js +3 -2
  54. package/dist/rerankers/llm.js +3 -2
  55. package/dist/search.d.ts +4 -4
  56. package/dist/search.js +26 -21
  57. package/dist/server.d.ts +5 -0
  58. package/dist/server.js +49 -29
  59. package/dist/shared.js +1 -1
  60. package/dist/store.d.ts +29 -11
  61. package/dist/store.js +197 -70
  62. package/dist/token-ledger.d.ts +119 -0
  63. package/dist/token-ledger.js +181 -0
  64. package/dist/version.d.ts +4 -6
  65. package/dist/version.js +4 -7
  66. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  67. package/extensions/openclaw-plugin/package.json +1 -1
  68. package/openclaw.plugin.json +1 -1
  69. package/package.json +7 -3
  70. package/dist/ablation.d.ts.map +0 -1
  71. package/dist/ablation.js.map +0 -1
  72. package/dist/ambient.d.ts.map +0 -1
  73. package/dist/ambient.js.map +0 -1
  74. package/dist/api.d.ts.map +0 -1
  75. package/dist/api.js.map +0 -1
  76. package/dist/audit-prune.d.ts.map +0 -1
  77. package/dist/audit-prune.js.map +0 -1
  78. package/dist/audit.d.ts.map +0 -1
  79. package/dist/audit.js.map +0 -1
  80. package/dist/auth.d.ts.map +0 -1
  81. package/dist/auth.js.map +0 -1
  82. package/dist/autolearn.d.ts.map +0 -1
  83. package/dist/autolearn.js.map +0 -1
  84. package/dist/availability.d.ts.map +0 -1
  85. package/dist/availability.js.map +0 -1
  86. package/dist/benchmarks/e1.3/incident-recall-eval.js +0 -78
  87. package/dist/benchmarks/e1.3/incident-recall-eval.js.map +0 -1
  88. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js +0 -103
  89. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js.map +0 -1
  90. package/dist/capture.d.ts.map +0 -1
  91. package/dist/capture.js.map +0 -1
  92. package/dist/card-detail.d.ts.map +0 -1
  93. package/dist/card-detail.js.map +0 -1
  94. package/dist/card.d.ts.map +0 -1
  95. package/dist/card.js.map +0 -1
  96. package/dist/cli.d.ts.map +0 -1
  97. package/dist/cli.js.map +0 -1
  98. package/dist/client.d.ts.map +0 -1
  99. package/dist/client.js.map +0 -1
  100. package/dist/compare.d.ts.map +0 -1
  101. package/dist/compare.js.map +0 -1
  102. package/dist/config.d.ts.map +0 -1
  103. package/dist/config.js.map +0 -1
  104. package/dist/connectors/github/backfill.d.ts.map +0 -1
  105. package/dist/connectors/github/backfill.js.map +0 -1
  106. package/dist/connectors/github/cli-impl.d.ts.map +0 -1
  107. package/dist/connectors/github/cli-impl.js.map +0 -1
  108. package/dist/connectors/github/deletion.d.ts.map +0 -1
  109. package/dist/connectors/github/deletion.js.map +0 -1
  110. package/dist/connectors/github/dlq.d.ts.map +0 -1
  111. package/dist/connectors/github/dlq.js.map +0 -1
  112. package/dist/connectors/github/idempotency.d.ts.map +0 -1
  113. package/dist/connectors/github/idempotency.js.map +0 -1
  114. package/dist/connectors/github/ingest.d.ts.map +0 -1
  115. package/dist/connectors/github/ingest.js.map +0 -1
  116. package/dist/connectors/github/octokit-client.d.ts.map +0 -1
  117. package/dist/connectors/github/octokit-client.js.map +0 -1
  118. package/dist/connectors/github/ratelimit.d.ts.map +0 -1
  119. package/dist/connectors/github/ratelimit.js.map +0 -1
  120. package/dist/connectors/github/scope.d.ts.map +0 -1
  121. package/dist/connectors/github/scope.js.map +0 -1
  122. package/dist/connectors/github/signature.d.ts.map +0 -1
  123. package/dist/connectors/github/signature.js.map +0 -1
  124. package/dist/connectors/github/tenant-routing.d.ts.map +0 -1
  125. package/dist/connectors/github/tenant-routing.js.map +0 -1
  126. package/dist/connectors/github/transform.d.ts.map +0 -1
  127. package/dist/connectors/github/transform.js.map +0 -1
  128. package/dist/connectors/github/types.d.ts.map +0 -1
  129. package/dist/connectors/github/types.js.map +0 -1
  130. package/dist/connectors/slack/backfill.d.ts.map +0 -1
  131. package/dist/connectors/slack/backfill.js.map +0 -1
  132. package/dist/connectors/slack/deletion.d.ts.map +0 -1
  133. package/dist/connectors/slack/deletion.js.map +0 -1
  134. package/dist/connectors/slack/dlq.d.ts.map +0 -1
  135. package/dist/connectors/slack/dlq.js.map +0 -1
  136. package/dist/connectors/slack/idempotency.d.ts.map +0 -1
  137. package/dist/connectors/slack/idempotency.js.map +0 -1
  138. package/dist/connectors/slack/ingest.d.ts.map +0 -1
  139. package/dist/connectors/slack/ingest.js.map +0 -1
  140. package/dist/connectors/slack/ratelimit.d.ts.map +0 -1
  141. package/dist/connectors/slack/ratelimit.js.map +0 -1
  142. package/dist/connectors/slack/scope.d.ts.map +0 -1
  143. package/dist/connectors/slack/scope.js.map +0 -1
  144. package/dist/connectors/slack/signature.d.ts.map +0 -1
  145. package/dist/connectors/slack/signature.js.map +0 -1
  146. package/dist/connectors/slack/tenant-routing.d.ts.map +0 -1
  147. package/dist/connectors/slack/tenant-routing.js.map +0 -1
  148. package/dist/connectors/slack/transform.d.ts.map +0 -1
  149. package/dist/connectors/slack/transform.js.map +0 -1
  150. package/dist/connectors/slack/types.d.ts.map +0 -1
  151. package/dist/connectors/slack/types.js.map +0 -1
  152. package/dist/connectors/slack/web-client.d.ts.map +0 -1
  153. package/dist/connectors/slack/web-client.js.map +0 -1
  154. package/dist/connectors/slack/workspaces.d.ts.map +0 -1
  155. package/dist/connectors/slack/workspaces.js.map +0 -1
  156. package/dist/consolidate.d.ts.map +0 -1
  157. package/dist/consolidate.js.map +0 -1
  158. package/dist/correction-latency.d.ts.map +0 -1
  159. package/dist/correction-latency.js.map +0 -1
  160. package/dist/customer-notes.d.ts.map +0 -1
  161. package/dist/customer-notes.js.map +0 -1
  162. package/dist/dag.d.ts.map +0 -1
  163. package/dist/dag.js.map +0 -1
  164. package/dist/dashboard.d.ts.map +0 -1
  165. package/dist/dashboard.js.map +0 -1
  166. package/dist/db.d.ts.map +0 -1
  167. package/dist/db.js.map +0 -1
  168. package/dist/decisions.d.ts.map +0 -1
  169. package/dist/decisions.js.map +0 -1
  170. package/dist/dedupe.d.ts.map +0 -1
  171. package/dist/dedupe.js.map +0 -1
  172. package/dist/embedding-provider.d.ts.map +0 -1
  173. package/dist/embedding-provider.js.map +0 -1
  174. package/dist/embeddings.d.ts.map +0 -1
  175. package/dist/embeddings.js.map +0 -1
  176. package/dist/eval-suite.d.ts.map +0 -1
  177. package/dist/eval-suite.js.map +0 -1
  178. package/dist/eval.d.ts.map +0 -1
  179. package/dist/eval.js.map +0 -1
  180. package/dist/extensions/openclaw-plugin/index.js.map +0 -1
  181. package/dist/extract.d.ts.map +0 -1
  182. package/dist/extract.js.map +0 -1
  183. package/dist/forward-claim-detector.d.ts.map +0 -1
  184. package/dist/forward-claim-detector.js.map +0 -1
  185. package/dist/goals.d.ts.map +0 -1
  186. package/dist/goals.js.map +0 -1
  187. package/dist/graph-extract.d.ts.map +0 -1
  188. package/dist/graph-extract.js.map +0 -1
  189. package/dist/graph-recall.d.ts.map +0 -1
  190. package/dist/graph-recall.js.map +0 -1
  191. package/dist/graph-stream.d.ts.map +0 -1
  192. package/dist/graph-stream.js.map +0 -1
  193. package/dist/graph-view.d.ts.map +0 -1
  194. package/dist/graph-view.js.map +0 -1
  195. package/dist/graph.d.ts.map +0 -1
  196. package/dist/graph.js.map +0 -1
  197. package/dist/handoff.d.ts.map +0 -1
  198. package/dist/handoff.js.map +0 -1
  199. package/dist/hooks.d.ts.map +0 -1
  200. package/dist/hooks.js.map +0 -1
  201. package/dist/importers.d.ts.map +0 -1
  202. package/dist/importers.js.map +0 -1
  203. package/dist/incidents.d.ts.map +0 -1
  204. package/dist/incidents.js.map +0 -1
  205. package/dist/index.d.ts.map +0 -1
  206. package/dist/index.js.map +0 -1
  207. package/dist/invalidation.d.ts.map +0 -1
  208. package/dist/invalidation.js.map +0 -1
  209. package/dist/mcp/framing.d.ts.map +0 -1
  210. package/dist/mcp/framing.js.map +0 -1
  211. package/dist/mcp/server.d.ts.map +0 -1
  212. package/dist/mcp/server.js.map +0 -1
  213. package/dist/memory-value-weights.d.ts.map +0 -1
  214. package/dist/memory-value-weights.js.map +0 -1
  215. package/dist/memory-value.d.ts.map +0 -1
  216. package/dist/memory-value.js.map +0 -1
  217. package/dist/memory.d.ts.map +0 -1
  218. package/dist/memory.js.map +0 -1
  219. package/dist/multihop.d.ts.map +0 -1
  220. package/dist/multihop.js.map +0 -1
  221. package/dist/owner-validation.d.ts.map +0 -1
  222. package/dist/owner-validation.js.map +0 -1
  223. package/dist/path-context.d.ts.map +0 -1
  224. package/dist/path-context.js.map +0 -1
  225. package/dist/physics-config.d.ts.map +0 -1
  226. package/dist/physics-config.js.map +0 -1
  227. package/dist/physics-state.d.ts.map +0 -1
  228. package/dist/physics-state.js.map +0 -1
  229. package/dist/physics.d.ts.map +0 -1
  230. package/dist/physics.js.map +0 -1
  231. package/dist/policies.d.ts.map +0 -1
  232. package/dist/policies.js.map +0 -1
  233. package/dist/postinstall.d.ts.map +0 -1
  234. package/dist/postinstall.js.map +0 -1
  235. package/dist/predictions.d.ts.map +0 -1
  236. package/dist/predictions.js.map +0 -1
  237. package/dist/processes.d.ts.map +0 -1
  238. package/dist/processes.js.map +0 -1
  239. package/dist/project-briefs.d.ts.map +0 -1
  240. package/dist/project-briefs.js.map +0 -1
  241. package/dist/project-identity.d.ts.map +0 -1
  242. package/dist/project-identity.js.map +0 -1
  243. package/dist/provenance-coverage.d.ts.map +0 -1
  244. package/dist/provenance-coverage.js.map +0 -1
  245. package/dist/rate-limit.d.ts.map +0 -1
  246. package/dist/rate-limit.js.map +0 -1
  247. package/dist/raw-archive-mirror-cleanup.d.ts.map +0 -1
  248. package/dist/raw-archive-mirror-cleanup.js.map +0 -1
  249. package/dist/raw-archive.d.ts.map +0 -1
  250. package/dist/raw-archive.js.map +0 -1
  251. package/dist/recall-history.d.ts.map +0 -1
  252. package/dist/recall-history.js.map +0 -1
  253. package/dist/recall-scope.d.ts.map +0 -1
  254. package/dist/recall-scope.js.map +0 -1
  255. package/dist/recall-trace.d.ts.map +0 -1
  256. package/dist/recall-trace.js.map +0 -1
  257. package/dist/refine-llm.d.ts.map +0 -1
  258. package/dist/refine-llm.js.map +0 -1
  259. package/dist/reject-flow.d.ts.map +0 -1
  260. package/dist/reject-flow.js.map +0 -1
  261. package/dist/rejection.d.ts.map +0 -1
  262. package/dist/rejection.js.map +0 -1
  263. package/dist/replay.d.ts.map +0 -1
  264. package/dist/replay.js.map +0 -1
  265. package/dist/rerankers/cross-encoder.d.ts.map +0 -1
  266. package/dist/rerankers/cross-encoder.js.map +0 -1
  267. package/dist/rerankers/index.d.ts.map +0 -1
  268. package/dist/rerankers/index.js.map +0 -1
  269. package/dist/rerankers/jev.d.ts.map +0 -1
  270. package/dist/rerankers/jev.js.map +0 -1
  271. package/dist/rerankers/llm.d.ts.map +0 -1
  272. package/dist/rerankers/llm.js.map +0 -1
  273. package/dist/rerankers/types.d.ts.map +0 -1
  274. package/dist/rerankers/types.js.map +0 -1
  275. package/dist/rrf.d.ts.map +0 -1
  276. package/dist/rrf.js.map +0 -1
  277. package/dist/salience.d.ts.map +0 -1
  278. package/dist/salience.js.map +0 -1
  279. package/dist/scheduler.d.ts.map +0 -1
  280. package/dist/scheduler.js.map +0 -1
  281. package/dist/scope.d.ts.map +0 -1
  282. package/dist/scope.js.map +0 -1
  283. package/dist/search.d.ts.map +0 -1
  284. package/dist/search.js.map +0 -1
  285. package/dist/secret-detect.d.ts.map +0 -1
  286. package/dist/secret-detect.js.map +0 -1
  287. package/dist/server-detect.d.ts.map +0 -1
  288. package/dist/server-detect.js.map +0 -1
  289. package/dist/server.d.ts.map +0 -1
  290. package/dist/server.js.map +0 -1
  291. package/dist/shared.d.ts.map +0 -1
  292. package/dist/shared.js.map +0 -1
  293. package/dist/skills.d.ts.map +0 -1
  294. package/dist/skills.js.map +0 -1
  295. package/dist/sleep-redact.d.ts +0 -58
  296. package/dist/sleep-redact.d.ts.map +0 -1
  297. package/dist/sleep-redact.js +0 -80
  298. package/dist/sleep-redact.js.map +0 -1
  299. package/dist/src/ablation.js +0 -138
  300. package/dist/src/ablation.js.map +0 -1
  301. package/dist/src/ambient.js +0 -148
  302. package/dist/src/ambient.js.map +0 -1
  303. package/dist/src/api.js +0 -2109
  304. package/dist/src/api.js.map +0 -1
  305. package/dist/src/audit-prune.js +0 -109
  306. package/dist/src/audit-prune.js.map +0 -1
  307. package/dist/src/audit.js +0 -213
  308. package/dist/src/audit.js.map +0 -1
  309. package/dist/src/auth.js +0 -97
  310. package/dist/src/auth.js.map +0 -1
  311. package/dist/src/autolearn.js +0 -174
  312. package/dist/src/autolearn.js.map +0 -1
  313. package/dist/src/availability.js +0 -94
  314. package/dist/src/availability.js.map +0 -1
  315. package/dist/src/capture.js +0 -1346
  316. package/dist/src/capture.js.map +0 -1
  317. package/dist/src/card-detail.js +0 -15
  318. package/dist/src/card-detail.js.map +0 -1
  319. package/dist/src/card.js +0 -19
  320. package/dist/src/card.js.map +0 -1
  321. package/dist/src/cli.js +0 -9387
  322. package/dist/src/cli.js.map +0 -1
  323. package/dist/src/client.js +0 -237
  324. package/dist/src/client.js.map +0 -1
  325. package/dist/src/compare.js +0 -122
  326. package/dist/src/compare.js.map +0 -1
  327. package/dist/src/config.js +0 -135
  328. package/dist/src/config.js.map +0 -1
  329. package/dist/src/connectors/github/backfill.js +0 -281
  330. package/dist/src/connectors/github/backfill.js.map +0 -1
  331. package/dist/src/connectors/github/cli-impl.js +0 -234
  332. package/dist/src/connectors/github/cli-impl.js.map +0 -1
  333. package/dist/src/connectors/github/deletion.js +0 -85
  334. package/dist/src/connectors/github/deletion.js.map +0 -1
  335. package/dist/src/connectors/github/dlq.js +0 -190
  336. package/dist/src/connectors/github/dlq.js.map +0 -1
  337. package/dist/src/connectors/github/idempotency.js +0 -27
  338. package/dist/src/connectors/github/idempotency.js.map +0 -1
  339. package/dist/src/connectors/github/ingest.js +0 -156
  340. package/dist/src/connectors/github/ingest.js.map +0 -1
  341. package/dist/src/connectors/github/octokit-client.js +0 -70
  342. package/dist/src/connectors/github/octokit-client.js.map +0 -1
  343. package/dist/src/connectors/github/ratelimit.js +0 -31
  344. package/dist/src/connectors/github/ratelimit.js.map +0 -1
  345. package/dist/src/connectors/github/scope.js +0 -13
  346. package/dist/src/connectors/github/scope.js.map +0 -1
  347. package/dist/src/connectors/github/signature.js +0 -81
  348. package/dist/src/connectors/github/signature.js.map +0 -1
  349. package/dist/src/connectors/github/tenant-routing.js +0 -69
  350. package/dist/src/connectors/github/tenant-routing.js.map +0 -1
  351. package/dist/src/connectors/github/transform.js +0 -103
  352. package/dist/src/connectors/github/transform.js.map +0 -1
  353. package/dist/src/connectors/github/types.js +0 -100
  354. package/dist/src/connectors/github/types.js.map +0 -1
  355. package/dist/src/connectors/slack/backfill.js +0 -78
  356. package/dist/src/connectors/slack/backfill.js.map +0 -1
  357. package/dist/src/connectors/slack/deletion.js +0 -59
  358. package/dist/src/connectors/slack/deletion.js.map +0 -1
  359. package/dist/src/connectors/slack/dlq.js +0 -224
  360. package/dist/src/connectors/slack/dlq.js.map +0 -1
  361. package/dist/src/connectors/slack/idempotency.js +0 -31
  362. package/dist/src/connectors/slack/idempotency.js.map +0 -1
  363. package/dist/src/connectors/slack/ingest.js +0 -109
  364. package/dist/src/connectors/slack/ingest.js.map +0 -1
  365. package/dist/src/connectors/slack/ratelimit.js +0 -18
  366. package/dist/src/connectors/slack/ratelimit.js.map +0 -1
  367. package/dist/src/connectors/slack/scope.js +0 -13
  368. package/dist/src/connectors/slack/scope.js.map +0 -1
  369. package/dist/src/connectors/slack/signature.js +0 -27
  370. package/dist/src/connectors/slack/signature.js.map +0 -1
  371. package/dist/src/connectors/slack/tenant-routing.js +0 -41
  372. package/dist/src/connectors/slack/tenant-routing.js.map +0 -1
  373. package/dist/src/connectors/slack/transform.js +0 -47
  374. package/dist/src/connectors/slack/transform.js.map +0 -1
  375. package/dist/src/connectors/slack/types.js +0 -35
  376. package/dist/src/connectors/slack/types.js.map +0 -1
  377. package/dist/src/connectors/slack/web-client.js +0 -43
  378. package/dist/src/connectors/slack/web-client.js.map +0 -1
  379. package/dist/src/connectors/slack/workspaces.js +0 -62
  380. package/dist/src/connectors/slack/workspaces.js.map +0 -1
  381. package/dist/src/consolidate.js +0 -978
  382. package/dist/src/consolidate.js.map +0 -1
  383. package/dist/src/correction-latency.js +0 -74
  384. package/dist/src/correction-latency.js.map +0 -1
  385. package/dist/src/customer-notes.js +0 -325
  386. package/dist/src/customer-notes.js.map +0 -1
  387. package/dist/src/dag.js +0 -352
  388. package/dist/src/dag.js.map +0 -1
  389. package/dist/src/dashboard.js +0 -258
  390. package/dist/src/dashboard.js.map +0 -1
  391. package/dist/src/db.js +0 -2731
  392. package/dist/src/db.js.map +0 -1
  393. package/dist/src/decisions.js +0 -304
  394. package/dist/src/decisions.js.map +0 -1
  395. package/dist/src/dedupe.js +0 -141
  396. package/dist/src/dedupe.js.map +0 -1
  397. package/dist/src/embedding-provider.js +0 -314
  398. package/dist/src/embedding-provider.js.map +0 -1
  399. package/dist/src/embeddings.js +0 -543
  400. package/dist/src/embeddings.js.map +0 -1
  401. package/dist/src/eval-suite.js +0 -294
  402. package/dist/src/eval-suite.js.map +0 -1
  403. package/dist/src/eval.js +0 -187
  404. package/dist/src/eval.js.map +0 -1
  405. package/dist/src/extract.js +0 -117
  406. package/dist/src/extract.js.map +0 -1
  407. package/dist/src/forward-claim-detector.js +0 -117
  408. package/dist/src/forward-claim-detector.js.map +0 -1
  409. package/dist/src/goals.js +0 -399
  410. package/dist/src/goals.js.map +0 -1
  411. package/dist/src/graph-extract.js +0 -314
  412. package/dist/src/graph-extract.js.map +0 -1
  413. package/dist/src/graph-recall.js +0 -277
  414. package/dist/src/graph-recall.js.map +0 -1
  415. package/dist/src/graph-stream.js +0 -176
  416. package/dist/src/graph-stream.js.map +0 -1
  417. package/dist/src/graph-view.js +0 -310
  418. package/dist/src/graph-view.js.map +0 -1
  419. package/dist/src/graph.js +0 -762
  420. package/dist/src/graph.js.map +0 -1
  421. package/dist/src/handoff.js +0 -65
  422. package/dist/src/handoff.js.map +0 -1
  423. package/dist/src/hooks.js +0 -926
  424. package/dist/src/hooks.js.map +0 -1
  425. package/dist/src/importers.js +0 -881
  426. package/dist/src/importers.js.map +0 -1
  427. package/dist/src/incidents.js +0 -336
  428. package/dist/src/incidents.js.map +0 -1
  429. package/dist/src/index.js +0 -32
  430. package/dist/src/index.js.map +0 -1
  431. package/dist/src/invalidation.js +0 -129
  432. package/dist/src/invalidation.js.map +0 -1
  433. package/dist/src/mcp/framing.js +0 -45
  434. package/dist/src/mcp/framing.js.map +0 -1
  435. package/dist/src/mcp/server.js +0 -1298
  436. package/dist/src/mcp/server.js.map +0 -1
  437. package/dist/src/memory-value-weights.js +0 -31
  438. package/dist/src/memory-value-weights.js.map +0 -1
  439. package/dist/src/memory-value.js +0 -261
  440. package/dist/src/memory-value.js.map +0 -1
  441. package/dist/src/memory.js +0 -425
  442. package/dist/src/memory.js.map +0 -1
  443. package/dist/src/multihop.js +0 -35
  444. package/dist/src/multihop.js.map +0 -1
  445. package/dist/src/owner-validation.js +0 -56
  446. package/dist/src/owner-validation.js.map +0 -1
  447. package/dist/src/path-context.js +0 -48
  448. package/dist/src/path-context.js.map +0 -1
  449. package/dist/src/physics-config.js +0 -26
  450. package/dist/src/physics-config.js.map +0 -1
  451. package/dist/src/physics-state.js +0 -172
  452. package/dist/src/physics-state.js.map +0 -1
  453. package/dist/src/physics.js +0 -378
  454. package/dist/src/physics.js.map +0 -1
  455. package/dist/src/policies.js +0 -414
  456. package/dist/src/policies.js.map +0 -1
  457. package/dist/src/postinstall.js +0 -101
  458. package/dist/src/postinstall.js.map +0 -1
  459. package/dist/src/predictions.js +0 -629
  460. package/dist/src/predictions.js.map +0 -1
  461. package/dist/src/processes.js +0 -349
  462. package/dist/src/processes.js.map +0 -1
  463. package/dist/src/project-briefs.js +0 -492
  464. package/dist/src/project-briefs.js.map +0 -1
  465. package/dist/src/project-identity.js +0 -200
  466. package/dist/src/project-identity.js.map +0 -1
  467. package/dist/src/provenance-coverage.js +0 -23
  468. package/dist/src/provenance-coverage.js.map +0 -1
  469. package/dist/src/rate-limit.js +0 -60
  470. package/dist/src/rate-limit.js.map +0 -1
  471. package/dist/src/raw-archive-mirror-cleanup.js +0 -55
  472. package/dist/src/raw-archive-mirror-cleanup.js.map +0 -1
  473. package/dist/src/raw-archive.js +0 -91
  474. package/dist/src/raw-archive.js.map +0 -1
  475. package/dist/src/recall-history.js +0 -235
  476. package/dist/src/recall-history.js.map +0 -1
  477. package/dist/src/recall-scope.js +0 -89
  478. package/dist/src/recall-scope.js.map +0 -1
  479. package/dist/src/recall-trace.js +0 -186
  480. package/dist/src/recall-trace.js.map +0 -1
  481. package/dist/src/refine-llm.js +0 -156
  482. package/dist/src/refine-llm.js.map +0 -1
  483. package/dist/src/reject-flow.js +0 -209
  484. package/dist/src/reject-flow.js.map +0 -1
  485. package/dist/src/rejection.js +0 -160
  486. package/dist/src/rejection.js.map +0 -1
  487. package/dist/src/replay.js +0 -122
  488. package/dist/src/replay.js.map +0 -1
  489. package/dist/src/rerankers/cross-encoder.js +0 -137
  490. package/dist/src/rerankers/cross-encoder.js.map +0 -1
  491. package/dist/src/rerankers/index.js +0 -20
  492. package/dist/src/rerankers/index.js.map +0 -1
  493. package/dist/src/rerankers/jev.js +0 -119
  494. package/dist/src/rerankers/jev.js.map +0 -1
  495. package/dist/src/rerankers/llm.js +0 -80
  496. package/dist/src/rerankers/llm.js.map +0 -1
  497. package/dist/src/rerankers/types.js +0 -2
  498. package/dist/src/rerankers/types.js.map +0 -1
  499. package/dist/src/rrf.js +0 -61
  500. package/dist/src/rrf.js.map +0 -1
  501. package/dist/src/salience.js +0 -74
  502. package/dist/src/salience.js.map +0 -1
  503. package/dist/src/scheduler.js +0 -77
  504. package/dist/src/scheduler.js.map +0 -1
  505. package/dist/src/scope.js +0 -35
  506. package/dist/src/scope.js.map +0 -1
  507. package/dist/src/search.js +0 -1003
  508. package/dist/src/search.js.map +0 -1
  509. package/dist/src/secret-detect.js +0 -95
  510. package/dist/src/secret-detect.js.map +0 -1
  511. package/dist/src/server-detect.js +0 -231
  512. package/dist/src/server-detect.js.map +0 -1
  513. package/dist/src/server.js +0 -3255
  514. package/dist/src/server.js.map +0 -1
  515. package/dist/src/shared.js +0 -502
  516. package/dist/src/shared.js.map +0 -1
  517. package/dist/src/skills.js +0 -346
  518. package/dist/src/skills.js.map +0 -1
  519. package/dist/src/sleep-redact.js +0 -80
  520. package/dist/src/sleep-redact.js.map +0 -1
  521. package/dist/src/sso.js +0 -22
  522. package/dist/src/sso.js.map +0 -1
  523. package/dist/src/stdin.js +0 -41
  524. package/dist/src/stdin.js.map +0 -1
  525. package/dist/src/store.js +0 -3749
  526. package/dist/src/store.js.map +0 -1
  527. package/dist/src/tenant.js +0 -17
  528. package/dist/src/tenant.js.map +0 -1
  529. package/dist/src/trace.js +0 -72
  530. package/dist/src/trace.js.map +0 -1
  531. package/dist/src/version.js +0 -40
  532. package/dist/src/version.js.map +0 -1
  533. package/dist/src/working-memory.js +0 -157
  534. package/dist/src/working-memory.js.map +0 -1
  535. package/dist/src/yaml.js +0 -107
  536. package/dist/src/yaml.js.map +0 -1
  537. package/dist/sso.d.ts +0 -13
  538. package/dist/sso.d.ts.map +0 -1
  539. package/dist/sso.js +0 -22
  540. package/dist/sso.js.map +0 -1
  541. package/dist/stdin.d.ts.map +0 -1
  542. package/dist/stdin.js.map +0 -1
  543. package/dist/store.d.ts.map +0 -1
  544. package/dist/store.js.map +0 -1
  545. package/dist/tenant.d.ts.map +0 -1
  546. package/dist/tenant.js.map +0 -1
  547. package/dist/trace.d.ts.map +0 -1
  548. package/dist/trace.js.map +0 -1
  549. package/dist/version.d.ts.map +0 -1
  550. package/dist/version.js.map +0 -1
  551. package/dist/working-memory.d.ts.map +0 -1
  552. package/dist/working-memory.js.map +0 -1
  553. package/dist/yaml.d.ts.map +0 -1
  554. package/dist/yaml.js.map +0 -1
@@ -1,235 +0,0 @@
1
- /**
2
- * J1 anchoring detector (recall-recurrence) — pure module.
3
- *
4
- * Implements two detection rules from ROADMAP-RESEARCH.md L546:
5
- * R1 query_repeat: same queryHash within recentRepeatWindow returned
6
- * same topMemoryId (caller is re-asking the same question).
7
- * R2 memory_dominance: same topMemoryId across >= minDominance distinct
8
- * queryHashes (memory acts as a fixed-point anchor regardless of what
9
- * the agent asks).
10
- *
11
- * Per the plan v3 architectural decision: each pipeline (api.recall via
12
- * HTTP, cmdRecall, MCP hippo_recall) owns its OWN ring buffer Map keyed
13
- * by (tenant, session). No cross-pipeline sharing (the typical multi-
14
- * process deployment makes IPC ring-sharing impractical; per-pipeline
15
- * is correct because each pipeline has its own top-1 ranking anyway).
16
- *
17
- * Plan: docs/plans/2026-05-26-j1-anchoring-detector.md.
18
- * Composes with J3.2: AnchoringHint + PlanningFallacyHint are independent
19
- * signals; both can fire on the same recall.
20
- */
21
- const DEFAULT_MIN_DOMINANCE = 3;
22
- const DEFAULT_RECENT_REPEAT_WINDOW = 5;
23
- const DEFAULT_COOLDOWN = 3;
24
- // ---------------------------------------------------------------------------
25
- // Query text normalization + hashing
26
- // ---------------------------------------------------------------------------
27
- /**
28
- * Normalize + hash a query text into a 32-bit integer.
29
- * Lowercase → strip non-alphanumeric → split → drop empty + short tokens →
30
- * sort tokens → join → FNV-1a 32-bit.
31
- *
32
- * Token sort + dedup means semantically-equivalent queries with reordered
33
- * words collide intentionally (the roadmap's "semantically-distinct" v1
34
- * uses textual normalization; embedding-based distinctness is J1-v2).
35
- *
36
- * Deterministic across processes; stable across Node + V8 versions.
37
- */
38
- export function hashQueryText(query) {
39
- if (!query)
40
- return 0;
41
- // Token dedup before join: the R2 contract says "distinct queries"
42
- // means semantically distinct, so `foo bar` and `foo foo bar` should
43
- // collapse to the same hash. Without dedup, simple phrasing
44
- // variations (typos, doubled tokens, intensifiers) would inflate
45
- // distinct-query counts and trip R2 on essentially the same question.
46
- // Codex round-1 catch.
47
- // Unicode-aware tokenization (codex round-3 P2 catch): the prior
48
- // ASCII-only [^a-z0-9\s] pattern stripped every non-Latin letter, so
49
- // Japanese, Arabic, Cyrillic, accented-Latin etc. queries collapsed
50
- // to empty token set -> hash 0 -> false R1 collisions across distinct
51
- // non-English queries. \p{L} = any Unicode letter, \p{N} = any Unicode
52
- // number, \p{M} = combining marks (preserve composed accented chars).
53
- // Requires the /u flag and Node >= 12.
54
- const normalized = query
55
- .toLowerCase()
56
- .replace(/[^\p{L}\p{N}\p{M}\s]/gu, ' ')
57
- .split(/\s+/)
58
- .filter((t) => t.length > 0);
59
- // Drop tokens shorter than 3 chars to match the normalizer contract
60
- // (filler / stop words). Without this, `a login bug` vs `login bug`
61
- // hash differently and inflate R2 distinct-query counts, firing
62
- // memory_dominance on repeated phrasings of the same question.
63
- // Codex round-4 P2 catch. Matches the same >=3 filter in
64
- // src/forward-claim-detector.ts for class-resolver tokens.
65
- const filtered = normalized.filter((t) => t.length >= 3);
66
- // Fallback when the >=3 filter would collapse the entire query to
67
- // empty: CJK queries like `测试` / `环境` are 2-char tokens; English
68
- // acronyms like `AI` / `UI` are 2 chars. Without this fallback they
69
- // all hash to fnv1a32(''), producing false R1 collisions across
70
- // distinct short-token queries. Codex round-5 P2 catch.
71
- const tokens = filtered.length > 0 ? filtered : normalized;
72
- const deduped = Array.from(new Set(tokens)).sort();
73
- return fnv1a32(deduped.join(' '));
74
- }
75
- function fnv1a32(text) {
76
- // FNV-1a 32-bit. Offset basis 2166136261, prime 16777619.
77
- let hash = 2166136261;
78
- for (let i = 0; i < text.length; i++) {
79
- hash ^= text.charCodeAt(i);
80
- // 32-bit multiply via Math.imul — handles overflow correctly.
81
- hash = Math.imul(hash, 16777619);
82
- }
83
- // Coerce to unsigned 32-bit for stable comparison.
84
- return hash >>> 0;
85
- }
86
- // ---------------------------------------------------------------------------
87
- // Anchoring detection
88
- // ---------------------------------------------------------------------------
89
- /**
90
- * Detect anchoring patterns in the recall history against the current
91
- * recall's (queryHash, topMemoryId).
92
- *
93
- * Rule precedence: R2 (memory_dominance) wins on tie. When both R1 and R2
94
- * fire on the same recall, return only the R2 hint — R2's signal is the
95
- * cognitively stronger one (a memory dominating multiple DIFFERENT queries
96
- * is a fixed-point anchor; R1 alone is just a literal re-ask).
97
- *
98
- * Cooldown: if the immediately-prior recall fired a hint on the SAME
99
- * topMemoryId within `cooldown=3` history entries, suppress. Prevents
100
- * spam when the agent repeatedly recalls within the dominance window.
101
- * Cooldown is per-memory, not per-rule: if R2 fired on M (cooldown
102
- * engaged for M), and the next recall has top=N + repeated query →
103
- * R1 fires on N (different memory, not in cooldown).
104
- *
105
- * @returns AnchoringHint when a pattern fires; null otherwise.
106
- */
107
- export function detectAnchoring(history, currentQueryHash, currentTopMemoryId, opts = {}) {
108
- if (currentTopMemoryId === null)
109
- return null;
110
- const minDominance = opts.minDominance ?? DEFAULT_MIN_DOMINANCE;
111
- const recentRepeatWindow = opts.recentRepeatWindow ?? DEFAULT_RECENT_REPEAT_WINDOW;
112
- const cooldown = opts.cooldown ?? DEFAULT_COOLDOWN;
113
- // Cooldown gate: was the most-recent hint (across the last `cooldown`
114
- // entries) for THIS memory? If yes, suppress regardless of rule.
115
- const cooldownSlice = history.slice(-cooldown);
116
- for (const entry of cooldownSlice) {
117
- if (entry.anchoredOn === currentTopMemoryId) {
118
- return null;
119
- }
120
- }
121
- // R2 check FIRST (wins on tie). Count distinct queryHashes in history
122
- // where topMemoryId === currentTopMemoryId (excluding null tops).
123
- const matchingQueryHashes = new Set();
124
- for (const entry of history) {
125
- if (entry.topMemoryId === currentTopMemoryId) {
126
- matchingQueryHashes.add(entry.queryHash);
127
- }
128
- }
129
- // Include current query in the count.
130
- matchingQueryHashes.add(currentQueryHash);
131
- const queryCount = matchingQueryHashes.size;
132
- if (queryCount >= minDominance) {
133
- return {
134
- reason: 'memory_dominance',
135
- memoryId: currentTopMemoryId,
136
- queryCount,
137
- summary: `Memory ${currentTopMemoryId} has been the top result for ${queryCount} distinct queries in this session and may be anchoring your reasoning.`,
138
- source: 'j1-recurrence',
139
- };
140
- }
141
- // R1 check: is currentQueryHash present in the last `recentRepeatWindow`
142
- // entries AND was that entry's topMemoryId === currentTopMemoryId?
143
- const r1Slice = history.slice(-recentRepeatWindow);
144
- for (const entry of r1Slice) {
145
- if (entry.queryHash === currentQueryHash && entry.topMemoryId === currentTopMemoryId) {
146
- return {
147
- reason: 'query_repeat',
148
- memoryId: currentTopMemoryId,
149
- summary: `Same query phrasing as a recent recall returned the same top result (${currentTopMemoryId}); you may be re-asking the same question.`,
150
- source: 'j1-recurrence',
151
- };
152
- }
153
- }
154
- return null;
155
- }
156
- // ---------------------------------------------------------------------------
157
- // RingBuffer + caller-side state helpers
158
- // ---------------------------------------------------------------------------
159
- const MAX_HISTORY = 10;
160
- const DEFAULT_MAX_SESSIONS = 1000;
161
- /**
162
- * Bounded FIFO ring of RecallHistoryEntry. Newest entries pushed via
163
- * append; oldest evicted when the ring is full. The class is intentionally
164
- * a thin wrapper around an array so snapshotRing returns a readonly view
165
- * without copying on the hot path.
166
- */
167
- export class RingBuffer {
168
- entries = [];
169
- append(entry) {
170
- this.entries.push(entry);
171
- if (this.entries.length > MAX_HISTORY) {
172
- this.entries.shift();
173
- }
174
- }
175
- snapshot() {
176
- return this.entries;
177
- }
178
- size() {
179
- return this.entries.length;
180
- }
181
- }
182
- /**
183
- * Build the (tenant, session) key for a per-session ring Map. Uses a NUL
184
- * (`\x00`) byte as delimiter because tenant ids and session ids are
185
- * validated elsewhere to reject NUL chars — guarantees collision-free
186
- * concatenation regardless of what `:` or other delimiters might appear
187
- * inside either field (notably API-key-derived subjects can contain `:`).
188
- */
189
- export function buildSessionKey(tenantId, sessionId) {
190
- return `${tenantId}\x00${sessionId}`;
191
- }
192
- /**
193
- * Get-or-create a RingBuffer for a session key. Caps total tracked keys
194
- * at `maxSessions` (default 1000) with LRU eviction — when the cap is
195
- * hit, deletes the oldest-inserted key before inserting the new one.
196
- * Map iteration order preserves insertion order per ECMA-262 spec, so
197
- * "oldest" = first key returned by Map.prototype.keys().
198
- */
199
- export function getOrCreateRing(map, key, maxSessions = DEFAULT_MAX_SESSIONS) {
200
- const existing = map.get(key);
201
- if (existing) {
202
- // LRU touch: delete + re-insert to move to back of iteration order.
203
- map.delete(key);
204
- map.set(key, existing);
205
- return existing;
206
- }
207
- if (map.size >= maxSessions) {
208
- const oldest = map.keys().next().value;
209
- if (oldest !== undefined)
210
- map.delete(oldest);
211
- }
212
- const ring = new RingBuffer();
213
- map.set(key, ring);
214
- return ring;
215
- }
216
- /**
217
- * Append a recall to a ring. The `anchoredOn` argument carries the
218
- * memoryId of the AnchoringHint that fired on THIS recall (or undefined
219
- * if no hint). detectAnchoring reads it next time for cooldown gating.
220
- */
221
- export function appendRecall(ring, queryHash, topMemoryId, anchoredOn) {
222
- const entry = {
223
- queryHash,
224
- topMemoryId,
225
- ts: new Date().toISOString(),
226
- };
227
- if (anchoredOn !== undefined)
228
- entry.anchoredOn = anchoredOn;
229
- ring.append(entry);
230
- }
231
- /** Snapshot a ring as a readonly RecallHistorySnapshot. */
232
- export function snapshotRing(ring) {
233
- return ring.snapshot();
234
- }
235
- //# sourceMappingURL=recall-history.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recall-history.js","sourceRoot":"","sources":["../../src/recall-history.ts"],"names":[],"mappings":"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"}
@@ -1,89 +0,0 @@
1
- /**
2
- * v1.25.0 — recall-side scope predicates, extracted from api.ts into a leaf
3
- * module so shared.ts (which api.ts imports) can apply the same default-deny
4
- * rule to searchBothHybrid's internal candidate loads without an import
5
- * cycle. Mirrors the v39 `project-identity.ts` precedent. api.ts imports
6
- * these for its own call sites AND re-exports them for back-compat
7
- * (`api.isPrivateScope`, test imports of `passesScopeFilterForRecall`).
8
- */
9
- import { RECALL_DEFAULT_DENY_SCOPES } from './store.js';
10
- /**
11
- * v1.2.1: source-agnostic private-scope detector. A scope string is treated
12
- * as private when it has the shape `<lowercase-source>:private:<rest>`.
13
- *
14
- * Examples that match:
15
- * slack:private:Cabc, github:private:owner/repo, jira:private:PROJ-1
16
- * Examples that DO NOT match:
17
- * slack:public:Cgeneral, acme:public:my-private-channel, null, '',
18
- * 'unknown:legacy', 'private' (alone), 'private:foo' (no source prefix).
19
- *
20
- * Used by api.recall, mcp/server.ts (hippo_recall + hippo_context),
21
- * cli.ts (cmdRecall + cmdExplain + continuity), shared.ts (searchBothHybrid
22
- * recall mode). Keep these in sync — the export is the single source of
23
- * truth so connector work cannot drift.
24
- */
25
- export const PRIVATE_SCOPE_RE = /^[a-z][a-z0-9_-]*:private:/;
26
- function isScopeString(value) {
27
- return typeof value === 'string';
28
- }
29
- /** True when `scope` matches the `<source>:private:*` shape. */
30
- export function isPrivateScope(scope) {
31
- if (!isScopeString(scope))
32
- return false;
33
- return PRIVATE_SCOPE_RE.test(scope);
34
- }
35
- /**
36
- * Recall-side scope filter — the canonical JS half of the recall default-deny
37
- * rule (the SQL half lives in `loadSearchRows` via `loadRecallSearchEntries`).
38
- *
39
- * - When `requested` is set and non-empty: exact match required.
40
- * - When `requested` is undefined/empty: default-deny on any
41
- * `<source>:private:*` scope and on the `RECALL_DEFAULT_DENY_SCOPES`
42
- * quarantine buckets. `null` and public scopes pass.
43
- *
44
- * @internal v1.7.2 — exported for test parity with
45
- * `RECALL_DEFAULT_DENY_SCOPES` (single-source-of-truth verification). NOT part
46
- * of the public API surface; not re-exported from `src/index.ts`. Subject to
47
- * change without semver bump.
48
- */
49
- export function passesScopeFilterForRecall(scope, requested) {
50
- if (requested !== undefined && requested !== '') {
51
- return scope === requested;
52
- }
53
- if (scope === null)
54
- return true;
55
- if (isPrivateScope(scope))
56
- return false;
57
- // SAFETY: RECALL_DEFAULT_DENY_SCOPES (v1.7.2, single source of truth
58
- // shared with the SQL clause in loadSearchRows) is a readonly tuple of
59
- // string literals. Cast the array to readonly string[] so .includes()
60
- // accepts arbitrary string scopes without a cast on the input (codex
61
- // P0-2: casting `scope` would defeat the constant's safety).
62
- if (RECALL_DEFAULT_DENY_SCOPES.includes(scope))
63
- return false;
64
- return true;
65
- }
66
- /**
67
- * v1.25.0 — the CLI `--scope` variant of the recall filter (JS half of the
68
- * SQL 'default-deny-or-exact' mode in loadSearchRows).
69
- *
70
- * The CLI flag predates the envelope column as a TAG-boost ranking hint
71
- * (`scope:<v>` tags, HIPPO_SCOPE, detectScope()), so an explicit `--scope X`
72
- * UNLOCKS envelope scope X in addition to the default-admitted set — it does
73
- * NOT narrow the result to X (that would return zero rows for every
74
- * tag-scoped workflow, whose envelope scope is NULL). api.recall keeps the
75
- * narrowing 'exact' semantics via `passesScopeFilterForRecall`.
76
- *
77
- * Note the unlock applies to whatever scope was explicitly named — including
78
- * a private scope or a quarantine bucket (`--scope unknown:legacy`). That is
79
- * deliberate owner access, identical in reach to api.recall's exact-match
80
- * for the same input; only NON-requested private/quarantine scopes stay
81
- * denied.
82
- */
83
- export function passesCliRecallScopeFilter(scope, requested) {
84
- if (requested !== undefined && requested !== '' && scope === requested) {
85
- return true;
86
- }
87
- return passesScopeFilterForRecall(scope, undefined);
88
- }
89
- //# sourceMappingURL=recall-scope.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recall-scope.js","sourceRoot":"","sources":["../../src/recall-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAE7D,SAAS,aAAa,CAAC,KAAgC;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAoB,EACpB,SAA6B;IAE7B,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QAChD,OAAO,KAAK,KAAK,SAAS,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,6DAA6D;IAC7D,IAAK,0BAAgD,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAoB,EACpB,SAA6B;IAE7B,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,0BAA0B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC"}
@@ -1,186 +0,0 @@
1
- /**
2
- * LC1 — retrieval-trace persistence
3
- * (docs/plans/2026-08-02-lc1-recall-trace-persistence.md).
4
- *
5
- * Single producer for the `recall_traces` / `recall_trace_results` /
6
- * `recall_trace_outcomes` tables (schema v40). Every recall on the three
7
- * wired paths (api.recall, api.getContext, CLI cmdRecall) writes a trace
8
- * row: the ids + ranks + scores actually returned. Outcome events that
9
- * resolve their targets from last-retrieval state link back to the trace
10
- * they judge via `recordTraceOutcome`. This is the (query, shown, outcome)
11
- * training triple every Track LC learned component needs.
12
- *
13
- * All writes here are fail-soft: a broken trace write must never break the
14
- * surrounding recall or outcome call. Failures are logged to stderr and
15
- * swallowed (matches the api.ts ~2843 "audit emit failed" precedent — no
16
- * new debug env var).
17
- */
18
- import { createHash } from 'node:crypto';
19
- import { openHippoDb, closeHippoDb } from './db.js';
20
- /**
21
- * Strip a RerankStep down to {stage, multiplier, scoreBefore, scoreAfter}
22
- * before persisting (F3 privacy fix, codex cross-model finding). `note` is
23
- * free-form human text — the CLI's goal-boost step embeds matched goal tag
24
- * text there, so persisting it verbatim would leak raw user content into
25
- * training data via `rerank_json`. Only the four structured fields survive;
26
- * any other/future free-form field is dropped by construction (allowlist,
27
- * not a denylist).
28
- */
29
- function sanitizeRerankSteps(steps) {
30
- return steps.map((s) => ({
31
- stage: s.stage,
32
- multiplier: s.multiplier,
33
- scoreBefore: s.scoreBefore,
34
- scoreAfter: s.scoreAfter,
35
- }));
36
- }
37
- /**
38
- * Insert a `recall_traces` row + its `recall_trace_results` rows in ONE
39
- * transaction, on the connection handed in. Fail-soft: never throws —
40
- * logs to stderr and returns null on any failure.
41
- *
42
- * Connection policy (per the plan): api.recall calls this directly on its
43
- * own already-open handle. api.getContext and CLI cmdRecall go through
44
- * `writeRecallTraceAtRoot` instead, since their audit handles are already
45
- * closed by the time tracing runs.
46
- */
47
- export function writeRecallTrace(db, input) {
48
- try {
49
- const queryHash = createHash('sha256').update(input.query).digest('hex').slice(0, 16);
50
- const ts = new Date().toISOString();
51
- db.exec('BEGIN');
52
- try {
53
- const insertTrace = db.prepare(`
54
- INSERT INTO recall_traces (ts, tenant_id, session_id, pipeline, query_hash, query_length, result_count, explain_mode)
55
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
56
- `);
57
- const traceResult = insertTrace.run(ts, input.tenantId, input.sessionId ?? null, input.pipeline, queryHash, input.query.length, input.results.length, input.explainMode ? 1 : 0);
58
- const traceId = Number(traceResult.lastInsertRowid);
59
- const insertResult = db.prepare(`
60
- INSERT INTO recall_trace_results (trace_id, tenant_id, memory_id, result_rank, score, rerank_json)
61
- VALUES (?, ?, ?, ?, ?, ?)
62
- `);
63
- input.results.forEach((r, i) => {
64
- insertResult.run(traceId, input.tenantId, r.memoryId, i + 1, r.score, r.rerankSteps && r.rerankSteps.length > 0 ? JSON.stringify(sanitizeRerankSteps(r.rerankSteps)) : null);
65
- });
66
- db.exec('COMMIT');
67
- return traceId;
68
- }
69
- catch (error) {
70
- try {
71
- db.exec('ROLLBACK');
72
- }
73
- catch { /* already rolled back; keep the original error */ }
74
- throw error;
75
- }
76
- }
77
- catch (error) {
78
- // eslint-disable-next-line no-console
79
- console.error(`[hippo] recall trace write failed: ${error instanceof Error ? error.message : String(error)}`);
80
- return null;
81
- }
82
- }
83
- /**
84
- * Convenience wrapper: opens a fresh short-lived connection at `root`,
85
- * writes the trace, and closes. Returns the new trace id, or null on any
86
- * failure (fail-soft).
87
- *
88
- * Used at api.getContext and CLI cmdRecall — sites where the block's own
89
- * convention is per-call handles (writeEntry, saveIndex) and the earlier
90
- * audit handles are already closed. NOT used by api.recall, which must
91
- * reuse the caller's open handle (v1.11.5 no-side-effects contract,
92
- * tests/api-recall-no-side-effects.test.ts).
93
- *
94
- * F1 structural fix (replaces the earlier stamp-then-clear design): this
95
- * function does NOT touch the `last_trace_id` meta key. Stamping lived here
96
- * originally, on its own connection, separate from the `last_retrieval_ids`
97
- * write in `saveIndex` — two connections meant two commits, so a crash or
98
- * a failed second write could advance one without the other. LOCKSTEP
99
- * INVARIANT: `last_trace_id` must only ever advance in the SAME write as
100
- * `last_retrieval_ids`. The caller now does: call this function FIRST, set
101
- * `localIndex.last_trace_id` from the returned id, THEN call `saveIndex`
102
- * once — `saveIndex` persists both meta keys in one transaction
103
- * (store.ts). Call sites that trace WITHOUT advancing `last_retrieval_ids`
104
- * (CLI cmdRecall's zero-result path, getContext's empty-result path) simply
105
- * never touch `localIndex` at all — they can't desync by construction.
106
- *
107
- * Fail-soft: never throws, including on connection failure.
108
- */
109
- export function writeRecallTraceAtRoot(root, input) {
110
- let db;
111
- try {
112
- db = openHippoDb(root);
113
- }
114
- catch (error) {
115
- // eslint-disable-next-line no-console
116
- console.error(`[hippo] recall trace connection failed: ${error instanceof Error ? error.message : String(error)}`);
117
- return null;
118
- }
119
- try {
120
- return writeRecallTrace(db, input);
121
- }
122
- finally {
123
- closeHippoDb(db);
124
- }
125
- }
126
- /**
127
- * Record an outcome event against a trace, linking the (query, shown,
128
- * outcome) triple. Called ONLY where the credited ids actually come from
129
- * the last-retrieval mechanism (api.outcomeForLastRecall and any outcome
130
- * flow that resolves its targets from last-retrieval state) or from an
131
- * SDK caller's explicit `traceId` opt — never unconditionally from
132
- * api.outcome, which would mislink an explicit-id caller to a stale,
133
- * unrelated trace.
134
- *
135
- * Lives in its own append-only table, not audit_log metadata: audit_log is
136
- * pruned by `pruneAuditLog`, and pruning must never erase training data.
137
- *
138
- * F4 validation (codex cross-model finding): `traceId`/`memoryIds` reach
139
- * this function from caller-side state (`last_trace_id` / applied outcome
140
- * ids) that can go stale relative to the trace it names — a forgotten
141
- * memory, a tenant switch mid-session, or a race between two callers. Two
142
- * checks run before the insert, both skip silently (console.error one
143
- * line) rather than throw:
144
- * 1. The named trace must exist and belong to `input.tenantId` — a
145
- * tenant mismatch or a dangling id (deleted trace) skips.
146
- * 2. `input.memoryIds` is intersected against the trace's OWN
147
- * `recall_trace_results.memory_id` set — only ids that trace actually
148
- * returned are recorded. An id that was never in this trace's result
149
- * set (stale caller state) is silently dropped rather than recorded
150
- * as a false credit. If the intersection is empty, no row is written.
151
- *
152
- * Fail-soft: never throws.
153
- */
154
- export function recordTraceOutcome(db, input) {
155
- try {
156
- // SAFETY: row shape matches the single `tenant_id` column named in the
157
- // SELECT above; sqlite returns undefined when no row matches.
158
- const trace = db.prepare(`SELECT tenant_id FROM recall_traces WHERE id = ?`).get(input.traceId);
159
- if (!trace || trace.tenant_id !== input.tenantId) {
160
- // eslint-disable-next-line no-console
161
- console.error(`[hippo] recall trace outcome skipped: trace ${input.traceId} missing or tenant mismatch`);
162
- return;
163
- }
164
- // SAFETY: row shape matches the single `memory_id` column named in the
165
- // SELECT above.
166
- const memberRows = db
167
- .prepare(`SELECT memory_id FROM recall_trace_results WHERE trace_id = ?`)
168
- .all(input.traceId);
169
- const members = new Set(memberRows.map((r) => r.memory_id));
170
- const credited = input.memoryIds.filter((id) => members.has(id));
171
- if (credited.length === 0) {
172
- // eslint-disable-next-line no-console
173
- console.error(`[hippo] recall trace outcome skipped: no credited ids intersect trace ${input.traceId}'s results`);
174
- return;
175
- }
176
- db.prepare(`
177
- INSERT INTO recall_trace_outcomes (trace_id, ts, tenant_id, outcome, memory_ids_json)
178
- VALUES (?, ?, ?, ?, ?)
179
- `).run(input.traceId, new Date().toISOString(), input.tenantId, input.outcome, JSON.stringify(credited));
180
- }
181
- catch (error) {
182
- // eslint-disable-next-line no-console
183
- console.error(`[hippo] recall trace outcome write failed: ${error instanceof Error ? error.message : String(error)}`);
184
- }
185
- }
186
- //# sourceMappingURL=recall-trace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recall-trace.js","sourceRoot":"","sources":["../../src/recall-trace.ts"],"names":[],"mappings":"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"}