hippo-memory 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -1,11 +1,20 @@
1
- /** Memory-as-Physics engine: pure math (forces, Velocity Verlet integration, physics-based scoring, cluster amplification), no I/O.
2
- * Memories are particles on the unit hypersphere in embedding space (384-dim); query gravity, attraction, conflict repulsion and drag act on them,
1
+ /**
2
+ * Memory-as-Physics engine: pure math (forces, Velocity Verlet integration, physics-based scoring, cluster
3
+ * amplification), no I/O.
4
+ * Memories are particles on the unit hypersphere in embedding space (384-dim); query gravity, attraction, conflict
5
+ * repulsion and drag act on them,
3
6
  * and nearby high-scoring memories amplify each other. */
4
7
  import { cosineOf } from './cosine.js';
5
8
  import { evalNow, isRecallBoostAblated, strengthAblation } from './ablation.js';
6
9
  import { calculateStrength, FALLBACK_HALF_LIFE_DAYS } from './memory.js';
7
10
  import { DAY_MS } from '../util/time.js';
8
11
  import { comparePhysicsResultsBy } from './compare.js';
12
+ // Floors that stop a near-zero mass or a coincident pair from dividing a force by about zero.
13
+ const MIN_MASS = 0.01;
14
+ const MIN_COSINE_DISTANCE = 0.01;
15
+ // Mass gained per doubling of the retrieval count.
16
+ const RETRIEVAL_MASS_GAIN = 0.1;
17
+ const NEAR_ZERO = 1e-10;
9
18
  export function vecDot(a, b) {
10
19
  let sum = 0;
11
20
  for (let i = 0; i < a.length; i++)
@@ -39,7 +48,7 @@ export function vecZero(dim) {
39
48
  /** Normalize to unit length. Returns zero vector if magnitude < epsilon. */
40
49
  export function vecNormalize(v) {
41
50
  const mag = vecNorm(v);
42
- if (mag < 1e-10)
51
+ if (mag < NEAR_ZERO)
43
52
  return vecZero(v.length);
44
53
  return vecScale(v, 1 / mag);
45
54
  }
@@ -57,10 +66,12 @@ const CHARGE_MAP = {
57
66
  critical: -1.0,
58
67
  };
59
68
  export function computeMass(strength, retrievalCount) {
60
- // EVAL-ONLY ablation (ablation.ts): under the recall-boost flag mass ignores retrieval history, which would otherwise leak strengthening into the ablated
61
- // arm's physics-pool rankings (query gravity ranks by mass). Covers both init and refresh callers in physics-state.ts.
69
+ // EVAL-ONLY ablation (ablation.ts): under the recall-boost flag mass ignores retrieval history, which would otherwise
70
+ // leak strengthening into the ablated
71
+ // arm's physics-pool rankings (query gravity ranks by mass). Covers both init and refresh callers in
72
+ // physics-state.ts.
62
73
  const effectiveCount = isRecallBoostAblated() ? 0 : retrievalCount;
63
- return Math.max(0.01, strength * (1 + 0.1 * Math.log2(effectiveCount + 1)));
74
+ return Math.max(MIN_MASS, strength * (1 + RETRIEVAL_MASS_GAIN * Math.log2(effectiveCount + 1)));
64
75
  }
65
76
  export function computeCharge(valence) {
66
77
  return CHARGE_MAP[valence] ?? 0;
@@ -68,7 +79,10 @@ export function computeCharge(valence) {
68
79
  export function computeTemperature(ageDays, temperatureDecay) {
69
80
  return 1 / (ageDays * temperatureDecay + 1);
70
81
  }
71
- /** Query gravity (retrieval-time, virtual: does not move the particle): scalar ranking magnitude F = G_Q * mass * max(0, cosine(pos, query))^2. */
82
+ /**
83
+ * Query gravity (retrieval-time, virtual: does not move the particle): scalar ranking magnitude F = G_Q * mass * max(0,
84
+ * cosine(pos, query))^2.
85
+ */
72
86
  export function queryGravityMagnitude(particle, queryEmbedding, G_query) {
73
87
  const cos = cosineOf(particle.position, queryEmbedding);
74
88
  return G_query * particle.mass * Math.pow(Math.max(0, cos), 2);
@@ -79,13 +93,17 @@ export function velocityAlignmentBonus(particle, queryEmbedding) {
79
93
  return 0;
80
94
  const velMag = vecNorm(particle.velocity);
81
95
  const qNorm = vecNorm(queryEmbedding);
82
- if (velMag < 1e-10 || qNorm < 1e-10)
96
+ if (velMag < NEAR_ZERO || qNorm < NEAR_ZERO)
83
97
  return 0;
84
98
  const alignment = vecDot(particle.velocity, queryEmbedding) / (velMag * qNorm);
85
99
  return Math.max(0, alignment);
86
100
  }
87
- /** Attraction force on particle i from j (consolidation-time): G_M m_i m_j max(0, cosine)^3, directed along (pos_j - pos_i) projected tangent to the unit
88
- * sphere at pos_i (positions are re-normalized to the sphere after integration). Adds into `out` (a fresh zero vector by default) using `diff` as scratch. */
101
+ /**
102
+ * Attraction force on particle i from j (consolidation-time): G_M m_i m_j max(0, cosine)^3, directed along (pos_j -
103
+ * pos_i) projected tangent to the unit
104
+ * sphere at pos_i (positions are re-normalized to the sphere after integration). Adds into `out` (a fresh zero vector
105
+ * by default) using `diff` as scratch.
106
+ */
89
107
  export function attractionForce(pi, pj, G_memory, out = vecZero(pi.position.length), diff = vecZero(pi.position.length)) {
90
108
  const cos = cosineOf(pi.position, pj.position);
91
109
  if (cos <= 0)
@@ -95,23 +113,29 @@ export function attractionForce(pi, pj, G_memory, out = vecZero(pi.position.leng
95
113
  for (let k = 0; k < out.length; k++)
96
114
  diff[k] = pj.position[k] - pi.position[k];
97
115
  const norm = vecNorm(diff);
98
- if (norm < 1e-10)
116
+ if (norm < NEAR_ZERO)
99
117
  return out;
100
118
  const inv = 1 / norm;
101
119
  for (let k = 0; k < out.length; k++)
102
120
  out[k] += diff[k] * inv * magnitude;
103
121
  return out;
104
122
  }
105
- /** Conflict repulsion on i away from j (consolidation-time): K_R * m_i * m_j / max(0.01, cosine_distance)^2, where cosine_distance = 1 - cosine_similarity. */
123
+ /**
124
+ * Conflict repulsion on i away from j (consolidation-time): K_R * m_i * m_j / max(0.01, cosine_distance)^2, where
125
+ * cosine_distance = 1 - cosine_similarity.
126
+ */
106
127
  export function repulsionForce(pi, pj, K_repulsion) {
107
128
  const cos = cosineOf(pi.position, pj.position);
108
- const dist = Math.max(0.01, 1 - cos);
129
+ const dist = Math.max(MIN_COSINE_DISTANCE, 1 - cos);
109
130
  const magnitude = K_repulsion * pi.mass * pj.mass / (dist * dist);
110
131
  // Direction: away from j
111
132
  const direction = vecNormalize(vecSub(pi.position, pj.position));
112
133
  return vecScale(direction, magnitude);
113
134
  }
114
- /** Drag force (consolidation-time): -drag * velocity / max(1, effectiveHalfLife), with effectiveHalfLife from the memory's current half_life_days. */
135
+ /**
136
+ * Drag force (consolidation-time): -drag * velocity / max(1, effectiveHalfLife), with effectiveHalfLife from the
137
+ * memory's current half_life_days.
138
+ */
115
139
  export function dragForce(particle, drag, effectiveHalfLife) {
116
140
  const damping = drag / Math.max(1, effectiveHalfLife);
117
141
  return vecScale(particle.velocity, -damping);
@@ -143,7 +167,7 @@ function computeNetForce(i, particles, ctx, diff) {
143
167
  /** Acceleration of particle i: its net force divided by mass, scaled in place. */
144
168
  function computeAcceleration(i, particles, ctx, diff) {
145
169
  const accel = computeNetForce(i, particles, ctx, diff);
146
- const inv = 1 / Math.max(0.01, particles[i].mass);
170
+ const inv = 1 / Math.max(MIN_MASS, particles[i].mass);
147
171
  for (let k = 0; k < accel.length; k++)
148
172
  accel[k] *= inv;
149
173
  return accel;
@@ -234,9 +258,13 @@ export function computeSystemEnergy(particles, G_memory) {
234
258
  }
235
259
  return { kinetic, potential, total: kinetic + potential };
236
260
  }
237
- /** Scores all particles against a query embedding; virtual force computation, so it does NOT modify particle positions. */
261
+ /**
262
+ * Scores all particles against a query embedding; virtual force computation, so it does NOT modify particle positions.
263
+ */
238
264
  export function physicsScore(particles, queryEmbedding, config,
239
- /** Cross-ingest-stable tie key per memoryId (typically the memory content, from a caller with entries in scope); without it ties fall to memoryId,
265
+ /**
266
+ * Cross-ingest-stable tie key per memoryId (typically the memory content, from a caller with entries in scope);
267
+ * without it ties fall to memoryId,
240
268
  * which is per-instance only and lets the cluster_top_k amplification set vary across fresh ingests. */
241
269
  tieKeyOf) {
242
270
  if (particles.length === 0 || queryEmbedding.length === 0)
@@ -252,7 +280,8 @@ tieKeyOf) {
252
280
  finalScore: gravity + momentum,
253
281
  };
254
282
  });
255
- // Base-score order picks the cluster_top_k amplification SET (which mutates scores), so ties must be cross-ingest-stable
283
+ // Base-score order picks the cluster_top_k amplification SET (which mutates scores), so ties must be
284
+ // cross-ingest-stable
256
285
  // when the caller supplies a content tie key (see comparePhysicsResultsBy in compare.ts).
257
286
  const tie = tieKeyOf ? (r) => tieKeyOf(r.memoryId) : undefined;
258
287
  results.sort(comparePhysicsResultsBy((r) => r.baseScore, tie));
@@ -293,7 +322,10 @@ function applyClusterAmplification(results, particles, config) {
293
322
  top[i].finalScore = top[i].baseScore * amplification;
294
323
  }
295
324
  }
296
- /** Nudges a particle toward (good outcome) or away from (bad outcome) the query embedding; new memories respond more (temperature). Mutates in place. */
325
+ /**
326
+ * Nudges a particle toward (good outcome) or away from (bad outcome) the query embedding; new memories respond more
327
+ * (temperature). Mutates in place.
328
+ */
297
329
  export function applyOutcomeFeedback(particle, queryEmbedding, good, feedbackAlpha) {
298
330
  if (particle.position.length === 0 || particle.position.length !== queryEmbedding.length)
299
331
  return;
@@ -302,7 +334,10 @@ export function applyOutcomeFeedback(particle, queryEmbedding, good, feedbackAlp
302
334
  const nudge = vecScale(direction, sign * feedbackAlpha * particle.temperature);
303
335
  particle.position = vecNormalize(vecAdd(particle.position, nudge));
304
336
  }
305
- /** Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the caller must save). */
337
+ /**
338
+ * Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the
339
+ * caller must save).
340
+ */
306
341
  export function initializeParticle(entry, embedding, now = evalNow()) {
307
342
  const strength = calculateStrength(entry, now, { ablation: strengthAblation() });
308
343
  const ageDays = (now.getTime() - new Date(entry.created).getTime()) / DAY_MS;
@@ -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,7 +5,7 @@ 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
11
  import { placeholders } from '../util/sql.js';
@@ -20,8 +20,9 @@ export function clearProjectIdentityCache() {
20
20
  // The global store's config only: a per-store switch would stamp one checkout two ways.
21
21
  function remoteRuleOn() {
22
22
  const globalRoot = resolveGlobalRootDir();
23
- if (remoteSwitch?.globalRoot !== globalRoot)
23
+ if (remoteSwitch?.globalRoot !== globalRoot) {
24
24
  remoteSwitch = { globalRoot, on: loadConfig(globalRoot).projectIdentity.remote };
25
+ }
25
26
  return remoteSwitch.on;
26
27
  }
27
28
  /** The id a root names itself by plus every rung that resolves; only the root's own
@@ -57,11 +58,13 @@ function isDirectoryAt(p) {
57
58
  return fs.statSync(p).isDirectory();
58
59
  }
59
60
  catch (err) {
60
- 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));
61
63
  return false;
62
64
  }
63
65
  }
64
- /** 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. */
65
68
  export function resolveProjectIdentity(cwd, opts) {
66
69
  const startInput = path.resolve(cwd ?? process.cwd());
67
70
  const cacheable = !opts?.homeDir && !opts?.stopDir;
@@ -180,14 +183,17 @@ export function projectNames(project) {
180
183
  // Each project name is matched against every candidate row, so the caller's list stays short.
181
184
  export const MAX_PROJECT_ALIASES = 10;
182
185
  export const MCP_PROJECT_SCOPED_HEADER = 'X-Hippo-Project-Scoped';
183
- /** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids: rows match
184
- * 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. */
185
190
  export function assertCallerProject(project) {
186
191
  const { name, aliases = [] } = project;
187
192
  if (name.trim() === '')
188
193
  throw new BadRequestError('project name must not be blank');
189
- if (aliases.length > MAX_PROJECT_ALIASES)
194
+ if (aliases.length > MAX_PROJECT_ALIASES) {
190
195
  throw new BadRequestError(`project aliases: at most ${MAX_PROJECT_ALIASES}`);
196
+ }
191
197
  if ([name, ...aliases].some((n) => n.length > MAX_ID_LEN)) {
192
198
  throw new BadRequestError(`project names: at most ${MAX_ID_LEN} characters each`);
193
199
  }
@@ -199,8 +205,10 @@ export function assertCallerProject(project) {
199
205
  export function originInSql(names, column = 'origin_project') {
200
206
  return names.length === 0 ? '0' : `${column} IN (${placeholders(names.length)})`;
201
207
  }
202
- /** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts everything in scope;
203
- * 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. */
204
212
  export function classifyOriginProject(origin, current) {
205
213
  if (projectId(current) === '')
206
214
  return 'project';
@@ -210,7 +218,8 @@ export function classifyOriginProject(origin, current) {
210
218
  return 'user-global';
211
219
  return projectNames(current).includes(origin) ? 'project' : 'cross-project';
212
220
  }
213
- /** 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.
214
223
  * Leaf module so store migrations can use it without importing sharing/ (store cycle). */
215
224
  export function resolveGlobalRootDir() {
216
225
  const hippoHome = envHippoHome();
@@ -221,13 +230,17 @@ export function resolveGlobalRootDir() {
221
230
  return path.join(xdgData, 'hippo');
222
231
  return path.join(os.homedir(), '.hippo');
223
232
  }
224
- /** 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
225
- * 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. */
226
237
  export function isGlobalStoreRoot(p) {
227
238
  return samePath(realpathOrResolve(path.resolve(p)), realpathOrResolve(resolveGlobalRootDir()));
228
239
  }
229
- /** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the owning project; the home dir basename
230
- * 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. */
231
244
  export function originFromSource(source, homeName) {
232
245
  if (!source)
233
246
  return null;
@@ -248,12 +261,15 @@ export function originFromSource(source, homeName) {
248
261
  }
249
262
  return null;
250
263
  }
251
- /** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere) outside a project.
252
- * 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. */
253
268
  export function deriveOriginProject(cwd, opts) {
254
269
  return resolveProjectIdentity(cwd, opts).name;
255
270
  }
256
- /** 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. */
257
273
  export function fallbackOrigin(hippoRoot) {
258
274
  return isSharedStore(hippoRoot) ? null : deriveOriginProject(path.dirname(path.resolve(hippoRoot)));
259
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. */