hippo-memory 1.68.0 → 1.70.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 (864) hide show
  1. package/README.md +6 -3
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -2,23 +2,23 @@
2
2
  import { createHash } from 'crypto';
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
- import { collectSessionTurns } from './capture/transcript.js';
6
- import { isObjectLike, isStringValue } from './capture-contract.js';
5
+ import { collectSessionTurns } from './transcript.js';
6
+ import { isObjectLike, isStringValue } from '../core/capture-contract.js';
7
7
  import { PATCH_SUCCESS_LINE, patchPaths, shellPatch } from './codex-patch.js';
8
- import { loadConfig } from './config.js';
9
- import { USER_SEGMENT } from './home-path.js';
10
- import { errorMessage } from './log.js';
11
- import { createMemory, Layer } from './memory.js';
12
- import { RejectedValueError } from './rejection.js';
13
- import { maskEmails, redactSecretsStrict } from './secret-detect.js';
14
- import { isInitialized } from './store/open.js';
15
- import { writeEntry } from './store/entry-writes.js';
16
- import { loadAllEntries } from './store/entry-reads.js';
17
- import { SNAPSHOT_AMBIENT_MAX_AGE_MS } from './store/sessions.js';
18
- import { loadLatestHandoff } from './store/handoffs.js';
19
- import { isSyntheticMessage } from './token-ledger.js';
20
- import { readTranscriptTail } from './transcript-tail.js';
21
- export const SESSION_DIGEST_TAG = 'session-digest';
8
+ import { loadConfig } from '../core/config.js';
9
+ import { USER_SEGMENT } from '../util/home-path.js';
10
+ import { errorMessage } from '../util/log.js';
11
+ import { SESSION_DIGEST_TAG } from '../core/session-digest-row.js';
12
+ import { createMemory, Layer } from '../core/memory.js';
13
+ import { RejectedValueError } from '../store/rejection.js';
14
+ import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
15
+ import { isInitialized } from '../store/open.js';
16
+ import { writeEntry } from '../store/entry-writes.js';
17
+ import { loadLiveContentsBySourceAndTag } from '../store/entry-reads.js';
18
+ import { SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessions.js';
19
+ import { loadLatestHandoff } from '../store/handoffs.js';
20
+ import { isSyntheticMessage } from '../store/token-ledger.js';
21
+ import { readTranscriptTail } from '../util/transcript-tail.js';
22
22
  /** Five-word runs are stock phrases; six in a row is a copied clause. */
23
23
  export const ECHO_WINDOW = 6;
24
24
  /** Five sentences of about 150 chars leave room for the Changed line inside the total cap. */
@@ -430,19 +430,13 @@ export function buildSessionDigest(sources) {
430
430
  return content ? { content, sentences: kept.length, files: files.length } : null;
431
431
  }
432
432
  }
433
- /** Facts extracted from a digest and DAG summaries over one inherit its tag, but they are not the digest itself. */
434
- export function isSessionDigestRow(entry) {
435
- return entry.source === SESSION_DIGEST_TAG && entry.tags.includes(SESSION_DIGEST_TAG) && !entry.extracted_from;
436
- }
437
433
  /** Same session, same row: a second worker for one session updates the digest instead of adding one. */
438
434
  export function sessionDigestId(tenantId, key) {
439
435
  return `mem_${createHash('sha256').update(`${SESSION_DIGEST_TAG}\n${tenantId}\n${key}`).digest('hex').slice(0, 12)}`;
440
436
  }
441
437
  /** 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. */
442
438
  function injectedTexts(hippoRoot, opts) {
443
- const digests = loadAllEntries(hippoRoot, opts.tenantId)
444
- .filter((e) => isSessionDigestRow(e) && !e.superseded_by && e.source_session_id !== opts.key)
445
- .map((e) => e.content);
439
+ const digests = loadLiveContentsBySourceAndTag(hippoRoot, opts.tenantId, SESSION_DIGEST_TAG, SESSION_DIGEST_TAG, opts.key);
446
440
  const handoff = loadLatestHandoff(hippoRoot, opts.tenantId, undefined, {
447
441
  unfinishedOnly: true,
448
442
  maxAgeMs: SNAPSHOT_AMBIENT_MAX_AGE_MS,
@@ -1,6 +1,6 @@
1
1
  import type { Context } from '../api/types.js';
2
- import type { HandoffEvidence } from '../handoff.js';
3
- import type { CallerProject } from '../prompt-hook.js';
2
+ import type { HandoffEvidence } from '../core/handoff.js';
3
+ import type { CallerProject } from '../api/prompt-hook.js';
4
4
  import type { WorkingState } from './working-state.js';
5
5
  export type CallerEvidence = Pick<HandoffEvidence, 'gitRef' | 'dirtyTree' | 'testStatus'>;
6
6
  export interface CallerSessionEndRequest {
@@ -1,5 +1,5 @@
1
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.
2
- import { BadRequestError } from '../api-errors.js';
2
+ import { BadRequestError } from '../core/api-errors.js';
3
3
  import { writeSessionEndHandoff } from '../store/handoffs.js';
4
4
  import { closeTaskSnapshotsForSession } from '../store/sessions.js';
5
5
  import { bindCaller, checkedWorkingState } from './caller-session.js';
@@ -1,5 +1,5 @@
1
1
  import type { Context } from '../api/types.js';
2
- import { type CallerProject } from '../prompt-hook.js';
2
+ import { type CallerProject } from '../api/prompt-hook.js';
3
3
  import { type CaptureTally } from './command.js';
4
4
  export interface SessionCaptureRequest {
5
5
  readonly sessionId: string;
@@ -1,9 +1,9 @@
1
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.
2
- import { BadRequestError } from '../api-errors.js';
3
- import { assertCallerIds } from '../prompt-hook.js';
4
- import { assertCallerProject, projectNames } from '../project-identity.js';
5
- import { longestWord, storedTextKeys } from '../same-text.js';
6
- import { scrubForSharing } from '../share-scrub.js';
2
+ import { BadRequestError } from '../core/api-errors.js';
3
+ import { assertCallerIds } from '../api/prompt-hook.js';
4
+ import { assertCallerProject, projectNames } from '../core/project-identity.js';
5
+ import { longestWord, storedTextKeys } from '../util/same-text.js';
6
+ import { scrubForSharing } from './share-scrub.js';
7
7
  import { loadTextsHoldingWords } from '../store/candidates.js';
8
8
  import { captureExtractedItems } from './command.js';
9
9
  import { extractFromTexts } from './extract.js';
@@ -0,0 +1,13 @@
1
+ import type { SessionTurn } from './transcript.js';
2
+ /** A turn close runs after each reply; a full close runs once, when the session ends. */
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. */
5
+ export declare function runSessionWorker(sessionId: string | null, mode: WorkerMode, work: (mode: WorkerMode) => Promise<void>): Promise<void>;
6
+ /** The cursor position after `turns`: how many there were and a hash of the last. */
7
+ export declare function turnPosition(turns: readonly SessionTurn[]): string;
8
+ /** The turns after `position`; all of them when it is null or its last turn is no longer in view. */
9
+ 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
+ export declare function loadTurnPosition(sessionId: string, transcriptPath: string): string | null;
12
+ export declare function saveTurnPosition(sessionId: string, transcriptPath: string, turns: readonly SessionTurn[], log: (message: string) => void): void;
13
+ //# sourceMappingURL=session-worker.d.ts.map
@@ -0,0 +1,196 @@
1
+ // One session-end worker per session at a time, plus how far turn capture has read that session's transcript.
2
+ // Two fast replies would otherwise start two workers that both read the dedupe keys before either writes.
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import { createHash } from 'node:crypto';
6
+ import { homeDir } from '../hooks/shared.js';
7
+ import { errorMessage, log as logger } from '../util/log.js';
8
+ import { isObjectLike, isStringValue } from '../core/capture-contract.js';
9
+ import { SESSION_ID_RE } from './copilot-transcript.js';
10
+ import { FINGERPRINT_HEX_CHARS } from '../util/token-text.js';
11
+ /** Null for a missing id or one that could climb out of the sessions folder. */
12
+ function sessionStateFiles(sessionId) {
13
+ if (sessionId === null || !SESSION_ID_RE.test(sessionId))
14
+ return null;
15
+ const base = path.join(homeDir(), '.hippo', 'sessions', sessionId);
16
+ return { lock: `${base}.lock`, queued: `${base}.queued`, cursor: `${base}.cursor.json` };
17
+ }
18
+ function pidAlive(pid) {
19
+ try {
20
+ process.kill(pid, 0);
21
+ return true;
22
+ }
23
+ catch (err) {
24
+ // EPERM means the process exists but belongs to someone else.
25
+ return err instanceof Error && 'code' in err && err.code === 'EPERM';
26
+ }
27
+ }
28
+ /** 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. */
29
+ const STALE_LOCK_MS = 15 * 60 * 1000;
30
+ /** A dead holder frees its session at once, and any holder at STALE_LOCK_MS. */
31
+ function holderAlive(lock) {
32
+ let text;
33
+ let mtimeMs;
34
+ try {
35
+ text = fs.readFileSync(lock, 'utf8');
36
+ mtimeMs = fs.statSync(lock).mtimeMs;
37
+ }
38
+ catch (err) {
39
+ // Gone means released; any other read error is taken as held, so two workers never run on a guess.
40
+ return !(err instanceof Error && 'code' in err && err.code === 'ENOENT');
41
+ }
42
+ const held = /^(\d+):(\d+)$/.exec(text.trim());
43
+ if (Date.now() - (held ? Number(held[2]) : mtimeMs) > STALE_LOCK_MS)
44
+ return false;
45
+ // Empty or torn: its taker is between the create and the write, so it is held.
46
+ if (!held)
47
+ return true;
48
+ const pid = Number(held[1]);
49
+ return pid !== process.pid && pidAlive(pid);
50
+ }
51
+ // 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.
52
+ function takeSessionLock(lock) {
53
+ for (let attempt = 0; attempt < 2; attempt++) {
54
+ try {
55
+ fs.writeFileSync(lock, `${process.pid}:${Date.now()}`, { flag: 'wx' });
56
+ return 'taken';
57
+ }
58
+ catch (err) {
59
+ if (!(err instanceof Error && 'code' in err && err.code === 'EEXIST'))
60
+ return 'unusable';
61
+ if (holderAlive(lock))
62
+ return 'held';
63
+ }
64
+ try {
65
+ fs.rmSync(lock, { force: true });
66
+ }
67
+ catch {
68
+ return 'unusable';
69
+ }
70
+ }
71
+ return 'held';
72
+ }
73
+ function releaseSessionLock(lock) {
74
+ try {
75
+ fs.rmSync(lock, { force: true });
76
+ }
77
+ catch (err) {
78
+ // A lock left behind names this pid, which is dead once the worker exits, so the next taker clears it.
79
+ logger.debug(`session lock not removed: ${errorMessage(err)}`);
80
+ }
81
+ }
82
+ /** False when the sessions folder cannot be written, so the caller runs unlocked as before. */
83
+ function queueRun(files, mode) {
84
+ try {
85
+ fs.mkdirSync(path.dirname(files.queued), { recursive: true });
86
+ // A full close outranks a turn close: it overwrites a queued turn, and a turn never replaces a queued full close.
87
+ if (mode === 'full')
88
+ fs.writeFileSync(files.queued, 'full');
89
+ else
90
+ fs.writeFileSync(files.queued, 'turn', { flag: 'wx' });
91
+ return true;
92
+ }
93
+ catch (err) {
94
+ return err instanceof Error && 'code' in err && err.code === 'EEXIST';
95
+ }
96
+ }
97
+ /** Takes the queued request by renaming it, so one queued while this reads it lands in a fresh file. */
98
+ function takeQueued(queued) {
99
+ const taken = `${queued}.${process.pid}`;
100
+ try {
101
+ fs.renameSync(queued, taken);
102
+ }
103
+ catch {
104
+ // Nothing queued, or a rename refused for a moment; the request stays queued for the next round.
105
+ return null;
106
+ }
107
+ try {
108
+ return fs.readFileSync(taken, 'utf8') === 'full' ? 'full' : 'turn';
109
+ }
110
+ finally {
111
+ fs.rmSync(taken, { force: true });
112
+ }
113
+ }
114
+ /** Runs `work` unless a live worker holds this session, which then runs the request after its own so the last reply is never dropped. */
115
+ export async function runSessionWorker(sessionId, mode, work) {
116
+ const files = sessionStateFiles(sessionId);
117
+ if (files === null || !queueRun(files, mode))
118
+ return work(mode);
119
+ for (let take = takeSessionLock(files.lock); take !== 'held'; take = takeSessionLock(files.lock)) {
120
+ if (take === 'unusable')
121
+ return work(mode);
122
+ let ran = false;
123
+ try {
124
+ for (let next = takeQueued(files.queued); next !== null; next = takeQueued(files.queued)) {
125
+ ran = true;
126
+ await work(next);
127
+ }
128
+ }
129
+ finally {
130
+ releaseSessionLock(files.lock);
131
+ }
132
+ // A request queued after the last take found the lock still held and left, so it runs here.
133
+ if (!ran || !fs.existsSync(files.queued))
134
+ return;
135
+ }
136
+ }
137
+ function turnKey(turn) {
138
+ return createHash('sha256').update(`${turn.role}\n${turn.text}`).digest('hex').slice(0, FINGERPRINT_HEX_CHARS);
139
+ }
140
+ /** The cursor position after `turns`: how many there were and a hash of the last. */
141
+ export function turnPosition(turns) {
142
+ return turns.length === 0 ? '0:' : `${turns.length}:${turnKey(turns[turns.length - 1])}`;
143
+ }
144
+ /** The turns after `position`; all of them when it is null or its last turn is no longer in view. */
145
+ export function turnsAfter(turns, position) {
146
+ if (position === null)
147
+ return turns;
148
+ const [countText, key] = position.split(':');
149
+ const count = Number(countText);
150
+ if (!Number.isInteger(count) || count <= 0)
151
+ return turns;
152
+ if (count <= turns.length && turnKey(turns[count - 1]) === key)
153
+ return turns.slice(count);
154
+ // 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.
155
+ for (let i = turns.length - 1; i >= 0; i--) {
156
+ if (turnKey(turns[i]) === key)
157
+ return turns.slice(i + 1);
158
+ }
159
+ return turns;
160
+ }
161
+ /** The saved position for this session's transcript; null when none was saved, it names another file, or it is unreadable. */
162
+ export function loadTurnPosition(sessionId, transcriptPath) {
163
+ const file = sessionStateFiles(sessionId)?.cursor;
164
+ if (!file || !fs.existsSync(file))
165
+ return null;
166
+ try {
167
+ const cursor = JSON.parse(fs.readFileSync(file, 'utf8'));
168
+ if (!isObjectLike(cursor) || !('source' in cursor) || cursor.source !== transcriptPath)
169
+ return null;
170
+ return 'position' in cursor && isStringValue(cursor.position) ? cursor.position : null;
171
+ }
172
+ catch {
173
+ // A torn cursor means the next capture reads every turn, which the dedupe keys absorb.
174
+ return null;
175
+ }
176
+ }
177
+ // SHORTCUT: one small cursor file per chat is never pruned; prune by age at sleep if the folder grows.
178
+ export function saveTurnPosition(sessionId, transcriptPath, turns, log) {
179
+ const file = sessionStateFiles(sessionId)?.cursor;
180
+ if (!file)
181
+ return;
182
+ const cursor = {
183
+ runtime: 'vscode', sessionId, source: transcriptPath, position: turnPosition(turns), updatedAt: new Date().toISOString(),
184
+ };
185
+ const tmp = `${file}.${process.pid}.tmp`;
186
+ try {
187
+ fs.mkdirSync(path.dirname(file), { recursive: true });
188
+ fs.writeFileSync(tmp, JSON.stringify(cursor));
189
+ fs.renameSync(tmp, file);
190
+ }
191
+ catch (err) {
192
+ // Windows refuses the rename (EPERM) while another process has the cursor open; the next reply re-reads these turns, which the dedupe keys absorb.
193
+ log(`cursor not saved: ${errorMessage(err)}`);
194
+ }
195
+ }
196
+ //# sourceMappingURL=session-worker.js.map
@@ -1,6 +1,6 @@
1
1
  // The scrub for transcript text that leaves the machine it was typed on.
2
- import { maskHomePaths } from './home-path.js';
3
- import { maskEmails, redactSecretsStrict } from './secret-detect.js';
2
+ import { maskHomePaths } from '../util/home-path.js';
3
+ import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
4
4
  /** Secrets first, then emails, then home paths: a home-path mask could split a secret so that no pattern matches it. */
5
5
  export function scrubForSharing(text) {
6
6
  return maskHomePaths(maskEmails(redactSecretsStrict(text)));
@@ -1,9 +1,11 @@
1
- import { envHomeDir, processEnv } from '../env.js';
1
+ import { envHomeDir, processEnv } from '../util/env.js';
2
2
  import { claudeConfigDir } from '../hooks/shared.js';
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
- import { isObjectLike, isStringValue } from '../capture-contract.js';
5
+ import { isObjectLike, isStringValue, readSessionEnd } from '../core/capture-contract.js';
6
6
  import { copilotTurn } from './copilot-transcript.js';
7
+ const RECENT_USER_TURNS = 20;
8
+ const RECENT_ASSISTANT_TURNS = 10;
7
9
  /**
8
10
  * Build a compact text summary from a Claude Code / OpenCode / Copilot JSONL transcript.
9
11
  * Keeps plain user messages and the final chunk of assistant text, drops
@@ -54,69 +56,69 @@ export function collectSessionTurns(jsonl, visit) {
54
56
  if (!isObjectLike(entry) || !('type' in entry))
55
57
  continue;
56
58
  visit?.(entry);
57
- const copilot = copilotTurn(entry);
58
- if (copilot !== null) {
59
- turns.push(copilot);
60
- continue;
61
- }
62
- if (entry.type === 'user' || entry.type === 'assistant') {
63
- const message = 'message' in entry && isObjectLike(entry.message) ? entry.message : undefined;
64
- if (!message)
65
- continue;
66
- const content = 'content' in message ? message.content : undefined;
67
- if (entry.type === 'user') {
68
- const text = humanUserText(entry, message);
69
- if (text)
70
- turns.push({ role: 'user', text });
71
- }
72
- else if (Array.isArray(content)) {
73
- // Keep assistant text blocks; drop thinking + tool_use
74
- const chunks = [];
75
- for (const block of content) {
76
- if (isObjectLike(block)) {
77
- const blockText = 'type' in block && block.type === 'text' && 'text' in block ? block.text : undefined;
78
- if (isStringValue(blockText) && blockText.trim()) {
79
- chunks.push(blockText.trim());
80
- }
81
- }
82
- }
83
- if (chunks.length > 0) {
84
- turns.push({ role: 'assistant', text: chunks.join('\n') });
85
- }
59
+ const turn = copilotTurn(entry) ?? claudeCodeTurn(entry) ?? codexTurn(entry);
60
+ if (turn !== null)
61
+ turns.push(turn);
62
+ }
63
+ return turns;
64
+ }
65
+ /** The turn a Claude Code `user` or `assistant` line carries; null for any other line or one with no human or reply text. */
66
+ function claudeCodeTurn(entry) {
67
+ if (entry.type !== 'user' && entry.type !== 'assistant')
68
+ return null;
69
+ const message = 'message' in entry && isObjectLike(entry.message) ? entry.message : undefined;
70
+ if (!message)
71
+ return null;
72
+ const content = 'content' in message ? message.content : undefined;
73
+ if (entry.type === 'user') {
74
+ const text = humanUserText(entry, message);
75
+ return text ? { role: 'user', text } : null;
76
+ }
77
+ if (!Array.isArray(content))
78
+ return null;
79
+ // Keep assistant text blocks; drop thinking + tool_use
80
+ const chunks = [];
81
+ for (const block of content) {
82
+ if (isObjectLike(block)) {
83
+ const blockText = 'type' in block && block.type === 'text' && 'text' in block ? block.text : undefined;
84
+ if (isStringValue(blockText) && blockText.trim()) {
85
+ chunks.push(blockText.trim());
86
86
  }
87
+ }
88
+ }
89
+ return chunks.length > 0 ? { role: 'assistant', text: chunks.join('\n') } : null;
90
+ }
91
+ // Codex rollout transcript shape: response_item -> payload.message
92
+ function codexTurn(entry) {
93
+ if (entry.type !== 'response_item')
94
+ return null;
95
+ const payload = 'payload' in entry && isObjectLike(entry.payload) ? entry.payload : undefined;
96
+ if (!payload || !('type' in payload) || payload.type !== 'message')
97
+ return null;
98
+ const role = 'role' in payload ? payload.role : undefined;
99
+ const content = 'content' in payload ? payload.content : undefined;
100
+ if (!Array.isArray(content))
101
+ return null;
102
+ const chunks = [];
103
+ for (const block of content) {
104
+ if (!isObjectLike(block))
87
105
  continue;
106
+ const blockType = 'type' in block ? block.type : undefined;
107
+ const blockText = 'text' in block ? block.text : undefined;
108
+ if (role === 'user' && blockType === 'input_text' && isStringValue(blockText) && blockText.trim()) {
109
+ chunks.push(blockText.trim());
88
110
  }
89
- // Codex rollout transcript shape: response_item -> payload.message
90
- if (entry.type === 'response_item') {
91
- const payload = 'payload' in entry && isObjectLike(entry.payload) ? entry.payload : undefined;
92
- if (!payload || !('type' in payload) || payload.type !== 'message')
93
- continue;
94
- const role = 'role' in payload ? payload.role : undefined;
95
- const content = 'content' in payload ? payload.content : undefined;
96
- if (!Array.isArray(content))
97
- continue;
98
- const chunks = [];
99
- for (const block of content) {
100
- if (!isObjectLike(block))
101
- continue;
102
- const blockType = 'type' in block ? block.type : undefined;
103
- const blockText = 'text' in block ? block.text : undefined;
104
- if (role === 'user' && blockType === 'input_text' && isStringValue(blockText) && blockText.trim()) {
105
- chunks.push(blockText.trim());
106
- }
107
- if (role === 'assistant' && blockType === 'output_text' && isStringValue(blockText) && blockText.trim()) {
108
- chunks.push(blockText.trim());
109
- }
110
- }
111
- if (chunks.length === 0)
112
- continue;
113
- if (role === 'user')
114
- turns.push({ role: 'user', text: chunks.join('\n') });
115
- if (role === 'assistant')
116
- turns.push({ role: 'assistant', text: chunks.join('\n') });
111
+ if (role === 'assistant' && blockType === 'output_text' && isStringValue(blockText) && blockText.trim()) {
112
+ chunks.push(blockText.trim());
117
113
  }
118
114
  }
119
- return turns;
115
+ if (chunks.length === 0)
116
+ return null;
117
+ if (role === 'user')
118
+ return { role: 'user', text: chunks.join('\n') };
119
+ if (role === 'assistant')
120
+ return { role: 'assistant', text: chunks.join('\n') };
121
+ return null;
120
122
  }
121
123
  export function summariseTranscript(jsonl) {
122
124
  return summariseSessionTurns(collectSessionTurns(jsonl));
@@ -124,8 +126,8 @@ export function summariseTranscript(jsonl) {
124
126
  /** The last 20 user turns and last 10 replies: session-end is about what was decided near the end, not at the start. */
125
127
  export function sessionTail(turns) {
126
128
  return {
127
- users: turns.filter((t) => t.role === 'user').map((t) => t.text).slice(-20),
128
- assistants: turns.filter((t) => t.role === 'assistant').map((t) => t.text).slice(-10),
129
+ users: turns.filter((t) => t.role === 'user').map((t) => t.text).slice(-RECENT_USER_TURNS),
130
+ assistants: turns.filter((t) => t.role === 'assistant').map((t) => t.text).slice(-RECENT_ASSISTANT_TURNS),
129
131
  };
130
132
  }
131
133
  export function summariseSessionTurns(turns) {
@@ -157,18 +159,10 @@ export function resolveLastSessionTranscript(explicit, stdinText, opts) {
157
159
  if (explicit)
158
160
  return fs.existsSync(explicit) ? explicit : null;
159
161
  if (stdinText && stdinText.trim() !== '') {
160
- try {
161
- const payload = JSON.parse(stdinText);
162
- if (isObjectLike(payload) && 'transcript_path' in payload) {
163
- const tp = payload.transcript_path;
164
- if (isStringValue(tp) && fs.existsSync(tp))
165
- return tp;
166
- }
167
- }
168
- catch {
169
- // not JSON, but still a payload, so no scan
170
- }
171
- return null;
162
+ const receipt = readSessionEnd(stdinText, false);
163
+ // A refused payload is still a payload, so no scan.
164
+ const tp = receipt.status === 'received' ? receipt.input.transcriptPath : null;
165
+ return tp !== null && fs.existsSync(tp) ? tp : null;
172
166
  }
173
167
  if (!opts.mayScan)
174
168
  return null;
@@ -1,7 +1,4 @@
1
1
  import type { TaskSnapshot } from '../store/rows.js';
2
- export declare const PRE_COMPACT_TASK_CAP = 200;
3
- export declare const PRE_COMPACT_SUMMARY_CAP = 2000;
4
- export declare const PRE_COMPACT_NEXT_STEP_CAP = 500;
5
2
  /** The longest each field of {@link transcriptWorkingState} can be, so a check of a sent working state imports these instead of copying them. */
6
3
  export declare const WORKING_STATE_CAPS: {
7
4
  readonly task: 200;
@@ -1,14 +1,14 @@
1
1
  // A session's working state read from its transcript tail, with no store in the imports, so a hook with no store can derive it.
2
2
  import * as fs from 'fs';
3
- import { maskEmails, redactSecretsStrict } from '../secret-detect.js';
4
- import { isObjectLike, isStringValue } from '../capture-contract.js';
5
- import { errorMessage } from '../log.js';
6
- import { PRE_COMPACT_TAIL_BYTES, readTranscriptTail, truncateCodePointSafe } from '../transcript-tail.js';
3
+ import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
4
+ import { isObjectLike, isStringValue } from '../core/capture-contract.js';
5
+ import { errorMessage } from '../util/log.js';
6
+ import { PRE_COMPACT_TAIL_BYTES, readTranscriptTail, truncateCodePointSafe } from '../util/transcript-tail.js';
7
7
  import { humanUserText, summariseTranscript } from './transcript.js';
8
8
  import { copilotTurn } from './copilot-transcript.js';
9
- export const PRE_COMPACT_TASK_CAP = 200;
10
- export const PRE_COMPACT_SUMMARY_CAP = 2000;
11
- export const PRE_COMPACT_NEXT_STEP_CAP = 500;
9
+ const PRE_COMPACT_TASK_CAP = 200;
10
+ const PRE_COMPACT_SUMMARY_CAP = 2000;
11
+ const PRE_COMPACT_NEXT_STEP_CAP = 500;
12
12
  const TRIM_MARKER = '[...earlier turns trimmed]\n';
13
13
  /** The longest each field of {@link transcriptWorkingState} can be, so a check of a sent working state imports these instead of copying them. */
14
14
  export const WORKING_STATE_CAPS = {
@@ -23,7 +23,6 @@
23
23
  * - The audit_prune row itself is NEVER pruned by the same call (it's
24
24
  * written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
25
25
  */
26
- import type { DatabaseSyncLike } from './db.js';
27
26
  export interface PruneAuditOpts {
28
27
  /** Cutoff in days. Rows with `ts < (now - N days)` are deleted. */
29
28
  olderThanDays: number;
@@ -53,7 +52,7 @@ export declare function computeCutoff(days: number, now?: Date): string;
53
52
  *
54
53
  * Throws on invalid inputs (non-positive days, missing tenantId).
55
54
  */
56
- export declare function pruneAuditLog(db: DatabaseSyncLike, opts: PruneAuditOpts): PruneAuditResult;
55
+ export declare function pruneAuditLog(hippoRoot: string, opts: PruneAuditOpts): PruneAuditResult;
57
56
  /**
58
57
  * Parse the `--older-than <value>` flag. Accepts either bare integer days
59
58
  * (`30`) or integer with `d` suffix (`30d`). Throws on invalid format.
@@ -23,13 +23,14 @@
23
23
  * - The audit_prune row itself is NEVER pruned by the same call (it's
24
24
  * written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
25
25
  */
26
- import { appendAuditEvent } from './audit.js';
26
+ import { pruneAuditRows } from '../store/audit.js';
27
+ import { DAY_MS } from '../util/time.js';
27
28
  /**
28
29
  * Compute the cutoff ISO timestamp for an N-days-ago cutoff. Exported for
29
30
  * testability so tests can pin "now" without mocking Date.
30
31
  */
31
32
  export function computeCutoff(days, now = new Date()) {
32
- const cutoff = new Date(now.getTime() - days * 24 * 60 * 60 * 1000);
33
+ const cutoff = new Date(now.getTime() - days * DAY_MS);
33
34
  return cutoff.toISOString();
34
35
  }
35
36
  function isTenantIdString(value) {
@@ -41,7 +42,7 @@ function isTenantIdString(value) {
41
42
  *
42
43
  * Throws on invalid inputs (non-positive days, missing tenantId).
43
44
  */
44
- export function pruneAuditLog(db, opts) {
45
+ export function pruneAuditLog(hippoRoot, opts) {
45
46
  if (!Number.isFinite(opts.olderThanDays) || opts.olderThanDays <= 0) {
46
47
  throw new Error(`pruneAuditLog: olderThanDays must be a positive number, got ${opts.olderThanDays}`);
47
48
  }
@@ -51,42 +52,7 @@ export function pruneAuditLog(db, opts) {
51
52
  const dryRun = opts.dryRun === true;
52
53
  const actor = opts.actor ?? 'cli';
53
54
  const cutoff = computeCutoff(opts.olderThanDays);
54
- let count = 0;
55
- if (dryRun) {
56
- // Dry-run: just count, no DELETE.
57
- // SAFETY: row comes from `SELECT COUNT(*) AS c` above; COUNT(*) always
58
- // yields exactly one row with a numeric `c` column (number or bigint
59
- // depending on the node:sqlite driver's integer handling).
60
- const row = db
61
- .prepare(`SELECT COUNT(*) AS c FROM audit_log WHERE tenant_id = ? AND ts < ?`)
62
- .get(opts.tenantId, cutoff);
63
- count = Number(row.c);
64
- }
65
- else {
66
- db.exec('BEGIN IMMEDIATE');
67
- try {
68
- const result = db
69
- .prepare(`DELETE FROM audit_log WHERE tenant_id = ? AND ts < ?`)
70
- .run(opts.tenantId, cutoff);
71
- count = Number(result.changes ?? 0);
72
- // Record the prune itself in the audit trail. This row has ts = now,
73
- // so it's not eligible for the cutoff that was just applied.
74
- appendAuditEvent(db, {
75
- tenantId: opts.tenantId,
76
- actor,
77
- op: 'audit_prune',
78
- metadata: { cutoff, count, dryRun: false, olderThanDays: opts.olderThanDays },
79
- });
80
- db.exec('COMMIT');
81
- }
82
- catch (e) {
83
- try {
84
- db.exec('ROLLBACK');
85
- }
86
- catch { /* already rolled back; keep the original error */ }
87
- throw e;
88
- }
89
- }
55
+ const count = pruneAuditRows(hippoRoot, { tenantId: opts.tenantId, cutoff, actor, olderThanDays: opts.olderThanDays, dryRun });
90
56
  return { cutoff, count, dryRun };
91
57
  }
92
58
  /**
@@ -1,3 +1,3 @@
1
- import { type CommandContext } from './shared.js';
2
- export declare function handleAudit({ hippoRoot, args, flags }: CommandContext): void;
1
+ import { type CommandContext } from './flag-values.js';
2
+ export declare function handleAudit({ hippoRoot, args, flags }: CommandContext): Promise<void>;
3
3
  //# sourceMappingURL=audit.d.ts.map