hippo-memory 1.72.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 (995) hide show
  1. package/README.md +6 -4
  2. package/dist/agent-memories/apply.d.ts +7 -5
  3. package/dist/agent-memories/apply.js +66 -39
  4. package/dist/agent-memories/claude-code.d.ts +8 -2
  5. package/dist/agent-memories/claude-code.js +26 -7
  6. package/dist/agent-memories/copilot.js +2 -1
  7. package/dist/agent-memories/files.js +2 -1
  8. package/dist/agent-memories/legacy.d.ts +6 -3
  9. package/dist/agent-memories/legacy.js +35 -14
  10. package/dist/agent-memories/markdown.d.ts +3 -1
  11. package/dist/agent-memories/markdown.js +3 -1
  12. package/dist/agent-memories/openclaw.js +5 -2
  13. package/dist/agent-memories/plan.js +11 -1
  14. package/dist/agent-memories/project-folds.js +2 -1
  15. package/dist/agent-memories/report.d.ts +4 -1
  16. package/dist/agent-memories/report.js +43 -9
  17. package/dist/agent-memories/source.d.ts +8 -2
  18. package/dist/agent-memories/source.js +11 -3
  19. package/dist/agent-memories/sync.d.ts +7 -2
  20. package/dist/agent-memories/sync.js +141 -101
  21. package/dist/api/assemble.d.ts +6 -4
  22. package/dist/api/assemble.js +11 -5
  23. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  24. package/dist/api/auth/audit.js +58 -0
  25. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
  26. package/dist/api/{auth.js → auth/auth.js} +66 -54
  27. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  28. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
  29. package/dist/api/auth/session-owners.d.ts +10 -0
  30. package/dist/api/auth/session-owners.js +35 -0
  31. package/dist/api/availability.d.ts +3 -1
  32. package/dist/api/availability.js +3 -1
  33. package/dist/api/busy.d.ts +2 -0
  34. package/dist/api/busy.js +2 -0
  35. package/dist/api/cli-surface.d.ts +6 -0
  36. package/dist/api/cli-surface.js +6 -0
  37. package/dist/api/config-of.d.ts +5 -0
  38. package/dist/api/config-of.js +6 -0
  39. package/dist/api/context-auto.d.ts +4 -1
  40. package/dist/api/context-auto.js +14 -4
  41. package/dist/api/context-render.js +14 -7
  42. package/dist/api/context-select.d.ts +4 -1
  43. package/dist/api/context-select.js +31 -34
  44. package/dist/api/context-types.d.ts +38 -12
  45. package/dist/api/context.d.ts +8 -5
  46. package/dist/api/context.js +120 -63
  47. package/dist/api/continuity.d.ts +24 -21
  48. package/dist/api/continuity.js +18 -20
  49. package/dist/api/correction-latency.d.ts +3 -1
  50. package/dist/api/correction-latency.js +3 -1
  51. package/dist/api/error-reply.d.ts +4 -1
  52. package/dist/api/error-reply.js +12 -3
  53. package/dist/api/index.d.ts +39 -23
  54. package/dist/api/index.js +21 -23
  55. package/dist/api/instruction-detect.d.ts +4 -1
  56. package/dist/api/instruction-detect.js +75 -20
  57. package/dist/api/ledger-db.d.ts +15 -11
  58. package/dist/api/ledger-db.js +21 -23
  59. package/dist/api/memories/conflicts.d.ts +33 -0
  60. package/dist/api/memories/conflicts.js +67 -0
  61. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  62. package/dist/api/{forget.js → memories/forget.js} +23 -17
  63. package/dist/api/memories/memories.d.ts +27 -0
  64. package/dist/api/memories/memories.js +52 -0
  65. package/dist/api/memories/outcome.d.ts +22 -0
  66. package/dist/api/memories/outcome.js +28 -0
  67. package/dist/api/memories/promote.d.ts +40 -0
  68. package/dist/api/memories/promote.js +76 -0
  69. package/dist/api/memories/refine.d.ts +10 -0
  70. package/dist/api/memories/refine.js +12 -0
  71. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
  72. package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
  73. package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
  74. package/dist/api/{remember.js → memories/remember.js} +50 -32
  75. package/dist/api/objects/cards.d.ts +39 -0
  76. package/dist/api/{cards.js → objects/cards.js} +12 -14
  77. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  78. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
  79. package/dist/api/objects/goals.d.ts +18 -0
  80. package/dist/api/{goals.js → objects/goals.js} +12 -12
  81. package/dist/api/objects/graph.d.ts +11 -0
  82. package/dist/api/objects/graph.js +16 -0
  83. package/dist/api/objects/objects.d.ts +9 -0
  84. package/dist/api/{objects.js → objects/objects.js} +2 -3
  85. package/dist/api/objects/predictions.d.ts +11 -0
  86. package/dist/api/{predictions.js → objects/predictions.js} +7 -5
  87. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  88. package/dist/api/{projects.js → objects/projects.js} +8 -4
  89. package/dist/api/pilot-arm.d.ts +8 -4
  90. package/dist/api/pilot-arm.js +5 -4
  91. package/dist/api/prompt-hook.d.ts +35 -20
  92. package/dist/api/prompt-hook.js +66 -44
  93. package/dist/api/provenance-coverage.d.ts +3 -1
  94. package/dist/api/provenance-coverage.js +3 -1
  95. package/dist/api/recall/finish.d.ts +185 -0
  96. package/dist/api/recall/finish.js +301 -0
  97. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  98. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
  99. package/dist/api/recall/recall.d.ts +6 -0
  100. package/dist/api/{recall.js → recall/recall.js} +116 -72
  101. package/dist/api/recall/render.d.ts +39 -0
  102. package/dist/api/recall/render.js +60 -0
  103. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  104. package/dist/api/recall/request.js +261 -0
  105. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  106. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  107. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
  108. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  109. package/dist/api/session-end.d.ts +36 -8
  110. package/dist/api/session-end.js +71 -25
  111. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  112. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  113. package/dist/api/sleep/dormant.d.ts +25 -0
  114. package/dist/api/sleep/dormant.js +64 -0
  115. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  116. package/dist/api/sleep/learn.js +138 -0
  117. package/dist/api/sleep/sleep-run.d.ts +38 -0
  118. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
  119. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  120. package/dist/api/sleep/sleep.js +9 -0
  121. package/dist/api/status.d.ts +3 -1
  122. package/dist/api/status.js +3 -1
  123. package/dist/api/store-init.d.ts +4 -1
  124. package/dist/api/store-init.js +4 -1
  125. package/dist/api/tokens.d.ts +10 -9
  126. package/dist/api/tokens.js +9 -10
  127. package/dist/api/types.d.ts +27 -12
  128. package/dist/api/types.js +13 -4
  129. package/dist/capture/caller-session.d.ts +8 -2
  130. package/dist/capture/caller-session.js +16 -6
  131. package/dist/capture/capture-error.d.ts +3 -1
  132. package/dist/capture/capture-error.js +3 -1
  133. package/dist/capture/codex-patch.js +7 -2
  134. package/dist/capture/command.d.ts +4 -2
  135. package/dist/capture/command.js +34 -15
  136. package/dist/capture/compact-resume-caller.js +15 -8
  137. package/dist/capture/compact.d.ts +8 -5
  138. package/dist/capture/compact.js +34 -23
  139. package/dist/capture/compaction-items-caller.js +9 -3
  140. package/dist/capture/compaction-record.d.ts +4 -3
  141. package/dist/capture/compaction-record.js +20 -12
  142. package/dist/capture/compaction-spool.d.ts +18 -9
  143. package/dist/capture/compaction-spool.js +105 -63
  144. package/dist/capture/copilot-transcript.d.ts +11 -3
  145. package/dist/capture/copilot-transcript.js +16 -6
  146. package/dist/capture/extract.js +20 -8
  147. package/dist/capture/failure-caller.js +23 -12
  148. package/dist/capture/failure-reading.d.ts +10 -3
  149. package/dist/capture/failure-reading.js +24 -7
  150. package/dist/capture/pre-compact-caller.js +11 -4
  151. package/dist/capture/session-digest.d.ts +15 -4
  152. package/dist/capture/session-digest.js +39 -13
  153. package/dist/capture/session-end-caller.d.ts +4 -1
  154. package/dist/capture/session-end-caller.js +20 -8
  155. package/dist/capture/session-texts.d.ts +6 -2
  156. package/dist/capture/session-texts.js +22 -7
  157. package/dist/capture/session-worker.d.ts +4 -2
  158. package/dist/capture/session-worker.js +58 -17
  159. package/dist/capture/transcript.d.ts +13 -4
  160. package/dist/capture/transcript.js +32 -10
  161. package/dist/capture/working-state.d.ts +13 -4
  162. package/dist/capture/working-state.js +50 -56
  163. package/dist/cli/api-context.d.ts +14 -2
  164. package/dist/cli/api-context.js +45 -2
  165. package/dist/cli/audit.js +33 -33
  166. package/dist/cli/auth.js +23 -31
  167. package/dist/cli/briefs.d.ts +1 -1
  168. package/dist/cli/briefs.js +20 -15
  169. package/dist/cli/card.d.ts +1 -1
  170. package/dist/cli/card.js +56 -73
  171. package/dist/cli/client.d.ts +12 -5
  172. package/dist/cli/client.js +53 -23
  173. package/dist/cli/compact-resume-payload.d.ts +4 -1
  174. package/dist/cli/compact-resume-payload.js +12 -5
  175. package/dist/cli/context.js +43 -18
  176. package/dist/cli/continuity.d.ts +5 -5
  177. package/dist/cli/continuity.js +90 -107
  178. package/dist/cli/curate.d.ts +5 -4
  179. package/dist/cli/curate.js +55 -77
  180. package/dist/cli/dag.d.ts +1 -1
  181. package/dist/cli/dag.js +14 -17
  182. package/dist/cli/decisions.js +30 -30
  183. package/dist/cli/eval.js +16 -21
  184. package/dist/cli/exit.d.ts +4 -1
  185. package/dist/cli/exit.js +10 -2
  186. package/dist/cli/explain.js +12 -11
  187. package/dist/cli/flag-values.d.ts +1 -1
  188. package/dist/cli/flag-values.js +9 -18
  189. package/dist/cli/github.d.ts +6 -0
  190. package/dist/cli/github.js +25 -13
  191. package/dist/cli/goals.d.ts +1 -1
  192. package/dist/cli/goals.js +39 -56
  193. package/dist/cli/graph.d.ts +1 -1
  194. package/dist/cli/graph.js +15 -11
  195. package/dist/cli/hook-runtime.d.ts +34 -10
  196. package/dist/cli/hook-runtime.js +41 -16
  197. package/dist/cli/incidents.d.ts +1 -1
  198. package/dist/cli/incidents.js +25 -25
  199. package/dist/cli/init.d.ts +1 -1
  200. package/dist/cli/init.js +35 -20
  201. package/dist/cli/install-steps.d.ts +12 -3
  202. package/dist/cli/install-steps.js +42 -18
  203. package/dist/cli/last-sleep.d.ts +4 -1
  204. package/dist/cli/last-sleep.js +9 -4
  205. package/dist/cli/maintenance.d.ts +1 -1
  206. package/dist/cli/maintenance.js +11 -12
  207. package/dist/cli/notes.d.ts +1 -1
  208. package/dist/cli/notes.js +8 -5
  209. package/dist/cli/object-verbs.d.ts +5 -5
  210. package/dist/cli/object-verbs.js +13 -16
  211. package/dist/cli/open-browser.js +11 -2
  212. package/dist/cli/playbooks.d.ts +3 -3
  213. package/dist/cli/playbooks.js +40 -32
  214. package/dist/cli/predictions.js +17 -22
  215. package/dist/cli/print.js +4 -2
  216. package/dist/cli/projects.js +21 -11
  217. package/dist/cli/quality-repair-once.d.ts +1 -1
  218. package/dist/cli/quality-repair-once.js +7 -6
  219. package/dist/cli/recall.js +129 -93
  220. package/dist/cli/refine-llm.d.ts +15 -4
  221. package/dist/cli/refine-llm.js +17 -7
  222. package/dist/cli/remember.js +51 -55
  223. package/dist/cli/scheduler.d.ts +4 -1
  224. package/dist/cli/scheduler.js +9 -5
  225. package/dist/cli/serve.js +28 -18
  226. package/dist/cli/session-hooks.d.ts +2 -6
  227. package/dist/cli/session-hooks.js +140 -112
  228. package/dist/cli/setup.d.ts +1 -1
  229. package/dist/cli/setup.js +56 -34
  230. package/dist/cli/shared.d.ts +4 -2
  231. package/dist/cli/shared.js +26 -11
  232. package/dist/cli/slack.js +15 -24
  233. package/dist/cli/sleep-render.d.ts +3 -1
  234. package/dist/cli/sleep-render.js +8 -5
  235. package/dist/cli/sleep.js +16 -8
  236. package/dist/cli/status.d.ts +4 -4
  237. package/dist/cli/status.js +32 -27
  238. package/dist/cli/stdin.d.ts +10 -3
  239. package/dist/cli/stdin.js +10 -3
  240. package/dist/cli/transfer.d.ts +4 -4
  241. package/dist/cli/transfer.js +97 -82
  242. package/dist/cli/usage.d.ts +1 -1
  243. package/dist/cli/usage.js +1 -1
  244. package/dist/cli/verb-row.d.ts +2 -0
  245. package/dist/cli/verbs/health.js +2 -0
  246. package/dist/cli/verbs/memory.js +47 -53
  247. package/dist/cli/verbs/objects.js +16 -7
  248. package/dist/cli/verbs/sessions.js +4 -2
  249. package/dist/cli/versioned-verbs.d.ts +8 -7
  250. package/dist/cli/versioned-verbs.js +31 -21
  251. package/dist/cli.js +14 -18
  252. package/dist/connectors/dlq.d.ts +6 -6
  253. package/dist/connectors/dlq.js +12 -7
  254. package/dist/connectors/github/backfill.d.ts +4 -4
  255. package/dist/connectors/github/backfill.js +6 -4
  256. package/dist/connectors/github/deletion.d.ts +6 -4
  257. package/dist/connectors/github/deletion.js +5 -4
  258. package/dist/connectors/github/dlq.d.ts +8 -6
  259. package/dist/connectors/github/dlq.js +11 -5
  260. package/dist/connectors/github/ingest.d.ts +2 -2
  261. package/dist/connectors/github/ingest.js +9 -5
  262. package/dist/connectors/github/octokit-client.d.ts +3 -1
  263. package/dist/connectors/github/octokit-client.js +7 -2
  264. package/dist/connectors/github/ratelimit.d.ts +6 -2
  265. package/dist/connectors/github/ratelimit.js +6 -2
  266. package/dist/connectors/github/signature.d.ts +14 -3
  267. package/dist/connectors/github/signature.js +17 -3
  268. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  269. package/dist/connectors/github/tenant-routing.js +6 -5
  270. package/dist/connectors/github/transform.js +50 -67
  271. package/dist/connectors/github/types.d.ts +10 -3
  272. package/dist/connectors/github/types.js +6 -2
  273. package/dist/connectors/github/webhook.d.ts +5 -5
  274. package/dist/connectors/github/webhook.js +36 -23
  275. package/dist/connectors/ingest.d.ts +5 -3
  276. package/dist/connectors/ingest.js +3 -3
  277. package/dist/connectors/slack/backfill.d.ts +5 -5
  278. package/dist/connectors/slack/backfill.js +3 -3
  279. package/dist/connectors/slack/deletion.d.ts +4 -4
  280. package/dist/connectors/slack/deletion.js +6 -5
  281. package/dist/connectors/slack/dlq.d.ts +4 -4
  282. package/dist/connectors/slack/dlq.js +6 -6
  283. package/dist/connectors/slack/ingest.d.ts +6 -4
  284. package/dist/connectors/slack/ingest.js +5 -4
  285. package/dist/connectors/slack/signature.d.ts +4 -1
  286. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  287. package/dist/connectors/slack/tenant-routing.js +6 -5
  288. package/dist/connectors/slack/transform.d.ts +6 -2
  289. package/dist/connectors/slack/transform.js +6 -2
  290. package/dist/connectors/slack/types.d.ts +3 -1
  291. package/dist/connectors/slack/web-client.js +8 -3
  292. package/dist/connectors/slack/webhook.d.ts +5 -5
  293. package/dist/connectors/slack/webhook.js +19 -11
  294. package/dist/connectors/slack/workspaces.d.ts +7 -3
  295. package/dist/connectors/slack/workspaces.js +7 -3
  296. package/dist/connectors/store.d.ts +8 -0
  297. package/dist/connectors/store.js +2 -0
  298. package/dist/consolidate/conflicts.js +24 -10
  299. package/dist/consolidate/dag-summary.js +2 -1
  300. package/dist/consolidate/dag.d.ts +10 -5
  301. package/dist/consolidate/dag.js +45 -39
  302. package/dist/consolidate/decay.js +19 -6
  303. package/dist/consolidate/dedupe.d.ts +14 -5
  304. package/dist/consolidate/dedupe.js +28 -17
  305. package/dist/consolidate/flush-units.d.ts +4 -1
  306. package/dist/consolidate/flush-units.js +4 -1
  307. package/dist/consolidate/half-life-migration.d.ts +18 -8
  308. package/dist/consolidate/half-life-migration.js +48 -18
  309. package/dist/consolidate/llm-passes.js +27 -11
  310. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  311. package/dist/consolidate/memory-value-weights.js +6 -2
  312. package/dist/consolidate/memory-value.d.ts +30 -10
  313. package/dist/consolidate/memory-value.js +37 -14
  314. package/dist/consolidate/merge.d.ts +4 -1
  315. package/dist/consolidate/merge.js +47 -37
  316. package/dist/consolidate/overlap-index.d.ts +8 -2
  317. package/dist/consolidate/overlap-index.js +11 -4
  318. package/dist/consolidate/physics-pass.d.ts +3 -1
  319. package/dist/consolidate/physics-pass.js +10 -7
  320. package/dist/consolidate/replay.d.ts +11 -4
  321. package/dist/consolidate/replay.js +19 -7
  322. package/dist/consolidate/run.d.ts +13 -5
  323. package/dist/consolidate/run.js +4 -4
  324. package/dist/consolidate/sleep.d.ts +14 -6
  325. package/dist/consolidate/sleep.js +42 -39
  326. package/dist/consolidate/trace.d.ts +7 -2
  327. package/dist/consolidate/trace.js +7 -2
  328. package/dist/consolidate/traces.js +27 -30
  329. package/dist/core/ablation.d.ts +9 -3
  330. package/dist/core/ablation.js +14 -4
  331. package/dist/core/active-scope.d.ts +3 -1
  332. package/dist/core/active-scope.js +3 -1
  333. package/dist/core/agent-memory-tools.d.ts +2 -0
  334. package/dist/core/agent-memory-tools.js +2 -0
  335. package/dist/core/ambient.d.ts +4 -3
  336. package/dist/core/ambient.js +8 -6
  337. package/dist/core/api-errors.d.ts +9 -3
  338. package/dist/core/api-errors.js +9 -3
  339. package/dist/core/capture-contract.d.ts +4 -1
  340. package/dist/core/capture-contract.js +27 -8
  341. package/dist/core/compare.d.ts +24 -8
  342. package/dist/core/compare.js +24 -8
  343. package/dist/core/config.d.ts +18 -9
  344. package/dist/core/config.js +38 -29
  345. package/dist/core/cosine.d.ts +4 -1
  346. package/dist/core/cosine.js +4 -1
  347. package/dist/core/handoff.d.ts +7 -2
  348. package/dist/core/handoff.js +4 -1
  349. package/dist/core/markdown.js +22 -17
  350. package/dist/core/memory-audit.js +14 -3
  351. package/dist/core/memory-quality.d.ts +12 -3
  352. package/dist/core/memory-quality.js +57 -21
  353. package/dist/core/memory.d.ts +87 -30
  354. package/dist/core/memory.js +82 -33
  355. package/dist/core/merged-row.d.ts +8 -2
  356. package/dist/core/merged-row.js +10 -3
  357. package/dist/core/package-root.d.ts +3 -1
  358. package/dist/core/package-root.js +3 -1
  359. package/dist/core/particle-refresh.d.ts +8 -0
  360. package/dist/core/particle-refresh.js +22 -0
  361. package/dist/core/physics-config.d.ts +4 -1
  362. package/dist/core/physics-config.js +6 -2
  363. package/dist/core/physics.d.ts +39 -11
  364. package/dist/core/physics.js +71 -21
  365. package/dist/core/project-identity.d.ts +34 -17
  366. package/dist/core/project-identity.js +35 -18
  367. package/dist/core/project-remote.d.ts +8 -4
  368. package/dist/core/project-remote.js +31 -14
  369. package/dist/core/recall-scope.d.ts +33 -11
  370. package/dist/core/recall-scope.js +42 -15
  371. package/dist/core/rejection-digest.d.ts +7 -0
  372. package/dist/core/rejection-digest.js +13 -0
  373. package/dist/core/salience.d.ts +3 -1
  374. package/dist/core/salience.js +10 -4
  375. package/dist/core/search-types.d.ts +15 -2
  376. package/dist/core/search-types.js +11 -0
  377. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  378. package/dist/dashboard/dashboard-actions.js +18 -7
  379. package/dist/dashboard/dashboard-queries.js +2 -7
  380. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  381. package/dist/dashboard/dashboard-snapshot.js +5 -7
  382. package/dist/dashboard/dashboard.js +22 -8
  383. package/dist/db/backup.js +2 -2
  384. package/dist/db/busy.d.ts +10 -3
  385. package/dist/db/busy.js +27 -5
  386. package/dist/db/connect.d.ts +10 -2
  387. package/dist/db/connect.js +8 -2
  388. package/dist/db/continuity.d.ts +1 -1
  389. package/dist/db/continuity.js +27 -11
  390. package/dist/db/meta.d.ts +4 -1
  391. package/dist/db/meta.js +4 -1
  392. package/dist/db/migrate.d.ts +10 -5
  393. package/dist/db/migrate.js +40 -20
  394. package/dist/db/migrations/index.d.ts +1 -1
  395. package/dist/db/migrations/index.js +3 -1
  396. package/dist/db/migrations/types.d.ts +2 -1
  397. package/dist/db/migrations/v11.js +1 -0
  398. package/dist/db/migrations/v12.js +2 -1
  399. package/dist/db/migrations/v14.js +2 -0
  400. package/dist/db/migrations/v15.js +4 -2
  401. package/dist/db/migrations/v16.js +6 -3
  402. package/dist/db/migrations/v17.js +2 -1
  403. package/dist/db/migrations/v19.js +4 -2
  404. package/dist/db/migrations/v20.js +2 -1
  405. package/dist/db/migrations/v22.js +12 -6
  406. package/dist/db/migrations/v23.js +6 -3
  407. package/dist/db/migrations/v24.js +6 -3
  408. package/dist/db/migrations/v25.js +4 -2
  409. package/dist/db/migrations/v26.js +4 -2
  410. package/dist/db/migrations/v27.js +6 -3
  411. package/dist/db/migrations/v28.js +4 -2
  412. package/dist/db/migrations/v29.js +4 -2
  413. package/dist/db/migrations/v30.js +6 -3
  414. package/dist/db/migrations/v31.js +4 -2
  415. package/dist/db/migrations/v32.js +6 -3
  416. package/dist/db/migrations/v33.js +4 -2
  417. package/dist/db/migrations/v34.js +2 -1
  418. package/dist/db/migrations/v35.js +2 -1
  419. package/dist/db/migrations/v36.js +2 -1
  420. package/dist/db/migrations/v37.js +10 -5
  421. package/dist/db/migrations/v38.js +10 -5
  422. package/dist/db/migrations/v39.js +14 -6
  423. package/dist/db/migrations/v40.js +4 -2
  424. package/dist/db/migrations/v41.js +4 -2
  425. package/dist/db/migrations/v42.js +2 -1
  426. package/dist/db/migrations/v44.js +4 -2
  427. package/dist/db/migrations/v45.js +4 -2
  428. package/dist/db/migrations/v49.js +2 -1
  429. package/dist/db/migrations/v50.js +4 -2
  430. package/dist/db/migrations/v51.js +4 -2
  431. package/dist/db/migrations/v52.js +2 -1
  432. package/dist/db/migrations/v53.js +8 -4
  433. package/dist/db/migrations/v54.js +2 -1
  434. package/dist/db/migrations/v55.js +4 -2
  435. package/dist/db/migrations/v56.d.ts +3 -0
  436. package/dist/db/migrations/v56.js +28 -0
  437. package/dist/db/open.d.ts +24 -12
  438. package/dist/db/open.js +25 -13
  439. package/dist/db/physics-state.d.ts +8 -8
  440. package/dist/db/physics-state.js +17 -50
  441. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  442. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  443. package/dist/db/request-stores.d.ts +20 -5
  444. package/dist/db/request-stores.js +15 -5
  445. package/dist/db/tables.d.ts +2 -1
  446. package/dist/db/tables.js +12 -4
  447. package/dist/db/vector-store.d.ts +13 -4
  448. package/dist/db/vector-store.js +35 -14
  449. package/dist/db/wal-checkpointer.d.ts +2 -1
  450. package/dist/db/wal-checkpointer.js +19 -7
  451. package/dist/doctor.d.ts +7 -1
  452. package/dist/doctor.js +128 -46
  453. package/dist/embeddings/local.d.ts +8 -4
  454. package/dist/embeddings/local.js +11 -7
  455. package/dist/embeddings/provider.d.ts +19 -10
  456. package/dist/embeddings/provider.js +32 -27
  457. package/dist/embeddings/transformers.d.ts +16 -4
  458. package/dist/embeddings/transformers.js +32 -15
  459. package/dist/entry/json-hooks.d.ts +1 -1
  460. package/dist/entry/json-hooks.js +1 -1
  461. package/dist/entry/project-identity.js +2 -1
  462. package/dist/entry/session-text.d.ts +1 -1
  463. package/dist/entry/session-text.js +1 -1
  464. package/dist/entry/sqlite-handles.d.ts +10 -0
  465. package/dist/entry/sqlite-handles.js +9 -0
  466. package/dist/entry/store-kit.d.ts +50 -0
  467. package/dist/entry/store-kit.js +27 -0
  468. package/dist/entry/testing.d.ts +6 -0
  469. package/dist/entry/testing.js +7 -0
  470. package/dist/eval/eval-stats.d.ts +27 -8
  471. package/dist/eval/eval-stats.js +17 -5
  472. package/dist/eval/eval-suite.d.ts +3 -1
  473. package/dist/eval/eval-suite.js +409 -187
  474. package/dist/eval/eval.d.ts +8 -2
  475. package/dist/eval/eval.js +8 -2
  476. package/dist/eval/judgment.js +17 -7
  477. package/dist/graph/delta.d.ts +9 -42
  478. package/dist/graph/delta.js +17 -11
  479. package/dist/graph/extract.d.ts +10 -7
  480. package/dist/graph/extract.js +57 -25
  481. package/dist/graph/recall.d.ts +12 -4
  482. package/dist/graph/recall.js +30 -13
  483. package/dist/graph/stream.d.ts +18 -6
  484. package/dist/graph/stream.js +32 -10
  485. package/dist/graph/view.d.ts +19 -6
  486. package/dist/graph/view.js +42 -17
  487. package/dist/hooks/codex-session.js +2 -2
  488. package/dist/hooks/codex-wrapper.d.ts +3 -1
  489. package/dist/hooks/codex-wrapper.js +9 -4
  490. package/dist/hooks/copilot.d.ts +19 -5
  491. package/dist/hooks/copilot.js +54 -15
  492. package/dist/hooks/hook-blocks.d.ts +4 -1
  493. package/dist/hooks/hook-blocks.js +8 -3
  494. package/dist/hooks/json-hooks.d.ts +9 -5
  495. package/dist/hooks/json-hooks.js +72 -33
  496. package/dist/hooks/opencode.js +15 -5
  497. package/dist/hooks/shared.d.ts +27 -8
  498. package/dist/hooks/shared.js +57 -16
  499. package/dist/importers/core.d.ts +12 -4
  500. package/dist/importers/core.js +11 -10
  501. package/dist/importers/markdown-parse.d.ts +15 -5
  502. package/dist/importers/markdown-parse.js +16 -7
  503. package/dist/importers/markdown.js +6 -9
  504. package/dist/importers/sources.js +10 -23
  505. package/dist/importers/vault.d.ts +3 -3
  506. package/dist/importers/vault.js +61 -45
  507. package/dist/index.d.ts +33 -7
  508. package/dist/index.js +26 -8
  509. package/dist/learn/autolearn.d.ts +21 -6
  510. package/dist/learn/autolearn.js +57 -26
  511. package/dist/learn/churn-git.d.ts +4 -1
  512. package/dist/learn/churn-git.js +29 -5
  513. package/dist/learn/extract.d.ts +4 -1
  514. package/dist/learn/extract.js +17 -10
  515. package/dist/learn/forward-claim-detector.d.ts +17 -5
  516. package/dist/learn/forward-claim-detector.js +34 -15
  517. package/dist/learn/invalidation.d.ts +12 -6
  518. package/dist/learn/invalidation.js +62 -28
  519. package/dist/learn/roots.d.ts +3 -0
  520. package/dist/learn/roots.js +5 -0
  521. package/dist/mcp/admin-tools.d.ts +5 -5
  522. package/dist/mcp/admin-tools.js +28 -23
  523. package/dist/mcp/format.d.ts +1 -1
  524. package/dist/mcp/format.js +4 -2
  525. package/dist/mcp/framing.d.ts +3 -1
  526. package/dist/mcp/framing.js +20 -8
  527. package/dist/mcp/memory-tools.d.ts +3 -3
  528. package/dist/mcp/memory-tools.js +21 -20
  529. package/dist/mcp/protocol.d.ts +32 -16
  530. package/dist/mcp/protocol.js +12 -9
  531. package/dist/mcp/recall-tools.d.ts +3 -3
  532. package/dist/mcp/recall-tools.js +62 -74
  533. package/dist/mcp/request.d.ts +7 -5
  534. package/dist/mcp/request.js +61 -77
  535. package/dist/mcp/server.d.ts +3 -1
  536. package/dist/mcp/server.js +8 -3
  537. package/dist/mcp/session-state.d.ts +1 -1
  538. package/dist/mcp/session-state.js +4 -3
  539. package/dist/mcp/shared-gate.d.ts +3 -2
  540. package/dist/mcp/shared-gate.js +3 -2
  541. package/dist/mcp/stdio.d.ts +6 -3
  542. package/dist/mcp/stdio.js +59 -23
  543. package/dist/mcp/tool-args.d.ts +4 -1
  544. package/dist/mcp/tool-args.js +8 -3
  545. package/dist/mcp/tools.js +76 -32
  546. package/dist/objects/customer-notes.d.ts +12 -10
  547. package/dist/objects/customer-notes.js +21 -15
  548. package/dist/objects/decisions.d.ts +18 -10
  549. package/dist/objects/decisions.js +23 -17
  550. package/dist/objects/descriptor.js +2 -1
  551. package/dist/objects/fields.d.ts +4 -1
  552. package/dist/objects/fields.js +6 -2
  553. package/dist/objects/incidents.d.ts +14 -16
  554. package/dist/objects/incidents.js +29 -30
  555. package/dist/objects/lifecycle.d.ts +0 -4
  556. package/dist/objects/lifecycle.js +21 -24
  557. package/dist/objects/policies.d.ts +12 -16
  558. package/dist/objects/policies.js +17 -21
  559. package/dist/objects/processes.d.ts +16 -10
  560. package/dist/objects/processes.js +20 -15
  561. package/dist/objects/project-briefs.d.ts +13 -14
  562. package/dist/objects/project-briefs.js +33 -39
  563. package/dist/objects/skills.d.ts +10 -12
  564. package/dist/objects/skills.js +17 -22
  565. package/dist/postinstall.js +15 -7
  566. package/dist/predictions/planning-fallacy.d.ts +19 -6
  567. package/dist/predictions/planning-fallacy.js +4 -2
  568. package/dist/rerankers/clef.d.ts +8 -2
  569. package/dist/rerankers/clef.js +14 -9
  570. package/dist/rerankers/cross-encoder.d.ts +2 -1
  571. package/dist/rerankers/cross-encoder.js +19 -9
  572. package/dist/rerankers/index.js +2 -1
  573. package/dist/rerankers/jev.js +2 -1
  574. package/dist/rerankers/llm.d.ts +6 -2
  575. package/dist/rerankers/llm.js +8 -3
  576. package/dist/rerankers/remote.d.ts +3 -1
  577. package/dist/rerankers/remote.js +5 -2
  578. package/dist/rerankers/types.d.ts +6 -2
  579. package/dist/search/bm25-search.d.ts +3 -1
  580. package/dist/search/bm25-search.js +15 -2
  581. package/dist/search/boosts.js +4 -3
  582. package/dist/search/embed-memories.d.ts +12 -4
  583. package/dist/search/embed-memories.js +96 -58
  584. package/dist/search/engine.d.ts +11 -0
  585. package/dist/search/engine.js +14 -0
  586. package/dist/search/goal-boost.d.ts +10 -3
  587. package/dist/search/goal-boost.js +13 -6
  588. package/dist/search/hybrid-score.d.ts +4 -1
  589. package/dist/search/hybrid-score.js +4 -1
  590. package/dist/search/hybrid.d.ts +23 -8
  591. package/dist/search/hybrid.js +12 -7
  592. package/dist/search/multihop.js +14 -13
  593. package/dist/search/path-context.d.ts +10 -3
  594. package/dist/search/path-context.js +10 -3
  595. package/dist/search/physics-search.d.ts +9 -4
  596. package/dist/search/physics-search.js +38 -14
  597. package/dist/search/rerank.d.ts +2 -1
  598. package/dist/search/rerank.js +2 -1
  599. package/dist/search/rrf.d.ts +14 -5
  600. package/dist/search/rrf.js +11 -4
  601. package/dist/search/vector.d.ts +8 -2
  602. package/dist/search/vector.js +14 -8
  603. package/dist/server/auth.d.ts +19 -15
  604. package/dist/server/auth.js +68 -38
  605. package/dist/server/boot.d.ts +4 -1
  606. package/dist/server/boot.js +115 -67
  607. package/dist/server/client-ip.d.ts +17 -5
  608. package/dist/server/client-ip.js +56 -21
  609. package/dist/server/cursor.d.ts +10 -3
  610. package/dist/server/cursor.js +10 -3
  611. package/dist/server/deadline.d.ts +5 -2
  612. package/dist/server/deadline.js +10 -3
  613. package/dist/server/key-check-bounds.js +12 -4
  614. package/dist/server/lifecycle.d.ts +4 -1
  615. package/dist/server/lifecycle.js +10 -4
  616. package/dist/server/mcp-http.d.ts +2 -1
  617. package/dist/server/mcp-http.js +37 -22
  618. package/dist/server/rate-limit.d.ts +17 -5
  619. package/dist/server/rate-limit.js +55 -26
  620. package/dist/server/ready.js +7 -4
  621. package/dist/server/request.d.ts +15 -4
  622. package/dist/server/request.js +42 -15
  623. package/dist/server/route-checks.d.ts +4 -1
  624. package/dist/server/route-checks.js +8 -3
  625. package/dist/server/route-table.d.ts +8 -6
  626. package/dist/server/route-table.js +550 -97
  627. package/dist/server/routes/admin.d.ts +7 -7
  628. package/dist/server/routes/admin.js +36 -15
  629. package/dist/server/routes/customer-notes.d.ts +5 -5
  630. package/dist/server/routes/customer-notes.js +5 -4
  631. package/dist/server/routes/decisions.d.ts +5 -5
  632. package/dist/server/routes/decisions.js +12 -6
  633. package/dist/server/routes/incidents.d.ts +5 -5
  634. package/dist/server/routes/incidents.js +10 -4
  635. package/dist/server/routes/memories.d.ts +8 -8
  636. package/dist/server/routes/memories.js +12 -17
  637. package/dist/server/routes/object-routes.d.ts +8 -5
  638. package/dist/server/routes/object-routes.js +4 -2
  639. package/dist/server/routes/policies.d.ts +6 -6
  640. package/dist/server/routes/policies.js +11 -4
  641. package/dist/server/routes/predictions.d.ts +5 -5
  642. package/dist/server/routes/predictions.js +9 -4
  643. package/dist/server/routes/processes.d.ts +5 -5
  644. package/dist/server/routes/processes.js +15 -6
  645. package/dist/server/routes/project-briefs.d.ts +6 -6
  646. package/dist/server/routes/project-briefs.js +3 -2
  647. package/dist/server/routes/recall.d.ts +3 -3
  648. package/dist/server/routes/recall.js +21 -10
  649. package/dist/server/routes/skills.d.ts +6 -6
  650. package/dist/server/routes/skills.js +12 -4
  651. package/dist/server/server-detect.d.ts +24 -8
  652. package/dist/server/server-detect.js +57 -22
  653. package/dist/server/sleep-child.js +16 -10
  654. package/dist/server/sleep-offload.d.ts +8 -5
  655. package/dist/server/sleep-offload.js +40 -18
  656. package/dist/server/tls.d.ts +10 -2
  657. package/dist/server/tls.js +25 -5
  658. package/dist/server/types.d.ts +41 -24
  659. package/dist/server/validation.d.ts +4 -1
  660. package/dist/server/validation.js +22 -9
  661. package/dist/server.d.ts +17 -49
  662. package/dist/server.js +33 -40
  663. package/dist/sharing/global-store.d.ts +6 -12
  664. package/dist/sharing/global-store.js +8 -48
  665. package/dist/sharing/global-sync.d.ts +3 -1
  666. package/dist/sharing/global-sync.js +17 -7
  667. package/dist/sharing/project-merge.d.ts +25 -7
  668. package/dist/sharing/project-merge.js +49 -17
  669. package/dist/sharing/search-both.d.ts +8 -4
  670. package/dist/sharing/search-both.js +28 -14
  671. package/dist/sharing/share.d.ts +8 -4
  672. package/dist/sharing/share.js +40 -18
  673. package/dist/store/ambient.js +10 -5
  674. package/dist/store/audit-event.d.ts +2 -2
  675. package/dist/store/audit-event.js +8 -3
  676. package/dist/store/audit.d.ts +6 -3
  677. package/dist/store/audit.js +16 -6
  678. package/dist/store/auth.d.ts +4 -2
  679. package/dist/store/auth.js +63 -20
  680. package/dist/store/busy.d.ts +9 -0
  681. package/dist/store/busy.js +16 -0
  682. package/dist/store/candidates.d.ts +12 -5
  683. package/dist/store/candidates.js +90 -41
  684. package/dist/store/capture-write.d.ts +2 -1
  685. package/dist/store/capture-write.js +2 -1
  686. package/dist/store/card-detail.d.ts +4 -4
  687. package/dist/store/card-detail.js +15 -8
  688. package/dist/store/cards.d.ts +24 -10
  689. package/dist/store/cards.js +97 -63
  690. package/dist/store/compaction-caller.d.ts +2 -1
  691. package/dist/store/compaction-caller.js +2 -1
  692. package/dist/store/compactions-record.d.ts +14 -8
  693. package/dist/store/compactions-record.js +101 -37
  694. package/dist/store/compactions.js +35 -15
  695. package/dist/store/conflicts.d.ts +16 -5
  696. package/dist/store/conflicts.js +104 -48
  697. package/dist/store/connectors/dlq.d.ts +17 -5
  698. package/dist/store/connectors/dlq.js +58 -6
  699. package/dist/store/connectors/event-log.d.ts +122 -0
  700. package/dist/store/connectors/event-log.js +25 -0
  701. package/dist/store/connectors/github.d.ts +6 -3
  702. package/dist/store/connectors/github.js +30 -48
  703. package/dist/store/connectors/slack.d.ts +2 -1
  704. package/dist/store/connectors/slack.js +31 -47
  705. package/dist/store/dashboard-reads.d.ts +7 -3
  706. package/dist/store/dashboard-reads.js +32 -10
  707. package/dist/store/delete-and-batch.d.ts +17 -11
  708. package/dist/store/delete-and-batch.js +70 -28
  709. package/dist/store/delivery-recorder.d.ts +10 -7
  710. package/dist/store/delivery-recorder.js +70 -37
  711. package/dist/store/descendant-page.d.ts +2 -1
  712. package/dist/store/descendant-page.js +26 -10
  713. package/dist/store/diagnostics.d.ts +2 -1
  714. package/dist/store/diagnostics.js +2 -1
  715. package/dist/store/doctor-reads.d.ts +2 -1
  716. package/dist/store/doctor-reads.js +13 -5
  717. package/dist/store/dormant.d.ts +19 -11
  718. package/dist/store/dormant.js +45 -19
  719. package/dist/store/embeddings/index.d.ts +13 -9
  720. package/dist/store/embeddings/index.js +19 -12
  721. package/dist/store/entry-reads.d.ts +72 -21
  722. package/dist/store/entry-reads.js +215 -69
  723. package/dist/store/entry-row.d.ts +10 -6
  724. package/dist/store/entry-row.js +26 -14
  725. package/dist/store/entry-writes.d.ts +28 -13
  726. package/dist/store/entry-writes.js +61 -22
  727. package/dist/store/failure-log-at.js +1 -1
  728. package/dist/store/failure-log.d.ts +4 -2
  729. package/dist/store/failure-log.js +13 -6
  730. package/dist/store/gated-write.d.ts +3 -3
  731. package/dist/store/gated-write.js +3 -3
  732. package/dist/store/goals.d.ts +5 -4
  733. package/dist/store/goals.js +11 -12
  734. package/dist/store/graph-apply.d.ts +21 -0
  735. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  736. package/dist/store/graph-queue.d.ts +9 -6
  737. package/dist/store/graph-queue.js +15 -10
  738. package/dist/store/graph-reads.d.ts +16 -11
  739. package/dist/store/graph-reads.js +29 -19
  740. package/dist/store/graph-rows.d.ts +41 -3
  741. package/dist/store/graph-rows.js +10 -7
  742. package/dist/store/graph-view-rows.js +15 -7
  743. package/dist/store/graph-writes.d.ts +16 -10
  744. package/dist/store/graph-writes.js +59 -36
  745. package/dist/store/half-life.js +2 -2
  746. package/dist/store/handoffs.d.ts +13 -7
  747. package/dist/store/handoffs.js +44 -22
  748. package/dist/store/index-and-stats.d.ts +2 -2
  749. package/dist/store/index-and-stats.js +6 -5
  750. package/dist/store/index.d.ts +4 -2
  751. package/dist/store/index.js +2 -1
  752. package/dist/store/key-audit.d.ts +2 -1
  753. package/dist/store/key-audit.js +2 -1
  754. package/dist/store/key-writes.d.ts +2 -1
  755. package/dist/store/key-writes.js +9 -2
  756. package/dist/store/ledger-turn.d.ts +4 -1
  757. package/dist/store/ledger-turn.js +7 -2
  758. package/dist/store/mirrors.d.ts +11 -4
  759. package/dist/store/mirrors.js +96 -19
  760. package/dist/store/narrow.d.ts +6 -0
  761. package/dist/store/narrow.js +11 -0
  762. package/dist/store/open.d.ts +6 -3
  763. package/dist/store/open.js +20 -10
  764. package/dist/store/pilot-arm.d.ts +2 -1
  765. package/dist/store/pilot-arm.js +18 -6
  766. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  767. package/dist/store/planning-fallacy-evidence.js +8 -5
  768. package/dist/store/port/agent-import.d.ts +62 -0
  769. package/dist/store/port/agent-import.js +2 -0
  770. package/dist/store/port/consolidation.d.ts +129 -0
  771. package/dist/store/port/consolidation.js +2 -0
  772. package/dist/store/port/learning.d.ts +19 -0
  773. package/dist/store/port/learning.js +2 -0
  774. package/dist/store/port/local-files.d.ts +18 -0
  775. package/dist/store/port/local-files.js +2 -0
  776. package/dist/store/port/promotion.d.ts +20 -0
  777. package/dist/store/port/promotion.js +3 -0
  778. package/dist/store/port-groups.d.ts +160 -0
  779. package/dist/store/port-groups.js +2 -0
  780. package/dist/store/port.d.ts +261 -219
  781. package/dist/store/port.js +3 -9
  782. package/dist/store/predictions.d.ts +14 -10
  783. package/dist/store/predictions.js +37 -17
  784. package/dist/store/project-tags.d.ts +4 -1
  785. package/dist/store/project-tags.js +16 -5
  786. package/dist/store/quality-repair.d.ts +8 -4
  787. package/dist/store/quality-repair.js +53 -20
  788. package/dist/store/quarantine.d.ts +1 -0
  789. package/dist/store/quarantine.js +23 -9
  790. package/dist/store/raw-archive.d.ts +5 -4
  791. package/dist/store/raw-archive.js +11 -10
  792. package/dist/store/recall-trace.d.ts +22 -17
  793. package/dist/store/recall-trace.js +128 -64
  794. package/dist/store/rejected-values.d.ts +15 -10
  795. package/dist/store/rejected-values.js +46 -20
  796. package/dist/store/rejection.d.ts +12 -11
  797. package/dist/store/rejection.js +18 -19
  798. package/dist/store/report-reads.d.ts +2 -1
  799. package/dist/store/report-reads.js +2 -1
  800. package/dist/store/rows.d.ts +7 -5
  801. package/dist/store/rows.js +20 -13
  802. package/dist/store/rule-sql.d.ts +7 -3
  803. package/dist/store/rule-sql.js +26 -13
  804. package/dist/store/search-rows.d.ts +16 -11
  805. package/dist/store/search-rows.js +54 -32
  806. package/dist/store/sessions.d.ts +12 -10
  807. package/dist/store/sessions.js +40 -21
  808. package/dist/store/set-aside.d.ts +2 -2
  809. package/dist/store/set-aside.js +18 -5
  810. package/dist/store/sqlite/agent-import.d.ts +3 -0
  811. package/dist/store/sqlite/agent-import.js +77 -0
  812. package/dist/store/sqlite/cards-group.d.ts +6 -0
  813. package/dist/store/sqlite/cards-group.js +37 -0
  814. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  815. package/dist/store/sqlite/conflicts-group.js +18 -0
  816. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  817. package/dist/store/sqlite/connector-events-group.js +17 -6
  818. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  819. package/dist/store/sqlite/connector-writes-group.js +12 -5
  820. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  821. package/dist/store/sqlite/consolidation-group.js +64 -0
  822. package/dist/store/sqlite/dag-reads-group.js +1 -1
  823. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  824. package/dist/store/sqlite/dormant-group.js +29 -0
  825. package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
  826. package/dist/store/sqlite/entry-writes-group.js +37 -14
  827. package/dist/store/sqlite/error-codec.d.ts +4 -2
  828. package/dist/store/sqlite/error-codec.js +32 -10
  829. package/dist/store/sqlite/executor-counts.js +2 -1
  830. package/dist/store/sqlite/executor.d.ts +8 -3
  831. package/dist/store/sqlite/executor.js +56 -18
  832. package/dist/store/sqlite/global-promote.d.ts +5 -0
  833. package/dist/store/sqlite/global-promote.js +48 -0
  834. package/dist/store/sqlite/goals-group.d.ts +6 -0
  835. package/dist/store/sqlite/goals-group.js +23 -0
  836. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  837. package/dist/store/sqlite/graph-reads-group.js +2 -1
  838. package/dist/store/sqlite/held-connection.d.ts +8 -0
  839. package/dist/store/sqlite/held-connection.js +34 -7
  840. package/dist/store/sqlite/last-recall-group.d.ts +15 -0
  841. package/dist/store/sqlite/last-recall-group.js +62 -0
  842. package/dist/store/sqlite/learning-group.d.ts +4 -0
  843. package/dist/store/sqlite/learning-group.js +17 -0
  844. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  845. package/dist/store/sqlite/maintenance-groups.js +61 -0
  846. package/dist/store/sqlite/object-rows.d.ts +6 -3
  847. package/dist/store/sqlite/object-rows.js +34 -5
  848. package/dist/store/sqlite/objects-group.d.ts +5 -4
  849. package/dist/store/sqlite/objects-group.js +97 -38
  850. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  851. package/dist/store/sqlite/predictions-group.js +4 -2
  852. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  853. package/dist/store/sqlite/promotion-group.js +10 -0
  854. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  855. package/dist/store/sqlite/quarantine-group.js +4 -2
  856. package/dist/store/sqlite/reports-group.d.ts +6 -0
  857. package/dist/store/sqlite/reports-group.js +33 -0
  858. package/dist/store/sqlite/request-scope.d.ts +6 -0
  859. package/dist/store/sqlite/request-scope.js +18 -0
  860. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  861. package/dist/store/sqlite/sessions-group.js +46 -0
  862. package/dist/store/sqlite/store.d.ts +22 -18
  863. package/dist/store/sqlite/store.js +95 -33
  864. package/dist/store/sqlite/vector-pack.js +2 -1
  865. package/dist/store/sqlite/vector-reads-group.js +2 -1
  866. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  867. package/dist/store/sqlite/worker-jobs.js +19 -7
  868. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  869. package/dist/store/sqlite/worker-ops.js +6 -3
  870. package/dist/store/sqlite/worker-store.d.ts +4 -3
  871. package/dist/store/sqlite/worker-store.js +24 -14
  872. package/dist/store/summaries.d.ts +25 -11
  873. package/dist/store/summaries.js +84 -27
  874. package/dist/store/summary-dirty.d.ts +2 -1
  875. package/dist/store/summary-dirty.js +2 -1
  876. package/dist/store/tenant.d.ts +3 -2
  877. package/dist/store/tenant.js +5 -4
  878. package/dist/store/token-ledger-rows.js +8 -4
  879. package/dist/store/token-ledger.d.ts +19 -13
  880. package/dist/store/token-ledger.js +27 -14
  881. package/dist/store/tombstone-checks.d.ts +4 -1
  882. package/dist/store/tombstone-checks.js +10 -1
  883. package/dist/store/usage-reports.js +2 -1
  884. package/dist/store/vector-index.d.ts +8 -5
  885. package/dist/store/vector-index.js +28 -11
  886. package/dist/store/working-memory.d.ts +6 -4
  887. package/dist/store/working-memory.js +14 -9
  888. package/dist/support-bundle.js +10 -5
  889. package/dist/trust/quarantine.d.ts +1 -2
  890. package/dist/trust/quarantine.js +1 -5
  891. package/dist/trust/reject-flow.d.ts +12 -3
  892. package/dist/trust/reject-flow.js +12 -4
  893. package/dist/util/anthropic-messages.d.ts +7 -2
  894. package/dist/util/anthropic-messages.js +18 -7
  895. package/dist/util/atomic-write.d.ts +8 -3
  896. package/dist/util/atomic-write.js +36 -21
  897. package/dist/util/compaction-items.d.ts +4 -1
  898. package/dist/util/compaction-items.js +8 -2
  899. package/dist/util/crash-handlers.d.ts +7 -2
  900. package/dist/util/crash-handlers.js +13 -4
  901. package/dist/util/env.d.ts +26 -5
  902. package/dist/util/env.js +87 -25
  903. package/dist/util/format.d.ts +2 -0
  904. package/dist/util/format.js +4 -0
  905. package/dist/util/home-path.js +12 -6
  906. package/dist/util/hook-payload.d.ts +3 -1
  907. package/dist/util/hook-payload.js +3 -1
  908. package/dist/util/http-retry.d.ts +12 -6
  909. package/dist/util/http-retry.js +16 -6
  910. package/dist/util/http-util.d.ts +20 -5
  911. package/dist/util/http-util.js +28 -9
  912. package/dist/util/json.d.ts +4 -1
  913. package/dist/util/json.js +4 -1
  914. package/dist/util/keyset.js +2 -1
  915. package/dist/util/limits.js +4 -2
  916. package/dist/util/log.d.ts +13 -5
  917. package/dist/util/log.js +29 -6
  918. package/dist/util/net.d.ts +5 -0
  919. package/dist/util/net.js +19 -0
  920. package/dist/util/real-path.d.ts +2 -1
  921. package/dist/util/real-path.js +4 -3
  922. package/dist/util/request-scope.d.ts +16 -4
  923. package/dist/util/request-scope.js +19 -6
  924. package/dist/util/same-text.d.ts +10 -3
  925. package/dist/util/same-text.js +10 -3
  926. package/dist/util/secret-detect.d.ts +24 -7
  927. package/dist/util/secret-detect.js +49 -14
  928. package/dist/util/spawn-argv.d.ts +11 -0
  929. package/dist/util/spawn-argv.js +66 -0
  930. package/dist/util/sql.d.ts +3 -0
  931. package/dist/util/sql.js +6 -0
  932. package/dist/util/sqlite-blocked.d.ts +15 -4
  933. package/dist/util/sqlite-blocked.js +19 -6
  934. package/dist/util/stored-json.d.ts +4 -1
  935. package/dist/util/stored-json.js +6 -2
  936. package/dist/util/stream-tee.d.ts +2 -1
  937. package/dist/util/stream-tee.js +8 -5
  938. package/dist/util/transcript-tail.d.ts +4 -1
  939. package/dist/util/transcript-tail.js +4 -1
  940. package/dist/util/vector-codec.d.ts +4 -0
  941. package/dist/util/vector-codec.js +15 -0
  942. package/dist/util/version.d.ts +8 -3
  943. package/dist/util/version.js +8 -3
  944. package/dist/util/write-budget.d.ts +7 -2
  945. package/dist/util/write-budget.js +5 -2
  946. package/dist/util/yaml.d.ts +4 -1
  947. package/dist/util/yaml.js +4 -1
  948. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  949. package/extensions/openclaw-plugin/package.json +1 -1
  950. package/openclaw.plugin.json +1 -1
  951. package/package.json +4 -1
  952. package/scripts/postinstall.cjs +3 -1
  953. package/dist/api/audit.js +0 -56
  954. package/dist/api/cards.d.ts +0 -42
  955. package/dist/api/conflicts.d.ts +0 -28
  956. package/dist/api/conflicts.js +0 -61
  957. package/dist/api/dormant.d.ts +0 -14
  958. package/dist/api/dormant.js +0 -58
  959. package/dist/api/goals.d.ts +0 -18
  960. package/dist/api/graph.d.ts +0 -8
  961. package/dist/api/graph.js +0 -7
  962. package/dist/api/learn.js +0 -124
  963. package/dist/api/memories.d.ts +0 -23
  964. package/dist/api/memories.js +0 -46
  965. package/dist/api/objects.d.ts +0 -9
  966. package/dist/api/on-store.d.ts +0 -16
  967. package/dist/api/on-store.js +0 -38
  968. package/dist/api/outcome.d.ts +0 -19
  969. package/dist/api/outcome.js +0 -21
  970. package/dist/api/predictions.d.ts +0 -11
  971. package/dist/api/promote.d.ts +0 -36
  972. package/dist/api/promote.js +0 -65
  973. package/dist/api/recall-core.d.ts +0 -4
  974. package/dist/api/recall-core.js +0 -120
  975. package/dist/api/recall-finish.d.ts +0 -53
  976. package/dist/api/recall-finish.js +0 -30
  977. package/dist/api/recall-history.d.ts +0 -64
  978. package/dist/api/recall-history.js +0 -159
  979. package/dist/api/recall-record.d.ts +0 -43
  980. package/dist/api/recall-record.js +0 -78
  981. package/dist/api/recall-request.js +0 -121
  982. package/dist/api/recall.d.ts +0 -6
  983. package/dist/api/refine.d.ts +0 -7
  984. package/dist/api/refine.js +0 -10
  985. package/dist/api/session-owners.d.ts +0 -4
  986. package/dist/api/session-owners.js +0 -17
  987. package/dist/api/sleep-run.d.ts +0 -26
  988. package/dist/api/sleep.js +0 -10
  989. package/dist/cli/lenient-id.d.ts +0 -2
  990. package/dist/cli/lenient-id.js +0 -13
  991. package/dist/graph/write.d.ts +0 -14
  992. package/dist/store/sqlite/busy.d.ts +0 -3
  993. package/dist/store/sqlite/busy.js +0 -8
  994. package/dist/store/sqlite/local.d.ts +0 -21
  995. package/dist/store/sqlite/local.js +0 -39
@@ -1,6 +1,9 @@
1
1
  import { type JsonValue } from '../util/json.js';
2
2
  import type { CaptureErrorOutcome, RoutineRule } from '../store/failure-log.js';
3
- /** What {@link lessonFromFailure} read from a payload; `detail` is the finer failure-log key (untruncated, command head). */
3
+ /**
4
+ * What {@link lessonFromFailure} read from a payload; `detail`
5
+ * is the finer failure-log key (untruncated, command head).
6
+ */
4
7
  export type FailureReading = {
5
8
  text: string;
6
9
  detail: string;
@@ -22,10 +25,14 @@ export declare function payloadString(payload: JsonValue, key: 'session_id' | 't
22
25
  export declare function failureSignature(text: string): string;
23
26
  /** The hash the failure log stores for a lesson text or a detail; one function so every writer counts repeats alike. */
24
27
  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
28
+ /**
29
+ * The memory text for a failure payload, or why it is not stored; a routine skip keeps its text for the log. `scrub`
30
+ * runs before the
26
31
  * cap, as a mask can be longer than what it hides. Pure. */
27
32
  export declare function lessonFromFailure(payload: JsonValue, scrub?: (text: string) => string): FailureReading;
28
- /** A failure as it may leave the machine: the capped lesson text and the detail's hash, never the untruncated detail. */
33
+ /**
34
+ * A failure as it may leave the machine: the capped lesson text and the detail's hash, never the untruncated detail.
35
+ */
29
36
  export interface FailureReport {
30
37
  /** The payload's tool name; null when it named none. */
31
38
  tool: string | null;
@@ -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, ctx.tenantId, req.sessionId, evidence, 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 { 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,19 +75,36 @@ 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 sessions folder cannot be written, so the caller runs unlocked as before. */
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 });
101
+ }
102
+ catch (err) {
103
+ logger.warn(`session worker: cannot create ${path.dirname(files.queued)}, ` +
104
+ `so the ${mode} close is not run: ${errorMessage(err)}`, errorFields(err));
105
+ return false;
106
+ }
107
+ try {
85
108
  // A full close outranks a turn close: it overwrites a queued turn, and a turn never replaces a queued full close.
86
109
  if (mode === 'full')
87
110
  fs.writeFileSync(files.queued, 'full');
@@ -90,7 +113,10 @@ function queueRun(files, mode) {
90
113
  return true;
91
114
  }
92
115
  catch (err) {
93
- return err instanceof Error && 'code' in err && err.code === 'EEXIST';
116
+ if (errorCode(err) === 'EEXIST')
117
+ return true;
118
+ logger.warn(`session worker: cannot queue the ${mode} close in ${files.queued}, so it is not run: ${errorMessage(err)}`, errorFields(err));
119
+ return false;
94
120
  }
95
121
  }
96
122
  /** Takes the queued request by renaming it, so one queued while this reads it lands in a fresh file. */
@@ -99,8 +125,11 @@ function takeQueued(queued) {
99
125
  try {
100
126
  fs.renameSync(queued, taken);
101
127
  }
102
- catch {
103
- // Nothing queued, or a rename refused for a moment; the request stays queued for the next round.
128
+ catch (err) {
129
+ // ENOENT means nothing is queued; any other refusal leaves the request queued for the next round, but is told.
130
+ if (errorCode(err) !== 'ENOENT') {
131
+ logger.warn(`session worker: cannot take the queued request ${queued}: ${errorMessage(err)}`, errorFields(err));
132
+ }
104
133
  return null;
105
134
  }
106
135
  try {
@@ -110,14 +139,19 @@ function takeQueued(queued) {
110
139
  fs.rmSync(taken, { force: true });
111
140
  }
112
141
  }
113
- /** 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. */
114
144
  export async function runSessionWorker(sessionId, mode, work) {
115
145
  const files = sessionStateFiles(sessionId);
116
- if (files === null || !queueRun(files, mode))
146
+ if (files === null)
117
147
  return work(mode);
148
+ if (!queueRun(files, mode))
149
+ return;
118
150
  for (let take = takeSessionLock(files.lock); take !== 'held'; take = takeSessionLock(files.lock)) {
119
- if (take === 'unusable')
151
+ if (take === 'unusable') {
152
+ warnUnusableLockOnce(files.lock);
120
153
  return work(mode);
154
+ }
121
155
  let ran = false;
122
156
  try {
123
157
  for (let next = takeQueued(files.queued); next !== null; next = takeQueued(files.queued)) {
@@ -150,14 +184,16 @@ export function turnsAfter(turns, position) {
150
184
  return turns;
151
185
  if (count <= turns.length && turnKey(turns[count - 1]) === key)
152
186
  return turns.slice(count);
153
- // 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.
154
189
  for (let i = turns.length - 1; i >= 0; i--) {
155
190
  if (turnKey(turns[i]) === key)
156
191
  return turns.slice(i + 1);
157
192
  }
158
193
  return turns;
159
194
  }
160
- /** 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. */
161
197
  export function loadTurnPosition(sessionId, transcriptPath) {
162
198
  const file = sessionStateFiles(sessionId)?.cursor;
163
199
  if (!file || !fs.existsSync(file))
@@ -179,7 +215,11 @@ export function saveTurnPosition(sessionId, transcriptPath, turns, log) {
179
215
  if (!file)
180
216
  return;
181
217
  const cursor = {
182
- 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(),
183
223
  };
184
224
  const tmp = `${file}.${process.pid}.tmp`;
185
225
  try {
@@ -188,7 +228,8 @@ export function saveTurnPosition(sessionId, transcriptPath, turns, log) {
188
228
  fs.renameSync(tmp, file);
189
229
  }
190
230
  catch (err) {
191
- // 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.
192
233
  log(`cursor not saved: ${errorMessage(err)}`);
193
234
  }
194
235
  }