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
@@ -0,0 +1,40 @@
1
+ import { type JsonValue } from '../../util/json.js';
2
+ import type { ObjectDescriptor, SavableDescriptor } from '../../objects/descriptor.js';
3
+ import type { ObjectByKind, ObjectKind, SavableKind } from '../../store/object-types.js';
4
+ import { type Objects } from '../../store/port.js';
5
+ import type { RouteRequest } from '../types.js';
6
+ export interface ObjectRouteConfig<K extends ObjectKind> {
7
+ /** Names the object in the 404 text, e.g. "customer note". */
8
+ readonly noun: string;
9
+ /** Reply field that carries one object, e.g. "note". */
10
+ readonly field: string;
11
+ /** Reply field that carries a page, e.g. "notes". */
12
+ readonly listField: string;
13
+ /** The bad-status reply lists `object.states` in the set's own order. */
14
+ readonly object: ObjectDescriptor<K>;
15
+ /** List query parameter matched against the kind's filter column, e.g. "customer". */
16
+ readonly filterParam?: string;
17
+ }
18
+ export interface VersionedRouteConfig<K extends SavableKind, W> extends ObjectRouteConfig<K> {
19
+ readonly object: SavableDescriptor<K, W>;
20
+ /** Checks the body, then returns the successor's write; split in two so a bad body answers 400 before a missing row answers 404. */
21
+ readonly revise: (body: Record<string, JsonValue>) => (existing: ObjectByKind[K], id: number) => W;
22
+ }
23
+ export interface RequiredStringRule {
24
+ readonly max: number;
25
+ /** The field name is a plural noun, so the replies read "are required" and "exceed". */
26
+ readonly plural?: boolean;
27
+ /** The blank check does not trim, so a value of only spaces passes it. */
28
+ readonly untrimmed?: boolean;
29
+ }
30
+ export declare function requiredString(body: Record<string, JsonValue>, key: string, rule: RequiredStringRule): string;
31
+ export declare function optionalString(body: Record<string, JsonValue>, key: string, max: number): string | undefined;
32
+ /** The request store's object group; the dispatcher has already answered 501 for a store without it. */
33
+ export declare function objectsOf({ opts }: RouteRequest): Objects;
34
+ /** Saves through the request's store as the authenticated caller. */
35
+ export declare function saveFor<K extends SavableKind, W>(rr: RouteRequest, d: SavableDescriptor<K, W>, tenantId: string, actor: string, write: W): Promise<ObjectByKind[K]>;
36
+ export declare function listRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: RouteRequest): Promise<void>;
37
+ export declare function getRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
38
+ export declare function closeRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
39
+ export declare function supersedeRoute<K extends SavableKind, W>(cfg: VersionedRouteConfig<K, W>, rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
40
+ //# sourceMappingURL=object-routes.d.ts.map
@@ -0,0 +1,80 @@
1
+ // List, get, close and supersede handlers shared by the typed-object routes; each route file passes one config.
2
+ import { HttpError, sendJson } from '../../util/http-util.js';
3
+ import { isJsonString } from '../../util/json.js';
4
+ import { closeObject, listObjects, objectById, saveObject } from '../../objects/lifecycle.js';
5
+ import { requireGroup } from '../../store/port.js';
6
+ import { buildContextWithAuth } from '../auth.js';
7
+ import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
8
+ import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
9
+ export function requiredString(body, key, rule) {
10
+ const value = body[key];
11
+ if (!isJsonString(value) || (rule.untrimmed ? value : value.trim()).length === 0) {
12
+ throw new HttpError(400, `${key} ${rule.plural ? 'are' : 'is'} required (non-empty string)`);
13
+ }
14
+ if (value.length > rule.max) {
15
+ throw new HttpError(400, `${key} ${rule.plural ? 'exceed' : 'exceeds'} ${rule.max}-character cap`);
16
+ }
17
+ return value;
18
+ }
19
+ export function optionalString(body, key, max) {
20
+ const value = body[key];
21
+ if (value === undefined || value === null)
22
+ return undefined;
23
+ if (!isJsonString(value))
24
+ throw new HttpError(400, `${key} must be a string`);
25
+ if (value.length > max)
26
+ throw new HttpError(400, `${key} exceeds ${max}-character cap`);
27
+ return value;
28
+ }
29
+ /** The request store's object group; the dispatcher has already answered 501 for a store without it. */
30
+ export function objectsOf({ opts }) {
31
+ return requireGroup(opts.store, 'objects');
32
+ }
33
+ /** Saves through the request's store as the authenticated caller. */
34
+ export function saveFor(rr, d, tenantId, actor, write) {
35
+ return saveObject(objectsOf(rr), d, { hippoRoot: rr.opts.hippoRoot, tenantId, actor }, write);
36
+ }
37
+ async function found(cfg, objects, tenantId, id) {
38
+ const row = await objectById(objects, cfg.object, tenantId, id);
39
+ if (!row)
40
+ throw new HttpError(404, `${cfg.noun} ${id} not found`);
41
+ return row;
42
+ }
43
+ // Limit and cursor are checked before auth and status after it, so a keyless caller gets 400 for the first two and 401 for a bad status.
44
+ export async function listRoute(cfg, rr) {
45
+ const { req, res, opts, query } = rr;
46
+ const status = query.get('status') ?? 'all';
47
+ const filter = cfg.filterParam === undefined ? null : query.get(cfg.filterParam);
48
+ const limit = parseListLimit(query.get('limit'));
49
+ const after = parseCursor(query.get('cursor'), 'string', 'integer');
50
+ const ctx = await buildContextWithAuth(req, opts);
51
+ const listOpts = { limit: limit + 1, after, filter: filter?.trim() || undefined };
52
+ if (status !== 'all') {
53
+ const states = cfg.object.states;
54
+ if (!isSetMember(states, status)) {
55
+ throw new HttpError(400, `status must be one of: ${[...states].join(' | ')} | all (got "${status}")`);
56
+ }
57
+ listOpts.status = status;
58
+ }
59
+ const page = pageOf(await listObjects(objectsOf(rr), cfg.object, ctx.tenantId, listOpts), limit, byCreatedAt);
60
+ sendJson(res, 200, { [cfg.listField]: page.items, next_cursor: page.nextCursor });
61
+ }
62
+ export async function getRoute(cfg, rr, match) {
63
+ const id = parseInt(match[1], 10);
64
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
65
+ sendJson(rr.res, 200, { [cfg.field]: await found(cfg, objectsOf(rr), ctx.tenantId, id) });
66
+ }
67
+ export async function closeRoute(cfg, rr, match) {
68
+ const id = parseInt(match[1], 10);
69
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
70
+ sendJson(rr.res, 200, { [cfg.field]: await closeObject(objectsOf(rr), cfg.object, ctx.tenantId, id, ctx.actor.subject) });
71
+ }
72
+ export async function supersedeRoute(cfg, rr, match) {
73
+ const id = parseInt(match[1], 10);
74
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
75
+ const successor = cfg.revise(await parseJsonBody(rr.req, ctx));
76
+ const existing = await found(cfg, objectsOf(rr), ctx.tenantId, id);
77
+ const saved = await saveFor(rr, cfg.object, ctx.tenantId, ctx.actor.subject, successor(existing, id));
78
+ sendJson(rr.res, 200, { [cfg.field]: saved });
79
+ }
80
+ //# sourceMappingURL=object-routes.js.map
@@ -1,8 +1,8 @@
1
1
  import type { RouteRequest } from '../types.js';
2
- export declare function handleCreatePolicy({ req, res, opts }: RouteRequest): Promise<void>;
3
- export declare function handleListPolicies({ req, res, opts, query }: RouteRequest): Promise<void>;
4
- export declare function handlePoliciesAsOf({ req, res, opts, query }: RouteRequest): Promise<void>;
5
- export declare function handleSupersedePolicy({ req, res, opts }: RouteRequest, policySupersedeMatch: RegExpMatchArray): Promise<void>;
6
- export declare function handleClosePolicy({ req, res, opts }: RouteRequest, policyCloseMatch: RegExpMatchArray): Promise<void>;
7
- export declare function handleGetPolicy({ req, res, opts }: RouteRequest, policyByIdMatch: RegExpMatchArray): Promise<void>;
2
+ export declare function handleCreatePolicy(rr: RouteRequest): Promise<void>;
3
+ export declare function handleListPolicies(rr: RouteRequest): Promise<void>;
4
+ export declare function handlePoliciesAsOf(rr: RouteRequest): Promise<void>;
5
+ export declare function handleSupersedePolicy(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
6
+ export declare function handleClosePolicy(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
7
+ export declare function handleGetPolicy(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
8
8
  //# sourceMappingURL=policies.d.ts.map
@@ -1,25 +1,24 @@
1
1
  // /v1/policies routes.
2
- import { closePolicy, loadPolicies, loadPoliciesAsOf, loadPolicyById, savePolicy, VALID_POLICY_STATES } from '../../policies.js';
3
- import { HttpError, sendJson } from '../../http-util.js';
2
+ import { policiesAsOf, POLICY } from '../../objects/policies.js';
3
+ import { HttpError, sendJson } from '../../util/http-util.js';
4
4
  import { buildContextWithAuth } from '../auth.js';
5
- import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
6
- import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
7
- import { isJsonString } from '../../json.js';
8
- // HTTP-boundary check for an optional policy date field (validFrom/validTo).
9
- // Type + length only; savePolicy/loadPoliciesAsOf normalize + format-validate the
10
- // value (an unparseable date throws there -> mapped to 400). 64-char cap bounds a
11
- // junk string before it reaches the Date parser.
12
- function optionalDateField(raw, label) {
13
- if (raw === undefined || raw === null)
14
- return undefined;
15
- if (!isJsonString(raw)) {
16
- throw new HttpError(400, `${label} must be a string`);
17
- }
18
- if (raw.length > 64) {
19
- throw new HttpError(400, `${label} exceeds 64-character cap`);
20
- }
21
- return raw;
22
- }
5
+ import { parseJsonBody } from '../validation.js';
6
+ import { closeRoute, getRoute, listRoute, objectsOf, optionalString, requiredString, saveFor, supersedeRoute } from './object-routes.js';
7
+ // The date fields get a type and length check only: the store parses the date, and the cap bounds a junk string before it reaches the Date parser.
8
+ const MAX_DATE_LEN = 64;
9
+ const policyRoutes = {
10
+ noun: 'policy',
11
+ field: 'policy',
12
+ listField: 'policies',
13
+ object: POLICY,
14
+ revise: (body) => {
15
+ const policyText = requiredString(body, 'policyText', { max: 4096 });
16
+ const validFrom = optionalString(body, 'validFrom', MAX_DATE_LEN);
17
+ const validTo = optionalString(body, 'validTo', MAX_DATE_LEN);
18
+ const changeSummary = optionalString(body, 'changeSummary', 4096);
19
+ return (existing, id) => ({ policyName: existing.policyName, policyText, validFrom, validTo, changeSummary, supersedesPolicyId: id });
20
+ },
21
+ };
23
22
  // ── policies (first-class object, bi-temporal-first) ──
24
23
  //
25
24
  // 6 routes: POST /v1/policies (new; processName-style body policyName +
@@ -29,124 +28,41 @@ function optionalDateField(raw, label) {
29
28
  // /v1/policies/:id, POST /v1/policies/:id/supersede, POST /v1/policies/:id/close.
30
29
  // Date inputs are normalized + range-validated in the store; an invalid/inverted
31
30
  // date throws -> 400. DoS caps: policyName/policyText/changeSummary 4096.
32
- export async function handleCreatePolicy({ req, res, opts }) {
33
- const ctx = await buildContextWithAuth(req, opts);
34
- const body = await parseJsonBody(req, ctx);
35
- const policyName = body['policyName'];
36
- if (!isJsonString(policyName) || policyName.trim().length === 0) {
37
- throw new HttpError(400, 'policyName is required (non-empty string)');
38
- }
39
- if (policyName.length > 4096) {
40
- throw new HttpError(400, 'policyName exceeds 4096-character cap');
41
- }
42
- const policyText = body['policyText'];
43
- if (!isJsonString(policyText) || policyText.trim().length === 0) {
44
- throw new HttpError(400, 'policyText is required (non-empty string)');
45
- }
46
- if (policyText.length > 4096) {
47
- throw new HttpError(400, 'policyText exceeds 4096-character cap');
48
- }
49
- const validFrom = optionalDateField(body['validFrom'], 'validFrom');
50
- const validTo = optionalDateField(body['validTo'], 'validTo');
51
- const policy = savePolicy(opts.hippoRoot, ctx.tenantId, {
52
- policyName,
53
- policyText,
54
- validFrom,
55
- validTo,
56
- }, ctx.actor.subject);
57
- sendJson(res, 201, { policy });
58
- return;
31
+ export async function handleCreatePolicy(rr) {
32
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
33
+ const body = await parseJsonBody(rr.req, ctx);
34
+ const policy = await saveFor(rr, POLICY, ctx.tenantId, ctx.actor.subject, {
35
+ policyName: requiredString(body, 'policyName', { max: 4096 }),
36
+ policyText: requiredString(body, 'policyText', { max: 4096 }),
37
+ validFrom: optionalString(body, 'validFrom', MAX_DATE_LEN),
38
+ validTo: optionalString(body, 'validTo', MAX_DATE_LEN),
39
+ });
40
+ sendJson(rr.res, 201, { policy });
59
41
  }
60
- export async function handleListPolicies({ req, res, opts, query }) {
61
- const status = query.get('status') ?? 'all';
62
- const limit = parseListLimit(query.get('limit'));
63
- const after = parseCursor(query.get('cursor'), 'string', 'integer');
64
- const ctx = await buildContextWithAuth(req, opts);
65
- let policies;
66
- if (status === 'all') {
67
- policies = loadPolicies(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
68
- }
69
- else {
70
- if (!isSetMember(VALID_POLICY_STATES, status)) {
71
- throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
72
- }
73
- policies = loadPolicies(opts.hippoRoot, ctx.tenantId, {
74
- status,
75
- limit: limit + 1,
76
- after,
77
- });
78
- }
79
- const page = pageOf(policies, limit, byCreatedAt);
80
- sendJson(res, 200, { policies: page.items, next_cursor: page.nextCursor });
81
- return;
42
+ export function handleListPolicies(rr) {
43
+ return listRoute(policyRoutes, rr);
82
44
  }
83
45
  // The as-of query: must precede the /:id GET (literal 'asof' is non-numeric so
84
46
  // the /(\d+)/ route would not match it, but order it first for clarity).
85
- export async function handlePoliciesAsOf({ req, res, opts, query }) {
47
+ export async function handlePoliciesAsOf(rr) {
48
+ const { req, res, opts, query } = rr;
86
49
  const date = query.get('date');
87
50
  if (date === null || date.length === 0) {
88
51
  throw new HttpError(400, 'date is required (ISO-8601 valid-time)');
89
52
  }
90
53
  const name = query.get('name') ?? undefined;
91
54
  const ctx = await buildContextWithAuth(req, opts);
92
- const policies = loadPoliciesAsOf(opts.hippoRoot, ctx.tenantId, date, { name });
55
+ const policies = await policiesAsOf(objectsOf(rr), ctx.tenantId, date, { name });
93
56
  sendJson(res, 200, { policies });
94
57
  return;
95
58
  }
96
- export async function handleSupersedePolicy({ req, res, opts }, policySupersedeMatch) {
97
- const id = parseInt(policySupersedeMatch[1], 10);
98
- const ctx = await buildContextWithAuth(req, opts);
99
- const body = await parseJsonBody(req, ctx);
100
- const policyText = body['policyText'];
101
- if (!isJsonString(policyText) || policyText.trim().length === 0) {
102
- throw new HttpError(400, 'policyText is required (non-empty string)');
103
- }
104
- if (policyText.length > 4096) {
105
- throw new HttpError(400, 'policyText exceeds 4096-character cap');
106
- }
107
- const validFrom = optionalDateField(body['validFrom'], 'validFrom');
108
- const validTo = optionalDateField(body['validTo'], 'validTo');
109
- const changeRaw = body['changeSummary'];
110
- let changeSummary;
111
- if (changeRaw !== undefined && changeRaw !== null) {
112
- if (!isJsonString(changeRaw)) {
113
- throw new HttpError(400, 'changeSummary must be a string');
114
- }
115
- if (changeRaw.length > 4096) {
116
- throw new HttpError(400, 'changeSummary exceeds 4096-character cap');
117
- }
118
- changeSummary = changeRaw;
119
- }
120
- const existing = loadPolicyById(opts.hippoRoot, ctx.tenantId, id);
121
- if (!existing) {
122
- throw new HttpError(404, `policy ${id} not found`);
123
- }
124
- const policy = savePolicy(opts.hippoRoot, ctx.tenantId, {
125
- policyName: existing.policyName,
126
- policyText,
127
- validFrom,
128
- validTo,
129
- changeSummary,
130
- supersedesPolicyId: id,
131
- }, ctx.actor.subject);
132
- sendJson(res, 200, { policy });
133
- return;
59
+ export function handleSupersedePolicy(rr, match) {
60
+ return supersedeRoute(policyRoutes, rr, match);
134
61
  }
135
- export async function handleClosePolicy({ req, res, opts }, policyCloseMatch) {
136
- const id = parseInt(policyCloseMatch[1], 10);
137
- const ctx = await buildContextWithAuth(req, opts);
138
- const policy = closePolicy(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
139
- sendJson(res, 200, { policy });
140
- return;
62
+ export function handleClosePolicy(rr, match) {
63
+ return closeRoute(policyRoutes, rr, match);
141
64
  }
142
- export async function handleGetPolicy({ req, res, opts }, policyByIdMatch) {
143
- const id = parseInt(policyByIdMatch[1], 10);
144
- const ctx = await buildContextWithAuth(req, opts);
145
- const policy = loadPolicyById(opts.hippoRoot, ctx.tenantId, id);
146
- if (!policy) {
147
- throw new HttpError(404, `policy ${id} not found`);
148
- }
149
- sendJson(res, 200, { policy });
150
- return;
65
+ export function handleGetPolicy(rr, match) {
66
+ return getRoute(policyRoutes, rr, match);
151
67
  }
152
68
  //# sourceMappingURL=policies.js.map
@@ -1,10 +1,12 @@
1
1
  // /v1/predictions routes.
2
- import { closePrediction, computePredictionBaserate, loadAllPredictions, loadOpenPredictions, loadPredictionById, loadPredictionsByClass, savePrediction, VALID_CLOSURE_STATES } from '../../predictions/store.js';
3
- import { HttpError, MAX_ID_LEN, sendJson } from '../../http-util.js';
2
+ import { loadConfig } from '../../core/config.js';
3
+ import { predictionMirror, VALID_CLOSURE_STATES } from '../../store/predictions.js';
4
+ import { requireGroup } from '../../store/port.js';
5
+ import { HttpError, MAX_ID_LEN, sendJson } from '../../util/http-util.js';
4
6
  import { buildContextWithAuth } from '../auth.js';
5
7
  import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
6
- import { isJsonNumber, isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
7
- import { isJsonString } from '../../json.js';
8
+ import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
9
+ import { isJsonString, isJsonNumber } from '../../util/json.js';
8
10
  // ── prediction first-class object ──
9
11
  //
10
12
  // 4 routes: POST /v1/predictions (create), GET /v1/predictions (list),
@@ -50,48 +52,33 @@ export async function handleCreatePrediction({ req, res, opts }) {
50
52
  }
51
53
  targetDateValue = targetDate;
52
54
  }
53
- const prediction = savePrediction(opts.hippoRoot, ctx.tenantId, {
54
- classTag,
55
- claimText: claim,
56
- estimateValue,
57
- estimateUnit,
58
- targetDate: targetDateValue,
59
- }, ctx.actor.subject);
55
+ const claimed = { classTag, claimText: claim, estimateValue, estimateUnit, targetDate: targetDateValue };
56
+ const mirror = predictionMirror(ctx.tenantId, claimed, loadConfig(opts.hippoRoot).defaultHalfLifeDays);
57
+ const prediction = await requireGroup(opts.store, 'predictions').savePrediction(ctx.tenantId, { ...claimed, mirror }, ctx.actor.subject);
60
58
  sendJson(res, 201, { prediction });
61
59
  return;
62
60
  }
61
+ /** Which rows a list reads; a status other than all or open needs a class, as no store reads one closed state across classes. */
62
+ function listFilter(classTag, status) {
63
+ if (status === 'all')
64
+ return { classTag };
65
+ if (status === 'open')
66
+ return { classTag, closureState: 'open' };
67
+ if (!isSetMember(VALID_CLOSURE_STATES, status)) {
68
+ throw new HttpError(400, `status must be one of: open | closed | closed-unknown | all (got "${status}")`);
69
+ }
70
+ if (!classTag) {
71
+ throw new HttpError(400, 'status filter (non-open) requires class param');
72
+ }
73
+ return { classTag, closureState: status };
74
+ }
63
75
  export async function handleListPredictions({ req, res, opts, query }) {
64
- const classTag = query.get('class') ?? undefined;
76
+ const classTag = query.get('class') || undefined;
65
77
  const status = query.get('status') ?? 'all';
66
78
  const limit = parseListLimit(query.get('limit'));
67
79
  const after = parseCursor(query.get('cursor'), 'string', 'integer');
68
80
  const ctx = await buildContextWithAuth(req, opts);
69
- let predictions;
70
- if (status === 'all') {
71
- predictions = classTag
72
- ? loadPredictionsByClass(opts.hippoRoot, ctx.tenantId, classTag, { limit: limit + 1, after })
73
- : loadAllPredictions(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
74
- }
75
- else if (status === 'open') {
76
- predictions = loadOpenPredictions(opts.hippoRoot, ctx.tenantId, {
77
- classTag: classTag || undefined,
78
- limit: limit + 1,
79
- after,
80
- });
81
- }
82
- else {
83
- if (!isSetMember(VALID_CLOSURE_STATES, status)) {
84
- throw new HttpError(400, `status must be one of: open | closed | closed-unknown | all (got "${status}")`);
85
- }
86
- if (!classTag) {
87
- throw new HttpError(400, 'status filter (non-open) requires class param');
88
- }
89
- predictions = loadPredictionsByClass(opts.hippoRoot, ctx.tenantId, classTag, {
90
- closureState: status,
91
- limit: limit + 1,
92
- after,
93
- });
94
- }
81
+ const predictions = await requireGroup(opts.store, 'predictions').listPredictions(ctx.tenantId, { ...listFilter(classTag, status), limit: limit + 1, after });
95
82
  const page = pageOf(predictions, limit, byCreatedAt);
96
83
  sendJson(res, 200, { predictions: page.items, next_cursor: page.nextCursor });
97
84
  return;
@@ -109,14 +96,14 @@ export async function handlePredictionStats({ req, res, opts, query }) {
109
96
  throw new HttpError(400, `class exceeds ${MAX_ID_LEN}-character cap`);
110
97
  }
111
98
  const ctx = await buildContextWithAuth(req, opts);
112
- const baserate = computePredictionBaserate(opts.hippoRoot, ctx.tenantId, classTag, ctx.actor.subject);
99
+ const baserate = await requireGroup(opts.store, 'predictions').predictionBaserate(ctx.tenantId, classTag, ctx.actor.subject);
113
100
  sendJson(res, 200, { baserate });
114
101
  return;
115
102
  }
116
103
  export async function handleGetPrediction({ req, res, opts }, predictionByIdMatch) {
117
104
  const id = parseInt(predictionByIdMatch[1], 10);
118
105
  const ctx = await buildContextWithAuth(req, opts);
119
- const prediction = loadPredictionById(opts.hippoRoot, ctx.tenantId, id);
106
+ const prediction = await requireGroup(opts.store, 'predictions').predictionById(ctx.tenantId, id);
120
107
  if (!prediction) {
121
108
  throw new HttpError(404, `prediction ${id} not found`);
122
109
  }
@@ -150,11 +137,8 @@ export async function handleClosePrediction({ req, res, opts }, predictionCloseM
150
137
  }
151
138
  closureNote = note;
152
139
  }
153
- const prediction = closePrediction(opts.hippoRoot, ctx.tenantId, id, {
154
- closureState: state,
155
- actualValue,
156
- closureNote,
157
- }, ctx.actor.subject);
140
+ const close = { closureState: state, actualValue, closureNote };
141
+ const prediction = await requireGroup(opts.store, 'predictions').closePrediction(ctx.tenantId, id, close, ctx.actor.subject);
158
142
  sendJson(res, 200, { prediction });
159
143
  return;
160
144
  }
@@ -1,7 +1,7 @@
1
1
  import type { RouteRequest } from '../types.js';
2
- export declare function handleCreateProcess({ req, res, opts }: RouteRequest): Promise<void>;
3
- export declare function handleListProcesses({ req, res, opts, query }: RouteRequest): Promise<void>;
4
- export declare function handleSupersedeProcess({ req, res, opts }: RouteRequest, processSupersedeMatch: RegExpMatchArray): Promise<void>;
5
- export declare function handleCloseProcess({ req, res, opts }: RouteRequest, processCloseMatch: RegExpMatchArray): Promise<void>;
6
- export declare function handleGetProcess({ req, res, opts }: RouteRequest, processByIdMatch: RegExpMatchArray): Promise<void>;
2
+ export declare function handleCreateProcess(rr: RouteRequest): Promise<void>;
3
+ export declare function handleListProcesses(rr: RouteRequest): Promise<void>;
4
+ export declare function handleSupersedeProcess(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
5
+ export declare function handleCloseProcess(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
6
+ export declare function handleGetProcess(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
7
7
  //# sourceMappingURL=processes.d.ts.map
@@ -1,13 +1,13 @@
1
1
  // /v1/processes routes.
2
- import { closeProcess, loadProcessById, loadProcesses, saveProcess, VALID_PROCESS_STATES } from '../../processes.js';
3
- import { HttpError, sendJson } from '../../http-util.js';
2
+ import { PROCESS } from '../../objects/processes.js';
3
+ import { HttpError, sendJson } from '../../util/http-util.js';
4
4
  import { buildContextWithAuth } from '../auth.js';
5
- import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
6
- import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
7
- import { isJsonString } from '../../json.js';
5
+ import { parseJsonBody } from '../validation.js';
6
+ import { isJsonString } from '../../util/json.js';
7
+ import { closeRoute, getRoute, listRoute, optionalString, requiredString, saveFor, supersedeRoute } from './object-routes.js';
8
8
  // HTTP-boundary validation for a process `steps` body (untrusted). Returns the
9
9
  // step strings (saveProcess re-validates + trims, this is the fail-fast 400
10
- // gate). Caps mirror src/processes.ts MAX_PROCESS_STEPS / MAX_PROCESS_STEP_LEN.
10
+ // gate). Caps mirror src/objects/processes.ts MAX_PROCESS_STEPS / MAX_PROCESS_STEP_LEN.
11
11
  function validateProcessStepsBody(raw) {
12
12
  if (raw === undefined || raw === null)
13
13
  return [];
@@ -31,6 +31,21 @@ function validateProcessStepsBody(raw) {
31
31
  // SAFETY: every item in raw was confirmed to be a string in the loop above.
32
32
  return raw;
33
33
  }
34
+ const processRoutes = {
35
+ noun: 'process',
36
+ field: 'process',
37
+ listField: 'processes',
38
+ object: PROCESS,
39
+ revise: (body) => {
40
+ const steps = validateProcessStepsBody(body['steps']);
41
+ if (steps.length === 0) {
42
+ throw new HttpError(400, 'steps is required (at least one step) for a supersession');
43
+ }
44
+ const changeSummary = optionalString(body, 'changeSummary', 4096);
45
+ const description = optionalString(body, 'description', 4096);
46
+ return (existing, id) => ({ processName: existing.processName, steps, description, changeSummary, supersedesProcessId: id });
47
+ },
48
+ };
34
49
  // ── processes (first-class object) ──
35
50
  //
36
51
  // 5 routes: POST /v1/processes (new; body processName + steps[] + description),
@@ -42,121 +57,26 @@ function validateProcessStepsBody(raw) {
42
57
  // caps: processName/description/changeSummary 4096, steps 200x2000
43
58
  // (validateProcessStepsBody). Mirrors /v1/decisions; the delta lifecycle is the
44
59
  // decision supersede path.
45
- export async function handleCreateProcess({ req, res, opts }) {
46
- const ctx = await buildContextWithAuth(req, opts);
47
- const body = await parseJsonBody(req, ctx);
48
- const processName = body['processName'];
49
- if (!isJsonString(processName) || processName.trim().length === 0) {
50
- throw new HttpError(400, 'processName is required (non-empty string)');
51
- }
52
- if (processName.length > 4096) {
53
- throw new HttpError(400, 'processName exceeds 4096-character cap');
54
- }
55
- const steps = validateProcessStepsBody(body['steps']);
56
- const descriptionRaw = body['description'];
57
- let description;
58
- if (descriptionRaw !== undefined && descriptionRaw !== null) {
59
- if (!isJsonString(descriptionRaw)) {
60
- throw new HttpError(400, 'description must be a string');
61
- }
62
- if (descriptionRaw.length > 4096) {
63
- throw new HttpError(400, 'description exceeds 4096-character cap');
64
- }
65
- description = descriptionRaw;
66
- }
67
- const process = saveProcess(opts.hippoRoot, ctx.tenantId, {
68
- processName,
69
- steps,
70
- description,
71
- }, ctx.actor.subject);
72
- sendJson(res, 201, { process });
73
- return;
60
+ export async function handleCreateProcess(rr) {
61
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
62
+ const body = await parseJsonBody(rr.req, ctx);
63
+ const process = await saveFor(rr, PROCESS, ctx.tenantId, ctx.actor.subject, {
64
+ processName: requiredString(body, 'processName', { max: 4096 }),
65
+ steps: validateProcessStepsBody(body['steps']),
66
+ description: optionalString(body, 'description', 4096),
67
+ });
68
+ sendJson(rr.res, 201, { process });
74
69
  }
75
- export async function handleListProcesses({ req, res, opts, query }) {
76
- const status = query.get('status') ?? 'all';
77
- const limit = parseListLimit(query.get('limit'));
78
- const after = parseCursor(query.get('cursor'), 'string', 'integer');
79
- const ctx = await buildContextWithAuth(req, opts);
80
- let processes;
81
- if (status === 'all') {
82
- processes = loadProcesses(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
83
- }
84
- else {
85
- if (!isSetMember(VALID_PROCESS_STATES, status)) {
86
- throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
87
- }
88
- processes = loadProcesses(opts.hippoRoot, ctx.tenantId, {
89
- status,
90
- limit: limit + 1,
91
- after,
92
- });
93
- }
94
- const page = pageOf(processes, limit, byCreatedAt);
95
- sendJson(res, 200, { processes: page.items, next_cursor: page.nextCursor });
96
- return;
70
+ export function handleListProcesses(rr) {
71
+ return listRoute(processRoutes, rr);
97
72
  }
98
- export async function handleSupersedeProcess({ req, res, opts }, processSupersedeMatch) {
99
- const id = parseInt(processSupersedeMatch[1], 10);
100
- const ctx = await buildContextWithAuth(req, opts);
101
- const body = await parseJsonBody(req, ctx);
102
- const steps = validateProcessStepsBody(body['steps']);
103
- if (steps.length === 0) {
104
- throw new HttpError(400, 'steps is required (at least one step) for a supersession');
105
- }
106
- const changeRaw = body['changeSummary'];
107
- let changeSummary;
108
- if (changeRaw !== undefined && changeRaw !== null) {
109
- if (!isJsonString(changeRaw)) {
110
- throw new HttpError(400, 'changeSummary must be a string');
111
- }
112
- if (changeRaw.length > 4096) {
113
- throw new HttpError(400, 'changeSummary exceeds 4096-character cap');
114
- }
115
- changeSummary = changeRaw;
116
- }
117
- const descRaw = body['description'];
118
- let description;
119
- if (descRaw !== undefined && descRaw !== null) {
120
- if (!isJsonString(descRaw)) {
121
- throw new HttpError(400, 'description must be a string');
122
- }
123
- if (descRaw.length > 4096) {
124
- throw new HttpError(400, 'description exceeds 4096-character cap');
125
- }
126
- description = descRaw;
127
- }
128
- // A supersession is a new version of the SAME process: reuse the
129
- // predecessor's name. 404 if the target does not exist; saveProcess's
130
- // in-SAVEPOINT preflight is the authoritative active-state check (409).
131
- const existing = loadProcessById(opts.hippoRoot, ctx.tenantId, id);
132
- if (!existing) {
133
- throw new HttpError(404, `process ${id} not found`);
134
- }
135
- const process = saveProcess(opts.hippoRoot, ctx.tenantId, {
136
- processName: existing.processName,
137
- steps,
138
- description,
139
- changeSummary,
140
- supersedesProcessId: id,
141
- }, ctx.actor.subject);
142
- sendJson(res, 200, { process });
143
- return;
73
+ export function handleSupersedeProcess(rr, match) {
74
+ return supersedeRoute(processRoutes, rr, match);
144
75
  }
145
- export async function handleCloseProcess({ req, res, opts }, processCloseMatch) {
146
- const id = parseInt(processCloseMatch[1], 10);
147
- const ctx = await buildContextWithAuth(req, opts);
148
- const process = closeProcess(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
149
- sendJson(res, 200, { process });
150
- return;
76
+ export function handleCloseProcess(rr, match) {
77
+ return closeRoute(processRoutes, rr, match);
151
78
  }
152
- export async function handleGetProcess({ req, res, opts }, processByIdMatch) {
153
- const id = parseInt(processByIdMatch[1], 10);
154
- const ctx = await buildContextWithAuth(req, opts);
155
- const process = loadProcessById(opts.hippoRoot, ctx.tenantId, id);
156
- if (!process) {
157
- throw new HttpError(404, `process ${id} not found`);
158
- }
159
- sendJson(res, 200, { process });
160
- return;
79
+ export function handleGetProcess(rr, match) {
80
+ return getRoute(processRoutes, rr, match);
161
81
  }
162
82
  //# sourceMappingURL=processes.js.map