hippo-memory 1.72.0 → 2.1.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 (995) hide show
  1. package/README.md +6 -4
  2. package/dist/agent-memories/apply.d.ts +7 -5
  3. package/dist/agent-memories/apply.js +66 -39
  4. package/dist/agent-memories/claude-code.d.ts +8 -2
  5. package/dist/agent-memories/claude-code.js +26 -7
  6. package/dist/agent-memories/copilot.js +2 -1
  7. package/dist/agent-memories/files.js +2 -1
  8. package/dist/agent-memories/legacy.d.ts +6 -3
  9. package/dist/agent-memories/legacy.js +35 -14
  10. package/dist/agent-memories/markdown.d.ts +3 -1
  11. package/dist/agent-memories/markdown.js +3 -1
  12. package/dist/agent-memories/openclaw.js +5 -2
  13. package/dist/agent-memories/plan.js +11 -1
  14. package/dist/agent-memories/project-folds.js +2 -1
  15. package/dist/agent-memories/report.d.ts +4 -1
  16. package/dist/agent-memories/report.js +43 -9
  17. package/dist/agent-memories/source.d.ts +8 -2
  18. package/dist/agent-memories/source.js +11 -3
  19. package/dist/agent-memories/sync.d.ts +7 -2
  20. package/dist/agent-memories/sync.js +141 -101
  21. package/dist/api/assemble.d.ts +6 -4
  22. package/dist/api/assemble.js +11 -5
  23. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  24. package/dist/api/auth/audit.js +58 -0
  25. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
  26. package/dist/api/{auth.js → auth/auth.js} +66 -54
  27. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  28. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
  29. package/dist/api/auth/session-owners.d.ts +10 -0
  30. package/dist/api/auth/session-owners.js +35 -0
  31. package/dist/api/availability.d.ts +3 -1
  32. package/dist/api/availability.js +3 -1
  33. package/dist/api/busy.d.ts +2 -0
  34. package/dist/api/busy.js +2 -0
  35. package/dist/api/cli-surface.d.ts +6 -0
  36. package/dist/api/cli-surface.js +6 -0
  37. package/dist/api/config-of.d.ts +5 -0
  38. package/dist/api/config-of.js +6 -0
  39. package/dist/api/context-auto.d.ts +4 -1
  40. package/dist/api/context-auto.js +14 -4
  41. package/dist/api/context-render.js +14 -7
  42. package/dist/api/context-select.d.ts +4 -1
  43. package/dist/api/context-select.js +31 -34
  44. package/dist/api/context-types.d.ts +38 -12
  45. package/dist/api/context.d.ts +8 -5
  46. package/dist/api/context.js +120 -63
  47. package/dist/api/continuity.d.ts +24 -21
  48. package/dist/api/continuity.js +18 -20
  49. package/dist/api/correction-latency.d.ts +3 -1
  50. package/dist/api/correction-latency.js +3 -1
  51. package/dist/api/error-reply.d.ts +4 -1
  52. package/dist/api/error-reply.js +12 -3
  53. package/dist/api/index.d.ts +39 -23
  54. package/dist/api/index.js +21 -23
  55. package/dist/api/instruction-detect.d.ts +4 -1
  56. package/dist/api/instruction-detect.js +75 -20
  57. package/dist/api/ledger-db.d.ts +15 -11
  58. package/dist/api/ledger-db.js +21 -23
  59. package/dist/api/memories/conflicts.d.ts +33 -0
  60. package/dist/api/memories/conflicts.js +67 -0
  61. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  62. package/dist/api/{forget.js → memories/forget.js} +23 -17
  63. package/dist/api/memories/memories.d.ts +27 -0
  64. package/dist/api/memories/memories.js +52 -0
  65. package/dist/api/memories/outcome.d.ts +22 -0
  66. package/dist/api/memories/outcome.js +28 -0
  67. package/dist/api/memories/promote.d.ts +40 -0
  68. package/dist/api/memories/promote.js +76 -0
  69. package/dist/api/memories/refine.d.ts +10 -0
  70. package/dist/api/memories/refine.js +12 -0
  71. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
  72. package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
  73. package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
  74. package/dist/api/{remember.js → memories/remember.js} +50 -32
  75. package/dist/api/objects/cards.d.ts +39 -0
  76. package/dist/api/{cards.js → objects/cards.js} +12 -14
  77. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  78. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
  79. package/dist/api/objects/goals.d.ts +18 -0
  80. package/dist/api/{goals.js → objects/goals.js} +12 -12
  81. package/dist/api/objects/graph.d.ts +11 -0
  82. package/dist/api/objects/graph.js +16 -0
  83. package/dist/api/objects/objects.d.ts +9 -0
  84. package/dist/api/{objects.js → objects/objects.js} +2 -3
  85. package/dist/api/objects/predictions.d.ts +11 -0
  86. package/dist/api/{predictions.js → objects/predictions.js} +7 -5
  87. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  88. package/dist/api/{projects.js → objects/projects.js} +8 -4
  89. package/dist/api/pilot-arm.d.ts +8 -4
  90. package/dist/api/pilot-arm.js +5 -4
  91. package/dist/api/prompt-hook.d.ts +35 -20
  92. package/dist/api/prompt-hook.js +66 -44
  93. package/dist/api/provenance-coverage.d.ts +3 -1
  94. package/dist/api/provenance-coverage.js +3 -1
  95. package/dist/api/recall/finish.d.ts +185 -0
  96. package/dist/api/recall/finish.js +301 -0
  97. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  98. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
  99. package/dist/api/recall/recall.d.ts +6 -0
  100. package/dist/api/{recall.js → recall/recall.js} +116 -72
  101. package/dist/api/recall/render.d.ts +39 -0
  102. package/dist/api/recall/render.js +60 -0
  103. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  104. package/dist/api/recall/request.js +261 -0
  105. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  106. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  107. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
  108. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  109. package/dist/api/session-end.d.ts +36 -8
  110. package/dist/api/session-end.js +71 -25
  111. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  112. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  113. package/dist/api/sleep/dormant.d.ts +25 -0
  114. package/dist/api/sleep/dormant.js +64 -0
  115. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  116. package/dist/api/sleep/learn.js +138 -0
  117. package/dist/api/sleep/sleep-run.d.ts +38 -0
  118. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
  119. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  120. package/dist/api/sleep/sleep.js +9 -0
  121. package/dist/api/status.d.ts +3 -1
  122. package/dist/api/status.js +3 -1
  123. package/dist/api/store-init.d.ts +4 -1
  124. package/dist/api/store-init.js +4 -1
  125. package/dist/api/tokens.d.ts +10 -9
  126. package/dist/api/tokens.js +9 -10
  127. package/dist/api/types.d.ts +27 -12
  128. package/dist/api/types.js +13 -4
  129. package/dist/capture/caller-session.d.ts +8 -2
  130. package/dist/capture/caller-session.js +16 -6
  131. package/dist/capture/capture-error.d.ts +3 -1
  132. package/dist/capture/capture-error.js +3 -1
  133. package/dist/capture/codex-patch.js +7 -2
  134. package/dist/capture/command.d.ts +4 -2
  135. package/dist/capture/command.js +34 -15
  136. package/dist/capture/compact-resume-caller.js +15 -8
  137. package/dist/capture/compact.d.ts +8 -5
  138. package/dist/capture/compact.js +34 -23
  139. package/dist/capture/compaction-items-caller.js +9 -3
  140. package/dist/capture/compaction-record.d.ts +4 -3
  141. package/dist/capture/compaction-record.js +20 -12
  142. package/dist/capture/compaction-spool.d.ts +18 -9
  143. package/dist/capture/compaction-spool.js +105 -63
  144. package/dist/capture/copilot-transcript.d.ts +11 -3
  145. package/dist/capture/copilot-transcript.js +16 -6
  146. package/dist/capture/extract.js +20 -8
  147. package/dist/capture/failure-caller.js +23 -12
  148. package/dist/capture/failure-reading.d.ts +10 -3
  149. package/dist/capture/failure-reading.js +24 -7
  150. package/dist/capture/pre-compact-caller.js +11 -4
  151. package/dist/capture/session-digest.d.ts +15 -4
  152. package/dist/capture/session-digest.js +39 -13
  153. package/dist/capture/session-end-caller.d.ts +4 -1
  154. package/dist/capture/session-end-caller.js +20 -8
  155. package/dist/capture/session-texts.d.ts +6 -2
  156. package/dist/capture/session-texts.js +22 -7
  157. package/dist/capture/session-worker.d.ts +4 -2
  158. package/dist/capture/session-worker.js +58 -17
  159. package/dist/capture/transcript.d.ts +13 -4
  160. package/dist/capture/transcript.js +32 -10
  161. package/dist/capture/working-state.d.ts +13 -4
  162. package/dist/capture/working-state.js +50 -56
  163. package/dist/cli/api-context.d.ts +14 -2
  164. package/dist/cli/api-context.js +45 -2
  165. package/dist/cli/audit.js +33 -33
  166. package/dist/cli/auth.js +23 -31
  167. package/dist/cli/briefs.d.ts +1 -1
  168. package/dist/cli/briefs.js +20 -15
  169. package/dist/cli/card.d.ts +1 -1
  170. package/dist/cli/card.js +56 -73
  171. package/dist/cli/client.d.ts +12 -5
  172. package/dist/cli/client.js +53 -23
  173. package/dist/cli/compact-resume-payload.d.ts +4 -1
  174. package/dist/cli/compact-resume-payload.js +12 -5
  175. package/dist/cli/context.js +43 -18
  176. package/dist/cli/continuity.d.ts +5 -5
  177. package/dist/cli/continuity.js +90 -107
  178. package/dist/cli/curate.d.ts +5 -4
  179. package/dist/cli/curate.js +55 -77
  180. package/dist/cli/dag.d.ts +1 -1
  181. package/dist/cli/dag.js +14 -17
  182. package/dist/cli/decisions.js +30 -30
  183. package/dist/cli/eval.js +16 -21
  184. package/dist/cli/exit.d.ts +4 -1
  185. package/dist/cli/exit.js +10 -2
  186. package/dist/cli/explain.js +12 -11
  187. package/dist/cli/flag-values.d.ts +1 -1
  188. package/dist/cli/flag-values.js +9 -18
  189. package/dist/cli/github.d.ts +6 -0
  190. package/dist/cli/github.js +25 -13
  191. package/dist/cli/goals.d.ts +1 -1
  192. package/dist/cli/goals.js +39 -56
  193. package/dist/cli/graph.d.ts +1 -1
  194. package/dist/cli/graph.js +15 -11
  195. package/dist/cli/hook-runtime.d.ts +34 -10
  196. package/dist/cli/hook-runtime.js +41 -16
  197. package/dist/cli/incidents.d.ts +1 -1
  198. package/dist/cli/incidents.js +25 -25
  199. package/dist/cli/init.d.ts +1 -1
  200. package/dist/cli/init.js +35 -20
  201. package/dist/cli/install-steps.d.ts +12 -3
  202. package/dist/cli/install-steps.js +42 -18
  203. package/dist/cli/last-sleep.d.ts +4 -1
  204. package/dist/cli/last-sleep.js +9 -4
  205. package/dist/cli/maintenance.d.ts +1 -1
  206. package/dist/cli/maintenance.js +11 -12
  207. package/dist/cli/notes.d.ts +1 -1
  208. package/dist/cli/notes.js +8 -5
  209. package/dist/cli/object-verbs.d.ts +5 -5
  210. package/dist/cli/object-verbs.js +13 -16
  211. package/dist/cli/open-browser.js +11 -2
  212. package/dist/cli/playbooks.d.ts +3 -3
  213. package/dist/cli/playbooks.js +40 -32
  214. package/dist/cli/predictions.js +17 -22
  215. package/dist/cli/print.js +4 -2
  216. package/dist/cli/projects.js +21 -11
  217. package/dist/cli/quality-repair-once.d.ts +1 -1
  218. package/dist/cli/quality-repair-once.js +7 -6
  219. package/dist/cli/recall.js +129 -93
  220. package/dist/cli/refine-llm.d.ts +15 -4
  221. package/dist/cli/refine-llm.js +17 -7
  222. package/dist/cli/remember.js +51 -55
  223. package/dist/cli/scheduler.d.ts +4 -1
  224. package/dist/cli/scheduler.js +9 -5
  225. package/dist/cli/serve.js +28 -18
  226. package/dist/cli/session-hooks.d.ts +2 -6
  227. package/dist/cli/session-hooks.js +140 -112
  228. package/dist/cli/setup.d.ts +1 -1
  229. package/dist/cli/setup.js +56 -34
  230. package/dist/cli/shared.d.ts +4 -2
  231. package/dist/cli/shared.js +26 -11
  232. package/dist/cli/slack.js +15 -24
  233. package/dist/cli/sleep-render.d.ts +3 -1
  234. package/dist/cli/sleep-render.js +8 -5
  235. package/dist/cli/sleep.js +16 -8
  236. package/dist/cli/status.d.ts +4 -4
  237. package/dist/cli/status.js +32 -27
  238. package/dist/cli/stdin.d.ts +10 -3
  239. package/dist/cli/stdin.js +10 -3
  240. package/dist/cli/transfer.d.ts +4 -4
  241. package/dist/cli/transfer.js +97 -82
  242. package/dist/cli/usage.d.ts +1 -1
  243. package/dist/cli/usage.js +1 -1
  244. package/dist/cli/verb-row.d.ts +2 -0
  245. package/dist/cli/verbs/health.js +2 -0
  246. package/dist/cli/verbs/memory.js +47 -53
  247. package/dist/cli/verbs/objects.js +16 -7
  248. package/dist/cli/verbs/sessions.js +4 -2
  249. package/dist/cli/versioned-verbs.d.ts +8 -7
  250. package/dist/cli/versioned-verbs.js +31 -21
  251. package/dist/cli.js +14 -18
  252. package/dist/connectors/dlq.d.ts +6 -6
  253. package/dist/connectors/dlq.js +12 -7
  254. package/dist/connectors/github/backfill.d.ts +4 -4
  255. package/dist/connectors/github/backfill.js +6 -4
  256. package/dist/connectors/github/deletion.d.ts +6 -4
  257. package/dist/connectors/github/deletion.js +5 -4
  258. package/dist/connectors/github/dlq.d.ts +8 -6
  259. package/dist/connectors/github/dlq.js +11 -5
  260. package/dist/connectors/github/ingest.d.ts +2 -2
  261. package/dist/connectors/github/ingest.js +9 -5
  262. package/dist/connectors/github/octokit-client.d.ts +3 -1
  263. package/dist/connectors/github/octokit-client.js +7 -2
  264. package/dist/connectors/github/ratelimit.d.ts +6 -2
  265. package/dist/connectors/github/ratelimit.js +6 -2
  266. package/dist/connectors/github/signature.d.ts +14 -3
  267. package/dist/connectors/github/signature.js +17 -3
  268. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  269. package/dist/connectors/github/tenant-routing.js +6 -5
  270. package/dist/connectors/github/transform.js +50 -67
  271. package/dist/connectors/github/types.d.ts +10 -3
  272. package/dist/connectors/github/types.js +6 -2
  273. package/dist/connectors/github/webhook.d.ts +5 -5
  274. package/dist/connectors/github/webhook.js +36 -23
  275. package/dist/connectors/ingest.d.ts +5 -3
  276. package/dist/connectors/ingest.js +3 -3
  277. package/dist/connectors/slack/backfill.d.ts +5 -5
  278. package/dist/connectors/slack/backfill.js +3 -3
  279. package/dist/connectors/slack/deletion.d.ts +4 -4
  280. package/dist/connectors/slack/deletion.js +6 -5
  281. package/dist/connectors/slack/dlq.d.ts +4 -4
  282. package/dist/connectors/slack/dlq.js +6 -6
  283. package/dist/connectors/slack/ingest.d.ts +6 -4
  284. package/dist/connectors/slack/ingest.js +5 -4
  285. package/dist/connectors/slack/signature.d.ts +4 -1
  286. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  287. package/dist/connectors/slack/tenant-routing.js +6 -5
  288. package/dist/connectors/slack/transform.d.ts +6 -2
  289. package/dist/connectors/slack/transform.js +6 -2
  290. package/dist/connectors/slack/types.d.ts +3 -1
  291. package/dist/connectors/slack/web-client.js +8 -3
  292. package/dist/connectors/slack/webhook.d.ts +5 -5
  293. package/dist/connectors/slack/webhook.js +19 -11
  294. package/dist/connectors/slack/workspaces.d.ts +7 -3
  295. package/dist/connectors/slack/workspaces.js +7 -3
  296. package/dist/connectors/store.d.ts +8 -0
  297. package/dist/connectors/store.js +2 -0
  298. package/dist/consolidate/conflicts.js +24 -10
  299. package/dist/consolidate/dag-summary.js +2 -1
  300. package/dist/consolidate/dag.d.ts +10 -5
  301. package/dist/consolidate/dag.js +45 -39
  302. package/dist/consolidate/decay.js +19 -6
  303. package/dist/consolidate/dedupe.d.ts +14 -5
  304. package/dist/consolidate/dedupe.js +28 -17
  305. package/dist/consolidate/flush-units.d.ts +4 -1
  306. package/dist/consolidate/flush-units.js +4 -1
  307. package/dist/consolidate/half-life-migration.d.ts +18 -8
  308. package/dist/consolidate/half-life-migration.js +48 -18
  309. package/dist/consolidate/llm-passes.js +27 -11
  310. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  311. package/dist/consolidate/memory-value-weights.js +6 -2
  312. package/dist/consolidate/memory-value.d.ts +30 -10
  313. package/dist/consolidate/memory-value.js +37 -14
  314. package/dist/consolidate/merge.d.ts +4 -1
  315. package/dist/consolidate/merge.js +47 -37
  316. package/dist/consolidate/overlap-index.d.ts +8 -2
  317. package/dist/consolidate/overlap-index.js +11 -4
  318. package/dist/consolidate/physics-pass.d.ts +3 -1
  319. package/dist/consolidate/physics-pass.js +10 -7
  320. package/dist/consolidate/replay.d.ts +11 -4
  321. package/dist/consolidate/replay.js +19 -7
  322. package/dist/consolidate/run.d.ts +13 -5
  323. package/dist/consolidate/run.js +4 -4
  324. package/dist/consolidate/sleep.d.ts +14 -6
  325. package/dist/consolidate/sleep.js +42 -39
  326. package/dist/consolidate/trace.d.ts +7 -2
  327. package/dist/consolidate/trace.js +7 -2
  328. package/dist/consolidate/traces.js +27 -30
  329. package/dist/core/ablation.d.ts +9 -3
  330. package/dist/core/ablation.js +14 -4
  331. package/dist/core/active-scope.d.ts +3 -1
  332. package/dist/core/active-scope.js +3 -1
  333. package/dist/core/agent-memory-tools.d.ts +2 -0
  334. package/dist/core/agent-memory-tools.js +2 -0
  335. package/dist/core/ambient.d.ts +4 -3
  336. package/dist/core/ambient.js +8 -6
  337. package/dist/core/api-errors.d.ts +9 -3
  338. package/dist/core/api-errors.js +9 -3
  339. package/dist/core/capture-contract.d.ts +4 -1
  340. package/dist/core/capture-contract.js +27 -8
  341. package/dist/core/compare.d.ts +24 -8
  342. package/dist/core/compare.js +24 -8
  343. package/dist/core/config.d.ts +18 -9
  344. package/dist/core/config.js +38 -29
  345. package/dist/core/cosine.d.ts +4 -1
  346. package/dist/core/cosine.js +4 -1
  347. package/dist/core/handoff.d.ts +7 -2
  348. package/dist/core/handoff.js +4 -1
  349. package/dist/core/markdown.js +22 -17
  350. package/dist/core/memory-audit.js +14 -3
  351. package/dist/core/memory-quality.d.ts +12 -3
  352. package/dist/core/memory-quality.js +57 -21
  353. package/dist/core/memory.d.ts +87 -30
  354. package/dist/core/memory.js +82 -33
  355. package/dist/core/merged-row.d.ts +8 -2
  356. package/dist/core/merged-row.js +10 -3
  357. package/dist/core/package-root.d.ts +3 -1
  358. package/dist/core/package-root.js +3 -1
  359. package/dist/core/particle-refresh.d.ts +8 -0
  360. package/dist/core/particle-refresh.js +22 -0
  361. package/dist/core/physics-config.d.ts +4 -1
  362. package/dist/core/physics-config.js +6 -2
  363. package/dist/core/physics.d.ts +39 -11
  364. package/dist/core/physics.js +71 -21
  365. package/dist/core/project-identity.d.ts +34 -17
  366. package/dist/core/project-identity.js +35 -18
  367. package/dist/core/project-remote.d.ts +8 -4
  368. package/dist/core/project-remote.js +31 -14
  369. package/dist/core/recall-scope.d.ts +33 -11
  370. package/dist/core/recall-scope.js +42 -15
  371. package/dist/core/rejection-digest.d.ts +7 -0
  372. package/dist/core/rejection-digest.js +13 -0
  373. package/dist/core/salience.d.ts +3 -1
  374. package/dist/core/salience.js +10 -4
  375. package/dist/core/search-types.d.ts +15 -2
  376. package/dist/core/search-types.js +11 -0
  377. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  378. package/dist/dashboard/dashboard-actions.js +18 -7
  379. package/dist/dashboard/dashboard-queries.js +2 -7
  380. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  381. package/dist/dashboard/dashboard-snapshot.js +5 -7
  382. package/dist/dashboard/dashboard.js +22 -8
  383. package/dist/db/backup.js +2 -2
  384. package/dist/db/busy.d.ts +10 -3
  385. package/dist/db/busy.js +27 -5
  386. package/dist/db/connect.d.ts +10 -2
  387. package/dist/db/connect.js +8 -2
  388. package/dist/db/continuity.d.ts +1 -1
  389. package/dist/db/continuity.js +27 -11
  390. package/dist/db/meta.d.ts +4 -1
  391. package/dist/db/meta.js +4 -1
  392. package/dist/db/migrate.d.ts +10 -5
  393. package/dist/db/migrate.js +40 -20
  394. package/dist/db/migrations/index.d.ts +1 -1
  395. package/dist/db/migrations/index.js +3 -1
  396. package/dist/db/migrations/types.d.ts +2 -1
  397. package/dist/db/migrations/v11.js +1 -0
  398. package/dist/db/migrations/v12.js +2 -1
  399. package/dist/db/migrations/v14.js +2 -0
  400. package/dist/db/migrations/v15.js +4 -2
  401. package/dist/db/migrations/v16.js +6 -3
  402. package/dist/db/migrations/v17.js +2 -1
  403. package/dist/db/migrations/v19.js +4 -2
  404. package/dist/db/migrations/v20.js +2 -1
  405. package/dist/db/migrations/v22.js +12 -6
  406. package/dist/db/migrations/v23.js +6 -3
  407. package/dist/db/migrations/v24.js +6 -3
  408. package/dist/db/migrations/v25.js +4 -2
  409. package/dist/db/migrations/v26.js +4 -2
  410. package/dist/db/migrations/v27.js +6 -3
  411. package/dist/db/migrations/v28.js +4 -2
  412. package/dist/db/migrations/v29.js +4 -2
  413. package/dist/db/migrations/v30.js +6 -3
  414. package/dist/db/migrations/v31.js +4 -2
  415. package/dist/db/migrations/v32.js +6 -3
  416. package/dist/db/migrations/v33.js +4 -2
  417. package/dist/db/migrations/v34.js +2 -1
  418. package/dist/db/migrations/v35.js +2 -1
  419. package/dist/db/migrations/v36.js +2 -1
  420. package/dist/db/migrations/v37.js +10 -5
  421. package/dist/db/migrations/v38.js +10 -5
  422. package/dist/db/migrations/v39.js +14 -6
  423. package/dist/db/migrations/v40.js +4 -2
  424. package/dist/db/migrations/v41.js +4 -2
  425. package/dist/db/migrations/v42.js +2 -1
  426. package/dist/db/migrations/v44.js +4 -2
  427. package/dist/db/migrations/v45.js +4 -2
  428. package/dist/db/migrations/v49.js +2 -1
  429. package/dist/db/migrations/v50.js +4 -2
  430. package/dist/db/migrations/v51.js +4 -2
  431. package/dist/db/migrations/v52.js +2 -1
  432. package/dist/db/migrations/v53.js +8 -4
  433. package/dist/db/migrations/v54.js +2 -1
  434. package/dist/db/migrations/v55.js +4 -2
  435. package/dist/db/migrations/v56.d.ts +3 -0
  436. package/dist/db/migrations/v56.js +28 -0
  437. package/dist/db/open.d.ts +24 -12
  438. package/dist/db/open.js +25 -13
  439. package/dist/db/physics-state.d.ts +8 -8
  440. package/dist/db/physics-state.js +17 -50
  441. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  442. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  443. package/dist/db/request-stores.d.ts +20 -5
  444. package/dist/db/request-stores.js +15 -5
  445. package/dist/db/tables.d.ts +2 -1
  446. package/dist/db/tables.js +12 -4
  447. package/dist/db/vector-store.d.ts +13 -4
  448. package/dist/db/vector-store.js +35 -14
  449. package/dist/db/wal-checkpointer.d.ts +2 -1
  450. package/dist/db/wal-checkpointer.js +19 -7
  451. package/dist/doctor.d.ts +7 -1
  452. package/dist/doctor.js +128 -46
  453. package/dist/embeddings/local.d.ts +8 -4
  454. package/dist/embeddings/local.js +11 -7
  455. package/dist/embeddings/provider.d.ts +19 -10
  456. package/dist/embeddings/provider.js +32 -27
  457. package/dist/embeddings/transformers.d.ts +16 -4
  458. package/dist/embeddings/transformers.js +32 -15
  459. package/dist/entry/json-hooks.d.ts +1 -1
  460. package/dist/entry/json-hooks.js +1 -1
  461. package/dist/entry/project-identity.js +2 -1
  462. package/dist/entry/session-text.d.ts +1 -1
  463. package/dist/entry/session-text.js +1 -1
  464. package/dist/entry/sqlite-handles.d.ts +10 -0
  465. package/dist/entry/sqlite-handles.js +9 -0
  466. package/dist/entry/store-kit.d.ts +50 -0
  467. package/dist/entry/store-kit.js +27 -0
  468. package/dist/entry/testing.d.ts +6 -0
  469. package/dist/entry/testing.js +7 -0
  470. package/dist/eval/eval-stats.d.ts +27 -8
  471. package/dist/eval/eval-stats.js +17 -5
  472. package/dist/eval/eval-suite.d.ts +3 -1
  473. package/dist/eval/eval-suite.js +409 -187
  474. package/dist/eval/eval.d.ts +8 -2
  475. package/dist/eval/eval.js +8 -2
  476. package/dist/eval/judgment.js +17 -7
  477. package/dist/graph/delta.d.ts +9 -42
  478. package/dist/graph/delta.js +17 -11
  479. package/dist/graph/extract.d.ts +10 -7
  480. package/dist/graph/extract.js +57 -25
  481. package/dist/graph/recall.d.ts +12 -4
  482. package/dist/graph/recall.js +30 -13
  483. package/dist/graph/stream.d.ts +18 -6
  484. package/dist/graph/stream.js +32 -10
  485. package/dist/graph/view.d.ts +19 -6
  486. package/dist/graph/view.js +42 -17
  487. package/dist/hooks/codex-session.js +2 -2
  488. package/dist/hooks/codex-wrapper.d.ts +3 -1
  489. package/dist/hooks/codex-wrapper.js +9 -4
  490. package/dist/hooks/copilot.d.ts +19 -5
  491. package/dist/hooks/copilot.js +54 -15
  492. package/dist/hooks/hook-blocks.d.ts +4 -1
  493. package/dist/hooks/hook-blocks.js +8 -3
  494. package/dist/hooks/json-hooks.d.ts +9 -5
  495. package/dist/hooks/json-hooks.js +72 -33
  496. package/dist/hooks/opencode.js +15 -5
  497. package/dist/hooks/shared.d.ts +27 -8
  498. package/dist/hooks/shared.js +57 -16
  499. package/dist/importers/core.d.ts +12 -4
  500. package/dist/importers/core.js +11 -10
  501. package/dist/importers/markdown-parse.d.ts +15 -5
  502. package/dist/importers/markdown-parse.js +16 -7
  503. package/dist/importers/markdown.js +6 -9
  504. package/dist/importers/sources.js +10 -23
  505. package/dist/importers/vault.d.ts +3 -3
  506. package/dist/importers/vault.js +61 -45
  507. package/dist/index.d.ts +33 -7
  508. package/dist/index.js +26 -8
  509. package/dist/learn/autolearn.d.ts +21 -6
  510. package/dist/learn/autolearn.js +57 -26
  511. package/dist/learn/churn-git.d.ts +4 -1
  512. package/dist/learn/churn-git.js +29 -5
  513. package/dist/learn/extract.d.ts +4 -1
  514. package/dist/learn/extract.js +17 -10
  515. package/dist/learn/forward-claim-detector.d.ts +17 -5
  516. package/dist/learn/forward-claim-detector.js +34 -15
  517. package/dist/learn/invalidation.d.ts +12 -6
  518. package/dist/learn/invalidation.js +62 -28
  519. package/dist/learn/roots.d.ts +3 -0
  520. package/dist/learn/roots.js +5 -0
  521. package/dist/mcp/admin-tools.d.ts +5 -5
  522. package/dist/mcp/admin-tools.js +28 -23
  523. package/dist/mcp/format.d.ts +1 -1
  524. package/dist/mcp/format.js +4 -2
  525. package/dist/mcp/framing.d.ts +3 -1
  526. package/dist/mcp/framing.js +20 -8
  527. package/dist/mcp/memory-tools.d.ts +3 -3
  528. package/dist/mcp/memory-tools.js +21 -20
  529. package/dist/mcp/protocol.d.ts +32 -16
  530. package/dist/mcp/protocol.js +12 -9
  531. package/dist/mcp/recall-tools.d.ts +3 -3
  532. package/dist/mcp/recall-tools.js +62 -74
  533. package/dist/mcp/request.d.ts +7 -5
  534. package/dist/mcp/request.js +61 -77
  535. package/dist/mcp/server.d.ts +3 -1
  536. package/dist/mcp/server.js +8 -3
  537. package/dist/mcp/session-state.d.ts +1 -1
  538. package/dist/mcp/session-state.js +4 -3
  539. package/dist/mcp/shared-gate.d.ts +3 -2
  540. package/dist/mcp/shared-gate.js +3 -2
  541. package/dist/mcp/stdio.d.ts +6 -3
  542. package/dist/mcp/stdio.js +59 -23
  543. package/dist/mcp/tool-args.d.ts +4 -1
  544. package/dist/mcp/tool-args.js +8 -3
  545. package/dist/mcp/tools.js +76 -32
  546. package/dist/objects/customer-notes.d.ts +12 -10
  547. package/dist/objects/customer-notes.js +21 -15
  548. package/dist/objects/decisions.d.ts +18 -10
  549. package/dist/objects/decisions.js +23 -17
  550. package/dist/objects/descriptor.js +2 -1
  551. package/dist/objects/fields.d.ts +4 -1
  552. package/dist/objects/fields.js +6 -2
  553. package/dist/objects/incidents.d.ts +14 -16
  554. package/dist/objects/incidents.js +29 -30
  555. package/dist/objects/lifecycle.d.ts +0 -4
  556. package/dist/objects/lifecycle.js +21 -24
  557. package/dist/objects/policies.d.ts +12 -16
  558. package/dist/objects/policies.js +17 -21
  559. package/dist/objects/processes.d.ts +16 -10
  560. package/dist/objects/processes.js +20 -15
  561. package/dist/objects/project-briefs.d.ts +13 -14
  562. package/dist/objects/project-briefs.js +33 -39
  563. package/dist/objects/skills.d.ts +10 -12
  564. package/dist/objects/skills.js +17 -22
  565. package/dist/postinstall.js +15 -7
  566. package/dist/predictions/planning-fallacy.d.ts +19 -6
  567. package/dist/predictions/planning-fallacy.js +4 -2
  568. package/dist/rerankers/clef.d.ts +8 -2
  569. package/dist/rerankers/clef.js +14 -9
  570. package/dist/rerankers/cross-encoder.d.ts +2 -1
  571. package/dist/rerankers/cross-encoder.js +19 -9
  572. package/dist/rerankers/index.js +2 -1
  573. package/dist/rerankers/jev.js +2 -1
  574. package/dist/rerankers/llm.d.ts +6 -2
  575. package/dist/rerankers/llm.js +8 -3
  576. package/dist/rerankers/remote.d.ts +3 -1
  577. package/dist/rerankers/remote.js +5 -2
  578. package/dist/rerankers/types.d.ts +6 -2
  579. package/dist/search/bm25-search.d.ts +3 -1
  580. package/dist/search/bm25-search.js +15 -2
  581. package/dist/search/boosts.js +4 -3
  582. package/dist/search/embed-memories.d.ts +12 -4
  583. package/dist/search/embed-memories.js +96 -58
  584. package/dist/search/engine.d.ts +11 -0
  585. package/dist/search/engine.js +14 -0
  586. package/dist/search/goal-boost.d.ts +10 -3
  587. package/dist/search/goal-boost.js +13 -6
  588. package/dist/search/hybrid-score.d.ts +4 -1
  589. package/dist/search/hybrid-score.js +4 -1
  590. package/dist/search/hybrid.d.ts +23 -8
  591. package/dist/search/hybrid.js +12 -7
  592. package/dist/search/multihop.js +14 -13
  593. package/dist/search/path-context.d.ts +10 -3
  594. package/dist/search/path-context.js +10 -3
  595. package/dist/search/physics-search.d.ts +9 -4
  596. package/dist/search/physics-search.js +38 -14
  597. package/dist/search/rerank.d.ts +2 -1
  598. package/dist/search/rerank.js +2 -1
  599. package/dist/search/rrf.d.ts +14 -5
  600. package/dist/search/rrf.js +11 -4
  601. package/dist/search/vector.d.ts +8 -2
  602. package/dist/search/vector.js +14 -8
  603. package/dist/server/auth.d.ts +19 -15
  604. package/dist/server/auth.js +68 -38
  605. package/dist/server/boot.d.ts +4 -1
  606. package/dist/server/boot.js +115 -67
  607. package/dist/server/client-ip.d.ts +17 -5
  608. package/dist/server/client-ip.js +56 -21
  609. package/dist/server/cursor.d.ts +10 -3
  610. package/dist/server/cursor.js +10 -3
  611. package/dist/server/deadline.d.ts +5 -2
  612. package/dist/server/deadline.js +10 -3
  613. package/dist/server/key-check-bounds.js +12 -4
  614. package/dist/server/lifecycle.d.ts +4 -1
  615. package/dist/server/lifecycle.js +10 -4
  616. package/dist/server/mcp-http.d.ts +2 -1
  617. package/dist/server/mcp-http.js +37 -22
  618. package/dist/server/rate-limit.d.ts +17 -5
  619. package/dist/server/rate-limit.js +55 -26
  620. package/dist/server/ready.js +7 -4
  621. package/dist/server/request.d.ts +15 -4
  622. package/dist/server/request.js +42 -15
  623. package/dist/server/route-checks.d.ts +4 -1
  624. package/dist/server/route-checks.js +8 -3
  625. package/dist/server/route-table.d.ts +8 -6
  626. package/dist/server/route-table.js +550 -97
  627. package/dist/server/routes/admin.d.ts +7 -7
  628. package/dist/server/routes/admin.js +36 -15
  629. package/dist/server/routes/customer-notes.d.ts +5 -5
  630. package/dist/server/routes/customer-notes.js +5 -4
  631. package/dist/server/routes/decisions.d.ts +5 -5
  632. package/dist/server/routes/decisions.js +12 -6
  633. package/dist/server/routes/incidents.d.ts +5 -5
  634. package/dist/server/routes/incidents.js +10 -4
  635. package/dist/server/routes/memories.d.ts +8 -8
  636. package/dist/server/routes/memories.js +12 -17
  637. package/dist/server/routes/object-routes.d.ts +8 -5
  638. package/dist/server/routes/object-routes.js +4 -2
  639. package/dist/server/routes/policies.d.ts +6 -6
  640. package/dist/server/routes/policies.js +11 -4
  641. package/dist/server/routes/predictions.d.ts +5 -5
  642. package/dist/server/routes/predictions.js +9 -4
  643. package/dist/server/routes/processes.d.ts +5 -5
  644. package/dist/server/routes/processes.js +15 -6
  645. package/dist/server/routes/project-briefs.d.ts +6 -6
  646. package/dist/server/routes/project-briefs.js +3 -2
  647. package/dist/server/routes/recall.d.ts +3 -3
  648. package/dist/server/routes/recall.js +21 -10
  649. package/dist/server/routes/skills.d.ts +6 -6
  650. package/dist/server/routes/skills.js +12 -4
  651. package/dist/server/server-detect.d.ts +24 -8
  652. package/dist/server/server-detect.js +57 -22
  653. package/dist/server/sleep-child.js +16 -10
  654. package/dist/server/sleep-offload.d.ts +8 -5
  655. package/dist/server/sleep-offload.js +40 -18
  656. package/dist/server/tls.d.ts +10 -2
  657. package/dist/server/tls.js +25 -5
  658. package/dist/server/types.d.ts +41 -24
  659. package/dist/server/validation.d.ts +4 -1
  660. package/dist/server/validation.js +22 -9
  661. package/dist/server.d.ts +17 -49
  662. package/dist/server.js +33 -40
  663. package/dist/sharing/global-store.d.ts +6 -12
  664. package/dist/sharing/global-store.js +8 -48
  665. package/dist/sharing/global-sync.d.ts +3 -1
  666. package/dist/sharing/global-sync.js +17 -7
  667. package/dist/sharing/project-merge.d.ts +25 -7
  668. package/dist/sharing/project-merge.js +49 -17
  669. package/dist/sharing/search-both.d.ts +8 -4
  670. package/dist/sharing/search-both.js +28 -14
  671. package/dist/sharing/share.d.ts +8 -4
  672. package/dist/sharing/share.js +40 -18
  673. package/dist/store/ambient.js +10 -5
  674. package/dist/store/audit-event.d.ts +2 -2
  675. package/dist/store/audit-event.js +8 -3
  676. package/dist/store/audit.d.ts +6 -3
  677. package/dist/store/audit.js +16 -6
  678. package/dist/store/auth.d.ts +4 -2
  679. package/dist/store/auth.js +63 -20
  680. package/dist/store/busy.d.ts +9 -0
  681. package/dist/store/busy.js +16 -0
  682. package/dist/store/candidates.d.ts +12 -5
  683. package/dist/store/candidates.js +90 -41
  684. package/dist/store/capture-write.d.ts +2 -1
  685. package/dist/store/capture-write.js +2 -1
  686. package/dist/store/card-detail.d.ts +4 -4
  687. package/dist/store/card-detail.js +15 -8
  688. package/dist/store/cards.d.ts +24 -10
  689. package/dist/store/cards.js +97 -63
  690. package/dist/store/compaction-caller.d.ts +2 -1
  691. package/dist/store/compaction-caller.js +2 -1
  692. package/dist/store/compactions-record.d.ts +14 -8
  693. package/dist/store/compactions-record.js +101 -37
  694. package/dist/store/compactions.js +35 -15
  695. package/dist/store/conflicts.d.ts +16 -5
  696. package/dist/store/conflicts.js +104 -48
  697. package/dist/store/connectors/dlq.d.ts +17 -5
  698. package/dist/store/connectors/dlq.js +58 -6
  699. package/dist/store/connectors/event-log.d.ts +122 -0
  700. package/dist/store/connectors/event-log.js +25 -0
  701. package/dist/store/connectors/github.d.ts +6 -3
  702. package/dist/store/connectors/github.js +30 -48
  703. package/dist/store/connectors/slack.d.ts +2 -1
  704. package/dist/store/connectors/slack.js +31 -47
  705. package/dist/store/dashboard-reads.d.ts +7 -3
  706. package/dist/store/dashboard-reads.js +32 -10
  707. package/dist/store/delete-and-batch.d.ts +17 -11
  708. package/dist/store/delete-and-batch.js +70 -28
  709. package/dist/store/delivery-recorder.d.ts +10 -7
  710. package/dist/store/delivery-recorder.js +70 -37
  711. package/dist/store/descendant-page.d.ts +2 -1
  712. package/dist/store/descendant-page.js +26 -10
  713. package/dist/store/diagnostics.d.ts +2 -1
  714. package/dist/store/diagnostics.js +2 -1
  715. package/dist/store/doctor-reads.d.ts +2 -1
  716. package/dist/store/doctor-reads.js +13 -5
  717. package/dist/store/dormant.d.ts +19 -11
  718. package/dist/store/dormant.js +45 -19
  719. package/dist/store/embeddings/index.d.ts +13 -9
  720. package/dist/store/embeddings/index.js +19 -12
  721. package/dist/store/entry-reads.d.ts +72 -21
  722. package/dist/store/entry-reads.js +215 -69
  723. package/dist/store/entry-row.d.ts +10 -6
  724. package/dist/store/entry-row.js +26 -14
  725. package/dist/store/entry-writes.d.ts +28 -13
  726. package/dist/store/entry-writes.js +61 -22
  727. package/dist/store/failure-log-at.js +1 -1
  728. package/dist/store/failure-log.d.ts +4 -2
  729. package/dist/store/failure-log.js +13 -6
  730. package/dist/store/gated-write.d.ts +3 -3
  731. package/dist/store/gated-write.js +3 -3
  732. package/dist/store/goals.d.ts +5 -4
  733. package/dist/store/goals.js +11 -12
  734. package/dist/store/graph-apply.d.ts +21 -0
  735. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  736. package/dist/store/graph-queue.d.ts +9 -6
  737. package/dist/store/graph-queue.js +15 -10
  738. package/dist/store/graph-reads.d.ts +16 -11
  739. package/dist/store/graph-reads.js +29 -19
  740. package/dist/store/graph-rows.d.ts +41 -3
  741. package/dist/store/graph-rows.js +10 -7
  742. package/dist/store/graph-view-rows.js +15 -7
  743. package/dist/store/graph-writes.d.ts +16 -10
  744. package/dist/store/graph-writes.js +59 -36
  745. package/dist/store/half-life.js +2 -2
  746. package/dist/store/handoffs.d.ts +13 -7
  747. package/dist/store/handoffs.js +44 -22
  748. package/dist/store/index-and-stats.d.ts +2 -2
  749. package/dist/store/index-and-stats.js +6 -5
  750. package/dist/store/index.d.ts +4 -2
  751. package/dist/store/index.js +2 -1
  752. package/dist/store/key-audit.d.ts +2 -1
  753. package/dist/store/key-audit.js +2 -1
  754. package/dist/store/key-writes.d.ts +2 -1
  755. package/dist/store/key-writes.js +9 -2
  756. package/dist/store/ledger-turn.d.ts +4 -1
  757. package/dist/store/ledger-turn.js +7 -2
  758. package/dist/store/mirrors.d.ts +11 -4
  759. package/dist/store/mirrors.js +96 -19
  760. package/dist/store/narrow.d.ts +6 -0
  761. package/dist/store/narrow.js +11 -0
  762. package/dist/store/open.d.ts +6 -3
  763. package/dist/store/open.js +20 -10
  764. package/dist/store/pilot-arm.d.ts +2 -1
  765. package/dist/store/pilot-arm.js +18 -6
  766. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  767. package/dist/store/planning-fallacy-evidence.js +8 -5
  768. package/dist/store/port/agent-import.d.ts +62 -0
  769. package/dist/store/port/agent-import.js +2 -0
  770. package/dist/store/port/consolidation.d.ts +129 -0
  771. package/dist/store/port/consolidation.js +2 -0
  772. package/dist/store/port/learning.d.ts +19 -0
  773. package/dist/store/port/learning.js +2 -0
  774. package/dist/store/port/local-files.d.ts +18 -0
  775. package/dist/store/port/local-files.js +2 -0
  776. package/dist/store/port/promotion.d.ts +20 -0
  777. package/dist/store/port/promotion.js +3 -0
  778. package/dist/store/port-groups.d.ts +160 -0
  779. package/dist/store/port-groups.js +2 -0
  780. package/dist/store/port.d.ts +261 -219
  781. package/dist/store/port.js +3 -9
  782. package/dist/store/predictions.d.ts +14 -10
  783. package/dist/store/predictions.js +37 -17
  784. package/dist/store/project-tags.d.ts +4 -1
  785. package/dist/store/project-tags.js +16 -5
  786. package/dist/store/quality-repair.d.ts +8 -4
  787. package/dist/store/quality-repair.js +53 -20
  788. package/dist/store/quarantine.d.ts +1 -0
  789. package/dist/store/quarantine.js +23 -9
  790. package/dist/store/raw-archive.d.ts +5 -4
  791. package/dist/store/raw-archive.js +11 -10
  792. package/dist/store/recall-trace.d.ts +22 -17
  793. package/dist/store/recall-trace.js +128 -64
  794. package/dist/store/rejected-values.d.ts +15 -10
  795. package/dist/store/rejected-values.js +46 -20
  796. package/dist/store/rejection.d.ts +12 -11
  797. package/dist/store/rejection.js +18 -19
  798. package/dist/store/report-reads.d.ts +2 -1
  799. package/dist/store/report-reads.js +2 -1
  800. package/dist/store/rows.d.ts +7 -5
  801. package/dist/store/rows.js +20 -13
  802. package/dist/store/rule-sql.d.ts +7 -3
  803. package/dist/store/rule-sql.js +26 -13
  804. package/dist/store/search-rows.d.ts +16 -11
  805. package/dist/store/search-rows.js +54 -32
  806. package/dist/store/sessions.d.ts +12 -10
  807. package/dist/store/sessions.js +40 -21
  808. package/dist/store/set-aside.d.ts +2 -2
  809. package/dist/store/set-aside.js +18 -5
  810. package/dist/store/sqlite/agent-import.d.ts +3 -0
  811. package/dist/store/sqlite/agent-import.js +77 -0
  812. package/dist/store/sqlite/cards-group.d.ts +6 -0
  813. package/dist/store/sqlite/cards-group.js +37 -0
  814. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  815. package/dist/store/sqlite/conflicts-group.js +18 -0
  816. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  817. package/dist/store/sqlite/connector-events-group.js +17 -6
  818. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  819. package/dist/store/sqlite/connector-writes-group.js +12 -5
  820. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  821. package/dist/store/sqlite/consolidation-group.js +64 -0
  822. package/dist/store/sqlite/dag-reads-group.js +1 -1
  823. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  824. package/dist/store/sqlite/dormant-group.js +29 -0
  825. package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
  826. package/dist/store/sqlite/entry-writes-group.js +37 -14
  827. package/dist/store/sqlite/error-codec.d.ts +4 -2
  828. package/dist/store/sqlite/error-codec.js +32 -10
  829. package/dist/store/sqlite/executor-counts.js +2 -1
  830. package/dist/store/sqlite/executor.d.ts +8 -3
  831. package/dist/store/sqlite/executor.js +56 -18
  832. package/dist/store/sqlite/global-promote.d.ts +5 -0
  833. package/dist/store/sqlite/global-promote.js +48 -0
  834. package/dist/store/sqlite/goals-group.d.ts +6 -0
  835. package/dist/store/sqlite/goals-group.js +23 -0
  836. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  837. package/dist/store/sqlite/graph-reads-group.js +2 -1
  838. package/dist/store/sqlite/held-connection.d.ts +8 -0
  839. package/dist/store/sqlite/held-connection.js +34 -7
  840. package/dist/store/sqlite/last-recall-group.d.ts +15 -0
  841. package/dist/store/sqlite/last-recall-group.js +62 -0
  842. package/dist/store/sqlite/learning-group.d.ts +4 -0
  843. package/dist/store/sqlite/learning-group.js +17 -0
  844. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  845. package/dist/store/sqlite/maintenance-groups.js +61 -0
  846. package/dist/store/sqlite/object-rows.d.ts +6 -3
  847. package/dist/store/sqlite/object-rows.js +34 -5
  848. package/dist/store/sqlite/objects-group.d.ts +5 -4
  849. package/dist/store/sqlite/objects-group.js +97 -38
  850. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  851. package/dist/store/sqlite/predictions-group.js +4 -2
  852. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  853. package/dist/store/sqlite/promotion-group.js +10 -0
  854. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  855. package/dist/store/sqlite/quarantine-group.js +4 -2
  856. package/dist/store/sqlite/reports-group.d.ts +6 -0
  857. package/dist/store/sqlite/reports-group.js +33 -0
  858. package/dist/store/sqlite/request-scope.d.ts +6 -0
  859. package/dist/store/sqlite/request-scope.js +18 -0
  860. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  861. package/dist/store/sqlite/sessions-group.js +46 -0
  862. package/dist/store/sqlite/store.d.ts +22 -18
  863. package/dist/store/sqlite/store.js +95 -33
  864. package/dist/store/sqlite/vector-pack.js +2 -1
  865. package/dist/store/sqlite/vector-reads-group.js +2 -1
  866. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  867. package/dist/store/sqlite/worker-jobs.js +19 -7
  868. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  869. package/dist/store/sqlite/worker-ops.js +6 -3
  870. package/dist/store/sqlite/worker-store.d.ts +4 -3
  871. package/dist/store/sqlite/worker-store.js +24 -14
  872. package/dist/store/summaries.d.ts +25 -11
  873. package/dist/store/summaries.js +84 -27
  874. package/dist/store/summary-dirty.d.ts +2 -1
  875. package/dist/store/summary-dirty.js +2 -1
  876. package/dist/store/tenant.d.ts +3 -2
  877. package/dist/store/tenant.js +5 -4
  878. package/dist/store/token-ledger-rows.js +8 -4
  879. package/dist/store/token-ledger.d.ts +19 -13
  880. package/dist/store/token-ledger.js +27 -14
  881. package/dist/store/tombstone-checks.d.ts +4 -1
  882. package/dist/store/tombstone-checks.js +10 -1
  883. package/dist/store/usage-reports.js +2 -1
  884. package/dist/store/vector-index.d.ts +8 -5
  885. package/dist/store/vector-index.js +28 -11
  886. package/dist/store/working-memory.d.ts +6 -4
  887. package/dist/store/working-memory.js +14 -9
  888. package/dist/support-bundle.js +10 -5
  889. package/dist/trust/quarantine.d.ts +1 -2
  890. package/dist/trust/quarantine.js +1 -5
  891. package/dist/trust/reject-flow.d.ts +12 -3
  892. package/dist/trust/reject-flow.js +12 -4
  893. package/dist/util/anthropic-messages.d.ts +7 -2
  894. package/dist/util/anthropic-messages.js +18 -7
  895. package/dist/util/atomic-write.d.ts +8 -3
  896. package/dist/util/atomic-write.js +36 -21
  897. package/dist/util/compaction-items.d.ts +4 -1
  898. package/dist/util/compaction-items.js +8 -2
  899. package/dist/util/crash-handlers.d.ts +7 -2
  900. package/dist/util/crash-handlers.js +13 -4
  901. package/dist/util/env.d.ts +26 -5
  902. package/dist/util/env.js +87 -25
  903. package/dist/util/format.d.ts +2 -0
  904. package/dist/util/format.js +4 -0
  905. package/dist/util/home-path.js +12 -6
  906. package/dist/util/hook-payload.d.ts +3 -1
  907. package/dist/util/hook-payload.js +3 -1
  908. package/dist/util/http-retry.d.ts +12 -6
  909. package/dist/util/http-retry.js +16 -6
  910. package/dist/util/http-util.d.ts +20 -5
  911. package/dist/util/http-util.js +28 -9
  912. package/dist/util/json.d.ts +4 -1
  913. package/dist/util/json.js +4 -1
  914. package/dist/util/keyset.js +2 -1
  915. package/dist/util/limits.js +4 -2
  916. package/dist/util/log.d.ts +13 -5
  917. package/dist/util/log.js +29 -6
  918. package/dist/util/net.d.ts +5 -0
  919. package/dist/util/net.js +19 -0
  920. package/dist/util/real-path.d.ts +2 -1
  921. package/dist/util/real-path.js +4 -3
  922. package/dist/util/request-scope.d.ts +16 -4
  923. package/dist/util/request-scope.js +19 -6
  924. package/dist/util/same-text.d.ts +10 -3
  925. package/dist/util/same-text.js +10 -3
  926. package/dist/util/secret-detect.d.ts +24 -7
  927. package/dist/util/secret-detect.js +49 -14
  928. package/dist/util/spawn-argv.d.ts +11 -0
  929. package/dist/util/spawn-argv.js +66 -0
  930. package/dist/util/sql.d.ts +3 -0
  931. package/dist/util/sql.js +6 -0
  932. package/dist/util/sqlite-blocked.d.ts +15 -4
  933. package/dist/util/sqlite-blocked.js +19 -6
  934. package/dist/util/stored-json.d.ts +4 -1
  935. package/dist/util/stored-json.js +6 -2
  936. package/dist/util/stream-tee.d.ts +2 -1
  937. package/dist/util/stream-tee.js +8 -5
  938. package/dist/util/transcript-tail.d.ts +4 -1
  939. package/dist/util/transcript-tail.js +4 -1
  940. package/dist/util/vector-codec.d.ts +4 -0
  941. package/dist/util/vector-codec.js +15 -0
  942. package/dist/util/version.d.ts +8 -3
  943. package/dist/util/version.js +8 -3
  944. package/dist/util/write-budget.d.ts +7 -2
  945. package/dist/util/write-budget.js +5 -2
  946. package/dist/util/yaml.d.ts +4 -1
  947. package/dist/util/yaml.js +4 -1
  948. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  949. package/extensions/openclaw-plugin/package.json +1 -1
  950. package/openclaw.plugin.json +1 -1
  951. package/package.json +4 -1
  952. package/scripts/postinstall.cjs +3 -1
  953. package/dist/api/audit.js +0 -56
  954. package/dist/api/cards.d.ts +0 -42
  955. package/dist/api/conflicts.d.ts +0 -28
  956. package/dist/api/conflicts.js +0 -61
  957. package/dist/api/dormant.d.ts +0 -14
  958. package/dist/api/dormant.js +0 -58
  959. package/dist/api/goals.d.ts +0 -18
  960. package/dist/api/graph.d.ts +0 -8
  961. package/dist/api/graph.js +0 -7
  962. package/dist/api/learn.js +0 -124
  963. package/dist/api/memories.d.ts +0 -23
  964. package/dist/api/memories.js +0 -46
  965. package/dist/api/objects.d.ts +0 -9
  966. package/dist/api/on-store.d.ts +0 -16
  967. package/dist/api/on-store.js +0 -38
  968. package/dist/api/outcome.d.ts +0 -19
  969. package/dist/api/outcome.js +0 -21
  970. package/dist/api/predictions.d.ts +0 -11
  971. package/dist/api/promote.d.ts +0 -36
  972. package/dist/api/promote.js +0 -65
  973. package/dist/api/recall-core.d.ts +0 -4
  974. package/dist/api/recall-core.js +0 -120
  975. package/dist/api/recall-finish.d.ts +0 -53
  976. package/dist/api/recall-finish.js +0 -30
  977. package/dist/api/recall-history.d.ts +0 -64
  978. package/dist/api/recall-history.js +0 -159
  979. package/dist/api/recall-record.d.ts +0 -43
  980. package/dist/api/recall-record.js +0 -78
  981. package/dist/api/recall-request.js +0 -121
  982. package/dist/api/recall.d.ts +0 -6
  983. package/dist/api/refine.d.ts +0 -7
  984. package/dist/api/refine.js +0 -10
  985. package/dist/api/session-owners.d.ts +0 -4
  986. package/dist/api/session-owners.js +0 -17
  987. package/dist/api/sleep-run.d.ts +0 -26
  988. package/dist/api/sleep.js +0 -10
  989. package/dist/cli/lenient-id.d.ts +0 -2
  990. package/dist/cli/lenient-id.js +0 -13
  991. package/dist/graph/write.d.ts +0 -14
  992. package/dist/store/sqlite/busy.d.ts +0 -3
  993. package/dist/store/sqlite/busy.js +0 -8
  994. package/dist/store/sqlite/local.d.ts +0 -21
  995. package/dist/store/sqlite/local.js +0 -39
@@ -1,4 +1,6 @@
1
- /** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
1
+ /**
2
+ * LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in;
3
+ * idempotent via the `llm-refined` tag.
2
4
  * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
3
5
  import { MemoryEntry } from '../core/memory.js';
4
6
  export interface RefineOptions {
@@ -10,7 +12,10 @@ export interface RefineOptions {
10
12
  all?: boolean;
11
13
  /** Injected for testing — defaults to the real fetch. */
12
14
  fetcher?: typeof fetch;
13
- /** Tenant scope: only that tenant's consolidated entries are scanned; cross-tenant parents return null and are skipped. */
15
+ /**
16
+ * Tenant scope: only that tenant's consolidated entries are scanned; cross-tenant parents return null and are
17
+ * skipped.
18
+ */
14
19
  tenantId?: string;
15
20
  }
16
21
  export interface RefineResult {
@@ -24,12 +29,18 @@ export interface RefineResult {
24
29
  reason?: string;
25
30
  }>;
26
31
  }
27
- /** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
32
+ /**
33
+ * Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API
34
+ * call failed.
35
+ */
28
36
  export declare function refineSemanticMemory(merged: string, sources: MemoryEntry[], opts: {
29
37
  apiKey: string;
30
38
  model?: string;
31
39
  fetcher?: typeof fetch;
32
40
  }): Promise<string | null>;
33
- /** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
41
+ /**
42
+ * Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it
43
+ * (unless `all`).
44
+ */
34
45
  export declare function refineStore(hippoRoot: string, opts: RefineOptions): Promise<RefineResult>;
35
46
  //# sourceMappingURL=refine-llm.d.ts.map
@@ -1,8 +1,10 @@
1
- /** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
1
+ /**
2
+ * LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in;
3
+ * idempotent via the `llm-refined` tag.
2
4
  * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
3
5
  import { Layer } from '../core/memory.js';
4
6
  import { REFINED_TAG, storeRefinement } from '../api/index.js';
5
- import { listMemories, listMemoriesByIds } from '../api/memories.js';
7
+ import { listMemories, listMemoriesByIds } from '../api/memories/memories.js';
6
8
  import { cliApiContext } from './api-context.js';
7
9
  import { chunked } from '../util/chunked.js';
8
10
  import { redactSecretsStrict } from '../util/secret-detect.js';
@@ -17,7 +19,10 @@ const CONSOLIDATED_MARKERS = [
17
19
  '[Consolidated from',
18
20
  '[Consolidated pattern from',
19
21
  ];
20
- /** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
22
+ /**
23
+ * Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API
24
+ * call failed.
25
+ */
21
26
  export async function refineSemanticMemory(merged, sources, opts) {
22
27
  const sourceBlock = sources
23
28
  .slice(0, MAX_REFINE_SOURCES)
@@ -61,6 +66,7 @@ function describeRefineFailure(failure) {
61
66
  case 'request': return `refine: request failed: ${failure.message}`;
62
67
  case 'http': return `refine: API answered HTTP ${failure.status}${failure.detail ? `: ${failure.detail}` : ''}`;
63
68
  case 'unreadable': return `refine: unreadable response: ${failure.message}`;
69
+ case 'empty': return 'refine: response held no text';
64
70
  }
65
71
  }
66
72
  function isConsolidated(entry) {
@@ -68,7 +74,10 @@ function isConsolidated(entry) {
68
74
  return false;
69
75
  return CONSOLIDATED_MARKERS.some((m) => entry.content.startsWith(m));
70
76
  }
71
- /** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
77
+ /**
78
+ * Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it
79
+ * (unless `all`).
80
+ */
72
81
  export async function refineStore(hippoRoot, opts) {
73
82
  const result = {
74
83
  scanned: 0,
@@ -80,7 +89,7 @@ export async function refineStore(hippoRoot, opts) {
80
89
  // No tenant means every tenant, so the ctx's own tenant is never read.
81
90
  const ctx = cliApiContext(hippoRoot, opts.tenantId ?? '');
82
91
  const reach = { everyTenant: opts.tenantId === undefined };
83
- const entries = listMemories(ctx, reach);
92
+ const entries = await listMemories(ctx, reach);
84
93
  let processed = 0;
85
94
  for (const entry of entries) {
86
95
  if (!isConsolidated(entry))
@@ -104,7 +113,8 @@ async function refineOneEntry(ctx, reach, entry, opts, result) {
104
113
  const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
105
114
  // Parent lookup is tenant-scoped; cross-tenant parents are absent and skipped,
106
115
  // so refine still works from the merged content alone.
107
- const found = new Map(chunked(parentIds).flatMap((chunk) => listMemoriesByIds(ctx, chunk, reach)).map((p) => [p.id, p]));
116
+ const chunks = await Promise.all(chunked(parentIds).map((chunk) => listMemoriesByIds(ctx, chunk, reach)));
117
+ const found = new Map(chunks.flat().map((p) => [p.id, p]));
108
118
  const sources = parentIds.flatMap((pid) => found.get(pid) ?? []);
109
119
  const refined = await refineSemanticMemory(entry.content, sources, {
110
120
  apiKey: opts.apiKey,
@@ -121,7 +131,7 @@ async function refineOneEntry(ctx, reach, entry, opts, result) {
121
131
  result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
122
132
  return;
123
133
  }
124
- storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenantId), entry, refined);
134
+ await storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenant_id), entry, refined);
125
135
  result.refined++;
126
136
  result.details.push({ id: entry.id, status: 'refined' });
127
137
  }
@@ -4,7 +4,7 @@ import { evalNow, strengthAblation } from '../core/ablation.js';
4
4
  import * as fs from 'fs';
5
5
  import { calculateStrength, calculateRewardFactor, confidenceFacets, confidenceLabel, Layer, } from '../core/memory.js';
6
6
  import * as api from '../api/index.js';
7
- import { getMemory } from '../api/memories.js';
7
+ import { getMemory } from '../api/memories/memories.js';
8
8
  import { ConflictError, NotFoundError } from '../core/api-errors.js';
9
9
  import { isInitialized } from '../core/project-identity.js';
10
10
  import { RejectedValueError } from '../core/api-errors.js';
@@ -20,10 +20,10 @@ import { validateOwner, isStrictOwnerEnv } from './owner-validation.js';
20
20
  import { printError } from './output.js';
21
21
  import { requireInit, runViaServerIfAvailable } from './shared.js';
22
22
  import { fmt } from './print.js';
23
- import { boolFlag, flagIsTrue, isOneOf, stringFlag, stringListFlag } from './flag-values.js';
23
+ import { boolFlag, flagIsTrue, isOneOf, stringFlag, stringFlagOrExit, stringListFlag, } from './flag-values.js';
24
24
  import { DAY_MS } from '../util/time.js';
25
25
  import { errorMessage } from '../util/log.js';
26
- import { CliExit } from './exit.js';
26
+ import { CliExit, fail } from './exit.js';
27
27
  const PARENT_PREVIEW_CHARS = 70;
28
28
  const DETAIL_CONTENT_CHARS = 160;
29
29
  // Shared by the direct write and the routed request so both store the same tags.
@@ -36,7 +36,7 @@ function rememberTags(flags, cwd) {
36
36
  if (!all.includes(pt))
37
37
  all.push(pt);
38
38
  }
39
- const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
39
+ const explicitScope = stringFlagOrExit(flags, 'scope') ?? null;
40
40
  const activeScope = explicitScope || detectScope();
41
41
  if (activeScope) {
42
42
  const scopeTag = `scope:${activeScope}`;
@@ -60,12 +60,12 @@ const USER_VISIBLE_KINDS = ['distilled', 'superseded'];
60
60
  function parseKindFlag(flags) {
61
61
  const kindFlagRaw = stringFlag(flags, 'kind');
62
62
  const kindFlag = kindFlagRaw === undefined ? undefined : kindFlagRaw.toLowerCase();
63
- // 'raw' is reserved for ingestion connectors (deletions go through archiveRawMemory); the append-only trigger aborts forget/consolidate on raw rows,
64
- // so exposing --kind raw would create unforgettable memories. 'archived' is an internal sentinel set only in that transaction.
63
+ // 'raw' is reserved for ingestion connectors (deletions go through archiveRawMemory); the append-only trigger aborts
64
+ // forget/consolidate on raw rows, so exposing --kind raw would create unforgettable memories. 'archived' is an
65
+ // internal sentinel set only in that transaction.
65
66
  if (kindFlag !== undefined && !isOneOf(USER_VISIBLE_KINDS, kindFlag)) {
66
67
  printError(`Invalid --kind: "${kindFlagRaw}". Must be one of: ${USER_VISIBLE_KINDS.join(', ')}`);
67
- printError(`(kind='raw' is reserved for ingestion connectors; kind='archived' is internal.)`);
68
- throw new CliExit(1);
68
+ fail(`(kind='raw' is reserved for ingestion connectors; kind='archived' is internal.)`);
69
69
  }
70
70
  return kindFlag;
71
71
  }
@@ -74,8 +74,7 @@ function parseRememberEnvelope(flags) {
74
74
  const ownerRaw = stringFlag(flags, 'owner') ?? null;
75
75
  const ownerCheck = validateOwner(ownerRaw, { strict: isStrictOwnerEnv() });
76
76
  if (!ownerCheck.ok) {
77
- printError(ownerCheck.message);
78
- throw new CliExit(1);
77
+ fail(ownerCheck.message);
79
78
  }
80
79
  if (ownerCheck.message)
81
80
  printError(ownerCheck.message);
@@ -97,7 +96,7 @@ async function cmdRemember(hippoRoot, tenantId, text, flags) {
97
96
  const { requested: requestedTags, all: allTags } = rememberTags(flags, process.cwd());
98
97
  const envelope = parseRememberEnvelope(flags);
99
98
  const ctx = cliApiContext(targetRoot, tenantId);
100
- const outcome = api.rememberLocally(ctx, {
99
+ const outcome = await api.rememberLocally(ctx, {
101
100
  content: text,
102
101
  kind: envelope.kind,
103
102
  scope: envelope.scope ?? undefined,
@@ -126,7 +125,8 @@ async function cmdRemember(hippoRoot, tenantId, text, flags) {
126
125
  function printRemembered(entry, useGlobal) {
127
126
  const prefix = useGlobal ? '[global] ' : '';
128
127
  console.log(`${prefix}Remembered [${entry.id}]`);
129
- console.log(` Layer: ${entry.layer} | Strength: ${fmt(entry.strength)} | Half-life: ${entry.half_life_days}d | Confidence: ${entry.confidence}`);
128
+ console.log(` Layer: ${entry.layer} | Strength: ${fmt(entry.strength)} | Half-life: ${entry.half_life_days}d | ` +
129
+ `Confidence: ${entry.confidence}`);
130
130
  if (entry.tags.length > 0)
131
131
  console.log(` Tags: ${entry.tags.join(', ')}`);
132
132
  if (entry.pinned)
@@ -150,7 +150,9 @@ function supersedeTags(flags) {
150
150
  /** The api's conflict text differs by which writer lost; the row itself names its successor either way. */
151
151
  async function alreadySupersededLine(hippoRoot, oldId, tenantId, conflict) {
152
152
  const by = (await getMemory(cliApiContext(hippoRoot, tenantId), oldId))?.superseded_by;
153
- return by ? `Error: memory ${oldId} is already superseded by ${by}. Supersede that one instead.` : `Error: ${conflict.message}`;
153
+ return by
154
+ ? `Error: memory ${oldId} is already superseded by ${by}. Supersede that one instead.`
155
+ : `Error: ${conflict.message}`;
154
156
  }
155
157
  function parseLayerFlag(flags) {
156
158
  const raw = stringFlag(flags, 'layer');
@@ -158,8 +160,7 @@ function parseLayerFlag(flags) {
158
160
  return undefined;
159
161
  const layer = Object.values(Layer).find((l) => l === raw);
160
162
  if (layer === undefined) {
161
- printError(`Invalid --layer: "${raw}". Must be one of: ${Object.values(Layer).join(', ')}`);
162
- throw new CliExit(1);
163
+ fail(`Invalid --layer: "${raw}". Must be one of: ${Object.values(Layer).join(', ')}`);
163
164
  }
164
165
  return layer;
165
166
  }
@@ -173,7 +174,7 @@ async function cmdSupersede(hippoRoot, tenantId, oldId, newContent, flags) {
173
174
  };
174
175
  let newId;
175
176
  try {
176
- ({ newId } = api.supersede(cliApiContext(hippoRoot, tenantId), oldId, newContent, overrides));
177
+ ({ newId } = await api.supersede(cliApiContext(hippoRoot, tenantId), oldId, newContent, overrides));
177
178
  }
178
179
  catch (err) {
179
180
  if (err instanceof NotFoundError)
@@ -193,46 +194,39 @@ function parseStepsOrExit(stepsJson) {
193
194
  return parseSteps(stepsJson);
194
195
  }
195
196
  catch (err) {
196
- printError(errorMessage(err));
197
- throw new CliExit(1);
197
+ fail(errorMessage(err));
198
198
  }
199
199
  }
200
200
  function traceTags(flags) {
201
- const rawTags = flags['tag'];
202
- return Array.isArray(rawTags)
203
- ? rawTags.map((t) => String(t))
204
- : rawTags !== undefined
205
- ? [String(rawTags)]
206
- : [];
201
+ return stringListFlag(flags, 'tag') ?? [];
207
202
  }
208
- function cmdTraceRecord(hippoRoot, tenantId, flags) {
203
+ async function cmdTraceRecord(hippoRoot, tenantId, flags) {
209
204
  requireInit(hippoRoot);
210
- const task = String(flags['task'] ?? '').trim();
211
- const stepsJson = String(flags['steps'] ?? '').trim();
212
- const outcome = String(flags['outcome'] ?? '').trim();
205
+ const task = stringFlagOrExit(flags, 'task') ?? '';
206
+ const stepsJson = stringFlagOrExit(flags, 'steps') ?? '';
207
+ const outcome = stringFlagOrExit(flags, 'outcome') ?? '';
213
208
  const validOutcomes = ['success', 'failure', 'partial'];
214
209
  if (!task || !stepsJson || !outcome) {
215
- printError('Usage: hippo trace record --task <t> --steps <json> --outcome <success|failure|partial> [--session <id>] [--tag <t>]');
216
- throw new CliExit(1);
210
+ fail('Usage: hippo trace record --task <t> --steps <json> --outcome <success|failure|partial> ' +
211
+ '[--session <id>] [--tag <t>]');
217
212
  }
218
213
  if (!isOneOf(validOutcomes, outcome)) {
219
- printError(`Invalid outcome: "${outcome}". Must be one of: ${validOutcomes.join(', ')}.`);
220
- throw new CliExit(1);
214
+ fail(`Invalid outcome: "${outcome}". Must be one of: ${validOutcomes.join(', ')}.`);
221
215
  }
222
216
  const steps = parseStepsOrExit(stepsJson);
223
- const sessionId = String(flags['session'] ?? '').trim() || null;
217
+ const sessionId = stringFlagOrExit(flags, 'session') || null;
224
218
  const tags = traceTags(flags);
225
219
  const content = renderTraceContent({
226
220
  task,
227
221
  steps,
228
222
  outcome,
229
223
  });
230
- const { id } = api.remember(cliApiContext(hippoRoot, tenantId), {
224
+ const { id } = await api.remember(cliApiContext(hippoRoot, tenantId), {
231
225
  content,
232
226
  tags,
233
227
  local: {
234
228
  layer: Layer.Trace,
235
- source: String(flags['source'] ?? 'cli'),
229
+ source: stringFlagOrExit(flags, 'source') ?? 'cli',
236
230
  traceOutcome: outcome,
237
231
  sourceSessionId: sessionId,
238
232
  },
@@ -251,8 +245,7 @@ async function cmdTrace(hippoRoot, tenantId, id, flags) {
251
245
  sourceLabel = 'global';
252
246
  }
253
247
  if (!entry) {
254
- printError(`Memory not found: ${id}`);
255
- throw new CliExit(1);
248
+ fail(`Memory not found: ${id}`);
256
249
  }
257
250
  const t = {
258
251
  entry, id, sourceLabel,
@@ -288,12 +281,15 @@ async function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
288
281
  for (const pid of parents) {
289
282
  const p = (await getMemory(cliApiContext(hippoRoot, tenantId), pid))
290
283
  ?? (isInitialized(globalRoot) ? await getMemory(cliApiContext(globalRoot, tenantId), pid) : null);
291
- parentPreviews.push({ id: pid, content: p ? p.content.replace(/\s+/g, ' ').slice(0, PARENT_PREVIEW_CHARS) : '(not found)' });
284
+ parentPreviews.push({
285
+ id: pid,
286
+ content: p ? p.content.replace(/\s+/g, ' ').slice(0, PARENT_PREVIEW_CHARS) : '(not found)',
287
+ });
292
288
  }
293
289
  // Open conflicts involving this memory.
294
290
  const allConflicts = [
295
- ...api.listConflicts(cliApiContext(hippoRoot, tenantId), 'open'),
296
- ...(isInitialized(globalRoot) ? api.listConflicts(cliApiContext(globalRoot, tenantId), 'open') : []),
291
+ ...(await api.listConflicts(cliApiContext(hippoRoot, tenantId), 'open')),
292
+ ...(isInitialized(globalRoot) ? await api.listConflicts(cliApiContext(globalRoot, tenantId), 'open') : []),
297
293
  ];
298
294
  const myConflicts = allConflicts.filter((c) => c.memory_a_id === id || c.memory_b_id === id);
299
295
  return { parentPreviews, myConflicts };
@@ -328,13 +324,16 @@ function printTraceJson(t) {
328
324
  }, null, 2));
329
325
  }
330
326
  function printTraceText(t) {
331
- const { entry, id, sourceLabel, conf, ageDays, strength, projectedAt, halfLife, rewardFactor, effHalfLife, sinceLast } = t;
327
+ const { entry, id, sourceLabel, conf, ageDays, strength, projectedAt } = t;
328
+ const { halfLife, rewardFactor, effHalfLife, sinceLast } = t;
332
329
  const { parentPreviews, myConflicts } = t;
333
330
  console.log(`Memory: ${entry.id} [${sourceLabel}]`);
334
331
  console.log('='.repeat(50));
335
- console.log(`Content: ${entry.content.replace(/\s+/g, ' ').slice(0, DETAIL_CONTENT_CHARS)}${entry.content.length > DETAIL_CONTENT_CHARS ? '...' : ''}`);
336
- console.log(`Layer: ${entry.layer.padEnd(10)} Confidence: ${conf.padEnd(14)} Pinned: ${entry.pinned ? 'yes' : 'no'}${entry.starred ? ' Starred: ' +
337
- 'yes' : ''}`);
332
+ const ellipsis = entry.content.length > DETAIL_CONTENT_CHARS ? '...' : '';
333
+ console.log(`Content: ${entry.content.replace(/\s+/g, ' ').slice(0, DETAIL_CONTENT_CHARS)}${ellipsis}`);
334
+ const starred = entry.starred ? ' Starred: ' + 'yes' : '';
335
+ const pinned = entry.pinned ? 'yes' : 'no';
336
+ console.log(`Layer: ${entry.layer.padEnd(10)} Confidence: ${conf.padEnd(14)} Pinned: ${pinned}${starred}`);
338
337
  console.log(`Tags: ${entry.tags.join(', ') || '(none)'}`);
339
338
  console.log(`Created: ${entry.created} (${fmt(ageDays, 1)} days ago)`);
340
339
  console.log();
@@ -374,11 +373,11 @@ export async function handleRemember({ hippoRoot, tenantId, args, flags }) {
374
373
  text = args.join(' ').trim();
375
374
  }
376
375
  if (!text || text.length < 3) {
377
- printError('Memory content too short (minimum 3 characters).');
378
- throw new CliExit(1);
376
+ fail('Memory content too short (minimum 3 characters).');
379
377
  }
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.
378
+ // Thin-client routing: simple `remember` calls go over HTTP so the daemon stays the single writer; rich flags need
379
+ // the direct path. The salience gate is not in richFlag and the route does not apply it, so a routed remember stores
380
+ // what a direct one would skip.
382
381
  const richFlag = flags['pin'] || flags['global'] || flags['extract'] || flags['force'] ||
383
382
  flags['observed'] || flags['inferred'] || flags['verified'] ||
384
383
  flags['layer'] !== undefined;
@@ -395,8 +394,7 @@ async function rememberViaThinClient(hippoRoot, text, flags) {
395
394
  const thinOwnerRaw = stringFlag(flags, 'owner');
396
395
  const thinOwnerCheck = validateOwner(thinOwnerRaw, { strict: isStrictOwnerEnv() });
397
396
  if (!thinOwnerCheck.ok) {
398
- printError(thinOwnerCheck.message);
399
- throw new CliExit(1);
397
+ fail(thinOwnerCheck.message);
400
398
  }
401
399
  if (thinOwnerCheck.message)
402
400
  printError(thinOwnerCheck.message);
@@ -419,20 +417,18 @@ export async function handleSupersede({ hippoRoot, tenantId, args, flags }) {
419
417
  const oldId = args[0];
420
418
  const newContent = args.slice(1).join(' ').trim();
421
419
  if (!oldId || !newContent) {
422
- printError('Usage: hippo supersede <old-id> "<new content>" [--layer L] [--tag T] [--pin]');
423
- throw new CliExit(1);
420
+ fail('Usage: hippo supersede <old-id> "<new content>" [--layer L] [--tag T] [--pin]');
424
421
  }
425
422
  await cmdSupersede(hippoRoot, tenantId, oldId, newContent, flags);
426
423
  }
427
424
  export async function handleTrace({ hippoRoot, tenantId, args, flags }) {
428
425
  const sub = args[0] ? String(args[0]) : '';
429
426
  if (sub === 'record') {
430
- cmdTraceRecord(hippoRoot, tenantId, flags);
427
+ await cmdTraceRecord(hippoRoot, tenantId, flags);
431
428
  return;
432
429
  }
433
430
  if (!sub) {
434
- printError('Usage: hippo trace <memory-id> | hippo trace record --task <t> --steps <json> --outcome <o>');
435
- throw new CliExit(1);
431
+ fail('Usage: hippo trace <memory-id> | hippo trace record --task <t> --steps <json> --outcome <o>');
436
432
  }
437
433
  await cmdTrace(hippoRoot, tenantId, sub, flags);
438
434
  }
@@ -13,7 +13,10 @@ export declare function hasUnsafeRunnerPathChars(runnerDir: string, platform: No
13
13
  export declare function buildDailyRunnerCommand(projectDir: string, platform?: NodeJS.Platform): string;
14
14
  /** What the Windows task runs. A plain `cmd /c` task opens a visible console every morning. */
15
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. */
16
+ /**
17
+ * `text` for the inside of one double-quoted Windows argument: a backslash run before a quote or the end doubles, so no
18
+ * quote ends the argument early.
19
+ */
17
20
  export declare function quoteInsideWindowsArg(text: string): string;
18
21
  /** Argv for `schtasks`, passed without a shell: through cmd.exe the `&&` in /tr split the command. */
19
22
  export declare function buildSchtasksCreateArgs(taskName: string, cmd: string): string[];
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { errorMessage, log } from '../util/log.js';
3
+ import { errorMessage, log, errorFields } from '../util/log.js';
4
4
  import { writeFileAtomic } from '../util/atomic-write.js';
5
5
  export const DAILY_TASK_NAME = 'hippo-daily-runner';
6
6
  function defaultRegistry() {
@@ -24,7 +24,7 @@ export function loadWorkspaceRegistry(globalRoot) {
24
24
  text = fs.readFileSync(registryPath, 'utf8');
25
25
  }
26
26
  catch (err) {
27
- log.warn(`workspace registry ${registryPath} could not be read (${errorMessage(err)}); starting with no workspaces`);
27
+ log.warn(`workspace registry ${registryPath} could not be read (${errorMessage(err)}); starting with no workspaces`, errorFields(err));
28
28
  return defaultRegistry();
29
29
  }
30
30
  try {
@@ -51,8 +51,9 @@ function setAsideCorruptRegistry(registryPath, err) {
51
51
  log.warn(`workspace registry ${registryPath} is corrupt (${reason}); moved it to ${aside} and starting with no workspaces`);
52
52
  }
53
53
  catch (renameErr) {
54
- log.warn(`workspace registry ${registryPath} is corrupt (${reason}) and could not be moved aside (${errorMessage(renameErr)}); ` +
55
- `starting with no workspaces`);
54
+ log.warn(`workspace registry ${registryPath} is corrupt (${reason}) and could not be moved aside ` +
55
+ `(${errorMessage(renameErr)}); ` +
56
+ `starting with no workspaces`, errorFields(renameErr));
56
57
  }
57
58
  }
58
59
  export function saveWorkspaceRegistry(globalRoot, registry) {
@@ -89,7 +90,10 @@ export function buildDailyRunnerCommand(projectDir, platform = process.platform)
89
90
  export function buildWindowsTaskRun(cmd) {
90
91
  return `conhost.exe --headless cmd /c ${cmd}`;
91
92
  }
92
- /** `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. */
93
+ /**
94
+ * `text` for the inside of one double-quoted Windows argument: a backslash run before a quote or the end doubles, so no
95
+ * quote ends the argument early.
96
+ */
93
97
  export function quoteInsideWindowsArg(text) {
94
98
  return text.replace(/(\\*)"/g, '$1$1\\"').replace(/\\+$/, '$&$&');
95
99
  }
package/dist/cli/serve.js CHANGED
@@ -1,20 +1,21 @@
1
1
  // Long-running verbs: `hippo dashboard`, `hippo mcp` and `hippo serve`.
2
2
  import { installCrashHandlers } from '../util/crash-handlers.js';
3
- import { envAllowKeylessLocal, envPort, envRequireAuth, envTlsCert, envTlsKey } from '../util/env.js';
3
+ import { envAllowKeylessLocal, envKeylessLocalRole, envPort, envRequireAuth, envTlsCert, envTlsKey, } from '../util/env.js';
4
4
  import * as fs from 'fs';
5
5
  import * as path from 'path';
6
- import { printError } from './output.js';
7
- import { stringFlagOrExit, stringFlag, numberFlag } from './flag-values.js';
6
+ import { flagIsTrue, stringFlagOrExit, stringFlag, numberFlag } from './flag-values.js';
8
7
  import { requireInit } from './shared.js';
9
8
  import { errorMessage } from '../util/log.js';
10
- import { CliExit } from './exit.js';
9
+ import { fail } from './exit.js';
10
+ import { cliStdioHost } from './api-context.js';
11
11
  import { DEFAULT_DASHBOARD_PORT, DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT } from '../server/defaults.js';
12
12
  export async function handleDashboard({ hippoRoot, flags }) {
13
13
  requireInit(hippoRoot);
14
14
  const port = numberFlag(flags, 'port') ?? DEFAULT_DASHBOARD_PORT;
15
15
  const { serveDashboard } = await import('../dashboard/dashboard.js');
16
16
  serveDashboard(hippoRoot, port, undefined, { handleSignals: true });
17
- // A later throw ends in one log line and exit 1, as it does for serve and mcp; a busy port is reported by the dashboard itself.
17
+ // A later throw ends in one log line and exit 1, as it does for serve and mcp; a busy port is reported by the
18
+ // dashboard itself.
18
19
  installCrashHandlers('dashboard');
19
20
  await new Promise(() => { }); // run until Ctrl+C
20
21
  }
@@ -24,11 +25,12 @@ export async function handleMcp() {
24
25
  // stdio loop here. (HTTP/SSE transport is wired in src/server.ts and
25
26
  // imports the same module without triggering stdin handlers.)
26
27
  const mod = await import('../mcp/server.js');
27
- mod.startStdioLoop();
28
+ mod.startStdioLoop(cliStdioHost);
28
29
  // Server runs until stdin closes, so we never reach here
29
30
  await new Promise(() => { }); // hang forever
30
31
  }
31
- /** The certificate and key for HTTPS, from --tls-cert and --tls-key or HIPPO_TLS_CERT and HIPPO_TLS_KEY; undefined when neither is set. */
32
+ /** The certificate and key for HTTPS, from --tls-cert and --tls-key or HIPPO_TLS_CERT and HIPPO_TLS_KEY; undefined when
33
+ * neither is set. */
32
34
  function readTlsFiles(flags) {
33
35
  // A flag with no value exits here; falling back to cleartext would hide the mistake.
34
36
  const certPath = stringFlagOrExit(flags, 'tls-cert') ?? envTlsCert();
@@ -36,39 +38,47 @@ function readTlsFiles(flags) {
36
38
  if (certPath === undefined && keyPath === undefined)
37
39
  return undefined;
38
40
  if (certPath === undefined || keyPath === undefined) {
39
- printError('hippo serve: TLS needs both a certificate and a key: --tls-cert and --tls-key, or HIPPO_TLS_CERT and HIPPO_TLS_KEY.');
40
- throw new CliExit(1);
41
+ fail('hippo serve: TLS needs both a certificate and a key: --tls-cert and --tls-key, ' +
42
+ 'or HIPPO_TLS_CERT and HIPPO_TLS_KEY.');
41
43
  }
42
44
  try {
43
45
  return { cert: fs.readFileSync(certPath), key: fs.readFileSync(keyPath) };
44
46
  }
45
47
  catch (err) {
46
- printError(`hippo serve: cannot read the TLS files: ${errorMessage(err)}`);
47
- throw new CliExit(1);
48
+ fail(`hippo serve: cannot read the TLS files: ${errorMessage(err)}`);
48
49
  }
49
50
  }
50
- /** Said at every start, so the key rule is a choice an operator sees, and an upgrade that changed it explains itself. */
51
+ /** Said at every start, so the key rule is a choice an operator sees, and an upgrade that changed it explains
52
+ * itself. */
51
53
  function keyRuleLine() {
52
54
  if (envRequireAuth())
53
55
  return 'every request needs an API key (HIPPO_REQUIRE_AUTH=1)';
54
56
  if (envAllowKeylessLocal()) {
55
- return 'requests from this machine need no API key and act as host admin (HIPPO_ALLOW_KEYLESS_LOCAL=1); unset it to require a key on every request';
57
+ const role = envKeylessLocalRole() === 'admin'
58
+ ? 'act as host admin (HIPPO_ALLOW_KEYLESS_LOCAL=1, HIPPO_KEYLESS_LOCAL_ROLE=admin)'
59
+ : 'act as a member (HIPPO_ALLOW_KEYLESS_LOCAL=1; ' +
60
+ 'HIPPO_KEYLESS_LOCAL_ROLE=admin opens sleep and the quarantine routes)';
61
+ return `requests from this machine need no API key and ${role}; ` +
62
+ 'unset HIPPO_ALLOW_KEYLESS_LOCAL to require a key on every request';
56
63
  }
57
- return 'every request needs an API key: mint one with `hippo auth create` and send it as "Authorization: Bearer <key>" ' +
58
- '(the hippo CLI reads HIPPO_API_KEY). To let requests from this machine in without a key, start with HIPPO_ALLOW_KEYLESS_LOCAL=1';
64
+ return 'every request needs an API key: mint one with `hippo auth create` and send it as ' +
65
+ '"Authorization: Bearer <key>" ' +
66
+ '(the hippo CLI reads HIPPO_API_KEY). To let requests from this machine in without a key, ' +
67
+ 'start with HIPPO_ALLOW_KEYLESS_LOCAL=1';
59
68
  }
60
69
  export async function handleServe({ hippoRoot, flags }) {
61
70
  requireInit(hippoRoot);
62
71
  const portRaw = flags['port'] ?? envPort() ?? DEFAULT_SERVER_PORT;
63
72
  const port = Number(portRaw);
64
73
  if (!Number.isFinite(port) || port < 0) {
65
- printError(`Invalid --port: ${String(portRaw)}`);
66
- throw new CliExit(1);
74
+ fail(`Invalid --port: ${String(portRaw)}`);
67
75
  }
68
76
  const host = stringFlag(flags, 'host') ?? DEFAULT_SERVER_HOST;
69
77
  const tls = readTlsFiles(flags);
70
78
  const { serve } = await import('../server.js');
71
- const handle = await serve({ hippoRoot, port, host, handleSignals: true, tls });
79
+ // Unset rather than false without the flag, so HIPPO_ALLOW_CLEARTEXT=1 still applies.
80
+ const allowCleartext = flagIsTrue(flags, 'allow-cleartext') || undefined;
81
+ const handle = await serve({ hippoRoot, port, host, handleSignals: true, tls, allowCleartext });
72
82
  console.log(`hippo serve listening on ${handle.url} (pid ${process.pid})`);
73
83
  console.log(keyRuleLine());
74
84
  console.log(`pidfile: ${path.join(hippoRoot, 'server.pid')}`);
@@ -1,12 +1,8 @@
1
1
  import { type CliFlags, type CommandContext } from './flag-values.js';
2
- /** SessionEnd entry: TUI teardown kills children still running, so read stdin inline, spawn a detached child that runs sleep then capture, and exit.
3
- * The child logs to a file that the next SessionStart reads via `hippo last-sleep`. */
2
+ /** SessionEnd entry: TUI teardown kills children still running, so read stdin inline, spawn a detached child that runs
3
+ * sleep then capture, and exit. The child logs to a file that the next SessionStart reads via `hippo last-sleep`. */
4
4
  export declare function handleSessionEnd({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
5
5
  export declare function handleSessionEndWorker({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
6
- /** Quotes one cmd.exe argument; each `%` leaves the quotes as `^%`, so no %NAME% pair can expand. */
7
- export declare function quoteCmdArg(arg: string): string;
8
- /** cmd.exe arguments that run a .cmd or .bat shim with every forwarded argument delivered verbatim. */
9
- export declare function cmdShimArgs(shimPath: string, forwardArgs: readonly string[]): string[];
10
6
  export declare function handleCodexRun({ hippoRoot, tenantId, args }: CommandContext): void;
11
7
  export declare function cmdCodexSessionEndWorker(hippoRoot: string, tenantId: string, flags: CliFlags): Promise<void>;
12
8
  export declare function handleCodexSessionEndWorker({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;