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,425 +0,0 @@
1
- /**
2
- * Core data model for Hippo memory entries.
3
- * Based on the strength formula from PLAN.md.
4
- */
5
- import { randomUUID } from 'crypto';
6
- import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated, evalNow, } from './ablation.js';
7
- export var Layer;
8
- (function (Layer) {
9
- Layer["Buffer"] = "buffer";
10
- Layer["Episodic"] = "episodic";
11
- Layer["Semantic"] = "semantic";
12
- Layer["Trace"] = "trace";
13
- })(Layer || (Layer = {}));
14
- export const DECISION_HALF_LIFE_DAYS = 90;
15
- export const INCIDENT_HALF_LIFE_DAYS = 90;
16
- export const PROCESS_HALF_LIFE_DAYS = 90;
17
- export const POLICY_HALF_LIFE_DAYS = 90;
18
- export const SKILL_HALF_LIFE_DAYS = 90;
19
- export const PROJECT_BRIEF_HALF_LIFE_DAYS = 90;
20
- export const CUSTOMER_NOTE_HALF_LIFE_DAYS = 90;
21
- // Emotional multipliers from PLAN.md.
22
- //
23
- // v1.13.5 / J5 loss-aversion calibration (Lovallo-Kahneman TFAS empirics:
24
- // losses ~2x larger than equivalent gains). Defaults rebalanced:
25
- // - positive (success-tagged): 1.3 -> 1.0
26
- // - negative (error-tagged): 1.5 -> 2.0
27
- // - critical stays at 2.0 (literal roadmap reading; J5 silent on critical;
28
- // ranking signal in consolidate.ts/salience.ts/ambient.ts unchanged)
29
- // - neutral stays at 1.0
30
- //
31
- // `negative` is further scaled per-process by HIPPO_LOSS_AVERSION_RATIO
32
- // (env var, default 1.0; see getLossAversionRatio + applyLossAversionRatio).
33
- const EMOTIONAL_MULTIPLIERS = {
34
- neutral: 1.0,
35
- positive: 1.0,
36
- negative: 2.0, // error-tagged
37
- critical: 2.0,
38
- };
39
- /**
40
- * v1.13.5 / J5 — module-level lazy-cached read of HIPPO_LOSS_AVERSION_RATIO.
41
- *
42
- * `calculateStrength` is called per-entry inside hot recall loops
43
- * (api.ts/consolidate.ts/search.ts), so a per-call `process.env` lookup
44
- * would multiply N entries by M recalls of lookup cost. Lazy module-cache
45
- * reads the env ONCE on first call and memoizes for the process lifetime.
46
- * Test isolation via `_resetLossAversionRatioCacheForTests()` below.
47
- */
48
- /**
49
- * v1.13.5 minimum acceptable ratio. Below this, the negative multiplier
50
- * (2.0 * ratio) becomes small enough that calculateStrength * decay can fall
51
- * below `DECAY_THRESHOLD = 0.05` in `src/consolidate.ts:146`, which would
52
- * permanently delete non-pinned error-tagged memories on the next sleep
53
- * cycle. 0.5 is chosen as the floor because (a) it recovers the v1.13.4
54
- * effective multiplier (2.0 * 0.5 = 1.0 + the negative premium, i.e. 1.5x
55
- * the v1.13.4 default), and (b) below this the user is asking for LESS
56
- * loss aversion than has ever shipped — that's outside the supported
57
- * tuning range. See codex-review-critic round 1 P1.
58
- */
59
- const LOSS_AVERSION_RATIO_MIN = 0.5;
60
- /**
61
- * Validation policy (v1.13.5 + independent-review round-1 HIGH + codex
62
- * round-1 P1 folds):
63
- * - Valid: finite numbers >= 0.5.
64
- * - Invalid (silent fallback to 1.0): empty string, non-numeric,
65
- * numbers below 0.5 (including 0 and negatives), NaN, +/-Infinity.
66
- * Silent because opt-in env vars should not crash production recall
67
- * on a typo.
68
- *
69
- * Why the 0.5 floor and not 0:
70
- * - codex-review-critic round 1 P1: rejecting only `0` (the original
71
- * HIGH fold) leaves the same silent data-loss surface for any ratio
72
- * below ~0.025 (and worse for aged memories, where even ratio=0.25
73
- * can produce strength < DECAY_THRESHOLD = 0.05 in consolidate.ts).
74
- * Floor at the v1.13.4-equivalent (0.5) so the env var's tuning
75
- * range never crosses into the deletion regime.
76
- * - Users wanting LESS loss aversion than v1.13.4's 1.5 multiplier
77
- * should reconsider the design intent of J5 (the calibration was
78
- * toward MORE loss aversion, not less). If a future use case
79
- * genuinely needs ratio < 0.5, the right path is a separate
80
- * `HIPPO_NEGATIVE_MULTIPLIER` env override (deferred to J5-v2).
81
- */
82
- let _lossAversionRatioCache;
83
- function getLossAversionRatio() {
84
- if (_lossAversionRatioCache !== undefined)
85
- return _lossAversionRatioCache;
86
- const raw = process.env.HIPPO_LOSS_AVERSION_RATIO;
87
- if (raw === undefined || raw === '') {
88
- _lossAversionRatioCache = 1.0;
89
- return 1.0;
90
- }
91
- const parsed = Number(raw);
92
- // Finite + >= 0.5 floor. Anything below 0.5 silently falls back to 1.0
93
- // to avoid the consolidation-deletion vector (see JSDoc above).
94
- if (!Number.isFinite(parsed) || parsed < LOSS_AVERSION_RATIO_MIN) {
95
- _lossAversionRatioCache = 1.0;
96
- return 1.0;
97
- }
98
- _lossAversionRatioCache = parsed;
99
- return parsed;
100
- }
101
- /**
102
- * Test-only helper. Tests that mutate `process.env.HIPPO_LOSS_AVERSION_RATIO`
103
- * MUST call this in BOTH `beforeEach` AND `afterEach`:
104
- * - beforeEach: clear any stale cache from a previous test before setting
105
- * the env var for this test.
106
- * - afterEach: clear the cache so the next test (which may not set the env
107
- * var) reads the clean default instead of this test's value.
108
- * See `tests/emotional-multipliers-j5.test.ts` for the canonical pattern.
109
- */
110
- export function _resetLossAversionRatioCacheForTests() {
111
- _lossAversionRatioCache = undefined;
112
- }
113
- /**
114
- * Apply the loss-aversion ratio scalar to the `negative` multiplier ONLY.
115
- * Other valences (positive, critical, neutral) pass through unchanged.
116
- * `critical` is deliberately NOT scaled: J5 roadmap is silent on critical;
117
- * its multiplier is left alone so the calibration only touches the
118
- * specific empirical claim (TFAS 2x losses-vs-gains).
119
- */
120
- function applyLossAversionRatio(valence, baseMultiplier) {
121
- if (valence !== 'negative')
122
- return baseMultiplier;
123
- return baseMultiplier * getLossAversionRatio();
124
- }
125
- /**
126
- * Compute the reward factor from cumulative outcome counts.
127
- *
128
- * reward_ratio = (positive - negative) / (positive + negative + 1)
129
- * reward_factor = 1 + 0.5 * reward_ratio
130
- *
131
- * Range: (0.5, 1.5). Neutral (no outcomes) returns 1.0.
132
- * Modulates effective half-life: memories with consistent positive outcomes
133
- * decay slower; consistent negative outcomes decay faster.
134
- */
135
- export function calculateRewardFactor(entry) {
136
- // EVAL-ONLY ablation (see ablation.ts): the slow outcome channel.
137
- if (isOutcomeSlowAblated())
138
- return 1.0;
139
- const pos = entry.outcome_positive ?? 0;
140
- const neg = entry.outcome_negative ?? 0;
141
- if (pos === 0 && neg === 0)
142
- return 1.0;
143
- const ratio = (pos - neg) / (pos + neg + 1);
144
- return 1 + 0.5 * ratio;
145
- }
146
- /**
147
- * Calculate current strength at a given time.
148
- * strength(t) = base_strength * decay * retrieval_boost * emotional_multiplier
149
- *
150
- * Decay basis modes:
151
- * - clock: classic wall-clock decay (daysSince / halfLife)
152
- * - session: decay by sleep cycles instead of days (sessionsSince / halfLife)
153
- * - adaptive: wall-clock decay with half-life scaled by session frequency
154
- *
155
- * Pinned memories always return 1.0 (no decay).
156
- */
157
- export function calculateStrength(entry,
158
- // evalNow(): the real clock unless HIPPO_FAKE_NOW is set (eval-only,
159
- // simulated-time protocols; see ablation.ts). Explicit `now` always wins.
160
- now = evalNow(), options = {}) {
161
- if (entry.pinned)
162
- return 1.0;
163
- // EVAL-ONLY ablation (see ablation.ts): with recall-strengthening ablated,
164
- // anchor decay at CREATION, not last_retrieved. A never-strengthened memory
165
- // decays from when it was made; using last_retrieved would let clock resets
166
- // persisted by PRIOR unflagged runs leak strengthening into an ablated
167
- // arm's rankings (codex P2). Identity on fresh stores (created ==
168
- // last_retrieved at write). Prior-run half_life increments are NOT
169
- // reconstructed - see the ablation.ts caveat (fresh stores per arm).
170
- const lastRetrieved = new Date(isRecallBoostAblated() ? entry.created : entry.last_retrieved);
171
- const daysSince = (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24);
172
- // Reward-proportional half-life modulation
173
- const rewardFactor = calculateRewardFactor(entry);
174
- let effectiveHalfLife = entry.half_life_days * rewardFactor;
175
- // Guard: zero half-life causes 0/0 = NaN in the exponent
176
- if (effectiveHalfLife <= 0)
177
- return 0.0;
178
- const basis = options.decayBasis ?? 'clock';
179
- let decayExponent;
180
- if (basis === 'session') {
181
- // Decay by session count: each sleep cycle = 1 "day" in the decay formula.
182
- // Estimate sessions since last retrieval from wall-clock time and avg interval.
183
- const avgInterval = options.avgSessionIntervalDays ?? 1;
184
- const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
185
- decayExponent = sessionsSince / effectiveHalfLife;
186
- }
187
- else if (basis === 'adaptive') {
188
- // Scale half-life by session frequency: infrequent agents get longer half-lives
189
- const avgInterval = options.avgSessionIntervalDays ?? 0;
190
- if (avgInterval > 1) {
191
- effectiveHalfLife *= avgInterval;
192
- }
193
- decayExponent = daysSince / effectiveHalfLife;
194
- }
195
- else {
196
- // clock: classic wall-clock decay
197
- decayExponent = daysSince / effectiveHalfLife;
198
- }
199
- // EVAL-ONLY ablation (see ablation.ts): decay term := 1. NOTE the [0,1]
200
- // clamp below then caps retrievalBoost at baseline - see ablation.ts
201
- // formula note.
202
- const decay = isDecayAblated() ? 1.0 : Math.pow(0.5, decayExponent);
203
- // Retrieval boost: 1 + 0.1 * log2(retrieval_count + 1)
204
- // EVAL-ONLY ablation (see ablation.ts): the recall-boost flag neutralizes
205
- // the READ side too, so a store with PRIOR retrieval history (counts > 0
206
- // written before the flag was set) does not leak strengthening into an
207
- // ablated arm's rankings (codex P2).
208
- const retrievalBoost = isRecallBoostAblated()
209
- ? 1.0
210
- : 1 + 0.1 * Math.log2(entry.retrieval_count + 1);
211
- // Emotional multiplier
212
- // v1.13.5 / J5: apply HIPPO_LOSS_AVERSION_RATIO to the negative multiplier
213
- // ONLY (positive/critical/neutral pass through unchanged). Lazy module-cache
214
- // means this is a single Map lookup + one numeric multiply, not a per-call
215
- // process.env read.
216
- const baseMultiplier = EMOTIONAL_MULTIPLIERS[entry.emotional_valence] ?? 1.0;
217
- const emotionalMultiplier = applyLossAversionRatio(entry.emotional_valence, baseMultiplier);
218
- const raw = decay * retrievalBoost * emotionalMultiplier;
219
- // Clamp to [0, 1] with NaN guard
220
- const clamped = Math.min(1.0, Math.max(0.0, raw));
221
- return Number.isFinite(clamped) ? clamped : 0.0;
222
- }
223
- /**
224
- * Derive half-life based on signals, as per PLAN.md table.
225
- */
226
- export function deriveHalfLife(base, entry) {
227
- let hl = base;
228
- // Error-tagged: 2x half-life
229
- if (entry.tags?.includes('error')) {
230
- hl *= 2;
231
- }
232
- // High schema fit: consolidates faster (1.5x)
233
- if (entry.schema_fit !== undefined && entry.schema_fit > 0.7) {
234
- hl *= 1.5;
235
- }
236
- // Low schema fit: decay faster (0.5x)
237
- if (entry.schema_fit !== undefined && entry.schema_fit < 0.3) {
238
- hl *= 0.5;
239
- }
240
- return hl;
241
- }
242
- /**
243
- * Apply outcome feedback to a memory entry.
244
- *
245
- * Increments outcome_positive or outcome_negative counters.
246
- * The reward factor in calculateStrength() uses these counts to
247
- * continuously modulate the effective half-life:
248
- * reward_ratio = (pos - neg) / (pos + neg + 1)
249
- * reward_factor = 1 + 0.5 * reward_ratio // range (0.5, 1.5)
250
- * effective_hl = half_life_days * reward_factor
251
- *
252
- * No fixed half-life delta. Decay rate adjusts proportionally to
253
- * cumulative reward signal, inspired by R-STDP in spiking networks.
254
- */
255
- export function applyOutcome(entry, good) {
256
- const updated = {
257
- ...entry,
258
- outcome_score: good ? 1 : -1,
259
- outcome_positive: (entry.outcome_positive ?? 0) + (good ? 1 : 0),
260
- outcome_negative: (entry.outcome_negative ?? 0) + (good ? 0 : 1),
261
- };
262
- updated.strength = calculateStrength(updated);
263
- return updated;
264
- }
265
- /**
266
- * Generate a random memory ID using crypto.randomUUID().
267
- */
268
- export function generateId(prefix = 'mem') {
269
- return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, 12)}`;
270
- }
271
- // Pinned and verified are exempt from ageing by policy, so this reads "aged out
272
- // for trust purposes", not "old". The 30-day threshold lives here and nowhere else.
273
- function isAgedOut(entry, now) {
274
- if (entry.pinned || entry.confidence === 'verified')
275
- return false;
276
- const lastRetrieved = new Date(entry.last_retrieved);
277
- return (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24) > 30;
278
- }
279
- export function confidenceFacets(entry, now = evalNow()) {
280
- return { tier: entry.confidence, agedOut: isAgedOut(entry, now) };
281
- }
282
- // `warn` covers exactly the rows the old collapsed-value rule did: an aged-out row
283
- // used to read 'stale', so warning on it separately keeps the same set.
284
- export function confidenceLabel(entry, now = evalNow()) {
285
- const { tier, agedOut } = confidenceFacets(entry, now);
286
- return {
287
- text: agedOut ? `${tier}, aged` : tier,
288
- warn: agedOut || tier === 'stale' || tier === 'inferred',
289
- };
290
- }
291
- /**
292
- * Resolve the effective confidence for a memory entry.
293
- * If the entry has not been retrieved in 30+ days and is not 'verified',
294
- * returns 'stale'. Otherwise returns the stored confidence value.
295
- */
296
- export function resolveConfidence(entry, now = evalNow()) {
297
- return isAgedOut(entry, now) ? 'stale' : entry.confidence;
298
- }
299
- /**
300
- * Create a new memory entry with defaults.
301
- */
302
- export function createMemory(content, options = {}) {
303
- const trimmed = content.trim();
304
- if (trimmed.length < 3) {
305
- throw new Error(`Memory content too short (${trimmed.length} chars, minimum 3): "${trimmed}"`);
306
- }
307
- const validOutcomes = ['success', 'failure', 'partial', null];
308
- if (options.trace_outcome !== undefined && !validOutcomes.includes(options.trace_outcome)) {
309
- throw new Error(`Invalid trace_outcome: ${options.trace_outcome}. Must be 'success', 'failure', 'partial', or null.`);
310
- }
311
- const now = evalNow().toISOString(); // honors HIPPO_FAKE_NOW (eval-only)
312
- const layer = options.layer ?? Layer.Episodic;
313
- const tags = options.tags ?? [];
314
- const emotional_valence = options.emotional_valence ?? inferValence(tags);
315
- const schema_fit = options.schema_fit ?? 0.5;
316
- const partial = { tags, schema_fit };
317
- const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? 7, partial);
318
- const entry = {
319
- id: generateId(layer === Layer.Semantic ? 'sem' : 'mem'),
320
- created: now,
321
- last_retrieved: now,
322
- retrieval_count: 0,
323
- strength: 1.0,
324
- half_life_days,
325
- layer,
326
- tags,
327
- emotional_valence,
328
- schema_fit,
329
- source: options.source ?? 'cli',
330
- outcome_score: null,
331
- outcome_positive: 0,
332
- outcome_negative: 0,
333
- conflicts_with: [],
334
- pinned: options.pinned ?? false,
335
- confidence: options.confidence ?? 'verified',
336
- content,
337
- parents: [],
338
- starred: false,
339
- trace_outcome: options.trace_outcome ?? null,
340
- source_session_id: options.source_session_id ?? null,
341
- valid_from: options.valid_from ?? now,
342
- superseded_by: null,
343
- extracted_from: options.extracted_from ?? null,
344
- dag_level: options.dag_level ?? 0,
345
- dag_parent_id: options.dag_parent_id ?? null,
346
- kind: options.kind ?? 'distilled',
347
- scope: options.scope ?? null,
348
- owner: options.owner ?? null,
349
- artifact_ref: options.artifact_ref ?? null,
350
- tenantId: options.tenantId ?? 'default',
351
- };
352
- // Recalculate strength with the emotional multiplier applied
353
- entry.strength = calculateStrength(entry);
354
- return entry;
355
- }
356
- /**
357
- * Compute how well new content fits existing knowledge patterns.
358
- * Returns 0..1 where:
359
- * >0.7 = high fit (consistent with existing knowledge, consolidates faster)
360
- * 0.3-0.7 = moderate fit
361
- * <0.3 = novel (doesn't match existing patterns, decays faster if unused)
362
- *
363
- * Uses tag overlap (always available) weighted by how common each tag is.
364
- * Rare shared tags signal stronger schema fit than common ones.
365
- */
366
- export function computeSchemaFit(content, tags, existingEntries) {
367
- if (existingEntries.length === 0)
368
- return 0.5; // no schema yet, neutral
369
- // Build tag frequency map across all existing entries
370
- const tagFreq = new Map();
371
- for (const entry of existingEntries) {
372
- for (const tag of entry.tags) {
373
- tagFreq.set(tag, (tagFreq.get(tag) ?? 0) + 1);
374
- }
375
- }
376
- if (tags.length === 0 && tagFreq.size === 0)
377
- return 0.5;
378
- // Tag overlap: IDF-weighted Jaccard
379
- // Shared rare tags matter more than shared common tags
380
- let weightedOverlap = 0;
381
- let totalWeight = 0;
382
- const N = existingEntries.length;
383
- for (const tag of tags) {
384
- const freq = tagFreq.get(tag) ?? 0;
385
- // IDF-weighted: rare shared tags score higher
386
- const maxIdf = Math.log(N + 1) + 1;
387
- if (freq > 0) {
388
- const idf = Math.log(N / freq) + 1;
389
- weightedOverlap += idf;
390
- }
391
- totalWeight += maxIdf;
392
- }
393
- // Scale so that matching half the tags at average IDF gives ~0.5
394
- const tagScore = totalWeight > 0 ? Math.min(1, (weightedOverlap / totalWeight) * 2) : 0;
395
- // Content overlap: check how many existing entries share significant tokens
396
- const newTokens = new Set(content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
397
- if (newTokens.size === 0)
398
- return Math.min(1, Math.max(0, tagScore));
399
- let contentMatches = 0;
400
- for (const entry of existingEntries) {
401
- const entryTokens = new Set(entry.content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
402
- let shared = 0;
403
- for (const token of newTokens) {
404
- if (entryTokens.has(token))
405
- shared++;
406
- }
407
- const overlap = shared / Math.max(newTokens.size, 1);
408
- if (overlap > 0.2)
409
- contentMatches++;
410
- }
411
- const contentScore = Math.min(1, contentMatches / Math.max(5, N * 0.1));
412
- // Blend: 60% tag overlap, 40% content overlap
413
- const fit = 0.6 * tagScore + 0.4 * contentScore;
414
- return Math.min(1, Math.max(0, fit));
415
- }
416
- function inferValence(tags) {
417
- if (tags.includes('critical'))
418
- return 'critical';
419
- if (tags.includes('error'))
420
- return 'negative';
421
- if (tags.includes('success') || tags.includes('win'))
422
- return 'positive';
423
- return 'neutral';
424
- }
425
- //# sourceMappingURL=memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import { search } from './search.js';
2
- export function multihopSearch(query, entries, options = {}) {
3
- const pass1 = search(query, entries, { ...options, budget: (options.budget ?? 4000) * 2 });
4
- const topK = pass1.slice(0, 10);
5
- if (topK.length === 0)
6
- return [];
7
- const entityTags = new Set();
8
- for (const r of topK) {
9
- for (const tag of r.entry.tags) {
10
- if (tag.startsWith('speaker:') || tag.startsWith('topic:')) {
11
- entityTags.add(tag);
12
- }
13
- }
14
- }
15
- const queryLower = query.toLowerCase();
16
- const newEntities = [...entityTags]
17
- .map((t) => t.split(':')[1])
18
- .filter((e) => !queryLower.includes(e.toLowerCase()));
19
- if (newEntities.length === 0)
20
- return pass1;
21
- const followUpQuery = newEntities.join(' ') + ' ' + query;
22
- const pass2 = search(followUpQuery, entries, options);
23
- const merged = new Map();
24
- for (const r of [...pass1, ...pass2]) {
25
- const existing = merged.get(r.entry.id);
26
- if (!existing || r.score > existing.score) {
27
- merged.set(r.entry.id, r);
28
- }
29
- }
30
- // T2 note: PLAIN stable score sort on purpose -- pass1/pass2 inputs are
31
- // deterministically ordered (search() carries the content tail), stability
32
- // inherits that, and ties keep pass-1 results ahead of pass-2 follow-ups.
33
- return [...merged.values()].sort((a, b) => b.score - a.score);
34
- }
35
- //# sourceMappingURL=multihop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multihop.js","sourceRoot":"","sources":["../../src/multihop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AAExD,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,OAAsB,EACtB,UAAgI,EAAE;IAElI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3D,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAExD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3C,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -1,56 +0,0 @@
1
- /**
2
- * --owner format validation (B2 v1.12.6).
3
- *
4
- * Documented MEMORY_ENVELOPE.md contract: owner = `user:<id>` | `agent:<id>`
5
- * with id ∈ `[A-Za-z0-9_-]+`. Pre-v1.12.6 any string was accepted, leaving
6
- * the documented contract unenforced.
7
- *
8
- * Default: WARN-ONLY (log + accept) to preserve back-compat with existing
9
- * scripted callers passing legacy owner strings. Set `HIPPO_STRICT_OWNER=1`
10
- * to reject + exit. Strict mode will become the default once A5 v2 lands
11
- * (see `TODOS.md` A3 follow-ups for the migration path).
12
- */
13
- export const OWNER_RE = /^(user|agent):[A-Za-z0-9_-]+$/;
14
- export const OWNER_CONTRACT_HINT = 'Must match ^(user|agent):[A-Za-z0-9_-]+$ (e.g. user:alice, agent:capture-bot).';
15
- /**
16
- * Pure validator. Returns `{ ok, value, message }`. Does NOT print or
17
- * `process.exit`. The CLI wrapper below handles side effects so this is
18
- * unit-testable.
19
- *
20
- * Behaviour:
21
- * - owner undefined → ok=true, value=undefined, no message.
22
- * - owner matches OWNER_RE → ok=true, value=owner.
23
- * - owner doesn't match + strict=false → ok=true, value=owner (accept),
24
- * message contains the warning text.
25
- * - owner doesn't match + strict=true → ok=false, value=owner (echoed),
26
- * message contains the error text.
27
- */
28
- export function validateOwner(owner, opts = {}) {
29
- if (owner === undefined || owner === null || owner === '') {
30
- return { ok: true, value: undefined, message: '' };
31
- }
32
- if (OWNER_RE.test(owner)) {
33
- return { ok: true, value: owner, message: '' };
34
- }
35
- if (opts.strict) {
36
- return {
37
- ok: false,
38
- value: owner,
39
- message: `Invalid --owner "${owner}". ${OWNER_CONTRACT_HINT}`,
40
- };
41
- }
42
- return {
43
- ok: true,
44
- value: owner,
45
- message: `[warn] --owner "${owner}" does not match the contract. ${OWNER_CONTRACT_HINT} ` +
46
- `Accepting for back-compat; set HIPPO_STRICT_OWNER=1 to reject.`,
47
- };
48
- }
49
- /**
50
- * Returns true when strict-owner enforcement is enabled via env var.
51
- * Centralised here so any future bump to default-strict is one edit.
52
- */
53
- export function isStrictOwnerEnv(env = process.env) {
54
- return env.HIPPO_STRICT_OWNER === '1';
55
- }
56
- //# sourceMappingURL=owner-validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"owner-validation.js","sourceRoot":"","sources":["../../src/owner-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AACxD,MAAM,CAAC,MAAM,mBAAmB,GAC9B,gFAAgF,CAAC;AAUnF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAgC,EAChC,OAA6B,EAAE;IAE/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,oBAAoB,KAAK,MAAM,mBAAmB,EAAE;SAC9D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,KAAK;QACZ,OAAO,EACL,mBAAmB,KAAK,kCAAkC,mBAAmB,GAAG;YAChF,gEAAgE;KACnE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,OAAO,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;AACxC,CAAC"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Extract meaningful path segments from a directory path.
3
- * Returns tags like ['path:src', 'path:api', 'path:my-project'].
4
- * Filters out noise (node_modules, .git, Users, home dirs, drive letters).
5
- */
6
- export function extractPathTags(dirPath) {
7
- const normalized = dirPath.replace(/\\/g, '/');
8
- const segments = normalized.split('/').filter(Boolean);
9
- const noise = new Set([
10
- 'users', 'home', 'documents', 'desktop', 'downloads',
11
- 'node_modules', '.git', '.hippo', 'dist', 'build',
12
- 'c:', 'd:', 'tmp', 'temp', 'var', 'usr', 'opt', 'etc',
13
- 'appdata', 'local', 'roaming', 'program files', 'program files (x86)',
14
- ]);
15
- return segments
16
- .filter(s => s.length >= 2 && !noise.has(s.toLowerCase()))
17
- .slice(-4) // keep last 4 meaningful segments (most specific)
18
- .map(s => `path:${s.toLowerCase()}`);
19
- }
20
- /**
21
- * Compute path overlap score between two sets of path tags.
22
- * Returns 0..1 where 1 = perfect match.
23
- * Normalizes by the MORE SPECIFIC side (the larger of the two tag sets),
24
- * so a memory carrying only a bare/generic path tag can no longer score a
25
- * full 1.0 against a deeply-nested cwd just because its own tiny tag set
26
- * is fully contained in the query's — genericity is no longer rewarded.
27
- */
28
- export function pathOverlapScore(memoryPathTags, currentPathTags) {
29
- if (memoryPathTags.length === 0 || currentPathTags.length === 0)
30
- return 0;
31
- const memSet = new Set(memoryPathTags);
32
- const matches = currentPathTags.filter(t => memSet.has(t)).length;
33
- // Normalize by the more specific side (the larger tag set) — kills the
34
- // genericity reward a memory-count-only normalization gave bare path tags.
35
- return matches / Math.max(memoryPathTags.length, currentPathTags.length);
36
- }
37
- /** Weight applied to path overlap score when computing the recall boost multiplier. */
38
- export const PATH_BOOST_WEIGHT = 0.3;
39
- /**
40
- * Multiplier applied to a composite recall score for path locality.
41
- * Filters the memory's tags to path:* itself so call sites cannot drift.
42
- * Returns 1.0..1.3.
43
- */
44
- export function pathBoostMultiplier(memoryTags, currentPathTags) {
45
- const memPathTags = memoryTags.filter(t => t.startsWith('path:'));
46
- return 1.0 + pathOverlapScore(memPathTags, currentPathTags) * PATH_BOOST_WEIGHT;
47
- }
48
- //# sourceMappingURL=path-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"path-context.js","sourceRoot":"","sources":["../../src/path-context.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW;QACpD,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO;QACjD,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;QACrD,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB;KACtE,CAAC,CAAC;IAEH,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;SACzD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,kDAAkD;SAC7D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,cAAwB,EAAE,eAAyB;IAClF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAElE,uEAAuE;IACvE,2EAA2E;IAC3E,OAAO,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAoB,EAAE,eAAyB;IACjF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,OAAO,GAAG,GAAG,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,iBAAiB,CAAC;AAClF,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Physics engine configuration for Hippo memory-as-physics.
3
- * All constants are tunable; defaults calibrated for ~500 memory corpus.
4
- */
5
- export const DEFAULT_PHYSICS_CONFIG = {
6
- enabled: 'auto',
7
- G_query: 2.0,
8
- G_memory: 0.01,
9
- K_repulsion: 0.5,
10
- drag: 0.3,
11
- interference_gain: 0.3,
12
- momentum_weight: 0.1,
13
- max_velocity: 0.1,
14
- dt: 0.1,
15
- substeps: 5,
16
- feedback_alpha: 0.01,
17
- temperature_decay: 1.0,
18
- cluster_threshold: 0.7,
19
- cluster_top_k: 20,
20
- };
21
- export function mergePhysicsConfig(partial) {
22
- if (!partial)
23
- return { ...DEFAULT_PHYSICS_CONFIG };
24
- return { ...DEFAULT_PHYSICS_CONFIG, ...partial };
25
- }
26
- //# sourceMappingURL=physics-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"physics-config.js","sourceRoot":"","sources":["../../src/physics-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,GAAG;IACT,iBAAiB,EAAE,GAAG;IACtB,eAAe,EAAE,GAAG;IACpB,YAAY,EAAE,GAAG;IACjB,EAAE,EAAE,GAAG;IACP,QAAQ,EAAE,CAAC;IACX,cAAc,EAAE,IAAI;IACpB,iBAAiB,EAAE,GAAG;IACtB,iBAAiB,EAAE,GAAG;IACtB,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,OAAgC;IACjE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,GAAG,sBAAsB,EAAE,CAAC;IACnD,OAAO,EAAE,GAAG,sBAAsB,EAAE,GAAG,OAAO,EAAE,CAAC;AACnD,CAAC"}