hippo-memory 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -9,7 +9,10 @@ export const DEFAULT_GRAPH_SEED_COUNT = 10;
9
9
  /** Recommended RRF weight for the graph stream — a CLI-only convenience default. The
10
10
  * library `graphStream.weight` option stays REQUIRED (opt-in is explicit). */
11
11
  export const DEFAULT_GRAPH_STREAM_WEIGHT = 0.5;
12
- /** Pick the top `seedCount` candidates by best lexical rank (lowest position across BM25 and dense), strength = 1/(bestRank + 1). Pure. */
12
+ /**
13
+ * Pick the top `seedCount` candidates by best lexical rank (lowest position across BM25 and dense), strength =
14
+ * 1/(bestRank + 1). Pure.
15
+ */
13
16
  export function selectGraphSeeds(bm25Ranked, cosineRanked, seedCount) {
14
17
  if (seedCount <= 0)
15
18
  return [];
@@ -29,7 +32,8 @@ export function selectGraphSeeds(bm25Ranked, cosineRanked, seedCount) {
29
32
  .slice(0, seedCount)
30
33
  .map(([index, best]) => ({ index, strength: 1 / (best + 1) }));
31
34
  }
32
- // Pass 1: take the STRONGEST reaching-seed strength per new neighbour across ALL relations at this depth before committing any to `visited`;
35
+ // Pass 1: take the STRONGEST reaching-seed strength per new neighbour across ALL relations at this depth before
36
+ // committing any to `visited`;
33
37
  // marking mid-loop would lock a node to whichever relation SQLite returned first and drop a stronger seed's later edge.
34
38
  function bestStrengthAtDepth(rels, frontierSet, visited, frontierStrength, originStrength) {
35
39
  const bestStrengthThisDepth = new Map();
@@ -91,8 +95,12 @@ function reachedEntityScores(root, tenantId, seedIds, originStrength, options) {
91
95
  }
92
96
  return reachedScore;
93
97
  }
94
- /** Accumulate per-entryIndex graph-proximity scores from ONE store's graph into `graphScore`; only seeds whose entities live in THIS store are expanded.
95
- * A neighbour's score = originSeedStrength x decay^(graph distance); the seed strength is carried unchanged along each BFS path. */
98
+ /**
99
+ * Accumulate per-entryIndex graph-proximity scores from ONE store's graph into `graphScore`; only seeds whose entities
100
+ * live in THIS store are expanded.
101
+ * A neighbour's score = originSeedStrength x decay^(graph distance); the seed strength is carried unchanged along each
102
+ * BFS path.
103
+ */
96
104
  function accumulateForRoot(root, seeds, entries, options) {
97
105
  const { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId } = options;
98
106
  if (seeds.length === 0)
@@ -107,7 +115,8 @@ function accumulateForRoot(root, seeds, entries, options) {
107
115
  const seedEntities = loadEntitiesByMemoryId(root, tenantId, [...strengthByMemId.keys()]);
108
116
  if (seedEntities.length === 0)
109
117
  return;
110
- // entityId -> origin seed strength. Seeds load by memory id so memoryId is non-null here; the guard keeps the widened (string | null) type honest.
118
+ // entityId -> origin seed strength. Seeds load by memory id so memoryId is non-null here; the guard keeps the widened
119
+ // (string | null) type honest.
111
120
  const originStrength = new Map();
112
121
  for (const e of seedEntities) {
113
122
  if (e.memoryId === null)
@@ -132,8 +141,12 @@ function accumulateForRoot(root, seeds, entries, options) {
132
141
  graphScore.set(idx, Math.max(graphScore.get(idx) ?? 0, score));
133
142
  }
134
143
  }
135
- /** Produce the graph-retrieval ranked list: `entries[]` indices by graph proximity (desc) to the lexical `seeds`; absent indices fall to rrfFuse absentRank.
136
- * Returns `[]` when there are no seeds/entries, the graph is empty, or nothing reached is in-pool, so the caller skips the 3rd fusion list. */
144
+ /**
145
+ * Produce the graph-retrieval ranked list: `entries[]` indices by graph proximity (desc) to the lexical `seeds`; absent
146
+ * indices fall to rrfFuse absentRank.
147
+ * Returns `[]` when there are no seeds/entries, the graph is empty, or nothing reached is in-pool, so the caller skips
148
+ * the 3rd fusion list.
149
+ */
137
150
  export function graphRankStream(entries, seeds, opts) {
138
151
  if (seeds.length === 0 || entries.length === 0)
139
152
  return [];
@@ -148,10 +161,19 @@ export function graphRankStream(entries, seeds, opts) {
148
161
  ? [opts.hippoRoot, opts.globalRoot]
149
162
  : [opts.hippoRoot];
150
163
  for (const root of roots) {
151
- accumulateForRoot(root, seeds, entries, { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId: opts.tenantId });
164
+ accumulateForRoot(root, seeds, entries, {
165
+ memIdToIndex,
166
+ graphScore,
167
+ hops,
168
+ decay,
169
+ maxNeighbors,
170
+ tenantId: opts.tenantId,
171
+ });
152
172
  }
153
- // Seed-exclusion guard: graphScore is keyed by entryIndex across roots but each root's visited-set is per-root, so a seed in one store
154
- // could score as a neighbour in the other; drop every seed index so "seeds are never graph-scored" holds across roots.
173
+ // Seed-exclusion guard: graphScore is keyed by entryIndex across roots but each root's visited-set is per-root, so a
174
+ // seed in one store
175
+ // could score as a neighbour in the other; drop every seed index so "seeds are never graph-scored" holds across
176
+ // roots.
155
177
  for (const s of seeds)
156
178
  graphScore.delete(s.index);
157
179
  if (graphScore.size === 0)
@@ -1,4 +1,6 @@
1
- /** Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so `scripts/check-graph-writes.mjs` stays green).
1
+ /**
2
+ * Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so
3
+ * `scripts/check-graph-writes.mjs` stays green).
2
4
  * Shared by `hippo graph show|view` and the HTTP `GET /v1/graph` route, which all build the same `GraphModel`. */
3
5
  import type { GraphRows } from '../store/port.js';
4
6
  import type { EntityType, RelationType } from '../store/graph-rows.js';
@@ -21,7 +23,9 @@ export interface GraphModel {
21
23
  }
22
24
  /** Default bound for the CLI viewer / show so an unbounded set is never laid out. */
23
25
  export declare const DEFAULT_VIEW_LIMIT = 500;
24
- /** Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop neighbours.
26
+ /**
27
+ * Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop
28
+ * neighbours.
25
29
  * Dangling edges (an endpoint outside the node set) are always dropped. */
26
30
  export declare function buildGraphModel(hippoRoot: string, tenantId: string, opts?: {
27
31
  entity?: string;
@@ -30,7 +34,9 @@ export declare function buildGraphModel(hippoRoot: string, tenantId: string, opt
30
34
  }): GraphModel;
31
35
  /** The reply model of the rows a store read: an edge with an endpoint outside the node set is dropped. */
32
36
  export declare function graphModelOf({ entities, relations, truncated }: GraphRows): GraphModel;
33
- /** Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so one model gives the same positions.
37
+ /**
38
+ * Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so
39
+ * one model gives the same positions.
34
40
  * Non-finite coordinates are clamped to the viewport centre and all positions to the bounds. */
35
41
  export declare function layoutGraph(model: GraphModel, opts?: {
36
42
  width?: number;
@@ -42,9 +48,16 @@ export declare function layoutGraph(model: GraphModel, opts?: {
42
48
  }>;
43
49
  /** HTML-escape for SVG text / title / markup content (XSS guard). */
44
50
  export declare function escapeHtml(s: string): string;
45
- /** Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic positions.
46
- * The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an entity name cannot break out. */
51
+ /**
52
+ * Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic
53
+ * positions.
54
+ * The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an
55
+ * entity name cannot break out.
56
+ */
47
57
  export declare function renderGraphHtml(model: GraphModel): string;
48
- /** Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions, `edges[]` linking them by id. */
58
+ /**
59
+ * Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions,
60
+ * `edges[]` linking them by id.
61
+ */
49
62
  export declare function renderGraphCanvas(model: GraphModel): string;
50
63
  //# sourceMappingURL=view.d.ts.map
@@ -1,4 +1,6 @@
1
- /** Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so `scripts/check-graph-writes.mjs` stays green).
1
+ /**
2
+ * Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so
3
+ * `scripts/check-graph-writes.mjs` stays green).
2
4
  * Shared by `hippo graph show|view` and the HTTP `GET /v1/graph` route, which all build the same `GraphModel`. */
3
5
  import { withGraphReadSnapshot } from '../store/graph-reads.js';
4
6
  import { graphViewRows } from '../store/graph-view-rows.js';
@@ -6,7 +8,9 @@ const DEFAULT_LAYOUT_ITERATIONS = 300;
6
8
  const NODE_LABEL_MAX_CHARS = 22;
7
9
  /** Default bound for the CLI viewer / show so an unbounded set is never laid out. */
8
10
  export const DEFAULT_VIEW_LIMIT = 500;
9
- /** Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop neighbours.
11
+ /**
12
+ * Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop
13
+ * neighbours.
10
14
  * Dangling edges (an endpoint outside the node set) are always dropped. */
11
15
  export function buildGraphModel(hippoRoot, tenantId, opts = {}) {
12
16
  const limit = opts.limit ?? DEFAULT_VIEW_LIMIT;
@@ -94,7 +98,9 @@ function applyDisplacement(nodes, pos, disp, temp, width, height) {
94
98
  p.y = Math.max(20, Math.min(height - 20, ny));
95
99
  });
96
100
  }
97
- /** Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so one model gives the same positions.
101
+ /**
102
+ * Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so
103
+ * one model gives the same positions.
98
104
  * Non-finite coordinates are clamped to the viewport centre and all positions to the bounds. */
99
105
  export function layoutGraph(model, opts = {}) {
100
106
  const width = opts.width ?? LAYOUT_W;
@@ -143,25 +149,36 @@ const CLIENT_JS = [
143
149
  " var vb=svg.getAttribute('viewBox').split(' ').map(Number);",
144
150
  " var view={x:vb[0],y:vb[1],w:vb[2],h:vb[3]};",
145
151
  " function apply(){svg.setAttribute('viewBox',view.x+' '+view.y+' '+view.w+' '+view.h);}",
146
- " var panning=false,sx=0,sy=0;",
147
- " svg.addEventListener('mousedown',function(e){if(e.target.closest('.node'))return;panning=true;sx=e.clientX;sy=e.clientY;});",
152
+ ' var panning=false,sx=0,sy=0;',
153
+ ' ' +
154
+ "svg.addEventListener('mousedown',function(e){" +
155
+ "if(e.target.closest('.node'))return;panning=true;sx=e.clientX;sy=e.clientY;});",
148
156
  " window.addEventListener('mouseup',function(){panning=false;});",
149
157
  " window.addEventListener('mousemove',function(e){if(!panning)return;var r=svg.getBoundingClientRect();var " +
150
158
  "k=view.w/r.width;view.x-=(e.clientX-sx)*k;view.y-=(e.clientY-sy)*k;sx=e.clientX;sy=e.clientY;apply();});",
151
- " svg.addEventListener('wheel',function(e){e.preventDefault();var r=svg.getBoundingClientRect();var mx=view.x+(e.clientX-r.left)/r.width*view.w;var " +
152
- "my=view.y+(e.clientY-r.top)/r.height*view.h;var " +
153
- "f=e.deltaY<0?0.9:1.1;view.x=mx-(mx-view.x)*f;view.y=my-(my-view.y)*f;view.w*=f;view.h*=f;apply();},{passive:false});",
159
+ " svg.addEventListener('wheel',function(e){e.preventDefault();var r=svg.getBoundingClientRect();var " +
160
+ "mx=view.x+(e.clientX-r.left)/r.width*view.w;var " +
161
+ 'my=view.y+(e.clientY-r.top)/r.height*view.h;var ' +
162
+ 'f=e.deltaY<0?0.9:1.1;view.x=mx-(mx-view.x)*f;view.y=my-(my-view.y)*f;' +
163
+ 'view.w*=f;view.h*=f;apply();},{passive:false});',
154
164
  " var data={};try{data=JSON.parse(document.getElementById('graph-data').textContent);}",
155
165
  " catch(e){console.error('hippo graph: embedded model is not valid JSON',e);}",
156
- " var adj={};(data.edges||[]).forEach(function(e){(adj[e.from]=adj[e.from]||[]).push(e.to);(adj[e.to]=adj[e.to]||[]).push(e.from);});",
157
- " var active=null;",
158
- " document.querySelectorAll('.node').forEach(function(g){g.addEventListener('click',function(ev){ev.stopPropagation();var " +
166
+ ' var ' +
167
+ 'adj={};(data.edges||[]).forEach(function(e){' +
168
+ '(adj[e.from]=adj[e.from]||[]).push(e.to);(adj[e.to]=adj[e.to]||[]).push(e.from);});',
169
+ ' var active=null;',
170
+ ' ' +
171
+ "document.querySelectorAll('.node').forEach(function(g){" +
172
+ "g.addEventListener('click',function(ev){ev.stopPropagation();var " +
159
173
  "id=g.getAttribute('data-id');if(active===id){clearHi();active=null;return;}active=id;highlight(id);});});",
160
174
  " svg.addEventListener('click',function(){clearHi();active=null;});",
161
- " function clearHi(){svg.classList.remove('focused');document.querySelectorAll('.hi').forEach(function(el){el.classList.remove('hi');});}",
175
+ ' function ' +
176
+ "clearHi(){svg.classList.remove('focused');" +
177
+ "document.querySelectorAll('.hi').forEach(function(el){el.classList.remove('hi');});}",
162
178
  " function highlight(id){clearHi();svg.classList.add('focused');var " +
163
179
  "keep={};keep[id]=1;(adj[id]||[]).forEach(function(n){keep[n]=1;});document.querySelectorAll('.node').forEach(" +
164
- "function(g){if(keep[g.getAttribute('data-id')])g.classList.add('hi');});document.querySelectorAll('.edge').forEach(" +
180
+ "function(g){if(keep[g.getAttribute('data-id')])g.classList.add('hi');" +
181
+ "});document.querySelectorAll('.edge').forEach(" +
165
182
  "function(l){if(l.getAttribute('data-from')===id||l.getAttribute('data-to')===id)l.classList.add('hi');});}",
166
183
  "})();",
167
184
  ].join("\n");
@@ -222,8 +239,12 @@ function renderLegend(model) {
222
239
  .map((t) => `<span style="color:${nodeColor(t)}">●</span> ${escapeHtml(t)}`)
223
240
  .join(' ');
224
241
  }
225
- /** Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic positions.
226
- * The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an entity name cannot break out. */
242
+ /**
243
+ * Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic
244
+ * positions.
245
+ * The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an
246
+ * entity name cannot break out.
247
+ */
227
248
  export function renderGraphHtml(model) {
228
249
  const pos = layoutGraph(model);
229
250
  const edgeSvg = renderEdgeSvg(model, pos);
@@ -238,7 +259,8 @@ export function renderGraphHtml(model) {
238
259
  '<style>' + STYLE + '</style></head><body>',
239
260
  `<div class="legend"><b>hippo graph</b> · ${model.nodes.length} entities · ${model.edges.length} relations` +
240
261
  (model.truncated ? ' · <b style="color:#f59e0b">truncated</b>' : '') +
241
- `<br>${legend}<br><span style="color:#64748b">drag to pan · scroll to zoom · click a node to focus</span></div>`,
262
+ `<br>${legend}<br><span style="color:#64748b">drag to pan ` +
263
+ `· scroll to zoom · click a node to focus</span></div>`,
242
264
  `<svg id="g" viewBox="0 0 ${LAYOUT_W} ${LAYOUT_H}" preserveAspectRatio="xMidYMid meet">`,
243
265
  `<g id="edges">${edgeSvg}</g><g id="nodes">${nodeSvg}</g>`,
244
266
  '</svg>',
@@ -247,7 +269,10 @@ export function renderGraphHtml(model) {
247
269
  '</body></html>',
248
270
  ].join('\n');
249
271
  }
250
- /** Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions, `edges[]` linking them by id. */
272
+ /**
273
+ * Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions,
274
+ * `edges[]` linking them by id.
275
+ */
251
276
  export function renderGraphCanvas(model) {
252
277
  const pos = layoutGraph(model, { width: 2400, height: 1600 });
253
278
  const nodes = model.nodes.map((node) => {
@@ -1,7 +1,7 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { isJsonString } from '../util/json.js';
4
- import { errorMessage, log } from '../util/log.js';
4
+ import { errorMessage, log, errorFields } from '../util/log.js';
5
5
  function collectFiles(dir) {
6
6
  if (!fs.existsSync(dir))
7
7
  return [];
@@ -44,7 +44,7 @@ function readCodexSessionIdsFromHistoryDelta(historyPath, startOffsetBytes) {
44
44
  }
45
45
  }
46
46
  catch (err) {
47
- log.warn(`codex history ${historyPath}: skipped a malformed JSONL line (${errorMessage(err)})`);
47
+ log.warn(`codex history ${historyPath}: skipped a malformed JSONL line (${errorMessage(err)})`, errorFields(err));
48
48
  }
49
49
  }
50
50
  return ordered;
@@ -25,9 +25,11 @@ export interface CodexWrapperMetadata {
25
25
  installMode: 'same-path' | 'cmd-shim';
26
26
  logFile: string;
27
27
  installedAt: string;
28
+ /** The hippo CLI the user opted in; absent in metadata written before this field. */
29
+ hippoCliPath?: string;
28
30
  }
29
31
  export interface EnsureCodexWrapperResult {
30
- status: 'installed' | 'already-installed' | 'not-found' | 'source-checkout';
32
+ status: 'installed' | 'already-installed' | 'not-found' | 'source-checkout' | 'other-install';
31
33
  metadataPath?: string;
32
34
  realCodexPath?: string;
33
35
  commandPath?: string;
@@ -2,7 +2,7 @@ import { envPath } from '../util/env.js';
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import { PACKAGE_ROOT } from '../core/package-root.js';
5
- import { errorMessage, log } from '../util/log.js';
5
+ import { errorMessage, log, errorFields } from '../util/log.js';
6
6
  import { HIPPO_CODEX_WRAPPER_MARKER, ensureDir } from './shared.js';
7
7
  import { homeDir, codexHomeDir } from '../util/agent-homes.js';
8
8
  import { isJsonString } from '../util/json.js';
@@ -161,7 +161,7 @@ function writeExecutableFile(filePath, content) {
161
161
  }
162
162
  catch (err) {
163
163
  // The mode bit means nothing on Windows; elsewhere a wrapper that is not executable breaks `codex`, so say so.
164
- log.warn(`could not mark ${filePath} executable: ${errorMessage(err)}`);
164
+ log.warn(`could not mark ${filePath} executable: ${errorMessage(err)}`, errorFields(err));
165
165
  }
166
166
  }
167
167
  export function installCodexWrapper(realCodexPath) {
@@ -196,6 +196,7 @@ export function installCodexWrapper(realCodexPath) {
196
196
  installMode: plan.installMode,
197
197
  logFile: paths.logFile,
198
198
  installedAt: new Date().toISOString(),
199
+ hippoCliPath: resolveHippoCliPath(),
199
200
  };
200
201
  writeFileAtomic(paths.metadataPath, JSON.stringify(metadata, null, 2) + '\n');
201
202
  return installResult(paths.metadataPath, metadata);
@@ -275,11 +276,15 @@ export function isCodexWrapperInstalled() {
275
276
  * reads as binary hijacking to security scanners.
276
277
  */
277
278
  export function repairCodexWrapperIfInstalled(hippoCliPath = resolveHippoCliPath()) {
278
- if (readCodexWrapperMetadata() === null) {
279
+ const metadata = readCodexWrapperMetadata();
280
+ if (metadata === null) {
279
281
  return { status: 'not-found' };
280
282
  }
283
+ // Only the CLI the user opted in may re-point their launcher, not an npx cache or a project dependency.
284
+ if (isJsonString(metadata.hippoCliPath) && !pathEquals(metadata.hippoCliPath, hippoCliPath)) {
285
+ return { status: 'other-install' };
286
+ }
281
287
  // A checkout's own `npm install` or CLI would point the user's launcher at a folder that may be deleted.
282
- // SHORTCUT: any node_modules copy (npx cache, a project dependency) still repairs; record the opted-in CLI path in the metadata to close that.
283
288
  const packageDir = path.dirname(path.dirname(hippoCliPath));
284
289
  if (path.basename(path.dirname(packageDir)).toLowerCase() !== 'node_modules') {
285
290
  return { status: 'source-checkout' };
@@ -30,19 +30,30 @@ export type McpMergeStatus = 'added' | 'present' | 'user-owned' | 'unreadable';
30
30
  export type McpRemoveStatus = 'removed' | 'absent' | 'user-owned' | 'unreadable';
31
31
  /** Removes the "hippo" key only when hippo wrote it. */
32
32
  export declare function removeMcpServer(file: string, host?: McpHost): McpRemoveStatus;
33
- /** A filesystem error on an MCP config file (EACCES, EISDIR, EBUSY), kept as its own message so setup can report it and go on. */
33
+ /**
34
+ * A filesystem error on an MCP config file (EACCES, EISDIR, EBUSY), kept as its own message so setup can report it and
35
+ * go on.
36
+ */
34
37
  export interface McpFailure {
35
38
  readonly failed: string;
36
39
  }
37
40
  export declare function isMcpFailure(status: string | McpFailure): status is McpFailure;
38
- /** `kept`: a hippo block that is not the Copilot text (edited, or another agent's in a shared file); `unclosed`: a start marker with no end. */
41
+ /**
42
+ * `kept`: a hippo block that is not the Copilot text (edited, or another agent's in a shared file); `unclosed`: a start
43
+ * marker with no end.
44
+ */
39
45
  export type InstructionsInstallStatus = 'written' | 'present' | 'kept' | 'unclosed';
40
46
  export type InstructionsRemoveStatus = 'removed' | 'absent' | 'kept' | 'unclosed';
41
- /** Splices out only hippo's own Copilot block and keeps every other byte; a file left with nothing but whitespace goes. */
47
+ /**
48
+ * Splices out only hippo's own Copilot block and keeps every other byte; a file left with nothing but whitespace goes.
49
+ */
42
50
  export declare function removeInstructionsBlock(file: string): InstructionsRemoveStatus;
43
51
  /** `kept`: the file is there but is not the text hippo writes, so the user edited it or it is someone else's. */
44
52
  export type VscodeInstructionsInstallStatus = 'written' | 'present' | 'kept';
45
- /** The file is hippo's alone, so it is written whole; an earlier hippo text is upgraded, and any other text already there stays. */
53
+ /**
54
+ * The file is hippo's alone, so it is written whole; an earlier hippo text is upgraded, and any other text already
55
+ * there stays.
56
+ */
46
57
  export declare function ensureVscodeInstructions(file: string): VscodeInstructionsInstallStatus;
47
58
  export type VscodeInstructionsRemoveStatus = 'removed' | 'absent' | 'kept';
48
59
  /** Deletes the file only when it still holds exactly what a hippo release wrote. */
@@ -61,7 +72,10 @@ export interface CopilotInstallResult {
61
72
  readonly instructions: InstructionsInstallStatus | null;
62
73
  readonly vscode: readonly VscodeInstallResult[];
63
74
  }
64
- /** The CLI's folder holds more than the hooks folder setup makes for VS Code, so a rerun on a VS Code-only machine still finds no CLI. */
75
+ /**
76
+ * The CLI's folder holds more than the hooks folder setup makes for VS Code, so a rerun on a VS Code-only machine still
77
+ * finds no CLI.
78
+ */
65
79
  export declare function isCopilotCliPresent(home?: string): boolean;
66
80
  export declare function installCopilot(): CopilotInstallResult;
67
81
  export interface VscodeUninstallResult {
@@ -24,7 +24,10 @@ for a failure. Leave out secrets and personal details.
24
24
  The installed hooks load pinned memories when a session starts and capture
25
25
  the session as you work, so there is nothing to run before you finish.
26
26
  `.trim();
27
- /** Every Copilot text a release has written, so install upgrades an old block and uninstall still removes it; add the old text when the text changes. */
27
+ /**
28
+ * Every Copilot text a release has written, so install upgrades an old block and uninstall still removes it; add the
29
+ * old text when the text changes.
30
+ */
28
31
  const SHIPPED_COPILOT_INSTRUCTIONS = [
29
32
  COPILOT_INSTRUCTIONS,
30
33
  `
@@ -53,7 +56,11 @@ function profileDirs(userDir) {
53
56
  const dir = path.join(userDir, 'profiles');
54
57
  if (!fs.existsSync(dir))
55
58
  return [];
56
- return fs.readdirSync(dir, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => path.join(dir, e.name)).sort();
59
+ return fs
60
+ .readdirSync(dir, { withFileTypes: true })
61
+ .filter((e) => e.isDirectory())
62
+ .map((e) => path.join(dir, e.name))
63
+ .sort();
57
64
  }
58
65
  export function copilotPaths() {
59
66
  const home = copilotHomeDir();
@@ -74,22 +81,31 @@ function hippoCommand() {
74
81
  return process.platform === 'win32' ? 'hippo.cmd' : 'hippo';
75
82
  }
76
83
  /** The Copilot CLI's mcp-config.json keeps servers under "mcpServers", each with an env and a tool list. */
77
- export const COPILOT_CLI_MCP = { key: 'mcpServers', server: () => ({ type: 'local', command: hippoCommand(), args: ['mcp'], env: {}, tools: ['*'] }) };
84
+ export const COPILOT_CLI_MCP = {
85
+ key: 'mcpServers',
86
+ server: () => ({ type: 'local', command: hippoCommand(), args: ['mcp'], env: {}, tools: ['*'] }),
87
+ };
78
88
  /** VS Code's mcp.json keeps stdio servers under "servers"; it has no "mcpServers" key. */
79
- export const VSCODE_MCP = { key: 'servers', server: () => ({ type: 'stdio', command: hippoCommand(), args: ['mcp'] }) };
89
+ export const VSCODE_MCP = {
90
+ key: 'servers',
91
+ server: () => ({ type: 'stdio', command: hippoCommand(), args: ['mcp'] }),
92
+ };
80
93
  /** Only a server hippo wrote counts as hippo's: another command, other args, or
81
94
  * any key or value setup does not write (an env you added) makes it the user's. */
82
95
  function isHipposServer(entry, host) {
83
96
  if (!isJsonObjectLiteral(entry) || !('command' in entry) || !('args' in entry))
84
97
  return false;
85
98
  const ours = host.server();
86
- return Object.entries(entry).every(([key, value]) => (key === 'command' ? value === 'hippo' || value === 'hippo.cmd' : isDeepStrictEqual(value, ours[key])));
99
+ return Object.entries(entry).every(([key, value]) => key === 'command' ? value === 'hippo' || value === 'hippo.cmd' : isDeepStrictEqual(value, ours[key]));
87
100
  }
88
101
  /** What to paste under the host's key when hippo cannot edit the file itself. */
89
102
  export function copilotMcpSnippet(host = COPILOT_CLI_MCP) {
90
103
  return `"${MCP_KEY}": ${JSON.stringify(host.server())}`;
91
104
  }
92
- /** Null for a file with comments, one that is not JSON, or one whose shape a merge would overwrite; a missing file reads as empty. */
105
+ /**
106
+ * Null for a file with comments, one that is not JSON, or one whose shape a merge would overwrite; a missing file reads
107
+ * as empty.
108
+ */
93
109
  function readMcpConfig(file, host) {
94
110
  let config = {};
95
111
  if (fs.existsSync(file)) {
@@ -97,7 +113,8 @@ function readMcpConfig(file, host) {
97
113
  config = readJsonFile(file);
98
114
  }
99
115
  catch (err) {
100
- // Only a parse failure means the text is not JSON hippo can merge; EACCES or EISDIR is thrown with its own message.
116
+ // Only a parse failure means the text is not JSON hippo can merge; EACCES or EISDIR is thrown with its own
117
+ // message.
101
118
  if (!(err instanceof SyntaxError))
102
119
  throw err;
103
120
  // An empty file is a new one with no servers yet, not one with comments.
@@ -112,7 +129,10 @@ function readMcpConfig(file, host) {
112
129
  const servers = config[host.key];
113
130
  return isJsonObjectLiteral(servers) ? { config, servers } : null;
114
131
  }
115
- /** Adds hippo's server and keeps every other key; a file hippo cannot parse, or a "hippo" key it did not write, stays as it is. */
132
+ /**
133
+ * Adds hippo's server and keeps every other key; a file hippo cannot parse, or a "hippo" key it did not write, stays as
134
+ * it is.
135
+ */
116
136
  function mergeMcpServer(file, host = COPILOT_CLI_MCP) {
117
137
  const read = readMcpConfig(file, host);
118
138
  if (read === null)
@@ -148,7 +168,10 @@ export function isMcpFailure(status) {
148
168
  function hasErrnoCode(err) {
149
169
  return 'code' in err && typeof err.code === 'string';
150
170
  }
151
- /** One MCP config step; a filesystem error comes back as a failure, so the hooks file and the instructions still install. */
171
+ /**
172
+ * One MCP config step; a filesystem error comes back as a failure, so the hooks file and the instructions still
173
+ * install.
174
+ */
152
175
  function mcpStep(step) {
153
176
  try {
154
177
  return step();
@@ -162,7 +185,9 @@ function mcpStep(step) {
162
185
  function isCopilotBlock(inner) {
163
186
  return SHIPPED_COPILOT_INSTRUCTIONS.includes(inner);
164
187
  }
165
- /** Replaces only the text between the markers, in the file's own line ending, or appends a block after the user's text. */
188
+ /**
189
+ * Replaces only the text between the markers, in the file's own line ending, or appends a block after the user's text.
190
+ */
166
191
  function withCopilotBlock(text, found) {
167
192
  if (found !== null) {
168
193
  const { start, end, eol } = found;
@@ -173,7 +198,10 @@ function withCopilotBlock(text, found) {
173
198
  return block;
174
199
  return `${text}${text.endsWith('\n') ? '\n' : '\n\n'}${block}`;
175
200
  }
176
- /** Creates the file when missing; any block but hippo's own Copilot one, and a start marker with no end, leave the file as it is. */
201
+ /**
202
+ * Creates the file when missing; any block but hippo's own Copilot one, and a start marker with no end, leave the file
203
+ * as it is.
204
+ */
177
205
  function ensureInstructionsBlock(file) {
178
206
  const old = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '';
179
207
  const found = hippoBlock(old);
@@ -187,7 +215,10 @@ function ensureInstructionsBlock(file) {
187
215
  writeFileAtomic(file, next);
188
216
  return 'written';
189
217
  }
190
- /** `text` without the block and its markers, plus the line break after the end marker, else the one before the start marker. */
218
+ /**
219
+ * `text` without the block and its markers, plus the line break after the end marker, else the one before the start
220
+ * marker.
221
+ */
191
222
  function withoutCopilotBlock(text, found) {
192
223
  const from = found.start - HOOK_MARKERS.start.length;
193
224
  const to = found.end + HOOK_MARKERS.end.length;
@@ -195,7 +226,9 @@ function withoutCopilotBlock(text, found) {
195
226
  const before = after > 0 ? 0 : text.endsWith('\r\n', from) ? 2 : text.endsWith('\n', from) ? 1 : 0;
196
227
  return text.slice(0, from - before) + text.slice(to + after);
197
228
  }
198
- /** Splices out only hippo's own Copilot block and keeps every other byte; a file left with nothing but whitespace goes. */
229
+ /**
230
+ * Splices out only hippo's own Copilot block and keeps every other byte; a file left with nothing but whitespace goes.
231
+ */
199
232
  export function removeInstructionsBlock(file) {
200
233
  if (!fs.existsSync(file))
201
234
  return 'absent';
@@ -212,7 +245,10 @@ export function removeInstructionsBlock(file) {
212
245
  writeFileAtomic(file, left);
213
246
  return 'removed';
214
247
  }
215
- /** The file is hippo's alone, so it is written whole; an earlier hippo text is upgraded, and any other text already there stays. */
248
+ /**
249
+ * The file is hippo's alone, so it is written whole; an earlier hippo text is upgraded, and any other text already
250
+ * there stays.
251
+ */
216
252
  export function ensureVscodeInstructions(file) {
217
253
  if (fs.existsSync(file)) {
218
254
  const old = fs.readFileSync(file, 'utf8');
@@ -233,7 +269,10 @@ export function removeVscodeInstructions(file) {
233
269
  fs.rmSync(file);
234
270
  return 'removed';
235
271
  }
236
- /** The CLI's folder holds more than the hooks folder setup makes for VS Code, so a rerun on a VS Code-only machine still finds no CLI. */
272
+ /**
273
+ * The CLI's folder holds more than the hooks folder setup makes for VS Code, so a rerun on a VS Code-only machine still
274
+ * finds no CLI.
275
+ */
237
276
  export function isCopilotCliPresent(home = copilotHomeDir()) {
238
277
  if (fs.statSync(home, { throwIfNoEntry: false })?.isDirectory() !== true)
239
278
  return false;
@@ -11,7 +11,10 @@ export interface HookTable {
11
11
  [agent: string]: HookSpec;
12
12
  }
13
13
  export declare const HOOKS: HookTable;
14
- /** The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited block. */
14
+ /**
15
+ * The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited
16
+ * block.
17
+ */
15
18
  export declare function hippoBlock(text: string): {
16
19
  start: number;
17
20
  end: number;
@@ -108,7 +108,8 @@ hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
108
108
  'opencode': { file: 'AGENTS.md', description: 'OpenCode', content: agentsBlock('task', { recall: true }) },
109
109
  'pi': { file: 'AGENTS.md', description: 'Pi', content: agentsBlock('session', { footer: PI_FOOTER }) },
110
110
  };
111
- // sha256 of each trimmed block an earlier hippo wrote, so init refreshes only blocks nobody edited. Add the old hash when a block changes.
111
+ // sha256 of each trimmed block an earlier hippo wrote, so init refreshes only blocks nobody edited. Add the old hash
112
+ // when a block changes.
112
113
  const SHIPPED_HOOK_HASHES = new Map([
113
114
  ['c04e48f2896a4fee9ae98f8f832e2d26a3910269df3beb5bcd6baee3cd9db68e', 'claude-code'],
114
115
  ['e6b12bd8983c032e5ca8e95a97aeff4178a5a05026d10acad5b2e1b25d5656dd', 'claude-code'],
@@ -131,7 +132,10 @@ const SHIPPED_HOOK_HASHES = new Map([
131
132
  ['37767b355e18beac726b05b9e2b898dab8c6135fd7b98f3aa52edc734d5dd283', 'pi'],
132
133
  ['6e85a5cccb3cfeaa9a080713754936db730f96376f94cc9a9888a746149c7268', 'pi'],
133
134
  ]);
134
- /** The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited block. */
135
+ /**
136
+ * The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited
137
+ * block.
138
+ */
135
139
  export function hippoBlock(text) {
136
140
  const at = text.indexOf(HOOK_MARKERS.start);
137
141
  const start = at + HOOK_MARKERS.start.length;
@@ -141,7 +145,8 @@ export function hippoBlock(text) {
141
145
  // git autocrlf checks these files out with CRLF: match as LF, write back in the file's own ending.
142
146
  const raw = text.slice(start, end);
143
147
  const inner = raw.replace(/\r\n/g, '\n').trim();
144
- const owner = Object.keys(HOOKS).find((k) => HOOKS[k].content === inner) ?? SHIPPED_HOOK_HASHES.get(createHash('sha256').update(inner).digest('hex'));
148
+ const owner = Object.keys(HOOKS).find((k) => HOOKS[k].content === inner) ??
149
+ SHIPPED_HOOK_HASHES.get(createHash('sha256').update(inner).digest('hex'));
145
150
  return { start, end, eol: raw.includes('\r\n') ? '\r\n' : '\n', inner, owner };
146
151
  }
147
152
  /** `text` with every hippo block and its markers removed, trimmed. */
@@ -1,5 +1,6 @@
1
- /** Hook install/uninstall for AI coding tools. Claude Code gets a JSON `hooks` block in settings.json; older forms are migrated automatically.
2
- * OpenCode rejects the JSON-hook schema (no `hooks` key), so it gets a TS plugin (OPENCODE_PLUGIN_SOURCE); see installCodexHooks, installCopilotHooks. */
1
+ /** Hook install/uninstall for AI coding tools. Claude Code gets a JSON `hooks` block in settings.json; older forms are
2
+ * migrated automatically. OpenCode rejects the JSON-hook schema (no `hooks` key), so it gets a TS plugin
3
+ * (OPENCODE_PLUGIN_SOURCE); see installCodexHooks, installCopilotHooks. */
3
4
  import { type JsonHookTarget } from './shared.js';
4
5
  import { type JsonValue } from '../util/json.js';
5
6
  /** A target's hook settings file, the log its SessionEnd hook writes, and the tool's display name. */
@@ -32,11 +33,14 @@ export interface InstallResult {
32
33
  export declare function resolveJsonHookPaths(target: JsonHookTarget): JsonHookPaths;
33
34
  /** The events in hippo's Copilot hooks file, in file order, for setup to name. */
34
35
  export declare function copilotHookEvents(): string[];
35
- /** Adds hippo's hooks to `target`'s settings file and migrates older hippo entries; a file that is not JSON stays untouched. */
36
+ /** Adds hippo's hooks to `target`'s settings file and migrates older hippo entries; a file that is not JSON stays
37
+ * untouched. */
36
38
  export declare function installJsonHooks(target: JsonHookTarget): InstallResult;
37
- /** Swaps the file in with one rename, so a crash mid-write cannot leave a truncated settings.json that Claude Code cannot parse. */
39
+ /** Swaps the file in with one rename, so a crash mid-write cannot leave a truncated settings.json that Claude Code
40
+ * cannot parse. */
38
41
  export declare function writeSettingsFile(file: string, settings: JsonValue): void;
39
- /** Removes hippo's own hook handlers from `target`'s settings file and keeps every other handler; true when the file changed. */
42
+ /** Removes hippo's own hook handlers from `target`'s settings file and keeps every other handler; true when the file
43
+ * changed. */
40
44
  export declare function uninstallJsonHooks(target: JsonHookTarget): boolean;
41
45
  /** Whether uninstall can edit settings.json; `invalidJson` marks a file that exists
42
46
  * but is not JSON hippo can edit, which `uninstallJsonHooks` reports only as false. */