hippo-memory 1.68.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (864) hide show
  1. package/README.md +6 -3
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,523 +0,0 @@
1
- /**
2
- * Project_brief first-class object.
3
- *
4
- * A `project_brief` is the living, repo-scoped summary of a repository's state: a
5
- * `summary` body scoped to a `repo`, evolving via the supersede delta lifecycle.
6
- * "Auto-refreshes from receipts" is scoped to a DETERMINISTIC (no-LLM) assembler:
7
- * `refreshBrief` gathers the repo's recent receipts (memory rows tagged
8
- * `path:<repo>`) and assembles them into the brief body. The distinguishing
9
- * capability is therefore the refresh assembler (analog of skill's export
10
- * renderer), not an LLM/async pipeline (deferred).
11
- *
12
- * Reuses the skill/process supersede machinery verbatim (superseded_by self-FK +
13
- * CAS + INSERT-preflight + server-derived version + change_summary + supersede
14
- * tenant-match trigger). It DROPS skill's `skill_name`/`trigger_text` and ADDS
15
- * `repo` (the repo-scoping dimension) + `summary` (the brief body).
16
- *
17
- * The `project_briefs` table is the source of truth (survives memory decay); the
18
- * memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
19
- *
20
- * Lifecycle: active -> superseded (a newer version replaces it) or active ->
21
- * closed (retired).
22
- */
23
- import { BadRequestError, ConflictError, NotFoundError } from './api-errors.js';
24
- import { openHippoDb, closeHippoDb } from './db.js';
25
- import { writeEntry } from './store/entry-writes.js';
26
- import { assertTenantId } from './tenant.js';
27
- import { scopeAdmitSql } from './recall-scope.js';
28
- import { markGraphDirty, removeGraphEntitiesForObject } from './graph/write.js';
29
- import { createMemory, Layer } from './memory.js';
30
- import { appendAuditEvent } from './audit.js';
31
- import { objectHalfLifeDays } from './half-life-migration.js';
32
- import { keysetAfter } from './keyset.js';
33
- import { escapeLike } from './escape.js';
34
- export const VALID_BRIEF_STATES = new Set([
35
- 'active',
36
- 'superseded',
37
- 'closed',
38
- ]);
39
- /** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
40
- * cap than the 4096 short-field convention. */
41
- export const MAX_REPO_LEN = 256;
42
- export const MAX_BRIEF_SUMMARY_LEN = 8192;
43
- export const MAX_CHANGE_SUMMARY_LEN = 4096;
44
- /** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
45
- * + the rendered body). Realistic repos have far fewer recent receipts than this. */
46
- export const MAX_BRIEF_RECEIPTS = 50;
47
- /** Truncate each receipt's headline in the assembled digest. */
48
- export const MAX_RECEIPT_HEADLINE_LEN = 200;
49
- // ---------------------------------------------------------------------------
50
- // Validation
51
- // ---------------------------------------------------------------------------
52
- /**
53
- * Validate + normalise brief fields. `repo` is trimmed and MUST be a single line
54
- * (no newlines): it becomes a path tag on the refresh match AND an H1 heading in
55
- * the assembled digest. `summary` is kept verbatim (operator content) but capped.
56
- * Returns the normalised repo.
57
- */
58
- function validateBriefFields(repo, summary, changeSummary) {
59
- const normalizedRepo = (repo ?? '').trim();
60
- if (normalizedRepo.length === 0)
61
- throw new BadRequestError('saveProjectBrief: repo is required');
62
- if (/[\r\n]/.test(normalizedRepo)) {
63
- throw new BadRequestError('saveProjectBrief: repo must be a single line (no newlines)');
64
- }
65
- if (normalizedRepo.length > MAX_REPO_LEN) {
66
- throw new BadRequestError(`saveProjectBrief: repo exceeds the ${MAX_REPO_LEN}-char cap`);
67
- }
68
- if (!summary || summary.trim().length === 0) {
69
- throw new BadRequestError('saveProjectBrief: summary is required');
70
- }
71
- if (summary.length > MAX_BRIEF_SUMMARY_LEN) {
72
- throw new BadRequestError(`saveProjectBrief: summary exceeds the ${MAX_BRIEF_SUMMARY_LEN}-char cap`);
73
- }
74
- if (changeSummary !== undefined && changeSummary.length > MAX_CHANGE_SUMMARY_LEN) {
75
- throw new BadRequestError(`saveProjectBrief: changeSummary exceeds the ${MAX_CHANGE_SUMMARY_LEN}-char cap`);
76
- }
77
- return { repo: normalizedRepo };
78
- }
79
- function rowToProjectBrief(row) {
80
- return {
81
- id: row.id,
82
- memoryId: row.memory_id,
83
- tenantId: row.tenant_id,
84
- repo: row.repo,
85
- summary: row.summary,
86
- version: row.version,
87
- // SAFETY: row.status is DB-constrained to BriefStatus values; every INSERT/
88
- // UPDATE in this file writes only the literal 'active' | 'superseded' | 'closed'.
89
- status: row.status,
90
- supersededBy: row.superseded_by,
91
- supersededAt: row.superseded_at,
92
- changeSummary: row.change_summary,
93
- closedAt: row.closed_at,
94
- createdAt: row.created_at,
95
- };
96
- }
97
- const BRIEF_COLS = `
98
- id, memory_id, tenant_id, repo, summary, version, status,
99
- superseded_by, superseded_at, change_summary, closed_at, created_at
100
- `;
101
- /** Recall-surface content for the memory mirror: repo + summary. Named (mirrors
102
- * buildSkillContent) so the recall surface is deterministic + unit-testable. */
103
- function buildBriefContent(repo, summary) {
104
- return `${repo}\n\n${summary}`;
105
- }
106
- // Preflight the supersede target BEFORE inserting the new row (so the new
107
- // autoincrement id can never be its own supersede target); read the
108
- // predecessor version in the same SELECT for server-derived versioning.
109
- // Mirrors saveSkill / saveProcess.
110
- function preflightBriefSupersede(db, tenantId, supersedesId) {
111
- // SAFETY: SELECT projects exactly status, version; .get() returns that
112
- // shape for the matching row, or undefined when no brief/tenant pair matches.
113
- const pred = db.prepare(`SELECT status, version FROM project_briefs WHERE id = ? AND tenant_id = ?`).get(supersedesId, tenantId);
114
- if (!pred) {
115
- throw new NotFoundError(`saveProjectBrief: brief ${supersedesId} to supersede not found for tenant ${tenantId}`);
116
- }
117
- if (pred.status !== 'active') {
118
- throw new ConflictError(`saveProjectBrief: brief ${supersedesId} is not active (status='${pred.status}'); only active briefs can be superseded.`);
119
- }
120
- return pred.version + 1;
121
- }
122
- function insertBriefRow(db, memoryId, w, version) {
123
- const result = db.prepare(`
124
- INSERT INTO project_briefs(
125
- memory_id, tenant_id, repo, summary, version,
126
- status, superseded_by, superseded_at, change_summary, closed_at, created_at
127
- ) VALUES (?, ?, ?, ?, ?, 'active', NULL, NULL, ?, NULL, ?)
128
- `).run(memoryId, w.tenantId, w.repo, w.summary, version, w.changeSummary, w.now);
129
- return Number(result.lastInsertRowid ?? 0);
130
- }
131
- function supersedeBriefRow(db, w, supersedesId, briefId, version) {
132
- const sup = db.prepare(`
133
- UPDATE project_briefs
134
- SET status = 'superseded', superseded_by = ?, superseded_at = ?
135
- WHERE id = ? AND tenant_id = ? AND status = 'active' AND id != ?
136
- `).run(briefId, w.now, supersedesId, w.tenantId, briefId);
137
- if (sup.changes === 0) {
138
- throw new ConflictError(`saveProjectBrief: brief ${supersedesId} could not be superseded (no longer active or self-reference).`);
139
- }
140
- appendAuditEvent(db, {
141
- tenantId: w.tenantId,
142
- actor: w.actor,
143
- op: 'project_brief_supersede',
144
- targetId: String(supersedesId),
145
- metadata: {
146
- brief_id: supersedesId,
147
- superseded_by: briefId,
148
- new_version: version,
149
- refreshed: w.isRefresh,
150
- ...w.refreshAuditExtra,
151
- },
152
- });
153
- }
154
- /** The afterWrite body: preflight, INSERT, supersede, reload, create audit, all in one SAVEPOINT. */
155
- function writeBriefRow(db, memoryId, w) {
156
- const version = w.supersedesId !== undefined ? preflightBriefSupersede(db, w.tenantId, w.supersedesId) : 1;
157
- const briefId = insertBriefRow(db, memoryId, w, version);
158
- if (w.supersedesId !== undefined)
159
- supersedeBriefRow(db, w, w.supersedesId, briefId, version);
160
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
161
- // columns; .get() returns that row, or undefined only if the
162
- // just-inserted id can't be found.
163
- const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ?`)
164
- .get(briefId);
165
- if (!row)
166
- throw new Error('saveProjectBrief: failed to reload saved brief row');
167
- // GDPR-light metadata: ids + flags only, no brief text.
168
- appendAuditEvent(db, {
169
- tenantId: w.tenantId,
170
- actor: w.actor,
171
- op: 'project_brief_create',
172
- targetId: String(briefId),
173
- metadata: {
174
- brief_id: briefId,
175
- repo: w.repo,
176
- version,
177
- refreshed: w.isRefresh,
178
- ...w.refreshAuditExtra,
179
- },
180
- });
181
- return row;
182
- }
183
- /**
184
- * Create a project_brief (or a new version that supersedes an existing one). Writes
185
- * the memory mirror + the project_briefs row atomically inside writeEntry's
186
- * SAVEPOINT. When supersedesBriefId is given, the referenced ACTIVE row is
187
- * preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
188
- * in the same SAVEPOINT; the new version = predecessor.version + 1 (server-derived).
189
- */
190
- export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
191
- assertTenantId('saveProjectBrief', tenantId);
192
- const { repo } = validateBriefFields(opts.repo, opts.summary, opts.changeSummary);
193
- const isSupersede = opts.supersedesBriefId !== undefined;
194
- const changeSummary = isSupersede ? (opts.changeSummary ?? null) : null;
195
- const isRefresh = opts.refreshReceiptCount !== undefined;
196
- const refreshAuditExtra = {};
197
- if (isRefresh)
198
- refreshAuditExtra.receipt_count = opts.refreshReceiptCount;
199
- const now = new Date().toISOString();
200
- const content = buildBriefContent(repo, opts.summary);
201
- const tags = ['project_brief', ...(opts.extraTags ?? [])];
202
- const mem = createMemory(content, {
203
- tags,
204
- layer: Layer.Semantic,
205
- confidence: 'verified',
206
- source: 'project_brief',
207
- baseHalfLifeDays: objectHalfLifeDays(hippoRoot),
208
- tenantId,
209
- });
210
- const w = {
211
- tenantId,
212
- actor,
213
- repo,
214
- summary: opts.summary,
215
- changeSummary,
216
- supersedesId: opts.supersedesBriefId,
217
- isRefresh,
218
- refreshAuditExtra,
219
- now,
220
- };
221
- let savedRow;
222
- writeEntry(hippoRoot, mem, {
223
- actor,
224
- afterWrite: (db, memoryId) => {
225
- savedRow = writeBriefRow(db, memoryId, w);
226
- },
227
- // afterCommit covers refreshBrief (delegates here) + brief new/supersede.
228
- afterCommit: () => markGraphDirty(hippoRoot, tenantId, mem.id),
229
- });
230
- if (!savedRow) {
231
- throw new Error('saveProjectBrief: afterWrite did not populate the row');
232
- }
233
- return rowToProjectBrief(savedRow);
234
- }
235
- /**
236
- * Close (retire) an active brief. CAS guard WHERE status='active'; 0 changes
237
- * distinguishes not-found from not-active. A superseded row is terminal.
238
- */
239
- export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
240
- assertTenantId('closeProjectBrief', tenantId);
241
- const now = new Date().toISOString();
242
- const db = openHippoDb(hippoRoot);
243
- try {
244
- db.exec('BEGIN IMMEDIATE');
245
- try {
246
- const updateResult = db.prepare(`
247
- UPDATE project_briefs
248
- SET status = 'closed', closed_at = ?
249
- WHERE id = ? AND tenant_id = ? AND status = 'active'
250
- `).run(now, id, tenantId);
251
- if (updateResult.changes === 0) {
252
- // SAFETY: SELECT projects exactly the status column; .get() returns that
253
- // shape, or undefined when the id/tenant pair doesn't exist.
254
- const existing = db.prepare(`SELECT status FROM project_briefs WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
255
- if (!existing) {
256
- throw new NotFoundError(`closeProjectBrief: brief ${id} not found for tenant ${tenantId}`);
257
- }
258
- throw new ConflictError(`closeProjectBrief: brief ${id} is not active (status='${existing.status}'); only active briefs can be closed.`);
259
- }
260
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
261
- // columns; .get() returns that row for the just-updated id, or undefined
262
- // only in an impossible race since the UPDATE above already matched it.
263
- const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ? AND tenant_id = ?`)
264
- .get(id, tenantId);
265
- if (!row)
266
- throw new NotFoundError(`closeProjectBrief: brief ${id} not found after UPDATE`);
267
- appendAuditEvent(db, {
268
- tenantId,
269
- actor,
270
- op: 'project_brief_close',
271
- targetId: String(id),
272
- metadata: { brief_id: id },
273
- });
274
- db.exec('COMMIT');
275
- const closed = rowToProjectBrief(row);
276
- // Closing removes the object from the graph. Remove its rows DIRECTLY (deterministic),
277
- // not only via an enqueued rebuild whose queue item is lost if the mirror is later
278
- // forgotten (the queue row cascade-deletes with the memory), which would leave the closed
279
- // object stale and could block that forget. Still enqueue when a mirror exists
280
- // so a concurrent rebuild re-derives consistently (harmless if it also runs).
281
- removeGraphEntitiesForObject(hippoRoot, tenantId, 'project', closed.id);
282
- if (closed.memoryId) {
283
- markGraphDirty(hippoRoot, tenantId, closed.memoryId);
284
- }
285
- return closed;
286
- }
287
- catch (e) {
288
- try {
289
- db.exec('ROLLBACK');
290
- }
291
- catch {
292
- // Ignore rollback failures — the throw below is what matters.
293
- }
294
- throw e;
295
- }
296
- }
297
- finally {
298
- closeHippoDb(db);
299
- }
300
- }
301
- export function loadProjectBriefById(hippoRoot, tenantId, id) {
302
- assertTenantId('loadProjectBriefById', tenantId);
303
- const db = openHippoDb(hippoRoot);
304
- try {
305
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
306
- // columns; .get() returns that row, or undefined when the id/tenant pair
307
- // doesn't exist.
308
- const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ? AND tenant_id = ?`)
309
- .get(id, tenantId);
310
- return row ? rowToProjectBrief(row) : null;
311
- }
312
- finally {
313
- closeHippoDb(db);
314
- }
315
- }
316
- export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
317
- assertTenantId('loadProjectBriefs', tenantId);
318
- const limit = opts.limit ?? 100;
319
- const after = keysetAfter('created_at', 'id', opts.after);
320
- if (opts.status && !VALID_BRIEF_STATES.has(opts.status)) {
321
- throw new BadRequestError(`loadProjectBriefs: status must be one of ${Array.from(VALID_BRIEF_STATES).join('|')}; got ${opts.status}`);
322
- }
323
- const db = openHippoDb(hippoRoot);
324
- try {
325
- const clauses = ['tenant_id = ?'];
326
- const params = [tenantId];
327
- if (opts.status) {
328
- clauses.push('status = ?');
329
- params.push(opts.status);
330
- }
331
- if (opts.repo) {
332
- clauses.push('repo = ?');
333
- params.push(opts.repo);
334
- }
335
- params.push(...after.params, limit);
336
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow columns
337
- // regardless of the dynamic WHERE clause built above; .all() returns rows
338
- // in that shape.
339
- const rows = db.prepare(`
340
- SELECT ${BRIEF_COLS} FROM project_briefs
341
- WHERE ${clauses.join(' AND ')}${after.sql}
342
- ORDER BY created_at DESC, id DESC
343
- LIMIT ?
344
- `).all(...params);
345
- return rows.map(rowToProjectBrief);
346
- }
347
- finally {
348
- closeHippoDb(db);
349
- }
350
- }
351
- /**
352
- * The repo's CURRENT active brief, or null. By convention there is one active brief
353
- * per (tenant, repo); if an operator created more than one (the DB does not prevent
354
- * it, consistent with every other first-class object), the MOST-RECENT active row wins.
355
- */
356
- export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
357
- assertTenantId('loadActiveBriefForRepo', tenantId);
358
- const db = openHippoDb(hippoRoot);
359
- try {
360
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
361
- // columns; .get() returns that row, or undefined when no active brief
362
- // exists for this tenant/repo.
363
- const row = db.prepare(`
364
- SELECT ${BRIEF_COLS} FROM project_briefs
365
- WHERE tenant_id = ? AND repo = ? AND status = 'active'
366
- ORDER BY created_at DESC, id DESC
367
- LIMIT 1
368
- `).get(tenantId, repo);
369
- return row ? rowToProjectBrief(row) : null;
370
- }
371
- finally {
372
- closeHippoDb(db);
373
- }
374
- }
375
- // ---------------------------------------------------------------------------
376
- // Refresh assembler (the distinguishing deliverable)
377
- // ---------------------------------------------------------------------------
378
- /** Single-line headline for a receipt: first non-empty line, newline-stripped,
379
- * truncated. Deterministic + safe for the markdown bullet list. */
380
- function receiptHeadline(content) {
381
- const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
382
- const trimmed = firstLine.trim();
383
- return trimmed.length > MAX_RECEIPT_HEADLINE_LEN
384
- ? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
385
- : trimmed;
386
- }
387
- /** The repo's receipt rows, newest first, capped at MAX_BRIEF_RECEIPTS. */
388
- function loadBriefReceipts(hippoRoot, tenantId, normalizedRepo) {
389
- const tag = `path:${normalizedRepo.toLowerCase()}`;
390
- const likeParam = `%"${escapeLike(tag)}"%`;
391
- const deny = scopeAdmitSql('');
392
- const db = openHippoDb(hippoRoot);
393
- try {
394
- // SAFETY: SELECT projects exactly id, created, source, content (the
395
- // ReceiptRow columns); .all() returns rows in that shape.
396
- return db.prepare(`
397
- SELECT id, created, source, content FROM memories
398
- WHERE tenant_id = ?
399
- AND source != 'project_brief'
400
- AND LOWER(tags_json) LIKE ? ESCAPE '\\'
401
- AND ${deny.sql}
402
- ORDER BY created DESC, id DESC
403
- LIMIT ?
404
- `).all(tenantId, likeParam, ...deny.params, MAX_BRIEF_RECEIPTS);
405
- }
406
- finally {
407
- closeHippoDb(db);
408
- }
409
- }
410
- // NOTE on ordering: the `id DESC` tiebreak is lexical on a random-ish memory id
411
- // (e.g. `sem_<hex>`), NOT chronological — within the same `created` timestamp the
412
- // order is stable-but-arbitrary, not insertion order. `created DESC` is the real
413
- // recency ordering.
414
- //
415
- // Budget-aware assembly: the digest is the
416
- // brief `summary`, which saveProjectBrief caps at MAX_BRIEF_SUMMARY_LEN. The
417
- // receipt/headline caps (50 x ~200) could otherwise build an ~11KB body that the
418
- // store then REJECTS, breaking refresh for inputs within the advertised caps. So
419
- // include receipt lines newest-first only while they fit under the cap (reserving
420
- // slack for the header + an omission footer), and note the omitted remainder.
421
- function fitReceiptLines(receipts) {
422
- const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
423
- const receiptLines = [];
424
- if (receipts.length > 0) {
425
- // Header + "## Recent receipts" + a worst-case omission footer cost; keep slack
426
- // so the joined markdown stays <= MAX_BRIEF_SUMMARY_LEN even after the footer.
427
- const SLACK = 400;
428
- let bodyBudget = MAX_BRIEF_SUMMARY_LEN - SLACK;
429
- for (const r of receipts) {
430
- const line = buildReceiptLine(r);
431
- if (line.length + 1 > bodyBudget)
432
- break;
433
- receiptLines.push(line);
434
- bodyBudget -= line.length + 1;
435
- }
436
- }
437
- return receiptLines;
438
- }
439
- function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
440
- const omitted = receiptCount - receiptLines.length;
441
- const lines = [];
442
- lines.push(`# Project Brief: ${normalizedRepo}`);
443
- lines.push('');
444
- lines.push(omitted > 0
445
- ? `_Auto-assembled from ${receiptLines.length} of ${receiptCount} receipt(s)._`
446
- : `_Auto-assembled from ${receiptCount} receipt(s)._`);
447
- lines.push('');
448
- lines.push('## Recent receipts');
449
- lines.push('');
450
- if (receiptCount === 0) {
451
- lines.push(`_No receipts found for ${normalizedRepo}._`);
452
- }
453
- else {
454
- lines.push(...receiptLines);
455
- if (omitted > 0) {
456
- lines.push('');
457
- lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
458
- }
459
- }
460
- // Belt-and-suspenders: the budget loop keeps us under the cap, but hard-clamp the
461
- // joined string so the store's NOT-NULL/<=cap contract can never be violated even
462
- // for a pathological single oversized line.
463
- let markdown = lines.join('\n');
464
- if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
465
- markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
466
- }
467
- return markdown;
468
- }
469
- /**
470
- * Assemble the repo's recent receipts into a deterministic markdown digest, and
471
- * return it WITH the receipt count (the count feeds refreshBrief's change_summary +
472
- * audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
473
- * `summary` is NOT NULL), including the zero-receipts case.
474
- *
475
- * A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
476
- * brief's OWN memory mirror (source='project_brief') is excluded so a brief never
477
- * becomes its own receipt on the next refresh. The match is against the JSON-array
478
- * serialization (each element is a double-quoted string `"path:hippo"`); the
479
- * surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
480
- * `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
481
- */
482
- export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
483
- assertTenantId('assembleBriefFromReceipts', tenantId);
484
- const normalizedRepo = (repo ?? '').trim();
485
- if (normalizedRepo.length === 0) {
486
- throw new BadRequestError('assembleBriefFromReceipts: repo is required');
487
- }
488
- const receipts = loadBriefReceipts(hippoRoot, tenantId, normalizedRepo);
489
- const markdown = renderBriefDigest(normalizedRepo, receipts.length, fitReceiptLines(receipts));
490
- return { markdown, receiptCount: receipts.length };
491
- }
492
- /**
493
- * Auto-refresh the repo's brief from its receipts: assemble the digest, then create
494
- * a new version. If the repo already has an active brief it is superseded (the
495
- * change_summary records the auto-refresh + the audit metadata carries
496
- * `refreshed: true`); otherwise a v1 is created. Returns the new brief.
497
- *
498
- * The assemble (a read of `memories`) happens BEFORE writeEntry opens its SAVEPOINT;
499
- * a concurrent receipt write landing between the read and the brief write simply
500
- * appears in the NEXT refresh — the brief is a derived snapshot, not a transactional
501
- * aggregate, so no consistency invariant is violated.
502
- */
503
- export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
504
- assertTenantId('refreshBrief', tenantId);
505
- const normalizedRepo = (repo ?? '').trim();
506
- if (normalizedRepo.length === 0)
507
- throw new BadRequestError('refreshBrief: repo is required');
508
- const { markdown, receiptCount } = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
509
- const active = loadActiveBriefForRepo(hippoRoot, tenantId, normalizedRepo);
510
- return saveProjectBrief(hippoRoot, tenantId, {
511
- repo: normalizedRepo,
512
- summary: markdown,
513
- changeSummary: active ? `auto-refresh from ${receiptCount} receipt(s)` : undefined,
514
- supersedesBriefId: active ? active.id : undefined,
515
- refreshReceiptCount: receiptCount,
516
- // Tag the refreshed brief's mirror as repo-local so path-aware recall boosts
517
- // it like the manual `brief new`/`supersede` paths do.
518
- // Safe vs self-recursion: assembleBriefFromReceipts excludes
519
- // source='project_brief', so the brief never becomes its own receipt.
520
- extraTags: [`path:${normalizedRepo.toLowerCase()}`],
521
- }, actor);
522
- }
523
- //# sourceMappingURL=project-briefs.js.map
@@ -1,69 +0,0 @@
1
- /**
2
- * Rejected-value tombstone: shared reject/unreject/list flow.
3
- *
4
- * The CLI (`hippo reject`/`rejections`/`unreject`) and the Context-based
5
- * `api.reject`/`api.unreject`/`api.listRejections` surfaces both need the
6
- * SAME multi-step transaction + post-commit mirror-purge flow. Extracted
7
- * here (leaf module) so neither duplicates it.
8
- *
9
- * Module direction: this file imports from store.ts, rejection.ts, raw-archive.ts,
10
- * dormant.ts, same-text.ts and merged-row.ts. Nothing imports FROM this file except
11
- * cli.ts and api.ts, so it introduces no cycle.
12
- */
13
- import { type RejectedValueRow } from './rejection.js';
14
- export interface RejectFlowOpts {
15
- hippoRoot: string;
16
- tenantId: string;
17
- actor: string;
18
- reason: string;
19
- /** By-id form: reject the CURRENT content of an existing memory. */
20
- memoryId?: string;
21
- /** Pre-emptive form: reject a value not currently stored (or already gone). */
22
- value?: string;
23
- /** The caller's own personal scope: the only personal rows the sweep may remove. Unset (the CLI) skips every personal row. */
24
- ownScope?: string;
25
- }
26
- export interface RejectFlowResult {
27
- digest: string;
28
- /** The rejected content, for the CLI's at-reject-time echo (the
29
- * tombstone itself stores no content — this is the only place it's seen
30
- * again after this call returns). */
31
- content: string;
32
- /** Every row removed this call, live or dormant: all whose normalized digest matched (not just the id
33
- * passed, since duplicates share a digest), and each sleep-merged row holding the value, whose other
34
- * texts move to a new row: listed in successorIds when it was live, dormantSuccessorIds when dormant. */
35
- removedIds: string[];
36
- /** Subset of removedIds that were kind='raw' (archived, not deleted). */
37
- removedRawIds: string[];
38
- successorIds: string[];
39
- dormantSuccessorIds: string[];
40
- }
41
- /**
42
- * `hippo reject` / `api.reject` core flow. ONE connection, one transaction:
43
- * insert the tombstone, enumerate + remove every live tenant row whose
44
- * normalized digest matches (kind-aware), one aggregate `reject_value`
45
- * audit, COMMIT. Then post-commit (mirrors the existing purge+reaper
46
- * pattern verbatim from api.archiveRaw, api.ts:1913-1938): best-effort
47
- * mirror purge per removed id, `mirror_cleaned_at` stamps for raw ids.
48
- * index.json itself is only refreshed by `rebuildIndex()`.
49
- */
50
- export declare function rejectValue(opts: RejectFlowOpts): RejectFlowResult;
51
- export type UnrejectOutcome = {
52
- status: 'ok';
53
- digest: string;
54
- reason: string | null;
55
- } | {
56
- status: 'not_found';
57
- } | {
58
- status: 'ambiguous';
59
- candidates: RejectedValueRow[];
60
- };
61
- /**
62
- * `hippo unreject` / `api.unreject` — resolve a unique tombstone by digest
63
- * (or prefix), delete it, audit `unreject_value`. The only v1 escape hatch
64
- * (plan §4): no per-write force flag.
65
- */
66
- export declare function unrejectValue(hippoRoot: string, tenantId: string, digestOrPrefix: string, actor: string): UnrejectOutcome;
67
- /** `hippo rejections` / `api.listRejections` — list tombstones for a tenant. */
68
- export declare function listRejectionsForTenant(hippoRoot: string, tenantId: string): RejectedValueRow[];
69
- //# sourceMappingURL=reject-flow.d.ts.map