hippo-memory 1.69.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,30 +1,19 @@
1
1
  // Dormant memories: list, restore, forget and check.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { ConflictError, NotFoundError } from '../api-errors.js';
4
- import { auditRejectionRefusal } from '../store/audit-event.js';
2
+ import { ConflictError, NotFoundError } from '../core/api-errors.js';
5
3
  import { stampOriginProject } from '../store/entry-row.js';
6
- import { writeEntryDbOnly, writeEntryMirrors } from '../store/entry-writes.js';
7
4
  import { updateStatsUnlessBusy } from '../store/index-and-stats.js';
8
- import { RejectedValueError } from '../rejection.js';
9
- import { listDormantRows, readDormantSnapshot, deleteDormantRow, hasDormantRow, } from '../dormant.js';
10
- import { createMemory, calculateStrength } from '../memory.js';
11
- import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
12
- import { loadConfig } from '../config.js';
13
- import { canTouchScope, personalScopeOf, touchableScopeSql } from '../recall-scope.js';
5
+ import { loadDormantMemories, holdsDormantMemory, restoreDormantMemory, forgetDormantMemory, } from '../store/dormant.js';
6
+ import { createMemory, calculateStrength } from '../core/memory.js';
7
+ import { loadConfig } from '../core/config.js';
8
+ import { canTouchScope, personalScopeOf, touchableScopeSql } from '../store/recall-scope.js';
14
9
  const touchable = (ctx) => touchableScopeSql('', personalScopeOf(ctx.actor));
15
10
  /**
16
- * A tenant's dormant memories (src/dormant.ts): what sleep moved out of
11
+ * A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
17
12
  * active memory instead of deleting, when `dormant.enabled` is on. Newest
18
13
  * first; `opts.query` keeps rows containing every term (case-insensitive).
19
14
  */
20
15
  export function listDormant(ctx, opts = {}) {
21
- const db = openHippoDb(ctx.hippoRoot);
22
- try {
23
- return listDormantRows(db, ctx.tenantId, opts, touchable(ctx));
24
- }
25
- finally {
26
- closeHippoDb(db);
27
- }
16
+ return loadDormantMemories(ctx.hippoRoot, ctx.tenantId, opts, touchable(ctx));
28
17
  }
29
18
  /**
30
19
  * Bring a dormant memory back into active memory. It returns as if just
@@ -38,67 +27,34 @@ export function listDormant(ctx, opts = {}) {
38
27
  * throw the dormant copy stays where it is.
39
28
  */
40
29
  export function restoreDormant(ctx, id) {
41
- const db = openHippoDb(ctx.hippoRoot);
42
- try {
43
- let restored;
44
- db.exec('BEGIN IMMEDIATE');
45
- try {
46
- const dormant = readDormantSnapshot(db, ctx.tenantId, id);
47
- if (!dormant || !canTouchScope(ctx.actor, dormant.entry.scope ?? null)) {
48
- throw new NotFoundError(`dormant memory not found: ${id}`);
49
- }
50
- if (db.prepare(`SELECT 1 FROM memories WHERE id = ?`).get(id) !== undefined) {
51
- throw new ConflictError(`memory ${id} is already active; forget it before restoring its dormant copy`);
52
- }
53
- const now = new Date();
54
- // Dormant rows are long-lived, so a snapshot can predate a field added
55
- // later: createMemory supplies a default for anything it lacks, then
56
- // the snapshot overrides every field it does carry, content included.
57
- // (The placeholder only satisfies createMemory's minimum length, so a
58
- // legacy row shorter than 3 chars can still be restored.)
59
- const revived = {
60
- ...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
61
- ...dormant.entry,
62
- last_retrieved: now.toISOString(),
63
- };
64
- if (dormant.reason === 'quality-repair')
65
- revived.confidence = 'verified';
66
- restored = stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
67
- writeEntryDbOnly(db, restored, { actor: ctx.actor.subject });
68
- deleteDormantRow(db, ctx.tenantId, id);
69
- // A restore is a labelled "forgot it, then needed it" event: the
70
- // signal a learned lifecycle trains on. Same transaction
71
- // as the restore, so the label exists exactly when the restore does.
72
- appendAuditEvent(db, {
73
- tenantId: ctx.tenantId,
74
- actor: ctx.actor.subject,
75
- op: 'dormant_restore',
76
- targetId: id,
77
- metadata: {
78
- reason: dormant.reason,
79
- strengthAtDormancy: dormant.strength,
80
- dormantAt: dormant.dormantAt,
81
- daysDormant: Math.max(0, (now.getTime() - Date.parse(dormant.dormantAt)) / (24 * 60 * 60 * 1000)),
82
- },
83
- });
84
- db.exec('COMMIT');
85
- }
86
- catch (err) {
87
- try {
88
- db.exec('ROLLBACK');
89
- }
90
- catch { /* already rolled back */ }
91
- if (err instanceof RejectedValueError) {
92
- auditRejectionRefusal(db, err, ctx.actor.subject);
93
- }
94
- throw err;
95
- }
96
- writeEntryMirrors(ctx.hippoRoot, restored);
97
- return restored;
98
- }
99
- finally {
100
- closeHippoDb(db);
30
+ const outcome = restoreDormantMemory(ctx.hippoRoot, {
31
+ tenantId: ctx.tenantId,
32
+ id,
33
+ actor: ctx.actor.subject,
34
+ inReach: (scope) => canTouchScope(ctx.actor, scope),
35
+ revive: (snapshot, now) => reviveSnapshot(ctx, snapshot, now),
36
+ });
37
+ if (outcome.status === 'missing')
38
+ throw new NotFoundError(`dormant memory not found: ${id}`);
39
+ if (outcome.status === 'active') {
40
+ throw new ConflictError(`memory ${id} is already active; forget it before restoring its dormant copy`);
101
41
  }
42
+ return outcome.entry;
43
+ }
44
+ 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.)
50
+ const revived = {
51
+ ...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
52
+ ...dormant.entry,
53
+ last_retrieved: now.toISOString(),
54
+ };
55
+ if (dormant.reason === 'quality-repair')
56
+ revived.confidence = 'verified';
57
+ return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
102
58
  }
103
59
  /**
104
60
  * Permanently delete a dormant memory: the explicit "forget it for good"
@@ -106,39 +62,14 @@ export function restoreDormant(ctx, id) {
106
62
  * dormant memory with that id.
107
63
  */
108
64
  export function forgetDormant(ctx, id) {
109
- const db = openHippoDb(ctx.hippoRoot);
110
- try {
111
- if (!hasDormantRow(db, ctx.tenantId, id, touchable(ctx)) || !deleteDormantRow(db, ctx.tenantId, id)) {
112
- throw new NotFoundError(`dormant memory not found: ${id}`);
113
- }
114
- try {
115
- appendAuditEvent(db, {
116
- tenantId: ctx.tenantId,
117
- actor: ctx.actor.subject,
118
- op: 'forget',
119
- targetId: id,
120
- metadata: { dormant: true },
121
- });
122
- }
123
- catch (error) {
124
- // Best-effort, like every other forget audit row: the delete stands.
125
- reportAuditWriteFailure('forget', String(error), id);
126
- }
127
- }
128
- finally {
129
- closeHippoDb(db);
130
- }
65
+ const forgotten = forgetDormantMemory(ctx.hippoRoot, { tenantId: ctx.tenantId, id, actor: ctx.actor.subject, admit: touchable(ctx) });
66
+ if (!forgotten)
67
+ throw new NotFoundError(`dormant memory not found: ${id}`);
131
68
  // Counted like every other permanent removal (forget, archiveRaw).
132
69
  updateStatsUnlessBusy(ctx.hippoRoot, { forgotten: 1 }, `removed ${id}`);
133
70
  }
134
71
  /** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
135
72
  export function isDormant(ctx, id) {
136
- const db = openHippoDb(ctx.hippoRoot);
137
- try {
138
- return hasDormantRow(db, ctx.tenantId, id, touchable(ctx));
139
- }
140
- finally {
141
- closeHippoDb(db);
142
- }
73
+ return holdsDormantMemory(ctx.hippoRoot, ctx.tenantId, id, touchable(ctx));
143
74
  }
144
75
  //# sourceMappingURL=dormant.js.map
@@ -1,4 +1,4 @@
1
- import type { CallerProject } from '../prompt-hook.js';
1
+ import type { CallerProject } from './prompt-hook.js';
2
2
  import type { Context } from './types.js';
3
3
  export interface DrillDownOpts {
4
4
  /** Cap on number of children returned. Default 50. */
@@ -82,5 +82,5 @@ export type DrillDownOutcome = DrillDownResult | DrillDownFailure;
82
82
  * Pre-v1.6.4 returned null for all three cases. JS callers migrate via
83
83
  * `'failure' in result` checks; HTTP route maps `not_drillable` to 422.
84
84
  */
85
- export declare function drillDown(ctx: Context, summaryId: string, opts?: DrillDownOpts): DrillDownOutcome;
85
+ export declare function drillDown(ctx: Context, summaryId: string, opts?: DrillDownOpts): Promise<DrillDownOutcome>;
86
86
  //# sourceMappingURL=drill-down.d.ts.map
@@ -1,10 +1,9 @@
1
1
  // DAG drill-down from a summary to its children.
2
- import { closeHippoDb } from '../db.js';
3
- import { openStore } from '../store/open.js';
4
- import { selectEntriesByIds, selectChildrenByParent } from '../store/entry-reads.js';
5
- import { estimateTokens } from '../token-ledger.js';
6
- import { passesScopeFilterForRecall, personalScopeOf } from '../recall-scope.js';
7
- import { classifyOriginProject } from '../project-identity.js';
2
+ import { requireGroup, storeFor } from '../store/index.js';
3
+ import { estimateTokens } from '../util/token-text.js';
4
+ import { passesScopeFilterForRecall, personalScopeOf } from '../store/recall-scope.js';
5
+ import { classifyOriginProject } from '../core/project-identity.js';
6
+ const DEFAULT_DRILL_DOWN_LIMIT = 50;
8
7
  /**
9
8
  * Walk one step down the DAG from a level-2 (or higher) summary to its direct
10
9
  * children. Companion to `recall(... summarizeOverflow: true)` — when recall
@@ -24,47 +23,48 @@ import { classifyOriginProject } from '../project-identity.js';
24
23
  * Pre-v1.6.4 returned null for all three cases. JS callers migrate via
25
24
  * `'failure' in result` checks; HTTP route maps `not_drillable` to 422.
26
25
  */
27
- export function drillDown(ctx, summaryId, opts = {}) {
28
- const limit = opts.limit ?? 50;
26
+ export async function drillDown(ctx, summaryId, opts = {}) {
27
+ const limit = opts.limit ?? DEFAULT_DRILL_DOWN_LIMIT;
29
28
  // v0.30 / E5: depth defaults 1 (backward compat); hard cap 10 levels
30
29
  // prevents pathological deep trees. CLI/HTTP/MCP reject invalid values.
31
30
  const depth = Math.max(1, Math.min(Math.trunc(opts.depth ?? 1), 10));
32
- const db = openStore(ctx.hippoRoot);
33
- try {
34
- return drillDownOn(db, ctx, summaryId, depth, opts, limit);
35
- }
36
- finally {
37
- closeHippoDb(db);
38
- }
39
- }
40
- function drillDownOn(db, ctx, summaryId, depth, opts, limit) {
41
- const summary = selectEntriesByIds(db, [summaryId], ctx.tenantId).get(summaryId) ?? null;
31
+ const own = personalScopeOf(ctx.actor) ?? undefined;
32
+ const readable = (row) => passesScopeFilterForRecall(row.scope ?? null, undefined, own)
33
+ && (!opts.project || classifyOriginProject(row.origin_project, opts.project) !== 'cross-project');
34
+ const pastLimit = Math.floor(limit) + 1;
35
+ const walked = await requireGroup(storeFor(ctx), 'dagReads').summaryWithDescendants(ctx.tenantId, summaryId, {
36
+ depth,
37
+ // A leaf answers not_drillable, so nothing under it is read.
38
+ admit: (row) => readable(row) && (row.id !== summaryId || isDrillable(row)),
39
+ page: limit >= 0 && Number.isSafeInteger(pastLimit) ? { rows: pastLimit, admit: readable } : undefined,
40
+ });
42
41
  // No unscoped cross-tenant probe here: the tenant-scoped read's miss covers
43
42
  // both "doesn't exist" and "exists in another tenant" by design.
44
43
  // Distinguishing them via an unscoped lookup would leak existence to
45
44
  // unauthorised tenants. The two cases collapse into not_found.
46
- if (!summary)
45
+ if (!walked)
47
46
  return { failure: 'not_found' };
48
- const own = personalScopeOf(ctx.actor) ?? undefined;
49
- if (!passesScopeFilterForRecall(summary.scope ?? null, undefined, own)) {
50
- // codex round 3 P1: collapse to not_found. A distinguishable
51
- // "scope_blocked" tells a no-scope caller "this row exists, just
52
- // not for you" — same existence-leak the HTTP 404 collapse was
53
- // already preventing. Match the HTTP behaviour at the API level.
54
- return { failure: 'not_found' };
55
- }
56
- const shown = (row) => !opts.project || classifyOriginProject(row.origin_project, opts.project) !== 'cross-project';
57
- if (!shown(summary))
47
+ // A distinguishable "scope_blocked" would tell a no-scope caller "this row
48
+ // exists, just not for you", the existence leak the HTTP 404 collapse prevents.
49
+ if (!readable(walked.summary))
58
50
  return { failure: 'not_found' };
59
- if ((summary.dag_level ?? 0) < 2)
51
+ if (!isDrillable(walked.summary))
60
52
  return { failure: 'not_drillable' };
61
- const { collected, level0DirectCount } = collectDescendants(db, ctx.tenantId, summaryId, depth, own, shown);
53
+ return drillResult(walked, opts, limit);
54
+ }
55
+ function isDrillable(row) {
56
+ return (row.dag_level ?? 0) >= 2;
57
+ }
58
+ function drillResult({ summary, levels, sizes: counted }, opts, limit) {
59
+ const collected = levels.flat();
60
+ const sizes = counted ?? levels.map((level) => level.length);
61
+ const total = sizes.reduce((sum, n) => sum + n, 0);
62
62
  const summaryOut = {
63
63
  id: summary.id,
64
64
  content: summary.content,
65
65
  // v0.30 / E5: the STORED direct-child count; the legacy fallback counts
66
66
  // level-0 children, never the BFS-depth-N total (independent-review MED #4).
67
- descendantCount: summary.descendant_count ?? level0DirectCount,
67
+ descendantCount: summary.descendant_count ?? (sizes[0] ?? 0),
68
68
  earliestAt: summary.earliest_at ?? null,
69
69
  latestAt: summary.latest_at ?? null,
70
70
  };
@@ -75,54 +75,26 @@ function drillDownOn(db, ctx, summaryId, depth, opts, limit) {
75
75
  dagLevel: c.dag_level ?? 0,
76
76
  created: c.created,
77
77
  }));
78
- const { children, truncated } = capChildren(all, summaryOut, opts, limit);
78
+ const fixed = opts.budget !== undefined ? opts.cost?.fixed(summaryOut, total) ?? 0 : 0;
79
+ const { children, truncated } = capChildren(all, fixed, opts, limit);
79
80
  return {
80
81
  summary: summaryOut,
81
82
  children,
82
83
  // v0.30 / E5: totalChildren = BFS-collected count (depth-aware). For
83
84
  // depth=1 this equals the eligible direct-children count (backward
84
85
  // compat). For depth>1 it is the cumulative count across levels.
85
- totalChildren: collected.length,
86
+ totalChildren: total,
86
87
  truncated,
87
88
  };
88
89
  }
89
- // BFS with a visited set: dag_parent_id is not unique, so a misconfigured tree could emit a child twice past depth 1.
90
- // The level-0 count is kept apart so a legacy summary's descendantCount fallback counts direct children only.
91
- function collectDescendants(db, tenantId, summaryId, depth, own, shown) {
92
- const collected = [];
93
- const visited = new Set([summaryId]);
94
- let frontier = [summaryId];
95
- let level0DirectCount = 0;
96
- for (let level = 0; level < depth; level++) {
97
- const nextFrontier = [];
98
- const kidsByParent = selectChildrenByParent(db, frontier, tenantId);
99
- for (const parentId of frontier) {
100
- const kids = kidsByParent.get(parentId) ?? [];
101
- const eligibleKids = kids.filter((c) => passesScopeFilterForRecall(c.scope ?? null, undefined, own) && shown(c));
102
- for (const k of eligibleKids) {
103
- if (visited.has(k.id))
104
- continue;
105
- visited.add(k.id);
106
- collected.push(k);
107
- nextFrontier.push(k.id);
108
- if (level === 0)
109
- level0DirectCount++;
110
- }
111
- }
112
- if (nextFrontier.length === 0)
113
- break;
114
- frontier = nextFrontier;
115
- }
116
- return { collected, level0DirectCount };
117
- }
118
90
  /** Global cumulative token budget first, then the `limit` cap. */
119
- function capChildren(all, summaryOut, opts, limit) {
91
+ function capChildren(all, fixed, opts, limit) {
120
92
  let children = all;
121
93
  let truncated = false;
122
94
  if (opts.budget !== undefined) {
123
95
  const out = [];
124
96
  let used = 0;
125
- const room = opts.budget - (opts.cost?.fixed(summaryOut, all.length) ?? 0);
97
+ const room = opts.budget - fixed;
126
98
  for (const c of all) {
127
99
  const t = opts.cost ? opts.cost.child(c) : estimateTokens(c.content);
128
100
  if (out.length > 0 && used + t > room) {
@@ -1,15 +1,6 @@
1
- import type { RejectedValueRow } from '../rejection.js';
1
+ import type { RejectedValueRow } from '../store/rejection.js';
2
2
  import type { Context, StoreReply } from './types.js';
3
- /**
4
- * Delete a memory by id. `deleteEntry` threads ctx.actor.subject into its internal
5
- * audit hook, so exactly one 'forget' event lands with the supplied actor.
6
- *
7
- * Tenant scope: deleteEntry looks up the row by id alone, so without an
8
- * explicit tenant guard a Bearer for tenant A could delete tenant B's row
9
- * by guessing or leaking the id. Pre-check the row's tenant_id and deny
10
- * cross-tenant access with a not-found error (no info leak about whether
11
- * the id exists in another tenant).
12
- */
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. */
13
4
  export interface ForgetResult {
14
5
  ok: true;
15
6
  id: string;
@@ -1,42 +1,15 @@
1
1
  // Forget a memory, and reject or unreject a value so it cannot be stored again.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { BadRequestError, NotFoundError } from '../api-errors.js';
4
- import { deleteEntry } from '../store/delete-and-batch.js';
5
- import { updateStatsUnlessBusy } from '../store/index-and-stats.js';
6
- import { rejectValue, unrejectValue, listRejectionsForTenant } from '../reject-flow.js';
7
- import { requireGroup } from '../store-port.js';
8
- import { selectMemoryReach } from '../store/tenant-lookup.js';
9
- import { canTouchScope, personalScopeOf } from '../recall-scope.js';
2
+ import { BadRequestError, NotFoundError } from '../core/api-errors.js';
3
+ import { rejectValue, unrejectValue, listRejectionsForTenant } from '../trust/reject-flow.js';
4
+ import { andThen, notPorted, onStore } from './on-store.js';
5
+ import { readEntry } from '../store/entry-reads.js';
6
+ import { canTouchScope, personalScopeOf } from '../store/recall-scope.js';
10
7
  export function forget(ctx, id) {
11
- const reply = ctx.store ? forgetThroughStore(ctx, ctx.store, id) : forgetOnHippoDb(ctx, id);
12
- // SAFETY: a C typed with a store gets the promise its path returns; a wide C is typed as the union, which a caller has to await anyway.
13
- return reply;
14
- }
15
- async function forgetThroughStore(ctx, store, id) {
16
- const entryWrites = requireGroup(store, 'entryWrites');
17
- await entryWrites.forget({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id });
18
- return { ok: true, id };
19
- }
20
- function forgetOnHippoDb(ctx, id) {
21
- const db = openHippoDb(ctx.hippoRoot);
22
- try {
23
- const reach = selectMemoryReach(db, id);
24
- if (reach?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, reach.scope)) {
25
- throw new NotFoundError(`memory not found: ${id}`);
26
- }
27
- }
28
- finally {
29
- closeHippoDb(db);
30
- }
31
- const removed = deleteEntry(ctx.hippoRoot, id, { actor: ctx.actor.subject });
32
- if (!removed) {
33
- throw new NotFoundError(`memory not found: ${id}`);
34
- }
35
- // Counted here, not in the CLI: both callers of this function (cmdForget and
36
- // the HTTP route) are the two paths of one user command, so neither can miss
37
- // it. api.remember cannot take the same move; see the server route.
38
- updateStatsUnlessBusy(ctx.hippoRoot, { forgotten: 1 }, `removed ${id}`);
39
- return { ok: true, id };
8
+ return onStore(ctx, (port) => {
9
+ const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
10
+ const removal = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id };
11
+ return andThen(entryWrites.forget(removal), () => ({ ok: true, id }));
12
+ });
40
13
  }
41
14
  /**
42
15
  * Reject a value: tombstone its normalized digest so a matching write is
@@ -57,15 +30,9 @@ export function reject(ctx, opts) {
57
30
  // Tenant scope, same not-found-shaped denial as forget/promote above:
58
31
  // rejectValue itself also tenant-checks the id, but pre-checking here
59
32
  // keeps the error message consistent with the rest of this module.
60
- const db = openHippoDb(ctx.hippoRoot);
61
- try {
62
- const reach = selectMemoryReach(db, opts.memoryId);
63
- if (reach?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, reach.scope)) {
64
- throw new NotFoundError(`memory not found: ${opts.memoryId}`);
65
- }
66
- }
67
- finally {
68
- closeHippoDb(db);
33
+ const entry = readEntry(ctx.hippoRoot, opts.memoryId);
34
+ if (entry?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, entry.scope)) {
35
+ throw new NotFoundError(`memory not found: ${opts.memoryId}`);
69
36
  }
70
37
  }
71
38
  const result = rejectValue({
@@ -1,4 +1,4 @@
1
- import { type CompleteGoalOpts, type Goal, type PushGoalOpts } from '../goals.js';
1
+ import { type CompleteGoalOpts, type Goal, type PushGoalOpts } from '../store/goals.js';
2
2
  import type { Context } from './types.js';
3
3
  /** What a new goal carries; its tenant is always the caller's. */
4
4
  export type GoalPushOpts = Omit<PushGoalOpts, 'tenantId'>;
package/dist/api/goals.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // The per-session goal stack that recall boosts: push, list, complete, suspend and resume.
2
- import { ForbiddenError } from '../api-errors.js';
3
- import { completeGoal, getActiveGoals, getSessionGoals, pushGoal, resumeGoal, suspendGoal, } from '../goals.js';
2
+ import { ForbiddenError } from '../core/api-errors.js';
3
+ import { completeGoal, getActiveGoals, getSessionGoals, pushGoal, resumeGoal, suspendGoal, } from '../store/goals.js';
4
4
  /** Push a goal onto `sessionId`'s stack in the caller's tenant. */
5
5
  export function goalPush(ctx, opts) {
6
6
  return pushGoal(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
@@ -0,0 +1,26 @@
1
+ export { ApiError, BadRequestError, ConflictError, ForbiddenError, NotFoundError } from '../core/api-errors.js';
2
+ export { isPrivateScope, passesScopeFilterForRecall } from '../store/recall-scope.js';
3
+ export { passesCliRecallScopeFilter, ScopeForbiddenError } from '../store/recall-scope.js';
4
+ export type { TokenSummary, TokenSurface, TokenSurfaceSummary } from '../store/token-ledger.js';
5
+ export type { FailureSummary } from '../store/failure-log.js';
6
+ export { classifyOriginProject } from '../core/project-identity.js';
7
+ export * from './types.js';
8
+ export * from './remember.js';
9
+ export * from './recall-types.js';
10
+ export * from './recall.js';
11
+ export * from './assemble.js';
12
+ export * from './drill-down.js';
13
+ export * from './outcome.js';
14
+ export * from './forget.js';
15
+ export * from './promote.js';
16
+ export * from './auth.js';
17
+ export * from './audit.js';
18
+ export * from './context-types.js';
19
+ export * from './context.js';
20
+ export * from './tokens.js';
21
+ export * from './dormant.js';
22
+ export * from './quarantine.js';
23
+ export * from './sleep.js';
24
+ export * from './goals.js';
25
+ export * from './learn.js';
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,29 @@
1
+ // Domain API layer: Context-taking functions that the CLI, the HTTP server and MCP all call, so the
2
+ // business logic lives in one place. The code lives in src/api/, one module per domain; this barrel
3
+ // keeps every import path that callers already use.
4
+ export { ApiError, BadRequestError, ConflictError, ForbiddenError, NotFoundError } from '../core/api-errors.js';
5
+ // The recall-side scope predicates live in recall-scope.ts (leaf) so shared.ts can use them without an import cycle.
6
+ export { isPrivateScope, passesScopeFilterForRecall } from '../store/recall-scope.js';
7
+ export { passesCliRecallScopeFilter, ScopeForbiddenError } from '../store/recall-scope.js';
8
+ // classifyOriginProject lives in project-identity.ts (leaf) for the same reason.
9
+ export { classifyOriginProject } from '../core/project-identity.js';
10
+ export * from './types.js';
11
+ export * from './remember.js';
12
+ export * from './recall-types.js';
13
+ export * from './recall.js';
14
+ export * from './assemble.js';
15
+ export * from './drill-down.js';
16
+ export * from './outcome.js';
17
+ export * from './forget.js';
18
+ export * from './promote.js';
19
+ export * from './auth.js';
20
+ export * from './audit.js';
21
+ export * from './context-types.js';
22
+ export * from './context.js';
23
+ export * from './tokens.js';
24
+ export * from './dormant.js';
25
+ export * from './quarantine.js';
26
+ export * from './sleep.js';
27
+ export * from './goals.js';
28
+ export * from './learn.js';
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,74 @@
1
+ /** Prompt-injection detection for untrusted memory content. Same shape as secret-detect.ts; leaf module, no store/api/shared imports. */
2
+ const INSTRUCTION_PATTERNS = [
3
+ { name: 'override-instructions', re: /\b(?:ignore|disregard|forget)\b[^.\n]{0,40}\b(?:previous|prior|above)\b[^.\n]{0,40}\binstructions?\b/i },
4
+ { name: 'role-reassignment', re: /\b(?:you are now|act as|pretend to be)\b[^.\n]{0,40}\b(?:an?\s+)?(?:ai|assistant|agent|system)\b/i },
5
+ { name: 'chat-role-markup', re: /<\|im_start\|>|<\|system\|>|\[INST\]|<\/?system>|###\s*system\s*:/i },
6
+ { name: 'system-prompt-reference', re: /\b(?:(?:override|ignore|bypass|replace|reveal)\b[^.\n]{0,40}\b(?:system prompt|developer message)|(?:system prompt|developer message)\b[^.\n]{0,40}\b(?:override|ignore|bypass|replace|reveal))\b/i },
7
+ // "always"/"never" alone (ordinary PR prose) doesn't flag without an agent-facing target nearby too.
8
+ { name: 'standing-order', re: /\b(?:from now on|whenever you|always|never)\b[^.\n]{0,50}\b(?:you must|(?:the ai|the assistant|the agent|claude|copilot)\s+(?:must|should|will)\b)/i },
9
+ { name: 'concealment', re: /\b(?:do not|never|don't)\b[^.\n]{0,40}\b(?:tell|mention|reveal)\b[^.\n]{0,40}\bthe user\b/i },
10
+ { name: 'remote-script-exec', re: /\b(?:curl|wget)\b[^\n|]{0,80}\|\s*(?:sudo\s+)?(?:sh|bash|zsh)\b|\biex\s*\(\s*(?:iwr|invoke-webrequest|new-object\s+net\.webclient)/i },
11
+ { name: 'exfiltration', re: /\b(?:send|post|upload|exfiltrate)\b[^.\n]{0,40}\b(?:secrets?|tokens?|api[- ]?keys?|credentials?|env(?:ironment)? variables?)\b/i },
12
+ { name: 'unicode-tag-chars', re: /[\u{E0000}-\u{E007F}]/u },
13
+ ];
14
+ // A stray zero-width char has legitimate uses (ZWJ); only a run of 3+ adjacent ones reads as smuggling.
15
+ const ZERO_WIDTH_RUN_RE = /[\u200B-\u200F\u2060-\u2064]{3,}/;
16
+ // Reorders what is drawn without changing a byte a pattern reads, and ordinary right-to-left prose never needs one.
17
+ const BIDI_CONTROL_RE = /[\u202A-\u202E\u2066-\u2069]/;
18
+ // A renderer draws a reference as the character it names: decimal, hex, or one of the five names XML defines.
19
+ const CHARACTER_REFERENCE_RE = /&(?:#(\d{1,7})|#[xX]([0-9a-fA-F]{1,6})|(amp|lt|gt|quot|apos));/g;
20
+ const NAMED_REFERENCES = new Map([['amp', '&'], ['lt', '<'], ['gt', '>'], ['quot', '"'], ['apos', "'"]]);
21
+ // Drawn with no width, so one inside a word splits it for a pattern and not for a reader: soft hyphen, joiners, zero-width and bidi format characters.
22
+ const INVISIBLE_RE = /[\u034F\u00AD\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u2069\uFEFF]/g;
23
+ // Cyrillic, then Greek, letters drawn like a c e i j o p s x y; closed at those, so Russian or Greek prose folds into no phrase a pattern names.
24
+ const LOOKALIKES = new Map([
25
+ ['\u0430', 'a'], ['\u0441', 'c'], ['\u0435', 'e'], ['\u0456', 'i'], ['\u0458', 'j'], ['\u043E', 'o'], ['\u0440', 'p'], ['\u0455', 's'], ['\u0445', 'x'], ['\u0443', 'y'],
26
+ ['\u0410', 'A'], ['\u0421', 'C'], ['\u0415', 'E'], ['\u0406', 'I'], ['\u0408', 'J'], ['\u041E', 'O'], ['\u0420', 'P'], ['\u0405', 'S'], ['\u0425', 'X'], ['\u0423', 'Y'],
27
+ ['\u03B1', 'a'], ['\u03B5', 'e'], ['\u03B9', 'i'], ['\u03F3', 'j'], ['\u03BF', 'o'], ['\u03C1', 'p'], ['\u03C7', 'x'], ['\u03B3', 'y'],
28
+ ['\u0391', 'A'], ['\u0395', 'E'], ['\u0399', 'I'], ['\u037F', 'J'], ['\u039F', 'O'], ['\u03A1', 'P'], ['\u03A7', 'X'], ['\u03A5', 'Y'],
29
+ ]);
30
+ const GREEK_OR_CYRILLIC_RE = /[\u0370-\u03FF\u0400-\u04FF]/g;
31
+ // A line break stays: it is the sentence bound the patterns rely on where a list or a chat message ends a line with no full stop.
32
+ const SPACE_RUN_RE = /[^\S\n]+/g;
33
+ function referencedCharacter(reference, decimal, hex, name) {
34
+ if (name !== undefined)
35
+ return NAMED_REFERENCES.get(name) ?? reference;
36
+ const code = decimal !== undefined ? Number.parseInt(decimal, 10) : Number.parseInt(hex ?? '', 16);
37
+ // NUL, half a surrogate pair and a number past Unicode name no character, so the reference is read as written.
38
+ const drawn = code > 0 && code <= 0x10ffff && (code < 0xd800 || code > 0xdfff);
39
+ return drawn ? String.fromCodePoint(code) : reference;
40
+ }
41
+ /** `content` as a reader or a model takes it in. For matching only: what is stored is never this. */
42
+ function screeningForm(content) {
43
+ return content
44
+ .replace(CHARACTER_REFERENCE_RE, referencedCharacter)
45
+ // Full-width, mathematical and enclosed letters become the plain ones, and every space character a U+0020.
46
+ .normalize('NFKC')
47
+ .replace(INVISIBLE_RE, '')
48
+ .replace(GREEK_OR_CYRILLIC_RE, (letter) => LOOKALIKES.get(letter) ?? letter)
49
+ .replace(SPACE_RUN_RE, ' ');
50
+ }
51
+ function matchedPattern(text) {
52
+ for (const { name, re } of INSTRUCTION_PATTERNS) {
53
+ if (re.test(text))
54
+ return `pattern:${name}`;
55
+ }
56
+ return null;
57
+ }
58
+ export function detectInstruction(content) {
59
+ // The text as written goes first: a phrase in plain sight is named before any smuggling rule, and the screening form only adds flags.
60
+ const plain = matchedPattern(content);
61
+ if (plain !== null)
62
+ return { flagged: true, reason: plain };
63
+ if (ZERO_WIDTH_RUN_RE.test(content)) {
64
+ return { flagged: true, reason: 'pattern:zero-width-smuggling' };
65
+ }
66
+ const screened = screeningForm(content);
67
+ const disguised = screened === content ? null : matchedPattern(screened);
68
+ if (disguised !== null)
69
+ return { flagged: true, reason: disguised };
70
+ if (BIDI_CONTROL_RE.test(content))
71
+ return { flagged: true, reason: 'pattern:bidi-control' };
72
+ return { flagged: false, reason: null };
73
+ }
74
+ //# sourceMappingURL=instruction-detect.js.map