hippo-memory 1.43.3 → 1.45.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 (534) hide show
  1. package/README.md +14 -12
  2. package/bin/hippo.js +3 -1
  3. package/dist/api.d.ts +21 -21
  4. package/dist/api.js +69 -42
  5. package/dist/audit-prune.js +4 -1
  6. package/dist/audit.d.ts +1 -1
  7. package/dist/audit.js +9 -0
  8. package/dist/autolearn.d.ts +1 -1
  9. package/dist/autolearn.js +2 -1
  10. package/dist/capture.d.ts +11 -10
  11. package/dist/capture.js +22 -30
  12. package/dist/cli.d.ts +4 -0
  13. package/dist/cli.js +309 -171
  14. package/dist/client.d.ts +4 -21
  15. package/dist/client.js +3 -112
  16. package/dist/config.js +2 -1
  17. package/dist/consolidate.d.ts +3 -0
  18. package/dist/consolidate.js +44 -42
  19. package/dist/dag.d.ts +1 -0
  20. package/dist/dag.js +10 -5
  21. package/dist/dashboard.js +7 -3
  22. package/dist/db.js +16 -24
  23. package/dist/dedupe.d.ts +1 -0
  24. package/dist/dedupe.js +4 -7
  25. package/dist/embedding-provider.d.ts +1 -1
  26. package/dist/embedding-provider.js +3 -2
  27. package/dist/embeddings.js +81 -8
  28. package/dist/extract.d.ts +2 -0
  29. package/dist/extract.js +9 -4
  30. package/dist/goals.js +12 -3
  31. package/dist/mcp/server.js +21 -36
  32. package/dist/memory.d.ts +3 -0
  33. package/dist/memory.js +7 -1
  34. package/dist/physics-state.js +4 -1
  35. package/dist/raw-archive.js +5 -2
  36. package/dist/recall-trace.js +4 -1
  37. package/dist/refine-llm.js +3 -2
  38. package/dist/rerankers/jev.js +3 -2
  39. package/dist/rerankers/llm.js +3 -2
  40. package/dist/search.js +3 -3
  41. package/dist/server.d.ts +5 -0
  42. package/dist/server.js +39 -29
  43. package/dist/shared.js +1 -1
  44. package/dist/stdin.d.ts +12 -0
  45. package/dist/stdin.js +41 -0
  46. package/dist/store.d.ts +18 -11
  47. package/dist/store.js +152 -65
  48. package/dist/version.d.ts +4 -6
  49. package/dist/version.js +4 -7
  50. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  51. package/extensions/openclaw-plugin/package.json +1 -1
  52. package/openclaw.plugin.json +1 -1
  53. package/package.json +8 -5
  54. package/dist/ablation.d.ts.map +0 -1
  55. package/dist/ablation.js.map +0 -1
  56. package/dist/ambient.d.ts.map +0 -1
  57. package/dist/ambient.js.map +0 -1
  58. package/dist/api.d.ts.map +0 -1
  59. package/dist/api.js.map +0 -1
  60. package/dist/audit-prune.d.ts.map +0 -1
  61. package/dist/audit-prune.js.map +0 -1
  62. package/dist/audit.d.ts.map +0 -1
  63. package/dist/audit.js.map +0 -1
  64. package/dist/auth.d.ts.map +0 -1
  65. package/dist/auth.js.map +0 -1
  66. package/dist/autolearn.d.ts.map +0 -1
  67. package/dist/autolearn.js.map +0 -1
  68. package/dist/availability.d.ts.map +0 -1
  69. package/dist/availability.js.map +0 -1
  70. package/dist/benchmarks/e1.3/incident-recall-eval.js +0 -78
  71. package/dist/benchmarks/e1.3/incident-recall-eval.js.map +0 -1
  72. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js +0 -103
  73. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js.map +0 -1
  74. package/dist/capture.d.ts.map +0 -1
  75. package/dist/capture.js.map +0 -1
  76. package/dist/card-detail.d.ts.map +0 -1
  77. package/dist/card-detail.js.map +0 -1
  78. package/dist/card.d.ts.map +0 -1
  79. package/dist/card.js.map +0 -1
  80. package/dist/cli.d.ts.map +0 -1
  81. package/dist/cli.js.map +0 -1
  82. package/dist/client.d.ts.map +0 -1
  83. package/dist/client.js.map +0 -1
  84. package/dist/compare.d.ts.map +0 -1
  85. package/dist/compare.js.map +0 -1
  86. package/dist/config.d.ts.map +0 -1
  87. package/dist/config.js.map +0 -1
  88. package/dist/connectors/github/backfill.d.ts.map +0 -1
  89. package/dist/connectors/github/backfill.js.map +0 -1
  90. package/dist/connectors/github/cli-impl.d.ts.map +0 -1
  91. package/dist/connectors/github/cli-impl.js.map +0 -1
  92. package/dist/connectors/github/deletion.d.ts.map +0 -1
  93. package/dist/connectors/github/deletion.js.map +0 -1
  94. package/dist/connectors/github/dlq.d.ts.map +0 -1
  95. package/dist/connectors/github/dlq.js.map +0 -1
  96. package/dist/connectors/github/idempotency.d.ts.map +0 -1
  97. package/dist/connectors/github/idempotency.js.map +0 -1
  98. package/dist/connectors/github/ingest.d.ts.map +0 -1
  99. package/dist/connectors/github/ingest.js.map +0 -1
  100. package/dist/connectors/github/octokit-client.d.ts.map +0 -1
  101. package/dist/connectors/github/octokit-client.js.map +0 -1
  102. package/dist/connectors/github/ratelimit.d.ts.map +0 -1
  103. package/dist/connectors/github/ratelimit.js.map +0 -1
  104. package/dist/connectors/github/scope.d.ts.map +0 -1
  105. package/dist/connectors/github/scope.js.map +0 -1
  106. package/dist/connectors/github/signature.d.ts.map +0 -1
  107. package/dist/connectors/github/signature.js.map +0 -1
  108. package/dist/connectors/github/tenant-routing.d.ts.map +0 -1
  109. package/dist/connectors/github/tenant-routing.js.map +0 -1
  110. package/dist/connectors/github/transform.d.ts.map +0 -1
  111. package/dist/connectors/github/transform.js.map +0 -1
  112. package/dist/connectors/github/types.d.ts.map +0 -1
  113. package/dist/connectors/github/types.js.map +0 -1
  114. package/dist/connectors/slack/backfill.d.ts.map +0 -1
  115. package/dist/connectors/slack/backfill.js.map +0 -1
  116. package/dist/connectors/slack/deletion.d.ts.map +0 -1
  117. package/dist/connectors/slack/deletion.js.map +0 -1
  118. package/dist/connectors/slack/dlq.d.ts.map +0 -1
  119. package/dist/connectors/slack/dlq.js.map +0 -1
  120. package/dist/connectors/slack/idempotency.d.ts.map +0 -1
  121. package/dist/connectors/slack/idempotency.js.map +0 -1
  122. package/dist/connectors/slack/ingest.d.ts.map +0 -1
  123. package/dist/connectors/slack/ingest.js.map +0 -1
  124. package/dist/connectors/slack/ratelimit.d.ts.map +0 -1
  125. package/dist/connectors/slack/ratelimit.js.map +0 -1
  126. package/dist/connectors/slack/scope.d.ts.map +0 -1
  127. package/dist/connectors/slack/scope.js.map +0 -1
  128. package/dist/connectors/slack/signature.d.ts.map +0 -1
  129. package/dist/connectors/slack/signature.js.map +0 -1
  130. package/dist/connectors/slack/tenant-routing.d.ts.map +0 -1
  131. package/dist/connectors/slack/tenant-routing.js.map +0 -1
  132. package/dist/connectors/slack/transform.d.ts.map +0 -1
  133. package/dist/connectors/slack/transform.js.map +0 -1
  134. package/dist/connectors/slack/types.d.ts.map +0 -1
  135. package/dist/connectors/slack/types.js.map +0 -1
  136. package/dist/connectors/slack/web-client.d.ts.map +0 -1
  137. package/dist/connectors/slack/web-client.js.map +0 -1
  138. package/dist/connectors/slack/workspaces.d.ts.map +0 -1
  139. package/dist/connectors/slack/workspaces.js.map +0 -1
  140. package/dist/consolidate.d.ts.map +0 -1
  141. package/dist/consolidate.js.map +0 -1
  142. package/dist/correction-latency.d.ts.map +0 -1
  143. package/dist/correction-latency.js.map +0 -1
  144. package/dist/customer-notes.d.ts.map +0 -1
  145. package/dist/customer-notes.js.map +0 -1
  146. package/dist/dag.d.ts.map +0 -1
  147. package/dist/dag.js.map +0 -1
  148. package/dist/dashboard.d.ts.map +0 -1
  149. package/dist/dashboard.js.map +0 -1
  150. package/dist/db.d.ts.map +0 -1
  151. package/dist/db.js.map +0 -1
  152. package/dist/decisions.d.ts.map +0 -1
  153. package/dist/decisions.js.map +0 -1
  154. package/dist/dedupe.d.ts.map +0 -1
  155. package/dist/dedupe.js.map +0 -1
  156. package/dist/embedding-provider.d.ts.map +0 -1
  157. package/dist/embedding-provider.js.map +0 -1
  158. package/dist/embeddings.d.ts.map +0 -1
  159. package/dist/embeddings.js.map +0 -1
  160. package/dist/eval-suite.d.ts.map +0 -1
  161. package/dist/eval-suite.js.map +0 -1
  162. package/dist/eval.d.ts.map +0 -1
  163. package/dist/eval.js.map +0 -1
  164. package/dist/extensions/openclaw-plugin/index.js.map +0 -1
  165. package/dist/extract.d.ts.map +0 -1
  166. package/dist/extract.js.map +0 -1
  167. package/dist/forward-claim-detector.d.ts.map +0 -1
  168. package/dist/forward-claim-detector.js.map +0 -1
  169. package/dist/goals.d.ts.map +0 -1
  170. package/dist/goals.js.map +0 -1
  171. package/dist/graph-extract.d.ts.map +0 -1
  172. package/dist/graph-extract.js.map +0 -1
  173. package/dist/graph-recall.d.ts.map +0 -1
  174. package/dist/graph-recall.js.map +0 -1
  175. package/dist/graph-stream.d.ts.map +0 -1
  176. package/dist/graph-stream.js.map +0 -1
  177. package/dist/graph-view.d.ts.map +0 -1
  178. package/dist/graph-view.js.map +0 -1
  179. package/dist/graph.d.ts.map +0 -1
  180. package/dist/graph.js.map +0 -1
  181. package/dist/handoff.d.ts.map +0 -1
  182. package/dist/handoff.js.map +0 -1
  183. package/dist/hooks.d.ts.map +0 -1
  184. package/dist/hooks.js.map +0 -1
  185. package/dist/importers.d.ts.map +0 -1
  186. package/dist/importers.js.map +0 -1
  187. package/dist/incidents.d.ts.map +0 -1
  188. package/dist/incidents.js.map +0 -1
  189. package/dist/index.d.ts.map +0 -1
  190. package/dist/index.js.map +0 -1
  191. package/dist/invalidation.d.ts.map +0 -1
  192. package/dist/invalidation.js.map +0 -1
  193. package/dist/mcp/framing.d.ts.map +0 -1
  194. package/dist/mcp/framing.js.map +0 -1
  195. package/dist/mcp/server.d.ts.map +0 -1
  196. package/dist/mcp/server.js.map +0 -1
  197. package/dist/memory-value-weights.d.ts.map +0 -1
  198. package/dist/memory-value-weights.js.map +0 -1
  199. package/dist/memory-value.d.ts.map +0 -1
  200. package/dist/memory-value.js.map +0 -1
  201. package/dist/memory.d.ts.map +0 -1
  202. package/dist/memory.js.map +0 -1
  203. package/dist/multihop.d.ts.map +0 -1
  204. package/dist/multihop.js.map +0 -1
  205. package/dist/owner-validation.d.ts.map +0 -1
  206. package/dist/owner-validation.js.map +0 -1
  207. package/dist/path-context.d.ts.map +0 -1
  208. package/dist/path-context.js.map +0 -1
  209. package/dist/physics-config.d.ts.map +0 -1
  210. package/dist/physics-config.js.map +0 -1
  211. package/dist/physics-state.d.ts.map +0 -1
  212. package/dist/physics-state.js.map +0 -1
  213. package/dist/physics.d.ts.map +0 -1
  214. package/dist/physics.js.map +0 -1
  215. package/dist/policies.d.ts.map +0 -1
  216. package/dist/policies.js.map +0 -1
  217. package/dist/postinstall.d.ts.map +0 -1
  218. package/dist/postinstall.js.map +0 -1
  219. package/dist/predictions.d.ts.map +0 -1
  220. package/dist/predictions.js.map +0 -1
  221. package/dist/processes.d.ts.map +0 -1
  222. package/dist/processes.js.map +0 -1
  223. package/dist/project-briefs.d.ts.map +0 -1
  224. package/dist/project-briefs.js.map +0 -1
  225. package/dist/project-identity.d.ts.map +0 -1
  226. package/dist/project-identity.js.map +0 -1
  227. package/dist/provenance-coverage.d.ts.map +0 -1
  228. package/dist/provenance-coverage.js.map +0 -1
  229. package/dist/rate-limit.d.ts.map +0 -1
  230. package/dist/rate-limit.js.map +0 -1
  231. package/dist/raw-archive-mirror-cleanup.d.ts.map +0 -1
  232. package/dist/raw-archive-mirror-cleanup.js.map +0 -1
  233. package/dist/raw-archive.d.ts.map +0 -1
  234. package/dist/raw-archive.js.map +0 -1
  235. package/dist/recall-history.d.ts.map +0 -1
  236. package/dist/recall-history.js.map +0 -1
  237. package/dist/recall-scope.d.ts.map +0 -1
  238. package/dist/recall-scope.js.map +0 -1
  239. package/dist/recall-trace.d.ts.map +0 -1
  240. package/dist/recall-trace.js.map +0 -1
  241. package/dist/refine-llm.d.ts.map +0 -1
  242. package/dist/refine-llm.js.map +0 -1
  243. package/dist/reject-flow.d.ts.map +0 -1
  244. package/dist/reject-flow.js.map +0 -1
  245. package/dist/rejection.d.ts.map +0 -1
  246. package/dist/rejection.js.map +0 -1
  247. package/dist/replay.d.ts.map +0 -1
  248. package/dist/replay.js.map +0 -1
  249. package/dist/rerankers/cross-encoder.d.ts.map +0 -1
  250. package/dist/rerankers/cross-encoder.js.map +0 -1
  251. package/dist/rerankers/index.d.ts.map +0 -1
  252. package/dist/rerankers/index.js.map +0 -1
  253. package/dist/rerankers/jev.d.ts.map +0 -1
  254. package/dist/rerankers/jev.js.map +0 -1
  255. package/dist/rerankers/llm.d.ts.map +0 -1
  256. package/dist/rerankers/llm.js.map +0 -1
  257. package/dist/rerankers/types.d.ts.map +0 -1
  258. package/dist/rerankers/types.js.map +0 -1
  259. package/dist/rrf.d.ts.map +0 -1
  260. package/dist/rrf.js.map +0 -1
  261. package/dist/salience.d.ts.map +0 -1
  262. package/dist/salience.js.map +0 -1
  263. package/dist/scheduler.d.ts.map +0 -1
  264. package/dist/scheduler.js.map +0 -1
  265. package/dist/scope.d.ts.map +0 -1
  266. package/dist/scope.js.map +0 -1
  267. package/dist/search.d.ts.map +0 -1
  268. package/dist/search.js.map +0 -1
  269. package/dist/secret-detect.d.ts.map +0 -1
  270. package/dist/secret-detect.js.map +0 -1
  271. package/dist/server-detect.d.ts.map +0 -1
  272. package/dist/server-detect.js.map +0 -1
  273. package/dist/server.d.ts.map +0 -1
  274. package/dist/server.js.map +0 -1
  275. package/dist/shared.d.ts.map +0 -1
  276. package/dist/shared.js.map +0 -1
  277. package/dist/skills.d.ts.map +0 -1
  278. package/dist/skills.js.map +0 -1
  279. package/dist/sleep-redact.d.ts +0 -58
  280. package/dist/sleep-redact.d.ts.map +0 -1
  281. package/dist/sleep-redact.js +0 -80
  282. package/dist/sleep-redact.js.map +0 -1
  283. package/dist/src/ablation.js +0 -138
  284. package/dist/src/ablation.js.map +0 -1
  285. package/dist/src/ambient.js +0 -148
  286. package/dist/src/ambient.js.map +0 -1
  287. package/dist/src/api.js +0 -2109
  288. package/dist/src/api.js.map +0 -1
  289. package/dist/src/audit-prune.js +0 -106
  290. package/dist/src/audit-prune.js.map +0 -1
  291. package/dist/src/audit.js +0 -213
  292. package/dist/src/audit.js.map +0 -1
  293. package/dist/src/auth.js +0 -97
  294. package/dist/src/auth.js.map +0 -1
  295. package/dist/src/autolearn.js +0 -174
  296. package/dist/src/autolearn.js.map +0 -1
  297. package/dist/src/availability.js +0 -94
  298. package/dist/src/availability.js.map +0 -1
  299. package/dist/src/capture.js +0 -1354
  300. package/dist/src/capture.js.map +0 -1
  301. package/dist/src/card-detail.js +0 -15
  302. package/dist/src/card-detail.js.map +0 -1
  303. package/dist/src/card.js +0 -19
  304. package/dist/src/card.js.map +0 -1
  305. package/dist/src/cli.js +0 -9328
  306. package/dist/src/cli.js.map +0 -1
  307. package/dist/src/client.js +0 -237
  308. package/dist/src/client.js.map +0 -1
  309. package/dist/src/compare.js +0 -122
  310. package/dist/src/compare.js.map +0 -1
  311. package/dist/src/config.js +0 -135
  312. package/dist/src/config.js.map +0 -1
  313. package/dist/src/connectors/github/backfill.js +0 -281
  314. package/dist/src/connectors/github/backfill.js.map +0 -1
  315. package/dist/src/connectors/github/cli-impl.js +0 -234
  316. package/dist/src/connectors/github/cli-impl.js.map +0 -1
  317. package/dist/src/connectors/github/deletion.js +0 -85
  318. package/dist/src/connectors/github/deletion.js.map +0 -1
  319. package/dist/src/connectors/github/dlq.js +0 -190
  320. package/dist/src/connectors/github/dlq.js.map +0 -1
  321. package/dist/src/connectors/github/idempotency.js +0 -27
  322. package/dist/src/connectors/github/idempotency.js.map +0 -1
  323. package/dist/src/connectors/github/ingest.js +0 -156
  324. package/dist/src/connectors/github/ingest.js.map +0 -1
  325. package/dist/src/connectors/github/octokit-client.js +0 -70
  326. package/dist/src/connectors/github/octokit-client.js.map +0 -1
  327. package/dist/src/connectors/github/ratelimit.js +0 -31
  328. package/dist/src/connectors/github/ratelimit.js.map +0 -1
  329. package/dist/src/connectors/github/scope.js +0 -13
  330. package/dist/src/connectors/github/scope.js.map +0 -1
  331. package/dist/src/connectors/github/signature.js +0 -81
  332. package/dist/src/connectors/github/signature.js.map +0 -1
  333. package/dist/src/connectors/github/tenant-routing.js +0 -69
  334. package/dist/src/connectors/github/tenant-routing.js.map +0 -1
  335. package/dist/src/connectors/github/transform.js +0 -103
  336. package/dist/src/connectors/github/transform.js.map +0 -1
  337. package/dist/src/connectors/github/types.js +0 -100
  338. package/dist/src/connectors/github/types.js.map +0 -1
  339. package/dist/src/connectors/slack/backfill.js +0 -78
  340. package/dist/src/connectors/slack/backfill.js.map +0 -1
  341. package/dist/src/connectors/slack/deletion.js +0 -59
  342. package/dist/src/connectors/slack/deletion.js.map +0 -1
  343. package/dist/src/connectors/slack/dlq.js +0 -224
  344. package/dist/src/connectors/slack/dlq.js.map +0 -1
  345. package/dist/src/connectors/slack/idempotency.js +0 -31
  346. package/dist/src/connectors/slack/idempotency.js.map +0 -1
  347. package/dist/src/connectors/slack/ingest.js +0 -109
  348. package/dist/src/connectors/slack/ingest.js.map +0 -1
  349. package/dist/src/connectors/slack/ratelimit.js +0 -18
  350. package/dist/src/connectors/slack/ratelimit.js.map +0 -1
  351. package/dist/src/connectors/slack/scope.js +0 -13
  352. package/dist/src/connectors/slack/scope.js.map +0 -1
  353. package/dist/src/connectors/slack/signature.js +0 -27
  354. package/dist/src/connectors/slack/signature.js.map +0 -1
  355. package/dist/src/connectors/slack/tenant-routing.js +0 -41
  356. package/dist/src/connectors/slack/tenant-routing.js.map +0 -1
  357. package/dist/src/connectors/slack/transform.js +0 -47
  358. package/dist/src/connectors/slack/transform.js.map +0 -1
  359. package/dist/src/connectors/slack/types.js +0 -35
  360. package/dist/src/connectors/slack/types.js.map +0 -1
  361. package/dist/src/connectors/slack/web-client.js +0 -43
  362. package/dist/src/connectors/slack/web-client.js.map +0 -1
  363. package/dist/src/connectors/slack/workspaces.js +0 -62
  364. package/dist/src/connectors/slack/workspaces.js.map +0 -1
  365. package/dist/src/consolidate.js +0 -978
  366. package/dist/src/consolidate.js.map +0 -1
  367. package/dist/src/correction-latency.js +0 -74
  368. package/dist/src/correction-latency.js.map +0 -1
  369. package/dist/src/customer-notes.js +0 -325
  370. package/dist/src/customer-notes.js.map +0 -1
  371. package/dist/src/dag.js +0 -352
  372. package/dist/src/dag.js.map +0 -1
  373. package/dist/src/dashboard.js +0 -258
  374. package/dist/src/dashboard.js.map +0 -1
  375. package/dist/src/db.js +0 -2728
  376. package/dist/src/db.js.map +0 -1
  377. package/dist/src/decisions.js +0 -304
  378. package/dist/src/decisions.js.map +0 -1
  379. package/dist/src/dedupe.js +0 -141
  380. package/dist/src/dedupe.js.map +0 -1
  381. package/dist/src/embedding-provider.js +0 -314
  382. package/dist/src/embedding-provider.js.map +0 -1
  383. package/dist/src/embeddings.js +0 -543
  384. package/dist/src/embeddings.js.map +0 -1
  385. package/dist/src/eval-suite.js +0 -294
  386. package/dist/src/eval-suite.js.map +0 -1
  387. package/dist/src/eval.js +0 -187
  388. package/dist/src/eval.js.map +0 -1
  389. package/dist/src/extract.js +0 -117
  390. package/dist/src/extract.js.map +0 -1
  391. package/dist/src/forward-claim-detector.js +0 -117
  392. package/dist/src/forward-claim-detector.js.map +0 -1
  393. package/dist/src/goals.js +0 -390
  394. package/dist/src/goals.js.map +0 -1
  395. package/dist/src/graph-extract.js +0 -314
  396. package/dist/src/graph-extract.js.map +0 -1
  397. package/dist/src/graph-recall.js +0 -277
  398. package/dist/src/graph-recall.js.map +0 -1
  399. package/dist/src/graph-stream.js +0 -176
  400. package/dist/src/graph-stream.js.map +0 -1
  401. package/dist/src/graph-view.js +0 -310
  402. package/dist/src/graph-view.js.map +0 -1
  403. package/dist/src/graph.js +0 -762
  404. package/dist/src/graph.js.map +0 -1
  405. package/dist/src/handoff.js +0 -65
  406. package/dist/src/handoff.js.map +0 -1
  407. package/dist/src/hooks.js +0 -926
  408. package/dist/src/hooks.js.map +0 -1
  409. package/dist/src/importers.js +0 -881
  410. package/dist/src/importers.js.map +0 -1
  411. package/dist/src/incidents.js +0 -336
  412. package/dist/src/incidents.js.map +0 -1
  413. package/dist/src/index.js +0 -32
  414. package/dist/src/index.js.map +0 -1
  415. package/dist/src/invalidation.js +0 -129
  416. package/dist/src/invalidation.js.map +0 -1
  417. package/dist/src/mcp/framing.js +0 -45
  418. package/dist/src/mcp/framing.js.map +0 -1
  419. package/dist/src/mcp/server.js +0 -1298
  420. package/dist/src/mcp/server.js.map +0 -1
  421. package/dist/src/memory-value-weights.js +0 -31
  422. package/dist/src/memory-value-weights.js.map +0 -1
  423. package/dist/src/memory-value.js +0 -261
  424. package/dist/src/memory-value.js.map +0 -1
  425. package/dist/src/memory.js +0 -425
  426. package/dist/src/memory.js.map +0 -1
  427. package/dist/src/multihop.js +0 -35
  428. package/dist/src/multihop.js.map +0 -1
  429. package/dist/src/owner-validation.js +0 -56
  430. package/dist/src/owner-validation.js.map +0 -1
  431. package/dist/src/path-context.js +0 -48
  432. package/dist/src/path-context.js.map +0 -1
  433. package/dist/src/physics-config.js +0 -26
  434. package/dist/src/physics-config.js.map +0 -1
  435. package/dist/src/physics-state.js +0 -169
  436. package/dist/src/physics-state.js.map +0 -1
  437. package/dist/src/physics.js +0 -378
  438. package/dist/src/physics.js.map +0 -1
  439. package/dist/src/policies.js +0 -414
  440. package/dist/src/policies.js.map +0 -1
  441. package/dist/src/postinstall.js +0 -101
  442. package/dist/src/postinstall.js.map +0 -1
  443. package/dist/src/predictions.js +0 -629
  444. package/dist/src/predictions.js.map +0 -1
  445. package/dist/src/processes.js +0 -349
  446. package/dist/src/processes.js.map +0 -1
  447. package/dist/src/project-briefs.js +0 -492
  448. package/dist/src/project-briefs.js.map +0 -1
  449. package/dist/src/project-identity.js +0 -200
  450. package/dist/src/project-identity.js.map +0 -1
  451. package/dist/src/provenance-coverage.js +0 -23
  452. package/dist/src/provenance-coverage.js.map +0 -1
  453. package/dist/src/rate-limit.js +0 -60
  454. package/dist/src/rate-limit.js.map +0 -1
  455. package/dist/src/raw-archive-mirror-cleanup.js +0 -55
  456. package/dist/src/raw-archive-mirror-cleanup.js.map +0 -1
  457. package/dist/src/raw-archive.js +0 -88
  458. package/dist/src/raw-archive.js.map +0 -1
  459. package/dist/src/recall-history.js +0 -235
  460. package/dist/src/recall-history.js.map +0 -1
  461. package/dist/src/recall-scope.js +0 -89
  462. package/dist/src/recall-scope.js.map +0 -1
  463. package/dist/src/recall-trace.js +0 -183
  464. package/dist/src/recall-trace.js.map +0 -1
  465. package/dist/src/refine-llm.js +0 -156
  466. package/dist/src/refine-llm.js.map +0 -1
  467. package/dist/src/reject-flow.js +0 -209
  468. package/dist/src/reject-flow.js.map +0 -1
  469. package/dist/src/rejection.js +0 -160
  470. package/dist/src/rejection.js.map +0 -1
  471. package/dist/src/replay.js +0 -122
  472. package/dist/src/replay.js.map +0 -1
  473. package/dist/src/rerankers/cross-encoder.js +0 -137
  474. package/dist/src/rerankers/cross-encoder.js.map +0 -1
  475. package/dist/src/rerankers/index.js +0 -20
  476. package/dist/src/rerankers/index.js.map +0 -1
  477. package/dist/src/rerankers/jev.js +0 -119
  478. package/dist/src/rerankers/jev.js.map +0 -1
  479. package/dist/src/rerankers/llm.js +0 -80
  480. package/dist/src/rerankers/llm.js.map +0 -1
  481. package/dist/src/rerankers/types.js +0 -2
  482. package/dist/src/rerankers/types.js.map +0 -1
  483. package/dist/src/rrf.js +0 -61
  484. package/dist/src/rrf.js.map +0 -1
  485. package/dist/src/salience.js +0 -74
  486. package/dist/src/salience.js.map +0 -1
  487. package/dist/src/scheduler.js +0 -77
  488. package/dist/src/scheduler.js.map +0 -1
  489. package/dist/src/scope.js +0 -35
  490. package/dist/src/scope.js.map +0 -1
  491. package/dist/src/search.js +0 -1003
  492. package/dist/src/search.js.map +0 -1
  493. package/dist/src/secret-detect.js +0 -95
  494. package/dist/src/secret-detect.js.map +0 -1
  495. package/dist/src/server-detect.js +0 -231
  496. package/dist/src/server-detect.js.map +0 -1
  497. package/dist/src/server.js +0 -3255
  498. package/dist/src/server.js.map +0 -1
  499. package/dist/src/shared.js +0 -502
  500. package/dist/src/shared.js.map +0 -1
  501. package/dist/src/skills.js +0 -346
  502. package/dist/src/skills.js.map +0 -1
  503. package/dist/src/sleep-redact.js +0 -80
  504. package/dist/src/sleep-redact.js.map +0 -1
  505. package/dist/src/sso.js +0 -22
  506. package/dist/src/sso.js.map +0 -1
  507. package/dist/src/store.js +0 -3743
  508. package/dist/src/store.js.map +0 -1
  509. package/dist/src/tenant.js +0 -17
  510. package/dist/src/tenant.js.map +0 -1
  511. package/dist/src/trace.js +0 -72
  512. package/dist/src/trace.js.map +0 -1
  513. package/dist/src/version.js +0 -40
  514. package/dist/src/version.js.map +0 -1
  515. package/dist/src/working-memory.js +0 -157
  516. package/dist/src/working-memory.js.map +0 -1
  517. package/dist/src/yaml.js +0 -107
  518. package/dist/src/yaml.js.map +0 -1
  519. package/dist/sso.d.ts +0 -13
  520. package/dist/sso.d.ts.map +0 -1
  521. package/dist/sso.js +0 -22
  522. package/dist/sso.js.map +0 -1
  523. package/dist/store.d.ts.map +0 -1
  524. package/dist/store.js.map +0 -1
  525. package/dist/tenant.d.ts.map +0 -1
  526. package/dist/tenant.js.map +0 -1
  527. package/dist/trace.d.ts.map +0 -1
  528. package/dist/trace.js.map +0 -1
  529. package/dist/version.d.ts.map +0 -1
  530. package/dist/version.js.map +0 -1
  531. package/dist/working-memory.d.ts.map +0 -1
  532. package/dist/working-memory.js.map +0 -1
  533. package/dist/yaml.d.ts.map +0 -1
  534. 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":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAkDH,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AACvC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACrB,mEAAmE;IACnE,qEAAqE;IACrE,4DAA4D;IAC5D,iEAAiE;IACjE,sEAAsE;IACtE,uBAAuB;IACvB,iEAAiE;IACjE,qEAAqE;IACrE,oEAAoE;IACpE,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IACtE,uCAAuC;IACvC,MAAM,UAAU,GAAG,KAAK;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;SACtC,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,oEAAoE;IACpE,oEAAoE;IACpE,gEAAgE;IAChE,+DAA+D;IAC/D,yDAAyD;IACzD,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACzD,kEAAkE;IAClE,iEAAiE;IACjE,oEAAoE;IACpE,gEAAgE;IAChE,wDAAwD;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,0DAA0D;IAC1D,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,8DAA8D;QAC9D,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,mDAAmD;IACnD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA8B,EAC9B,gBAAwB,EACxB,kBAAiC,EACjC,OAA4B,EAAE;IAE9B,IAAI,kBAAkB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC;IAChE,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,4BAA4B,CAAC;IACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IAEnD,sEAAsE;IACtE,iEAAiE;IACjE,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,KAAK,kBAAkB,EAAE,CAAC;YAC7C,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,sCAAsC;IACtC,mBAAmB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC;IAC5C,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAC/B,OAAO;YACL,MAAM,EAAE,kBAAkB;YAC1B,QAAQ,EAAE,kBAAkB;YAC5B,UAAU;YACV,OAAO,EAAE,UAAU,kBAAkB,gCAAgC,UAAU,wEAAwE;YACvJ,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,SAAS,KAAK,gBAAgB,IAAI,KAAK,CAAC,WAAW,KAAK,kBAAkB,EAAE,CAAC;YACrF,OAAO;gBACL,MAAM,EAAE,cAAc;gBACtB,QAAQ,EAAE,kBAAkB;gBAC5B,OAAO,EAAE,wEAAwE,kBAAkB,4CAA4C;gBAC/I,MAAM,EAAE,eAAe;aACxB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACb,OAAO,GAAyB,EAAE,CAAC;IAE3C,MAAM,CAAC,KAAyB;QAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,SAAiB;IACjE,OAAO,GAAG,QAAQ,OAAO,SAAS,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,GAA4B,EAC5B,GAAW,EACX,cAAsB,oBAAoB;IAE1C,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,QAAQ,EAAE,CAAC;QACb,oEAAoE;QACpE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAgB,EAChB,SAAiB,EACjB,WAA0B,EAC1B,UAAmB;IAEnB,MAAM,KAAK,GAAuB;QAChC,SAAS;QACT,WAAW;QACX,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC7B,CAAC;IACF,IAAI,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC"}
@@ -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,183 +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
- db.exec('ROLLBACK');
71
- throw error;
72
- }
73
- }
74
- catch (error) {
75
- // eslint-disable-next-line no-console
76
- console.error(`[hippo] recall trace write failed: ${error instanceof Error ? error.message : String(error)}`);
77
- return null;
78
- }
79
- }
80
- /**
81
- * Convenience wrapper: opens a fresh short-lived connection at `root`,
82
- * writes the trace, and closes. Returns the new trace id, or null on any
83
- * failure (fail-soft).
84
- *
85
- * Used at api.getContext and CLI cmdRecall — sites where the block's own
86
- * convention is per-call handles (writeEntry, saveIndex) and the earlier
87
- * audit handles are already closed. NOT used by api.recall, which must
88
- * reuse the caller's open handle (v1.11.5 no-side-effects contract,
89
- * tests/api-recall-no-side-effects.test.ts).
90
- *
91
- * F1 structural fix (replaces the earlier stamp-then-clear design): this
92
- * function does NOT touch the `last_trace_id` meta key. Stamping lived here
93
- * originally, on its own connection, separate from the `last_retrieval_ids`
94
- * write in `saveIndex` — two connections meant two commits, so a crash or
95
- * a failed second write could advance one without the other. LOCKSTEP
96
- * INVARIANT: `last_trace_id` must only ever advance in the SAME write as
97
- * `last_retrieval_ids`. The caller now does: call this function FIRST, set
98
- * `localIndex.last_trace_id` from the returned id, THEN call `saveIndex`
99
- * once — `saveIndex` persists both meta keys in one transaction
100
- * (store.ts). Call sites that trace WITHOUT advancing `last_retrieval_ids`
101
- * (CLI cmdRecall's zero-result path, getContext's empty-result path) simply
102
- * never touch `localIndex` at all — they can't desync by construction.
103
- *
104
- * Fail-soft: never throws, including on connection failure.
105
- */
106
- export function writeRecallTraceAtRoot(root, input) {
107
- let db;
108
- try {
109
- db = openHippoDb(root);
110
- }
111
- catch (error) {
112
- // eslint-disable-next-line no-console
113
- console.error(`[hippo] recall trace connection failed: ${error instanceof Error ? error.message : String(error)}`);
114
- return null;
115
- }
116
- try {
117
- return writeRecallTrace(db, input);
118
- }
119
- finally {
120
- closeHippoDb(db);
121
- }
122
- }
123
- /**
124
- * Record an outcome event against a trace, linking the (query, shown,
125
- * outcome) triple. Called ONLY where the credited ids actually come from
126
- * the last-retrieval mechanism (api.outcomeForLastRecall and any outcome
127
- * flow that resolves its targets from last-retrieval state) or from an
128
- * SDK caller's explicit `traceId` opt — never unconditionally from
129
- * api.outcome, which would mislink an explicit-id caller to a stale,
130
- * unrelated trace.
131
- *
132
- * Lives in its own append-only table, not audit_log metadata: audit_log is
133
- * pruned by `pruneAuditLog`, and pruning must never erase training data.
134
- *
135
- * F4 validation (codex cross-model finding): `traceId`/`memoryIds` reach
136
- * this function from caller-side state (`last_trace_id` / applied outcome
137
- * ids) that can go stale relative to the trace it names — a forgotten
138
- * memory, a tenant switch mid-session, or a race between two callers. Two
139
- * checks run before the insert, both skip silently (console.error one
140
- * line) rather than throw:
141
- * 1. The named trace must exist and belong to `input.tenantId` — a
142
- * tenant mismatch or a dangling id (deleted trace) skips.
143
- * 2. `input.memoryIds` is intersected against the trace's OWN
144
- * `recall_trace_results.memory_id` set — only ids that trace actually
145
- * returned are recorded. An id that was never in this trace's result
146
- * set (stale caller state) is silently dropped rather than recorded
147
- * as a false credit. If the intersection is empty, no row is written.
148
- *
149
- * Fail-soft: never throws.
150
- */
151
- export function recordTraceOutcome(db, input) {
152
- try {
153
- // SAFETY: row shape matches the single `tenant_id` column named in the
154
- // SELECT above; sqlite returns undefined when no row matches.
155
- const trace = db.prepare(`SELECT tenant_id FROM recall_traces WHERE id = ?`).get(input.traceId);
156
- if (!trace || trace.tenant_id !== input.tenantId) {
157
- // eslint-disable-next-line no-console
158
- console.error(`[hippo] recall trace outcome skipped: trace ${input.traceId} missing or tenant mismatch`);
159
- return;
160
- }
161
- // SAFETY: row shape matches the single `memory_id` column named in the
162
- // SELECT above.
163
- const memberRows = db
164
- .prepare(`SELECT memory_id FROM recall_trace_results WHERE trace_id = ?`)
165
- .all(input.traceId);
166
- const members = new Set(memberRows.map((r) => r.memory_id));
167
- const credited = input.memoryIds.filter((id) => members.has(id));
168
- if (credited.length === 0) {
169
- // eslint-disable-next-line no-console
170
- console.error(`[hippo] recall trace outcome skipped: no credited ids intersect trace ${input.traceId}'s results`);
171
- return;
172
- }
173
- db.prepare(`
174
- INSERT INTO recall_trace_outcomes (trace_id, ts, tenant_id, outcome, memory_ids_json)
175
- VALUES (?, ?, ?, ?, ?)
176
- `).run(input.traceId, new Date().toISOString(), input.tenantId, input.outcome, JSON.stringify(credited));
177
- }
178
- catch (error) {
179
- // eslint-disable-next-line no-console
180
- console.error(`[hippo] recall trace outcome write failed: ${error instanceof Error ? error.message : String(error)}`);
181
- }
182
- }
183
- //# 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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"}