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,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
@@ -1,6 +1,6 @@
1
1
  import { existsSync, readFileSync, writeFileSync, unlinkSync, renameSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- import { envHealthProbeMs } from './env.js';
3
+ import { envHealthProbeMs } from '../util/env.js';
4
4
  // Pidfile sits directly inside hippoRoot. `hippoRoot` is the `.hippo`
5
5
  // directory itself (the same convention used by api.ts / store.ts /
6
6
  // openHippoDb), so this resolves to `${hippoRoot}/server.pid`.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sleep-child.d.ts.map
@@ -0,0 +1,19 @@
1
+ // Entry of the process that runs one POST /v1/sleep; sleep-offload.ts starts it and nothing imports it.
2
+ // The sleep module alone: the api barrel loads far more than one sleep needs, and every sleep pays for the start.
3
+ import { sleep } from '../api/sleep.js';
4
+ import { isStoreBusy, runWithRequestStores, SERVER_DB_WAIT_MS } from '../db/index.js';
5
+ import { errorMessage } from '../util/log.js';
6
+ function failed(err) {
7
+ return { ok: false, busy: isStoreBusy(err), message: errorMessage(err), stack: err instanceof Error ? err.stack : undefined };
8
+ }
9
+ process.once('message', (message) => {
10
+ // SAFETY: sleep-offload.ts is the only writer on this channel and sends exactly one SleepJob.
11
+ const job = message;
12
+ const ctx = { hippoRoot: job.hippoRoot, tenantId: job.tenantId, actor: job.actor };
13
+ // The server's own request scope and lock wait, so a busy store answers as it did when sleep ran in the server.
14
+ runWithRequestStores(() => sleep(ctx, job.opts), { busyWaitMs: SERVER_DB_WAIT_MS })
15
+ .then((result) => ({ ok: true, result }), failed)
16
+ // Exit only once the reply is written, or the parent could see the process end first.
17
+ .then((reply) => process.send?.(reply, () => process.exit(0)));
18
+ });
19
+ //# sourceMappingURL=sleep-child.js.map
@@ -0,0 +1,20 @@
1
+ import { type Actor, type Context, type SleepOpts, type SleepResult } from '../api/index.js';
2
+ /** What the child needs to rebuild the request's context; the store handle itself cannot cross a process boundary. */
3
+ export interface SleepJob {
4
+ readonly hippoRoot: string;
5
+ readonly tenantId: string;
6
+ readonly actor: Actor;
7
+ readonly opts: SleepOpts;
8
+ }
9
+ export type SleepReply = {
10
+ readonly ok: true;
11
+ readonly result: SleepResult;
12
+ } | {
13
+ readonly ok: false;
14
+ readonly busy: boolean;
15
+ readonly message: string;
16
+ readonly stack?: string;
17
+ };
18
+ /** `sleep` for the HTTP route: same result and errors, run outside the serving process and stopped at the deadline (10 minutes, or HIPPO_SLEEP_TIMEOUT_MS). */
19
+ export declare function sleepInChild(ctx: Context, opts: SleepOpts): Promise<SleepResult>;
20
+ //# sourceMappingURL=sleep-offload.d.ts.map
@@ -0,0 +1,70 @@
1
+ // POST /v1/sleep runs its consolidation in a child process, so the server keeps answering and a stuck run can be stopped.
2
+ import { spawn } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { sleep } from '../api/index.js';
5
+ import { StoreBusyError } from '../db/index.js';
6
+ import { envSleepTimeoutMs } from '../util/env.js';
7
+ import { HttpError } from '../util/http-util.js';
8
+ const DEFAULT_SLEEP_DEADLINE_MS = 600_000;
9
+ // Resolved from the package root, so a server run from TypeScript source starts the same built file.
10
+ const CHILD_ENTRY = fileURLToPath(new URL('../../dist/server/sleep-child.js', import.meta.url));
11
+ function failureOf(reply, code, signal) {
12
+ if (!reply || reply.ok)
13
+ return new Error(`sleep process ended without an answer (code ${code}, signal ${signal})`);
14
+ // A lock the child could not get is the same retryable 503 an in-process sleep gave.
15
+ if (reply.busy)
16
+ return new StoreBusyError(reply.message);
17
+ const failure = new Error(reply.message);
18
+ if (reply.stack)
19
+ failure.stack = reply.stack;
20
+ return failure;
21
+ }
22
+ function runInChild(job) {
23
+ const deadlineMs = envSleepTimeoutMs() ?? DEFAULT_SLEEP_DEADLINE_MS;
24
+ return new Promise((resolve, reject) => {
25
+ // The child's stderr is the server's log, so Node's SQLite notice would repeat there on every sleep.
26
+ const child = spawn(process.execPath, ['--disable-warning=ExperimentalWarning', CHILD_ENTRY], { stdio: ['ignore', 'inherit', 'inherit', 'ipc'], windowsHide: true });
27
+ let reply;
28
+ let timedOut = false;
29
+ // SIGKILL because the child is inside synchronous SQLite work and cannot run a handler; the OS drops its write lock.
30
+ const timer = setTimeout(() => { timedOut = true; child.kill('SIGKILL'); }, deadlineMs);
31
+ child.once('message', (message) => {
32
+ // SAFETY: sleep-child.ts is the only writer on this channel and sends exactly one SleepReply.
33
+ reply = message;
34
+ });
35
+ child.once('error', (err) => { clearTimeout(timer); reject(err); });
36
+ // 'close' and not 'exit': it waits for the channel to drain, so the reply is in hand and the child's store handles are gone.
37
+ child.once('close', (code, signal) => {
38
+ clearTimeout(timer);
39
+ if (timedOut)
40
+ reject(new HttpError(504, `sleep did not finish within ${deadlineMs} ms and was stopped; the next sleep carries on from there`));
41
+ else if (reply?.ok)
42
+ resolve(reply.result);
43
+ else
44
+ reject(failureOf(reply, code, signal));
45
+ });
46
+ child.send(job);
47
+ });
48
+ }
49
+ let turn = Promise.resolve();
50
+ // One running and one waiting: each further sleep would only hold a request open behind work the waiting one already covers.
51
+ const MAX_SLEEPS_IN_LINE = 2;
52
+ const SLEEP_RETRY_AFTER_SEC = 30;
53
+ let inLine = 0;
54
+ /** `sleep` for the HTTP route: same result and errors, run outside the serving process and stopped at the deadline (10 minutes, or HIPPO_SLEEP_TIMEOUT_MS). */
55
+ export function sleepInChild(ctx, opts) {
56
+ // The child reopens the store by path, which only SQLite has; any other store keeps sleep's own refusal.
57
+ if (ctx.store && ctx.store.kind !== 'sqlite')
58
+ return sleep(ctx, opts);
59
+ if (inLine >= MAX_SLEEPS_IN_LINE) {
60
+ return Promise.reject(new HttpError(503, 'a sleep is already running and another is waiting; retry when one has finished', SLEEP_RETRY_AFTER_SEC));
61
+ }
62
+ inLine += 1;
63
+ const job = { hippoRoot: ctx.hippoRoot, tenantId: ctx.tenantId, actor: ctx.actor, opts };
64
+ // One sleep at a time, as on the server's single thread: a second request waits its turn and does not fight the first for the write lock.
65
+ const run = turn.then(() => runInChild(job));
66
+ // A failed sleep reaches its own request through `run`; the queue only needs to know the turn is over.
67
+ turn = run.then(() => undefined, () => undefined).finally(() => { inLine -= 1; });
68
+ return run;
69
+ }
70
+ //# sourceMappingURL=sleep-offload.js.map
@@ -0,0 +1,6 @@
1
+ import { type RequestListener, type Server } from 'node:http';
2
+ import type { ServeOpts } from './types.js';
3
+ export declare function createListener(tls: ServeOpts['tls'], onRequest: RequestListener): Server;
4
+ /** Said once at boot: a non-loopback bind without TLS sends every key and memory over the network as plain text. */
5
+ export declare function warnIfCleartext(host: string, tls: ServeOpts['tls'], loopbackHosts: ReadonlySet<string>): void;
6
+ //# sourceMappingURL=tls.d.ts.map
@@ -0,0 +1,24 @@
1
+ // The serve() listener: node:https when a certificate is given, else node:http and a boot warning off loopback.
2
+ import { createServer as createHttpServer } from 'node:http';
3
+ import { createServer as createHttpsServer } from 'node:https';
4
+ import { errorMessage, log } from '../util/log.js';
5
+ export function createListener(tls, onRequest) {
6
+ if (!tls)
7
+ return createHttpServer(onRequest);
8
+ try {
9
+ // Explicit so the floor does not move with the runtime's default.
10
+ return createHttpsServer({ cert: tls.cert, key: tls.key, minVersion: 'TLSv1.2' }, onRequest);
11
+ }
12
+ catch (err) {
13
+ // OpenSSL's own text names no file, so the operator would not know which input was refused.
14
+ throw new Error(`hippo serve: the TLS certificate or key was refused: ${errorMessage(err)}`, { cause: err });
15
+ }
16
+ }
17
+ /** Said once at boot: a non-loopback bind without TLS sends every key and memory over the network as plain text. */
18
+ export function warnIfCleartext(host, tls, loopbackHosts) {
19
+ if (tls || loopbackHosts.has(host))
20
+ return;
21
+ log.warn(`serve: listening on ${host} without TLS, so API keys and memory text travel in cleartext unless a TLS-terminating proxy sits in front. ` +
22
+ 'To serve HTTPS directly, pass --tls-cert and --tls-key (or set HIPPO_TLS_CERT and HIPPO_TLS_KEY).');
23
+ }
24
+ //# sourceMappingURL=tls.js.map