hippo-memory 1.69.0 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1014) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/memory.js DELETED
@@ -1,522 +0,0 @@
1
- /**
2
- * Core data model for Hippo memory entries.
3
- * Based on the strength formula from PLAN.md.
4
- */
5
- import { envLossAversionRatio } from './env.js';
6
- import { BadRequestError } from './api-errors.js';
7
- import { randomUUID } from 'crypto';
8
- import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated, evalNow, } from './ablation.js';
9
- import { AGENT_MEMORY_TOOLS, toolSourcePrefix } from './agent-memories/tools.js';
10
- export var Layer;
11
- (function (Layer) {
12
- Layer["Buffer"] = "buffer";
13
- Layer["Episodic"] = "episodic";
14
- Layer["Semantic"] = "semantic";
15
- Layer["Trace"] = "trace";
16
- })(Layer || (Layer = {}));
17
- /** Tag on a memory whose named file/symbol/script changed after it was stored. */
18
- export const CHURN_STALE_TAG = 'churn-stale';
19
- // Emotional multipliers from PLAN.md. Losses weigh ~2x equivalent gains (Lovallo-Kahneman TFAS empirics),
20
- // so negative is 2.0. `negative` is further scaled per-process by HIPPO_LOSS_AVERSION_RATIO
21
- // (env var, default 1.0; see getLossAversionRatio + applyLossAversionRatio).
22
- const EMOTIONAL_MULTIPLIERS = {
23
- neutral: 1.0,
24
- positive: 1.0,
25
- negative: 2.0, // error-tagged
26
- critical: 2.0,
27
- };
28
- /**
29
- * Module-level lazy-cached read of HIPPO_LOSS_AVERSION_RATIO.
30
- *
31
- * `calculateStrength` is called per-entry inside hot recall loops
32
- * (api.ts/consolidate.ts/search.ts), so a per-call `process.env` lookup
33
- * would multiply N entries by M recalls of lookup cost. Lazy module-cache
34
- * reads the env ONCE on first call and memoizes for the process lifetime.
35
- * Test isolation via `_resetLossAversionRatioCacheForTests()` below.
36
- */
37
- /**
38
- * Minimum acceptable ratio. Below this, the negative multiplier
39
- * (2.0 * ratio) becomes small enough that calculateStrength * decay can fall
40
- * below `DECAY_THRESHOLD = 0.05` in `src/consolidate.ts:146`, which would
41
- * permanently delete non-pinned error-tagged memories on the next sleep
42
- * cycle. 0.5 is chosen as the floor because (a) it recovers the pre-calibration
43
- * effective multiplier (2.0 * 0.5 = 1.0 + the negative premium, i.e. 1.5x
44
- * the pre-calibration default), and (b) below this the user is asking for LESS
45
- * loss aversion than has ever shipped — that's outside the supported
46
- * tuning range.
47
- */
48
- const LOSS_AVERSION_RATIO_MIN = 0.5;
49
- /**
50
- * Validation policy:
51
- * - Valid: finite numbers >= 0.5.
52
- * - Invalid (silent fallback to 1.0): empty string, non-numeric,
53
- * numbers below 0.5 (including 0 and negatives), NaN, +/-Infinity.
54
- * Silent because opt-in env vars should not crash production recall
55
- * on a typo.
56
- *
57
- * Why the 0.5 floor and not 0:
58
- * - Rejecting only `0` leaves the same silent data-loss surface for any ratio
59
- * below ~0.025 (and worse for aged memories, where even ratio=0.25
60
- * can produce strength < DECAY_THRESHOLD = 0.05 in consolidate.ts).
61
- * Floor at the pre-calibration equivalent (0.5) so the env var's tuning
62
- * range never crosses into the deletion regime.
63
- * - Users wanting LESS loss aversion than the pre-calibration 1.5 multiplier
64
- * should reconsider the design intent (the calibration was
65
- * toward MORE loss aversion, not less). If a future use case
66
- * genuinely needs ratio < 0.5, the right path is a separate
67
- * `HIPPO_NEGATIVE_MULTIPLIER` env override.
68
- */
69
- let _lossAversionRatioCache;
70
- function getLossAversionRatio() {
71
- if (_lossAversionRatioCache !== undefined)
72
- return _lossAversionRatioCache;
73
- const raw = envLossAversionRatio();
74
- if (raw === undefined || raw === '') {
75
- _lossAversionRatioCache = 1.0;
76
- return 1.0;
77
- }
78
- const parsed = Number(raw);
79
- // Finite + >= 0.5 floor. Anything below 0.5 silently falls back to 1.0
80
- // to avoid the consolidation-deletion vector (see JSDoc above).
81
- if (!Number.isFinite(parsed) || parsed < LOSS_AVERSION_RATIO_MIN) {
82
- _lossAversionRatioCache = 1.0;
83
- return 1.0;
84
- }
85
- _lossAversionRatioCache = parsed;
86
- return parsed;
87
- }
88
- /**
89
- * Test-only helper. Tests that mutate `process.env.HIPPO_LOSS_AVERSION_RATIO`
90
- * MUST call this in BOTH `beforeEach` AND `afterEach`:
91
- * - beforeEach: clear any stale cache from a previous test before setting
92
- * the env var for this test.
93
- * - afterEach: clear the cache so the next test (which may not set the env
94
- * var) reads the clean default instead of this test's value.
95
- * See `tests/emotional-multipliers-j5.test.ts` for the canonical pattern.
96
- */
97
- export function _resetLossAversionRatioCacheForTests() {
98
- _lossAversionRatioCache = undefined;
99
- }
100
- /**
101
- * Apply the loss-aversion ratio scalar to the `negative` multiplier ONLY.
102
- * Other valences (positive, critical, neutral) pass through unchanged.
103
- * `critical` is deliberately NOT scaled, so the calibration only touches the
104
- * specific empirical claim (TFAS 2x losses-vs-gains).
105
- */
106
- function applyLossAversionRatio(valence, baseMultiplier) {
107
- if (valence !== 'negative')
108
- return baseMultiplier;
109
- return baseMultiplier * getLossAversionRatio();
110
- }
111
- /**
112
- * Compute the reward factor from cumulative outcome counts.
113
- *
114
- * reward_ratio = (positive - negative) / (positive + negative + 1)
115
- * reward_factor = 1 + 0.5 * reward_ratio
116
- *
117
- * Range: (0.5, 1.5). Neutral (no outcomes) returns 1.0.
118
- * Modulates effective half-life: memories with consistent positive outcomes
119
- * decay slower; consistent negative outcomes decay faster.
120
- */
121
- export function calculateRewardFactor(entry) {
122
- // EVAL-ONLY ablation (see ablation.ts): the slow outcome channel.
123
- if (isOutcomeSlowAblated())
124
- return 1.0;
125
- const pos = entry.outcome_positive ?? 0;
126
- const neg = entry.outcome_negative ?? 0;
127
- if (pos === 0 && neg === 0)
128
- return 1.0;
129
- const ratio = (pos - neg) / (pos + neg + 1);
130
- return 1 + 0.5 * ratio;
131
- }
132
- /** Bad marks alone never push a memory under sleep's 0.05 retire line; supersede is the hard correction. */
133
- const MAX_WRONG_HALVINGS = 3;
134
- /**
135
- * Net wrongness: bad outcome marks past good ones, never below zero.
136
- * Strength halves per unit (capped at 3) and recall stops strengthening
137
- * the memory, so a correction outranks pinning, error tags and heavy recall.
138
- */
139
- export function netWrong(entry) {
140
- if (isOutcomeSlowAblated() || isDecayAblated())
141
- return 0;
142
- return Math.max(0, (entry.outcome_negative ?? 0) - (entry.outcome_positive ?? 0));
143
- }
144
- /**
145
- * Calculate current strength at a given time.
146
- * strength(t) = base_strength * decay * retrieval_boost * emotional_multiplier
147
- *
148
- * Decay basis modes:
149
- * - clock: classic wall-clock decay (daysSince / halfLife)
150
- * - session: decay by sleep cycles instead of days (sessionsSince / halfLife)
151
- * - adaptive: wall-clock decay with half-life scaled by session frequency
152
- *
153
- * Pinned memories skip time decay; being marked wrong still fades them (netWrong).
154
- */
155
- export function calculateStrength(entry,
156
- // evalNow(): the real clock unless HIPPO_FAKE_NOW is set (eval-only,
157
- // simulated-time protocols; see ablation.ts). Explicit `now` always wins.
158
- now = evalNow(), options = {}) {
159
- // Being marked wrong outranks every shield: pinning, error tags, heavy recall.
160
- const wrongPenalty = Math.pow(0.5, Math.min(netWrong(entry), MAX_WRONG_HALVINGS));
161
- if (entry.pinned)
162
- return wrongPenalty;
163
- // EVAL-ONLY ablation (see ablation.ts): anchor decay at CREATION, so clock resets persisted by PRIOR
164
- // unflagged runs cannot leak strengthening into an ablated arm. Prior-run half_life increments are
165
- // NOT reconstructed - see the ablation.ts caveat (fresh stores per arm).
166
- const lastRetrieved = new Date(isRecallBoostAblated() ? entry.created : entry.last_retrieved);
167
- const daysSince = (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24);
168
- // Reward-proportional half-life modulation
169
- const rewardFactor = calculateRewardFactor(entry);
170
- let effectiveHalfLife = entry.half_life_days * rewardFactor;
171
- // Guard: zero half-life causes 0/0 = NaN in the exponent
172
- if (effectiveHalfLife <= 0)
173
- return 0.0;
174
- const basis = options.decayBasis ?? 'clock';
175
- let decayExponent;
176
- if (basis === 'session') {
177
- // Decay by session count: each sleep cycle = 1 "day" in the decay formula.
178
- // Estimate sessions since last retrieval from wall-clock time and avg interval.
179
- const avgInterval = options.avgSessionIntervalDays ?? 1;
180
- const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
181
- decayExponent = sessionsSince / effectiveHalfLife;
182
- }
183
- else if (basis === 'adaptive') {
184
- // Scale half-life by session frequency: infrequent agents get longer half-lives
185
- const avgInterval = options.avgSessionIntervalDays ?? 0;
186
- if (avgInterval > 1) {
187
- effectiveHalfLife *= avgInterval;
188
- }
189
- decayExponent = daysSince / effectiveHalfLife;
190
- }
191
- else {
192
- // clock: classic wall-clock decay
193
- decayExponent = daysSince / effectiveHalfLife;
194
- }
195
- // EVAL-ONLY ablation (see ablation.ts): decay term := 1. NOTE the [0,1]
196
- // clamp below then caps retrievalBoost at baseline - see ablation.ts
197
- // formula note.
198
- const decay = isDecayAblated() ? 1.0 : Math.pow(0.5, decayExponent);
199
- // Retrieval boost: 1 + 0.1 * log2(retrieval_count + 1). EVAL-ONLY ablation (see ablation.ts) neutralizes
200
- // the READ side too, so counts written before the flag cannot leak strengthening into an ablated arm.
201
- const retrievalBoost = isRecallBoostAblated() || netWrong(entry) > 0
202
- ? 1.0
203
- : 1 + 0.1 * Math.log2(entry.retrieval_count + 1);
204
- // Emotional multiplier. HIPPO_LOSS_AVERSION_RATIO scales the negative one ONLY; the lazy
205
- // module cache makes this one lookup + one multiply, not a per-call process.env read.
206
- const baseMultiplier = EMOTIONAL_MULTIPLIERS[entry.emotional_valence] ?? 1.0;
207
- const emotionalMultiplier = applyLossAversionRatio(entry.emotional_valence, baseMultiplier);
208
- const raw = decay * retrievalBoost * emotionalMultiplier;
209
- // Clamp to [0, 1] with NaN guard
210
- const clamped = Math.min(1.0, Math.max(0.0, raw));
211
- return Number.isFinite(clamped) ? clamped * wrongPenalty : 0.0;
212
- }
213
- /** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in step.
214
- * An unparseable date scores NULL here and 0 in JS, so sums agree. */
215
- export function strengthSql(now) {
216
- const num = (n) => (Number.isInteger(n) ? n.toFixed(1) : String(n));
217
- const pos = 'COALESCE(outcome_positive, 0)';
218
- const neg = 'COALESCE(outcome_negative, 0)';
219
- const wrong = isOutcomeSlowAblated() || isDecayAblated() ? '0' : `MAX(0, ${neg} - ${pos})`;
220
- const reward = isOutcomeSlowAblated()
221
- ? '1.0'
222
- : `(CASE WHEN ${pos} = 0 AND ${neg} = 0 THEN 1.0 ELSE 1.0 + 0.5 * (${pos} - ${neg}) / (${pos} + ${neg} + 1.0) END)`;
223
- const halfLife = `(COALESCE(half_life_days, 7) * ${reward})`;
224
- const anchor = isRecallBoostAblated() ? 'created' : 'last_retrieved';
225
- const nowJulian = num(now.getTime() / 86400000 + 2440587.5);
226
- const decay = isDecayAblated() ? '1.0' : `pow(0.5, (${nowJulian} - julianday(${anchor})) / ${halfLife})`;
227
- const boost = isRecallBoostAblated()
228
- ? '1.0'
229
- : `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 + 0.1 * log2(COALESCE(retrieval_count, 0) + 1) END)`;
230
- const valences = /* SAFETY: a Record keyed by EmotionalValence */ Object.keys(EMOTIONAL_MULTIPLIERS);
231
- const emotion = `(CASE COALESCE(emotional_valence, 'neutral') ${valences
232
- .map((v) => `WHEN '${v}' THEN ${num(applyLossAversionRatio(v, EMOTIONAL_MULTIPLIERS[v]))}`)
233
- .join(' ')} ELSE 1.0 END)`;
234
- const penalty = `pow(0.5, MIN(${wrong}, ${MAX_WRONG_HALVINGS}))`;
235
- return `(CASE WHEN pinned THEN ${penalty} WHEN ${halfLife} <= 0 THEN 0.0
236
- ELSE MIN(1.0, MAX(0.0, ${decay} * ${boost} * ${emotion})) * ${penalty} END)`;
237
- }
238
- /**
239
- * Derive half-life based on signals, as per PLAN.md table.
240
- */
241
- export function deriveHalfLife(base, entry) {
242
- let hl = base;
243
- // Error-tagged: 2x half-life
244
- if (entry.tags?.includes('error')) {
245
- hl *= 2;
246
- }
247
- // High schema fit: consolidates faster (1.5x)
248
- if (entry.schema_fit !== undefined && entry.schema_fit > 0.7) {
249
- hl *= 1.5;
250
- }
251
- // Low schema fit: decay faster (0.5x)
252
- if (entry.schema_fit !== undefined && entry.schema_fit < 0.3) {
253
- hl *= 0.5;
254
- }
255
- return hl;
256
- }
257
- /**
258
- * Apply outcome feedback to a memory entry.
259
- *
260
- * Increments outcome_positive or outcome_negative counters.
261
- * The reward factor in calculateStrength() uses these counts to
262
- * continuously modulate the effective half-life:
263
- * reward_ratio = (pos - neg) / (pos + neg + 1)
264
- * reward_factor = 1 + 0.5 * reward_ratio // range (0.5, 1.5)
265
- * effective_hl = half_life_days * reward_factor
266
- *
267
- * No fixed half-life delta. Decay rate adjusts proportionally to
268
- * cumulative reward signal, inspired by R-STDP in spiking networks.
269
- */
270
- export function applyOutcome(entry, good) {
271
- const updated = {
272
- ...entry,
273
- outcome_score: good ? 1 : -1,
274
- outcome_positive: (entry.outcome_positive ?? 0) + (good ? 1 : 0),
275
- outcome_negative: (entry.outcome_negative ?? 0) + (good ? 0 : 1),
276
- };
277
- updated.strength = calculateStrength(updated);
278
- return updated;
279
- }
280
- /** applyOutcome as a served outcome applies it: a good outcome reconfirms the entry, so its churn-stale tag goes. */
281
- export function entryAfterOutcome(entry, good) {
282
- const updated = applyOutcome(entry, good);
283
- if (!good || !updated.tags.includes(CHURN_STALE_TAG))
284
- return updated;
285
- return { ...updated, tags: updated.tags.filter((t) => t !== CHURN_STALE_TAG) };
286
- }
287
- /**
288
- * Generate a random memory ID using crypto.randomUUID().
289
- */
290
- export function generateId(prefix = 'mem') {
291
- return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, 12)}`;
292
- }
293
- // Pinned and verified are exempt from ageing by policy, so this reads "aged out
294
- // for trust purposes", not "old". The 30-day threshold lives here and nowhere else.
295
- function isAgedOut(entry, now) {
296
- if (entry.pinned || entry.confidence === 'verified')
297
- return false;
298
- const lastRetrieved = new Date(entry.last_retrieved);
299
- return (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24) > 30;
300
- }
301
- export function confidenceFacets(entry, now = evalNow()) {
302
- return { tier: entry.confidence, agedOut: isAgedOut(entry, now) };
303
- }
304
- // `warn` covers exactly the rows the old collapsed-value rule did: an aged-out row
305
- // used to read 'stale', so warning on it separately keeps the same set.
306
- export function confidenceLabel(entry, now = evalNow()) {
307
- const { tier, agedOut } = confidenceFacets(entry, now);
308
- return {
309
- text: agedOut ? `${tier}, aged` : tier,
310
- warn: agedOut || tier === 'stale' || tier === 'inferred',
311
- };
312
- }
313
- /**
314
- * Resolve the effective confidence for a memory entry.
315
- * If the entry has not been retrieved in 30+ days and is not 'verified',
316
- * returns 'stale'. Otherwise returns the stored confidence value.
317
- */
318
- export function resolveConfidence(entry, now = evalNow()) {
319
- return isAgedOut(entry, now) ? 'stale' : entry.confidence;
320
- }
321
- /**
322
- * Base half-life for a new memory, in days, before `deriveHalfLife`'s
323
- * write-time multipliers. 365 because 7 days lost the current fact far more
324
- * often, and 730 days or no decay did no better. `hippo sleep` moves memories still
325
- * on an older base (src/half-life-migration.ts).
326
- */
327
- export const DEFAULT_HALF_LIFE_DAYS = 365;
328
- export const COMPACTION_MEMORY_TAG = 'compaction-memory';
329
- export const COMPACTION_SOURCE_PREFIX = 'compaction:';
330
- export const KEEP_PAIRS = AGENT_MEMORY_TOOLS.map((t) => ({ tag: t.tag, sourcePrefix: toolSourcePrefix(t.id) }));
331
- const sqlText = (s) => `'${s.replace(/'/g, "''")}'`;
332
- // json_each matches the tag as a whole element; substr, not LIKE, keeps the prefix case-sensitive like startsWith.
333
- const keepPairSql = (p) => `(COALESCE(superseded_by, '') = '' AND EXISTS (SELECT 1 FROM json_each(CASE WHEN json_valid(tags_json) THEN tags_json ELSE '[]' END) WHERE value = ${sqlText(p.tag)}) AND substr(source, 1, ${p.sourcePrefix.length}) = ${sqlText(p.sourcePrefix)})`;
334
- // Pinned and kept rows stay (a superseded row is not kept: its successor carries the tag and source); raw rows leave only through archiveRawMemory. The SQL twin guards the DELETE itself.
335
- export const AUTO_DELETABLE_SQL = `pinned = 0 AND kind != 'raw'${KEEP_PAIRS.map((p) => ` AND NOT ${keepPairSql(p)}`).join('')}`;
336
- export function isKeptForGood(entry) {
337
- return !entry.superseded_by && KEEP_PAIRS.some((p) => entry.tags.includes(p.tag) && entry.source.startsWith(p.sourcePrefix));
338
- }
339
- export function canAutoDelete(entry) {
340
- return !entry.pinned && entry.kind !== 'raw' && !isKeptForGood(entry);
341
- }
342
- export function createMemory(content, options = {}) {
343
- const trimmed = content.trim();
344
- if (trimmed.length < 3) {
345
- throw new BadRequestError(`Memory content too short (${trimmed.length} chars, minimum 3): "${trimmed}"`);
346
- }
347
- const validOutcomes = ['success', 'failure', 'partial', null];
348
- if (options.trace_outcome !== undefined && !validOutcomes.includes(options.trace_outcome)) {
349
- throw new BadRequestError(`Invalid trace_outcome: ${options.trace_outcome}. Must be 'success', 'failure', 'partial', or null.`);
350
- }
351
- const now = evalNow().toISOString(); // honors HIPPO_FAKE_NOW (eval-only)
352
- const layer = options.layer ?? Layer.Episodic;
353
- const tags = options.tags ?? [];
354
- const emotional_valence = options.emotional_valence ?? inferValence(tags);
355
- const schema_fit = options.schema_fit ?? 0.5;
356
- const partial = { tags, schema_fit };
357
- const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? DEFAULT_HALF_LIFE_DAYS, partial);
358
- const entry = {
359
- id: generateId(layer === Layer.Semantic ? 'sem' : 'mem'),
360
- created: now,
361
- last_retrieved: now,
362
- retrieval_count: 0,
363
- strength: 1.0,
364
- half_life_days,
365
- layer,
366
- tags,
367
- emotional_valence,
368
- schema_fit,
369
- source: options.source ?? 'cli',
370
- outcome_score: null,
371
- outcome_positive: 0,
372
- outcome_negative: 0,
373
- conflicts_with: [],
374
- pinned: options.pinned ?? false,
375
- confidence: options.confidence ?? 'verified',
376
- content,
377
- parents: [],
378
- starred: false,
379
- trace_outcome: options.trace_outcome ?? null,
380
- source_session_id: options.source_session_id ?? null,
381
- valid_from: options.valid_from ?? now,
382
- superseded_by: null,
383
- extracted_from: options.extracted_from ?? null,
384
- dag_level: options.dag_level ?? 0,
385
- dag_parent_id: options.dag_parent_id ?? null,
386
- kind: options.kind ?? 'distilled',
387
- scope: options.scope ?? null,
388
- owner: options.owner ?? null,
389
- artifact_ref: options.artifact_ref ?? null,
390
- tenantId: options.tenantId ?? 'default',
391
- };
392
- // Recalculate strength with the emotional multiplier applied
393
- entry.strength = calculateStrength(entry);
394
- return entry;
395
- }
396
- /** The row that replaces `old`: a supersede never changes where a memory belongs, so source, scope, session and a stamped origin carry over. */
397
- export function createSuccessor(old, content, opts) {
398
- const next = createMemory(content, {
399
- layer: opts.layer ?? old.layer,
400
- tags: opts.tags ?? [...old.tags],
401
- pinned: opts.pinned ?? old.pinned,
402
- source: old.source,
403
- confidence: 'verified',
404
- tenantId: opts.tenantId,
405
- scope: old.scope,
406
- source_session_id: old.source_session_id,
407
- baseHalfLifeDays: opts.baseHalfLifeDays,
408
- });
409
- // A legacy null origin has nothing to carry, so the store stamps it from its own location.
410
- if (typeof old.origin_project === 'string') {
411
- next.origin_project = old.origin_project;
412
- }
413
- return next;
414
- }
415
- /**
416
- * Compute how well new content fits existing knowledge patterns.
417
- * Returns 0..1 where:
418
- * >0.7 = high fit (consistent with existing knowledge, consolidates faster)
419
- * 0.3-0.7 = moderate fit
420
- * <0.3 = novel (doesn't match existing patterns, decays faster if unused)
421
- *
422
- * Uses tag overlap (always available) weighted by how common each tag is.
423
- * Rare shared tags signal stronger schema fit than common ones.
424
- */
425
- export function computeSchemaFit(content, tags, existingEntries) {
426
- if (existingEntries.length === 0)
427
- return 0.5; // no schema yet, neutral
428
- // Build tag frequency map across all existing entries
429
- const tagFreq = new Map();
430
- for (const entry of existingEntries) {
431
- for (const tag of entry.tags) {
432
- tagFreq.set(tag, (tagFreq.get(tag) ?? 0) + 1);
433
- }
434
- }
435
- if (tags.length === 0 && tagFreq.size === 0)
436
- return 0.5;
437
- // Tag overlap: IDF-weighted Jaccard
438
- // Shared rare tags matter more than shared common tags
439
- let weightedOverlap = 0;
440
- let totalWeight = 0;
441
- const N = existingEntries.length;
442
- for (const tag of tags) {
443
- const freq = tagFreq.get(tag) ?? 0;
444
- // IDF-weighted: rare shared tags score higher
445
- const maxIdf = Math.log(N + 1) + 1;
446
- if (freq > 0) {
447
- const idf = Math.log(N / freq) + 1;
448
- weightedOverlap += idf;
449
- }
450
- totalWeight += maxIdf;
451
- }
452
- // Scale so that matching half the tags at average IDF gives ~0.5
453
- const tagScore = totalWeight > 0 ? Math.min(1, (weightedOverlap / totalWeight) * 2) : 0;
454
- // Content overlap: check how many existing entries share significant tokens
455
- const newTokens = new Set(content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
456
- if (newTokens.size === 0)
457
- return Math.min(1, Math.max(0, tagScore));
458
- let contentMatches = 0;
459
- for (const entry of existingEntries) {
460
- const entryTokens = new Set(entry.content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
461
- let shared = 0;
462
- for (const token of newTokens) {
463
- if (entryTokens.has(token))
464
- shared++;
465
- }
466
- const overlap = shared / Math.max(newTokens.size, 1);
467
- if (overlap > 0.2)
468
- contentMatches++;
469
- }
470
- const contentScore = Math.min(1, contentMatches / Math.max(5, N * 0.1));
471
- // Blend: 60% tag overlap, 40% content overlap
472
- const fit = 0.6 * tagScore + 0.4 * contentScore;
473
- return Math.min(1, Math.max(0, fit));
474
- }
475
- function inferValence(tags) {
476
- if (tags.includes('critical'))
477
- return 'critical';
478
- if (tags.includes('error'))
479
- return 'negative';
480
- if (tags.includes('success') || tags.includes('win'))
481
- return 'positive';
482
- return 'neutral';
483
- }
484
- /**
485
- * Update retrieval metadata on entries that were returned by a search.
486
- * Returns the mutated copies (caller must persist to disk).
487
- *
488
- * EVAL-ONLY ablation (see ablation.ts): with HIPPO_ABLATE_RECALL_BOOST set,
489
- * this returns the entries UNMUTATED - neutralizing all three strengthening
490
- * sub-effects (clock reset, retrieval_count, half-life increment) at the
491
- * single shared write site. The entries (not an empty array) must be
492
- * returned because callers derive `last_retrieval_ids` from the return
493
- * value, and a later `hippo outcome --good/--bad` targets those ids - an
494
- * empty return would silently co-ablate the outcome channel in the
495
- * strengthen-off arm. PERSISTENCE is gated separately at
496
- * each persisting caller (CLI recall, api context, MCP recall/context,
497
- * consolidation replay): writeEntry on identical rows still refreshes
498
- * updated_at, rewrites mirrors, and marks DAG parents dirty,
499
- * so those write loops skip under the flag.
500
- * The default `now` honors HIPPO_FAKE_NOW (simulated-time protocols).
501
- */
502
- // Confidence is deliberately absent below: it is an epistemic tier, not a
503
- // recency signal, and a stored 'stale' is always a deliberate mark.
504
- export function markRetrieved(entries, now = evalNow()) {
505
- if (isRecallBoostAblated())
506
- return entries;
507
- return entries.map((e) => {
508
- if (e.superseded_by)
509
- return e;
510
- const wrong = netWrong(e) > 0;
511
- const updated = {
512
- ...e,
513
- retrieval_count: e.retrieval_count + 1,
514
- last_retrieved: wrong ? e.last_retrieved : now.toISOString(),
515
- // +2 days half-life per retrieval (PLAN.md); a wrong memory keeps both, since last_retrieved is the decay anchor
516
- half_life_days: wrong ? e.half_life_days : e.half_life_days + 2,
517
- };
518
- updated.strength = calculateStrength(updated, now);
519
- return updated;
520
- });
521
- }
522
- //# sourceMappingURL=memory.js.map
@@ -1,42 +0,0 @@
1
- /**
2
- * --owner format validation.
3
- *
4
- * Documented MEMORY_ENVELOPE.md contract: owner = `user:<id>` | `agent:<id>`
5
- * with id ∈ `[A-Za-z0-9_-]+`.
6
- *
7
- * Default: WARN-ONLY (log + accept) to preserve back-compat with existing
8
- * scripted callers passing legacy owner strings. Set `HIPPO_STRICT_OWNER=1`
9
- * to reject + exit. Strict mode will become the default once real auth replaces
10
- * the stub (see `TODOS.md` for the migration path).
11
- */
12
- export declare const OWNER_RE: RegExp;
13
- export declare const OWNER_CONTRACT_HINT = "Must match ^(user|agent):[A-Za-z0-9_-]+$ (e.g. user:alice, agent:capture-bot).";
14
- export interface OwnerValidation {
15
- ok: boolean;
16
- /** The owner string as the caller should now use it. undefined when no owner was supplied. */
17
- value: string | undefined;
18
- /** Human-readable message (warn or error). Empty when ok = true. */
19
- message: string;
20
- }
21
- /**
22
- * Pure validator. Returns `{ ok, value, message }`. Does NOT print or
23
- * `process.exit`. The CLI wrapper below handles side effects so this is
24
- * unit-testable.
25
- *
26
- * Behaviour:
27
- * - owner undefined → ok=true, value=undefined, no message.
28
- * - owner matches OWNER_RE → ok=true, value=owner.
29
- * - owner doesn't match + strict=false → ok=true, value=owner (accept),
30
- * message contains the warning text.
31
- * - owner doesn't match + strict=true → ok=false, value=owner (echoed),
32
- * message contains the error text.
33
- */
34
- export declare function validateOwner(owner: string | null | undefined, opts?: {
35
- strict?: boolean;
36
- }): OwnerValidation;
37
- /**
38
- * Returns true when strict-owner enforcement is enabled via env var.
39
- * Centralised here so any future bump to default-strict is one edit.
40
- */
41
- export declare function isStrictOwnerEnv(env?: NodeJS.ProcessEnv): boolean;
42
- //# sourceMappingURL=owner-validation.d.ts.map
@@ -1,56 +0,0 @@
1
- /**
2
- * --owner format validation.
3
- *
4
- * Documented MEMORY_ENVELOPE.md contract: owner = `user:<id>` | `agent:<id>`
5
- * with id ∈ `[A-Za-z0-9_-]+`.
6
- *
7
- * Default: WARN-ONLY (log + accept) to preserve back-compat with existing
8
- * scripted callers passing legacy owner strings. Set `HIPPO_STRICT_OWNER=1`
9
- * to reject + exit. Strict mode will become the default once real auth replaces
10
- * the stub (see `TODOS.md` for the migration path).
11
- */
12
- import { processEnv } from './env.js';
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 = processEnv()) {
54
- return env.HIPPO_STRICT_OWNER === '1';
55
- }
56
- //# sourceMappingURL=owner-validation.js.map
@@ -1,24 +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 declare function extractPathTags(dirPath: string): string[];
7
- /**
8
- * Compute path overlap score between two sets of path tags.
9
- * Returns 0..1 where 1 = perfect match.
10
- * Normalizes by the MORE SPECIFIC side (the larger of the two tag sets),
11
- * so a memory carrying only a bare/generic path tag can no longer score a
12
- * full 1.0 against a deeply-nested cwd just because its own tiny tag set
13
- * is fully contained in the query's — genericity is no longer rewarded.
14
- */
15
- export declare function pathOverlapScore(memoryPathTags: string[], currentPathTags: string[]): number;
16
- /** Weight applied to path overlap score when computing the recall boost multiplier. */
17
- export declare const PATH_BOOST_WEIGHT = 0.3;
18
- /**
19
- * Multiplier applied to a composite recall score for path locality.
20
- * Filters the memory's tags to path:* itself so call sites cannot drift.
21
- * Returns 1.0..1.3.
22
- */
23
- export declare function pathBoostMultiplier(memoryTags: string[], currentPathTags: string[]): number;
24
- //# sourceMappingURL=path-context.d.ts.map