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
package/dist/cli/init.js CHANGED
@@ -1,21 +1,25 @@
1
1
  // `hippo init`: create a store and wire the detected agents' instruction files, hooks and daily runner.
2
- import { envSkipAutoIntegrations } from '../env.js';
2
+ import { envSkipAutoIntegrations } from '../util/env.js';
3
3
  import * as path from 'path';
4
4
  import * as fs from 'fs';
5
5
  import * as os from 'os';
6
6
  import { installJsonHooks } from '../hooks/json-hooks.js';
7
+ import { writeFileAtomic } from '../util/atomic-write.js';
7
8
  import { isCodexPresent } from '../hooks/shared.js';
8
9
  import { isCodexWrapperInstalled } from '../hooks/codex-wrapper.js';
9
10
  import { installOpencodePlugin } from '../hooks/opencode.js';
10
11
  import { isInitialized, initStore } from '../store/open.js';
11
12
  import { loadAllEntries } from '../store/entry-reads.js';
12
- import { isGitRepo } from '../autolearn.js';
13
+ import { isGitRepo } from '../learn/autolearn.js';
13
14
  import { currentMachine, importForStore, importProjectMemories, importUserMemories } from '../agent-memories/sync.js';
14
15
  import { emptyReport, mergeReports } from '../agent-memories/report.js';
15
- import { getGlobalRoot, initGlobal } from '../shared.js';
16
- import { registerWorkspace } from '../scheduler.js';
17
- import { printAgentImport, installCodexMemoryHooks, setupDailySchedule, learnFromRepo, skipLearnOnSharedStore, warnClaudeSettingsUnusable } from './shared.js';
18
- import { HOOK_MARKERS, HOOKS, hippoBlock } from './hook-blocks.js';
16
+ import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
17
+ import { registerWorkspace } from './scheduler.js';
18
+ import { stringFlag } from './flag-values.js';
19
+ import { printAgentImport } from './print.js';
20
+ import { installCodexMemoryHooks, setupDailySchedule, warnClaudeSettingsUnusable } from './install-steps.js';
21
+ import { learnFromRepo, skipLearnOnSharedStore } from './shared.js';
22
+ import { HOOK_MARKERS, HOOKS, hippoBlock } from '../hooks/hook-blocks.js';
19
23
  function scanForGitRepos(rootDir, maxDepth = 2) {
20
24
  const repos = [];
21
25
  function walk(dir, depth) {
@@ -44,6 +48,51 @@ function scanForGitRepos(rootDir, maxDepth = 2) {
44
48
  walk(rootDir, 0);
45
49
  return repos;
46
50
  }
51
+ /** Creates the repo's store when absent and registers it; returns whether it already existed. */
52
+ function initScannedRepo(repo, globalRoot) {
53
+ const repoHippo = path.join(repo, '.hippo');
54
+ const alreadyExists = isInitialized(repoHippo);
55
+ if (!alreadyExists) {
56
+ initStore(repoHippo);
57
+ }
58
+ registerWorkspace(globalRoot, repo);
59
+ return alreadyExists;
60
+ }
61
+ /** Seeds one scanned repo from git history and its agents' notes, unless --no-learn. */
62
+ function learnScannedRepo(repo, seedDays, learn, machine, agentImport) {
63
+ const repoHippo = path.join(repo, '.hippo');
64
+ let added = 0;
65
+ let lowInfo = 0;
66
+ if (learn && isGitRepo(repo)) {
67
+ const result = learnFromRepo(repoHippo, repo, seedDays, path.basename(repo));
68
+ added = result.added;
69
+ lowInfo = result.lowInfo;
70
+ }
71
+ if (learn)
72
+ mergeReports(agentImport, importProjectMemories(repoHippo, { machine }));
73
+ return { added, lowInfo };
74
+ }
75
+ function installScanHooks(repos) {
76
+ // User-level hooks only: a hippo block in each repo's CLAUDE.md or AGENTS.md would leave a diff in every repo.
77
+ const agents = detectAgentHooks(repos);
78
+ if (agents.length === 0) {
79
+ console.log(' No agent config found in these repositories. Run `hippo setup` to add hooks for the agents on this machine.');
80
+ }
81
+ installUserLevelHooks(agents, true);
82
+ }
83
+ function initGlobalFirst() {
84
+ const globalRoot = getGlobalRoot();
85
+ if (!isInitialized(globalRoot)) {
86
+ initGlobal();
87
+ console.log(`Initialized global store at ${globalRoot}\n`);
88
+ }
89
+ return globalRoot;
90
+ }
91
+ function printScanSummary(repoCount, totalLessons, totalLowInfo) {
92
+ console.log(`\n${repoCount} repositories, ${totalLessons} new lessons learned` +
93
+ (totalLowInfo > 0 ? `, ${totalLowInfo} low-information subject(s) dropped` : '') +
94
+ '.');
95
+ }
47
96
  function cmdInitScan(scanDir, flags) {
48
97
  const resolved = path.resolve(scanDir);
49
98
  console.log(`Scanning ${resolved} for git repositories...\n`);
@@ -53,12 +102,7 @@ function cmdInitScan(scanDir, flags) {
53
102
  return;
54
103
  }
55
104
  console.log(`Found ${repos.length} repositories:\n`);
56
- // Init global store first
57
- const globalRoot = getGlobalRoot();
58
- if (!isInitialized(globalRoot)) {
59
- initGlobal();
60
- console.log(`Initialized global store at ${globalRoot}\n`);
61
- }
105
+ const globalRoot = initGlobalFirst();
62
106
  let totalLessons = 0;
63
107
  // Rolled up so the cross-repo summary reports the gate too. Each repo
64
108
  // already prints its own count inside learnFromRepo, but the aggregate
@@ -68,67 +112,63 @@ function cmdInitScan(scanDir, flags) {
68
112
  const seedDays = parseInt(String(flags['days'] ?? '365'), 10);
69
113
  const machine = currentMachine();
70
114
  const agentImport = emptyReport();
115
+ const learn = !flags['no-learn'];
71
116
  for (const repo of repos) {
72
- const name = path.basename(repo);
73
- const repoHippo = path.join(repo, '.hippo');
74
- const alreadyExists = isInitialized(repoHippo);
75
- if (!alreadyExists) {
76
- initStore(repoHippo);
77
- }
78
- registerWorkspace(globalRoot, repo);
79
- // Learn from git history
80
- let added = 0;
81
- if (!flags['no-learn'] && isGitRepo(repo)) {
82
- const result = learnFromRepo(repoHippo, repo, seedDays, name);
83
- added = result.added;
84
- totalLessons += added;
85
- totalLowInfo += result.lowInfo;
86
- }
87
- if (!flags['no-learn'])
88
- mergeReports(agentImport, importProjectMemories(repoHippo, { machine }));
117
+ const alreadyExists = initScannedRepo(repo, globalRoot);
118
+ const { added, lowInfo } = learnScannedRepo(repo, seedDays, learn, machine, agentImport);
119
+ totalLessons += added;
120
+ totalLowInfo += lowInfo;
89
121
  const status = alreadyExists ? 'existing' : 'new';
90
- const entries = loadAllEntries(repoHippo);
91
- console.log(` ${name.padEnd(25)} ${status.padEnd(10)} ${entries.length} memories${added > 0 ? ` (+${added} from git)` : ''}`);
122
+ const entries = loadAllEntries(path.join(repo, '.hippo'));
123
+ console.log(` ${path.basename(repo).padEnd(25)} ${status.padEnd(10)} ${entries.length} memories${added > 0 ? ` (+${added} from git)` : ''}`);
92
124
  }
93
- console.log(`\n${repos.length} repositories, ${totalLessons} new lessons learned` +
94
- (totalLowInfo > 0 ? `, ${totalLowInfo} low-information subject(s) dropped` : '') +
95
- '.');
96
- if (!flags['no-learn']) {
125
+ printScanSummary(repos.length, totalLessons, totalLowInfo);
126
+ if (learn) {
97
127
  mergeReports(agentImport, importUserMemories(globalRoot, { machine }));
98
128
  printAgentImport(agentImport, '');
99
129
  }
100
130
  console.log(`Global store: ${globalRoot}`);
101
- if (initInstallsIntegrations(flags)) {
102
- // User-level hooks only: a hippo block in each repo's CLAUDE.md or AGENTS.md would leave a diff in every repo.
103
- const agents = detectAgentHooks(repos);
104
- if (agents.length === 0) {
105
- console.log(' No agent config found in these repositories. Run `hippo setup` to add hooks for the agents on this machine.');
106
- }
107
- installUserLevelHooks(agents, true);
108
- }
131
+ if (initInstallsIntegrations(flags))
132
+ installScanHooks(repos);
109
133
  if (!flags['no-schedule']) {
110
134
  setupDailySchedule(globalRoot);
111
135
  }
112
136
  console.log(`\nRun \`hippo sleep\` in any project to consolidate and auto-share to global.`);
113
137
  }
138
+ function initGlobalOnly(flags) {
139
+ const globalRoot = getGlobalRoot();
140
+ if (isInitialized(globalRoot)) {
141
+ console.log('Already initialized global store at', globalRoot);
142
+ }
143
+ else {
144
+ initGlobal();
145
+ console.log('Initialized global Hippo store at', globalRoot);
146
+ }
147
+ if (!flags['no-learn'])
148
+ printAgentImport(importUserMemories(globalRoot, { machine: currentMachine() }));
149
+ }
150
+ function seedFromGitHistory(hippoRoot) {
151
+ if (!isGitRepo(process.cwd()))
152
+ return;
153
+ const seedDays = 30;
154
+ console.log(`\n Seeding memories from last ${seedDays} days of git history...`);
155
+ const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), seedDays);
156
+ if (added > 0) {
157
+ console.log(` Learned ${added} lessons from git (${skipped} duplicates skipped).`);
158
+ }
159
+ else {
160
+ console.log(` No matching commits found in git history.`);
161
+ }
162
+ }
114
163
  export function cmdInit(hippoRoot, flags) {
115
164
  // Handle --scan mode
116
165
  if (flags['scan']) {
117
- const scanDir = typeof flags['scan'] === 'string' ? flags['scan'] : os.homedir();
166
+ const scanDir = stringFlag(flags, 'scan') ?? os.homedir();
118
167
  cmdInitScan(scanDir, flags);
119
168
  return;
120
169
  }
121
170
  if (flags['global']) {
122
- const globalRoot = getGlobalRoot();
123
- if (isInitialized(globalRoot)) {
124
- console.log('Already initialized global store at', globalRoot);
125
- }
126
- else {
127
- initGlobal();
128
- console.log('Initialized global Hippo store at', globalRoot);
129
- }
130
- if (!flags['no-learn'])
131
- printAgentImport(importUserMemories(globalRoot, { machine: currentMachine() }));
171
+ initGlobalOnly(flags);
132
172
  return;
133
173
  }
134
174
  const alreadyExists = isInitialized(hippoRoot);
@@ -152,19 +192,8 @@ export function cmdInit(hippoRoot, flags) {
152
192
  }
153
193
  const learn = !flags['no-learn'] && !skipLearnOnSharedStore(hippoRoot);
154
194
  // Seed with git history on first init (unless --no-learn)
155
- if (!alreadyExists && learn && !flags['global']) {
156
- if (isGitRepo(process.cwd())) {
157
- const seedDays = 30;
158
- console.log(`\n Seeding memories from last ${seedDays} days of git history...`);
159
- const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), seedDays);
160
- if (added > 0) {
161
- console.log(` Learned ${added} lessons from git (${skipped} duplicates skipped).`);
162
- }
163
- else {
164
- console.log(` No matching commits found in git history.`);
165
- }
166
- }
167
- }
195
+ if (!alreadyExists && learn && !flags['global'])
196
+ seedFromGitHistory(hippoRoot);
168
197
  // Every run, not only the first: an agent's notes change between inits.
169
198
  if (learn)
170
199
  printAgentImport(importForStore(hippoRoot, { machine: currentMachine() }));
@@ -222,7 +251,7 @@ function patchInstructionFiles(dir, agents) {
222
251
  }
223
252
  const block = `${HOOK_MARKERS.start}\n${hookDef.content}\n${HOOK_MARKERS.end}`;
224
253
  const sep = existing.endsWith('\n') ? '\n' : '\n\n';
225
- fs.writeFileSync(targetPath, existing + sep + block + '\n', 'utf8');
254
+ writeFileAtomic(targetPath, existing + sep + block + '\n');
226
255
  console.log(` Auto-installed ${hook} hook in ${hookDef.file}`);
227
256
  }
228
257
  }
@@ -237,9 +266,58 @@ function refreshShippedBlock(filePath, text, hook) {
237
266
  console.log(` Left the edited hippo block in ${name} as is; \`hippo hook install ${hook}\` replaces it.`);
238
267
  return;
239
268
  }
240
- fs.writeFileSync(filePath, `${text.slice(0, start)}${eol}${HOOKS[owner].content.replace(/\n/g, eol)}${eol}${text.slice(end)}`, 'utf8');
269
+ writeFileAtomic(filePath, `${text.slice(0, start)}${eol}${HOOKS[owner].content.replace(/\n/g, eol)}${eol}${text.slice(end)}`);
241
270
  console.log(` Refreshed the ${owner} hippo block in ${name}`);
242
271
  }
272
+ function installClaudeCodeSettingsHooks(hook) {
273
+ const result = installJsonHooks(hook);
274
+ warnClaudeSettingsUnusable(result, ' ');
275
+ if (result.installedSessionEnd) {
276
+ console.log(` Auto-installed hippo session-end SessionEnd hook in ${hook} settings`);
277
+ }
278
+ if (result.installedSessionStart) {
279
+ console.log(` Auto-installed hippo last-sleep SessionStart hook in ${hook} settings`);
280
+ }
281
+ if (result.installedUserPromptSubmit) {
282
+ console.log(` Auto-installed hippo pinned-inject UserPromptSubmit hook in ${hook} settings`);
283
+ }
284
+ if (result.installedPreCompact) {
285
+ console.log(` Auto-installed hippo pre-compact PreCompact hook in ${hook} settings`);
286
+ }
287
+ if (result.installedCompactResume) {
288
+ console.log(` Auto-installed hippo compact-resume SessionStart(compact) hook in ${hook} settings`);
289
+ }
290
+ if (result.installedPostCompact) {
291
+ console.log(` Auto-installed hippo post-compact PostCompact hook in ${hook} settings`);
292
+ }
293
+ if (result.installedCaptureError) {
294
+ console.log(` Auto-installed hippo capture-error PostToolUseFailure hook in ${hook} settings`);
295
+ }
296
+ if (result.migratedFromStop) {
297
+ console.log(` Migrated legacy Stop hook → SessionEnd (no longer runs every turn)`);
298
+ }
299
+ if (result.migratedSplitSessionEnd) {
300
+ console.log(` Migrated split sleep+capture SessionEnd entries → single detached hippo session-end`);
301
+ }
302
+ else if (result.migratedLegacySessionEnd) {
303
+ console.log(` Migrated legacy SessionEnd entry to the new detached form`);
304
+ }
305
+ }
306
+ function installOpencodeUserPlugin() {
307
+ // opencode uses a TS plugin, not Claude Code's JSON-hook schema.
308
+ // See OPENCODE_PLUGIN_SOURCE in src/hooks.ts for the plugin file
309
+ // content + design rationale.
310
+ const result = installOpencodePlugin();
311
+ if (result.installed) {
312
+ console.log(` Auto-installed hippo opencode plugin -> ${result.pluginPath}`);
313
+ }
314
+ if (result.migratedLegacyHooks) {
315
+ console.log(` Removed legacy Claude Code-style hooks block from opencode.json — opencode can now launch`);
316
+ }
317
+ if (result.jsonRepairFailed) {
318
+ console.log(` WARNING: opencode.json is unparseable; legacy hooks block could not be auto-removed. Fix the file manually.`);
319
+ }
320
+ }
243
321
  /** Claude Code settings hooks, Codex's hooks.json and the OpenCode plugin, under the home directory; idempotent, so re-running init adds newer hooks. */
244
322
  function installUserLevelHooks(agents, codexHint) {
245
323
  for (const hook of agents) {
@@ -253,55 +331,10 @@ function installUserLevelHooks(agents, codexHint) {
253
331
  // For Claude Code, also install SessionEnd+SessionStart entries in its
254
332
  // settings.json. Keeps `hippo init` in lockstep with `hippo hook install
255
333
  // claude-code` and `hippo setup`.
256
- if (hook === 'claude-code') {
257
- const result = installJsonHooks(hook);
258
- warnClaudeSettingsUnusable(result, ' ');
259
- if (result.installedSessionEnd) {
260
- console.log(` Auto-installed hippo session-end SessionEnd hook in ${hook} settings`);
261
- }
262
- if (result.installedSessionStart) {
263
- console.log(` Auto-installed hippo last-sleep SessionStart hook in ${hook} settings`);
264
- }
265
- if (result.installedUserPromptSubmit) {
266
- console.log(` Auto-installed hippo pinned-inject UserPromptSubmit hook in ${hook} settings`);
267
- }
268
- if (result.installedPreCompact) {
269
- console.log(` Auto-installed hippo pre-compact PreCompact hook in ${hook} settings`);
270
- }
271
- if (result.installedCompactResume) {
272
- console.log(` Auto-installed hippo compact-resume SessionStart(compact) hook in ${hook} settings`);
273
- }
274
- if (result.installedPostCompact) {
275
- console.log(` Auto-installed hippo post-compact PostCompact hook in ${hook} settings`);
276
- }
277
- if (result.installedCaptureError) {
278
- console.log(` Auto-installed hippo capture-error PostToolUseFailure hook in ${hook} settings`);
279
- }
280
- if (result.migratedFromStop) {
281
- console.log(` Migrated legacy Stop hook → SessionEnd (no longer runs every turn)`);
282
- }
283
- if (result.migratedSplitSessionEnd) {
284
- console.log(` Migrated split sleep+capture SessionEnd entries → single detached hippo session-end`);
285
- }
286
- else if (result.migratedLegacySessionEnd) {
287
- console.log(` Migrated legacy SessionEnd entry to the new detached form`);
288
- }
289
- }
290
- else if (hook === 'opencode') {
291
- // opencode uses a TS plugin, not Claude Code's JSON-hook schema.
292
- // See OPENCODE_PLUGIN_SOURCE in src/hooks.ts for the plugin file
293
- // content + design rationale.
294
- const result = installOpencodePlugin();
295
- if (result.installed) {
296
- console.log(` Auto-installed hippo opencode plugin -> ${result.pluginPath}`);
297
- }
298
- if (result.migratedLegacyHooks) {
299
- console.log(` Removed legacy Claude Code-style hooks block from opencode.json — opencode can now launch`);
300
- }
301
- if (result.jsonRepairFailed) {
302
- console.log(` WARNING: opencode.json is unparseable; legacy hooks block could not be auto-removed. Fix the file manually.`);
303
- }
304
- }
334
+ if (hook === 'claude-code')
335
+ installClaudeCodeSettingsHooks(hook);
336
+ else if (hook === 'opencode')
337
+ installOpencodeUserPlugin();
305
338
  }
306
339
  }
307
340
  //# sourceMappingURL=init.js.map
@@ -0,0 +1,7 @@
1
+ import { type InstallResult } from '../hooks/json-hooks.js';
2
+ /** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
3
+ export declare function installCodexMemoryHooks(indent: string): void;
4
+ /** 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. */
5
+ export declare function warnClaudeSettingsUnusable(result: Pick<InstallResult, 'settingsPath' | 'invalidJson'>, indent: string, action?: 'install' | 'uninstall'): boolean;
6
+ export declare function setupDailySchedule(globalRoot: string): void;
7
+ //# sourceMappingURL=install-steps.d.ts.map
@@ -0,0 +1,110 @@
1
+ // The init and setup steps that touch the machine: Codex hooks, the settings.json warning and the daily schedule.
2
+ import * as path from 'path';
3
+ import { execFileSync, execSync } from 'child_process';
4
+ import { installJsonHooks } from '../hooks/json-hooks.js';
5
+ import { CODEX_TRUST_LINE } from '../hooks/shared.js';
6
+ import { DAILY_TASK_NAME, buildDailyRunnerCommand, buildSchtasksCreateArgs, buildWindowsTaskRun, quoteInsideWindowsArg } from './scheduler.js';
7
+ /** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
8
+ export function installCodexMemoryHooks(indent) {
9
+ const result = installJsonHooks('codex');
10
+ if (result.invalidJson) {
11
+ console.log(`${indent}WARNING: ${result.settingsPath} is not a hooks file hippo can merge into; fix it, then run \`hippo hook install codex\`.`);
12
+ return;
13
+ }
14
+ const added = [
15
+ result.installedUserPromptSubmit ? 'UserPromptSubmit' : '',
16
+ result.installedCompactResume ? 'SessionStart(compact)' : '',
17
+ ].filter(Boolean);
18
+ console.log(added.length > 0
19
+ ? `${indent}Installed hippo's Codex memory hooks (${added.join(', ')}) in ${result.settingsPath}`
20
+ : `${indent}hippo's Codex memory hooks already in ${result.settingsPath}`);
21
+ console.log(`${indent}${CODEX_TRUST_LINE}`);
22
+ }
23
+ /** 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. */
24
+ export function warnClaudeSettingsUnusable(result, indent, action = 'install') {
25
+ if (!result.invalidJson)
26
+ return false;
27
+ 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\`.`);
28
+ return true;
29
+ }
30
+ /**
31
+ * Set up a machine-level daily runner that sweeps all registered Hippo
32
+ * workspaces.
33
+ * Linux/macOS: writes to user crontab.
34
+ * Windows: creates a scheduled task.
35
+ * Skips if already installed.
36
+ */
37
+ /** Bound on each schtasks and crontab call, so a scheduler that never answers cannot hang `hippo init` or `hippo setup`. */
38
+ const SCHEDULER_CALL_TIMEOUT_MS = 30_000;
39
+ /** Node kills a child at its timeout and reports ETIMEDOUT; every other failure here means the scheduler refused or is missing. */
40
+ function schedulerTimedOut(err) {
41
+ return err instanceof Error && 'code' in err && err.code === 'ETIMEDOUT';
42
+ }
43
+ function warnSchedulerTimedOut(command) {
44
+ console.log(` ${command} did not answer within ${SCHEDULER_CALL_TIMEOUT_MS / 1000} s and was stopped, so the daily runner is not scheduled.`);
45
+ }
46
+ export function setupDailySchedule(globalRoot) {
47
+ const runnerDir = path.resolve(globalRoot);
48
+ // Reject paths with characters that could break shell/crontab quoting
49
+ // (backslash is normal on Windows, only dangerous in Unix shell/crontab)
50
+ const unsafeChars = process.platform === 'win32' ? /["`$%\n\r]/ : /["`$\n\r\\]/;
51
+ if (unsafeChars.test(runnerDir)) {
52
+ console.log(` Skipping schedule: runner path contains unsafe characters.`);
53
+ return;
54
+ }
55
+ const isWindows = process.platform === 'win32';
56
+ const taskName = DAILY_TASK_NAME;
57
+ const cmd = buildDailyRunnerCommand(runnerDir);
58
+ if (isWindows)
59
+ scheduleOnWindows(taskName, cmd);
60
+ else
61
+ scheduleOnCrontab(taskName, cmd);
62
+ }
63
+ function scheduleOnWindows(taskName, cmd) {
64
+ // Check if task already exists
65
+ try {
66
+ const existing = execSync(`schtasks /query /tn "${taskName}" 2>nul`, { encoding: 'utf-8', windowsHide: true, timeout: SCHEDULER_CALL_TIMEOUT_MS });
67
+ if (existing.includes(taskName)) {
68
+ return; // already scheduled
69
+ }
70
+ }
71
+ catch (err) {
72
+ // A non-zero exit means the task does not exist yet, so it is created below.
73
+ if (schedulerTimedOut(err))
74
+ warnSchedulerTimedOut('schtasks /query');
75
+ }
76
+ try {
77
+ execFileSync('schtasks', buildSchtasksCreateArgs(taskName, cmd), { stdio: 'pipe', windowsHide: true, timeout: SCHEDULER_CALL_TIMEOUT_MS });
78
+ console.log(` Scheduled machine-level daily runner (6:15am) via Task Scheduler: ${taskName}`);
79
+ }
80
+ catch (err) {
81
+ if (schedulerTimedOut(err))
82
+ warnSchedulerTimedOut('schtasks /create');
83
+ // No admin rights or schtasks unavailable, fall back to printing instructions
84
+ console.log(` To schedule the machine-level daily runner, run:`);
85
+ console.log(` schtasks /create /tn "${taskName}" /tr "${quoteInsideWindowsArg(buildWindowsTaskRun(cmd))}" /sc daily /st 06:15`);
86
+ }
87
+ }
88
+ function scheduleOnCrontab(taskName, cmd) {
89
+ // Unix: check crontab for existing entry
90
+ const marker = `# hippo:${taskName}`;
91
+ try {
92
+ const existing = execSync('crontab -l 2>/dev/null', { encoding: 'utf-8', windowsHide: true, timeout: SCHEDULER_CALL_TIMEOUT_MS });
93
+ if (existing.includes(marker)) {
94
+ return; // already scheduled
95
+ }
96
+ const cronLine = `15 6 * * * ${cmd} ${marker}`;
97
+ const newCrontab = existing.trimEnd() + '\n' + cronLine + '\n';
98
+ execSync('crontab -', { input: newCrontab, stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true, timeout: SCHEDULER_CALL_TIMEOUT_MS });
99
+ console.log(` Scheduled machine-level daily runner (6:15am) via crontab`);
100
+ }
101
+ catch (err) {
102
+ if (schedulerTimedOut(err))
103
+ warnSchedulerTimedOut('crontab');
104
+ // No crontab or no permission: print the line for the user to add by hand.
105
+ const cronLine = `15 6 * * * ${cmd}`;
106
+ console.log(` To schedule the machine-level daily runner, add to crontab (crontab -e):`);
107
+ console.log(` ${cronLine}`);
108
+ }
109
+ }
110
+ //# sourceMappingURL=install-steps.js.map
@@ -1,6 +1,7 @@
1
+ import { type CliFlags } from './flag-values.js';
1
2
  /** The line the user sees when the last sleep failed, a spool step hit an unexpected error, or the spool holds `.bad` files; null when none did. */
2
3
  export declare function sleepProblems(logText: string, bad: number): string | null;
3
4
  /** Prints the SessionEnd sleep log on stderr, then clears it. In a hook, stdout carries only `systemMessage`,
4
5
  * because Claude Code shows that to the user and adds any other SessionStart stdout to the model's context. */
5
- export declare function cmdLastSleep(hippoRoot: string, flags: Record<string, string | boolean | string[]>, out?: 'hook' | 'terminal'): void;
6
+ export declare function cmdLastSleep(hippoRoot: string, flags: CliFlags, out?: 'hook' | 'terminal'): void;
6
7
  //# sourceMappingURL=last-sleep.d.ts.map
@@ -1,13 +1,13 @@
1
1
  // `hippo last-sleep`: the previous session's sleep log for the debug log, and one problems line for the user.
2
2
  import * as fs from 'fs';
3
- import { isStringValue } from '../capture-contract.js';
4
- import { REPLAY_AFTER_MS } from '../compaction-record.js';
5
- import { SPOOL_PROBLEM, spoolCounts } from '../compaction-spool.js';
3
+ import { isStringValue } from '../core/capture-contract.js';
4
+ import { REPLAY_AFTER_MS } from '../capture/compaction-record.js';
5
+ import { SPOOL_PROBLEM, spoolCounts } from '../capture/compaction-spool.js';
6
6
  import { defaultSleepLogPath } from '../hooks/shared.js';
7
- import { errorMessage } from '../log.js';
8
- import { truncateCodePointSafe } from '../transcript-tail.js';
7
+ import { errorMessage, log } from '../util/log.js';
8
+ import { truncateCodePointSafe } from '../util/transcript-tail.js';
9
9
  import { printError } from './output.js';
10
- import { hookStoreRoot } from './shared.js';
10
+ import { hookStoreRoot } from './hook-runtime.js';
11
11
  const SLEEP_FAILED = '[hippo] sleep failed: ';
12
12
  const FAILURE_CHARS = 120;
13
13
  /** The line the user sees when the last sleep failed, a spool step hit an unexpected error, or the spool holds `.bad` files; null when none did. */
@@ -62,7 +62,9 @@ export function cmdLastSleep(hippoRoot, flags, out = process.stdout.isTTY ? 'ter
62
62
  try {
63
63
  fs.unlinkSync(logPath);
64
64
  }
65
- catch { /* non-fatal */ }
65
+ catch (err) {
66
+ log.debug(`last-sleep log not removed, it shows again next session: ${errorMessage(err)}`);
67
+ }
66
68
  }
67
69
  }
68
70
  //# sourceMappingURL=last-sleep.js.map
@@ -1,5 +1,6 @@
1
- import { type EmbeddingProvider } from '../embedding-provider.js';
2
- export declare function cmdRefine(hippoRoot: string, flags: Record<string, string | boolean | string[]>): Promise<void>;
3
- export declare function cmdDedup(hippoRoot: string, flags: Record<string, string | boolean | string[]>): void;
4
- export declare function cmdEmbed(hippoRoot: string, flags: Record<string, string | boolean | string[]>, given?: EmbeddingProvider): Promise<void>;
1
+ import { type EmbeddingProvider } from '../store/embeddings/provider.js';
2
+ import { type CliFlags } from './flag-values.js';
3
+ export declare function cmdRefine(hippoRoot: string, flags: CliFlags): Promise<void>;
4
+ export declare function cmdDedup(hippoRoot: string, flags: CliFlags): void;
5
+ export declare function cmdEmbed(hippoRoot: string, flags: CliFlags, given?: EmbeddingProvider): Promise<void>;
5
6
  //# sourceMappingURL=maintenance.d.ts.map
@@ -1,16 +1,20 @@
1
1
  // Store upkeep verbs: `hippo refine`, `hippo dedup` and `hippo embed`.
2
- import { envAnthropicApiKey } from '../env.js';
2
+ import { envAnthropicApiKey } from '../util/env.js';
3
3
  import { loadAllEntries } from '../store/entry-reads.js';
4
- import { deduplicateStore } from '../dedupe.js';
5
- import { embedAll, loadEmbeddingIndex } from '../embeddings.js';
6
- import { resolveEmbeddingProvider } from '../embedding-provider.js';
7
- import { resetAllPhysicsState } from '../physics-state.js';
8
- import { loadConfig } from '../config.js';
9
- import { openHippoDb, closeHippoDb } from '../db.js';
10
- import { resolveTenantId } from '../tenant.js';
11
- import { refineStore } from '../refine-llm.js';
4
+ import { deduplicateStore } from '../consolidate/dedupe.js';
5
+ import { embedAll, loadEmbeddingIndex } from '../store/embeddings/index.js';
6
+ import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
7
+ import { resetStoredParticles } from '../store/vector-writes.js';
8
+ import { loadConfig } from '../core/config.js';
9
+ import { resolveTenantId } from '../store/tenant.js';
10
+ import { refineStore } from './refine-llm.js';
12
11
  import { printError } from './output.js';
12
+ import { boolFlag } from './flag-values.js';
13
13
  import { requireInit, resolveAuthRoot } from './shared.js';
14
+ import { errorMessage } from '../util/log.js';
15
+ const MAX_FAILED_SHOWN = 5;
16
+ const MAX_PAIRS_SHOWN = 15;
17
+ const PAIR_PREVIEW_CHARS = 90;
14
18
  export async function cmdRefine(hippoRoot, flags) {
15
19
  requireInit(hippoRoot);
16
20
  const apiKey = envAnthropicApiKey();
@@ -18,11 +22,11 @@ export async function cmdRefine(hippoRoot, flags) {
18
22
  printError('hippo refine needs ANTHROPIC_API_KEY in the environment.');
19
23
  process.exit(1);
20
24
  }
21
- const dryRun = Boolean(flags['dry-run']);
22
- const all = Boolean(flags['all']);
25
+ const dryRun = boolFlag(flags, 'dry-run');
26
+ const all = boolFlag(flags, 'all');
23
27
  const limit = flags['limit'] !== undefined ? parseInt(String(flags['limit']), 10) : undefined;
24
28
  const model = flags['model'] ? String(flags['model']) : undefined;
25
- const asJson = Boolean(flags['json']);
29
+ const asJson = boolFlag(flags, 'json');
26
30
  const result = await refineStore(hippoRoot, {
27
31
  apiKey,
28
32
  model,
@@ -41,14 +45,14 @@ export async function cmdRefine(hippoRoot, flags) {
41
45
  console.log(`Failed: ${result.failed}`);
42
46
  if (result.failed > 0) {
43
47
  console.log('\nFailures:');
44
- for (const d of result.details.filter((x) => x.status === 'failed').slice(0, 5)) {
48
+ for (const d of result.details.filter((x) => x.status === 'failed').slice(0, MAX_FAILED_SHOWN)) {
45
49
  console.log(` ${d.id}: ${d.reason}`);
46
50
  }
47
51
  }
48
52
  }
49
53
  export function cmdDedup(hippoRoot, flags) {
50
54
  requireInit(hippoRoot);
51
- const dryRun = Boolean(flags['dry-run']);
55
+ const dryRun = boolFlag(flags, 'dry-run');
52
56
  if (flags['threshold'] !== undefined) {
53
57
  printError('hippo dedup: --threshold is ignored; a duplicate is the same text apart from spacing.');
54
58
  }
@@ -59,6 +63,10 @@ export function cmdDedup(hippoRoot, flags) {
59
63
  console.log('No duplicates found.');
60
64
  return;
61
65
  }
66
+ printDedupGroups(result, dryRun);
67
+ printDedupPairs(result, dryRun);
68
+ }
69
+ function printDedupGroups(result, dryRun) {
62
70
  // Group by reason
63
71
  const sameLayerSem = result.pairs.filter(p => p.keptLayer === 'semantic' && p.removedLayer === 'semantic');
64
72
  const sameLayerEpi = result.pairs.filter(p => p.keptLayer === 'episodic' && p.removedLayer === 'episodic');
@@ -73,16 +81,18 @@ export function cmdDedup(hippoRoot, flags) {
73
81
  if (crossLayer.length > 0) {
74
82
  console.log(` ${crossLayer.length} cross-layer duplicates (episodic content already consolidated into semantic)`);
75
83
  }
84
+ }
85
+ function printDedupPairs(result, dryRun) {
76
86
  // Show detailed pairs
77
87
  console.log('');
78
- const shown = result.pairs.slice(0, 15);
88
+ const shown = result.pairs.slice(0, MAX_PAIRS_SHOWN);
79
89
  for (const pair of shown) {
80
90
  const simPct = (pair.similarity * 100).toFixed(0);
81
91
  const action = dryRun ? 'Would remove' : 'Removed';
82
92
  console.log(` ${simPct}% similar | kept [${pair.keptLayer}] strength=${pair.keptStrength.toFixed(2)}`);
83
- console.log(` ${pair.keptContent.slice(0, 90)}`);
93
+ console.log(` ${pair.keptContent.slice(0, PAIR_PREVIEW_CHARS)}`);
84
94
  console.log(` ${action} [${pair.removedLayer}] strength=${pair.removedStrength.toFixed(2)}`);
85
- console.log(` ${pair.removedContent.slice(0, 90)}`);
95
+ console.log(` ${pair.removedContent.slice(0, PAIR_PREVIEW_CHARS)}`);
86
96
  console.log('');
87
97
  }
88
98
  if (result.pairs.length > 15) {
@@ -117,7 +127,7 @@ export async function cmdEmbed(hippoRoot, flags, given) {
117
127
  count = await embedAll(root, undefined, provider);
118
128
  }
119
129
  catch (err) {
120
- printError(`Embedding failed: ${err instanceof Error ? err.message : String(err)}`);
130
+ printError(`Embedding failed: ${errorMessage(err)}`);
121
131
  const partial = loadEmbeddingIndex(root);
122
132
  printError(`Partial progress saved: ${Object.keys(partial).length} embeddings on disk. Re-run \`hippo embed\` to resume.`);
123
133
  process.exitCode = 1;
@@ -135,14 +145,8 @@ export async function cmdEmbed(hippoRoot, flags, given) {
135
145
  function resetPhysics(root) {
136
146
  const entries = loadAllEntries(root);
137
147
  const embIndex = loadEmbeddingIndex(root);
138
- const db = openHippoDb(root);
139
- try {
140
- const count = resetAllPhysicsState(db, entries, embIndex);
141
- console.log(`Reset physics state: ${count} particles re-initialized from embeddings.`);
142
- }
143
- finally {
144
- closeHippoDb(db);
145
- }
148
+ const count = resetStoredParticles(root, entries, embIndex);
149
+ console.log(`Reset physics state: ${count} particles re-initialized from embeddings.`);
146
150
  }
147
151
  function printEmbedStatus(root) {
148
152
  const entries = loadAllEntries(root);
@@ -167,7 +171,7 @@ function readyEmbedProvider(root, given) {
167
171
  return resolveEmbeddingProvider(root);
168
172
  }
169
173
  catch (err) {
170
- printError(err instanceof Error ? err.message : String(err));
174
+ printError(errorMessage(err));
171
175
  return null;
172
176
  }
173
177
  })();