hippo-memory 1.69.0 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1014) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,28 +1,32 @@
1
1
  // The write verbs: `hippo remember`, `hippo supersede` and `hippo trace`.
2
- import { envAnthropicApiKey } from '../env.js';
3
- import { evalNow } from '../ablation.js';
2
+ import { envAnthropicApiKey } from '../util/env.js';
3
+ import { evalNow } from '../core/ablation.js';
4
4
  import * as fs from 'fs';
5
- import { createMemory, createSuccessor, calculateStrength, calculateRewardFactor, confidenceFacets, confidenceLabel, computeSchemaFit, Layer, } from '../memory.js';
5
+ import { calculateStrength, calculateRewardFactor, confidenceFacets, confidenceLabel, Layer, } from '../core/memory.js';
6
+ import * as api from '../api/index.js';
7
+ import { getMemory } from '../api/memories.js';
8
+ import { ConflictError, NotFoundError } from '../core/api-errors.js';
6
9
  import { isInitialized } from '../store/open.js';
7
- import { writeEntry } from '../store/entry-writes.js';
8
- import { readEntry, loadAllEntries } from '../store/entry-reads.js';
9
- import { updateStats } from '../store/index-and-stats.js';
10
10
  import { listMemoryConflicts } from '../store/conflicts.js';
11
- import { RejectedValueError } from '../rejection.js';
12
- import { renderTraceContent, parseSteps } from '../trace.js';
13
- import { embedMemory } from '../embeddings.js';
14
- import { loadConfig } from '../config.js';
15
- import { extractPathTags } from '../path-context.js';
16
- import { detectScope } from '../scope.js';
17
- import { assertClientScope } from '../recall-scope.js';
18
- import { getGlobalRoot, initGlobal } from '../shared.js';
19
- import { vetSecrets } from '../secret-detect.js';
20
- import * as client from '../client.js';
21
- import { resolveTenantId } from '../tenant.js';
22
- import { computeSalience } from '../salience.js';
23
- import { validateOwner, isStrictOwnerEnv } from '../owner-validation.js';
11
+ import { RejectedValueError } from '../store/rejection.js';
12
+ import { renderTraceContent, parseSteps } from '../consolidate/trace.js';
13
+ import { extractPathTags } from '../search/path-context.js';
14
+ import { detectScope } from '../sharing/scope.js';
15
+ import { assertClientScope } from '../store/recall-scope.js';
16
+ import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
17
+ import { vetSecrets } from '../util/secret-detect.js';
18
+ import * as client from './client.js';
19
+ import { cliApiContext } from './api-context.js';
20
+ import { validateOwner, isStrictOwnerEnv } from './owner-validation.js';
24
21
  import { printError } from './output.js';
25
- import { emitCliAudit, requireInit, runViaServerIfAvailable, fmt } from './shared.js';
22
+ import { requireInit, runViaServerIfAvailable } from './shared.js';
23
+ import { fmt } from './print.js';
24
+ import { boolFlag, flagIsTrue, isOneOf, stringFlag, stringListFlag } from './flag-values.js';
25
+ import { DAY_MS } from '../util/time.js';
26
+ import { errorMessage } from '../util/log.js';
27
+ import { CliExit } from './exit.js';
28
+ const PARENT_PREVIEW_CHARS = 70;
29
+ const DETAIL_CONTENT_CHARS = 160;
26
30
  // Shared by the direct write and the routed request so both store the same tags.
27
31
  function rememberTags(flags, cwd) {
28
32
  const requested = Array.isArray(flags['tag']) ? [...flags['tag']] : [];
@@ -53,41 +57,37 @@ function rememberConfidence(flags) {
53
57
  confidence = 'verified';
54
58
  return confidence;
55
59
  }
60
+ const USER_VISIBLE_KINDS = ['distilled', 'superseded'];
56
61
  function parseKindFlag(flags) {
57
- const kindFlagRaw = typeof flags['kind'] === 'string' ? flags['kind'] : undefined;
62
+ const kindFlagRaw = stringFlag(flags, 'kind');
58
63
  const kindFlag = kindFlagRaw === undefined ? undefined : kindFlagRaw.toLowerCase();
59
- // CLI surface intentionally restricted: 'raw' is reserved for ingestion connectors
60
- // that route deletions through archiveRawMemory. Existing
61
- // forget/consolidate/conflict-resolve paths abort on kind='raw' via the append-only
62
- // trigger, so exposing --kind raw here would create unforgettable memories.
63
- // 'archived' is an internal sentinel set only inside archiveRawMemory's transaction.
64
- const userVisibleKinds = ['distilled', 'superseded'];
65
- if (kindFlag !== undefined && !userVisibleKinds.includes(kindFlag)) {
66
- printError(`Invalid --kind: "${kindFlagRaw}". Must be one of: ${userVisibleKinds.join(', ')}`);
64
+ // 'raw' is reserved for ingestion connectors (deletions go through archiveRawMemory); the append-only trigger aborts forget/consolidate on raw rows,
65
+ // so exposing --kind raw would create unforgettable memories. 'archived' is an internal sentinel set only in that transaction.
66
+ if (kindFlag !== undefined && !isOneOf(USER_VISIBLE_KINDS, kindFlag)) {
67
+ printError(`Invalid --kind: "${kindFlagRaw}". Must be one of: ${USER_VISIBLE_KINDS.join(', ')}`);
67
68
  printError(`(kind='raw' is reserved for ingestion connectors; kind='archived' is internal.)`);
68
- process.exit(1);
69
+ throw new CliExit(1);
69
70
  }
70
71
  return kindFlag;
71
72
  }
72
73
  function parseRememberEnvelope(flags) {
73
74
  const kind = parseKindFlag(flags);
74
- const ownerRaw = typeof flags['owner'] === 'string' ? flags['owner'] : null;
75
+ const ownerRaw = stringFlag(flags, 'owner') ?? null;
75
76
  const ownerCheck = validateOwner(ownerRaw, { strict: isStrictOwnerEnv() });
76
77
  if (!ownerCheck.ok) {
77
78
  printError(ownerCheck.message);
78
- process.exit(1);
79
+ throw new CliExit(1);
79
80
  }
80
81
  if (ownerCheck.message)
81
82
  printError(ownerCheck.message);
82
83
  const owner = ownerCheck.value ?? null;
83
- const artifactRef = typeof flags['artifact-ref'] === 'string' ? flags['artifact-ref'] : null;
84
- const scope = typeof flags['scope'] === 'string' ? flags['scope'].trim() || null : null;
84
+ const artifactRef = stringFlag(flags, 'artifact-ref') ?? null;
85
+ const scope = stringFlag(flags, 'scope')?.trim() || null;
85
86
  assertClientScope(scope);
86
87
  return { kind, owner, artifactRef, scope };
87
88
  }
88
- /** @internal Exported so tests/remember-origin-parity.test.ts runs the real direct write; not a stable public API. */
89
- export async function cmdRemember(hippoRoot, text, flags) {
90
- const useGlobal = Boolean(flags['global']);
89
+ async function cmdRemember(hippoRoot, tenantId, text, flags) {
90
+ const useGlobal = boolFlag(flags, 'global');
91
91
  const targetRoot = useGlobal ? getGlobalRoot() : hippoRoot;
92
92
  if (useGlobal) {
93
93
  initGlobal();
@@ -96,56 +96,33 @@ export async function cmdRemember(hippoRoot, text, flags) {
96
96
  requireInit(hippoRoot);
97
97
  }
98
98
  const { requested: requestedTags, all: allTags } = rememberTags(flags, process.cwd());
99
- const confidence = rememberConfidence(flags);
100
- // Schema fit needs the store, which the routed request has no access to, so it stays here.
101
- const existing = loadAllEntries(targetRoot, resolveTenantId({}));
102
- const schemaFit = computeSchemaFit(text, requestedTags, existing);
103
99
  const envelope = parseRememberEnvelope(flags);
104
- // Stamp tenant_id from env (HIPPO_TENANT) so recall isolation can filter on this row; unauthenticated CLI gets 'default'.
105
- const tenantId = resolveTenantId({});
106
- const rememberConfig = loadConfig(targetRoot);
107
- const entry = createMemory(text, {
108
- layer: Layer.Episodic,
100
+ const ctx = cliApiContext(targetRoot, tenantId);
101
+ const outcome = api.rememberLocally(ctx, {
102
+ content: text,
103
+ kind: envelope.kind,
104
+ scope: envelope.scope ?? undefined,
105
+ owner: envelope.owner ?? undefined,
106
+ artifactRef: envelope.artifactRef ?? undefined,
109
107
  tags: allTags,
110
- pinned: Boolean(flags['pin']),
108
+ // Schema fit is scored on the tags the caller typed, without the path and scope tags added from this process.
109
+ fitTags: requestedTags,
110
+ layer: Layer.Episodic,
111
+ pinned: boolFlag(flags, 'pin'),
111
112
  source: useGlobal ? 'cli-global' : 'cli',
112
- confidence,
113
- schema_fit: schemaFit,
114
- kind: envelope.kind,
115
- scope: envelope.scope,
116
- owner: envelope.owner,
117
- artifact_ref: envelope.artifactRef,
118
- tenantId,
119
- baseHalfLifeDays: rememberConfig.defaultHalfLifeDays,
113
+ confidence: rememberConfidence(flags),
114
+ force: boolFlag(flags, 'force'),
120
115
  });
121
- if (!passesSalienceGate(entry, text, existing, rememberConfig, flags))
116
+ if (outcome.status === 'skipped') {
117
+ console.log(`Skipped (salience: ${outcome.reason}, score ${outcome.score.toFixed(2)})`);
122
118
  return;
123
- writeEntry(targetRoot, entry);
124
- updateStats(targetRoot, { remembered: 1 });
125
- printRemembered(entry, useGlobal);
126
- void embedMemory(targetRoot, entry);
127
- await extractRememberFacts(targetRoot, entry, flags);
128
- }
129
- /** False when the gate skips the write; a start_weak verdict weakens `entry` in place. */
130
- function passesSalienceGate(entry, text, existing, rememberConfig, flags) {
131
- if (!rememberConfig.salience.enabled || Boolean(flags['pin']) || Boolean(flags['force']))
132
- return true;
133
- const salienceResult = computeSalience(text, entry.tags, existing, {
134
- recentWindow: rememberConfig.salience.recentWindow,
135
- overlapThreshold: rememberConfig.salience.overlapThreshold,
136
- minContentLength: rememberConfig.salience.minContentLength,
137
- maxRepeatErrors: rememberConfig.salience.maxRepeatErrors,
138
- });
139
- if (salienceResult.decision === 'skip') {
140
- console.log(`Skipped (salience: ${salienceResult.reason}, score ${salienceResult.score.toFixed(2)})`);
141
- return false;
142
- }
143
- if (salienceResult.decision === 'start_weak') {
144
- entry.strength = salienceResult.score;
145
- entry.half_life_days = Math.max(1, entry.half_life_days * 0.5);
146
- console.log(`Weakened (salience: ${salienceResult.reason}, strength ${salienceResult.score.toFixed(2)})`);
147
119
  }
148
- return true;
120
+ const weak = outcome.startedWeak;
121
+ if (weak)
122
+ console.log(`Weakened (salience: ${weak.reason}, strength ${weak.strength.toFixed(2)})`);
123
+ printRemembered(outcome.entry, useGlobal);
124
+ const request = { requested: boolFlag(flags, 'extract'), apiKey: envAnthropicApiKey() };
125
+ printExtraction(await api.extractRememberedFacts(ctx, outcome.entry, request));
149
126
  }
150
127
  function printRemembered(entry, useGlobal) {
151
128
  const prefix = useGlobal ? '[global] ' : '';
@@ -158,76 +135,78 @@ function printRemembered(entry, useGlobal) {
158
135
  for (const w of vetSecrets(entry.content, entry.tags, false).warnings)
159
136
  printError(`Warning: ${w}`);
160
137
  }
161
- async function extractRememberFacts(targetRoot, entry, flags) {
162
- const config = loadConfig(targetRoot);
163
- const shouldExtract = flags['extract'] || config.extraction.enabled === true;
164
- const apiKey = envAnthropicApiKey() ?? '';
165
- if (shouldExtract && apiKey) {
166
- try {
167
- const { extractFacts, storeExtractedFacts } = await import('../extract.js');
168
- const facts = await extractFacts(entry.content, {
169
- apiKey,
170
- model: config.extraction.model,
171
- onError: (msg) => printError(` (extraction failed: ${msg})`),
172
- });
173
- if (facts.length > 0) {
174
- storeExtractedFacts(targetRoot, entry, facts);
175
- printError(` extracted ${facts.length} fact(s)`);
176
- }
177
- }
178
- catch (err) {
179
- // Extraction is best-effort: report it, never block remember.
180
- printError(` (extraction failed: ${err instanceof Error ? err.message : String(err)})`);
181
- }
182
- }
183
- else if (shouldExtract && !apiKey) {
138
+ function printExtraction(extraction) {
139
+ if (extraction.status === 'no_key')
184
140
  printError(' (extraction skipped: ANTHROPIC_API_KEY not set)');
141
+ if (extraction.status !== 'ran')
142
+ return;
143
+ for (const failure of extraction.failures)
144
+ printError(` (extraction failed: ${failure})`);
145
+ if (extraction.facts > 0)
146
+ printError(` extracted ${extraction.facts} fact(s)`);
147
+ }
148
+ function supersedeTags(flags) {
149
+ return stringListFlag(flags, 'tag');
150
+ }
151
+ /** The api's conflict text differs by which writer lost; the row itself names its successor either way. */
152
+ async function alreadySupersededLine(hippoRoot, oldId, tenantId, conflict) {
153
+ const by = (await getMemory(cliApiContext(hippoRoot, tenantId), oldId))?.superseded_by;
154
+ return by ? `Error: memory ${oldId} is already superseded by ${by}. Supersede that one instead.` : `Error: ${conflict.message}`;
155
+ }
156
+ function parseLayerFlag(flags) {
157
+ const raw = stringFlag(flags, 'layer');
158
+ if (raw === undefined)
159
+ return undefined;
160
+ const layer = Object.values(Layer).find((l) => l === raw);
161
+ if (layer === undefined) {
162
+ printError(`Invalid --layer: "${raw}". Must be one of: ${Object.values(Layer).join(', ')}`);
163
+ throw new CliExit(1);
185
164
  }
165
+ return layer;
186
166
  }
187
- function cmdSupersede(hippoRoot, oldId, newContent, flags) {
167
+ async function cmdSupersede(hippoRoot, tenantId, oldId, newContent, flags) {
188
168
  requireInit(hippoRoot);
189
- const old = readEntry(hippoRoot, oldId, resolveTenantId({}));
190
- if (!old) {
191
- printError(`Error: memory ${oldId} not found.`);
192
- process.exit(1);
169
+ const overrides = {
170
+ layer: parseLayerFlag(flags),
171
+ tags: supersedeTags(flags),
172
+ // Without --pin the successor keeps the old row's pin.
173
+ pinned: flagIsTrue(flags, 'pin') ? true : undefined,
174
+ };
175
+ let newId;
176
+ try {
177
+ ({ newId } = api.supersede(cliApiContext(hippoRoot, tenantId), oldId, newContent, overrides));
193
178
  }
194
- if (old.superseded_by) {
195
- printError(`Error: memory ${oldId} is already superseded by ${old.superseded_by}. Supersede that one instead.`);
196
- process.exit(1);
179
+ catch (err) {
180
+ if (err instanceof NotFoundError)
181
+ printError(`Error: memory ${oldId} not found.`);
182
+ else if (err instanceof RejectedValueError)
183
+ printError(`Error: ${err.message}`);
184
+ else if (err instanceof ConflictError)
185
+ printError(await alreadySupersededLine(hippoRoot, oldId, tenantId, err));
186
+ else
187
+ throw err;
188
+ throw new CliExit(1);
197
189
  }
198
- const layer = typeof flags['layer'] === 'string' ? flags['layer'] : undefined;
199
- const rawTags = flags['tag'];
200
- const tags = Array.isArray(rawTags)
201
- ? rawTags.map((t) => String(t))
202
- : typeof rawTags === 'string'
203
- ? rawTags.split(',').map((t) => t.trim()).filter(Boolean)
204
- : undefined;
205
- const pinned = flags['pin'] === true || old.pinned;
206
- const newEntry = createSuccessor(old, newContent, {
207
- tenantId: old.tenantId,
208
- baseHalfLifeDays: loadConfig(hippoRoot).defaultHalfLifeDays,
209
- layer,
210
- tags,
211
- pinned,
212
- });
213
- // Write the SUCCESSOR first: a rejection-guard refusal then mutates nothing, and an old-row failure leaves an
214
- // orphan successor rather than a dangling pointer. Unlike api.supersede this path is two non-atomic writes.
190
+ console.log(`Superseded ${oldId} → ${newId}`);
191
+ }
192
+ function parseStepsOrExit(stepsJson) {
215
193
  try {
216
- writeEntry(hippoRoot, newEntry);
194
+ return parseSteps(stepsJson);
217
195
  }
218
196
  catch (err) {
219
- if (err instanceof RejectedValueError) {
220
- printError(`Error: ${err.message}`);
221
- process.exit(1);
222
- }
223
- throw err;
197
+ printError(errorMessage(err));
198
+ throw new CliExit(1);
224
199
  }
225
- old.superseded_by = newEntry.id;
226
- writeEntry(hippoRoot, old);
227
- emitCliAudit(hippoRoot, 'supersede', oldId, { newId: newEntry.id });
228
- console.log(`Superseded ${oldId} → ${newEntry.id}`);
229
200
  }
230
- function cmdTraceRecord(hippoRoot, flags) {
201
+ function traceTags(flags) {
202
+ const rawTags = flags['tag'];
203
+ return Array.isArray(rawTags)
204
+ ? rawTags.map((t) => String(t))
205
+ : rawTags !== undefined
206
+ ? [String(rawTags)]
207
+ : [];
208
+ }
209
+ function cmdTraceRecord(hippoRoot, tenantId, flags) {
231
210
  requireInit(hippoRoot);
232
211
  const task = String(flags['task'] ?? '').trim();
233
212
  const stepsJson = String(flags['steps'] ?? '').trim();
@@ -235,64 +214,51 @@ function cmdTraceRecord(hippoRoot, flags) {
235
214
  const validOutcomes = ['success', 'failure', 'partial'];
236
215
  if (!task || !stepsJson || !outcome) {
237
216
  printError('Usage: hippo trace record --task <t> --steps <json> --outcome <success|failure|partial> [--session <id>] [--tag <t>]');
238
- process.exit(1);
217
+ throw new CliExit(1);
239
218
  }
240
- if (!validOutcomes.includes(outcome)) {
219
+ if (!isOneOf(validOutcomes, outcome)) {
241
220
  printError(`Invalid outcome: "${outcome}". Must be one of: ${validOutcomes.join(', ')}.`);
242
- process.exit(1);
243
- }
244
- let steps;
245
- try {
246
- steps = parseSteps(stepsJson);
247
- }
248
- catch (err) {
249
- printError(String(err instanceof Error ? err.message : err));
250
- process.exit(1);
221
+ throw new CliExit(1);
251
222
  }
223
+ const steps = parseStepsOrExit(stepsJson);
252
224
  const sessionId = String(flags['session'] ?? '').trim() || null;
253
- const rawTags = flags['tag'];
254
- const tags = Array.isArray(rawTags)
255
- ? rawTags.map((t) => String(t))
256
- : rawTags !== undefined
257
- ? [String(rawTags)]
258
- : [];
225
+ const tags = traceTags(flags);
259
226
  const content = renderTraceContent({
260
227
  task,
261
228
  steps,
262
- outcome: outcome,
229
+ outcome,
263
230
  });
264
- const entry = createMemory(content, {
265
- layer: Layer.Trace,
231
+ const { id } = api.remember(cliApiContext(hippoRoot, tenantId), {
232
+ content,
266
233
  tags,
267
- source: String(flags['source'] ?? 'cli'),
268
- trace_outcome: outcome,
269
- source_session_id: sessionId,
270
- tenantId: resolveTenantId({}),
271
- baseHalfLifeDays: loadConfig(hippoRoot).defaultHalfLifeDays,
234
+ local: {
235
+ layer: Layer.Trace,
236
+ source: String(flags['source'] ?? 'cli'),
237
+ traceOutcome: outcome,
238
+ sourceSessionId: sessionId,
239
+ },
272
240
  });
273
- writeEntry(hippoRoot, entry);
274
- console.log(`Recorded trace ${entry.id} (outcome=${outcome}, ${steps.length} steps)`);
241
+ console.log(`Recorded trace ${id} (outcome=${outcome}, ${steps.length} steps)`);
275
242
  }
276
- function cmdTrace(hippoRoot, id, flags) {
243
+ async function cmdTrace(hippoRoot, tenantId, id, flags) {
277
244
  requireInit(hippoRoot);
278
- const asJson = Boolean(flags['json']);
279
- const tenantId = resolveTenantId({});
245
+ const asJson = boolFlag(flags, 'json');
280
246
  // Look in local store first, then global.
281
- let entry = readEntry(hippoRoot, id, tenantId);
247
+ let entry = await getMemory(cliApiContext(hippoRoot, tenantId), id);
282
248
  let sourceLabel = 'local';
283
249
  const globalRoot = getGlobalRoot();
284
250
  if (!entry && isInitialized(globalRoot)) {
285
- entry = readEntry(globalRoot, id, tenantId);
251
+ entry = await getMemory(cliApiContext(globalRoot, tenantId), id);
286
252
  sourceLabel = 'global';
287
253
  }
288
254
  if (!entry) {
289
255
  printError(`Memory not found: ${id}`);
290
- process.exit(1);
256
+ throw new CliExit(1);
291
257
  }
292
258
  const t = {
293
259
  entry, id, sourceLabel,
294
260
  ...traceStats(entry),
295
- ...traceLineage(hippoRoot, globalRoot, entry, id, tenantId),
261
+ ...(await traceLineage(hippoRoot, globalRoot, entry, id, tenantId)),
296
262
  };
297
263
  if (asJson) {
298
264
  printTraceJson(t);
@@ -307,22 +273,24 @@ function traceStats(entry) {
307
273
  const rewardFactor = calculateRewardFactor(entry);
308
274
  const effHalfLife = halfLife * rewardFactor;
309
275
  const createdMs = new Date(entry.created).getTime();
310
- const ageDays = (now.getTime() - createdMs) / 86_400_000;
276
+ const ageDays = (now.getTime() - createdMs) / DAY_MS;
311
277
  const lastMs = new Date(entry.last_retrieved).getTime();
312
- const sinceLast = (now.getTime() - lastMs) / 86_400_000;
278
+ const sinceLast = (now.getTime() - lastMs) / DAY_MS;
313
279
  const facets = confidenceFacets(entry, now);
314
280
  const conf = confidenceLabel(entry, now).text;
315
281
  // Projected strength: same decay curve, just push `now` out.
316
- const projectedAt = (days) => calculateStrength(entry, new Date(now.getTime() + days * 86_400_000));
282
+ const projectedAt = (days) => calculateStrength(entry, new Date(now.getTime() + days * DAY_MS));
317
283
  return { strength, halfLife, rewardFactor, effHalfLife, ageDays, sinceLast, facets, conf, projectedAt };
318
284
  }
319
- function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
285
+ async function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
320
286
  // Parents (consolidation lineage) — schema v9 field.
321
287
  const parents = Array.isArray(entry.parents) ? entry.parents : [];
322
- const parentPreviews = parents.map((pid) => {
323
- const p = readEntry(hippoRoot, pid, tenantId) ?? (isInitialized(globalRoot) ? readEntry(globalRoot, pid, tenantId) : null);
324
- return { id: pid, content: p ? p.content.replace(/\s+/g, ' ').slice(0, 70) : '(not found)' };
325
- });
288
+ const parentPreviews = [];
289
+ for (const pid of parents) {
290
+ const p = (await getMemory(cliApiContext(hippoRoot, tenantId), pid))
291
+ ?? (isInitialized(globalRoot) ? await getMemory(cliApiContext(globalRoot, tenantId), pid) : null);
292
+ parentPreviews.push({ id: pid, content: p ? p.content.replace(/\s+/g, ' ').slice(0, PARENT_PREVIEW_CHARS) : '(not found)' });
293
+ }
326
294
  // Open conflicts involving this memory.
327
295
  const allConflicts = [
328
296
  ...listMemoryConflicts(hippoRoot, 'open', tenantId),
@@ -365,7 +333,7 @@ function printTraceText(t) {
365
333
  const { parentPreviews, myConflicts } = t;
366
334
  console.log(`Memory: ${entry.id} [${sourceLabel}]`);
367
335
  console.log('='.repeat(50));
368
- console.log(`Content: ${entry.content.replace(/\s+/g, ' ').slice(0, 160)}${entry.content.length > 160 ? '...' : ''}`);
336
+ console.log(`Content: ${entry.content.replace(/\s+/g, ' ').slice(0, DETAIL_CONTENT_CHARS)}${entry.content.length > DETAIL_CONTENT_CHARS ? '...' : ''}`);
369
337
  console.log(`Layer: ${entry.layer.padEnd(10)} Confidence: ${conf.padEnd(14)} Pinned: ${entry.pinned ? 'yes' : 'no'}${entry.starred ? ' Starred: yes' : ''}`);
370
338
  console.log(`Tags: ${entry.tags.join(', ') || '(none)'}`);
371
339
  console.log(`Created: ${entry.created} (${fmt(ageDays, 1)} days ago)`);
@@ -397,7 +365,7 @@ function printTraceText(t) {
397
365
  }
398
366
  }
399
367
  }
400
- export async function handleRemember({ hippoRoot, args, flags }) {
368
+ export async function handleRemember({ hippoRoot, tenantId, args, flags }) {
401
369
  let text;
402
370
  if (args.length === 1 && args[0] === '-') {
403
371
  text = fs.readFileSync(0, 'utf-8').trim();
@@ -407,70 +375,65 @@ export async function handleRemember({ hippoRoot, args, flags }) {
407
375
  }
408
376
  if (!text || text.length < 3) {
409
377
  printError('Memory content too short (minimum 3 characters).');
410
- process.exit(1);
378
+ throw new CliExit(1);
411
379
  }
412
- // Thin-client routing. When a server is up, simple `remember` calls go
413
- // over HTTP so the daemon stays single-writer (footgun #2). Rich CLI
414
- // flags (--pin, --layer, --extract, --global) still need the direct
415
- // path; we only intercept the minimal envelope. The salience gate is
416
- // NOT in richFlag and the route does not apply it, so a routed remember
417
- // stores what a direct one would skip; do not read this list as covering salience.
380
+ // Thin-client routing: simple `remember` calls go over HTTP so the daemon stays the single writer; rich flags need the direct path.
381
+ // The salience gate is not in richFlag and the route does not apply it, so a routed remember stores what a direct one would skip.
418
382
  const richFlag = flags['pin'] || flags['global'] || flags['extract'] || flags['force'] ||
419
383
  flags['observed'] || flags['inferred'] || flags['verified'] ||
420
384
  flags['layer'] !== undefined;
421
- if (!richFlag) {
422
- const rememberKindRaw = typeof flags['kind'] === 'string' ? flags['kind'].toLowerCase() : undefined;
423
- const rememberKindAllowed = ['distilled', 'superseded'];
424
- if (rememberKindRaw === undefined || rememberKindAllowed.includes(rememberKindRaw)) {
425
- const tags = rememberTags(flags, process.cwd()).all;
426
- // Validate --owner on the thin-client path too, so validation is the same whether or not a server is up.
427
- const thinOwnerRaw = typeof flags['owner'] === 'string' ? flags['owner'] : undefined;
428
- const thinOwnerCheck = validateOwner(thinOwnerRaw, { strict: isStrictOwnerEnv() });
429
- if (!thinOwnerCheck.ok) {
430
- printError(thinOwnerCheck.message);
431
- process.exit(1);
432
- }
433
- if (thinOwnerCheck.message)
434
- printError(thinOwnerCheck.message);
435
- const remembered = await runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
436
- const result = await client.remember(info.url, apiKey, {
437
- content: text,
438
- kind: rememberKindRaw,
439
- scope: typeof flags['scope'] === 'string' ? flags['scope'] : undefined,
440
- owner: thinOwnerCheck.value,
441
- artifactRef: typeof flags['artifact-ref'] === 'string' ? flags['artifact-ref'] : undefined,
442
- tags,
443
- });
444
- console.log(`Remembered [${result.id}] (via ${info.url})`);
445
- console.log(` Kind: ${result.kind} | Tenant: ${result.tenantId}`);
446
- for (const w of result.warnings ?? [])
447
- printError(`Warning: ${w}`);
448
- });
449
- if (remembered)
450
- return;
451
- }
385
+ if (!richFlag && await rememberViaThinClient(hippoRoot, text, flags))
386
+ return;
387
+ await cmdRemember(hippoRoot, tenantId, text, flags);
388
+ }
389
+ async function rememberViaThinClient(hippoRoot, text, flags) {
390
+ const rememberKindRaw = stringFlag(flags, 'kind')?.toLowerCase();
391
+ if (rememberKindRaw !== undefined && !isOneOf(USER_VISIBLE_KINDS, rememberKindRaw))
392
+ return false;
393
+ const tags = rememberTags(flags, process.cwd()).all;
394
+ // Validate --owner on the thin-client path too, so validation is the same whether or not a server is up.
395
+ const thinOwnerRaw = stringFlag(flags, 'owner');
396
+ const thinOwnerCheck = validateOwner(thinOwnerRaw, { strict: isStrictOwnerEnv() });
397
+ if (!thinOwnerCheck.ok) {
398
+ printError(thinOwnerCheck.message);
399
+ throw new CliExit(1);
452
400
  }
453
- await cmdRemember(hippoRoot, text, flags);
401
+ if (thinOwnerCheck.message)
402
+ printError(thinOwnerCheck.message);
403
+ return runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
404
+ const result = await client.remember(info.url, apiKey, {
405
+ content: text,
406
+ kind: rememberKindRaw,
407
+ scope: stringFlag(flags, 'scope'),
408
+ owner: thinOwnerCheck.value,
409
+ artifactRef: stringFlag(flags, 'artifact-ref'),
410
+ tags,
411
+ });
412
+ console.log(`Remembered [${result.id}] (via ${info.url})`);
413
+ console.log(` Kind: ${result.kind} | Tenant: ${result.tenantId}`);
414
+ for (const w of result.warnings ?? [])
415
+ printError(`Warning: ${w}`);
416
+ });
454
417
  }
455
- export function handleSupersede({ hippoRoot, args, flags }) {
418
+ export async function handleSupersede({ hippoRoot, tenantId, args, flags }) {
456
419
  const oldId = args[0];
457
420
  const newContent = args.slice(1).join(' ').trim();
458
421
  if (!oldId || !newContent) {
459
422
  printError('Usage: hippo supersede <old-id> "<new content>" [--layer L] [--tag T] [--pin]');
460
- process.exit(1);
423
+ throw new CliExit(1);
461
424
  }
462
- cmdSupersede(hippoRoot, oldId, newContent, flags);
425
+ await cmdSupersede(hippoRoot, tenantId, oldId, newContent, flags);
463
426
  }
464
- export function handleTrace({ hippoRoot, args, flags }) {
427
+ export async function handleTrace({ hippoRoot, tenantId, args, flags }) {
465
428
  const sub = args[0] ? String(args[0]) : '';
466
429
  if (sub === 'record') {
467
- cmdTraceRecord(hippoRoot, flags);
430
+ cmdTraceRecord(hippoRoot, tenantId, flags);
468
431
  return;
469
432
  }
470
433
  if (!sub) {
471
434
  printError('Usage: hippo trace <memory-id> | hippo trace record --task <t> --steps <json> --outcome <o>');
472
- process.exit(1);
435
+ throw new CliExit(1);
473
436
  }
474
- cmdTrace(hippoRoot, sub, flags);
437
+ await cmdTrace(hippoRoot, tenantId, sub, flags);
475
438
  }
476
439
  //# sourceMappingURL=remember.js.map
@@ -1,33 +1,20 @@
1
- import * as fs from 'fs';
2
1
  export declare const DAILY_TASK_NAME = "hippo-daily-runner";
3
2
  interface WorkspaceRegistry {
4
3
  version: 1;
5
4
  workspaces: string[];
6
5
  }
7
- /**
8
- * Dependency-injection seam for tests. Production code always uses the real
9
- * `fs` functions imported above; tests override this via
10
- * __setSchedulerFsDeps to substitute fakes instead of `vi.mock`ing the
11
- * built-in `fs` module. Never called outside tests -- this module's public
12
- * behavior is unaffected when it's never invoked.
13
- */
14
- export interface SchedulerFsDeps {
15
- existsSync: typeof fs.existsSync;
16
- readFileSync: typeof fs.readFileSync;
17
- mkdirSync: typeof fs.mkdirSync;
18
- writeFileSync: typeof fs.writeFileSync;
19
- renameSync: typeof fs.renameSync;
20
- }
21
- /** Test-only override. Not part of this module's public API surface. */
22
- export declare function __setSchedulerFsDeps(overrides: Partial<SchedulerFsDeps>): void;
23
6
  export declare function workspaceRegistryPath(globalRoot: string): string;
24
7
  export declare function loadWorkspaceRegistry(globalRoot: string): WorkspaceRegistry;
25
8
  export declare function saveWorkspaceRegistry(globalRoot: string, registry: WorkspaceRegistry): void;
26
9
  export declare function registerWorkspace(globalRoot: string, projectDir: string): WorkspaceRegistry;
27
10
  export declare function listRegisteredWorkspaces(globalRoot: string): string[];
11
+ /** True when a runner path holds a character that would break the quoted command or split the crontab line. */
12
+ export declare function hasUnsafeRunnerPathChars(runnerDir: string, platform: NodeJS.Platform): boolean;
28
13
  export declare function buildDailyRunnerCommand(projectDir: string, platform?: NodeJS.Platform): string;
29
14
  /** What the Windows task runs. A plain `cmd /c` task opens a visible console every morning. */
30
15
  export declare function buildWindowsTaskRun(cmd: string): string;
16
+ /** `text` for the inside of one double-quoted Windows argument: a backslash run before a quote or the end doubles, so no quote ends the argument early. */
17
+ export declare function quoteInsideWindowsArg(text: string): string;
31
18
  /** Argv for `schtasks`, passed without a shell: through cmd.exe the `&&` in /tr split the command. */
32
19
  export declare function buildSchtasksCreateArgs(taskName: string, cmd: string): string[];
33
20
  export declare function runDailyMaintenance(workspaces: readonly string[], runCommand: (cwd: string, args: string[]) => void): void;