hippo-memory 1.69.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 (860) hide show
  1. package/README.md +5 -2
  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.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -84,7 +84,7 @@
84
84
  * that mutate these env vars MUST call _resetAblationCacheForTests() in BOTH
85
85
  * beforeEach AND afterEach.
86
86
  */
87
- import { envAblateDecay, envAblateOutcome, envAblateOutcomeFast, envAblateOutcomeSlow, envAblateRecallBoost, envAblateRecency, envEvalRecencyDays, envFakeNowMs, } from './env.js';
87
+ import { envAblateDecay, envAblateOutcome, envAblateOutcomeFast, envAblateOutcomeSlow, envAblateRecallBoost, envAblateRecency, envEvalRecencyDays, envFakeNowMs, } from '../util/env.js';
88
88
  let _cache;
89
89
  function readFlags() {
90
90
  if (_cache !== undefined)
@@ -30,4 +30,4 @@ export declare const AGENT_MEMORY_SOURCE_PREFIX = "agent-memory:";
30
30
  export declare function toolSourcePrefix(id: ToolId): string;
31
31
  export declare const AGENT_MEMORY_TAGS: readonly string[];
32
32
  export declare function isToolId(value: string): value is ToolId;
33
- //# sourceMappingURL=tools.d.ts.map
33
+ //# sourceMappingURL=agent-memory-tools.d.ts.map
@@ -16,4 +16,4 @@ export const AGENT_MEMORY_TAGS = AGENT_MEMORY_TOOLS.map((t) => t.tag);
16
16
  export function isToolId(value) {
17
17
  return AGENT_MEMORY_TOOLS.some((t) => t.id === value);
18
18
  }
19
- //# sourceMappingURL=tools.js.map
19
+ //# sourceMappingURL=agent-memory-tools.js.map
@@ -9,6 +9,8 @@
9
9
  import { evalNow } from './ablation.js';
10
10
  import { Layer } from './memory.js';
11
11
  import { calculateStrength } from './memory.js';
12
+ import { DAY_MS } from '../util/time.js';
13
+ const STATE_DECIMALS = 3;
12
14
  /** The tallies of two disjoint row sets taken together. */
13
15
  export function addAmbientTallies(a, b) {
14
16
  const tagCounts = new Map(a.tagCounts);
@@ -36,7 +38,7 @@ export function isErrorTagged(tags) {
36
38
  /** Tallies over loaded entries; superseded rows count toward the total only, as they always have here. */
37
39
  export function tallyAmbientEntries(entries, now) {
38
40
  const currentTime = now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only)
39
- const sevenDaysAgo = currentTime.getTime() - 7 * 86400000;
41
+ const sevenDaysAgo = currentTime.getTime() - 7 * DAY_MS;
40
42
  const t = {
41
43
  total: entries.length, strengthSum: 0, fresh: 0, negative: 0, highSchemaFit: 0, errors: 0,
42
44
  semantic: 0, episodic: 0, conflicts: 0, extracted: 0, maxDagLevel: 0, tagCounts: new Map(),
@@ -154,15 +156,15 @@ export function renderAmbientSummary(state) {
154
156
  export function formatAmbientVector(state) {
155
157
  const lines = [];
156
158
  lines.push('Ambient State Vector:');
157
- lines.push(` tag_entropy: ${state.tagEntropy.toFixed(3)}`);
158
- lines.push(` avg_strength: ${state.avgStrength.toFixed(3)}`);
159
- lines.push(` recency_freshness: ${state.recencyFreshness.toFixed(3)}`);
160
- lines.push(` emotional_skew: ${state.emotionalSkew.toFixed(3)}`);
161
- lines.push(` schema_fit_ratio: ${state.schemaFitRatio.toFixed(3)}`);
162
- lines.push(` error_density: ${state.errorDensity.toFixed(3)}`);
163
- lines.push(` consolidation_ratio: ${state.consolidationRatio.toFixed(3)}`);
164
- lines.push(` conflict_intensity: ${state.conflictIntensity.toFixed(3)}`);
165
- lines.push(` extraction_coverage: ${state.extractionCoverage.toFixed(3)}`);
159
+ lines.push(` tag_entropy: ${state.tagEntropy.toFixed(STATE_DECIMALS)}`);
160
+ lines.push(` avg_strength: ${state.avgStrength.toFixed(STATE_DECIMALS)}`);
161
+ lines.push(` recency_freshness: ${state.recencyFreshness.toFixed(STATE_DECIMALS)}`);
162
+ lines.push(` emotional_skew: ${state.emotionalSkew.toFixed(STATE_DECIMALS)}`);
163
+ lines.push(` schema_fit_ratio: ${state.schemaFitRatio.toFixed(STATE_DECIMALS)}`);
164
+ lines.push(` error_density: ${state.errorDensity.toFixed(STATE_DECIMALS)}`);
165
+ lines.push(` consolidation_ratio: ${state.consolidationRatio.toFixed(STATE_DECIMALS)}`);
166
+ lines.push(` conflict_intensity: ${state.conflictIntensity.toFixed(STATE_DECIMALS)}`);
167
+ lines.push(` extraction_coverage: ${state.extractionCoverage.toFixed(STATE_DECIMALS)}`);
166
168
  lines.push(` dag_depth: ${state.dagDepth}`);
167
169
  lines.push(` total_memories: ${state.totalMemories}`);
168
170
  return lines.join('\n');
@@ -13,13 +13,20 @@ export interface CaptureInput {
13
13
  readonly trigger: string | null;
14
14
  }
15
15
  /** The outcome of reading a payload: usable input, a payload hippo refuses, or no payload at all. */
16
- export type CaptureReceipt = {
16
+ export type CaptureReceipt<I extends CaptureInput = CaptureInput> = {
17
17
  readonly status: 'received';
18
- readonly input: CaptureInput;
18
+ readonly input: I;
19
19
  } | {
20
20
  readonly status: 'skipped' | 'unavailable';
21
21
  readonly reason: string;
22
22
  };
23
+ /** What a PostCompact payload adds: it always names a session, and carries the summary Claude Code wrote. */
24
+ export interface PostCompactInput extends CaptureInput {
25
+ readonly event: 'post-compact';
26
+ readonly sessionId: string;
27
+ /** null when Claude Code sent none; the transcript fills the record later. */
28
+ readonly compactSummary: string | null;
29
+ }
23
30
  /** Working state saved before the host drops context, so the session can resume; it is not a lesson. */
24
31
  export interface Checkpoint {
25
32
  readonly runtime: string;
@@ -48,4 +55,8 @@ export type HookRuntime = 'claude-code' | 'copilot';
48
55
  export declare function readClaudeCodePreCompact(stdinText: string | undefined, timedOut: boolean, runtime?: HookRuntime): CaptureReceipt;
49
56
  /** Reads VS Code's per-reply Stop payload. Pass the raw stdin: stdin.ts would give a Copilot CLI agentStop the same snake_case keys. */
50
57
  export declare function readVscodeStop(stdinText: string | undefined, timedOut: boolean): CaptureReceipt;
58
+ /** Reads a Claude Code PostCompact payload; it must name a session, but needs no transcript_path. */
59
+ export declare function readClaudeCodePostCompact(stdinText: string | undefined, timedOut: boolean): CaptureReceipt<PostCompactInput>;
60
+ /** Reads a Claude Code SessionEnd payload, or a Copilot one after stdin.ts mapped it to the same snake_case keys; only an empty stdin counts as a manual run. */
61
+ export declare function readSessionEnd(stdinText: string | undefined, timedOut: boolean, runtime?: HookRuntime): CaptureReceipt;
51
62
  //# sourceMappingURL=capture-contract.d.ts.map
@@ -82,4 +82,68 @@ export function readVscodeStop(stdinText, timedOut) {
82
82
  },
83
83
  };
84
84
  }
85
+ /** Reads a Claude Code PostCompact payload; it must name a session, but needs no transcript_path. */
86
+ export function readClaudeCodePostCompact(stdinText, timedOut) {
87
+ const empty = !stdinText || stdinText.trim() === '';
88
+ if (timedOut && empty) {
89
+ return { status: 'unavailable', reason: 'no PostCompact payload arrived before the stdin wait window closed' };
90
+ }
91
+ let payload;
92
+ try {
93
+ payload = empty ? undefined : JSON.parse(stdinText.trim());
94
+ }
95
+ catch {
96
+ // Non-JSON stdin leaves payload undefined, which the shape check rejects.
97
+ }
98
+ if (!isObjectLike(payload) || !('session_id' in payload) || !isStringValue(payload.session_id) || payload.session_id === '') {
99
+ return { status: 'skipped', reason: 'no PostCompact payload naming a session' };
100
+ }
101
+ return {
102
+ status: 'received',
103
+ input: {
104
+ runtime: 'claude-code',
105
+ event: 'post-compact',
106
+ manual: false,
107
+ sessionId: payload.session_id,
108
+ cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
109
+ transcriptPath: 'transcript_path' in payload && isStringValue(payload.transcript_path) ? payload.transcript_path : null,
110
+ trigger: 'trigger' in payload && isStringValue(payload.trigger) ? payload.trigger : null,
111
+ compactSummary: 'compact_summary' in payload && isStringValue(payload.compact_summary) ? payload.compact_summary : null,
112
+ },
113
+ };
114
+ }
115
+ /** Reads a Claude Code SessionEnd payload, or a Copilot one after stdin.ts mapped it to the same snake_case keys; only an empty stdin counts as a manual run. */
116
+ export function readSessionEnd(stdinText, timedOut, runtime = 'claude-code') {
117
+ const empty = !stdinText || stdinText.trim() === '';
118
+ if (timedOut && empty) {
119
+ return { status: 'unavailable', reason: 'no SessionEnd payload arrived before the stdin wait window closed' };
120
+ }
121
+ const base = { runtime, event: 'session-end' };
122
+ if (empty) {
123
+ return { status: 'received', input: { ...base, manual: true, sessionId: null, cwd: null, transcriptPath: null, trigger: null } };
124
+ }
125
+ let payload;
126
+ try {
127
+ payload = JSON.parse(stdinText.trim());
128
+ }
129
+ catch {
130
+ // Non-JSON stdin leaves payload undefined, which the shape check rejects.
131
+ }
132
+ // Explicit array check: this reader has no required key to reject an array for it.
133
+ if (!isObjectLike(payload) || Array.isArray(payload)) {
134
+ return { status: 'skipped', reason: 'malformed SessionEnd payload (not a JSON object)' };
135
+ }
136
+ return {
137
+ status: 'received',
138
+ input: {
139
+ ...base,
140
+ manual: false,
141
+ sessionId: 'session_id' in payload && isStringValue(payload.session_id) && payload.session_id !== '' ? payload.session_id : null,
142
+ cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
143
+ transcriptPath: 'transcript_path' in payload && isStringValue(payload.transcript_path) && payload.transcript_path !== '' ? payload.transcript_path : null,
144
+ // Both hosts name a session end's trigger `reason`.
145
+ trigger: 'reason' in payload && isStringValue(payload.reason) ? payload.reason : null,
146
+ },
147
+ };
148
+ }
85
149
  //# sourceMappingURL=capture-contract.js.map
@@ -64,6 +64,8 @@ export interface ScoredEntryLike {
64
64
  * the tiebreak can't silently drift between call sites.
65
65
  */
66
66
  export declare function compareScoredResults(a: ScoredEntryLike, b: ScoredEntryLike): number;
67
+ /** Larger first, NaN after every number, 0 for equal scores. Not a subtraction: two infinities, or any NaN, subtract to NaN, which a sort reads as a tie. */
68
+ export declare function compareScoresDesc(a: number, b: number): number;
67
69
  /**
68
70
  * Build a score-desc -> tie-key comparator for the physics layer.
69
71
  *
@@ -79,8 +79,15 @@ function compareTags(a, b) {
79
79
  * the tiebreak can't silently drift between call sites.
80
80
  */
81
81
  export function compareScoredResults(a, b) {
82
- const d = b.score - a.score;
83
- return d !== 0 ? d : compareEntryIdentity(a.entry, b.entry);
82
+ return compareScoresDesc(a.score, b.score) || compareEntryIdentity(a.entry, b.entry);
83
+ }
84
+ /** Larger first, NaN after every number, 0 for equal scores. Not a subtraction: two infinities, or any NaN, subtract to NaN, which a sort reads as a tie. */
85
+ export function compareScoresDesc(a, b) {
86
+ if (a > b)
87
+ return -1;
88
+ if (a < b)
89
+ return 1;
90
+ return Number(Number.isNaN(a)) - Number(Number.isNaN(b));
84
91
  }
85
92
  /**
86
93
  * Build a score-desc -> tie-key comparator for the physics layer.
@@ -100,7 +107,7 @@ export function compareScoredResults(a, b) {
100
107
  */
101
108
  export function comparePhysicsResultsBy(scoreOf, tieKeyOf) {
102
109
  return (a, b) => {
103
- const d = scoreOf(b) - scoreOf(a);
110
+ const d = compareScoresDesc(scoreOf(a), scoreOf(b));
104
111
  if (d !== 0)
105
112
  return d;
106
113
  const ai = tieKeyOf ? tieKeyOf(a) : a.memoryId;
@@ -22,7 +22,7 @@ export interface HippoConfig {
22
22
  /** Embedding backend. 'local' (default) = zero-dependency transformers.js.
23
23
  * 'openai' | 'voyage' | 'cohere' = opt-in API embedder; needs the provider's
24
24
  * API key in env (OPENAI_API_KEY / VOYAGE_API_KEY / COHERE_API_KEY).
25
- * See src/embedding-provider.ts. */
25
+ * See src/store/embeddings/provider.ts. */
26
26
  provider?: 'local' | 'openai' | 'voyage' | 'cohere';
27
27
  /** Optional API base-URL override (self-host / proxy). HTTPS only (localhost
28
28
  * may use http). Ignored by the local provider. */
@@ -110,11 +110,11 @@ export interface HippoConfig {
110
110
  enabled: boolean;
111
111
  };
112
112
  /** Opt-in learned memory-value rescue veto on the sleep decay pass. Default OFF: the frozen weights
113
- * (src/memory-value-weights.ts) only run when enabled; the rescue budget is a code constant, not user-tunable. */
113
+ * (src/consolidate/memory-value-weights.ts) only run when enabled; the rescue budget is a code constant, not user-tunable. */
114
114
  memoryValue: {
115
115
  enabled: boolean;
116
116
  };
117
- /** Dormant memories (src/dormant.ts): when enabled (the default), the
117
+ /** Dormant memories (src/store/dormant.ts): when enabled (the default), the
118
118
  * sleep decay pass moves a memory that faded below the threshold into the
119
119
  * dormant store instead of deleting it. A dormant memory leaves recall and
120
120
  * context like a deleted one, but `hippo dormant restore <id>` brings it
@@ -136,12 +136,12 @@ export interface HippoConfig {
136
136
  agentMemories: {
137
137
  tools: string[] | null;
138
138
  };
139
- /** Per-turn delivery ledger (src/recall-trace.ts): hashes, ids, counts and rejection reasons for each
139
+ /** Per-turn delivery ledger (src/store/recall-trace.ts): hashes, ids, counts and rejection reasons for each
140
140
  * pinned-only context call. Default off; read from the store the token ledger writes to. */
141
141
  deliveryLedger: {
142
142
  enabled: boolean;
143
143
  };
144
- /** Pilot holdout (src/pilot-arm.ts): share of sessions, in basis points 0-10000, that get no memories pushed.
144
+ /** Pilot holdout (src/api/pilot-arm.ts): share of sessions, in basis points 0-10000, that get no memories pushed.
145
145
  * Default 0 = off. Read from the store the token ledger writes to. */
146
146
  pilot: {
147
147
  holdoutRateBp: number;
@@ -157,7 +157,7 @@ export interface HippoConfig {
157
157
  }
158
158
  export declare function loadConfig(hippoRoot: string): HippoConfig;
159
159
  /** True when the store's config.json sets `"sharedStore": true`. Once true, a root stays true for this process,
160
- * so a broken edit while a server runs cannot turn it off. Reads only this key: loadConfig has no cache. */
160
+ * so a broken edit while a server runs cannot turn it off. Reads only this key, so loadConfig's warnings stay loadConfig's. */
161
161
  export declare function isSharedStore(hippoRoot: string): boolean;
162
162
  /** Reads the root as shared for the rest of this process, whatever its config.json says. */
163
163
  export declare function markSharedStore(hippoRoot: string): void;
@@ -5,8 +5,9 @@ import * as fs from 'fs';
5
5
  import * as path from 'path';
6
6
  import { DEFAULT_PHYSICS_CONFIG, mergePhysicsConfig } from './physics-config.js';
7
7
  import { DEFAULT_HALF_LIFE_DAYS } from './memory.js';
8
- import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from './search/types.js';
9
- import { log } from './log.js';
8
+ import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from './search-types.js';
9
+ import { errorMessage, log } from '../util/log.js';
10
+ import { isJsonObject } from '../util/json.js';
10
11
  const DEFAULT_CONFIG = {
11
12
  defaultHalfLifeDays: DEFAULT_HALF_LIFE_DAYS,
12
13
  defaultBudget: DEFAULT_RECALL_BUDGET,
@@ -98,23 +99,11 @@ const DEFAULT_CONFIG = {
98
99
  },
99
100
  sharedStore: false,
100
101
  };
101
- function isMemoryValueConfig(value) {
102
- return typeof value === 'object' && value !== null && !Array.isArray(value);
103
- }
104
- function isDormantConfig(value) {
105
- return typeof value === 'object' && value !== null && !Array.isArray(value);
106
- }
107
- function isChurnStalenessConfig(value) {
108
- return typeof value === 'object' && value !== null && !Array.isArray(value);
109
- }
110
- function isDeliveryLedgerConfig(value) {
111
- return typeof value === 'object' && value !== null && !Array.isArray(value);
112
- }
113
102
  // Only `{"enabled": true}` turns it on; anything malformed warns and stays off.
114
103
  function deliveryLedgerEnabled(value) {
115
104
  if (value === undefined)
116
105
  return false;
117
- const isObject = isDeliveryLedgerConfig(value);
106
+ const isObject = isJsonObject(value);
118
107
  const enabled = isObject ? value.enabled : undefined;
119
108
  if (enabled === true || enabled === false)
120
109
  return enabled;
@@ -161,23 +150,23 @@ function memoryValueOverride(raw) {
161
150
  // Spreading a non-object raw.memoryValue (e.g. {"memoryValue": true}) silently leaves `enabled` false;
162
151
  // this feature must never be silently off, so warn loudly and fall back to defaults instead.
163
152
  const memoryValueRaw = raw.memoryValue;
164
- const validMemoryValueConfig = memoryValueRaw === undefined || isMemoryValueConfig(memoryValueRaw);
153
+ const validMemoryValueConfig = memoryValueRaw === undefined || isJsonObject(memoryValueRaw);
165
154
  if (!validMemoryValueConfig) {
166
155
  log.warn(`config.json's "memoryValue" must be an object like {"enabled": true} ` +
167
156
  `(got ${JSON.stringify(memoryValueRaw)}) - using defaults.`);
168
157
  }
169
- return memoryValueRaw !== undefined && isMemoryValueConfig(memoryValueRaw) ? memoryValueRaw : {};
158
+ return memoryValueRaw !== undefined && isJsonObject(memoryValueRaw) ? memoryValueRaw : {};
170
159
  }
171
160
  function dormantSettings(raw) {
172
161
  // Same rule as memoryValue above: a malformed value never silently
173
162
  // changes what sleep does. Anything but a real object / boolean / number
174
163
  // warns and falls back to the default, which keeps faded memories.
175
164
  const dormantRaw = raw.dormant;
176
- if (dormantRaw !== undefined && !isDormantConfig(dormantRaw)) {
165
+ if (dormantRaw !== undefined && !isJsonObject(dormantRaw)) {
177
166
  log.warn(`config.json's "dormant" must be an object like {"enabled": false} ` +
178
167
  `(got ${JSON.stringify(dormantRaw)}) - using the default (faded memories kept dormant).`);
179
168
  }
180
- const dormantOverride = dormantRaw !== undefined && isDormantConfig(dormantRaw) ? dormantRaw : {};
169
+ const dormantOverride = dormantRaw !== undefined && isJsonObject(dormantRaw) ? dormantRaw : {};
181
170
  // Only a real boolean counts: {"enabled": "false"} is a truthy string.
182
171
  let dormantEnabled = dormantOverride.enabled ?? DEFAULT_CONFIG.dormant.enabled;
183
172
  if (dormantEnabled !== true && dormantEnabled !== false) {
@@ -196,12 +185,12 @@ function dormantSettings(raw) {
196
185
  function churnStalenessEnabled(raw) {
197
186
  // Same "never silently wrong" rule as memoryValue/dormant above.
198
187
  const churnStalenessRaw = raw.churnStaleness;
199
- const validChurnStalenessConfig = churnStalenessRaw === undefined || isChurnStalenessConfig(churnStalenessRaw);
188
+ const validChurnStalenessConfig = churnStalenessRaw === undefined || isJsonObject(churnStalenessRaw);
200
189
  if (!validChurnStalenessConfig) {
201
190
  log.warn(`config.json's "churnStaleness" must be an object like {"enabled": true} ` +
202
191
  `(got ${JSON.stringify(churnStalenessRaw)}) - using defaults.`);
203
192
  }
204
- const enabled = churnStalenessRaw !== undefined && isChurnStalenessConfig(churnStalenessRaw)
193
+ const enabled = churnStalenessRaw !== undefined && isJsonObject(churnStalenessRaw)
205
194
  ? churnStalenessRaw.enabled
206
195
  : DEFAULT_CONFIG.churnStaleness.enabled;
207
196
  if (enabled !== true && enabled !== false) {
@@ -230,63 +219,95 @@ function sharedStoreFlag(raw) {
230
219
  return false;
231
220
  }
232
221
  export function loadConfig(hippoRoot) {
233
- const configPath = path.join(hippoRoot, 'config.json');
234
- if (!fs.existsSync(configPath))
222
+ // A caller that names no folder, as an add-on serving another store does, gets the defaults, never the working folder's config.json.
223
+ if (hippoRoot === '')
235
224
  return { ...DEFAULT_CONFIG };
225
+ const configPath = path.join(hippoRoot, 'config.json');
226
+ const key = path.resolve(configPath);
227
+ const stamp = fileStamp(configPath);
228
+ const hit = parsedConfigs.get(key);
229
+ if (hit !== undefined && hit.stamp === stamp)
230
+ return { ...hit.config };
231
+ const config = stamp === null ? DEFAULT_CONFIG : parseConfigFile(configPath);
232
+ if (parsedConfigs.size >= PARSED_CONFIGS_MAX)
233
+ parsedConfigs.clear();
234
+ parsedConfigs.set(key, { stamp, config });
235
+ return { ...config };
236
+ }
237
+ const PARSED_CONFIGS_MAX = 64;
238
+ // Each path's parsed config with the stamp of the file it came from, so an unchanged file costs one stat and no parse.
239
+ const parsedConfigs = new Map();
240
+ /** A file's mtime and size, which an edit changes; null when it is missing or cannot be reached, as existsSync answers false. */
241
+ function fileStamp(file) {
242
+ try {
243
+ const stat = fs.statSync(file, { throwIfNoEntry: false });
244
+ return stat === undefined ? null : `${stat.mtimeMs}:${stat.size}`;
245
+ }
246
+ catch (err) {
247
+ log.debug(`config: ${file} could not be reached, read as missing: ${errorMessage(err)}`);
248
+ return null;
249
+ }
250
+ }
251
+ function parseConfigFile(configPath) {
236
252
  try {
237
253
  const raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));
238
- const basis = raw.decayBasis;
239
- const validBasis = basis === 'clock' || basis === 'session' || basis === 'adaptive';
240
- const memoryValue = memoryValueOverride(raw);
241
- const dormant = dormantSettings(raw);
242
- const churnEnabled = churnStalenessEnabled(raw);
243
- const halfLifeDays = defaultHalfLifeDays(raw);
244
- return {
245
- defaultHalfLifeDays: halfLifeDays,
246
- defaultBudget: raw.defaultBudget ?? DEFAULT_CONFIG.defaultBudget,
247
- defaultContextBudget: raw.defaultContextBudget ?? DEFAULT_CONFIG.defaultContextBudget,
248
- decayBasis: validBasis ? basis : DEFAULT_CONFIG.decayBasis,
249
- autoLearnOnSleep: raw.autoLearnOnSleep ?? DEFAULT_CONFIG.autoLearnOnSleep,
250
- autoShareOnSleep: raw.autoShareOnSleep ?? DEFAULT_CONFIG.autoShareOnSleep,
251
- autoSleep: { ...DEFAULT_CONFIG.autoSleep, ...(raw.autoSleep ?? {}) },
252
- embeddings: { ...DEFAULT_CONFIG.embeddings, ...(raw.embeddings ?? {}) },
253
- global: { ...DEFAULT_CONFIG.global, ...(raw.global ?? {}) },
254
- gitLearnPatterns: raw.gitLearnPatterns ?? DEFAULT_CONFIG.gitLearnPatterns,
255
- physics: mergePhysicsConfig(raw.physics),
256
- mmr: { ...DEFAULT_CONFIG.mmr, ...(raw.mmr ?? {}) },
257
- search: { ...DEFAULT_CONFIG.search, ...(raw.search ?? {}) },
258
- replay: { ...DEFAULT_CONFIG.replay, ...(raw.replay ?? {}) },
259
- autoTraceCapture: raw.autoTraceCapture ?? DEFAULT_CONFIG.autoTraceCapture,
260
- autoTraceWindowDays: raw.autoTraceWindowDays ?? DEFAULT_CONFIG.autoTraceWindowDays,
261
- pinnedInject: { ...DEFAULT_CONFIG.pinnedInject, ...(raw.pinnedInject ?? {}) },
262
- contextProjectIsolation: raw.contextProjectIsolation ?? DEFAULT_CONFIG.contextProjectIsolation,
263
- extraction: { ...DEFAULT_CONFIG.extraction, ...(raw.extraction ?? {}) },
264
- multihop: { ...DEFAULT_CONFIG.multihop, ...(raw.multihop ?? {}) },
265
- salience: { ...DEFAULT_CONFIG.salience, ...(raw.salience ?? {}) },
266
- ambient: { ...DEFAULT_CONFIG.ambient, ...(raw.ambient ?? {}) },
267
- memoryValue: {
268
- ...DEFAULT_CONFIG.memoryValue,
269
- ...memoryValue,
270
- },
271
- dormant,
272
- churnStaleness: {
273
- enabled: churnEnabled,
274
- },
275
- agentMemories: { tools: agentMemoryTools(raw.agentMemories?.tools) },
276
- deliveryLedger: { enabled: deliveryLedgerEnabled(raw.deliveryLedger) },
277
- pilot: { holdoutRateBp: pilotHoldoutRate(raw.pilot) },
278
- projectIdentity: { remote: projectIdentityRemote(raw.projectIdentity) },
279
- sharedStore: sharedStoreFlag(raw),
280
- };
254
+ return configOverDefaults(raw);
281
255
  }
282
256
  catch (err) {
283
257
  if (fs.existsSync(configPath)) {
284
- log.warn(`failed to parse ${configPath}: ${err instanceof Error ? err.message : err}`);
258
+ log.warn(`failed to parse ${configPath}: ${errorMessage(err)}`);
285
259
  }
286
260
  return { ...DEFAULT_CONFIG };
287
261
  }
288
262
  }
263
+ function configOverDefaults(raw) {
264
+ const basis = raw.decayBasis;
265
+ const validBasis = basis === 'clock' || basis === 'session' || basis === 'adaptive';
266
+ const memoryValue = memoryValueOverride(raw);
267
+ const dormant = dormantSettings(raw);
268
+ const churnEnabled = churnStalenessEnabled(raw);
269
+ const halfLifeDays = defaultHalfLifeDays(raw);
270
+ return {
271
+ defaultHalfLifeDays: halfLifeDays,
272
+ defaultBudget: raw.defaultBudget ?? DEFAULT_CONFIG.defaultBudget,
273
+ defaultContextBudget: raw.defaultContextBudget ?? DEFAULT_CONFIG.defaultContextBudget,
274
+ decayBasis: validBasis ? basis : DEFAULT_CONFIG.decayBasis,
275
+ autoLearnOnSleep: raw.autoLearnOnSleep ?? DEFAULT_CONFIG.autoLearnOnSleep,
276
+ autoShareOnSleep: raw.autoShareOnSleep ?? DEFAULT_CONFIG.autoShareOnSleep,
277
+ autoSleep: { ...DEFAULT_CONFIG.autoSleep, ...(raw.autoSleep ?? {}) },
278
+ embeddings: { ...DEFAULT_CONFIG.embeddings, ...(raw.embeddings ?? {}) },
279
+ global: { ...DEFAULT_CONFIG.global, ...(raw.global ?? {}) },
280
+ gitLearnPatterns: raw.gitLearnPatterns ?? DEFAULT_CONFIG.gitLearnPatterns,
281
+ physics: mergePhysicsConfig(raw.physics),
282
+ mmr: { ...DEFAULT_CONFIG.mmr, ...(raw.mmr ?? {}) },
283
+ search: { ...DEFAULT_CONFIG.search, ...(raw.search ?? {}) },
284
+ replay: { ...DEFAULT_CONFIG.replay, ...(raw.replay ?? {}) },
285
+ autoTraceCapture: raw.autoTraceCapture ?? DEFAULT_CONFIG.autoTraceCapture,
286
+ autoTraceWindowDays: raw.autoTraceWindowDays ?? DEFAULT_CONFIG.autoTraceWindowDays,
287
+ pinnedInject: { ...DEFAULT_CONFIG.pinnedInject, ...(raw.pinnedInject ?? {}) },
288
+ contextProjectIsolation: raw.contextProjectIsolation ?? DEFAULT_CONFIG.contextProjectIsolation,
289
+ extraction: { ...DEFAULT_CONFIG.extraction, ...(raw.extraction ?? {}) },
290
+ multihop: { ...DEFAULT_CONFIG.multihop, ...(raw.multihop ?? {}) },
291
+ salience: { ...DEFAULT_CONFIG.salience, ...(raw.salience ?? {}) },
292
+ ambient: { ...DEFAULT_CONFIG.ambient, ...(raw.ambient ?? {}) },
293
+ memoryValue: {
294
+ ...DEFAULT_CONFIG.memoryValue,
295
+ ...memoryValue,
296
+ },
297
+ dormant,
298
+ churnStaleness: {
299
+ enabled: churnEnabled,
300
+ },
301
+ agentMemories: { tools: agentMemoryTools(raw.agentMemories?.tools) },
302
+ deliveryLedger: { enabled: deliveryLedgerEnabled(raw.deliveryLedger) },
303
+ pilot: { holdoutRateBp: pilotHoldoutRate(raw.pilot) },
304
+ projectIdentity: { remote: projectIdentityRemote(raw.projectIdentity) },
305
+ sharedStore: sharedStoreFlag(raw),
306
+ };
307
+ }
289
308
  const sharedStoreRoots = new Set();
309
+ // The stamp of each config.json last read as not shared: an unchanged file is not parsed again.
310
+ const notSharedStamps = new Map();
290
311
  /** The folder as isGlobalStoreRoot compares it (realpath, case-folded on Windows); its helper sits behind an import cycle. */
291
312
  function sharedStoreKey(hippoRoot) {
292
313
  let real;
@@ -294,30 +315,35 @@ function sharedStoreKey(hippoRoot) {
294
315
  real = fs.realpathSync.native(hippoRoot);
295
316
  }
296
317
  catch (err) {
297
- log.debug(`sharedStore: realpath fell back to resolve for ${hippoRoot}: ${err instanceof Error ? err.message : String(err)}`);
318
+ log.debug(`sharedStore: realpath fell back to resolve for ${hippoRoot}: ${errorMessage(err)}`);
298
319
  real = path.resolve(hippoRoot);
299
320
  }
300
321
  return process.platform === 'win32' ? real.toLowerCase() : real;
301
322
  }
302
323
  /** True when the store's config.json sets `"sharedStore": true`. Once true, a root stays true for this process,
303
- * so a broken edit while a server runs cannot turn it off. Reads only this key: loadConfig has no cache. */
324
+ * so a broken edit while a server runs cannot turn it off. Reads only this key, so loadConfig's warnings stay loadConfig's. */
304
325
  export function isSharedStore(hippoRoot) {
305
326
  const key = sharedStoreKey(hippoRoot);
306
327
  if (sharedStoreRoots.has(key))
307
328
  return true;
308
329
  const configPath = path.join(path.resolve(hippoRoot), 'config.json');
309
- if (!fs.existsSync(configPath))
330
+ const stamp = fileStamp(configPath);
331
+ if (stamp === null || notSharedStamps.get(configPath) === stamp)
310
332
  return false;
311
333
  let raw;
312
334
  try {
313
335
  raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));
314
336
  }
315
337
  catch (err) {
316
- log.warn(`failed to read ${configPath}: ${err instanceof Error ? err.message : err} - sharedStore read as false.`);
338
+ log.warn(`failed to read ${configPath}: ${errorMessage(err)} - sharedStore read as false.`);
317
339
  return false;
318
340
  }
319
- if (raw?.sharedStore !== true)
341
+ if (raw?.sharedStore !== true) {
342
+ if (notSharedStamps.size >= PARSED_CONFIGS_MAX)
343
+ notSharedStamps.clear();
344
+ notSharedStamps.set(configPath, stamp);
320
345
  return false;
346
+ }
321
347
  sharedStoreRoots.add(key);
322
348
  return true;
323
349
  }
@@ -328,5 +354,6 @@ export function markSharedStore(hippoRoot) {
328
354
  /** Test seam: forget every root seen as shared. */
329
355
  export function _resetSharedStoreCacheForTests() {
330
356
  sharedStoreRoots.clear();
357
+ notSharedStamps.clear();
331
358
  }
332
359
  //# sourceMappingURL=config.js.map
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Session handoff types and helpers.
3
+ *
4
+ * A handoff captures the state of a session so that a successor
5
+ * session (or a different agent) can pick up where the previous
6
+ * one left off.
7
+ */
8
+ import { isJsonString } from '../util/json.js';
9
+ import { warnDamagedColumn } from '../util/stored-json.js';
10
+ /** Narrows an unvalidated value (e.g. CLI input or event content) to a HandoffOutcome. */
11
+ export function isHandoffOutcome(v) {
12
+ return v === 'success' || v === 'failure' || v === 'partial';
13
+ }
14
+ /** Renders evidence as one line shared by every renderer (CLI, MCP, token accounting). */
15
+ export function formatHandoffEvidenceLine(evidence) {
16
+ const gitRef = evidence.gitRef ?? 'unknown';
17
+ const tree = evidence.dirtyTree === true ? 'dirty' : evidence.dirtyTree === false ? 'clean' : 'unknown';
18
+ const tests = evidence.testStatus ?? 'unknown';
19
+ return `git ${gitRef}, tree ${tree}, tests ${tests}`;
20
+ }
21
+ const TEST_STATUSES = new Set(['pass', 'fail', 'unknown']);
22
+ const absent = (v) => v === undefined || v === null;
23
+ function isHandoffEvidence(v) {
24
+ if (!(v instanceof Object) || Array.isArray(v))
25
+ return false;
26
+ const { gitRef, dirtyTree, testStatus, derivedFrom } = v;
27
+ return (absent(gitRef) || isJsonString(gitRef))
28
+ && (absent(dirtyTree) || dirtyTree === true || dirtyTree === false)
29
+ && (absent(testStatus) || TEST_STATUSES.has(testStatus))
30
+ && (derivedFrom === undefined || derivedFrom === 'transcript');
31
+ }
32
+ /** A stored list column as strings; a damaged one logs and reads as empty instead of hiding the whole handoff. */
33
+ function storedList(row, column) {
34
+ const raw = row[column];
35
+ if (!raw)
36
+ return [];
37
+ try {
38
+ const parsed = JSON.parse(raw);
39
+ return Array.isArray(parsed) ? parsed.map((item) => String(item)) : [];
40
+ }
41
+ catch {
42
+ warnDamagedColumn({ table: 'session_handoffs', id: row.id, column }, 'not valid JSON');
43
+ return [];
44
+ }
45
+ }
46
+ /** Stored evidence, or null (after a log line) when the column is damaged or holds another shape. */
47
+ function storedEvidence(row) {
48
+ if (!row.evidence_json)
49
+ return null;
50
+ const site = { table: 'session_handoffs', id: row.id, column: 'evidence_json' };
51
+ let parsed;
52
+ try {
53
+ parsed = JSON.parse(row.evidence_json);
54
+ }
55
+ catch {
56
+ warnDamagedColumn(site, 'not valid JSON');
57
+ return null;
58
+ }
59
+ if (parsed === null)
60
+ return null;
61
+ if (isHandoffEvidence(parsed))
62
+ return parsed;
63
+ warnDamagedColumn(site, 'wrong shape');
64
+ return null;
65
+ }
66
+ export function rowToSessionHandoff(row) {
67
+ const artifacts = storedList(row, 'artifacts_json');
68
+ const constraints = storedList(row, 'constraints_json');
69
+ const evidence = storedEvidence(row);
70
+ return {
71
+ version: 1,
72
+ sessionId: row.session_id,
73
+ repoRoot: row.repo_root ?? undefined,
74
+ taskId: row.task_id ?? undefined,
75
+ summary: row.summary,
76
+ nextAction: row.next_action ?? undefined,
77
+ artifacts,
78
+ scope: row.scope ?? null,
79
+ updatedAt: row.created_at,
80
+ constraints,
81
+ evidence,
82
+ outcome: isHandoffOutcome(row.outcome) ? row.outcome : null,
83
+ targetRuntime: row.target_runtime ?? null,
84
+ cardId: row.card_id ?? null,
85
+ };
86
+ }
87
+ //# sourceMappingURL=handoff.js.map
@@ -1,5 +1,5 @@
1
1
  import { COMPACTION_MEMORY_TAG, COMPACTION_SOURCE_PREFIX } from './memory.js';
2
- import { heldTexts } from './same-text.js';
2
+ import { heldTexts } from '../util/same-text.js';
3
3
  export const STOP_WORDS = new Set([
4
4
  'the', 'a', 'an', 'is', 'was', 'are', 'were', 'be', 'been', 'being',
5
5
  'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'it',