hippo-memory 1.69.0 → 1.70.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 (860) 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 +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  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/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -2,6 +2,8 @@
2
2
  * Core data model for Hippo memory entries.
3
3
  * Based on the strength formula from PLAN.md.
4
4
  */
5
+ export declare const DEFAULT_SCHEMA_FIT = 0.5;
6
+ export declare const FALLBACK_HALF_LIFE_DAYS = 7;
5
7
  export declare enum Layer {
6
8
  Buffer = "buffer",
7
9
  Episodic = "episodic",
@@ -122,7 +124,7 @@ export declare const CHURN_STALE_TAG = "churn-stale";
122
124
  * the env var for this test.
123
125
  * - afterEach: clear the cache so the next test (which may not set the env
124
126
  * var) reads the clean default instead of this test's value.
125
- * See `tests/emotional-multipliers-j5.test.ts` for the canonical pattern.
127
+ * See `tests/emotional-multipliers.test.ts` for the pattern.
126
128
  */
127
129
  export declare function _resetLossAversionRatioCacheForTests(): void;
128
130
  /**
@@ -172,9 +174,6 @@ export declare function calculateStrength(entry: StrengthInputs, now?: Date, opt
172
174
  /** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in step.
173
175
  * An unparseable date scores NULL here and 0 in JS, so sums agree. */
174
176
  export declare function strengthSql(now: Date): string;
175
- /**
176
- * Derive half-life based on signals, as per PLAN.md table.
177
- */
178
177
  export declare function deriveHalfLife(base: number, entry: Partial<MemoryEntry>): number;
179
178
  /**
180
179
  * Apply outcome feedback to a memory entry.
@@ -196,11 +195,14 @@ export declare function entryAfterOutcome(entry: MemoryEntry, good: boolean): Me
196
195
  * Generate a random memory ID using crypto.randomUUID().
197
196
  */
198
197
  export declare function generateId(prefix?: string): string;
198
+ /** What the confidence facets read, so a caller can derive them from a row it loaded only in part. */
199
+ export type ConfidenceInputs = Pick<MemoryEntry, 'pinned' | 'confidence' | 'last_retrieved'>;
199
200
  export interface ConfidenceFacets {
200
201
  tier: ConfidenceLevel;
201
202
  agedOut: boolean;
202
203
  }
203
204
  export declare function confidenceFacets(entry: MemoryEntry, now?: Date): ConfidenceFacets;
205
+ export declare function facetsOf(entry: ConfidenceInputs, now: Date): ConfidenceFacets;
204
206
  export declare function confidenceLabel(entry: MemoryEntry, now?: Date): {
205
207
  text: string;
206
208
  warn: boolean;
@@ -215,7 +217,7 @@ export declare function resolveConfidence(entry: MemoryEntry, now?: Date): Confi
215
217
  * Base half-life for a new memory, in days, before `deriveHalfLife`'s
216
218
  * write-time multipliers. 365 because 7 days lost the current fact far more
217
219
  * often, and 730 days or no decay did no better. `hippo sleep` moves memories still
218
- * on an older base (src/half-life-migration.ts).
220
+ * on an older base (src/consolidate/half-life-migration.ts).
219
221
  */
220
222
  export declare const DEFAULT_HALF_LIFE_DAYS = 365;
221
223
  export declare const COMPACTION_MEMORY_TAG = "compaction-memory";
@@ -272,6 +274,16 @@ export declare function createSuccessor(old: MemoryEntry, content: string, opts:
272
274
  * Rare shared tags signal stronger schema fit than common ones.
273
275
  */
274
276
  export declare function computeSchemaFit(content: string, tags: string[], existingEntries: MemoryEntry[]): number;
277
+ /** What schema fit reads from a set of memories, so a store can answer without loading its rows. */
278
+ export interface SchemaFitSource {
279
+ readonly rows: number;
280
+ /** How many times each tag appears across the set. */
281
+ readonly tagCounts: ReadonlyMap<string, number>;
282
+ /** Each memory's text; the walk stops once more matches cannot move the score. */
283
+ readonly contents: Iterable<string>;
284
+ }
285
+ /** computeSchemaFit against `source`, for a caller that holds counts and texts but no rows. */
286
+ export declare function schemaFitFrom(content: string, tags: readonly string[], source: SchemaFitSource): number;
275
287
  /**
276
288
  * Update retrieval metadata on entries that were returned by a search.
277
289
  * Returns the mutated copies (caller must persist to disk).
@@ -2,11 +2,15 @@
2
2
  * Core data model for Hippo memory entries.
3
3
  * Based on the strength formula from PLAN.md.
4
4
  */
5
- import { envLossAversionRatio } from './env.js';
5
+ import { envLossAversionRatio } from '../util/env.js';
6
6
  import { BadRequestError } from './api-errors.js';
7
7
  import { randomUUID } from 'crypto';
8
8
  import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated, evalNow, } from './ablation.js';
9
- import { AGENT_MEMORY_TOOLS, toolSourcePrefix } from './agent-memories/tools.js';
9
+ import { AGENT_MEMORY_TOOLS, toolSourcePrefix } from './agent-memory-tools.js';
10
+ import { DAY_MS } from '../util/time.js';
11
+ import { ID_SUFFIX_CHARS } from '../util/token-text.js';
12
+ export const DEFAULT_SCHEMA_FIT = 0.5;
13
+ export const FALLBACK_HALF_LIFE_DAYS = 7;
10
14
  export var Layer;
11
15
  (function (Layer) {
12
16
  Layer["Buffer"] = "buffer";
@@ -92,7 +96,7 @@ function getLossAversionRatio() {
92
96
  * the env var for this test.
93
97
  * - afterEach: clear the cache so the next test (which may not set the env
94
98
  * var) reads the clean default instead of this test's value.
95
- * See `tests/emotional-multipliers-j5.test.ts` for the canonical pattern.
99
+ * See `tests/emotional-multipliers.test.ts` for the pattern.
96
100
  */
97
101
  export function _resetLossAversionRatioCacheForTests() {
98
102
  _lossAversionRatioCache = undefined;
@@ -127,10 +131,16 @@ export function calculateRewardFactor(entry) {
127
131
  if (pos === 0 && neg === 0)
128
132
  return 1.0;
129
133
  const ratio = (pos - neg) / (pos + neg + 1);
130
- return 1 + 0.5 * ratio;
134
+ return 1 + REWARD_SLOPE * ratio;
131
135
  }
132
136
  /** Bad marks alone never push a memory under sleep's 0.05 retire line; supersede is the hard correction. */
133
137
  const MAX_WRONG_HALVINGS = 3;
138
+ // Shared by calculateStrength and strengthSql so the two cannot drift.
139
+ const DECAY_BASE = 0.5;
140
+ const REWARD_SLOPE = 0.5;
141
+ const RETRIEVAL_BOOST_SLOPE = 0.1;
142
+ const SQL_DEFAULT_HALF_LIFE_DAYS = 7;
143
+ const UNIX_EPOCH_JULIAN_DAY = 2440587.5;
134
144
  /**
135
145
  * Net wrongness: bad outcome marks past good ones, never below zero.
136
146
  * Strength halves per unit (capped at 3) and recall stops strengthening
@@ -157,58 +167,62 @@ export function calculateStrength(entry,
157
167
  // simulated-time protocols; see ablation.ts). Explicit `now` always wins.
158
168
  now = evalNow(), options = {}) {
159
169
  // 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));
170
+ const wrongPenalty = Math.pow(DECAY_BASE, Math.min(netWrong(entry), MAX_WRONG_HALVINGS));
161
171
  if (entry.pinned)
162
172
  return wrongPenalty;
163
173
  // EVAL-ONLY ablation (see ablation.ts): anchor decay at CREATION, so clock resets persisted by PRIOR
164
174
  // unflagged runs cannot leak strengthening into an ablated arm. Prior-run half_life increments are
165
175
  // NOT reconstructed - see the ablation.ts caveat (fresh stores per arm).
166
176
  const lastRetrieved = new Date(isRecallBoostAblated() ? entry.created : entry.last_retrieved);
167
- const daysSince = (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24);
177
+ const daysSince = (now.getTime() - lastRetrieved.getTime()) / DAY_MS;
168
178
  // Reward-proportional half-life modulation
169
179
  const rewardFactor = calculateRewardFactor(entry);
170
- let effectiveHalfLife = entry.half_life_days * rewardFactor;
180
+ const effectiveHalfLife = entry.half_life_days * rewardFactor;
171
181
  // Guard: zero half-life causes 0/0 = NaN in the exponent
172
182
  if (effectiveHalfLife <= 0)
173
183
  return 0.0;
184
+ const decayExponent = decayExponentFor(options, daysSince, effectiveHalfLife);
185
+ // EVAL-ONLY ablation (see ablation.ts): decay term := 1. NOTE the [0,1]
186
+ // clamp below then caps retrievalBoost at baseline - see ablation.ts
187
+ // formula note.
188
+ const decay = isDecayAblated() ? 1.0 : Math.pow(DECAY_BASE, decayExponent);
189
+ const retrievalBoost = retrievalBoostFor(entry);
190
+ // Emotional multiplier. HIPPO_LOSS_AVERSION_RATIO scales the negative one ONLY; the lazy
191
+ // module cache makes this one lookup + one multiply, not a per-call process.env read.
192
+ const baseMultiplier = EMOTIONAL_MULTIPLIERS[entry.emotional_valence] ?? 1.0;
193
+ const emotionalMultiplier = applyLossAversionRatio(entry.emotional_valence, baseMultiplier);
194
+ const raw = decay * retrievalBoost * emotionalMultiplier;
195
+ // Clamp to [0, 1] with NaN guard
196
+ const clamped = Math.min(1.0, Math.max(0.0, raw));
197
+ return Number.isFinite(clamped) ? clamped * wrongPenalty : 0.0;
198
+ }
199
+ function decayExponentFor(options, daysSince, halfLifeDays) {
200
+ let effectiveHalfLife = halfLifeDays;
174
201
  const basis = options.decayBasis ?? 'clock';
175
- let decayExponent;
176
202
  if (basis === 'session') {
177
203
  // Decay by session count: each sleep cycle = 1 "day" in the decay formula.
178
204
  // Estimate sessions since last retrieval from wall-clock time and avg interval.
179
205
  const avgInterval = options.avgSessionIntervalDays ?? 1;
180
206
  const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
181
- decayExponent = sessionsSince / effectiveHalfLife;
207
+ return sessionsSince / effectiveHalfLife;
182
208
  }
183
- else if (basis === 'adaptive') {
209
+ if (basis === 'adaptive') {
184
210
  // Scale half-life by session frequency: infrequent agents get longer half-lives
185
211
  const avgInterval = options.avgSessionIntervalDays ?? 0;
186
212
  if (avgInterval > 1) {
187
213
  effectiveHalfLife *= avgInterval;
188
214
  }
189
- decayExponent = daysSince / effectiveHalfLife;
190
- }
191
- else {
192
- // clock: classic wall-clock decay
193
- decayExponent = daysSince / effectiveHalfLife;
215
+ return daysSince / effectiveHalfLife;
194
216
  }
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
217
+ // clock: classic wall-clock decay
218
+ return daysSince / effectiveHalfLife;
219
+ }
220
+ // Retrieval boost: 1 + 0.1 * log2(retrieval_count + 1). EVAL-ONLY ablation (see ablation.ts) neutralizes
221
+ // the READ side too, so counts written before the flag cannot leak strengthening into an ablated arm.
222
+ function retrievalBoostFor(entry) {
223
+ return isRecallBoostAblated() || netWrong(entry) > 0
202
224
  ? 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;
225
+ : 1 + RETRIEVAL_BOOST_SLOPE * Math.log2(entry.retrieval_count + 1);
212
226
  }
213
227
  /** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in step.
214
228
  * An unparseable date scores NULL here and 0 in JS, so sums agree. */
@@ -219,25 +233,34 @@ export function strengthSql(now) {
219
233
  const wrong = isOutcomeSlowAblated() || isDecayAblated() ? '0' : `MAX(0, ${neg} - ${pos})`;
220
234
  const reward = isOutcomeSlowAblated()
221
235
  ? '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})`;
236
+ : `(CASE WHEN ${pos} = 0 AND ${neg} = 0 THEN 1.0 ELSE 1.0 + ${REWARD_SLOPE} * (${pos} - ${neg}) / (${pos} + ${neg} + 1.0) END)`;
237
+ const halfLife = `(COALESCE(half_life_days, ${SQL_DEFAULT_HALF_LIFE_DAYS}) * ${reward})`;
224
238
  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})`;
239
+ const nowJulian = num(now.getTime() / DAY_MS + UNIX_EPOCH_JULIAN_DAY);
240
+ const decay = isDecayAblated() ? '1.0' : `pow(${DECAY_BASE}, (${nowJulian} - julianday(${anchor})) / ${halfLife})`;
227
241
  const boost = isRecallBoostAblated()
228
242
  ? '1.0'
229
- : `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 + 0.1 * log2(COALESCE(retrieval_count, 0) + 1) END)`;
243
+ : `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 + ${RETRIEVAL_BOOST_SLOPE} * log2(COALESCE(retrieval_count, 0) + 1) END)`;
230
244
  const valences = /* SAFETY: a Record keyed by EmotionalValence */ Object.keys(EMOTIONAL_MULTIPLIERS);
231
245
  const emotion = `(CASE COALESCE(emotional_valence, 'neutral') ${valences
232
246
  .map((v) => `WHEN '${v}' THEN ${num(applyLossAversionRatio(v, EMOTIONAL_MULTIPLIERS[v]))}`)
233
247
  .join(' ')} ELSE 1.0 END)`;
234
- const penalty = `pow(0.5, MIN(${wrong}, ${MAX_WRONG_HALVINGS}))`;
248
+ const penalty = `pow(${DECAY_BASE}, MIN(${wrong}, ${MAX_WRONG_HALVINGS}))`;
235
249
  return `(CASE WHEN pinned THEN ${penalty} WHEN ${halfLife} <= 0 THEN 0.0
236
250
  ELSE MIN(1.0, MAX(0.0, ${decay} * ${boost} * ${emotion})) * ${penalty} END)`;
237
251
  }
238
252
  /**
239
253
  * Derive half-life based on signals, as per PLAN.md table.
240
254
  */
255
+ const HIGH_SCHEMA_FIT = 0.7;
256
+ const HIGH_FIT_HALF_LIFE_FACTOR = 1.5;
257
+ const LOW_SCHEMA_FIT = 0.3;
258
+ const LOW_FIT_HALF_LIFE_FACTOR = 0.5;
259
+ // Schema fit blends tag coverage and content similarity; a content match needs this share of shared tokens.
260
+ const TAG_FIT_WEIGHT = 0.6;
261
+ const CONTENT_FIT_WEIGHT = 0.4;
262
+ const CONTENT_TOKEN_SHARE_MIN = 0.2;
263
+ const CONTENT_ENOUGH_FRACTION = 0.1;
241
264
  export function deriveHalfLife(base, entry) {
242
265
  let hl = base;
243
266
  // Error-tagged: 2x half-life
@@ -245,12 +268,12 @@ export function deriveHalfLife(base, entry) {
245
268
  hl *= 2;
246
269
  }
247
270
  // High schema fit: consolidates faster (1.5x)
248
- if (entry.schema_fit !== undefined && entry.schema_fit > 0.7) {
249
- hl *= 1.5;
271
+ if (entry.schema_fit !== undefined && entry.schema_fit > HIGH_SCHEMA_FIT) {
272
+ hl *= HIGH_FIT_HALF_LIFE_FACTOR;
250
273
  }
251
274
  // Low schema fit: decay faster (0.5x)
252
- if (entry.schema_fit !== undefined && entry.schema_fit < 0.3) {
253
- hl *= 0.5;
275
+ if (entry.schema_fit !== undefined && entry.schema_fit < LOW_SCHEMA_FIT) {
276
+ hl *= LOW_FIT_HALF_LIFE_FACTOR;
254
277
  }
255
278
  return hl;
256
279
  }
@@ -288,17 +311,18 @@ export function entryAfterOutcome(entry, good) {
288
311
  * Generate a random memory ID using crypto.randomUUID().
289
312
  */
290
313
  export function generateId(prefix = 'mem') {
291
- return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, 12)}`;
314
+ return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, ID_SUFFIX_CHARS)}`;
292
315
  }
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
316
  function isAgedOut(entry, now) {
296
317
  if (entry.pinned || entry.confidence === 'verified')
297
318
  return false;
298
319
  const lastRetrieved = new Date(entry.last_retrieved);
299
- return (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24) > 30;
320
+ return (now.getTime() - lastRetrieved.getTime()) / DAY_MS > 30;
300
321
  }
301
322
  export function confidenceFacets(entry, now = evalNow()) {
323
+ return facetsOf(entry, now);
324
+ }
325
+ export function facetsOf(entry, now) {
302
326
  return { tier: entry.confidence, agedOut: isAgedOut(entry, now) };
303
327
  }
304
328
  // `warn` covers exactly the rows the old collapsed-value rule did: an aged-out row
@@ -322,7 +346,7 @@ export function resolveConfidence(entry, now = evalNow()) {
322
346
  * Base half-life for a new memory, in days, before `deriveHalfLife`'s
323
347
  * write-time multipliers. 365 because 7 days lost the current fact far more
324
348
  * 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).
349
+ * on an older base (src/consolidate/half-life-migration.ts).
326
350
  */
327
351
  export const DEFAULT_HALF_LIFE_DAYS = 365;
328
352
  export const COMPACTION_MEMORY_TAG = 'compaction-memory';
@@ -340,21 +364,13 @@ export function canAutoDelete(entry) {
340
364
  return !entry.pinned && entry.kind !== 'raw' && !isKeptForGood(entry);
341
365
  }
342
366
  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
- }
367
+ assertValidMemoryInput(content, options);
351
368
  const now = evalNow().toISOString(); // honors HIPPO_FAKE_NOW (eval-only)
352
369
  const layer = options.layer ?? Layer.Episodic;
353
370
  const tags = options.tags ?? [];
354
371
  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);
372
+ const schema_fit = options.schema_fit ?? DEFAULT_SCHEMA_FIT;
373
+ const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? DEFAULT_HALF_LIFE_DAYS, { tags, schema_fit });
358
374
  const entry = {
359
375
  id: generateId(layer === Layer.Semantic ? 'sem' : 'mem'),
360
376
  created: now,
@@ -393,6 +409,16 @@ export function createMemory(content, options = {}) {
393
409
  entry.strength = calculateStrength(entry);
394
410
  return entry;
395
411
  }
412
+ function assertValidMemoryInput(content, options) {
413
+ const trimmed = content.trim();
414
+ if (trimmed.length < 3) {
415
+ throw new BadRequestError(`Memory content too short (${trimmed.length} chars, minimum 3): "${trimmed}"`);
416
+ }
417
+ const validOutcomes = ['success', 'failure', 'partial', null];
418
+ if (options.trace_outcome !== undefined && !validOutcomes.includes(options.trace_outcome)) {
419
+ throw new BadRequestError(`Invalid trace_outcome: ${options.trace_outcome}. Must be 'success', 'failure', 'partial', or null.`);
420
+ }
421
+ }
396
422
  /** The row that replaces `old`: a supersede never changes where a memory belongs, so source, scope, session and a stamped origin carry over. */
397
423
  export function createSuccessor(old, content, opts) {
398
424
  const next = createMemory(content, {
@@ -423,53 +449,55 @@ export function createSuccessor(old, content, opts) {
423
449
  * Rare shared tags signal stronger schema fit than common ones.
424
450
  */
425
451
  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();
452
+ const tagCounts = new Map();
430
453
  for (const entry of existingEntries) {
431
454
  for (const tag of entry.tags) {
432
- tagFreq.set(tag, (tagFreq.get(tag) ?? 0) + 1);
455
+ tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
433
456
  }
434
457
  }
458
+ return schemaFitFrom(content, tags, { rows: existingEntries.length, tagCounts, contents: existingEntries.map((e) => e.content) });
459
+ }
460
+ function significantTokens(text) {
461
+ return new Set(text.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
462
+ }
463
+ /** computeSchemaFit against `source`, for a caller that holds counts and texts but no rows. */
464
+ export function schemaFitFrom(content, tags, source) {
465
+ const N = source.rows;
466
+ if (N === 0)
467
+ return 0.5; // no schema yet, neutral
468
+ const tagFreq = source.tagCounts;
435
469
  if (tags.length === 0 && tagFreq.size === 0)
436
470
  return 0.5;
437
- // Tag overlap: IDF-weighted Jaccard
438
- // Shared rare tags matter more than shared common tags
471
+ // Tag overlap, weighted so a shared rare tag counts for more than a shared common one.
439
472
  let weightedOverlap = 0;
440
473
  let totalWeight = 0;
441
- const N = existingEntries.length;
474
+ const maxIdf = Math.log(N + 1) + 1;
442
475
  for (const tag of tags) {
443
476
  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
- }
477
+ if (freq > 0)
478
+ weightedOverlap += Math.log(N / freq) + 1;
450
479
  totalWeight += maxIdf;
451
480
  }
452
- // Scale so that matching half the tags at average IDF gives ~0.5
481
+ // Scaled so that matching half the tags at average weight gives about 0.5.
453
482
  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));
483
+ const newTokens = significantTokens(content);
456
484
  if (newTokens.size === 0)
457
485
  return Math.min(1, Math.max(0, tagScore));
486
+ // The content score is capped at 1, which this many matching memories reach.
487
+ const enough = Math.max(5, N * CONTENT_ENOUGH_FRACTION);
458
488
  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));
489
+ for (const text of source.contents) {
490
+ const entryTokens = significantTokens(text);
461
491
  let shared = 0;
462
492
  for (const token of newTokens) {
463
493
  if (entryTokens.has(token))
464
494
  shared++;
465
495
  }
466
- const overlap = shared / Math.max(newTokens.size, 1);
467
- if (overlap > 0.2)
468
- contentMatches++;
496
+ if (shared / newTokens.size > CONTENT_TOKEN_SHARE_MIN && ++contentMatches >= enough)
497
+ break;
469
498
  }
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;
499
+ const contentScore = Math.min(1, contentMatches / enough);
500
+ const fit = TAG_FIT_WEIGHT * tagScore + CONTENT_FIT_WEIGHT * contentScore;
473
501
  return Math.min(1, Math.max(0, fit));
474
502
  }
475
503
  function inferValence(tags) {
@@ -9,7 +9,7 @@
9
9
  * conflict repulsion, and drag (consolidation). Nearby high-scoring memories
10
10
  * amplify each other via constructive interference.
11
11
  */
12
- import type { EmotionalValence } from './memory.js';
12
+ import { type EmotionalValence } from './memory.js';
13
13
  import type { PhysicsConfig } from './physics-config.js';
14
14
  export interface PhysicsParticle {
15
15
  memoryId: string;
@@ -10,6 +10,7 @@
10
10
  * amplify each other via constructive interference.
11
11
  */
12
12
  import { isRecallBoostAblated } from './ablation.js';
13
+ import { FALLBACK_HALF_LIFE_DAYS } from './memory.js';
13
14
  import { comparePhysicsResultsBy } from './compare.js';
14
15
  // ---------------------------------------------------------------------------
15
16
  // Vector math (hot path — kept inline for performance)
@@ -183,7 +184,7 @@ function computeNetForce(i, particles, ctx) {
183
184
  }
184
185
  }
185
186
  // Drag
186
- const fd = dragForce(pi, ctx.config.drag, ctx.halfLives.get(pi.memoryId) ?? 7);
187
+ const fd = dragForce(pi, ctx.config.drag, ctx.halfLives.get(pi.memoryId) ?? FALLBACK_HALF_LIFE_DAYS);
187
188
  net = vecAdd(net, fd);
188
189
  return net;
189
190
  }
@@ -41,11 +41,6 @@ export interface ResolveProjectIdentityOpts {
41
41
  }
42
42
  /** Clear the per-process identity cache and the remote switch it read (test seam). */
43
43
  export declare function clearProjectIdentityCache(): void;
44
- /**
45
- * Canonicalize a path via realpath, falling back to path.resolve when the
46
- * path does not exist or realpath fails (mirrors importers.ts).
47
- */
48
- export declare function realpathOrResolve(p: string): string;
49
44
  /**
50
45
  * Resolve the project identity for a working directory.
51
46
  * Defaults to process.cwd(). Results are cached per resolved input path.
@@ -1,12 +1,13 @@
1
- import { envHippoHome, envXdgDataHome } from './env.js';
1
+ import { envHippoHome, envXdgDataHome } from '../util/env.js';
2
2
  import * as fs from 'fs';
3
3
  import * as os from 'os';
4
4
  import * as path from 'path';
5
5
  import { BadRequestError } from './api-errors.js';
6
6
  import { isSharedStore, loadConfig } from './config.js';
7
- import { MAX_ID_LEN } from './http-util.js';
8
- import { log } from './log.js';
7
+ import { MAX_ID_LEN } from '../util/http-util.js';
8
+ import { errorMessage, log } from '../util/log.js';
9
9
  import { originRemoteId, projectFileId } from './project-remote.js';
10
+ import { realpathOrResolve } from '../util/real-path.js';
10
11
  const MAX_WALK_DEPTH = 64;
11
12
  const identityCache = new Map();
12
13
  let remoteSwitch = null;
@@ -30,19 +31,6 @@ function namesAt(root, legacyName) {
30
31
  const aliases = [...new Set([fileId, remoteId, legacyName])].filter((n) => n !== null && n !== name);
31
32
  return aliases.length > 0 ? { name, aliases } : { name };
32
33
  }
33
- /**
34
- * Canonicalize a path via realpath, falling back to path.resolve when the
35
- * path does not exist or realpath fails (mirrors importers.ts).
36
- */
37
- export function realpathOrResolve(p) {
38
- try {
39
- return fs.realpathSync.native(p);
40
- }
41
- catch (err) {
42
- log.debug(`project identity: realpath fell back to resolve for ${p}: ${err instanceof Error ? err.message : String(err)}`);
43
- return path.resolve(p);
44
- }
45
- }
46
34
  /** Compare two canonical paths, case-insensitively on Windows. */
47
35
  function samePath(a, b) {
48
36
  if (process.platform === 'win32')
@@ -68,7 +56,7 @@ function isDirectoryAt(p) {
68
56
  return fs.statSync(p).isDirectory();
69
57
  }
70
58
  catch (err) {
71
- log.debug(`project identity: no marker at ${p}: ${err instanceof Error ? err.message : String(err)}`);
59
+ log.debug(`project identity: no marker at ${p}: ${errorMessage(err)}`);
72
60
  return false;
73
61
  }
74
62
  }
@@ -2,7 +2,7 @@
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import { isObjectLike, isStringValue } from './capture-contract.js';
5
- import { log } from './log.js';
5
+ import { errorMessage, log } from '../util/log.js';
6
6
  /** The config file git reads for a checkout: `.git/config`, a linked worktree's `<commondir>/config`, a submodule's `<gitdir>/config`. */
7
7
  export function gitConfigPath(gitRoot) {
8
8
  const marker = path.join(gitRoot, '.git');
@@ -19,7 +19,7 @@ export function gitConfigPath(gitRoot) {
19
19
  return path.join(path.resolve(linkDir, fs.readFileSync(commondir, 'utf8').trim()), 'config');
20
20
  }
21
21
  catch (err) {
22
- log.debug(`project remote: no git config for ${gitRoot}: ${err instanceof Error ? err.message : String(err)}`);
22
+ log.debug(`project remote: no git config for ${gitRoot}: ${errorMessage(err)}`);
23
23
  return null;
24
24
  }
25
25
  }
@@ -111,7 +111,7 @@ export function originRemoteId(gitRoot) {
111
111
  return url === null ? null : normaliseRemote(url);
112
112
  }
113
113
  catch (err) {
114
- log.debug(`project remote: ${file} not read: ${err instanceof Error ? err.message : String(err)}`);
114
+ log.debug(`project remote: ${file} not read: ${errorMessage(err)}`);
115
115
  return null;
116
116
  }
117
117
  }
@@ -131,7 +131,7 @@ export function projectFileId(root) {
131
131
  log.warn(`${file}: "id" must be a non-empty string with no colon, slash or spaces; using the remote or folder name instead`);
132
132
  }
133
133
  catch (err) {
134
- log.warn(`${file} not read: ${err instanceof Error ? err.message : String(err)}; using the remote or folder name instead`);
134
+ log.warn(`${file} not read: ${errorMessage(err)}; using the remote or folder name instead`);
135
135
  }
136
136
  return null;
137
137
  }
@@ -1,5 +1,5 @@
1
1
  /** Recall gated on the hook prompt, not the five newest memories (pure, no I/O). */
2
- import { tokenize } from './tokenize.js';
2
+ import { tokenize } from '../util/tokenize.js';
3
3
  import { STOP_WORDS } from './memory-quality.js';
4
4
  // Latency bound, not tuned: fixed in the prereg regardless of gate config.
5
5
  export const PROMPT_RECALL_MAX_CHARS = 4000;
@@ -5,8 +5,17 @@
5
5
  * Inspired by the biological salience network (anterior insula + dACC):
6
6
  * not everything that enters working memory deserves long-term storage.
7
7
  */
8
- import { textOverlap } from './tokenize.js';
9
- import { duplicateKey, heldTextKeys } from './same-text.js';
8
+ import { textOverlap } from '../util/tokenize.js';
9
+ import { duplicateKey, heldTextKeys } from '../util/same-text.js';
10
+ // Each store or skip reason carries a score; a novel memory adds bonuses for structure and length.
11
+ const REPEAT_ERROR_SCORE = 0.3;
12
+ const ERROR_DESPITE_OVERLAP_SCORE = 0.7;
13
+ const NEAR_DUPLICATE_SCORE = 0.5;
14
+ const DUPLICATE_SCORE = 0.1;
15
+ const NOVEL_ERROR_SCORE = 0.9;
16
+ const NOVEL_BASE_SCORE = 0.5;
17
+ const STRUCTURED_TAGS_BONUS = 0.15;
18
+ const LENGTH_BONUS = 0.1;
10
19
  const DEFAULTS = {
11
20
  recentWindow: 20,
12
21
  overlapThreshold: 0.6,
@@ -33,34 +42,40 @@ export function computeSalience(content, tags, recentMemories, options = {}) {
33
42
  return {
34
43
  decision: 'start_weak',
35
44
  reason: `repeat_error (${recentErrors} recent errors, overlap ${(duplicateMatch.overlap * 100).toFixed(0)}% with ${duplicateMatch.matchId})`,
36
- score: 0.3,
45
+ score: REPEAT_ERROR_SCORE,
37
46
  };
38
47
  }
39
- return { decision: 'store', reason: 'error_despite_overlap', score: 0.7 };
48
+ return { decision: 'store', reason: 'error_despite_overlap', score: ERROR_DESPITE_OVERLAP_SCORE };
40
49
  }
41
- // A near-duplicate may be a changed value (port 8080 then 8081), so only the same text is skipped.
42
- const key = duplicateKey(trimmed);
43
- const same = window.find((m) => heldTextKeys(m).includes(key));
44
- if (!same) {
45
- return {
46
- decision: 'store',
47
- reason: `near_duplicate (${(duplicateMatch.overlap * 100).toFixed(0)}% overlap with ${duplicateMatch.matchId})`,
48
- score: 0.5,
49
- };
50
- }
51
- return { decision: 'skip', reason: `duplicate (same text as ${same.id})`, score: 0.1 };
50
+ return judgeOverlappingNonError(trimmed, window, duplicateMatch);
52
51
  }
53
52
  if (isError) {
54
- return { decision: 'store', reason: 'error_novel', score: 0.9 };
53
+ return { decision: 'store', reason: 'error_novel', score: NOVEL_ERROR_SCORE };
54
+ }
55
+ return scoreNovel(trimmed, tags);
56
+ }
57
+ function judgeOverlappingNonError(trimmed, window, duplicateMatch) {
58
+ // A near-duplicate may be a changed value (port 8080 then 8081), so only the same text is skipped.
59
+ const key = duplicateKey(trimmed);
60
+ const same = window.find((m) => heldTextKeys(m).includes(key));
61
+ if (!same) {
62
+ return {
63
+ decision: 'store',
64
+ reason: `near_duplicate (${(duplicateMatch.overlap * 100).toFixed(0)}% overlap with ${duplicateMatch.matchId})`,
65
+ score: NEAR_DUPLICATE_SCORE,
66
+ };
55
67
  }
68
+ return { decision: 'skip', reason: `duplicate (same text as ${same.id})`, score: DUPLICATE_SCORE };
69
+ }
70
+ function scoreNovel(trimmed, tags) {
56
71
  const hasStructuredTags = tags.some(t => t.startsWith('speaker:') || t.startsWith('topic:') || t.startsWith('scope:'));
57
- let score = 0.5;
72
+ let score = NOVEL_BASE_SCORE;
58
73
  if (hasStructuredTags)
59
- score += 0.15;
74
+ score += STRUCTURED_TAGS_BONUS;
60
75
  if (trimmed.length > 100)
61
- score += 0.1;
76
+ score += LENGTH_BONUS;
62
77
  if (trimmed.length > 300)
63
- score += 0.1;
78
+ score += LENGTH_BONUS;
64
79
  return { decision: 'store', reason: 'novel', score: Math.min(score, 1.0) };
65
80
  }
66
81
  function findBestOverlap(content, memories) {
@@ -1,4 +1,4 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from './memory.js';
2
2
  export declare const DEFAULT_RECALL_BUDGET = 4000;
3
3
  export declare const DEFAULT_LOCAL_BUMP = 1.2;
4
4
  /** One score mutation applied after candidate generation; allocated only under `recall --why` or `RecallOpts.explain`. */
@@ -90,4 +90,4 @@ export interface ScoreBreakdown {
90
90
  /** 1.05 if a summary was rebuilt within 7 days; 1.0 otherwise. */
91
91
  summaryFreshnessBoost?: number;
92
92
  }
93
- //# sourceMappingURL=types.d.ts.map
93
+ //# sourceMappingURL=search-types.d.ts.map
@@ -1,4 +1,4 @@
1
1
  export const DEFAULT_RECALL_BUDGET = 4000;
2
2
  // Local memories outrank global ones by this factor; getContext applies it as a 1/x global discount.
3
3
  export const DEFAULT_LOCAL_BUMP = 1.2;
4
- //# sourceMappingURL=types.js.map
4
+ //# sourceMappingURL=search-types.js.map
@@ -0,0 +1,5 @@
1
+ import type { MemoryEntry } from './memory.js';
2
+ export declare const SESSION_DIGEST_TAG = "session-digest";
3
+ /** Facts extracted from a digest and DAG summaries over one inherit its tag, but they are not the digest itself. */
4
+ export declare function isSessionDigestRow(entry: Pick<MemoryEntry, 'source' | 'tags' | 'extracted_from'>): boolean;
5
+ //# sourceMappingURL=session-digest-row.d.ts.map