hippo-memory 1.69.0 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1014) hide show
  1. package/README.md +5 -2
  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 +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,42 +1,4 @@
1
1
  declare const HIPPO_OPENCODE_PLUGIN_MARKER = "HIPPO_OPENCODE_PLUGIN_V1";
2
- /**
3
- * The opencode plugin file we install at ~/.config/opencode/plugins/hippo.ts.
4
- *
5
- * Per https://opencode.ai/docs/plugins/, plugins are TS/JS modules exporting an
6
- * async function returning hooks. We subscribe to `event` and route:
7
- * session.idle → `hippo session-end` (Claude Code's SessionEnd equiv)
8
- * session.created → `hippo last-sleep` (Claude Code's SessionStart equiv)
9
- *
10
- * Design choices:
11
- *
12
- * 1. No `import type { Plugin } from "@opencode-ai/plugin"`. The package's npm
13
- * publication status was unverifiable from the build sandbox (npmjs.com
14
- * returned 403); an unresolved type-only import would still crash the TS
15
- * runtime opencode uses to load the plugin. opencode infers plugin shape
16
- * from the returned object, so the type was convenience-only.
17
- *
18
- * 2. Defensive `typeof $ !== 'function'` guard. opencode runs in Bun (where
19
- * `$` is the shell-template helper), but a future Node-mode deployment
20
- * would have `$` undefined in the destructured context and the plugin
21
- * would throw on every session.idle, killing opencode sessions in a
22
- * hard-to-recover way (the idempotence marker prevents auto-reinstall).
23
- * Fail closed, let opencode continue.
24
- *
25
- * 3. `.quiet().nothrow()` on each `$\`...\`` so a missing hippo binary
26
- * (e.g. PATH-misconfigured user) does NOT throw out of the event handler.
27
- * The surrounding try/catch is belt-and-braces.
28
- *
29
- * 4. UserPromptSubmit equivalent NOT wired. opencode's `message.updated`
30
- * fires per-token, not per-prompt-submit; no clean per-prompt event.
31
- * Users wanting pinned-context auto-injection can call `hippo context`
32
- * via the MCP server (`hippo mcp`).
33
- *
34
- * 5. Versioned marker `HIPPO_OPENCODE_PLUGIN_V1` allows future versions to
35
- * overwrite cleanly. The installer's idempotence check requires BOTH
36
- * marker match AND content equality, so a plugin-source revision under
37
- * the same V1 marker re-writes the file on next install.
38
- */
39
- export declare const OPENCODE_PLUGIN_SOURCE = "// HIPPO_OPENCODE_PLUGIN_V1\n// hippo-memory opencode plugin. DO NOT EDIT \u2014 regenerated on every\n// `hippo hook install opencode` from src/hooks.ts OPENCODE_PLUGIN_SOURCE\n// in https://github.com/kitfunso/hippo-memory. Local changes will be lost.\n\nexport const HippoPlugin = async ({ $ }) => {\n return {\n event: async ({ event }) => {\n // Defense in depth: opencode currently runs in Bun where $ is the shell\n // template helper. A non-Bun runtime would have $ as undefined; fail\n // closed instead of crashing the host session.\n if (typeof $ !== \"function\") return;\n try {\n if (event.type === \"session.idle\") {\n await $`hippo session-end`.quiet().nothrow();\n } else if (event.type === \"session.created\") {\n await $`hippo last-sleep`.quiet().nothrow();\n }\n } catch {\n // hippo CLI not on PATH or other failure \u2014 never crash the host session.\n }\n },\n };\n};\n";
40
2
  export { HIPPO_OPENCODE_PLUGIN_MARKER };
41
3
  export interface OpencodePluginInstallResult {
42
4
  installed: boolean;
@@ -1,46 +1,12 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { isJsonObject, homeDir } from './shared.js';
4
- import { isJsonString } from '../json.js';
3
+ import { homeDir } from './shared.js';
4
+ import { writeFileAtomic } from '../util/atomic-write.js';
5
+ import { isJsonString, isJsonObjectLiteral } from '../util/json.js';
5
6
  const HIPPO_OPENCODE_PLUGIN_MARKER = 'HIPPO_OPENCODE_PLUGIN_V1';
6
- /**
7
- * The opencode plugin file we install at ~/.config/opencode/plugins/hippo.ts.
8
- *
9
- * Per https://opencode.ai/docs/plugins/, plugins are TS/JS modules exporting an
10
- * async function returning hooks. We subscribe to `event` and route:
11
- * session.idle → `hippo session-end` (Claude Code's SessionEnd equiv)
12
- * session.created → `hippo last-sleep` (Claude Code's SessionStart equiv)
13
- *
14
- * Design choices:
15
- *
16
- * 1. No `import type { Plugin } from "@opencode-ai/plugin"`. The package's npm
17
- * publication status was unverifiable from the build sandbox (npmjs.com
18
- * returned 403); an unresolved type-only import would still crash the TS
19
- * runtime opencode uses to load the plugin. opencode infers plugin shape
20
- * from the returned object, so the type was convenience-only.
21
- *
22
- * 2. Defensive `typeof $ !== 'function'` guard. opencode runs in Bun (where
23
- * `$` is the shell-template helper), but a future Node-mode deployment
24
- * would have `$` undefined in the destructured context and the plugin
25
- * would throw on every session.idle, killing opencode sessions in a
26
- * hard-to-recover way (the idempotence marker prevents auto-reinstall).
27
- * Fail closed, let opencode continue.
28
- *
29
- * 3. `.quiet().nothrow()` on each `$\`...\`` so a missing hippo binary
30
- * (e.g. PATH-misconfigured user) does NOT throw out of the event handler.
31
- * The surrounding try/catch is belt-and-braces.
32
- *
33
- * 4. UserPromptSubmit equivalent NOT wired. opencode's `message.updated`
34
- * fires per-token, not per-prompt-submit; no clean per-prompt event.
35
- * Users wanting pinned-context auto-injection can call `hippo context`
36
- * via the MCP server (`hippo mcp`).
37
- *
38
- * 5. Versioned marker `HIPPO_OPENCODE_PLUGIN_V1` allows future versions to
39
- * overwrite cleanly. The installer's idempotence check requires BOTH
40
- * marker match AND content equality, so a plugin-source revision under
41
- * the same V1 marker re-writes the file on next install.
42
- */
43
- export const OPENCODE_PLUGIN_SOURCE = `// ${HIPPO_OPENCODE_PLUGIN_MARKER}
7
+ /** The opencode plugin installed at ~/.config/opencode/plugins/hippo.ts: session.idle runs `hippo session-end`, session.created runs `hippo last-sleep`.
8
+ * No `@opencode-ai/plugin` type import (unresolved, it would crash the loader); `$` is guarded and `.nothrow()` keeps a missing hippo binary from throwing. */
9
+ const OPENCODE_PLUGIN_SOURCE = `// ${HIPPO_OPENCODE_PLUGIN_MARKER}
44
10
  // hippo-memory opencode plugin. DO NOT EDIT — regenerated on every
45
11
  // \`hippo hook install opencode\` from src/hooks.ts OPENCODE_PLUGIN_SOURCE
46
12
  // in https://github.com/kitfunso/hippo-memory. Local changes will be lost.
@@ -72,47 +38,17 @@ export function resolveOpencodePluginPath() {
72
38
  function resolveOpencodeConfigPath() {
73
39
  return path.join(homeDir(), '.config', 'opencode', 'opencode.json');
74
40
  }
75
- /**
76
- * Return true iff a single hook-array entry's command string starts with
77
- * `hippo ` (the verb-prefix). Used to surgically remove only hippo-owned
78
- * commands when migrating an opencode.json. We own the install side, so only
79
- * the canonical `hippo <verb>` form needs to match — and only canonical verbs
80
- * hippo itself installs (session-end, last-sleep, sleep, capture, context),
81
- * not any third-party tool that happens to be named `hippo`.
82
- *
83
- * Structural check: substring matching against
84
- * arbitrary user content is unsafe — a user's
85
- * `echo "remember to hippo sleep your laptop"` is not a hippo-owned hook.
86
- *
87
- * Per-hook (not per-entry) granularity: an entry whose inner
88
- * hooks array mixes hippo-installed commands with user-authored commands
89
- * must NOT lose the user-authored commands. The migration filters the inner
90
- * array per-hook, then drops the entry only when its inner array is empty.
91
- */
41
+ /** True iff a hook entry's command starts with `hippo ` plus a verb hippo itself installs (session-end, last-sleep, sleep, capture, context).
42
+ * Structural, not substring (`echo "remember to hippo sleep"` is not ours), and per hook so user-authored hooks in the same entry survive. */
92
43
  const HIPPO_OWNED_COMMAND_RE = /^\s*hippo\s+(session-end|last-sleep|sleep|capture|context)(?=\s|$)/;
93
44
  function hookIsHippoOwned(hook) {
94
- if (!isJsonObject(hook))
45
+ if (!isJsonObjectLiteral(hook))
95
46
  return false;
96
47
  const cmd = hook.command;
97
48
  return isJsonString(cmd) && HIPPO_OWNED_COMMAND_RE.test(cmd);
98
49
  }
99
- /**
100
- * Structurally strip every hippo-owned hook from opencode.json's hooks key.
101
- * Returns one of:
102
- * { migrated: true, jsonRepairFailed: false } — at least one hook removed.
103
- * { migrated: false, jsonRepairFailed: false } — file fine, nothing to do.
104
- * { migrated: false, jsonRepairFailed: true } — file present but unparseable.
105
- *
106
- * Per-hook surgery:
107
- * - For each entry in each event-key array, filter the inner `hooks` array
108
- * to remove hippo-owned hooks only. User-authored hooks in the same
109
- * inner array are preserved.
110
- * - When an entry's inner `hooks` array becomes empty, that entry is
111
- * removed from the outer array.
112
- * - When an event-key array becomes empty, the key is deleted.
113
- * - When the top-level `hooks` object becomes empty, it is deleted.
114
- * - Other keys (theme, etc.) are always preserved.
115
- */
50
+ /** Strip every hippo-owned hook from opencode.json's `hooks` key, deleting entries, keys and the object as they empty; user-authored hooks and other keys stay.
51
+ * Returns `{ migrated, jsonRepairFailed }`; jsonRepairFailed means the file is present but unparseable. */
116
52
  function migrateLegacyOpencodeHooksBlock() {
117
53
  const configPath = resolveOpencodeConfigPath();
118
54
  if (!fs.existsSync(configPath))
@@ -127,7 +63,7 @@ function migrateLegacyOpencodeHooksBlock() {
127
63
  const hooks = settings.hooks;
128
64
  // Non-object hooks values (string, array, null) are user content we don't
129
65
  // recognise — leave them alone, return migrated=false.
130
- if (!isJsonObject(hooks)) {
66
+ if (!isJsonObjectLiteral(hooks)) {
131
67
  return { migrated: false, jsonRepairFailed: false };
132
68
  }
133
69
  const hooksObj = hooks;
@@ -135,26 +71,9 @@ function migrateLegacyOpencodeHooksBlock() {
135
71
  for (const key of Object.keys(hooksObj)) {
136
72
  if (!Array.isArray(hooksObj[key]))
137
73
  continue;
138
- const survivingEntries = [];
139
- for (const entry of hooksObj[key]) {
140
- if (!isJsonObject(entry)) {
141
- survivingEntries.push(entry);
142
- continue;
143
- }
144
- const innerHooks = entry.hooks;
145
- if (!Array.isArray(innerHooks)) {
146
- survivingEntries.push(entry);
147
- continue;
148
- }
149
- const beforeInner = innerHooks.length;
150
- const survivingInner = innerHooks.filter((h) => !hookIsHippoOwned(h));
151
- if (survivingInner.length !== beforeInner)
152
- changed = true;
153
- if (survivingInner.length === 0)
154
- continue; // drop entry, nothing left
155
- entry.hooks = survivingInner;
156
- survivingEntries.push(entry);
157
- }
74
+ const { survivingEntries, strippedAny } = stripHippoHooksFromEntries(hooksObj[key]);
75
+ if (strippedAny)
76
+ changed = true;
158
77
  if (survivingEntries.length !== hooksObj[key].length)
159
78
  changed = true;
160
79
  hooksObj[key] = survivingEntries;
@@ -165,24 +84,46 @@ function migrateLegacyOpencodeHooksBlock() {
165
84
  return { migrated: false, jsonRepairFailed: false };
166
85
  if (Object.keys(hooksObj).length === 0)
167
86
  delete settings.hooks;
168
- fs.writeFileSync(configPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
87
+ writeFileAtomic(configPath, JSON.stringify(settings, null, 2) + '\n');
169
88
  return { migrated: true, jsonRepairFailed: false };
170
89
  }
90
+ /** One event's entries with every hippo-owned hook taken out, and whether any was. */
91
+ function stripHippoHooksFromEntries(entries) {
92
+ const survivingEntries = [];
93
+ let strippedAny = false;
94
+ for (const entry of entries) {
95
+ if (!isJsonObjectLiteral(entry)) {
96
+ survivingEntries.push(entry);
97
+ continue;
98
+ }
99
+ const innerHooks = entry.hooks;
100
+ if (!Array.isArray(innerHooks)) {
101
+ survivingEntries.push(entry);
102
+ continue;
103
+ }
104
+ const beforeInner = innerHooks.length;
105
+ const survivingInner = innerHooks.filter((h) => !hookIsHippoOwned(h));
106
+ if (survivingInner.length !== beforeInner)
107
+ strippedAny = true;
108
+ if (survivingInner.length === 0)
109
+ continue; // drop entry, nothing left
110
+ entry.hooks = survivingInner;
111
+ survivingEntries.push(entry);
112
+ }
113
+ return { survivingEntries, strippedAny };
114
+ }
171
115
  export function installOpencodePlugin() {
172
116
  const pluginPath = resolveOpencodePluginPath();
173
117
  const { migrated, jsonRepairFailed } = migrateLegacyOpencodeHooksBlock();
174
- // Idempotence: skip the write only if BOTH the marker is present AND the
175
- // content matches the current source. Marker-only matches (with stale
176
- // content) overwrite cleanly so future plugin-source patches reach
177
- // existing installs.
118
+ // Skip the write only if BOTH the marker is present and the content matches; a marker-only match with stale
119
+ // content is rewritten so plugin-source patches reach existing installs.
178
120
  if (fs.existsSync(pluginPath)) {
179
121
  const existing = fs.readFileSync(pluginPath, 'utf8');
180
122
  if (existing.includes(HIPPO_OPENCODE_PLUGIN_MARKER) && existing === OPENCODE_PLUGIN_SOURCE) {
181
123
  return { installed: false, pluginPath, migratedLegacyHooks: migrated, jsonRepairFailed };
182
124
  }
183
125
  }
184
- fs.mkdirSync(path.dirname(pluginPath), { recursive: true });
185
- fs.writeFileSync(pluginPath, OPENCODE_PLUGIN_SOURCE, 'utf8');
126
+ writeFileAtomic(pluginPath, OPENCODE_PLUGIN_SOURCE);
186
127
  return { installed: true, pluginPath, migratedLegacyHooks: migrated, jsonRepairFailed };
187
128
  }
188
129
  export function uninstallOpencodePlugin() {
@@ -1,7 +1,3 @@
1
- import type { JsonObject } from '../working-memory.js';
2
- import type { JsonValue } from '../json.js';
3
- /** JSON-value plain-object check (excludes arrays and null); `constructor` avoids the `typeof` tag banned by anti-slop/no-runtime-typeof. */
4
- export declare function isJsonObject(value: JsonValue | undefined): value is JsonObject;
5
1
  export type JsonHookTarget = 'claude-code' | 'codex' | 'copilot';
6
2
  export interface ToolDetection {
7
3
  name: string;
@@ -24,9 +20,11 @@ export declare const HIPPO_POST_COMPACT_MARKER = "hippo post-compact";
24
20
  export declare function homeDir(): string;
25
21
  /** Codex's config folder: $CODEX_HOME, else ~/.codex, as the Codex hooks docs describe. */
26
22
  export declare function codexHomeDir(home?: string, env?: Readonly<Record<string, string | undefined>>): string;
27
- /** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the Copilot apps resolve it (a HOME that differs from the profile must not move it). */
23
+ /** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the
24
+ * Copilot apps resolve it (a HOME that differs from the profile must not move it). */
28
25
  export declare function copilotHomeDir(home?: string, env?: Readonly<Record<string, string | undefined>>): string;
29
- /** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
26
+ /** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else
27
+ * ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
30
28
  export declare function claudeConfigDir(home?: string, env?: Readonly<Record<string, string | undefined>>): string;
31
29
  /** Codex counts as installed only when its config folder exists: Codex itself refuses a CODEX_HOME that is not a folder. */
32
30
  export declare function isCodexPresent(home?: string): boolean;
@@ -40,23 +38,12 @@ export declare function vscodeUserDirs(env?: Readonly<Record<string, string | un
40
38
  export declare function isCopilotPresent(home?: string): boolean;
41
39
  /** Codex hashes each hook and skips new or changed ones until the user reviews them in `/hooks`, so the reminder says what they would trust. */
42
40
  export declare const CODEX_TRUST_LINE = "The per-prompt hook sends your pinned memories plus up to 5 that match the prompt. Codex runs hippo's hooks only after you trust them once in `/hooks`.";
43
- /**
44
- * Default log path consumed by `hippo last-sleep`. Shared fallback when
45
- * a caller doesn't pass --path explicitly.
46
- */
41
+ /** Default log path consumed by `hippo last-sleep` when a caller passes no --path. */
47
42
  export declare function defaultSleepLogPath(): string;
48
- /**
49
- * Diagnostic-only log path for `hippo pre-compact`. Deliberately separate
50
- * from the SessionEnd sleep log: `hippo last-sleep` truncates that file on
51
- * every SessionStart, which would wipe pre-compact lines before anyone
52
- * could read them. Nothing consumes this file programmatically — it exists
53
- * for manual troubleshooting only. Overridden by `--log-file`.
54
- */
43
+ /** Diagnostic-only log path for `hippo pre-compact`, kept apart from the SessionEnd sleep log because `hippo last-sleep` truncates that one every SessionStart.
44
+ * Nothing reads it programmatically; overridden by `--log-file`. */
55
45
  export declare function defaultPreCompactLogPath(): string;
56
46
  export declare function ensureDir(dir: string): void;
57
- /**
58
- * Detect which AI coding tools are installed based on config directory presence.
59
- * Used by `hippo setup` to decide which JSON-hook installs to run.
60
- */
47
+ /** Detect which AI coding tools are installed from config directory presence; `hippo setup` uses it to pick JSON-hook installs. */
61
48
  export declare function detectInstalledTools(): ToolDetection[];
62
49
  //# sourceMappingURL=shared.d.ts.map
@@ -1,12 +1,8 @@
1
- import { envHomeDir, processEnv } from '../env.js';
1
+ import { envHomeDir, processEnv } from '../util/env.js';
2
2
  import * as fs from 'fs';
3
3
  import * as os from 'os';
4
4
  import * as path from 'path';
5
5
  import { vscodeDataFolders } from '../agent-memories/copilot.js';
6
- /** JSON-value plain-object check (excludes arrays and null); `constructor` avoids the `typeof` tag banned by anti-slop/no-runtime-typeof. */
7
- export function isJsonObject(value) {
8
- return value !== undefined && value !== null && !Array.isArray(value) && value.constructor === Object;
9
- }
10
6
  export const HIPPO_SLEEP_MARKER = 'hippo sleep';
11
7
  export const HIPPO_LAST_SLEEP_MARKER = 'hippo last-sleep';
12
8
  export const HIPPO_CAPTURE_MARKER = 'hippo capture --last-session';
@@ -25,11 +21,13 @@ export function homeDir() {
25
21
  export function codexHomeDir(home = homeDir(), env = processEnv()) {
26
22
  return env.CODEX_HOME || path.join(home, '.codex');
27
23
  }
28
- /** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the Copilot apps resolve it (a HOME that differs from the profile must not move it). */
24
+ /** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the
25
+ * Copilot apps resolve it (a HOME that differs from the profile must not move it). */
29
26
  export function copilotHomeDir(home = os.homedir(), env = processEnv()) {
30
27
  return env.COPILOT_HOME || path.join(home, '.copilot');
31
28
  }
32
- /** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
29
+ /** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else
30
+ * ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
33
31
  export function claudeConfigDir(home = os.homedir(), env = processEnv()) {
34
32
  return env.CLAUDE_CONFIG_DIR || path.join(home, '.claude');
35
33
  }
@@ -57,20 +55,12 @@ export function isCopilotPresent(home = os.homedir()) {
57
55
  }
58
56
  /** Codex hashes each hook and skips new or changed ones until the user reviews them in `/hooks`, so the reminder says what they would trust. */
59
57
  export const CODEX_TRUST_LINE = "The per-prompt hook sends your pinned memories plus up to 5 that match the prompt. Codex runs hippo's hooks only after you trust them once in `/hooks`.";
60
- /**
61
- * Default log path consumed by `hippo last-sleep`. Shared fallback when
62
- * a caller doesn't pass --path explicitly.
63
- */
58
+ /** Default log path consumed by `hippo last-sleep` when a caller passes no --path. */
64
59
  export function defaultSleepLogPath() {
65
60
  return path.join(homeDir(), '.hippo', 'logs', 'last-sleep.log');
66
61
  }
67
- /**
68
- * Diagnostic-only log path for `hippo pre-compact`. Deliberately separate
69
- * from the SessionEnd sleep log: `hippo last-sleep` truncates that file on
70
- * every SessionStart, which would wipe pre-compact lines before anyone
71
- * could read them. Nothing consumes this file programmatically — it exists
72
- * for manual troubleshooting only. Overridden by `--log-file`.
73
- */
62
+ /** Diagnostic-only log path for `hippo pre-compact`, kept apart from the SessionEnd sleep log because `hippo last-sleep` truncates that one every SessionStart.
63
+ * Nothing reads it programmatically; overridden by `--log-file`. */
74
64
  export function defaultPreCompactLogPath() {
75
65
  return path.join(homeDir(), '.hippo', 'logs', 'pre-compact.log');
76
66
  }
@@ -78,21 +68,36 @@ export function ensureDir(dir) {
78
68
  if (!fs.existsSync(dir))
79
69
  fs.mkdirSync(dir, { recursive: true });
80
70
  }
81
- /**
82
- * Detect which AI coding tools are installed based on config directory presence.
83
- * Used by `hippo setup` to decide which JSON-hook installs to run.
84
- */
71
+ /** Detect which AI coding tools are installed from config directory presence; `hippo setup` uses it to pick JSON-hook installs. */
85
72
  export function detectInstalledTools() {
86
73
  const home = homeDir();
87
74
  const exists = (...parts) => fs.existsSync(path.join(home, ...parts));
88
75
  const claudeDir = claudeConfigDir();
89
76
  return [
90
77
  { name: 'claude-code', configDir: claudeDir, detected: fs.existsSync(claudeDir), kind: 'json-hook' },
91
- { name: 'opencode', configDir: '~/.config/opencode', detected: exists('.config', 'opencode'), kind: 'plugin', notes: 'installs a TS plugin at ~/.config/opencode/plugins/hippo.ts' },
78
+ {
79
+ name: 'opencode',
80
+ configDir: '~/.config/opencode',
81
+ detected: exists('.config', 'opencode'),
82
+ kind: 'plugin',
83
+ notes: 'installs a TS plugin at ~/.config/opencode/plugins/hippo.ts'
84
+ },
92
85
  { name: 'openclaw', configDir: '~/.openclaw', detected: exists('.openclaw'), kind: 'plugin', notes: 'install via `openclaw plugins install hippo-memory`' },
93
- { name: 'codex', configDir: '~/.codex', detected: isCodexPresent(home), kind: 'wrapper', notes: 'memory hooks in hooks.json, and wraps the detected codex launcher for session-end consolidation' },
86
+ {
87
+ name: 'codex',
88
+ configDir: '~/.codex',
89
+ detected: isCodexPresent(home),
90
+ kind: 'wrapper',
91
+ notes: 'memory hooks in hooks.json, and wraps the detected codex launcher for session-end consolidation'
92
+ },
94
93
  { name: 'copilot', configDir: copilotHomeDir(), detected: isCopilotPresent(), kind: 'json-hook', notes: 'hooks in hooks/hippo.json, the MCP server in mcp-config.json and a block in copilot-instructions.md; for VS Code, the server in each User mcp.json and prompts/hippo.instructions.md' },
95
- { name: 'cursor', configDir: '~/.cursor', detected: exists('.cursor'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
94
+ {
95
+ name: 'cursor',
96
+ configDir: '~/.cursor',
97
+ detected: exists('.cursor'),
98
+ kind: 'markdown-instruction',
99
+ notes: 'no hook API - patches AGENTS.md in the project'
100
+ },
96
101
  { name: 'pi', configDir: '~/.pi', detected: exists('.pi'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
97
102
  ];
98
103
  }
@@ -1,22 +1,12 @@
1
- /**
2
- * Memory importers for Hippo.
3
- * Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown.
4
- */
5
- import { MemoryEntry } from '../memory.js';
6
- import type { JsonValue } from '../json.js';
1
+ /** Memory importers for Hippo.
2
+ * Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown. */
3
+ import { MemoryEntry } from '../core/memory.js';
7
4
  export interface ImportResult {
8
5
  total: number;
9
6
  imported: number;
10
7
  skipped: number;
11
- /** AT1: refused by the rejection-value guard — kept distinct from
12
- * `skipped` (dedup) so a tombstoned value is distinguishable from a
13
- * plain duplicate in import summaries (plan §3 containment, round-2 low).
14
- * AT1 P2 fix (codex, published-surface compat): optional, not required —
15
- * `ImportResult` is re-exported from the package root (index.ts), and a
16
- * required field breaks any existing consumer constructing the pre-AT1
17
- * shape. Every producer in this file still always sets a real number;
18
- * `?? 0` at read sites (this file's own accumulation, cli.ts's summary
19
- * prints) tolerates a caller-supplied object that omits it. */
8
+ /** Entries refused by the rejection-value guard, kept apart from `skipped` (dedup) so a tombstoned value is distinguishable in summaries.
9
+ * Optional because `ImportResult` is exported from the package root and a required field breaks existing consumers; read sites use `?? 0`. */
20
10
  rejected?: number;
21
11
  /** K1 vault import: rows archived this run (changed + source-deleted). In a
22
12
  * dryRun this is the would-be count (a true deletion-sync preview). */
@@ -30,36 +20,17 @@ export interface ImportOptions {
30
20
  global?: boolean;
31
21
  extraTags?: string[];
32
22
  hippoRoot: string;
33
- /**
34
- * L9: tenant scope for the dedup read. When provided AND `global` is
35
- * false, the dedup check only considers this tenant's existing entries.
36
- * Ignored when `global: true` (global writes are host-wide by definition).
37
- * Undefined preserves pre-1.12.1 host-wide dedup behaviour.
38
- */
23
+ /** Tenant scope for the dedup read: when set and `global` is false, only this tenant's entries count.
24
+ * Ignored when `global: true` (host-wide); undefined means host-wide dedup. */
39
25
  tenantId?: string;
40
- /**
41
- * K1 vault import only. Logical vault name used in the `vault:<name>` tag and
42
- * the `artifactRef='vault:<name>:<relpath>'` key. REQUIRED by importVault: it
43
- * is the identity key for the destructive source-deletion sync, so it must be
44
- * set explicitly rather than inferred from the folder basename (two vaults
45
- * sharing a basename would collide and clobber each other). importVault throws
46
- * if it is missing or blank. Optional in this shared type only because the
47
- * other importers ignore it. Operator-supplied, so the loader query LIKE-escapes
48
- * it (`escapeLike` in src/escape.ts).
49
- */
26
+ /** K1 vault import only: logical vault name for the `vault:<name>` tag and `artifactRef` key. REQUIRED by importVault (throws if missing or blank),
27
+ * because it keys the destructive deletion sync and two vaults sharing a basename would clobber each other. LIKE-escaped by the loader. */
50
28
  name?: string;
51
- /**
52
- * K1 vault import only. Memory scope stamped on every imported note. Defaults
53
- * to null (unscoped) when unset.
54
- */
29
+ /** K1 vault import only. Memory scope stamped on every imported note. Defaults
30
+ * to null (unscoped) when unset. */
55
31
  scope?: string;
56
32
  }
57
- /**
58
- * Given an array of raw text chunks, deduplicate against existing memories,
59
- * create MemoryEntry objects, write them (unless dry-run), and return a result.
60
- */
33
+ /** Given an array of raw text chunks, deduplicate against existing memories,
34
+ * create MemoryEntry objects, write them (unless dry-run), and return a result. */
61
35
  export declare function importEntries(chunks: string[], source: string, tags: string[], options: ImportOptions): ImportResult;
62
- export declare function isJsonPlainObject(x: JsonValue): x is {
63
- [key: string]: JsonValue;
64
- };
65
36
  //# sourceMappingURL=core.d.ts.map
@@ -1,32 +1,21 @@
1
- /**
2
- * Memory importers for Hippo.
3
- * Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown.
4
- */
5
- import { createMemory, Layer } from '../memory.js';
6
- import { writeEntryOn } from '../store/entry-writes.js';
7
- import { openStore } from '../store/open.js';
1
+ /** Memory importers for Hippo.
2
+ * Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown. */
3
+ import { DEFAULT_TENANT_ID } from '../util/env.js';
4
+ import { createMemory, Layer } from '../core/memory.js';
5
+ import { writeEntry } from '../store/entry-writes.js';
8
6
  import { loadAllEntries } from '../store/entry-reads.js';
9
- import { duplicateKey, storedTextKeys } from '../same-text.js';
10
- import { getGlobalRoot, initGlobal } from '../shared.js';
11
- import { openHippoDb, closeHippoDb } from '../db.js';
12
- import { RejectedValueError, checkRejectionGuard } from '../rejection.js';
13
- import { loadConfig } from '../config.js';
14
- import { vetSecrets } from '../secret-detect.js';
15
- import { log } from '../log.js';
16
- // ---------------------------------------------------------------------------
17
- // Shared core: dedup + write
18
- // ---------------------------------------------------------------------------
19
- /**
20
- * Given an array of raw text chunks, deduplicate against existing memories,
21
- * create MemoryEntry objects, write them (unless dry-run), and return a result.
22
- */
7
+ import { duplicateKey, storedTextKeys } from '../util/same-text.js';
8
+ import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
9
+ import { withRequestStoresSync } from '../db/request-stores.js';
10
+ import { RejectedValueError } from '../store/rejection.js';
11
+ import { rejectionGuardRefuses } from '../store/rejected-values.js';
12
+ import { loadConfig } from '../core/config.js';
13
+ import { vetSecrets } from '../util/secret-detect.js';
14
+ import { log } from '../util/log.js';
15
+ /** Given an array of raw text chunks, deduplicate against existing memories,
16
+ * create MemoryEntry objects, write them (unless dry-run), and return a result. */
23
17
  export function importEntries(chunks, source, tags, options) {
24
- const targetRoot = options.global ? getGlobalRoot() : options.hippoRoot;
25
- // Ensure store is ready
26
- if (options.global) {
27
- initGlobal();
28
- }
29
- const keys = storedTextKeys(loadAllEntries(targetRoot, options.global ? undefined : options.tenantId));
18
+ const { targetRoot, keys } = openImportTarget(options);
30
19
  const allTags = [...new Set([...tags, ...(options.extraTags ?? [])])];
31
20
  const baseHalfLifeDays = loadConfig(targetRoot).defaultHalfLifeDays;
32
21
  let total = 0;
@@ -35,24 +24,19 @@ export function importEntries(chunks, source, tags, options) {
35
24
  let rejected = 0;
36
25
  let redacted = 0;
37
26
  const entries = [];
38
- // A dry run probes the rejection guard read-only; a real run writes every chunk on this one handle.
39
- const db = options.dryRun ? openHippoDb(targetRoot) : openStore(targetRoot);
40
- try {
27
+ // One scope, so the store opens once however many chunks land: each write, or a dry run's guard probe, shares its handle.
28
+ return withRequestStoresSync(() => {
41
29
  for (const raw of chunks) {
42
30
  const { chunk, wasRedacted } = prepareImportChunk(raw, allTags);
43
- // Skip empty or too-short chunks
44
- if (!chunk || chunk.length < 10) {
45
- skipped++;
46
- continue;
47
- }
48
- total++;
49
- // Dedup check: skip only when the same text is already stored
50
- if (keys.has(duplicateKey(chunk))) {
31
+ const skip = skipReason(chunk, keys);
32
+ if (skip !== 'too-short')
33
+ total++;
34
+ if (skip !== null) {
51
35
  skipped++;
52
36
  continue;
53
37
  }
54
38
  const entry = createImportEntry(chunk, source, allTags, options, baseHalfLifeDays);
55
- if (!writeOrProbeImport(db, targetRoot, entry, options)) {
39
+ if (!writeOrProbeImport(targetRoot, entry, options)) {
56
40
  rejected++;
57
41
  continue;
58
42
  }
@@ -65,10 +49,26 @@ export function importEntries(chunks, source, tags, options) {
65
49
  redacted++;
66
50
  }
67
51
  return { total, imported, skipped, rejected, redacted, entries };
52
+ });
53
+ }
54
+ /** The store the import writes to, made ready, with the text keys it already holds. */
55
+ function openImportTarget(options) {
56
+ const targetRoot = options.global ? getGlobalRoot() : options.hippoRoot;
57
+ // Ensure store is ready
58
+ if (options.global) {
59
+ initGlobal();
68
60
  }
69
- finally {
70
- closeHippoDb(db);
71
- }
61
+ const keys = storedTextKeys(loadAllEntries(targetRoot, options.global ? undefined : options.tenantId));
62
+ return { targetRoot, keys };
63
+ }
64
+ function skipReason(chunk, keys) {
65
+ // Skip empty or too-short chunks
66
+ if (!chunk || chunk.length < 10)
67
+ return 'too-short';
68
+ // Dedup check: skip only when the same text is already stored
69
+ if (keys.has(duplicateKey(chunk)))
70
+ return 'duplicate';
71
+ return null;
72
72
  }
73
73
  /** The secret-vetted chunk capped at 1000 chars, and whether vetting changed it. */
74
74
  function prepareImportChunk(raw, allTags) {
@@ -81,17 +81,8 @@ function prepareImportChunk(raw, allTags) {
81
81
  return { chunk: trimmed.slice(0, 1000), wasRedacted };
82
82
  }
83
83
  function createImportEntry(chunk, source, allTags, options, baseHalfLifeDays) {
84
- // A3: kind defaults to 'distilled'. ChatGPT/Claude/Cursor exports are curated
85
- // user pastes, not raw transcripts from a system of record, so distilled is
86
- // correct here. E1.3 (Slack ingestion) shipped 2026-04-29 in src/connectors/slack/
87
- // and sets kind: 'raw' + routes deletions through archiveRawMemory() — these
88
- // importers stay 'distilled' per the original reasoning. See MEMORY_ENVELOPE.md.
89
- // L9: the dedup read above is scoped by options.tenantId — the WRITE
90
- // must match, or scoped-dedup-passes-then-default-tenant-write breaks
91
- // the per-tenant contract. Mirror the dedup-read guard: global=true
92
- // → host-wide write to global store (tenantId irrelevant, createMemory
93
- // defaults to 'default'). global=false → write to the same tenant as
94
- // the dedup read.
84
+ // kind defaults to 'distilled': these exports are curated user pastes, not raw transcripts from a system of record (see MEMORY_ENVELOPE.md).
85
+ // The write must use the same tenant as the scoped dedup read above: global=true writes host-wide, global=false writes to options.tenantId.
95
86
  return createMemory(chunk, {
96
87
  layer: Layer.Episodic,
97
88
  tags: allTags,
@@ -102,13 +93,12 @@ function createImportEntry(chunk, source, allTags, options, baseHalfLifeDays) {
102
93
  });
103
94
  }
104
95
  /** Writes the entry, or on a dry run only probes the guard; false when a rejected value refuses it. */
105
- function writeOrProbeImport(db, targetRoot, entry, options) {
96
+ function writeOrProbeImport(targetRoot, entry, options) {
97
+ if (options.dryRun)
98
+ return !rejectionGuardRefuses(targetRoot, entry.tenantId ?? DEFAULT_TENANT_ID, entry.id, entry.content);
106
99
  // A rejection refuses one chunk, not the whole import, so siblings still land.
107
100
  try {
108
- if (options.dryRun)
109
- checkRejectionGuard(db, entry.tenantId ?? 'default', entry.id, entry.content);
110
- else
111
- writeEntryOn(db, targetRoot, entry);
101
+ writeEntry(targetRoot, entry);
112
102
  }
113
103
  catch (err) {
114
104
  if (err instanceof RejectedValueError)
@@ -117,10 +107,4 @@ function writeOrProbeImport(db, targetRoot, entry, options) {
117
107
  }
118
108
  return true;
119
109
  }
120
- // ---------------------------------------------------------------------------
121
- // ChatGPT importer
122
- // ---------------------------------------------------------------------------
123
- export function isJsonPlainObject(x) {
124
- return x !== null && !Array.isArray(x) && typeof x === 'object';
125
- }
126
110
  //# sourceMappingURL=core.js.map