hippo-memory 1.69.0 → 1.71.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 (1014) 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 +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  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/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -0,0 +1,102 @@
1
+ /** Policy object: a rule in force over a valid-time range [valid_from, valid_to), evolving via supersession; `loadPoliciesAsOf` queries it.
2
+ * Transaction-time travel (what we believed at past system time T) is deferred. Superseding keeps the predecessor's valid-time range.
3
+ * All dates are normalised to ISO-8601 (`toISOString`) at the store boundary so the lexical half-open comparison is sound. */
4
+ import { BadRequestError } from '../core/api-errors.js';
5
+ import { assertTenantId } from '../store/tenant.js';
6
+ import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
7
+ import { sqliteObjects } from '../store/sqlite/objects-group.js';
8
+ export const VALID_POLICY_STATES = new Set([
9
+ 'active',
10
+ 'superseded',
11
+ 'closed',
12
+ ]);
13
+ /** Parse a date input to a fixed-width ISO-8601 datetime so lexical ordering is sound; throws on an unparseable value.
14
+ * Overflow inputs like '2026-02-30' roll forward per JS Date semantics. */
15
+ export function normalizePolicyDate(input, label = 'date') {
16
+ const d = new Date(input);
17
+ if (Number.isNaN(d.getTime())) {
18
+ throw new BadRequestError(`policy: invalid ${label} "${input}" (expected an ISO-8601 date or datetime)`);
19
+ }
20
+ return d.toISOString();
21
+ }
22
+ /** Normalise valid_from (default `nowIso`) and valid_to (default null), then enforce valid_to > valid_from. */
23
+ export function validatePolicyDates(validFromRaw, validToRaw, nowIso) {
24
+ const validFrom = validFromRaw !== undefined ? normalizePolicyDate(validFromRaw, 'valid_from') : nowIso;
25
+ const validTo = validToRaw !== undefined && validToRaw !== null
26
+ ? normalizePolicyDate(validToRaw, 'valid_to')
27
+ : null;
28
+ if (validTo !== null && validTo <= validFrom) {
29
+ throw new BadRequestError(`policy: valid_to (${validTo}) must be strictly after valid_from (${validFrom})`);
30
+ }
31
+ return { validFrom, validTo };
32
+ }
33
+ /** Recall-surface content for the memory mirror: name + rule + effective range. */
34
+ function buildPolicyContent(policyName, policyText, validFrom, validTo) {
35
+ const range = validTo ? `${validFrom} to ${validTo}` : `${validFrom} onward`;
36
+ return `${policyName}\n\n${policyText}\n\nEffective: ${range}`;
37
+ }
38
+ export const POLICY = {
39
+ kind: 'policy',
40
+ label: 'policy',
41
+ plural: 'policies',
42
+ fn: { get: 'loadPolicyById', close: 'closePolicy', list: 'loadPolicies', save: 'savePolicy' },
43
+ states: VALID_POLICY_STATES,
44
+ closableFrom: ['active'],
45
+ draft(opts) {
46
+ if (!opts.policyName || opts.policyName.trim().length === 0) {
47
+ throw new BadRequestError('savePolicy: policyName is required');
48
+ }
49
+ if (!opts.policyText || opts.policyText.trim().length === 0) {
50
+ throw new BadRequestError('savePolicy: policyText is required');
51
+ }
52
+ const at = new Date().toISOString();
53
+ // valid_from defaults to the creation instant. A date-only as-of is widened to end-of-day on the read side,
54
+ // because backdating valid_from to midnight would report the policy in force earlier that day.
55
+ const { validFrom, validTo } = validatePolicyDates(opts.validFrom, opts.validTo, at);
56
+ return {
57
+ fields: { policyName: opts.policyName, policyText: opts.policyText, validFrom, validTo },
58
+ content: buildPolicyContent(opts.policyName, opts.policyText, validFrom, validTo),
59
+ tags: opts.extraTags ?? [],
60
+ supersedesId: opts.supersedesPolicyId,
61
+ changeSummary: opts.changeSummary,
62
+ at,
63
+ };
64
+ },
65
+ };
66
+ /** Create a policy, or a new version superseding an existing one, in the `objects` store group's one transaction.
67
+ * valid_from defaults to now; valid_to must be > valid_from (validatePolicyDates). */
68
+ export function savePolicy(hippoRoot, tenantId, opts, actor = 'cli') {
69
+ return saveObjectAt(POLICY, { hippoRoot, tenantId, actor }, opts);
70
+ }
71
+ /** Close (retire) an active policy with no successor; CAS on status='active', a superseded row is terminal. */
72
+ export function closePolicy(hippoRoot, tenantId, id, actor = 'cli') {
73
+ return closeObjectAt(hippoRoot, POLICY, tenantId, id, actor);
74
+ }
75
+ export function loadPolicyById(hippoRoot, tenantId, id) {
76
+ return objectByIdAt(hippoRoot, POLICY, tenantId, id);
77
+ }
78
+ export function loadPolicies(hippoRoot, tenantId, opts = {}) {
79
+ return listObjectsAt(hippoRoot, POLICY, tenantId, opts);
80
+ }
81
+ export function loadActivePolicies(hippoRoot, tenantId, opts = {}) {
82
+ return loadPolicies(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
83
+ }
84
+ /** The policies in force at `asOfDate` (valid-time, half-open [valid_from, valid_to)); superseded rows still answer while the successor is not yet effective.
85
+ * `closed` rows are excluded; a date-only asOfDate means the END of that UTC day (23:59:59.999Z), so a policy created today shows up in "as of today". */
86
+ export function loadPoliciesAsOf(hippoRoot, tenantId, asOfDate, opts = {}) {
87
+ return sqliteObjects(hippoRoot).policiesInForce(tenantId, inForceQuery(tenantId, asOfDate, opts));
88
+ }
89
+ /** `loadPoliciesAsOf` over a served store's group. */
90
+ export async function policiesAsOf(objects, tenantId, asOfDate, opts = {}) {
91
+ return objects.policiesInForce(tenantId, inForceQuery(tenantId, asOfDate, opts));
92
+ }
93
+ /** The as-of read, checked before a store is asked. */
94
+ function inForceQuery(tenantId, asOfDate, opts) {
95
+ assertTenantId('loadPoliciesAsOf', tenantId);
96
+ // A bare date means the whole of that day, so it reads as the day's last instant; a datetime is used as given.
97
+ const asOf = /^\d{4}-\d{2}-\d{2}$/.test(asOfDate.trim())
98
+ ? normalizePolicyDate(`${asOfDate.trim()}T23:59:59.999Z`, 'asOfDate')
99
+ : normalizePolicyDate(asOfDate, 'asOfDate');
100
+ return { asOf, name: opts.name, limit: opts.limit ?? 100 };
101
+ }
102
+ //# sourceMappingURL=policies.js.map
@@ -0,0 +1,43 @@
1
+ /** Process object: a named, ordered list of `steps` that evolves by supersession, each version recording `change_summary` and a server-derived `version`.
2
+ * The `processes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall.
3
+ * Structural step-diffing is a deferred read-side feature; the version chain is the changelog. */
4
+ import type { KeysetPosition } from '../util/keyset.js';
5
+ import { type JsonValue } from '../util/json.js';
6
+ import type { SavableDescriptor } from './descriptor.js';
7
+ import type { Process, ProcessStatus } from '../store/object-types.js';
8
+ export type { Process, ProcessStatus } from '../store/object-types.js';
9
+ export declare const VALID_PROCESS_STATES: ReadonlySet<ProcessStatus>;
10
+ /** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
11
+ export declare const MAX_PROCESS_STEPS = 200;
12
+ export declare const MAX_PROCESS_STEP_LEN = 2000;
13
+ export interface SaveProcessOpts {
14
+ processName: string;
15
+ steps: string[];
16
+ description?: string;
17
+ /** The delta note for a supersession; ignored (stored NULL) on a fresh create. */
18
+ changeSummary?: string;
19
+ /** Table id of an ACTIVE process this new version supersedes. */
20
+ supersedesProcessId?: number;
21
+ /** Extra memory tags merged after ['process']. */
22
+ extraTags?: string[];
23
+ }
24
+ export interface ListProcessesOpts {
25
+ status?: ProcessStatus;
26
+ limit?: number;
27
+ /** Resume after this row: the position the previous page ended on. */
28
+ after?: KeysetPosition;
29
+ }
30
+ /** Validate and trim the steps body; throws on a non-array, a non-string or empty element, or a cap breach. */
31
+ export declare function validateProcessSteps(steps: JsonValue): string[];
32
+ export declare const PROCESS: SavableDescriptor<'process', SaveProcessOpts>;
33
+ /** Create a process, or a new version superseding an existing one, in the `objects` store group's one transaction.
34
+ * The supersede CAS (WHERE status='active' AND id != <new id>) throws on changes===0 so a duplicate supersede aborts the write. */
35
+ export declare function saveProcess(hippoRoot: string, tenantId: string, opts: SaveProcessOpts, actor?: string): Process;
36
+ /** Close (retire) an active process with no successor; a superseded row cannot be closed. */
37
+ export declare function closeProcess(hippoRoot: string, tenantId: string, id: number, actor?: string): Process;
38
+ export declare function loadProcessById(hippoRoot: string, tenantId: string, id: number): Process | null;
39
+ export declare function loadProcesses(hippoRoot: string, tenantId: string, opts?: ListProcessesOpts): Process[];
40
+ export declare function loadActiveProcesses(hippoRoot: string, tenantId: string, opts?: {
41
+ limit?: number;
42
+ }): Process[];
43
+ //# sourceMappingURL=processes.d.ts.map
@@ -0,0 +1,92 @@
1
+ /** Process object: a named, ordered list of `steps` that evolves by supersession, each version recording `change_summary` and a server-derived `version`.
2
+ * The `processes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall.
3
+ * Structural step-diffing is a deferred read-side feature; the version chain is the changelog. */
4
+ import { BadRequestError } from '../core/api-errors.js';
5
+ import { isJsonString } from '../util/json.js';
6
+ import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
7
+ export const VALID_PROCESS_STATES = new Set([
8
+ 'active',
9
+ 'superseded',
10
+ 'closed',
11
+ ]);
12
+ /** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
13
+ export const MAX_PROCESS_STEPS = 200;
14
+ export const MAX_PROCESS_STEP_LEN = 2000;
15
+ /** Validate and trim the steps body; throws on a non-array, a non-string or empty element, or a cap breach. */
16
+ export function validateProcessSteps(steps) {
17
+ if (!Array.isArray(steps)) {
18
+ throw new BadRequestError('saveProcess: steps must be an array of strings');
19
+ }
20
+ if (steps.length > MAX_PROCESS_STEPS) {
21
+ throw new BadRequestError(`saveProcess: steps exceeds the ${MAX_PROCESS_STEPS}-step cap (got ${steps.length})`);
22
+ }
23
+ const out = [];
24
+ for (let i = 0; i < steps.length; i++) {
25
+ const raw = steps[i];
26
+ if (!isJsonString(raw)) {
27
+ throw new BadRequestError(`saveProcess: step ${i + 1} is not a string`);
28
+ }
29
+ const trimmed = raw.trim();
30
+ if (trimmed.length === 0) {
31
+ throw new BadRequestError(`saveProcess: step ${i + 1} is empty`);
32
+ }
33
+ if (trimmed.length > MAX_PROCESS_STEP_LEN) {
34
+ throw new BadRequestError(`saveProcess: step ${i + 1} exceeds the ${MAX_PROCESS_STEP_LEN}-char cap`);
35
+ }
36
+ out.push(trimmed);
37
+ }
38
+ return out;
39
+ }
40
+ /** The recall-surface content for the memory mirror: name + numbered steps +
41
+ * optional description, so `hippo recall` shows the process body. */
42
+ function buildProcessContent(processName, steps, description) {
43
+ const numbered = steps.map((s, i) => `${i + 1}. ${s}`).join('\n');
44
+ let content = processName;
45
+ if (numbered)
46
+ content += `\n\n${numbered}`;
47
+ if (description)
48
+ content += `\n\nDescription: ${description}`;
49
+ return content;
50
+ }
51
+ export const PROCESS = {
52
+ kind: 'process',
53
+ label: 'process',
54
+ plural: 'processes',
55
+ fn: { get: 'loadProcessById', close: 'closeProcess', list: 'loadProcesses', save: 'saveProcess' },
56
+ states: VALID_PROCESS_STATES,
57
+ closableFrom: ['active'],
58
+ draft(opts) {
59
+ // The name is stored as written, so only a blank one is refused.
60
+ if (!opts.processName || opts.processName.trim().length === 0) {
61
+ throw new BadRequestError('saveProcess: processName is required');
62
+ }
63
+ const steps = validateProcessSteps(opts.steps);
64
+ return {
65
+ fields: { processName: opts.processName, description: opts.description, steps },
66
+ content: buildProcessContent(opts.processName, steps, opts.description),
67
+ tags: opts.extraTags ?? [],
68
+ supersedesId: opts.supersedesProcessId,
69
+ changeSummary: opts.changeSummary,
70
+ at: new Date().toISOString(),
71
+ };
72
+ },
73
+ };
74
+ /** Create a process, or a new version superseding an existing one, in the `objects` store group's one transaction.
75
+ * The supersede CAS (WHERE status='active' AND id != <new id>) throws on changes===0 so a duplicate supersede aborts the write. */
76
+ export function saveProcess(hippoRoot, tenantId, opts, actor = 'cli') {
77
+ return saveObjectAt(PROCESS, { hippoRoot, tenantId, actor }, opts);
78
+ }
79
+ /** Close (retire) an active process with no successor; a superseded row cannot be closed. */
80
+ export function closeProcess(hippoRoot, tenantId, id, actor = 'cli') {
81
+ return closeObjectAt(hippoRoot, PROCESS, tenantId, id, actor);
82
+ }
83
+ export function loadProcessById(hippoRoot, tenantId, id) {
84
+ return objectByIdAt(hippoRoot, PROCESS, tenantId, id);
85
+ }
86
+ export function loadProcesses(hippoRoot, tenantId, opts = {}) {
87
+ return listObjectsAt(hippoRoot, PROCESS, tenantId, opts);
88
+ }
89
+ export function loadActiveProcesses(hippoRoot, tenantId, opts = {}) {
90
+ return loadProcesses(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
91
+ }
92
+ //# sourceMappingURL=processes.js.map
@@ -0,0 +1,63 @@
1
+ /** Project_brief object: the living, repo-scoped `summary` of a repository, evolving via supersession.
2
+ * `refreshBrief` assembles recent `path:<repo>` receipts with a deterministic (no-LLM) assembler; an LLM pipeline is deferred.
3
+ * The `project_briefs` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
4
+ import type { KeysetPosition } from '../util/keyset.js';
5
+ import type { SavableDescriptor } from './descriptor.js';
6
+ import { type ObjectSaveSite } from './lifecycle.js';
7
+ import type { BriefStatus, ProjectBrief } from '../store/object-types.js';
8
+ import type { Objects } from '../store/port.js';
9
+ export type { BriefStatus, ProjectBrief } from '../store/object-types.js';
10
+ export declare const VALID_BRIEF_STATES: ReadonlySet<BriefStatus>;
11
+ /** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
12
+ * cap than the 4096 short-field convention. */
13
+ export declare const MAX_REPO_LEN = 256;
14
+ export declare const MAX_BRIEF_SUMMARY_LEN = 8192;
15
+ export declare const MAX_CHANGE_SUMMARY_LEN = 4096;
16
+ /** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
17
+ * + the rendered body). Realistic repos have far fewer recent receipts than this. */
18
+ export declare const MAX_BRIEF_RECEIPTS = 50;
19
+ /** Truncate each receipt's headline in the assembled digest. */
20
+ export declare const MAX_RECEIPT_HEADLINE_LEN = 200;
21
+ export interface SaveProjectBriefOpts {
22
+ repo: string;
23
+ summary: string;
24
+ /** The delta note for a supersession; ignored (stored NULL) on a fresh create. */
25
+ changeSummary?: string;
26
+ /** Table id of an ACTIVE brief this new version supersedes. */
27
+ supersedesBriefId?: number;
28
+ /** Extra memory tags merged after ['project_brief']. */
29
+ extraTags?: string[];
30
+ /** Internal: set by refreshBrief to the receipt count so audit metadata marks the write as an auto-refresh
31
+ * without a 4th audit op. Not part of the CLI/HTTP surface. */
32
+ refreshReceiptCount?: number;
33
+ }
34
+ export interface ListProjectBriefsOpts {
35
+ status?: BriefStatus;
36
+ /** Filter to a single repo. */
37
+ repo?: string;
38
+ limit?: number;
39
+ /** Resume after this row: the position the previous page ended on. */
40
+ after?: KeysetPosition;
41
+ }
42
+ export declare const PROJECT_BRIEF: SavableDescriptor<'project_brief', SaveProjectBriefOpts>;
43
+ /** Create a project_brief, or a new version superseding an existing one, in the `objects` store group's one transaction. */
44
+ export declare function saveProjectBrief(hippoRoot: string, tenantId: string, opts: SaveProjectBriefOpts, actor?: string): ProjectBrief;
45
+ /** Close (retire) an active brief; a superseded row is terminal. */
46
+ export declare function closeProjectBrief(hippoRoot: string, tenantId: string, id: number, actor?: string): ProjectBrief;
47
+ export declare function loadProjectBriefById(hippoRoot: string, tenantId: string, id: number): ProjectBrief | null;
48
+ export declare function loadProjectBriefs(hippoRoot: string, tenantId: string, opts?: ListProjectBriefsOpts): ProjectBrief[];
49
+ /** Assemble the repo's recent receipts into a deterministic markdown digest and return it with the receipt count; never empty (summary is NOT NULL).
50
+ * The brief's own mirror (source='project_brief') is excluded; the quotes in the JSON-array LIKE are load-bearing (`hip` must not match `path:hippo`). */
51
+ export declare function assembleBriefFromReceipts(hippoRoot: string, tenantId: string, repo: string): BriefDigest;
52
+ /** `assembleBriefFromReceipts` over a served store's group. */
53
+ export declare function briefFromReceipts(objects: Objects, tenantId: string, repo: string): Promise<BriefDigest>;
54
+ export interface BriefDigest {
55
+ markdown: string;
56
+ receiptCount: number;
57
+ }
58
+ /** Saves a new version of the repo's brief from its receipts. The receipts are read before
59
+ * the save's transaction, so a receipt written in between shows in the next refresh. */
60
+ export declare function refreshBrief(hippoRoot: string, tenantId: string, repo: string, actor?: string): ProjectBrief;
61
+ /** `refreshBrief` over a served store's group. */
62
+ export declare function refreshedBrief(objects: Objects, site: ObjectSaveSite, repo: string): Promise<ProjectBrief>;
63
+ //# sourceMappingURL=project-briefs.d.ts.map
@@ -0,0 +1,194 @@
1
+ /** Project_brief object: the living, repo-scoped `summary` of a repository, evolving via supersession.
2
+ * `refreshBrief` assembles recent `path:<repo>` receipts with a deterministic (no-LLM) assembler; an LLM pipeline is deferred.
3
+ * The `project_briefs` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
4
+ import { BadRequestError } from '../core/api-errors.js';
5
+ import { assertTenantId } from '../store/tenant.js';
6
+ import { checkText, requireLine } from './fields.js';
7
+ import { closeObjectAt, listObjectsAt, objectByIdAt, saveObject, saveObjectAt } from './lifecycle.js';
8
+ import { sqliteObjects } from '../store/sqlite/objects-group.js';
9
+ export const VALID_BRIEF_STATES = new Set([
10
+ 'active',
11
+ 'superseded',
12
+ 'closed',
13
+ ]);
14
+ /** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
15
+ * cap than the 4096 short-field convention. */
16
+ export const MAX_REPO_LEN = 256;
17
+ export const MAX_BRIEF_SUMMARY_LEN = 8192;
18
+ export const MAX_CHANGE_SUMMARY_LEN = 4096;
19
+ /** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
20
+ * + the rendered body). Realistic repos have far fewer recent receipts than this. */
21
+ export const MAX_BRIEF_RECEIPTS = 50;
22
+ /** Truncate each receipt's headline in the assembled digest. */
23
+ export const MAX_RECEIPT_HEADLINE_LEN = 200;
24
+ export const PROJECT_BRIEF = {
25
+ kind: 'project_brief',
26
+ label: 'brief',
27
+ plural: 'briefs',
28
+ fn: { get: 'loadProjectBriefById', close: 'closeProjectBrief', list: 'loadProjectBriefs', save: 'saveProjectBrief' },
29
+ states: VALID_BRIEF_STATES,
30
+ closableFrom: ['active'],
31
+ draft(opts) {
32
+ // The repo becomes a path tag on the refresh match and a heading in the digest, so it must be one line.
33
+ const repo = requireLine(opts.repo, MAX_REPO_LEN, {
34
+ required: 'saveProjectBrief: repo is required',
35
+ singleLine: 'saveProjectBrief: repo must be a single line (no newlines)',
36
+ tooLong: `saveProjectBrief: repo exceeds the ${MAX_REPO_LEN}-char cap`,
37
+ });
38
+ checkText(opts.summary, MAX_BRIEF_SUMMARY_LEN, {
39
+ required: 'saveProjectBrief: summary is required',
40
+ tooLong: `saveProjectBrief: summary exceeds the ${MAX_BRIEF_SUMMARY_LEN}-char cap`,
41
+ });
42
+ checkText(opts.changeSummary, MAX_CHANGE_SUMMARY_LEN, {
43
+ tooLong: `saveProjectBrief: changeSummary exceeds the ${MAX_CHANGE_SUMMARY_LEN}-char cap`,
44
+ });
45
+ return {
46
+ fields: { repo, summary: opts.summary, receiptCount: opts.refreshReceiptCount },
47
+ content: buildBriefContent(repo, opts.summary),
48
+ tags: opts.extraTags ?? [],
49
+ supersedesId: opts.supersedesBriefId,
50
+ changeSummary: opts.changeSummary,
51
+ at: new Date().toISOString(),
52
+ };
53
+ },
54
+ };
55
+ /** Recall-surface content for the memory mirror: repo + summary. Named (mirrors
56
+ * buildSkillContent) so the recall surface is deterministic + unit-testable. */
57
+ function buildBriefContent(repo, summary) {
58
+ return `${repo}\n\n${summary}`;
59
+ }
60
+ /** Create a project_brief, or a new version superseding an existing one, in the `objects` store group's one transaction. */
61
+ export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
62
+ return saveObjectAt(PROJECT_BRIEF, { hippoRoot, tenantId, actor }, opts);
63
+ }
64
+ /** Close (retire) an active brief; a superseded row is terminal. */
65
+ export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
66
+ return closeObjectAt(hippoRoot, PROJECT_BRIEF, tenantId, id, actor);
67
+ }
68
+ export function loadProjectBriefById(hippoRoot, tenantId, id) {
69
+ return objectByIdAt(hippoRoot, PROJECT_BRIEF, tenantId, id);
70
+ }
71
+ export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
72
+ return listObjectsAt(hippoRoot, PROJECT_BRIEF, tenantId, { status: opts.status, filter: opts.repo, limit: opts.limit, after: opts.after });
73
+ }
74
+ /** The repo's current active brief, or null. The DB allows several active rows per (tenant, repo); the most recent wins. */
75
+ function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
76
+ assertTenantId('loadActiveBriefForRepo', tenantId);
77
+ if (repo === '')
78
+ return null;
79
+ return sqliteObjects(hippoRoot).listObjects(tenantId, 'project_brief', newestActive(repo))[0] ?? null;
80
+ }
81
+ /** An empty filter lists every repo, so the callers refuse an empty repo first. */
82
+ function newestActive(repo) {
83
+ return { status: 'active', filter: repo, limit: 1 };
84
+ }
85
+ /** Single-line headline for a receipt: first non-empty line, newline-stripped,
86
+ * truncated. Deterministic + safe for the markdown bullet list. */
87
+ function receiptHeadline(content) {
88
+ const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
89
+ const trimmed = firstLine.trim();
90
+ return trimmed.length > MAX_RECEIPT_HEADLINE_LEN
91
+ ? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
92
+ : trimmed;
93
+ }
94
+ /** The tag a memory of the repo carries; the store matches it whole, so `path:hip` never matches `path:hippo`. */
95
+ function receiptTag(normalizedRepo) {
96
+ return `path:${normalizedRepo.toLowerCase()}`;
97
+ }
98
+ // `id DESC` is a lexical tiebreak on a random-ish id, so same-`created` order is stable but arbitrary; `created DESC` is the recency order.
99
+ // Receipt lines go newest-first only while they fit MAX_BRIEF_SUMMARY_LEN (reserving slack for header and omission footer), else the store rejects the body.
100
+ function fitReceiptLines(receipts) {
101
+ const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
102
+ const receiptLines = [];
103
+ if (receipts.length > 0) {
104
+ // Header + "## Recent receipts" + a worst-case omission footer cost; keep slack
105
+ // so the joined markdown stays <= MAX_BRIEF_SUMMARY_LEN even after the footer.
106
+ const SLACK = 400;
107
+ let bodyBudget = MAX_BRIEF_SUMMARY_LEN - SLACK;
108
+ for (const r of receipts) {
109
+ const line = buildReceiptLine(r);
110
+ if (line.length + 1 > bodyBudget)
111
+ break;
112
+ receiptLines.push(line);
113
+ bodyBudget -= line.length + 1;
114
+ }
115
+ }
116
+ return receiptLines;
117
+ }
118
+ function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
119
+ const omitted = receiptCount - receiptLines.length;
120
+ const lines = [];
121
+ lines.push(`# Project Brief: ${normalizedRepo}`);
122
+ lines.push('');
123
+ lines.push(omitted > 0
124
+ ? `_Auto-assembled from ${receiptLines.length} of ${receiptCount} receipt(s)._`
125
+ : `_Auto-assembled from ${receiptCount} receipt(s)._`);
126
+ lines.push('');
127
+ lines.push('## Recent receipts');
128
+ lines.push('');
129
+ if (receiptCount === 0) {
130
+ lines.push(`_No receipts found for ${normalizedRepo}._`);
131
+ }
132
+ else {
133
+ lines.push(...receiptLines);
134
+ if (omitted > 0) {
135
+ lines.push('');
136
+ lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
137
+ }
138
+ }
139
+ // Belt-and-suspenders: hard-clamp so the store's NOT-NULL/<=cap contract holds even for a single oversized line.
140
+ let markdown = lines.join('\n');
141
+ if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
142
+ markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
143
+ }
144
+ return markdown;
145
+ }
146
+ /** Assemble the repo's recent receipts into a deterministic markdown digest and return it with the receipt count; never empty (summary is NOT NULL).
147
+ * The brief's own mirror (source='project_brief') is excluded; the quotes in the JSON-array LIKE are load-bearing (`hip` must not match `path:hippo`). */
148
+ export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
149
+ const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
150
+ return briefDigest(normalizedRepo, sqliteObjects(hippoRoot).briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
151
+ }
152
+ /** `assembleBriefFromReceipts` over a served store's group. */
153
+ export async function briefFromReceipts(objects, tenantId, repo) {
154
+ const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
155
+ return briefDigest(normalizedRepo, await objects.briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
156
+ }
157
+ function requiredRepo(fn, tenantId, repo) {
158
+ assertTenantId(fn, tenantId);
159
+ const normalizedRepo = (repo ?? '').trim();
160
+ if (normalizedRepo.length === 0)
161
+ throw new BadRequestError(`${fn}: repo is required`);
162
+ return normalizedRepo;
163
+ }
164
+ function briefDigest(normalizedRepo, receipts) {
165
+ return { markdown: renderBriefDigest(normalizedRepo, receipts.length, fitReceiptLines(receipts)), receiptCount: receipts.length };
166
+ }
167
+ /** The version a refresh saves: a successor of the repo's active brief when it has one, else a first version. */
168
+ function refreshWrite(normalizedRepo, digest, active) {
169
+ return {
170
+ repo: normalizedRepo,
171
+ summary: digest.markdown,
172
+ changeSummary: active ? `auto-refresh from ${digest.receiptCount} receipt(s)` : undefined,
173
+ supersedesBriefId: active ? active.id : undefined,
174
+ refreshReceiptCount: digest.receiptCount,
175
+ // The path tag lets path-aware recall boost the brief; it cannot become its own receipt, because receipts leave out source project_brief.
176
+ extraTags: [receiptTag(normalizedRepo)],
177
+ };
178
+ }
179
+ /** Saves a new version of the repo's brief from its receipts. The receipts are read before
180
+ * the save's transaction, so a receipt written in between shows in the next refresh. */
181
+ export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
182
+ const normalizedRepo = requiredRepo('refreshBrief', tenantId, repo);
183
+ const digest = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
184
+ const active = loadActiveBriefForRepo(hippoRoot, tenantId, normalizedRepo);
185
+ return saveProjectBrief(hippoRoot, tenantId, refreshWrite(normalizedRepo, digest, active), actor);
186
+ }
187
+ /** `refreshBrief` over a served store's group. */
188
+ export async function refreshedBrief(objects, site, repo) {
189
+ const normalizedRepo = requiredRepo('refreshBrief', site.tenantId, repo);
190
+ const digest = await briefFromReceipts(objects, site.tenantId, normalizedRepo);
191
+ const [active = null] = await objects.listObjects(site.tenantId, 'project_brief', newestActive(normalizedRepo));
192
+ return saveObject(objects, PROJECT_BRIEF, site, refreshWrite(normalizedRepo, digest, active));
193
+ }
194
+ //# sourceMappingURL=project-briefs.js.map
@@ -0,0 +1,51 @@
1
+ /** Skill object: an agent-followable `instructions` body plus an optional `trigger`, evolving via supersession.
2
+ * `exportSkills` renders ACTIVE skills into AGENTS.md / CLAUDE.md rules; running code from a skill is deferred (security).
3
+ * `trigger` is stored in `trigger_text` because it is a SQLite reserved keyword. */
4
+ import type { KeysetPosition } from '../util/keyset.js';
5
+ import type { SavableDescriptor } from './descriptor.js';
6
+ import type { Skill, SkillStatus } from '../store/object-types.js';
7
+ import type { Objects } from '../store/port.js';
8
+ export type { Skill, SkillStatus } from '../store/object-types.js';
9
+ export declare const VALID_SKILL_STATES: ReadonlySet<SkillStatus>;
10
+ /** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
11
+ * larger cap than the 4096 short-field convention. */
12
+ export declare const MAX_SKILL_NAME_LEN = 256;
13
+ export declare const MAX_SKILL_INSTRUCTIONS_LEN = 8192;
14
+ export declare const MAX_SKILL_TRIGGER_LEN = 1024;
15
+ /** Aggregate bound on a single export render so the export body is never unbounded.
16
+ * Realistic active-skill counts are tens; 1000 is a generous bound. */
17
+ export declare const MAX_EXPORT_SKILLS = 1000;
18
+ export interface SaveSkillOpts {
19
+ skillName: string;
20
+ instructions: string;
21
+ /** Optional "when to apply" trigger. */
22
+ trigger?: string;
23
+ /** The delta note for a supersession; ignored (stored NULL) on a fresh create. */
24
+ changeSummary?: string;
25
+ /** Table id of an ACTIVE skill this new version supersedes. */
26
+ supersedesSkillId?: number;
27
+ /** Extra memory tags merged after ['skill']. */
28
+ extraTags?: string[];
29
+ }
30
+ export interface ListSkillsOpts {
31
+ status?: SkillStatus;
32
+ limit?: number;
33
+ /** Resume after this row: the position the previous page ended on. */
34
+ after?: KeysetPosition;
35
+ }
36
+ export declare const SKILL: SavableDescriptor<'skill', SaveSkillOpts>;
37
+ /** Create a skill, or a new version superseding an existing one, in the `objects` store group's one transaction. */
38
+ export declare function saveSkill(hippoRoot: string, tenantId: string, opts: SaveSkillOpts, actor?: string): Skill;
39
+ /** Close (retire) an active skill; a superseded row is terminal. */
40
+ export declare function closeSkill(hippoRoot: string, tenantId: string, id: number, actor?: string): Skill;
41
+ export declare function loadSkillById(hippoRoot: string, tenantId: string, id: number): Skill | null;
42
+ export declare function loadSkills(hippoRoot: string, tenantId: string, opts?: ListSkillsOpts): Skill[];
43
+ export declare function loadActiveSkills(hippoRoot: string, tenantId: string, opts?: {
44
+ limit?: number;
45
+ }): Skill[];
46
+ /** Render the tenant's ACTIVE skills into one AGENTS.md / CLAUDE.md-style markdown block (H2 per skill, ordered by skill_name) and return it; writes no file.
47
+ * Bounded by MAX_EXPORT_SKILLS rows; instructions are emitted verbatim. */
48
+ export declare function exportSkills(hippoRoot: string, tenantId: string): string;
49
+ /** `exportSkills` over a served store's group. */
50
+ export declare function skillsMarkdown(objects: Objects, tenantId: string): Promise<string>;
51
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1,110 @@
1
+ /** Skill object: an agent-followable `instructions` body plus an optional `trigger`, evolving via supersession.
2
+ * `exportSkills` renders ACTIVE skills into AGENTS.md / CLAUDE.md rules; running code from a skill is deferred (security).
3
+ * `trigger` is stored in `trigger_text` because it is a SQLite reserved keyword. */
4
+ import { BadRequestError } from '../core/api-errors.js';
5
+ import { assertTenantId } from '../store/tenant.js';
6
+ import { checkText, requireLine } from './fields.js';
7
+ import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
8
+ import { sqliteObjects } from '../store/sqlite/objects-group.js';
9
+ export const VALID_SKILL_STATES = new Set([
10
+ 'active',
11
+ 'superseded',
12
+ 'closed',
13
+ ]);
14
+ /** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
15
+ * larger cap than the 4096 short-field convention. */
16
+ export const MAX_SKILL_NAME_LEN = 256;
17
+ export const MAX_SKILL_INSTRUCTIONS_LEN = 8192;
18
+ export const MAX_SKILL_TRIGGER_LEN = 1024;
19
+ /** Aggregate bound on a single export render so the export body is never unbounded.
20
+ * Realistic active-skill counts are tens; 1000 is a generous bound. */
21
+ export const MAX_EXPORT_SKILLS = 1000;
22
+ /** The trigger as stored, or null for none. One line, because a newline would forge a heading inside the exported **When:** line. */
23
+ function checkTrigger(trigger) {
24
+ if (trigger === undefined || trigger === null || trigger.trim().length === 0)
25
+ return null;
26
+ if (trigger.length > MAX_SKILL_TRIGGER_LEN) {
27
+ throw new BadRequestError(`saveSkill: trigger exceeds the ${MAX_SKILL_TRIGGER_LEN}-char cap`);
28
+ }
29
+ if (/[\r\n]/.test(trigger)) {
30
+ throw new BadRequestError('saveSkill: trigger must be a single line (no newlines)');
31
+ }
32
+ return trigger;
33
+ }
34
+ /** Recall-surface content for the memory mirror: name, optional trigger, instructions. */
35
+ function buildSkillContent(skillName, instructions, trigger) {
36
+ let content = skillName;
37
+ if (trigger)
38
+ content += `\n\nWhen: ${trigger}`;
39
+ content += `\n\n${instructions}`;
40
+ return content;
41
+ }
42
+ export const SKILL = {
43
+ kind: 'skill',
44
+ label: 'skill',
45
+ plural: 'skills',
46
+ fn: { get: 'loadSkillById', close: 'closeSkill', list: 'loadSkills', save: 'saveSkill' },
47
+ states: VALID_SKILL_STATES,
48
+ closableFrom: ['active'],
49
+ draft(opts) {
50
+ // The name becomes an H2 header in the export, so it must be one line.
51
+ const name = requireLine(opts.skillName, MAX_SKILL_NAME_LEN, {
52
+ required: 'saveSkill: skillName is required',
53
+ singleLine: 'saveSkill: skillName must be a single line (no newlines)',
54
+ tooLong: `saveSkill: skillName exceeds the ${MAX_SKILL_NAME_LEN}-char cap`,
55
+ });
56
+ checkText(opts.instructions, MAX_SKILL_INSTRUCTIONS_LEN, {
57
+ required: 'saveSkill: instructions are required',
58
+ tooLong: `saveSkill: instructions exceed the ${MAX_SKILL_INSTRUCTIONS_LEN}-char cap`,
59
+ });
60
+ const trigger = checkTrigger(opts.trigger);
61
+ return {
62
+ fields: { name, instructions: opts.instructions, trigger },
63
+ content: buildSkillContent(name, opts.instructions, trigger),
64
+ tags: opts.extraTags ?? [],
65
+ supersedesId: opts.supersedesSkillId,
66
+ changeSummary: opts.changeSummary,
67
+ at: new Date().toISOString(),
68
+ };
69
+ },
70
+ };
71
+ /** Create a skill, or a new version superseding an existing one, in the `objects` store group's one transaction. */
72
+ export function saveSkill(hippoRoot, tenantId, opts, actor = 'cli') {
73
+ return saveObjectAt(SKILL, { hippoRoot, tenantId, actor }, opts);
74
+ }
75
+ /** Close (retire) an active skill; a superseded row is terminal. */
76
+ export function closeSkill(hippoRoot, tenantId, id, actor = 'cli') {
77
+ return closeObjectAt(hippoRoot, SKILL, tenantId, id, actor);
78
+ }
79
+ export function loadSkillById(hippoRoot, tenantId, id) {
80
+ return objectByIdAt(hippoRoot, SKILL, tenantId, id);
81
+ }
82
+ export function loadSkills(hippoRoot, tenantId, opts = {}) {
83
+ return listObjectsAt(hippoRoot, SKILL, tenantId, opts);
84
+ }
85
+ export function loadActiveSkills(hippoRoot, tenantId, opts = {}) {
86
+ return loadSkills(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
87
+ }
88
+ /** Render the tenant's ACTIVE skills into one AGENTS.md / CLAUDE.md-style markdown block (H2 per skill, ordered by skill_name) and return it; writes no file.
89
+ * Bounded by MAX_EXPORT_SKILLS rows; instructions are emitted verbatim. */
90
+ export function exportSkills(hippoRoot, tenantId) {
91
+ assertTenantId('exportSkills', tenantId);
92
+ return skillsBlock(sqliteObjects(hippoRoot).activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
93
+ }
94
+ /** `exportSkills` over a served store's group. */
95
+ export async function skillsMarkdown(objects, tenantId) {
96
+ assertTenantId('exportSkills', tenantId);
97
+ return skillsBlock(await objects.activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
98
+ }
99
+ function skillsBlock(skills) {
100
+ return skills
101
+ .map((s) => {
102
+ let block = `## ${s.skillName}`;
103
+ if (s.trigger)
104
+ block += `\n\n**When:** ${s.trigger}`;
105
+ block += `\n\n${s.instructions}`;
106
+ return block;
107
+ })
108
+ .join('\n\n');
109
+ }
110
+ //# sourceMappingURL=skills.js.map