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,43 +1,28 @@
1
- /**
2
- * Implementation of `hippo github` CLI subcommands. Extracted from the main
3
- * cli.ts so unit tests can import these functions directly without triggering
4
- * the cli.ts main() side effects. The cli.ts dispatcher re-exports the
5
- * top-level cmdGithub.
6
- *
7
- * Subcommands mirror the Slack connector shape (cli.ts §Slack subcommands):
8
- * - hippo github backfill --repo <owner/name> [--since ISO] [--max <N>]
9
- * - hippo github dlq list
10
- * - hippo github dlq replay <id> [--force]
11
- */
12
- import { envGithubToken, envGithubWebhookSecret, envGithubWebhookSecretPrevious } from '../../util/env.js';
13
- import { adminActor } from '../../api/index.js';
14
- import { seedCursors } from '../../store/connectors/github.js';
15
- import { resolveTenantId } from '../../store/tenant.js';
16
- import { backfillRepo } from './backfill.js';
17
- import { realGitHubFetcher } from './octokit-client.js';
18
- import { listDlq } from '../dlq.js';
19
- import { githubDlq, replayDlqEntry } from './dlq.js';
20
- import { ingestEvent } from './ingest.js';
21
- import { handleCommentDeleted } from './deletion.js';
22
- import { computeDeletionKey } from './signature.js';
23
- import { isGitHubIssueEvent, isGitHubIssueCommentEvent, isGitHubPullRequestEvent, isGitHubPullRequestReviewCommentEvent, } from './types.js';
1
+ /** `hippo github` subcommands, split out of cli.ts so tests can import them without triggering main().
2
+ * The dispatcher in cli.ts re-exports handleGitHub. */
3
+ import { envGitHubToken, envGitHubWebhookSecret, envGitHubWebhookSecretPrevious } from '../util/env.js';
4
+ import { adminActor } from '../api/index.js';
5
+ import { backfillRepo } from '../connectors/github/backfill.js';
6
+ import { realGitHubFetcher } from '../connectors/github/octokit-client.js';
7
+ import { listDlq } from '../connectors/dlq.js';
8
+ import { githubDlq, replayDlqEntry } from '../connectors/github/dlq.js';
9
+ import { ingestEvent } from '../connectors/github/ingest.js';
10
+ import { handleCommentDeleted } from '../connectors/github/deletion.js';
11
+ import { computeDeletionKey } from '../connectors/github/signature.js';
12
+ import { isGitHubIssueEvent, isGitHubIssueCommentEvent, isGitHubPullRequestEvent, isGitHubPullRequestReviewCommentEvent, } from '../connectors/github/types.js';
13
+ import { CliExit } from './exit.js';
14
+ import { errorMessage } from '../util/log.js';
24
15
  function isFlagString(value) {
25
16
  return typeof value === 'string';
26
17
  }
27
- // FlagValue never includes `number` (see its declaration above), so a
28
- // `value is number` predicate directly on FlagValue would not type-check —
29
- // the generic wrapper narrows a value of any type T instead.
18
+ // FlagValue never includes `number`, so a `value is number` predicate on it would not type-check; the generic wrapper narrows any type T instead.
30
19
  function isNumberLike(value) {
31
20
  return typeof value === 'number';
32
21
  }
33
22
  function isFlagValueNumberLike(value) {
34
23
  return isNumberLike(value);
35
24
  }
36
- /**
37
- * Map a parsed envelope + eventName header to an IngestEvent discriminated
38
- * union. Returns null for unknown event types or shapes that don't pass the
39
- * type guards.
40
- */
25
+ /** Map a parsed envelope + eventName header to an IngestEvent; null for unknown event types or shapes failing the type guards. */
41
26
  function parsedToIngestEvent(parsed, eventName) {
42
27
  if (eventName === 'issues' && isGitHubIssueEvent(parsed, eventName)) {
43
28
  return { eventName: 'issues', payload: parsed };
@@ -55,7 +40,7 @@ function parsedToIngestEvent(parsed, eventName) {
55
40
  return null;
56
41
  }
57
42
  // Console lines below are the `hippo github` command's printed result and usage text, so they stay off the logger.
58
- export function printGithubBackfillUsage() {
43
+ export function printGitHubBackfillUsage() {
59
44
  console.log('hippo github backfill --repo <owner/name> [--since ISO] [--max <N>]');
60
45
  console.log(' --repo GitHub repository in owner/name format (required, e.g. acme/widgets)');
61
46
  console.log(' --since Initial high-water-mark for first run (optional, ISO 8601)');
@@ -72,31 +57,21 @@ function maxPerStreamFlag(maxRaw) {
72
57
  }
73
58
  return undefined;
74
59
  }
75
- /**
76
- * `hippo github backfill`. The fetcher is injectable so tests can drive the
77
- * code path without hitting the network. Defaults to `realGitHubFetcher`.
78
- */
79
- export async function cmdGithubBackfill(hippoRoot, flags, fetcher = realGitHubFetcher) {
60
+ /** `hippo github backfill`; the fetcher is injectable so tests avoid the network (default `realGitHubFetcher`). */
61
+ export async function cmdGitHubBackfill(hippoRoot, tenantId, flags, fetcher = realGitHubFetcher) {
80
62
  const repo = flags['repo'];
81
63
  if (!isFlagString(repo) || !repo.includes('/')) {
82
- printGithubBackfillUsage();
83
- process.exit(2);
64
+ printGitHubBackfillUsage();
65
+ throw new CliExit(2);
84
66
  }
85
- const token = envGithubToken();
67
+ const token = envGitHubToken();
86
68
  if (!token) {
87
69
  console.error('GITHUB_TOKEN is not set. Backfill requires a personal access token with repo read scope.');
88
- process.exit(2);
70
+ throw new CliExit(2);
89
71
  }
90
72
  const maxPerStream = maxPerStreamFlag(flags['max']);
91
73
  const sinceFlag = flags['since'];
92
74
  const sinceIso = isFlagString(sinceFlag) ? sinceFlag : undefined;
93
- const tenantId = resolveTenantId({});
94
- // Seed the github_cursors row so all 3 streams use --since on a fresh run.
95
- // COALESCE preserves any existing HWM (subsequent runs ignore --since for
96
- // streams that already drained at least once — same idempotency story as
97
- // Slack's slack_cursors).
98
- if (sinceIso)
99
- seedCursors(hippoRoot, tenantId, repo, sinceIso);
100
75
  const ctx = {
101
76
  hippoRoot,
102
77
  tenantId,
@@ -108,19 +83,17 @@ export async function cmdGithubBackfill(hippoRoot, flags, fetcher = realGitHubFe
108
83
  fetcher,
109
84
  token,
110
85
  maxPerStream,
86
+ sinceIso,
111
87
  });
112
88
  console.log(JSON.stringify(result, null, 2));
113
89
  }
114
90
  catch (e) {
115
- // SAFETY: this is a best-effort error message only; property access on
116
- // any JS value is safe (undefined if absent), preserving the existing
117
- // lenient formatting even when something non-Error was thrown.
118
- console.error('backfill failed:', e.message);
119
- process.exit(3);
91
+ console.error('backfill failed:', errorMessage(e));
92
+ throw new CliExit(3);
120
93
  }
121
94
  }
122
- export function cmdGithubDlqList(hippoRoot, _flags) {
123
- const items = listDlq(githubDlq, hippoRoot, { tenantId: resolveTenantId({}) });
95
+ export function cmdGitHubDlqList(hippoRoot, tenantId, _flags) {
96
+ const items = listDlq(githubDlq, hippoRoot, { tenantId });
124
97
  if (items.length === 0) {
125
98
  console.log('no entries');
126
99
  return;
@@ -150,9 +123,8 @@ const reingestParkedDelivery = async (innerCtx, args) => {
150
123
  deliveryId: args.deliveryId,
151
124
  eventName: event.eventName,
152
125
  });
153
- // archivedCount maps to memoryId only loosely — return null since the
154
- // archive operation can affect multiple rows. The replay-result audit
155
- // trail is in github_dlq.retry_count + retried_at.
126
+ // archivedCount maps to memoryId only loosely (the archive can affect multiple rows), so return null;
127
+ // the replay audit trail is github_dlq.retry_count + retried_at.
156
128
  return { memoryId: r.archivedCount > 0 ? 'archived' : null };
157
129
  }
158
130
  const r = await ingestEvent(innerCtx, {
@@ -162,51 +134,51 @@ const reingestParkedDelivery = async (innerCtx, args) => {
162
134
  });
163
135
  return { memoryId: r.memoryId };
164
136
  };
165
- export async function cmdGithubDlqReplay(hippoRoot, args, flags) {
137
+ export async function cmdGitHubDlqReplay(hippoRoot, tenantId, args, flags) {
166
138
  const idArg = args[0];
167
139
  if (!idArg) {
168
140
  console.error('Usage: hippo github dlq replay <id> [--force]');
169
- process.exit(1);
141
+ throw new CliExit(1);
170
142
  }
171
143
  const id = Number(idArg);
172
144
  if (!Number.isFinite(id) || !Number.isInteger(id) || id < 1) {
173
145
  console.error(`replay: invalid id ${idArg}`);
174
- process.exit(1);
146
+ throw new CliExit(1);
175
147
  }
176
148
  const force = flags['force'] === true;
177
149
  const ctx = {
178
150
  hippoRoot,
179
- tenantId: resolveTenantId({}),
151
+ tenantId,
180
152
  actor: adminActor('cli:github-dlq-replay'),
181
153
  };
182
154
  // Without an ingestHook replay only bumps retry_count while printing "replay ok"; the real hook re-runs ingest.
183
155
  const result = await replayDlqEntry(ctx, id, {
184
156
  force,
185
- webhookSecret: envGithubWebhookSecret(),
186
- previousSecret: envGithubWebhookSecretPrevious(),
157
+ webhookSecret: envGitHubWebhookSecret(),
158
+ previousSecret: envGitHubWebhookSecretPrevious(),
187
159
  ingestHook: reingestParkedDelivery,
188
160
  });
189
161
  if (!result.ok) {
190
162
  console.error(`replay failed: status=${result.status} retry_count=${result.retryCount}${result.reason ? ` reason=${result.reason}` : ''}`);
191
- process.exit(1);
163
+ throw new CliExit(1);
192
164
  }
193
165
  console.log(`replay ok: status=${result.status} memory_id=${result.memoryId ?? '(none)'} retry_count=${result.retryCount}`);
194
166
  }
195
- export async function cmdGithub(hippoRoot, args, flags) {
167
+ export async function handleGitHub({ hippoRoot, tenantId, args, flags }) {
196
168
  const sub = args[0];
197
169
  if (sub === 'backfill') {
198
- await cmdGithubBackfill(hippoRoot, flags);
170
+ await cmdGitHubBackfill(hippoRoot, tenantId, flags);
199
171
  return;
200
172
  }
201
173
  if (sub === 'dlq' && args[1] === 'list') {
202
- cmdGithubDlqList(hippoRoot, flags);
174
+ cmdGitHubDlqList(hippoRoot, tenantId, flags);
203
175
  return;
204
176
  }
205
177
  if (sub === 'dlq' && args[1] === 'replay') {
206
- await cmdGithubDlqReplay(hippoRoot, args.slice(2), flags);
178
+ await cmdGitHubDlqReplay(hippoRoot, tenantId, args.slice(2), flags);
207
179
  return;
208
180
  }
209
181
  console.error('Usage: hippo github <backfill|dlq list|dlq replay <id> [--force]> [...]');
210
- process.exit(1);
182
+ throw new CliExit(1);
211
183
  }
212
- //# sourceMappingURL=cli-impl.js.map
184
+ //# sourceMappingURL=github.js.map
@@ -1,3 +1,3 @@
1
- import { type CliFlags } from './flag-values.js';
2
- export declare function cmdGoal(hippoRoot: string, args: string[], flags: CliFlags): void;
1
+ import { type CommandContext } from './flag-values.js';
2
+ export declare function handleGoal({ hippoRoot, tenantId, args, flags }: CommandContext): void;
3
3
  //# sourceMappingURL=goals.d.ts.map
package/dist/cli/goals.js CHANGED
@@ -1,46 +1,48 @@
1
1
  // `hippo goal`: the per-session goal stack that recall boosts.
2
- import { envHippoSessionId } from '../util/env.js';
2
+ import { DEFAULT_TENANT_ID, envHippoSessionId } from '../util/env.js';
3
3
  import * as api from '../api/index.js';
4
- import { resolveTenantId } from '../store/tenant.js';
4
+ import { cliApiContext } from './api-context.js';
5
5
  import { printError } from './output.js';
6
- import { boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
7
- // ---------------------------------------------------------------------------
6
+ import { boolFlag, flagIsTrue, isStringFlag, stringFlag } from './flag-values.js';
7
+ import { CliExit } from './exit.js';
8
8
  // `hippo goal <push|list|complete|suspend|resume>`
9
- // ---------------------------------------------------------------------------
10
9
  const GOAL_POLICY_TYPES = [
11
10
  'schema-fit-biased',
12
11
  'error-prioritized',
13
12
  'recency-first',
14
13
  'hybrid',
15
14
  ];
15
+ function isGoalPolicyType(value) {
16
+ return GOAL_POLICY_TYPES.some((type) => type === value);
17
+ }
16
18
  function sanitizeGoalName(s) {
17
19
  // Strip C0 control chars + DEL to prevent terminal escape injection.
18
- return s.replace(/[\x00-\x1f\x7f]/g, '?');
20
+ return s.replace(/[^\x20-\x7e\u0080-\uffff]/g, '?');
19
21
  }
20
- function resolveGoalSession(flags) {
22
+ function resolveGoalSession(flags, defaultTenantId) {
21
23
  const sessionId = (flags['session-id'] !== undefined
22
24
  ? String(flags['session-id'])
23
25
  : envHippoSessionId() ?? '').trim();
24
26
  if (!sessionId) {
25
27
  printError('session id required (set HIPPO_SESSION_ID or pass --session-id)');
26
- process.exit(1);
28
+ throw new CliExit(1);
27
29
  }
28
30
  const tenantId = (flags['tenant-id'] !== undefined
29
31
  ? String(flags['tenant-id'])
30
- : resolveTenantId({})).trim() || 'default';
32
+ : defaultTenantId).trim() || DEFAULT_TENANT_ID;
31
33
  return { sessionId, tenantId };
32
34
  }
33
35
  function readGoalPolicy(flags) {
34
36
  const policyRaw = flags['policy'];
35
37
  if (policyRaw === true) {
36
38
  printError('--policy requires a value (e.g., --policy error-prioritized)');
37
- process.exit(1);
39
+ throw new CliExit(1);
38
40
  }
39
- if (typeof policyRaw !== 'string')
41
+ if (!isStringFlag(policyRaw))
40
42
  return undefined;
41
- if (!GOAL_POLICY_TYPES.includes(policyRaw)) {
43
+ if (!isGoalPolicyType(policyRaw)) {
42
44
  printError(`Unknown --policy '${policyRaw}'. Expected one of: ${GOAL_POLICY_TYPES.join(' | ')}.`);
43
- process.exit(1);
45
+ throw new CliExit(1);
44
46
  }
45
47
  return { policyType: policyRaw };
46
48
  }
@@ -48,44 +50,44 @@ function readGoalLevel(flags) {
48
50
  const levelRaw = flags['level'];
49
51
  if (levelRaw === true) {
50
52
  printError('--level requires a value (e.g., --level 1)');
51
- process.exit(1);
53
+ throw new CliExit(1);
52
54
  }
53
55
  if (levelRaw === undefined)
54
56
  return undefined;
55
57
  const parsed = Number(levelRaw);
56
58
  if (!Number.isFinite(parsed) || parsed < 0 || parsed > 2 || !Number.isInteger(parsed)) {
57
59
  printError('--level must be an integer in [0, 2]');
58
- process.exit(1);
60
+ throw new CliExit(1);
59
61
  }
60
62
  return parsed;
61
63
  }
62
- function cmdGoalPush(hippoRoot, args, flags) {
64
+ function cmdGoalPush(hippoRoot, defaultTenantId, args, flags) {
63
65
  const rawName = args.join(' ').trim();
64
66
  if (!rawName) {
65
67
  printError('Usage: hippo goal push <name> [--policy <type>] [--success "<condition>"] [--level N] [--parent <goalId>]');
66
- process.exit(1);
68
+ throw new CliExit(1);
67
69
  }
68
70
  // Sanitize at WRITE time so corrupt names never enter the DB.
69
71
  const name = sanitizeGoalName(rawName);
70
72
  if (name !== rawName) {
71
73
  printError('note: stripped control characters from goal name');
72
74
  }
73
- const { sessionId, tenantId } = resolveGoalSession(flags);
75
+ const { sessionId, tenantId } = resolveGoalSession(flags, defaultTenantId);
74
76
  const policy = readGoalPolicy(flags);
75
77
  const successRaw = flags['success'];
76
78
  if (successRaw === true) {
77
79
  printError('--success requires a value (e.g., --success "<condition>")');
78
- process.exit(1);
80
+ throw new CliExit(1);
79
81
  }
80
82
  const successCondition = stringFlag(flags, 'success');
81
83
  const level = readGoalLevel(flags);
82
84
  const parentRaw = flags['parent'];
83
85
  if (parentRaw === true) {
84
86
  printError('--parent requires a value (e.g., --parent <goalId>)');
85
- process.exit(1);
87
+ throw new CliExit(1);
86
88
  }
87
89
  const parentGoalId = stringFlag(flags, 'parent');
88
- const goal = api.goalPush(goalContext(hippoRoot, tenantId), {
90
+ const goal = api.goalPush(cliApiContext(hippoRoot, tenantId), {
89
91
  sessionId,
90
92
  goalName: name,
91
93
  level,
@@ -95,21 +97,15 @@ function cmdGoalPush(hippoRoot, args, flags) {
95
97
  });
96
98
  console.log(goal.id);
97
99
  }
98
- function goalContext(hippoRoot, tenantId = resolveTenantId({})) {
99
- return { hippoRoot, tenantId, actor: api.adminActor('cli') };
100
- }
101
- function cmdGoalList(hippoRoot, flags) {
102
- const { sessionId, tenantId } = resolveGoalSession(flags);
100
+ function cmdGoalList(hippoRoot, defaultTenantId, flags) {
101
+ const { sessionId, tenantId } = resolveGoalSession(flags, defaultTenantId);
103
102
  const showAll = boolFlag(flags, 'all');
104
- const goals = api.goalList(goalContext(hippoRoot, tenantId), { sessionId, all: showAll });
103
+ const goals = api.goalList(cliApiContext(hippoRoot, tenantId), { sessionId, all: showAll });
105
104
  if (goals.length === 0) {
106
105
  console.log('(no goals)');
107
106
  return;
108
107
  }
109
- // 4-column table: id, status, goal_name, outcome. Plan calls it a "2-column"
110
- // table but the assertion list (id, status, goal_name, outcome) needs four;
111
- // tests check for substrings ('active', '0.9', name) so column count is
112
- // observably four but not asserted.
108
+ // Four columns (id, status, goal_name, outcome); tests only check substrings, so the count is not asserted.
113
109
  const rows = goals.map(g => ({
114
110
  id: g.id,
115
111
  status: g.status,
@@ -128,74 +124,74 @@ function cmdGoalList(hippoRoot, flags) {
128
124
  console.log(`${pad(r.id, widths.id)} ${pad(r.status, widths.status)} ${pad(r.name, widths.name)} ${pad(r.outcome, widths.outcome)}`);
129
125
  }
130
126
  }
131
- function cmdGoalComplete(hippoRoot, args, flags) {
127
+ function cmdGoalComplete(hippoRoot, tenantId, args, flags) {
132
128
  const id = args[0];
133
129
  if (!id) {
134
130
  printError('Usage: hippo goal complete <id> [--outcome <0..1>] [--no-propagate]');
135
- process.exit(1);
131
+ throw new CliExit(1);
136
132
  }
137
133
  let outcomeScore;
138
134
  const outcomeRaw = flags['outcome'];
139
135
  if (outcomeRaw === true) {
140
136
  printError('--outcome requires a value (e.g., --outcome 0.9)');
141
- process.exit(1);
137
+ throw new CliExit(1);
142
138
  }
143
139
  if (outcomeRaw !== undefined) {
144
140
  const parsed = Number(outcomeRaw);
145
141
  if (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {
146
142
  printError('--outcome must be a number in [0, 1]');
147
- process.exit(1);
143
+ throw new CliExit(1);
148
144
  }
149
145
  outcomeScore = parsed;
150
146
  }
151
147
  const noPropagate = flagIsTrue(flags, 'no-propagate');
152
- api.goalComplete(goalContext(hippoRoot), id, { outcomeScore, noPropagate });
148
+ api.goalComplete(cliApiContext(hippoRoot, tenantId), id, { outcomeScore, noPropagate });
153
149
  console.log('ok');
154
150
  }
155
- function cmdGoalSuspend(hippoRoot, args) {
151
+ function cmdGoalSuspend(hippoRoot, tenantId, args) {
156
152
  const id = args[0];
157
153
  if (!id) {
158
154
  printError('Usage: hippo goal suspend <id>');
159
- process.exit(1);
155
+ throw new CliExit(1);
160
156
  }
161
- api.goalSuspend(goalContext(hippoRoot), id);
157
+ api.goalSuspend(cliApiContext(hippoRoot, tenantId), id);
162
158
  console.log('ok');
163
159
  }
164
- function cmdGoalResume(hippoRoot, args) {
160
+ function cmdGoalResume(hippoRoot, tenantId, args) {
165
161
  const id = args[0];
166
162
  if (!id) {
167
163
  printError('Usage: hippo goal resume <id>');
168
- process.exit(1);
164
+ throw new CliExit(1);
169
165
  }
170
- api.goalResume(goalContext(hippoRoot), id);
166
+ api.goalResume(cliApiContext(hippoRoot, tenantId), id);
171
167
  console.log('ok');
172
168
  }
173
- export function cmdGoal(hippoRoot, args, flags) {
169
+ export function handleGoal({ hippoRoot, tenantId, args, flags }) {
174
170
  const sub = args[0];
175
171
  if (!sub) {
176
172
  printError('Usage: hippo goal <push|list|complete|suspend|resume> [args]');
177
- process.exit(1);
173
+ throw new CliExit(1);
178
174
  }
179
175
  const subArgs = args.slice(1);
180
176
  switch (sub) {
181
177
  case 'push':
182
- cmdGoalPush(hippoRoot, subArgs, flags);
178
+ cmdGoalPush(hippoRoot, tenantId, subArgs, flags);
183
179
  return;
184
180
  case 'list':
185
- cmdGoalList(hippoRoot, flags);
181
+ cmdGoalList(hippoRoot, tenantId, flags);
186
182
  return;
187
183
  case 'complete':
188
- cmdGoalComplete(hippoRoot, subArgs, flags);
184
+ cmdGoalComplete(hippoRoot, tenantId, subArgs, flags);
189
185
  return;
190
186
  case 'suspend':
191
- cmdGoalSuspend(hippoRoot, subArgs);
187
+ cmdGoalSuspend(hippoRoot, tenantId, subArgs);
192
188
  return;
193
189
  case 'resume':
194
- cmdGoalResume(hippoRoot, subArgs);
190
+ cmdGoalResume(hippoRoot, tenantId, subArgs);
195
191
  return;
196
192
  default:
197
193
  printError(`Unknown goal subcommand: ${sub}. Expected: push | list | complete | suspend | resume.`);
198
- process.exit(1);
194
+ throw new CliExit(1);
199
195
  }
200
196
  }
201
197
  //# sourceMappingURL=goals.js.map
@@ -1,40 +1,22 @@
1
1
  import type { HookRuntime } from '../core/capture-contract.js';
2
2
  import { type DeliveryEventType, type DeliveryRecorder } from '../store/delivery-recorder.js';
3
3
  import type { CliFlags } from './flag-values.js';
4
- /**
5
- * Detached worker that counts re-reads, runs sleep, then capture. Invoked via the internal
6
- * `__session-end-worker` subcommand (not user-facing). Failures in one stage
7
- * do not block the other.
8
- */
4
+ /** Detached worker (internal `__session-end-worker`): counts re-reads, runs sleep, then capture; one stage failing does not block the other. */
9
5
  /** A folder without its own store never sleeps at session end, so its project's agent notes go to the global store here. */
10
6
  export declare function logSessionEndImport(logFile: string | null, transcriptPath: string | undefined): void;
11
- /**
12
- * Best-effort log line for the snapshot-close step in
13
- * `cmdSessionEndWorker`. `cmdSleep`/`cmdCapture` each tee console output to
14
- * `logFile` only for their own duration (the tee is restored before this
15
- * runs), so a plain `console.log` here would be silently discarded under
16
- * the detached worker's `stdio: 'ignore'` — write straight to the file
17
- * instead, matching capture.ts's `appendPreCompactLog` convention.
18
- */
7
+ /** Best-effort log line for the cmdSessionEndWorker snapshot-close step: cmdSleep/cmdCapture restore their console tee before this runs,
8
+ * so console.log would be lost under the worker's `stdio: 'ignore'`; write to the file directly. */
19
9
  export declare function appendSessionEndCloseLog(logFile: string | null, message: string, opts?: {
20
10
  startFresh?: boolean;
21
11
  }): void;
12
+ /** A session-end step that failed: one warn line, and the same text in the session log, the only place a detached worker's output survives. */
13
+ export declare function reportSessionEndFailure<E>(logFile: string | null, step: string, err: E): void;
22
14
  export declare function hostSessionId(): string | undefined;
23
- /**
24
- * Compaction drops the pinned blocks the per-prompt hook injected
25
- * earlier, so record a `reset` for the payload's session and the next prompt
26
- * injects again even if nothing changed. `requiredSource` limits it to hook
27
- * payloads with that `source` (SessionStart fires for other reasons too).
28
- * Best-effort and silent: a malformed payload records nothing.
29
- */
15
+ /** Compaction drops the pinned blocks the per-prompt hook injected, so record a `reset` for the payload's session and the next prompt injects again.
16
+ * `requiredSource` limits it to payloads with that `source`; best-effort and silent on a malformed payload. */
30
17
  export declare function resetHookInjection(hippoRoot: string, stdinText: string | undefined, requiredSource: string | null): void;
31
- /**
32
- * The store a Claude Code hook writes to: the project store when there is
33
- * one, else an existing global store, else the project path (which the hook
34
- * then skips, since hooks fire in every directory and must not create one).
35
- * Pre-compact and compact-resume must agree, or a snapshot saved to one store
36
- * is looked for in the other.
37
- */
18
+ /** Store a hook writes to: the project store, else an existing global one, else the project path (skipped: hooks must not create a store).
19
+ * Pre-compact and compact-resume must agree, or a snapshot is looked for in the other store. */
38
20
  export declare function hookStoreRoot(hippoRoot: string): string;
39
21
  /** `--runtime copilot`, or `--format copilot` on `hippo context`, marks a Copilot hook: the flag decides, never the payload. */
40
22
  export declare function hookRuntime(flags: CliFlags): HookRuntime;
@@ -13,16 +13,11 @@ import { blockHash } from '../util/token-text.js';
13
13
  import { importAtSessionEnd, currentMachine } from '../agent-memories/sync.js';
14
14
  import { summaryLine } from '../agent-memories/report.js';
15
15
  import { isGlobalStoreRoot } from '../core/project-identity.js';
16
- import { getGlobalRoot } from '../sharing/shared.js';
16
+ import { getGlobalRoot } from '../sharing/global-store.js';
17
17
  import { sanitizeLogMessage } from '../capture/compact.js';
18
18
  import { resolveTenantId } from '../store/tenant.js';
19
19
  import { errorMessage, log } from '../util/log.js';
20
- import { printError } from './output.js';
21
- /**
22
- * Detached worker that counts re-reads, runs sleep, then capture. Invoked via the internal
23
- * `__session-end-worker` subcommand (not user-facing). Failures in one stage
24
- * do not block the other.
25
- */
20
+ /** Detached worker (internal `__session-end-worker`): counts re-reads, runs sleep, then capture; one stage failing does not block the other. */
26
21
  /** A folder without its own store never sleeps at session end, so its project's agent notes go to the global store here. */
27
22
  export function logSessionEndImport(logFile, transcriptPath) {
28
23
  try {
@@ -37,14 +32,8 @@ export function logSessionEndImport(logFile, transcriptPath) {
37
32
  appendSessionEndCloseLog(logFile, `agent memory import failed: ${errorMessage(err)}`);
38
33
  }
39
34
  }
40
- /**
41
- * Best-effort log line for the snapshot-close step in
42
- * `cmdSessionEndWorker`. `cmdSleep`/`cmdCapture` each tee console output to
43
- * `logFile` only for their own duration (the tee is restored before this
44
- * runs), so a plain `console.log` here would be silently discarded under
45
- * the detached worker's `stdio: 'ignore'` — write straight to the file
46
- * instead, matching capture.ts's `appendPreCompactLog` convention.
47
- */
35
+ /** Best-effort log line for the cmdSessionEndWorker snapshot-close step: cmdSleep/cmdCapture restore their console tee before this runs,
36
+ * so console.log would be lost under the worker's `stdio: 'ignore'`; write to the file directly. */
48
37
  export function appendSessionEndCloseLog(logFile, message, opts = {}) {
49
38
  if (!logFile)
50
39
  return;
@@ -60,17 +49,18 @@ export function appendSessionEndCloseLog(logFile, message, opts = {}) {
60
49
  log.debug(`session-end log not written: ${errorMessage(err)}`);
61
50
  }
62
51
  }
52
+ /** A session-end step that failed: one warn line, and the same text in the session log, the only place a detached worker's output survives. */
53
+ export function reportSessionEndFailure(logFile, step, err) {
54
+ const line = `${step} failed: ${errorMessage(err)}`;
55
+ log.warn(line);
56
+ appendSessionEndCloseLog(logFile, line);
57
+ }
63
58
  // Claude Code exports its own session var, not ours; without the fallback agent-run recalls trace with no session.
64
59
  export function hostSessionId() {
65
60
  return envHippoSessionId() ?? envClaudeCodeSessionId();
66
61
  }
67
- /**
68
- * Compaction drops the pinned blocks the per-prompt hook injected
69
- * earlier, so record a `reset` for the payload's session and the next prompt
70
- * injects again even if nothing changed. `requiredSource` limits it to hook
71
- * payloads with that `source` (SessionStart fires for other reasons too).
72
- * Best-effort and silent: a malformed payload records nothing.
73
- */
62
+ /** Compaction drops the pinned blocks the per-prompt hook injected, so record a `reset` for the payload's session and the next prompt injects again.
63
+ * `requiredSource` limits it to payloads with that `source`; best-effort and silent on a malformed payload. */
74
64
  export function resetHookInjection(hippoRoot, stdinText, requiredSource) {
75
65
  const sessionId = hookPayloadSessionId(stdinText, requiredSource);
76
66
  // A sub-agent's compaction leaves its parent's context, and the blocks in it, as they were.
@@ -80,13 +70,8 @@ export function resetHookInjection(hippoRoot, stdinText, requiredSource) {
80
70
  tenantId: resolveTenantId({}), sessionId, surface: 'hook', event: 'reset', items: 0, tokens: 0,
81
71
  });
82
72
  }
83
- /**
84
- * The store a Claude Code hook writes to: the project store when there is
85
- * one, else an existing global store, else the project path (which the hook
86
- * then skips, since hooks fire in every directory and must not create one).
87
- * Pre-compact and compact-resume must agree, or a snapshot saved to one store
88
- * is looked for in the other.
89
- */
73
+ /** Store a hook writes to: the project store, else an existing global one, else the project path (skipped: hooks must not create a store).
74
+ * Pre-compact and compact-resume must agree, or a snapshot is looked for in the other store. */
90
75
  export function hookStoreRoot(hippoRoot) {
91
76
  if (isInitialized(hippoRoot))
92
77
  return hippoRoot;
@@ -116,8 +101,7 @@ export function startDeliveryRecorder(hippoRoot, stdinText, runtime, eventType)
116
101
  });
117
102
  }
118
103
  catch (error) {
119
- // The hook's one-line stderr contract pins this exact text, so it bypasses the leveled logger.
120
- printError(`[hippo] delivery ledger skipped:${errorMessage(error)}`);
104
+ log.warn(`delivery ledger skipped: ${errorMessage(error)}`);
121
105
  return null;
122
106
  }
123
107
  }
@@ -1,3 +1,3 @@
1
- import { type CliFlags } from './flag-values.js';
2
- export declare function cmdInit(hippoRoot: string, flags: CliFlags): void;
1
+ import { type CommandContext } from './flag-values.js';
2
+ export declare function handleInit({ hippoRoot, flags }: CommandContext): void;
3
3
  //# sourceMappingURL=init.d.ts.map