hippo-memory 1.70.0 → 1.72.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 (855) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-memories/apply.d.ts +0 -11
  3. package/dist/agent-memories/apply.js +6 -21
  4. package/dist/agent-memories/claude-code.d.ts +4 -2
  5. package/dist/agent-memories/claude-code.js +15 -6
  6. package/dist/agent-memories/codex.js +1 -1
  7. package/dist/agent-memories/copilot.d.ts +1 -3
  8. package/dist/agent-memories/copilot.js +1 -17
  9. package/dist/agent-memories/files.js +23 -12
  10. package/dist/agent-memories/markdown.d.ts +1 -3
  11. package/dist/agent-memories/markdown.js +1 -3
  12. package/dist/agent-memories/project-folds.d.ts +10 -0
  13. package/dist/agent-memories/project-folds.js +34 -0
  14. package/dist/agent-memories/report.js +2 -1
  15. package/dist/agent-memories/sync.d.ts +4 -2
  16. package/dist/agent-memories/sync.js +18 -11
  17. package/dist/api/assemble.d.ts +7 -44
  18. package/dist/api/assemble.js +3 -23
  19. package/dist/api/audit.d.ts +33 -1
  20. package/dist/api/audit.js +48 -1
  21. package/dist/api/auth.d.ts +20 -26
  22. package/dist/api/auth.js +43 -29
  23. package/dist/api/auto-sleep.d.ts +5 -2
  24. package/dist/api/auto-sleep.js +9 -5
  25. package/dist/api/availability.d.ts +2 -15
  26. package/dist/api/availability.js +4 -18
  27. package/dist/api/cards.d.ts +42 -0
  28. package/dist/api/cards.js +52 -0
  29. package/dist/api/conflicts.d.ts +28 -0
  30. package/dist/api/conflicts.js +61 -0
  31. package/dist/api/context-render.js +4 -3
  32. package/dist/api/context-select.js +12 -15
  33. package/dist/api/context-types.d.ts +10 -35
  34. package/dist/api/context.d.ts +5 -22
  35. package/dist/api/context.js +38 -46
  36. package/dist/api/continuity.d.ts +47 -0
  37. package/dist/api/continuity.js +66 -0
  38. package/dist/{cli → api}/correction-latency.d.ts +2 -14
  39. package/dist/{cli → api}/correction-latency.js +2 -14
  40. package/dist/api/dormant.d.ts +5 -21
  41. package/dist/api/dormant.js +11 -28
  42. package/dist/api/drill-down.d.ts +7 -46
  43. package/dist/api/drill-down.js +6 -27
  44. package/dist/api/embeddings.d.ts +17 -0
  45. package/dist/api/embeddings.js +28 -0
  46. package/dist/api/error-reply.d.ts +8 -0
  47. package/dist/api/error-reply.js +21 -0
  48. package/dist/api/forget.d.ts +11 -26
  49. package/dist/api/forget.js +23 -35
  50. package/dist/api/goals.d.ts +1 -1
  51. package/dist/api/goals.js +5 -9
  52. package/dist/api/graph.d.ts +8 -0
  53. package/dist/api/graph.js +7 -0
  54. package/dist/api/index.d.ts +6 -2
  55. package/dist/api/index.js +6 -2
  56. package/dist/api/instruction-detect.js +21 -6
  57. package/dist/api/learn.d.ts +4 -0
  58. package/dist/api/learn.js +53 -27
  59. package/dist/api/ledger-db.d.ts +2 -5
  60. package/dist/api/ledger-db.js +5 -35
  61. package/dist/api/memories.d.ts +23 -0
  62. package/dist/api/memories.js +46 -0
  63. package/dist/api/objects.d.ts +9 -0
  64. package/dist/api/objects.js +11 -0
  65. package/dist/api/on-store.js +5 -3
  66. package/dist/api/outcome.js +1 -1
  67. package/dist/api/pilot-arm.d.ts +1 -11
  68. package/dist/api/pilot-arm.js +5 -45
  69. package/dist/api/predictions.d.ts +11 -0
  70. package/dist/api/predictions.js +24 -0
  71. package/dist/api/projects.d.ts +21 -0
  72. package/dist/api/projects.js +24 -0
  73. package/dist/api/promote.d.ts +13 -17
  74. package/dist/api/promote.js +12 -20
  75. package/dist/api/prompt-hook.d.ts +19 -6
  76. package/dist/api/prompt-hook.js +54 -13
  77. package/dist/api/provenance-coverage.d.ts +14 -0
  78. package/dist/{cli → api}/provenance-coverage.js +2 -6
  79. package/dist/api/recall-cli.d.ts +58 -0
  80. package/dist/api/recall-cli.js +103 -0
  81. package/dist/api/recall-core.js +17 -9
  82. package/dist/api/recall-finish.d.ts +53 -0
  83. package/dist/api/recall-finish.js +30 -0
  84. package/dist/api/recall-history.d.ts +17 -84
  85. package/dist/api/recall-history.js +15 -88
  86. package/dist/api/recall-pipeline.d.ts +2 -3
  87. package/dist/api/recall-pipeline.js +21 -15
  88. package/dist/api/recall-request.js +1 -1
  89. package/dist/api/recall-types.d.ts +64 -304
  90. package/dist/api/recall.d.ts +3 -34
  91. package/dist/api/recall.js +63 -89
  92. package/dist/api/refine.d.ts +7 -0
  93. package/dist/api/refine.js +10 -0
  94. package/dist/api/remember-local.d.ts +57 -0
  95. package/dist/api/remember-local.js +90 -0
  96. package/dist/api/remember.d.ts +20 -2
  97. package/dist/api/remember.js +16 -3
  98. package/dist/api/session-end.d.ts +22 -0
  99. package/dist/api/session-end.js +101 -0
  100. package/dist/api/sleep-run.d.ts +2 -4
  101. package/dist/api/sleep-run.js +28 -28
  102. package/dist/api/sleep.d.ts +9 -28
  103. package/dist/api/status.d.ts +24 -0
  104. package/dist/api/status.js +40 -0
  105. package/dist/api/store-init.d.ts +4 -0
  106. package/dist/api/store-init.js +9 -0
  107. package/dist/api/tokens.d.ts +3 -10
  108. package/dist/api/tokens.js +4 -11
  109. package/dist/api/types.d.ts +8 -29
  110. package/dist/api/types.js +10 -23
  111. package/dist/capture/caller-session.d.ts +0 -3
  112. package/dist/capture/caller-session.js +1 -12
  113. package/dist/capture/capture-error.d.ts +2 -2
  114. package/dist/capture/capture-error.js +23 -18
  115. package/dist/capture/codex-patch.js +3 -1
  116. package/dist/capture/command.d.ts +4 -12
  117. package/dist/capture/command.js +39 -114
  118. package/dist/capture/compact.d.ts +4 -15
  119. package/dist/capture/compact.js +26 -30
  120. package/dist/capture/compaction-items-caller.js +11 -20
  121. package/dist/capture/compaction-record.d.ts +7 -93
  122. package/dist/capture/compaction-record.js +34 -399
  123. package/dist/capture/compaction-spool.d.ts +5 -3
  124. package/dist/capture/compaction-spool.js +21 -7
  125. package/dist/capture/copilot-transcript.d.ts +2 -1
  126. package/dist/capture/copilot-transcript.js +2 -1
  127. package/dist/capture/extract.d.ts +5 -2
  128. package/dist/capture/extract.js +4 -3
  129. package/dist/capture/failure-caller.d.ts +1 -1
  130. package/dist/capture/failure-caller.js +21 -16
  131. package/dist/capture/failure-reading.d.ts +2 -1
  132. package/dist/capture/failure-reading.js +7 -9
  133. package/dist/capture/pre-compact-caller.js +5 -4
  134. package/dist/capture/session-digest.d.ts +1 -1
  135. package/dist/capture/session-digest.js +17 -10
  136. package/dist/capture/session-end-caller.js +2 -1
  137. package/dist/capture/session-worker.js +3 -4
  138. package/dist/capture/transcript.d.ts +4 -11
  139. package/dist/capture/transcript.js +10 -21
  140. package/dist/capture/working-state.d.ts +4 -2
  141. package/dist/capture/working-state.js +4 -2
  142. package/dist/cli/api-context.d.ts +3 -0
  143. package/dist/cli/api-context.js +6 -0
  144. package/dist/cli/audit-prune.d.ts +1 -59
  145. package/dist/cli/audit-prune.js +2 -61
  146. package/dist/cli/audit.d.ts +1 -1
  147. package/dist/cli/audit.js +42 -43
  148. package/dist/cli/auth.d.ts +2 -2
  149. package/dist/cli/auth.js +61 -44
  150. package/dist/cli/briefs.d.ts +1 -4
  151. package/dist/cli/briefs.js +42 -301
  152. package/dist/cli/card.d.ts +2 -2
  153. package/dist/cli/card.js +63 -56
  154. package/dist/cli/client.d.ts +12 -27
  155. package/dist/cli/client.js +41 -44
  156. package/dist/cli/compact-resume-payload.js +4 -3
  157. package/dist/cli/context.d.ts +2 -3
  158. package/dist/cli/context.js +22 -18
  159. package/dist/cli/continuity.d.ts +6 -6
  160. package/dist/cli/continuity.js +81 -86
  161. package/dist/cli/curate.d.ts +13 -17
  162. package/dist/cli/curate.js +88 -116
  163. package/dist/cli/dag.d.ts +4 -4
  164. package/dist/cli/dag.js +55 -34
  165. package/dist/cli/decisions.d.ts +2 -4
  166. package/dist/cli/decisions.js +18 -309
  167. package/dist/cli/eval.d.ts +1 -1
  168. package/dist/cli/eval.js +27 -26
  169. package/dist/cli/exit.d.ts +6 -0
  170. package/dist/cli/exit.js +11 -0
  171. package/dist/cli/explain.d.ts +2 -3
  172. package/dist/cli/explain.js +25 -27
  173. package/dist/cli/flag-values.d.ts +6 -1
  174. package/dist/cli/flag-values.js +42 -15
  175. package/dist/cli/flags.d.ts +0 -288
  176. package/dist/cli/flags.js +3 -138
  177. package/dist/cli/github.d.ts +14 -0
  178. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  179. package/dist/cli/goals.d.ts +2 -2
  180. package/dist/cli/goals.js +46 -50
  181. package/dist/cli/graph.d.ts +3 -0
  182. package/dist/cli/graph.js +83 -0
  183. package/dist/cli/hook-runtime.d.ts +12 -32
  184. package/dist/cli/hook-runtime.js +21 -64
  185. package/dist/cli/incidents.d.ts +3 -0
  186. package/dist/cli/incidents.js +112 -0
  187. package/dist/cli/init.d.ts +2 -2
  188. package/dist/cli/init.js +33 -30
  189. package/dist/cli/install-steps.d.ts +2 -1
  190. package/dist/cli/install-steps.js +13 -14
  191. package/dist/cli/last-sleep.d.ts +2 -1
  192. package/dist/cli/last-sleep.js +4 -1
  193. package/dist/cli/lenient-id.d.ts +2 -0
  194. package/dist/cli/lenient-id.js +13 -0
  195. package/dist/cli/maintenance.d.ts +5 -5
  196. package/dist/cli/maintenance.js +37 -43
  197. package/dist/cli/notes.d.ts +2 -0
  198. package/dist/cli/notes.js +41 -0
  199. package/dist/cli/object-verbs.js +4 -3
  200. package/dist/cli/open-browser.d.ts +14 -0
  201. package/dist/cli/open-browser.js +26 -0
  202. package/dist/cli/owner-validation.d.ts +5 -28
  203. package/dist/cli/owner-validation.js +5 -28
  204. package/dist/cli/playbooks.d.ts +3 -4
  205. package/dist/cli/playbooks.js +131 -300
  206. package/dist/cli/predictions.d.ts +3 -0
  207. package/dist/cli/predictions.js +175 -0
  208. package/dist/cli/print.d.ts +2 -5
  209. package/dist/cli/print.js +3 -5
  210. package/dist/cli/projects.d.ts +2 -2
  211. package/dist/cli/projects.js +31 -25
  212. package/dist/cli/quality-repair-once.d.ts +1 -1
  213. package/dist/cli/quality-repair-once.js +7 -6
  214. package/dist/cli/recall.d.ts +2 -4
  215. package/dist/cli/recall.js +67 -137
  216. package/dist/cli/refine-llm.d.ts +5 -31
  217. package/dist/cli/refine-llm.js +23 -50
  218. package/dist/cli/remember.d.ts +3 -3
  219. package/dist/cli/remember.js +134 -192
  220. package/dist/cli/scheduler.d.ts +2 -17
  221. package/dist/cli/scheduler.js +14 -19
  222. package/dist/cli/serve.js +23 -14
  223. package/dist/cli/session-hooks.d.ts +11 -19
  224. package/dist/cli/session-hooks.js +143 -214
  225. package/dist/cli/setup.d.ts +4 -4
  226. package/dist/cli/setup.js +35 -30
  227. package/dist/cli/shared.d.ts +7 -25
  228. package/dist/cli/shared.js +17 -60
  229. package/dist/cli/slack.d.ts +2 -2
  230. package/dist/cli/slack.js +19 -23
  231. package/dist/cli/sleep-render.js +6 -3
  232. package/dist/cli/sleep.d.ts +3 -2
  233. package/dist/cli/sleep.js +17 -49
  234. package/dist/cli/status.d.ts +11 -14
  235. package/dist/cli/status.js +74 -120
  236. package/dist/cli/stdin.d.ts +4 -6
  237. package/dist/cli/stdin.js +2 -3
  238. package/dist/cli/transfer.d.ts +9 -9
  239. package/dist/cli/transfer.js +87 -108
  240. package/dist/cli/usage.d.ts +0 -79
  241. package/dist/cli/usage.js +1 -689
  242. package/dist/cli/verb-row.d.ts +32 -0
  243. package/dist/cli/verb-row.js +6 -0
  244. package/dist/cli/verbs/health.d.ts +27 -0
  245. package/dist/cli/verbs/health.js +232 -0
  246. package/dist/cli/verbs/memory.d.ts +16 -0
  247. package/dist/cli/verbs/memory.js +244 -0
  248. package/dist/cli/verbs/objects.d.ts +20 -0
  249. package/dist/cli/verbs/objects.js +254 -0
  250. package/dist/cli/verbs/sessions.d.ts +31 -0
  251. package/dist/cli/verbs/sessions.js +312 -0
  252. package/dist/cli/verbs.d.ts +81 -0
  253. package/dist/cli/verbs.js +7 -0
  254. package/dist/cli/versioned-verbs.d.ts +51 -0
  255. package/dist/cli/versioned-verbs.js +79 -0
  256. package/dist/cli.d.ts +1 -654
  257. package/dist/cli.js +44 -510
  258. package/dist/connectors/dlq.d.ts +39 -3
  259. package/dist/connectors/dlq.js +37 -3
  260. package/dist/connectors/github/backfill.d.ts +5 -25
  261. package/dist/connectors/github/backfill.js +26 -52
  262. package/dist/connectors/github/deletion.d.ts +4 -18
  263. package/dist/connectors/github/deletion.js +2 -15
  264. package/dist/connectors/github/dlq.d.ts +8 -33
  265. package/dist/connectors/github/dlq.js +34 -93
  266. package/dist/connectors/github/ingest.d.ts +4 -12
  267. package/dist/connectors/github/ingest.js +5 -36
  268. package/dist/connectors/github/octokit-client.d.ts +4 -16
  269. package/dist/connectors/github/octokit-client.js +27 -24
  270. package/dist/connectors/github/ratelimit.d.ts +3 -14
  271. package/dist/connectors/github/ratelimit.js +3 -14
  272. package/dist/connectors/github/scope.d.ts +3 -5
  273. package/dist/connectors/github/scope.js +3 -5
  274. package/dist/connectors/github/signature.d.ts +4 -26
  275. package/dist/connectors/github/signature.js +4 -26
  276. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  277. package/dist/connectors/github/tenant-routing.js +4 -26
  278. package/dist/connectors/github/transform.js +2 -16
  279. package/dist/connectors/github/types.d.ts +3 -15
  280. package/dist/connectors/github/types.js +2 -9
  281. package/dist/connectors/github/webhook.d.ts +3 -16
  282. package/dist/connectors/github/webhook.js +38 -23
  283. package/dist/connectors/ingest.d.ts +10 -0
  284. package/dist/connectors/ingest.js +28 -0
  285. package/dist/connectors/slack/backfill.d.ts +4 -17
  286. package/dist/connectors/slack/backfill.js +4 -13
  287. package/dist/connectors/slack/dlq.d.ts +2 -19
  288. package/dist/connectors/slack/dlq.js +51 -90
  289. package/dist/connectors/slack/ingest.d.ts +4 -9
  290. package/dist/connectors/slack/ingest.js +4 -30
  291. package/dist/connectors/slack/scope.d.ts +2 -8
  292. package/dist/connectors/slack/scope.js +2 -8
  293. package/dist/connectors/slack/signature.d.ts +1 -6
  294. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  295. package/dist/connectors/slack/tenant-routing.js +2 -21
  296. package/dist/connectors/slack/transform.d.ts +2 -18
  297. package/dist/connectors/slack/transform.js +2 -18
  298. package/dist/connectors/slack/types.d.ts +3 -9
  299. package/dist/connectors/slack/types.js +2 -4
  300. package/dist/connectors/slack/web-client.js +33 -27
  301. package/dist/connectors/slack/webhook.d.ts +3 -19
  302. package/dist/connectors/slack/webhook.js +6 -26
  303. package/dist/connectors/slack/workspaces.d.ts +4 -24
  304. package/dist/connectors/slack/workspaces.js +4 -24
  305. package/dist/consolidate/conflicts.js +7 -15
  306. package/dist/consolidate/dag-summary.d.ts +8 -0
  307. package/dist/consolidate/dag-summary.js +41 -0
  308. package/dist/consolidate/dag.d.ts +5 -28
  309. package/dist/consolidate/dag.js +29 -84
  310. package/dist/consolidate/decay.js +7 -19
  311. package/dist/consolidate/dedupe.d.ts +13 -52
  312. package/dist/consolidate/dedupe.js +18 -74
  313. package/dist/consolidate/flush-units.d.ts +3 -4
  314. package/dist/consolidate/flush-units.js +3 -3
  315. package/dist/consolidate/half-life-migration.d.ts +3 -26
  316. package/dist/consolidate/half-life-migration.js +11 -28
  317. package/dist/consolidate/llm-passes.js +49 -40
  318. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  319. package/dist/consolidate/memory-value-weights.js +2 -13
  320. package/dist/consolidate/memory-value.d.ts +11 -84
  321. package/dist/consolidate/memory-value.js +18 -105
  322. package/dist/consolidate/merge.js +12 -33
  323. package/dist/consolidate/physics-pass.d.ts +6 -1
  324. package/dist/consolidate/physics-pass.js +27 -9
  325. package/dist/consolidate/replay.d.ts +6 -38
  326. package/dist/consolidate/replay.js +25 -56
  327. package/dist/consolidate/run.js +1 -1
  328. package/dist/consolidate/sleep.d.ts +1 -8
  329. package/dist/consolidate/sleep.js +13 -22
  330. package/dist/consolidate/trace.d.ts +3 -18
  331. package/dist/consolidate/trace.js +3 -18
  332. package/dist/consolidate/traces.js +9 -25
  333. package/dist/core/ablation.d.ts +14 -91
  334. package/dist/core/ablation.js +16 -91
  335. package/dist/core/active-scope.d.ts +7 -0
  336. package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
  337. package/dist/core/ambient.d.ts +5 -8
  338. package/dist/core/ambient.js +40 -26
  339. package/dist/core/api-errors.d.ts +16 -0
  340. package/dist/core/api-errors.js +20 -0
  341. package/dist/core/capture-contract.d.ts +4 -2
  342. package/dist/core/capture-contract.js +4 -2
  343. package/dist/core/card.d.ts +4 -1
  344. package/dist/core/card.js +11 -1
  345. package/dist/core/compaction-timing.d.ts +7 -0
  346. package/dist/core/compaction-timing.js +9 -0
  347. package/dist/core/compare.d.ts +11 -67
  348. package/dist/core/compare.js +9 -63
  349. package/dist/core/config.d.ts +10 -24
  350. package/dist/core/config.js +20 -16
  351. package/dist/core/cosine.d.ts +3 -0
  352. package/dist/core/cosine.js +19 -0
  353. package/dist/core/handoff.d.ts +1 -7
  354. package/dist/core/handoff.js +1 -7
  355. package/dist/core/markdown.d.ts +6 -0
  356. package/dist/{store → core}/markdown.js +23 -22
  357. package/dist/core/memory-audit.d.ts +17 -0
  358. package/dist/core/memory-audit.js +54 -0
  359. package/dist/core/memory-quality.js +1 -1
  360. package/dist/core/memory.d.ts +51 -168
  361. package/dist/core/memory.js +76 -239
  362. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  363. package/dist/{consolidate → core}/merged-row.js +3 -2
  364. package/dist/core/package-root.d.ts +3 -0
  365. package/dist/core/package-root.js +5 -0
  366. package/dist/core/physics-config.d.ts +1 -4
  367. package/dist/core/physics-config.js +3 -8
  368. package/dist/core/physics.d.ts +15 -61
  369. package/dist/core/physics.js +65 -138
  370. package/dist/core/prediction.d.ts +3 -0
  371. package/dist/core/prediction.js +6 -0
  372. package/dist/core/project-identity.d.ts +20 -58
  373. package/dist/core/project-identity.js +27 -39
  374. package/dist/core/project-remote.js +13 -2
  375. package/dist/core/raw-append-only.d.ts +5 -0
  376. package/dist/core/raw-append-only.js +7 -0
  377. package/dist/core/recall-scope.d.ts +69 -0
  378. package/dist/core/recall-scope.js +138 -0
  379. package/dist/core/salience.d.ts +1 -7
  380. package/dist/core/salience.js +1 -7
  381. package/dist/dashboard/dashboard-actions.js +2 -2
  382. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  383. package/dist/dashboard/dashboard-snapshot.js +11 -2
  384. package/dist/dashboard/dashboard-types.d.ts +2 -1
  385. package/dist/dashboard/dashboard.d.ts +1 -0
  386. package/dist/dashboard/dashboard.js +50 -4
  387. package/dist/db/busy.d.ts +3 -8
  388. package/dist/db/busy.js +37 -33
  389. package/dist/db/connect.js +7 -8
  390. package/dist/db/index.d.ts +3 -3
  391. package/dist/db/index.js +3 -3
  392. package/dist/db/migrate.js +3 -3
  393. package/dist/db/migrations/index.d.ts +1 -1
  394. package/dist/db/migrations/index.js +3 -1
  395. package/dist/db/migrations/types.d.ts +2 -5
  396. package/dist/db/migrations/v14.js +2 -3
  397. package/dist/db/migrations/v15.js +2 -8
  398. package/dist/db/migrations/v16.js +2 -3
  399. package/dist/db/migrations/v17.js +2 -3
  400. package/dist/db/migrations/v19.js +2 -5
  401. package/dist/db/migrations/v20.js +2 -7
  402. package/dist/db/migrations/v22.js +4 -17
  403. package/dist/db/migrations/v23.js +3 -14
  404. package/dist/db/migrations/v24.js +2 -4
  405. package/dist/db/migrations/v25.js +3 -8
  406. package/dist/db/migrations/v26.js +2 -13
  407. package/dist/db/migrations/v27.js +3 -11
  408. package/dist/db/migrations/v28.js +2 -14
  409. package/dist/db/migrations/v29.js +4 -18
  410. package/dist/db/migrations/v30.js +4 -16
  411. package/dist/db/migrations/v31.js +2 -15
  412. package/dist/db/migrations/v32.js +4 -22
  413. package/dist/db/migrations/v33.js +2 -15
  414. package/dist/db/migrations/v34.js +2 -11
  415. package/dist/db/migrations/v35.js +2 -11
  416. package/dist/db/migrations/v36.js +2 -11
  417. package/dist/db/migrations/v37.js +8 -33
  418. package/dist/db/migrations/v38.js +5 -38
  419. package/dist/db/migrations/v39.js +9 -20
  420. package/dist/db/migrations/v40.js +2 -9
  421. package/dist/db/migrations/v41.js +2 -24
  422. package/dist/db/migrations/v43.js +1 -1
  423. package/dist/db/migrations/v44.js +2 -8
  424. package/dist/db/migrations/v45.js +2 -7
  425. package/dist/db/migrations/v47.js +2 -3
  426. package/dist/db/migrations/v51.js +1 -1
  427. package/dist/db/migrations/v55.d.ts +3 -0
  428. package/dist/db/migrations/v55.js +17 -0
  429. package/dist/db/open.d.ts +2 -2
  430. package/dist/db/open.js +21 -9
  431. package/dist/db/physics-state.d.ts +6 -22
  432. package/dist/db/physics-state.js +28 -39
  433. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  434. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  435. package/dist/db/tables.d.ts +2 -0
  436. package/dist/db/tables.js +6 -2
  437. package/dist/db/vector-store.d.ts +2 -0
  438. package/dist/db/vector-store.js +25 -5
  439. package/dist/db/wal-checkpointer.js +2 -1
  440. package/dist/doctor.js +85 -27
  441. package/dist/embeddings/local.d.ts +62 -0
  442. package/dist/embeddings/local.js +146 -0
  443. package/dist/embeddings/provider.d.ts +43 -0
  444. package/dist/{store/embeddings → embeddings}/provider.js +58 -83
  445. package/dist/embeddings/transformers.d.ts +26 -0
  446. package/dist/embeddings/transformers.js +89 -0
  447. package/dist/entry/session-text.d.ts +1 -1
  448. package/dist/entry/session-text.js +3 -2
  449. package/dist/eval/eval-stats.d.ts +15 -53
  450. package/dist/eval/eval-stats.js +12 -42
  451. package/dist/eval/eval-suite.d.ts +2 -13
  452. package/dist/eval/eval-suite.js +91 -45
  453. package/dist/eval/eval.d.ts +6 -24
  454. package/dist/eval/eval.js +8 -35
  455. package/dist/eval/judgment.d.ts +0 -3
  456. package/dist/eval/judgment.js +30 -15
  457. package/dist/extensions/openclaw-plugin/index.js +1 -1
  458. package/dist/graph/extract.d.ts +5 -27
  459. package/dist/graph/extract.js +10 -36
  460. package/dist/graph/recall.d.ts +7 -20
  461. package/dist/graph/recall.js +15 -77
  462. package/dist/graph/stream.d.ts +7 -39
  463. package/dist/graph/stream.js +11 -34
  464. package/dist/graph/view.d.ts +9 -35
  465. package/dist/graph/view.js +24 -44
  466. package/dist/graph/write.d.ts +1 -1
  467. package/dist/graph/write.js +9 -9
  468. package/dist/hooks/codex-session.js +3 -2
  469. package/dist/hooks/codex-wrapper.js +4 -3
  470. package/dist/hooks/copilot.js +2 -1
  471. package/dist/hooks/hook-blocks.d.ts +6 -2
  472. package/dist/hooks/hook-blocks.js +37 -124
  473. package/dist/hooks/json-hooks.d.ts +4 -36
  474. package/dist/hooks/json-hooks.js +22 -59
  475. package/dist/hooks/opencode.d.ts +0 -38
  476. package/dist/hooks/opencode.js +17 -81
  477. package/dist/hooks/shared.d.ts +6 -21
  478. package/dist/hooks/shared.js +31 -33
  479. package/dist/importers/core.d.ts +12 -37
  480. package/dist/importers/core.js +10 -28
  481. package/dist/importers/markdown-parse.d.ts +8 -22
  482. package/dist/importers/markdown-parse.js +8 -25
  483. package/dist/importers/markdown.js +3 -12
  484. package/dist/importers/sources.js +12 -39
  485. package/dist/importers/vault.d.ts +2 -8
  486. package/dist/importers/vault.js +31 -85
  487. package/dist/index.d.ts +8 -3
  488. package/dist/index.js +8 -3
  489. package/dist/learn/autolearn.d.ts +23 -42
  490. package/dist/learn/autolearn.js +45 -52
  491. package/dist/learn/churn-git.js +13 -4
  492. package/dist/learn/extract.d.ts +3 -2
  493. package/dist/learn/extract.js +8 -8
  494. package/dist/learn/forward-claim-detector.d.ts +6 -30
  495. package/dist/learn/forward-claim-detector.js +18 -68
  496. package/dist/learn/invalidation.d.ts +6 -18
  497. package/dist/learn/invalidation.js +18 -31
  498. package/dist/mcp/admin-tools.d.ts +2 -2
  499. package/dist/mcp/admin-tools.js +30 -53
  500. package/dist/mcp/format.js +3 -2
  501. package/dist/mcp/framing.d.ts +1 -0
  502. package/dist/mcp/framing.js +1 -1
  503. package/dist/mcp/memory-tools.js +7 -10
  504. package/dist/mcp/protocol.d.ts +15 -29
  505. package/dist/mcp/protocol.js +26 -16
  506. package/dist/mcp/recall-tools.js +14 -11
  507. package/dist/mcp/request.d.ts +3 -11
  508. package/dist/mcp/request.js +12 -27
  509. package/dist/mcp/server.d.ts +3 -9
  510. package/dist/mcp/server.js +5 -16
  511. package/dist/mcp/session-state.d.ts +1 -1
  512. package/dist/mcp/session-state.js +5 -11
  513. package/dist/mcp/stdio.d.ts +2 -6
  514. package/dist/mcp/stdio.js +68 -16
  515. package/dist/mcp/tool-args.js +2 -1
  516. package/dist/mcp/tools.js +47 -22
  517. package/dist/objects/customer-notes.d.ts +9 -44
  518. package/dist/objects/customer-notes.js +7 -48
  519. package/dist/objects/decisions.d.ts +14 -52
  520. package/dist/objects/decisions.js +15 -53
  521. package/dist/objects/descriptor.d.ts +1 -1
  522. package/dist/objects/incidents.d.ts +9 -40
  523. package/dist/objects/incidents.js +7 -41
  524. package/dist/objects/lifecycle.d.ts +1 -1
  525. package/dist/objects/lifecycle.js +2 -1
  526. package/dist/objects/policies.d.ts +13 -91
  527. package/dist/objects/policies.js +13 -99
  528. package/dist/objects/processes.d.ts +9 -54
  529. package/dist/objects/processes.js +7 -61
  530. package/dist/objects/project-briefs.d.ts +13 -57
  531. package/dist/objects/project-briefs.js +16 -78
  532. package/dist/objects/skills.d.ts +9 -44
  533. package/dist/objects/skills.js +8 -54
  534. package/dist/postinstall.js +7 -20
  535. package/dist/predictions/planning-fallacy.d.ts +11 -34
  536. package/dist/rerankers/clef.js +6 -37
  537. package/dist/rerankers/cross-encoder.d.ts +31 -2
  538. package/dist/rerankers/cross-encoder.js +65 -101
  539. package/dist/rerankers/index.js +5 -4
  540. package/dist/rerankers/jev.js +11 -10
  541. package/dist/rerankers/llm.d.ts +2 -11
  542. package/dist/rerankers/llm.js +14 -14
  543. package/dist/rerankers/outage-warning.d.ts +5 -2
  544. package/dist/rerankers/outage-warning.js +7 -4
  545. package/dist/rerankers/remote.d.ts +1 -0
  546. package/dist/rerankers/remote.js +2 -0
  547. package/dist/rerankers/types.d.ts +2 -14
  548. package/dist/search/bm25-search.js +1 -1
  549. package/dist/search/boosts.d.ts +0 -2
  550. package/dist/search/boosts.js +3 -3
  551. package/dist/search/embed-memories.d.ts +9 -0
  552. package/dist/search/embed-memories.js +377 -0
  553. package/dist/search/goal-boost.d.ts +23 -0
  554. package/dist/search/goal-boost.js +93 -0
  555. package/dist/search/hybrid.d.ts +11 -2
  556. package/dist/search/hybrid.js +9 -4
  557. package/dist/search/multihop.js +2 -3
  558. package/dist/search/path-context.d.ts +5 -18
  559. package/dist/search/path-context.js +5 -18
  560. package/dist/search/physics-search.d.ts +6 -3
  561. package/dist/search/physics-search.js +29 -19
  562. package/dist/search/rerank.js +1 -1
  563. package/dist/search/rrf.d.ts +7 -35
  564. package/dist/search/rrf.js +5 -30
  565. package/dist/search/vector.d.ts +13 -4
  566. package/dist/search/vector.js +40 -13
  567. package/dist/server/auth.d.ts +11 -28
  568. package/dist/server/auth.js +49 -32
  569. package/dist/server/boot.d.ts +2 -21
  570. package/dist/server/boot.js +69 -161
  571. package/dist/server/client-ip.d.ts +3 -21
  572. package/dist/server/client-ip.js +8 -30
  573. package/dist/server/deadline.d.ts +0 -2
  574. package/dist/server/deadline.js +1 -7
  575. package/dist/server/defaults.d.ts +4 -0
  576. package/dist/server/defaults.js +5 -0
  577. package/dist/server/key-check-bounds.d.ts +2 -1
  578. package/dist/server/lifecycle.d.ts +5 -4
  579. package/dist/server/lifecycle.js +19 -4
  580. package/dist/server/mcp-http.js +24 -53
  581. package/dist/server/rate-limit.d.ts +5 -18
  582. package/dist/server/rate-limit.js +4 -13
  583. package/dist/server/request.d.ts +4 -8
  584. package/dist/server/request.js +16 -19
  585. package/dist/server/route-checks.d.ts +7 -0
  586. package/dist/server/route-checks.js +42 -0
  587. package/dist/server/route-table.d.ts +9 -8
  588. package/dist/server/route-table.js +127 -139
  589. package/dist/server/routes/admin.d.ts +8 -8
  590. package/dist/server/routes/admin.js +35 -49
  591. package/dist/server/routes/customer-notes.d.ts +6 -6
  592. package/dist/server/routes/customer-notes.js +8 -14
  593. package/dist/server/routes/decisions.d.ts +6 -6
  594. package/dist/server/routes/decisions.js +12 -21
  595. package/dist/server/routes/incidents.d.ts +6 -6
  596. package/dist/server/routes/incidents.js +14 -25
  597. package/dist/server/routes/memories.d.ts +9 -9
  598. package/dist/server/routes/memories.js +20 -63
  599. package/dist/server/routes/object-routes.d.ts +6 -11
  600. package/dist/server/routes/object-routes.js +11 -22
  601. package/dist/server/routes/policies.d.ts +7 -7
  602. package/dist/server/routes/policies.js +12 -22
  603. package/dist/server/routes/predictions.d.ts +6 -6
  604. package/dist/server/routes/predictions.js +22 -38
  605. package/dist/server/routes/processes.d.ts +6 -6
  606. package/dist/server/routes/processes.js +17 -28
  607. package/dist/server/routes/project-briefs.d.ts +7 -7
  608. package/dist/server/routes/project-briefs.js +11 -20
  609. package/dist/server/routes/recall.d.ts +5 -5
  610. package/dist/server/routes/recall.js +16 -45
  611. package/dist/server/routes/skills.d.ts +7 -7
  612. package/dist/server/routes/skills.js +10 -22
  613. package/dist/server/server-detect.d.ts +15 -53
  614. package/dist/server/server-detect.js +55 -96
  615. package/dist/server/sleep-child.js +26 -7
  616. package/dist/server/sleep-offload.d.ts +11 -5
  617. package/dist/server/sleep-offload.js +21 -12
  618. package/dist/server/types.d.ts +32 -18
  619. package/dist/server/validation.d.ts +3 -2
  620. package/dist/server/validation.js +15 -33
  621. package/dist/server.d.ts +7 -6
  622. package/dist/server.js +8 -6
  623. package/dist/sharing/global-store.d.ts +19 -0
  624. package/dist/sharing/global-store.js +75 -0
  625. package/dist/sharing/global-sync.d.ts +6 -0
  626. package/dist/sharing/global-sync.js +73 -0
  627. package/dist/sharing/project-merge.d.ts +11 -19
  628. package/dist/sharing/project-merge.js +63 -125
  629. package/dist/sharing/search-both.d.ts +60 -0
  630. package/dist/sharing/search-both.js +138 -0
  631. package/dist/sharing/share.d.ts +40 -0
  632. package/dist/sharing/share.js +229 -0
  633. package/dist/store/ambient.js +9 -15
  634. package/dist/store/audit-event.d.ts +5 -13
  635. package/dist/store/audit-event.js +4 -12
  636. package/dist/store/audit.d.ts +2 -21
  637. package/dist/store/audit.js +8 -67
  638. package/dist/store/auth.d.ts +10 -8
  639. package/dist/store/auth.js +17 -12
  640. package/dist/store/candidates.d.ts +23 -5
  641. package/dist/store/candidates.js +119 -71
  642. package/dist/store/capture-write.d.ts +17 -0
  643. package/dist/store/capture-write.js +35 -0
  644. package/dist/store/card-detail.d.ts +2 -1
  645. package/dist/store/card-detail.js +2 -1
  646. package/dist/store/cards.d.ts +14 -9
  647. package/dist/store/cards.js +72 -126
  648. package/dist/store/compaction-caller.d.ts +18 -0
  649. package/dist/store/compaction-caller.js +29 -0
  650. package/dist/store/compactions-record.d.ts +115 -0
  651. package/dist/store/compactions-record.js +417 -0
  652. package/dist/store/compactions.js +6 -4
  653. package/dist/store/conflicts.d.ts +4 -21
  654. package/dist/store/conflicts.js +76 -152
  655. package/dist/store/connectors/dlq.d.ts +10 -0
  656. package/dist/store/connectors/dlq.js +32 -0
  657. package/dist/store/connectors/github.d.ts +14 -16
  658. package/dist/store/connectors/github.js +34 -57
  659. package/dist/store/connectors/slack.d.ts +2 -11
  660. package/dist/store/connectors/slack.js +18 -47
  661. package/dist/store/dashboard-reads.js +11 -14
  662. package/dist/store/delete-and-batch.d.ts +17 -31
  663. package/dist/store/delete-and-batch.js +84 -67
  664. package/dist/store/delivery-recorder.d.ts +15 -4
  665. package/dist/store/delivery-recorder.js +34 -17
  666. package/dist/store/descendant-page.js +6 -3
  667. package/dist/store/diagnostics.js +6 -13
  668. package/dist/store/dormant.d.ts +8 -30
  669. package/dist/store/dormant.js +18 -57
  670. package/dist/store/embeddings/index.d.ts +11 -90
  671. package/dist/store/embeddings/index.js +18 -523
  672. package/dist/store/entry-reads.d.ts +34 -61
  673. package/dist/store/entry-reads.js +111 -136
  674. package/dist/store/entry-row.d.ts +6 -35
  675. package/dist/store/entry-row.js +9 -37
  676. package/dist/store/entry-writes.d.ts +12 -18
  677. package/dist/store/entry-writes.js +46 -44
  678. package/dist/store/failure-log-at.d.ts +8 -0
  679. package/dist/store/failure-log-at.js +16 -0
  680. package/dist/store/failure-log.d.ts +2 -2
  681. package/dist/store/failure-log.js +5 -3
  682. package/dist/{trust → store}/gated-write.d.ts +3 -1
  683. package/dist/{trust → store}/gated-write.js +7 -5
  684. package/dist/store/goals.d.ts +3 -40
  685. package/dist/store/goals.js +41 -178
  686. package/dist/store/graph-queue.d.ts +6 -22
  687. package/dist/store/graph-queue.js +14 -45
  688. package/dist/store/graph-reads.d.ts +11 -35
  689. package/dist/store/graph-reads.js +24 -60
  690. package/dist/store/graph-rows.d.ts +3 -6
  691. package/dist/store/graph-rows.js +6 -9
  692. package/dist/store/graph-view-rows.d.ts +2 -1
  693. package/dist/store/graph-view-rows.js +2 -1
  694. package/dist/store/graph-writes.d.ts +10 -35
  695. package/dist/store/graph-writes.js +59 -106
  696. package/dist/store/half-life.d.ts +2 -1
  697. package/dist/store/half-life.js +14 -16
  698. package/dist/store/handoffs.d.ts +6 -12
  699. package/dist/store/handoffs.js +22 -40
  700. package/dist/store/index-and-stats.d.ts +6 -19
  701. package/dist/store/index-and-stats.js +36 -84
  702. package/dist/store/key-writes.js +1 -1
  703. package/dist/store/ledger-turn.d.ts +9 -0
  704. package/dist/store/ledger-turn.js +38 -0
  705. package/dist/store/mirrors.d.ts +2 -6
  706. package/dist/store/mirrors.js +24 -29
  707. package/dist/store/open.d.ts +0 -4
  708. package/dist/store/open.js +42 -62
  709. package/dist/store/pilot-arm.d.ts +12 -0
  710. package/dist/store/pilot-arm.js +42 -0
  711. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  712. package/dist/store/planning-fallacy-evidence.js +8 -37
  713. package/dist/store/port.d.ts +91 -82
  714. package/dist/store/port.js +8 -0
  715. package/dist/store/predictions.d.ts +12 -53
  716. package/dist/store/predictions.js +41 -125
  717. package/dist/store/project-tags.d.ts +62 -0
  718. package/dist/store/project-tags.js +67 -0
  719. package/dist/{cli → store}/quality-repair.js +15 -31
  720. package/dist/store/quarantine.js +2 -1
  721. package/dist/store/raw-archive.d.ts +4 -16
  722. package/dist/store/raw-archive.js +14 -29
  723. package/dist/store/recall-trace.d.ts +12 -77
  724. package/dist/store/recall-trace.js +37 -97
  725. package/dist/store/rejected-values.js +9 -20
  726. package/dist/store/rejection-probe.d.ts +4 -0
  727. package/dist/store/rejection-probe.js +19 -0
  728. package/dist/store/rejection.d.ts +10 -73
  729. package/dist/store/rejection.js +12 -84
  730. package/dist/store/report-reads.d.ts +6 -0
  731. package/dist/store/report-reads.js +29 -0
  732. package/dist/store/rows.d.ts +9 -19
  733. package/dist/store/rows.js +36 -34
  734. package/dist/store/rule-sql.d.ts +14 -0
  735. package/dist/store/rule-sql.js +56 -0
  736. package/dist/store/search-rows.d.ts +7 -38
  737. package/dist/store/search-rows.js +23 -54
  738. package/dist/store/sessions.d.ts +10 -47
  739. package/dist/store/sessions.js +21 -75
  740. package/dist/store/set-aside.d.ts +14 -0
  741. package/dist/store/set-aside.js +23 -0
  742. package/dist/store/sqlite/busy.d.ts +3 -0
  743. package/dist/store/sqlite/busy.js +8 -0
  744. package/dist/store/sqlite/connector-events-group.js +5 -8
  745. package/dist/store/sqlite/connector-writes-group.js +3 -3
  746. package/dist/store/sqlite/entry-writes-group.js +4 -4
  747. package/dist/store/sqlite/error-codec.js +8 -5
  748. package/dist/store/sqlite/executor.d.ts +2 -1
  749. package/dist/store/sqlite/executor.js +12 -5
  750. package/dist/store/sqlite/graph-reads-group.js +1 -1
  751. package/dist/store/sqlite/held-connection.d.ts +9 -0
  752. package/dist/store/sqlite/held-connection.js +41 -0
  753. package/dist/store/sqlite/local.d.ts +3 -3
  754. package/dist/store/sqlite/local.js +1 -0
  755. package/dist/store/sqlite/object-rows.d.ts +1 -1
  756. package/dist/store/sqlite/object-rows.js +6 -3
  757. package/dist/store/sqlite/objects-group.d.ts +1 -1
  758. package/dist/store/sqlite/objects-group.js +5 -3
  759. package/dist/store/sqlite/quarantine-group.js +2 -2
  760. package/dist/store/sqlite/store.d.ts +1 -4
  761. package/dist/store/sqlite/store.js +16 -15
  762. package/dist/store/sqlite/vector-reads-group.js +2 -2
  763. package/dist/store/sqlite/worker-jobs.js +1 -1
  764. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  765. package/dist/store/sqlite/worker-ops.js +13 -2
  766. package/dist/store/sqlite/worker-store.js +5 -2
  767. package/dist/store/summaries.d.ts +11 -63
  768. package/dist/store/summaries.js +37 -148
  769. package/dist/store/summary-dirty.js +1 -1
  770. package/dist/store/tenant-lookup.d.ts +6 -1
  771. package/dist/store/tenant-lookup.js +7 -0
  772. package/dist/store/tenant.d.ts +2 -16
  773. package/dist/store/tenant.js +4 -19
  774. package/dist/store/token-ledger.d.ts +13 -50
  775. package/dist/store/token-ledger.js +19 -85
  776. package/dist/store/usage-reports.js +5 -13
  777. package/dist/store/vector-index.d.ts +46 -0
  778. package/dist/store/vector-index.js +171 -0
  779. package/dist/store/working-memory.d.ts +6 -25
  780. package/dist/store/working-memory.js +18 -52
  781. package/dist/support-bundle.js +9 -8
  782. package/dist/trust/reject-flow.js +3 -5
  783. package/dist/util/agent-homes.d.ts +15 -0
  784. package/dist/util/agent-homes.js +34 -0
  785. package/dist/util/anthropic-messages.d.ts +3 -0
  786. package/dist/util/anthropic-messages.js +35 -6
  787. package/dist/util/atomic-write.d.ts +2 -1
  788. package/dist/util/atomic-write.js +35 -4
  789. package/dist/util/capped-json.d.ts +6 -0
  790. package/dist/util/capped-json.js +46 -0
  791. package/dist/util/chunked.d.ts +3 -0
  792. package/dist/util/chunked.js +10 -0
  793. package/dist/util/crash-handlers.d.ts +8 -1
  794. package/dist/util/crash-handlers.js +52 -10
  795. package/dist/util/ellipsize.d.ts +3 -0
  796. package/dist/util/ellipsize.js +5 -0
  797. package/dist/util/env.d.ts +14 -6
  798. package/dist/util/env.js +15 -7
  799. package/dist/util/format.d.ts +3 -0
  800. package/dist/util/format.js +6 -0
  801. package/dist/util/home-path.d.ts +2 -1
  802. package/dist/util/home-path.js +4 -2
  803. package/dist/util/hook-payload.d.ts +8 -0
  804. package/dist/util/hook-payload.js +37 -0
  805. package/dist/util/http-retry.d.ts +9 -1
  806. package/dist/util/http-retry.js +67 -8
  807. package/dist/util/http-util.d.ts +0 -8
  808. package/dist/util/http-util.js +10 -21
  809. package/dist/util/limits.d.ts +7 -0
  810. package/dist/util/limits.js +14 -0
  811. package/dist/util/log.d.ts +7 -2
  812. package/dist/util/log.js +34 -9
  813. package/dist/util/request-scope.d.ts +5 -2
  814. package/dist/util/request-scope.js +13 -7
  815. package/dist/util/secret-detect.d.ts +5 -30
  816. package/dist/util/secret-detect.js +19 -40
  817. package/dist/util/sqlite-blocked.d.ts +2 -0
  818. package/dist/util/sqlite-blocked.js +5 -0
  819. package/dist/util/stored-json.d.ts +1 -1
  820. package/dist/util/stored-json.js +1 -1
  821. package/dist/util/stream-tee.d.ts +3 -0
  822. package/dist/util/stream-tee.js +35 -0
  823. package/dist/util/time.d.ts +4 -0
  824. package/dist/util/time.js +4 -0
  825. package/dist/util/token-text.d.ts +1 -4
  826. package/dist/util/token-text.js +1 -4
  827. package/dist/util/transcript-tail.d.ts +2 -0
  828. package/dist/util/transcript-tail.js +24 -23
  829. package/dist/util/version.d.ts +5 -20
  830. package/dist/util/version.js +5 -20
  831. package/dist/{store → util}/yaml.d.ts +1 -5
  832. package/dist/{store → util}/yaml.js +2 -6
  833. package/extensions/openclaw-plugin/index.ts +1 -1
  834. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  835. package/extensions/openclaw-plugin/package.json +1 -1
  836. package/openclaw.plugin.json +1 -1
  837. package/package.json +2 -2
  838. package/dist/cli/provenance-coverage.d.ts +0 -18
  839. package/dist/connectors/github/cli-impl.d.ts +0 -25
  840. package/dist/sharing/scope.d.ts +0 -14
  841. package/dist/sharing/shared.d.ts +0 -187
  842. package/dist/sharing/shared.js +0 -563
  843. package/dist/store/embeddings/local.d.ts +0 -15
  844. package/dist/store/embeddings/local.js +0 -192
  845. package/dist/store/embeddings/provider.d.ts +0 -77
  846. package/dist/store/markdown.d.ts +0 -10
  847. package/dist/store/recall-scope.d.ts +0 -138
  848. package/dist/store/recall-scope.js +0 -216
  849. package/dist/store/vector-writes.d.ts +0 -13
  850. package/dist/store/vector-writes.js +0 -89
  851. /package/dist/{store → core}/object-types.d.ts +0 -0
  852. /package/dist/{store → core}/object-types.js +0 -0
  853. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
  854. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  855. /package/dist/{capture → util}/compaction-items.js +0 -0
@@ -1,14 +1,21 @@
1
- // PostToolUseFailure for a caller on another machine: the lesson and its log row carry the caller's owner and project, and a retried request id gets the first answer.
1
+ // PostToolUseFailure for a caller on another machine: the lesson and its log row carry the caller's owner and project, and a retried
2
+ // request id gets the first answer.
2
3
  import { BadRequestError } from '../core/api-errors.js';
3
4
  import { storeLesson } from './capture-error.js';
4
- import { recordFailure, requestOutcome, settleFailureOutcome } from '../store/failure-log.js';
5
+ import { recordFailureAt, requestOutcomeAt, settleFailureOutcomeAt } from '../store/failure-log-at.js';
5
6
  import { errorMessage, log } from '../util/log.js';
6
7
  import { scrubForSharing } from './share-scrub.js';
7
8
  import { truncateCodePointSafe } from '../util/transcript-tail.js';
8
- import { assertRequestId, bindCaller, withCallerDb } from './caller-session.js';
9
+ import { assertRequestId, bindCaller } from './caller-session.js';
9
10
  import { FAILURE_TEXT_MAX_CHARS, failureHash } from './failure-reading.js';
10
11
  const SKIPS = { 'skipped-interrupt': true, 'skipped-routine': true, 'skipped-invalid': true };
11
- const ROUTINE_RULES = { declined: true, 'os-permission': true, 'no-match': true, 'search-tool': true, 'quiet-exit': true };
12
+ const ROUTINE_RULES = {
13
+ declined: true,
14
+ 'os-permission': true,
15
+ 'no-match': true,
16
+ 'search-tool': true,
17
+ 'quiet-exit': true,
18
+ };
12
19
  /** The shapes lessonFromFailure gives: text for a lesson or a routine skip, none for an interrupt or an unreadable payload, a rule only on a routine skip. */
13
20
  function checkedFailure(req) {
14
21
  assertRequestId(req.requestId);
@@ -35,7 +42,7 @@ function checkedFailure(req) {
35
42
  export function captureFailureForCaller(ctx, req) {
36
43
  const failure = checkedFailure(req);
37
44
  const key = bindCaller(ctx, req.sessionId, req.project);
38
- const earlier = withCallerDb(ctx, (db) => requestOutcome(db, ctx.tenantId, req.requestId, req.sessionId));
45
+ const earlier = requestOutcomeAt(ctx.hippoRoot, ctx.tenantId, req.requestId, req.sessionId);
39
46
  // A retry after a lost reply gets the first answer and writes nothing; one whose store failed tries the store again.
40
47
  if (earlier !== null && earlier !== 'store-failed')
41
48
  return { outcome: earlier };
@@ -54,17 +61,15 @@ export function captureFailureForCaller(ctx, req) {
54
61
  /** Runs after the outcome in its own try, so a log error never hides the store's error or its outcome. */
55
62
  function logOutcome(ctx, req, key, outcome, retried) {
56
63
  try {
57
- withCallerDb(ctx, (db) => {
58
- // The request id allows one row, so a retry rewrites the first try's outcome.
59
- if (retried) {
60
- settleFailureOutcome(db, ctx.tenantId, req.requestId, outcome);
61
- return;
62
- }
63
- recordFailure(db, {
64
- tenantId: ctx.tenantId, sessionId: req.sessionId, tool: req.tool, outcome, rule: req.rule,
65
- sigHash: req.text?.trim() ? failureHash(req.text) : null, detailHash: req.detailHash,
66
- ownerSubject: key.owner, originProject: req.project.name, requestId: req.requestId,
67
- });
64
+ // The request id allows one row, so a retry rewrites the first try's outcome.
65
+ if (retried) {
66
+ settleFailureOutcomeAt(ctx.hippoRoot, ctx.tenantId, req.requestId, outcome);
67
+ return;
68
+ }
69
+ recordFailureAt(ctx.hippoRoot, {
70
+ tenantId: ctx.tenantId, sessionId: req.sessionId, tool: req.tool, outcome, rule: req.rule,
71
+ sigHash: req.text?.trim() ? failureHash(req.text) : null, detailHash: req.detailHash,
72
+ ownerSubject: key.owner, originProject: req.project.name, requestId: req.requestId,
68
73
  });
69
74
  }
70
75
  catch (err) {
@@ -22,7 +22,8 @@ export declare function payloadString(payload: JsonValue, key: 'session_id' | 't
22
22
  export declare function failureSignature(text: string): string;
23
23
  /** The hash the failure log stores for a lesson text or a detail; one function so every writer counts repeats alike. */
24
24
  export declare function failureHash(text: string): string;
25
- /** The memory text for a failure payload, or why it is not stored; a routine skip keeps its text for the log. `scrub` runs before the cap, as a mask can be longer than what it hides. Pure. */
25
+ /** The memory text for a failure payload, or why it is not stored; a routine skip keeps its text for the log. `scrub` runs before the
26
+ * cap, as a mask can be longer than what it hides. Pure. */
26
27
  export declare function lessonFromFailure(payload: JsonValue, scrub?: (text: string) => string): FailureReading;
27
28
  /** A failure as it may leave the machine: the capped lesson text and the detail's hash, never the untruncated detail. */
28
29
  export interface FailureReport {
@@ -3,7 +3,7 @@ import { redactSecretsStrict } from '../util/secret-detect.js';
3
3
  import { scrubForSharing } from './share-scrub.js';
4
4
  import { blockHash } from '../util/token-text.js';
5
5
  import { truncateCodePointSafe } from '../util/transcript-tail.js';
6
- import { isJsonObjectLiteral } from '../util/json.js';
6
+ import { isJsonObjectLiteral, isJsonString } from '../util/json.js';
7
7
  const COMMAND_HEAD_WORDS = 2;
8
8
  /** The longest lesson text a reading gives, so a check of a sent one imports it instead of copying it. */
9
9
  export const FAILURE_TEXT_MAX_CHARS = 200;
@@ -19,15 +19,12 @@ const QUIET_EXIT_1 = /^\s*(?:grep|rg|egrep|fgrep|find|test|\[|diff|cmp|git diff|
19
19
  // Claude Code's tool names, then the Copilot CLI's and VS Code's; tests/copilot-failure-reading.test.ts cites where each comes from.
20
20
  const SEARCH_TOOLS = new Set(['Grep', 'Glob', 'grep', 'glob', 'rg', 'grep_search', 'file_search', 'semantic_search']);
21
21
  const SHELL_TOOLS = new Set(['Bash', 'bash', 'powershell', 'run_in_terminal']);
22
- function isString(v) {
23
- return v !== undefined && v !== null && v.constructor === String;
24
- }
25
22
  /** A non-blank string field of the payload, or null. */
26
23
  export function payloadString(payload, key) {
27
24
  if (!isJsonObjectLiteral(payload))
28
25
  return null;
29
26
  const value = payload[key];
30
- return isString(value) && value.trim() !== '' ? value : null;
27
+ return isJsonString(value) && value.trim() !== '' ? value : null;
31
28
  }
32
29
  /** Normalised form used to spot repeats. The failure log keeps only its hash, so changing it breaks repeat counts. */
33
30
  export function failureSignature(text) {
@@ -37,7 +34,8 @@ export function failureSignature(text) {
37
34
  export function failureHash(text) {
38
35
  return blockHash(failureSignature(text));
39
36
  }
40
- /** The memory text for a failure payload, or why it is not stored; a routine skip keeps its text for the log. `scrub` runs before the cap, as a mask can be longer than what it hides. Pure. */
37
+ /** The memory text for a failure payload, or why it is not stored; a routine skip keeps its text for the log. `scrub` runs before the
38
+ * cap, as a mask can be longer than what it hides. Pure. */
41
39
  export function lessonFromFailure(payload, scrub = (text) => text) {
42
40
  if (!isJsonObjectLiteral(payload))
43
41
  return { skip: 'skipped-invalid', text: null, detail: null };
@@ -45,12 +43,12 @@ export function lessonFromFailure(payload, scrub = (text) => text) {
45
43
  const p = payload;
46
44
  if (p.is_interrupt === true)
47
45
  return { skip: 'skipped-interrupt', text: null, detail: null };
48
- if (!isString(p.error) || p.error.trim().length < 12)
46
+ if (!isJsonString(p.error) || p.error.trim().length < 12)
49
47
  return { skip: 'skipped-invalid', text: null, detail: null };
50
- const tool = isString(p.tool_name) ? p.tool_name : 'tool';
48
+ const tool = isJsonString(p.tool_name) ? p.tool_name : 'tool';
51
49
  const error = redactSecretsStrict(p.error.replace(/\s+/g, ' ').trim());
52
50
  const text = truncateCodePointSafe(scrub(`${tool}: ${error}`), FAILURE_TEXT_MAX_CHARS);
53
- const command = isJsonObjectLiteral(p.tool_input) && isString(p.tool_input['command']) ? p.tool_input['command'].replace(LEADING_CD, '') : '';
51
+ const command = isJsonObjectLiteral(p.tool_input) && isJsonString(p.tool_input['command']) ? p.tool_input['command'].replace(LEADING_CD, '') : '';
54
52
  const head = command.trim().split(/\s+/).slice(0, COMMAND_HEAD_WORDS).join(' ');
55
53
  const detail = `${tool}${head ? ` ${head}` : ''}: ${error}`;
56
54
  const routine = (rule) => ({ skip: 'skipped-routine', rule, text, detail });
@@ -1,7 +1,8 @@
1
- import { markSnapshotSaved, PRE_COMPACT_INSTRUCTION, startCompaction } from './compaction-record.js';
1
+ import { PRE_COMPACT_INSTRUCTION } from './compaction-record.js';
2
+ import { markSnapshotSavedAt, startCompactionAt } from '../store/compaction-caller.js';
2
3
  import { errorMessage, log } from '../util/log.js';
3
4
  import { loadActiveTaskSnapshot, saveActiveTaskSnapshot } from '../store/sessions.js';
4
- import { assertTrigger, bindCaller, callerInHoldout, checkedWorkingState, withCallerDb } from './caller-session.js';
5
+ import { assertTrigger, bindCaller, callerInHoldout, checkedWorkingState } from './caller-session.js';
5
6
  import { mergeWorkingState } from './working-state.js';
6
7
  /** A failed step is logged and the instruction still goes out, as the local hook prints it before any store work. */
7
8
  function logged(what, fn) {
@@ -20,10 +21,10 @@ export function preCompactForCaller(ctx, req) {
20
21
  if (callerInHoldout(ctx, req.sessionId))
21
22
  return { stdout: '' };
22
23
  const start = { sessionId: req.sessionId, originProject: req.project.name, trigger: req.trigger, cwd: null, transcriptPath: null };
23
- const recordId = logged('compaction record not started', () => withCallerDb(ctx, (db) => startCompaction(db, ctx.tenantId, start)));
24
+ const recordId = logged('compaction record not started', () => startCompactionAt(ctx.hippoRoot, ctx.tenantId, start));
24
25
  if (state !== null && saveOwnerSnapshot(ctx, req.sessionId, key, state) && recordId !== null) {
25
26
  // Marked under ctx.tenantId, which the environment's tenant may not be.
26
- logged('compaction record not marked with its snapshot', () => withCallerDb(ctx, (db) => markSnapshotSaved(db, ctx.tenantId, recordId)));
27
+ logged('compaction record not marked with its snapshot', () => markSnapshotSavedAt(ctx.hippoRoot, ctx.tenantId, recordId));
27
28
  }
28
29
  return { stdout: PRE_COMPACT_INSTRUCTION };
29
30
  }
@@ -30,7 +30,7 @@ export declare function readSessionTranscript(transcriptPath: string, log: (mess
30
30
  /** The transcript, read once and scanned, or null with the reason logged. */
31
31
  export declare function readSessionScan(transcriptPath: string, log: (message: string) => void): SessionScan | null;
32
32
  /** Test-only seam, the scheduler's pattern: lets a test prove a network path never reaches the probe. Null restores it. */
33
- export declare function __setDigestExistsProbe(probe: ((p: string) => boolean) | null): void;
33
+ export declare function _setDigestExistsProbeForTests(probe: ((p: string) => boolean) | null): void;
34
34
  /** The store root is realpath'd; transcript paths are not, and a deleted file has no realpath of its own. Null for a network path. */
35
35
  export declare function realFsPath(p: string): string | null;
36
36
  /** Repo-relative with forward slashes, '' for the root itself, null outside the repo or when the path cannot be resolved. */
@@ -10,15 +10,15 @@ import { USER_SEGMENT } from '../util/home-path.js';
10
10
  import { errorMessage } from '../util/log.js';
11
11
  import { SESSION_DIGEST_TAG } from '../core/session-digest-row.js';
12
12
  import { createMemory, Layer } from '../core/memory.js';
13
- import { RejectedValueError } from '../store/rejection.js';
13
+ import { RejectedValueError } from '../core/api-errors.js';
14
14
  import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
15
- import { isInitialized } from '../store/open.js';
15
+ import { isInitialized } from '../core/project-identity.js';
16
16
  import { writeEntry } from '../store/entry-writes.js';
17
17
  import { loadLiveContentsBySourceAndTag } from '../store/entry-reads.js';
18
18
  import { SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessions.js';
19
19
  import { loadLatestHandoff } from '../store/handoffs.js';
20
20
  import { isSyntheticMessage } from '../store/token-ledger.js';
21
- import { readTranscriptTail } from '../util/transcript-tail.js';
21
+ import { readOpenTranscriptTail } from '../util/transcript-tail.js';
22
22
  /** Five-word runs are stock phrases; six in a row is a copied clause. */
23
23
  export const ECHO_WINDOW = 6;
24
24
  /** Five sentences of about 150 chars leave room for the Changed line inside the total cap. */
@@ -228,11 +228,17 @@ export function scanSessionTranscript(jsonl) {
228
228
  };
229
229
  }
230
230
  export function readSessionTranscript(transcriptPath, log) {
231
- const size = fs.statSync(transcriptPath).size;
232
- if (size <= READ_CAP_BYTES)
233
- return fs.readFileSync(transcriptPath, 'utf8');
234
- log(`digest: transcript is ${size} bytes, reading its last ${READ_CAP_BYTES}`);
235
- return readTranscriptTail(transcriptPath, READ_CAP_BYTES);
231
+ const fd = fs.openSync(transcriptPath, 'r');
232
+ try {
233
+ const size = fs.fstatSync(fd).size;
234
+ if (size <= READ_CAP_BYTES)
235
+ return fs.readFileSync(fd, 'utf8');
236
+ log(`digest: transcript is ${size} bytes, reading its last ${READ_CAP_BYTES}`);
237
+ return readOpenTranscriptTail(fd, size, READ_CAP_BYTES);
238
+ }
239
+ finally {
240
+ fs.closeSync(fd);
241
+ }
236
242
  }
237
243
  /** The transcript, read once and scanned, or null with the reason logged. */
238
244
  export function readSessionScan(transcriptPath, log) {
@@ -246,7 +252,7 @@ export function readSessionScan(transcriptPath, log) {
246
252
  }
247
253
  let existsProbe = fs.existsSync;
248
254
  /** Test-only seam, the scheduler's pattern: lets a test prove a network path never reaches the probe. Null restores it. */
249
- export function __setDigestExistsProbe(probe) {
255
+ export function _setDigestExistsProbeForTests(probe) {
250
256
  existsProbe = probe ?? fs.existsSync;
251
257
  }
252
258
  /** A \\host or //host path would make existsSync open an SMB connection to a host named in transcript text. */
@@ -330,7 +336,8 @@ const ANCHORS = [
330
336
  /(?:^|\s)#\d+\b/,
331
337
  ];
332
338
  /** Each marker states a cause or a choice, the part of a lesson that transfers. */
333
- const MARKERS = /\b(?:because|caused by|due to|root cause|the (?:bug|issue|problem) was|fail(?:s|ed) when|so that|otherwise|instead of|rather than|switched to|decided|chose|must|never|always|do not)\b/i;
339
+ const MARKERS = new RegExp('\\b(?:because|caused by|due to|root cause|the (?:bug|issue|problem) was|fail(?:s|ed) when|so that|otherwise|' +
340
+ 'instead of|rather than|switched to|decided|chose|must|never|always|do not)\\b', 'i');
334
341
  const FENCE = /^\s*(`{3,}|~{3,})/;
335
342
  const STRUCTURE_LINE = /^\s*(?:#{1,6}\s|\||>|([-*_])(?:\s*\1){2,}\s*$)/;
336
343
  const PROTECTED = /`[^`\n]+`|\b(?:e\.g|i\.e)\./gi;
@@ -11,7 +11,8 @@ function checkedEvidence(evidence) {
11
11
  const { gitRef = null, dirtyTree = null, testStatus = null } = evidence;
12
12
  // `git rev-parse HEAD` gives 40 hex, or 64 in a SHA-256 repository.
13
13
  if (gitRef !== null && !/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/.test(gitRef))
14
- throw new BadRequestError('evidence gitRef: 40 or 64 lowercase hex characters or null');
14
+ throw new BadRequestError('evidence gitRef: 40 or 64 lowercase hex characters or ' +
15
+ 'null');
15
16
  if (dirtyTree !== null && dirtyTree !== true && dirtyTree !== false)
16
17
  throw new BadRequestError('evidence dirtyTree: true, false or null');
17
18
  if (testStatus !== null && !TEST_STATUSES.has(testStatus))
@@ -2,12 +2,11 @@
2
2
  // Two fast replies would otherwise start two workers that both read the dedupe keys before either writes.
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
- import { createHash } from 'node:crypto';
6
- import { homeDir } from '../hooks/shared.js';
5
+ import { homeDir } from '../util/agent-homes.js';
7
6
  import { errorMessage, log as logger } from '../util/log.js';
8
7
  import { isObjectLike, isStringValue } from '../core/capture-contract.js';
9
8
  import { SESSION_ID_RE } from './copilot-transcript.js';
10
- import { FINGERPRINT_HEX_CHARS } from '../util/token-text.js';
9
+ import { blockHash } from '../util/token-text.js';
11
10
  /** Null for a missing id or one that could climb out of the sessions folder. */
12
11
  function sessionStateFiles(sessionId) {
13
12
  if (sessionId === null || !SESSION_ID_RE.test(sessionId))
@@ -135,7 +134,7 @@ export async function runSessionWorker(sessionId, mode, work) {
135
134
  }
136
135
  }
137
136
  function turnKey(turn) {
138
- return createHash('sha256').update(`${turn.role}\n${turn.text}`).digest('hex').slice(0, FINGERPRINT_HEX_CHARS);
137
+ return blockHash(`${turn.role}\n${turn.text}`);
139
138
  }
140
139
  /** The cursor position after `turns`: how many there were and a hash of the last. */
141
140
  export function turnPosition(turns) {
@@ -9,7 +9,8 @@ interface TranscriptLineFlags {
9
9
  interface TranscriptMessage {
10
10
  content?: unknown;
11
11
  }
12
- /** The human's words on a Claude Code user line, '' when none; VS Code stores prompts as text blocks, beside its own open-file, selection and interrupt blocks. */
12
+ /** The human's words on a Claude Code user line, '' when none; VS Code stores prompts as text blocks, beside its own open-file, selection
13
+ * and interrupt blocks. */
13
14
  export declare function humanUserText(entry: TranscriptLineFlags, message: TranscriptMessage): string;
14
15
  export interface SessionTurn {
15
16
  role: 'user' | 'assistant';
@@ -28,16 +29,8 @@ export declare function sessionTail(turns: readonly SessionTurn[]): {
28
29
  assistants: string[];
29
30
  };
30
31
  export declare function summariseSessionTurns(turns: readonly SessionTurn[]): string;
31
- /**
32
- * Resolve a transcript path for `--last-session`.
33
- *
34
- * Priority, where the first source present is the only one tried:
35
- * 1. Explicit `transcriptPath` option (from `--transcript <path>`)
36
- * 2. Stdin JSON payload (Claude Code / OpenCode SessionEnd hook shape)
37
- * 3. Most recent `.jsonl` under `<claude config dir>/projects/<any>/` (`~/.claude` unless CLAUDE_CONFIG_DIR is set), only when the caller passes `mayScan` (only the caller knows it is not a hook) and there is no path and no stdin text, because this scan spans every project on the box
38
- *
39
- * Returns null when nothing resolves, a named transcript or payload whose file is missing included. Never throws.
40
- */
32
+ /** Resolve a transcript path for `--last-session`: `transcriptPath`, then the stdin JSON payload, then the newest `.jsonl` in the Claude config dir.
33
+ * The scan runs only with `mayScan` (it spans every project on the box); returns null when nothing resolves, never throws. */
41
34
  export declare function resolveLastSessionTranscript(explicit: string | undefined, stdinText: string | undefined, opts: {
42
35
  mayScan: boolean;
43
36
  }): string | null;
@@ -1,19 +1,13 @@
1
1
  import { envHomeDir, processEnv } from '../util/env.js';
2
- import { claudeConfigDir } from '../hooks/shared.js';
2
+ import { claudeConfigDir } from '../util/agent-homes.js';
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
5
  import { isObjectLike, isStringValue, readSessionEnd } from '../core/capture-contract.js';
6
6
  import { copilotTurn } from './copilot-transcript.js';
7
7
  const RECENT_USER_TURNS = 20;
8
8
  const RECENT_ASSISTANT_TURNS = 10;
9
- /**
10
- * Build a compact text summary from a Claude Code / OpenCode / Copilot JSONL transcript.
11
- * Keeps plain user messages and the final chunk of assistant text, drops
12
- * thinking blocks, tool_use, and tool_result noise. Capture reads the same
13
- * turns through `sessionTail`, one text per turn.
14
- *
15
- * Exported for tests.
16
- */
9
+ /** Build a compact text summary from a Claude Code / OpenCode / Copilot JSONL transcript: plain user messages and the final assistant text chunk,
10
+ * without thinking, tool_use and tool_result noise. Exported for tests. */
17
11
  /** Leading markers of the command lines Claude Code writes with type 'user'. */
18
12
  const CLAUDE_CODE_COMMAND_PREFIXES = ['<local-command-', '<command-name>', '<command-message>', '<command-args>'];
19
13
  function isNonHumanUserLine(entry, content) {
@@ -23,7 +17,8 @@ function isNonHumanUserLine(entry, content) {
23
17
  return CLAUDE_CODE_COMMAND_PREFIXES.some((p) => head.startsWith(p));
24
18
  }
25
19
  const NON_HUMAN_BLOCK_PREFIXES = ['<ide_', '[Request interrupted by user'];
26
- /** The human's words on a Claude Code user line, '' when none; VS Code stores prompts as text blocks, beside its own open-file, selection and interrupt blocks. */
20
+ /** The human's words on a Claude Code user line, '' when none; VS Code stores prompts as text blocks, beside its own open-file, selection
21
+ * and interrupt blocks. */
27
22
  export function humanUserText(entry, message) {
28
23
  const content = message.content;
29
24
  let text = '';
@@ -88,6 +83,8 @@ function claudeCodeTurn(entry) {
88
83
  }
89
84
  return chunks.length > 0 ? { role: 'assistant', text: chunks.join('\n') } : null;
90
85
  }
86
+ // Codex stores its own context as user messages: the AGENTS.md text, and one tagged block each for the environment and app state.
87
+ const CODEX_INJECTED_USER_TEXT = /^(?:# AGENTS\.md instructions\b|<([A-Za-z][\w-]*)(?:\s[^>]*)?>[\s\S]*<\/\1>$)/;
91
88
  // Codex rollout transcript shape: response_item -> payload.message
92
89
  function codexTurn(entry) {
93
90
  if (entry.type !== 'response_item')
@@ -105,7 +102,7 @@ function codexTurn(entry) {
105
102
  continue;
106
103
  const blockType = 'type' in block ? block.type : undefined;
107
104
  const blockText = 'text' in block ? block.text : undefined;
108
- if (role === 'user' && blockType === 'input_text' && isStringValue(blockText) && blockText.trim()) {
105
+ if (role === 'user' && blockType === 'input_text' && isStringValue(blockText) && blockText.trim() && !CODEX_INJECTED_USER_TEXT.test(blockText.trim())) {
109
106
  chunks.push(blockText.trim());
110
107
  }
111
108
  if (role === 'assistant' && blockType === 'output_text' && isStringValue(blockText) && blockText.trim()) {
@@ -145,16 +142,8 @@ export function summariseSessionTurns(turns) {
145
142
  tailAssistants.join('\n\n'),
146
143
  ].join('\n');
147
144
  }
148
- /**
149
- * Resolve a transcript path for `--last-session`.
150
- *
151
- * Priority, where the first source present is the only one tried:
152
- * 1. Explicit `transcriptPath` option (from `--transcript <path>`)
153
- * 2. Stdin JSON payload (Claude Code / OpenCode SessionEnd hook shape)
154
- * 3. Most recent `.jsonl` under `<claude config dir>/projects/<any>/` (`~/.claude` unless CLAUDE_CONFIG_DIR is set), only when the caller passes `mayScan` (only the caller knows it is not a hook) and there is no path and no stdin text, because this scan spans every project on the box
155
- *
156
- * Returns null when nothing resolves, a named transcript or payload whose file is missing included. Never throws.
157
- */
145
+ /** Resolve a transcript path for `--last-session`: `transcriptPath`, then the stdin JSON payload, then the newest `.jsonl` in the Claude config dir.
146
+ * The scan runs only with `mayScan` (it spans every project on the box); returns null when nothing resolves, never throws. */
158
147
  export function resolveLastSessionTranscript(explicit, stdinText, opts) {
159
148
  if (explicit)
160
149
  return fs.existsSync(explicit) ? explicit : null;
@@ -11,8 +11,10 @@ export declare function fitWorkingState(state: WorkingState): WorkingState;
11
11
  /** Each empty field falls back to `existing`'s, since a tool-heavy tail derives no task; null when all are empty, so blanks never replace a snapshot.
12
12
  * Never across sessions: another session's task saved under this id would pass compact-resume's session check. */
13
13
  export declare function mergeWorkingState(derived: WorkingState, existing: TaskSnapshot | null, sessionId: string | null): WorkingState | null;
14
- /** Keeps the LAST maxChars behind a trim marker, aligned to a nearby line start: the summary runs oldest first, so a head cap would drop the newest working state. */
14
+ /** Keeps the LAST maxChars behind a trim marker, aligned to a nearby line start: the summary runs oldest first, so a head cap would drop
15
+ * the newest working state. */
15
16
  export declare function truncateKeepNewest(text: string, maxChars: number): string;
16
- /** A session's task, summary and next step from its transcript tail, secrets scrubbed and capped, '' where none; null with a logged reason when nothing is derivable. */
17
+ /** A session's task, summary and next step from its transcript tail, secrets scrubbed and capped, '' where none; null with a logged
18
+ * reason when nothing is derivable. */
17
19
  export declare function transcriptWorkingState(transcriptPath: string, log: (message: string) => void): Pick<TaskSnapshot, 'task' | 'summary' | 'next_step'> | null;
18
20
  //# sourceMappingURL=working-state.d.ts.map
@@ -36,7 +36,8 @@ export function mergeWorkingState(derived, existing, sessionId) {
36
36
  };
37
37
  return merged.task || merged.summary || merged.next_step ? merged : null;
38
38
  }
39
- /** Keeps the LAST maxChars behind a trim marker, aligned to a nearby line start: the summary runs oldest first, so a head cap would drop the newest working state. */
39
+ /** Keeps the LAST maxChars behind a trim marker, aligned to a nearby line start: the summary runs oldest first, so a head cap would drop
40
+ * the newest working state. */
40
41
  export function truncateKeepNewest(text, maxChars) {
41
42
  if (text.length <= maxChars)
42
43
  return text;
@@ -123,7 +124,8 @@ function lastAssistantTextBlock(jsonl) {
123
124
  }
124
125
  return '';
125
126
  }
126
- /** A session's task, summary and next step from its transcript tail, secrets scrubbed and capped, '' where none; null with a logged reason when nothing is derivable. */
127
+ /** A session's task, summary and next step from its transcript tail, secrets scrubbed and capped, '' where none; null with a logged
128
+ * reason when nothing is derivable. */
127
129
  export function transcriptWorkingState(transcriptPath, log) {
128
130
  let tail = '';
129
131
  let rawTask = '';
@@ -0,0 +1,3 @@
1
+ import { type HippoDbContext } from '../api/index.js';
2
+ export declare function cliApiContext(hippoRoot: string, tenantId: string): HippoDbContext;
3
+ //# sourceMappingURL=api-context.d.ts.map
@@ -0,0 +1,6 @@
1
+ import { adminActor } from '../api/index.js';
2
+ // The one place the CLI names its audit actor; root is a parameter because some verbs target the global store.
3
+ export function cliApiContext(hippoRoot, tenantId) {
4
+ return { hippoRoot, tenantId, actor: adminActor('cli') };
5
+ }
6
+ //# sourceMappingURL=api-context.js.map
@@ -1,61 +1,3 @@
1
- /**
2
- * Audit log retention pruning.
3
- *
4
- * The `audit_log` table grows unbounded by default — every recall, write,
5
- * outcome, sleep, supersede, promote, forget, archive_raw, auth_revoke,
6
- * and auth_create emits a row. On a long-running deployment, this can
7
- * accumulate to millions of rows and slow down both audit queries and
8
- * incremental SQLite VACUUMs.
9
- *
10
- * Regulatory retention floors (HIPAA, SOX, GDPR) are why the prune is opt-in
11
- * per tenant and emits its own audit trail event.
12
- *
13
- * Design notes:
14
- * - Per-tenant by default (matches existing audit CLI conventions).
15
- * - The prune itself emits an `audit_prune` audit row with metadata
16
- * `{cutoff, count, dryRun}`, recursively recording the maintenance op
17
- * in the audit trail. Operators investigating "where did old rows go"
18
- * have one row left to find regardless of retention floor.
19
- * - Dry-run mode returns the count without deleting — first-time
20
- * operator safety.
21
- * - DELETE is wrapped in a transaction so a mid-operation crash leaves
22
- * audit_log in a consistent state.
23
- * - The audit_prune row itself is NEVER pruned by the same call (it's
24
- * written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
25
- */
26
- export interface PruneAuditOpts {
27
- /** Cutoff in days. Rows with `ts < (now - N days)` are deleted. */
28
- olderThanDays: number;
29
- /** Tenant scope. Required: prune is always tenant-scoped. */
30
- tenantId: string;
31
- /** When true, count matching rows but do NOT delete. Default false. */
32
- dryRun?: boolean;
33
- /** Actor recording the prune in the audit trail. Default 'cli'. */
34
- actor?: string;
35
- }
36
- export interface PruneAuditResult {
37
- /** ISO timestamp of the cutoff. Rows with ts strictly less than this were deleted. */
38
- cutoff: string;
39
- /** Number of audit_log rows deleted (or that would be deleted, if dryRun). */
40
- count: number;
41
- /** Echo back whether this was a dry run. */
42
- dryRun: boolean;
43
- }
44
- /**
45
- * Compute the cutoff ISO timestamp for an N-days-ago cutoff. Exported for
46
- * testability so tests can pin "now" without mocking Date.
47
- */
48
- export declare function computeCutoff(days: number, now?: Date): string;
49
- /**
50
- * Delete audit_log rows older than `olderThanDays` days for `tenantId`.
51
- * Emits an `audit_prune` event with metadata `{cutoff, count, dryRun}`.
52
- *
53
- * Throws on invalid inputs (non-positive days, missing tenantId).
54
- */
55
- export declare function pruneAuditLog(hippoRoot: string, opts: PruneAuditOpts): PruneAuditResult;
56
- /**
57
- * Parse the `--older-than <value>` flag. Accepts either bare integer days
58
- * (`30`) or integer with `d` suffix (`30d`). Throws on invalid format.
59
- */
1
+ /** Parse `--older-than`: bare integer days (`30`) or with a `d` suffix (`30d`); throws on any other format. */
60
2
  export declare function parseOlderThanFlag(raw: string): number;
61
3
  //# sourceMappingURL=audit-prune.d.ts.map
@@ -1,64 +1,5 @@
1
- /**
2
- * Audit log retention pruning.
3
- *
4
- * The `audit_log` table grows unbounded by default — every recall, write,
5
- * outcome, sleep, supersede, promote, forget, archive_raw, auth_revoke,
6
- * and auth_create emits a row. On a long-running deployment, this can
7
- * accumulate to millions of rows and slow down both audit queries and
8
- * incremental SQLite VACUUMs.
9
- *
10
- * Regulatory retention floors (HIPAA, SOX, GDPR) are why the prune is opt-in
11
- * per tenant and emits its own audit trail event.
12
- *
13
- * Design notes:
14
- * - Per-tenant by default (matches existing audit CLI conventions).
15
- * - The prune itself emits an `audit_prune` audit row with metadata
16
- * `{cutoff, count, dryRun}`, recursively recording the maintenance op
17
- * in the audit trail. Operators investigating "where did old rows go"
18
- * have one row left to find regardless of retention floor.
19
- * - Dry-run mode returns the count without deleting — first-time
20
- * operator safety.
21
- * - DELETE is wrapped in a transaction so a mid-operation crash leaves
22
- * audit_log in a consistent state.
23
- * - The audit_prune row itself is NEVER pruned by the same call (it's
24
- * written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
25
- */
26
- import { pruneAuditRows } from '../store/audit.js';
27
- import { DAY_MS } from '../util/time.js';
28
- /**
29
- * Compute the cutoff ISO timestamp for an N-days-ago cutoff. Exported for
30
- * testability so tests can pin "now" without mocking Date.
31
- */
32
- export function computeCutoff(days, now = new Date()) {
33
- const cutoff = new Date(now.getTime() - days * DAY_MS);
34
- return cutoff.toISOString();
35
- }
36
- function isTenantIdString(value) {
37
- return typeof value === 'string';
38
- }
39
- /**
40
- * Delete audit_log rows older than `olderThanDays` days for `tenantId`.
41
- * Emits an `audit_prune` event with metadata `{cutoff, count, dryRun}`.
42
- *
43
- * Throws on invalid inputs (non-positive days, missing tenantId).
44
- */
45
- export function pruneAuditLog(hippoRoot, opts) {
46
- if (!Number.isFinite(opts.olderThanDays) || opts.olderThanDays <= 0) {
47
- throw new Error(`pruneAuditLog: olderThanDays must be a positive number, got ${opts.olderThanDays}`);
48
- }
49
- if (!opts.tenantId || !isTenantIdString(opts.tenantId)) {
50
- throw new Error('pruneAuditLog: tenantId is required');
51
- }
52
- const dryRun = opts.dryRun === true;
53
- const actor = opts.actor ?? 'cli';
54
- const cutoff = computeCutoff(opts.olderThanDays);
55
- const count = pruneAuditRows(hippoRoot, { tenantId: opts.tenantId, cutoff, actor, olderThanDays: opts.olderThanDays, dryRun });
56
- return { cutoff, count, dryRun };
57
- }
58
- /**
59
- * Parse the `--older-than <value>` flag. Accepts either bare integer days
60
- * (`30`) or integer with `d` suffix (`30d`). Throws on invalid format.
61
- */
1
+ // The `--older-than` flag of `hippo audit prune`; the prune itself is api.pruneAuditLog.
2
+ /** Parse `--older-than`: bare integer days (`30`) or with a `d` suffix (`30d`); throws on any other format. */
62
3
  export function parseOlderThanFlag(raw) {
63
4
  const m = raw.match(/^(\d+)(d)?$/i);
64
5
  if (!m) {
@@ -1,3 +1,3 @@
1
1
  import { type CommandContext } from './flag-values.js';
2
- export declare function handleAudit({ hippoRoot, args, flags }: CommandContext): Promise<void>;
2
+ export declare function handleAudit({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
3
3
  //# sourceMappingURL=audit.d.ts.map