hippo-memory 1.69.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,11 +1,12 @@
1
1
  // Admin routes: API keys, quarantine and the audit log.
2
- import { AUDIT_OPS } from '../../audit.js';
3
- import { auditList, authCreate, authListRows, authRevoke, quarantineApprove, quarantineList, quarantineReject } from '../../api.js';
4
- import { HttpError, readBody, sendJson } from '../../http-util.js';
2
+ import { AUDIT_OPS } from '../../store/audit.js';
3
+ import { auditList, authCreate, authListRows, authRevoke, quarantineApprove, quarantineList, quarantineReject } from '../../api/index.js';
4
+ import { HttpError, readBody, sendJson } from '../../util/http-util.js';
5
+ import { log } from '../../util/log.js';
5
6
  import { assertCrossTenantAdmin, buildContextWithAuth } from '../auth.js';
6
7
  import { pageOf, parseCursor, setNextCursorHeader } from '../cursor.js';
7
8
  import { isSetMember, parseJsonObjectText, parseListLimit, validateIdSegment } from '../validation.js';
8
- import { isJsonString } from '../../json.js';
9
+ import { isJsonString } from '../../util/json.js';
9
10
  const VALID_AUDIT_OPS = new Set(AUDIT_OPS);
10
11
  // POST /v1/auth/keys reads its body before auth, so an unauthenticated caller can make the server buffer at most this many bytes and wait at most this many ms.
11
12
  // ServeOpts.mintBodyDeadlineMs overrides the wait for tests only, so a 408 test need not sit through it.
@@ -48,6 +49,10 @@ export async function handleCreateAuthKey({ req, res, opts }) {
48
49
  label: labelRaw,
49
50
  role,
50
51
  });
52
+ // The reply cannot change shape, so the server log is where a defaulted admin key gets noticed.
53
+ if (role === undefined && result.role === 'admin') {
54
+ log.warn(`auth key ${result.keyId} was minted with no role in the body, so it is an admin key, and it never expires; send "role": "member" for a narrower one`);
55
+ }
51
56
  sendJson(res, 200, result);
52
57
  return;
53
58
  }
@@ -99,7 +104,7 @@ export async function handleListQuarantine({ req, res, opts, query }) {
99
104
  }
100
105
  const limit = parseListLimit(query.get('limit'));
101
106
  const after = parseCursor(query.get('cursor'), 'string', 'string');
102
- const page = pageOf(quarantineList(ctx, { status, limit: limit + 1, after }), limit, (q) => ({ key: q.quarantinedAt, id: q.id }));
107
+ const page = pageOf(await quarantineList(ctx, { status, limit: limit + 1, after }), limit, (q) => ({ key: q.quarantinedAt, id: q.id }));
103
108
  sendJson(res, 200, { quarantine: page.items, next_cursor: page.nextCursor });
104
109
  return;
105
110
  }
@@ -107,7 +112,7 @@ export async function handleListQuarantine({ req, res, opts, query }) {
107
112
  export async function handleApproveQuarantine({ req, res, opts }, quarantineApproveMatch) {
108
113
  validateIdSegment(quarantineApproveMatch.id, 'memory id');
109
114
  const ctx = await buildContextWithAuth(req, opts);
110
- quarantineApprove(ctx, quarantineApproveMatch.id);
115
+ await quarantineApprove(ctx, quarantineApproveMatch.id);
111
116
  sendJson(res, 200, { approved: quarantineApproveMatch.id });
112
117
  return;
113
118
  }
@@ -115,7 +120,7 @@ export async function handleApproveQuarantine({ req, res, opts }, quarantineAppr
115
120
  export async function handleRejectQuarantine({ req, res, opts }, quarantineRejectMatch) {
116
121
  validateIdSegment(quarantineRejectMatch.id, 'memory id');
117
122
  const ctx = await buildContextWithAuth(req, opts);
118
- quarantineReject(ctx, quarantineRejectMatch.id);
123
+ await quarantineReject(ctx, quarantineRejectMatch.id);
119
124
  sendJson(res, 200, { rejected: quarantineRejectMatch.id });
120
125
  return;
121
126
  }
@@ -157,7 +162,7 @@ export async function handleListAudit({ req, res, opts, query }) {
157
162
  if (crossTenant)
158
163
  assertCrossTenantAdmin(ctx, '/v1/audit?tenant= for another tenant');
159
164
  const effectiveCtx = crossTenant ? { ...ctx, tenantId: tenantOverride } : ctx;
160
- const page = pageOf(auditList(effectiveCtx, { op, since, limit: limit + 1, after }), limit, (e) => ({ key: e.ts, id: e.id }));
165
+ const page = pageOf(await auditList(effectiveCtx, { op, since, limit: limit + 1, after }), limit, (e) => ({ key: e.ts, id: e.id }));
161
166
  setNextCursorHeader(res, page.nextCursor);
162
167
  sendJson(res, 200, page.items);
163
168
  return;
@@ -1,7 +1,7 @@
1
1
  import type { RouteRequest } from '../types.js';
2
- export declare function handleCreateCustomerNote({ req, res, opts }: RouteRequest): Promise<void>;
3
- export declare function handleListCustomerNotes({ req, res, opts, query }: RouteRequest): Promise<void>;
4
- export declare function handleSupersedeCustomerNote({ req, res, opts }: RouteRequest, noteSupersedeMatch: RegExpMatchArray): Promise<void>;
5
- export declare function handleCloseCustomerNote({ req, res, opts }: RouteRequest, noteCloseMatch: RegExpMatchArray): Promise<void>;
6
- export declare function handleGetCustomerNote({ req, res, opts }: RouteRequest, noteByIdMatch: RegExpMatchArray): Promise<void>;
2
+ export declare function handleCreateCustomerNote(rr: RouteRequest): Promise<void>;
3
+ export declare function handleListCustomerNotes(rr: RouteRequest): Promise<void>;
4
+ export declare function handleSupersedeCustomerNote(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
5
+ export declare function handleCloseCustomerNote(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
6
+ export declare function handleGetCustomerNote(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
7
7
  //# sourceMappingURL=customer-notes.d.ts.map
@@ -1,10 +1,21 @@
1
1
  // /v1/customer-notes routes.
2
- import { closeCustomerNote, loadCustomerNoteById, loadCustomerNotes, MAX_CUSTOMER_LEN, saveCustomerNote, VALID_NOTE_STATES } from '../../customer-notes.js';
3
- import { HttpError, sendJson } from '../../http-util.js';
2
+ import { CUSTOMER_NOTE, MAX_CUSTOMER_LEN } from '../../objects/customer-notes.js';
3
+ import { 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 { closeRoute, getRoute, listRoute, optionalString, requiredString, saveFor, supersedeRoute } from './object-routes.js';
7
+ const noteRoutes = {
8
+ noun: 'customer note',
9
+ field: 'note',
10
+ listField: 'notes',
11
+ object: CUSTOMER_NOTE,
12
+ filterParam: 'customer',
13
+ revise: (body) => {
14
+ const note = requiredString(body, 'note', { max: 8192 });
15
+ const changeSummary = optionalString(body, 'changeSummary', 4096);
16
+ return (existing, id) => ({ customer: existing.customer, note, changeSummary, supersedesNoteId: id });
17
+ },
18
+ };
8
19
  // ── customer_note routes ──
9
20
  //
10
21
  // 5 routes (no assembler/refresh): POST /v1/customer-notes (new; body customer +
@@ -13,101 +24,25 @@ import { isJsonString } from '../../json.js';
13
24
  // POST /v1/customer-notes/:id/close. DoS caps: customer 256, note 8192,
14
25
  // changeSummary 4096. The store validates + throws; the boundary maps validation ->
15
26
  // 400, not-found -> 404, not-active -> 409. Mirrors /v1/project-briefs.
16
- export async function handleCreateCustomerNote({ req, res, opts }) {
17
- const ctx = await buildContextWithAuth(req, opts);
18
- const body = await parseJsonBody(req, ctx);
19
- const customer = body['customer'];
20
- if (!isJsonString(customer) || customer.trim().length === 0) {
21
- throw new HttpError(400, 'customer is required (non-empty string)');
22
- }
23
- if (customer.length > MAX_CUSTOMER_LEN) {
24
- throw new HttpError(400, `customer exceeds ${MAX_CUSTOMER_LEN}-character cap`);
25
- }
26
- const note = body['note'];
27
- if (!isJsonString(note) || note.trim().length === 0) {
28
- throw new HttpError(400, 'note is required (non-empty string)');
29
- }
30
- if (note.length > 8192) {
31
- throw new HttpError(400, 'note exceeds 8192-character cap');
32
- }
33
- const customerNote = saveCustomerNote(opts.hippoRoot, ctx.tenantId, {
34
- customer,
35
- note,
36
- }, ctx.actor.subject);
37
- sendJson(res, 201, { note: customerNote });
38
- return;
27
+ export async function handleCreateCustomerNote(rr) {
28
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
29
+ const body = await parseJsonBody(rr.req, ctx);
30
+ const customerNote = await saveFor(rr, CUSTOMER_NOTE, ctx.tenantId, ctx.actor.subject, {
31
+ customer: requiredString(body, 'customer', { max: MAX_CUSTOMER_LEN }),
32
+ note: requiredString(body, 'note', { max: 8192 }),
33
+ });
34
+ sendJson(rr.res, 201, { note: customerNote });
39
35
  }
40
- export async function handleListCustomerNotes({ req, res, opts, query }) {
41
- const status = query.get('status') ?? 'all';
42
- const customerFilter = query.get('customer');
43
- const limit = parseListLimit(query.get('limit'));
44
- const after = parseCursor(query.get('cursor'), 'string', 'integer');
45
- const ctx = await buildContextWithAuth(req, opts);
46
- const listOpts = { limit: limit + 1, after };
47
- if (customerFilter !== null && customerFilter.trim().length > 0) {
48
- listOpts.customer = customerFilter.trim();
49
- }
50
- if (status !== 'all') {
51
- if (!isSetMember(VALID_NOTE_STATES, status)) {
52
- throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
53
- }
54
- listOpts.status = status;
55
- }
56
- const notes = loadCustomerNotes(opts.hippoRoot, ctx.tenantId, listOpts);
57
- const page = pageOf(notes, limit, byCreatedAt);
58
- sendJson(res, 200, { notes: page.items, next_cursor: page.nextCursor });
59
- return;
36
+ export function handleListCustomerNotes(rr) {
37
+ return listRoute(noteRoutes, rr);
60
38
  }
61
- export async function handleSupersedeCustomerNote({ req, res, opts }, noteSupersedeMatch) {
62
- const id = parseInt(noteSupersedeMatch[1], 10);
63
- const ctx = await buildContextWithAuth(req, opts);
64
- const body = await parseJsonBody(req, ctx);
65
- const note = body['note'];
66
- if (!isJsonString(note) || note.trim().length === 0) {
67
- throw new HttpError(400, 'note is required (non-empty string)');
68
- }
69
- if (note.length > 8192) {
70
- throw new HttpError(400, 'note exceeds 8192-character cap');
71
- }
72
- const changeRaw = body['changeSummary'];
73
- let changeSummary;
74
- if (changeRaw !== undefined && changeRaw !== null) {
75
- if (!isJsonString(changeRaw)) {
76
- throw new HttpError(400, 'changeSummary must be a string');
77
- }
78
- if (changeRaw.length > 4096) {
79
- throw new HttpError(400, 'changeSummary exceeds 4096-character cap');
80
- }
81
- changeSummary = changeRaw;
82
- }
83
- const existing = loadCustomerNoteById(opts.hippoRoot, ctx.tenantId, id);
84
- if (!existing) {
85
- throw new HttpError(404, `customer note ${id} not found`);
86
- }
87
- const customerNote = saveCustomerNote(opts.hippoRoot, ctx.tenantId, {
88
- customer: existing.customer,
89
- note,
90
- changeSummary,
91
- supersedesNoteId: id,
92
- }, ctx.actor.subject);
93
- sendJson(res, 200, { note: customerNote });
94
- return;
39
+ export function handleSupersedeCustomerNote(rr, match) {
40
+ return supersedeRoute(noteRoutes, rr, match);
95
41
  }
96
- export async function handleCloseCustomerNote({ req, res, opts }, noteCloseMatch) {
97
- const id = parseInt(noteCloseMatch[1], 10);
98
- const ctx = await buildContextWithAuth(req, opts);
99
- const customerNote = closeCustomerNote(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
100
- sendJson(res, 200, { note: customerNote });
101
- return;
42
+ export function handleCloseCustomerNote(rr, match) {
43
+ return closeRoute(noteRoutes, rr, match);
102
44
  }
103
- export async function handleGetCustomerNote({ req, res, opts }, noteByIdMatch) {
104
- const id = parseInt(noteByIdMatch[1], 10);
105
- const ctx = await buildContextWithAuth(req, opts);
106
- const customerNote = loadCustomerNoteById(opts.hippoRoot, ctx.tenantId, id);
107
- if (!customerNote) {
108
- throw new HttpError(404, `customer note ${id} not found`);
109
- }
110
- sendJson(res, 200, { note: customerNote });
111
- return;
45
+ export function handleGetCustomerNote(rr, match) {
46
+ return getRoute(noteRoutes, rr, match);
112
47
  }
113
48
  //# sourceMappingURL=customer-notes.js.map
@@ -1,7 +1,7 @@
1
1
  import type { RouteRequest } from '../types.js';
2
- export declare function handleCreateDecision({ req, res, opts }: RouteRequest): Promise<void>;
3
- export declare function handleListDecisions({ req, res, opts, query }: RouteRequest): Promise<void>;
4
- export declare function handleSupersedeDecision({ req, res, opts }: RouteRequest, decisionSupersedeMatch: RegExpMatchArray): Promise<void>;
5
- export declare function handleCloseDecision({ req, res, opts }: RouteRequest, decisionCloseMatch: RegExpMatchArray): Promise<void>;
6
- export declare function handleGetDecision({ req, res, opts }: RouteRequest, decisionByIdMatch: RegExpMatchArray): Promise<void>;
2
+ export declare function handleCreateDecision(rr: RouteRequest): Promise<void>;
3
+ export declare function handleListDecisions(rr: RouteRequest): Promise<void>;
4
+ export declare function handleSupersedeDecision(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
5
+ export declare function handleCloseDecision(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
6
+ export declare function handleGetDecision(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
7
7
  //# sourceMappingURL=decisions.d.ts.map
@@ -1,11 +1,22 @@
1
1
  // /v1/decisions routes.
2
- import { closeDecision, loadDecisionById, loadDecisions, saveDecision, VALID_DECISION_STATES } from '../../decisions.js';
3
- import { HttpError, sendJson } from '../../http-util.js';
4
- import { NotFoundError } from '../../api-errors.js';
2
+ import { DECISION } from '../../objects/decisions.js';
3
+ import { HttpError, sendJson } from '../../util/http-util.js';
4
+ import { NotFoundError } from '../../core/api-errors.js';
5
+ import { isJsonNumber } from '../../util/json.js';
5
6
  import { buildContextWithAuth } from '../auth.js';
6
- import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
7
- import { isJsonNumber, isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
8
- import { isJsonString } from '../../json.js';
7
+ import { parseJsonBody } from '../validation.js';
8
+ import { closeRoute, getRoute, listRoute, optionalString, requiredString, saveFor } from './object-routes.js';
9
+ const decisionRoutes = { noun: 'decision', field: 'decision', listField: 'decisions', object: DECISION };
10
+ const TEXT = { max: 4096, untrimmed: true };
11
+ function supersededId(body) {
12
+ const raw = body['supersedesDecisionId'];
13
+ if (raw === undefined || raw === null)
14
+ return undefined;
15
+ if (!isJsonNumber(raw) || !Number.isInteger(raw) || raw <= 0) {
16
+ throw new HttpError(400, 'supersedesDecisionId must be a positive integer');
17
+ }
18
+ return raw;
19
+ }
9
20
  // ── decisions (first-class object) ──
10
21
  //
11
22
  // 5 routes: POST /v1/decisions (create, optional supersedesDecisionId),
@@ -16,41 +27,17 @@ import { isJsonString } from '../../json.js';
16
27
  // DoS caps: text 4096, context 4096. The HTTP surface is
17
28
  // new (no legacy --supersedes <memory-id> constraint), so it supersedes by
18
29
  // table id and never weakens a memory mirror.
19
- export async function handleCreateDecision({ req, res, opts }) {
20
- const ctx = await buildContextWithAuth(req, opts);
30
+ export async function handleCreateDecision(rr) {
31
+ const { req, res } = rr;
32
+ const ctx = await buildContextWithAuth(req, rr.opts);
21
33
  const body = await parseJsonBody(req, ctx);
22
- const text = body['text'];
23
- if (!isJsonString(text) || text.length === 0) {
24
- throw new HttpError(400, 'text is required (non-empty string)');
25
- }
26
- if (text.length > 4096) {
27
- throw new HttpError(400, 'text exceeds 4096-character cap');
28
- }
29
- const contextRaw = body['context'];
30
- let context;
31
- if (contextRaw !== undefined && contextRaw !== null) {
32
- if (!isJsonString(contextRaw)) {
33
- throw new HttpError(400, 'context must be a string');
34
- }
35
- if (contextRaw.length > 4096) {
36
- throw new HttpError(400, 'context exceeds 4096-character cap');
37
- }
38
- context = contextRaw;
39
- }
40
- const supRaw = body['supersedesDecisionId'];
41
- let supersedesDecisionId;
42
- if (supRaw !== undefined && supRaw !== null) {
43
- if (!isJsonNumber(supRaw) || !Number.isInteger(supRaw) || supRaw <= 0) {
44
- throw new HttpError(400, 'supersedesDecisionId must be a positive integer');
45
- }
46
- supersedesDecisionId = supRaw;
47
- }
34
+ const write = {
35
+ decisionText: requiredString(body, 'text', TEXT),
36
+ context: optionalString(body, 'context', 4096),
37
+ supersedesDecisionId: supersededId(body),
38
+ };
48
39
  try {
49
- const decision = saveDecision(opts.hippoRoot, ctx.tenantId, {
50
- decisionText: text,
51
- context,
52
- supersedesDecisionId,
53
- }, ctx.actor.subject);
40
+ const decision = await saveFor(rr, DECISION, ctx.tenantId, ctx.actor.subject, write);
54
41
  sendJson(res, 201, { decision });
55
42
  }
56
43
  catch (e) {
@@ -59,76 +46,26 @@ export async function handleCreateDecision({ req, res, opts }) {
59
46
  throw new HttpError(409, e.message);
60
47
  throw e;
61
48
  }
62
- return;
63
49
  }
64
- export async function handleListDecisions({ req, res, opts, query }) {
65
- const status = query.get('status') ?? 'all';
66
- const limit = parseListLimit(query.get('limit'));
67
- const after = parseCursor(query.get('cursor'), 'string', 'integer');
68
- const ctx = await buildContextWithAuth(req, opts);
69
- let decisions;
70
- if (status === 'all') {
71
- decisions = loadDecisions(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
72
- }
73
- else {
74
- if (!isSetMember(VALID_DECISION_STATES, status)) {
75
- throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
76
- }
77
- decisions = loadDecisions(opts.hippoRoot, ctx.tenantId, {
78
- status,
79
- limit: limit + 1,
80
- after,
81
- });
82
- }
83
- const page = pageOf(decisions, limit, byCreatedAt);
84
- sendJson(res, 200, { decisions: page.items, next_cursor: page.nextCursor });
85
- return;
50
+ export function handleListDecisions(rr) {
51
+ return listRoute(decisionRoutes, rr);
86
52
  }
87
- export async function handleSupersedeDecision({ req, res, opts }, decisionSupersedeMatch) {
88
- const oldId = parseInt(decisionSupersedeMatch[1], 10);
89
- const ctx = await buildContextWithAuth(req, opts);
90
- const body = await parseJsonBody(req, ctx);
91
- const text = body['text'];
92
- if (!isJsonString(text) || text.length === 0) {
93
- throw new HttpError(400, 'text is required (non-empty string)');
94
- }
95
- if (text.length > 4096) {
96
- throw new HttpError(400, 'text exceeds 4096-character cap');
97
- }
98
- const contextRaw = body['context'];
99
- let context;
100
- if (contextRaw !== undefined && contextRaw !== null) {
101
- if (!isJsonString(contextRaw)) {
102
- throw new HttpError(400, 'context must be a string');
103
- }
104
- if (contextRaw.length > 4096) {
105
- throw new HttpError(400, 'context exceeds 4096-character cap');
106
- }
107
- context = contextRaw;
108
- }
109
- const decision = saveDecision(opts.hippoRoot, ctx.tenantId, {
110
- decisionText: text,
111
- context,
53
+ // Not on supersedeRoute: this one answers 201 and leaves the missing-row 404 to the store, where the other five answer 200 after their own lookup.
54
+ export async function handleSupersedeDecision(rr, match) {
55
+ const oldId = parseInt(match[1], 10);
56
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
57
+ const body = await parseJsonBody(rr.req, ctx);
58
+ const decision = await saveFor(rr, DECISION, ctx.tenantId, ctx.actor.subject, {
59
+ decisionText: requiredString(body, 'text', TEXT),
60
+ context: optionalString(body, 'context', 4096),
112
61
  supersedesDecisionId: oldId,
113
- }, ctx.actor.subject);
114
- sendJson(res, 201, { decision });
115
- return;
62
+ });
63
+ sendJson(rr.res, 201, { decision });
116
64
  }
117
- export async function handleCloseDecision({ req, res, opts }, decisionCloseMatch) {
118
- const id = parseInt(decisionCloseMatch[1], 10);
119
- const ctx = await buildContextWithAuth(req, opts);
120
- const decision = closeDecision(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
121
- sendJson(res, 200, { decision });
122
- return;
65
+ export function handleCloseDecision(rr, match) {
66
+ return closeRoute(decisionRoutes, rr, match);
123
67
  }
124
- export async function handleGetDecision({ req, res, opts }, decisionByIdMatch) {
125
- const id = parseInt(decisionByIdMatch[1], 10);
126
- const ctx = await buildContextWithAuth(req, opts);
127
- const decision = loadDecisionById(opts.hippoRoot, ctx.tenantId, id);
128
- if (!decision) {
129
- throw new HttpError(404, `decision ${id} not found`);
130
- }
131
- sendJson(res, 200, { decision });
132
- return;
68
+ export function handleGetDecision(rr, match) {
69
+ return getRoute(decisionRoutes, rr, match);
133
70
  }
134
71
  //# sourceMappingURL=decisions.js.map
@@ -1,7 +1,7 @@
1
1
  import type { RouteRequest } from '../types.js';
2
- export declare function handleCreateIncident({ req, res, opts }: RouteRequest): Promise<void>;
3
- export declare function handleListIncidents({ req, res, opts, query }: RouteRequest): Promise<void>;
4
- export declare function handleResolveIncident({ req, res, opts }: RouteRequest, incidentResolveMatch: RegExpMatchArray): Promise<void>;
5
- export declare function handleCloseIncident({ req, res, opts }: RouteRequest, incidentCloseMatch: RegExpMatchArray): Promise<void>;
6
- export declare function handleGetIncident({ req, res, opts }: RouteRequest, incidentByIdMatch: RegExpMatchArray): Promise<void>;
2
+ export declare function handleCreateIncident(rr: RouteRequest): Promise<void>;
3
+ export declare function handleListIncidents(rr: RouteRequest): Promise<void>;
4
+ export declare function handleResolveIncident(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
5
+ export declare function handleCloseIncident(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
6
+ export declare function handleGetIncident(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
7
7
  //# sourceMappingURL=incidents.d.ts.map
@@ -1,12 +1,29 @@
1
1
  // /v1/incidents routes.
2
- import { closeIncident, loadIncidentById, loadIncidents, resolveIncident, saveIncident, VALID_INCIDENT_STATES } from '../../incidents.js';
3
- import { HttpError, sendJson } from '../../http-util.js';
4
- import { NotFoundError } from '../../api-errors.js';
2
+ import { INCIDENT, openIncident, resolveOpenIncident } from '../../objects/incidents.js';
3
+ import { HttpError, sendJson } from '../../util/http-util.js';
4
+ import { NotFoundError } from '../../core/api-errors.js';
5
5
  import { buildContextWithAuth } from '../auth.js';
6
- import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
7
- import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
8
- import { isJsonString } from '../../json.js';
6
+ import { parseJsonBody } from '../validation.js';
7
+ import { isJsonString } from '../../util/json.js';
8
+ import { closeRoute, getRoute, listRoute, objectsOf, optionalString, requiredString } from './object-routes.js';
9
9
  const MAX_LINKED_MEMORY_IDS = 256;
10
+ const incidentRoutes = { noun: 'incident', field: 'incident', listField: 'incidents', object: INCIDENT };
11
+ function linkedMemoryIds(body) {
12
+ const raw = body['linkedMemoryIds'];
13
+ if (raw === undefined || raw === null)
14
+ return undefined;
15
+ if (!Array.isArray(raw)) {
16
+ throw new HttpError(400, 'linkedMemoryIds must be an array of memory ids');
17
+ }
18
+ if (raw.length > MAX_LINKED_MEMORY_IDS) {
19
+ throw new HttpError(400, `linkedMemoryIds exceeds ${MAX_LINKED_MEMORY_IDS}-item cap`);
20
+ }
21
+ const isValidMemoryId = (item) => isJsonString(item) && item.length > 0 && item.length <= 4096;
22
+ if (!raw.every(isValidMemoryId)) {
23
+ throw new HttpError(400, 'each linkedMemoryIds entry must be a non-empty string <= 4096 chars');
24
+ }
25
+ return raw;
26
+ }
10
27
  // ── incidents (first-class object) ──
11
28
  //
12
29
  // 5 routes: POST /v1/incidents (open; body text + context + linkedMemoryIds[]),
@@ -18,48 +35,17 @@ const MAX_LINKED_MEMORY_IDS = 256;
18
35
  // 4096. Mirrors /v1/decisions; lifecycle is
19
36
  // open->resolved->closed (no supersede), so linkedMemoryIds replaces
20
37
  // supersedesDecisionId on create.
21
- export async function handleCreateIncident({ req, res, opts }) {
38
+ export async function handleCreateIncident(rr) {
39
+ const { req, res, opts } = rr;
22
40
  const ctx = await buildContextWithAuth(req, opts);
23
41
  const body = await parseJsonBody(req, ctx);
24
- const text = body['text'];
25
- if (!isJsonString(text) || text.length === 0) {
26
- throw new HttpError(400, 'text is required (non-empty string)');
27
- }
28
- if (text.length > 4096) {
29
- throw new HttpError(400, 'text exceeds 4096-character cap');
30
- }
31
- const contextRaw = body['context'];
32
- let context;
33
- if (contextRaw !== undefined && contextRaw !== null) {
34
- if (!isJsonString(contextRaw)) {
35
- throw new HttpError(400, 'context must be a string');
36
- }
37
- if (contextRaw.length > 4096) {
38
- throw new HttpError(400, 'context exceeds 4096-character cap');
39
- }
40
- context = contextRaw;
41
- }
42
- const linkedRaw = body['linkedMemoryIds'];
43
- let linkedMemoryIds;
44
- if (linkedRaw !== undefined && linkedRaw !== null) {
45
- if (!Array.isArray(linkedRaw)) {
46
- throw new HttpError(400, 'linkedMemoryIds must be an array of memory ids');
47
- }
48
- if (linkedRaw.length > MAX_LINKED_MEMORY_IDS) {
49
- throw new HttpError(400, `linkedMemoryIds exceeds ${MAX_LINKED_MEMORY_IDS}-item cap`);
50
- }
51
- const isValidMemoryId = (item) => isJsonString(item) && item.length > 0 && item.length <= 4096;
52
- if (!linkedRaw.every(isValidMemoryId)) {
53
- throw new HttpError(400, 'each linkedMemoryIds entry must be a non-empty string <= 4096 chars');
54
- }
55
- linkedMemoryIds = linkedRaw;
56
- }
42
+ const write = {
43
+ incidentText: requiredString(body, 'text', { max: 4096, untrimmed: true }),
44
+ context: optionalString(body, 'context', 4096),
45
+ linkedMemoryIds: linkedMemoryIds(body),
46
+ };
57
47
  try {
58
- const incident = saveIncident(opts.hippoRoot, ctx.tenantId, {
59
- incidentText: text,
60
- context,
61
- linkedMemoryIds,
62
- }, ctx.actor.subject);
48
+ const incident = await openIncident(objectsOf(rr), opts.hippoRoot, ctx.tenantId, write, ctx.actor.subject);
63
49
  sendJson(res, 201, { incident });
64
50
  }
65
51
  catch (e) {
@@ -68,61 +54,22 @@ export async function handleCreateIncident({ req, res, opts }) {
68
54
  throw new HttpError(409, e.message);
69
55
  throw e;
70
56
  }
71
- return;
72
57
  }
73
- export async function handleListIncidents({ req, res, opts, query }) {
74
- const status = query.get('status') ?? 'all';
75
- const limit = parseListLimit(query.get('limit'));
76
- const after = parseCursor(query.get('cursor'), 'string', 'integer');
77
- const ctx = await buildContextWithAuth(req, opts);
78
- let incidents;
79
- if (status === 'all') {
80
- incidents = loadIncidents(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
81
- }
82
- else {
83
- if (!isSetMember(VALID_INCIDENT_STATES, status)) {
84
- throw new HttpError(400, `status must be one of: open | resolved | closed | all (got "${status}")`);
85
- }
86
- incidents = loadIncidents(opts.hippoRoot, ctx.tenantId, {
87
- status,
88
- limit: limit + 1,
89
- after,
90
- });
91
- }
92
- const page = pageOf(incidents, limit, byCreatedAt);
93
- sendJson(res, 200, { incidents: page.items, next_cursor: page.nextCursor });
94
- return;
58
+ export function handleListIncidents(rr) {
59
+ return listRoute(incidentRoutes, rr);
95
60
  }
96
- export async function handleResolveIncident({ req, res, opts }, incidentResolveMatch) {
97
- const id = parseInt(incidentResolveMatch[1], 10);
61
+ export async function handleResolveIncident(rr, match) {
62
+ const { req, res, opts } = rr;
63
+ const id = parseInt(match[1], 10);
98
64
  const ctx = await buildContextWithAuth(req, opts);
99
- const body = await parseJsonBody(req, ctx);
100
- const resolutionText = body['resolutionText'];
101
- if (!isJsonString(resolutionText) || resolutionText.trim().length === 0) {
102
- throw new HttpError(400, 'resolutionText is required (non-empty string)');
103
- }
104
- if (resolutionText.length > 4096) {
105
- throw new HttpError(400, 'resolutionText exceeds 4096-character cap');
106
- }
107
- const incident = resolveIncident(opts.hippoRoot, ctx.tenantId, id, resolutionText, ctx.actor.subject);
65
+ const resolutionText = requiredString(await parseJsonBody(req, ctx), 'resolutionText', { max: 4096 });
66
+ const incident = await resolveOpenIncident(objectsOf(rr), ctx.tenantId, id, resolutionText, ctx.actor.subject);
108
67
  sendJson(res, 200, { incident });
109
- return;
110
68
  }
111
- export async function handleCloseIncident({ req, res, opts }, incidentCloseMatch) {
112
- const id = parseInt(incidentCloseMatch[1], 10);
113
- const ctx = await buildContextWithAuth(req, opts);
114
- const incident = closeIncident(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
115
- sendJson(res, 200, { incident });
116
- return;
69
+ export function handleCloseIncident(rr, match) {
70
+ return closeRoute(incidentRoutes, rr, match);
117
71
  }
118
- export async function handleGetIncident({ req, res, opts }, incidentByIdMatch) {
119
- const id = parseInt(incidentByIdMatch[1], 10);
120
- const ctx = await buildContextWithAuth(req, opts);
121
- const incident = loadIncidentById(opts.hippoRoot, ctx.tenantId, id);
122
- if (!incident) {
123
- throw new HttpError(404, `incident ${id} not found`);
124
- }
125
- sendJson(res, 200, { incident });
126
- return;
72
+ export function handleGetIncident(rr, match) {
73
+ return getRoute(incidentRoutes, rr, match);
127
74
  }
128
75
  //# sourceMappingURL=incidents.js.map
@@ -1,12 +1,13 @@
1
1
  // Memory write routes: create, graph, archive, supersede, promote, forget, outcome, sleep.
2
- import { archiveRaw, forget, outcome, outcomeForLastRecall, promote, remember, sleep, supersede } from '../../api.js';
3
- import { buildGraphModel } from '../../graph-view.js';
4
- import { MAX_ENTITY_NAME_LEN } from '../../graph/types.js';
5
- import { HttpError, sendJson } from '../../http-util.js';
6
- import { canReadScope } from '../../recall-scope.js';
2
+ import { archiveRaw, forget, outcome, outcomeForLastRecall, promote, remember, supersede } from '../../api/index.js';
3
+ import { graphModelOf } from '../../graph/view.js';
4
+ import { MAX_ENTITY_NAME_LEN } from '../../store/graph-rows.js';
5
+ import { HttpError, sendJson } from '../../util/http-util.js';
6
+ import { requireGroup } from '../../store/port.js';
7
7
  import { assertCrossTenantAdmin, buildContextWithAuth, isLoopback } from '../auth.js';
8
- import { getCallerProject, getString, getStringArray, isJsonBoolean, isSetMember, parseJsonBody, parseListLimit, validateIdSegment } from '../validation.js';
9
- import { isJsonString } from '../../json.js';
8
+ import { sleepInChild } from '../sleep-offload.js';
9
+ import { getCallerProject, getString, getStringArray, isSetMember, parseJsonBody, parseListLimit, validateIdSegment } from '../validation.js';
10
+ import { isJsonString, isJsonBoolean } from '../../util/json.js';
10
11
  const VALID_KINDS = new Set([
11
12
  'raw',
12
13
  'distilled',
@@ -52,12 +53,9 @@ export async function handleGetGraph({ req, res, opts, query }) {
52
53
  }
53
54
  const limit = parseListLimit(query.get('limit'));
54
55
  const ctx = await buildContextWithAuth(req, opts);
55
- const model = buildGraphModel(ctx.hippoRoot, ctx.tenantId, {
56
- entity: entityRaw ?? undefined,
57
- limit,
58
- canRead: (s) => s === null || canReadScope(ctx.actor, s),
59
- });
60
- sendJson(res, 200, model);
56
+ const { role, scopes, owner } = ctx.actor;
57
+ const rows = await requireGroup(opts.store, 'graphReads').graphRows(ctx.tenantId, { entity: entityRaw ?? undefined, limit, reader: { role, scopes, owner } });
58
+ sendJson(res, 200, graphModelOf(rows));
61
59
  return;
62
60
  }
63
61
  // /v1/memories/:id/* and DELETE /v1/memories/:id
@@ -180,7 +178,7 @@ export async function handleSleep({ req, res, opts }) {
180
178
  throw new HttpError(400, 'no_share must be a boolean');
181
179
  }
182
180
  // sleepCtx already built above for the admin-role gate; reuse.
183
- const result = await sleep(sleepCtx, {
181
+ const result = await sleepInChild(sleepCtx, {
184
182
  dryRun: dryRunRaw === true,
185
183
  noShare: noShareRaw === true,
186
184
  });