hippo-memory 1.70.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 (629) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-memories/claude-code.d.ts +4 -2
  3. package/dist/agent-memories/claude-code.js +14 -5
  4. package/dist/agent-memories/files.js +23 -12
  5. package/dist/agent-memories/markdown.d.ts +1 -3
  6. package/dist/agent-memories/markdown.js +1 -3
  7. package/dist/agent-memories/report.js +2 -1
  8. package/dist/agent-memories/sync.d.ts +4 -2
  9. package/dist/agent-memories/sync.js +10 -5
  10. package/dist/api/assemble.d.ts +7 -44
  11. package/dist/api/assemble.js +2 -22
  12. package/dist/api/audit.d.ts +5 -1
  13. package/dist/api/audit.js +9 -1
  14. package/dist/api/auth.d.ts +13 -22
  15. package/dist/api/auth.js +34 -24
  16. package/dist/api/auto-sleep.js +2 -2
  17. package/dist/api/availability.d.ts +2 -15
  18. package/dist/api/availability.js +2 -15
  19. package/dist/api/context-select.js +3 -4
  20. package/dist/api/context-types.d.ts +10 -35
  21. package/dist/api/context.d.ts +5 -22
  22. package/dist/api/context.js +21 -38
  23. package/dist/api/dormant.d.ts +5 -21
  24. package/dist/api/dormant.js +7 -26
  25. package/dist/api/drill-down.d.ts +7 -46
  26. package/dist/api/drill-down.js +5 -26
  27. package/dist/api/forget.d.ts +5 -24
  28. package/dist/api/forget.js +5 -28
  29. package/dist/api/graph.d.ts +8 -0
  30. package/dist/api/graph.js +7 -0
  31. package/dist/api/index.d.ts +2 -0
  32. package/dist/api/index.js +2 -0
  33. package/dist/api/instruction-detect.js +16 -5
  34. package/dist/api/ledger-db.d.ts +2 -1
  35. package/dist/api/ledger-db.js +5 -3
  36. package/dist/api/memories.d.ts +5 -0
  37. package/dist/api/memories.js +7 -0
  38. package/dist/api/objects.d.ts +9 -0
  39. package/dist/api/objects.js +11 -0
  40. package/dist/api/on-store.js +5 -3
  41. package/dist/api/predictions.d.ts +9 -0
  42. package/dist/api/predictions.js +18 -0
  43. package/dist/api/promote.d.ts +13 -17
  44. package/dist/api/promote.js +11 -19
  45. package/dist/api/prompt-hook.d.ts +4 -4
  46. package/dist/api/prompt-hook.js +10 -9
  47. package/dist/api/recall-cli.d.ts +55 -0
  48. package/dist/api/recall-cli.js +94 -0
  49. package/dist/api/recall-core.js +14 -6
  50. package/dist/api/recall-finish.d.ts +53 -0
  51. package/dist/api/recall-finish.js +30 -0
  52. package/dist/api/recall-history.d.ts +17 -84
  53. package/dist/api/recall-history.js +15 -88
  54. package/dist/api/recall-pipeline.d.ts +2 -3
  55. package/dist/api/recall-pipeline.js +16 -9
  56. package/dist/api/recall-types.d.ts +64 -304
  57. package/dist/api/recall.d.ts +5 -33
  58. package/dist/api/recall.js +59 -60
  59. package/dist/api/refine.d.ts +7 -0
  60. package/dist/api/refine.js +10 -0
  61. package/dist/api/remember-local.d.ts +57 -0
  62. package/dist/api/remember-local.js +90 -0
  63. package/dist/api/remember.d.ts +18 -1
  64. package/dist/api/remember.js +13 -1
  65. package/dist/api/sleep-run.d.ts +1 -3
  66. package/dist/api/sleep-run.js +17 -21
  67. package/dist/api/sleep.d.ts +9 -28
  68. package/dist/api/tokens.d.ts +3 -10
  69. package/dist/api/tokens.js +3 -10
  70. package/dist/api/types.d.ts +6 -29
  71. package/dist/api/types.js +4 -22
  72. package/dist/capture/command.d.ts +4 -12
  73. package/dist/capture/command.js +6 -22
  74. package/dist/capture/compact.d.ts +4 -15
  75. package/dist/capture/compact.js +16 -25
  76. package/dist/capture/compaction-record.js +101 -69
  77. package/dist/capture/compaction-spool.d.ts +1 -1
  78. package/dist/capture/compaction-spool.js +1 -1
  79. package/dist/capture/session-digest.d.ts +1 -1
  80. package/dist/capture/session-digest.js +13 -7
  81. package/dist/capture/transcript.d.ts +2 -10
  82. package/dist/capture/transcript.js +4 -18
  83. package/dist/cli/api-context.d.ts +3 -0
  84. package/dist/cli/api-context.js +6 -0
  85. package/dist/cli/audit-prune.d.ts +6 -39
  86. package/dist/cli/audit-prune.js +6 -39
  87. package/dist/cli/audit.d.ts +1 -1
  88. package/dist/cli/audit.js +33 -34
  89. package/dist/cli/auth.d.ts +2 -2
  90. package/dist/cli/auth.js +57 -39
  91. package/dist/cli/briefs.d.ts +4 -4
  92. package/dist/cli/briefs.js +18 -22
  93. package/dist/cli/card.d.ts +2 -2
  94. package/dist/cli/card.js +31 -32
  95. package/dist/cli/client.d.ts +7 -27
  96. package/dist/cli/client.js +24 -43
  97. package/dist/cli/compact-resume-payload.js +3 -2
  98. package/dist/cli/context.d.ts +1 -2
  99. package/dist/cli/context.js +12 -8
  100. package/dist/cli/continuity.d.ts +6 -6
  101. package/dist/cli/continuity.js +62 -64
  102. package/dist/cli/correction-latency.d.ts +2 -14
  103. package/dist/cli/correction-latency.js +2 -14
  104. package/dist/cli/curate.d.ts +13 -17
  105. package/dist/cli/curate.js +68 -92
  106. package/dist/cli/dag.d.ts +4 -4
  107. package/dist/cli/dag.js +33 -27
  108. package/dist/cli/decisions.d.ts +4 -4
  109. package/dist/cli/decisions.js +33 -47
  110. package/dist/cli/eval.js +15 -13
  111. package/dist/cli/exit.d.ts +6 -0
  112. package/dist/cli/exit.js +11 -0
  113. package/dist/cli/explain.d.ts +1 -2
  114. package/dist/cli/explain.js +6 -4
  115. package/dist/cli/flag-values.d.ts +6 -1
  116. package/dist/cli/flag-values.js +27 -10
  117. package/dist/cli/flags.d.ts +1 -0
  118. package/dist/cli/flags.js +1 -1
  119. package/dist/cli/github.d.ts +14 -0
  120. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  121. package/dist/cli/goals.d.ts +2 -2
  122. package/dist/cli/goals.js +46 -50
  123. package/dist/cli/hook-runtime.d.ts +9 -27
  124. package/dist/cli/hook-runtime.js +15 -31
  125. package/dist/cli/init.d.ts +2 -2
  126. package/dist/cli/init.js +6 -12
  127. package/dist/cli/install-steps.js +3 -12
  128. package/dist/cli/last-sleep.d.ts +2 -1
  129. package/dist/cli/last-sleep.js +3 -0
  130. package/dist/cli/maintenance.d.ts +4 -4
  131. package/dist/cli/maintenance.js +14 -19
  132. package/dist/cli/object-verbs.js +4 -3
  133. package/dist/cli/owner-validation.d.ts +5 -28
  134. package/dist/cli/owner-validation.js +5 -28
  135. package/dist/cli/playbooks.d.ts +4 -4
  136. package/dist/cli/playbooks.js +23 -28
  137. package/dist/cli/print.d.ts +2 -5
  138. package/dist/cli/print.js +1 -4
  139. package/dist/cli/projects.d.ts +2 -2
  140. package/dist/cli/projects.js +1 -3
  141. package/dist/cli/provenance-coverage.d.ts +2 -6
  142. package/dist/cli/provenance-coverage.js +2 -6
  143. package/dist/cli/quality-repair-once.js +2 -2
  144. package/dist/cli/recall.d.ts +2 -4
  145. package/dist/cli/recall.js +55 -131
  146. package/dist/cli/refine-llm.d.ts +5 -31
  147. package/dist/cli/refine-llm.js +9 -36
  148. package/dist/cli/remember.d.ts +3 -3
  149. package/dist/cli/remember.js +122 -180
  150. package/dist/cli/scheduler.d.ts +2 -17
  151. package/dist/cli/scheduler.js +12 -18
  152. package/dist/cli/serve.js +21 -12
  153. package/dist/cli/session-hooks.d.ts +10 -18
  154. package/dist/cli/session-hooks.js +112 -113
  155. package/dist/cli/setup.d.ts +4 -4
  156. package/dist/cli/setup.js +19 -21
  157. package/dist/cli/shared.d.ts +9 -23
  158. package/dist/cli/shared.js +9 -32
  159. package/dist/cli/slack.d.ts +2 -2
  160. package/dist/cli/slack.js +19 -23
  161. package/dist/cli/sleep.d.ts +3 -2
  162. package/dist/cli/sleep.js +15 -16
  163. package/dist/cli/status.d.ts +9 -12
  164. package/dist/cli/status.js +55 -98
  165. package/dist/cli/stdin.d.ts +4 -6
  166. package/dist/cli/stdin.js +2 -3
  167. package/dist/cli/transfer.d.ts +9 -9
  168. package/dist/cli/transfer.js +66 -89
  169. package/dist/cli/usage.js +11 -5
  170. package/dist/cli.d.ts +66 -448
  171. package/dist/cli.js +87 -263
  172. package/dist/connectors/github/backfill.d.ts +5 -25
  173. package/dist/connectors/github/backfill.js +14 -49
  174. package/dist/connectors/github/deletion.d.ts +4 -18
  175. package/dist/connectors/github/deletion.js +2 -15
  176. package/dist/connectors/github/dlq.d.ts +8 -33
  177. package/dist/connectors/github/dlq.js +12 -29
  178. package/dist/connectors/github/ingest.d.ts +2 -6
  179. package/dist/connectors/github/ingest.js +4 -10
  180. package/dist/connectors/github/octokit-client.d.ts +4 -16
  181. package/dist/connectors/github/octokit-client.js +27 -24
  182. package/dist/connectors/github/ratelimit.d.ts +3 -14
  183. package/dist/connectors/github/ratelimit.js +3 -14
  184. package/dist/connectors/github/scope.d.ts +3 -5
  185. package/dist/connectors/github/scope.js +3 -5
  186. package/dist/connectors/github/signature.d.ts +4 -26
  187. package/dist/connectors/github/signature.js +4 -26
  188. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  189. package/dist/connectors/github/tenant-routing.js +4 -26
  190. package/dist/connectors/github/transform.js +2 -16
  191. package/dist/connectors/github/types.d.ts +3 -15
  192. package/dist/connectors/github/types.js +2 -9
  193. package/dist/connectors/github/webhook.d.ts +2 -16
  194. package/dist/connectors/github/webhook.js +6 -22
  195. package/dist/connectors/slack/backfill.d.ts +4 -17
  196. package/dist/connectors/slack/backfill.js +4 -13
  197. package/dist/connectors/slack/dlq.d.ts +2 -19
  198. package/dist/connectors/slack/dlq.js +2 -19
  199. package/dist/connectors/slack/ingest.d.ts +2 -3
  200. package/dist/connectors/slack/ingest.js +2 -3
  201. package/dist/connectors/slack/scope.d.ts +2 -8
  202. package/dist/connectors/slack/scope.js +2 -8
  203. package/dist/connectors/slack/signature.d.ts +1 -6
  204. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  205. package/dist/connectors/slack/tenant-routing.js +2 -21
  206. package/dist/connectors/slack/transform.d.ts +2 -18
  207. package/dist/connectors/slack/transform.js +2 -18
  208. package/dist/connectors/slack/types.d.ts +3 -9
  209. package/dist/connectors/slack/types.js +2 -4
  210. package/dist/connectors/slack/web-client.js +33 -27
  211. package/dist/connectors/slack/webhook.d.ts +2 -19
  212. package/dist/connectors/slack/webhook.js +5 -26
  213. package/dist/connectors/slack/workspaces.d.ts +4 -24
  214. package/dist/connectors/slack/workspaces.js +4 -24
  215. package/dist/consolidate/conflicts.js +6 -14
  216. package/dist/consolidate/dag-summary.d.ts +8 -0
  217. package/dist/consolidate/dag-summary.js +41 -0
  218. package/dist/consolidate/dag.d.ts +5 -28
  219. package/dist/consolidate/dag.js +14 -75
  220. package/dist/consolidate/decay.js +7 -19
  221. package/dist/consolidate/dedupe.d.ts +6 -52
  222. package/dist/consolidate/dedupe.js +13 -71
  223. package/dist/consolidate/flush-units.d.ts +3 -4
  224. package/dist/consolidate/flush-units.js +3 -3
  225. package/dist/consolidate/half-life-migration.d.ts +3 -26
  226. package/dist/consolidate/half-life-migration.js +11 -28
  227. package/dist/consolidate/llm-passes.js +4 -21
  228. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  229. package/dist/consolidate/memory-value-weights.js +2 -13
  230. package/dist/consolidate/memory-value.d.ts +11 -84
  231. package/dist/consolidate/memory-value.js +16 -104
  232. package/dist/consolidate/merge.js +10 -31
  233. package/dist/consolidate/merged-row.js +2 -1
  234. package/dist/consolidate/physics-pass.js +1 -3
  235. package/dist/consolidate/replay.d.ts +6 -38
  236. package/dist/consolidate/replay.js +14 -52
  237. package/dist/consolidate/run.js +1 -1
  238. package/dist/consolidate/sleep.d.ts +1 -8
  239. package/dist/consolidate/sleep.js +5 -17
  240. package/dist/consolidate/trace.d.ts +3 -18
  241. package/dist/consolidate/trace.js +3 -18
  242. package/dist/consolidate/traces.js +6 -22
  243. package/dist/core/ablation.d.ts +4 -91
  244. package/dist/core/ablation.js +4 -91
  245. package/dist/core/ambient.d.ts +1 -8
  246. package/dist/core/ambient.js +1 -8
  247. package/dist/core/capture-contract.d.ts +4 -2
  248. package/dist/core/capture-contract.js +4 -2
  249. package/dist/core/card.d.ts +4 -1
  250. package/dist/core/card.js +8 -0
  251. package/dist/core/compare.d.ts +11 -67
  252. package/dist/core/compare.js +9 -63
  253. package/dist/core/config.d.ts +10 -24
  254. package/dist/core/config.js +13 -14
  255. package/dist/core/handoff.d.ts +1 -7
  256. package/dist/core/handoff.js +1 -7
  257. package/dist/core/memory-quality.js +1 -1
  258. package/dist/core/memory.d.ts +41 -164
  259. package/dist/core/memory.js +51 -221
  260. package/dist/core/package-root.d.ts +3 -0
  261. package/dist/core/package-root.js +5 -0
  262. package/dist/core/physics-config.d.ts +1 -4
  263. package/dist/core/physics-config.js +3 -8
  264. package/dist/core/physics.d.ts +15 -61
  265. package/dist/core/physics.js +59 -122
  266. package/dist/core/project-identity.d.ts +17 -58
  267. package/dist/core/project-identity.js +17 -38
  268. package/dist/core/project-remote.js +13 -2
  269. package/dist/core/raw-append-only.d.ts +5 -0
  270. package/dist/core/raw-append-only.js +7 -0
  271. package/dist/core/salience.d.ts +1 -7
  272. package/dist/core/salience.js +1 -7
  273. package/dist/dashboard/dashboard-actions.js +2 -2
  274. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  275. package/dist/dashboard/dashboard-snapshot.js +11 -2
  276. package/dist/dashboard/dashboard-types.d.ts +2 -1
  277. package/dist/dashboard/dashboard.d.ts +1 -0
  278. package/dist/dashboard/dashboard.js +50 -4
  279. package/dist/db/busy.d.ts +1 -1
  280. package/dist/db/busy.js +17 -8
  281. package/dist/db/connect.d.ts +1 -0
  282. package/dist/db/connect.js +3 -3
  283. package/dist/db/migrate.js +3 -3
  284. package/dist/db/migrations/types.d.ts +2 -5
  285. package/dist/db/migrations/v14.js +2 -3
  286. package/dist/db/migrations/v15.js +2 -8
  287. package/dist/db/migrations/v16.js +2 -3
  288. package/dist/db/migrations/v17.js +2 -3
  289. package/dist/db/migrations/v19.js +2 -5
  290. package/dist/db/migrations/v20.js +2 -7
  291. package/dist/db/migrations/v22.js +4 -17
  292. package/dist/db/migrations/v23.js +3 -14
  293. package/dist/db/migrations/v24.js +2 -4
  294. package/dist/db/migrations/v25.js +3 -8
  295. package/dist/db/migrations/v26.js +2 -13
  296. package/dist/db/migrations/v27.js +3 -11
  297. package/dist/db/migrations/v28.js +2 -14
  298. package/dist/db/migrations/v29.js +4 -18
  299. package/dist/db/migrations/v30.js +4 -16
  300. package/dist/db/migrations/v31.js +2 -15
  301. package/dist/db/migrations/v32.js +4 -22
  302. package/dist/db/migrations/v33.js +2 -15
  303. package/dist/db/migrations/v34.js +2 -11
  304. package/dist/db/migrations/v35.js +2 -11
  305. package/dist/db/migrations/v36.js +2 -11
  306. package/dist/db/migrations/v37.js +8 -33
  307. package/dist/db/migrations/v38.js +5 -38
  308. package/dist/db/migrations/v39.js +9 -20
  309. package/dist/db/migrations/v40.js +2 -9
  310. package/dist/db/migrations/v41.js +2 -24
  311. package/dist/db/migrations/v43.js +1 -1
  312. package/dist/db/migrations/v44.js +2 -8
  313. package/dist/db/migrations/v45.js +2 -7
  314. package/dist/db/migrations/v47.js +2 -3
  315. package/dist/db/migrations/v51.js +1 -1
  316. package/dist/db/open.d.ts +2 -0
  317. package/dist/db/open.js +17 -1
  318. package/dist/db/physics-state.d.ts +6 -22
  319. package/dist/db/physics-state.js +25 -36
  320. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  321. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  322. package/dist/db/vector-store.d.ts +2 -0
  323. package/dist/db/vector-store.js +8 -1
  324. package/dist/doctor.js +74 -19
  325. package/dist/entry/session-text.js +2 -1
  326. package/dist/eval/eval-stats.d.ts +15 -53
  327. package/dist/eval/eval-stats.js +12 -42
  328. package/dist/eval/eval-suite.d.ts +2 -13
  329. package/dist/eval/eval-suite.js +74 -34
  330. package/dist/eval/eval.d.ts +6 -24
  331. package/dist/eval/eval.js +7 -34
  332. package/dist/eval/judgment.d.ts +0 -3
  333. package/dist/eval/judgment.js +19 -11
  334. package/dist/extensions/openclaw-plugin/index.js +1 -1
  335. package/dist/graph/extract.d.ts +5 -27
  336. package/dist/graph/extract.js +7 -33
  337. package/dist/graph/recall.d.ts +7 -20
  338. package/dist/graph/recall.js +14 -76
  339. package/dist/graph/stream.d.ts +7 -39
  340. package/dist/graph/stream.js +11 -34
  341. package/dist/graph/view.d.ts +9 -35
  342. package/dist/graph/view.js +11 -39
  343. package/dist/hooks/codex-wrapper.js +2 -2
  344. package/dist/hooks/copilot.js +2 -1
  345. package/dist/hooks/hook-blocks.d.ts +6 -2
  346. package/dist/hooks/hook-blocks.js +37 -124
  347. package/dist/hooks/json-hooks.d.ts +4 -36
  348. package/dist/hooks/json-hooks.js +18 -57
  349. package/dist/hooks/opencode.d.ts +0 -38
  350. package/dist/hooks/opencode.js +9 -76
  351. package/dist/hooks/shared.d.ts +8 -17
  352. package/dist/hooks/shared.js +29 -20
  353. package/dist/importers/core.d.ts +12 -37
  354. package/dist/importers/core.js +9 -27
  355. package/dist/importers/markdown-parse.d.ts +8 -22
  356. package/dist/importers/markdown-parse.js +8 -25
  357. package/dist/importers/markdown.js +3 -12
  358. package/dist/importers/sources.js +7 -35
  359. package/dist/importers/vault.d.ts +2 -8
  360. package/dist/importers/vault.js +25 -81
  361. package/dist/index.d.ts +6 -2
  362. package/dist/index.js +6 -2
  363. package/dist/learn/autolearn.d.ts +14 -41
  364. package/dist/learn/autolearn.js +14 -41
  365. package/dist/learn/extract.js +2 -4
  366. package/dist/learn/forward-claim-detector.d.ts +6 -30
  367. package/dist/learn/forward-claim-detector.js +14 -66
  368. package/dist/learn/invalidation.d.ts +6 -18
  369. package/dist/learn/invalidation.js +9 -26
  370. package/dist/mcp/admin-tools.js +3 -5
  371. package/dist/mcp/memory-tools.js +4 -9
  372. package/dist/mcp/protocol.d.ts +8 -26
  373. package/dist/mcp/protocol.js +3 -6
  374. package/dist/mcp/recall-tools.js +3 -3
  375. package/dist/mcp/request.d.ts +3 -11
  376. package/dist/mcp/request.js +10 -26
  377. package/dist/mcp/server.d.ts +3 -9
  378. package/dist/mcp/server.js +5 -16
  379. package/dist/mcp/session-state.d.ts +1 -1
  380. package/dist/mcp/session-state.js +5 -11
  381. package/dist/mcp/stdio.d.ts +2 -6
  382. package/dist/mcp/stdio.js +48 -12
  383. package/dist/mcp/tools.js +5 -3
  384. package/dist/objects/customer-notes.d.ts +7 -42
  385. package/dist/objects/customer-notes.js +7 -48
  386. package/dist/objects/decisions.d.ts +12 -50
  387. package/dist/objects/decisions.js +15 -53
  388. package/dist/objects/incidents.d.ts +7 -38
  389. package/dist/objects/incidents.js +7 -41
  390. package/dist/objects/policies.d.ts +11 -89
  391. package/dist/objects/policies.js +11 -98
  392. package/dist/objects/processes.d.ts +7 -52
  393. package/dist/objects/processes.js +7 -61
  394. package/dist/objects/project-briefs.d.ts +11 -55
  395. package/dist/objects/project-briefs.js +14 -75
  396. package/dist/objects/skills.d.ts +7 -42
  397. package/dist/objects/skills.js +8 -54
  398. package/dist/postinstall.js +6 -19
  399. package/dist/predictions/planning-fallacy.d.ts +11 -34
  400. package/dist/rerankers/clef.js +3 -31
  401. package/dist/rerankers/cross-encoder.js +4 -6
  402. package/dist/rerankers/jev.js +9 -6
  403. package/dist/rerankers/llm.d.ts +2 -11
  404. package/dist/rerankers/llm.js +14 -14
  405. package/dist/rerankers/outage-warning.d.ts +2 -1
  406. package/dist/rerankers/outage-warning.js +2 -1
  407. package/dist/rerankers/remote.d.ts +1 -0
  408. package/dist/rerankers/remote.js +2 -0
  409. package/dist/rerankers/types.d.ts +2 -14
  410. package/dist/search/boosts.d.ts +0 -2
  411. package/dist/search/boosts.js +2 -2
  412. package/dist/search/goal-boost.d.ts +23 -0
  413. package/dist/search/goal-boost.js +90 -0
  414. package/dist/search/hybrid.d.ts +2 -0
  415. package/dist/search/multihop.js +2 -3
  416. package/dist/search/path-context.d.ts +5 -18
  417. package/dist/search/path-context.js +5 -18
  418. package/dist/search/physics-search.js +11 -8
  419. package/dist/search/rrf.d.ts +7 -35
  420. package/dist/search/rrf.js +5 -30
  421. package/dist/search/vector.d.ts +7 -0
  422. package/dist/search/vector.js +35 -5
  423. package/dist/server/auth.d.ts +9 -28
  424. package/dist/server/auth.js +32 -25
  425. package/dist/server/boot.d.ts +2 -21
  426. package/dist/server/boot.js +63 -96
  427. package/dist/server/client-ip.d.ts +3 -19
  428. package/dist/server/client-ip.js +5 -28
  429. package/dist/server/defaults.d.ts +3 -0
  430. package/dist/server/defaults.js +4 -0
  431. package/dist/server/key-check-bounds.d.ts +2 -1
  432. package/dist/server/lifecycle.d.ts +5 -4
  433. package/dist/server/lifecycle.js +19 -4
  434. package/dist/server/mcp-http.js +10 -44
  435. package/dist/server/rate-limit.d.ts +5 -18
  436. package/dist/server/rate-limit.js +4 -13
  437. package/dist/server/request.d.ts +4 -8
  438. package/dist/server/request.js +9 -17
  439. package/dist/server/route-table.js +42 -49
  440. package/dist/server/routes/admin.js +22 -28
  441. package/dist/server/routes/customer-notes.js +7 -12
  442. package/dist/server/routes/decisions.js +10 -17
  443. package/dist/server/routes/incidents.js +12 -20
  444. package/dist/server/routes/memories.js +12 -32
  445. package/dist/server/routes/object-routes.d.ts +0 -5
  446. package/dist/server/routes/object-routes.js +7 -15
  447. package/dist/server/routes/policies.js +10 -18
  448. package/dist/server/routes/predictions.js +13 -25
  449. package/dist/server/routes/processes.js +16 -26
  450. package/dist/server/routes/project-briefs.js +9 -16
  451. package/dist/server/routes/recall.js +10 -35
  452. package/dist/server/routes/skills.js +8 -18
  453. package/dist/server/server-detect.d.ts +9 -53
  454. package/dist/server/server-detect.js +24 -90
  455. package/dist/server/sleep-offload.js +4 -1
  456. package/dist/server/types.d.ts +12 -10
  457. package/dist/server/validation.d.ts +3 -1
  458. package/dist/server/validation.js +10 -23
  459. package/dist/server.d.ts +2 -2
  460. package/dist/server.js +3 -2
  461. package/dist/sharing/global-store.d.ts +19 -0
  462. package/dist/sharing/global-store.js +75 -0
  463. package/dist/sharing/global-sync.d.ts +6 -0
  464. package/dist/sharing/global-sync.js +80 -0
  465. package/dist/sharing/project-merge.d.ts +4 -5
  466. package/dist/sharing/project-merge.js +9 -7
  467. package/dist/sharing/scope.d.ts +4 -11
  468. package/dist/sharing/scope.js +4 -11
  469. package/dist/sharing/search-both.d.ts +60 -0
  470. package/dist/sharing/search-both.js +138 -0
  471. package/dist/sharing/share.d.ts +38 -0
  472. package/dist/sharing/share.js +226 -0
  473. package/dist/store/ambient.js +4 -9
  474. package/dist/store/audit-event.d.ts +4 -12
  475. package/dist/store/audit-event.js +4 -12
  476. package/dist/store/audit.d.ts +2 -5
  477. package/dist/store/audit.js +4 -12
  478. package/dist/store/auth.d.ts +6 -6
  479. package/dist/store/auth.js +10 -9
  480. package/dist/store/candidates.d.ts +20 -3
  481. package/dist/store/candidates.js +77 -48
  482. package/dist/store/card-detail.d.ts +2 -1
  483. package/dist/store/card-detail.js +2 -1
  484. package/dist/store/cards.d.ts +14 -9
  485. package/dist/store/cards.js +72 -126
  486. package/dist/store/conflicts.d.ts +4 -21
  487. package/dist/store/conflicts.js +71 -150
  488. package/dist/store/connectors/github.d.ts +10 -10
  489. package/dist/store/connectors/github.js +10 -10
  490. package/dist/store/dashboard-reads.js +4 -8
  491. package/dist/store/delete-and-batch.d.ts +11 -31
  492. package/dist/store/delete-and-batch.js +48 -64
  493. package/dist/store/delivery-recorder.d.ts +8 -4
  494. package/dist/store/delivery-recorder.js +25 -15
  495. package/dist/store/diagnostics.js +6 -13
  496. package/dist/store/dormant.d.ts +7 -29
  497. package/dist/store/dormant.js +15 -56
  498. package/dist/store/embeddings/index.d.ts +11 -80
  499. package/dist/store/embeddings/index.js +71 -207
  500. package/dist/store/embeddings/local.js +15 -32
  501. package/dist/store/embeddings/provider.d.ts +16 -53
  502. package/dist/store/embeddings/provider.js +41 -69
  503. package/dist/store/entry-reads.d.ts +21 -57
  504. package/dist/store/entry-reads.js +65 -126
  505. package/dist/store/entry-row.d.ts +6 -35
  506. package/dist/store/entry-row.js +9 -37
  507. package/dist/store/entry-writes.d.ts +10 -16
  508. package/dist/store/entry-writes.js +17 -35
  509. package/dist/store/goals.d.ts +3 -40
  510. package/dist/store/goals.js +21 -160
  511. package/dist/store/graph-queue.d.ts +6 -22
  512. package/dist/store/graph-queue.js +14 -45
  513. package/dist/store/graph-reads.d.ts +11 -35
  514. package/dist/store/graph-reads.js +20 -58
  515. package/dist/store/graph-rows.d.ts +3 -6
  516. package/dist/store/graph-rows.js +6 -9
  517. package/dist/store/graph-view-rows.d.ts +2 -1
  518. package/dist/store/graph-view-rows.js +2 -1
  519. package/dist/store/graph-writes.d.ts +6 -31
  520. package/dist/store/graph-writes.js +13 -37
  521. package/dist/store/half-life.d.ts +2 -1
  522. package/dist/store/half-life.js +14 -16
  523. package/dist/store/handoffs.d.ts +5 -11
  524. package/dist/store/handoffs.js +16 -34
  525. package/dist/store/index-and-stats.d.ts +6 -19
  526. package/dist/store/index-and-stats.js +34 -82
  527. package/dist/store/markdown.d.ts +2 -6
  528. package/dist/store/markdown.js +21 -20
  529. package/dist/store/mirrors.d.ts +2 -6
  530. package/dist/store/mirrors.js +14 -23
  531. package/dist/store/open.js +6 -13
  532. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  533. package/dist/store/planning-fallacy-evidence.js +8 -37
  534. package/dist/store/port.d.ts +82 -79
  535. package/dist/store/predictions.d.ts +11 -51
  536. package/dist/store/predictions.js +38 -119
  537. package/dist/{cli → store}/quality-repair.js +15 -31
  538. package/dist/store/raw-archive.d.ts +4 -16
  539. package/dist/store/raw-archive.js +14 -29
  540. package/dist/store/recall-scope.d.ts +19 -79
  541. package/dist/store/recall-scope.js +21 -82
  542. package/dist/store/recall-trace.d.ts +10 -77
  543. package/dist/store/recall-trace.js +19 -95
  544. package/dist/store/rejected-values.js +7 -19
  545. package/dist/store/rejection.d.ts +12 -58
  546. package/dist/store/rejection.js +13 -65
  547. package/dist/store/report-reads.d.ts +6 -0
  548. package/dist/store/report-reads.js +29 -0
  549. package/dist/store/rows.d.ts +9 -19
  550. package/dist/store/rows.js +36 -34
  551. package/dist/store/rule-sql.d.ts +5 -0
  552. package/dist/store/rule-sql.js +37 -0
  553. package/dist/store/search-rows.d.ts +7 -38
  554. package/dist/store/search-rows.js +14 -50
  555. package/dist/store/sessions.d.ts +10 -47
  556. package/dist/store/sessions.js +17 -73
  557. package/dist/store/sqlite/connector-events-group.js +2 -2
  558. package/dist/store/sqlite/entry-writes-group.js +2 -2
  559. package/dist/store/sqlite/error-codec.js +4 -2
  560. package/dist/store/sqlite/executor.d.ts +2 -1
  561. package/dist/store/sqlite/executor.js +2 -1
  562. package/dist/store/sqlite/local.d.ts +3 -3
  563. package/dist/store/sqlite/local.js +1 -0
  564. package/dist/store/sqlite/object-rows.js +6 -3
  565. package/dist/store/sqlite/objects-group.js +4 -2
  566. package/dist/store/sqlite/quarantine-group.js +2 -2
  567. package/dist/store/sqlite/store.d.ts +1 -4
  568. package/dist/store/sqlite/store.js +2 -3
  569. package/dist/store/sqlite/vector-reads-group.js +2 -2
  570. package/dist/store/sqlite/worker-jobs.js +1 -1
  571. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  572. package/dist/store/sqlite/worker-ops.js +13 -2
  573. package/dist/store/sqlite/worker-store.js +5 -2
  574. package/dist/store/summaries.d.ts +10 -62
  575. package/dist/store/summaries.js +34 -146
  576. package/dist/store/summary-dirty.js +1 -1
  577. package/dist/store/tenant-lookup.d.ts +6 -1
  578. package/dist/store/tenant-lookup.js +7 -0
  579. package/dist/store/tenant.d.ts +2 -16
  580. package/dist/store/tenant.js +4 -19
  581. package/dist/store/token-ledger.d.ts +13 -43
  582. package/dist/store/token-ledger.js +19 -50
  583. package/dist/store/usage-reports.js +5 -13
  584. package/dist/store/vector-index.d.ts +46 -0
  585. package/dist/store/vector-index.js +170 -0
  586. package/dist/store/working-memory.d.ts +6 -25
  587. package/dist/store/working-memory.js +18 -52
  588. package/dist/store/yaml.d.ts +1 -5
  589. package/dist/store/yaml.js +2 -6
  590. package/dist/support-bundle.js +7 -5
  591. package/dist/trust/reject-flow.js +1 -3
  592. package/dist/util/anthropic-messages.js +14 -2
  593. package/dist/util/atomic-write.d.ts +2 -1
  594. package/dist/util/atomic-write.js +35 -4
  595. package/dist/util/capped-json.d.ts +6 -0
  596. package/dist/util/capped-json.js +46 -0
  597. package/dist/util/crash-handlers.d.ts +8 -1
  598. package/dist/util/crash-handlers.js +52 -10
  599. package/dist/util/env.d.ts +13 -6
  600. package/dist/util/env.js +14 -7
  601. package/dist/util/home-path.d.ts +2 -1
  602. package/dist/util/home-path.js +4 -2
  603. package/dist/util/http-retry.d.ts +3 -1
  604. package/dist/util/http-retry.js +26 -5
  605. package/dist/util/log.d.ts +3 -2
  606. package/dist/util/log.js +25 -9
  607. package/dist/util/request-scope.d.ts +2 -1
  608. package/dist/util/request-scope.js +2 -1
  609. package/dist/util/secret-detect.d.ts +5 -30
  610. package/dist/util/secret-detect.js +13 -39
  611. package/dist/util/stored-json.d.ts +1 -1
  612. package/dist/util/stored-json.js +1 -1
  613. package/dist/util/token-text.d.ts +1 -4
  614. package/dist/util/token-text.js +1 -4
  615. package/dist/util/transcript-tail.d.ts +2 -0
  616. package/dist/util/transcript-tail.js +24 -23
  617. package/dist/util/version.d.ts +5 -20
  618. package/dist/util/version.js +5 -20
  619. package/extensions/openclaw-plugin/index.ts +1 -1
  620. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  621. package/extensions/openclaw-plugin/package.json +1 -1
  622. package/openclaw.plugin.json +1 -1
  623. package/package.json +1 -1
  624. package/dist/connectors/github/cli-impl.d.ts +0 -25
  625. package/dist/sharing/shared.d.ts +0 -187
  626. package/dist/sharing/shared.js +0 -563
  627. package/dist/store/vector-writes.d.ts +0 -13
  628. package/dist/store/vector-writes.js +0 -89
  629. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
@@ -1,5 +1,5 @@
1
- import { type CliFlags } from './flag-values.js';
2
- export declare function cmdHook(args: string[]): void;
3
- export declare function cmdSetup(flags: CliFlags): void;
4
- export declare function cmdDailyRunner(): void;
1
+ import { type CommandContext } from './flag-values.js';
2
+ export declare function handleHook({ args }: CommandContext): void;
3
+ export declare function handleSetup({ flags }: CommandContext): void;
4
+ export declare function handleDailyRunner(_ctx: CommandContext): void;
5
5
  //# sourceMappingURL=setup.d.ts.map
package/dist/cli/setup.js CHANGED
@@ -9,10 +9,10 @@ import { installOpencodePlugin, uninstallOpencodePlugin, resolveOpencodePluginPa
9
9
  import { COPILOT_CLI_MCP, VSCODE_MCP, copilotMcpSnippet, copilotPaths, installCopilot, isCopilotCliPresent, isMcpFailure, uninstallCopilot, } from '../hooks/copilot.js';
10
10
  import { isInitialized } from '../store/open.js';
11
11
  import { currentMachine, importUserMemories } from '../agent-memories/sync.js';
12
- import { getGlobalRoot } from '../sharing/shared.js';
12
+ import { getGlobalRoot } from '../sharing/global-store.js';
13
13
  import { listRegisteredWorkspaces, runDailyMaintenance } from './scheduler.js';
14
14
  import { replayCompactionsAt } from '../capture/compaction-record.js';
15
- import { errorMessage, log } from '../util/log.js';
15
+ import { errorFields, errorMessage, log } from '../util/log.js';
16
16
  import { envDailyStepTimeoutMs } from '../util/env.js';
17
17
  import { writeFileAtomic } from '../util/atomic-write.js';
18
18
  import { printError } from './output.js';
@@ -22,10 +22,9 @@ import { installCodexMemoryHooks, setupDailySchedule, warnClaudeSettingsUnusable
22
22
  import { repairQualityOnceAt } from './quality-repair-once.js';
23
23
  import { HOOK_MARKERS, HOOKS, hippoBlock, withoutHookBlock } from '../hooks/hook-blocks.js';
24
24
  import { escapeRegex } from '../util/escape.js';
25
- // ---------------------------------------------------------------------------
25
+ import { CliExit } from './exit.js';
26
26
  // Hook install/uninstall
27
- // ---------------------------------------------------------------------------
28
- export function cmdHook(args) {
27
+ export function handleHook({ args }) {
29
28
  const subcommand = args[0];
30
29
  const target = args[1];
31
30
  if (subcommand === 'list')
@@ -35,7 +34,7 @@ export function cmdHook(args) {
35
34
  if (subcommand === 'uninstall')
36
35
  return hookUninstall(target);
37
36
  printError('Usage: hippo hook <install|uninstall|list> [target]');
38
- process.exit(1);
37
+ throw new CliExit(1);
39
38
  }
40
39
  // Cursor has no init row, so the AGENTS.md block is usually another agent's, and Cursor reads that one as it is.
41
40
  function othersBlock(target, text) {
@@ -57,7 +56,7 @@ function hookInstall(target) {
57
56
  if (!target || !HOOKS[target]) {
58
57
  printError(`Unknown hook target: ${target ?? '(none)'}`);
59
58
  printError(` Available: ${[...Object.keys(HOOKS), 'copilot'].join(', ')}`);
60
- process.exit(1);
59
+ throw new CliExit(1);
61
60
  }
62
61
  const hook = HOOKS[target];
63
62
  patchAgentFile(hook, target);
@@ -103,9 +102,8 @@ function patchAgentFile(hook, target) {
103
102
  }
104
103
  }
105
104
  else {
106
- // Do not create a new agent-instructions file (CLAUDE.md, AGENTS.md, etc.) in directories that don't already have one —
107
- // avoids polluting cwd with files the user didn't ask for. The settings.json hook below is still installed for
108
- // claude-code, so the consolidation hook still runs.
105
+ // Do not create an agent-instructions file (CLAUDE.md, AGENTS.md, etc.) in directories without one, to avoid polluting cwd;
106
+ // the settings.json hook below is still installed for claude-code.
109
107
  console.log(`${hook.file} not found in ${process.cwd()} — skipping agent-instructions patch.`);
110
108
  console.log(` Create ${hook.file} and re-run \`hippo hook install ${target}\` if you want the agent prompt.`);
111
109
  }
@@ -144,7 +142,7 @@ function printClaudeHookInstall(result) {
144
142
  }
145
143
  }
146
144
  function installOpencodeHook() {
147
- // opencode uses a TS plugin, not JSON hooks. See src/hooks.ts.
145
+ // opencode uses a TS plugin, not JSON hooks. See src/hooks/opencode.ts.
148
146
  const result = installOpencodePlugin();
149
147
  if (result.installed) {
150
148
  console.log(`Installed hippo opencode plugin at ${result.pluginPath}`);
@@ -254,7 +252,7 @@ function hookUninstall(target) {
254
252
  return printCopilotUninstall(uninstallCopilot());
255
253
  if (!target || !HOOKS[target]) {
256
254
  printError(`Unknown hook target: ${target ?? '(none)'}`);
257
- process.exit(1);
255
+ throw new CliExit(1);
258
256
  }
259
257
  unpatchAgentFile(HOOKS[target], target);
260
258
  // For Claude Code, also strip its SessionEnd/SessionStart entries.
@@ -267,9 +265,7 @@ function hookUninstall(target) {
267
265
  }
268
266
  }
269
267
  else if (target === 'opencode') {
270
- // opencode uses a TS plugin; uninstall removes the plugin file AND
271
- // also runs the legacy-hooks migration so the downgrade/remove path
272
- // leaves opencode launchable.
268
+ // opencode uses a TS plugin; uninstall removes the plugin file and also runs the legacy-hooks migration, so remove leaves opencode launchable.
273
269
  if (uninstallOpencodePlugin()) {
274
270
  console.log(`Removed hippo opencode plugin (and any legacy hooks block from opencode.json)`);
275
271
  }
@@ -351,8 +347,8 @@ function setupDetectedTools(tools, forceAll, dryRun) {
351
347
  }
352
348
  }
353
349
  // `hippo setup` -- one-shot configuration for every AI coding tool on the box.
354
- // Detection and install logic live in ./hooks.ts.
355
- export function cmdSetup(flags) {
350
+ // Detection and install logic live in src/hooks/.
351
+ export function handleSetup({ flags }) {
356
352
  const dryRun = boolFlag(flags, 'dry-run');
357
353
  const forceAll = boolFlag(flags, 'all');
358
354
  const tools = detectInstalledTools();
@@ -389,14 +385,16 @@ function setupCopilot(dryRun) {
389
385
  function setupJsonTool(tool, dryRun) {
390
386
  if (tool.name === 'copilot')
391
387
  return setupCopilot(dryRun);
388
+ // SAFETY: detectInstalledTools gives kind 'json-hook' only to claude-code and copilot (hooks/shared.ts), and copilot returned above.
389
+ const target = tool.name;
392
390
  if (dryRun) {
393
391
  // Resolve the real settings path so the filename is right for each tool
394
392
  // (claude-code -> settings.json, opencode -> opencode.json).
395
- const { settings } = resolveJsonHookPaths(tool.name);
393
+ const { settings } = resolveJsonHookPaths(target);
396
394
  console.log(`[dry-run] would install hooks in ${settings}`);
397
395
  return;
398
396
  }
399
- const result = installJsonHooks(tool.name);
397
+ const result = installJsonHooks(target);
400
398
  if (warnClaudeSettingsUnusable(result, ` ${tool.name.padEnd(14)} `))
401
399
  return;
402
400
  const bits = [];
@@ -482,7 +480,7 @@ function dailyStepFailure(err, timeoutMs) {
482
480
  return `timed out after ${timeoutMs} ms and was stopped`;
483
481
  return errorMessage(err);
484
482
  }
485
- export function cmdDailyRunner() {
483
+ export function handleDailyRunner(_ctx) {
486
484
  const globalRoot = getGlobalRoot();
487
485
  // No workspace sleep ever opens the global store, yet hooks in folders without a store compact into it.
488
486
  if (isInitialized(globalRoot)) {
@@ -515,7 +513,7 @@ export function cmdDailyRunner() {
515
513
  catch (err) {
516
514
  failed++;
517
515
  const action = args.join(' ');
518
- log.error(`daily-runner failed in ${cwd} during \`${action}\`: ${dailyStepFailure(err, timeout)}`, { workspace: cwd });
516
+ log.error(`daily-runner failed in ${cwd} during \`${action}\`: ${dailyStepFailure(err, timeout)}`, { workspace: cwd, ...errorFields(err) });
519
517
  }
520
518
  });
521
519
  console.log(`Daily maintenance complete: ${processed} workspace${processed === 1 ? '' : 's'} processed, ${failed} command failure${failed === 1 ? '' : 's'}.`);
@@ -1,41 +1,27 @@
1
1
  import { type ChurnStaleResult } from '../learn/invalidation.js';
2
2
  import { type AuditOp } from '../store/audit.js';
3
3
  import { type ServerInfo } from '../server/server-detect.js';
4
+ import type { JsonObject } from '../store/working-memory.js';
4
5
  import type { CliFlags } from './flag-values.js';
5
- /**
6
- * Emit an audit event against `hippoRoot`'s db. Opens its own short-lived
7
- * connection so callers don't have to thread a db handle. Swallows all errors
8
- * — audit must never crash a CLI command.
9
- */
10
- export declare function emitCliAudit(hippoRoot: string, op: AuditOp, targetId?: string, metadata?: Record<string, unknown>): void;
6
+ /** Emit an audit event on its own short-lived connection to `hippoRoot`'s db; swallows all errors, since audit must never crash a CLI command. */
7
+ export declare function emitCliAudit(hippoRoot: string, op: AuditOp, targetId?: string, metadata?: JsonObject): void;
11
8
  export declare function requireInit(hippoRoot: string): void;
12
9
  /** Runs detectChurnStale against every store this repo's memories can live in. */
13
10
  export declare function runChurnStaleForRepo(hippoRoot: string, dryRun: boolean): {
14
11
  root: string;
15
12
  result: ChurnStaleResult;
16
13
  }[];
17
- /**
18
- * Run an HTTP-routed command if a `hippo serve` instance is detected for
19
- * `hippoRoot`. Returns:
20
- * - true if the HTTP path ran (success OR a structured server error that
21
- * was already surfaced to stdout/stderr by `httpFn`),
22
- * - false if no server was detected, or if the detected pidfile turned out
23
- * to be stale (connection refused). On stale, the pidfile is removed
24
- * if it still names that dead server (a newer one may have replaced
25
- * it) and the caller should fall back to the direct path.
26
- *
27
- * Stale pidfiles must self-heal, not crash.
28
- * When HIPPO_REQUIRE_SERVER is set, both fallback paths throw instead of
29
- * returning false, so a missing server fails loudly rather than silently
30
- * degrading to direct mode.
31
- */
14
+ /** Run an HTTP-routed command if a `hippo serve` is detected: true if it ran, false on no server or a stale pidfile (removed if it names the dead server).
15
+ * With HIPPO_REQUIRE_SERVER set both fallbacks throw; a stale pidfile must self-heal, not crash. */
32
16
  export declare function runViaServerIfAvailable(hippoRoot: string, httpFn: (info: ServerInfo, apiKey: string | undefined) => Promise<void>): Promise<boolean>;
33
17
  /** True, after one line, on a shared store: this account's commits and agent notes are not its members' memories. */
34
18
  export declare function skipLearnOnSharedStore(hippoRoot: string): boolean;
35
- export declare function learnFromRepo(hippoRoot: string, repoPath: string, days: number, label?: string): {
19
+ interface LearnFromRepoResult {
36
20
  added: number;
37
21
  skipped: number;
38
22
  lowInfo: number;
39
- };
23
+ }
24
+ export declare function learnFromRepo(hippoRoot: string, repoPath: string, days: number, label?: string): LearnFromRepoResult;
40
25
  export declare function resolveAuthRoot(hippoRoot: string, flags: CliFlags): string;
26
+ export {};
41
27
  //# sourceMappingURL=shared.d.ts.map
@@ -6,7 +6,7 @@ import { isSharedStore } from '../core/config.js';
6
6
  import { isInitialized } from '../store/open.js';
7
7
  import { detectChurnStale } from '../learn/invalidation.js';
8
8
  import { resolveProjectIdentity } from '../core/project-identity.js';
9
- import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
9
+ import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
10
10
  import { reportAuditWriteFailure } from '../store/audit.js';
11
11
  import { sqliteSyncStore } from '../store/sqlite/store.js';
12
12
  import * as client from './client.js';
@@ -15,11 +15,7 @@ import { resolveTenantId } from '../store/tenant.js';
15
15
  import { adminActor, learn, CLI_LEARN } from '../api/index.js';
16
16
  import { errorMessage, log } from '../util/log.js';
17
17
  import { printError } from './output.js';
18
- /**
19
- * Emit an audit event against `hippoRoot`'s db. Opens its own short-lived
20
- * connection so callers don't have to thread a db handle. Swallows all errors
21
- * — audit must never crash a CLI command.
22
- */
18
+ /** Emit an audit event on its own short-lived connection to `hippoRoot`'s db; swallows all errors, since audit must never crash a CLI command. */
23
19
  export function emitCliAudit(hippoRoot, op, targetId, metadata) {
24
20
  try {
25
21
  sqliteSyncStore(hippoRoot).appendAuditEvents([{
@@ -59,34 +55,16 @@ export function runChurnStaleForRepo(hippoRoot, dryRun) {
59
55
  }
60
56
  });
61
57
  }
62
- /**
63
- * When HIPPO_REQUIRE_SERVER is set, the CLI must not silently fall back to
64
- * direct DB mode — a missing server then masks a real misconfiguration (the
65
- * configured HIPPO_API_KEY is also silently discarded on fallback). Throws a
66
- * clear error then. It guards only the routed writes (remember, forget, archive,
67
- * promote); every other command opens the store directly, knob or not.
68
- */
58
+ /** With HIPPO_REQUIRE_SERVER set, throw rather than fall back to direct DB mode, which would mask a misconfiguration and discard HIPPO_API_KEY.
59
+ * Guards only the routed writes (remember, forget, archive, promote). */
69
60
  function failIfServerRequired(reason) {
70
61
  if (envRequireServer()) {
71
62
  throw new Error(`hippo: HIPPO_REQUIRE_SERVER is set but ${reason}. ` +
72
63
  `Start \`hippo serve\`, or unset HIPPO_REQUIRE_SERVER to allow direct-mode fallback.`);
73
64
  }
74
65
  }
75
- /**
76
- * Run an HTTP-routed command if a `hippo serve` instance is detected for
77
- * `hippoRoot`. Returns:
78
- * - true if the HTTP path ran (success OR a structured server error that
79
- * was already surfaced to stdout/stderr by `httpFn`),
80
- * - false if no server was detected, or if the detected pidfile turned out
81
- * to be stale (connection refused). On stale, the pidfile is removed
82
- * if it still names that dead server (a newer one may have replaced
83
- * it) and the caller should fall back to the direct path.
84
- *
85
- * Stale pidfiles must self-heal, not crash.
86
- * When HIPPO_REQUIRE_SERVER is set, both fallback paths throw instead of
87
- * returning false, so a missing server fails loudly rather than silently
88
- * degrading to direct mode.
89
- */
66
+ /** Run an HTTP-routed command if a `hippo serve` is detected: true if it ran, false on no server or a stale pidfile (removed if it names the dead server).
67
+ * With HIPPO_REQUIRE_SERVER set both fallbacks throw; a stale pidfile must self-heal, not crash. */
90
68
  export async function runViaServerIfAvailable(hippoRoot, httpFn) {
91
69
  const info = await detectServer(hippoRoot);
92
70
  if (!info) {
@@ -99,7 +77,7 @@ export async function runViaServerIfAvailable(hippoRoot, httpFn) {
99
77
  return true;
100
78
  }
101
79
  catch (err) {
102
- const failure = client.classifyTransportFailure(err);
80
+ const failure = err instanceof Error ? client.classifyTransportFailure(err) : 'none';
103
81
  if (failure === 'never-sent') {
104
82
  failIfServerRequired('the server pidfile was stale (connection refused)');
105
83
  log.warn('stale server pidfile detected, falling back to direct mode');
@@ -109,9 +87,8 @@ export async function runViaServerIfAvailable(hippoRoot, httpFn) {
109
87
  return false;
110
88
  }
111
89
  if (failure === 'delivery-unknown') {
112
- // Every caller of this helper is a non-idempotent write, so replaying on
113
- // the direct path would store a row the server may already have committed.
114
- // Leave the pidfile alone: the next command's connect-phase failure heals it.
90
+ // Every caller is a non-idempotent write, so replaying on the direct path would store a row the server may already have committed;
91
+ // leave the pidfile alone: the next command's connect-phase failure heals it.
115
92
  printError(`hippo: the connection to ${info.url} dropped or timed out mid-request, so the write may already have been applied. Not retrying locally. Check with \`hippo recall\` before running this again.`);
116
93
  process.exit(1);
117
94
  }
@@ -1,3 +1,3 @@
1
- import { type CliFlags } from './flag-values.js';
2
- export declare function cmdSlack(hippoRoot: string, args: string[], flags: CliFlags): Promise<void>;
1
+ import { type CommandContext } from './flag-values.js';
2
+ export declare function handleSlack({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
3
3
  //# sourceMappingURL=slack.d.ts.map
package/dist/cli/slack.js CHANGED
@@ -1,7 +1,6 @@
1
1
  // `hippo slack`: backfill, dead-letter queue and workspace registry for the Slack connector.
2
2
  import { envSlackBotToken, envSlackSigningSecret, envSlackTeamId } from '../util/env.js';
3
3
  import * as api from '../api/index.js';
4
- import { resolveTenantId } from '../store/tenant.js';
5
4
  import { listDlq } from '../connectors/dlq.js';
6
5
  import { replayDlqEntry, slackDlq } from '../connectors/slack/dlq.js';
7
6
  import { backfillChannel } from '../connectors/slack/backfill.js';
@@ -10,30 +9,27 @@ import { addWorkspace as addSlackWorkspace, listWorkspaces as listSlackWorkspace
10
9
  import { printError } from './output.js';
11
10
  import { printSlackBackfillUsage, printSlackWorkspacesUsage } from './usage.js';
12
11
  import { stringFlag } from './flag-values.js';
13
- // ---------------------------------------------------------------------------
12
+ import { CliExit } from './exit.js';
14
13
  // Slack subcommands (`hippo slack backfill` / `hippo slack dlq list`)
15
- // ---------------------------------------------------------------------------
16
- function cmdSlackBackfill(hippoRoot, flags) {
14
+ function cmdSlackBackfill(hippoRoot, tenantId, flags) {
17
15
  const channel = stringFlag(flags, 'channel');
18
16
  if (!channel) {
19
17
  printSlackBackfillUsage();
20
- process.exit(1);
18
+ throw new CliExit(1);
21
19
  }
22
20
  // Real fetcher requires SLACK_BOT_TOKEN with channels:history scope.
23
21
  const token = envSlackBotToken();
24
22
  if (!token) {
25
23
  printError('SLACK_BOT_TOKEN is not set. Backfill requires a Slack bot token with channels:history scope.');
26
- process.exit(2);
24
+ throw new CliExit(2);
27
25
  }
28
- // --since is advisory in V1: the slack_cursors row drives resume, so the
29
- // backfill loop always picks up where it last left off. Honoured-by-cursor
30
- // semantics keep idempotency clean.
26
+ // --since is advisory in V1: the slack_cursors row drives resume, so the backfill loop always continues where it left off (keeps idempotency clean).
31
27
  const sinceIso = stringFlag(flags, 'since');
32
28
  void sinceIso;
33
29
  const fetcher = slackHistoryFetcher(token);
34
30
  const ctx = {
35
31
  hippoRoot,
36
- tenantId: resolveTenantId({}),
32
+ tenantId,
37
33
  actor: api.adminActor('cli:slack-backfill'),
38
34
  };
39
35
  backfillChannel(ctx, {
@@ -49,8 +45,8 @@ function cmdSlackBackfill(hippoRoot, flags) {
49
45
  process.exit(3);
50
46
  });
51
47
  }
52
- function cmdSlackDlqList(hippoRoot, _flags) {
53
- const items = listDlq(slackDlq, hippoRoot, { tenantId: resolveTenantId({}) });
48
+ function cmdSlackDlqList(hippoRoot, tenantId, _flags) {
49
+ const items = listDlq(slackDlq, hippoRoot, { tenantId });
54
50
  for (const it of items) {
55
51
  console.log(`${it.id}\t${it.receivedAt}\t${it.error}`);
56
52
  }
@@ -59,12 +55,12 @@ async function cmdSlackDlqReplay(hippoRoot, args, flags) {
59
55
  const idArg = args[2];
60
56
  if (!idArg) {
61
57
  printError('Usage: hippo slack dlq replay <id> [--force]');
62
- process.exit(1);
58
+ throw new CliExit(1);
63
59
  }
64
60
  const id = Number(idArg);
65
61
  if (!Number.isFinite(id) || !Number.isInteger(id) || id < 1) {
66
62
  printError(`replay: invalid id ${idArg}`);
67
- process.exit(1);
63
+ throw new CliExit(1);
68
64
  }
69
65
  const force = flags.force === true;
70
66
  const result = await replayDlqEntry({ hippoRoot }, id, {
@@ -73,7 +69,7 @@ async function cmdSlackDlqReplay(hippoRoot, args, flags) {
73
69
  });
74
70
  if (!result.ok) {
75
71
  printError(`replay failed: status=${result.status} retry_count=${result.retryCount}${result.reason ? ` reason=${result.reason}` : ''}`);
76
- process.exit(1);
72
+ throw new CliExit(1);
77
73
  }
78
74
  console.log(`replay ok: status=${result.status} memory_id=${result.memoryId ?? '(none)'} retry_count=${result.retryCount}`);
79
75
  }
@@ -82,7 +78,7 @@ function cmdSlackWorkspacesAdd(hippoRoot, flags) {
82
78
  const tenantId = (stringFlag(flags, 'tenant') ?? '').trim();
83
79
  if (!teamId || !tenantId) {
84
80
  printError('Usage: hippo slack workspaces add --team <T> --tenant <t>');
85
- process.exit(1);
81
+ throw new CliExit(1);
86
82
  }
87
83
  const ws = addSlackWorkspace(hippoRoot, { teamId, tenantId });
88
84
  console.log(`added: ${ws.teamId} -> ${ws.tenantId} (${ws.addedAt})`);
@@ -101,23 +97,23 @@ function cmdSlackWorkspacesRemove(hippoRoot, flags) {
101
97
  const teamId = (stringFlag(flags, 'team') ?? '').trim();
102
98
  if (!teamId) {
103
99
  printError('Usage: hippo slack workspaces remove --team <T>');
104
- process.exit(1);
100
+ throw new CliExit(1);
105
101
  }
106
102
  const removed = removeSlackWorkspace(hippoRoot, teamId);
107
103
  if (!removed) {
108
104
  printError(`no workspace registered for team ${teamId}`);
109
- process.exit(1);
105
+ throw new CliExit(1);
110
106
  }
111
107
  console.log(`removed: ${teamId}`);
112
108
  }
113
- export async function cmdSlack(hippoRoot, args, flags) {
109
+ export async function handleSlack({ hippoRoot, tenantId, args, flags }) {
114
110
  const sub = args[0];
115
111
  if (sub === 'backfill') {
116
- cmdSlackBackfill(hippoRoot, flags);
112
+ cmdSlackBackfill(hippoRoot, tenantId, flags);
117
113
  return;
118
114
  }
119
115
  if (sub === 'dlq' && args[1] === 'list') {
120
- cmdSlackDlqList(hippoRoot, flags);
116
+ cmdSlackDlqList(hippoRoot, tenantId, flags);
121
117
  return;
122
118
  }
123
119
  if (sub === 'dlq' && args[1] === 'replay') {
@@ -139,9 +135,9 @@ export async function cmdSlack(hippoRoot, args, flags) {
139
135
  return;
140
136
  }
141
137
  printSlackWorkspacesUsage();
142
- process.exit(1);
138
+ throw new CliExit(1);
143
139
  }
144
140
  printError('Usage: hippo slack <backfill|dlq list|dlq replay <id> [--force]|workspaces add|workspaces list|workspaces remove> [...]');
145
- process.exit(1);
141
+ throw new CliExit(1);
146
142
  }
147
143
  //# sourceMappingURL=slack.js.map
@@ -1,4 +1,5 @@
1
- import { type CliFlags } from './flag-values.js';
1
+ import { type CliFlags, type CommandContext } from './flag-values.js';
2
2
  /** Runs `hippo sleep`; with `--log-file` it also tees its output to that file. */
3
- export declare function cmdSleep(hippoRoot: string, flags: CliFlags): Promise<void>;
3
+ export declare function cmdSleep(hippoRoot: string, tenantId: string, flags: CliFlags): Promise<void>;
4
+ export declare function handleSleep({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
4
5
  //# sourceMappingURL=sleep.d.ts.map
package/dist/cli/sleep.js CHANGED
@@ -6,7 +6,7 @@ import { isGitRepo } from '../learn/autolearn.js';
6
6
  import { importForStore, currentMachine } from '../agent-memories/sync.js';
7
7
  import { replayCompactionsAt } from '../capture/compaction-record.js';
8
8
  import * as api from '../api/index.js';
9
- import { resolveTenantId } from '../store/tenant.js';
9
+ import { cliApiContext } from './api-context.js';
10
10
  import { sleepResultLines } from './sleep-render.js';
11
11
  import { errorMessage, log } from '../util/log.js';
12
12
  import { closeHippoDb, openHippoDb } from '../db/index.js';
@@ -17,10 +17,8 @@ import { printAgentImport } from './print.js';
17
17
  import { repairQualityOnceAt } from './quality-repair-once.js';
18
18
  import { printError } from './output.js';
19
19
  /** Runs `hippo sleep`; with `--log-file` it also tees its output to that file. */
20
- export async function cmdSleep(hippoRoot, flags) {
21
- // Tee stdout/stderr to a log file when --log-file is set. The SessionEnd
22
- // hook uses this so the output is captured somewhere the SessionStart hook
23
- // can re-display it next time the agent UI starts.
20
+ export async function cmdSleep(hippoRoot, tenantId, flags) {
21
+ // Tee stdout/stderr to a log file when --log-file is set; the SessionEnd hook uses it so the SessionStart hook can re-display the output.
24
22
  const logFile = stringFlag(flags, 'log-file') ?? null;
25
23
  let restoreStdout = null;
26
24
  if (logFile) {
@@ -31,17 +29,19 @@ export async function cmdSleep(hippoRoot, flags) {
31
29
  const origStderrWrite = process.stderr.write.bind(process.stderr);
32
30
  const tee = (chunk) => {
33
31
  try {
34
- const buf = typeof chunk === 'string' ? chunk : Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
32
+ const buf = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
35
33
  fs.appendFileSync(logFile, buf, 'utf8');
36
34
  }
37
35
  catch {
38
36
  // log failures are non-fatal — still write to the real stream
39
37
  }
40
38
  };
39
+ // SAFETY: the wrapper forwards chunk, enc and cb untouched to the original write, so it keeps write's contract.
41
40
  process.stdout.write = ((chunk, enc, cb) => {
42
41
  tee(chunk);
43
42
  return origStdoutWrite(chunk, enc, cb);
44
43
  });
44
+ // SAFETY: the wrapper forwards chunk, enc and cb untouched to the original write, so it keeps write's contract.
45
45
  process.stderr.write = ((chunk, enc, cb) => {
46
46
  tee(chunk);
47
47
  return origStderrWrite(chunk, enc, cb);
@@ -56,7 +56,7 @@ export async function cmdSleep(hippoRoot, flags) {
56
56
  }
57
57
  }
58
58
  try {
59
- await cmdSleepCore(hippoRoot, flags);
59
+ await cmdSleepCore(hippoRoot, tenantId, flags);
60
60
  if (logFile)
61
61
  console.log('[hippo] sleep complete');
62
62
  }
@@ -70,16 +70,19 @@ export async function cmdSleep(hippoRoot, flags) {
70
70
  restoreStdout();
71
71
  }
72
72
  }
73
+ export function handleSleep({ hippoRoot, tenantId, flags }) {
74
+ return cmdSleep(hippoRoot, tenantId, flags);
75
+ }
73
76
  function renderSleepResult(result) {
74
77
  for (const line of sleepResultLines(result))
75
78
  console.log(line);
76
79
  }
77
80
  /** Fault-isolated: a failed repair warns and runs again next sleep, and never stops the sleep. */
78
- function repairProjectTagsOnce(hippoRoot) {
81
+ function repairProjectTagsOnce(hippoRoot, tenantId) {
79
82
  let db;
80
83
  try {
81
84
  db = openHippoDb(hippoRoot);
82
- const r = repairOnceOnSleep(db, hippoRoot, resolveTenantId({}));
85
+ const r = repairOnceOnSleep(db, hippoRoot, tenantId);
83
86
  if (r === null)
84
87
  return;
85
88
  const parts = [
@@ -97,7 +100,7 @@ function repairProjectTagsOnce(hippoRoot) {
97
100
  closeHippoDb(db);
98
101
  }
99
102
  }
100
- async function cmdSleepCore(hippoRoot, flags) {
103
+ async function cmdSleepCore(hippoRoot, tenantId, flags) {
101
104
  requireInit(hippoRoot);
102
105
  // Phase 1: Auto-learn from git and every coding agent's own memories (CLI-only, uses process.cwd() / os.homedir()).
103
106
  // Stays in cli.ts; api.sleep covers Phase 2-6 only.
@@ -128,15 +131,11 @@ async function cmdSleepCore(hippoRoot, flags) {
128
131
  const finished = replayCompactionsAt(hippoRoot, (message) => log.warn(`compaction replay: ${message}`));
129
132
  if (finished > 0)
130
133
  console.log(`Finished saving ${finished} compaction${finished === 1 ? '' : 's'} left over from earlier sessions.`);
131
- repairProjectTagsOnce(hippoRoot);
134
+ repairProjectTagsOnce(hippoRoot, tenantId);
132
135
  repairQualityOnceAt(hippoRoot);
133
136
  }
134
137
  // Phase 2-6: Pure-storage pipeline (consolidate + dedup + audit + share + ambient).
135
- const ctx = {
136
- hippoRoot,
137
- tenantId: resolveTenantId({}),
138
- actor: api.adminActor('cli'),
139
- };
138
+ const ctx = cliApiContext(hippoRoot, tenantId);
140
139
  const result = await api.sleep(ctx, {
141
140
  dryRun: boolFlag(flags, 'dry-run'),
142
141
  noShare: boolFlag(flags, 'no-share'),
@@ -1,18 +1,15 @@
1
- import { type CliFlags, type CommandContext } from './flag-values.js';
2
- export declare function cmdStatus(hippoRoot: string): void;
3
- /**
4
- * `hippo tokens [--days <n>] [--json] [--global]`: the token ledger.
5
- * Tokens of memory text handed to agents per surface, blocks
6
- * the per-prompt hook skipped as unchanged and the tokens that saved,
7
- * and the hook blocks' tokens later model calls re-read, counted when each session ends.
8
- * Counts are estimates (characters / 4), the same estimate every budget uses.
9
- */
10
- export declare function cmdTokens(hippoRoot: string, flags: CliFlags): void;
1
+ import { type PhysicsParticle } from '../core/physics.js';
2
+ import { type CommandContext } from './flag-values.js';
3
+ export declare function handleStatus({ hippoRoot }: CommandContext): void;
4
+ export declare function physicsEnergyText(particles: PhysicsParticle[], gMemory: number): string;
5
+ /** `hippo tokens [--days <n>] [--json] [--global]`: the token ledger per surface, tokens saved by skipped unchanged blocks, and re-read hook tokens.
6
+ * Counts are estimates (characters / 4), the same estimate every budget uses. */
7
+ export declare function handleTokens({ hippoRoot, tenantId, flags }: CommandContext): void;
11
8
  /** `hippo failures [--days <n>] [--json] [--global]`: failed tool calls by outcome, and repeats across sessions. */
12
- export declare function cmdFailures(hippoRoot: string, flags: CliFlags): void;
9
+ export declare function handleFailures({ hippoRoot, tenantId, flags }: CommandContext): void;
13
10
  export declare function handleCorrectionLatency({ hippoRoot, flags }: CommandContext): void;
14
11
  export declare function handleProvenance({ hippoRoot, flags }: CommandContext): void;
15
12
  export declare function handleDoctor({ flags }: CommandContext): void;
16
13
  export declare function handleSupportBundle({ flags }: CommandContext): void;
17
- export declare function handleInspect({ hippoRoot, args }: CommandContext): void;
14
+ export declare function handleInspect({ hippoRoot, tenantId, args }: CommandContext): Promise<void>;
18
15
  //# sourceMappingURL=status.d.ts.map