hippo-memory 1.68.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (864) hide show
  1. package/README.md +6 -3
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,62 +1,20 @@
1
- // Helpers two or more CLI verbs use, split from cli.ts so a verb can move to its own file without importing cli.ts.
1
+ // Store and server helpers the CLI verbs share: audit events, init checks, server routing, git learning and the auth root.
2
2
  // This module must never import cli.ts.
3
- import { envApiKey, envClaudeCodeSessionId, envHippoSessionId, envRequireServer } from '../env.js';
4
- import * as path from 'path';
5
- import * as fs from 'fs';
6
- import { execFileSync, execSync } from 'child_process';
7
- import { installJsonHooks } from '../hooks/json-hooks.js';
8
- import { CODEX_TRUST_LINE } from '../hooks/shared.js';
9
- import { confidenceLabel } from '../memory.js';
10
- import { getHippoRoot, isInitialized } from '../store/open.js';
11
- import { explainMatch } from '../search/explain.js';
12
- import { isSharedStore } from '../config.js';
13
- import { openHippoDb, closeHippoDb, isSqliteBusy, noteStoreBusy, runWithRequestStores, HOOK_DB_WAIT_MS } from '../db.js';
14
- import { withLedgerDb } from '../ledger-db.js';
15
- import { sessionPilotArm } from '../pilot-arm.js';
16
- import { hookPayloadSessionId, hookPayloadString, isSubagentPayload, recordTokenUse } from '../token-ledger.js';
17
- import { importAtSessionEnd, currentMachine } from '../agent-memories/sync.js';
18
- import { summaryLine } from '../agent-memories/report.js';
19
- import { detectChurnStale } from '../invalidation.js';
20
- import { resolveProjectIdentity } from '../project-identity.js';
21
- import { getGlobalRoot, initGlobal } from '../shared.js';
22
- import { DAILY_TASK_NAME, buildDailyRunnerCommand, buildSchtasksCreateArgs, buildWindowsTaskRun } from '../scheduler.js';
23
- import { sanitizeLogMessage } from '../capture/compact.js';
24
- import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
25
- import * as client from '../client.js';
26
- import { detectServer, removePidfileIfOwned } from '../server-detect.js';
27
- import { resolveTenantId } from '../tenant.js';
28
- import { adminActor, learn, CLI_LEARN } from '../api.js';
29
- import { snapshotText, sessionTrailText, handoffText } from '../context-render.js';
30
- import { errorMessage, log } from '../log.js';
3
+ import { envApiKey, envRequireServer } from '../util/env.js';
4
+ import { execFileSync } from 'child_process';
5
+ import { isSharedStore } from '../core/config.js';
6
+ import { isInitialized } from '../store/open.js';
7
+ import { detectChurnStale } from '../learn/invalidation.js';
8
+ import { resolveProjectIdentity } from '../core/project-identity.js';
9
+ import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
10
+ import { reportAuditWriteFailure } from '../store/audit.js';
11
+ import { sqliteSyncStore } from '../store/sqlite/store.js';
12
+ import * as client from './client.js';
13
+ import { detectServer, removePidfileIfOwned } from '../server/server-detect.js';
14
+ import { resolveTenantId } from '../store/tenant.js';
15
+ import { adminActor, learn, CLI_LEARN } from '../api/index.js';
16
+ import { errorMessage, log } from '../util/log.js';
31
17
  import { printError } from './output.js';
32
- export function parseLimitFlag(value) {
33
- if (!value)
34
- return Infinity;
35
- const parsed = parseInt(String(value), 10);
36
- return Number.isFinite(parsed) && parsed >= 1 ? parsed : Infinity;
37
- }
38
- export function parseCountFlag(value) {
39
- if (!value || value === true || Array.isArray(value))
40
- return 0;
41
- const parsed = parseInt(String(value), 10);
42
- return Number.isFinite(parsed) && parsed >= 1 ? parsed : 0;
43
- }
44
- export function parseBudgetFlag(value, fallback) {
45
- if (value === undefined)
46
- return fallback;
47
- // A value-less flag and a junk value are different typos; the --hops guard already splits them.
48
- if (typeof value !== 'string') {
49
- printError('--budget requires an integer value (e.g. --budget 1500).');
50
- process.exit(1);
51
- }
52
- // Number(), like the --hops guard: parseInt('12abc') is 12, silently accepting what this message rejects.
53
- const parsed = Number(value);
54
- if (!Number.isInteger(parsed) || parsed < 0) {
55
- printError(`Invalid --budget: "${value}". Must be a non-negative integer.`);
56
- process.exit(1);
57
- }
58
- return parsed;
59
- }
60
18
  /**
61
19
  * Emit an audit event against `hippoRoot`'s db. Opens its own short-lived
62
20
  * connection so callers don't have to thread a db handle. Swallows all errors
@@ -64,19 +22,13 @@ export function parseBudgetFlag(value, fallback) {
64
22
  */
65
23
  export function emitCliAudit(hippoRoot, op, targetId, metadata) {
66
24
  try {
67
- const db = openHippoDb(hippoRoot);
68
- try {
69
- appendAuditEvent(db, {
25
+ sqliteSyncStore(hippoRoot).appendAuditEvents([{
70
26
  tenantId: resolveTenantId({}),
71
27
  actor: 'cli',
72
28
  op,
73
29
  targetId,
74
30
  metadata,
75
- });
76
- }
77
- finally {
78
- closeHippoDb(db);
79
- }
31
+ }]);
80
32
  }
81
33
  catch (error) {
82
34
  // Best effort: the command already did its work.
@@ -102,7 +54,7 @@ export function runChurnStaleForRepo(hippoRoot, dryRun) {
102
54
  return { root, result: detectChurnStale(root, repoRoot, { tenantId, projectName, legacyName, dryRun }) };
103
55
  }
104
56
  catch (err) {
105
- const message = err instanceof Error ? err.message : String(err);
57
+ const message = errorMessage(err);
106
58
  return { root, result: { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned: [], dryRun, preview: [], error: message } };
107
59
  }
108
60
  });
@@ -166,59 +118,6 @@ export async function runViaServerIfAvailable(hippoRoot, httpFn) {
166
118
  throw err;
167
119
  }
168
120
  }
169
- export function fmt(n, digits = 2) {
170
- return n.toFixed(digits);
171
- }
172
- // What `hippo recall` prints for one result; the budget prices this same text.
173
- export function recallEntryText(r, query, showWhy, isGlobal) {
174
- const e = r.entry;
175
- const label = confidenceLabel(e);
176
- const confLabel = label.warn ? `[${label.text}] ⚠️` : `[${label.text}]`;
177
- const bars = Math.round(e.strength * 10);
178
- const graphMark = r.graphVia ? ` [graph: ${r.graphVia.hops}hop ${r.graphVia.relType}]` : '';
179
- const lines = [
180
- `--- ${e.id} [${e.layer}] ${confLabel}${isGlobal ? ' [global]' : ''}${e.superseded_by ? ' [superseded]' : ''}${graphMark} score=${fmt(r.score, 3)} strength=${fmt(e.strength)}`,
181
- ` [${'█'.repeat(bars)}${'░'.repeat(10 - bars)}] tags: ${e.tags.join(', ') || 'none'} | retrieved: ${e.retrieval_count}x`,
182
- ];
183
- if (showWhy) {
184
- const explanation = explainMatch(query, r);
185
- lines.push(` source:${isGlobal ? ' [global]' : ' [local]'} | layer: [${e.layer}] | confidence: [${label.text}]`, ` reason: ${explanation.reason}`);
186
- const env = explanation.envelope;
187
- if (env) {
188
- lines.push(` kind: ${env.kind}`);
189
- if (env.scope)
190
- lines.push(` scope: ${env.scope}`);
191
- if (env.owner)
192
- lines.push(` owner: ${env.owner}`);
193
- if (env.artifact_ref)
194
- lines.push(` artifact_ref: ${env.artifact_ref}`);
195
- if (env.session_id)
196
- lines.push(` session_id: ${env.session_id}`);
197
- lines.push(` confidence: ${env.confidence}`);
198
- }
199
- // The recall trace, e.g. "ranking: base 0.420 -> interference x0.30 -> 0.126 -> goal-boost x1.50 -> 0.189".
200
- if (r.rerankTrace && r.rerankTrace.length > 0) {
201
- const parts = [`base ${fmt(r.rerankTrace[0].scoreBefore, 3)}`];
202
- for (const step of r.rerankTrace) {
203
- parts.push(`${step.stage}${step.multiplier !== undefined ? ` x${fmt(step.multiplier, 2)}` : ''}`, fmt(step.scoreAfter, 3));
204
- }
205
- lines.push(` ranking: ${parts.join(' -> ')}`);
206
- }
207
- }
208
- lines.push('', e.content, '');
209
- return lines.join('\n');
210
- }
211
- export function recallHeading(entries, tokens, query) {
212
- return `Found ${entries} memories (${tokens} tokens) for: "${query}"\n`;
213
- }
214
- /** One line when an agent memory import moved anything; its warnings go to stderr. */
215
- export function printAgentImport(report, indent = ' ') {
216
- const line = summaryLine(report);
217
- if (line !== null)
218
- console.log(`${indent}${line}`);
219
- for (const warning of report.warnings)
220
- printError(`hippo: agent memories: ${warning}`);
221
- }
222
121
  /** True, after one line, on a shared store: this account's commits and agent notes are not its members' memories. */
223
122
  export function skipLearnOnSharedStore(hippoRoot) {
224
123
  if (!isSharedStore(hippoRoot))
@@ -226,240 +125,6 @@ export function skipLearnOnSharedStore(hippoRoot) {
226
125
  console.log("Shared store: skipped learning from this account's git commits and coding agents' own memories.");
227
126
  return true;
228
127
  }
229
- /** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
230
- export function installCodexMemoryHooks(indent) {
231
- const result = installJsonHooks('codex');
232
- if (result.invalidJson) {
233
- console.log(`${indent}WARNING: ${result.settingsPath} is not a hooks file hippo can merge into; fix it, then run \`hippo hook install codex\`.`);
234
- return;
235
- }
236
- const added = [
237
- result.installedUserPromptSubmit ? 'UserPromptSubmit' : '',
238
- result.installedCompactResume ? 'SessionStart(compact)' : '',
239
- ].filter(Boolean);
240
- console.log(added.length > 0
241
- ? `${indent}Installed hippo's Codex memory hooks (${added.join(', ')}) in ${result.settingsPath}`
242
- : `${indent}hippo's Codex memory hooks already in ${result.settingsPath}`);
243
- console.log(`${indent}${CODEX_TRUST_LINE}`);
244
- }
245
- /** The one line init, hook install, hook uninstall and setup print when Claude Code's settings.json is not JSON hippo can edit and so was left unchanged; true when it printed. */
246
- export function warnClaudeSettingsUnusable(result, indent, action = 'install') {
247
- if (!result.invalidJson)
248
- return false;
249
- console.log(`${indent}WARNING: ${result.settingsPath} is not a JSON object hippo can merge into, so it was left unchanged; fix it, then run \`hippo hook ${action} claude-code\`.`);
250
- return true;
251
- }
252
- /**
253
- * Set up a machine-level daily runner that sweeps all registered Hippo
254
- * workspaces.
255
- * Linux/macOS: writes to user crontab.
256
- * Windows: creates a scheduled task.
257
- * Skips if already installed.
258
- */
259
- export function setupDailySchedule(globalRoot) {
260
- const runnerDir = path.resolve(globalRoot);
261
- // Reject paths with characters that could break shell/crontab quoting
262
- // (backslash is normal on Windows, only dangerous in Unix shell/crontab)
263
- const unsafeChars = process.platform === 'win32' ? /["`$%\n\r]/ : /["`$\n\r\\]/;
264
- if (unsafeChars.test(runnerDir)) {
265
- console.log(` Skipping schedule: runner path contains unsafe characters.`);
266
- return;
267
- }
268
- const isWindows = process.platform === 'win32';
269
- const taskName = DAILY_TASK_NAME;
270
- const cmd = buildDailyRunnerCommand(runnerDir);
271
- if (isWindows) {
272
- // Check if task already exists
273
- try {
274
- const existing = execSync(`schtasks /query /tn "${taskName}" 2>nul`, { encoding: 'utf-8', windowsHide: true });
275
- if (existing.includes(taskName)) {
276
- return; // already scheduled
277
- }
278
- }
279
- catch {
280
- // Task doesn't exist, create it
281
- }
282
- try {
283
- execFileSync('schtasks', buildSchtasksCreateArgs(taskName, cmd), { stdio: 'pipe', windowsHide: true });
284
- console.log(` Scheduled machine-level daily runner (6:15am) via Task Scheduler: ${taskName}`);
285
- }
286
- catch {
287
- // No admin rights or schtasks unavailable, fall back to printing instructions
288
- console.log(` To schedule the machine-level daily runner, run:`);
289
- console.log(` schtasks /create /tn "${taskName}" /tr "${buildWindowsTaskRun(cmd).replace(/"/g, '\\"')}" /sc daily /st 06:15`);
290
- }
291
- }
292
- else {
293
- // Unix: check crontab for existing entry
294
- const marker = `# hippo:${taskName}`;
295
- try {
296
- const existing = execSync('crontab -l 2>/dev/null', { encoding: 'utf-8', windowsHide: true });
297
- if (existing.includes(marker)) {
298
- return; // already scheduled
299
- }
300
- const cronLine = `15 6 * * * ${cmd} ${marker}`;
301
- const newCrontab = existing.trimEnd() + '\n' + cronLine + '\n';
302
- execSync('crontab -', { input: newCrontab, stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true });
303
- console.log(` Scheduled machine-level daily runner (6:15am) via crontab`);
304
- }
305
- catch {
306
- // No crontab or no permission: print the line for the user to add by hand.
307
- const cronLine = `15 6 * * * ${cmd}`;
308
- console.log(` To schedule the machine-level daily runner, add to crontab (crontab -e):`);
309
- console.log(` ${cronLine}`);
310
- }
311
- }
312
- }
313
- export function parseAsOfFlag(flags) {
314
- const asOf = typeof flags['as-of'] === 'string' ? flags['as-of'] : undefined;
315
- if (asOf !== undefined && Number.isNaN(new Date(asOf).getTime())) {
316
- printError(`Error: --as-of value "${asOf}" is not a valid ISO date (e.g. 2026-04-22 or 2026-04-22T12:00:00Z).`);
317
- process.exit(1);
318
- }
319
- return asOf;
320
- }
321
- /** --physics forces physics, --classic forces BM25+cosine, else physics unless the config turns it off. */
322
- export function engineFlags(flags, config) {
323
- return {
324
- usePhysics: Boolean(flags['physics']) || (!flags['classic'] && config.physics.enabled !== false),
325
- physicsConfig: config.physics,
326
- mmr: !flags['no-mmr'] && config.mmr.enabled,
327
- mmrLambda: flags['mmr-lambda'] !== undefined ? parseFloat(String(flags['mmr-lambda'])) : config.mmr.lambda,
328
- localBump: flags['equal-sources']
329
- ? 1.0
330
- : flags['local-bump'] !== undefined ? parseFloat(String(flags['local-bump'])) : config.search.localBump,
331
- };
332
- }
333
- /**
334
- * Detached worker that counts re-reads, runs sleep, then capture. Invoked via the internal
335
- * `__session-end-worker` subcommand (not user-facing). Failures in one stage
336
- * do not block the other.
337
- */
338
- /** A folder without its own store never sleeps at session end, so its project's agent notes go to the global store here. */
339
- export function logSessionEndImport(logFile, transcriptPath) {
340
- try {
341
- const report = importAtSessionEnd(process.cwd(), transcriptPath, { machine: currentMachine() });
342
- const line = summaryLine(report);
343
- if (line !== null)
344
- appendSessionEndCloseLog(logFile, line);
345
- for (const warning of report.warnings)
346
- appendSessionEndCloseLog(logFile, `agent memories: ${warning}`);
347
- }
348
- catch (err) {
349
- appendSessionEndCloseLog(logFile, `agent memory import failed: ${err instanceof Error ? err.message : String(err)}`);
350
- }
351
- }
352
- /**
353
- * Best-effort log line for the snapshot-close step in
354
- * `cmdSessionEndWorker`. `cmdSleep`/`cmdCapture` each tee console output to
355
- * `logFile` only for their own duration (the tee is restored before this
356
- * runs), so a plain `console.log` here would be silently discarded under
357
- * the detached worker's `stdio: 'ignore'` — write straight to the file
358
- * instead, matching capture.ts's `appendPreCompactLog` convention.
359
- */
360
- export function appendSessionEndCloseLog(logFile, message, opts = {}) {
361
- if (!logFile)
362
- return;
363
- try {
364
- fs.mkdirSync(path.dirname(logFile), { recursive: true });
365
- // sanitizeLogMessage: `message` interpolates the payload-controlled
366
- // session_id — same log-forgery guard appendPreCompactLog applies.
367
- const write = opts.startFresh ? fs.writeFileSync : fs.appendFileSync;
368
- write(logFile, `[hippo] ${new Date().toISOString()} ${sanitizeLogMessage(message)}\n`, 'utf8');
369
- }
370
- catch {
371
- // Best-effort only — never let a log-write failure surface as an error.
372
- }
373
- }
374
- export function printActiveTaskSnapshot(snapshot) {
375
- console.log(snapshotText(snapshot));
376
- }
377
- export function printSessionEvents(events) {
378
- console.log(events.length === 0 ? 'No session events found.' : sessionTrailText(events));
379
- }
380
- export function printHandoff(handoff) {
381
- console.log(handoffText(handoff));
382
- }
383
- // parseArgs turns a value-less flag into `true`; refuse rather than silently
384
- // stringifying it (String(true) === 'true'), mirroring cmdHandoff's guard.
385
- export function cardStringFlag(flags, key) {
386
- const v = flags[key];
387
- if (v === undefined)
388
- return undefined;
389
- if (v === true || v === false || Array.isArray(v)) {
390
- printError(`--${key} requires a value`);
391
- process.exit(1);
392
- }
393
- return v.trim();
394
- }
395
- // Claude Code exports its own session var, not ours; without the fallback agent-run recalls trace with no session.
396
- export function hostSessionId() {
397
- return envHippoSessionId() ?? envClaudeCodeSessionId();
398
- }
399
- /**
400
- * Compaction drops the pinned blocks the per-prompt hook injected
401
- * earlier, so record a `reset` for the payload's session and the next prompt
402
- * injects again even if nothing changed. `requiredSource` limits it to hook
403
- * payloads with that `source` (SessionStart fires for other reasons too).
404
- * Best-effort and silent: a malformed payload records nothing.
405
- */
406
- export function resetHookInjection(hippoRoot, stdinText, requiredSource) {
407
- const sessionId = hookPayloadSessionId(stdinText, requiredSource);
408
- // A sub-agent's compaction leaves its parent's context, and the blocks in it, as they were.
409
- if (sessionId === null || isSubagentPayload(stdinText))
410
- return;
411
- withLedgerDb(hippoRoot, (db) => recordTokenUse(db, {
412
- tenantId: resolveTenantId({}), sessionId, surface: 'hook', event: 'reset', items: 0, tokens: 0,
413
- }));
414
- }
415
- /**
416
- * Run `fn` with console.log captured; returns the captured lines joined by
417
- * newlines (what the same calls would have printed, minus the final newline).
418
- */
419
- export function captureConsole(fn) {
420
- const lines = [];
421
- const realLog = console.log;
422
- console.log = (...parts) => { lines.push(parts.map(String).join(' ')); };
423
- try {
424
- fn();
425
- }
426
- finally {
427
- console.log = realLog;
428
- }
429
- return lines.join('\n');
430
- }
431
- /**
432
- * The store a Claude Code hook writes to: the project store when there is
433
- * one, else an existing global store, else the project path (which the hook
434
- * then skips, since hooks fire in every directory and must not create one).
435
- * Pre-compact and compact-resume must agree, or a snapshot saved to one store
436
- * is looked for in the other.
437
- */
438
- export function hookStoreRoot(hippoRoot) {
439
- if (isInitialized(hippoRoot))
440
- return hippoRoot;
441
- const globalRoot = getGlobalRoot();
442
- return isInitialized(globalRoot) ? globalRoot : hippoRoot;
443
- }
444
- /** `--runtime copilot`, or `--format copilot` on `hippo context`, marks a Copilot hook: the flag decides, never the payload. */
445
- export function hookRuntime(flags) {
446
- return flags['runtime'] === 'copilot' || flags['format'] === 'copilot' ? 'copilot' : 'claude-code';
447
- }
448
- /** A Copilot hook's project root, from the payload's `cwd`, since VS Code runs user-level hooks in the home folder; other runtimes keep `hippoRoot`. */
449
- export function payloadCwdRoot(hippoRoot, stdinText, runtime) {
450
- const cwd = runtime === 'copilot' ? hookPayloadString(stdinText, 'cwd') : null;
451
- if (cwd === null || cwd.trim() === '')
452
- return hippoRoot;
453
- try {
454
- // Moving, not just re-rooting, keeps project identity, scope, handoff evidence and the session-end worker on that folder too.
455
- process.chdir(cwd);
456
- }
457
- catch (err) {
458
- log.warn(`hippo: payload cwd ${cwd} is not usable, so the hook stays in ${process.cwd()}: ${errorMessage(err)}`);
459
- return hippoRoot;
460
- }
461
- return getHippoRoot(process.cwd());
462
- }
463
128
  export function learnFromRepo(hippoRoot, repoPath, days, label) {
464
129
  const prefix = label ? `[${label}] ` : '';
465
130
  const ctx = { hippoRoot, tenantId: resolveTenantId({}), actor: adminActor('cli') };
@@ -490,20 +155,4 @@ export function resolveAuthRoot(hippoRoot, flags) {
490
155
  requireInit(hippoRoot);
491
156
  return hippoRoot;
492
157
  }
493
- /** Hook commands share one handle per store and wait at most HOOK_DB_WAIT_MS for a lock; a store still busy after that skips the hook's work with one warning, exit 0. */
494
- export async function runHookWithStores(fn) {
495
- try {
496
- return await runWithRequestStores(fn, { busyWaitMs: HOOK_DB_WAIT_MS, failFastWhenBusy: true });
497
- }
498
- catch (error) {
499
- if (!isSqliteBusy(error))
500
- throw error;
501
- noteStoreBusy('hook skipped');
502
- return undefined;
503
- }
504
- }
505
- /** Whether this session sits in the pilot's holdout arm; off at rate 0 and with no session id. */
506
- export function inPilotHoldout(hippoRoot, tenantId, sessionId, write) {
507
- return sessionPilotArm(hippoRoot, tenantId, sessionId, write) === 'holdout';
508
- }
509
158
  //# sourceMappingURL=shared.js.map
@@ -1,2 +1,3 @@
1
- export declare function cmdSlack(hippoRoot: string, args: string[], flags: Record<string, string | boolean | string[]>): void;
1
+ import { type CliFlags } from './flag-values.js';
2
+ export declare function cmdSlack(hippoRoot: string, args: string[], flags: CliFlags): Promise<void>;
2
3
  //# sourceMappingURL=slack.d.ts.map
package/dist/cli/slack.js CHANGED
@@ -1,19 +1,20 @@
1
1
  // `hippo slack`: backfill, dead-letter queue and workspace registry for the Slack connector.
2
- import { envSlackBotToken, envSlackSigningSecret, envSlackTeamId } from '../env.js';
3
- import { openHippoDb, closeHippoDb } from '../db.js';
4
- import * as api from '../api.js';
5
- import { resolveTenantId } from '../tenant.js';
6
- import { listDlq, replayDlqEntry } from '../connectors/slack/dlq.js';
2
+ import { envSlackBotToken, envSlackSigningSecret, envSlackTeamId } from '../util/env.js';
3
+ import * as api from '../api/index.js';
4
+ import { resolveTenantId } from '../store/tenant.js';
5
+ import { listDlq } from '../connectors/dlq.js';
6
+ import { replayDlqEntry, slackDlq } from '../connectors/slack/dlq.js';
7
7
  import { backfillChannel } from '../connectors/slack/backfill.js';
8
8
  import { slackHistoryFetcher } from '../connectors/slack/web-client.js';
9
9
  import { addWorkspace as addSlackWorkspace, listWorkspaces as listSlackWorkspaces, removeWorkspace as removeSlackWorkspace, } from '../connectors/slack/workspaces.js';
10
10
  import { printError } from './output.js';
11
11
  import { printSlackBackfillUsage, printSlackWorkspacesUsage } from './usage.js';
12
+ import { stringFlag } from './flag-values.js';
12
13
  // ---------------------------------------------------------------------------
13
14
  // Slack subcommands (`hippo slack backfill` / `hippo slack dlq list`)
14
15
  // ---------------------------------------------------------------------------
15
16
  function cmdSlackBackfill(hippoRoot, flags) {
16
- const channel = typeof flags['channel'] === 'string' ? flags['channel'] : undefined;
17
+ const channel = stringFlag(flags, 'channel');
17
18
  if (!channel) {
18
19
  printSlackBackfillUsage();
19
20
  process.exit(1);
@@ -27,7 +28,7 @@ function cmdSlackBackfill(hippoRoot, flags) {
27
28
  // --since is advisory in V1: the slack_cursors row drives resume, so the
28
29
  // backfill loop always picks up where it last left off. Honoured-by-cursor
29
30
  // semantics keep idempotency clean.
30
- const sinceIso = flags['since'];
31
+ const sinceIso = stringFlag(flags, 'since');
31
32
  void sinceIso;
32
33
  const fetcher = slackHistoryFetcher(token);
33
34
  const ctx = {
@@ -49,19 +50,12 @@ function cmdSlackBackfill(hippoRoot, flags) {
49
50
  });
50
51
  }
51
52
  function cmdSlackDlqList(hippoRoot, _flags) {
52
- const db = openHippoDb(hippoRoot);
53
- try {
54
- const tenantId = resolveTenantId({});
55
- const items = listDlq(db, { tenantId });
56
- for (const it of items) {
57
- console.log(`${it.id}\t${it.receivedAt}\t${it.error}`);
58
- }
59
- }
60
- finally {
61
- closeHippoDb(db);
53
+ const items = listDlq(slackDlq, hippoRoot, { tenantId: resolveTenantId({}) });
54
+ for (const it of items) {
55
+ console.log(`${it.id}\t${it.receivedAt}\t${it.error}`);
62
56
  }
63
57
  }
64
- function cmdSlackDlqReplay(hippoRoot, args, flags) {
58
+ async function cmdSlackDlqReplay(hippoRoot, args, flags) {
65
59
  const idArg = args[2];
66
60
  if (!idArg) {
67
61
  printError('Usage: hippo slack dlq replay <id> [--force]');
@@ -73,7 +67,7 @@ function cmdSlackDlqReplay(hippoRoot, args, flags) {
73
67
  process.exit(1);
74
68
  }
75
69
  const force = flags.force === true;
76
- const result = replayDlqEntry({ hippoRoot }, id, {
70
+ const result = await replayDlqEntry({ hippoRoot }, id, {
77
71
  force,
78
72
  signingSecret: envSlackSigningSecret(),
79
73
  });
@@ -84,57 +78,39 @@ function cmdSlackDlqReplay(hippoRoot, args, flags) {
84
78
  console.log(`replay ok: status=${result.status} memory_id=${result.memoryId ?? '(none)'} retry_count=${result.retryCount}`);
85
79
  }
86
80
  function cmdSlackWorkspacesAdd(hippoRoot, flags) {
87
- const teamId = typeof flags['team'] === 'string' ? flags['team'].trim() : '';
88
- const tenantId = typeof flags['tenant'] === 'string' ? flags['tenant'].trim() : '';
81
+ const teamId = (stringFlag(flags, 'team') ?? '').trim();
82
+ const tenantId = (stringFlag(flags, 'tenant') ?? '').trim();
89
83
  if (!teamId || !tenantId) {
90
84
  printError('Usage: hippo slack workspaces add --team <T> --tenant <t>');
91
85
  process.exit(1);
92
86
  }
93
- const db = openHippoDb(hippoRoot);
94
- try {
95
- const ws = addSlackWorkspace(db, { teamId, tenantId });
96
- console.log(`added: ${ws.teamId} -> ${ws.tenantId} (${ws.addedAt})`);
97
- }
98
- finally {
99
- closeHippoDb(db);
100
- }
87
+ const ws = addSlackWorkspace(hippoRoot, { teamId, tenantId });
88
+ console.log(`added: ${ws.teamId} -> ${ws.tenantId} (${ws.addedAt})`);
101
89
  }
102
90
  function cmdSlackWorkspacesList(hippoRoot) {
103
- const db = openHippoDb(hippoRoot);
104
- try {
105
- const items = listSlackWorkspaces(db);
106
- if (items.length === 0) {
107
- console.log('(no registered workspaces; routing via HIPPO_TENANT fallback)');
108
- return;
109
- }
110
- for (const ws of items) {
111
- console.log(`${ws.teamId}\t${ws.tenantId}\t${ws.addedAt}`);
112
- }
91
+ const items = listSlackWorkspaces(hippoRoot);
92
+ if (items.length === 0) {
93
+ console.log('(no registered workspaces; routing via HIPPO_TENANT fallback)');
94
+ return;
113
95
  }
114
- finally {
115
- closeHippoDb(db);
96
+ for (const ws of items) {
97
+ console.log(`${ws.teamId}\t${ws.tenantId}\t${ws.addedAt}`);
116
98
  }
117
99
  }
118
100
  function cmdSlackWorkspacesRemove(hippoRoot, flags) {
119
- const teamId = typeof flags['team'] === 'string' ? flags['team'].trim() : '';
101
+ const teamId = (stringFlag(flags, 'team') ?? '').trim();
120
102
  if (!teamId) {
121
103
  printError('Usage: hippo slack workspaces remove --team <T>');
122
104
  process.exit(1);
123
105
  }
124
- const db = openHippoDb(hippoRoot);
125
- try {
126
- const removed = removeSlackWorkspace(db, teamId);
127
- if (!removed) {
128
- printError(`no workspace registered for team ${teamId}`);
129
- process.exit(1);
130
- }
131
- console.log(`removed: ${teamId}`);
132
- }
133
- finally {
134
- closeHippoDb(db);
106
+ const removed = removeSlackWorkspace(hippoRoot, teamId);
107
+ if (!removed) {
108
+ printError(`no workspace registered for team ${teamId}`);
109
+ process.exit(1);
135
110
  }
111
+ console.log(`removed: ${teamId}`);
136
112
  }
137
- export function cmdSlack(hippoRoot, args, flags) {
113
+ export async function cmdSlack(hippoRoot, args, flags) {
138
114
  const sub = args[0];
139
115
  if (sub === 'backfill') {
140
116
  cmdSlackBackfill(hippoRoot, flags);
@@ -145,7 +121,7 @@ export function cmdSlack(hippoRoot, args, flags) {
145
121
  return;
146
122
  }
147
123
  if (sub === 'dlq' && args[1] === 'replay') {
148
- cmdSlackDlqReplay(hippoRoot, args, flags);
124
+ await cmdSlackDlqReplay(hippoRoot, args, flags);
149
125
  return;
150
126
  }
151
127
  if (sub === 'workspaces') {
@@ -0,0 +1,4 @@
1
+ import type * as api from '../api/index.js';
2
+ /** The lines `hippo sleep` prints for an api.sleep result; pure, so the snapshot tests read them without a console spy. */
3
+ export declare function sleepResultLines(result: api.SleepResult): string[];
4
+ //# sourceMappingURL=sleep-render.d.ts.map
@@ -0,0 +1,61 @@
1
+ // The text `hippo sleep` prints for an api.sleep result, kept pure so tests read the lines directly.
2
+ import { renderAmbientSummary } from '../core/ambient.js';
3
+ /** The lines `hippo sleep` prints for an api.sleep result; pure, so the snapshot tests read them without a console spy. */
4
+ export function sleepResultLines(result) {
5
+ return [...sleepCountLines(result), ...(result.dryRun ? ['\n(dry run - nothing written)'] : []), ...sleepDedupeAndAuditLines(result), ...sleepShareAndGraphLines(result)];
6
+ }
7
+ function sleepCountLines(result) {
8
+ const lines = [`Running consolidation${result.dryRun ? ' (dry run)' : ''}...`, `\nResults:`, ` Active memories: ${result.active}`, ` Removed (decayed): ${result.removed}`];
9
+ // Only when dormant.enabled moved something, so every other render stays byte-identical.
10
+ if (result.dormant !== undefined && result.dormant > 0) {
11
+ lines.push(` Kept dormant: ${result.dormant} (hippo dormant to list)`);
12
+ }
13
+ if (result.dormantExpired !== undefined && result.dormantExpired > 0) {
14
+ lines.push(` Expired dormant: ${result.dormantExpired} (past dormant.retentionDays)`);
15
+ }
16
+ lines.push(` Merged episodic: ${result.mergedEpisodic}`, ` New semantic: ${result.newSemantic}`);
17
+ if (result.details && result.details.length > 0)
18
+ lines.push('\nDetails:', ...result.details);
19
+ return lines;
20
+ }
21
+ function sleepDedupeAndAuditLines(result) {
22
+ const lines = [];
23
+ if (result.deduped && result.deduped.removed > 0) {
24
+ const { removed, semDups, epiDups, crossDups } = result.deduped;
25
+ const parts = [];
26
+ if (semDups > 0)
27
+ parts.push(`${semDups} redundant semantic patterns`);
28
+ if (epiDups > 0)
29
+ parts.push(`${epiDups} duplicate episodic lessons`);
30
+ if (crossDups > 0)
31
+ parts.push(`${crossDups} cross-layer duplicates`);
32
+ lines.push(`\n${result.dryRun ? 'Would dedupe' : 'Deduped'} ${removed} duplicates (${parts.join(', ')}). ${result.dryRun ? 'Would keep' : 'Kept'} stronger copies.`);
33
+ }
34
+ if (result.audit) {
35
+ if (result.audit.errorsRemoved > 0) {
36
+ lines.push(`\nAudit: ${result.dryRun ? 'would remove' : 'removed'} ${result.audit.errorsRemoved} junk memories (too short/empty).`);
37
+ }
38
+ if (result.audit.warningCount > 0) {
39
+ lines.push(`Audit: ${result.audit.warningCount} low-quality memories detected (run \`hippo audit\` for details).`);
40
+ }
41
+ }
42
+ return lines;
43
+ }
44
+ function sleepShareAndGraphLines(result) {
45
+ const lines = [];
46
+ if (result.shared !== undefined && result.shared > 0) {
47
+ lines.push(`\nAuto-shared ${result.shared} high-value memories to global store.`);
48
+ }
49
+ if (result.secretSkipped !== undefined && result.secretSkipped > 0) {
50
+ // The secret veto is never silent.
51
+ lines.push(`\nAuto-share: withheld ${result.secretSkipped} secret-flagged ${result.secretSkipped === 1 ? 'memory' : 'memories'} (secret veto).`);
52
+ }
53
+ if (result.ambient)
54
+ lines.push(`\n${renderAmbientSummary(result.ambient)}`);
55
+ if (result.graph && result.graph.tenants > 0) {
56
+ const { tenants, entities, relations } = result.graph;
57
+ lines.push(`\nGraph: rebuilt ${tenants} tenant${tenants === 1 ? '' : 's'} (${entities} entities, ${relations} relations).`);
58
+ }
59
+ return lines;
60
+ }
61
+ //# sourceMappingURL=sleep-render.js.map