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,22 +1,5 @@
1
- /**
2
- * Secret detection for memory content (memory scope isolation).
3
- *
4
- * Conservative, provider-bounded patterns only - a bare `sk-` in prose must
5
- * NOT flag. Detection gates two surfaces:
6
- * - producer: shareMemory/autoShare never promote flagged rows to the
7
- * global store;
8
- * - consumer: ambient context (getContext) never injects a flagged row
9
- * outside its owning project, and never anywhere when the row has no
10
- * project origin. Explicit recall is unaffected - recalling a secret is
11
- * a deliberate act.
12
- *
13
- * This is deliberately a thin slice of lifecycle compliance
14
- * (no PII detection). Write-time scrubbing covers only text no person
15
- * typed into hippo; see `vetSecrets`.
16
- *
17
- * Leaf module: keep free of imports from store/api/shared so all of them
18
- * can import it without cycles.
19
- */
1
+ /** Secret detection for memory content: conservative provider-bounded patterns (a bare `sk-` in prose must not flag). Flagged rows are never shared to
2
+ * the global store or injected as ambient context outside their project; explicit recall is unaffected. Leaf module: no imports from store/api/shared. */
20
3
  /** Tags that flag a memory as secret, lower case; detectSecret folds a tag's case before the lookup. */
21
4
  export const SECRET_TAGS = new Set([
22
5
  'secret', 'api-key', 'apikey', 'credential', 'credentials',
@@ -26,7 +9,8 @@ const SECRET_PATTERNS = [
26
9
  { name: 'aws-access-key', re: /\bAKIA[0-9A-Z]{16}\b/ },
27
10
  { name: 'github-token', re: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36}\b/ },
28
11
  { name: 'github-fine-grained-pat', re: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/ },
29
- // A token may end in a hyphen, where `\b` holds only before a word character: a class that holds `-` runs to its end, and a fixed length may also close on a hyphen.
12
+ // A token may end in a hyphen, where `\b` holds only before a word character: a class
13
+ // that holds `-` runs to its end, and a fixed length may also close on a hyphen.
30
14
  { name: 'slack-token', re: /\bxox[baprs]-[A-Za-z0-9-]{10,}/ },
31
15
  { name: 'stripe-key', re: /\b[sr]k_(?:live|test)_[A-Za-z0-9]{16,}\b/ },
32
16
  { name: 'google-api-key', re: /\bAIza[0-9A-Za-z_-]{35}(?:\b|(?<=-))/ },
@@ -38,15 +22,12 @@ const SECRET_PATTERNS = [
38
22
  { name: 'google-oauth-token', re: /\bya29\.[\w-]{20,}/ },
39
23
  { name: 'slack-webhook', re: /\bhooks\.slack\.com\/(?:services|workflows|triggers)\/[A-Za-z0-9+/]{43,56}/ },
40
24
  { name: 'private-key-block', re: /-----BEGIN [A-Z ]*PRIVATE KEY-----/ },
41
- // sk-... (OpenAI/Anthropic style) and sk_<vendor>_... shapes. Both require
42
- // a key-ish noun somewhere in the content (co-occurrence guard) so prose
43
- // like "the sk- prefix identifies API keys" without an actual long token
44
- // does not flag, but a stored key ("prod API key sk_live_...")
45
- // does.
25
+ // sk-... (OpenAI/Anthropic) and sk_<vendor>_... shapes; both need a key-ish noun in the content (co-occurrence guard), so prose
26
+ // like "the sk- prefix identifies API keys" does not flag but "prod API key sk_live_..." does.
46
27
  { name: 'sk-style-key', re: /\bsk-[A-Za-z0-9_-]{20,}/ },
47
28
  { name: 'sk-underscore-key', re: /\bsk_[A-Za-z0-9]+_[A-Za-z0-9_]{6,}\b/ },
48
- // The value needs 12+ token-safe chars and a digit, or `token = estimateTokens(...)` and doc templates like user:password@ would hide code lessons from ambient context.
49
- // Secret names end in the keyword (dbPassword, PGPASSWORD) and token_url does not, so the match opens there and scans no prefix; pwd and pass need a _ as OLDPWD and bypass are not secrets.
29
+ // Value needs 12+ token-safe chars and a digit, or `token = estimateTokens(...)` and user:password@ templates would hide code lessons from ambient context.
30
+ // Secret names end in the keyword (dbPassword), so the match opens there, no prefix scan; pwd and pass need a _ (OLDPWD, bypass are not secrets).
50
31
  { name: 'secret-assignment', re: /(?:(?:api[_-]?key|access[_-]?key|private[_-]?key|secret|token|passw(?:or)?d|(?<=_)(?:pwd|pass))(?:[_-]?(?:key(?:[_-]?base)?|value|secret))?['"]?\s*(?::=?|=>?)\s*['"]?|(?<=--)password(?:=|\s+))(?=[A-Za-z0-9_\-+/]*\d)[A-Za-z0-9_\-+/=]{12,}/i },
51
32
  { name: 'url-password', re: /(?<=[A-Za-z0-9]:\/\/)[^\s/:@?#]*:(?=[^\s/@?#]*\d)[^\s/@?#]+(?=@)/ },
52
33
  ];
@@ -59,10 +40,7 @@ const STRICT_ONLY_PATTERNS = [
59
40
  /(?<![A-Za-z0-9_-])eyJ[A-Za-z0-9_-]{8,}\.eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]*/g,
60
41
  /(?<=[A-Za-z0-9]:\/\/)[^\s/:@?#]*:[^\s/@?#]+(?=@)/g,
61
42
  ];
62
- /**
63
- * Scan a memory's tags + content for secret material.
64
- * Pure and deterministic; no filesystem or store access.
65
- */
43
+ /** Scan a memory's tags + content for secret material; pure and deterministic, no filesystem or store access. */
66
44
  export function detectSecret(entry) {
67
45
  for (const tag of entry.tags) {
68
46
  if (SECRET_TAGS.has(tag.toLowerCase())) {
@@ -78,17 +56,13 @@ export function detectSecret(entry) {
78
56
  }
79
57
  return { flagged: false, reason: null };
80
58
  }
81
- /**
82
- * Replace secret-shaped substrings in free text with a redaction marker.
83
- * Reuses the same `SECRET_PATTERNS` / co-occurrence guard as `detectSecret`
84
- * (which only flags whole-entry content) so callers that must persist raw
85
- * text that never passes through the normal capture content gate (e.g. the
86
- * pre-compact snapshot fields) can scrub it in place instead.
87
- */
59
+ /** Replace secret-shaped substrings in free text with a redaction marker, using the same `SECRET_PATTERNS` and co-occurrence guard as `detectSecret`;
60
+ * for callers persisting text that skips the capture content gate (e.g. pre-compact snapshot fields). */
88
61
  export function redactSecrets(text) {
89
62
  return redactText(text, false);
90
63
  }
91
- /** Only a run's first character starts a match, so a long run is scanned once; a domain's first label opens on a letter, so logo@2x.png and react@18.2.0 stay. */
64
+ /** Only a run's first character starts a match, so a long run is scanned once; a
65
+ * domain's first label opens on a letter, so logo@2x.png and react@18.2.0 stay. */
92
66
  const EMAIL = /(?<![A-Za-z0-9._%+-])[A-Za-z0-9._%+-]{1,64}@[A-Za-z][A-Za-z0-9-]*(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}\b/g;
93
67
  /** Memories never hold a raw email address (AGENTS.md); phone numbers are left alone, as their patterns misfire on ids. */
94
68
  export function maskEmails(text) {
@@ -4,6 +4,6 @@ export interface StoredJsonSite {
4
4
  id: string | number;
5
5
  column: string;
6
6
  }
7
- /** Warns the first time this row's column is found damaged, then logs at debug, so a row read on every recall cannot flood stderr. */
7
+ /** Warns the first time this row's column is found damaged (the logger caps how many), then at debug, so a row read on every recall cannot flood stderr. */
8
8
  export declare function warnDamagedColumn(site: StoredJsonSite, problem: 'not valid JSON' | 'wrong shape'): void;
9
9
  //# sourceMappingURL=stored-json.d.ts.map
@@ -1,6 +1,6 @@
1
1
  // One log line for a stored JSON column that will not read, so a reader that degrades to an empty value still leaves a trace.
2
2
  import { log } from './log.js';
3
- /** Warns the first time this row's column is found damaged, then logs at debug, so a row read on every recall cannot flood stderr. */
3
+ /** Warns the first time this row's column is found damaged (the logger caps how many), then at debug, so a row read on every recall cannot flood stderr. */
4
4
  export function warnDamagedColumn(site, problem) {
5
5
  const { table, id, column } = site;
6
6
  log.warnThenDebug(`damaged-column:${table}:${id}:${column}`, `store: ${table}.${column} is ${problem}; read as empty`, { table, id, column });
@@ -8,10 +8,7 @@ export declare const DIGEST_DISPLAY_CHARS = 12;
8
8
  export declare const DATE_PREFIX_CHARS = 10;
9
9
  /** Characters of memory content shown as a one-line preview. */
10
10
  export declare const CONTENT_PREVIEW_CHARS = 80;
11
- /**
12
- * Rough token estimate: characters / 4. The single estimate behind every
13
- * token budget and ledger count in hippo.
14
- */
11
+ /** Rough token estimate: characters / 4, the single estimate behind every token budget and ledger count. */
15
12
  export declare function estimateTokens(text: string): number;
16
13
  /** Stable 16-hex-char hash of a rendered block, for change detection. */
17
14
  export declare function blockHash(text: string): string;
@@ -9,10 +9,7 @@ export const DIGEST_DISPLAY_CHARS = 12;
9
9
  export const DATE_PREFIX_CHARS = 10;
10
10
  /** Characters of memory content shown as a one-line preview. */
11
11
  export const CONTENT_PREVIEW_CHARS = 80;
12
- /**
13
- * Rough token estimate: characters / 4. The single estimate behind every
14
- * token budget and ledger count in hippo.
15
- */
12
+ /** Rough token estimate: characters / 4, the single estimate behind every token budget and ledger count. */
16
13
  export function estimateTokens(text) {
17
14
  return Math.ceil(text.length / 4);
18
15
  }
@@ -4,4 +4,6 @@ export declare const PRE_COMPACT_TAIL_BYTES: number;
4
4
  export declare function truncateCodePointSafe(text: string, maxChars: number): string;
5
5
  /** The last `capBytes` of a JSONL transcript, read at an offset and starting on a whole line so every line parses. */
6
6
  export declare function readTranscriptTail(transcriptPath: string, capBytes?: number): string;
7
+ /** {@link readTranscriptTail} for a transcript the caller opened and sized, so the size and the bytes come from one file. */
8
+ export declare function readOpenTranscriptTail(fd: number, size: number, capBytes: number): string;
7
9
  //# sourceMappingURL=transcript-tail.d.ts.map
@@ -1,4 +1,4 @@
1
- // Transcript reads shared by capture.ts and compaction-record.ts; a leaf so neither has to import the other.
1
+ // Transcript reads shared by src/capture/ and compaction-record.ts; a leaf so neither has to import the other.
2
2
  import * as fs from 'fs';
3
3
  /** Never read the whole transcript: PreCompact fires exactly when it's largest. */
4
4
  export const PRE_COMPACT_TAIL_BYTES = 256 * 1024;
@@ -16,33 +16,34 @@ export function truncateCodePointSafe(text, maxChars) {
16
16
  }
17
17
  /** The last `capBytes` of a JSONL transcript, read at an offset and starting on a whole line so every line parses. */
18
18
  export function readTranscriptTail(transcriptPath, capBytes = PRE_COMPACT_TAIL_BYTES) {
19
- const size = fs.statSync(transcriptPath).size;
20
- const start = Math.max(0, size - capBytes);
21
- const length = size - start;
22
- if (length <= 0)
23
- return '';
24
19
  const fd = fs.openSync(transcriptPath, 'r');
25
20
  try {
26
- // A seek that lands just after '\n' already starts a whole line and must keep it.
27
- let onLineBoundary = start === 0;
28
- if (!onLineBoundary) {
29
- const prevByte = Buffer.alloc(1);
30
- fs.readSync(fd, prevByte, 0, 1, start - 1);
31
- onLineBoundary = prevByte[0] === 0x0a; // '\n'
32
- }
33
- const buf = Buffer.alloc(length);
34
- fs.readSync(fd, buf, 0, length, start);
35
- let text = buf.toString('utf8');
36
- if (!onLineBoundary) {
37
- // Landed mid-line — drop the partial first line so every remaining
38
- // line parses as complete JSON.
39
- const nl = text.indexOf('\n');
40
- text = nl === -1 ? '' : text.slice(nl + 1);
41
- }
42
- return text;
21
+ return readOpenTranscriptTail(fd, fs.fstatSync(fd).size, capBytes);
43
22
  }
44
23
  finally {
45
24
  fs.closeSync(fd);
46
25
  }
47
26
  }
27
+ /** {@link readTranscriptTail} for a transcript the caller opened and sized, so the size and the bytes come from one file. */
28
+ export function readOpenTranscriptTail(fd, size, capBytes) {
29
+ const start = Math.max(0, size - capBytes);
30
+ const length = size - start;
31
+ if (length <= 0)
32
+ return '';
33
+ // A seek that lands just after '\n' already starts a whole line and must keep it.
34
+ let onLineBoundary = start === 0;
35
+ if (!onLineBoundary) {
36
+ const prevByte = Buffer.alloc(1);
37
+ fs.readSync(fd, prevByte, 0, 1, start - 1);
38
+ onLineBoundary = prevByte[0] === 0x0a; // '\n'
39
+ }
40
+ const buf = Buffer.alloc(length);
41
+ fs.readSync(fd, buf, 0, length, start);
42
+ const text = buf.toString('utf8');
43
+ if (onLineBoundary)
44
+ return text;
45
+ // A read that lands mid-line drops the partial first line, so every line left parses as complete JSON.
46
+ const nl = text.indexOf('\n');
47
+ return nl === -1 ? '' : text.slice(nl + 1);
48
+ }
48
49
  //# sourceMappingURL=transcript-tail.js.map
@@ -1,23 +1,8 @@
1
- /**
2
- * Single source of truth for the hippo-memory binary's package version.
3
- *
4
- * Written by `npm version <x> --no-git-tag-version` through
5
- * scripts/sync-version.mjs, with the three plugin manifests; never edit it by
6
- * hand. scripts/check-manifest-versions.mjs gates publish on all seven sites.
7
- *
8
- * Used by:
9
- * - src/db/migrate.ts rollback-safety guard (refuses to open a DB stamped with
10
- * min_compatible_binary newer than this).
11
- * - src/server.ts HTTP /health.
12
- * - src/mcp/server.ts MCP serverInfo.
13
- *
14
- * Why not read package.json at runtime: the npm-published bundle ships
15
- * compiled `dist/` files that may not have package.json on a relative path
16
- * an ESM `import` can resolve cleanly, and a hardcoded constant survives
17
- * any packager that drops .json files.
18
- */
19
- export declare const PACKAGE_VERSION = "1.70.0";
20
- /** The floor a store takes on its first expiring key: the first release with schema v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
1
+ /** Single source of truth for the package version, written by scripts/sync-version.mjs; never edit by hand. Read by the db rollback guard, /health, MCP.
2
+ * A constant, not a runtime package.json read: the published bundle may lack package.json on a path ESM can resolve. */
3
+ export declare const PACKAGE_VERSION = "1.71.0";
4
+ /** The floor a store takes on its first expiring key: the first release with schema
5
+ * v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
21
6
  export declare const EXPIRING_KEYS_MIN_BINARY = "1.64.0";
22
7
  /** The floor a store takes on its first session bind or owner snapshot: first release with v54; set by hand in that release. */
23
8
  export declare const TASK_OWNER_MIN_BINARY = "1.64.0";
@@ -1,23 +1,8 @@
1
- /**
2
- * Single source of truth for the hippo-memory binary's package version.
3
- *
4
- * Written by `npm version <x> --no-git-tag-version` through
5
- * scripts/sync-version.mjs, with the three plugin manifests; never edit it by
6
- * hand. scripts/check-manifest-versions.mjs gates publish on all seven sites.
7
- *
8
- * Used by:
9
- * - src/db/migrate.ts rollback-safety guard (refuses to open a DB stamped with
10
- * min_compatible_binary newer than this).
11
- * - src/server.ts HTTP /health.
12
- * - src/mcp/server.ts MCP serverInfo.
13
- *
14
- * Why not read package.json at runtime: the npm-published bundle ships
15
- * compiled `dist/` files that may not have package.json on a relative path
16
- * an ESM `import` can resolve cleanly, and a hardcoded constant survives
17
- * any packager that drops .json files.
18
- */
19
- export const PACKAGE_VERSION = '1.70.0';
20
- /** The floor a store takes on its first expiring key: the first release with schema v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
1
+ /** Single source of truth for the package version, written by scripts/sync-version.mjs; never edit by hand. Read by the db rollback guard, /health, MCP.
2
+ * A constant, not a runtime package.json read: the published bundle may lack package.json on a path ESM can resolve. */
3
+ export const PACKAGE_VERSION = '1.71.0';
4
+ /** The floor a store takes on its first expiring key: the first release with schema
5
+ * v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
21
6
  export const EXPIRING_KEYS_MIN_BINARY = '1.64.0';
22
7
  /** The floor a store takes on its first session bind or owner snapshot: first release with v54; set by hand in that release. */
23
8
  export const TASK_OWNER_MIN_BINARY = '1.64.0';
@@ -352,7 +352,7 @@ export default function register(api: any) {
352
352
  api.registerTool((ctx: HippoRuntimeContext) => ({
353
353
  name: 'hippo_outcome',
354
354
  description:
355
- 'Report whether recalled memories were useful. Strengthens good memories (+5 days half-life) and weakens bad ones (-3 days). Call after completing work.',
355
+ "Report whether recalled memories were useful. Good outcomes slow a memory's decay and bad ones speed it up, in proportion to its record. Call after completing work.",
356
356
  parameters: {
357
357
  type: 'object',
358
358
  properties: {
@@ -2,7 +2,7 @@
2
2
  "id": "hippo-memory",
3
3
  "name": "Hippo Memory",
4
4
  "description": "Make your agent's memory work like a brain. Hippo is long-term memory for coding agents.",
5
- "version": "1.70.0",
5
+ "version": "1.71.0",
6
6
 
7
7
  "configSchema": {
8
8
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hippo-memory",
3
- "version": "1.70.0",
3
+ "version": "1.71.0",
4
4
  "type": "module",
5
5
  "description": "Make your agent's memory work like a brain. Hippo is long-term memory for coding agents.",
6
6
  "main": "index.ts",
@@ -2,7 +2,7 @@
2
2
  "id": "hippo-memory",
3
3
  "name": "Hippo Memory",
4
4
  "description": "Make your agent's memory work like a brain. Hippo is long-term memory for coding agents.",
5
- "version": "1.70.0",
5
+ "version": "1.71.0",
6
6
  "configSchema": {
7
7
  "type": "object",
8
8
  "additionalProperties": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hippo-memory",
3
- "version": "1.70.0",
3
+ "version": "1.71.0",
4
4
  "description": "Make your agent's memory work like a brain. Hippo is long-term memory for coding agents.",
5
5
  "mcpName": "io.github.kitfunso/hippo-memory",
6
6
  "type": "module",
@@ -1,25 +0,0 @@
1
- /**
2
- * Implementation of `hippo github` CLI subcommands. Extracted from the main
3
- * cli.ts so unit tests can import these functions directly without triggering
4
- * the cli.ts main() side effects. The cli.ts dispatcher re-exports the
5
- * top-level cmdGithub.
6
- *
7
- * Subcommands mirror the Slack connector shape (cli.ts §Slack subcommands):
8
- * - hippo github backfill --repo <owner/name> [--since ISO] [--max <N>]
9
- * - hippo github dlq list
10
- * - hippo github dlq replay <id> [--force]
11
- */
12
- import { type GitHubFetcher } from './octokit-client.js';
13
- type FlagValue = string | boolean | string[];
14
- type Flags = Record<string, FlagValue>;
15
- export declare function printGithubBackfillUsage(): void;
16
- /**
17
- * `hippo github backfill`. The fetcher is injectable so tests can drive the
18
- * code path without hitting the network. Defaults to `realGitHubFetcher`.
19
- */
20
- export declare function cmdGithubBackfill(hippoRoot: string, flags: Flags, fetcher?: GitHubFetcher): Promise<void>;
21
- export declare function cmdGithubDlqList(hippoRoot: string, _flags: Flags): void;
22
- export declare function cmdGithubDlqReplay(hippoRoot: string, args: string[], flags: Flags): Promise<void>;
23
- export declare function cmdGithub(hippoRoot: string, args: string[], flags: Flags): Promise<void>;
24
- export {};
25
- //# sourceMappingURL=cli-impl.d.ts.map
@@ -1,187 +0,0 @@
1
- /**
2
- * Cross-agent shared memory for Hippo.
3
- * Global store is shared across all projects.
4
- * Resolution: $HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo/
5
- * Local .hippo/ stores are per-project.
6
- */
7
- import { MemoryEntry } from '../core/memory.js';
8
- import { type SearchResult, type ResultCost } from '../core/search-types.js';
9
- import type { HybridVectorCandidates } from '../search/vector.js';
10
- import type { DatabaseSyncLike } from '../db/index.js';
11
- /**
12
- * Returns the path to the global Hippo store.
13
- * Resolution order: $HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo/
14
- */
15
- export declare function getGlobalRoot(): string;
16
- /**
17
- * Ensure the global store exists.
18
- */
19
- export declare function initGlobal(): void;
20
- /** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
21
- export declare function promoteToGlobal(localRoot: string, id: string, opts?: {
22
- actor?: string;
23
- tenantId?: string;
24
- afterWrite?: (db: DatabaseSyncLike, globalId: string) => void;
25
- /** Also writes one `promote` audit row for the copy ({sourceId}), in the copy's own transaction. */
26
- auditAs?: {
27
- tenantId: string;
28
- actor: string;
29
- };
30
- }): MemoryEntry;
31
- export interface SearchOptions {
32
- budget?: number;
33
- now?: Date;
34
- minResults?: number;
35
- /** Tenant scope for both stores. Undefined = no filter (legacy single-tenant). */
36
- tenantId?: string;
37
- }
38
- /**
39
- * Search across both local and global stores, merging results.
40
- * Local results are boosted by 1.2x to prefer project-specific context.
41
- * Returns results sorted by adjusted score, within combined token budget.
42
- */
43
- export declare function searchBoth(query: string, localRoot: string, globalRoot: string, options?: SearchOptions): SearchResult[];
44
- export interface HybridSearchOptions extends SearchOptions {
45
- embeddingWeight?: number;
46
- explain?: boolean;
47
- mmr?: boolean;
48
- mmrLambda?: number;
49
- /** Multiplier applied to local-store scores when merging with global.
50
- * Defaults to 1.2. Use 1.0 to remove the local bias for eval comparisons. */
51
- localBump?: number;
52
- /** Active scope for scope-boost scoring. Auto-detected if not provided. */
53
- scope?: string | null;
54
- /** Include superseded memories in results. Default false. */
55
- includeSuperseded?: boolean;
56
- /** Filter to memories current at this ISO date string. */
57
- asOf?: string;
58
- /** Budget cost per result, spent the same way in each store and in the merged list. */
59
- cost?: ResultCost;
60
- /** Propagated to underlying hybridSearch calls.
61
- * Per-call > env HIPPO_SUMMARY_DEBOOST > 0.85 default. */
62
- summaryDeboost?: number;
63
- /** Propagated. Default true (1.05 boost if rebuilt within 7d). */
64
- summaryFreshness?: boolean;
65
- /** v39 memory scope isolation: optional admission predicate applied to the
66
- * loaded candidate entries of BOTH stores BEFORE ranking, cross-store
67
- * content-dedupe, and budgeting. Without it, an excluded row can shadow
68
- * its admitted duplicate in the dedupe pass, or saturate the budget.
69
- * Default undefined = unchanged behavior (recall paths never set it). */
70
- entryFilter?: (entry: MemoryEntry) => boolean;
71
- /** Recall-mode scope filter, consumed by `searchBothHybrid` only.
72
- * ABSENT (undefined) is the only unfiltered mode: both stores load via
73
- * `loadSearchEntries` unchanged (background pipelines / eval callers).
74
- * PRESENT switches the internal loads to `loadRecallSearchEntries` (SQL
75
- * scope predicate) plus the recall-scope JS post-filter:
76
- * `{}` = default-deny (`unknown:legacy`
77
- * + `<source>:private:*` excluded)
78
- * `{ requested: 'X' }` = exact match on scope X
79
- * (api.recall semantics)
80
- * `{ requested: 'X', additive: true }` = default-admitted set PLUS
81
- * scope X (CLI --scope
82
- * semantics; see recall-scope.ts
83
- * passesCliRecallScopeFilter)
84
- * Object form on purpose — the sibling `scope` option above already gives
85
- * `null` a different meaning (boost-neutral), so a flat `string | null`
86
- * here would overload null with contradictory semantics. Do NOT pass an
87
- * empty object casually from non-recall paths. */
88
- recallScope?: {
89
- requested?: string;
90
- additive?: boolean;
91
- ownScope?: string;
92
- };
93
- }
94
- /**
95
- * Hybrid search across both local and global stores, using embeddings when available.
96
- * Async version of searchBoth that calls hybridSearch instead of search.
97
- */
98
- export declare function searchBothHybrid(query: string, localRoot: string, globalRoot: string, options?: HybridSearchOptions): Promise<SearchResult[]>;
99
- /** Hybrid ranking of rows already loaded from each store: the local bump, one copy per text, then the shared budget. */
100
- export declare function rankBothStores(query: string, roots: {
101
- local: string;
102
- global: string;
103
- }, entries: {
104
- local: MemoryEntry[];
105
- global: MemoryEntry[];
106
- }, vectorCandidates: HybridVectorCandidates, options?: HybridSearchOptions): Promise<SearchResult[]>;
107
- /** Tags whose rows only a hand-run share or promote may copy to the global store; derived rows inherit them. */
108
- export declare const NEVER_AUTO_SHARE_TAGS: ReadonlySet<string>;
109
- export declare function neverAutoShareTags(sources: readonly MemoryEntry[]): string[];
110
- /** Tags whose rows sleep keeps as written: never merged, never sent to LLM extraction. Conflict detection keeps its own list. */
111
- export declare const NO_MERGE_TAGS: ReadonlySet<string>;
112
- /**
113
- * Estimate how well a memory would transfer to other projects.
114
- * Returns 0..1 where >0.5 = good candidate for sharing.
115
- */
116
- export declare function transferScore(entry: MemoryEntry): number;
117
- /**
118
- * Share a memory to the global store with attribution.
119
- * Enriches the source field with project path and timestamp.
120
- * Returns the new global entry, or null if transfer score is too low.
121
- */
122
- export declare function shareMemory(localRoot: string, id: string, options?: {
123
- force?: boolean;
124
- tenantId?: string;
125
- skipEmbed?: boolean;
126
- }): MemoryEntry | null;
127
- /**
128
- * List all projects that have contributed memories to the global store.
129
- * Parses the source field for 'shared:<project>:' or 'promoted:<path>' patterns.
130
- *
131
- * `tenantId` is optional. When provided, the global entries
132
- * are filtered to that tenant before aggregation — matches every other
133
- * read path's default-safe behaviour. When undefined, host-wide (back-compat
134
- * for legacy callers like CLI standalone + dashboard internal use). Operators
135
- * who genuinely want cross-tenant peer discovery can pass undefined or
136
- * use direct SQL.
137
- */
138
- export declare function listPeers(globalRoot?: string, tenantId?: string): Array<{
139
- project: string;
140
- count: number;
141
- latest: string;
142
- }>;
143
- type AutoShareStats = {
144
- secretSkipped: number;
145
- rejectedSkipped?: number;
146
- neverAutoShareSkipped?: number;
147
- };
148
- /**
149
- * Auto-share: local memories with high transfer scores, not already global, no NEVER_AUTO_SHARE_TAGS tag.
150
- * Returns the list of shared entries.
151
- *
152
- * `options.tenantId` is opt-in. When provided, the LOCAL-entries read is
153
- * scoped to that tenant. When undefined, the local read is host-wide (current
154
- * behaviour). The GLOBAL-entries read is always unioned — the global root IS
155
- * the cross-tenant aggregate by design. `api.sleep` passes no tenantId
156
- * because `sleep` is host-wide by intent.
157
- *
158
- * `options.stats` is an opt-in out-param. When provided,
159
- * `stats.secretSkipped` is incremented once per row that passed every OTHER
160
- * admission gate (transfer score, not-already-global) and was withheld SOLELY
161
- * by the secret veto — i.e. it counts shares actually prevented, not secret
162
- * rows merely present. Filled identically under `dryRun`.
163
- *
164
- * `stats.rejectedSkipped` (optional) is incremented once per candidate
165
- * refused by the GLOBAL store's rejection tombstone (RejectedValueError from
166
- * shareMemory -> writeEntry). Unlike secretSkipped, this can only be
167
- * detected by attempting the write — `dryRun` returns candidates before the
168
- * write loop runs, so `rejectedSkipped` stays at its initial value under
169
- * `dryRun` (candidates that WOULD be refused are not distinguished in the
170
- * dry-run preview).
171
- */
172
- export declare function autoShare(localRoot: string, options?: {
173
- minScore?: number;
174
- dryRun?: boolean;
175
- tenantId?: string;
176
- stats?: AutoShareStats;
177
- }): MemoryEntry[];
178
- /**
179
- * Copy all global memories into the local store.
180
- * Skips entries that already exist locally, by ID or by text (promote and share copy under a new ID).
181
- * Returns the count of newly copied entries.
182
- */
183
- export declare function syncGlobalToLocal(localRoot: string, globalRoot: string, opts?: {
184
- includeCrossProject?: boolean;
185
- }): number;
186
- export {};
187
- //# sourceMappingURL=shared.d.ts.map