hippo-memory 1.68.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (864) hide show
  1. package/README.md +6 -3
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,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
@@ -1,8 +1,8 @@
1
1
  import type { RouteRequest } from '../types.js';
2
- export declare function handleCreateProjectBrief({ req, res, opts }: RouteRequest): Promise<void>;
3
- export declare function handleListProjectBriefs({ req, res, opts, query }: RouteRequest): Promise<void>;
4
- export declare function handleRefreshProjectBrief({ req, res, opts }: RouteRequest): Promise<void>;
5
- export declare function handleSupersedeProjectBrief({ req, res, opts }: RouteRequest, briefSupersedeMatch: RegExpMatchArray): Promise<void>;
6
- export declare function handleCloseProjectBrief({ req, res, opts }: RouteRequest, briefCloseMatch: RegExpMatchArray): Promise<void>;
7
- export declare function handleGetProjectBrief({ req, res, opts }: RouteRequest, briefByIdMatch: RegExpMatchArray): Promise<void>;
2
+ export declare function handleCreateProjectBrief(rr: RouteRequest): Promise<void>;
3
+ export declare function handleListProjectBriefs(rr: RouteRequest): Promise<void>;
4
+ export declare function handleRefreshProjectBrief(rr: RouteRequest): Promise<void>;
5
+ export declare function handleSupersedeProjectBrief(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
6
+ export declare function handleCloseProjectBrief(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
7
+ export declare function handleGetProjectBrief(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
8
8
  //# sourceMappingURL=project-briefs.d.ts.map
@@ -1,10 +1,21 @@
1
1
  // /v1/project-briefs routes.
2
- import { assembleBriefFromReceipts, closeProjectBrief, loadProjectBriefById, loadProjectBriefs, MAX_REPO_LEN, refreshBrief, saveProjectBrief, VALID_BRIEF_STATES } from '../../project-briefs.js';
3
- import { HttpError, sendJson } from '../../http-util.js';
2
+ import { briefFromReceipts, MAX_REPO_LEN, PROJECT_BRIEF, refreshedBrief } from '../../objects/project-briefs.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, objectsOf, optionalString, requiredString, saveFor, supersedeRoute } from './object-routes.js';
7
+ const briefRoutes = {
8
+ noun: 'project brief',
9
+ field: 'brief',
10
+ listField: 'briefs',
11
+ object: PROJECT_BRIEF,
12
+ filterParam: 'repo',
13
+ revise: (body) => {
14
+ const summary = requiredString(body, 'summary', { max: 8192 });
15
+ const changeSummary = optionalString(body, 'changeSummary', 4096);
16
+ return (existing, id) => ({ repo: existing.repo, summary, changeSummary, supersedesBriefId: id });
17
+ },
18
+ };
8
19
  // ── project_brief routes ──
9
20
  //
10
21
  // 6 routes: POST /v1/project-briefs (new; body repo + summary), GET
@@ -15,123 +26,40 @@ import { isJsonString } from '../../json.js';
15
26
  // POST /v1/project-briefs/:id/close. DoS caps: repo 256, summary 8192,
16
27
  // changeSummary 4096. The store validates + throws; the boundary maps validation
17
28
  // -> 400, not-found -> 404, not-active -> 409. Mirrors /v1/skills.
18
- export async function handleCreateProjectBrief({ req, res, opts }) {
19
- const ctx = await buildContextWithAuth(req, opts);
20
- const body = await parseJsonBody(req, ctx);
21
- const repo = body['repo'];
22
- if (!isJsonString(repo) || repo.trim().length === 0) {
23
- throw new HttpError(400, 'repo is required (non-empty string)');
24
- }
25
- if (repo.length > MAX_REPO_LEN) {
26
- throw new HttpError(400, `repo exceeds ${MAX_REPO_LEN}-character cap`);
27
- }
28
- const summary = body['summary'];
29
- if (!isJsonString(summary) || summary.trim().length === 0) {
30
- throw new HttpError(400, 'summary is required (non-empty string)');
31
- }
32
- if (summary.length > 8192) {
33
- throw new HttpError(400, 'summary exceeds 8192-character cap');
34
- }
35
- const brief = saveProjectBrief(opts.hippoRoot, ctx.tenantId, {
36
- repo,
37
- summary,
38
- }, ctx.actor.subject);
39
- sendJson(res, 201, { brief });
40
- return;
29
+ export async function handleCreateProjectBrief(rr) {
30
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
31
+ const body = await parseJsonBody(rr.req, ctx);
32
+ const brief = await saveFor(rr, PROJECT_BRIEF, ctx.tenantId, ctx.actor.subject, {
33
+ repo: requiredString(body, 'repo', { max: MAX_REPO_LEN }),
34
+ summary: requiredString(body, 'summary', { max: 8192 }),
35
+ });
36
+ sendJson(rr.res, 201, { brief });
41
37
  }
42
- export async function handleListProjectBriefs({ req, res, opts, query }) {
43
- const status = query.get('status') ?? 'all';
44
- const repoFilter = query.get('repo');
45
- const limit = parseListLimit(query.get('limit'));
46
- const after = parseCursor(query.get('cursor'), 'string', 'integer');
47
- const ctx = await buildContextWithAuth(req, opts);
48
- const listOpts = { limit: limit + 1, after };
49
- if (repoFilter !== null && repoFilter.trim().length > 0) {
50
- listOpts.repo = repoFilter.trim();
51
- }
52
- if (status !== 'all') {
53
- if (!isSetMember(VALID_BRIEF_STATES, status)) {
54
- throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
55
- }
56
- listOpts.status = status;
57
- }
58
- const briefs = loadProjectBriefs(opts.hippoRoot, ctx.tenantId, listOpts);
59
- const page = pageOf(briefs, limit, byCreatedAt);
60
- sendJson(res, 200, { briefs: page.items, next_cursor: page.nextCursor });
61
- return;
38
+ export function handleListProjectBriefs(rr) {
39
+ return listRoute(briefRoutes, rr);
62
40
  }
63
41
  // The refresh op: must precede the /:id routes (literal 'refresh' is non-numeric
64
42
  // so the /(\d+)/ routes would not match it, but order it first).
65
- export async function handleRefreshProjectBrief({ req, res, opts }) {
43
+ export async function handleRefreshProjectBrief(rr) {
44
+ const { req, res, opts } = rr;
66
45
  const ctx = await buildContextWithAuth(req, opts);
67
46
  const body = await parseJsonBody(req, ctx);
68
- const repo = body['repo'];
69
- if (!isJsonString(repo) || repo.trim().length === 0) {
70
- throw new HttpError(400, 'repo is required (non-empty string)');
71
- }
72
- if (repo.length > MAX_REPO_LEN) {
73
- throw new HttpError(400, `repo exceeds ${MAX_REPO_LEN}-character cap`);
74
- }
75
- const dryRun = body['dryRun'] === true;
76
- if (dryRun) {
77
- const { markdown, receiptCount } = assembleBriefFromReceipts(opts.hippoRoot, ctx.tenantId, repo);
47
+ const repo = requiredString(body, 'repo', { max: MAX_REPO_LEN });
48
+ if (body['dryRun'] === true) {
49
+ const { markdown, receiptCount } = await briefFromReceipts(objectsOf(rr), ctx.tenantId, repo);
78
50
  sendJson(res, 200, { markdown, receiptCount });
79
51
  return;
80
52
  }
81
- const brief = refreshBrief(opts.hippoRoot, ctx.tenantId, repo, ctx.actor.subject);
53
+ const brief = await refreshedBrief(objectsOf(rr), { hippoRoot: opts.hippoRoot, tenantId: ctx.tenantId, actor: ctx.actor.subject }, repo);
82
54
  sendJson(res, 200, { brief });
83
- return;
84
55
  }
85
- export async function handleSupersedeProjectBrief({ req, res, opts }, briefSupersedeMatch) {
86
- const id = parseInt(briefSupersedeMatch[1], 10);
87
- const ctx = await buildContextWithAuth(req, opts);
88
- const body = await parseJsonBody(req, ctx);
89
- const summary = body['summary'];
90
- if (!isJsonString(summary) || summary.trim().length === 0) {
91
- throw new HttpError(400, 'summary is required (non-empty string)');
92
- }
93
- if (summary.length > 8192) {
94
- throw new HttpError(400, 'summary exceeds 8192-character cap');
95
- }
96
- const changeRaw = body['changeSummary'];
97
- let changeSummary;
98
- if (changeRaw !== undefined && changeRaw !== null) {
99
- if (!isJsonString(changeRaw)) {
100
- throw new HttpError(400, 'changeSummary must be a string');
101
- }
102
- if (changeRaw.length > 4096) {
103
- throw new HttpError(400, 'changeSummary exceeds 4096-character cap');
104
- }
105
- changeSummary = changeRaw;
106
- }
107
- const existing = loadProjectBriefById(opts.hippoRoot, ctx.tenantId, id);
108
- if (!existing) {
109
- throw new HttpError(404, `project brief ${id} not found`);
110
- }
111
- const brief = saveProjectBrief(opts.hippoRoot, ctx.tenantId, {
112
- repo: existing.repo,
113
- summary,
114
- changeSummary,
115
- supersedesBriefId: id,
116
- }, ctx.actor.subject);
117
- sendJson(res, 200, { brief });
118
- return;
56
+ export function handleSupersedeProjectBrief(rr, match) {
57
+ return supersedeRoute(briefRoutes, rr, match);
119
58
  }
120
- export async function handleCloseProjectBrief({ req, res, opts }, briefCloseMatch) {
121
- const id = parseInt(briefCloseMatch[1], 10);
122
- const ctx = await buildContextWithAuth(req, opts);
123
- const brief = closeProjectBrief(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
124
- sendJson(res, 200, { brief });
125
- return;
59
+ export function handleCloseProjectBrief(rr, match) {
60
+ return closeRoute(briefRoutes, rr, match);
126
61
  }
127
- export async function handleGetProjectBrief({ req, res, opts }, briefByIdMatch) {
128
- const id = parseInt(briefByIdMatch[1], 10);
129
- const ctx = await buildContextWithAuth(req, opts);
130
- const brief = loadProjectBriefById(opts.hippoRoot, ctx.tenantId, id);
131
- if (!brief) {
132
- throw new HttpError(404, `project brief ${id} not found`);
133
- }
134
- sendJson(res, 200, { brief });
135
- return;
62
+ export function handleGetProjectBrief(rr, match) {
63
+ return getRoute(briefRoutes, rr, match);
136
64
  }
137
65
  //# sourceMappingURL=project-briefs.js.map
@@ -1,16 +1,16 @@
1
1
  // Recall routes: /v1/memories search, assemble, drill and /v1/context.
2
2
  import { dirname, resolve } from 'node:path';
3
- import { assertCallerProject, resolveProjectIdentity } from '../../project-identity.js';
4
- import { isSharedStore } from '../../config.js';
5
- import { assembleCost, contextCost, drillCost } from '../../context-render.js';
6
- import { storeFor } from '../../store-port.js';
7
- import { biasHintEnabled } from '../../recall-history.js';
8
- import { assemble, drillDown, getContext, recordTokens, retrieve } from '../../api.js';
3
+ import { assertCallerProject, resolveProjectIdentity } from '../../core/project-identity.js';
4
+ import { isSharedStore } from '../../core/config.js';
5
+ import { assembleCost, contextCost, drillCost } from '../../api/context-render.js';
6
+ import { storeFor } from '../../store/index.js';
7
+ import { biasHintEnabled } from '../../api/recall-history.js';
8
+ import { assemble, drillDown, getContext, recordTokens, retrieve } from '../../api/index.js';
9
9
  import { httpParams, parseContextRequest, parseRecallRequest } from '../../api/recall-request.js';
10
10
  import { anchorSkippedRows, noteRecall, peekSessionRing, resetSessionRings, sessionRing } from '../../api/recall-record.js';
11
- import { HttpError, sendJson } from '../../http-util.js';
11
+ import { HttpError, sendJson } from '../../util/http-util.js';
12
12
  import { buildContextWithAuth } from '../auth.js';
13
- import { validateIdSegment } from '../validation.js';
13
+ import { MAX_LIST_LIMIT, parseListLimit, validateIdSegment } from '../validation.js';
14
14
  /** Test-only: reset the HTTP recall rings. Call from beforeEach. */
15
15
  export function __resetSessionRecallHistoryHttp() {
16
16
  resetSessionRings('http');
@@ -32,8 +32,7 @@ export async function handleRecallMemories({ req, res, opts, query }) {
32
32
  const ring = sessionRing('http', ctx.tenantId, sessionId);
33
33
  if (ring)
34
34
  noteRecall(ring, q, result.results[0]?.id ?? null, result.anchoringHint?.memoryId);
35
- // Each recall surface counts its own hits; api.recall is no chokepoint,
36
- // since the CLI never calls it and MCP shows the user a different band.
35
+ // HTTP counts the rows it returns here; `retrieve` cannot count for every ranker, since MCP shows a different band and counts none.
37
36
  await storeFor(ctx).bumpRecallStats(result.results.length);
38
37
  // Continuity payloads should never be cached. The caller is asking for
39
38
  // session-state-aware data; intermediaries must not reuse it across users.
@@ -78,7 +77,7 @@ export async function handleAssembleSession({ req, res, opts, query }, assembleM
78
77
  assembleExtra.summarizeOlder = summarizeOlder;
79
78
  if (scope !== undefined)
80
79
  assembleExtra.scope = scope;
81
- const result = assemble(ctx, assembleMatch.id, { ...assembleExtra, cost: assembleCost(assembleMatch.id) });
80
+ const result = await assemble(ctx, assembleMatch.id, { ...assembleExtra, cost: assembleCost(assembleMatch.id) });
82
81
  await recordTokens(ctx, 'http_assemble', { items: result.items.length, tokens: result.tokens, sessionId: assembleMatch.id });
83
82
  sendJson(res, 200, result);
84
83
  return;
@@ -96,6 +95,9 @@ export async function handleDrillRecall({ req, res, opts, query }, drillMatch) {
96
95
  if (limit !== undefined && (!Number.isFinite(limit) || limit <= 0)) {
97
96
  throw new HttpError(400, 'limit must be a positive number');
98
97
  }
98
+ // Past the list ceiling the shared parser refuses, so the reply is the one every other list route gives.
99
+ if (limit !== undefined && limit > MAX_LIST_LIMIT)
100
+ parseListLimit(limitRaw);
99
101
  const budgetRaw = query.get('budget');
100
102
  const budget = budgetRaw === null ? undefined : Number(budgetRaw);
101
103
  if (budget !== undefined && (!Number.isFinite(budget) || budget <= 0)) {
@@ -120,7 +122,7 @@ export async function handleDrillRecall({ req, res, opts, query }, drillMatch) {
120
122
  drillExtra.budget = budget;
121
123
  if (depth !== undefined)
122
124
  drillExtra.depth = depth;
123
- const result = drillDown(ctx, drillMatch.id, { ...drillExtra, cost: drillCost });
125
+ const result = await drillDown(ctx, drillMatch.id, { ...drillExtra, cost: drillCost });
124
126
  if ('failure' in result) {
125
127
  // Leaf id maps to 422 (caller-actionable). Other cases stay
126
128
  // as 404 to avoid leaking cross-tenant existence or scope grants.
@@ -1,8 +1,8 @@
1
1
  import type { RouteRequest } from '../types.js';
2
- export declare function handleCreateSkill({ req, res, opts }: RouteRequest): Promise<void>;
3
- export declare function handleListSkills({ req, res, opts, query }: RouteRequest): Promise<void>;
4
- export declare function handleExportSkills({ req, res, opts }: RouteRequest): Promise<void>;
5
- export declare function handleSupersedeSkill({ req, res, opts }: RouteRequest, skillSupersedeMatch: RegExpMatchArray): Promise<void>;
6
- export declare function handleCloseSkill({ req, res, opts }: RouteRequest, skillCloseMatch: RegExpMatchArray): Promise<void>;
7
- export declare function handleGetSkill({ req, res, opts }: RouteRequest, skillByIdMatch: RegExpMatchArray): Promise<void>;
2
+ export declare function handleCreateSkill(rr: RouteRequest): Promise<void>;
3
+ export declare function handleListSkills(rr: RouteRequest): Promise<void>;
4
+ export declare function handleExportSkills(rr: RouteRequest): Promise<void>;
5
+ export declare function handleSupersedeSkill(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
6
+ export declare function handleCloseSkill(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
7
+ export declare function handleGetSkill(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
8
8
  //# sourceMappingURL=skills.d.ts.map
@@ -1,10 +1,22 @@
1
1
  // /v1/skills routes.
2
- import { closeSkill, exportSkills, loadSkillById, loadSkills, MAX_SKILL_NAME_LEN, saveSkill, VALID_SKILL_STATES } from '../../skills.js';
3
- import { HttpError, sendJson } from '../../http-util.js';
2
+ import { MAX_SKILL_NAME_LEN, SKILL, skillsMarkdown } from '../../objects/skills.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, objectsOf, optionalString, requiredString, saveFor, supersedeRoute } from './object-routes.js';
7
+ const INSTRUCTIONS = { max: 8192, plural: true };
8
+ const skillRoutes = {
9
+ noun: 'skill',
10
+ field: 'skill',
11
+ listField: 'skills',
12
+ object: SKILL,
13
+ revise: (body) => {
14
+ const instructions = requiredString(body, 'instructions', INSTRUCTIONS);
15
+ const trigger = optionalString(body, 'trigger', 1024);
16
+ const changeSummary = optionalString(body, 'changeSummary', 4096);
17
+ return (existing, id) => ({ skillName: existing.skillName, instructions, trigger, changeSummary, supersedesSkillId: id });
18
+ },
19
+ };
8
20
  // ── skills (first-class object, executable/exportable) ──
9
21
  //
10
22
  // 6 routes: POST /v1/skills (new; body skillName + instructions + trigger?),
@@ -17,135 +29,35 @@ import { isJsonString } from '../../json.js';
17
29
  // validates + throws; the boundary maps validation -> 400, not-found -> 404,
18
30
  // not-active -> 409. Mirrors /v1/processes; "executable" = exportable
19
31
  // instruction (no code exec).
20
- export async function handleCreateSkill({ req, res, opts }) {
21
- const ctx = await buildContextWithAuth(req, opts);
22
- const body = await parseJsonBody(req, ctx);
23
- const skillName = body['skillName'];
24
- if (!isJsonString(skillName) || skillName.trim().length === 0) {
25
- throw new HttpError(400, 'skillName is required (non-empty string)');
26
- }
27
- if (skillName.length > MAX_SKILL_NAME_LEN) {
28
- throw new HttpError(400, `skillName exceeds ${MAX_SKILL_NAME_LEN}-character cap`);
29
- }
30
- const instructions = body['instructions'];
31
- if (!isJsonString(instructions) || instructions.trim().length === 0) {
32
- throw new HttpError(400, 'instructions are required (non-empty string)');
33
- }
34
- if (instructions.length > 8192) {
35
- throw new HttpError(400, 'instructions exceed 8192-character cap');
36
- }
37
- const triggerRaw = body['trigger'];
38
- let trigger;
39
- if (triggerRaw !== undefined && triggerRaw !== null) {
40
- if (!isJsonString(triggerRaw)) {
41
- throw new HttpError(400, 'trigger must be a string');
42
- }
43
- if (triggerRaw.length > 1024) {
44
- throw new HttpError(400, 'trigger exceeds 1024-character cap');
45
- }
46
- trigger = triggerRaw;
47
- }
48
- const skill = saveSkill(opts.hippoRoot, ctx.tenantId, {
49
- skillName,
50
- instructions,
51
- trigger,
52
- }, ctx.actor.subject);
53
- sendJson(res, 201, { skill });
54
- return;
32
+ export async function handleCreateSkill(rr) {
33
+ const ctx = await buildContextWithAuth(rr.req, rr.opts);
34
+ const body = await parseJsonBody(rr.req, ctx);
35
+ const skill = await saveFor(rr, SKILL, ctx.tenantId, ctx.actor.subject, {
36
+ skillName: requiredString(body, 'skillName', { max: MAX_SKILL_NAME_LEN }),
37
+ instructions: requiredString(body, 'instructions', INSTRUCTIONS),
38
+ trigger: optionalString(body, 'trigger', 1024),
39
+ });
40
+ sendJson(rr.res, 201, { skill });
55
41
  }
56
- export async function handleListSkills({ req, res, opts, query }) {
57
- const status = query.get('status') ?? 'all';
58
- const limit = parseListLimit(query.get('limit'));
59
- const after = parseCursor(query.get('cursor'), 'string', 'integer');
60
- const ctx = await buildContextWithAuth(req, opts);
61
- let skills;
62
- if (status === 'all') {
63
- skills = loadSkills(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
64
- }
65
- else {
66
- if (!isSetMember(VALID_SKILL_STATES, status)) {
67
- throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
68
- }
69
- skills = loadSkills(opts.hippoRoot, ctx.tenantId, {
70
- status,
71
- limit: limit + 1,
72
- after,
73
- });
74
- }
75
- const page = pageOf(skills, limit, byCreatedAt);
76
- sendJson(res, 200, { skills: page.items, next_cursor: page.nextCursor });
77
- return;
42
+ export function handleListSkills(rr) {
43
+ return listRoute(skillRoutes, rr);
78
44
  }
79
45
  // The export renderer: must precede the /:id GET (literal 'export' is
80
46
  // non-numeric so the /(\d+)/ route would not match it, but order it first).
81
- export async function handleExportSkills({ req, res, opts }) {
47
+ export async function handleExportSkills(rr) {
48
+ const { req, res, opts } = rr;
82
49
  const ctx = await buildContextWithAuth(req, opts);
83
- const markdown = exportSkills(opts.hippoRoot, ctx.tenantId);
50
+ const markdown = await skillsMarkdown(objectsOf(rr), ctx.tenantId);
84
51
  sendJson(res, 200, { markdown });
85
52
  return;
86
53
  }
87
- export async function handleSupersedeSkill({ req, res, opts }, skillSupersedeMatch) {
88
- const id = parseInt(skillSupersedeMatch[1], 10);
89
- const ctx = await buildContextWithAuth(req, opts);
90
- const body = await parseJsonBody(req, ctx);
91
- const instructions = body['instructions'];
92
- if (!isJsonString(instructions) || instructions.trim().length === 0) {
93
- throw new HttpError(400, 'instructions are required (non-empty string)');
94
- }
95
- if (instructions.length > 8192) {
96
- throw new HttpError(400, 'instructions exceed 8192-character cap');
97
- }
98
- const triggerRaw = body['trigger'];
99
- let trigger;
100
- if (triggerRaw !== undefined && triggerRaw !== null) {
101
- if (!isJsonString(triggerRaw)) {
102
- throw new HttpError(400, 'trigger must be a string');
103
- }
104
- if (triggerRaw.length > 1024) {
105
- throw new HttpError(400, 'trigger exceeds 1024-character cap');
106
- }
107
- trigger = triggerRaw;
108
- }
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 = loadSkillById(opts.hippoRoot, ctx.tenantId, id);
121
- if (!existing) {
122
- throw new HttpError(404, `skill ${id} not found`);
123
- }
124
- const skill = saveSkill(opts.hippoRoot, ctx.tenantId, {
125
- skillName: existing.skillName,
126
- instructions,
127
- trigger,
128
- changeSummary,
129
- supersedesSkillId: id,
130
- }, ctx.actor.subject);
131
- sendJson(res, 200, { skill });
132
- return;
54
+ export function handleSupersedeSkill(rr, match) {
55
+ return supersedeRoute(skillRoutes, rr, match);
133
56
  }
134
- export async function handleCloseSkill({ req, res, opts }, skillCloseMatch) {
135
- const id = parseInt(skillCloseMatch[1], 10);
136
- const ctx = await buildContextWithAuth(req, opts);
137
- const skill = closeSkill(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
138
- sendJson(res, 200, { skill });
139
- return;
57
+ export function handleCloseSkill(rr, match) {
58
+ return closeRoute(skillRoutes, rr, match);
140
59
  }
141
- export async function handleGetSkill({ req, res, opts }, skillByIdMatch) {
142
- const id = parseInt(skillByIdMatch[1], 10);
143
- const ctx = await buildContextWithAuth(req, opts);
144
- const skill = loadSkillById(opts.hippoRoot, ctx.tenantId, id);
145
- if (!skill) {
146
- throw new HttpError(404, `skill ${id} not found`);
147
- }
148
- sendJson(res, 200, { skill });
149
- return;
60
+ export function handleGetSkill(rr, match) {
61
+ return getRoute(skillRoutes, rr, match);
150
62
  }
151
63
  //# sourceMappingURL=skills.js.map