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
@@ -23,41 +23,21 @@
23
23
  * Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
24
24
  * enforce processes.tenant_id == the referenced memory's tenant_id, and a
25
25
  * superseded_by same-tenant trigger makes cross-tenant supersession
26
- * unrepresentable. Mirrors the v30 decisions pattern (src/decisions.ts).
26
+ * unrepresentable. Mirrors the v30 decisions pattern (src/objects/decisions.ts).
27
27
  *
28
- * Dual-write atomicity: `saveProcess` writes the memory + processes row (and,
29
- * when superseding, the predecessor's UPDATE) inside writeEntry's SAVEPOINT
30
- * 'write_entry' via the afterWrite hook, so a failure in any step rolls all of
31
- * them back. Pattern matches saveDecision (decisions.ts).
28
+ * Dual-write atomicity: `saveProcess` hands the memory and the process to the
29
+ * `objects` store group, which commits them (and, when superseding, the
30
+ * predecessor's UPDATE) together, so a failure in any step rolls all of them back.
32
31
  */
33
- import { type KeysetPosition } from './keyset.js';
34
- import type { JsonValue } from './json.js';
35
- export type ProcessStatus = 'active' | 'superseded' | 'closed';
32
+ import type { KeysetPosition } from '../util/keyset.js';
33
+ import { type JsonValue } from '../util/json.js';
34
+ import type { SavableDescriptor } from './descriptor.js';
35
+ import type { Process, ProcessStatus } from '../store/object-types.js';
36
+ export type { Process, ProcessStatus } from '../store/object-types.js';
36
37
  export declare const VALID_PROCESS_STATES: ReadonlySet<ProcessStatus>;
37
38
  /** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
38
39
  export declare const MAX_PROCESS_STEPS = 200;
39
40
  export declare const MAX_PROCESS_STEP_LEN = 2000;
40
- export interface Process {
41
- id: number;
42
- /** Nullable: ON DELETE SET NULL lets memory deletion (forget / consolidate /
43
- * archive) proceed without breaking the process row. */
44
- memoryId: string | null;
45
- tenantId: string;
46
- processName: string;
47
- description: string | null;
48
- /** Ordered step list (the process body). Stored as a JSON array of strings. */
49
- steps: string[];
50
- /** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
51
- version: number;
52
- status: ProcessStatus;
53
- /** Successor process id; set only when status === 'superseded'. */
54
- supersededBy: number | null;
55
- supersededAt: string | null;
56
- /** The per-version delta note; set on a successor row only (NULL on a v1). */
57
- changeSummary: string | null;
58
- closedAt: string | null;
59
- createdAt: string;
60
- }
61
41
  export interface SaveProcessOpts {
62
42
  processName: string;
63
43
  steps: string[];
@@ -82,12 +62,13 @@ export interface ListProcessesOpts {
82
62
  * discipline.
83
63
  */
84
64
  export declare function validateProcessSteps(steps: JsonValue): string[];
65
+ export declare const PROCESS: SavableDescriptor<'process', SaveProcessOpts>;
85
66
  /**
86
67
  * Create a process (or a new version that supersedes an existing one). Writes
87
- * the memory mirror + the processes row atomically inside writeEntry's SAVEPOINT
88
- * 'write_entry'. When supersedesProcessId is given, the referenced ACTIVE row is
68
+ * the memory mirror + the processes row in the `objects` store group's one
69
+ * transaction. When supersedesProcessId is given, the referenced ACTIVE row is
89
70
  * preflighted (status + version) BEFORE the INSERT, then UPDATEd -> superseded in
90
- * the SAME SAVEPOINT (CAS: WHERE status='active' AND id != <new id>; throws on
71
+ * the SAME transaction (CAS: WHERE status='active' AND id != <new id>; throws on
91
72
  * changes===0 so a duplicate supersede aborts the whole write). The new row's
92
73
  * version = predecessor.version + 1 (server-derived); change_summary carries the
93
74
  * delta note. A fresh create has version 1 and change_summary NULL.
@@ -95,8 +76,7 @@ export declare function validateProcessSteps(steps: JsonValue): string[];
95
76
  export declare function saveProcess(hippoRoot: string, tenantId: string, opts: SaveProcessOpts, actor?: string): Process;
96
77
  /**
97
78
  * Close (retire) an active process with no successor. Updates the processes row
98
- * only; the memory mirror is not mutated. CAS guard: WHERE status='active'; 0
99
- * changes distinguishes not-found from not-active. A superseded row is already
79
+ * only; the memory mirror is not mutated. A superseded row is already
100
80
  * terminal in the chain and cannot be closed.
101
81
  */
102
82
  export declare function closeProcess(hippoRoot: string, tenantId: string, id: number, actor?: string): Process;
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Process first-class object.
3
+ *
4
+ * A `process` is a "living process map": a named, ordered list of steps that
5
+ * evolves over time. Unlike `incident` (open->resolved->closed, no supersede),
6
+ * `process` REUSES the `decision` supersede path as its delta mechanism: a
7
+ * process evolves by being superseded by a NEW VERSION that records what
8
+ * changed (`change_summary`) and the full new state (`steps`), carrying a
9
+ * server-derived `version` counter. The version chain (walk `superseded_by`)
10
+ * is the changelog. Computed structural step-diffing is a deferred v2 read-side
11
+ * feature; the row stores enough to reconstruct any delta
12
+ * (predecessor.steps + successor.steps + change_summary).
13
+ *
14
+ * The `processes` table is the source of truth: a process stays `active`
15
+ * regardless of memory decay. A memory row mirrors the process for recall but
16
+ * is NOT canonical — memory_id is NULLABLE with ON DELETE SET NULL so
17
+ * forget/consolidate/archive gracefully orphans the process row.
18
+ *
19
+ * Lifecycle: active -> superseded (a newer version replaces it; superseded_by
20
+ * points to the successor) or active -> closed (retired with no successor;
21
+ * only an active head closes).
22
+ *
23
+ * Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
24
+ * enforce processes.tenant_id == the referenced memory's tenant_id, and a
25
+ * superseded_by same-tenant trigger makes cross-tenant supersession
26
+ * unrepresentable. Mirrors the v30 decisions pattern (src/objects/decisions.ts).
27
+ *
28
+ * Dual-write atomicity: `saveProcess` hands the memory and the process to the
29
+ * `objects` store group, which commits them (and, when superseding, the
30
+ * predecessor's UPDATE) together, so a failure in any step rolls all of them back.
31
+ */
32
+ import { BadRequestError } from '../core/api-errors.js';
33
+ import { isJsonString } from '../util/json.js';
34
+ import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
35
+ // ---------------------------------------------------------------------------
36
+ // Domain types
37
+ // ---------------------------------------------------------------------------
38
+ export const VALID_PROCESS_STATES = new Set([
39
+ 'active',
40
+ 'superseded',
41
+ 'closed',
42
+ ]);
43
+ /** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
44
+ export const MAX_PROCESS_STEPS = 200;
45
+ export const MAX_PROCESS_STEP_LEN = 2000;
46
+ // ---------------------------------------------------------------------------
47
+ // steps validation (untrusted input)
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * Validate + normalise the steps body. Returns the trimmed step strings
51
+ * (trim-then-store, so ' x ' is stored as 'x'). Throws on a non-array, a
52
+ * non-string / empty element, or a cap breach. Mirrors the incident DoS-cap
53
+ * discipline.
54
+ */
55
+ export function validateProcessSteps(steps) {
56
+ if (!Array.isArray(steps)) {
57
+ throw new BadRequestError('saveProcess: steps must be an array of strings');
58
+ }
59
+ if (steps.length > MAX_PROCESS_STEPS) {
60
+ throw new BadRequestError(`saveProcess: steps exceeds the ${MAX_PROCESS_STEPS}-step cap (got ${steps.length})`);
61
+ }
62
+ const out = [];
63
+ for (let i = 0; i < steps.length; i++) {
64
+ const raw = steps[i];
65
+ if (!isJsonString(raw)) {
66
+ throw new BadRequestError(`saveProcess: step ${i + 1} is not a string`);
67
+ }
68
+ const trimmed = raw.trim();
69
+ if (trimmed.length === 0) {
70
+ throw new BadRequestError(`saveProcess: step ${i + 1} is empty`);
71
+ }
72
+ if (trimmed.length > MAX_PROCESS_STEP_LEN) {
73
+ throw new BadRequestError(`saveProcess: step ${i + 1} exceeds the ${MAX_PROCESS_STEP_LEN}-char cap`);
74
+ }
75
+ out.push(trimmed);
76
+ }
77
+ return out;
78
+ }
79
+ /** The recall-surface content for the memory mirror: name + numbered steps +
80
+ * optional description, so `hippo recall` shows the process body. */
81
+ function buildProcessContent(processName, steps, description) {
82
+ const numbered = steps.map((s, i) => `${i + 1}. ${s}`).join('\n');
83
+ let content = processName;
84
+ if (numbered)
85
+ content += `\n\n${numbered}`;
86
+ if (description)
87
+ content += `\n\nDescription: ${description}`;
88
+ return content;
89
+ }
90
+ export const PROCESS = {
91
+ kind: 'process',
92
+ label: 'process',
93
+ plural: 'processes',
94
+ fn: { get: 'loadProcessById', close: 'closeProcess', list: 'loadProcesses', save: 'saveProcess' },
95
+ states: VALID_PROCESS_STATES,
96
+ closableFrom: ['active'],
97
+ draft(opts) {
98
+ // The name is stored as written, so only a blank one is refused.
99
+ if (!opts.processName || opts.processName.trim().length === 0) {
100
+ throw new BadRequestError('saveProcess: processName is required');
101
+ }
102
+ const steps = validateProcessSteps(opts.steps);
103
+ return {
104
+ fields: { processName: opts.processName, description: opts.description, steps },
105
+ content: buildProcessContent(opts.processName, steps, opts.description),
106
+ tags: opts.extraTags ?? [],
107
+ supersedesId: opts.supersedesProcessId,
108
+ changeSummary: opts.changeSummary,
109
+ at: new Date().toISOString(),
110
+ };
111
+ },
112
+ };
113
+ // ---------------------------------------------------------------------------
114
+ // Public API
115
+ // ---------------------------------------------------------------------------
116
+ /**
117
+ * Create a process (or a new version that supersedes an existing one). Writes
118
+ * the memory mirror + the processes row in the `objects` store group's one
119
+ * transaction. When supersedesProcessId is given, the referenced ACTIVE row is
120
+ * preflighted (status + version) BEFORE the INSERT, then UPDATEd -> superseded in
121
+ * the SAME transaction (CAS: WHERE status='active' AND id != <new id>; throws on
122
+ * changes===0 so a duplicate supersede aborts the whole write). The new row's
123
+ * version = predecessor.version + 1 (server-derived); change_summary carries the
124
+ * delta note. A fresh create has version 1 and change_summary NULL.
125
+ */
126
+ export function saveProcess(hippoRoot, tenantId, opts, actor = 'cli') {
127
+ return saveObjectAt(PROCESS, { hippoRoot, tenantId, actor }, opts);
128
+ }
129
+ /**
130
+ * Close (retire) an active process with no successor. Updates the processes row
131
+ * only; the memory mirror is not mutated. A superseded row is already
132
+ * terminal in the chain and cannot be closed.
133
+ */
134
+ export function closeProcess(hippoRoot, tenantId, id, actor = 'cli') {
135
+ return closeObjectAt(hippoRoot, PROCESS, tenantId, id, actor);
136
+ }
137
+ export function loadProcessById(hippoRoot, tenantId, id) {
138
+ return objectByIdAt(hippoRoot, PROCESS, tenantId, id);
139
+ }
140
+ export function loadProcesses(hippoRoot, tenantId, opts = {}) {
141
+ return listObjectsAt(hippoRoot, PROCESS, tenantId, opts);
142
+ }
143
+ export function loadActiveProcesses(hippoRoot, tenantId, opts = {}) {
144
+ return loadProcesses(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
145
+ }
146
+ //# sourceMappingURL=processes.js.map
@@ -20,8 +20,12 @@
20
20
  * Lifecycle: active -> superseded (a newer version replaces it) or active ->
21
21
  * closed (retired).
22
22
  */
23
- import { type KeysetPosition } from './keyset.js';
24
- export type BriefStatus = 'active' | 'superseded' | 'closed';
23
+ import type { KeysetPosition } from '../util/keyset.js';
24
+ import type { SavableDescriptor } from './descriptor.js';
25
+ import { type ObjectSaveSite } from './lifecycle.js';
26
+ import type { BriefStatus, ProjectBrief } from '../store/object-types.js';
27
+ import type { Objects } from '../store/port.js';
28
+ export type { BriefStatus, ProjectBrief } from '../store/object-types.js';
25
29
  export declare const VALID_BRIEF_STATES: ReadonlySet<BriefStatus>;
26
30
  /** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
27
31
  * cap than the 4096 short-field convention. */
@@ -33,26 +37,6 @@ export declare const MAX_CHANGE_SUMMARY_LEN = 4096;
33
37
  export declare const MAX_BRIEF_RECEIPTS = 50;
34
38
  /** Truncate each receipt's headline in the assembled digest. */
35
39
  export declare const MAX_RECEIPT_HEADLINE_LEN = 200;
36
- export interface ProjectBrief {
37
- id: number;
38
- /** Nullable: ON DELETE SET NULL lets memory deletion proceed without breaking
39
- * the brief row. */
40
- memoryId: string | null;
41
- tenantId: string;
42
- /** The repo identifier this brief is scoped to (e.g. `hippo`). */
43
- repo: string;
44
- /** The brief body. */
45
- summary: string;
46
- /** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
47
- version: number;
48
- status: BriefStatus;
49
- supersededBy: number | null;
50
- supersededAt: string | null;
51
- /** The per-version delta note; set on a successor row only (NULL on a v1). */
52
- changeSummary: string | null;
53
- closedAt: string | null;
54
- createdAt: string;
55
- }
56
40
  export interface SaveProjectBriefOpts {
57
41
  repo: string;
58
42
  summary: string;
@@ -75,17 +59,17 @@ export interface ListProjectBriefsOpts {
75
59
  /** Resume after this row: the position the previous page ended on. */
76
60
  after?: KeysetPosition;
77
61
  }
62
+ export declare const PROJECT_BRIEF: SavableDescriptor<'project_brief', SaveProjectBriefOpts>;
78
63
  /**
79
64
  * Create a project_brief (or a new version that supersedes an existing one). Writes
80
- * the memory mirror + the project_briefs row atomically inside writeEntry's
81
- * SAVEPOINT. When supersedesBriefId is given, the referenced ACTIVE row is
65
+ * the memory mirror + the project_briefs row in the `objects` store group's one
66
+ * transaction. When supersedesBriefId is given, the referenced ACTIVE row is
82
67
  * preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
83
- * in the same SAVEPOINT; the new version = predecessor.version + 1 (server-derived).
68
+ * in the same transaction; the new version = predecessor.version + 1 (server-derived).
84
69
  */
85
70
  export declare function saveProjectBrief(hippoRoot: string, tenantId: string, opts: SaveProjectBriefOpts, actor?: string): ProjectBrief;
86
71
  /**
87
- * Close (retire) an active brief. CAS guard WHERE status='active'; 0 changes
88
- * distinguishes not-found from not-active. A superseded row is terminal.
72
+ * Close (retire) an active brief. A superseded row is terminal.
89
73
  */
90
74
  export declare function closeProjectBrief(hippoRoot: string, tenantId: string, id: number, actor?: string): ProjectBrief;
91
75
  export declare function loadProjectBriefById(hippoRoot: string, tenantId: string, id: number): ProjectBrief | null;
@@ -109,20 +93,15 @@ export declare function loadActiveBriefForRepo(hippoRoot: string, tenantId: stri
109
93
  * surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
110
94
  * `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
111
95
  */
112
- export declare function assembleBriefFromReceipts(hippoRoot: string, tenantId: string, repo: string): {
96
+ export declare function assembleBriefFromReceipts(hippoRoot: string, tenantId: string, repo: string): BriefDigest;
97
+ /** `assembleBriefFromReceipts` over a served store's group. */
98
+ export declare function briefFromReceipts(objects: Objects, tenantId: string, repo: string): Promise<BriefDigest>;
99
+ export interface BriefDigest {
113
100
  markdown: string;
114
101
  receiptCount: number;
115
- };
116
- /**
117
- * Auto-refresh the repo's brief from its receipts: assemble the digest, then create
118
- * a new version. If the repo already has an active brief it is superseded (the
119
- * change_summary records the auto-refresh + the audit metadata carries
120
- * `refreshed: true`); otherwise a v1 is created. Returns the new brief.
121
- *
122
- * The assemble (a read of `memories`) happens BEFORE writeEntry opens its SAVEPOINT;
123
- * a concurrent receipt write landing between the read and the brief write simply
124
- * appears in the NEXT refresh — the brief is a derived snapshot, not a transactional
125
- * aggregate, so no consistency invariant is violated.
126
- */
102
+ }
103
+ /** Saves a new version of the repo's brief from its receipts. The receipts are read before the save's transaction, so a receipt written in between shows in the next refresh. */
127
104
  export declare function refreshBrief(hippoRoot: string, tenantId: string, repo: string, actor?: string): ProjectBrief;
105
+ /** `refreshBrief` over a served store's group. */
106
+ export declare function refreshedBrief(objects: Objects, site: ObjectSaveSite, repo: string): Promise<ProjectBrief>;
128
107
  //# sourceMappingURL=project-briefs.d.ts.map
@@ -0,0 +1,255 @@
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 } from '../core/api-errors.js';
24
+ import { assertTenantId } from '../store/tenant.js';
25
+ import { checkText, requireLine } from './fields.js';
26
+ import { closeObjectAt, listObjectsAt, objectByIdAt, saveObject, saveObjectAt } from './lifecycle.js';
27
+ import { sqliteObjects } from '../store/sqlite/objects-group.js';
28
+ // ---------------------------------------------------------------------------
29
+ // Domain types
30
+ // ---------------------------------------------------------------------------
31
+ export const VALID_BRIEF_STATES = new Set([
32
+ 'active',
33
+ 'superseded',
34
+ 'closed',
35
+ ]);
36
+ /** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
37
+ * cap than the 4096 short-field convention. */
38
+ export const MAX_REPO_LEN = 256;
39
+ export const MAX_BRIEF_SUMMARY_LEN = 8192;
40
+ export const MAX_CHANGE_SUMMARY_LEN = 4096;
41
+ /** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
42
+ * + the rendered body). Realistic repos have far fewer recent receipts than this. */
43
+ export const MAX_BRIEF_RECEIPTS = 50;
44
+ /** Truncate each receipt's headline in the assembled digest. */
45
+ export const MAX_RECEIPT_HEADLINE_LEN = 200;
46
+ export const PROJECT_BRIEF = {
47
+ kind: 'project_brief',
48
+ label: 'brief',
49
+ plural: 'briefs',
50
+ fn: { get: 'loadProjectBriefById', close: 'closeProjectBrief', list: 'loadProjectBriefs', save: 'saveProjectBrief' },
51
+ states: VALID_BRIEF_STATES,
52
+ closableFrom: ['active'],
53
+ draft(opts) {
54
+ // The repo becomes a path tag on the refresh match and a heading in the digest, so it must be one line.
55
+ const repo = requireLine(opts.repo, MAX_REPO_LEN, {
56
+ required: 'saveProjectBrief: repo is required',
57
+ singleLine: 'saveProjectBrief: repo must be a single line (no newlines)',
58
+ tooLong: `saveProjectBrief: repo exceeds the ${MAX_REPO_LEN}-char cap`,
59
+ });
60
+ checkText(opts.summary, MAX_BRIEF_SUMMARY_LEN, {
61
+ required: 'saveProjectBrief: summary is required',
62
+ tooLong: `saveProjectBrief: summary exceeds the ${MAX_BRIEF_SUMMARY_LEN}-char cap`,
63
+ });
64
+ checkText(opts.changeSummary, MAX_CHANGE_SUMMARY_LEN, {
65
+ tooLong: `saveProjectBrief: changeSummary exceeds the ${MAX_CHANGE_SUMMARY_LEN}-char cap`,
66
+ });
67
+ return {
68
+ fields: { repo, summary: opts.summary, receiptCount: opts.refreshReceiptCount },
69
+ content: buildBriefContent(repo, opts.summary),
70
+ tags: opts.extraTags ?? [],
71
+ supersedesId: opts.supersedesBriefId,
72
+ changeSummary: opts.changeSummary,
73
+ at: new Date().toISOString(),
74
+ };
75
+ },
76
+ };
77
+ /** Recall-surface content for the memory mirror: repo + summary. Named (mirrors
78
+ * buildSkillContent) so the recall surface is deterministic + unit-testable. */
79
+ function buildBriefContent(repo, summary) {
80
+ return `${repo}\n\n${summary}`;
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Public API
84
+ // ---------------------------------------------------------------------------
85
+ /**
86
+ * Create a project_brief (or a new version that supersedes an existing one). Writes
87
+ * the memory mirror + the project_briefs row in the `objects` store group's one
88
+ * transaction. When supersedesBriefId is given, the referenced ACTIVE row is
89
+ * preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
90
+ * in the same transaction; the new version = predecessor.version + 1 (server-derived).
91
+ */
92
+ export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
93
+ return saveObjectAt(PROJECT_BRIEF, { hippoRoot, tenantId, actor }, opts);
94
+ }
95
+ /**
96
+ * Close (retire) an active brief. A superseded row is terminal.
97
+ */
98
+ export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
99
+ return closeObjectAt(hippoRoot, PROJECT_BRIEF, tenantId, id, actor);
100
+ }
101
+ export function loadProjectBriefById(hippoRoot, tenantId, id) {
102
+ return objectByIdAt(hippoRoot, PROJECT_BRIEF, tenantId, id);
103
+ }
104
+ export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
105
+ return listObjectsAt(hippoRoot, PROJECT_BRIEF, tenantId, { status: opts.status, filter: opts.repo, limit: opts.limit, after: opts.after });
106
+ }
107
+ /**
108
+ * The repo's CURRENT active brief, or null. By convention there is one active brief
109
+ * per (tenant, repo); if an operator created more than one (the DB does not prevent
110
+ * it, consistent with every other first-class object), the MOST-RECENT active row wins.
111
+ */
112
+ export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
113
+ assertTenantId('loadActiveBriefForRepo', tenantId);
114
+ if (repo === '')
115
+ return null;
116
+ return sqliteObjects(hippoRoot).listObjects(tenantId, 'project_brief', newestActive(repo))[0] ?? null;
117
+ }
118
+ /** An empty filter lists every repo, so the callers refuse an empty repo first. */
119
+ function newestActive(repo) {
120
+ return { status: 'active', filter: repo, limit: 1 };
121
+ }
122
+ // ---------------------------------------------------------------------------
123
+ // Refresh assembler (the distinguishing deliverable)
124
+ // ---------------------------------------------------------------------------
125
+ /** Single-line headline for a receipt: first non-empty line, newline-stripped,
126
+ * truncated. Deterministic + safe for the markdown bullet list. */
127
+ function receiptHeadline(content) {
128
+ const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
129
+ const trimmed = firstLine.trim();
130
+ return trimmed.length > MAX_RECEIPT_HEADLINE_LEN
131
+ ? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
132
+ : trimmed;
133
+ }
134
+ /** The tag a memory of the repo carries; the store matches it whole, so `path:hip` never matches `path:hippo`. */
135
+ function receiptTag(normalizedRepo) {
136
+ return `path:${normalizedRepo.toLowerCase()}`;
137
+ }
138
+ // NOTE on ordering: the `id DESC` tiebreak is lexical on a random-ish memory id
139
+ // (e.g. `sem_<hex>`), NOT chronological — within the same `created` timestamp the
140
+ // order is stable-but-arbitrary, not insertion order. `created DESC` is the real
141
+ // recency ordering.
142
+ //
143
+ // Budget-aware assembly: the digest is the
144
+ // brief `summary`, which saveProjectBrief caps at MAX_BRIEF_SUMMARY_LEN. The
145
+ // receipt/headline caps (50 x ~200) could otherwise build an ~11KB body that the
146
+ // store then REJECTS, breaking refresh for inputs within the advertised caps. So
147
+ // include receipt lines newest-first only while they fit under the cap (reserving
148
+ // slack for the header + an omission footer), and note the omitted remainder.
149
+ function fitReceiptLines(receipts) {
150
+ const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
151
+ const receiptLines = [];
152
+ if (receipts.length > 0) {
153
+ // Header + "## Recent receipts" + a worst-case omission footer cost; keep slack
154
+ // so the joined markdown stays <= MAX_BRIEF_SUMMARY_LEN even after the footer.
155
+ const SLACK = 400;
156
+ let bodyBudget = MAX_BRIEF_SUMMARY_LEN - SLACK;
157
+ for (const r of receipts) {
158
+ const line = buildReceiptLine(r);
159
+ if (line.length + 1 > bodyBudget)
160
+ break;
161
+ receiptLines.push(line);
162
+ bodyBudget -= line.length + 1;
163
+ }
164
+ }
165
+ return receiptLines;
166
+ }
167
+ function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
168
+ const omitted = receiptCount - receiptLines.length;
169
+ const lines = [];
170
+ lines.push(`# Project Brief: ${normalizedRepo}`);
171
+ lines.push('');
172
+ lines.push(omitted > 0
173
+ ? `_Auto-assembled from ${receiptLines.length} of ${receiptCount} receipt(s)._`
174
+ : `_Auto-assembled from ${receiptCount} receipt(s)._`);
175
+ lines.push('');
176
+ lines.push('## Recent receipts');
177
+ lines.push('');
178
+ if (receiptCount === 0) {
179
+ lines.push(`_No receipts found for ${normalizedRepo}._`);
180
+ }
181
+ else {
182
+ lines.push(...receiptLines);
183
+ if (omitted > 0) {
184
+ lines.push('');
185
+ lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
186
+ }
187
+ }
188
+ // Belt-and-suspenders: the budget loop keeps us under the cap, but hard-clamp the
189
+ // joined string so the store's NOT-NULL/<=cap contract can never be violated even
190
+ // for a pathological single oversized line.
191
+ let markdown = lines.join('\n');
192
+ if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
193
+ markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
194
+ }
195
+ return markdown;
196
+ }
197
+ /**
198
+ * Assemble the repo's recent receipts into a deterministic markdown digest, and
199
+ * return it WITH the receipt count (the count feeds refreshBrief's change_summary +
200
+ * audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
201
+ * `summary` is NOT NULL), including the zero-receipts case.
202
+ *
203
+ * A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
204
+ * brief's OWN memory mirror (source='project_brief') is excluded so a brief never
205
+ * becomes its own receipt on the next refresh. The match is against the JSON-array
206
+ * serialization (each element is a double-quoted string `"path:hippo"`); the
207
+ * surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
208
+ * `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
209
+ */
210
+ export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
211
+ const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
212
+ return briefDigest(normalizedRepo, sqliteObjects(hippoRoot).briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
213
+ }
214
+ /** `assembleBriefFromReceipts` over a served store's group. */
215
+ export async function briefFromReceipts(objects, tenantId, repo) {
216
+ const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
217
+ return briefDigest(normalizedRepo, await objects.briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
218
+ }
219
+ function requiredRepo(fn, tenantId, repo) {
220
+ assertTenantId(fn, tenantId);
221
+ const normalizedRepo = (repo ?? '').trim();
222
+ if (normalizedRepo.length === 0)
223
+ throw new BadRequestError(`${fn}: repo is required`);
224
+ return normalizedRepo;
225
+ }
226
+ function briefDigest(normalizedRepo, receipts) {
227
+ return { markdown: renderBriefDigest(normalizedRepo, receipts.length, fitReceiptLines(receipts)), receiptCount: receipts.length };
228
+ }
229
+ /** The version a refresh saves: a successor of the repo's active brief when it has one, else a first version. */
230
+ function refreshWrite(normalizedRepo, digest, active) {
231
+ return {
232
+ repo: normalizedRepo,
233
+ summary: digest.markdown,
234
+ changeSummary: active ? `auto-refresh from ${digest.receiptCount} receipt(s)` : undefined,
235
+ supersedesBriefId: active ? active.id : undefined,
236
+ refreshReceiptCount: digest.receiptCount,
237
+ // The path tag lets path-aware recall boost the brief; it cannot become its own receipt, because receipts leave out source project_brief.
238
+ extraTags: [receiptTag(normalizedRepo)],
239
+ };
240
+ }
241
+ /** Saves a new version of the repo's brief from its receipts. The receipts are read before the save's transaction, so a receipt written in between shows in the next refresh. */
242
+ export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
243
+ const normalizedRepo = requiredRepo('refreshBrief', tenantId, repo);
244
+ const digest = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
245
+ const active = loadActiveBriefForRepo(hippoRoot, tenantId, normalizedRepo);
246
+ return saveProjectBrief(hippoRoot, tenantId, refreshWrite(normalizedRepo, digest, active), actor);
247
+ }
248
+ /** `refreshBrief` over a served store's group. */
249
+ export async function refreshedBrief(objects, site, repo) {
250
+ const normalizedRepo = requiredRepo('refreshBrief', site.tenantId, repo);
251
+ const digest = await briefFromReceipts(objects, site.tenantId, normalizedRepo);
252
+ const [active = null] = await objects.listObjects(site.tenantId, 'project_brief', newestActive(normalizedRepo));
253
+ return saveObject(objects, PROJECT_BRIEF, site, refreshWrite(normalizedRepo, digest, active));
254
+ }
255
+ //# sourceMappingURL=project-briefs.js.map
@@ -21,8 +21,11 @@
21
21
  * Lifecycle: active -> superseded (a newer version replaces it) or active ->
22
22
  * closed (retired). Export renders ACTIVE skills only.
23
23
  */
24
- import { type KeysetPosition } from './keyset.js';
25
- export type SkillStatus = 'active' | 'superseded' | 'closed';
24
+ import type { KeysetPosition } from '../util/keyset.js';
25
+ import type { SavableDescriptor } from './descriptor.js';
26
+ import type { Skill, SkillStatus } from '../store/object-types.js';
27
+ import type { Objects } from '../store/port.js';
28
+ export type { Skill, SkillStatus } from '../store/object-types.js';
26
29
  export declare const VALID_SKILL_STATES: ReadonlySet<SkillStatus>;
27
30
  /** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
28
31
  * larger cap than the 4096 short-field convention. */
@@ -32,26 +35,6 @@ export declare const MAX_SKILL_TRIGGER_LEN = 1024;
32
35
  /** Aggregate bound on a single export render so the export body is never unbounded.
33
36
  * Realistic active-skill counts are tens; 1000 is a generous bound. */
34
37
  export declare const MAX_EXPORT_SKILLS = 1000;
35
- export interface Skill {
36
- id: number;
37
- /** Nullable: ON DELETE SET NULL lets memory deletion proceed without breaking
38
- * the skill row. */
39
- memoryId: string | null;
40
- tenantId: string;
41
- skillName: string;
42
- instructions: string;
43
- /** Optional "when to apply"; stored in the trigger_text column. */
44
- trigger: string | null;
45
- /** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
46
- version: number;
47
- status: SkillStatus;
48
- supersededBy: number | null;
49
- supersededAt: string | null;
50
- /** The per-version delta note; set on a successor row only (NULL on a v1). */
51
- changeSummary: string | null;
52
- closedAt: string | null;
53
- createdAt: string;
54
- }
55
38
  export interface SaveSkillOpts {
56
39
  skillName: string;
57
40
  instructions: string;
@@ -70,17 +53,17 @@ export interface ListSkillsOpts {
70
53
  /** Resume after this row: the position the previous page ended on. */
71
54
  after?: KeysetPosition;
72
55
  }
56
+ export declare const SKILL: SavableDescriptor<'skill', SaveSkillOpts>;
73
57
  /**
74
58
  * Create a skill (or a new version that supersedes an existing one). Writes the
75
- * memory mirror + the skills row atomically inside writeEntry's SAVEPOINT. When
59
+ * memory mirror + the skills row in the `objects` store group's one transaction. When
76
60
  * supersedesSkillId is given, the referenced ACTIVE row is preflighted (status +
77
- * version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same SAVEPOINT;
61
+ * version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
78
62
  * the new version = predecessor.version + 1 (server-derived).
79
63
  */
80
64
  export declare function saveSkill(hippoRoot: string, tenantId: string, opts: SaveSkillOpts, actor?: string): Skill;
81
65
  /**
82
- * Close (retire) an active skill. CAS guard WHERE status='active'; 0 changes
83
- * distinguishes not-found from not-active. A superseded row is terminal.
66
+ * Close (retire) an active skill. A superseded row is terminal.
84
67
  */
85
68
  export declare function closeSkill(hippoRoot: string, tenantId: string, id: number, actor?: string): Skill;
86
69
  export declare function loadSkillById(hippoRoot: string, tenantId: string, id: number): Skill | null;
@@ -98,4 +81,6 @@ export declare function loadActiveSkills(hippoRoot: string, tenantId: string, op
98
81
  * active rows; each field is capped on save, so the rendered string is bounded.
99
82
  */
100
83
  export declare function exportSkills(hippoRoot: string, tenantId: string): string;
84
+ /** `exportSkills` over a served store's group. */
85
+ export declare function skillsMarkdown(objects: Objects, tenantId: string): Promise<string>;
101
86
  //# sourceMappingURL=skills.d.ts.map