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
@@ -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');
@@ -1,5 +1,5 @@
1
1
  /** A host lifecycle moment hippo can capture from. */
2
- export type CaptureEvent = 'prompt' | 'tool-failure' | 'pre-compact' | 'post-compact' | 'session-start' | 'session-end' | 'reset';
2
+ export type CaptureEvent = 'prompt' | 'tool-failure' | 'pre-compact' | 'post-compact' | 'session-start' | 'session-end' | 'turn-end' | 'reset';
3
3
  /** What hippo read from one host payload, before anything is written. */
4
4
  export interface CaptureInput {
5
5
  readonly runtime: string;
@@ -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;
@@ -46,4 +53,10 @@ export declare function isObjectLike<T>(value: T): value is T & object;
46
53
  export type HookRuntime = 'claude-code' | 'copilot';
47
54
  /** Reads a Claude Code PreCompact 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. */
48
55
  export declare function readClaudeCodePreCompact(stdinText: string | undefined, timedOut: boolean, runtime?: HookRuntime): CaptureReceipt;
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. */
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;
49
62
  //# sourceMappingURL=capture-contract.d.ts.map
@@ -0,0 +1,149 @@
1
+ // The shared shape every agent adapter turns a host payload into, so capture code is written once for all runtimes.
2
+ // Field meanings, statuses and how to add a runtime: docs/integrations/agent-inventory.md.
3
+ /** A string guard that avoids `typeof`; it matches it for every value `JSON.parse` can produce. */
4
+ export function isStringValue(value) {
5
+ return String(value) === value;
6
+ }
7
+ /** An object guard that avoids `typeof`; arrays count as objects, as they do for `typeof`. */
8
+ export function isObjectLike(value) {
9
+ return value !== null && value instanceof Object;
10
+ }
11
+ /** Reads a Claude Code PreCompact 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. */
12
+ export function readClaudeCodePreCompact(stdinText, timedOut, runtime = 'claude-code') {
13
+ const empty = !stdinText || stdinText.trim() === '';
14
+ if (timedOut && empty) {
15
+ return { status: 'unavailable', reason: 'no PreCompact payload arrived before the stdin wait window closed' };
16
+ }
17
+ const base = { runtime, event: 'pre-compact' };
18
+ if (empty) {
19
+ return { status: 'received', input: { ...base, manual: true, sessionId: null, cwd: null, transcriptPath: null, trigger: null } };
20
+ }
21
+ let payload;
22
+ try {
23
+ payload = JSON.parse(stdinText.trim());
24
+ }
25
+ catch {
26
+ // Non-JSON stdin leaves payload undefined, which the shape check rejects like an explicit null.
27
+ }
28
+ // A bad payload is skipped, never treated as manual: discovery could pick up another session's transcript.
29
+ if (!isObjectLike(payload) || !('transcript_path' in payload) || !isStringValue(payload.transcript_path)) {
30
+ return { status: 'skipped', reason: 'malformed or incomplete PreCompact payload (missing string transcript_path)' };
31
+ }
32
+ const transcriptPath = payload.transcript_path;
33
+ // Path shape only: CLAUDE_CONFIG_DIR can move the transcript root, and a same-user process can already read every transcript.
34
+ if (!/\.jsonl$/i.test(transcriptPath)) {
35
+ return { status: 'skipped', reason: `payload transcript_path is not a .jsonl file: ${transcriptPath}` };
36
+ }
37
+ return {
38
+ status: 'received',
39
+ input: {
40
+ ...base,
41
+ manual: false,
42
+ sessionId: 'session_id' in payload && isStringValue(payload.session_id) ? payload.session_id : null,
43
+ cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
44
+ transcriptPath,
45
+ trigger: 'trigger' in payload && isStringValue(payload.trigger) ? payload.trigger : null,
46
+ },
47
+ };
48
+ }
49
+ /** 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
+ export function readVscodeStop(stdinText, timedOut) {
51
+ if (!stdinText || stdinText.trim() === '') {
52
+ return timedOut
53
+ ? { status: 'unavailable', reason: 'no Stop payload arrived before the stdin wait window closed' }
54
+ : { status: 'skipped', reason: 'no payload: turn capture runs only from a VS Code Stop hook' };
55
+ }
56
+ let payload;
57
+ try {
58
+ payload = JSON.parse(stdinText.trim());
59
+ }
60
+ catch {
61
+ // Non-JSON stdin leaves payload undefined, which the shape check rejects.
62
+ }
63
+ if (!isObjectLike(payload) || !('hook_event_name' in payload) || payload.hook_event_name !== 'Stop') {
64
+ return { status: 'skipped', reason: 'not a VS Code Stop payload (no snake_case hook_event_name "Stop")' };
65
+ }
66
+ if (!('transcript_path' in payload) || !isStringValue(payload.transcript_path) || !/\.jsonl$/i.test(payload.transcript_path)) {
67
+ return { status: 'skipped', reason: 'Stop payload names no .jsonl transcript_path' };
68
+ }
69
+ if (!('session_id' in payload) || !isStringValue(payload.session_id) || payload.session_id === '') {
70
+ return { status: 'skipped', reason: 'Stop payload has no session_id' };
71
+ }
72
+ return {
73
+ status: 'received',
74
+ input: {
75
+ runtime: 'vscode',
76
+ event: 'turn-end',
77
+ manual: false,
78
+ sessionId: payload.session_id,
79
+ cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
80
+ transcriptPath: payload.transcript_path,
81
+ trigger: null,
82
+ },
83
+ };
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
+ }
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