hippo-memory 1.72.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (995) hide show
  1. package/README.md +6 -4
  2. package/dist/agent-memories/apply.d.ts +7 -5
  3. package/dist/agent-memories/apply.js +66 -39
  4. package/dist/agent-memories/claude-code.d.ts +8 -2
  5. package/dist/agent-memories/claude-code.js +26 -7
  6. package/dist/agent-memories/copilot.js +2 -1
  7. package/dist/agent-memories/files.js +2 -1
  8. package/dist/agent-memories/legacy.d.ts +6 -3
  9. package/dist/agent-memories/legacy.js +35 -14
  10. package/dist/agent-memories/markdown.d.ts +3 -1
  11. package/dist/agent-memories/markdown.js +3 -1
  12. package/dist/agent-memories/openclaw.js +5 -2
  13. package/dist/agent-memories/plan.js +11 -1
  14. package/dist/agent-memories/project-folds.js +2 -1
  15. package/dist/agent-memories/report.d.ts +4 -1
  16. package/dist/agent-memories/report.js +43 -9
  17. package/dist/agent-memories/source.d.ts +8 -2
  18. package/dist/agent-memories/source.js +11 -3
  19. package/dist/agent-memories/sync.d.ts +7 -2
  20. package/dist/agent-memories/sync.js +141 -101
  21. package/dist/api/assemble.d.ts +6 -4
  22. package/dist/api/assemble.js +11 -5
  23. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  24. package/dist/api/auth/audit.js +58 -0
  25. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
  26. package/dist/api/{auth.js → auth/auth.js} +66 -54
  27. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  28. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
  29. package/dist/api/auth/session-owners.d.ts +10 -0
  30. package/dist/api/auth/session-owners.js +35 -0
  31. package/dist/api/availability.d.ts +3 -1
  32. package/dist/api/availability.js +3 -1
  33. package/dist/api/busy.d.ts +2 -0
  34. package/dist/api/busy.js +2 -0
  35. package/dist/api/cli-surface.d.ts +6 -0
  36. package/dist/api/cli-surface.js +6 -0
  37. package/dist/api/config-of.d.ts +5 -0
  38. package/dist/api/config-of.js +6 -0
  39. package/dist/api/context-auto.d.ts +4 -1
  40. package/dist/api/context-auto.js +14 -4
  41. package/dist/api/context-render.js +14 -7
  42. package/dist/api/context-select.d.ts +4 -1
  43. package/dist/api/context-select.js +31 -34
  44. package/dist/api/context-types.d.ts +38 -12
  45. package/dist/api/context.d.ts +8 -5
  46. package/dist/api/context.js +120 -63
  47. package/dist/api/continuity.d.ts +24 -21
  48. package/dist/api/continuity.js +18 -20
  49. package/dist/api/correction-latency.d.ts +3 -1
  50. package/dist/api/correction-latency.js +3 -1
  51. package/dist/api/error-reply.d.ts +4 -1
  52. package/dist/api/error-reply.js +12 -3
  53. package/dist/api/index.d.ts +39 -23
  54. package/dist/api/index.js +21 -23
  55. package/dist/api/instruction-detect.d.ts +4 -1
  56. package/dist/api/instruction-detect.js +75 -20
  57. package/dist/api/ledger-db.d.ts +15 -11
  58. package/dist/api/ledger-db.js +21 -23
  59. package/dist/api/memories/conflicts.d.ts +33 -0
  60. package/dist/api/memories/conflicts.js +67 -0
  61. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  62. package/dist/api/{forget.js → memories/forget.js} +23 -17
  63. package/dist/api/memories/memories.d.ts +27 -0
  64. package/dist/api/memories/memories.js +52 -0
  65. package/dist/api/memories/outcome.d.ts +22 -0
  66. package/dist/api/memories/outcome.js +28 -0
  67. package/dist/api/memories/promote.d.ts +40 -0
  68. package/dist/api/memories/promote.js +76 -0
  69. package/dist/api/memories/refine.d.ts +10 -0
  70. package/dist/api/memories/refine.js +12 -0
  71. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
  72. package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
  73. package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
  74. package/dist/api/{remember.js → memories/remember.js} +50 -32
  75. package/dist/api/objects/cards.d.ts +39 -0
  76. package/dist/api/{cards.js → objects/cards.js} +12 -14
  77. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  78. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
  79. package/dist/api/objects/goals.d.ts +18 -0
  80. package/dist/api/{goals.js → objects/goals.js} +12 -12
  81. package/dist/api/objects/graph.d.ts +11 -0
  82. package/dist/api/objects/graph.js +16 -0
  83. package/dist/api/objects/objects.d.ts +9 -0
  84. package/dist/api/{objects.js → objects/objects.js} +2 -3
  85. package/dist/api/objects/predictions.d.ts +11 -0
  86. package/dist/api/{predictions.js → objects/predictions.js} +7 -5
  87. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  88. package/dist/api/{projects.js → objects/projects.js} +8 -4
  89. package/dist/api/pilot-arm.d.ts +8 -4
  90. package/dist/api/pilot-arm.js +5 -4
  91. package/dist/api/prompt-hook.d.ts +35 -20
  92. package/dist/api/prompt-hook.js +66 -44
  93. package/dist/api/provenance-coverage.d.ts +3 -1
  94. package/dist/api/provenance-coverage.js +3 -1
  95. package/dist/api/recall/finish.d.ts +185 -0
  96. package/dist/api/recall/finish.js +301 -0
  97. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  98. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
  99. package/dist/api/recall/recall.d.ts +6 -0
  100. package/dist/api/{recall.js → recall/recall.js} +116 -72
  101. package/dist/api/recall/render.d.ts +39 -0
  102. package/dist/api/recall/render.js +60 -0
  103. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  104. package/dist/api/recall/request.js +261 -0
  105. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  106. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  107. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
  108. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  109. package/dist/api/session-end.d.ts +36 -8
  110. package/dist/api/session-end.js +71 -25
  111. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  112. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  113. package/dist/api/sleep/dormant.d.ts +25 -0
  114. package/dist/api/sleep/dormant.js +64 -0
  115. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  116. package/dist/api/sleep/learn.js +138 -0
  117. package/dist/api/sleep/sleep-run.d.ts +38 -0
  118. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
  119. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  120. package/dist/api/sleep/sleep.js +9 -0
  121. package/dist/api/status.d.ts +3 -1
  122. package/dist/api/status.js +3 -1
  123. package/dist/api/store-init.d.ts +4 -1
  124. package/dist/api/store-init.js +4 -1
  125. package/dist/api/tokens.d.ts +10 -9
  126. package/dist/api/tokens.js +9 -10
  127. package/dist/api/types.d.ts +27 -12
  128. package/dist/api/types.js +13 -4
  129. package/dist/capture/caller-session.d.ts +8 -2
  130. package/dist/capture/caller-session.js +16 -6
  131. package/dist/capture/capture-error.d.ts +3 -1
  132. package/dist/capture/capture-error.js +3 -1
  133. package/dist/capture/codex-patch.js +7 -2
  134. package/dist/capture/command.d.ts +4 -2
  135. package/dist/capture/command.js +34 -15
  136. package/dist/capture/compact-resume-caller.js +15 -8
  137. package/dist/capture/compact.d.ts +8 -5
  138. package/dist/capture/compact.js +34 -23
  139. package/dist/capture/compaction-items-caller.js +9 -3
  140. package/dist/capture/compaction-record.d.ts +4 -3
  141. package/dist/capture/compaction-record.js +20 -12
  142. package/dist/capture/compaction-spool.d.ts +18 -9
  143. package/dist/capture/compaction-spool.js +105 -63
  144. package/dist/capture/copilot-transcript.d.ts +11 -3
  145. package/dist/capture/copilot-transcript.js +16 -6
  146. package/dist/capture/extract.js +20 -8
  147. package/dist/capture/failure-caller.js +23 -12
  148. package/dist/capture/failure-reading.d.ts +10 -3
  149. package/dist/capture/failure-reading.js +24 -7
  150. package/dist/capture/pre-compact-caller.js +11 -4
  151. package/dist/capture/session-digest.d.ts +15 -4
  152. package/dist/capture/session-digest.js +39 -13
  153. package/dist/capture/session-end-caller.d.ts +4 -1
  154. package/dist/capture/session-end-caller.js +20 -8
  155. package/dist/capture/session-texts.d.ts +6 -2
  156. package/dist/capture/session-texts.js +22 -7
  157. package/dist/capture/session-worker.d.ts +4 -2
  158. package/dist/capture/session-worker.js +58 -17
  159. package/dist/capture/transcript.d.ts +13 -4
  160. package/dist/capture/transcript.js +32 -10
  161. package/dist/capture/working-state.d.ts +13 -4
  162. package/dist/capture/working-state.js +50 -56
  163. package/dist/cli/api-context.d.ts +14 -2
  164. package/dist/cli/api-context.js +45 -2
  165. package/dist/cli/audit.js +33 -33
  166. package/dist/cli/auth.js +23 -31
  167. package/dist/cli/briefs.d.ts +1 -1
  168. package/dist/cli/briefs.js +20 -15
  169. package/dist/cli/card.d.ts +1 -1
  170. package/dist/cli/card.js +56 -73
  171. package/dist/cli/client.d.ts +12 -5
  172. package/dist/cli/client.js +53 -23
  173. package/dist/cli/compact-resume-payload.d.ts +4 -1
  174. package/dist/cli/compact-resume-payload.js +12 -5
  175. package/dist/cli/context.js +43 -18
  176. package/dist/cli/continuity.d.ts +5 -5
  177. package/dist/cli/continuity.js +90 -107
  178. package/dist/cli/curate.d.ts +5 -4
  179. package/dist/cli/curate.js +55 -77
  180. package/dist/cli/dag.d.ts +1 -1
  181. package/dist/cli/dag.js +14 -17
  182. package/dist/cli/decisions.js +30 -30
  183. package/dist/cli/eval.js +16 -21
  184. package/dist/cli/exit.d.ts +4 -1
  185. package/dist/cli/exit.js +10 -2
  186. package/dist/cli/explain.js +12 -11
  187. package/dist/cli/flag-values.d.ts +1 -1
  188. package/dist/cli/flag-values.js +9 -18
  189. package/dist/cli/github.d.ts +6 -0
  190. package/dist/cli/github.js +25 -13
  191. package/dist/cli/goals.d.ts +1 -1
  192. package/dist/cli/goals.js +39 -56
  193. package/dist/cli/graph.d.ts +1 -1
  194. package/dist/cli/graph.js +15 -11
  195. package/dist/cli/hook-runtime.d.ts +34 -10
  196. package/dist/cli/hook-runtime.js +41 -16
  197. package/dist/cli/incidents.d.ts +1 -1
  198. package/dist/cli/incidents.js +25 -25
  199. package/dist/cli/init.d.ts +1 -1
  200. package/dist/cli/init.js +35 -20
  201. package/dist/cli/install-steps.d.ts +12 -3
  202. package/dist/cli/install-steps.js +42 -18
  203. package/dist/cli/last-sleep.d.ts +4 -1
  204. package/dist/cli/last-sleep.js +9 -4
  205. package/dist/cli/maintenance.d.ts +1 -1
  206. package/dist/cli/maintenance.js +11 -12
  207. package/dist/cli/notes.d.ts +1 -1
  208. package/dist/cli/notes.js +8 -5
  209. package/dist/cli/object-verbs.d.ts +5 -5
  210. package/dist/cli/object-verbs.js +13 -16
  211. package/dist/cli/open-browser.js +11 -2
  212. package/dist/cli/playbooks.d.ts +3 -3
  213. package/dist/cli/playbooks.js +40 -32
  214. package/dist/cli/predictions.js +17 -22
  215. package/dist/cli/print.js +4 -2
  216. package/dist/cli/projects.js +21 -11
  217. package/dist/cli/quality-repair-once.d.ts +1 -1
  218. package/dist/cli/quality-repair-once.js +7 -6
  219. package/dist/cli/recall.js +129 -93
  220. package/dist/cli/refine-llm.d.ts +15 -4
  221. package/dist/cli/refine-llm.js +17 -7
  222. package/dist/cli/remember.js +51 -55
  223. package/dist/cli/scheduler.d.ts +4 -1
  224. package/dist/cli/scheduler.js +9 -5
  225. package/dist/cli/serve.js +28 -18
  226. package/dist/cli/session-hooks.d.ts +2 -6
  227. package/dist/cli/session-hooks.js +140 -112
  228. package/dist/cli/setup.d.ts +1 -1
  229. package/dist/cli/setup.js +56 -34
  230. package/dist/cli/shared.d.ts +4 -2
  231. package/dist/cli/shared.js +26 -11
  232. package/dist/cli/slack.js +15 -24
  233. package/dist/cli/sleep-render.d.ts +3 -1
  234. package/dist/cli/sleep-render.js +8 -5
  235. package/dist/cli/sleep.js +16 -8
  236. package/dist/cli/status.d.ts +4 -4
  237. package/dist/cli/status.js +32 -27
  238. package/dist/cli/stdin.d.ts +10 -3
  239. package/dist/cli/stdin.js +10 -3
  240. package/dist/cli/transfer.d.ts +4 -4
  241. package/dist/cli/transfer.js +97 -82
  242. package/dist/cli/usage.d.ts +1 -1
  243. package/dist/cli/usage.js +1 -1
  244. package/dist/cli/verb-row.d.ts +2 -0
  245. package/dist/cli/verbs/health.js +2 -0
  246. package/dist/cli/verbs/memory.js +47 -53
  247. package/dist/cli/verbs/objects.js +16 -7
  248. package/dist/cli/verbs/sessions.js +4 -2
  249. package/dist/cli/versioned-verbs.d.ts +8 -7
  250. package/dist/cli/versioned-verbs.js +31 -21
  251. package/dist/cli.js +14 -18
  252. package/dist/connectors/dlq.d.ts +6 -6
  253. package/dist/connectors/dlq.js +12 -7
  254. package/dist/connectors/github/backfill.d.ts +4 -4
  255. package/dist/connectors/github/backfill.js +6 -4
  256. package/dist/connectors/github/deletion.d.ts +6 -4
  257. package/dist/connectors/github/deletion.js +5 -4
  258. package/dist/connectors/github/dlq.d.ts +8 -6
  259. package/dist/connectors/github/dlq.js +11 -5
  260. package/dist/connectors/github/ingest.d.ts +2 -2
  261. package/dist/connectors/github/ingest.js +9 -5
  262. package/dist/connectors/github/octokit-client.d.ts +3 -1
  263. package/dist/connectors/github/octokit-client.js +7 -2
  264. package/dist/connectors/github/ratelimit.d.ts +6 -2
  265. package/dist/connectors/github/ratelimit.js +6 -2
  266. package/dist/connectors/github/signature.d.ts +14 -3
  267. package/dist/connectors/github/signature.js +17 -3
  268. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  269. package/dist/connectors/github/tenant-routing.js +6 -5
  270. package/dist/connectors/github/transform.js +50 -67
  271. package/dist/connectors/github/types.d.ts +10 -3
  272. package/dist/connectors/github/types.js +6 -2
  273. package/dist/connectors/github/webhook.d.ts +5 -5
  274. package/dist/connectors/github/webhook.js +36 -23
  275. package/dist/connectors/ingest.d.ts +5 -3
  276. package/dist/connectors/ingest.js +3 -3
  277. package/dist/connectors/slack/backfill.d.ts +5 -5
  278. package/dist/connectors/slack/backfill.js +3 -3
  279. package/dist/connectors/slack/deletion.d.ts +4 -4
  280. package/dist/connectors/slack/deletion.js +6 -5
  281. package/dist/connectors/slack/dlq.d.ts +4 -4
  282. package/dist/connectors/slack/dlq.js +6 -6
  283. package/dist/connectors/slack/ingest.d.ts +6 -4
  284. package/dist/connectors/slack/ingest.js +5 -4
  285. package/dist/connectors/slack/signature.d.ts +4 -1
  286. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  287. package/dist/connectors/slack/tenant-routing.js +6 -5
  288. package/dist/connectors/slack/transform.d.ts +6 -2
  289. package/dist/connectors/slack/transform.js +6 -2
  290. package/dist/connectors/slack/types.d.ts +3 -1
  291. package/dist/connectors/slack/web-client.js +8 -3
  292. package/dist/connectors/slack/webhook.d.ts +5 -5
  293. package/dist/connectors/slack/webhook.js +19 -11
  294. package/dist/connectors/slack/workspaces.d.ts +7 -3
  295. package/dist/connectors/slack/workspaces.js +7 -3
  296. package/dist/connectors/store.d.ts +8 -0
  297. package/dist/connectors/store.js +2 -0
  298. package/dist/consolidate/conflicts.js +24 -10
  299. package/dist/consolidate/dag-summary.js +2 -1
  300. package/dist/consolidate/dag.d.ts +10 -5
  301. package/dist/consolidate/dag.js +45 -39
  302. package/dist/consolidate/decay.js +19 -6
  303. package/dist/consolidate/dedupe.d.ts +14 -5
  304. package/dist/consolidate/dedupe.js +28 -17
  305. package/dist/consolidate/flush-units.d.ts +4 -1
  306. package/dist/consolidate/flush-units.js +4 -1
  307. package/dist/consolidate/half-life-migration.d.ts +18 -8
  308. package/dist/consolidate/half-life-migration.js +48 -18
  309. package/dist/consolidate/llm-passes.js +27 -11
  310. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  311. package/dist/consolidate/memory-value-weights.js +6 -2
  312. package/dist/consolidate/memory-value.d.ts +30 -10
  313. package/dist/consolidate/memory-value.js +37 -14
  314. package/dist/consolidate/merge.d.ts +4 -1
  315. package/dist/consolidate/merge.js +47 -37
  316. package/dist/consolidate/overlap-index.d.ts +8 -2
  317. package/dist/consolidate/overlap-index.js +11 -4
  318. package/dist/consolidate/physics-pass.d.ts +3 -1
  319. package/dist/consolidate/physics-pass.js +10 -7
  320. package/dist/consolidate/replay.d.ts +11 -4
  321. package/dist/consolidate/replay.js +19 -7
  322. package/dist/consolidate/run.d.ts +13 -5
  323. package/dist/consolidate/run.js +4 -4
  324. package/dist/consolidate/sleep.d.ts +14 -6
  325. package/dist/consolidate/sleep.js +42 -39
  326. package/dist/consolidate/trace.d.ts +7 -2
  327. package/dist/consolidate/trace.js +7 -2
  328. package/dist/consolidate/traces.js +27 -30
  329. package/dist/core/ablation.d.ts +9 -3
  330. package/dist/core/ablation.js +14 -4
  331. package/dist/core/active-scope.d.ts +3 -1
  332. package/dist/core/active-scope.js +3 -1
  333. package/dist/core/agent-memory-tools.d.ts +2 -0
  334. package/dist/core/agent-memory-tools.js +2 -0
  335. package/dist/core/ambient.d.ts +4 -3
  336. package/dist/core/ambient.js +8 -6
  337. package/dist/core/api-errors.d.ts +9 -3
  338. package/dist/core/api-errors.js +9 -3
  339. package/dist/core/capture-contract.d.ts +4 -1
  340. package/dist/core/capture-contract.js +27 -8
  341. package/dist/core/compare.d.ts +24 -8
  342. package/dist/core/compare.js +24 -8
  343. package/dist/core/config.d.ts +18 -9
  344. package/dist/core/config.js +38 -29
  345. package/dist/core/cosine.d.ts +4 -1
  346. package/dist/core/cosine.js +4 -1
  347. package/dist/core/handoff.d.ts +7 -2
  348. package/dist/core/handoff.js +4 -1
  349. package/dist/core/markdown.js +22 -17
  350. package/dist/core/memory-audit.js +14 -3
  351. package/dist/core/memory-quality.d.ts +12 -3
  352. package/dist/core/memory-quality.js +57 -21
  353. package/dist/core/memory.d.ts +87 -30
  354. package/dist/core/memory.js +82 -33
  355. package/dist/core/merged-row.d.ts +8 -2
  356. package/dist/core/merged-row.js +10 -3
  357. package/dist/core/package-root.d.ts +3 -1
  358. package/dist/core/package-root.js +3 -1
  359. package/dist/core/particle-refresh.d.ts +8 -0
  360. package/dist/core/particle-refresh.js +22 -0
  361. package/dist/core/physics-config.d.ts +4 -1
  362. package/dist/core/physics-config.js +6 -2
  363. package/dist/core/physics.d.ts +39 -11
  364. package/dist/core/physics.js +71 -21
  365. package/dist/core/project-identity.d.ts +34 -17
  366. package/dist/core/project-identity.js +35 -18
  367. package/dist/core/project-remote.d.ts +8 -4
  368. package/dist/core/project-remote.js +31 -14
  369. package/dist/core/recall-scope.d.ts +33 -11
  370. package/dist/core/recall-scope.js +42 -15
  371. package/dist/core/rejection-digest.d.ts +7 -0
  372. package/dist/core/rejection-digest.js +13 -0
  373. package/dist/core/salience.d.ts +3 -1
  374. package/dist/core/salience.js +10 -4
  375. package/dist/core/search-types.d.ts +15 -2
  376. package/dist/core/search-types.js +11 -0
  377. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  378. package/dist/dashboard/dashboard-actions.js +18 -7
  379. package/dist/dashboard/dashboard-queries.js +2 -7
  380. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  381. package/dist/dashboard/dashboard-snapshot.js +5 -7
  382. package/dist/dashboard/dashboard.js +22 -8
  383. package/dist/db/backup.js +2 -2
  384. package/dist/db/busy.d.ts +10 -3
  385. package/dist/db/busy.js +27 -5
  386. package/dist/db/connect.d.ts +10 -2
  387. package/dist/db/connect.js +8 -2
  388. package/dist/db/continuity.d.ts +1 -1
  389. package/dist/db/continuity.js +27 -11
  390. package/dist/db/meta.d.ts +4 -1
  391. package/dist/db/meta.js +4 -1
  392. package/dist/db/migrate.d.ts +10 -5
  393. package/dist/db/migrate.js +40 -20
  394. package/dist/db/migrations/index.d.ts +1 -1
  395. package/dist/db/migrations/index.js +3 -1
  396. package/dist/db/migrations/types.d.ts +2 -1
  397. package/dist/db/migrations/v11.js +1 -0
  398. package/dist/db/migrations/v12.js +2 -1
  399. package/dist/db/migrations/v14.js +2 -0
  400. package/dist/db/migrations/v15.js +4 -2
  401. package/dist/db/migrations/v16.js +6 -3
  402. package/dist/db/migrations/v17.js +2 -1
  403. package/dist/db/migrations/v19.js +4 -2
  404. package/dist/db/migrations/v20.js +2 -1
  405. package/dist/db/migrations/v22.js +12 -6
  406. package/dist/db/migrations/v23.js +6 -3
  407. package/dist/db/migrations/v24.js +6 -3
  408. package/dist/db/migrations/v25.js +4 -2
  409. package/dist/db/migrations/v26.js +4 -2
  410. package/dist/db/migrations/v27.js +6 -3
  411. package/dist/db/migrations/v28.js +4 -2
  412. package/dist/db/migrations/v29.js +4 -2
  413. package/dist/db/migrations/v30.js +6 -3
  414. package/dist/db/migrations/v31.js +4 -2
  415. package/dist/db/migrations/v32.js +6 -3
  416. package/dist/db/migrations/v33.js +4 -2
  417. package/dist/db/migrations/v34.js +2 -1
  418. package/dist/db/migrations/v35.js +2 -1
  419. package/dist/db/migrations/v36.js +2 -1
  420. package/dist/db/migrations/v37.js +10 -5
  421. package/dist/db/migrations/v38.js +10 -5
  422. package/dist/db/migrations/v39.js +14 -6
  423. package/dist/db/migrations/v40.js +4 -2
  424. package/dist/db/migrations/v41.js +4 -2
  425. package/dist/db/migrations/v42.js +2 -1
  426. package/dist/db/migrations/v44.js +4 -2
  427. package/dist/db/migrations/v45.js +4 -2
  428. package/dist/db/migrations/v49.js +2 -1
  429. package/dist/db/migrations/v50.js +4 -2
  430. package/dist/db/migrations/v51.js +4 -2
  431. package/dist/db/migrations/v52.js +2 -1
  432. package/dist/db/migrations/v53.js +8 -4
  433. package/dist/db/migrations/v54.js +2 -1
  434. package/dist/db/migrations/v55.js +4 -2
  435. package/dist/db/migrations/v56.d.ts +3 -0
  436. package/dist/db/migrations/v56.js +28 -0
  437. package/dist/db/open.d.ts +24 -12
  438. package/dist/db/open.js +25 -13
  439. package/dist/db/physics-state.d.ts +8 -8
  440. package/dist/db/physics-state.js +17 -50
  441. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  442. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  443. package/dist/db/request-stores.d.ts +20 -5
  444. package/dist/db/request-stores.js +15 -5
  445. package/dist/db/tables.d.ts +2 -1
  446. package/dist/db/tables.js +12 -4
  447. package/dist/db/vector-store.d.ts +13 -4
  448. package/dist/db/vector-store.js +35 -14
  449. package/dist/db/wal-checkpointer.d.ts +2 -1
  450. package/dist/db/wal-checkpointer.js +19 -7
  451. package/dist/doctor.d.ts +7 -1
  452. package/dist/doctor.js +128 -46
  453. package/dist/embeddings/local.d.ts +8 -4
  454. package/dist/embeddings/local.js +11 -7
  455. package/dist/embeddings/provider.d.ts +19 -10
  456. package/dist/embeddings/provider.js +32 -27
  457. package/dist/embeddings/transformers.d.ts +16 -4
  458. package/dist/embeddings/transformers.js +32 -15
  459. package/dist/entry/json-hooks.d.ts +1 -1
  460. package/dist/entry/json-hooks.js +1 -1
  461. package/dist/entry/project-identity.js +2 -1
  462. package/dist/entry/session-text.d.ts +1 -1
  463. package/dist/entry/session-text.js +1 -1
  464. package/dist/entry/sqlite-handles.d.ts +10 -0
  465. package/dist/entry/sqlite-handles.js +9 -0
  466. package/dist/entry/store-kit.d.ts +50 -0
  467. package/dist/entry/store-kit.js +27 -0
  468. package/dist/entry/testing.d.ts +6 -0
  469. package/dist/entry/testing.js +7 -0
  470. package/dist/eval/eval-stats.d.ts +27 -8
  471. package/dist/eval/eval-stats.js +17 -5
  472. package/dist/eval/eval-suite.d.ts +3 -1
  473. package/dist/eval/eval-suite.js +409 -187
  474. package/dist/eval/eval.d.ts +8 -2
  475. package/dist/eval/eval.js +8 -2
  476. package/dist/eval/judgment.js +17 -7
  477. package/dist/graph/delta.d.ts +9 -42
  478. package/dist/graph/delta.js +17 -11
  479. package/dist/graph/extract.d.ts +10 -7
  480. package/dist/graph/extract.js +57 -25
  481. package/dist/graph/recall.d.ts +12 -4
  482. package/dist/graph/recall.js +30 -13
  483. package/dist/graph/stream.d.ts +18 -6
  484. package/dist/graph/stream.js +32 -10
  485. package/dist/graph/view.d.ts +19 -6
  486. package/dist/graph/view.js +42 -17
  487. package/dist/hooks/codex-session.js +2 -2
  488. package/dist/hooks/codex-wrapper.d.ts +3 -1
  489. package/dist/hooks/codex-wrapper.js +9 -4
  490. package/dist/hooks/copilot.d.ts +19 -5
  491. package/dist/hooks/copilot.js +54 -15
  492. package/dist/hooks/hook-blocks.d.ts +4 -1
  493. package/dist/hooks/hook-blocks.js +8 -3
  494. package/dist/hooks/json-hooks.d.ts +9 -5
  495. package/dist/hooks/json-hooks.js +72 -33
  496. package/dist/hooks/opencode.js +15 -5
  497. package/dist/hooks/shared.d.ts +27 -8
  498. package/dist/hooks/shared.js +57 -16
  499. package/dist/importers/core.d.ts +12 -4
  500. package/dist/importers/core.js +11 -10
  501. package/dist/importers/markdown-parse.d.ts +15 -5
  502. package/dist/importers/markdown-parse.js +16 -7
  503. package/dist/importers/markdown.js +6 -9
  504. package/dist/importers/sources.js +10 -23
  505. package/dist/importers/vault.d.ts +3 -3
  506. package/dist/importers/vault.js +61 -45
  507. package/dist/index.d.ts +33 -7
  508. package/dist/index.js +26 -8
  509. package/dist/learn/autolearn.d.ts +21 -6
  510. package/dist/learn/autolearn.js +57 -26
  511. package/dist/learn/churn-git.d.ts +4 -1
  512. package/dist/learn/churn-git.js +29 -5
  513. package/dist/learn/extract.d.ts +4 -1
  514. package/dist/learn/extract.js +17 -10
  515. package/dist/learn/forward-claim-detector.d.ts +17 -5
  516. package/dist/learn/forward-claim-detector.js +34 -15
  517. package/dist/learn/invalidation.d.ts +12 -6
  518. package/dist/learn/invalidation.js +62 -28
  519. package/dist/learn/roots.d.ts +3 -0
  520. package/dist/learn/roots.js +5 -0
  521. package/dist/mcp/admin-tools.d.ts +5 -5
  522. package/dist/mcp/admin-tools.js +28 -23
  523. package/dist/mcp/format.d.ts +1 -1
  524. package/dist/mcp/format.js +4 -2
  525. package/dist/mcp/framing.d.ts +3 -1
  526. package/dist/mcp/framing.js +20 -8
  527. package/dist/mcp/memory-tools.d.ts +3 -3
  528. package/dist/mcp/memory-tools.js +21 -20
  529. package/dist/mcp/protocol.d.ts +32 -16
  530. package/dist/mcp/protocol.js +12 -9
  531. package/dist/mcp/recall-tools.d.ts +3 -3
  532. package/dist/mcp/recall-tools.js +62 -74
  533. package/dist/mcp/request.d.ts +7 -5
  534. package/dist/mcp/request.js +61 -77
  535. package/dist/mcp/server.d.ts +3 -1
  536. package/dist/mcp/server.js +8 -3
  537. package/dist/mcp/session-state.d.ts +1 -1
  538. package/dist/mcp/session-state.js +4 -3
  539. package/dist/mcp/shared-gate.d.ts +3 -2
  540. package/dist/mcp/shared-gate.js +3 -2
  541. package/dist/mcp/stdio.d.ts +6 -3
  542. package/dist/mcp/stdio.js +59 -23
  543. package/dist/mcp/tool-args.d.ts +4 -1
  544. package/dist/mcp/tool-args.js +8 -3
  545. package/dist/mcp/tools.js +76 -32
  546. package/dist/objects/customer-notes.d.ts +12 -10
  547. package/dist/objects/customer-notes.js +21 -15
  548. package/dist/objects/decisions.d.ts +18 -10
  549. package/dist/objects/decisions.js +23 -17
  550. package/dist/objects/descriptor.js +2 -1
  551. package/dist/objects/fields.d.ts +4 -1
  552. package/dist/objects/fields.js +6 -2
  553. package/dist/objects/incidents.d.ts +14 -16
  554. package/dist/objects/incidents.js +29 -30
  555. package/dist/objects/lifecycle.d.ts +0 -4
  556. package/dist/objects/lifecycle.js +21 -24
  557. package/dist/objects/policies.d.ts +12 -16
  558. package/dist/objects/policies.js +17 -21
  559. package/dist/objects/processes.d.ts +16 -10
  560. package/dist/objects/processes.js +20 -15
  561. package/dist/objects/project-briefs.d.ts +13 -14
  562. package/dist/objects/project-briefs.js +33 -39
  563. package/dist/objects/skills.d.ts +10 -12
  564. package/dist/objects/skills.js +17 -22
  565. package/dist/postinstall.js +15 -7
  566. package/dist/predictions/planning-fallacy.d.ts +19 -6
  567. package/dist/predictions/planning-fallacy.js +4 -2
  568. package/dist/rerankers/clef.d.ts +8 -2
  569. package/dist/rerankers/clef.js +14 -9
  570. package/dist/rerankers/cross-encoder.d.ts +2 -1
  571. package/dist/rerankers/cross-encoder.js +19 -9
  572. package/dist/rerankers/index.js +2 -1
  573. package/dist/rerankers/jev.js +2 -1
  574. package/dist/rerankers/llm.d.ts +6 -2
  575. package/dist/rerankers/llm.js +8 -3
  576. package/dist/rerankers/remote.d.ts +3 -1
  577. package/dist/rerankers/remote.js +5 -2
  578. package/dist/rerankers/types.d.ts +6 -2
  579. package/dist/search/bm25-search.d.ts +3 -1
  580. package/dist/search/bm25-search.js +15 -2
  581. package/dist/search/boosts.js +4 -3
  582. package/dist/search/embed-memories.d.ts +12 -4
  583. package/dist/search/embed-memories.js +96 -58
  584. package/dist/search/engine.d.ts +11 -0
  585. package/dist/search/engine.js +14 -0
  586. package/dist/search/goal-boost.d.ts +10 -3
  587. package/dist/search/goal-boost.js +13 -6
  588. package/dist/search/hybrid-score.d.ts +4 -1
  589. package/dist/search/hybrid-score.js +4 -1
  590. package/dist/search/hybrid.d.ts +23 -8
  591. package/dist/search/hybrid.js +12 -7
  592. package/dist/search/multihop.js +14 -13
  593. package/dist/search/path-context.d.ts +10 -3
  594. package/dist/search/path-context.js +10 -3
  595. package/dist/search/physics-search.d.ts +9 -4
  596. package/dist/search/physics-search.js +38 -14
  597. package/dist/search/rerank.d.ts +2 -1
  598. package/dist/search/rerank.js +2 -1
  599. package/dist/search/rrf.d.ts +14 -5
  600. package/dist/search/rrf.js +11 -4
  601. package/dist/search/vector.d.ts +8 -2
  602. package/dist/search/vector.js +14 -8
  603. package/dist/server/auth.d.ts +19 -15
  604. package/dist/server/auth.js +68 -38
  605. package/dist/server/boot.d.ts +4 -1
  606. package/dist/server/boot.js +115 -67
  607. package/dist/server/client-ip.d.ts +17 -5
  608. package/dist/server/client-ip.js +56 -21
  609. package/dist/server/cursor.d.ts +10 -3
  610. package/dist/server/cursor.js +10 -3
  611. package/dist/server/deadline.d.ts +5 -2
  612. package/dist/server/deadline.js +10 -3
  613. package/dist/server/key-check-bounds.js +12 -4
  614. package/dist/server/lifecycle.d.ts +4 -1
  615. package/dist/server/lifecycle.js +10 -4
  616. package/dist/server/mcp-http.d.ts +2 -1
  617. package/dist/server/mcp-http.js +37 -22
  618. package/dist/server/rate-limit.d.ts +17 -5
  619. package/dist/server/rate-limit.js +55 -26
  620. package/dist/server/ready.js +7 -4
  621. package/dist/server/request.d.ts +15 -4
  622. package/dist/server/request.js +42 -15
  623. package/dist/server/route-checks.d.ts +4 -1
  624. package/dist/server/route-checks.js +8 -3
  625. package/dist/server/route-table.d.ts +8 -6
  626. package/dist/server/route-table.js +550 -97
  627. package/dist/server/routes/admin.d.ts +7 -7
  628. package/dist/server/routes/admin.js +36 -15
  629. package/dist/server/routes/customer-notes.d.ts +5 -5
  630. package/dist/server/routes/customer-notes.js +5 -4
  631. package/dist/server/routes/decisions.d.ts +5 -5
  632. package/dist/server/routes/decisions.js +12 -6
  633. package/dist/server/routes/incidents.d.ts +5 -5
  634. package/dist/server/routes/incidents.js +10 -4
  635. package/dist/server/routes/memories.d.ts +8 -8
  636. package/dist/server/routes/memories.js +12 -17
  637. package/dist/server/routes/object-routes.d.ts +8 -5
  638. package/dist/server/routes/object-routes.js +4 -2
  639. package/dist/server/routes/policies.d.ts +6 -6
  640. package/dist/server/routes/policies.js +11 -4
  641. package/dist/server/routes/predictions.d.ts +5 -5
  642. package/dist/server/routes/predictions.js +9 -4
  643. package/dist/server/routes/processes.d.ts +5 -5
  644. package/dist/server/routes/processes.js +15 -6
  645. package/dist/server/routes/project-briefs.d.ts +6 -6
  646. package/dist/server/routes/project-briefs.js +3 -2
  647. package/dist/server/routes/recall.d.ts +3 -3
  648. package/dist/server/routes/recall.js +21 -10
  649. package/dist/server/routes/skills.d.ts +6 -6
  650. package/dist/server/routes/skills.js +12 -4
  651. package/dist/server/server-detect.d.ts +24 -8
  652. package/dist/server/server-detect.js +57 -22
  653. package/dist/server/sleep-child.js +16 -10
  654. package/dist/server/sleep-offload.d.ts +8 -5
  655. package/dist/server/sleep-offload.js +40 -18
  656. package/dist/server/tls.d.ts +10 -2
  657. package/dist/server/tls.js +25 -5
  658. package/dist/server/types.d.ts +41 -24
  659. package/dist/server/validation.d.ts +4 -1
  660. package/dist/server/validation.js +22 -9
  661. package/dist/server.d.ts +17 -49
  662. package/dist/server.js +33 -40
  663. package/dist/sharing/global-store.d.ts +6 -12
  664. package/dist/sharing/global-store.js +8 -48
  665. package/dist/sharing/global-sync.d.ts +3 -1
  666. package/dist/sharing/global-sync.js +17 -7
  667. package/dist/sharing/project-merge.d.ts +25 -7
  668. package/dist/sharing/project-merge.js +49 -17
  669. package/dist/sharing/search-both.d.ts +8 -4
  670. package/dist/sharing/search-both.js +28 -14
  671. package/dist/sharing/share.d.ts +8 -4
  672. package/dist/sharing/share.js +40 -18
  673. package/dist/store/ambient.js +10 -5
  674. package/dist/store/audit-event.d.ts +2 -2
  675. package/dist/store/audit-event.js +8 -3
  676. package/dist/store/audit.d.ts +6 -3
  677. package/dist/store/audit.js +16 -6
  678. package/dist/store/auth.d.ts +4 -2
  679. package/dist/store/auth.js +63 -20
  680. package/dist/store/busy.d.ts +9 -0
  681. package/dist/store/busy.js +16 -0
  682. package/dist/store/candidates.d.ts +12 -5
  683. package/dist/store/candidates.js +90 -41
  684. package/dist/store/capture-write.d.ts +2 -1
  685. package/dist/store/capture-write.js +2 -1
  686. package/dist/store/card-detail.d.ts +4 -4
  687. package/dist/store/card-detail.js +15 -8
  688. package/dist/store/cards.d.ts +24 -10
  689. package/dist/store/cards.js +97 -63
  690. package/dist/store/compaction-caller.d.ts +2 -1
  691. package/dist/store/compaction-caller.js +2 -1
  692. package/dist/store/compactions-record.d.ts +14 -8
  693. package/dist/store/compactions-record.js +101 -37
  694. package/dist/store/compactions.js +35 -15
  695. package/dist/store/conflicts.d.ts +16 -5
  696. package/dist/store/conflicts.js +104 -48
  697. package/dist/store/connectors/dlq.d.ts +17 -5
  698. package/dist/store/connectors/dlq.js +58 -6
  699. package/dist/store/connectors/event-log.d.ts +122 -0
  700. package/dist/store/connectors/event-log.js +25 -0
  701. package/dist/store/connectors/github.d.ts +6 -3
  702. package/dist/store/connectors/github.js +30 -48
  703. package/dist/store/connectors/slack.d.ts +2 -1
  704. package/dist/store/connectors/slack.js +31 -47
  705. package/dist/store/dashboard-reads.d.ts +7 -3
  706. package/dist/store/dashboard-reads.js +32 -10
  707. package/dist/store/delete-and-batch.d.ts +17 -11
  708. package/dist/store/delete-and-batch.js +70 -28
  709. package/dist/store/delivery-recorder.d.ts +10 -7
  710. package/dist/store/delivery-recorder.js +70 -37
  711. package/dist/store/descendant-page.d.ts +2 -1
  712. package/dist/store/descendant-page.js +26 -10
  713. package/dist/store/diagnostics.d.ts +2 -1
  714. package/dist/store/diagnostics.js +2 -1
  715. package/dist/store/doctor-reads.d.ts +2 -1
  716. package/dist/store/doctor-reads.js +13 -5
  717. package/dist/store/dormant.d.ts +19 -11
  718. package/dist/store/dormant.js +45 -19
  719. package/dist/store/embeddings/index.d.ts +13 -9
  720. package/dist/store/embeddings/index.js +19 -12
  721. package/dist/store/entry-reads.d.ts +72 -21
  722. package/dist/store/entry-reads.js +215 -69
  723. package/dist/store/entry-row.d.ts +10 -6
  724. package/dist/store/entry-row.js +26 -14
  725. package/dist/store/entry-writes.d.ts +28 -13
  726. package/dist/store/entry-writes.js +61 -22
  727. package/dist/store/failure-log-at.js +1 -1
  728. package/dist/store/failure-log.d.ts +4 -2
  729. package/dist/store/failure-log.js +13 -6
  730. package/dist/store/gated-write.d.ts +3 -3
  731. package/dist/store/gated-write.js +3 -3
  732. package/dist/store/goals.d.ts +5 -4
  733. package/dist/store/goals.js +11 -12
  734. package/dist/store/graph-apply.d.ts +21 -0
  735. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  736. package/dist/store/graph-queue.d.ts +9 -6
  737. package/dist/store/graph-queue.js +15 -10
  738. package/dist/store/graph-reads.d.ts +16 -11
  739. package/dist/store/graph-reads.js +29 -19
  740. package/dist/store/graph-rows.d.ts +41 -3
  741. package/dist/store/graph-rows.js +10 -7
  742. package/dist/store/graph-view-rows.js +15 -7
  743. package/dist/store/graph-writes.d.ts +16 -10
  744. package/dist/store/graph-writes.js +59 -36
  745. package/dist/store/half-life.js +2 -2
  746. package/dist/store/handoffs.d.ts +13 -7
  747. package/dist/store/handoffs.js +44 -22
  748. package/dist/store/index-and-stats.d.ts +2 -2
  749. package/dist/store/index-and-stats.js +6 -5
  750. package/dist/store/index.d.ts +4 -2
  751. package/dist/store/index.js +2 -1
  752. package/dist/store/key-audit.d.ts +2 -1
  753. package/dist/store/key-audit.js +2 -1
  754. package/dist/store/key-writes.d.ts +2 -1
  755. package/dist/store/key-writes.js +9 -2
  756. package/dist/store/ledger-turn.d.ts +4 -1
  757. package/dist/store/ledger-turn.js +7 -2
  758. package/dist/store/mirrors.d.ts +11 -4
  759. package/dist/store/mirrors.js +96 -19
  760. package/dist/store/narrow.d.ts +6 -0
  761. package/dist/store/narrow.js +11 -0
  762. package/dist/store/open.d.ts +6 -3
  763. package/dist/store/open.js +20 -10
  764. package/dist/store/pilot-arm.d.ts +2 -1
  765. package/dist/store/pilot-arm.js +18 -6
  766. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  767. package/dist/store/planning-fallacy-evidence.js +8 -5
  768. package/dist/store/port/agent-import.d.ts +62 -0
  769. package/dist/store/port/agent-import.js +2 -0
  770. package/dist/store/port/consolidation.d.ts +129 -0
  771. package/dist/store/port/consolidation.js +2 -0
  772. package/dist/store/port/learning.d.ts +19 -0
  773. package/dist/store/port/learning.js +2 -0
  774. package/dist/store/port/local-files.d.ts +18 -0
  775. package/dist/store/port/local-files.js +2 -0
  776. package/dist/store/port/promotion.d.ts +20 -0
  777. package/dist/store/port/promotion.js +3 -0
  778. package/dist/store/port-groups.d.ts +160 -0
  779. package/dist/store/port-groups.js +2 -0
  780. package/dist/store/port.d.ts +261 -219
  781. package/dist/store/port.js +3 -9
  782. package/dist/store/predictions.d.ts +14 -10
  783. package/dist/store/predictions.js +37 -17
  784. package/dist/store/project-tags.d.ts +4 -1
  785. package/dist/store/project-tags.js +16 -5
  786. package/dist/store/quality-repair.d.ts +8 -4
  787. package/dist/store/quality-repair.js +53 -20
  788. package/dist/store/quarantine.d.ts +1 -0
  789. package/dist/store/quarantine.js +23 -9
  790. package/dist/store/raw-archive.d.ts +5 -4
  791. package/dist/store/raw-archive.js +11 -10
  792. package/dist/store/recall-trace.d.ts +22 -17
  793. package/dist/store/recall-trace.js +128 -64
  794. package/dist/store/rejected-values.d.ts +15 -10
  795. package/dist/store/rejected-values.js +46 -20
  796. package/dist/store/rejection.d.ts +12 -11
  797. package/dist/store/rejection.js +18 -19
  798. package/dist/store/report-reads.d.ts +2 -1
  799. package/dist/store/report-reads.js +2 -1
  800. package/dist/store/rows.d.ts +7 -5
  801. package/dist/store/rows.js +20 -13
  802. package/dist/store/rule-sql.d.ts +7 -3
  803. package/dist/store/rule-sql.js +26 -13
  804. package/dist/store/search-rows.d.ts +16 -11
  805. package/dist/store/search-rows.js +54 -32
  806. package/dist/store/sessions.d.ts +12 -10
  807. package/dist/store/sessions.js +40 -21
  808. package/dist/store/set-aside.d.ts +2 -2
  809. package/dist/store/set-aside.js +18 -5
  810. package/dist/store/sqlite/agent-import.d.ts +3 -0
  811. package/dist/store/sqlite/agent-import.js +77 -0
  812. package/dist/store/sqlite/cards-group.d.ts +6 -0
  813. package/dist/store/sqlite/cards-group.js +37 -0
  814. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  815. package/dist/store/sqlite/conflicts-group.js +18 -0
  816. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  817. package/dist/store/sqlite/connector-events-group.js +17 -6
  818. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  819. package/dist/store/sqlite/connector-writes-group.js +12 -5
  820. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  821. package/dist/store/sqlite/consolidation-group.js +64 -0
  822. package/dist/store/sqlite/dag-reads-group.js +1 -1
  823. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  824. package/dist/store/sqlite/dormant-group.js +29 -0
  825. package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
  826. package/dist/store/sqlite/entry-writes-group.js +37 -14
  827. package/dist/store/sqlite/error-codec.d.ts +4 -2
  828. package/dist/store/sqlite/error-codec.js +32 -10
  829. package/dist/store/sqlite/executor-counts.js +2 -1
  830. package/dist/store/sqlite/executor.d.ts +8 -3
  831. package/dist/store/sqlite/executor.js +56 -18
  832. package/dist/store/sqlite/global-promote.d.ts +5 -0
  833. package/dist/store/sqlite/global-promote.js +48 -0
  834. package/dist/store/sqlite/goals-group.d.ts +6 -0
  835. package/dist/store/sqlite/goals-group.js +23 -0
  836. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  837. package/dist/store/sqlite/graph-reads-group.js +2 -1
  838. package/dist/store/sqlite/held-connection.d.ts +8 -0
  839. package/dist/store/sqlite/held-connection.js +34 -7
  840. package/dist/store/sqlite/last-recall-group.d.ts +15 -0
  841. package/dist/store/sqlite/last-recall-group.js +62 -0
  842. package/dist/store/sqlite/learning-group.d.ts +4 -0
  843. package/dist/store/sqlite/learning-group.js +17 -0
  844. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  845. package/dist/store/sqlite/maintenance-groups.js +61 -0
  846. package/dist/store/sqlite/object-rows.d.ts +6 -3
  847. package/dist/store/sqlite/object-rows.js +34 -5
  848. package/dist/store/sqlite/objects-group.d.ts +5 -4
  849. package/dist/store/sqlite/objects-group.js +97 -38
  850. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  851. package/dist/store/sqlite/predictions-group.js +4 -2
  852. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  853. package/dist/store/sqlite/promotion-group.js +10 -0
  854. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  855. package/dist/store/sqlite/quarantine-group.js +4 -2
  856. package/dist/store/sqlite/reports-group.d.ts +6 -0
  857. package/dist/store/sqlite/reports-group.js +33 -0
  858. package/dist/store/sqlite/request-scope.d.ts +6 -0
  859. package/dist/store/sqlite/request-scope.js +18 -0
  860. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  861. package/dist/store/sqlite/sessions-group.js +46 -0
  862. package/dist/store/sqlite/store.d.ts +22 -18
  863. package/dist/store/sqlite/store.js +95 -33
  864. package/dist/store/sqlite/vector-pack.js +2 -1
  865. package/dist/store/sqlite/vector-reads-group.js +2 -1
  866. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  867. package/dist/store/sqlite/worker-jobs.js +19 -7
  868. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  869. package/dist/store/sqlite/worker-ops.js +6 -3
  870. package/dist/store/sqlite/worker-store.d.ts +4 -3
  871. package/dist/store/sqlite/worker-store.js +24 -14
  872. package/dist/store/summaries.d.ts +25 -11
  873. package/dist/store/summaries.js +84 -27
  874. package/dist/store/summary-dirty.d.ts +2 -1
  875. package/dist/store/summary-dirty.js +2 -1
  876. package/dist/store/tenant.d.ts +3 -2
  877. package/dist/store/tenant.js +5 -4
  878. package/dist/store/token-ledger-rows.js +8 -4
  879. package/dist/store/token-ledger.d.ts +19 -13
  880. package/dist/store/token-ledger.js +27 -14
  881. package/dist/store/tombstone-checks.d.ts +4 -1
  882. package/dist/store/tombstone-checks.js +10 -1
  883. package/dist/store/usage-reports.js +2 -1
  884. package/dist/store/vector-index.d.ts +8 -5
  885. package/dist/store/vector-index.js +28 -11
  886. package/dist/store/working-memory.d.ts +6 -4
  887. package/dist/store/working-memory.js +14 -9
  888. package/dist/support-bundle.js +10 -5
  889. package/dist/trust/quarantine.d.ts +1 -2
  890. package/dist/trust/quarantine.js +1 -5
  891. package/dist/trust/reject-flow.d.ts +12 -3
  892. package/dist/trust/reject-flow.js +12 -4
  893. package/dist/util/anthropic-messages.d.ts +7 -2
  894. package/dist/util/anthropic-messages.js +18 -7
  895. package/dist/util/atomic-write.d.ts +8 -3
  896. package/dist/util/atomic-write.js +36 -21
  897. package/dist/util/compaction-items.d.ts +4 -1
  898. package/dist/util/compaction-items.js +8 -2
  899. package/dist/util/crash-handlers.d.ts +7 -2
  900. package/dist/util/crash-handlers.js +13 -4
  901. package/dist/util/env.d.ts +26 -5
  902. package/dist/util/env.js +87 -25
  903. package/dist/util/format.d.ts +2 -0
  904. package/dist/util/format.js +4 -0
  905. package/dist/util/home-path.js +12 -6
  906. package/dist/util/hook-payload.d.ts +3 -1
  907. package/dist/util/hook-payload.js +3 -1
  908. package/dist/util/http-retry.d.ts +12 -6
  909. package/dist/util/http-retry.js +16 -6
  910. package/dist/util/http-util.d.ts +20 -5
  911. package/dist/util/http-util.js +28 -9
  912. package/dist/util/json.d.ts +4 -1
  913. package/dist/util/json.js +4 -1
  914. package/dist/util/keyset.js +2 -1
  915. package/dist/util/limits.js +4 -2
  916. package/dist/util/log.d.ts +13 -5
  917. package/dist/util/log.js +29 -6
  918. package/dist/util/net.d.ts +5 -0
  919. package/dist/util/net.js +19 -0
  920. package/dist/util/real-path.d.ts +2 -1
  921. package/dist/util/real-path.js +4 -3
  922. package/dist/util/request-scope.d.ts +16 -4
  923. package/dist/util/request-scope.js +19 -6
  924. package/dist/util/same-text.d.ts +10 -3
  925. package/dist/util/same-text.js +10 -3
  926. package/dist/util/secret-detect.d.ts +24 -7
  927. package/dist/util/secret-detect.js +49 -14
  928. package/dist/util/spawn-argv.d.ts +11 -0
  929. package/dist/util/spawn-argv.js +66 -0
  930. package/dist/util/sql.d.ts +3 -0
  931. package/dist/util/sql.js +6 -0
  932. package/dist/util/sqlite-blocked.d.ts +15 -4
  933. package/dist/util/sqlite-blocked.js +19 -6
  934. package/dist/util/stored-json.d.ts +4 -1
  935. package/dist/util/stored-json.js +6 -2
  936. package/dist/util/stream-tee.d.ts +2 -1
  937. package/dist/util/stream-tee.js +8 -5
  938. package/dist/util/transcript-tail.d.ts +4 -1
  939. package/dist/util/transcript-tail.js +4 -1
  940. package/dist/util/vector-codec.d.ts +4 -0
  941. package/dist/util/vector-codec.js +15 -0
  942. package/dist/util/version.d.ts +8 -3
  943. package/dist/util/version.js +8 -3
  944. package/dist/util/write-budget.d.ts +7 -2
  945. package/dist/util/write-budget.js +5 -2
  946. package/dist/util/yaml.d.ts +4 -1
  947. package/dist/util/yaml.js +4 -1
  948. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  949. package/extensions/openclaw-plugin/package.json +1 -1
  950. package/openclaw.plugin.json +1 -1
  951. package/package.json +4 -1
  952. package/scripts/postinstall.cjs +3 -1
  953. package/dist/api/audit.js +0 -56
  954. package/dist/api/cards.d.ts +0 -42
  955. package/dist/api/conflicts.d.ts +0 -28
  956. package/dist/api/conflicts.js +0 -61
  957. package/dist/api/dormant.d.ts +0 -14
  958. package/dist/api/dormant.js +0 -58
  959. package/dist/api/goals.d.ts +0 -18
  960. package/dist/api/graph.d.ts +0 -8
  961. package/dist/api/graph.js +0 -7
  962. package/dist/api/learn.js +0 -124
  963. package/dist/api/memories.d.ts +0 -23
  964. package/dist/api/memories.js +0 -46
  965. package/dist/api/objects.d.ts +0 -9
  966. package/dist/api/on-store.d.ts +0 -16
  967. package/dist/api/on-store.js +0 -38
  968. package/dist/api/outcome.d.ts +0 -19
  969. package/dist/api/outcome.js +0 -21
  970. package/dist/api/predictions.d.ts +0 -11
  971. package/dist/api/promote.d.ts +0 -36
  972. package/dist/api/promote.js +0 -65
  973. package/dist/api/recall-core.d.ts +0 -4
  974. package/dist/api/recall-core.js +0 -120
  975. package/dist/api/recall-finish.d.ts +0 -53
  976. package/dist/api/recall-finish.js +0 -30
  977. package/dist/api/recall-history.d.ts +0 -64
  978. package/dist/api/recall-history.js +0 -159
  979. package/dist/api/recall-record.d.ts +0 -43
  980. package/dist/api/recall-record.js +0 -78
  981. package/dist/api/recall-request.js +0 -121
  982. package/dist/api/recall.d.ts +0 -6
  983. package/dist/api/refine.d.ts +0 -7
  984. package/dist/api/refine.js +0 -10
  985. package/dist/api/session-owners.d.ts +0 -4
  986. package/dist/api/session-owners.js +0 -17
  987. package/dist/api/sleep-run.d.ts +0 -26
  988. package/dist/api/sleep.js +0 -10
  989. package/dist/cli/lenient-id.d.ts +0 -2
  990. package/dist/cli/lenient-id.js +0 -13
  991. package/dist/graph/write.d.ts +0 -14
  992. package/dist/store/sqlite/busy.d.ts +0 -3
  993. package/dist/store/sqlite/busy.js +0 -8
  994. package/dist/store/sqlite/local.d.ts +0 -21
  995. package/dist/store/sqlite/local.js +0 -39
@@ -1,12 +1,16 @@
1
- /** Project = nearest ancestor of cwd with `.hippo` (else `.git`); home and the temp root never are, and no marker means user-global (empty name).
2
- * Name: `.hippo-project.json`, else the normalised `origin`, else the folder name. Must not import shared.ts / store.ts / api/index.ts (cycle). */
1
+ /** Project = nearest ancestor of cwd with `.hippo` (else `.git`); home and the temp root never are, and no marker means
2
+ * user-global (empty name).
3
+ * Name: `.hippo-project.json`, else the normalised `origin`, else the folder name. Must not import shared.ts /
4
+ * store.ts / api/index.ts (cycle). */
3
5
  /** The project a working directory belongs to. */
4
6
  export interface ProjectIdentity {
5
7
  /** Realpath-resolved root directory of the project (the start dir when not in a project). */
6
8
  root: string;
7
- /** The project id rows are stamped with: the project file's id, the origin remote, or legacyName; '' outside a project. */
9
+ /** The project id rows are stamped with: the project file's id, the origin remote, or legacyName; '' outside a
10
+ * project. */
8
11
  name: string;
9
- /** The folder rule rows written before ids carry: the root's lowercased basename, or its repo's for a linked worktree with no `.hippo`. */
12
+ /** The folder rule rows written before ids carry: the root's lowercased basename, or its repo's for a linked
13
+ * worktree with no `.hippo`. */
10
14
  legacyName: string;
11
15
  /** Every other name this root resolves to (the project file id, the origin remote even
12
16
  * with the rule off, legacyName), so rows written under an earlier id stay readable. */
@@ -22,7 +26,8 @@ export interface ResolveProjectIdentityOpts {
22
26
  }
23
27
  /** Clear the per-process identity cache and the remote switch it read (test seam). */
24
28
  export declare function clearProjectIdentityCache(): void;
25
- /** Resolves the project identity for a working directory (default process.cwd()); results are cached per resolved input path. */
29
+ /** Resolves the project identity for a working directory (default process.cwd()); results are cached per resolved
30
+ * input path. */
26
31
  export declare function resolveProjectIdentity(cwd?: string, opts?: ResolveProjectIdentityOpts): ProjectIdentity;
27
32
  /** Nearest ancestor `.hippo` below home and the temp root (never projects; on Windows the temp root sits inside home).
28
33
  * Everything is realpath'd so a symlinked temp root or cwd still matches its bound. */
@@ -38,29 +43,41 @@ export declare function projectId(project: ProjectRef): string;
38
43
  export declare function projectNames(project: ProjectRef): readonly string[];
39
44
  export declare const MAX_PROJECT_ALIASES = 10;
40
45
  export declare const MCP_PROJECT_SCOPED_HEADER = "X-Hippo-Project-Scoped";
41
- /** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids: rows match
42
- * verbatim, so a rewrite would split a project. Inner spaces pass, since a checkout with no remote is named by its folder. */
46
+ /** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids:
47
+ * rows match
48
+ * verbatim, so a rewrite would split a project. Inner spaces pass, since a checkout with no remote is named by its
49
+ * folder. */
43
50
  export declare function assertCallerProject(project: {
44
51
  readonly name: string;
45
52
  readonly aliases?: readonly string[];
46
53
  }): void;
47
54
  /** `origin_project IN (?, ...)` with one placeholder per name; an empty list matches nothing. */
48
55
  export declare function originInSql(names: readonly string[], column?: string): string;
49
- /** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts everything in scope;
50
- * NULL/undefined origin (legacy row, or a shared-store write naming none) counts as cross-project: deny by default for a security partition. */
56
+ /** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts
57
+ * everything in scope;
58
+ * NULL/undefined origin (legacy row, or a shared-store write naming none) counts as cross-project: deny by default
59
+ * for a security partition. */
51
60
  export declare function classifyOriginProject(origin: string | null | undefined, current: ProjectRef): 'project' | 'user-global' | 'cross-project';
52
- /** The global Hippo store directory ($HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo); getGlobalRoot (sharing/global-store.ts) returns it.
61
+ /** The global Hippo store directory ($HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo); getGlobalRoot
62
+ * (sharing/global-store.ts) returns it.
53
63
  * Leaf module so store migrations can use it without importing sharing/ (store cycle). */
54
64
  export declare function resolveGlobalRootDir(): string;
55
- /** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed HIPPO_HOME) still backfills as
56
- * user-global ('') instead of being stamped with the surrounding repo's name, which would hide the global corpus from every project. */
65
+ /** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed
66
+ * HIPPO_HOME) still backfills as
67
+ * user-global ('') instead of being stamped with the surrounding repo's name, which would hide the global corpus
68
+ * from every project. */
57
69
  export declare function isGlobalStoreRoot(p: string): boolean;
58
- /** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the owning project; the home dir basename
59
- * maps to '' (user-global). Returns null without origin evidence. Pure string logic, since recorded paths may no longer exist. */
70
+ /** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the
71
+ * owning project; the home dir basename
72
+ * maps to '' (user-global). Returns null without origin evidence. Pure string logic, since recorded paths may no
73
+ * longer exist. */
60
74
  export declare function originFromSource(source: string | null | undefined, homeName?: string): string | null;
61
- /** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere) outside a project.
62
- * NULL means no known project: a legacy row with no evidence, or a write to a shared store that named none; ambient context treats it as deny. */
75
+ /** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere)
76
+ * outside a project.
77
+ * NULL means no known project: a legacy row with no evidence, or a write to a shared store that named none; ambient
78
+ * context treats it as deny. */
63
79
  export declare function deriveOriginProject(cwd?: string, opts?: ResolveProjectIdentityOpts): string;
64
- /** The origin for a write that names none: NULL on a shared store, whose folder is no caller's project, else the folder's project. */
80
+ /** The origin for a write that names none: NULL on a shared store, whose folder is no caller's project, else the
81
+ * folder's project. */
65
82
  export declare function fallbackOrigin(hippoRoot: string): string | null;
66
83
  //# sourceMappingURL=project-identity.d.ts.map
@@ -5,9 +5,10 @@ import * as path from 'path';
5
5
  import { BadRequestError } from './api-errors.js';
6
6
  import { isSharedStore, loadConfig } from './config.js';
7
7
  import { MAX_ID_LEN } from '../util/limits.js';
8
- import { errorMessage, log } from '../util/log.js';
8
+ import { errorMessage, log, errorFields } from '../util/log.js';
9
9
  import { originRemoteId, projectFileId } from './project-remote.js';
10
10
  import { realpathOrResolve } from '../util/real-path.js';
11
+ import { placeholders } from '../util/sql.js';
11
12
  const MAX_WALK_DEPTH = 64;
12
13
  const identityCache = new Map();
13
14
  let remoteSwitch = null;
@@ -19,8 +20,9 @@ export function clearProjectIdentityCache() {
19
20
  // The global store's config only: a per-store switch would stamp one checkout two ways.
20
21
  function remoteRuleOn() {
21
22
  const globalRoot = resolveGlobalRootDir();
22
- if (remoteSwitch?.globalRoot !== globalRoot)
23
+ if (remoteSwitch?.globalRoot !== globalRoot) {
23
24
  remoteSwitch = { globalRoot, on: loadConfig(globalRoot).projectIdentity.remote };
25
+ }
24
26
  return remoteSwitch.on;
25
27
  }
26
28
  /** The id a root names itself by plus every rung that resolves; only the root's own
@@ -56,11 +58,13 @@ function isDirectoryAt(p) {
56
58
  return fs.statSync(p).isDirectory();
57
59
  }
58
60
  catch (err) {
59
- log.debug(`project identity: no marker at ${p}: ${errorMessage(err)}`);
61
+ // Most folders on the walk up hold no marker, so a failed stat is the normal answer.
62
+ log.debug(`project identity: no marker at ${p}: ${errorMessage(err)}`, errorFields(err));
60
63
  return false;
61
64
  }
62
65
  }
63
- /** Resolves the project identity for a working directory (default process.cwd()); results are cached per resolved input path. */
66
+ /** Resolves the project identity for a working directory (default process.cwd()); results are cached per resolved
67
+ * input path. */
64
68
  export function resolveProjectIdentity(cwd, opts) {
65
69
  const startInput = path.resolve(cwd ?? process.cwd());
66
70
  const cacheable = !opts?.homeDir && !opts?.stopDir;
@@ -179,14 +183,17 @@ export function projectNames(project) {
179
183
  // Each project name is matched against every candidate row, so the caller's list stays short.
180
184
  export const MAX_PROJECT_ALIASES = 10;
181
185
  export const MCP_PROJECT_SCOPED_HEADER = 'X-Hippo-Project-Scoped';
182
- /** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids: rows match
183
- * verbatim, so a rewrite would split a project. Inner spaces pass, since a checkout with no remote is named by its folder. */
186
+ /** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids:
187
+ * rows match
188
+ * verbatim, so a rewrite would split a project. Inner spaces pass, since a checkout with no remote is named by its
189
+ * folder. */
184
190
  export function assertCallerProject(project) {
185
191
  const { name, aliases = [] } = project;
186
192
  if (name.trim() === '')
187
193
  throw new BadRequestError('project name must not be blank');
188
- if (aliases.length > MAX_PROJECT_ALIASES)
194
+ if (aliases.length > MAX_PROJECT_ALIASES) {
189
195
  throw new BadRequestError(`project aliases: at most ${MAX_PROJECT_ALIASES}`);
196
+ }
190
197
  if ([name, ...aliases].some((n) => n.length > MAX_ID_LEN)) {
191
198
  throw new BadRequestError(`project names: at most ${MAX_ID_LEN} characters each`);
192
199
  }
@@ -196,10 +203,12 @@ export function assertCallerProject(project) {
196
203
  }
197
204
  /** `origin_project IN (?, ...)` with one placeholder per name; an empty list matches nothing. */
198
205
  export function originInSql(names, column = 'origin_project') {
199
- return names.length === 0 ? '0' : `${column} IN (${names.map(() => '?').join(', ')})`;
206
+ return names.length === 0 ? '0' : `${column} IN (${placeholders(names.length)})`;
200
207
  }
201
- /** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts everything in scope;
202
- * NULL/undefined origin (legacy row, or a shared-store write naming none) counts as cross-project: deny by default for a security partition. */
208
+ /** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts
209
+ * everything in scope;
210
+ * NULL/undefined origin (legacy row, or a shared-store write naming none) counts as cross-project: deny by default
211
+ * for a security partition. */
203
212
  export function classifyOriginProject(origin, current) {
204
213
  if (projectId(current) === '')
205
214
  return 'project';
@@ -209,7 +218,8 @@ export function classifyOriginProject(origin, current) {
209
218
  return 'user-global';
210
219
  return projectNames(current).includes(origin) ? 'project' : 'cross-project';
211
220
  }
212
- /** The global Hippo store directory ($HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo); getGlobalRoot (sharing/global-store.ts) returns it.
221
+ /** The global Hippo store directory ($HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo); getGlobalRoot
222
+ * (sharing/global-store.ts) returns it.
213
223
  * Leaf module so store migrations can use it without importing sharing/ (store cycle). */
214
224
  export function resolveGlobalRootDir() {
215
225
  const hippoHome = envHippoHome();
@@ -220,13 +230,17 @@ export function resolveGlobalRootDir() {
220
230
  return path.join(xdgData, 'hippo');
221
231
  return path.join(os.homedir(), '.hippo');
222
232
  }
223
- /** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed HIPPO_HOME) still backfills as
224
- * user-global ('') instead of being stamped with the surrounding repo's name, which would hide the global corpus from every project. */
233
+ /** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed
234
+ * HIPPO_HOME) still backfills as
235
+ * user-global ('') instead of being stamped with the surrounding repo's name, which would hide the global corpus
236
+ * from every project. */
225
237
  export function isGlobalStoreRoot(p) {
226
238
  return samePath(realpathOrResolve(path.resolve(p)), realpathOrResolve(resolveGlobalRootDir()));
227
239
  }
228
- /** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the owning project; the home dir basename
229
- * maps to '' (user-global). Returns null without origin evidence. Pure string logic, since recorded paths may no longer exist. */
240
+ /** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the
241
+ * owning project; the home dir basename
242
+ * maps to '' (user-global). Returns null without origin evidence. Pure string logic, since recorded paths may no
243
+ * longer exist. */
230
244
  export function originFromSource(source, homeName) {
231
245
  if (!source)
232
246
  return null;
@@ -247,12 +261,15 @@ export function originFromSource(source, homeName) {
247
261
  }
248
262
  return null;
249
263
  }
250
- /** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere) outside a project.
251
- * NULL means no known project: a legacy row with no evidence, or a write to a shared store that named none; ambient context treats it as deny. */
264
+ /** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere)
265
+ * outside a project.
266
+ * NULL means no known project: a legacy row with no evidence, or a write to a shared store that named none; ambient
267
+ * context treats it as deny. */
252
268
  export function deriveOriginProject(cwd, opts) {
253
269
  return resolveProjectIdentity(cwd, opts).name;
254
270
  }
255
- /** The origin for a write that names none: NULL on a shared store, whose folder is no caller's project, else the folder's project. */
271
+ /** The origin for a write that names none: NULL on a shared store, whose folder is no caller's project, else the
272
+ * folder's project. */
256
273
  export function fallbackOrigin(hippoRoot) {
257
274
  return isSharedStore(hippoRoot) ? null : deriveOriginProject(path.dirname(path.resolve(hippoRoot)));
258
275
  }
@@ -1,12 +1,16 @@
1
- /** The config file git reads for a checkout: `.git/config`, a linked worktree's `<commondir>/config`, a submodule's `<gitdir>/config`. */
1
+ /** The config file git reads for a checkout: `.git/config`, a linked
2
+ * worktree's `<commondir>/config`, a submodule's `<gitdir>/config`. */
2
3
  export declare function gitConfigPath(gitRoot: string): string | null;
3
- /** `remote.origin.url` from a config file's text, the first value as git fetch uses; the subsection name is case-sensitive. */
4
+ /** `remote.origin.url` from a config file's text, the first value
5
+ * as git fetch uses; the subsection name is case-sensitive. */
4
6
  export declare function originUrlFromConfig(text: string): string | null;
5
- /** `host/path` for a network remote, so ssh, scp and https forms agree; null for a local path, which would put a user path into rows. */
7
+ /** `host/path` for a network remote, so ssh, scp and https forms agree; null for a local path, which would put a
8
+ * user path into rows. */
6
9
  export declare function normaliseRemote(url: string): string | null;
7
10
  /** The normalised origin of the checkout rooted at gitRoot, or null when it has none a project can be named by. */
8
11
  export declare function originRemoteId(gitRoot: string): string | null;
9
12
  export declare const PROJECT_FILE = ".hippo-project.json";
10
- /** The `id` a team committed in `.hippo-project.json` at root, lowercased like every project name; null when absent or unusable. */
13
+ /** The `id` a team committed in `.hippo-project.json` at root,
14
+ * lowercased like every project name; null when absent or unusable. */
11
15
  export declare function projectFileId(root: string): string | null;
12
16
  //# sourceMappingURL=project-remote.d.ts.map
@@ -1,9 +1,11 @@
1
- // A checkout's `origin` remote, read from its git config file and normalised into a project id; no git process, so the prompt hook can call it.
1
+ // A checkout's `origin` remote, read from its git config file and normalised into a project id; no git process, so the
2
+ // prompt hook can call it.
2
3
  import * as fs from 'fs';
3
4
  import * as path from 'path';
4
5
  import { isObjectLike, isStringValue } from './capture-contract.js';
5
- import { errorMessage, log } from '../util/log.js';
6
- /** The config file git reads for a checkout: `.git/config`, a linked worktree's `<commondir>/config`, a submodule's `<gitdir>/config`. */
6
+ import { errorMessage, log, errorFields } from '../util/log.js';
7
+ /** The config file git reads for a checkout: `.git/config`, a linked
8
+ * worktree's `<commondir>/config`, a submodule's `<gitdir>/config`. */
7
9
  export function gitConfigPath(gitRoot) {
8
10
  const marker = path.join(gitRoot, '.git');
9
11
  try {
@@ -20,11 +22,13 @@ export function gitConfigPath(gitRoot) {
20
22
  return path.join(path.resolve(linkDir, fs.readFileSync(commondir, 'utf8').trim()), 'config');
21
23
  }
22
24
  catch (err) {
23
- log.debug(`project remote: no git config for ${gitRoot}: ${errorMessage(err)}`);
25
+ // A folder with no readable .git has no remote to name a project by, so the caller falls back to the folder name.
26
+ log.debug(`project remote: no git config for ${gitRoot}: ${errorMessage(err)}`, errorFields(err));
24
27
  return null;
25
28
  }
26
29
  }
27
- /** The text of a `.git` file, or null when `.git` is a folder; one descriptor answers both, so the path cannot change in between. */
30
+ /** The text of a `.git` file, or null when `.git` is a folder; one descriptor answers both, so the path cannot
31
+ * change in between. */
28
32
  function gitFilePointer(marker) {
29
33
  const fd = fs.openSync(marker, 'r');
30
34
  try {
@@ -34,7 +38,8 @@ function gitFilePointer(marker) {
34
38
  fs.closeSync(fd);
35
39
  }
36
40
  }
37
- /** One config value with git's quoting: `"` toggles quoting, backslash escapes, and an unquoted `#` or `;` starts a comment. */
41
+ /** One config value with git's quoting: `"` toggles quoting,
42
+ * backslash escapes, and an unquoted `#` or `;` starts a comment. */
38
43
  function configValue(raw) {
39
44
  let out = '';
40
45
  let quoted = false;
@@ -58,7 +63,8 @@ function configValue(raw) {
58
63
  }
59
64
  const SECTION = /^\[\s*([A-Za-z0-9.-]+)(?:\s+"((?:[^"\\]|\\.)*)")?\s*\](.*)$/;
60
65
  const ENTRY = /^([A-Za-z][A-Za-z0-9-]*)\s*(?:=(.*))?$/;
61
- /** `remote.origin.url` from a config file's text, the first value as git fetch uses; the subsection name is case-sensitive. */
66
+ /** `remote.origin.url` from a config file's text, the first value
67
+ * as git fetch uses; the subsection name is case-sensitive. */
62
68
  export function originUrlFromConfig(text) {
63
69
  let inOrigin = false;
64
70
  for (const raw of text.split(/\r?\n/)) {
@@ -89,7 +95,8 @@ function azureDevOps(hostPath) {
89
95
  const https = legacy ? `dev.azure.com/${legacy[1]}/${legacy[2]}` : hostPath;
90
96
  return https.startsWith('dev.azure.com/') ? https.replace('/_git/', '/') : https;
91
97
  }
92
- /** `host/path` for a network remote, so ssh, scp and https forms agree; null for a local path, which would put a user path into rows. */
98
+ /** `host/path` for a network remote, so ssh, scp and https forms agree; null for a local path, which would put a
99
+ * user path into rows. */
93
100
  export function normaliseRemote(url) {
94
101
  // A query or fragment can carry a token (`?private_token=`) and never names the repo.
95
102
  const u = url.trim().replace(/[?#].*$/, '');
@@ -107,9 +114,16 @@ export function normaliseRemote(url) {
107
114
  return null;
108
115
  hostPath = `${scp[1]}/${scp[2]}`;
109
116
  }
110
- const tidy = hostPath.toLowerCase().replace(/\\/g, '/').replace(/\/{2,}/g, '/').replace(/\/+$/, '').replace(/\.git$/, '').replace(/\/+$/, '');
117
+ const tidy = hostPath
118
+ .toLowerCase()
119
+ .replace(/\\/g, '/')
120
+ .replace(/\/{2,}/g, '/')
121
+ .replace(/\/+$/, '')
122
+ .replace(/\.git$/, '')
123
+ .replace(/\/+$/, '');
111
124
  const id = azureDevOps(tidy);
112
- // A colon would break the `shared:<project>:` source format; whitespace means this was no URL; an `@` left in a path may be a credential.
125
+ // A colon would break the `shared:<project>:` source format; whitespace means this was no URL; an `@` left in a path
126
+ // may be a credential.
113
127
  return /^[^/]+\/./.test(id) && !/[:\s@]/.test(id) ? id : null;
114
128
  }
115
129
  /** The normalised origin of the checkout rooted at gitRoot, or null when it has none a project can be named by. */
@@ -122,12 +136,14 @@ export function originRemoteId(gitRoot) {
122
136
  return url === null ? null : normaliseRemote(url);
123
137
  }
124
138
  catch (err) {
125
- log.debug(`project remote: ${file} not read: ${errorMessage(err)}`);
139
+ // A checkout whose .git holds no config has no origin; the project is then named by its folder.
140
+ log.debug(`project remote: ${file} not read: ${errorMessage(err)}`, errorFields(err));
126
141
  return null;
127
142
  }
128
143
  }
129
144
  export const PROJECT_FILE = '.hippo-project.json';
130
- /** The `id` a team committed in `.hippo-project.json` at root, lowercased like every project name; null when absent or unusable. */
145
+ /** The `id` a team committed in `.hippo-project.json` at root,
146
+ * lowercased like every project name; null when absent or unusable. */
131
147
  export function projectFileId(root) {
132
148
  const file = path.join(root, PROJECT_FILE);
133
149
  if (!fs.existsSync(file))
@@ -139,10 +155,11 @@ export function projectFileId(root) {
139
155
  // No slash: a committed file in an untrusted clone must not claim a remote-shaped id like `github.com/acme/api`.
140
156
  if (id !== '' && id.length <= 200 && !/[:\s/\\]/.test(id))
141
157
  return id;
142
- log.warn(`${file}: "id" must be a non-empty string with no colon, slash or spaces; using the remote or folder name instead`);
158
+ log.warn(`${file}: "id" must be a non-empty string with no colon, slash or spaces; ` +
159
+ 'using the remote or folder name instead');
143
160
  }
144
161
  catch (err) {
145
- log.warn(`${file} not read: ${errorMessage(err)}; using the remote or folder name instead`);
162
+ log.warn(`${file} not read: ${errorMessage(err)}; using the remote or folder name instead`, errorFields(err));
146
163
  }
147
164
  return null;
148
165
  }
@@ -1,14 +1,28 @@
1
- /** Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to searchBothHybrid's candidate loads without an
2
- * import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests importing `passesScopeFilterForRecall`). */
1
+ /**
2
+ * Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to
3
+ * searchBothHybrid's candidate loads without an
4
+ * import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests
5
+ * importing `passesScopeFilterForRecall`).
6
+ */
3
7
  import { ForbiddenError } from './api-errors.js';
4
- /** Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in `loadSearchRows` and by
5
- * `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the module-load assertion below pins this). */
8
+ /**
9
+ * Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in
10
+ * `loadSearchRows` and by
11
+ * `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the
12
+ * module-load assertion below pins this).
13
+ */
6
14
  export declare const RECALL_DEFAULT_DENY_SCOPES: readonly ["unknown:legacy"];
7
- /** @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at the call site, so the empty case
15
+ /**
16
+ * @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at
17
+ * the call site, so the empty case
8
18
  * is reachable and testable. */
9
19
  export declare function assertNonEmpty<T>(arr: readonly T[], name: string): void;
10
- /** Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not `slack:public:x`, null, '',
11
- * 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector work cannot drift. */
20
+ /**
21
+ * Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not
22
+ * `slack:public:x`, null, '',
23
+ * 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector
24
+ * work cannot drift.
25
+ */
12
26
  export declare const PRIVATE_SCOPE_RE: RegExp;
13
27
  /** True when `scope` matches the `<source>:private:*` shape. */
14
28
  export declare function isPrivateScope(scope: string | null | undefined): boolean;
@@ -29,17 +43,25 @@ export declare function canTouchScope(actor: {
29
43
  /** canTouchScope for a caller known by its own personal scope, as a store method receives it. */
30
44
  export declare function ownScopeTouches(ownScope: string | null, scope: string | null): boolean;
31
45
  /** JS half of the recall default-deny rule (SQL half: `loadSearchRows`). A non-empty `requested` needs an exact match;
32
- * otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the caller's `ownScope` pass. */
46
+ * otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the
47
+ * caller's `ownScope` pass.
48
+ */
33
49
  export declare function passesScopeFilterForRecall(scope: string | null, requested: string | undefined, ownScope?: string | null): boolean;
34
- /** CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than narrowing to X (api.recall keeps 'exact').
35
- * Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller identity. */
50
+ /**
51
+ * CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than
52
+ * narrowing to X (api.recall keeps 'exact').
53
+ * Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller
54
+ * identity.
55
+ */
36
56
  export declare function passesCliRecallScopeFilter(scope: string | null, requested: string | undefined): boolean;
37
57
  /** Thrown when a caller requests a scope its role may not read; the HTTP layer maps it to 403. */
38
58
  export declare class ScopeForbiddenError extends ForbiddenError {
39
59
  readonly scope: string;
40
60
  constructor(scope: string);
41
61
  }
42
- /** True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks it, so naming one needs
62
+ /**
63
+ * True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks
64
+ * it, so naming one needs
43
65
  * authorization. */
44
66
  export declare function isRestrictedScope(scope: string | null | undefined): boolean;
45
67
  /** The identity a scope check runs against: a role, any scope grants, and the person who owns the key. */
@@ -1,11 +1,21 @@
1
- /** Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to searchBothHybrid's candidate loads without an
2
- * import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests importing `passesScopeFilterForRecall`). */
1
+ /**
2
+ * Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to
3
+ * searchBothHybrid's candidate loads without an
4
+ * import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests
5
+ * importing `passesScopeFilterForRecall`).
6
+ */
3
7
  import { BadRequestError, ForbiddenError } from './api-errors.js';
4
8
  import { MAX_ID_LEN } from '../util/limits.js';
5
- /** Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in `loadSearchRows` and by
6
- * `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the module-load assertion below pins this). */
9
+ /**
10
+ * Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in
11
+ * `loadSearchRows` and by
12
+ * `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the
13
+ * module-load assertion below pins this).
14
+ */
7
15
  export const RECALL_DEFAULT_DENY_SCOPES = ['unknown:legacy'];
8
- /** @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at the call site, so the empty case
16
+ /**
17
+ * @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at
18
+ * the call site, so the empty case
9
19
  * is reachable and testable. */
10
20
  export function assertNonEmpty(arr, name) {
11
21
  if (arr.length === 0) {
@@ -13,8 +23,12 @@ export function assertNonEmpty(arr, name) {
13
23
  }
14
24
  }
15
25
  assertNonEmpty(RECALL_DEFAULT_DENY_SCOPES, 'RECALL_DEFAULT_DENY_SCOPES');
16
- /** Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not `slack:public:x`, null, '',
17
- * 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector work cannot drift. */
26
+ /**
27
+ * Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not
28
+ * `slack:public:x`, null, '',
29
+ * 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector
30
+ * work cannot drift.
31
+ */
18
32
  export const PRIVATE_SCOPE_RE = /^[a-z][a-z0-9_-]*:private:/;
19
33
  function isScopeString(value) {
20
34
  return typeof value === 'string';
@@ -56,15 +70,21 @@ export function ownScopeTouches(ownScope, scope) {
56
70
  return !isPersonalScope(scope) || scope === ownScope;
57
71
  }
58
72
  /** JS half of the recall default-deny rule (SQL half: `loadSearchRows`). A non-empty `requested` needs an exact match;
59
- * otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the caller's `ownScope` pass. */
73
+ * otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the
74
+ * caller's `ownScope` pass.
75
+ */
60
76
  export function passesScopeFilterForRecall(scope, requested, ownScope) {
61
77
  if (requested !== undefined && requested !== '') {
62
78
  return scope === requested;
63
79
  }
64
80
  return !isRestrictedScope(scope) || (ownScope != null && scope === ownScope);
65
81
  }
66
- /** CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than narrowing to X (api.recall keeps 'exact').
67
- * Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller identity. */
82
+ /**
83
+ * CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than
84
+ * narrowing to X (api.recall keeps 'exact').
85
+ * Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller
86
+ * identity.
87
+ */
68
88
  export function passesCliRecallScopeFilter(scope, requested) {
69
89
  if (requested !== undefined && requested !== '' && !isPersonalScope(requested) && scope === requested) {
70
90
  return true;
@@ -80,14 +100,20 @@ export class ScopeForbiddenError extends ForbiddenError {
80
100
  this.scope = scope;
81
101
  }
82
102
  }
83
- /** True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks it, so naming one needs
103
+ /**
104
+ * True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks
105
+ * it, so naming one needs
84
106
  * authorization. */
85
107
  export function isRestrictedScope(scope) {
86
108
  if (!isScopeString(scope))
87
109
  return false;
88
- // SAFETY: RECALL_DEFAULT_DENY_SCOPES is a readonly tuple of string literals; widening the array lets .includes() take any scope.
89
- // `:private:` anywhere, any case, matches the SQL default-deny in src/store/search-rows.ts so JS never admits what SQL hides.
90
- return isPrivateScope(scope) || /:private:/i.test(scope) || RECALL_DEFAULT_DENY_SCOPES.includes(scope);
110
+ // SAFETY: RECALL_DEFAULT_DENY_SCOPES is a readonly tuple of string literals; widening the array lets .includes() take
111
+ // any scope.
112
+ // `:private:` anywhere, any case, matches the SQL default-deny in src/store/search-rows.ts so JS never admits what
113
+ // SQL hides.
114
+ return (isPrivateScope(scope) ||
115
+ /:private:/i.test(scope) ||
116
+ RECALL_DEFAULT_DENY_SCOPES.includes(scope));
91
117
  }
92
118
  /** Personal rows answer to their owner alone: role, key grants and resolver scopes never
93
119
  * open one. Else admin reads all; a member needs an exact grant on a restricted scope. */
@@ -132,7 +158,8 @@ export function commonDerivationScope(scopes) {
132
158
  /** Map-partition key for consolidate/dag/dedup producers: tenant + derivation scope + origin project,
133
159
  * so a derived row never blends two restricted scopes, a mixed pair, or two projects. */
134
160
  export function derivationPartitionKey(tenantId, scope, origin) {
135
- const project = origin === undefined ? '\u0002' : origin ?? '\u0001'; // unstamped, unknown and named never share a bucket
161
+ // unstamped, unknown and named never share a bucket
162
+ const project = origin === undefined ? '\u0002' : (origin ?? '\u0001');
136
163
  return `${tenantId}\u0000${derivationScope(scope) ?? ''}\u0000${project}`;
137
164
  }
138
165
  //# sourceMappingURL=recall-scope.js.map
@@ -0,0 +1,7 @@
1
+ /** Normalize content for rejection digests: NFC, lowercase, collapse whitespace runs, trim. No punctuation stripping:
2
+ * over-normalizing causes false refusals, worse than misses. */
3
+ export declare function normalizeValueForRejection(content: string): string;
4
+ /** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char
5
+ * redaction hash used for query hashing. */
6
+ export declare function rejectionDigest(content: string): string;
7
+ //# sourceMappingURL=rejection-digest.d.ts.map
@@ -0,0 +1,13 @@
1
+ // Tombstone keys are a pure hash of the normalized value, so the domain computes them without reaching the store.
2
+ import { createHash } from 'node:crypto';
3
+ /** Normalize content for rejection digests: NFC, lowercase, collapse whitespace runs, trim. No punctuation stripping:
4
+ * over-normalizing causes false refusals, worse than misses. */
5
+ export function normalizeValueForRejection(content) {
6
+ return content.normalize('NFC').toLowerCase().replace(/\s+/g, ' ').trim();
7
+ }
8
+ /** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char
9
+ * redaction hash used for query hashing. */
10
+ export function rejectionDigest(content) {
11
+ return createHash('sha256').update(normalizeValueForRejection(content)).digest('hex');
12
+ }
13
+ //# sourceMappingURL=rejection-digest.js.map
@@ -1,4 +1,6 @@
1
- /** Salience gate: decides at memory creation whether content is stored at full strength, starts weakened, or is skipped. */
1
+ /**
2
+ * Salience gate: decides at memory creation whether content is stored at full strength, starts weakened, or is skipped.
3
+ */
2
4
  import type { MemoryEntry } from './memory.js';
3
5
  export type SalienceDecision = 'store' | 'skip' | 'start_weak';
4
6
  export interface SalienceResult {
@@ -1,4 +1,6 @@
1
- /** Salience gate: decides at memory creation whether content is stored at full strength, starts weakened, or is skipped. */
1
+ /**
2
+ * Salience gate: decides at memory creation whether content is stored at full strength, starts weakened, or is skipped.
3
+ */
2
4
  import { textOverlap } from '../util/tokenize.js';
3
5
  import { duplicateKey, heldTextKeys } from '../util/same-text.js';
4
6
  // Each store or skip reason carries a score; a novel memory adds bonuses for structure and length.
@@ -10,6 +12,9 @@ const NOVEL_ERROR_SCORE = 0.9;
10
12
  const NOVEL_BASE_SCORE = 0.5;
11
13
  const STRUCTURED_TAGS_BONUS = 0.15;
12
14
  const LENGTH_BONUS = 0.1;
15
+ // A novel memory earns LENGTH_BONUS past each of these lengths in characters.
16
+ const LONG_CONTENT_CHARS = 100;
17
+ const VERY_LONG_CONTENT_CHARS = 300;
13
18
  const DEFAULTS = {
14
19
  recentWindow: 20,
15
20
  overlapThreshold: 0.6,
@@ -35,7 +40,8 @@ export function computeSalience(content, tags, recentMemories, options = {}) {
35
40
  if (recentErrors >= opts.maxRepeatErrors) {
36
41
  return {
37
42
  decision: 'start_weak',
38
- reason: `repeat_error (${recentErrors} recent errors, overlap ${(duplicateMatch.overlap * 100).toFixed(0)}% with ${duplicateMatch.matchId})`,
43
+ reason: `repeat_error (${recentErrors} recent errors, overlap ` +
44
+ `${(duplicateMatch.overlap * 100).toFixed(0)}% with ${duplicateMatch.matchId})`,
39
45
  score: REPEAT_ERROR_SCORE,
40
46
  };
41
47
  }
@@ -66,9 +72,9 @@ function scoreNovel(trimmed, tags) {
66
72
  let score = NOVEL_BASE_SCORE;
67
73
  if (hasStructuredTags)
68
74
  score += STRUCTURED_TAGS_BONUS;
69
- if (trimmed.length > 100)
75
+ if (trimmed.length > LONG_CONTENT_CHARS)
70
76
  score += LENGTH_BONUS;
71
- if (trimmed.length > 300)
77
+ if (trimmed.length > VERY_LONG_CONTENT_CHARS)
72
78
  score += LENGTH_BONUS;
73
79
  return { decision: 'store', reason: 'novel', score: Math.min(score, 1.0) };
74
80
  }
@@ -1,7 +1,17 @@
1
1
  import type { MemoryEntry } from './memory.js';
2
2
  export declare const DEFAULT_RECALL_BUDGET = 4000;
3
3
  export declare const DEFAULT_LOCAL_BUMP = 1.2;
4
- /** One score mutation applied after candidate generation; allocated only under `recall --why` or `RecallOpts.explain`. */
4
+ export declare const DEFAULT_MMR_LAMBDA = 0.7;
5
+ export declare const CONFLICT_PEER_MULTIPLIER = 0.3;
6
+ export declare const VALUE_MULT_SLOPE = 0.3;
7
+ export declare const VALUE_MULT_MIN = 0.7;
8
+ export declare const VALUE_MULT_MAX = 1.3;
9
+ export declare const UTILITY_LENGTH_PENALTY_CAP = 0.3;
10
+ export declare const UTILITY_LENGTH_TOKENS = 10000;
11
+ export declare const SALIENCE_MIN_MULTIPLIER = 0.5;
12
+ /**
13
+ * One score mutation applied after candidate generation; allocated only under `recall --why` or `RecallOpts.explain`.
14
+ */
5
15
  export interface RerankStep {
6
16
  /** One of: interference, value, utility, reranker, goal-boost, retrieval-count-downweight. */
7
17
  stage: string;
@@ -63,7 +73,10 @@ export interface ScoreBreakdown {
63
73
  scopeBoost: number;
64
74
  /** Extra multiplier applied post-hybrid (e.g. 1.2x for local hits in a local+global merge); 1.0 otherwise. */
65
75
  sourceBump: number;
66
- /** Immediate outcome nudge, 1 + 0.15*tanh(pos - neg) clipped to [0.85, 1.15]; separate from the slow strength path. */
76
+ /**
77
+ * Immediate outcome nudge, 1 + 0.15*tanh((pos - neg) / 2) clipped to [0.85, 1.15]; separate from the slow strength
78
+ * path.
79
+ */
67
80
  outcomeBoost: number;
68
81
  /** CHURN_STALE_RANK_MULTIPLIER if tagged 'churn-stale', else 1.0. */
69
82
  churnStaleMultiplier: number;