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
- // PostCompact for a caller on another machine: the items it parsed become rows under its owner and project, and a retried request id writes nothing twice.
1
+ // PostCompact for a caller on another machine: the items it parsed become rows under its owner and project, and a
2
+ // retried request id writes nothing twice.
2
3
  import { BadRequestError } from '../core/api-errors.js';
3
4
  import { COMPACTION_ITEM_MAX_CHARS } from '../util/compaction-items.js';
4
5
  import { saveCallerItems } from '../store/compaction-caller.js';
@@ -17,8 +18,13 @@ export function saveCompactionItemsForCaller(ctx, req) {
17
18
  if (callerInHoldout(ctx, req.sessionId))
18
19
  return { written: 0 };
19
20
  const written = saveCallerItems(ctx.hippoRoot, ctx.tenantId, {
20
- sessionId: req.sessionId, trigger: req.trigger, requestId: req.requestId, project: req.project.name, items: scrubCompactionItems(req.items),
21
- owner: key.owner, origins: key.project,
21
+ sessionId: req.sessionId,
22
+ trigger: req.trigger,
23
+ requestId: req.requestId,
24
+ project: req.project.name,
25
+ items: scrubCompactionItems(req.items),
26
+ owner: key.owner,
27
+ origins: key.project,
22
28
  }, (message) => log.info(`post-compact: ${message}`));
23
29
  return { written };
24
30
  }
@@ -9,8 +9,8 @@ interface ScrubbedSummary {
9
9
  }
10
10
  /** What the record keeps of a compact_summary: the scrubbed body, and every parsed item scrubbed. */
11
11
  export declare function readCompactionText(compactSummary: string): ScrubbedSummary;
12
- /** A caller's items scrubbed as readCompactionText scrubs a summary's, since another machine's scrub is not trusted; cut after it, as a
13
- * mask can run longer than what it hides. */
12
+ /** A caller's items scrubbed as readCompactionText scrubs a summary's, since another machine's scrub is not trusted;
13
+ * cut after it, as a mask can run longer than what it hides. */
14
14
  export declare function scrubCompactionItems(items: readonly string[]): string[];
15
15
  export interface PostCompactPayload {
16
16
  sessionId: string;
@@ -20,7 +20,8 @@ export interface PostCompactPayload {
20
20
  /** null when Claude Code sent none; the transcript fills the record later. */
21
21
  compactSummary: string | null;
22
22
  }
23
- /** The PostCompact work: record the summary, then write its items. Each step is independent; a busy store spools or defers. Never throws. */
23
+ /** The PostCompact work: record the summary, then write its items. Each step is independent; a busy store spools or
24
+ * defers. Never throws. */
24
25
  export declare function saveCompaction(hippoRoot: string, payload: PostCompactPayload, log: Log): CompactionSaveResult;
25
26
  /** The one line PostCompact prints, or null when nothing was saved. */
26
27
  export declare function postCompactLine(result: CompactionSaveResult): string | null;
@@ -6,13 +6,14 @@ import { importSpool, spool } from './compaction-spool.js';
6
6
  import { replayStoredCompactions, saveCompactionAt, } from '../store/compactions-record.js';
7
7
  import { resolveTenantId } from '../store/tenant.js';
8
8
  import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
9
- import { errorMessage, reportCompactionFailure } from '../util/log.js';
9
+ import { errorFields, errorMessage, reportCompactionFailure } from '../util/log.js';
10
10
  import { readTranscriptTail, truncateCodePointSafe } from '../util/transcript-tail.js';
11
11
  /** Tested verbatim: Claude Code hands PreCompact stdout to the summariser as instructions. */
12
- export const PRE_COMPACT_INSTRUCTION = "In your summary, add a last section titled 'Memories for hippo'. List, one per line starting with '- ', each lesson learned, decision made (with its " +
13
- "reason) and correction the user gave in this session that should outlive it. Write each as a standalone sentence that names its subject. Leave out " +
14
- "anything an earlier summary already listed under 'Memories for hippo', and anything this session already saved with `hippo remember`. Write '- none' " +
15
- "if nothing new remains.";
12
+ export const PRE_COMPACT_INSTRUCTION = "In your summary, add a last section titled 'Memories for hippo'. List, one per line starting with '- ', " +
13
+ "each lesson learned, decision made (with its reason) and correction the user gave in this session that " +
14
+ "should outlive it. Write each as a standalone sentence that names its subject. Leave out anything an " +
15
+ "earlier summary already listed under 'Memories for hippo', and anything this session already saved with " +
16
+ "`hippo remember`. Write '- none' if nothing new remains.";
16
17
  const SUMMARY_MAX_CHARS = 256 * 1024;
17
18
  const TRANSCRIPT_TAIL_CAPS = [1 << 20, 8 << 20, 64 << 20];
18
19
  function scrub(text) {
@@ -22,10 +23,14 @@ function scrub(text) {
22
23
  export function readCompactionText(compactSummary) {
23
24
  const body = compactSummaryBody(compactSummary);
24
25
  const parsed = parseCompactionItems(body);
25
- return { summary: truncateCodePointSafe(scrub(body), SUMMARY_MAX_CHARS), items: parsed.items.map(scrub), found: parsed.found };
26
+ return {
27
+ summary: truncateCodePointSafe(scrub(body), SUMMARY_MAX_CHARS),
28
+ items: parsed.items.map(scrub),
29
+ found: parsed.found,
30
+ };
26
31
  }
27
- /** A caller's items scrubbed as readCompactionText scrubs a summary's, since another machine's scrub is not trusted; cut after it, as a
28
- * mask can run longer than what it hides. */
32
+ /** A caller's items scrubbed as readCompactionText scrubs a summary's, since another machine's scrub is not trusted;
33
+ * cut after it, as a mask can run longer than what it hides. */
29
34
  export function scrubCompactionItems(items) {
30
35
  return items.map((item) => truncateCodePointSafe(scrub(item), COMPACTION_ITEM_MAX_CHARS));
31
36
  }
@@ -36,10 +41,11 @@ function spoolSummary(hippoRoot, payload, text, at, reason, result, log) {
36
41
  log(`store busy, summary spooled: ${reason}`);
37
42
  }
38
43
  catch (spoolErr) {
39
- reportCompactionFailure(log, 'spool', errorMessage(spoolErr));
44
+ reportCompactionFailure(log, 'spool', errorMessage(spoolErr), errorFields(spoolErr));
40
45
  }
41
46
  }
42
- /** The PostCompact work: record the summary, then write its items. Each step is independent; a busy store spools or defers. Never throws. */
47
+ /** The PostCompact work: record the summary, then write its items. Each step is independent; a busy store spools or
48
+ * defers. Never throws. */
43
49
  export function saveCompaction(hippoRoot, payload, log) {
44
50
  if (payload.compactSummary === null) {
45
51
  log('skip: payload has no compact_summary');
@@ -63,7 +69,8 @@ export function postCompactLine(result) {
63
69
  if (result.written === 0)
64
70
  return "Hippo kept this compaction's summary; it listed no new memories.";
65
71
  const noun = result.written === 1 ? 'memory' : 'memories';
66
- return `Hippo saved ${result.written} ${noun} from this compaction${result.snapshotSaved ? ' and restored your task snapshot' : ''}.`;
72
+ const restored = result.snapshotSaved ? ' and restored your task snapshot' : '';
73
+ return `Hippo saved ${result.written} ${noun} from this compaction${restored}.`;
67
74
  }
68
75
  function lineText(line) {
69
76
  const content = line.message?.content;
@@ -73,7 +80,8 @@ function lineText(line) {
73
80
  return '';
74
81
  return content.map((block) => (isStringValue(block.text) ? block.text : '')).join('\n');
75
82
  }
76
- /** The summary Claude Code wrote into a transcript between two moments; null when it is not (yet) there or the window cannot reach back that far. */
83
+ /** The summary Claude Code wrote into a transcript between two moments; null when it is not (yet) there or the window
84
+ * cannot reach back that far. */
77
85
  function transcriptSummary(transcriptPath, afterMs, beforeMs) {
78
86
  const size = fs.statSync(transcriptPath).size;
79
87
  for (const cap of TRANSCRIPT_TAIL_CAPS) {
@@ -1,7 +1,9 @@
1
1
  import type { CompactionText, Log } from '../store/compactions-record.js';
2
2
  import type { PostCompactPayload } from './compaction-record.js';
3
3
  export declare const SPOOL_DIR = "compactions-spool";
4
- /** Starts the log line of a step that broke with an unexpected error, so the session-start banner counts it; a set-aside file is counted
4
+ /**
5
+ * Starts the log line of a step that broke with an unexpected error, so the session-start banner counts it; a set-aside
6
+ * file is counted
5
7
  * by its `.bad` name instead. */
6
8
  export declare const SPOOL_PROBLEM = "spool problem: ";
7
9
  /** Only the fs calls the spool makes, so a test can stand in for one of them. */
@@ -28,7 +30,10 @@ export interface SpooledCompaction {
28
30
  text: CompactionText;
29
31
  at: Date;
30
32
  }
31
- /** Records one spooled compaction; it calls `recorded` once the store holds the summary, so the file is done even if a later step throws. */
33
+ /**
34
+ * Records one spooled compaction; it calls `recorded` once the store holds the summary, so the file is done even if a
35
+ * later step throws.
36
+ */
32
37
  export type SpoolImporter = (spooled: SpooledCompaction, recorded: () => void) => void;
33
38
  export declare function spool(hippoRoot: string, tenantId: string, payload: PostCompactPayload, text: CompactionText, at: Date, fsx?: SpoolFs): void;
34
39
  /** null when the text is not a spooled compaction. */
@@ -38,8 +43,14 @@ export interface SpoolCounts {
38
43
  stale: number;
39
44
  bad: number;
40
45
  }
41
- /** What doctor reports, read only: files a replay should have taken by now, claims and tmp files a dead process left, and `.bad` files. */
46
+ /**
47
+ * What doctor reports, read only: files a replay should have taken by now, claims and tmp files a dead process left,
48
+ * and `.bad` files.
49
+ */
42
50
  export declare function spoolCounts(hippoRoot: string, now: Date, waitingAfterMs: number, fsx?: SpoolFs): SpoolCounts;
43
- /** One replayer at a time holds `replay.lock`, so only one process claims a file even where Windows lets two renames of it both land. */
51
+ /**
52
+ * One replayer at a time holds `replay.lock`, so only one process claims a file even where Windows lets two renames of
53
+ * it both land.
54
+ */
44
55
  export declare function importSpool(hippoRoot: string, tenantId: string, log: Log, deadline: number, importOne: SpoolImporter, fsx?: SpoolFs): number;
45
56
  //# sourceMappingURL=compaction-spool.d.ts.map
@@ -8,7 +8,9 @@ import { isSqliteBusy } from '../db/busy.js';
8
8
  import { errorMessage } from '../util/log.js';
9
9
  const STAMP_DIGITS = 13;
10
10
  export const SPOOL_DIR = 'compactions-spool';
11
- /** Starts the log line of a step that broke with an unexpected error, so the session-start banner counts it; a set-aside file is counted
11
+ /**
12
+ * Starts the log line of a step that broke with an unexpected error, so the session-start banner counts it; a set-aside
13
+ * file is counted
12
14
  * by its `.bad` name instead. */
13
15
  export const SPOOL_PROBLEM = 'spool problem: ';
14
16
  const LOCK = 'replay.lock';
@@ -35,7 +37,10 @@ const idle = new Int32Array(new SharedArrayBuffer(4));
35
37
  function errCode(cause) {
36
38
  return cause instanceof Error && 'code' in cause && isStringValue(cause.code) ? cause.code : '';
37
39
  }
38
- /** Runs one fs step, retrying a busy code briefly; '' when it ran, else the busy code it kept hitting. Any other error throws. */
40
+ /**
41
+ * Runs one fs step, retrying a busy code briefly; '' when it ran, else the busy code it kept hitting. Any other error
42
+ * throws.
43
+ */
39
44
  function retryBusy(step) {
40
45
  for (let retry = 0;; retry++) {
41
46
  try {
@@ -52,7 +57,10 @@ function retryBusy(step) {
52
57
  }
53
58
  }
54
59
  }
55
- /** Runs one fs step: ENOENT means gone, a busy code is retried briefly, and any other error is logged and counted busy, so a replay never throws. */
60
+ /**
61
+ * Runs one fs step: ENOENT means gone, a busy code is retried briefly, and any other error is logged and counted busy,
62
+ * so a replay never throws.
63
+ */
56
64
  function settleCode(step, log, what) {
57
65
  try {
58
66
  const code = retryBusy(step);
@@ -121,8 +129,13 @@ export function parseSpooled(text, fallbackTenantId) {
121
129
  catch {
122
130
  return null; // a half-written spool file holds no compaction; the caller treats null as unreadable
123
131
  }
124
- if (!isObjectLike(raw) || !('sessionId' in raw) || !isStringValue(raw.sessionId) || !('summary' in raw) || !isStringValue(raw.summary))
132
+ if (!isObjectLike(raw) ||
133
+ !('sessionId' in raw) ||
134
+ !isStringValue(raw.sessionId) ||
135
+ !('summary' in raw) ||
136
+ !isStringValue(raw.summary)) {
125
137
  return null;
138
+ }
126
139
  if (!('at' in raw) || !isStringValue(raw.at) || Number.isNaN(Date.parse(raw.at)))
127
140
  return null;
128
141
  const items = 'items' in raw && Array.isArray(raw.items) ? raw.items.filter(isStringValue) : [];
@@ -182,7 +195,10 @@ function createLock(fsx, lock, body, log) {
182
195
  return 'skip';
183
196
  }
184
197
  }
185
- /** This run's token and take time once it holds `replay.lock`, else null: another replayer holds it, or it could not be made. */
198
+ /**
199
+ * This run's token and take time once it holds `replay.lock`, else null: another replayer holds it, or it could not be
200
+ * made.
201
+ */
186
202
  function takeLock(fsx, dir, log) {
187
203
  const lock = path.join(dir, LOCK);
188
204
  const token = randomBytes(8).toString('hex');
@@ -218,7 +234,9 @@ function ownsLock(fsx, dir, token, log) {
218
234
  log(held === 'busy' ? 'spool lock could not be read, stopping' : 'spool left to another replayer (lock taken over)');
219
235
  return false;
220
236
  }
221
- /** Removes `replay.lock` only while it holds this run's token, so a run never deletes a successor's lock. Never throws. */
237
+ /**
238
+ * Removes `replay.lock` only while it holds this run's token, so a run never deletes a successor's lock. Never throws.
239
+ */
222
240
  function releaseLock(fsx, dir, mine, log) {
223
241
  const lock = path.join(dir, LOCK);
224
242
  const held = readLock(fsx, lock, log);
@@ -227,7 +245,10 @@ function releaseLock(fsx, dir, mine, log) {
227
245
  if (ours)
228
246
  settle(() => fsx.unlinkSync(lock), log, 'spool lock not released');
229
247
  }
230
- /** Claim time sits in the claim's name, so a claim over STALE_MS away from now belongs to a replayer that never finished. True when one was put back. */
248
+ /**
249
+ * Claim time sits in the claim's name, so a claim over STALE_MS away from now belongs to a replayer that never
250
+ * finished. True when one was put back.
251
+ */
231
252
  function recoverStaleClaims(fsx, dir, names, log) {
232
253
  const now = Date.now();
233
254
  // A claim whose unlink stayed busy after its `.bad` landed is a spare copy, not a second failure.
@@ -247,12 +268,14 @@ function recoverStaleClaims(fsx, dir, names, log) {
247
268
  }
248
269
  else if (next < MAX_ATTEMPTS) {
249
270
  if (settle(() => fsx.renameSync(file, path.join(dir, `${claim.stem}.a${next}.json`)), log, what) === 'done') {
250
- log(`spool file ${claim.name} was claimed by a replayer that never finished, put back (try ${next} of ${MAX_ATTEMPTS})`);
271
+ log(`spool file ${claim.name} was claimed by a replayer that never finished, put back (try ${next} of ` +
272
+ `${MAX_ATTEMPTS})`);
251
273
  putBackOne = true;
252
274
  }
253
275
  }
254
276
  else if (moveBad(fsx, dir, file, { stem: claim.stem, attempt: claim.attempt, cause: 'interrupted', log })) {
255
- log(`spool file ${claim.name} was claimed by a replayer that never finished ${MAX_ATTEMPTS} times, set aside as .bad`);
277
+ log(`spool file ${claim.name} was claimed by a replayer that never finished ${MAX_ATTEMPTS} times, set aside as ` +
278
+ `.bad`);
256
279
  }
257
280
  }
258
281
  return putBackOne;
@@ -274,13 +297,20 @@ function writeBad(fsx, dir, options) {
274
297
  settle(() => fsx.unlinkSync(tmp), log, what);
275
298
  return moved === 'done';
276
299
  }
277
- /** Sets a claim aside as `.bad` before the claim goes, so a crash between leaves a whole copy; a busy write puts the claim back. */
300
+ /**
301
+ * Sets a claim aside as `.bad` before the claim goes, so a crash between leaves a whole copy; a busy write puts the
302
+ * claim back.
303
+ */
278
304
  function moveBad(fsx, dir, claim, options) {
279
305
  const { stem, attempt, cause, log, raw } = options;
280
306
  const what = `spool file ${path.basename(claim)} not set aside`;
281
307
  let text = raw ?? '';
282
- if (raw === undefined && settle(() => { text = fsx.readFileSync(claim, 'utf8'); }, log, what) !== 'done')
308
+ if (raw === undefined &&
309
+ settle(() => {
310
+ text = fsx.readFileSync(claim, 'utf8');
311
+ }, log, what) !== 'done') {
283
312
  return false;
313
+ }
284
314
  if (!writeBad(fsx, dir, { stem, cause, text, log, what })) {
285
315
  putBack(fsx, dir, claim, stem, attempt, log);
286
316
  return false;
@@ -288,7 +318,10 @@ function moveBad(fsx, dir, claim, options) {
288
318
  settle(() => fsx.unlinkSync(claim), log, what);
289
319
  return true;
290
320
  }
291
- /** A tmp over STALE_MS old belongs to a spool that never renamed it: a whole one joins the waiting files, a torn one is set aside. True when one joined. */
321
+ /**
322
+ * A tmp over STALE_MS old belongs to a spool that never renamed it: a whole one joins the waiting files, a torn one is
323
+ * set aside. True when one joined.
324
+ */
292
325
  function promoteTmp(fsx, dir, names, tenantId, log) {
293
326
  const now = Date.now();
294
327
  let promoted = false;
@@ -300,8 +333,12 @@ function promoteTmp(fsx, dir, names, tenantId, log) {
300
333
  const what = `spool file ${name} not promoted`;
301
334
  let mtime = 0;
302
335
  let text = '';
303
- if (settle(() => { mtime = fsx.statSync(file).mtimeMs; }, log, what) !== 'done' || Math.abs(now - mtime) <= STALE_MS)
336
+ if (settle(() => {
337
+ mtime = fsx.statSync(file).mtimeMs;
338
+ }, log, what) !== 'done' ||
339
+ Math.abs(now - mtime) <= STALE_MS) {
304
340
  continue;
341
+ }
305
342
  if (m === null) {
306
343
  // A `.bad` write cut off before its rename: its source goes only after that rename lands, so this copy is spare.
307
344
  settle(() => fsx.unlinkSync(file), log, `spool file ${name} not removed`);
@@ -325,10 +362,14 @@ function promoteTmp(fsx, dir, names, tenantId, log) {
325
362
  /** Removes a claim once the store holds its summary; a claim left behind is imported again, so the log says so. */
326
363
  function removeClaim(fsx, claim, name, log) {
327
364
  const removed = settleCode(() => fsx.unlinkSync(claim), log, `spool file ${name} claim not removed`);
328
- if (removed.settled === 'busy')
365
+ if (removed.settled === 'busy') {
329
366
  log(`spool file ${name} saved; its claim could not be removed (${removed.code}); it will be imported again`);
367
+ }
330
368
  }
331
- /** After an importer throw: a busy store stops the run with the count unchanged, any other error counts one try toward .bad. */
369
+ /**
370
+ * After an importer throw: a busy store stops the run with the count unchanged, any other error counts one try toward
371
+ * .bad.
372
+ */
332
373
  function importFailed(fsx, dir, claim, entry, options) {
333
374
  const { text, recorded, cause, log } = options;
334
375
  const { name } = entry;
@@ -407,7 +448,10 @@ function mtimeOf(fsx, file) {
407
448
  throw err;
408
449
  }
409
450
  }
410
- /** What doctor reports, read only: files a replay should have taken by now, claims and tmp files a dead process left, and `.bad` files. */
451
+ /**
452
+ * What doctor reports, read only: files a replay should have taken by now, claims and tmp files a dead process left,
453
+ * and `.bad` files.
454
+ */
411
455
  export function spoolCounts(hippoRoot, now, waitingAfterMs, fsx = fs) {
412
456
  const counts = { waiting: 0, stale: 0, bad: 0 };
413
457
  const dir = path.join(hippoRoot, SPOOL_DIR);
@@ -433,7 +477,10 @@ export function spoolCounts(hippoRoot, now, waitingAfterMs, fsx = fs) {
433
477
  }
434
478
  return counts;
435
479
  }
436
- /** One replayer at a time holds `replay.lock`, so only one process claims a file even where Windows lets two renames of it both land. */
480
+ /**
481
+ * One replayer at a time holds `replay.lock`, so only one process claims a file even where Windows lets two renames of
482
+ * it both land.
483
+ */
437
484
  export function importSpool(hippoRoot, tenantId, log, deadline, importOne, fsx = fs) {
438
485
  const dir = path.join(hippoRoot, SPOOL_DIR);
439
486
  if (!fsx.existsSync(dir))
@@ -9,11 +9,19 @@ export interface CopilotTurn {
9
9
  text: string;
10
10
  }
11
11
  export declare const SESSION_ID_RE: RegExp;
12
- /** The Copilot CLI log for a session, `<copilotHome>/session-state/<id>/events.jsonl`; null for an unsafe id or a missing file. */
12
+ /**
13
+ * The Copilot CLI log for a session, `<copilotHome>/session-state/<id>/events.jsonl`; null for an unsafe id or a
14
+ * missing file.
15
+ */
13
16
  export declare function copilotTranscriptFor(sessionId: string): string | null;
14
- /** True for VS Code's own chat log, `<workspaceStorage>/<id>/github.copilot-chat/transcripts/<session id>.jsonl`, in either slash and any case. */
17
+ /**
18
+ * True for VS Code's own chat log, `<workspaceStorage>/<id>/github.copilot-chat/transcripts/<session id>.jsonl`, in
19
+ * either slash and any case.
20
+ */
15
21
  export declare function isVscodeTranscript(file: string | null): boolean;
16
- /** The turn one Copilot event-log line carries: the text of a human user.message or of an assistant.message; null for any other line, a
22
+ /**
23
+ * The turn one Copilot event-log line carries: the text of a human user.message or of an assistant.message; null for
24
+ * any other line, a
17
25
  * sub-agent's included. */
18
26
  export declare function copilotTurn(line: CopilotEventLine): CopilotTurn | null;
19
27
  //# sourceMappingURL=copilot-transcript.d.ts.map
@@ -1,4 +1,5 @@
1
- // The Copilot event log: one `{type, data, id, timestamp, parentId}` object per line, written by the Copilot CLI and VS Code Local alike.
1
+ // The Copilot event log: one `{type, data, id, timestamp, parentId}` object per line, written by the Copilot CLI and VS
2
+ // Code Local alike.
2
3
  // Matched line by line, since the tail readers start mid-file and never see the session.start line.
3
4
  import * as fs from 'fs';
4
5
  import * as path from 'path';
@@ -6,21 +7,28 @@ import { copilotHomeDir } from '../hooks/shared.js';
6
7
  import { isObjectLike, isStringValue } from '../core/capture-contract.js';
7
8
  // A session id becomes a folder name, so anything beyond word characters and hyphens could climb out of session-state.
8
9
  export const SESSION_ID_RE = /^[\w-]+$/;
9
- // user.message sources that mark text hippo did not get from the human: a hidden skill injection or another agent's prompt.
10
+ // user.message sources that mark text hippo did not get from the human: a hidden skill injection or another agent's
11
+ // prompt.
10
12
  const INJECTED_SOURCE_PREFIXES = ['skill-', 'agent-'];
11
- /** The Copilot CLI log for a session, `<copilotHome>/session-state/<id>/events.jsonl`; null for an unsafe id or a missing file. */
13
+ /**
14
+ * The Copilot CLI log for a session, `<copilotHome>/session-state/<id>/events.jsonl`; null for an unsafe id or a
15
+ * missing file.
16
+ */
12
17
  export function copilotTranscriptFor(sessionId) {
13
18
  if (!SESSION_ID_RE.test(sessionId))
14
19
  return null;
15
20
  const file = path.join(copilotHomeDir(), 'session-state', sessionId, 'events.jsonl');
16
21
  return fs.existsSync(file) ? file : null;
17
22
  }
18
- /** True for VS Code's own chat log, `<workspaceStorage>/<id>/github.copilot-chat/transcripts/<session id>.jsonl`, in either slash and any case. */
23
+ /**
24
+ * True for VS Code's own chat log, `<workspaceStorage>/<id>/github.copilot-chat/transcripts/<session id>.jsonl`, in
25
+ * either slash and any case.
26
+ */
19
27
  export function isVscodeTranscript(file) {
20
28
  if (!file)
21
29
  return false;
22
30
  const parts = file.toLowerCase().split(/[\\/]/);
23
- return parts.length >= 3 && parts[parts.length - 2] === 'transcripts' && parts[parts.length - 3] === 'github.copilot-chat';
31
+ return (parts.length >= 3 && parts[parts.length - 2] === 'transcripts' && parts[parts.length - 3] === 'github.copilot-chat');
24
32
  }
25
33
  function isSubagentLine(line, data) {
26
34
  if (isStringValue(line.agentId) && line.agentId !== '')
@@ -33,7 +41,9 @@ function isInjectedUserMessage(data) {
33
41
  const source = data.source;
34
42
  return isStringValue(source) && INJECTED_SOURCE_PREFIXES.some((prefix) => source.startsWith(prefix));
35
43
  }
36
- /** The turn one Copilot event-log line carries: the text of a human user.message or of an assistant.message; null for any other line, a
44
+ /**
45
+ * The turn one Copilot event-log line carries: the text of a human user.message or of an assistant.message; null for
46
+ * any other line, a
37
47
  * sub-agent's included. */
38
48
  export function copilotTurn(line) {
39
49
  const role = line.type === 'user.message' ? 'user' : line.type === 'assistant.message' ? 'assistant' : null;
@@ -31,7 +31,8 @@ const BULLET = /^(?:[-*]|\d+\.)\s+(?:\[[ xX]\]\s+)?(.+)/;
31
31
  const LABEL = /^(?:decision|rule|error|bug|gotcha|important|critical|remember|plan):/i;
32
32
  const SENTENCE_END = /[.!?]["')\]]*$/;
33
33
  const SPEC_HEADING_PATTERNS = [
34
- /^#+\s*(?:features?|requirements?|specs?|specifications?|plan|design|architecture|interface|api|todo|tasks?|implementation|notes?)(?:\s|:|$)/i,
34
+ new RegExp(String.raw `^#+\s*(?:features?|requirements?|specs?|specifications?|plan|design|architecture|interface|api|todo|` +
35
+ String.raw `tasks?|implementation|notes?)(?:\s|:|$)`, 'i'),
35
36
  /^(?:features?|requirements?|specs?|specifications?|plan|design|tasks?|implementation)(?:\s*:|$)/i,
36
37
  ];
37
38
  // A list item may open a fence on its own line: "- ```".
@@ -43,7 +44,9 @@ const NO_BREAK = /(`+)[^`\n]+\1|\b(?:[Ee]\.g|[Ii]\.e|[Vv]s|[Cc]f)\.|\betc\.(?=\s
43
44
  function proseOnly(text) {
44
45
  let fence = null;
45
46
  let afterProse = false;
46
- return text.split('\n').map(line => {
47
+ return text
48
+ .split('\n')
49
+ .map((line) => {
47
50
  const trimmed = line.trimStart();
48
51
  if (fence !== null) {
49
52
  const close = trimmed.match(FENCE_CLOSE);
@@ -58,16 +61,21 @@ function proseOnly(text) {
58
61
  afterProse = false;
59
62
  return '';
60
63
  }
61
- // Quotes, table rows and indented code are not the speaker's own; indented code cannot interrupt a paragraph or list item.
64
+ // Quotes, table rows and indented code are not the speaker's
65
+ // own; indented code cannot interrupt a paragraph or list item.
62
66
  const dropped = /^\s*[>|]/.test(line) || (!afterProse && /^(?: {4}|\t)(?!\s*(?:[-*]|\d+\.)\s)/.test(line));
63
67
  afterProse = !dropped && trimmed !== '' && !/^#{1,6}(?:\s|$)/.test(trimmed);
64
68
  return dropped ? '' : line;
65
- }).join('\n');
69
+ })
70
+ .join('\n');
66
71
  }
67
72
  function masked(text) {
68
73
  return text.replace(NO_BREAK, span => 'x'.repeat(span.length));
69
74
  }
70
- /** A lowercase line continues the line above only when that line has not ended its sentence; "e.g." at a line end has not. */
75
+ /**
76
+ * A lowercase line continues the line above only when that line
77
+ * has not ended its sentence; "e.g." at a line end has not.
78
+ */
71
79
  function continues(line, previous) {
72
80
  if (previous === undefined || !/^[a-z]/.test(line) || LABEL.test(line))
73
81
  return false;
@@ -110,8 +118,10 @@ function extractFromPatterns(sentence, patterns, category) {
110
118
  if (!keyed)
111
119
  return null;
112
120
  const content = sentence
113
- .replace(/^(?:decision|plan|rule|important|critical|remember|error|bug|gotcha|watch out|careful|warning|caveat|trap|don't forget|easy to miss):\s*/i, '')
114
- .replace(/[.!?\s]+$/, '').trim();
121
+ .replace(new RegExp(String.raw `^(?:decision|plan|rule|important|critical|remember|error|bug|gotcha|watch out|careful|warning|` +
122
+ String.raw `caveat|trap|don't forget|easy to miss):\s*`, 'i'), '')
123
+ .replace(/[.!?\s]+$/, '')
124
+ .trim();
115
125
  return content.length <= MAX_CHARS ? { content, category, tags: [category, 'captured'] } : null;
116
126
  }
117
127
  function extractSpecSections(text) {
@@ -162,7 +172,9 @@ function extractOne(text) {
162
172
  * The first `userTexts` texts are a person's own words; on a repeat their copy wins, so it keeps `fromUser`. */
163
173
  export function extractFromTexts(texts, userTexts = 0) {
164
174
  const seen = new Set();
165
- return texts.flatMap((text, i) => extractOne(text).map((item) => (i < userTexts ? { ...item, fromUser: true } : item))).filter((item) => {
175
+ return texts
176
+ .flatMap((text, i) => extractOne(text).map((item) => (i < userTexts ? { ...item, fromUser: true } : item)))
177
+ .filter((item) => {
166
178
  const key = duplicateKey(item.content);
167
179
  if (seen.has(key) || !assessAutomaticMemory(item.content).accepted)
168
180
  return false;
@@ -1,14 +1,18 @@
1
- // PostToolUseFailure for a caller on another machine: the lesson and its log row carry the caller's owner and project, and a retried
2
- // request id gets the first answer.
1
+ // PostToolUseFailure for a caller on another machine: the lesson and its log row carry the caller's owner and
2
+ // project, and a retried request id gets the first answer.
3
3
  import { BadRequestError } from '../core/api-errors.js';
4
4
  import { storeLesson } from './capture-error.js';
5
5
  import { recordFailureAt, requestOutcomeAt, settleFailureOutcomeAt } from '../store/failure-log-at.js';
6
- import { errorMessage, log } from '../util/log.js';
6
+ import { errorMessage, log, errorFields } from '../util/log.js';
7
7
  import { scrubForSharing } from './share-scrub.js';
8
8
  import { truncateCodePointSafe } from '../util/transcript-tail.js';
9
9
  import { assertRequestId, bindCaller } from './caller-session.js';
10
10
  import { FAILURE_TEXT_MAX_CHARS, failureHash } from './failure-reading.js';
11
- const SKIPS = { 'skipped-interrupt': true, 'skipped-routine': true, 'skipped-invalid': true };
11
+ const SKIPS = {
12
+ 'skipped-interrupt': true,
13
+ 'skipped-routine': true,
14
+ 'skipped-invalid': true,
15
+ };
12
16
  const ROUTINE_RULES = {
13
17
  declined: true,
14
18
  'os-permission': true,
@@ -16,26 +20,32 @@ const ROUTINE_RULES = {
16
20
  'search-tool': true,
17
21
  'quiet-exit': true,
18
22
  };
19
- /** The shapes lessonFromFailure gives: text for a lesson or a routine skip, none for an interrupt or an unreadable payload, a rule only on a routine skip. */
23
+ /** The shapes lessonFromFailure gives: text for a lesson or a routine skip, none for an interrupt or an unreadable
24
+ * payload, a rule only on a routine skip. */
20
25
  function checkedFailure(req) {
21
26
  assertRequestId(req.requestId);
22
- if (req.detailHash !== null && !/^[0-9a-f]{16}$/.test(req.detailHash))
27
+ if (req.detailHash !== null && !/^[0-9a-f]{16}$/.test(req.detailHash)) {
23
28
  throw new BadRequestError('detail hash: 16 lowercase hex characters or null');
29
+ }
24
30
  const { skip, text, rule } = req;
25
- if (skip !== null && !Object.hasOwn(SKIPS, skip))
31
+ if (skip !== null && !Object.hasOwn(SKIPS, skip)) {
26
32
  throw new BadRequestError('skip: skipped-interrupt, skipped-routine, skipped-invalid or null');
33
+ }
27
34
  if ((skip === 'skipped-routine') !== (rule !== null) || (rule !== null && !Object.hasOwn(ROUTINE_RULES, rule))) {
28
35
  throw new BadRequestError('rule: a routine rule on skipped-routine, else null');
29
36
  }
30
37
  if (text === null || text.trim() === '') {
31
- if (skip === null || skip === 'skipped-routine')
38
+ if (skip === null || skip === 'skipped-routine') {
32
39
  throw new BadRequestError('text: required for a lesson or a routine skip');
40
+ }
33
41
  return { skip, text: null };
34
42
  }
35
- if (skip === 'skipped-interrupt' || skip === 'skipped-invalid')
43
+ if (skip === 'skipped-interrupt' || skip === 'skipped-invalid') {
36
44
  throw new BadRequestError('text: null for an interrupt or an unreadable failure');
37
- if (text.length > FAILURE_TEXT_MAX_CHARS)
45
+ }
46
+ if (text.length > FAILURE_TEXT_MAX_CHARS) {
38
47
  throw new BadRequestError(`text: at most ${FAILURE_TEXT_MAX_CHARS} characters`);
48
+ }
39
49
  // Scrubbed again, as the caller's scrub is not trusted, and cut after it, as a mask can be longer than what it hides.
40
50
  return { skip, text: truncateCodePointSafe(scrubForSharing(text), FAILURE_TEXT_MAX_CHARS) };
41
51
  }
@@ -43,7 +53,8 @@ export function captureFailureForCaller(ctx, req) {
43
53
  const failure = checkedFailure(req);
44
54
  const key = bindCaller(ctx, req.sessionId, req.project);
45
55
  const earlier = requestOutcomeAt(ctx.hippoRoot, ctx.tenantId, req.requestId, req.sessionId);
46
- // A retry after a lost reply gets the first answer and writes nothing; one whose store failed tries the store again.
56
+ // A retry after a lost reply gets the first answer and writes
57
+ // nothing; one whose store failed tries the store again.
47
58
  if (earlier !== null && earlier !== 'store-failed')
48
59
  return { outcome: earlier };
49
60
  let logged = 'store-failed';
@@ -73,7 +84,7 @@ function logOutcome(ctx, req, key, outcome, retried) {
73
84
  });
74
85
  }
75
86
  catch (err) {
76
- log.warn(`capture-error: failure not logged: ${errorMessage(err)}`);
87
+ log.warn(`capture-error: failure not logged: ${errorMessage(err)}`, errorFields(err));
77
88
  }
78
89
  }
79
90
  //# sourceMappingURL=failure-caller.js.map
@@ -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;