hippo-memory 1.69.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -0,0 +1,8 @@
1
+ /** Quarantine tier (CD5, AT3): pending/approved/rejected record for a memory `remember` flagged as untrusted. */
2
+ import { QUARANTINE_SCOPE_PREFIX } from '../store/quarantine.js';
3
+ // The scope a held memory is stored under is the table's own rule, so the store module owns it.
4
+ export { quarantineScopeFor } from '../store/quarantine.js';
5
+ export function isQuarantineScope(scope) {
6
+ return scope != null && scope.startsWith(QUARANTINE_SCOPE_PREFIX);
7
+ }
8
+ //# sourceMappingURL=quarantine.js.map
@@ -0,0 +1,23 @@
1
+ import { type RejectedValueRow } from '../store/rejection.js';
2
+ import { type AppliedRejection, type LiftedRejection } from '../store/rejected-values.js';
3
+ export interface RejectFlowOpts {
4
+ hippoRoot: string;
5
+ tenantId: string;
6
+ actor: string;
7
+ reason: string;
8
+ /** By-id form: reject the CURRENT content of an existing memory. */
9
+ memoryId?: string;
10
+ /** Pre-emptive form: reject a value not currently stored (or already gone). */
11
+ value?: string;
12
+ /** The caller's own personal scope: the only personal rows the sweep may remove. Unset (the CLI) skips every personal row. */
13
+ ownScope?: string;
14
+ }
15
+ export type RejectFlowResult = AppliedRejection;
16
+ /** `hippo reject` and `api.reject`: refuses a bad request, then tombstones the value and removes every row in reach that holds it. */
17
+ export declare function rejectValue(opts: RejectFlowOpts): RejectFlowResult;
18
+ export type UnrejectOutcome = LiftedRejection;
19
+ /** `hippo unreject` and `api.unreject`: lifts the one tombstone a digest or prefix names. The only way to allow a rejected value again. */
20
+ export declare function unrejectValue(hippoRoot: string, tenantId: string, digestOrPrefix: string, actor: string): UnrejectOutcome;
21
+ /** `hippo rejections` / `api.listRejections` — list tombstones for a tenant. */
22
+ export declare function listRejectionsForTenant(hippoRoot: string, tenantId: string): RejectedValueRow[];
23
+ //# sourceMappingURL=reject-flow.d.ts.map
@@ -0,0 +1,67 @@
1
+ // The reject, unreject and list flow the CLI verbs and the api functions share: the rules and their wording live here,
2
+ // and src/store/rejected-values.ts runs each one on a single handle.
3
+ import { BadRequestError } from '../core/api-errors.js';
4
+ import { isPersonalScope } from '../store/recall-scope.js';
5
+ import { mergedSuccessor } from '../consolidate/merged-row.js';
6
+ import { normalizeValueForRejection } from '../store/rejection.js';
7
+ import { applyRejection, liftRejection, loadRejectedValues, } from '../store/rejected-values.js';
8
+ function assertRejectOpts(opts) {
9
+ if (!opts.reason.trim()) {
10
+ throw new Error('reject requires a non-empty --reason (the tombstone stores no content; reason is its only identity).');
11
+ }
12
+ if (opts.memoryId === undefined && opts.value === undefined) {
13
+ throw new Error('reject requires either a memory id or --value.');
14
+ }
15
+ if (opts.memoryId !== undefined && opts.value !== undefined) {
16
+ // Enforced here, not only in the CLI parser, so a direct api caller passing both
17
+ // is refused instead of silently getting the memoryId path with `value` ignored.
18
+ throw new Error('reject accepts either a memory id or --value, not both.');
19
+ }
20
+ if (opts.value !== undefined && normalizeValueForRejection(opts.value).length === 0) {
21
+ // Direct api callers can pass strings the CLI flag parser would have
22
+ // refused; an empty-normalized tombstone would refuse nothing meaningful
23
+ // and pollute the listing.
24
+ throw new Error('reject --value requires non-empty content.');
25
+ }
26
+ }
27
+ function contentToReject(opts, row) {
28
+ if (opts.memoryId === undefined)
29
+ return opts.value;
30
+ if (!row || row.tenant_id !== opts.tenantId) {
31
+ throw new Error(`memory not found: ${opts.memoryId}`);
32
+ }
33
+ // A tombstone is tenant-wide, so one made from personal text would show its reason to everyone.
34
+ if (isPersonalScope(row.scope))
35
+ throw new BadRequestError("Personal memories can't be rejected. Use forget to remove it.");
36
+ return row.content;
37
+ }
38
+ /** Every row but another person's personal one, which is outside the caller's recall and so outside its reject. */
39
+ function inReach(opts, scope) {
40
+ return !isPersonalScope(scope) || scope === opts.ownScope;
41
+ }
42
+ /** `hippo reject` and `api.reject`: refuses a bad request, then tombstones the value and removes every row in reach that holds it. */
43
+ export function rejectValue(opts) {
44
+ assertRejectOpts(opts);
45
+ return applyRejection(opts.hippoRoot, {
46
+ tenantId: opts.tenantId,
47
+ actor: opts.actor,
48
+ reason: opts.reason,
49
+ memoryId: opts.memoryId,
50
+ textOf: (source) => contentToReject(opts, source),
51
+ inReach: (scope) => inReach(opts, scope),
52
+ successorOf: mergedSuccessor,
53
+ });
54
+ }
55
+ /** `hippo unreject` and `api.unreject`: lifts the one tombstone a digest or prefix names. The only way to allow a rejected value again. */
56
+ export function unrejectValue(hippoRoot, tenantId, digestOrPrefix, actor) {
57
+ // A blank prefix would match every digest and list the whole tombstone set as ambiguous.
58
+ if (digestOrPrefix.trim().length === 0) {
59
+ return { status: 'not_found' };
60
+ }
61
+ return liftRejection(hippoRoot, tenantId, digestOrPrefix, actor);
62
+ }
63
+ /** `hippo rejections` / `api.listRejections` — list tombstones for a tenant. */
64
+ export function listRejectionsForTenant(hippoRoot, tenantId) {
65
+ return loadRejectedValues(hippoRoot, tenantId);
66
+ }
67
+ //# sourceMappingURL=reject-flow.js.map
@@ -0,0 +1,31 @@
1
+ /** The one Anthropic Messages client: sends one user prompt and returns the reply text or a typed failure the caller reacts to. */
2
+ export interface AnthropicMessageRequest {
3
+ apiKey: string;
4
+ model?: string;
5
+ maxTokens: number;
6
+ prompt: string;
7
+ /** Injected for tests; defaults to the real fetch. */
8
+ fetcher?: typeof fetch;
9
+ }
10
+ export type AnthropicMessageFailure = {
11
+ kind: 'request';
12
+ message: string;
13
+ } | {
14
+ kind: 'http';
15
+ status: number;
16
+ } | {
17
+ kind: 'unreadable';
18
+ message: string;
19
+ };
20
+ export type AnthropicMessageResult = {
21
+ ok: true;
22
+ text: string;
23
+ } | {
24
+ ok: false;
25
+ failure: AnthropicMessageFailure;
26
+ };
27
+ /** The reply's first text block, trimmed (empty when the reply has none); never throws. */
28
+ export declare function sendAnthropicMessage(req: AnthropicMessageRequest): Promise<AnthropicMessageResult>;
29
+ /** The text extraction and DAG summaries hand to their `onError` callback. */
30
+ export declare function describeMessageFailure(failure: AnthropicMessageFailure): string;
31
+ //# sourceMappingURL=anthropic-messages.d.ts.map
@@ -0,0 +1,46 @@
1
+ /** The one Anthropic Messages client: sends one user prompt and returns the reply text or a typed failure the caller reacts to. */
2
+ import { fetchWithRetry, llmTimeoutMs } from './http-retry.js';
3
+ import { errorMessage } from './log.js';
4
+ const MESSAGES_URL = 'https://api.anthropic.com/v1/messages';
5
+ const API_VERSION = '2023-06-01';
6
+ const DEFAULT_MODEL = 'claude-sonnet-4-6';
7
+ /** The reply's first text block, trimmed (empty when the reply has none); never throws. */
8
+ export async function sendAnthropicMessage(req) {
9
+ let res;
10
+ try {
11
+ res = await fetchWithRetry(MESSAGES_URL, {
12
+ method: 'POST',
13
+ headers: {
14
+ 'content-type': 'application/json',
15
+ 'x-api-key': req.apiKey,
16
+ 'anthropic-version': API_VERSION,
17
+ },
18
+ body: JSON.stringify({
19
+ model: req.model ?? DEFAULT_MODEL,
20
+ max_tokens: req.maxTokens,
21
+ messages: [{ role: 'user', content: req.prompt }],
22
+ }),
23
+ }, { timeoutMs: llmTimeoutMs(), fetchFn: req.fetcher ?? fetch });
24
+ }
25
+ catch (err) {
26
+ return { ok: false, failure: { kind: 'request', message: errorMessage(err) } };
27
+ }
28
+ if (!res.ok)
29
+ return { ok: false, failure: { kind: 'http', status: res.status } };
30
+ try {
31
+ const data = await res.json();
32
+ return { ok: true, text: data.content?.[0]?.text?.trim() ?? '' };
33
+ }
34
+ catch (err) {
35
+ return { ok: false, failure: { kind: 'unreadable', message: errorMessage(err) } };
36
+ }
37
+ }
38
+ /** The text extraction and DAG summaries hand to their `onError` callback. */
39
+ export function describeMessageFailure(failure) {
40
+ switch (failure.kind) {
41
+ case 'request': return `request failed: ${failure.message}`;
42
+ case 'http': return `HTTP ${failure.status}`;
43
+ case 'unreadable': return `unparseable response: ${failure.message}`;
44
+ }
45
+ }
46
+ //# sourceMappingURL=anthropic-messages.js.map
@@ -0,0 +1,3 @@
1
+ /** Writes `text` to `file` so a reader sees the old content or the new, never a truncated file: a crash mid-write leaves the old one. */
2
+ export declare function writeFileAtomic(file: string, text: string): void;
3
+ //# sourceMappingURL=atomic-write.d.ts.map
@@ -0,0 +1,107 @@
1
+ // One way to replace a file a user or another program depends on: write a temp file beside it, then rename over it.
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { errorMessage, log } from './log.js';
5
+ const RENAME_RETRY_MS = 1000;
6
+ const WINDOWS_RENAME_REFUSALS = ['EPERM', 'EACCES', 'EBUSY'];
7
+ // A rename can be refused where an in-place write still works (a bind-mounted file, a read-only folder), so these fall back to one.
8
+ const REPLACE_REFUSALS = ['EBUSY', 'EXDEV', 'EACCES', 'EPERM'];
9
+ // Matches the usual SYMLOOP_MAX, so a link cycle ends in an error instead of a hang.
10
+ const MAX_LINK_HOPS = 40;
11
+ function errnoCode(err) {
12
+ return 'code' in err ? String(err.code) : '';
13
+ }
14
+ /** Windows refuses a rename onto a file another program has open, usually for a moment, so a refusal is retried before it is reported. */
15
+ function renameOnto(tmp, target) {
16
+ const deadline = Date.now() + RENAME_RETRY_MS;
17
+ const idle = new Int32Array(new SharedArrayBuffer(4));
18
+ for (let pause = 10;; pause = Math.min(pause * 2, 200)) {
19
+ try {
20
+ fs.renameSync(tmp, target);
21
+ return;
22
+ }
23
+ catch (err) {
24
+ const transient = process.platform === 'win32' && err instanceof Error && WINDOWS_RENAME_REFUSALS.includes(errnoCode(err));
25
+ const left = deadline - Date.now();
26
+ if (!transient || left <= 0)
27
+ throw err;
28
+ Atomics.wait(idle, 0, 0, Math.min(pause, left));
29
+ }
30
+ }
31
+ }
32
+ /** Where a write to `file` lands: through any symlink, a dangling one included, so a dotfile manager's link survives. */
33
+ function writeTarget(file) {
34
+ let target = file;
35
+ for (let hop = 0; hop < MAX_LINK_HOPS && fs.lstatSync(target, { throwIfNoEntry: false })?.isSymbolicLink(); hop++) {
36
+ target = path.resolve(path.dirname(target), fs.readlinkSync(target));
37
+ }
38
+ return fs.existsSync(target) ? fs.realpathSync(target) : target;
39
+ }
40
+ /** Gives the replacement the old file's exact mode (umask trims the create mode) and, for root, its owner. */
41
+ function keepAccess(tmp, old) {
42
+ fs.chmodSync(tmp, old.mode & 0o777);
43
+ if (process.getuid?.() === 0)
44
+ fs.chownSync(tmp, old.uid, old.gid);
45
+ }
46
+ /** Cleanup must not hide the failure that made it necessary, so a cleanup error is logged and the first error stays the one thrown. */
47
+ function removeTemp(tmp) {
48
+ try {
49
+ fs.rmSync(tmp, { force: true });
50
+ }
51
+ catch (err) {
52
+ log.warn(`could not remove the temporary file ${tmp}: ${errorMessage(err)}`);
53
+ }
54
+ }
55
+ function replaceViaTemp(target, text, old) {
56
+ const tmp = `${target}.${process.pid}.tmp`;
57
+ try {
58
+ fs.writeFileSync(tmp, text, { encoding: 'utf8', mode: (old?.mode ?? 0o666) & 0o777 });
59
+ if (old)
60
+ keepAccess(tmp, old);
61
+ renameOnto(tmp, target);
62
+ }
63
+ catch (err) {
64
+ removeTemp(tmp);
65
+ throw err;
66
+ }
67
+ }
68
+ /** The pre-rename write: it truncates first, so it is only the fallback, but it needs just a writable file and keeps hard links together. */
69
+ function writeInPlace(target, text) {
70
+ try {
71
+ fs.writeFileSync(target, text, 'utf8');
72
+ }
73
+ catch (err) {
74
+ if (!(err instanceof Error))
75
+ throw err;
76
+ const reason = errnoCode(err) === 'EBUSY'
77
+ ? 'is in use by another program, so hippo could not replace it; close that program and run the command again'
78
+ : `could not be replaced (${errnoCode(err) || err.message})`;
79
+ throw new Error(`${target} ${reason}`, { cause: err });
80
+ }
81
+ }
82
+ /** Writes `text` to `file` so a reader sees the old content or the new, never a truncated file: a crash mid-write leaves the old one. */
83
+ export function writeFileAtomic(file, text) {
84
+ const target = writeTarget(file);
85
+ const old = fs.statSync(target, { throwIfNoEntry: false });
86
+ if (old === undefined) {
87
+ fs.mkdirSync(path.dirname(target), { recursive: true });
88
+ }
89
+ else {
90
+ // A rename replaces a read-only file that the in-place write refused, and Windows would retry that refusal for a second.
91
+ fs.accessSync(target, fs.constants.W_OK);
92
+ }
93
+ if (old !== undefined && old.nlink > 1) {
94
+ // A rename gives the file a new inode, which would leave the other hard links on the old content.
95
+ writeInPlace(target, text);
96
+ return;
97
+ }
98
+ try {
99
+ replaceViaTemp(target, text, old);
100
+ }
101
+ catch (err) {
102
+ if (!(err instanceof Error) || !REPLACE_REFUSALS.includes(errnoCode(err)))
103
+ throw err;
104
+ writeInPlace(target, text);
105
+ }
106
+ }
107
+ //# sourceMappingURL=atomic-write.js.map
@@ -0,0 +1,5 @@
1
+ /** Exit once stdout and stderr have drained, so the last reply and the last log line reach their reader; capped at 1 s. */
2
+ export declare function exitAfterFlush(code: number): void;
3
+ /** After an uncaught throw the process state is unknown: log the cause, run `shutdown` once, then exit 1 for the supervisor or client to restart it. */
4
+ export declare function installCrashHandlers(name: string, shutdown?: () => void | Promise<void>): void;
5
+ //# sourceMappingURL=crash-handlers.d.ts.map
@@ -0,0 +1,30 @@
1
+ // Last-resort process handlers shared by the long-running entry points (`hippo mcp`, `hippo serve`).
2
+ import { errorFields, errorMessage, log } from './log.js';
3
+ /** Exit once stdout and stderr have drained, so the last reply and the last log line reach their reader; capped at 1 s. */
4
+ export function exitAfterFlush(code) {
5
+ process.exitCode = code;
6
+ let pending = 2;
7
+ const done = () => { if (--pending === 0)
8
+ process.exit(code); };
9
+ process.stdout.write('', done);
10
+ process.stderr.write('', done);
11
+ setTimeout(() => process.exit(code), 1000).unref();
12
+ }
13
+ /** After an uncaught throw the process state is unknown: log the cause, run `shutdown` once, then exit 1 for the supervisor or client to restart it. */
14
+ export function installCrashHandlers(name, shutdown = () => { }) {
15
+ let crashing = false;
16
+ const crash = (kind, err) => {
17
+ log.error(`${name} ${kind}: ${errorMessage(err)}`, errorFields(err));
18
+ // A throw while shutdown runs is logged above and must not start it again.
19
+ if (crashing)
20
+ return;
21
+ crashing = true;
22
+ Promise.resolve()
23
+ .then(shutdown)
24
+ .catch((shutdownErr) => log.error(`${name} shutdown after ${kind} failed: ${errorMessage(shutdownErr)}`, errorFields(shutdownErr)))
25
+ .finally(() => exitAfterFlush(1));
26
+ };
27
+ process.on('uncaughtException', (err) => crash('uncaught exception', err));
28
+ process.on('unhandledRejection', (err) => crash('unhandled rejection', err));
29
+ }
30
+ //# sourceMappingURL=crash-handlers.js.map
@@ -12,8 +12,6 @@ export declare function envAblateRecency(): boolean;
12
12
  export declare function envEvalRecencyDays(): number | null;
13
13
  /** HIPPO_FAKE_NOW as epoch millis, or null unless it is byte-identical to Date.toISOString output. */
14
14
  export declare function envFakeNowMs(): number | null;
15
- export declare function envTestDeliveryFault(): string;
16
- export declare function envForceLikePath(): boolean;
17
15
  export declare function envLossAversionRatio(): string | undefined;
18
16
  export declare function envSummaryDeboost(): string | undefined;
19
17
  export declare function envAutodebiasOff(): boolean;
@@ -40,14 +38,29 @@ export declare function envRequireServer(): boolean;
40
38
  export declare function envRequireSessionScopedFreshTail(): boolean;
41
39
  export declare function envStdinWaitMs(): number | undefined;
42
40
  export declare function envLogLevel(): string;
41
+ /** `HIPPO_LOG_FORMAT=json` writes each log line as one JSON object; anything else keeps the text line. */
42
+ export declare function envLogJson(): boolean;
43
43
  export declare function envPort(): string | undefined;
44
44
  /** How long a client waits for a running server's /health before writing to the store directly; server-detect.ts holds the default. */
45
45
  export declare function envHealthProbeMs(): number | undefined;
46
46
  export declare function envRequireAuth(): boolean;
47
47
  export declare function envV1Rps(): string | undefined;
48
+ /** How long a request body may take to arrive; http-util.ts holds the default. */
49
+ export declare function envBodyTimeoutMs(): number | undefined;
50
+ /** How long POST /v1/sleep lets its consolidation run; server/sleep-offload.ts holds the default. */
51
+ export declare function envSleepTimeoutMs(): number | undefined;
52
+ /** How long a /v1 or /mcp request may run before the server answers 504, 0 for no deadline; server/deadline.ts holds the default. */
53
+ export declare function envRequestDeadlineMs(): number | undefined;
54
+ /** How many store calls may wait for one worker thread before the next is refused; store/sqlite/executor.ts holds the default. */
55
+ export declare function envStoreQueueMax(): number | undefined;
56
+ /** How long the daily runner lets one child `hippo` step run; cli/setup.ts holds the default. */
57
+ export declare function envDailyStepTimeoutMs(): number | undefined;
48
58
  export declare function envApiKey(): string | undefined;
49
59
  export declare function envClientIpHeader(): string | undefined;
50
60
  export declare function envTrustedProxies(): string | undefined;
61
+ /** Paths to the PEM certificate and key `hippo serve` answers HTTPS with; the --tls-cert and --tls-key flags win. */
62
+ export declare function envTlsCert(): string | undefined;
63
+ export declare function envTlsKey(): string | undefined;
51
64
  export declare function envMcpSseMaxStreams(): number | undefined;
52
65
  export declare function envMcpSseHeartbeatMs(): number | undefined;
53
66
  export declare function envMcpSseMaxAgeSec(): number | undefined;
@@ -15,6 +15,11 @@ function positiveInt(name) {
15
15
  const parsed = Number.parseInt(raw(name) ?? '', 10);
16
16
  return parsed > 0 ? parsed : undefined;
17
17
  }
18
+ /** parseInt, kept from zero up, for a setting whose 0 means off. */
19
+ function nonNegativeInt(name) {
20
+ const parsed = Number.parseInt(raw(name) ?? '', 10);
21
+ return parsed >= 0 ? parsed : undefined;
22
+ }
18
23
  /** Trimmed, with an empty or whitespace-only value read as unset. */
19
24
  function trimmed(name) {
20
25
  return raw(name)?.trim() || undefined;
@@ -48,8 +53,6 @@ export function envFakeNowMs() {
48
53
  const parsed = Date.parse(value);
49
54
  return Number.isFinite(parsed) && new Date(parsed).toISOString() === value ? parsed : null;
50
55
  }
51
- export function envTestDeliveryFault() { return raw('HIPPO_TEST_DELIVERY_FAULT') ?? ''; }
52
- export function envForceLikePath() { return isOne('HIPPO_FORCE_LIKE_PATH'); }
53
56
  export function envLossAversionRatio() { return raw('HIPPO_LOSS_AVERSION_RATIO'); }
54
57
  export function envSummaryDeboost() { return raw('HIPPO_SUMMARY_DEBOOST'); }
55
58
  export function envAutodebiasOff() { return raw('HIPPO_AUTODEBIAS') === 'off'; }
@@ -81,15 +84,30 @@ export function envRequireServer() { return isOneOrTrue('HIPPO_REQUIRE_SERVER');
81
84
  export function envRequireSessionScopedFreshTail() { return isOne('HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL'); }
82
85
  export function envStdinWaitMs() { return positiveInt('HIPPO_STDIN_WAIT_MS'); }
83
86
  export function envLogLevel() { return raw('HIPPO_LOG')?.trim().toLowerCase() ?? ''; }
87
+ /** `HIPPO_LOG_FORMAT=json` writes each log line as one JSON object; anything else keeps the text line. */
88
+ export function envLogJson() { return raw('HIPPO_LOG_FORMAT')?.trim().toLowerCase() === 'json'; }
84
89
  // Server.
85
90
  export function envPort() { return raw('HIPPO_PORT'); }
86
91
  /** How long a client waits for a running server's /health before writing to the store directly; server-detect.ts holds the default. */
87
92
  export function envHealthProbeMs() { return positiveInt('HIPPO_HEALTH_PROBE_MS'); }
88
93
  export function envRequireAuth() { return isOne('HIPPO_REQUIRE_AUTH'); }
89
94
  export function envV1Rps() { return raw('HIPPO_V1_RPS'); }
95
+ /** How long a request body may take to arrive; http-util.ts holds the default. */
96
+ export function envBodyTimeoutMs() { return positiveInt('HIPPO_BODY_TIMEOUT_MS'); }
97
+ /** How long POST /v1/sleep lets its consolidation run; server/sleep-offload.ts holds the default. */
98
+ export function envSleepTimeoutMs() { return positiveInt('HIPPO_SLEEP_TIMEOUT_MS'); }
99
+ /** How long a /v1 or /mcp request may run before the server answers 504, 0 for no deadline; server/deadline.ts holds the default. */
100
+ export function envRequestDeadlineMs() { return nonNegativeInt('HIPPO_REQUEST_DEADLINE_MS'); }
101
+ /** How many store calls may wait for one worker thread before the next is refused; store/sqlite/executor.ts holds the default. */
102
+ export function envStoreQueueMax() { return positiveInt('HIPPO_STORE_QUEUE_MAX'); }
103
+ /** How long the daily runner lets one child `hippo` step run; cli/setup.ts holds the default. */
104
+ export function envDailyStepTimeoutMs() { return positiveInt('HIPPO_DAILY_STEP_TIMEOUT_MS'); }
90
105
  export function envApiKey() { return raw('HIPPO_API_KEY'); }
91
106
  export function envClientIpHeader() { return raw('HIPPO_CLIENT_IP_HEADER')?.trim().toLowerCase(); }
92
107
  export function envTrustedProxies() { return raw('HIPPO_TRUSTED_PROXIES'); }
108
+ /** Paths to the PEM certificate and key `hippo serve` answers HTTPS with; the --tls-cert and --tls-key flags win. */
109
+ export function envTlsCert() { return trimmed('HIPPO_TLS_CERT'); }
110
+ export function envTlsKey() { return trimmed('HIPPO_TLS_KEY'); }
93
111
  export function envMcpSseMaxStreams() { return positiveInt('MCP_SSE_MAX_STREAMS'); }
94
112
  export function envMcpSseHeartbeatMs() { return positiveInt('MCP_SSE_HEARTBEAT_MS'); }
95
113
  export function envMcpSseMaxAgeSec() { return positiveInt('MCP_SSE_MAX_AGE_SEC'); }
@@ -0,0 +1,67 @@
1
+ // Home-directory paths name their user, so text bound for a shared store tests or masks them here; no imports keep it light.
2
+ // VS Code writes file links URL-encoded, so a separator may be %5C or %2F.
3
+ const WIN_SEP = String.raw `(?:[\\/]|%5[Cc]|%2[Ff])`;
4
+ const WIN_CHAR = String.raw `(?:(?!%5[Cc]|%2[Ff])[^\\/:*?"<>|\s])`;
5
+ // A Windows name never holds a quote, so JSON stops it; one with spaces runs to a separator, quote, closing mark or line end, leaving the mark, as stopping at its first word leaks the surname.
6
+ const WIN_USER = String.raw `(?:${WIN_CHAR}+(?: ${WIN_CHAR}+){0,3}(?=${WIN_SEP}|["'\`)\]>,;]|\.(?=\s|$)|(?<!\.)(?:[^\S ]|$))(?<![\`)\],;'])|${WIN_CHAR}+)`;
7
+ // Slash-led homes with their case spelled out and no flag, so one pattern can hold all four: Git Bash and WSL mounts, Linux, root and macOS.
8
+ const MOUNT_HOME = String.raw `(?:\/[Mm][Nn][Tt])?\/[A-Za-z]\/[Uu][Ss][Ee][Rr][Ss]\/${WIN_USER}`;
9
+ const LINUX_HOME = String.raw `(?:\/var)?\/home\/[^/\s]+`;
10
+ const ROOT_HOME = String.raw `(?:\/var)?\/root(?![\w.-])`;
11
+ const MAC_HOME = String.raw `\/Users\/[^/\s]+`;
12
+ const DRIVE_HOME = new RegExp(String.raw `[A-Za-z](?::|%3A)${WIN_SEP}+(?:Users|Documents and Settings)${WIN_SEP}+${WIN_USER}`, 'i');
13
+ const LONG_PATH = /\\\\\?\\/;
14
+ const SHARE_HOME = new RegExp(String.raw `\\\\[^\\/\s]+\\+(?:homes?|users|profiles?)\$?\\+${WIN_USER}`, 'i');
15
+ const SHORT_NAME = /[\\/][A-Z0-9_$]{1,6}~\d{1,6}(?:\.[A-Z0-9]{1,3})?(?![\w~])|\b[A-Z0-9_$]{1,6}~\d{1,6}(?:\.[A-Z0-9]{1,3})?[\\/]/;
16
+ // A slash-led home counts only at the start of a path, so each takes a guard against the text before it.
17
+ const MOUNT_START = String.raw `(?<![\w.])${MOUNT_HOME}`;
18
+ const LINUX_START = String.raw `(?<![\w.~-])${LINUX_HOME}`;
19
+ const ROOT_START = String.raw `(?<![\w.~-])${ROOT_HOME}`;
20
+ const MAC_START = String.raw `(?<![\w.~-])${MAC_HOME}`;
21
+ /** One pattern per path shape that carries a user name: Windows, Git Bash and WSL mounts, extended-length, UNC home shares, Linux, macOS and 8.3 short names. */
22
+ export const USER_SEGMENT = [
23
+ DRIVE_HOME,
24
+ new RegExp(MOUNT_START),
25
+ LONG_PATH,
26
+ SHARE_HOME,
27
+ new RegExp(LINUX_START),
28
+ new RegExp(ROOT_START),
29
+ new RegExp(MAC_START),
30
+ SHORT_NAME,
31
+ ];
32
+ const MASK = '[home]';
33
+ // Global copies, so the shared test patterns keep their lastIndex at 0.
34
+ const allOf = (re) => new RegExp(re.source, `${re.flags}g`);
35
+ const [DRIVE_HOMES, LONG_PATHS, SHARE_HOMES, SHORT_NAMES] = [DRIVE_HOME, LONG_PATH, SHARE_HOME, SHORT_NAME].map(allOf);
36
+ // A home glued after another starts where a mask will end, which no guard refuses: one match takes the whole run, as masking one a pass costs a pass per home.
37
+ // A run holds only shapes whose own step is not still to come, so a later step meets the same text it would without the run.
38
+ const runFrom = (start, ...glued) => new RegExp(`${start}(?:${glued.join('|')})*`, 'g');
39
+ const MOUNT_RUNS = runFrom(MOUNT_START, MOUNT_HOME);
40
+ const LINUX_RUNS = runFrom(LINUX_START, MOUNT_HOME, LINUX_HOME);
41
+ const ROOT_RUNS = runFrom(ROOT_START, MOUNT_HOME, LINUX_HOME, ROOT_HOME);
42
+ const MAC_RUNS = runFrom(MAC_START, MOUNT_HOME, LINUX_HOME, ROOT_HOME, MAC_HOME);
43
+ const SLASH_HOMES = new RegExp(`${MOUNT_HOME}|${LINUX_HOME}|${ROOT_HOME}|${MAC_HOME}`, 'g');
44
+ const maskRun = (run) => MASK.repeat(run.match(SLASH_HOMES)?.length ?? 1);
45
+ function maskOnce(text) {
46
+ return text
47
+ .replace(DRIVE_HOMES, MASK)
48
+ .replace(MOUNT_RUNS, maskRun)
49
+ .replace(LONG_PATHS, MASK)
50
+ .replace(SHARE_HOMES, MASK)
51
+ .replace(LINUX_RUNS, maskRun)
52
+ .replace(ROOT_RUNS, maskRun)
53
+ .replace(MAC_RUNS, maskRun)
54
+ .replace(SHORT_NAMES, MASK);
55
+ }
56
+ /** `text` with each home-directory segment replaced by `[home]`. */
57
+ export function maskHomePaths(text) {
58
+ let out = text;
59
+ let next = maskOnce(out);
60
+ // A mask can uncover a home path its text was hiding, so passes repeat until one changes nothing; each takes a separator out, so they end.
61
+ while (next !== out) {
62
+ out = next;
63
+ next = maskOnce(out);
64
+ }
65
+ return out;
66
+ }
67
+ //# sourceMappingURL=home-path.js.map
@@ -1,4 +1,4 @@
1
- /** One retry policy for outbound HTTP: a timeout on every attempt, and backoff on 429 and 5xx only. */
1
+ /** One retry policy for outbound HTTP: a timeout on every attempt, backoff on 429 and 5xx, and on a dropped connection where a replay is safe. */
2
2
  export interface RetryPolicy {
3
3
  /** Per-attempt limit; a stalled peer ends as a thrown `TimeoutError`, never a hang. */
4
4
  timeoutMs: number;
@@ -9,6 +9,8 @@ export interface RetryPolicy {
9
9
  maxDelayMs?: number;
10
10
  /** Which responses to retry; defaults to 429 and 5xx. A write narrows it to answers that prove nothing committed. */
11
11
  retryOn?: (res: Response) => boolean;
12
+ /** Also retry a dropped connection or a timed-out attempt. On for GET and HEAD; any other method turns it on only when a replay cannot commit twice. */
13
+ retryTransport?: boolean;
12
14
  fetchFn?: typeof fetch;
13
15
  sleep?: (ms: number) => Promise<void>;
14
16
  random?: () => number;
@@ -18,6 +20,8 @@ export declare function llmTimeoutMs(): number;
18
20
  export declare function isRetryableStatus(status: number): boolean;
19
21
  /** Retry-After as milliseconds: delta-seconds or an HTTP date; null when absent or unreadable. */
20
22
  export declare function parseRetryAfterMs(header: string | null, now?: number): number | null;
21
- /** `fetch` with a per-attempt timeout and up to `attempts` tries on 429 and 5xx; the last response comes back as is and transport errors throw at once. */
23
+ /** A dropped connection, a DNS hiccup or a timed-out attempt: faults a second try can clear. A refused connection is not one. */
24
+ export declare function isTransientTransportError<E>(err: E): boolean;
25
+ /** `fetch` with a per-attempt timeout and up to `attempts` tries on 429, 5xx and (see `retryTransport`) transport faults; the last response or error comes back as is. */
22
26
  export declare function fetchWithRetry(url: string | URL, init: RequestInit, policy: RetryPolicy): Promise<Response>;
23
27
  //# sourceMappingURL=http-retry.d.ts.map
@@ -1,4 +1,4 @@
1
- /** One retry policy for outbound HTTP: a timeout on every attempt, and backoff on 429 and 5xx only. */
1
+ /** One retry policy for outbound HTTP: a timeout on every attempt, backoff on 429 and 5xx, and on a dropped connection where a replay is safe. */
2
2
  import { envLlmTimeoutMs } from './env.js';
3
3
  const DEFAULT_ATTEMPTS = 3;
4
4
  const DEFAULT_BASE_DELAY_MS = 250;
@@ -21,8 +21,26 @@ export function parseRetryAfterMs(header, now = Date.now()) {
21
21
  const at = Date.parse(header);
22
22
  return Number.isNaN(at) ? null : Math.max(0, at - now);
23
23
  }
24
+ // Node's fetch reports a broken socket as a bare `fetch failed` with one of these on its cause.
25
+ const TRANSIENT_CODES = new Set([
26
+ 'ECONNRESET', 'ETIMEDOUT', 'EAI_AGAIN', 'UND_ERR_SOCKET', 'UND_ERR_CONNECT_TIMEOUT', 'UND_ERR_HEADERS_TIMEOUT',
27
+ ]);
28
+ /** A dropped connection, a DNS hiccup or a timed-out attempt: faults a second try can clear. A refused connection is not one. */
29
+ export function isTransientTransportError(err) {
30
+ if (!(err instanceof Error))
31
+ return false;
32
+ if (err.name === 'TimeoutError')
33
+ return true;
34
+ const holder = err.cause instanceof Object ? err.cause : err;
35
+ const code = 'code' in holder ? String(holder.code) : '';
36
+ return TRANSIENT_CODES.has(code) || err.message.toLowerCase().includes('socket hang up');
37
+ }
38
+ function isIdempotent(method) {
39
+ const verb = (method ?? 'GET').toUpperCase();
40
+ return verb === 'GET' || verb === 'HEAD';
41
+ }
24
42
  const realSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
25
- /** `fetch` with a per-attempt timeout and up to `attempts` tries on 429 and 5xx; the last response comes back as is and transport errors throw at once. */
43
+ /** `fetch` with a per-attempt timeout and up to `attempts` tries on 429, 5xx and (see `retryTransport`) transport faults; the last response or error comes back as is. */
26
44
  export async function fetchWithRetry(url, init, policy) {
27
45
  const fetchFn = policy.fetchFn ?? fetch;
28
46
  const attempts = Math.max(1, policy.attempts ?? DEFAULT_ATTEMPTS);
@@ -31,21 +49,34 @@ export async function fetchWithRetry(url, init, policy) {
31
49
  const sleep = policy.sleep ?? realSleep;
32
50
  const random = policy.random ?? Math.random;
33
51
  const retryOn = policy.retryOn ?? ((res) => isRetryableStatus(res.status));
52
+ const retryTransport = policy.retryTransport ?? isIdempotent(init.method);
53
+ // Jitter over the upper half keeps parallel callers from retrying in lockstep.
54
+ const backoffMs = (attempt) => {
55
+ const ceiling = Math.min(maxDelayMs, baseDelayMs * 2 ** (attempt - 1));
56
+ return ceiling / 2 + random() * (ceiling / 2);
57
+ };
34
58
  for (let attempt = 1;; attempt++) {
35
59
  const timeout = AbortSignal.timeout(policy.timeoutMs);
36
60
  const signal = init.signal ? AbortSignal.any([init.signal, timeout]) : timeout;
37
- const res = await fetchFn(url, { ...init, signal });
61
+ let res;
62
+ try {
63
+ res = await fetchFn(url, { ...init, signal });
64
+ }
65
+ catch (err) {
66
+ // The caller's own abort is a decision, not a fault, so it ends the call.
67
+ if (!retryTransport || attempt >= attempts || init.signal?.aborted || !isTransientTransportError(err))
68
+ throw err;
69
+ await sleep(backoffMs(attempt));
70
+ continue;
71
+ }
38
72
  if (!retryOn(res) || attempt >= attempts)
39
73
  return res;
40
74
  const retryAfter = parseRetryAfterMs(res.headers.get('retry-after'));
41
75
  if (retryAfter !== null && retryAfter > maxDelayMs)
42
76
  return res;
43
- // Jitter over the upper half keeps parallel callers from retrying in lockstep.
44
- const ceiling = Math.min(maxDelayMs, baseDelayMs * 2 ** (attempt - 1));
45
- const delay = retryAfter ?? ceiling / 2 + random() * (ceiling / 2);
46
77
  // Frees the pooled socket before the next attempt.
47
78
  await res.body?.cancel();
48
- await sleep(delay);
79
+ await sleep(retryAfter ?? backoffMs(attempt));
49
80
  }
50
81
  }
51
82
  //# sourceMappingURL=http-retry.js.map
@@ -1,7 +1,6 @@
1
1
  import type { IncomingMessage, ServerResponse } from 'node:http';
2
- import type { JsonValue } from './json.js';
3
- export declare function isJsonObjectRecord(value: JsonValue | undefined): value is Record<string, JsonValue>;
4
2
  export declare function isHeaderString(value: string | string[] | undefined): value is string;
3
+ export declare const MAX_BODY_BYTES: number;
5
4
  export declare const MAX_ID_LEN = 256;
6
5
  export declare const JSON_HEADERS: {
7
6
  readonly 'content-type': "application/json";
@@ -12,6 +11,11 @@ export declare class HttpError extends Error {
12
11
  readonly retryAfterSec: number | undefined;
13
12
  constructor(status: number, message: string, retryAfterSec?: number);
14
13
  }
14
+ /** A request, or a store call it waited on, ran past the request's deadline; the reply carries `code` so a client branches without parsing prose. */
15
+ export declare class DeadlineExceededError extends HttpError {
16
+ readonly code = "deadline_exceeded";
17
+ constructor(message: string);
18
+ }
15
19
  export declare class BodyTooLargeError extends Error {
16
20
  }
17
21
  /** The body did not arrive in time. Its own class so mapApiError answers 408 and the server drops the socket. */
@@ -29,10 +33,12 @@ export declare const STORE_NOT_PORTED_MESSAGE = "store_not_ported";
29
33
  export declare function mapApiError<E>(err: E): ApiErrorReply;
30
34
  /** Serialises before the head goes out, so a body that is not JSON still reaches the caller's error reply. */
31
35
  export declare function sendJson<T>(res: ServerResponse, status: number, body: T): void;
36
+ /** How long any route waits for a request body, so a client that sends headers and then stalls cannot hold a request open: 30 s, or HIPPO_BODY_TIMEOUT_MS. */
37
+ export declare function bodyDeadlineMs(): number;
32
38
  export interface ReadBodyOpts {
33
39
  /** Defaults to 1 MB. */
34
40
  maxBytes?: number;
35
- /** Fails with BodyTimeoutError when the whole body has not arrived by then; unset waits for as long as the socket stays open. */
41
+ /** Fails with BodyTimeoutError when the whole body has not arrived by then; defaults to bodyDeadlineMs(). */
36
42
  deadlineMs?: number;
37
43
  }
38
44
  /** The body as text, refused mid-stream past maxBytes and past deadlineMs, so an oversized or slow sender cannot tie up the server. */
@@ -47,6 +53,11 @@ export interface WebhookRequest {
47
53
  res: ServerResponse;
48
54
  opts: {
49
55
  hippoRoot: string;
56
+ webhookBodyDeadlineMs?: number;
50
57
  };
51
58
  }
59
+ /** Call before refusing a webhook unread: a caller still sending its body loses the socket once the reply is out, as it does after a 413. */
60
+ export declare function closeIfBodyUnread({ req, res }: WebhookRequest): void;
61
+ /** A webhook's raw body, exactly as sent, for the receiver's HMAC check; call it only once a secret is configured and the signature headers are present. */
62
+ export declare function readWebhookBody({ req, opts }: WebhookRequest): Promise<string>;
52
63
  //# sourceMappingURL=http-util.d.ts.map