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
@@ -1,8 +1,10 @@
1
- /** Git subprocess helpers for churn-staleness (src/invalidation.ts). */
1
+ /** Git subprocess helpers for churn-staleness (src/learn/invalidation.ts). */
2
2
  import { execFileSync } from 'child_process';
3
3
  import * as fs from 'fs';
4
4
  import * as os from 'os';
5
5
  import * as path from 'path';
6
+ import { DAY_MS } from '../util/time.js';
7
+ import { errorMessage } from '../util/log.js';
6
8
  // A `git log --name-status` dump can run to tens of MB; default 1MB pipe would truncate it.
7
9
  const GIT_MAX_BUFFER = 64 * 1024 * 1024;
8
10
  // Longer than the 10 s of one-line git reads because a full log dump on a large repo is slow, yet bounded so a wedged git cannot stall sleep.
@@ -15,7 +17,7 @@ function runGit(args, repoRoot) {
15
17
  return execFileSync('git', args, { cwd: repoRoot, encoding: 'utf8', maxBuffer: GIT_MAX_BUFFER, timeout: GIT_TIMEOUT_MS, windowsHide: true });
16
18
  }
17
19
  catch (err) {
18
- throw new GitReadError(`git ${args.join(' ')} failed: ${err instanceof Error ? err.message : String(err)}`);
20
+ throw new GitReadError(`git ${args.join(' ')} failed: ${errorMessage(err)}`, { cause: err });
19
21
  }
20
22
  }
21
23
  // git grep exits 1 for "no match" -- a normal empty result, not a failure.
@@ -28,7 +30,7 @@ function runGitGrepOrEmpty(args, repoRoot) {
28
30
  const status = err.status;
29
31
  if (status === 1)
30
32
  return '';
31
- throw new GitReadError(`git ${args.join(' ')} failed: ${err instanceof Error ? err.message : String(err)}`);
33
+ throw new GitReadError(`git ${args.join(' ')} failed: ${errorMessage(err)}`, { cause: err });
32
34
  }
33
35
  }
34
36
  // ls-tree, not ls-files: the index can hold staged adds/deletes that HEAD does not.
@@ -38,7 +40,7 @@ export function gitLsFilesAtHead(repoRoot) {
38
40
  }
39
41
  // 1-day buffer guards against git's --since boundary excluding a commit dated exactly at the anchor.
40
42
  export function fetchChurnWindowLog(repoRoot, sinceIso) {
41
- const buffered = new Date(new Date(sinceIso).getTime() - 24 * 60 * 60 * 1000).toISOString();
43
+ const buffered = new Date(new Date(sinceIso).getTime() - DAY_MS).toISOString();
42
44
  const raw = runGit(
43
45
  // --first-parent -m: a merge's changes land as one diff against its mainline parent.
44
46
  ['log', '--no-renames', '--first-parent', '-m', `--since=${buffered}`, '--pretty=format:%x01%H%x02%cI', '--name-status'], repoRoot);
@@ -1,4 +1,4 @@
1
- import { MemoryEntry, EmotionalValence } from './memory.js';
1
+ import { MemoryEntry, EmotionalValence } from '../core/memory.js';
2
2
  export interface ExtractedFact {
3
3
  content: string;
4
4
  tags: string[];
@@ -0,0 +1,125 @@
1
+ import { Layer, createMemory } from '../core/memory.js';
2
+ import { writeEntry } from '../store/entry-writes.js';
3
+ import { loadConfig } from '../core/config.js';
4
+ import { RejectedValueError } from '../store/rejection.js';
5
+ import { redactSecretsStrict } from '../util/secret-detect.js';
6
+ import { describeMessageFailure, sendAnthropicMessage } from '../util/anthropic-messages.js';
7
+ import { neverAutoShareTags } from '../sharing/shared.js';
8
+ import { errorMessage, log } from '../util/log.js';
9
+ import { isJsonString } from '../util/json.js';
10
+ import { certainDefect } from '../core/memory-quality.js';
11
+ const EXTRACTION_PROMPT = `You are extracting factual statements from a conversation or memory entry. Extract 1-8 standalone factual statements that would be useful to remember later.
12
+
13
+ Rules:
14
+ - Each fact must be a complete, standalone sentence
15
+ - Include the speaker's name in every fact (e.g. "Alice prefers..." not "She prefers...")
16
+ - Preserve specific details: names, numbers, dates, paths, IDs
17
+ - Return a JSON array of objects with: content (string), tags (array of "speaker:X" and "topic:Y" strings), valence ("neutral", "positive", "negative", or "critical")
18
+ - Return an empty array [] for small talk with no extractable facts
19
+ - Output ONLY the JSON array, no preamble or explanation
20
+
21
+ Input text:
22
+ `;
23
+ // Output budget for one extraction reply.
24
+ const EXTRACTION_MAX_TOKENS = 1200;
25
+ export async function extractFacts(text, opts) {
26
+ const reply = await sendAnthropicMessage({
27
+ apiKey: opts.apiKey,
28
+ model: opts.model,
29
+ maxTokens: EXTRACTION_MAX_TOKENS,
30
+ prompt: EXTRACTION_PROMPT + redactSecretsStrict(text),
31
+ fetcher: opts.fetcher,
32
+ });
33
+ if (!reply.ok) {
34
+ opts.onError?.(describeMessageFailure(reply.failure));
35
+ return [];
36
+ }
37
+ try {
38
+ const raw = reply.text;
39
+ if (!raw)
40
+ return [];
41
+ const parsed = JSON.parse(raw);
42
+ if (!Array.isArray(parsed))
43
+ return [];
44
+ return parseExtractedFacts(parsed);
45
+ }
46
+ catch (err) {
47
+ opts.onError?.(`unparseable response: ${errorMessage(err)}`);
48
+ return [];
49
+ }
50
+ }
51
+ function parseExtractedFacts(parsed) {
52
+ const validValences = new Set(['neutral', 'positive', 'negative', 'critical']);
53
+ const facts = [];
54
+ for (const item of parsed) {
55
+ if (facts.length >= 8)
56
+ break;
57
+ if (!item ||
58
+ !isJsonString(item.content) ||
59
+ item.content.length < 3)
60
+ continue;
61
+ const itemTags = item.tags;
62
+ const tags = Array.isArray(itemTags)
63
+ ? itemTags.filter((t) => isJsonString(t))
64
+ : [];
65
+ // SAFETY: the isJsonString + validValences.has guard below confirms item.valence is one of the four literal strings of EmotionalValence.
66
+ const valence = isJsonString(item.valence) && validValences.has(item.valence)
67
+ ? item.valence
68
+ : 'neutral';
69
+ facts.push({ content: item.content, tags, valence });
70
+ }
71
+ return facts;
72
+ }
73
+ const INHERITABLE_PREFIXES = ['conv:', 'session:', 'scope:', 'path:'];
74
+ export function storeExtractedFacts(hippoRoot, source, facts) {
75
+ const inheritedTags = [
76
+ ...source.tags.filter((t) => INHERITABLE_PREFIXES.some((p) => t.startsWith(p))),
77
+ ...neverAutoShareTags([source]),
78
+ ];
79
+ const entries = [];
80
+ let rejected = 0;
81
+ const baseHalfLifeDays = loadConfig(hippoRoot).defaultHalfLifeDays;
82
+ for (const fact of facts) {
83
+ const defect = certainDefect(fact.content);
84
+ if (defect !== null) {
85
+ log.warn(`storeExtractedFacts: skipped automatic quality defect (${defect})`);
86
+ continue;
87
+ }
88
+ const entry = buildExtractedEntry(fact, source, inheritedTags, baseHalfLifeDays);
89
+ // A refusal is per-VALUE: one rejected fact must not
90
+ // drop the rest of this batch. writeEntry has already audited the
91
+ // refusal (reject_refusal) before rethrowing, so skip-and-count here.
92
+ try {
93
+ writeEntry(hippoRoot, entry);
94
+ }
95
+ catch (err) {
96
+ if (err instanceof RejectedValueError) {
97
+ rejected++;
98
+ continue;
99
+ }
100
+ throw err;
101
+ }
102
+ entries.push(entry);
103
+ }
104
+ if (rejected > 0) {
105
+ log.warn(`storeExtractedFacts: skipped ${rejected} rejected value(s)`);
106
+ }
107
+ return entries;
108
+ }
109
+ function buildExtractedEntry(fact, source, inheritedTags, baseHalfLifeDays) {
110
+ const tags = ['extracted', ...inheritedTags, ...fact.tags];
111
+ return { ...createMemory(fact.content, {
112
+ layer: Layer.Semantic,
113
+ tags,
114
+ emotional_valence: fact.valence,
115
+ confidence: 'inferred',
116
+ source: source.source,
117
+ extracted_from: source.id,
118
+ scope: source.scope,
119
+ // Without it createMemory stamps 'default', and extracted facts leave
120
+ // the tenant of the episodic memory they were extracted from.
121
+ tenantId: source.tenantId,
122
+ baseHalfLifeDays,
123
+ }), origin_project: source.origin_project };
124
+ }
125
+ //# sourceMappingURL=extract.js.map
@@ -11,7 +11,7 @@
11
11
  * Kahneman 2003 inside-vs-outside view).
12
12
  *
13
13
  * Iteration signal: the `recall_autodebias_hint_no_class_match` audit op
14
- * (emitted by computePlanningFallacyOutput when a phrase matches but no class
14
+ * (emitted by recall when a phrase matches but no class
15
15
  * resolves) is the telemetry channel for deciding whether to add an
16
16
  * embedding-based detector.
17
17
  */
@@ -11,7 +11,7 @@
11
11
  * Kahneman 2003 inside-vs-outside view).
12
12
  *
13
13
  * Iteration signal: the `recall_autodebias_hint_no_class_match` audit op
14
- * (emitted by computePlanningFallacyOutput when a phrase matches but no class
14
+ * (emitted by recall when a phrase matches but no class
15
15
  * resolves) is the telemetry channel for deciding whether to add an
16
16
  * embedding-based detector.
17
17
  */
@@ -1,3 +1,4 @@
1
+ import { type MemoryEntry } from '../core/memory.js';
1
2
  export interface InvalidationTarget {
2
3
  from: string;
3
4
  to: string | null;
@@ -38,6 +39,9 @@ export declare function extractInvalidationTarget(message: string): Invalidation
38
39
  * auto-learn-from-git path) inherit this contract.
39
40
  */
40
41
  export declare function invalidateMatching(hippoRoot: string, target: InvalidationTarget, tenantId?: string, options?: InvalidationOptions): InvalidationResult;
42
+ /** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
43
+ * Each match is read again before it is weakened, so a row another writer changed since the list was read is never written back stale. */
44
+ export declare function invalidateMatchingAmong(hippoRoot: string, live: MemoryEntry[], target: InvalidationTarget, tenantId?: string): InvalidationResult;
41
45
  export interface ChurnRefs {
42
46
  paths: string[];
43
47
  symbols: string[];
@@ -1,9 +1,9 @@
1
- import { writeEntryOn } from './store/entry-writes.js';
2
- import { loadAllEntries, selectEntriesByIds } from './store/entry-reads.js';
3
- import { openStore } from './store/open.js';
4
- import { openHippoDb, closeHippoDb } from './db.js';
5
- import { CHURN_STALE_TAG } from './memory.js';
1
+ import { addTagToEntries, writeEntriesSeparately } from '../store/entry-writes.js';
2
+ import { confirmedOutcomeTimes } from '../store/audit.js';
3
+ import { chunked, loadAllEntries, loadEntriesByIds } from '../store/entry-reads.js';
4
+ import { CHURN_STALE_TAG } from '../core/memory.js';
6
5
  import { GitReadError, gitLsFilesAtHead, fetchChurnWindowLog, gitGrepPresence, resolveCommitBefore, packageScriptsAt, } from './churn-git.js';
6
+ const HEADLINE_CHARS = 60;
7
7
  /**
8
8
  * Extract what was replaced/removed from a commit message.
9
9
  * Returns null if the commit isn't a breaking/migration change.
@@ -63,7 +63,33 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
63
63
  // (host-wide invalidation across all tenants in the store).
64
64
  // options.onlyId resolves by FILTERING this tenant-scoped list — never a
65
65
  // direct id lookup — so an id from another tenant is invisible here.
66
- const entries = loadAllEntries(hippoRoot, tenantId);
66
+ const { result, weakened } = weakenMatches(loadAllEntries(hippoRoot, tenantId), target, options);
67
+ writeEntriesSeparately(hippoRoot, weakened);
68
+ return result;
69
+ }
70
+ /** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
71
+ * Each match is read again before it is weakened, so a row another writer changed since the list was read is never written back stale. */
72
+ export function invalidateMatchingAmong(hippoRoot, live, target, tenantId) {
73
+ const seen = weakenMatches(live, target, { dryRun: true }).result;
74
+ const ids = [...seen.targets, ...seen.skippedPinned];
75
+ // loadEntriesByIds reads at most 500 ids a call.
76
+ const fresh = new Map(chunked(ids, 500).flatMap((chunk) => loadEntriesByIds(hippoRoot, chunk, tenantId)).map((entry) => [entry.id, entry]));
77
+ const { result, weakened } = weakenMatches(ids.flatMap((id) => fresh.get(id) ?? []), target);
78
+ writeEntriesSeparately(hippoRoot, weakened);
79
+ const byId = new Map(weakened.map((entry) => [entry.id, entry]));
80
+ for (let i = 0; i < live.length; i++)
81
+ live[i] = byId.get(live[i].id) ?? live[i];
82
+ return result;
83
+ }
84
+ function referencesPattern(entry, fromTokens, exactTag) {
85
+ const contentTokens = invalidationTokenize(entry.content);
86
+ const tagTokens = entry.tags.map(t => t.toLowerCase());
87
+ const tokenMatch = matchScore(fromTokens, contentTokens);
88
+ const tagMatch = tagTokens.includes(exactTag);
89
+ return tokenMatch >= 0.5 || tagMatch;
90
+ }
91
+ /** The match pass: weakens each unpinned match in place and returns them, writing nothing. */
92
+ function weakenMatches(entries, target, options) {
67
93
  const fromTokens = invalidationTokenize(target.from);
68
94
  const exactTag = target.from.toLowerCase().trim();
69
95
  const dryRun = options?.dryRun === true;
@@ -80,15 +106,8 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
80
106
  if (entry.id !== options.onlyId)
81
107
  continue;
82
108
  }
83
- else {
84
- const contentTokens = invalidationTokenize(entry.content);
85
- const tagTokens = entry.tags.map(t => t.toLowerCase());
86
- // Check if the memory references the old pattern
87
- const tokenMatch = matchScore(fromTokens, contentTokens);
88
- const tagMatch = tagTokens.includes(exactTag);
89
- if (!(tokenMatch >= 0.5 || tagMatch))
90
- continue;
91
- }
109
+ else if (!referencesPattern(entry, fromTokens, exactTag))
110
+ continue;
92
111
  // Pinned check runs AFTER matching so pinned would-be targets are
93
112
  // observable in skippedPinned (pattern mode and onlyId mode alike).
94
113
  if (entry.pinned) {
@@ -99,7 +118,7 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
99
118
  result.targets.push(entry.id);
100
119
  result.preview.push({
101
120
  id: entry.id,
102
- headline: entry.content.replace(/\s+/g, ' ').slice(0, 60),
121
+ headline: entry.content.replace(/\s+/g, ' ').slice(0, HEADLINE_CHARS),
103
122
  });
104
123
  if (dryRun)
105
124
  continue;
@@ -110,21 +129,7 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
110
129
  }
111
130
  weakened.push(entry);
112
131
  }
113
- writeEntriesOnOneHandle(hippoRoot, weakened);
114
- return result;
115
- }
116
- /** Each row commits alone, as a run of writeEntry calls would, but the store opens once. */
117
- function writeEntriesOnOneHandle(hippoRoot, entries) {
118
- if (entries.length === 0)
119
- return;
120
- const db = openStore(hippoRoot);
121
- try {
122
- for (const entry of entries)
123
- writeEntryOn(db, hippoRoot, entry);
124
- }
125
- finally {
126
- closeHippoDb(db);
127
- }
132
+ return { result, weakened };
128
133
  }
129
134
  const STOPWORDS = new Set([
130
135
  'the', 'an', 'is', 'it', 'in', 'on', 'at', 'to', 'for', 'of', 'by',
@@ -219,22 +224,6 @@ function resolveTrackedPath(token, repoRoot, projectName, index) {
219
224
  }
220
225
  return null;
221
226
  }
222
- // Anchor SQL runs on its own handle (closed in finally); queryAuditEvents is NOT
223
- // reused here because its 10k-row cap would silently miss old confirmations.
224
- function queryConfirmedAt(hippoRoot, tenantId) {
225
- const db = openHippoDb(hippoRoot);
226
- try {
227
- // SAFETY: the SELECT list above is exactly target_id and ts; no other shape reaches this cast.
228
- const rows = db.prepare(`SELECT target_id, MAX(ts) AS ts FROM audit_log
229
- WHERE tenant_id = ? AND op = 'outcome' AND target_id IS NOT NULL
230
- AND json_extract(metadata_json, '$.good') = 1
231
- GROUP BY target_id`).all(tenantId);
232
- return new Map(rows.map((r) => [r.target_id, r.ts]));
233
- }
234
- finally {
235
- closeHippoDb(db);
236
- }
237
- }
238
227
  function emptyChurnResult(dryRun, skippedPinned = [], error) {
239
228
  const result = { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned, dryRun, preview: [] };
240
229
  if (error !== undefined)
@@ -262,25 +251,8 @@ function collectChurnCandidates(entries, opts) {
262
251
  }
263
252
  return { candidates, skippedPinned };
264
253
  }
265
- function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
266
- const headFiles = gitLsFilesAtHead(repoRoot);
267
- let windowLog = [];
268
- if (needs.paths) {
269
- const minAnchor = candidates.reduce((min, c) => {
270
- const a = anchorOf(c.entry);
271
- return min === '' || a < min ? a : min;
272
- }, '');
273
- windowLog = fetchChurnWindowLog(repoRoot, minAnchor);
274
- }
275
- const touchedInWindow = new Set();
276
- for (const c of windowLog)
277
- for (const f of c.files)
278
- touchedInWindow.add(f.path);
279
- const trackedIndex = buildTrackedIndex(new Set([...headFiles, ...touchedInWindow]));
280
- const headIndex = buildTrackedIndex(headFiles);
281
- const presentAtHeadSymbols = needs.symbols
282
- ? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
283
- : new Set();
254
+ /** The per-commit lookups of a ChurnGitView; each asks git once per commit and remembers the answer. */
255
+ function churnCommitLookups(repoRoot) {
284
256
  const anchorCommitCache = new Map();
285
257
  const resolveAnchorCommit = (anchorIso) => {
286
258
  if (!anchorCommitCache.has(anchorIso)) {
@@ -299,7 +271,6 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
299
271
  }
300
272
  return known;
301
273
  };
302
- const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
303
274
  const scriptsAtCommit = new Map();
304
275
  const scriptsAt = (hash) => {
305
276
  if (!scriptsAtCommit.has(hash)) {
@@ -307,7 +278,29 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
307
278
  }
308
279
  return scriptsAtCommit.get(hash);
309
280
  };
310
- return { repoRoot, projectName, windowLog, trackedIndex, headIndex, presentAtHeadSymbols, headScripts, resolveAnchorCommit, symbolsPresentAt, scriptsAt };
281
+ return { resolveAnchorCommit, symbolsPresentAt, scriptsAt };
282
+ }
283
+ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
284
+ const headFiles = gitLsFilesAtHead(repoRoot);
285
+ let windowLog = [];
286
+ if (needs.paths) {
287
+ const minAnchor = candidates.reduce((min, c) => {
288
+ const a = anchorOf(c.entry);
289
+ return min === '' || a < min ? a : min;
290
+ }, '');
291
+ windowLog = fetchChurnWindowLog(repoRoot, minAnchor);
292
+ }
293
+ const touchedInWindow = new Set();
294
+ for (const c of windowLog)
295
+ for (const f of c.files)
296
+ touchedInWindow.add(f.path);
297
+ const trackedIndex = buildTrackedIndex(new Set([...headFiles, ...touchedInWindow]));
298
+ const headIndex = buildTrackedIndex(headFiles);
299
+ const presentAtHeadSymbols = needs.symbols
300
+ ? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
301
+ : new Set();
302
+ const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
303
+ return { repoRoot, projectName, windowLog, trackedIndex, headIndex, presentAtHeadSymbols, headScripts, ...churnCommitLookups(repoRoot) };
311
304
  }
312
305
  function pathEvidence(git, paths, anchorTime) {
313
306
  for (const rawPath of paths) {
@@ -362,25 +355,31 @@ function churnEvidence(git, refs, anchor) {
362
355
  }
363
356
  function tagChurnStale(hippoRoot, tenantId, toTag, confirmedAt) {
364
357
  // The git calls above can take seconds; a good outcome landing meanwhile moves the anchor past the evidence.
365
- const confirmedNow = queryConfirmedAt(hippoRoot, tenantId);
358
+ const confirmedNow = confirmedOutcomeTimes(hippoRoot, tenantId);
366
359
  const unconfirmed = toTag.filter((stale) => confirmedNow.get(stale.id) === confirmedAt.get(stale.id));
367
360
  if (unconfirmed.length === 0)
368
361
  return;
369
- const db = openStore(hippoRoot);
370
- try {
371
- const live = selectEntriesByIds(db, unconfirmed.map((stale) => stale.id), tenantId);
372
- for (const stale of unconfirmed) {
373
- const entry = live.get(stale.id);
374
- if (!entry || entry.tags.includes(CHURN_STALE_TAG))
375
- continue;
376
- const tagged = { ...entry, tags: [...entry.tags, CHURN_STALE_TAG] };
377
- writeEntryOn(db, hippoRoot, tagged);
378
- live.set(stale.id, tagged); // a repeated id is already tagged, as a fresh read would show
362
+ addTagToEntries(hippoRoot, tenantId, unconfirmed.map((stale) => stale.id), CHURN_STALE_TAG);
363
+ }
364
+ /** Counts every candidate's evidence into `result` and returns the rows still to tag, writing nothing. */
365
+ function recordChurnEvidence(git, candidates, anchorOf, result) {
366
+ const toTag = [];
367
+ for (const { entry, refs } of candidates) {
368
+ result.checked++;
369
+ const evidence = churnEvidence(git, refs, anchorOf(entry));
370
+ if (!evidence)
371
+ continue;
372
+ const headline = entry.content.replace(/\s+/g, ' ').slice(0, HEADLINE_CHARS);
373
+ if (entry.tags.includes(CHURN_STALE_TAG)) {
374
+ result.alreadyMarked++;
375
+ result.preview.push({ id: entry.id, headline, evidence, already: true });
376
+ continue;
379
377
  }
378
+ result.marked++;
379
+ result.preview.push({ id: entry.id, headline, evidence, already: false });
380
+ toTag.push(entry);
380
381
  }
381
- finally {
382
- closeHippoDb(db);
383
- }
382
+ return toTag;
384
383
  }
385
384
  /** Flags memories whose named file/symbol/script changed or disappeared since storage (or last confirmation); only adds/removes CHURN_STALE_TAG, never confidence/half-life/strength. */
386
385
  export function detectChurnStale(hippoRoot, repoRoot, opts) {
@@ -391,7 +390,7 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
391
390
  const { candidates, skippedPinned } = collectChurnCandidates(entries, opts);
392
391
  if (candidates.length === 0)
393
392
  return emptyChurnResult(dryRun, skippedPinned);
394
- const confirmedAt = queryConfirmedAt(hippoRoot, opts.tenantId);
393
+ const confirmedAt = confirmedOutcomeTimes(hippoRoot, opts.tenantId);
395
394
  // Compared as epoch ms, not strings: imported rows may carry offsets or other ISO forms.
396
395
  const anchorOf = (entry) => {
397
396
  const confirmed = confirmedAt.get(entry.id);
@@ -412,22 +411,7 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
412
411
  // Collected here, written only after every candidate's evidence is
413
412
  // computed: a GitReadError thrown mid-loop must never leave an earlier
414
413
  // candidate tagged while a later one aborts the run untagged.
415
- const toTag = [];
416
- for (const { entry, refs } of candidates) {
417
- result.checked++;
418
- const evidence = churnEvidence(git, refs, anchorOf(entry));
419
- if (!evidence)
420
- continue;
421
- const headline = entry.content.replace(/\s+/g, ' ').slice(0, 60);
422
- if (entry.tags.includes(CHURN_STALE_TAG)) {
423
- result.alreadyMarked++;
424
- result.preview.push({ id: entry.id, headline, evidence, already: true });
425
- continue;
426
- }
427
- result.marked++;
428
- result.preview.push({ id: entry.id, headline, evidence, already: false });
429
- toTag.push(entry);
430
- }
414
+ const toTag = recordChurnEvidence(git, candidates, anchorOf, result);
431
415
  if (!dryRun && toTag.length > 0)
432
416
  tagChurnStale(hippoRoot, opts.tenantId, toTag, confirmedAt);
433
417
  }
@@ -1,5 +1,5 @@
1
1
  import { type ToolCall } from './protocol.js';
2
- export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
2
+ export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
3
3
  export declare function runStatusTool({ hippoRoot, config, tenantId }: ToolCall): string;
4
4
  export declare function runConflictsTool(call: ToolCall): string;
5
5
  export declare function runResolveTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
@@ -1,36 +1,28 @@
1
1
  // Store health and admin tool handlers: base rates, status, conflicts, resolve, share and peers.
2
- import { calculateStrength } from '../memory.js';
3
- import { evalNow } from '../ablation.js';
4
- import { loadStrengthRows } from '../store/candidates.js';
5
- import { listMemoryConflicts, listTouchableConflicts, resolveConflict } from '../store/conflicts.js';
6
- import { shareMemory, listPeers } from '../shared.js';
7
- import { computePredictionBaserate } from '../predictions/store.js';
8
- import { closeHippoDb, openHippoDb } from '../db.js';
9
- import { NotFoundError } from '../api-errors.js';
10
- import { classifyOriginProject } from '../project-identity.js';
11
- import { canTouchScope, passesScopeFilterForRecall, personalScopeOf } from '../recall-scope.js';
12
- import { selectEntriesByIds } from '../store/entry-reads.js';
13
- import { selectMemoryReach } from '../store/tenant-lookup.js';
2
+ import { evalNow } from '../core/ablation.js';
3
+ import { loadStrengthTallies } from '../store/candidates.js';
4
+ import { countOpenConflicts, listTouchableConflicts, resolveConflict } from '../store/conflicts.js';
5
+ import { shareMemory, listPeers } from '../sharing/shared.js';
6
+ import { requireGroup, storeFor } from '../store/index.js';
7
+ import { NotFoundError } from '../core/api-errors.js';
8
+ import { classifyOriginProject } from '../core/project-identity.js';
9
+ import { canTouchScope, passesScopeFilterForRecall, personalScopeOf } from '../store/recall-scope.js';
10
+ import { chunked, loadEntriesByIds, readEntry } from '../store/entry-reads.js';
14
11
  import { mcpActor } from './protocol.js';
15
- import { isJsonString } from '../json.js';
12
+ import { isJsonString } from '../util/json.js';
13
+ import { DATE_PREFIX_CHARS } from '../util/token-text.js';
14
+ const BASERATE_DECIMALS = 3;
16
15
  const NOT_RESOLVED = 'Could not resolve. Check the conflict ID and --keep value.';
17
16
  /** The scope of memory `id`, null when it has none or does not exist. */
18
17
  function memoryScope(hippoRoot, id) {
19
- const db = openHippoDb(hippoRoot);
20
- try {
21
- return selectMemoryReach(db, id)?.scope ?? null;
22
- }
23
- finally {
24
- closeHippoDb(db);
25
- }
18
+ return readEntry(hippoRoot, id)?.scope ?? null;
26
19
  }
27
- export function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
28
- // Text-only reply, matching the other MCP tools; the helper opens its own db
29
- // and emits the audit, so call sites cannot drift.
20
+ export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
21
+ // Text-only reply, matching the other MCP tools; the group's read writes the audit row, so no surface can skip it.
30
22
  const classTag = String(args.class_tag || '').trim();
31
23
  if (!classTag)
32
24
  return 'No class_tag provided. Usage: pass class_tag matching a class used in past predictions (e.g. "migration-effort").';
33
- const baserate = computePredictionBaserate(hippoRoot, tenantId, classTag, ctx?.actor ?? 'mcp');
25
+ const baserate = await requireGroup(storeFor({ hippoRoot, store: ctx?.store }), 'predictions').predictionBaserate(tenantId, classTag, ctx?.actor ?? 'mcp');
34
26
  if (baserate.nClosed === 0) {
35
27
  return `No closed predictions in class "${classTag}" yet. Create one via hippo_predict (or 'hippo predict ...' CLI) and close it with hippo_predict_close once the actual outcome is known. Base rates need closed predictions with numeric actual_value to compute.`;
36
28
  }
@@ -38,37 +30,26 @@ export function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
38
30
  lines.push(`n_closed: ${baserate.nClosed}`);
39
31
  lines.push(`n_ratio_eligible: ${baserate.nRatioEligible}`);
40
32
  if (baserate.meanEstimate !== null)
41
- lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(3)}`);
33
+ lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(BASERATE_DECIMALS)}`);
42
34
  if (baserate.meanActual !== null)
43
- lines.push(`mean_actual: ${baserate.meanActual.toFixed(3)}`);
35
+ lines.push(`mean_actual: ${baserate.meanActual.toFixed(BASERATE_DECIMALS)}`);
44
36
  if (baserate.meanRatio !== null)
45
- lines.push(`mean_ratio: ${baserate.meanRatio.toFixed(3)}x`);
37
+ lines.push(`mean_ratio: ${baserate.meanRatio.toFixed(BASERATE_DECIMALS)}x`);
46
38
  if (baserate.p50Ratio !== null)
47
- lines.push(`p50_ratio: ${baserate.p50Ratio.toFixed(3)}x`);
39
+ lines.push(`p50_ratio: ${baserate.p50Ratio.toFixed(BASERATE_DECIMALS)}x`);
48
40
  if (baserate.mae !== null)
49
- lines.push(`mae: ${baserate.mae.toFixed(3)}`);
41
+ lines.push(`mae: ${baserate.mae.toFixed(BASERATE_DECIMALS)}`);
50
42
  return lines.join('\n');
51
43
  }
52
44
  export function runStatusTool({ hippoRoot, config, tenantId }) {
53
- // Every row counts toward the averages, so this scans the store, but without its text.
54
- const entries = loadStrengthRows(hippoRoot, tenantId);
55
- const now = evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
56
- let atRisk = 0;
57
- let totalStrength = 0;
58
- for (const e of entries) {
59
- const s = calculateStrength(e, now);
60
- totalStrength += s;
61
- if (s < 0.1 && !e.pinned)
62
- atRisk++;
63
- }
64
- const avgStrength = entries.length > 0 ? (totalStrength / entries.length).toFixed(2) : '0';
65
- const pinned = entries.filter((e) => e.pinned).length;
66
- const errors = entries.filter((e) => e.tags.includes('error')).length;
67
- const conflicts = listMemoryConflicts(hippoRoot, 'open', tenantId).length;
45
+ // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
46
+ const tallies = loadStrengthTallies(hippoRoot, tenantId, evalNow(), 0.1);
47
+ const avgStrength = tallies.total > 0 ? (tallies.strengthSum / tallies.total).toFixed(2) : '0';
48
+ const conflicts = countOpenConflicts(hippoRoot, tenantId);
68
49
  return [
69
- `Memories: ${entries.length} (${pinned} pinned, ${errors} errors)`,
50
+ `Memories: ${tallies.total} (${tallies.pinned} pinned, ${tallies.errors} errors)`,
70
51
  `Avg strength: ${avgStrength}`,
71
- `At risk (<0.1): ${atRisk}`,
52
+ `At risk (<0.1): ${tallies.atRisk}`,
72
53
  `Open conflicts: ${conflicts}`,
73
54
  `Half-life default: ${config.defaultHalfLifeDays}d`,
74
55
  ].join('\n');
@@ -76,19 +57,15 @@ export function runStatusTool({ hippoRoot, config, tenantId }) {
76
57
  /** Pairs whose two rows the caller could recall: its repo or user-global, and no scope it was not asked for. */
77
58
  function recallablePairs(call, conflicts, project) {
78
59
  const own = personalScopeOf(mcpActor(call.ctx));
79
- const db = openHippoDb(call.hippoRoot);
80
- try {
81
- const rows = selectEntriesByIds(db, conflicts.flatMap((c) => [c.memory_a_id, c.memory_b_id]), call.tenantId);
82
- const shown = (id) => {
83
- const row = rows.get(id);
84
- return row !== undefined && classifyOriginProject(row.origin_project, project) !== 'cross-project'
85
- && passesScopeFilterForRecall(row.scope ?? null, undefined, own);
86
- };
87
- return conflicts.filter((c) => shown(c.memory_a_id) && shown(c.memory_b_id));
88
- }
89
- finally {
90
- closeHippoDb(db);
91
- }
60
+ const ids = [...new Set(conflicts.flatMap((c) => [c.memory_a_id, c.memory_b_id]))];
61
+ // loadEntriesByIds reads at most one chunk of ids per call.
62
+ const rows = new Map(chunked(ids).flatMap((chunk) => loadEntriesByIds(call.hippoRoot, chunk, call.tenantId)).map((row) => [row.id, row]));
63
+ const shown = (id) => {
64
+ const row = rows.get(id);
65
+ return row !== undefined && classifyOriginProject(row.origin_project, project) !== 'cross-project'
66
+ && passesScopeFilterForRecall(row.scope ?? null, undefined, own);
67
+ };
68
+ return conflicts.filter((c) => shown(c.memory_a_id) && shown(c.memory_b_id));
92
69
  }
93
70
  export function runConflictsTool(call) {
94
71
  const { ctx, hippoRoot, tenantId } = call;
@@ -143,6 +120,6 @@ export function runPeersTool({ tenantId }) {
143
120
  const peers = listPeers(undefined, tenantId);
144
121
  if (peers.length === 0)
145
122
  return 'No peers found.';
146
- return peers.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0, 10)})`).join('\n');
123
+ return peers.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0, DATE_PREFIX_CHARS)})`).join('\n');
147
124
  }
148
125
  //# sourceMappingURL=admin-tools.js.map
@@ -1,9 +1,9 @@
1
- import type { SearchResult } from '../search/types.js';
1
+ import type { SearchResult } from '../core/search-types.js';
2
2
  import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
3
- import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api.js';
4
- import { type SessionHandoff } from '../handoff.js';
5
- import { detectAnchoring } from '../recall-history.js';
6
- import { detectAvailabilityBias } from '../availability.js';
3
+ import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api/index.js';
4
+ import { type SessionHandoff } from '../core/handoff.js';
5
+ import { detectAnchoring } from '../api/recall-history.js';
6
+ import { detectAvailabilityBias } from '../api/availability.js';
7
7
  export declare function formatContinuityBlock(block: ContinuityBlock): string;
8
8
  export declare function formatMemories(results: ReadonlyArray<Pick<SearchResult, 'entry'>>): string;
9
9
  export interface RenderedRecall {