hippo-memory 1.70.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 (629) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-memories/claude-code.d.ts +4 -2
  3. package/dist/agent-memories/claude-code.js +14 -5
  4. package/dist/agent-memories/files.js +23 -12
  5. package/dist/agent-memories/markdown.d.ts +1 -3
  6. package/dist/agent-memories/markdown.js +1 -3
  7. package/dist/agent-memories/report.js +2 -1
  8. package/dist/agent-memories/sync.d.ts +4 -2
  9. package/dist/agent-memories/sync.js +10 -5
  10. package/dist/api/assemble.d.ts +7 -44
  11. package/dist/api/assemble.js +2 -22
  12. package/dist/api/audit.d.ts +5 -1
  13. package/dist/api/audit.js +9 -1
  14. package/dist/api/auth.d.ts +13 -22
  15. package/dist/api/auth.js +34 -24
  16. package/dist/api/auto-sleep.js +2 -2
  17. package/dist/api/availability.d.ts +2 -15
  18. package/dist/api/availability.js +2 -15
  19. package/dist/api/context-select.js +3 -4
  20. package/dist/api/context-types.d.ts +10 -35
  21. package/dist/api/context.d.ts +5 -22
  22. package/dist/api/context.js +21 -38
  23. package/dist/api/dormant.d.ts +5 -21
  24. package/dist/api/dormant.js +7 -26
  25. package/dist/api/drill-down.d.ts +7 -46
  26. package/dist/api/drill-down.js +5 -26
  27. package/dist/api/forget.d.ts +5 -24
  28. package/dist/api/forget.js +5 -28
  29. package/dist/api/graph.d.ts +8 -0
  30. package/dist/api/graph.js +7 -0
  31. package/dist/api/index.d.ts +2 -0
  32. package/dist/api/index.js +2 -0
  33. package/dist/api/instruction-detect.js +16 -5
  34. package/dist/api/ledger-db.d.ts +2 -1
  35. package/dist/api/ledger-db.js +5 -3
  36. package/dist/api/memories.d.ts +5 -0
  37. package/dist/api/memories.js +7 -0
  38. package/dist/api/objects.d.ts +9 -0
  39. package/dist/api/objects.js +11 -0
  40. package/dist/api/on-store.js +5 -3
  41. package/dist/api/predictions.d.ts +9 -0
  42. package/dist/api/predictions.js +18 -0
  43. package/dist/api/promote.d.ts +13 -17
  44. package/dist/api/promote.js +11 -19
  45. package/dist/api/prompt-hook.d.ts +4 -4
  46. package/dist/api/prompt-hook.js +10 -9
  47. package/dist/api/recall-cli.d.ts +55 -0
  48. package/dist/api/recall-cli.js +94 -0
  49. package/dist/api/recall-core.js +14 -6
  50. package/dist/api/recall-finish.d.ts +53 -0
  51. package/dist/api/recall-finish.js +30 -0
  52. package/dist/api/recall-history.d.ts +17 -84
  53. package/dist/api/recall-history.js +15 -88
  54. package/dist/api/recall-pipeline.d.ts +2 -3
  55. package/dist/api/recall-pipeline.js +16 -9
  56. package/dist/api/recall-types.d.ts +64 -304
  57. package/dist/api/recall.d.ts +5 -33
  58. package/dist/api/recall.js +59 -60
  59. package/dist/api/refine.d.ts +7 -0
  60. package/dist/api/refine.js +10 -0
  61. package/dist/api/remember-local.d.ts +57 -0
  62. package/dist/api/remember-local.js +90 -0
  63. package/dist/api/remember.d.ts +18 -1
  64. package/dist/api/remember.js +13 -1
  65. package/dist/api/sleep-run.d.ts +1 -3
  66. package/dist/api/sleep-run.js +17 -21
  67. package/dist/api/sleep.d.ts +9 -28
  68. package/dist/api/tokens.d.ts +3 -10
  69. package/dist/api/tokens.js +3 -10
  70. package/dist/api/types.d.ts +6 -29
  71. package/dist/api/types.js +4 -22
  72. package/dist/capture/command.d.ts +4 -12
  73. package/dist/capture/command.js +6 -22
  74. package/dist/capture/compact.d.ts +4 -15
  75. package/dist/capture/compact.js +16 -25
  76. package/dist/capture/compaction-record.js +101 -69
  77. package/dist/capture/compaction-spool.d.ts +1 -1
  78. package/dist/capture/compaction-spool.js +1 -1
  79. package/dist/capture/session-digest.d.ts +1 -1
  80. package/dist/capture/session-digest.js +13 -7
  81. package/dist/capture/transcript.d.ts +2 -10
  82. package/dist/capture/transcript.js +4 -18
  83. package/dist/cli/api-context.d.ts +3 -0
  84. package/dist/cli/api-context.js +6 -0
  85. package/dist/cli/audit-prune.d.ts +6 -39
  86. package/dist/cli/audit-prune.js +6 -39
  87. package/dist/cli/audit.d.ts +1 -1
  88. package/dist/cli/audit.js +33 -34
  89. package/dist/cli/auth.d.ts +2 -2
  90. package/dist/cli/auth.js +57 -39
  91. package/dist/cli/briefs.d.ts +4 -4
  92. package/dist/cli/briefs.js +18 -22
  93. package/dist/cli/card.d.ts +2 -2
  94. package/dist/cli/card.js +31 -32
  95. package/dist/cli/client.d.ts +7 -27
  96. package/dist/cli/client.js +24 -43
  97. package/dist/cli/compact-resume-payload.js +3 -2
  98. package/dist/cli/context.d.ts +1 -2
  99. package/dist/cli/context.js +12 -8
  100. package/dist/cli/continuity.d.ts +6 -6
  101. package/dist/cli/continuity.js +62 -64
  102. package/dist/cli/correction-latency.d.ts +2 -14
  103. package/dist/cli/correction-latency.js +2 -14
  104. package/dist/cli/curate.d.ts +13 -17
  105. package/dist/cli/curate.js +68 -92
  106. package/dist/cli/dag.d.ts +4 -4
  107. package/dist/cli/dag.js +33 -27
  108. package/dist/cli/decisions.d.ts +4 -4
  109. package/dist/cli/decisions.js +33 -47
  110. package/dist/cli/eval.js +15 -13
  111. package/dist/cli/exit.d.ts +6 -0
  112. package/dist/cli/exit.js +11 -0
  113. package/dist/cli/explain.d.ts +1 -2
  114. package/dist/cli/explain.js +6 -4
  115. package/dist/cli/flag-values.d.ts +6 -1
  116. package/dist/cli/flag-values.js +27 -10
  117. package/dist/cli/flags.d.ts +1 -0
  118. package/dist/cli/flags.js +1 -1
  119. package/dist/cli/github.d.ts +14 -0
  120. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  121. package/dist/cli/goals.d.ts +2 -2
  122. package/dist/cli/goals.js +46 -50
  123. package/dist/cli/hook-runtime.d.ts +9 -27
  124. package/dist/cli/hook-runtime.js +15 -31
  125. package/dist/cli/init.d.ts +2 -2
  126. package/dist/cli/init.js +6 -12
  127. package/dist/cli/install-steps.js +3 -12
  128. package/dist/cli/last-sleep.d.ts +2 -1
  129. package/dist/cli/last-sleep.js +3 -0
  130. package/dist/cli/maintenance.d.ts +4 -4
  131. package/dist/cli/maintenance.js +14 -19
  132. package/dist/cli/object-verbs.js +4 -3
  133. package/dist/cli/owner-validation.d.ts +5 -28
  134. package/dist/cli/owner-validation.js +5 -28
  135. package/dist/cli/playbooks.d.ts +4 -4
  136. package/dist/cli/playbooks.js +23 -28
  137. package/dist/cli/print.d.ts +2 -5
  138. package/dist/cli/print.js +1 -4
  139. package/dist/cli/projects.d.ts +2 -2
  140. package/dist/cli/projects.js +1 -3
  141. package/dist/cli/provenance-coverage.d.ts +2 -6
  142. package/dist/cli/provenance-coverage.js +2 -6
  143. package/dist/cli/quality-repair-once.js +2 -2
  144. package/dist/cli/recall.d.ts +2 -4
  145. package/dist/cli/recall.js +55 -131
  146. package/dist/cli/refine-llm.d.ts +5 -31
  147. package/dist/cli/refine-llm.js +9 -36
  148. package/dist/cli/remember.d.ts +3 -3
  149. package/dist/cli/remember.js +122 -180
  150. package/dist/cli/scheduler.d.ts +2 -17
  151. package/dist/cli/scheduler.js +12 -18
  152. package/dist/cli/serve.js +21 -12
  153. package/dist/cli/session-hooks.d.ts +10 -18
  154. package/dist/cli/session-hooks.js +112 -113
  155. package/dist/cli/setup.d.ts +4 -4
  156. package/dist/cli/setup.js +19 -21
  157. package/dist/cli/shared.d.ts +9 -23
  158. package/dist/cli/shared.js +9 -32
  159. package/dist/cli/slack.d.ts +2 -2
  160. package/dist/cli/slack.js +19 -23
  161. package/dist/cli/sleep.d.ts +3 -2
  162. package/dist/cli/sleep.js +15 -16
  163. package/dist/cli/status.d.ts +9 -12
  164. package/dist/cli/status.js +55 -98
  165. package/dist/cli/stdin.d.ts +4 -6
  166. package/dist/cli/stdin.js +2 -3
  167. package/dist/cli/transfer.d.ts +9 -9
  168. package/dist/cli/transfer.js +66 -89
  169. package/dist/cli/usage.js +11 -5
  170. package/dist/cli.d.ts +66 -448
  171. package/dist/cli.js +87 -263
  172. package/dist/connectors/github/backfill.d.ts +5 -25
  173. package/dist/connectors/github/backfill.js +14 -49
  174. package/dist/connectors/github/deletion.d.ts +4 -18
  175. package/dist/connectors/github/deletion.js +2 -15
  176. package/dist/connectors/github/dlq.d.ts +8 -33
  177. package/dist/connectors/github/dlq.js +12 -29
  178. package/dist/connectors/github/ingest.d.ts +2 -6
  179. package/dist/connectors/github/ingest.js +4 -10
  180. package/dist/connectors/github/octokit-client.d.ts +4 -16
  181. package/dist/connectors/github/octokit-client.js +27 -24
  182. package/dist/connectors/github/ratelimit.d.ts +3 -14
  183. package/dist/connectors/github/ratelimit.js +3 -14
  184. package/dist/connectors/github/scope.d.ts +3 -5
  185. package/dist/connectors/github/scope.js +3 -5
  186. package/dist/connectors/github/signature.d.ts +4 -26
  187. package/dist/connectors/github/signature.js +4 -26
  188. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  189. package/dist/connectors/github/tenant-routing.js +4 -26
  190. package/dist/connectors/github/transform.js +2 -16
  191. package/dist/connectors/github/types.d.ts +3 -15
  192. package/dist/connectors/github/types.js +2 -9
  193. package/dist/connectors/github/webhook.d.ts +2 -16
  194. package/dist/connectors/github/webhook.js +6 -22
  195. package/dist/connectors/slack/backfill.d.ts +4 -17
  196. package/dist/connectors/slack/backfill.js +4 -13
  197. package/dist/connectors/slack/dlq.d.ts +2 -19
  198. package/dist/connectors/slack/dlq.js +2 -19
  199. package/dist/connectors/slack/ingest.d.ts +2 -3
  200. package/dist/connectors/slack/ingest.js +2 -3
  201. package/dist/connectors/slack/scope.d.ts +2 -8
  202. package/dist/connectors/slack/scope.js +2 -8
  203. package/dist/connectors/slack/signature.d.ts +1 -6
  204. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  205. package/dist/connectors/slack/tenant-routing.js +2 -21
  206. package/dist/connectors/slack/transform.d.ts +2 -18
  207. package/dist/connectors/slack/transform.js +2 -18
  208. package/dist/connectors/slack/types.d.ts +3 -9
  209. package/dist/connectors/slack/types.js +2 -4
  210. package/dist/connectors/slack/web-client.js +33 -27
  211. package/dist/connectors/slack/webhook.d.ts +2 -19
  212. package/dist/connectors/slack/webhook.js +5 -26
  213. package/dist/connectors/slack/workspaces.d.ts +4 -24
  214. package/dist/connectors/slack/workspaces.js +4 -24
  215. package/dist/consolidate/conflicts.js +6 -14
  216. package/dist/consolidate/dag-summary.d.ts +8 -0
  217. package/dist/consolidate/dag-summary.js +41 -0
  218. package/dist/consolidate/dag.d.ts +5 -28
  219. package/dist/consolidate/dag.js +14 -75
  220. package/dist/consolidate/decay.js +7 -19
  221. package/dist/consolidate/dedupe.d.ts +6 -52
  222. package/dist/consolidate/dedupe.js +13 -71
  223. package/dist/consolidate/flush-units.d.ts +3 -4
  224. package/dist/consolidate/flush-units.js +3 -3
  225. package/dist/consolidate/half-life-migration.d.ts +3 -26
  226. package/dist/consolidate/half-life-migration.js +11 -28
  227. package/dist/consolidate/llm-passes.js +4 -21
  228. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  229. package/dist/consolidate/memory-value-weights.js +2 -13
  230. package/dist/consolidate/memory-value.d.ts +11 -84
  231. package/dist/consolidate/memory-value.js +16 -104
  232. package/dist/consolidate/merge.js +10 -31
  233. package/dist/consolidate/merged-row.js +2 -1
  234. package/dist/consolidate/physics-pass.js +1 -3
  235. package/dist/consolidate/replay.d.ts +6 -38
  236. package/dist/consolidate/replay.js +14 -52
  237. package/dist/consolidate/run.js +1 -1
  238. package/dist/consolidate/sleep.d.ts +1 -8
  239. package/dist/consolidate/sleep.js +5 -17
  240. package/dist/consolidate/trace.d.ts +3 -18
  241. package/dist/consolidate/trace.js +3 -18
  242. package/dist/consolidate/traces.js +6 -22
  243. package/dist/core/ablation.d.ts +4 -91
  244. package/dist/core/ablation.js +4 -91
  245. package/dist/core/ambient.d.ts +1 -8
  246. package/dist/core/ambient.js +1 -8
  247. package/dist/core/capture-contract.d.ts +4 -2
  248. package/dist/core/capture-contract.js +4 -2
  249. package/dist/core/card.d.ts +4 -1
  250. package/dist/core/card.js +8 -0
  251. package/dist/core/compare.d.ts +11 -67
  252. package/dist/core/compare.js +9 -63
  253. package/dist/core/config.d.ts +10 -24
  254. package/dist/core/config.js +13 -14
  255. package/dist/core/handoff.d.ts +1 -7
  256. package/dist/core/handoff.js +1 -7
  257. package/dist/core/memory-quality.js +1 -1
  258. package/dist/core/memory.d.ts +41 -164
  259. package/dist/core/memory.js +51 -221
  260. package/dist/core/package-root.d.ts +3 -0
  261. package/dist/core/package-root.js +5 -0
  262. package/dist/core/physics-config.d.ts +1 -4
  263. package/dist/core/physics-config.js +3 -8
  264. package/dist/core/physics.d.ts +15 -61
  265. package/dist/core/physics.js +59 -122
  266. package/dist/core/project-identity.d.ts +17 -58
  267. package/dist/core/project-identity.js +17 -38
  268. package/dist/core/project-remote.js +13 -2
  269. package/dist/core/raw-append-only.d.ts +5 -0
  270. package/dist/core/raw-append-only.js +7 -0
  271. package/dist/core/salience.d.ts +1 -7
  272. package/dist/core/salience.js +1 -7
  273. package/dist/dashboard/dashboard-actions.js +2 -2
  274. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  275. package/dist/dashboard/dashboard-snapshot.js +11 -2
  276. package/dist/dashboard/dashboard-types.d.ts +2 -1
  277. package/dist/dashboard/dashboard.d.ts +1 -0
  278. package/dist/dashboard/dashboard.js +50 -4
  279. package/dist/db/busy.d.ts +1 -1
  280. package/dist/db/busy.js +17 -8
  281. package/dist/db/connect.d.ts +1 -0
  282. package/dist/db/connect.js +3 -3
  283. package/dist/db/migrate.js +3 -3
  284. package/dist/db/migrations/types.d.ts +2 -5
  285. package/dist/db/migrations/v14.js +2 -3
  286. package/dist/db/migrations/v15.js +2 -8
  287. package/dist/db/migrations/v16.js +2 -3
  288. package/dist/db/migrations/v17.js +2 -3
  289. package/dist/db/migrations/v19.js +2 -5
  290. package/dist/db/migrations/v20.js +2 -7
  291. package/dist/db/migrations/v22.js +4 -17
  292. package/dist/db/migrations/v23.js +3 -14
  293. package/dist/db/migrations/v24.js +2 -4
  294. package/dist/db/migrations/v25.js +3 -8
  295. package/dist/db/migrations/v26.js +2 -13
  296. package/dist/db/migrations/v27.js +3 -11
  297. package/dist/db/migrations/v28.js +2 -14
  298. package/dist/db/migrations/v29.js +4 -18
  299. package/dist/db/migrations/v30.js +4 -16
  300. package/dist/db/migrations/v31.js +2 -15
  301. package/dist/db/migrations/v32.js +4 -22
  302. package/dist/db/migrations/v33.js +2 -15
  303. package/dist/db/migrations/v34.js +2 -11
  304. package/dist/db/migrations/v35.js +2 -11
  305. package/dist/db/migrations/v36.js +2 -11
  306. package/dist/db/migrations/v37.js +8 -33
  307. package/dist/db/migrations/v38.js +5 -38
  308. package/dist/db/migrations/v39.js +9 -20
  309. package/dist/db/migrations/v40.js +2 -9
  310. package/dist/db/migrations/v41.js +2 -24
  311. package/dist/db/migrations/v43.js +1 -1
  312. package/dist/db/migrations/v44.js +2 -8
  313. package/dist/db/migrations/v45.js +2 -7
  314. package/dist/db/migrations/v47.js +2 -3
  315. package/dist/db/migrations/v51.js +1 -1
  316. package/dist/db/open.d.ts +2 -0
  317. package/dist/db/open.js +17 -1
  318. package/dist/db/physics-state.d.ts +6 -22
  319. package/dist/db/physics-state.js +25 -36
  320. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  321. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  322. package/dist/db/vector-store.d.ts +2 -0
  323. package/dist/db/vector-store.js +8 -1
  324. package/dist/doctor.js +74 -19
  325. package/dist/entry/session-text.js +2 -1
  326. package/dist/eval/eval-stats.d.ts +15 -53
  327. package/dist/eval/eval-stats.js +12 -42
  328. package/dist/eval/eval-suite.d.ts +2 -13
  329. package/dist/eval/eval-suite.js +74 -34
  330. package/dist/eval/eval.d.ts +6 -24
  331. package/dist/eval/eval.js +7 -34
  332. package/dist/eval/judgment.d.ts +0 -3
  333. package/dist/eval/judgment.js +19 -11
  334. package/dist/extensions/openclaw-plugin/index.js +1 -1
  335. package/dist/graph/extract.d.ts +5 -27
  336. package/dist/graph/extract.js +7 -33
  337. package/dist/graph/recall.d.ts +7 -20
  338. package/dist/graph/recall.js +14 -76
  339. package/dist/graph/stream.d.ts +7 -39
  340. package/dist/graph/stream.js +11 -34
  341. package/dist/graph/view.d.ts +9 -35
  342. package/dist/graph/view.js +11 -39
  343. package/dist/hooks/codex-wrapper.js +2 -2
  344. package/dist/hooks/copilot.js +2 -1
  345. package/dist/hooks/hook-blocks.d.ts +6 -2
  346. package/dist/hooks/hook-blocks.js +37 -124
  347. package/dist/hooks/json-hooks.d.ts +4 -36
  348. package/dist/hooks/json-hooks.js +18 -57
  349. package/dist/hooks/opencode.d.ts +0 -38
  350. package/dist/hooks/opencode.js +9 -76
  351. package/dist/hooks/shared.d.ts +8 -17
  352. package/dist/hooks/shared.js +29 -20
  353. package/dist/importers/core.d.ts +12 -37
  354. package/dist/importers/core.js +9 -27
  355. package/dist/importers/markdown-parse.d.ts +8 -22
  356. package/dist/importers/markdown-parse.js +8 -25
  357. package/dist/importers/markdown.js +3 -12
  358. package/dist/importers/sources.js +7 -35
  359. package/dist/importers/vault.d.ts +2 -8
  360. package/dist/importers/vault.js +25 -81
  361. package/dist/index.d.ts +6 -2
  362. package/dist/index.js +6 -2
  363. package/dist/learn/autolearn.d.ts +14 -41
  364. package/dist/learn/autolearn.js +14 -41
  365. package/dist/learn/extract.js +2 -4
  366. package/dist/learn/forward-claim-detector.d.ts +6 -30
  367. package/dist/learn/forward-claim-detector.js +14 -66
  368. package/dist/learn/invalidation.d.ts +6 -18
  369. package/dist/learn/invalidation.js +9 -26
  370. package/dist/mcp/admin-tools.js +3 -5
  371. package/dist/mcp/memory-tools.js +4 -9
  372. package/dist/mcp/protocol.d.ts +8 -26
  373. package/dist/mcp/protocol.js +3 -6
  374. package/dist/mcp/recall-tools.js +3 -3
  375. package/dist/mcp/request.d.ts +3 -11
  376. package/dist/mcp/request.js +10 -26
  377. package/dist/mcp/server.d.ts +3 -9
  378. package/dist/mcp/server.js +5 -16
  379. package/dist/mcp/session-state.d.ts +1 -1
  380. package/dist/mcp/session-state.js +5 -11
  381. package/dist/mcp/stdio.d.ts +2 -6
  382. package/dist/mcp/stdio.js +48 -12
  383. package/dist/mcp/tools.js +5 -3
  384. package/dist/objects/customer-notes.d.ts +7 -42
  385. package/dist/objects/customer-notes.js +7 -48
  386. package/dist/objects/decisions.d.ts +12 -50
  387. package/dist/objects/decisions.js +15 -53
  388. package/dist/objects/incidents.d.ts +7 -38
  389. package/dist/objects/incidents.js +7 -41
  390. package/dist/objects/policies.d.ts +11 -89
  391. package/dist/objects/policies.js +11 -98
  392. package/dist/objects/processes.d.ts +7 -52
  393. package/dist/objects/processes.js +7 -61
  394. package/dist/objects/project-briefs.d.ts +11 -55
  395. package/dist/objects/project-briefs.js +14 -75
  396. package/dist/objects/skills.d.ts +7 -42
  397. package/dist/objects/skills.js +8 -54
  398. package/dist/postinstall.js +6 -19
  399. package/dist/predictions/planning-fallacy.d.ts +11 -34
  400. package/dist/rerankers/clef.js +3 -31
  401. package/dist/rerankers/cross-encoder.js +4 -6
  402. package/dist/rerankers/jev.js +9 -6
  403. package/dist/rerankers/llm.d.ts +2 -11
  404. package/dist/rerankers/llm.js +14 -14
  405. package/dist/rerankers/outage-warning.d.ts +2 -1
  406. package/dist/rerankers/outage-warning.js +2 -1
  407. package/dist/rerankers/remote.d.ts +1 -0
  408. package/dist/rerankers/remote.js +2 -0
  409. package/dist/rerankers/types.d.ts +2 -14
  410. package/dist/search/boosts.d.ts +0 -2
  411. package/dist/search/boosts.js +2 -2
  412. package/dist/search/goal-boost.d.ts +23 -0
  413. package/dist/search/goal-boost.js +90 -0
  414. package/dist/search/hybrid.d.ts +2 -0
  415. package/dist/search/multihop.js +2 -3
  416. package/dist/search/path-context.d.ts +5 -18
  417. package/dist/search/path-context.js +5 -18
  418. package/dist/search/physics-search.js +11 -8
  419. package/dist/search/rrf.d.ts +7 -35
  420. package/dist/search/rrf.js +5 -30
  421. package/dist/search/vector.d.ts +7 -0
  422. package/dist/search/vector.js +35 -5
  423. package/dist/server/auth.d.ts +9 -28
  424. package/dist/server/auth.js +32 -25
  425. package/dist/server/boot.d.ts +2 -21
  426. package/dist/server/boot.js +63 -96
  427. package/dist/server/client-ip.d.ts +3 -19
  428. package/dist/server/client-ip.js +5 -28
  429. package/dist/server/defaults.d.ts +3 -0
  430. package/dist/server/defaults.js +4 -0
  431. package/dist/server/key-check-bounds.d.ts +2 -1
  432. package/dist/server/lifecycle.d.ts +5 -4
  433. package/dist/server/lifecycle.js +19 -4
  434. package/dist/server/mcp-http.js +10 -44
  435. package/dist/server/rate-limit.d.ts +5 -18
  436. package/dist/server/rate-limit.js +4 -13
  437. package/dist/server/request.d.ts +4 -8
  438. package/dist/server/request.js +9 -17
  439. package/dist/server/route-table.js +42 -49
  440. package/dist/server/routes/admin.js +22 -28
  441. package/dist/server/routes/customer-notes.js +7 -12
  442. package/dist/server/routes/decisions.js +10 -17
  443. package/dist/server/routes/incidents.js +12 -20
  444. package/dist/server/routes/memories.js +12 -32
  445. package/dist/server/routes/object-routes.d.ts +0 -5
  446. package/dist/server/routes/object-routes.js +7 -15
  447. package/dist/server/routes/policies.js +10 -18
  448. package/dist/server/routes/predictions.js +13 -25
  449. package/dist/server/routes/processes.js +16 -26
  450. package/dist/server/routes/project-briefs.js +9 -16
  451. package/dist/server/routes/recall.js +10 -35
  452. package/dist/server/routes/skills.js +8 -18
  453. package/dist/server/server-detect.d.ts +9 -53
  454. package/dist/server/server-detect.js +24 -90
  455. package/dist/server/sleep-offload.js +4 -1
  456. package/dist/server/types.d.ts +12 -10
  457. package/dist/server/validation.d.ts +3 -1
  458. package/dist/server/validation.js +10 -23
  459. package/dist/server.d.ts +2 -2
  460. package/dist/server.js +3 -2
  461. package/dist/sharing/global-store.d.ts +19 -0
  462. package/dist/sharing/global-store.js +75 -0
  463. package/dist/sharing/global-sync.d.ts +6 -0
  464. package/dist/sharing/global-sync.js +80 -0
  465. package/dist/sharing/project-merge.d.ts +4 -5
  466. package/dist/sharing/project-merge.js +9 -7
  467. package/dist/sharing/scope.d.ts +4 -11
  468. package/dist/sharing/scope.js +4 -11
  469. package/dist/sharing/search-both.d.ts +60 -0
  470. package/dist/sharing/search-both.js +138 -0
  471. package/dist/sharing/share.d.ts +38 -0
  472. package/dist/sharing/share.js +226 -0
  473. package/dist/store/ambient.js +4 -9
  474. package/dist/store/audit-event.d.ts +4 -12
  475. package/dist/store/audit-event.js +4 -12
  476. package/dist/store/audit.d.ts +2 -5
  477. package/dist/store/audit.js +4 -12
  478. package/dist/store/auth.d.ts +6 -6
  479. package/dist/store/auth.js +10 -9
  480. package/dist/store/candidates.d.ts +20 -3
  481. package/dist/store/candidates.js +77 -48
  482. package/dist/store/card-detail.d.ts +2 -1
  483. package/dist/store/card-detail.js +2 -1
  484. package/dist/store/cards.d.ts +14 -9
  485. package/dist/store/cards.js +72 -126
  486. package/dist/store/conflicts.d.ts +4 -21
  487. package/dist/store/conflicts.js +71 -150
  488. package/dist/store/connectors/github.d.ts +10 -10
  489. package/dist/store/connectors/github.js +10 -10
  490. package/dist/store/dashboard-reads.js +4 -8
  491. package/dist/store/delete-and-batch.d.ts +11 -31
  492. package/dist/store/delete-and-batch.js +48 -64
  493. package/dist/store/delivery-recorder.d.ts +8 -4
  494. package/dist/store/delivery-recorder.js +25 -15
  495. package/dist/store/diagnostics.js +6 -13
  496. package/dist/store/dormant.d.ts +7 -29
  497. package/dist/store/dormant.js +15 -56
  498. package/dist/store/embeddings/index.d.ts +11 -80
  499. package/dist/store/embeddings/index.js +71 -207
  500. package/dist/store/embeddings/local.js +15 -32
  501. package/dist/store/embeddings/provider.d.ts +16 -53
  502. package/dist/store/embeddings/provider.js +41 -69
  503. package/dist/store/entry-reads.d.ts +21 -57
  504. package/dist/store/entry-reads.js +65 -126
  505. package/dist/store/entry-row.d.ts +6 -35
  506. package/dist/store/entry-row.js +9 -37
  507. package/dist/store/entry-writes.d.ts +10 -16
  508. package/dist/store/entry-writes.js +17 -35
  509. package/dist/store/goals.d.ts +3 -40
  510. package/dist/store/goals.js +21 -160
  511. package/dist/store/graph-queue.d.ts +6 -22
  512. package/dist/store/graph-queue.js +14 -45
  513. package/dist/store/graph-reads.d.ts +11 -35
  514. package/dist/store/graph-reads.js +20 -58
  515. package/dist/store/graph-rows.d.ts +3 -6
  516. package/dist/store/graph-rows.js +6 -9
  517. package/dist/store/graph-view-rows.d.ts +2 -1
  518. package/dist/store/graph-view-rows.js +2 -1
  519. package/dist/store/graph-writes.d.ts +6 -31
  520. package/dist/store/graph-writes.js +13 -37
  521. package/dist/store/half-life.d.ts +2 -1
  522. package/dist/store/half-life.js +14 -16
  523. package/dist/store/handoffs.d.ts +5 -11
  524. package/dist/store/handoffs.js +16 -34
  525. package/dist/store/index-and-stats.d.ts +6 -19
  526. package/dist/store/index-and-stats.js +34 -82
  527. package/dist/store/markdown.d.ts +2 -6
  528. package/dist/store/markdown.js +21 -20
  529. package/dist/store/mirrors.d.ts +2 -6
  530. package/dist/store/mirrors.js +14 -23
  531. package/dist/store/open.js +6 -13
  532. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  533. package/dist/store/planning-fallacy-evidence.js +8 -37
  534. package/dist/store/port.d.ts +82 -79
  535. package/dist/store/predictions.d.ts +11 -51
  536. package/dist/store/predictions.js +38 -119
  537. package/dist/{cli → store}/quality-repair.js +15 -31
  538. package/dist/store/raw-archive.d.ts +4 -16
  539. package/dist/store/raw-archive.js +14 -29
  540. package/dist/store/recall-scope.d.ts +19 -79
  541. package/dist/store/recall-scope.js +21 -82
  542. package/dist/store/recall-trace.d.ts +10 -77
  543. package/dist/store/recall-trace.js +19 -95
  544. package/dist/store/rejected-values.js +7 -19
  545. package/dist/store/rejection.d.ts +12 -58
  546. package/dist/store/rejection.js +13 -65
  547. package/dist/store/report-reads.d.ts +6 -0
  548. package/dist/store/report-reads.js +29 -0
  549. package/dist/store/rows.d.ts +9 -19
  550. package/dist/store/rows.js +36 -34
  551. package/dist/store/rule-sql.d.ts +5 -0
  552. package/dist/store/rule-sql.js +37 -0
  553. package/dist/store/search-rows.d.ts +7 -38
  554. package/dist/store/search-rows.js +14 -50
  555. package/dist/store/sessions.d.ts +10 -47
  556. package/dist/store/sessions.js +17 -73
  557. package/dist/store/sqlite/connector-events-group.js +2 -2
  558. package/dist/store/sqlite/entry-writes-group.js +2 -2
  559. package/dist/store/sqlite/error-codec.js +4 -2
  560. package/dist/store/sqlite/executor.d.ts +2 -1
  561. package/dist/store/sqlite/executor.js +2 -1
  562. package/dist/store/sqlite/local.d.ts +3 -3
  563. package/dist/store/sqlite/local.js +1 -0
  564. package/dist/store/sqlite/object-rows.js +6 -3
  565. package/dist/store/sqlite/objects-group.js +4 -2
  566. package/dist/store/sqlite/quarantine-group.js +2 -2
  567. package/dist/store/sqlite/store.d.ts +1 -4
  568. package/dist/store/sqlite/store.js +2 -3
  569. package/dist/store/sqlite/vector-reads-group.js +2 -2
  570. package/dist/store/sqlite/worker-jobs.js +1 -1
  571. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  572. package/dist/store/sqlite/worker-ops.js +13 -2
  573. package/dist/store/sqlite/worker-store.js +5 -2
  574. package/dist/store/summaries.d.ts +10 -62
  575. package/dist/store/summaries.js +34 -146
  576. package/dist/store/summary-dirty.js +1 -1
  577. package/dist/store/tenant-lookup.d.ts +6 -1
  578. package/dist/store/tenant-lookup.js +7 -0
  579. package/dist/store/tenant.d.ts +2 -16
  580. package/dist/store/tenant.js +4 -19
  581. package/dist/store/token-ledger.d.ts +13 -43
  582. package/dist/store/token-ledger.js +19 -50
  583. package/dist/store/usage-reports.js +5 -13
  584. package/dist/store/vector-index.d.ts +46 -0
  585. package/dist/store/vector-index.js +170 -0
  586. package/dist/store/working-memory.d.ts +6 -25
  587. package/dist/store/working-memory.js +18 -52
  588. package/dist/store/yaml.d.ts +1 -5
  589. package/dist/store/yaml.js +2 -6
  590. package/dist/support-bundle.js +7 -5
  591. package/dist/trust/reject-flow.js +1 -3
  592. package/dist/util/anthropic-messages.js +14 -2
  593. package/dist/util/atomic-write.d.ts +2 -1
  594. package/dist/util/atomic-write.js +35 -4
  595. package/dist/util/capped-json.d.ts +6 -0
  596. package/dist/util/capped-json.js +46 -0
  597. package/dist/util/crash-handlers.d.ts +8 -1
  598. package/dist/util/crash-handlers.js +52 -10
  599. package/dist/util/env.d.ts +13 -6
  600. package/dist/util/env.js +14 -7
  601. package/dist/util/home-path.d.ts +2 -1
  602. package/dist/util/home-path.js +4 -2
  603. package/dist/util/http-retry.d.ts +3 -1
  604. package/dist/util/http-retry.js +26 -5
  605. package/dist/util/log.d.ts +3 -2
  606. package/dist/util/log.js +25 -9
  607. package/dist/util/request-scope.d.ts +2 -1
  608. package/dist/util/request-scope.js +2 -1
  609. package/dist/util/secret-detect.d.ts +5 -30
  610. package/dist/util/secret-detect.js +13 -39
  611. package/dist/util/stored-json.d.ts +1 -1
  612. package/dist/util/stored-json.js +1 -1
  613. package/dist/util/token-text.d.ts +1 -4
  614. package/dist/util/token-text.js +1 -4
  615. package/dist/util/transcript-tail.d.ts +2 -0
  616. package/dist/util/transcript-tail.js +24 -23
  617. package/dist/util/version.d.ts +5 -20
  618. package/dist/util/version.js +5 -20
  619. package/extensions/openclaw-plugin/index.ts +1 -1
  620. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  621. package/extensions/openclaw-plugin/package.json +1 -1
  622. package/openclaw.plugin.json +1 -1
  623. package/package.json +1 -1
  624. package/dist/connectors/github/cli-impl.d.ts +0 -25
  625. package/dist/sharing/shared.d.ts +0 -187
  626. package/dist/sharing/shared.js +0 -563
  627. package/dist/store/vector-writes.d.ts +0 -13
  628. package/dist/store/vector-writes.js +0 -89
  629. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
@@ -1,64 +1,17 @@
1
- /**
2
- * Policy first-class object.
3
- *
4
- * The "bi-temporal-first" object type: a named rule/statement that is in force
5
- * over an EFFECTIVE-TIME range and evolves via supersession. Two time axes:
6
- *
7
- * - Valid time (effective time): when the policy is in force in the real world,
8
- * as first-class columns `valid_from` (required; defaults to creation time)
9
- * and `valid_to` (nullable = open-ended). This is the queryable axis: see
10
- * `loadPoliciesAsOf` (the active policies in force at a given valid-time).
11
- * - Transaction time (system time): when the row was recorded / retired, via
12
- * `created_at` + the supersede chain's `superseded_at`. Present, but
13
- * time-travel ("what did we BELIEVE was in force at past system time T") is
14
- * deferred to a future version.
15
- *
16
- * The delta lifecycle reuses the process/decision supersede machinery verbatim
17
- * (superseded_by self-FK + CAS + INSERT-preflight + server-derived version +
18
- * change_summary + supersede tenant-match trigger). It DROPS process's `steps`
19
- * (a policy has `policy_text`) and ADDS `valid_from`/`valid_to`.
20
- *
21
- * The `policies` table is the source of truth (survives memory decay); the
22
- * memory mirror is for recall only. memory_id is NULLABLE with ON DELETE SET
23
- * NULL so forget/consolidate/archive gracefully orphans the policy row.
24
- *
25
- * Lifecycle: active -> superseded (a newer version replaces it) or active ->
26
- * closed (retired with no successor). Superseding leaves the predecessor's
27
- * valid-time range intact (it WAS effective then); only the status flips.
28
- *
29
- * Date handling: every date input (savePolicy's valid_from/valid_to,
30
- * loadPoliciesAsOf's asOfDate) is normalized to canonical ISO-8601 datetime
31
- * (`toISOString`) at the store boundary BEFORE any persist or compare, so the
32
- * fixed-width values sort lexically and the half-open [valid_from, valid_to)
33
- * comparison is correct (a date-only asOf vs a datetime valid_from would
34
- * otherwise make a same-day policy invisible).
35
- *
36
- * Dual-write atomicity: `savePolicy` writes the memory + policies row (and, on
37
- * supersede, the predecessor's UPDATE) in the `objects` store group's one transaction.
38
- */
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. */
39
4
  import { BadRequestError } from '../core/api-errors.js';
40
5
  import { assertTenantId } from '../store/tenant.js';
41
6
  import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
42
7
  import { sqliteObjects } from '../store/sqlite/objects-group.js';
43
- // ---------------------------------------------------------------------------
44
- // Domain types
45
- // ---------------------------------------------------------------------------
46
8
  export const VALID_POLICY_STATES = new Set([
47
9
  'active',
48
10
  'superseded',
49
11
  'closed',
50
12
  ]);
51
- // ---------------------------------------------------------------------------
52
- // Date normalization + validation (the bi-temporal correctness core)
53
- // ---------------------------------------------------------------------------
54
- /**
55
- * Parse + canonicalize a date input to ISO-8601 datetime (`toISOString`). Throws
56
- * on an unparseable value. Whatever `new Date()` accepts is re-emitted in the
57
- * single fixed-width canonical form, so date-only and datetime inputs collapse to
58
- * comparable values and lexical ordering is sound. (Overflow inputs like
59
- * '2026-02-30' roll forward per JS Date semantics rather than throwing; the
60
- * stored value is still canonical.)
61
- */
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. */
62
15
  export function normalizePolicyDate(input, label = 'date') {
63
16
  const d = new Date(input);
64
17
  if (Number.isNaN(d.getTime())) {
@@ -66,10 +19,7 @@ export function normalizePolicyDate(input, label = 'date') {
66
19
  }
67
20
  return d.toISOString();
68
21
  }
69
- /**
70
- * Normalize valid_from (defaulting to `nowIso` when undefined) + valid_to (null
71
- * when undefined), then enforce valid_to > valid_from. Returns the canonical pair.
72
- */
22
+ /** Normalise valid_from (default `nowIso`) and valid_to (default null), then enforce valid_to > valid_from. */
73
23
  export function validatePolicyDates(validFromRaw, validToRaw, nowIso) {
74
24
  const validFrom = validFromRaw !== undefined ? normalizePolicyDate(validFromRaw, 'valid_from') : nowIso;
75
25
  const validTo = validToRaw !== undefined && validToRaw !== null
@@ -113,25 +63,12 @@ export const POLICY = {
113
63
  };
114
64
  },
115
65
  };
116
- // ---------------------------------------------------------------------------
117
- // Public API
118
- // ---------------------------------------------------------------------------
119
- /**
120
- * Create a policy (or a new version that supersedes an existing one). Writes the
121
- * memory mirror + the policies row in the `objects` store group's one transaction.
122
- * valid_from defaults to now; valid_to must be > valid_from (validatePolicyDates).
123
- * When supersedesPolicyId is given, the referenced ACTIVE row is preflighted
124
- * (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same
125
- * transaction; the new version = predecessor.version + 1 (server-derived).
126
- */
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). */
127
68
  export function savePolicy(hippoRoot, tenantId, opts, actor = 'cli') {
128
69
  return saveObjectAt(POLICY, { hippoRoot, tenantId, actor }, opts);
129
70
  }
130
- /**
131
- * Close (retire) an active policy with no successor. CAS guard WHERE
132
- * status='active'; 0 changes distinguishes not-found from not-active. A
133
- * superseded row is terminal and cannot be closed.
134
- */
71
+ /** Close (retire) an active policy with no successor; CAS on status='active', a superseded row is terminal. */
135
72
  export function closePolicy(hippoRoot, tenantId, id, actor = 'cli') {
136
73
  return closeObjectAt(hippoRoot, POLICY, tenantId, id, actor);
137
74
  }
@@ -144,32 +81,8 @@ export function loadPolicies(hippoRoot, tenantId, opts = {}) {
144
81
  export function loadActivePolicies(hippoRoot, tenantId, opts = {}) {
145
82
  return loadPolicies(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
146
83
  }
147
- /**
148
- * The bi-temporal as-of query: the policies in force at `asOfDate` (a valid-time)
149
- * per current knowledge. Half-open interval [valid_from, valid_to): a row covers
150
- * T when valid_from <= asOf AND (valid_to IS NULL OR asOf < valid_to). asOfDate is
151
- * normalized to canonical datetime first so the lexical comparison is sound.
152
- *
153
- * A row is returned when it covers T AND it is the live answer for T:
154
- * - `active` rows that cover T, OR
155
- * - `superseded` rows that cover T BUT whose successor was not yet effective at T
156
- * (successor.valid_from > asOf) - i.e. an earlier version that was genuinely in
157
- * force then. This is the core valid-time correctness: a Jan-Jun policy
158
- * superseded in May is still the answer for `asof March`. Filtering on
159
- * status='active' alone would conflate transaction-time with valid-time; the
160
- * successor-aware filter mirrors the existing recall-history.ts asOf pattern.
161
- *
162
- * `closed` rows are EXCLUDED: closing is a deliberate transaction-time retirement,
163
- * and resurrecting closed policies for a historical valid-time is full
164
- * transaction-time-travel (deferred). Returns an ARRAY (overlapping same-name
165
- * ranges are allowed in v1). Optionally filtered to one policy_name.
166
- *
167
- * Date-only `asOfDate` (YYYY-MM-DD, no time component) resolves to the END
168
- * of that UTC day (23:59:59.999Z), so "as of [day D]" includes a policy that
169
- * became effective at any instant during D - this is the read-side fix for the
170
- * common create-then-asof-today workflow, keeping the stored valid_from honest.
171
- * A full datetime asOf is used as the precise instant.
172
- */
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". */
173
86
  export function loadPoliciesAsOf(hippoRoot, tenantId, asOfDate, opts = {}) {
174
87
  return sqliteObjects(hippoRoot).policiesInForce(tenantId, inForceQuery(tenantId, asOfDate, opts));
175
88
  }
@@ -1,34 +1,6 @@
1
- /**
2
- * Process first-class object.
3
- *
4
- * A `process` is a "living process map": a named, ordered list of steps that
5
- * evolves over time. Unlike `incident` (open->resolved->closed, no supersede),
6
- * `process` REUSES the `decision` supersede path as its delta mechanism: a
7
- * process evolves by being superseded by a NEW VERSION that records what
8
- * changed (`change_summary`) and the full new state (`steps`), carrying a
9
- * server-derived `version` counter. The version chain (walk `superseded_by`)
10
- * is the changelog. Computed structural step-diffing is a deferred v2 read-side
11
- * feature; the row stores enough to reconstruct any delta
12
- * (predecessor.steps + successor.steps + change_summary).
13
- *
14
- * The `processes` table is the source of truth: a process stays `active`
15
- * regardless of memory decay. A memory row mirrors the process for recall but
16
- * is NOT canonical — memory_id is NULLABLE with ON DELETE SET NULL so
17
- * forget/consolidate/archive gracefully orphans the process row.
18
- *
19
- * Lifecycle: active -> superseded (a newer version replaces it; superseded_by
20
- * points to the successor) or active -> closed (retired with no successor;
21
- * only an active head closes).
22
- *
23
- * Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
24
- * enforce processes.tenant_id == the referenced memory's tenant_id, and a
25
- * superseded_by same-tenant trigger makes cross-tenant supersession
26
- * unrepresentable. Mirrors the v30 decisions pattern (src/objects/decisions.ts).
27
- *
28
- * Dual-write atomicity: `saveProcess` hands the memory and the process to the
29
- * `objects` store group, which commits them (and, when superseding, the
30
- * predecessor's UPDATE) together, so a failure in any step rolls all of them back.
31
- */
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. */
32
4
  import type { KeysetPosition } from '../util/keyset.js';
33
5
  import { type JsonValue } from '../util/json.js';
34
6
  import type { SavableDescriptor } from './descriptor.js';
@@ -55,30 +27,13 @@ export interface ListProcessesOpts {
55
27
  /** Resume after this row: the position the previous page ended on. */
56
28
  after?: KeysetPosition;
57
29
  }
58
- /**
59
- * Validate + normalise the steps body. Returns the trimmed step strings
60
- * (trim-then-store, so ' x ' is stored as 'x'). Throws on a non-array, a
61
- * non-string / empty element, or a cap breach. Mirrors the incident DoS-cap
62
- * discipline.
63
- */
30
+ /** Validate and trim the steps body; throws on a non-array, a non-string or empty element, or a cap breach. */
64
31
  export declare function validateProcessSteps(steps: JsonValue): string[];
65
32
  export declare const PROCESS: SavableDescriptor<'process', SaveProcessOpts>;
66
- /**
67
- * Create a process (or a new version that supersedes an existing one). Writes
68
- * the memory mirror + the processes row in the `objects` store group's one
69
- * transaction. When supersedesProcessId is given, the referenced ACTIVE row is
70
- * preflighted (status + version) BEFORE the INSERT, then UPDATEd -> superseded in
71
- * the SAME transaction (CAS: WHERE status='active' AND id != <new id>; throws on
72
- * changes===0 so a duplicate supersede aborts the whole write). The new row's
73
- * version = predecessor.version + 1 (server-derived); change_summary carries the
74
- * delta note. A fresh create has version 1 and change_summary NULL.
75
- */
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. */
76
35
  export declare function saveProcess(hippoRoot: string, tenantId: string, opts: SaveProcessOpts, actor?: string): Process;
77
- /**
78
- * Close (retire) an active process with no successor. Updates the processes row
79
- * only; the memory mirror is not mutated. A superseded row is already
80
- * terminal in the chain and cannot be closed.
81
- */
36
+ /** Close (retire) an active process with no successor; a superseded row cannot be closed. */
82
37
  export declare function closeProcess(hippoRoot: string, tenantId: string, id: number, actor?: string): Process;
83
38
  export declare function loadProcessById(hippoRoot: string, tenantId: string, id: number): Process | null;
84
39
  export declare function loadProcesses(hippoRoot: string, tenantId: string, opts?: ListProcessesOpts): Process[];
@@ -1,40 +1,9 @@
1
- /**
2
- * Process first-class object.
3
- *
4
- * A `process` is a "living process map": a named, ordered list of steps that
5
- * evolves over time. Unlike `incident` (open->resolved->closed, no supersede),
6
- * `process` REUSES the `decision` supersede path as its delta mechanism: a
7
- * process evolves by being superseded by a NEW VERSION that records what
8
- * changed (`change_summary`) and the full new state (`steps`), carrying a
9
- * server-derived `version` counter. The version chain (walk `superseded_by`)
10
- * is the changelog. Computed structural step-diffing is a deferred v2 read-side
11
- * feature; the row stores enough to reconstruct any delta
12
- * (predecessor.steps + successor.steps + change_summary).
13
- *
14
- * The `processes` table is the source of truth: a process stays `active`
15
- * regardless of memory decay. A memory row mirrors the process for recall but
16
- * is NOT canonical — memory_id is NULLABLE with ON DELETE SET NULL so
17
- * forget/consolidate/archive gracefully orphans the process row.
18
- *
19
- * Lifecycle: active -> superseded (a newer version replaces it; superseded_by
20
- * points to the successor) or active -> closed (retired with no successor;
21
- * only an active head closes).
22
- *
23
- * Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
24
- * enforce processes.tenant_id == the referenced memory's tenant_id, and a
25
- * superseded_by same-tenant trigger makes cross-tenant supersession
26
- * unrepresentable. Mirrors the v30 decisions pattern (src/objects/decisions.ts).
27
- *
28
- * Dual-write atomicity: `saveProcess` hands the memory and the process to the
29
- * `objects` store group, which commits them (and, when superseding, the
30
- * predecessor's UPDATE) together, so a failure in any step rolls all of them back.
31
- */
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. */
32
4
  import { BadRequestError } from '../core/api-errors.js';
33
5
  import { isJsonString } from '../util/json.js';
34
6
  import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
35
- // ---------------------------------------------------------------------------
36
- // Domain types
37
- // ---------------------------------------------------------------------------
38
7
  export const VALID_PROCESS_STATES = new Set([
39
8
  'active',
40
9
  'superseded',
@@ -43,15 +12,7 @@ export const VALID_PROCESS_STATES = new Set([
43
12
  /** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
44
13
  export const MAX_PROCESS_STEPS = 200;
45
14
  export const MAX_PROCESS_STEP_LEN = 2000;
46
- // ---------------------------------------------------------------------------
47
- // steps validation (untrusted input)
48
- // ---------------------------------------------------------------------------
49
- /**
50
- * Validate + normalise the steps body. Returns the trimmed step strings
51
- * (trim-then-store, so ' x ' is stored as 'x'). Throws on a non-array, a
52
- * non-string / empty element, or a cap breach. Mirrors the incident DoS-cap
53
- * discipline.
54
- */
15
+ /** Validate and trim the steps body; throws on a non-array, a non-string or empty element, or a cap breach. */
55
16
  export function validateProcessSteps(steps) {
56
17
  if (!Array.isArray(steps)) {
57
18
  throw new BadRequestError('saveProcess: steps must be an array of strings');
@@ -110,27 +71,12 @@ export const PROCESS = {
110
71
  };
111
72
  },
112
73
  };
113
- // ---------------------------------------------------------------------------
114
- // Public API
115
- // ---------------------------------------------------------------------------
116
- /**
117
- * Create a process (or a new version that supersedes an existing one). Writes
118
- * the memory mirror + the processes row in the `objects` store group's one
119
- * transaction. When supersedesProcessId is given, the referenced ACTIVE row is
120
- * preflighted (status + version) BEFORE the INSERT, then UPDATEd -> superseded in
121
- * the SAME transaction (CAS: WHERE status='active' AND id != <new id>; throws on
122
- * changes===0 so a duplicate supersede aborts the whole write). The new row's
123
- * version = predecessor.version + 1 (server-derived); change_summary carries the
124
- * delta note. A fresh create has version 1 and change_summary NULL.
125
- */
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. */
126
76
  export function saveProcess(hippoRoot, tenantId, opts, actor = 'cli') {
127
77
  return saveObjectAt(PROCESS, { hippoRoot, tenantId, actor }, opts);
128
78
  }
129
- /**
130
- * Close (retire) an active process with no successor. Updates the processes row
131
- * only; the memory mirror is not mutated. A superseded row is already
132
- * terminal in the chain and cannot be closed.
133
- */
79
+ /** Close (retire) an active process with no successor; a superseded row cannot be closed. */
134
80
  export function closeProcess(hippoRoot, tenantId, id, actor = 'cli') {
135
81
  return closeObjectAt(hippoRoot, PROCESS, tenantId, id, actor);
136
82
  }
@@ -1,25 +1,6 @@
1
- /**
2
- * Project_brief first-class object.
3
- *
4
- * A `project_brief` is the living, repo-scoped summary of a repository's state: a
5
- * `summary` body scoped to a `repo`, evolving via the supersede delta lifecycle.
6
- * "Auto-refreshes from receipts" is scoped to a DETERMINISTIC (no-LLM) assembler:
7
- * `refreshBrief` gathers the repo's recent receipts (memory rows tagged
8
- * `path:<repo>`) and assembles them into the brief body. The distinguishing
9
- * capability is therefore the refresh assembler (analog of skill's export
10
- * renderer), not an LLM/async pipeline (deferred).
11
- *
12
- * Reuses the skill/process supersede machinery verbatim (superseded_by self-FK +
13
- * CAS + INSERT-preflight + server-derived version + change_summary + supersede
14
- * tenant-match trigger). It DROPS skill's `skill_name`/`trigger_text` and ADDS
15
- * `repo` (the repo-scoping dimension) + `summary` (the brief body).
16
- *
17
- * The `project_briefs` table is the source of truth (survives memory decay); the
18
- * memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
19
- *
20
- * Lifecycle: active -> superseded (a newer version replaces it) or active ->
21
- * closed (retired).
22
- */
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. */
23
4
  import type { KeysetPosition } from '../util/keyset.js';
24
5
  import type { SavableDescriptor } from './descriptor.js';
25
6
  import { type ObjectSaveSite } from './lifecycle.js';
@@ -46,9 +27,8 @@ export interface SaveProjectBriefOpts {
46
27
  supersedesBriefId?: number;
47
28
  /** Extra memory tags merged after ['project_brief']. */
48
29
  extraTags?: string[];
49
- /** Internal: set by refreshBrief to the receipt count so the audit metadata can
50
- * mark the write as an auto-refresh (vs a manual supersede) WITHOUT a 4th audit
51
- * op. Not part of the public CLI/HTTP surface. */
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. */
52
32
  refreshReceiptCount?: number;
53
33
  }
54
34
  export interface ListProjectBriefsOpts {
@@ -60,39 +40,14 @@ export interface ListProjectBriefsOpts {
60
40
  after?: KeysetPosition;
61
41
  }
62
42
  export declare const PROJECT_BRIEF: SavableDescriptor<'project_brief', SaveProjectBriefOpts>;
63
- /**
64
- * Create a project_brief (or a new version that supersedes an existing one). Writes
65
- * the memory mirror + the project_briefs row in the `objects` store group's one
66
- * transaction. When supersedesBriefId is given, the referenced ACTIVE row is
67
- * preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
68
- * in the same transaction; the new version = predecessor.version + 1 (server-derived).
69
- */
43
+ /** Create a project_brief, or a new version superseding an existing one, in the `objects` store group's one transaction. */
70
44
  export declare function saveProjectBrief(hippoRoot: string, tenantId: string, opts: SaveProjectBriefOpts, actor?: string): ProjectBrief;
71
- /**
72
- * Close (retire) an active brief. A superseded row is terminal.
73
- */
45
+ /** Close (retire) an active brief; a superseded row is terminal. */
74
46
  export declare function closeProjectBrief(hippoRoot: string, tenantId: string, id: number, actor?: string): ProjectBrief;
75
47
  export declare function loadProjectBriefById(hippoRoot: string, tenantId: string, id: number): ProjectBrief | null;
76
48
  export declare function loadProjectBriefs(hippoRoot: string, tenantId: string, opts?: ListProjectBriefsOpts): ProjectBrief[];
77
- /**
78
- * The repo's CURRENT active brief, or null. By convention there is one active brief
79
- * per (tenant, repo); if an operator created more than one (the DB does not prevent
80
- * it, consistent with every other first-class object), the MOST-RECENT active row wins.
81
- */
82
- export declare function loadActiveBriefForRepo(hippoRoot: string, tenantId: string, repo: string): ProjectBrief | null;
83
- /**
84
- * Assemble the repo's recent receipts into a deterministic markdown digest, and
85
- * return it WITH the receipt count (the count feeds refreshBrief's change_summary +
86
- * audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
87
- * `summary` is NOT NULL), including the zero-receipts case.
88
- *
89
- * A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
90
- * brief's OWN memory mirror (source='project_brief') is excluded so a brief never
91
- * becomes its own receipt on the next refresh. The match is against the JSON-array
92
- * serialization (each element is a double-quoted string `"path:hippo"`); the
93
- * surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
94
- * `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
95
- */
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`). */
96
51
  export declare function assembleBriefFromReceipts(hippoRoot: string, tenantId: string, repo: string): BriefDigest;
97
52
  /** `assembleBriefFromReceipts` over a served store's group. */
98
53
  export declare function briefFromReceipts(objects: Objects, tenantId: string, repo: string): Promise<BriefDigest>;
@@ -100,7 +55,8 @@ export interface BriefDigest {
100
55
  markdown: string;
101
56
  receiptCount: number;
102
57
  }
103
- /** Saves a new version of the repo's brief from its receipts. The receipts are read before the save's transaction, so a receipt written in between shows in the next refresh. */
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. */
104
60
  export declare function refreshBrief(hippoRoot: string, tenantId: string, repo: string, actor?: string): ProjectBrief;
105
61
  /** `refreshBrief` over a served store's group. */
106
62
  export declare function refreshedBrief(objects: Objects, site: ObjectSaveSite, repo: string): Promise<ProjectBrief>;
@@ -1,33 +1,11 @@
1
- /**
2
- * Project_brief first-class object.
3
- *
4
- * A `project_brief` is the living, repo-scoped summary of a repository's state: a
5
- * `summary` body scoped to a `repo`, evolving via the supersede delta lifecycle.
6
- * "Auto-refreshes from receipts" is scoped to a DETERMINISTIC (no-LLM) assembler:
7
- * `refreshBrief` gathers the repo's recent receipts (memory rows tagged
8
- * `path:<repo>`) and assembles them into the brief body. The distinguishing
9
- * capability is therefore the refresh assembler (analog of skill's export
10
- * renderer), not an LLM/async pipeline (deferred).
11
- *
12
- * Reuses the skill/process supersede machinery verbatim (superseded_by self-FK +
13
- * CAS + INSERT-preflight + server-derived version + change_summary + supersede
14
- * tenant-match trigger). It DROPS skill's `skill_name`/`trigger_text` and ADDS
15
- * `repo` (the repo-scoping dimension) + `summary` (the brief body).
16
- *
17
- * The `project_briefs` table is the source of truth (survives memory decay); the
18
- * memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
19
- *
20
- * Lifecycle: active -> superseded (a newer version replaces it) or active ->
21
- * closed (retired).
22
- */
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. */
23
4
  import { BadRequestError } from '../core/api-errors.js';
24
5
  import { assertTenantId } from '../store/tenant.js';
25
6
  import { checkText, requireLine } from './fields.js';
26
7
  import { closeObjectAt, listObjectsAt, objectByIdAt, saveObject, saveObjectAt } from './lifecycle.js';
27
8
  import { sqliteObjects } from '../store/sqlite/objects-group.js';
28
- // ---------------------------------------------------------------------------
29
- // Domain types
30
- // ---------------------------------------------------------------------------
31
9
  export const VALID_BRIEF_STATES = new Set([
32
10
  'active',
33
11
  'superseded',
@@ -79,22 +57,11 @@ export const PROJECT_BRIEF = {
79
57
  function buildBriefContent(repo, summary) {
80
58
  return `${repo}\n\n${summary}`;
81
59
  }
82
- // ---------------------------------------------------------------------------
83
- // Public API
84
- // ---------------------------------------------------------------------------
85
- /**
86
- * Create a project_brief (or a new version that supersedes an existing one). Writes
87
- * the memory mirror + the project_briefs row in the `objects` store group's one
88
- * transaction. When supersedesBriefId is given, the referenced ACTIVE row is
89
- * preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
90
- * in the same transaction; the new version = predecessor.version + 1 (server-derived).
91
- */
60
+ /** Create a project_brief, or a new version superseding an existing one, in the `objects` store group's one transaction. */
92
61
  export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
93
62
  return saveObjectAt(PROJECT_BRIEF, { hippoRoot, tenantId, actor }, opts);
94
63
  }
95
- /**
96
- * Close (retire) an active brief. A superseded row is terminal.
97
- */
64
+ /** Close (retire) an active brief; a superseded row is terminal. */
98
65
  export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
99
66
  return closeObjectAt(hippoRoot, PROJECT_BRIEF, tenantId, id, actor);
100
67
  }
@@ -104,12 +71,8 @@ export function loadProjectBriefById(hippoRoot, tenantId, id) {
104
71
  export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
105
72
  return listObjectsAt(hippoRoot, PROJECT_BRIEF, tenantId, { status: opts.status, filter: opts.repo, limit: opts.limit, after: opts.after });
106
73
  }
107
- /**
108
- * The repo's CURRENT active brief, or null. By convention there is one active brief
109
- * per (tenant, repo); if an operator created more than one (the DB does not prevent
110
- * it, consistent with every other first-class object), the MOST-RECENT active row wins.
111
- */
112
- export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
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) {
113
76
  assertTenantId('loadActiveBriefForRepo', tenantId);
114
77
  if (repo === '')
115
78
  return null;
@@ -119,9 +82,6 @@ export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
119
82
  function newestActive(repo) {
120
83
  return { status: 'active', filter: repo, limit: 1 };
121
84
  }
122
- // ---------------------------------------------------------------------------
123
- // Refresh assembler (the distinguishing deliverable)
124
- // ---------------------------------------------------------------------------
125
85
  /** Single-line headline for a receipt: first non-empty line, newline-stripped,
126
86
  * truncated. Deterministic + safe for the markdown bullet list. */
127
87
  function receiptHeadline(content) {
@@ -135,17 +95,8 @@ function receiptHeadline(content) {
135
95
  function receiptTag(normalizedRepo) {
136
96
  return `path:${normalizedRepo.toLowerCase()}`;
137
97
  }
138
- // NOTE on ordering: the `id DESC` tiebreak is lexical on a random-ish memory id
139
- // (e.g. `sem_<hex>`), NOT chronological — within the same `created` timestamp the
140
- // order is stable-but-arbitrary, not insertion order. `created DESC` is the real
141
- // recency ordering.
142
- //
143
- // Budget-aware assembly: the digest is the
144
- // brief `summary`, which saveProjectBrief caps at MAX_BRIEF_SUMMARY_LEN. The
145
- // receipt/headline caps (50 x ~200) could otherwise build an ~11KB body that the
146
- // store then REJECTS, breaking refresh for inputs within the advertised caps. So
147
- // include receipt lines newest-first only while they fit under the cap (reserving
148
- // slack for the header + an omission footer), and note the omitted remainder.
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.
149
100
  function fitReceiptLines(receipts) {
150
101
  const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
151
102
  const receiptLines = [];
@@ -185,28 +136,15 @@ function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
185
136
  lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
186
137
  }
187
138
  }
188
- // Belt-and-suspenders: the budget loop keeps us under the cap, but hard-clamp the
189
- // joined string so the store's NOT-NULL/<=cap contract can never be violated even
190
- // for a pathological single oversized line.
139
+ // Belt-and-suspenders: hard-clamp so the store's NOT-NULL/<=cap contract holds even for a single oversized line.
191
140
  let markdown = lines.join('\n');
192
141
  if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
193
142
  markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
194
143
  }
195
144
  return markdown;
196
145
  }
197
- /**
198
- * Assemble the repo's recent receipts into a deterministic markdown digest, and
199
- * return it WITH the receipt count (the count feeds refreshBrief's change_summary +
200
- * audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
201
- * `summary` is NOT NULL), including the zero-receipts case.
202
- *
203
- * A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
204
- * brief's OWN memory mirror (source='project_brief') is excluded so a brief never
205
- * becomes its own receipt on the next refresh. The match is against the JSON-array
206
- * serialization (each element is a double-quoted string `"path:hippo"`); the
207
- * surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
208
- * `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
209
- */
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`). */
210
148
  export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
211
149
  const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
212
150
  return briefDigest(normalizedRepo, sqliteObjects(hippoRoot).briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
@@ -238,7 +176,8 @@ function refreshWrite(normalizedRepo, digest, active) {
238
176
  extraTags: [receiptTag(normalizedRepo)],
239
177
  };
240
178
  }
241
- /** Saves a new version of the repo's brief from its receipts. The receipts are read before the save's transaction, so a receipt written in between shows in the next refresh. */
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. */
242
181
  export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
243
182
  const normalizedRepo = requiredRepo('refreshBrief', tenantId, repo);
244
183
  const digest = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
@@ -1,26 +1,6 @@
1
- /**
2
- * Skills as a first-class, versioned object.
3
- *
4
- * A `skill` is a reusable, agent-followable capability: an `instructions` body
5
- * plus an optional `trigger` ("when to apply"), evolving via the supersede delta
6
- * lifecycle. "Executable" is scoped to an agent-followable INSTRUCTION that, once
7
- * exported into the agent's in-force rules (AGENTS.md / CLAUDE.md) via
8
- * `exportSkills`, is executed by the agent reading it. Literal code/command
9
- * execution is deferred (security; a future sandbox). The distinguishing
10
- * capability is therefore the EXPORT renderer, not a runtime.
11
- *
12
- * Reuses the process/decision supersede machinery verbatim (superseded_by self-FK
13
- * + CAS + INSERT-preflight + server-derived version + change_summary + supersede
14
- * tenant-match trigger). It DROPS process's `steps` (a skill's content is a single
15
- * `instructions` body) and ADDS `trigger` (stored in the `trigger_text` column -
16
- * `trigger` is a SQLite reserved keyword).
17
- *
18
- * The `skills` table is the source of truth (survives memory decay); the memory
19
- * mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
20
- *
21
- * Lifecycle: active -> superseded (a newer version replaces it) or active ->
22
- * closed (retired). Export renders ACTIVE skills only.
23
- */
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. */
24
4
  import type { KeysetPosition } from '../util/keyset.js';
25
5
  import type { SavableDescriptor } from './descriptor.js';
26
6
  import type { Skill, SkillStatus } from '../store/object-types.js';
@@ -54,32 +34,17 @@ export interface ListSkillsOpts {
54
34
  after?: KeysetPosition;
55
35
  }
56
36
  export declare const SKILL: SavableDescriptor<'skill', SaveSkillOpts>;
57
- /**
58
- * Create a skill (or a new version that supersedes an existing one). Writes the
59
- * memory mirror + the skills row in the `objects` store group's one transaction. When
60
- * supersedesSkillId is given, the referenced ACTIVE row is preflighted (status +
61
- * version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
62
- * the new version = predecessor.version + 1 (server-derived).
63
- */
37
+ /** Create a skill, or a new version superseding an existing one, in the `objects` store group's one transaction. */
64
38
  export declare function saveSkill(hippoRoot: string, tenantId: string, opts: SaveSkillOpts, actor?: string): Skill;
65
- /**
66
- * Close (retire) an active skill. A superseded row is terminal.
67
- */
39
+ /** Close (retire) an active skill; a superseded row is terminal. */
68
40
  export declare function closeSkill(hippoRoot: string, tenantId: string, id: number, actor?: string): Skill;
69
41
  export declare function loadSkillById(hippoRoot: string, tenantId: string, id: number): Skill | null;
70
42
  export declare function loadSkills(hippoRoot: string, tenantId: string, opts?: ListSkillsOpts): Skill[];
71
43
  export declare function loadActiveSkills(hippoRoot: string, tenantId: string, opts?: {
72
44
  limit?: number;
73
45
  }): Skill[];
74
- /**
75
- * Render the tenant's ACTIVE skills into ONE AGENTS.md / CLAUDE.md-style markdown
76
- * block (one H2 per skill, ordered by skill_name ASC for determinism), and RETURN
77
- * the string. Does NOT write any file. Returns '' when there are no active skills.
78
- *
79
- * skill_name is single-line (validated on save) so it cannot break the H2 header;
80
- * instructions are emitted verbatim (operator content). Bounded by MAX_EXPORT_SKILLS
81
- * active rows; each field is capped on save, so the rendered string is bounded.
82
- */
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. */
83
48
  export declare function exportSkills(hippoRoot: string, tenantId: string): string;
84
49
  /** `exportSkills` over a served store's group. */
85
50
  export declare function skillsMarkdown(objects: Objects, tenantId: string): Promise<string>;