hippo-memory 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -1,4 +1,5 @@
1
- // What a PostToolUseFailure payload says, read with no store, so a hook with no store sends the same reading the local log keeps.
1
+ // What a PostToolUseFailure payload says, read with no store, so a
2
+ // hook with no store sends the same reading the local log keeps.
2
3
  import { redactSecretsStrict } from '../util/secret-detect.js';
3
4
  import { scrubForSharing } from './share-scrub.js';
4
5
  import { blockHash } from '../util/token-text.js';
@@ -8,7 +9,8 @@ const COMMAND_HEAD_WORDS = 2;
8
9
  /** The longest lesson text a reading gives, so a check of a sent one imports it instead of copying it. */
9
10
  export const FAILURE_TEXT_MAX_CHARS = 200;
10
11
  /** The user, a permission prompt or a hook said no: routine, not a lesson. */
11
- const DECLINED = /user (?:doesn't|does not) want|denied by (?:the )?user|user (?:rejected|declined|denied)|permission to use|was blocked by (?:a )?hook/i;
12
+ const DECLINED = new RegExp(String.raw `user (?:doesn't|does not) want|denied by (?:the )?user|user (?:rejected|declined|denied)|` +
13
+ String.raw `permission to use|was blocked by (?:a )?hook`, 'i');
12
14
  /** The OS or a remote host refused access (EACCES, SSH publickey): routine too, but nobody declined anything. */
13
15
  const OS_PERMISSION = /permission denied/i;
14
16
  /** Leading `cd` or `pushd` steps say where a command ran, not what it ran. */
@@ -16,8 +18,18 @@ const LEADING_CD = /^\s*(?:(?:cd|pushd)\b[^;&|]*(?:&&|\|\||;)\s*)+/;
16
18
  const NO_MATCH = /\bno (?:matches|files|results) found\b/i;
17
19
  /** Shell commands whose exit code 1 means "nothing found" or "differs", not an error. */
18
20
  const QUIET_EXIT_1 = /^\s*(?:grep|rg|egrep|fgrep|find|test|\[|diff|cmp|git diff|git grep)\b/;
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
- const SEARCH_TOOLS = new Set(['Grep', 'Glob', 'grep', 'glob', 'rg', 'grep_search', 'file_search', 'semantic_search']);
21
+ // Claude Code's tool names, then the Copilot CLI's and VS Code's; tests/copilot-failure-reading.test.ts cites where
22
+ // each comes from.
23
+ const SEARCH_TOOLS = new Set([
24
+ 'Grep',
25
+ 'Glob',
26
+ 'grep',
27
+ 'glob',
28
+ 'rg',
29
+ 'grep_search',
30
+ 'file_search',
31
+ 'semantic_search',
32
+ ]);
21
33
  const SHELL_TOOLS = new Set(['Bash', 'bash', 'powershell', 'run_in_terminal']);
22
34
  /** A non-blank string field of the payload, or null. */
23
35
  export function payloadString(payload, key) {
@@ -34,7 +46,9 @@ export function failureSignature(text) {
34
46
  export function failureHash(text) {
35
47
  return blockHash(failureSignature(text));
36
48
  }
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
49
+ /**
50
+ * The memory text for a failure payload, or why it is not stored; a routine skip keeps its text for the log. `scrub`
51
+ * runs before the
38
52
  * cap, as a mask can be longer than what it hides. Pure. */
39
53
  export function lessonFromFailure(payload, scrub = (text) => text) {
40
54
  if (!isJsonObjectLiteral(payload))
@@ -43,12 +57,15 @@ export function lessonFromFailure(payload, scrub = (text) => text) {
43
57
  const p = payload;
44
58
  if (p.is_interrupt === true)
45
59
  return { skip: 'skipped-interrupt', text: null, detail: null };
46
- if (!isJsonString(p.error) || p.error.trim().length < 12)
60
+ if (!isJsonString(p.error) || p.error.trim().length < 12) {
47
61
  return { skip: 'skipped-invalid', text: null, detail: null };
62
+ }
48
63
  const tool = isJsonString(p.tool_name) ? p.tool_name : 'tool';
49
64
  const error = redactSecretsStrict(p.error.replace(/\s+/g, ' ').trim());
50
65
  const text = truncateCodePointSafe(scrub(`${tool}: ${error}`), FAILURE_TEXT_MAX_CHARS);
51
- const command = isJsonObjectLiteral(p.tool_input) && isJsonString(p.tool_input['command']) ? p.tool_input['command'].replace(LEADING_CD, '') : '';
66
+ const command = isJsonObjectLiteral(p.tool_input) && isJsonString(p.tool_input['command'])
67
+ ? p.tool_input['command'].replace(LEADING_CD, '')
68
+ : '';
52
69
  const head = command.trim().split(/\s+/).slice(0, COMMAND_HEAD_WORDS).join(' ');
53
70
  const detail = `${tool}${head ? ` ${head}` : ''}: ${error}`;
54
71
  const routine = (rule) => ({ skip: 'skipped-routine', rule, text, detail });
@@ -1,6 +1,6 @@
1
1
  import { PRE_COMPACT_INSTRUCTION } from './compaction-record.js';
2
2
  import { markSnapshotSavedAt, startCompactionAt } from '../store/compaction-caller.js';
3
- import { errorMessage, log } from '../util/log.js';
3
+ import { errorMessage, log, errorFields } from '../util/log.js';
4
4
  import { loadActiveTaskSnapshot, saveActiveTaskSnapshot } from '../store/sessions.js';
5
5
  import { assertTrigger, bindCaller, callerInHoldout, checkedWorkingState } from './caller-session.js';
6
6
  import { mergeWorkingState } from './working-state.js';
@@ -10,7 +10,7 @@ function logged(what, fn) {
10
10
  return fn();
11
11
  }
12
12
  catch (err) {
13
- log.warn(`pre-compact: ${what}: ${errorMessage(err)}`);
13
+ log.warn(`pre-compact: ${what}: ${errorMessage(err)}`, errorFields(err));
14
14
  return null;
15
15
  }
16
16
  }
@@ -20,7 +20,13 @@ export function preCompactForCaller(ctx, req) {
20
20
  const key = bindCaller(ctx, req.sessionId, req.project);
21
21
  if (callerInHoldout(ctx, req.sessionId))
22
22
  return { stdout: '' };
23
- const start = { sessionId: req.sessionId, originProject: req.project.name, trigger: req.trigger, cwd: null, transcriptPath: null };
23
+ const start = {
24
+ sessionId: req.sessionId,
25
+ originProject: req.project.name,
26
+ trigger: req.trigger,
27
+ cwd: null,
28
+ transcriptPath: null,
29
+ };
24
30
  const recordId = logged('compaction record not started', () => startCompactionAt(ctx.hippoRoot, ctx.tenantId, start));
25
31
  if (state !== null && saveOwnerSnapshot(ctx, req.sessionId, key, state) && recordId !== null) {
26
32
  // Marked under ctx.tenantId, which the environment's tenant may not be.
@@ -35,6 +41,7 @@ function saveOwnerSnapshot(ctx, sessionId, key, state) {
35
41
  if (merged === null)
36
42
  return false;
37
43
  const snapshot = { ...merged, source: 'pre-compact', session_id: sessionId };
38
- return logged('snapshot not saved', () => saveActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, snapshot, key)) !== null;
44
+ const saved = logged('snapshot not saved', () => saveActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, snapshot, key));
45
+ return saved !== null;
39
46
  }
40
47
  //# sourceMappingURL=pre-compact-caller.js.map
@@ -24,16 +24,27 @@ export interface SessionScan {
24
24
  /** Edits that landed, in call order. */
25
25
  edits: DigestEdit[];
26
26
  }
27
- /** One pass over a Claude Code or Codex transcript: the turns capture reads, the closing message, and the edits that landed. */
27
+ /**
28
+ * One pass over a Claude Code or Codex transcript: the turns capture reads, the closing message, and the edits that
29
+ * landed.
30
+ */
28
31
  export declare function scanSessionTranscript(jsonl: string): SessionScan;
29
32
  export declare function readSessionTranscript(transcriptPath: string, log: (message: string) => void): string;
30
33
  /** The transcript, read once and scanned, or null with the reason logged. */
31
34
  export declare function readSessionScan(transcriptPath: string, log: (message: string) => void): SessionScan | null;
32
- /** Test-only seam, the scheduler's pattern: lets a test prove a network path never reaches the probe. Null restores it. */
35
+ /**
36
+ * Test-only seam, the scheduler's pattern: lets a test prove a network path never reaches the probe. Null restores it.
37
+ */
33
38
  export declare function _setDigestExistsProbeForTests(probe: ((p: string) => boolean) | null): void;
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. */
39
+ /**
40
+ * The store root is realpath'd; transcript paths are not, and a deleted file has no realpath of its own. Null for a
41
+ * network path.
42
+ */
35
43
  export declare function realFsPath(p: string): string | null;
36
- /** Repo-relative with forward slashes, '' for the root itself, null outside the repo or when the path cannot be resolved. */
44
+ /**
45
+ * Repo-relative with forward slashes, '' for the root itself, null outside the repo or when the path cannot be
46
+ * resolved.
47
+ */
37
48
  export declare function repoRelative(p: string, repoRoot: string): string | null;
38
49
  /** Sentences of the reply; code spans and "e.g." are held out of the split so their dots never end a sentence. */
39
50
  export declare function digestSentences(text: string): string[];
@@ -50,20 +50,26 @@ function editTarget(block) {
50
50
  const input = block.input;
51
51
  if (!isObjectLike(input))
52
52
  return null;
53
- if (block.name === 'NotebookEdit')
53
+ if (block.name === 'NotebookEdit') {
54
54
  return 'notebook_path' in input && isStringValue(input.notebook_path) ? input.notebook_path : null;
55
+ }
55
56
  return 'file_path' in input && isStringValue(input.file_path) ? input.file_path : null;
56
57
  }
57
58
  function readClaudeAssistant(record, state) {
58
59
  const blocks = messageItems(record);
59
60
  for (const block of blocks) {
60
- if (block.type !== 'tool_use' || !isStringValue(block.name) || !CLAUDE_EDIT_TOOLS.has(block.name) || !isStringValue(block.id))
61
+ if (block.type !== 'tool_use' ||
62
+ !isStringValue(block.name) ||
63
+ !CLAUDE_EDIT_TOOLS.has(block.name) ||
64
+ !isStringValue(block.id)) {
61
65
  continue;
66
+ }
62
67
  const target = editTarget(block);
63
68
  if (target)
64
69
  state.pending.push({ callId: block.id, filePath: target, base: state.cwd });
65
70
  }
66
- // Sidechain edits changed files, but a sub-agent's reply is not this session's closing message, nor is Claude Code's own notice.
71
+ // Sidechain edits changed files, but a sub-agent's reply is not this session's closing message, nor is Claude Code's
72
+ // own notice.
67
73
  if (record.isMeta === true || record.isSidechain === true || isSynthetic(record))
68
74
  return;
69
75
  for (let i = blocks.length - 1; i >= 0; i--) {
@@ -80,8 +86,9 @@ function isSynthetic(record) {
80
86
  }
81
87
  function readClaudeResults(record, state) {
82
88
  for (const block of messageItems(record)) {
83
- if (block.type === 'tool_result' && isStringValue(block.tool_use_id) && block.is_error !== true)
89
+ if (block.type === 'tool_result' && isStringValue(block.tool_use_id) && block.is_error !== true) {
84
90
  state.landed.add(block.tool_use_id);
91
+ }
85
92
  }
86
93
  }
87
94
  function readCodexMessage(item, state) {
@@ -166,8 +173,9 @@ function readCodexItem(item, state) {
166
173
  readCodexMessage(item, state);
167
174
  return;
168
175
  case 'custom_tool_call':
169
- if (item.name === 'apply_patch' && isStringValue(item.call_id) && isStringValue(item.input))
176
+ if (item.name === 'apply_patch' && isStringValue(item.call_id) && isStringValue(item.input)) {
170
177
  addPatch(state, item.call_id, item.input, state.cwd);
178
+ }
171
179
  return;
172
180
  case 'function_call':
173
181
  readCodexFunctionCall(item, state);
@@ -182,8 +190,9 @@ function readCodexItem(item, state) {
182
190
  }
183
191
  case 'function_call_output':
184
192
  case 'custom_tool_call_output':
185
- if (isStringValue(item.call_id) && outputText(item.output).includes(PATCH_SUCCESS_LINE))
193
+ if (isStringValue(item.call_id) && outputText(item.output).includes(PATCH_SUCCESS_LINE)) {
186
194
  state.landed.add(item.call_id);
195
+ }
187
196
  return;
188
197
  }
189
198
  }
@@ -207,11 +216,17 @@ function visitRecord(record, state) {
207
216
  if (record.type === 'response_item') {
208
217
  readCodexItem(payload, state);
209
218
  }
210
- else if (record.type === 'event_msg' && payload.type === 'patch_apply_end' && payload.success === true && isStringValue(payload.call_id)) {
219
+ else if (record.type === 'event_msg' &&
220
+ payload.type === 'patch_apply_end' &&
221
+ payload.success === true &&
222
+ isStringValue(payload.call_id)) {
211
223
  state.landed.add(payload.call_id);
212
224
  }
213
225
  }
214
- /** One pass over a Claude Code or Codex transcript: the turns capture reads, the closing message, and the edits that landed. */
226
+ /**
227
+ * One pass over a Claude Code or Codex transcript: the turns capture reads, the closing message, and the edits that
228
+ * landed.
229
+ */
215
230
  export function scanSessionTranscript(jsonl) {
216
231
  const state = {
217
232
  cwd: null, firstCwd: null, pending: [], landed: new Set(), claudeFinal: '', codexFinal: '', codexUnphased: '',
@@ -251,7 +266,9 @@ export function readSessionScan(transcriptPath, log) {
251
266
  }
252
267
  }
253
268
  let existsProbe = fs.existsSync;
254
- /** Test-only seam, the scheduler's pattern: lets a test prove a network path never reaches the probe. Null restores it. */
269
+ /**
270
+ * Test-only seam, the scheduler's pattern: lets a test prove a network path never reaches the probe. Null restores it.
271
+ */
255
272
  export function _setDigestExistsProbeForTests(probe) {
256
273
  existsProbe = probe ?? fs.existsSync;
257
274
  }
@@ -259,7 +276,10 @@ export function _setDigestExistsProbeForTests(probe) {
259
276
  function isNetworkPath(p) {
260
277
  return /^[\\/]{2}(?:(?![?.][\\/])|[?.][\\/]UNC[\\/])/i.test(p);
261
278
  }
262
- /** 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. */
279
+ /**
280
+ * The store root is realpath'd; transcript paths are not, and a deleted file has no realpath of its own. Null for a
281
+ * network path.
282
+ */
263
283
  export function realFsPath(p) {
264
284
  if (isNetworkPath(p))
265
285
  return null;
@@ -277,7 +297,10 @@ export function realFsPath(p) {
277
297
  }
278
298
  return path.join(fs.realpathSync.native(head), ...rest);
279
299
  }
280
- /** Repo-relative with forward slashes, '' for the root itself, null outside the repo or when the path cannot be resolved. */
300
+ /**
301
+ * Repo-relative with forward slashes, '' for the root itself, null outside the repo or when the path cannot be
302
+ * resolved.
303
+ */
281
304
  export function repoRelative(p, repoRoot) {
282
305
  let rel;
283
306
  try {
@@ -441,7 +464,10 @@ export function buildSessionDigest(sources) {
441
464
  export function sessionDigestId(tenantId, key) {
442
465
  return `mem_${createHash('sha256').update(`${SESSION_DIGEST_TAG}\n${tenantId}\n${key}`).digest('hex').slice(0, 12)}`;
443
466
  }
444
- /** What hippo could have injected into the session: any live digest (prompt recall reaches old ones) and the ambient handoff, never this session's own. */
467
+ /**
468
+ * What hippo could have injected into the session: any live digest (prompt recall reaches old ones) and the ambient
469
+ * handoff, never this session's own.
470
+ */
445
471
  function injectedTexts(hippoRoot, opts) {
446
472
  const digests = loadLiveContentsBySourceAndTag(hippoRoot, opts.tenantId, SESSION_DIGEST_TAG, SESSION_DIGEST_TAG, opts.key);
447
473
  const handoff = loadLatestHandoff(hippoRoot, opts.tenantId, undefined, {
@@ -484,7 +510,7 @@ export function writeSessionDigest(hippoRoot, scan, opts) {
484
510
  tags: [SESSION_DIGEST_TAG],
485
511
  source: SESSION_DIGEST_TAG,
486
512
  confidence: 'observed',
487
- source_session_id: opts.key,
513
+ sourceSessionId: opts.key,
488
514
  tenantId: opts.tenantId,
489
515
  baseHalfLifeDays: loadConfig(hippoRoot).defaultHalfLifeDays,
490
516
  }),
@@ -16,6 +16,9 @@ export interface CallerSessionEndResult {
16
16
  readonly handoffWritten: boolean;
17
17
  readonly snapshotsClosed: number;
18
18
  }
19
- /** Call on a session's final end only, since it closes the snapshot. A failed close throws so the sender retries, and the retry writes no second handoff. */
19
+ /**
20
+ * Call on a session's final end only, since it closes the snapshot. A failed close throws so the sender retries, and
21
+ * the retry writes no second handoff.
22
+ */
20
23
  export declare function sessionEndHandoffForCaller(ctx: Context, req: CallerSessionEndRequest): CallerSessionEndResult;
21
24
  //# sourceMappingURL=session-end-caller.d.ts.map
@@ -1,4 +1,5 @@
1
- // SessionEnd for a caller on another machine: the owner's handoff, then the owner's snapshot for the session closed, both under its tenant and project.
1
+ // SessionEnd for a caller on another machine: the owner's handoff, then the owner's snapshot for the session closed,
2
+ // both under its tenant and project.
2
3
  import { BadRequestError } from '../core/api-errors.js';
3
4
  import { writeSessionEndHandoff } from '../store/handoffs.js';
4
5
  import { closeTaskSnapshotsForSession } from '../store/sessions.js';
@@ -10,21 +11,32 @@ function checkedEvidence(evidence) {
10
11
  return null;
11
12
  const { gitRef = null, dirtyTree = null, testStatus = null } = evidence;
12
13
  // `git rev-parse HEAD` gives 40 hex, or 64 in a SHA-256 repository.
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 ' +
15
- 'null');
16
- if (dirtyTree !== null && dirtyTree !== true && dirtyTree !== false)
14
+ if (gitRef !== null && !/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/.test(gitRef)) {
15
+ throw new BadRequestError('evidence gitRef: 40 or 64 lowercase hex characters or ' + 'null');
16
+ }
17
+ if (dirtyTree !== null && dirtyTree !== true && dirtyTree !== false) {
17
18
  throw new BadRequestError('evidence dirtyTree: true, false or null');
18
- if (testStatus !== null && !TEST_STATUSES.has(testStatus))
19
+ }
20
+ if (testStatus !== null && !TEST_STATUSES.has(testStatus)) {
19
21
  throw new BadRequestError('evidence testStatus: pass, fail, unknown or null');
22
+ }
20
23
  return { gitRef, dirtyTree, testStatus };
21
24
  }
22
- /** Call on a session's final end only, since it closes the snapshot. A failed close throws so the sender retries, and the retry writes no second handoff. */
25
+ /**
26
+ * Call on a session's final end only, since it closes the snapshot. A failed close throws so the sender retries, and
27
+ * the retry writes no second handoff.
28
+ */
23
29
  export function sessionEndHandoffForCaller(ctx, req) {
24
30
  const state = checkedWorkingState(req.workingState);
25
31
  const evidence = checkedEvidence(req.evidence);
26
32
  const key = bindCaller(ctx, req.sessionId, req.project);
27
- const handoff = writeSessionEndHandoff(ctx.hippoRoot, { tenantId: ctx.tenantId, sessionId: req.sessionId, evidence, derived: state, key });
33
+ const handoff = writeSessionEndHandoff(ctx.hippoRoot, {
34
+ tenantId: ctx.tenantId,
35
+ sessionId: req.sessionId,
36
+ evidence,
37
+ derived: state,
38
+ key,
39
+ });
28
40
  const snapshotsClosed = closeTaskSnapshotsForSession(ctx.hippoRoot, ctx.tenantId, req.sessionId, 'session-ended', key);
29
41
  return { handoffWritten: handoff !== null, snapshotsClosed };
30
42
  }
@@ -8,7 +8,11 @@ export interface SessionCaptureRequest {
8
8
  readonly texts: readonly string[];
9
9
  }
10
10
  export type SessionCaptureResult = Readonly<CaptureTally>;
11
- /** Captures the session's statements into `ctx`'s tenant under the caller's project, skipping each text a row the caller can see already holds.
12
- * Synchronous from the dedup read to the last write, so no other write lands between them. No console output and no process.exit. */
11
+ /**
12
+ * Captures the session's statements into `ctx`'s tenant under the caller's project, skipping each text a row the caller
13
+ * can see already holds.
14
+ * Synchronous from the dedup read to the last write, so no other write lands between them. No console output and no
15
+ * process.exit.
16
+ */
13
17
  export declare function captureSessionTexts(ctx: Context, req: SessionCaptureRequest): SessionCaptureResult;
14
18
  //# sourceMappingURL=session-texts.d.ts.map
@@ -1,4 +1,5 @@
1
- // `hippo capture --last-session` for a caller whose transcript was read on another machine: its project names the rows, never the store's folder.
1
+ // `hippo capture --last-session` for a caller whose transcript was read on another machine: its project names the rows,
2
+ // never the store's folder.
2
3
  import { BadRequestError } from '../core/api-errors.js';
3
4
  import { assertCallerIds } from '../api/prompt-hook.js';
4
5
  import { assertCallerProject, projectNames } from '../core/project-identity.js';
@@ -15,18 +16,24 @@ function assertSessionCapture(req) {
15
16
  assertCallerIds(req.sessionId, req.project);
16
17
  if (req.sessionId.trim() === '')
17
18
  throw new BadRequestError('session id: required');
18
- // A '' project would read every project's rows as its own and write user-global rows; a rewritten one would split a project.
19
+ // A '' project would read every project's rows as its own and write user-global rows; a rewritten one would split a
20
+ // project.
19
21
  assertCallerProject(req.project);
20
22
  if (req.texts.length > MAX_TEXTS)
21
23
  throw new BadRequestError(`texts: at most ${MAX_TEXTS}`);
22
24
  const sizes = req.texts.map((t) => Buffer.byteLength(t, 'utf8'));
23
25
  if (sizes.some((n) => n > MAX_TEXT_BYTES))
24
26
  throw new BadRequestError(`each text: at most ${MAX_TEXT_BYTES} bytes`);
25
- if (sizes.reduce((a, b) => a + b, 0) > MAX_TOTAL_BYTES)
27
+ if (sizes.reduce((a, b) => a + b, 0) > MAX_TOTAL_BYTES) {
26
28
  throw new BadRequestError(`texts: at most ${MAX_TOTAL_BYTES} bytes in all`);
29
+ }
27
30
  }
28
- /** Captures the session's statements into `ctx`'s tenant under the caller's project, skipping each text a row the caller can see already holds.
29
- * Synchronous from the dedup read to the last write, so no other write lands between them. No console output and no process.exit. */
31
+ /**
32
+ * Captures the session's statements into `ctx`'s tenant under the caller's project, skipping each text a row the caller
33
+ * can see already holds.
34
+ * Synchronous from the dedup read to the last write, so no other write lands between them. No console output and no
35
+ * process.exit.
36
+ */
30
37
  export function captureSessionTexts(ctx, req) {
31
38
  assertSessionCapture(req);
32
39
  const extracted = extractFromTexts(req.texts.map(scrubForSharing));
@@ -34,9 +41,17 @@ export function captureSessionTexts(ctx, req) {
34
41
  const items = extracted.slice(-MAX_ITEMS);
35
42
  if (items.length === 0)
36
43
  return { captured: 0, skipped: 0, rejected: 0 };
37
- // The project filter is classifyOriginProject's in SQL: the caller's rows and user-global rows block a copy, other projects' rows do not.
44
+ // The project filter is classifyOriginProject's in SQL: the caller's rows and user-global rows block a copy, other
45
+ // projects' rows do not.
38
46
  const held = loadTextsHoldingWords(ctx.hippoRoot, ctx.tenantId, items.map((i) => longestWord(i.content)), projectNames(req.project));
39
- const tally = captureExtractedItems(ctx.hippoRoot, { dryRun: false, tenantId: ctx.tenantId, originProject: req.project, sessionId: req.sessionId, actor: ctx.actor.subject, lean: true }, items, storedTextKeys(held));
47
+ const tally = captureExtractedItems(ctx.hippoRoot, {
48
+ dryRun: false,
49
+ tenantId: ctx.tenantId,
50
+ originProject: req.project,
51
+ sessionId: req.sessionId,
52
+ actor: ctx.actor.subject,
53
+ lean: true,
54
+ }, items, storedTextKeys(held));
40
55
  return { ...tally, skipped: tally.skipped + extracted.length - items.length };
41
56
  }
42
57
  //# sourceMappingURL=session-texts.js.map
@@ -1,13 +1,15 @@
1
1
  import type { SessionTurn } from './transcript.js';
2
2
  /** A turn close runs after each reply; a full close runs once, when the session ends. */
3
3
  export type WorkerMode = 'turn' | 'full';
4
- /** Runs `work` unless a live worker holds this session, which then runs the request after its own so the last reply is never dropped. */
4
+ /** Runs `work` unless a live worker holds this session, which then runs the request after its own so the last reply is
5
+ * never dropped. */
5
6
  export declare function runSessionWorker(sessionId: string | null, mode: WorkerMode, work: (mode: WorkerMode) => Promise<void>): Promise<void>;
6
7
  /** The cursor position after `turns`: how many there were and a hash of the last. */
7
8
  export declare function turnPosition(turns: readonly SessionTurn[]): string;
8
9
  /** The turns after `position`; all of them when it is null or its last turn is no longer in view. */
9
10
  export declare function turnsAfter(turns: readonly SessionTurn[], position: string | null): readonly SessionTurn[];
10
- /** The saved position for this session's transcript; null when none was saved, it names another file, or it is unreadable. */
11
+ /** The saved position for this session's transcript; null when none was saved, it names another file, or it is
12
+ * unreadable. */
11
13
  export declare function loadTurnPosition(sessionId: string, transcriptPath: string): string | null;
12
14
  export declare function saveTurnPosition(sessionId: string, transcriptPath: string, turns: readonly SessionTurn[], log: (message: string) => void): void;
13
15
  //# sourceMappingURL=session-worker.d.ts.map
@@ -3,10 +3,11 @@
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
5
  import { homeDir } from '../util/agent-homes.js';
6
- import { errorCode, errorMessage, log as logger } from '../util/log.js';
6
+ import { errorCode, errorMessage, log as logger, errorFields } from '../util/log.js';
7
7
  import { isObjectLike, isStringValue } from '../core/capture-contract.js';
8
8
  import { SESSION_ID_RE } from './copilot-transcript.js';
9
9
  import { blockHash } from '../util/token-text.js';
10
+ import { MINUTE_MS } from '../util/time.js';
10
11
  /** Null for a missing id or one that could climb out of the sessions folder. */
11
12
  function sessionStateFiles(sessionId) {
12
13
  if (sessionId === null || !SESSION_ID_RE.test(sessionId))
@@ -24,8 +25,10 @@ function pidAlive(pid) {
24
25
  return err instanceof Error && 'code' in err && err.code === 'EPERM';
25
26
  }
26
27
  }
27
- /** Windows reuses pids, so past this a lock is stale whatever process it names; a worker rarely waits more than minutes on a busy store. */
28
- const STALE_LOCK_MS = 15 * 60 * 1000;
28
+ /** Windows reuses pids, so past this a lock is stale whatever process it names; a worker rarely waits more than minutes
29
+ * on a busy store. */
30
+ const STALE_LOCK_MS = 15 * MINUTE_MS;
31
+ const heldHere = new Set();
29
32
  /** A dead holder frees its session at once, and any holder at STALE_LOCK_MS. */
30
33
  function holderAlive(lock) {
31
34
  let text;
@@ -45,13 +48,16 @@ function holderAlive(lock) {
45
48
  if (!held)
46
49
  return true;
47
50
  const pid = Number(held[1]);
48
- return pid !== process.pid && pidAlive(pid);
51
+ // Our own pid is live only while this process holds the lock; a leftover from a dead run that reused the pid is not.
52
+ return pid === process.pid ? heldHere.has(lock) : pidAlive(pid);
49
53
  }
50
- // SHORTCUT: two takers racing one stale-lock cleanup can both run, as every worker did before the lock; an atomic link-based take if that shows up.
54
+ // SHORTCUT: two takers racing one stale-lock cleanup can both run, as every worker did before the lock; an atomic
55
+ // link-based take if that shows up.
51
56
  function takeSessionLock(lock) {
52
57
  for (let attempt = 0; attempt < 2; attempt++) {
53
58
  try {
54
59
  fs.writeFileSync(lock, `${process.pid}:${Date.now()}`, { flag: 'wx' });
60
+ heldHere.add(lock);
55
61
  return 'taken';
56
62
  }
57
63
  catch (err) {
@@ -69,22 +75,33 @@ function takeSessionLock(lock) {
69
75
  }
70
76
  return 'held';
71
77
  }
78
+ const warnedLocks = new Set();
79
+ // The lock is best-effort, so the work still runs; the line says why it ran without one.
80
+ function warnUnusableLockOnce(lock) {
81
+ if (warnedLocks.has(lock))
82
+ return;
83
+ warnedLocks.add(lock);
84
+ logger.warn(`session worker: lock ${lock} cannot be created or cleared, so the work runs without it`);
85
+ }
72
86
  function releaseSessionLock(lock) {
87
+ heldHere.delete(lock);
73
88
  try {
74
89
  fs.rmSync(lock, { force: true });
75
90
  }
76
91
  catch (err) {
77
92
  // A lock left behind names this pid, which is dead once the worker exits, so the next taker clears it.
78
- logger.debug(`session lock not removed: ${errorMessage(err)}`);
93
+ logger.debug(`session lock not removed: ${errorMessage(err)}`, errorFields(err));
79
94
  }
80
95
  }
81
- /** False when the request could not be queued; the caller then refuses the run, since an unlocked worker could race a live one. */
96
+ /** False when the request could not be queued; the caller then refuses the run, since an unlocked worker could race a
97
+ * live one. */
82
98
  function queueRun(files, mode) {
83
99
  try {
84
100
  fs.mkdirSync(path.dirname(files.queued), { recursive: true });
85
101
  }
86
102
  catch (err) {
87
- logger.warn(`session worker: cannot create ${path.dirname(files.queued)}, so the ${mode} close is not run: ${errorMessage(err)}`);
103
+ logger.warn(`session worker: cannot create ${path.dirname(files.queued)}, ` +
104
+ `so the ${mode} close is not run: ${errorMessage(err)}`, errorFields(err));
88
105
  return false;
89
106
  }
90
107
  try {
@@ -98,7 +115,7 @@ function queueRun(files, mode) {
98
115
  catch (err) {
99
116
  if (errorCode(err) === 'EEXIST')
100
117
  return true;
101
- logger.warn(`session worker: cannot queue the ${mode} close in ${files.queued}, so it is not run: ${errorMessage(err)}`);
118
+ logger.warn(`session worker: cannot queue the ${mode} close in ${files.queued}, so it is not run: ${errorMessage(err)}`, errorFields(err));
102
119
  return false;
103
120
  }
104
121
  }
@@ -110,8 +127,9 @@ function takeQueued(queued) {
110
127
  }
111
128
  catch (err) {
112
129
  // ENOENT means nothing is queued; any other refusal leaves the request queued for the next round, but is told.
113
- if (errorCode(err) !== 'ENOENT')
114
- logger.warn(`session worker: cannot take the queued request ${queued}: ${errorMessage(err)}`);
130
+ if (errorCode(err) !== 'ENOENT') {
131
+ logger.warn(`session worker: cannot take the queued request ${queued}: ${errorMessage(err)}`, errorFields(err));
132
+ }
115
133
  return null;
116
134
  }
117
135
  try {
@@ -121,7 +139,8 @@ function takeQueued(queued) {
121
139
  fs.rmSync(taken, { force: true });
122
140
  }
123
141
  }
124
- /** Runs `work` unless a live worker holds this session, which then runs the request after its own so the last reply is never dropped. */
142
+ /** Runs `work` unless a live worker holds this session, which then runs the request after its own so the last reply is
143
+ * never dropped. */
125
144
  export async function runSessionWorker(sessionId, mode, work) {
126
145
  const files = sessionStateFiles(sessionId);
127
146
  if (files === null)
@@ -129,8 +148,10 @@ export async function runSessionWorker(sessionId, mode, work) {
129
148
  if (!queueRun(files, mode))
130
149
  return;
131
150
  for (let take = takeSessionLock(files.lock); take !== 'held'; take = takeSessionLock(files.lock)) {
132
- if (take === 'unusable')
151
+ if (take === 'unusable') {
152
+ warnUnusableLockOnce(files.lock);
133
153
  return work(mode);
154
+ }
134
155
  let ran = false;
135
156
  try {
136
157
  for (let next = takeQueued(files.queued); next !== null; next = takeQueued(files.queued)) {
@@ -163,14 +184,16 @@ export function turnsAfter(turns, position) {
163
184
  return turns;
164
185
  if (count <= turns.length && turnKey(turns[count - 1]) === key)
165
186
  return turns.slice(count);
166
- // A transcript too big to read whole is read from its tail, so the count shifts; the last turn's text still marks the place.
187
+ // A transcript too big to read whole is read from its tail, so the count shifts; the last turn's text still marks the
188
+ // place.
167
189
  for (let i = turns.length - 1; i >= 0; i--) {
168
190
  if (turnKey(turns[i]) === key)
169
191
  return turns.slice(i + 1);
170
192
  }
171
193
  return turns;
172
194
  }
173
- /** The saved position for this session's transcript; null when none was saved, it names another file, or it is unreadable. */
195
+ /** The saved position for this session's transcript; null when none was saved, it names another file, or it is
196
+ * unreadable. */
174
197
  export function loadTurnPosition(sessionId, transcriptPath) {
175
198
  const file = sessionStateFiles(sessionId)?.cursor;
176
199
  if (!file || !fs.existsSync(file))
@@ -192,7 +215,11 @@ export function saveTurnPosition(sessionId, transcriptPath, turns, log) {
192
215
  if (!file)
193
216
  return;
194
217
  const cursor = {
195
- runtime: 'vscode', sessionId, source: transcriptPath, position: turnPosition(turns), updatedAt: new Date().toISOString(),
218
+ runtime: 'vscode',
219
+ sessionId,
220
+ source: transcriptPath,
221
+ position: turnPosition(turns),
222
+ updatedAt: new Date().toISOString(),
196
223
  };
197
224
  const tmp = `${file}.${process.pid}.tmp`;
198
225
  try {
@@ -201,7 +228,8 @@ export function saveTurnPosition(sessionId, transcriptPath, turns, log) {
201
228
  fs.renameSync(tmp, file);
202
229
  }
203
230
  catch (err) {
204
- // Windows refuses the rename (EPERM) while another process has the cursor open; the next reply re-reads these turns, which the dedupe keys absorb.
231
+ // Windows refuses the rename (EPERM) while another process has the cursor open; the next reply re-reads these
232
+ // turns, which the dedupe keys absorb.
205
233
  log(`cursor not saved: ${errorMessage(err)}`);
206
234
  }
207
235
  }
@@ -1,4 +1,7 @@
1
- /** Transcript-line flags isNonHumanUserLine reads (any may be absent); `promptSource: 'system'` marks Claude Code's own notices. */
1
+ /**
2
+ * Transcript-line flags isNonHumanUserLine reads (any may be absent); `promptSource: 'system'` marks Claude Code's own
3
+ * notices.
4
+ */
2
5
  interface TranscriptLineFlags {
3
6
  type?: unknown;
4
7
  isMeta?: unknown;
@@ -9,7 +12,9 @@ interface TranscriptLineFlags {
9
12
  interface TranscriptMessage {
10
13
  content?: unknown;
11
14
  }
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
15
+ /**
16
+ * The human's words on a Claude Code user line, '' when none; VS Code stores prompts as text blocks, beside its own
17
+ * open-file, selection
13
18
  * and interrupt blocks. */
14
19
  export declare function humanUserText(entry: TranscriptLineFlags, message: TranscriptMessage): string;
15
20
  export interface SessionTurn {
@@ -29,8 +34,12 @@ export declare function sessionTail(turns: readonly SessionTurn[]): {
29
34
  assistants: string[];
30
35
  };
31
36
  export declare function summariseSessionTurns(turns: readonly SessionTurn[]): string;
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. */
37
+ /**
38
+ * Resolve a transcript path for `--last-session`: `transcriptPath`, then the stdin JSON payload, then the newest
39
+ * `.jsonl` in the Claude config dir.
40
+ * The scan runs only with `mayScan` (it spans every project on the box); returns null when nothing resolves, never
41
+ * throws.
42
+ */
34
43
  export declare function resolveLastSessionTranscript(explicit: string | undefined, stdinText: string | undefined, opts: {
35
44
  mayScan: boolean;
36
45
  }): string | null;