hippo-memory 1.70.0 → 1.71.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 (629) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-memories/claude-code.d.ts +4 -2
  3. package/dist/agent-memories/claude-code.js +14 -5
  4. package/dist/agent-memories/files.js +23 -12
  5. package/dist/agent-memories/markdown.d.ts +1 -3
  6. package/dist/agent-memories/markdown.js +1 -3
  7. package/dist/agent-memories/report.js +2 -1
  8. package/dist/agent-memories/sync.d.ts +4 -2
  9. package/dist/agent-memories/sync.js +10 -5
  10. package/dist/api/assemble.d.ts +7 -44
  11. package/dist/api/assemble.js +2 -22
  12. package/dist/api/audit.d.ts +5 -1
  13. package/dist/api/audit.js +9 -1
  14. package/dist/api/auth.d.ts +13 -22
  15. package/dist/api/auth.js +34 -24
  16. package/dist/api/auto-sleep.js +2 -2
  17. package/dist/api/availability.d.ts +2 -15
  18. package/dist/api/availability.js +2 -15
  19. package/dist/api/context-select.js +3 -4
  20. package/dist/api/context-types.d.ts +10 -35
  21. package/dist/api/context.d.ts +5 -22
  22. package/dist/api/context.js +21 -38
  23. package/dist/api/dormant.d.ts +5 -21
  24. package/dist/api/dormant.js +7 -26
  25. package/dist/api/drill-down.d.ts +7 -46
  26. package/dist/api/drill-down.js +5 -26
  27. package/dist/api/forget.d.ts +5 -24
  28. package/dist/api/forget.js +5 -28
  29. package/dist/api/graph.d.ts +8 -0
  30. package/dist/api/graph.js +7 -0
  31. package/dist/api/index.d.ts +2 -0
  32. package/dist/api/index.js +2 -0
  33. package/dist/api/instruction-detect.js +16 -5
  34. package/dist/api/ledger-db.d.ts +2 -1
  35. package/dist/api/ledger-db.js +5 -3
  36. package/dist/api/memories.d.ts +5 -0
  37. package/dist/api/memories.js +7 -0
  38. package/dist/api/objects.d.ts +9 -0
  39. package/dist/api/objects.js +11 -0
  40. package/dist/api/on-store.js +5 -3
  41. package/dist/api/predictions.d.ts +9 -0
  42. package/dist/api/predictions.js +18 -0
  43. package/dist/api/promote.d.ts +13 -17
  44. package/dist/api/promote.js +11 -19
  45. package/dist/api/prompt-hook.d.ts +4 -4
  46. package/dist/api/prompt-hook.js +10 -9
  47. package/dist/api/recall-cli.d.ts +55 -0
  48. package/dist/api/recall-cli.js +94 -0
  49. package/dist/api/recall-core.js +14 -6
  50. package/dist/api/recall-finish.d.ts +53 -0
  51. package/dist/api/recall-finish.js +30 -0
  52. package/dist/api/recall-history.d.ts +17 -84
  53. package/dist/api/recall-history.js +15 -88
  54. package/dist/api/recall-pipeline.d.ts +2 -3
  55. package/dist/api/recall-pipeline.js +16 -9
  56. package/dist/api/recall-types.d.ts +64 -304
  57. package/dist/api/recall.d.ts +5 -33
  58. package/dist/api/recall.js +59 -60
  59. package/dist/api/refine.d.ts +7 -0
  60. package/dist/api/refine.js +10 -0
  61. package/dist/api/remember-local.d.ts +57 -0
  62. package/dist/api/remember-local.js +90 -0
  63. package/dist/api/remember.d.ts +18 -1
  64. package/dist/api/remember.js +13 -1
  65. package/dist/api/sleep-run.d.ts +1 -3
  66. package/dist/api/sleep-run.js +17 -21
  67. package/dist/api/sleep.d.ts +9 -28
  68. package/dist/api/tokens.d.ts +3 -10
  69. package/dist/api/tokens.js +3 -10
  70. package/dist/api/types.d.ts +6 -29
  71. package/dist/api/types.js +4 -22
  72. package/dist/capture/command.d.ts +4 -12
  73. package/dist/capture/command.js +6 -22
  74. package/dist/capture/compact.d.ts +4 -15
  75. package/dist/capture/compact.js +16 -25
  76. package/dist/capture/compaction-record.js +101 -69
  77. package/dist/capture/compaction-spool.d.ts +1 -1
  78. package/dist/capture/compaction-spool.js +1 -1
  79. package/dist/capture/session-digest.d.ts +1 -1
  80. package/dist/capture/session-digest.js +13 -7
  81. package/dist/capture/transcript.d.ts +2 -10
  82. package/dist/capture/transcript.js +4 -18
  83. package/dist/cli/api-context.d.ts +3 -0
  84. package/dist/cli/api-context.js +6 -0
  85. package/dist/cli/audit-prune.d.ts +6 -39
  86. package/dist/cli/audit-prune.js +6 -39
  87. package/dist/cli/audit.d.ts +1 -1
  88. package/dist/cli/audit.js +33 -34
  89. package/dist/cli/auth.d.ts +2 -2
  90. package/dist/cli/auth.js +57 -39
  91. package/dist/cli/briefs.d.ts +4 -4
  92. package/dist/cli/briefs.js +18 -22
  93. package/dist/cli/card.d.ts +2 -2
  94. package/dist/cli/card.js +31 -32
  95. package/dist/cli/client.d.ts +7 -27
  96. package/dist/cli/client.js +24 -43
  97. package/dist/cli/compact-resume-payload.js +3 -2
  98. package/dist/cli/context.d.ts +1 -2
  99. package/dist/cli/context.js +12 -8
  100. package/dist/cli/continuity.d.ts +6 -6
  101. package/dist/cli/continuity.js +62 -64
  102. package/dist/cli/correction-latency.d.ts +2 -14
  103. package/dist/cli/correction-latency.js +2 -14
  104. package/dist/cli/curate.d.ts +13 -17
  105. package/dist/cli/curate.js +68 -92
  106. package/dist/cli/dag.d.ts +4 -4
  107. package/dist/cli/dag.js +33 -27
  108. package/dist/cli/decisions.d.ts +4 -4
  109. package/dist/cli/decisions.js +33 -47
  110. package/dist/cli/eval.js +15 -13
  111. package/dist/cli/exit.d.ts +6 -0
  112. package/dist/cli/exit.js +11 -0
  113. package/dist/cli/explain.d.ts +1 -2
  114. package/dist/cli/explain.js +6 -4
  115. package/dist/cli/flag-values.d.ts +6 -1
  116. package/dist/cli/flag-values.js +27 -10
  117. package/dist/cli/flags.d.ts +1 -0
  118. package/dist/cli/flags.js +1 -1
  119. package/dist/cli/github.d.ts +14 -0
  120. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  121. package/dist/cli/goals.d.ts +2 -2
  122. package/dist/cli/goals.js +46 -50
  123. package/dist/cli/hook-runtime.d.ts +9 -27
  124. package/dist/cli/hook-runtime.js +15 -31
  125. package/dist/cli/init.d.ts +2 -2
  126. package/dist/cli/init.js +6 -12
  127. package/dist/cli/install-steps.js +3 -12
  128. package/dist/cli/last-sleep.d.ts +2 -1
  129. package/dist/cli/last-sleep.js +3 -0
  130. package/dist/cli/maintenance.d.ts +4 -4
  131. package/dist/cli/maintenance.js +14 -19
  132. package/dist/cli/object-verbs.js +4 -3
  133. package/dist/cli/owner-validation.d.ts +5 -28
  134. package/dist/cli/owner-validation.js +5 -28
  135. package/dist/cli/playbooks.d.ts +4 -4
  136. package/dist/cli/playbooks.js +23 -28
  137. package/dist/cli/print.d.ts +2 -5
  138. package/dist/cli/print.js +1 -4
  139. package/dist/cli/projects.d.ts +2 -2
  140. package/dist/cli/projects.js +1 -3
  141. package/dist/cli/provenance-coverage.d.ts +2 -6
  142. package/dist/cli/provenance-coverage.js +2 -6
  143. package/dist/cli/quality-repair-once.js +2 -2
  144. package/dist/cli/recall.d.ts +2 -4
  145. package/dist/cli/recall.js +55 -131
  146. package/dist/cli/refine-llm.d.ts +5 -31
  147. package/dist/cli/refine-llm.js +9 -36
  148. package/dist/cli/remember.d.ts +3 -3
  149. package/dist/cli/remember.js +122 -180
  150. package/dist/cli/scheduler.d.ts +2 -17
  151. package/dist/cli/scheduler.js +12 -18
  152. package/dist/cli/serve.js +21 -12
  153. package/dist/cli/session-hooks.d.ts +10 -18
  154. package/dist/cli/session-hooks.js +112 -113
  155. package/dist/cli/setup.d.ts +4 -4
  156. package/dist/cli/setup.js +19 -21
  157. package/dist/cli/shared.d.ts +9 -23
  158. package/dist/cli/shared.js +9 -32
  159. package/dist/cli/slack.d.ts +2 -2
  160. package/dist/cli/slack.js +19 -23
  161. package/dist/cli/sleep.d.ts +3 -2
  162. package/dist/cli/sleep.js +15 -16
  163. package/dist/cli/status.d.ts +9 -12
  164. package/dist/cli/status.js +55 -98
  165. package/dist/cli/stdin.d.ts +4 -6
  166. package/dist/cli/stdin.js +2 -3
  167. package/dist/cli/transfer.d.ts +9 -9
  168. package/dist/cli/transfer.js +66 -89
  169. package/dist/cli/usage.js +11 -5
  170. package/dist/cli.d.ts +66 -448
  171. package/dist/cli.js +87 -263
  172. package/dist/connectors/github/backfill.d.ts +5 -25
  173. package/dist/connectors/github/backfill.js +14 -49
  174. package/dist/connectors/github/deletion.d.ts +4 -18
  175. package/dist/connectors/github/deletion.js +2 -15
  176. package/dist/connectors/github/dlq.d.ts +8 -33
  177. package/dist/connectors/github/dlq.js +12 -29
  178. package/dist/connectors/github/ingest.d.ts +2 -6
  179. package/dist/connectors/github/ingest.js +4 -10
  180. package/dist/connectors/github/octokit-client.d.ts +4 -16
  181. package/dist/connectors/github/octokit-client.js +27 -24
  182. package/dist/connectors/github/ratelimit.d.ts +3 -14
  183. package/dist/connectors/github/ratelimit.js +3 -14
  184. package/dist/connectors/github/scope.d.ts +3 -5
  185. package/dist/connectors/github/scope.js +3 -5
  186. package/dist/connectors/github/signature.d.ts +4 -26
  187. package/dist/connectors/github/signature.js +4 -26
  188. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  189. package/dist/connectors/github/tenant-routing.js +4 -26
  190. package/dist/connectors/github/transform.js +2 -16
  191. package/dist/connectors/github/types.d.ts +3 -15
  192. package/dist/connectors/github/types.js +2 -9
  193. package/dist/connectors/github/webhook.d.ts +2 -16
  194. package/dist/connectors/github/webhook.js +6 -22
  195. package/dist/connectors/slack/backfill.d.ts +4 -17
  196. package/dist/connectors/slack/backfill.js +4 -13
  197. package/dist/connectors/slack/dlq.d.ts +2 -19
  198. package/dist/connectors/slack/dlq.js +2 -19
  199. package/dist/connectors/slack/ingest.d.ts +2 -3
  200. package/dist/connectors/slack/ingest.js +2 -3
  201. package/dist/connectors/slack/scope.d.ts +2 -8
  202. package/dist/connectors/slack/scope.js +2 -8
  203. package/dist/connectors/slack/signature.d.ts +1 -6
  204. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  205. package/dist/connectors/slack/tenant-routing.js +2 -21
  206. package/dist/connectors/slack/transform.d.ts +2 -18
  207. package/dist/connectors/slack/transform.js +2 -18
  208. package/dist/connectors/slack/types.d.ts +3 -9
  209. package/dist/connectors/slack/types.js +2 -4
  210. package/dist/connectors/slack/web-client.js +33 -27
  211. package/dist/connectors/slack/webhook.d.ts +2 -19
  212. package/dist/connectors/slack/webhook.js +5 -26
  213. package/dist/connectors/slack/workspaces.d.ts +4 -24
  214. package/dist/connectors/slack/workspaces.js +4 -24
  215. package/dist/consolidate/conflicts.js +6 -14
  216. package/dist/consolidate/dag-summary.d.ts +8 -0
  217. package/dist/consolidate/dag-summary.js +41 -0
  218. package/dist/consolidate/dag.d.ts +5 -28
  219. package/dist/consolidate/dag.js +14 -75
  220. package/dist/consolidate/decay.js +7 -19
  221. package/dist/consolidate/dedupe.d.ts +6 -52
  222. package/dist/consolidate/dedupe.js +13 -71
  223. package/dist/consolidate/flush-units.d.ts +3 -4
  224. package/dist/consolidate/flush-units.js +3 -3
  225. package/dist/consolidate/half-life-migration.d.ts +3 -26
  226. package/dist/consolidate/half-life-migration.js +11 -28
  227. package/dist/consolidate/llm-passes.js +4 -21
  228. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  229. package/dist/consolidate/memory-value-weights.js +2 -13
  230. package/dist/consolidate/memory-value.d.ts +11 -84
  231. package/dist/consolidate/memory-value.js +16 -104
  232. package/dist/consolidate/merge.js +10 -31
  233. package/dist/consolidate/merged-row.js +2 -1
  234. package/dist/consolidate/physics-pass.js +1 -3
  235. package/dist/consolidate/replay.d.ts +6 -38
  236. package/dist/consolidate/replay.js +14 -52
  237. package/dist/consolidate/run.js +1 -1
  238. package/dist/consolidate/sleep.d.ts +1 -8
  239. package/dist/consolidate/sleep.js +5 -17
  240. package/dist/consolidate/trace.d.ts +3 -18
  241. package/dist/consolidate/trace.js +3 -18
  242. package/dist/consolidate/traces.js +6 -22
  243. package/dist/core/ablation.d.ts +4 -91
  244. package/dist/core/ablation.js +4 -91
  245. package/dist/core/ambient.d.ts +1 -8
  246. package/dist/core/ambient.js +1 -8
  247. package/dist/core/capture-contract.d.ts +4 -2
  248. package/dist/core/capture-contract.js +4 -2
  249. package/dist/core/card.d.ts +4 -1
  250. package/dist/core/card.js +8 -0
  251. package/dist/core/compare.d.ts +11 -67
  252. package/dist/core/compare.js +9 -63
  253. package/dist/core/config.d.ts +10 -24
  254. package/dist/core/config.js +13 -14
  255. package/dist/core/handoff.d.ts +1 -7
  256. package/dist/core/handoff.js +1 -7
  257. package/dist/core/memory-quality.js +1 -1
  258. package/dist/core/memory.d.ts +41 -164
  259. package/dist/core/memory.js +51 -221
  260. package/dist/core/package-root.d.ts +3 -0
  261. package/dist/core/package-root.js +5 -0
  262. package/dist/core/physics-config.d.ts +1 -4
  263. package/dist/core/physics-config.js +3 -8
  264. package/dist/core/physics.d.ts +15 -61
  265. package/dist/core/physics.js +59 -122
  266. package/dist/core/project-identity.d.ts +17 -58
  267. package/dist/core/project-identity.js +17 -38
  268. package/dist/core/project-remote.js +13 -2
  269. package/dist/core/raw-append-only.d.ts +5 -0
  270. package/dist/core/raw-append-only.js +7 -0
  271. package/dist/core/salience.d.ts +1 -7
  272. package/dist/core/salience.js +1 -7
  273. package/dist/dashboard/dashboard-actions.js +2 -2
  274. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  275. package/dist/dashboard/dashboard-snapshot.js +11 -2
  276. package/dist/dashboard/dashboard-types.d.ts +2 -1
  277. package/dist/dashboard/dashboard.d.ts +1 -0
  278. package/dist/dashboard/dashboard.js +50 -4
  279. package/dist/db/busy.d.ts +1 -1
  280. package/dist/db/busy.js +17 -8
  281. package/dist/db/connect.d.ts +1 -0
  282. package/dist/db/connect.js +3 -3
  283. package/dist/db/migrate.js +3 -3
  284. package/dist/db/migrations/types.d.ts +2 -5
  285. package/dist/db/migrations/v14.js +2 -3
  286. package/dist/db/migrations/v15.js +2 -8
  287. package/dist/db/migrations/v16.js +2 -3
  288. package/dist/db/migrations/v17.js +2 -3
  289. package/dist/db/migrations/v19.js +2 -5
  290. package/dist/db/migrations/v20.js +2 -7
  291. package/dist/db/migrations/v22.js +4 -17
  292. package/dist/db/migrations/v23.js +3 -14
  293. package/dist/db/migrations/v24.js +2 -4
  294. package/dist/db/migrations/v25.js +3 -8
  295. package/dist/db/migrations/v26.js +2 -13
  296. package/dist/db/migrations/v27.js +3 -11
  297. package/dist/db/migrations/v28.js +2 -14
  298. package/dist/db/migrations/v29.js +4 -18
  299. package/dist/db/migrations/v30.js +4 -16
  300. package/dist/db/migrations/v31.js +2 -15
  301. package/dist/db/migrations/v32.js +4 -22
  302. package/dist/db/migrations/v33.js +2 -15
  303. package/dist/db/migrations/v34.js +2 -11
  304. package/dist/db/migrations/v35.js +2 -11
  305. package/dist/db/migrations/v36.js +2 -11
  306. package/dist/db/migrations/v37.js +8 -33
  307. package/dist/db/migrations/v38.js +5 -38
  308. package/dist/db/migrations/v39.js +9 -20
  309. package/dist/db/migrations/v40.js +2 -9
  310. package/dist/db/migrations/v41.js +2 -24
  311. package/dist/db/migrations/v43.js +1 -1
  312. package/dist/db/migrations/v44.js +2 -8
  313. package/dist/db/migrations/v45.js +2 -7
  314. package/dist/db/migrations/v47.js +2 -3
  315. package/dist/db/migrations/v51.js +1 -1
  316. package/dist/db/open.d.ts +2 -0
  317. package/dist/db/open.js +17 -1
  318. package/dist/db/physics-state.d.ts +6 -22
  319. package/dist/db/physics-state.js +25 -36
  320. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  321. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  322. package/dist/db/vector-store.d.ts +2 -0
  323. package/dist/db/vector-store.js +8 -1
  324. package/dist/doctor.js +74 -19
  325. package/dist/entry/session-text.js +2 -1
  326. package/dist/eval/eval-stats.d.ts +15 -53
  327. package/dist/eval/eval-stats.js +12 -42
  328. package/dist/eval/eval-suite.d.ts +2 -13
  329. package/dist/eval/eval-suite.js +74 -34
  330. package/dist/eval/eval.d.ts +6 -24
  331. package/dist/eval/eval.js +7 -34
  332. package/dist/eval/judgment.d.ts +0 -3
  333. package/dist/eval/judgment.js +19 -11
  334. package/dist/extensions/openclaw-plugin/index.js +1 -1
  335. package/dist/graph/extract.d.ts +5 -27
  336. package/dist/graph/extract.js +7 -33
  337. package/dist/graph/recall.d.ts +7 -20
  338. package/dist/graph/recall.js +14 -76
  339. package/dist/graph/stream.d.ts +7 -39
  340. package/dist/graph/stream.js +11 -34
  341. package/dist/graph/view.d.ts +9 -35
  342. package/dist/graph/view.js +11 -39
  343. package/dist/hooks/codex-wrapper.js +2 -2
  344. package/dist/hooks/copilot.js +2 -1
  345. package/dist/hooks/hook-blocks.d.ts +6 -2
  346. package/dist/hooks/hook-blocks.js +37 -124
  347. package/dist/hooks/json-hooks.d.ts +4 -36
  348. package/dist/hooks/json-hooks.js +18 -57
  349. package/dist/hooks/opencode.d.ts +0 -38
  350. package/dist/hooks/opencode.js +9 -76
  351. package/dist/hooks/shared.d.ts +8 -17
  352. package/dist/hooks/shared.js +29 -20
  353. package/dist/importers/core.d.ts +12 -37
  354. package/dist/importers/core.js +9 -27
  355. package/dist/importers/markdown-parse.d.ts +8 -22
  356. package/dist/importers/markdown-parse.js +8 -25
  357. package/dist/importers/markdown.js +3 -12
  358. package/dist/importers/sources.js +7 -35
  359. package/dist/importers/vault.d.ts +2 -8
  360. package/dist/importers/vault.js +25 -81
  361. package/dist/index.d.ts +6 -2
  362. package/dist/index.js +6 -2
  363. package/dist/learn/autolearn.d.ts +14 -41
  364. package/dist/learn/autolearn.js +14 -41
  365. package/dist/learn/extract.js +2 -4
  366. package/dist/learn/forward-claim-detector.d.ts +6 -30
  367. package/dist/learn/forward-claim-detector.js +14 -66
  368. package/dist/learn/invalidation.d.ts +6 -18
  369. package/dist/learn/invalidation.js +9 -26
  370. package/dist/mcp/admin-tools.js +3 -5
  371. package/dist/mcp/memory-tools.js +4 -9
  372. package/dist/mcp/protocol.d.ts +8 -26
  373. package/dist/mcp/protocol.js +3 -6
  374. package/dist/mcp/recall-tools.js +3 -3
  375. package/dist/mcp/request.d.ts +3 -11
  376. package/dist/mcp/request.js +10 -26
  377. package/dist/mcp/server.d.ts +3 -9
  378. package/dist/mcp/server.js +5 -16
  379. package/dist/mcp/session-state.d.ts +1 -1
  380. package/dist/mcp/session-state.js +5 -11
  381. package/dist/mcp/stdio.d.ts +2 -6
  382. package/dist/mcp/stdio.js +48 -12
  383. package/dist/mcp/tools.js +5 -3
  384. package/dist/objects/customer-notes.d.ts +7 -42
  385. package/dist/objects/customer-notes.js +7 -48
  386. package/dist/objects/decisions.d.ts +12 -50
  387. package/dist/objects/decisions.js +15 -53
  388. package/dist/objects/incidents.d.ts +7 -38
  389. package/dist/objects/incidents.js +7 -41
  390. package/dist/objects/policies.d.ts +11 -89
  391. package/dist/objects/policies.js +11 -98
  392. package/dist/objects/processes.d.ts +7 -52
  393. package/dist/objects/processes.js +7 -61
  394. package/dist/objects/project-briefs.d.ts +11 -55
  395. package/dist/objects/project-briefs.js +14 -75
  396. package/dist/objects/skills.d.ts +7 -42
  397. package/dist/objects/skills.js +8 -54
  398. package/dist/postinstall.js +6 -19
  399. package/dist/predictions/planning-fallacy.d.ts +11 -34
  400. package/dist/rerankers/clef.js +3 -31
  401. package/dist/rerankers/cross-encoder.js +4 -6
  402. package/dist/rerankers/jev.js +9 -6
  403. package/dist/rerankers/llm.d.ts +2 -11
  404. package/dist/rerankers/llm.js +14 -14
  405. package/dist/rerankers/outage-warning.d.ts +2 -1
  406. package/dist/rerankers/outage-warning.js +2 -1
  407. package/dist/rerankers/remote.d.ts +1 -0
  408. package/dist/rerankers/remote.js +2 -0
  409. package/dist/rerankers/types.d.ts +2 -14
  410. package/dist/search/boosts.d.ts +0 -2
  411. package/dist/search/boosts.js +2 -2
  412. package/dist/search/goal-boost.d.ts +23 -0
  413. package/dist/search/goal-boost.js +90 -0
  414. package/dist/search/hybrid.d.ts +2 -0
  415. package/dist/search/multihop.js +2 -3
  416. package/dist/search/path-context.d.ts +5 -18
  417. package/dist/search/path-context.js +5 -18
  418. package/dist/search/physics-search.js +11 -8
  419. package/dist/search/rrf.d.ts +7 -35
  420. package/dist/search/rrf.js +5 -30
  421. package/dist/search/vector.d.ts +7 -0
  422. package/dist/search/vector.js +35 -5
  423. package/dist/server/auth.d.ts +9 -28
  424. package/dist/server/auth.js +32 -25
  425. package/dist/server/boot.d.ts +2 -21
  426. package/dist/server/boot.js +63 -96
  427. package/dist/server/client-ip.d.ts +3 -19
  428. package/dist/server/client-ip.js +5 -28
  429. package/dist/server/defaults.d.ts +3 -0
  430. package/dist/server/defaults.js +4 -0
  431. package/dist/server/key-check-bounds.d.ts +2 -1
  432. package/dist/server/lifecycle.d.ts +5 -4
  433. package/dist/server/lifecycle.js +19 -4
  434. package/dist/server/mcp-http.js +10 -44
  435. package/dist/server/rate-limit.d.ts +5 -18
  436. package/dist/server/rate-limit.js +4 -13
  437. package/dist/server/request.d.ts +4 -8
  438. package/dist/server/request.js +9 -17
  439. package/dist/server/route-table.js +42 -49
  440. package/dist/server/routes/admin.js +22 -28
  441. package/dist/server/routes/customer-notes.js +7 -12
  442. package/dist/server/routes/decisions.js +10 -17
  443. package/dist/server/routes/incidents.js +12 -20
  444. package/dist/server/routes/memories.js +12 -32
  445. package/dist/server/routes/object-routes.d.ts +0 -5
  446. package/dist/server/routes/object-routes.js +7 -15
  447. package/dist/server/routes/policies.js +10 -18
  448. package/dist/server/routes/predictions.js +13 -25
  449. package/dist/server/routes/processes.js +16 -26
  450. package/dist/server/routes/project-briefs.js +9 -16
  451. package/dist/server/routes/recall.js +10 -35
  452. package/dist/server/routes/skills.js +8 -18
  453. package/dist/server/server-detect.d.ts +9 -53
  454. package/dist/server/server-detect.js +24 -90
  455. package/dist/server/sleep-offload.js +4 -1
  456. package/dist/server/types.d.ts +12 -10
  457. package/dist/server/validation.d.ts +3 -1
  458. package/dist/server/validation.js +10 -23
  459. package/dist/server.d.ts +2 -2
  460. package/dist/server.js +3 -2
  461. package/dist/sharing/global-store.d.ts +19 -0
  462. package/dist/sharing/global-store.js +75 -0
  463. package/dist/sharing/global-sync.d.ts +6 -0
  464. package/dist/sharing/global-sync.js +80 -0
  465. package/dist/sharing/project-merge.d.ts +4 -5
  466. package/dist/sharing/project-merge.js +9 -7
  467. package/dist/sharing/scope.d.ts +4 -11
  468. package/dist/sharing/scope.js +4 -11
  469. package/dist/sharing/search-both.d.ts +60 -0
  470. package/dist/sharing/search-both.js +138 -0
  471. package/dist/sharing/share.d.ts +38 -0
  472. package/dist/sharing/share.js +226 -0
  473. package/dist/store/ambient.js +4 -9
  474. package/dist/store/audit-event.d.ts +4 -12
  475. package/dist/store/audit-event.js +4 -12
  476. package/dist/store/audit.d.ts +2 -5
  477. package/dist/store/audit.js +4 -12
  478. package/dist/store/auth.d.ts +6 -6
  479. package/dist/store/auth.js +10 -9
  480. package/dist/store/candidates.d.ts +20 -3
  481. package/dist/store/candidates.js +77 -48
  482. package/dist/store/card-detail.d.ts +2 -1
  483. package/dist/store/card-detail.js +2 -1
  484. package/dist/store/cards.d.ts +14 -9
  485. package/dist/store/cards.js +72 -126
  486. package/dist/store/conflicts.d.ts +4 -21
  487. package/dist/store/conflicts.js +71 -150
  488. package/dist/store/connectors/github.d.ts +10 -10
  489. package/dist/store/connectors/github.js +10 -10
  490. package/dist/store/dashboard-reads.js +4 -8
  491. package/dist/store/delete-and-batch.d.ts +11 -31
  492. package/dist/store/delete-and-batch.js +48 -64
  493. package/dist/store/delivery-recorder.d.ts +8 -4
  494. package/dist/store/delivery-recorder.js +25 -15
  495. package/dist/store/diagnostics.js +6 -13
  496. package/dist/store/dormant.d.ts +7 -29
  497. package/dist/store/dormant.js +15 -56
  498. package/dist/store/embeddings/index.d.ts +11 -80
  499. package/dist/store/embeddings/index.js +71 -207
  500. package/dist/store/embeddings/local.js +15 -32
  501. package/dist/store/embeddings/provider.d.ts +16 -53
  502. package/dist/store/embeddings/provider.js +41 -69
  503. package/dist/store/entry-reads.d.ts +21 -57
  504. package/dist/store/entry-reads.js +65 -126
  505. package/dist/store/entry-row.d.ts +6 -35
  506. package/dist/store/entry-row.js +9 -37
  507. package/dist/store/entry-writes.d.ts +10 -16
  508. package/dist/store/entry-writes.js +17 -35
  509. package/dist/store/goals.d.ts +3 -40
  510. package/dist/store/goals.js +21 -160
  511. package/dist/store/graph-queue.d.ts +6 -22
  512. package/dist/store/graph-queue.js +14 -45
  513. package/dist/store/graph-reads.d.ts +11 -35
  514. package/dist/store/graph-reads.js +20 -58
  515. package/dist/store/graph-rows.d.ts +3 -6
  516. package/dist/store/graph-rows.js +6 -9
  517. package/dist/store/graph-view-rows.d.ts +2 -1
  518. package/dist/store/graph-view-rows.js +2 -1
  519. package/dist/store/graph-writes.d.ts +6 -31
  520. package/dist/store/graph-writes.js +13 -37
  521. package/dist/store/half-life.d.ts +2 -1
  522. package/dist/store/half-life.js +14 -16
  523. package/dist/store/handoffs.d.ts +5 -11
  524. package/dist/store/handoffs.js +16 -34
  525. package/dist/store/index-and-stats.d.ts +6 -19
  526. package/dist/store/index-and-stats.js +34 -82
  527. package/dist/store/markdown.d.ts +2 -6
  528. package/dist/store/markdown.js +21 -20
  529. package/dist/store/mirrors.d.ts +2 -6
  530. package/dist/store/mirrors.js +14 -23
  531. package/dist/store/open.js +6 -13
  532. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  533. package/dist/store/planning-fallacy-evidence.js +8 -37
  534. package/dist/store/port.d.ts +82 -79
  535. package/dist/store/predictions.d.ts +11 -51
  536. package/dist/store/predictions.js +38 -119
  537. package/dist/{cli → store}/quality-repair.js +15 -31
  538. package/dist/store/raw-archive.d.ts +4 -16
  539. package/dist/store/raw-archive.js +14 -29
  540. package/dist/store/recall-scope.d.ts +19 -79
  541. package/dist/store/recall-scope.js +21 -82
  542. package/dist/store/recall-trace.d.ts +10 -77
  543. package/dist/store/recall-trace.js +19 -95
  544. package/dist/store/rejected-values.js +7 -19
  545. package/dist/store/rejection.d.ts +12 -58
  546. package/dist/store/rejection.js +13 -65
  547. package/dist/store/report-reads.d.ts +6 -0
  548. package/dist/store/report-reads.js +29 -0
  549. package/dist/store/rows.d.ts +9 -19
  550. package/dist/store/rows.js +36 -34
  551. package/dist/store/rule-sql.d.ts +5 -0
  552. package/dist/store/rule-sql.js +37 -0
  553. package/dist/store/search-rows.d.ts +7 -38
  554. package/dist/store/search-rows.js +14 -50
  555. package/dist/store/sessions.d.ts +10 -47
  556. package/dist/store/sessions.js +17 -73
  557. package/dist/store/sqlite/connector-events-group.js +2 -2
  558. package/dist/store/sqlite/entry-writes-group.js +2 -2
  559. package/dist/store/sqlite/error-codec.js +4 -2
  560. package/dist/store/sqlite/executor.d.ts +2 -1
  561. package/dist/store/sqlite/executor.js +2 -1
  562. package/dist/store/sqlite/local.d.ts +3 -3
  563. package/dist/store/sqlite/local.js +1 -0
  564. package/dist/store/sqlite/object-rows.js +6 -3
  565. package/dist/store/sqlite/objects-group.js +4 -2
  566. package/dist/store/sqlite/quarantine-group.js +2 -2
  567. package/dist/store/sqlite/store.d.ts +1 -4
  568. package/dist/store/sqlite/store.js +2 -3
  569. package/dist/store/sqlite/vector-reads-group.js +2 -2
  570. package/dist/store/sqlite/worker-jobs.js +1 -1
  571. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  572. package/dist/store/sqlite/worker-ops.js +13 -2
  573. package/dist/store/sqlite/worker-store.js +5 -2
  574. package/dist/store/summaries.d.ts +10 -62
  575. package/dist/store/summaries.js +34 -146
  576. package/dist/store/summary-dirty.js +1 -1
  577. package/dist/store/tenant-lookup.d.ts +6 -1
  578. package/dist/store/tenant-lookup.js +7 -0
  579. package/dist/store/tenant.d.ts +2 -16
  580. package/dist/store/tenant.js +4 -19
  581. package/dist/store/token-ledger.d.ts +13 -43
  582. package/dist/store/token-ledger.js +19 -50
  583. package/dist/store/usage-reports.js +5 -13
  584. package/dist/store/vector-index.d.ts +46 -0
  585. package/dist/store/vector-index.js +170 -0
  586. package/dist/store/working-memory.d.ts +6 -25
  587. package/dist/store/working-memory.js +18 -52
  588. package/dist/store/yaml.d.ts +1 -5
  589. package/dist/store/yaml.js +2 -6
  590. package/dist/support-bundle.js +7 -5
  591. package/dist/trust/reject-flow.js +1 -3
  592. package/dist/util/anthropic-messages.js +14 -2
  593. package/dist/util/atomic-write.d.ts +2 -1
  594. package/dist/util/atomic-write.js +35 -4
  595. package/dist/util/capped-json.d.ts +6 -0
  596. package/dist/util/capped-json.js +46 -0
  597. package/dist/util/crash-handlers.d.ts +8 -1
  598. package/dist/util/crash-handlers.js +52 -10
  599. package/dist/util/env.d.ts +13 -6
  600. package/dist/util/env.js +14 -7
  601. package/dist/util/home-path.d.ts +2 -1
  602. package/dist/util/home-path.js +4 -2
  603. package/dist/util/http-retry.d.ts +3 -1
  604. package/dist/util/http-retry.js +26 -5
  605. package/dist/util/log.d.ts +3 -2
  606. package/dist/util/log.js +25 -9
  607. package/dist/util/request-scope.d.ts +2 -1
  608. package/dist/util/request-scope.js +2 -1
  609. package/dist/util/secret-detect.d.ts +5 -30
  610. package/dist/util/secret-detect.js +13 -39
  611. package/dist/util/stored-json.d.ts +1 -1
  612. package/dist/util/stored-json.js +1 -1
  613. package/dist/util/token-text.d.ts +1 -4
  614. package/dist/util/token-text.js +1 -4
  615. package/dist/util/transcript-tail.d.ts +2 -0
  616. package/dist/util/transcript-tail.js +24 -23
  617. package/dist/util/version.d.ts +5 -20
  618. package/dist/util/version.js +5 -20
  619. package/extensions/openclaw-plugin/index.ts +1 -1
  620. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  621. package/extensions/openclaw-plugin/package.json +1 -1
  622. package/openclaw.plugin.json +1 -1
  623. package/package.json +1 -1
  624. package/dist/connectors/github/cli-impl.d.ts +0 -25
  625. package/dist/sharing/shared.d.ts +0 -187
  626. package/dist/sharing/shared.js +0 -563
  627. package/dist/store/vector-writes.d.ts +0 -13
  628. package/dist/store/vector-writes.js +0 -89
  629. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
@@ -4,17 +4,8 @@ import type { MemoryEntry } from '../core/memory.js';
4
4
  import type { DeliveryObserver } from '../store/delivery-recorder.js';
5
5
  import type { AmbientState } from '../core/ambient.js';
6
6
  import type { ProjectRef } from '../core/project-identity.js';
7
- /**
8
- * Options for `getContext` — assemble a budget-bounded context bundle
9
- * (recalled memories + active task snapshot + handoff + recent events).
10
- *
11
- * Named `getContext` (not `context`) to avoid collision with the `Context`
12
- * interface above and the ubiquitous `ctx: Context` convention. Follows the
13
- * existing `getEntry` naming pattern in store.ts.
14
- *
15
- * Rendering opts (`format`, `framing`, `rendered`) and host-side opts (`auto`) stay in the CLI,
16
- * because its print helpers are shared with `cmdRecall` / `cmdSnapshot` / `cmdHandoffShow`.
17
- */
7
+ /** Options for `getContext`: a budget-bounded bundle of recalled memories, active task snapshot, handoff and recent events.
8
+ * Rendering opts (`format`, `framing`, `rendered`) and host-side opts (`auto`) stay in the CLI, whose print helpers are shared. */
18
9
  export interface ContextOpts {
19
10
  q?: string;
20
11
  /** Default 1500 tokens. */
@@ -24,30 +15,16 @@ export interface ContextOpts {
24
15
  scope?: string;
25
16
  /** Envelope scope to match exactly, as in `recall`: admits that scope even when private, after the actor's scope check. */
26
17
  exactScope?: string;
27
- /** With `pinnedOnly`, also inject the N most recent writes that pass the
28
- * quality floor (`isWorthSurfacing`). Filtering happens BEFORE
29
- * the take-N, so a caller asking for 5 gets 5 qualifying entries rather
30
- * than 5-minus-junk; pinned entries bypass the floor. Entries are only
31
- * skipped for this read, never mutated or deleted. Ignored when
32
- * `pinnedOnly` is false — no other path reads it. */
18
+ /** With `pinnedOnly`, also inject the N most recent writes that pass the quality floor (`isWorthSurfacing`); pinned entries bypass it.
19
+ * Filtering happens BEFORE the take-N, so asking for 5 gets 5 qualifying entries. Ignored when `pinnedOnly` is false. */
33
20
  includeRecent?: number;
34
- /** v39 memory scope isolation: re-include other-project memories that the
35
- * origin partition excludes by default. They come back tagged
36
- * `category: 'cross-project'` so renderers can demarcate them. */
21
+ /** Re-include other-project memories the origin partition excludes by default; they come back tagged `category: 'cross-project'`. */
37
22
  crossProject?: boolean;
38
- /** The active project for the origin partition ('' = not in a project): a
39
- * name, or an identity whose rows may also carry its legacy folder name.
40
- * Defaults to `resolveProjectIdentity(process.cwd())`; surfaces whose
41
- * process cwd is not the caller's project (HTTP server) should pass it. */
23
+ /** The active project for the origin partition ('' = not in a project): a name, or an identity whose rows may carry its legacy folder name.
24
+ * Defaults to `resolveProjectIdentity(process.cwd())`; surfaces whose cwd is not the caller's project (HTTP server) should pass it. */
42
25
  currentProject?: ProjectRef;
43
- /** The calling
44
- * session's id. Stamped on this call's recall trace, and the owner-match input to
45
- * `loadFreshActiveTaskSnapshot` — when it strictly equals the active
46
- * snapshot's `session_id`, the read is unbounded (same-session
47
- * continuity); otherwise the snapshot must pass the freshness bound to
48
- * surface. Absent (undefined/null/'') never short-circuits as a match;
49
- * it just means every snapshot goes through the age check. Host-resolved
50
- * (stdin payload, HIPPO_SESSION_ID, else the host's session var) so this stays host-agnostic. */
26
+ /** The calling session's id, stamped on this call's recall trace. When it strictly equals the active snapshot's `session_id` the read is unbounded;
27
+ * otherwise the snapshot must pass the freshness bound. Absent (undefined/null/'') never matches. Host-resolved, so this stays host-agnostic. */
51
28
  currentSessionId?: string | null;
52
29
  /** Raw hook-payload prompt; only the pinned-only branch reads it, gated on `pinnedInject.promptRecall`. */
53
30
  prompt?: string;
@@ -83,9 +60,7 @@ export interface ContextResultEntry {
83
60
  promptRecall?: boolean;
84
61
  /** v39: the entry's owning project ('' = user-global, null = legacy row). */
85
62
  origin?: string | null;
86
- /** v39: how the origin relates to the active project. 'cross-project'
87
- * entries only appear when ContextOpts.crossProject was set (or isolation
88
- * is disabled). */
63
+ /** How the origin relates to the active project; 'cross-project' appears only when `crossProject` was set (or isolation is disabled). */
89
64
  category?: 'project' | 'user-global' | 'cross-project';
90
65
  }
91
66
  export interface ContextResult {
@@ -3,28 +3,11 @@ import { type ProjectRef } from '../core/project-identity.js';
3
3
  import type { ContextOpts, ContextResult } from './context-types.js';
4
4
  import { type Context } from './types.js';
5
5
  export { oneCopyPerMemory } from './context-select.js';
6
- /**
7
- * The secret half of the ambient policy on its own, for callers
8
- * that apply their own scope rule. A flagged row is only admitted inside its owning project;
9
- * flagged rows with no project origin never ambient-inject.
10
- */
6
+ /** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only inside its owning project. */
11
7
  export declare function ambientSecretAdmit(e: MemoryEntry, currentProject: ProjectRef): boolean;
12
- /**
13
- * Assemble a context bundle: recalled memories (pinned-only / strength-sorted
14
- * fallback / hybrid search) + active task snapshot + session handoff + recent
15
- * session events. Budget-bounded, tenant-scoped. Mutates `last_retrieval_ids`
16
- * + emits a 'recall' audit row for non-pinned, non-'*' queries.
17
- *
18
- * Behaves like the pre-extraction `cmdContext` data-loading + selection
19
- * pipeline. CLI presentation (markdown / json / additional-context rendering)
20
- * stays in `cli.ts`.
21
- *
22
- * Tenant scope: all `loadAllEntries` / snapshot / handoff / events reads use
23
- * `ctx.tenantId`. Cross-tenant rows are filtered out.
24
- *
25
- * @returns An empty result (`entries: []`, snapshot/handoff/events undefined)
26
- * when there's nothing to surface (no memories AND no snapshot AND no handoff
27
- * AND no recent events).
28
- */
8
+ /** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
9
+ export declare const DEFAULT_CONTEXT_BUDGET = 1500;
10
+ /** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
11
+ * Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
29
12
  export declare function getContext(ctx: Context, opts?: ContextOpts): Promise<ContextResult>;
30
13
  //# sourceMappingURL=context.d.ts.map
@@ -5,7 +5,7 @@ import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessi
5
5
  import { estimateTokens } from '../util/token-text.js';
6
6
  import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
7
7
  import { isWorthSurfacing } from '../core/memory-quality.js';
8
- import { getGlobalRoot } from '../sharing/shared.js';
8
+ import { getGlobalRoot } from '../sharing/global-store.js';
9
9
  import { evalNow } from '../core/ablation.js';
10
10
  import { dropHeldCopies } from '../util/same-text.js';
11
11
  import { BadRequestError } from '../core/api-errors.js';
@@ -24,19 +24,8 @@ import { andThen, onStore } from './on-store.js';
24
24
  import { strengthenOf } from './recall-record.js';
25
25
  import { ownerOrSubject } from './types.js';
26
26
  export { oneCopyPerMemory } from './context-select.js';
27
- /**
28
- * v39: the single ambient-injection admission policy, shared by getContext
29
- * and the CLI-side ambient-state summary so the two cannot drift.
30
- *
31
- * - Secret veto is UNCONDITIONAL: neither crossProject nor
32
- * contextProjectIsolation:false re-includes secrets. A flagged row only
33
- * injects inside its owning project; flagged rows with no project origin
34
- * (''/null) never ambient-inject at all. Explicit recall is unaffected -
35
- * recalling a secret is a deliberate act.
36
- * - Envelope parity: private/quarantine scopes never inject unless `exactScope` names one.
37
- * - Origin partition: other-project rows are excluded unless
38
- * `includeCrossProject`.
39
- */
27
+ /** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot drift.
28
+ * Secret veto is unconditional (flagged rows inject only in their own project); private scopes need `exactScope`, other projects `includeCrossProject`. */
40
29
  function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, own) {
41
30
  if (!ambientSecretAdmit(e, currentProject))
42
31
  return false;
@@ -46,11 +35,7 @@ function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, o
46
35
  return true;
47
36
  return classifyOriginProject(e.origin_project, currentProject) !== 'cross-project';
48
37
  }
49
- /**
50
- * The secret half of the ambient policy on its own, for callers
51
- * that apply their own scope rule. A flagged row is only admitted inside its owning project;
52
- * flagged rows with no project origin never ambient-inject.
53
- */
38
+ /** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only inside its owning project. */
54
39
  export function ambientSecretAdmit(e, currentProject) {
55
40
  if (!detectSecret(e).flagged)
56
41
  return true;
@@ -59,6 +44,8 @@ export function ambientSecretAdmit(e, currentProject) {
59
44
  return false;
60
45
  return projectNames(currentProject).includes(origin);
61
46
  }
47
+ /** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
48
+ export const DEFAULT_CONTEXT_BUDGET = 1500;
62
49
  /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
63
50
  const CONTEXT_CANDIDATE_CAP = 2000;
64
51
  /** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
@@ -98,25 +85,10 @@ async function loadAmbientEntries(source, tenantId, options) {
98
85
  const entries = loaded.entries.filter((e) => ownTenant(e) && recheck(e));
99
86
  return loaded.recall ? { entries, recall: loaded.recall.filter(ownTenant) } : { entries };
100
87
  }
101
- /**
102
- * Assemble a context bundle: recalled memories (pinned-only / strength-sorted
103
- * fallback / hybrid search) + active task snapshot + session handoff + recent
104
- * session events. Budget-bounded, tenant-scoped. Mutates `last_retrieval_ids`
105
- * + emits a 'recall' audit row for non-pinned, non-'*' queries.
106
- *
107
- * Behaves like the pre-extraction `cmdContext` data-loading + selection
108
- * pipeline. CLI presentation (markdown / json / additional-context rendering)
109
- * stays in `cli.ts`.
110
- *
111
- * Tenant scope: all `loadAllEntries` / snapshot / handoff / events reads use
112
- * `ctx.tenantId`. Cross-tenant rows are filtered out.
113
- *
114
- * @returns An empty result (`entries: []`, snapshot/handoff/events undefined)
115
- * when there's nothing to surface (no memories AND no snapshot AND no handoff
116
- * AND no recent events).
117
- */
88
+ /** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
89
+ * Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
118
90
  export async function getContext(ctx, opts = {}) {
119
- const budget = opts.budget ?? 1500;
91
+ const budget = opts.budget ?? DEFAULT_CONTEXT_BUDGET;
120
92
  assertScopeRequestAllowed(ctx.actor, opts.exactScope);
121
93
  if (budget <= 0) {
122
94
  return { entries: [], tokens: 0 };
@@ -247,6 +219,8 @@ function openBlockBudget(plan, opts, budget) {
247
219
  obs?.facts({ projectName: projectId(plan.currentProject), budgetTokens: blockBudget, promptRecall: promptRecallPending });
248
220
  if (pinnedOnly && !config.pinnedInject.enabled)
249
221
  obs?.disabled();
222
+ if (!pinnedOnly)
223
+ obs?.queried(plan.query);
250
224
  return cost
251
225
  ? Math.max(0, blockBudget - cost.fixed(blockBudget, { cross: plan.includeCrossProject, promptRecall: promptRecallPending, ambient: !pinnedOnly && config.ambient.enabled }))
252
226
  : blockBudget;
@@ -348,6 +322,12 @@ async function loadPools(ctx, plan, admission, recallRequest) {
348
322
  /** The `limit` cut, then the held-copy drop, then each entry's origin annotation. */
349
323
  function finalizeSelection(picked, plan) {
350
324
  const { obs } = plan;
325
+ // Ranking reports nothing itself, so its results are offered here and the cuts below can name what they drop.
326
+ if (!plan.pinnedOnly && obs) {
327
+ const pool = plan.query === '*' ? 'strength' : 'search';
328
+ obs.offer(picked.filter((r) => r.isGlobal !== true).map((r) => r.entry), false, pool);
329
+ obs.offer(picked.filter((r) => r.isGlobal === true).map((r) => r.entry), true, pool);
330
+ }
351
331
  let selected = picked;
352
332
  if (plan.limit < selected.length) {
353
333
  const cut = selected.slice(0, plan.limit);
@@ -405,7 +385,10 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
405
385
  };
406
386
  const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
407
387
  // hippo.db keeps the ids as its last recall, which feeds only outcomeForLastRecall, and it alone reads a second root.
408
- await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), () => port.bumpRecallStats(selected.length)));
388
+ await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), (traceId) => {
389
+ plan.obs?.traced(traceId);
390
+ return port.bumpRecallStats(selected.length);
391
+ }));
409
392
  // Replace selectedItems entries with markRetrieved-updated copies so
410
393
  // the returned ContextResult reflects post-recall state.
411
394
  const items = selected.map((s) => ({
@@ -1,29 +1,13 @@
1
1
  import { type DormantMemory, type ListDormantOpts } from '../store/dormant.js';
2
2
  import { type MemoryEntry } from '../core/memory.js';
3
3
  import type { Context } from './types.js';
4
- /**
5
- * A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
6
- * active memory instead of deleting, when `dormant.enabled` is on. Newest
7
- * first; `opts.query` keeps rows containing every term (case-insensitive).
8
- */
4
+ /** A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is on. Newest first;
5
+ * `opts.query` keeps rows containing every term (case-insensitive). */
9
6
  export declare function listDormant(ctx: Context, opts?: ListDormantOpts): DormantMemory[];
10
- /**
11
- * Bring a dormant memory back into active memory. It returns as if just
12
- * recalled, with a full half-life. A row audit repair set aside returns
13
- * `verified`, so no quality check judges it again. Every other field is the
14
- * snapshot taken when it went dormant.
15
- *
16
- * Throws when the tenant has no dormant memory with that id (another
17
- * tenant's id, or another person's personal row, reads the same way), when a live memory already holds the id,
18
- * and RejectedValueError when the value has been rejected since. On any
19
- * throw the dormant copy stays where it is.
20
- */
7
+ /** Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns `verified`.
8
+ * Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since rejected (the dormant copy stays). */
21
9
  export declare function restoreDormant(ctx: Context, id: string): MemoryEntry;
22
- /**
23
- * Permanently delete a dormant memory: the explicit "forget it for good"
24
- * that dormant storage leaves to the user. Throws when the tenant has no
25
- * dormant memory with that id.
26
- */
10
+ /** Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory with that id. */
27
11
  export declare function forgetDormant(ctx: Context, id: string): void;
28
12
  /** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
29
13
  export declare function isDormant(ctx: Context, id: string): boolean;
@@ -7,25 +7,13 @@ import { createMemory, calculateStrength } from '../core/memory.js';
7
7
  import { loadConfig } from '../core/config.js';
8
8
  import { canTouchScope, personalScopeOf, touchableScopeSql } from '../store/recall-scope.js';
9
9
  const touchable = (ctx) => touchableScopeSql('', personalScopeOf(ctx.actor));
10
- /**
11
- * A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
12
- * active memory instead of deleting, when `dormant.enabled` is on. Newest
13
- * first; `opts.query` keeps rows containing every term (case-insensitive).
14
- */
10
+ /** A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is on. Newest first;
11
+ * `opts.query` keeps rows containing every term (case-insensitive). */
15
12
  export function listDormant(ctx, opts = {}) {
16
13
  return loadDormantMemories(ctx.hippoRoot, ctx.tenantId, opts, touchable(ctx));
17
14
  }
18
- /**
19
- * Bring a dormant memory back into active memory. It returns as if just
20
- * recalled, with a full half-life. A row audit repair set aside returns
21
- * `verified`, so no quality check judges it again. Every other field is the
22
- * snapshot taken when it went dormant.
23
- *
24
- * Throws when the tenant has no dormant memory with that id (another
25
- * tenant's id, or another person's personal row, reads the same way), when a live memory already holds the id,
26
- * and RejectedValueError when the value has been rejected since. On any
27
- * throw the dormant copy stays where it is.
28
- */
15
+ /** Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns `verified`.
16
+ * Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since rejected (the dormant copy stays). */
29
17
  export function restoreDormant(ctx, id) {
30
18
  const outcome = restoreDormantMemory(ctx.hippoRoot, {
31
19
  tenantId: ctx.tenantId,
@@ -42,11 +30,8 @@ export function restoreDormant(ctx, id) {
42
30
  return outcome.entry;
43
31
  }
44
32
  function reviveSnapshot(ctx, dormant, now) {
45
- // Dormant rows are long-lived, so a snapshot can predate a field added
46
- // later: createMemory supplies a default for anything it lacks, then
47
- // the snapshot overrides every field it does carry, content included.
48
- // (The placeholder only satisfies createMemory's minimum length, so a
49
- // legacy row shorter than 3 chars can still be restored.)
33
+ // A snapshot can predate a field added later: createMemory supplies defaults, then the snapshot overrides every field it carries.
34
+ // The placeholder content only meets createMemory's minimum length, so a legacy row under 3 chars still restores.
50
35
  const revived = {
51
36
  ...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
52
37
  ...dormant.entry,
@@ -56,11 +41,7 @@ function reviveSnapshot(ctx, dormant, now) {
56
41
  revived.confidence = 'verified';
57
42
  return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
58
43
  }
59
- /**
60
- * Permanently delete a dormant memory: the explicit "forget it for good"
61
- * that dormant storage leaves to the user. Throws when the tenant has no
62
- * dormant memory with that id.
63
- */
44
+ /** Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory with that id. */
64
45
  export function forgetDormant(ctx, id) {
65
46
  const forgotten = forgetDormantMemory(ctx.hippoRoot, { tenantId: ctx.tenantId, id, actor: ctx.actor.subject, admit: touchable(ctx) });
66
47
  if (!forgotten)
@@ -3,21 +3,10 @@ import type { Context } from './types.js';
3
3
  export interface DrillDownOpts {
4
4
  /** Cap on number of children returned. Default 50. */
5
5
  limit?: number;
6
- /**
7
- * Optional token budget. When set, children are appended in chronological
8
- * order (created ASC) until adding the next child would exceed the budget.
9
- * Token cost = the child's printed line under `cost`, else ceil(content.length / 4).
10
- *
11
- * For depth > 1, the budget is GLOBAL cumulative (NOT per-level).
12
- */
6
+ /** Token budget: children append in created order until the next would exceed it (cost: printed line under `cost`, else ceil(content.length / 4)).
7
+ * For depth > 1 the budget is global and cumulative, not per level. */
13
8
  budget?: number;
14
- /**
15
- * v0.30 / E5 — walk N levels down (default 1 = direct children only).
16
- * Higher values include children of children, etc. Internal hard cap 10
17
- * to prevent pathological depth walks. BFS uses visited Set for dedup
18
- * (defensive against shared-child data anomalies; DAG is acyclic by
19
- * construction).
20
- */
9
+ /** Levels to walk down (default 1 = direct children); capped at 10 internally. BFS dedups with a visited Set, defensive against shared-child anomalies. */
21
10
  depth?: number;
22
11
  cost?: DrillDownCost;
23
12
  project?: CallerProject;
@@ -46,41 +35,13 @@ export interface DrillDownResult {
46
35
  totalChildren: number;
47
36
  truncated: boolean;
48
37
  }
49
- /**
50
- * v1.6.4 discriminated failure shape. Two reasons distinguishable:
51
- * - `not_found`: covers genuinely-missing, wrong-tenant, AND
52
- * scope-blocked (codex round 3 P1 — distinguishing scope_blocked
53
- * from not_found on non-HTTP surfaces leaked private-row existence
54
- * to no-scope callers, even though the HTTP route already collapsed
55
- * them. Collapse at the API layer.)
56
- * - `not_drillable`: id is a leaf row (level 0/1). Caller-actionable.
57
- *
58
- * If a future drillDown gains a `scope` opt for explicit-scope callers,
59
- * a `scope_blocked` failure could be safely re-introduced ONLY for that
60
- * code path (caller already proved authorization by passing a scope).
61
- */
38
+ /** `not_found` covers missing, wrong-tenant AND scope-blocked, because distinguishing scope_blocked leaked private-row existence to no-scope callers.
39
+ * `not_drillable`: the id is a leaf row (level 0/1), which the caller can act on. */
62
40
  export interface DrillDownFailure {
63
41
  failure: 'not_found' | 'not_drillable';
64
42
  }
65
43
  export type DrillDownOutcome = DrillDownResult | DrillDownFailure;
66
- /**
67
- * Walk one step down the DAG from a level-2 (or higher) summary to its direct
68
- * children. Companion to `recall(... summarizeOverflow: true)` — when recall
69
- * surfaces a summary with `substitutedFor: [...]`, the caller drills into the
70
- * summary id to recover the original detail.
71
- *
72
- * Tenant scope: only summaries owned by `ctx.tenantId` are reachable. The same
73
- * scope filter that recall applies is enforced on the children — a level-2
74
- * summary in `slack:public:CGEN` cannot leak `slack:private:*` children even
75
- * if the underlying DAG accidentally linked across scopes.
76
- *
77
- * Returns a discriminated `DrillDownOutcome`: `DrillDownResult` on success,
78
- * or `{failure: '...'}` for `not_found` (covers genuinely-missing, wrong-
79
- * tenant and scope-blocked, intentionally indistinguishable) or
80
- * `not_drillable` (id is a leaf row).
81
- *
82
- * Pre-v1.6.4 returned null for all three cases. JS callers migrate via
83
- * `'failure' in result` checks; HTTP route maps `not_drillable` to 422.
84
- */
44
+ /** One step down the DAG from a level-2+ summary to its direct children (the way back from `recall(... summarizeOverflow: true)` substitutions). Only
45
+ * `ctx.tenantId` summaries are reachable; children get recall's scope filter. Returns `DrillDownResult` or `{failure}`; HTTP maps `not_drillable` to 422. */
85
46
  export declare function drillDown(ctx: Context, summaryId: string, opts?: DrillDownOpts): Promise<DrillDownOutcome>;
86
47
  //# sourceMappingURL=drill-down.d.ts.map
@@ -4,25 +4,8 @@ import { estimateTokens } from '../util/token-text.js';
4
4
  import { passesScopeFilterForRecall, personalScopeOf } from '../store/recall-scope.js';
5
5
  import { classifyOriginProject } from '../core/project-identity.js';
6
6
  const DEFAULT_DRILL_DOWN_LIMIT = 50;
7
- /**
8
- * Walk one step down the DAG from a level-2 (or higher) summary to its direct
9
- * children. Companion to `recall(... summarizeOverflow: true)` — when recall
10
- * surfaces a summary with `substitutedFor: [...]`, the caller drills into the
11
- * summary id to recover the original detail.
12
- *
13
- * Tenant scope: only summaries owned by `ctx.tenantId` are reachable. The same
14
- * scope filter that recall applies is enforced on the children — a level-2
15
- * summary in `slack:public:CGEN` cannot leak `slack:private:*` children even
16
- * if the underlying DAG accidentally linked across scopes.
17
- *
18
- * Returns a discriminated `DrillDownOutcome`: `DrillDownResult` on success,
19
- * or `{failure: '...'}` for `not_found` (covers genuinely-missing, wrong-
20
- * tenant and scope-blocked, intentionally indistinguishable) or
21
- * `not_drillable` (id is a leaf row).
22
- *
23
- * Pre-v1.6.4 returned null for all three cases. JS callers migrate via
24
- * `'failure' in result` checks; HTTP route maps `not_drillable` to 422.
25
- */
7
+ /** One step down the DAG from a level-2+ summary to its direct children (the way back from `recall(... summarizeOverflow: true)` substitutions). Only
8
+ * `ctx.tenantId` summaries are reachable; children get recall's scope filter. Returns `DrillDownResult` or `{failure}`; HTTP maps `not_drillable` to 422. */
26
9
  export async function drillDown(ctx, summaryId, opts = {}) {
27
10
  const limit = opts.limit ?? DEFAULT_DRILL_DOWN_LIMIT;
28
11
  // v0.30 / E5: depth defaults 1 (backward compat); hard cap 10 levels
@@ -38,10 +21,8 @@ export async function drillDown(ctx, summaryId, opts = {}) {
38
21
  admit: (row) => readable(row) && (row.id !== summaryId || isDrillable(row)),
39
22
  page: limit >= 0 && Number.isSafeInteger(pastLimit) ? { rows: pastLimit, admit: readable } : undefined,
40
23
  });
41
- // No unscoped cross-tenant probe here: the tenant-scoped read's miss covers
42
- // both "doesn't exist" and "exists in another tenant" by design.
43
- // Distinguishing them via an unscoped lookup would leak existence to
44
- // unauthorised tenants. The two cases collapse into not_found.
24
+ // No unscoped cross-tenant probe: the tenant-scoped miss covers "missing" and "in another tenant" alike,
25
+ // because telling them apart would leak existence to unauthorised tenants.
45
26
  if (!walked)
46
27
  return { failure: 'not_found' };
47
28
  // A distinguishable "scope_blocked" would tell a no-scope caller "this row
@@ -80,9 +61,7 @@ function drillResult({ summary, levels, sizes: counted }, opts, limit) {
80
61
  return {
81
62
  summary: summaryOut,
82
63
  children,
83
- // v0.30 / E5: totalChildren = BFS-collected count (depth-aware). For
84
- // depth=1 this equals the eligible direct-children count (backward
85
- // compat). For depth>1 it is the cumulative count across levels.
64
+ // totalChildren is the BFS-collected count, cumulative across levels (equals the direct-children count at depth=1).
86
65
  totalChildren: total,
87
66
  truncated,
88
67
  };
@@ -1,6 +1,6 @@
1
- import type { RejectedValueRow } from '../store/rejection.js';
2
1
  import type { Context, StoreReply } from './types.js';
3
- /** Delete a memory by id. Reach is checked inside the delete's write scope, and a row out of reach answers as not found, so a caller learns nothing about it. */
2
+ /** Delete a memory by id. Reach is checked inside the delete's write scope, and a
3
+ * row out of reach answers as not found, so a caller learns nothing about it. */
4
4
  export interface ForgetResult {
5
5
  ok: true;
6
6
  id: string;
@@ -18,31 +18,12 @@ export interface RejectResult {
18
18
  digest: string;
19
19
  removedIds: string[];
20
20
  }
21
- /**
22
- * Reject a value: tombstone its normalized digest so a matching write is
23
- * refused everywhere (remember/capture/import/sync) until `unreject`. Two
24
- * forms — pass exactly one:
25
- * - `memoryId`: reject the CURRENT content of an existing memory. Removes
26
- * that row and every other live row in the tenant whose normalized
27
- * digest matches (not just the id passed), except another person's personal rows.
28
- * - `value`: pre-emptive form — tombstone content that may not currently
29
- * be stored (or is already gone). Zero removals.
30
- *
31
- * `reason` is required (the tombstone stores no content; reason is its
32
- * only human-readable identity). Throws if the memory id is not found in
33
- * `ctx.tenantId`, or if both/neither of `memoryId`/`value` are given.
34
- */
21
+ /** Tombstones a value's normalized digest so a matching write is refused everywhere until `unreject`; pass exactly one of `memoryId` or `value`.
22
+ * `memoryId` also removes every live tenant row with that digest (not others' personal rows); `reason` is required. Throws on an unknown id or both/neither. */
35
23
  export declare function reject(ctx: Context, opts: RejectOpts): RejectResult;
36
- /**
37
- * Delete a tombstone by exact digest or unambiguous prefix, restoring the
38
- * value's writability — the only v1 escape hatch (no per-write force flag).
39
- * Throws if `digestOrPrefix` matches no tombstone, is blank, or matches
40
- * more than one (use a longer prefix).
41
- */
24
+ /** Deletes a tombstone by exact digest or unambiguous prefix, restoring writability (the only v1 escape hatch); throws on blank, no match or several. */
42
25
  export declare function unreject(ctx: Context, digestOrPrefix: string): {
43
26
  ok: boolean;
44
27
  digest: string;
45
28
  };
46
- /** List every rejected-value tombstone for `ctx.tenantId`, newest first. */
47
- export declare function listRejections(ctx: Context): RejectedValueRow[];
48
29
  //# sourceMappingURL=forget.d.ts.map
@@ -1,6 +1,6 @@
1
1
  // Forget a memory, and reject or unreject a value so it cannot be stored again.
2
2
  import { BadRequestError, NotFoundError } from '../core/api-errors.js';
3
- import { rejectValue, unrejectValue, listRejectionsForTenant } from '../trust/reject-flow.js';
3
+ import { rejectValue, unrejectValue } from '../trust/reject-flow.js';
4
4
  import { andThen, notPorted, onStore } from './on-store.js';
5
5
  import { readEntry } from '../store/entry-reads.js';
6
6
  import { canTouchScope, personalScopeOf } from '../store/recall-scope.js';
@@ -11,25 +11,11 @@ export function forget(ctx, id) {
11
11
  return andThen(entryWrites.forget(removal), () => ({ ok: true, id }));
12
12
  });
13
13
  }
14
- /**
15
- * Reject a value: tombstone its normalized digest so a matching write is
16
- * refused everywhere (remember/capture/import/sync) until `unreject`. Two
17
- * forms — pass exactly one:
18
- * - `memoryId`: reject the CURRENT content of an existing memory. Removes
19
- * that row and every other live row in the tenant whose normalized
20
- * digest matches (not just the id passed), except another person's personal rows.
21
- * - `value`: pre-emptive form — tombstone content that may not currently
22
- * be stored (or is already gone). Zero removals.
23
- *
24
- * `reason` is required (the tombstone stores no content; reason is its
25
- * only human-readable identity). Throws if the memory id is not found in
26
- * `ctx.tenantId`, or if both/neither of `memoryId`/`value` are given.
27
- */
14
+ /** Tombstones a value's normalized digest so a matching write is refused everywhere until `unreject`; pass exactly one of `memoryId` or `value`.
15
+ * `memoryId` also removes every live tenant row with that digest (not others' personal rows); `reason` is required. Throws on an unknown id or both/neither. */
28
16
  export function reject(ctx, opts) {
29
17
  if (opts.memoryId !== undefined) {
30
- // Tenant scope, same not-found-shaped denial as forget/promote above:
31
- // rejectValue itself also tenant-checks the id, but pre-checking here
32
- // keeps the error message consistent with the rest of this module.
18
+ // Tenant scope: same not-found-shaped denial as forget/promote; rejectValue tenant-checks too, but pre-checking keeps the error message consistent.
33
19
  const entry = readEntry(ctx.hippoRoot, opts.memoryId);
34
20
  if (entry?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, entry.scope)) {
35
21
  throw new NotFoundError(`memory not found: ${opts.memoryId}`);
@@ -46,12 +32,7 @@ export function reject(ctx, opts) {
46
32
  });
47
33
  return { digest: result.digest, removedIds: result.removedIds };
48
34
  }
49
- /**
50
- * Delete a tombstone by exact digest or unambiguous prefix, restoring the
51
- * value's writability — the only v1 escape hatch (no per-write force flag).
52
- * Throws if `digestOrPrefix` matches no tombstone, is blank, or matches
53
- * more than one (use a longer prefix).
54
- */
35
+ /** Deletes a tombstone by exact digest or unambiguous prefix, restoring writability (the only v1 escape hatch); throws on blank, no match or several. */
55
36
  export function unreject(ctx, digestOrPrefix) {
56
37
  const outcome = unrejectValue(ctx.hippoRoot, ctx.tenantId, digestOrPrefix, ctx.actor.subject);
57
38
  if (outcome.status === 'not_found') {
@@ -62,8 +43,4 @@ export function unreject(ctx, digestOrPrefix) {
62
43
  }
63
44
  return { ok: true, digest: outcome.digest };
64
45
  }
65
- /** List every rejected-value tombstone for `ctx.tenantId`, newest first. */
66
- export function listRejections(ctx) {
67
- return listRejectionsForTenant(ctx.hippoRoot, ctx.tenantId);
68
- }
69
46
  //# sourceMappingURL=forget.js.map
@@ -0,0 +1,8 @@
1
+ import type { GraphRows } from '../store/port.js';
2
+ import type { Context } from './types.js';
3
+ /** The entity/relation rows behind GET /v1/graph, as the caller's role, scopes and owner may see them. */
4
+ export declare function graphRows(ctx: Context, query: {
5
+ entity?: string;
6
+ limit: number;
7
+ }): Promise<GraphRows>;
8
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { requireGroup, storeFor } from '../store/index.js';
2
+ /** The entity/relation rows behind GET /v1/graph, as the caller's role, scopes and owner may see them. */
3
+ export async function graphRows(ctx, query) {
4
+ const { role, scopes, owner } = ctx.actor;
5
+ return requireGroup(storeFor(ctx), 'graphReads').graphRows(ctx.tenantId, { ...query, reader: { role, scopes, owner } });
6
+ }
7
+ //# sourceMappingURL=graph.js.map
@@ -6,6 +6,7 @@ export type { FailureSummary } from '../store/failure-log.js';
6
6
  export { classifyOriginProject } from '../core/project-identity.js';
7
7
  export * from './types.js';
8
8
  export * from './remember.js';
9
+ export * from './remember-local.js';
9
10
  export * from './recall-types.js';
10
11
  export * from './recall.js';
11
12
  export * from './assemble.js';
@@ -23,4 +24,5 @@ export * from './quarantine.js';
23
24
  export * from './sleep.js';
24
25
  export * from './goals.js';
25
26
  export * from './learn.js';
27
+ export * from './refine.js';
26
28
  //# sourceMappingURL=index.d.ts.map
package/dist/api/index.js CHANGED
@@ -9,6 +9,7 @@ export { passesCliRecallScopeFilter, ScopeForbiddenError } from '../store/recall
9
9
  export { classifyOriginProject } from '../core/project-identity.js';
10
10
  export * from './types.js';
11
11
  export * from './remember.js';
12
+ export * from './remember-local.js';
12
13
  export * from './recall-types.js';
13
14
  export * from './recall.js';
14
15
  export * from './assemble.js';
@@ -26,4 +27,5 @@ export * from './quarantine.js';
26
27
  export * from './sleep.js';
27
28
  export * from './goals.js';
28
29
  export * from './learn.js';
30
+ export * from './refine.js';
29
31
  //# sourceMappingURL=index.js.map