hippo-memory 1.71.0 → 2.0.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 (625) hide show
  1. package/README.md +7 -5
  2. package/dist/agent-memories/apply.d.ts +0 -11
  3. package/dist/agent-memories/apply.js +11 -26
  4. package/dist/agent-memories/claude-code.js +1 -1
  5. package/dist/agent-memories/codex.js +1 -1
  6. package/dist/agent-memories/copilot.d.ts +1 -3
  7. package/dist/agent-memories/copilot.js +1 -17
  8. package/dist/agent-memories/project-folds.d.ts +10 -0
  9. package/dist/agent-memories/project-folds.js +34 -0
  10. package/dist/agent-memories/sync.js +8 -6
  11. package/dist/api/assemble.js +3 -2
  12. package/dist/api/audit.d.ts +30 -2
  13. package/dist/api/audit.js +48 -7
  14. package/dist/api/auth.d.ts +11 -9
  15. package/dist/api/auth.js +39 -40
  16. package/dist/api/auto-sleep.d.ts +5 -2
  17. package/dist/api/auto-sleep.js +7 -3
  18. package/dist/api/availability.js +2 -3
  19. package/dist/api/cards.d.ts +42 -0
  20. package/dist/api/cards.js +52 -0
  21. package/dist/api/conflicts.d.ts +28 -0
  22. package/dist/api/conflicts.js +61 -0
  23. package/dist/api/context-auto.js +4 -2
  24. package/dist/api/context-render.js +4 -3
  25. package/dist/api/context-select.js +15 -29
  26. package/dist/api/context.js +29 -18
  27. package/dist/api/continuity.d.ts +47 -0
  28. package/dist/api/continuity.js +66 -0
  29. package/dist/api/dormant.js +4 -2
  30. package/dist/api/drill-down.js +3 -2
  31. package/dist/api/embeddings.d.ts +17 -0
  32. package/dist/api/embeddings.js +28 -0
  33. package/dist/api/error-reply.d.ts +8 -0
  34. package/dist/api/error-reply.js +21 -0
  35. package/dist/api/forget.d.ts +7 -3
  36. package/dist/api/forget.js +24 -14
  37. package/dist/api/goals.d.ts +1 -1
  38. package/dist/api/goals.js +5 -9
  39. package/dist/api/graph.js +2 -1
  40. package/dist/api/index.d.ts +4 -2
  41. package/dist/api/index.js +4 -2
  42. package/dist/api/instruction-detect.js +5 -1
  43. package/dist/api/learn.d.ts +5 -1
  44. package/dist/api/learn.js +71 -44
  45. package/dist/api/ledger-db.d.ts +2 -6
  46. package/dist/api/ledger-db.js +4 -36
  47. package/dist/api/memories.d.ts +21 -1
  48. package/dist/api/memories.js +51 -1
  49. package/dist/api/objects.d.ts +1 -1
  50. package/dist/api/objects.js +2 -1
  51. package/dist/api/outcome.d.ts +5 -5
  52. package/dist/api/outcome.js +17 -16
  53. package/dist/api/pilot-arm.d.ts +1 -11
  54. package/dist/api/pilot-arm.js +5 -45
  55. package/dist/api/predictions.d.ts +3 -1
  56. package/dist/api/predictions.js +8 -1
  57. package/dist/api/projects.d.ts +21 -0
  58. package/dist/api/projects.js +24 -0
  59. package/dist/api/promote.d.ts +3 -3
  60. package/dist/api/promote.js +26 -28
  61. package/dist/api/prompt-hook.d.ts +17 -2
  62. package/dist/api/prompt-hook.js +45 -4
  63. package/dist/api/quarantine.js +2 -1
  64. package/dist/api/recall-cli.d.ts +3 -0
  65. package/dist/api/recall-cli.js +13 -4
  66. package/dist/api/recall-core.js +10 -5
  67. package/dist/api/recall-pipeline.js +23 -24
  68. package/dist/api/recall-request.js +1 -1
  69. package/dist/api/recall-types.d.ts +3 -1
  70. package/dist/api/recall.d.ts +0 -3
  71. package/dist/api/recall.js +51 -73
  72. package/dist/api/remember-local.d.ts +5 -2
  73. package/dist/api/remember-local.js +15 -7
  74. package/dist/api/remember.d.ts +7 -3
  75. package/dist/api/remember.js +19 -16
  76. package/dist/api/session-end.d.ts +46 -0
  77. package/dist/api/session-end.js +131 -0
  78. package/dist/api/sleep-run.d.ts +1 -1
  79. package/dist/api/sleep-run.js +16 -11
  80. package/dist/api/sleep.js +4 -3
  81. package/dist/api/status.d.ts +24 -0
  82. package/dist/api/status.js +40 -0
  83. package/dist/api/store-init.d.ts +4 -0
  84. package/dist/api/store-init.js +9 -0
  85. package/dist/api/tokens.js +2 -2
  86. package/dist/api/types.d.ts +3 -7
  87. package/dist/api/types.js +6 -1
  88. package/dist/capture/caller-session.d.ts +0 -3
  89. package/dist/capture/caller-session.js +1 -12
  90. package/dist/capture/capture-error.d.ts +2 -2
  91. package/dist/capture/capture-error.js +23 -18
  92. package/dist/capture/codex-patch.js +3 -1
  93. package/dist/capture/command.js +36 -95
  94. package/dist/capture/compact.js +10 -5
  95. package/dist/capture/compaction-items-caller.js +11 -20
  96. package/dist/capture/compaction-record.d.ts +7 -93
  97. package/dist/capture/compaction-record.js +29 -426
  98. package/dist/capture/compaction-spool.d.ts +7 -7
  99. package/dist/capture/compaction-spool.js +60 -51
  100. package/dist/capture/copilot-transcript.d.ts +2 -1
  101. package/dist/capture/copilot-transcript.js +2 -1
  102. package/dist/capture/extract.d.ts +5 -2
  103. package/dist/capture/extract.js +4 -3
  104. package/dist/capture/failure-caller.d.ts +1 -1
  105. package/dist/capture/failure-caller.js +21 -16
  106. package/dist/capture/failure-reading.d.ts +2 -1
  107. package/dist/capture/failure-reading.js +7 -9
  108. package/dist/capture/pre-compact-caller.js +5 -4
  109. package/dist/capture/session-digest.js +4 -3
  110. package/dist/capture/session-end-caller.js +3 -2
  111. package/dist/capture/session-worker.js +22 -10
  112. package/dist/capture/transcript.d.ts +2 -1
  113. package/dist/capture/transcript.js +6 -3
  114. package/dist/capture/working-state.d.ts +4 -2
  115. package/dist/capture/working-state.js +4 -2
  116. package/dist/cli/audit-prune.d.ts +0 -25
  117. package/dist/cli/audit-prune.js +1 -27
  118. package/dist/cli/audit.js +20 -20
  119. package/dist/cli/auth.d.ts +1 -1
  120. package/dist/cli/auth.js +16 -17
  121. package/dist/cli/briefs.d.ts +1 -4
  122. package/dist/cli/briefs.js +37 -292
  123. package/dist/cli/card.js +41 -33
  124. package/dist/cli/client.d.ts +6 -2
  125. package/dist/cli/client.js +37 -21
  126. package/dist/cli/compact-resume-payload.js +1 -1
  127. package/dist/cli/context.d.ts +1 -1
  128. package/dist/cli/context.js +13 -13
  129. package/dist/cli/continuity.d.ts +1 -1
  130. package/dist/cli/continuity.js +36 -39
  131. package/dist/cli/curate.d.ts +2 -2
  132. package/dist/cli/curate.js +32 -36
  133. package/dist/cli/dag.d.ts +1 -1
  134. package/dist/cli/dag.js +23 -8
  135. package/dist/cli/decisions.d.ts +0 -2
  136. package/dist/cli/decisions.js +7 -285
  137. package/dist/cli/eval.d.ts +1 -1
  138. package/dist/cli/eval.js +12 -13
  139. package/dist/cli/explain.d.ts +1 -1
  140. package/dist/cli/explain.js +21 -25
  141. package/dist/cli/flag-values.js +16 -6
  142. package/dist/cli/flags.d.ts +0 -289
  143. package/dist/cli/flags.js +3 -138
  144. package/dist/cli/graph.d.ts +3 -0
  145. package/dist/cli/graph.js +83 -0
  146. package/dist/cli/hook-runtime.d.ts +6 -6
  147. package/dist/cli/hook-runtime.js +9 -36
  148. package/dist/cli/incidents.d.ts +3 -0
  149. package/dist/cli/incidents.js +112 -0
  150. package/dist/cli/init.d.ts +1 -1
  151. package/dist/cli/init.js +28 -19
  152. package/dist/cli/install-steps.d.ts +2 -1
  153. package/dist/cli/install-steps.js +11 -3
  154. package/dist/cli/last-sleep.js +1 -1
  155. package/dist/cli/maintenance.d.ts +3 -3
  156. package/dist/cli/maintenance.js +29 -30
  157. package/dist/cli/notes.d.ts +2 -0
  158. package/dist/cli/notes.js +41 -0
  159. package/dist/cli/object-verbs.d.ts +2 -2
  160. package/dist/cli/object-verbs.js +4 -4
  161. package/dist/cli/open-browser.d.ts +14 -0
  162. package/dist/cli/open-browser.js +26 -0
  163. package/dist/cli/playbooks.d.ts +3 -4
  164. package/dist/cli/playbooks.js +126 -290
  165. package/dist/cli/predictions.d.ts +3 -0
  166. package/dist/cli/predictions.js +174 -0
  167. package/dist/cli/print.js +2 -1
  168. package/dist/cli/projects.js +30 -22
  169. package/dist/cli/quality-repair-once.d.ts +1 -1
  170. package/dist/cli/quality-repair-once.js +6 -5
  171. package/dist/cli/recall.js +13 -7
  172. package/dist/cli/refine-llm.js +18 -17
  173. package/dist/cli/remember.js +17 -17
  174. package/dist/cli/scheduler.js +2 -1
  175. package/dist/cli/serve.js +11 -6
  176. package/dist/cli/session-hooks.d.ts +1 -5
  177. package/dist/cli/session-hooks.js +89 -168
  178. package/dist/cli/setup.d.ts +1 -1
  179. package/dist/cli/setup.js +17 -10
  180. package/dist/cli/shared.d.ts +2 -6
  181. package/dist/cli/shared.js +9 -29
  182. package/dist/cli/sleep-render.js +6 -3
  183. package/dist/cli/sleep.js +6 -37
  184. package/dist/cli/status.d.ts +3 -3
  185. package/dist/cli/status.js +32 -35
  186. package/dist/cli/transfer.d.ts +3 -3
  187. package/dist/cli/transfer.js +64 -43
  188. package/dist/cli/usage.d.ts +1 -80
  189. package/dist/cli/usage.js +2 -696
  190. package/dist/cli/verb-row.d.ts +34 -0
  191. package/dist/cli/verb-row.js +6 -0
  192. package/dist/cli/verbs/health.d.ts +27 -0
  193. package/dist/cli/verbs/health.js +234 -0
  194. package/dist/cli/verbs/memory.d.ts +16 -0
  195. package/dist/cli/verbs/memory.js +236 -0
  196. package/dist/cli/verbs/objects.d.ts +20 -0
  197. package/dist/cli/verbs/objects.js +257 -0
  198. package/dist/cli/verbs/sessions.d.ts +31 -0
  199. package/dist/cli/verbs/sessions.js +314 -0
  200. package/dist/cli/verbs.d.ts +81 -0
  201. package/dist/cli/verbs.js +7 -0
  202. package/dist/cli/versioned-verbs.d.ts +51 -0
  203. package/dist/cli/versioned-verbs.js +79 -0
  204. package/dist/cli.d.ts +1 -272
  205. package/dist/cli.js +24 -315
  206. package/dist/connectors/dlq.d.ts +39 -3
  207. package/dist/connectors/dlq.js +39 -4
  208. package/dist/connectors/github/backfill.js +12 -3
  209. package/dist/connectors/github/deletion.js +2 -1
  210. package/dist/connectors/github/dlq.js +31 -73
  211. package/dist/connectors/github/ingest.d.ts +2 -6
  212. package/dist/connectors/github/ingest.js +5 -29
  213. package/dist/connectors/github/tenant-routing.js +2 -1
  214. package/dist/connectors/github/webhook.d.ts +2 -1
  215. package/dist/connectors/github/webhook.js +35 -2
  216. package/dist/connectors/ingest.d.ts +10 -0
  217. package/dist/connectors/ingest.js +29 -0
  218. package/dist/connectors/slack/deletion.js +2 -1
  219. package/dist/connectors/slack/dlq.js +49 -71
  220. package/dist/connectors/slack/ingest.d.ts +2 -6
  221. package/dist/connectors/slack/ingest.js +4 -28
  222. package/dist/connectors/slack/tenant-routing.js +2 -1
  223. package/dist/connectors/slack/webhook.d.ts +2 -1
  224. package/dist/connectors/slack/webhook.js +2 -1
  225. package/dist/consolidate/conflicts.js +2 -2
  226. package/dist/consolidate/dag.js +29 -18
  227. package/dist/consolidate/dedupe.d.ts +7 -0
  228. package/dist/consolidate/dedupe.js +6 -4
  229. package/dist/consolidate/llm-passes.js +45 -19
  230. package/dist/consolidate/memory-value.js +3 -2
  231. package/dist/consolidate/merge.js +8 -8
  232. package/dist/consolidate/physics-pass.d.ts +6 -1
  233. package/dist/consolidate/physics-pass.js +26 -6
  234. package/dist/consolidate/replay.js +11 -4
  235. package/dist/consolidate/sleep.js +9 -6
  236. package/dist/consolidate/traces.js +5 -5
  237. package/dist/core/ablation.d.ts +10 -0
  238. package/dist/core/ablation.js +12 -0
  239. package/dist/{sharing/scope.d.ts → core/active-scope.d.ts} +1 -1
  240. package/dist/{sharing/scope.js → core/active-scope.js} +1 -1
  241. package/dist/core/ambient.d.ts +4 -0
  242. package/dist/core/ambient.js +39 -18
  243. package/dist/core/api-errors.d.ts +16 -0
  244. package/dist/core/api-errors.js +20 -0
  245. package/dist/core/card.js +3 -1
  246. package/dist/core/compaction-timing.d.ts +7 -0
  247. package/dist/core/compaction-timing.js +9 -0
  248. package/dist/core/config.d.ts +1 -1
  249. package/dist/core/config.js +22 -18
  250. package/dist/core/cosine.d.ts +3 -0
  251. package/dist/core/cosine.js +19 -0
  252. package/dist/{store → core}/markdown.d.ts +1 -1
  253. package/dist/{store → core}/markdown.js +4 -4
  254. package/dist/core/memory-audit.d.ts +17 -0
  255. package/dist/core/memory-audit.js +54 -0
  256. package/dist/core/memory.d.ts +14 -8
  257. package/dist/core/memory.js +35 -23
  258. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  259. package/dist/{consolidate → core}/merged-row.js +1 -1
  260. package/dist/core/physics.d.ts +3 -1
  261. package/dist/core/physics.js +23 -18
  262. package/dist/core/prediction.d.ts +3 -0
  263. package/dist/core/prediction.js +6 -0
  264. package/dist/core/project-identity.d.ts +3 -0
  265. package/dist/core/project-identity.js +12 -2
  266. package/dist/{store → core}/recall-scope.d.ts +1 -10
  267. package/dist/{store → core}/recall-scope.js +2 -19
  268. package/dist/core/search-types.d.ts +1 -1
  269. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  270. package/dist/dashboard/dashboard-actions.js +5 -5
  271. package/dist/dashboard/dashboard-queries.js +2 -7
  272. package/dist/dashboard/dashboard-snapshot.js +1 -3
  273. package/dist/dashboard/dashboard.js +16 -5
  274. package/dist/db/busy.d.ts +2 -7
  275. package/dist/db/busy.js +21 -26
  276. package/dist/db/connect.d.ts +2 -2
  277. package/dist/db/connect.js +7 -7
  278. package/dist/db/index.d.ts +3 -3
  279. package/dist/db/index.js +3 -3
  280. package/dist/db/migrate.js +14 -7
  281. package/dist/db/migrations/index.d.ts +1 -1
  282. package/dist/db/migrations/index.js +3 -1
  283. package/dist/db/migrations/v11.js +1 -0
  284. package/dist/db/migrations/v14.js +1 -0
  285. package/dist/db/migrations/v55.d.ts +3 -0
  286. package/dist/db/migrations/v55.js +17 -0
  287. package/dist/db/open.d.ts +0 -2
  288. package/dist/db/open.js +6 -10
  289. package/dist/db/physics-state.d.ts +0 -4
  290. package/dist/db/physics-state.js +7 -33
  291. package/dist/db/request-stores.d.ts +1 -0
  292. package/dist/db/request-stores.js +2 -1
  293. package/dist/db/tables.d.ts +2 -0
  294. package/dist/db/tables.js +6 -2
  295. package/dist/db/vector-store.js +19 -5
  296. package/dist/db/wal-checkpointer.js +2 -1
  297. package/dist/doctor.d.ts +3 -0
  298. package/dist/doctor.js +18 -15
  299. package/dist/embeddings/local.d.ts +62 -0
  300. package/dist/embeddings/local.js +146 -0
  301. package/dist/{store/embeddings → embeddings}/provider.d.ts +5 -2
  302. package/dist/{store/embeddings → embeddings}/provider.js +19 -25
  303. package/dist/embeddings/transformers.d.ts +26 -0
  304. package/dist/embeddings/transformers.js +89 -0
  305. package/dist/entry/session-text.d.ts +1 -1
  306. package/dist/entry/session-text.js +1 -1
  307. package/dist/entry/store-kit.d.ts +37 -0
  308. package/dist/entry/store-kit.js +25 -0
  309. package/dist/entry/testing.d.ts +6 -0
  310. package/dist/entry/testing.js +7 -0
  311. package/dist/eval/eval-suite.js +17 -11
  312. package/dist/eval/eval.js +1 -1
  313. package/dist/eval/judgment.js +12 -5
  314. package/dist/graph/extract.js +3 -3
  315. package/dist/graph/recall.js +1 -1
  316. package/dist/graph/view.js +13 -5
  317. package/dist/graph/write.d.ts +1 -1
  318. package/dist/graph/write.js +9 -9
  319. package/dist/hooks/codex-session.js +3 -2
  320. package/dist/hooks/codex-wrapper.js +2 -1
  321. package/dist/hooks/json-hooks.js +10 -4
  322. package/dist/hooks/opencode.js +8 -5
  323. package/dist/hooks/shared.d.ts +0 -6
  324. package/dist/hooks/shared.js +4 -15
  325. package/dist/importers/core.js +4 -4
  326. package/dist/importers/sources.js +5 -4
  327. package/dist/importers/vault.d.ts +1 -1
  328. package/dist/importers/vault.js +25 -23
  329. package/dist/index.d.ts +5 -4
  330. package/dist/index.js +4 -3
  331. package/dist/learn/autolearn.d.ts +15 -3
  332. package/dist/learn/autolearn.js +38 -16
  333. package/dist/learn/churn-git.js +13 -4
  334. package/dist/learn/extract.d.ts +3 -2
  335. package/dist/learn/extract.js +7 -5
  336. package/dist/learn/forward-claim-detector.js +4 -2
  337. package/dist/learn/invalidation.d.ts +2 -1
  338. package/dist/learn/invalidation.js +18 -9
  339. package/dist/mcp/admin-tools.d.ts +2 -2
  340. package/dist/mcp/admin-tools.js +27 -48
  341. package/dist/mcp/format.js +3 -2
  342. package/dist/mcp/framing.d.ts +1 -0
  343. package/dist/mcp/framing.js +1 -1
  344. package/dist/mcp/memory-tools.d.ts +1 -1
  345. package/dist/mcp/memory-tools.js +8 -9
  346. package/dist/mcp/protocol.d.ts +11 -7
  347. package/dist/mcp/protocol.js +25 -12
  348. package/dist/mcp/recall-tools.js +12 -9
  349. package/dist/mcp/request.js +22 -20
  350. package/dist/mcp/stdio.js +37 -16
  351. package/dist/mcp/tool-args.js +2 -1
  352. package/dist/mcp/tools.js +44 -21
  353. package/dist/objects/customer-notes.d.ts +2 -2
  354. package/dist/objects/decisions.d.ts +2 -2
  355. package/dist/objects/descriptor.d.ts +1 -1
  356. package/dist/objects/incidents.d.ts +2 -2
  357. package/dist/objects/lifecycle.d.ts +1 -1
  358. package/dist/objects/lifecycle.js +2 -1
  359. package/dist/objects/policies.d.ts +2 -2
  360. package/dist/objects/policies.js +2 -1
  361. package/dist/objects/processes.d.ts +2 -2
  362. package/dist/objects/project-briefs.d.ts +2 -2
  363. package/dist/objects/project-briefs.js +2 -3
  364. package/dist/objects/skills.d.ts +2 -2
  365. package/dist/postinstall.js +1 -1
  366. package/dist/rerankers/clef.js +3 -6
  367. package/dist/rerankers/cross-encoder.d.ts +31 -2
  368. package/dist/rerankers/cross-encoder.js +71 -98
  369. package/dist/rerankers/index.js +5 -4
  370. package/dist/rerankers/jev.js +2 -4
  371. package/dist/rerankers/outage-warning.d.ts +3 -1
  372. package/dist/rerankers/outage-warning.js +5 -3
  373. package/dist/search/bm25-search.js +1 -1
  374. package/dist/search/boosts.js +1 -1
  375. package/dist/search/embed-memories.d.ts +12 -0
  376. package/dist/search/embed-memories.js +389 -0
  377. package/dist/search/engine.d.ts +8 -0
  378. package/dist/search/engine.js +10 -0
  379. package/dist/search/goal-boost.d.ts +1 -1
  380. package/dist/search/goal-boost.js +6 -3
  381. package/dist/search/hybrid.d.ts +9 -2
  382. package/dist/search/hybrid.js +9 -4
  383. package/dist/search/physics-search.d.ts +6 -3
  384. package/dist/search/physics-search.js +22 -15
  385. package/dist/search/rerank.js +1 -1
  386. package/dist/search/vector.d.ts +8 -6
  387. package/dist/search/vector.js +14 -17
  388. package/dist/server/auth.d.ts +3 -1
  389. package/dist/server/auth.js +24 -15
  390. package/dist/server/boot.d.ts +2 -1
  391. package/dist/server/boot.js +34 -84
  392. package/dist/server/client-ip.d.ts +9 -6
  393. package/dist/server/client-ip.js +36 -17
  394. package/dist/server/deadline.d.ts +0 -2
  395. package/dist/server/deadline.js +1 -7
  396. package/dist/server/defaults.d.ts +1 -0
  397. package/dist/server/defaults.js +1 -0
  398. package/dist/server/mcp-http.js +16 -11
  399. package/dist/server/request.js +7 -2
  400. package/dist/server/route-checks.d.ts +7 -0
  401. package/dist/server/route-checks.js +42 -0
  402. package/dist/server/route-table.d.ts +9 -8
  403. package/dist/server/route-table.js +127 -133
  404. package/dist/server/routes/admin.d.ts +8 -8
  405. package/dist/server/routes/admin.js +13 -21
  406. package/dist/server/routes/customer-notes.d.ts +6 -6
  407. package/dist/server/routes/customer-notes.js +1 -2
  408. package/dist/server/routes/decisions.d.ts +6 -6
  409. package/dist/server/routes/decisions.js +2 -4
  410. package/dist/server/routes/incidents.d.ts +6 -6
  411. package/dist/server/routes/incidents.js +2 -5
  412. package/dist/server/routes/memories.d.ts +9 -9
  413. package/dist/server/routes/memories.js +19 -40
  414. package/dist/server/routes/object-routes.d.ts +6 -6
  415. package/dist/server/routes/object-routes.js +4 -7
  416. package/dist/server/routes/policies.d.ts +7 -7
  417. package/dist/server/routes/policies.js +2 -4
  418. package/dist/server/routes/predictions.d.ts +6 -6
  419. package/dist/server/routes/predictions.js +9 -13
  420. package/dist/server/routes/processes.d.ts +6 -6
  421. package/dist/server/routes/processes.js +1 -2
  422. package/dist/server/routes/project-briefs.d.ts +7 -7
  423. package/dist/server/routes/project-briefs.js +2 -4
  424. package/dist/server/routes/recall.d.ts +5 -5
  425. package/dist/server/routes/recall.js +6 -10
  426. package/dist/server/routes/skills.d.ts +7 -7
  427. package/dist/server/routes/skills.js +2 -4
  428. package/dist/server/server-detect.d.ts +7 -1
  429. package/dist/server/server-detect.js +36 -11
  430. package/dist/server/sleep-child.js +26 -7
  431. package/dist/server/sleep-offload.d.ts +11 -5
  432. package/dist/server/sleep-offload.js +17 -11
  433. package/dist/server/tls.d.ts +7 -2
  434. package/dist/server/tls.js +17 -5
  435. package/dist/server/types.d.ts +29 -12
  436. package/dist/server/validation.d.ts +1 -2
  437. package/dist/server/validation.js +6 -11
  438. package/dist/server.d.ts +4 -40
  439. package/dist/server.js +3 -29
  440. package/dist/sharing/global-store.d.ts +4 -5
  441. package/dist/sharing/global-store.js +8 -13
  442. package/dist/sharing/global-sync.js +38 -45
  443. package/dist/sharing/project-merge.d.ts +7 -14
  444. package/dist/sharing/project-merge.js +57 -121
  445. package/dist/sharing/search-both.js +10 -3
  446. package/dist/sharing/share.d.ts +2 -0
  447. package/dist/sharing/share.js +39 -38
  448. package/dist/store/ambient.js +7 -7
  449. package/dist/store/audit-event.d.ts +1 -1
  450. package/dist/store/audit.d.ts +0 -16
  451. package/dist/store/audit.js +4 -55
  452. package/dist/store/auth.d.ts +4 -2
  453. package/dist/store/auth.js +7 -3
  454. package/dist/store/candidates.d.ts +3 -2
  455. package/dist/store/candidates.js +59 -30
  456. package/dist/store/capture-write.d.ts +17 -0
  457. package/dist/store/capture-write.js +35 -0
  458. package/dist/store/cards.js +6 -5
  459. package/dist/store/compaction-caller.d.ts +18 -0
  460. package/dist/store/compaction-caller.js +29 -0
  461. package/dist/store/compactions-record.d.ts +115 -0
  462. package/dist/store/compactions-record.js +418 -0
  463. package/dist/store/compactions.js +6 -4
  464. package/dist/store/conflicts.d.ts +7 -1
  465. package/dist/store/conflicts.js +13 -9
  466. package/dist/store/connectors/dlq.d.ts +10 -0
  467. package/dist/store/connectors/dlq.js +33 -0
  468. package/dist/store/connectors/event-log.d.ts +13 -0
  469. package/dist/store/connectors/event-log.js +24 -0
  470. package/dist/store/connectors/github.d.ts +7 -9
  471. package/dist/store/connectors/github.js +35 -60
  472. package/dist/store/connectors/slack.d.ts +2 -11
  473. package/dist/store/connectors/slack.js +24 -57
  474. package/dist/store/dashboard-reads.js +8 -6
  475. package/dist/store/delete-and-batch.d.ts +6 -0
  476. package/dist/store/delete-and-batch.js +40 -6
  477. package/dist/store/delivery-recorder.d.ts +12 -5
  478. package/dist/store/delivery-recorder.js +13 -11
  479. package/dist/store/descendant-page.js +8 -4
  480. package/dist/store/dormant.d.ts +1 -1
  481. package/dist/store/dormant.js +10 -4
  482. package/dist/store/embeddings/index.d.ts +2 -12
  483. package/dist/store/embeddings/index.js +5 -374
  484. package/dist/store/entry-reads.d.ts +35 -4
  485. package/dist/store/entry-reads.js +86 -19
  486. package/dist/store/entry-row.js +9 -2
  487. package/dist/store/entry-writes.d.ts +15 -12
  488. package/dist/store/entry-writes.js +54 -22
  489. package/dist/store/failure-log-at.d.ts +8 -0
  490. package/dist/store/failure-log-at.js +16 -0
  491. package/dist/store/failure-log.d.ts +2 -2
  492. package/dist/store/failure-log.js +5 -3
  493. package/dist/{trust → store}/gated-write.d.ts +3 -1
  494. package/dist/{trust → store}/gated-write.js +7 -5
  495. package/dist/store/goals.js +22 -19
  496. package/dist/store/graph-reads.js +9 -6
  497. package/dist/store/graph-view-rows.js +2 -1
  498. package/dist/store/graph-writes.d.ts +6 -6
  499. package/dist/store/graph-writes.js +48 -71
  500. package/dist/store/half-life.js +2 -2
  501. package/dist/store/handoffs.d.ts +10 -4
  502. package/dist/store/handoffs.js +10 -9
  503. package/dist/store/index-and-stats.js +2 -2
  504. package/dist/store/index.d.ts +2 -2
  505. package/dist/store/index.js +1 -1
  506. package/dist/store/key-writes.js +1 -1
  507. package/dist/store/ledger-turn.d.ts +9 -0
  508. package/dist/store/ledger-turn.js +38 -0
  509. package/dist/store/mirrors.js +19 -10
  510. package/dist/store/open.d.ts +2 -5
  511. package/dist/store/open.js +42 -54
  512. package/dist/store/pilot-arm.d.ts +12 -0
  513. package/dist/store/pilot-arm.js +42 -0
  514. package/dist/store/port.d.ts +68 -6
  515. package/dist/store/port.js +8 -0
  516. package/dist/store/predictions.d.ts +1 -2
  517. package/dist/store/predictions.js +3 -6
  518. package/dist/store/project-tags.d.ts +62 -0
  519. package/dist/store/project-tags.js +67 -0
  520. package/dist/store/quality-repair.js +1 -1
  521. package/dist/store/quarantine.js +2 -1
  522. package/dist/store/recall-trace.d.ts +2 -0
  523. package/dist/store/recall-trace.js +20 -3
  524. package/dist/store/rejected-values.js +16 -10
  525. package/dist/store/rejection-probe.d.ts +4 -0
  526. package/dist/store/rejection-probe.js +19 -0
  527. package/dist/store/rejection.d.ts +0 -17
  528. package/dist/store/rejection.js +1 -21
  529. package/dist/store/rows.js +2 -2
  530. package/dist/store/rule-sql.d.ts +11 -0
  531. package/dist/store/rule-sql.js +31 -6
  532. package/dist/store/search-rows.d.ts +5 -5
  533. package/dist/store/search-rows.js +18 -16
  534. package/dist/store/sessions.js +4 -2
  535. package/dist/store/set-aside.d.ts +14 -0
  536. package/dist/store/set-aside.js +23 -0
  537. package/dist/store/sqlite/busy.d.ts +3 -0
  538. package/dist/store/sqlite/busy.js +8 -0
  539. package/dist/store/sqlite/connector-events-group.js +4 -7
  540. package/dist/store/sqlite/connector-writes-group.js +6 -4
  541. package/dist/store/sqlite/entry-writes-group.d.ts +3 -3
  542. package/dist/store/sqlite/entry-writes-group.js +3 -3
  543. package/dist/store/sqlite/error-codec.js +4 -3
  544. package/dist/store/sqlite/executor.js +10 -4
  545. package/dist/store/sqlite/graph-reads-group.js +1 -1
  546. package/dist/store/sqlite/held-connection.d.ts +11 -0
  547. package/dist/store/sqlite/held-connection.js +41 -0
  548. package/dist/store/sqlite/last-recall-group.d.ts +13 -0
  549. package/dist/store/sqlite/last-recall-group.js +57 -0
  550. package/dist/store/sqlite/local.d.ts +0 -17
  551. package/dist/store/sqlite/local.js +0 -31
  552. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  553. package/dist/store/sqlite/maintenance-groups.js +60 -0
  554. package/dist/store/sqlite/object-rows.d.ts +1 -1
  555. package/dist/store/sqlite/objects-group.d.ts +1 -1
  556. package/dist/store/sqlite/objects-group.js +15 -7
  557. package/dist/store/sqlite/store.d.ts +1 -8
  558. package/dist/store/sqlite/store.js +13 -22
  559. package/dist/store/summaries.d.ts +10 -3
  560. package/dist/store/summaries.js +54 -11
  561. package/dist/store/token-ledger-rows.js +3 -2
  562. package/dist/store/token-ledger.d.ts +0 -7
  563. package/dist/store/token-ledger.js +0 -35
  564. package/dist/store/vector-index.js +8 -4
  565. package/dist/support-bundle.js +2 -3
  566. package/dist/trust/reject-flow.js +2 -2
  567. package/dist/util/agent-homes.d.ts +15 -0
  568. package/dist/util/agent-homes.js +34 -0
  569. package/dist/util/anthropic-messages.d.ts +6 -1
  570. package/dist/util/anthropic-messages.js +26 -7
  571. package/dist/util/atomic-write.d.ts +5 -2
  572. package/dist/util/atomic-write.js +12 -8
  573. package/dist/util/chunked.d.ts +3 -0
  574. package/dist/util/chunked.js +10 -0
  575. package/dist/util/ellipsize.d.ts +3 -0
  576. package/dist/util/ellipsize.js +5 -0
  577. package/dist/util/env.d.ts +12 -2
  578. package/dist/util/env.js +12 -2
  579. package/dist/util/format.d.ts +5 -0
  580. package/dist/util/format.js +10 -0
  581. package/dist/util/hook-payload.d.ts +8 -0
  582. package/dist/util/hook-payload.js +37 -0
  583. package/dist/util/http-retry.d.ts +6 -0
  584. package/dist/util/http-retry.js +43 -5
  585. package/dist/util/http-util.d.ts +0 -8
  586. package/dist/util/http-util.js +10 -21
  587. package/dist/util/limits.d.ts +7 -0
  588. package/dist/util/limits.js +14 -0
  589. package/dist/util/log.d.ts +4 -0
  590. package/dist/util/log.js +9 -0
  591. package/dist/util/request-scope.d.ts +9 -3
  592. package/dist/util/request-scope.js +18 -9
  593. package/dist/util/secret-detect.js +6 -1
  594. package/dist/util/spawn-argv.d.ts +9 -0
  595. package/dist/util/spawn-argv.js +57 -0
  596. package/dist/util/sql.d.ts +3 -0
  597. package/dist/util/sql.js +6 -0
  598. package/dist/util/sqlite-blocked.d.ts +2 -0
  599. package/dist/util/sqlite-blocked.js +5 -0
  600. package/dist/util/stream-tee.d.ts +3 -0
  601. package/dist/util/stream-tee.js +35 -0
  602. package/dist/util/time.d.ts +4 -0
  603. package/dist/util/time.js +4 -0
  604. package/dist/util/vector-codec.d.ts +4 -0
  605. package/dist/util/vector-codec.js +15 -0
  606. package/dist/util/version.d.ts +1 -1
  607. package/dist/util/version.js +1 -1
  608. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  609. package/extensions/openclaw-plugin/package.json +1 -1
  610. package/openclaw.plugin.json +1 -1
  611. package/package.json +4 -2
  612. package/dist/api/on-store.d.ts +0 -16
  613. package/dist/api/on-store.js +0 -38
  614. package/dist/store/embeddings/local.d.ts +0 -15
  615. package/dist/store/embeddings/local.js +0 -175
  616. /package/dist/{cli → api}/correction-latency.d.ts +0 -0
  617. /package/dist/{cli → api}/correction-latency.js +0 -0
  618. /package/dist/{cli → api}/provenance-coverage.d.ts +0 -0
  619. /package/dist/{cli → api}/provenance-coverage.js +0 -0
  620. /package/dist/{store → core}/object-types.d.ts +0 -0
  621. /package/dist/{store → core}/object-types.js +0 -0
  622. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  623. /package/dist/{capture → util}/compaction-items.js +0 -0
  624. /package/dist/{store → util}/yaml.d.ts +0 -0
  625. /package/dist/{store → util}/yaml.js +0 -0
@@ -1,4 +1,5 @@
1
1
  // Hand-written for the JSON Schema subset the hippo tool definitions use, so the MCP server needs no validator dependency.
2
+ import { truncateWithEllipsis } from '../util/ellipsize.js';
2
3
  const ARG_PREVIEW_CHARS = 40;
3
4
  function isArgString(v) {
4
5
  return typeof v === 'string';
@@ -24,7 +25,7 @@ function describeValue(v) {
24
25
  if (Array.isArray(v))
25
26
  return 'array';
26
27
  if (isArgString(v))
27
- return JSON.stringify(v.length > ARG_PREVIEW_CHARS ? `${v.slice(0, ARG_PREVIEW_CHARS)}...` : v);
28
+ return JSON.stringify(truncateWithEllipsis(v, ARG_PREVIEW_CHARS));
28
29
  if (isArgNumber(v) || isArgBoolean(v))
29
30
  return String(v);
30
31
  return 'object';
package/dist/mcp/tools.js CHANGED
@@ -1,18 +1,18 @@
1
1
  // Tool definitions and input schemas served by tools/list.
2
2
  import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
3
3
  import { DEFAULT_ASSEMBLE_BUDGET } from '../api/assemble.js';
4
- import { MAX_ID_LEN } from '../util/http-util.js';
4
+ import { MAX_ID_LEN, MAX_LIST_LIMIT } from '../util/limits.js';
5
5
  import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
6
6
  import { DEFAULT_CONFIG } from '../core/config.js';
7
7
  // ── Tool definitions ──
8
8
  // HTTP sets no budget cap; 25x the recall default leaves room for large-context clients while bounding one call's work.
9
9
  const MAX_BUDGET_TOKENS = 25 * DEFAULT_RECALL_BUDGET;
10
- // Same ceiling as the HTTP list routes' parseListLimit.
11
- const MAX_LIST_LIMIT = 1000;
12
10
  export const TOOLS = [
13
11
  {
14
12
  name: 'hippo_recall',
15
- description: 'Retrieve relevant memories from the project memory store. Returns memories ranked by relevance, strength, and recency within the token budget. Use at session start or when you need context about a topic. Pass include_continuity=true to also surface the active task snapshot, latest matching session handoff, and recent session events as a "## Continuity" appendix.',
13
+ description: 'Retrieve relevant memories from the project memory store. Returns memories ranked by relevance, strength, and recency within the token budget. Use ' +
14
+ 'at session start or when you need context about a topic. Pass include_continuity=true to also surface the active task snapshot, latest matching ' +
15
+ 'session handoff, and recent session events as a "## Continuity" appendix.',
16
16
  inputSchema: {
17
17
  type: 'object',
18
18
  properties: {
@@ -29,28 +29,37 @@ export const TOOLS = [
29
29
  },
30
30
  scope: {
31
31
  type: 'string',
32
- description: 'Restrict results and continuity to memories/rows matching this scope exactly. When omitted, default-deny applies to ANY <source>:private:* (slack, github, ...) and unknown-legacy rows.',
32
+ description: 'Restrict results and continuity to memories/rows matching this scope exactly. When omitted, default-deny applies to ANY ' +
33
+ '<source>:private:* (slack, github, ...) and unknown-legacy rows.',
33
34
  },
34
35
  fresh_tail_count: {
35
36
  type: 'number',
36
- description: 'When > 0, surface the last N kind=raw rows tagged isFreshTail=true regardless of query match. Useful for "what did I just see" continuity. Capped at 200.',
37
+ description: 'When > 0, surface the last N kind=raw rows tagged isFreshTail=true regardless of query match. Useful for "what did I just see" ' +
38
+ 'continuity. Capped at 200.',
37
39
  },
38
40
  fresh_tail_session_id: {
39
41
  type: 'string',
40
- description: 'Restrict the fresh-tail window to a specific session. Without this, fresh-tail is tenant-wide (legacy v1.5.2 behaviour, pre-v1.6.3 default).',
42
+ description: 'Restrict the fresh-tail window to a specific session. Without this, fresh-tail is tenant-wide (legacy v1.5.2 behaviour, pre-v1.6.3 ' +
43
+ 'default).',
41
44
  },
42
45
  summarize_overflow: {
43
46
  type: 'boolean',
44
- description: 'When true (default), entries that overflow the limit and share a level-2 parent summary cause that summary to be appended in their place. Set false for strict-limit behaviour.',
47
+ description: 'When true (default), entries that overflow the limit and share a level-2 parent summary cause that summary to be appended in their ' +
48
+ 'place. Set false for strict-limit behaviour.',
45
49
  },
46
50
  scorer_window: {
47
51
  type: 'number',
48
- description: `How many of the top-ranked memories the fresh-tail and summarize-overflow appendix is worked out against. The main list ranks the whole tenant store, so scorer_window does not narrow it. Default ${DEFAULT_SEARCH_CANDIDATE_LIMIT}. Rejected as RecallContractError code=invalid_scorer_window if 0/negative/non-finite/non-numeric.`,
52
+ description: `How many of the top-ranked memories the fresh-tail and summarize-overflow appendix is worked out against. ` +
53
+ `The main list ranks the whole tenant store, so scorer_window does not narrow it. ` +
54
+ `Default ${DEFAULT_SEARCH_CANDIDATE_LIMIT}. ` +
55
+ `Rejected as RecallContractError code=invalid_scorer_window if 0/negative/non-finite/non-numeric.`,
49
56
  },
50
57
  session_id: {
51
58
  type: 'string',
52
59
  maxLength: MAX_ID_LEN,
53
- description: `Optional session id (v1.7.4). When set AND (tenant, session) has active goals, applies the dlPFC goal-stack boost to the ranked memories before formatting. Mirrors fresh_tail_session_id shape (${MAX_ID_LEN}-char cap).`,
60
+ description: `Optional session id (v1.7.4). When set AND (tenant, session) has active goals, ` +
61
+ `applies the dlPFC goal-stack boost to the ranked memories before formatting. ` +
62
+ `Mirrors fresh_tail_session_id shape (${MAX_ID_LEN}-char cap).`,
54
63
  },
55
64
  },
56
65
  required: ['query'],
@@ -58,7 +67,9 @@ export const TOOLS = [
58
67
  },
59
68
  {
60
69
  name: 'hippo_assemble',
61
- description: 'Build a chronologically-ordered context window for a session. Returns ordered items: fresh-tail raw rows + level-2 summary substitutions for older rows + budget-fit. Hippo-additive vs lossless-claw: eviction picks lowest-strength non-fresh-tail items first instead of oldest-first. Tenant-scoped; default-deny on private scopes.',
70
+ description: 'Build a chronologically-ordered context window for a session. Returns ordered items: fresh-tail raw rows + level-2 summary substitutions for older ' +
71
+ 'rows + budget-fit. Hippo-additive vs lossless-claw: eviction picks lowest-strength non-fresh-tail items first instead of oldest-first. ' +
72
+ 'Tenant-scoped; default-deny on private scopes.',
62
73
  inputSchema: {
63
74
  type: 'object',
64
75
  properties: {
@@ -82,7 +93,8 @@ export const TOOLS = [
82
93
  },
83
94
  scope: {
84
95
  type: 'string',
85
- description: 'Restrict to memories whose scope matches exactly. When omitted, default-deny applies to ANY <source>:private:* scope and unknown:legacy rows. Pass an explicit scope to assemble a private session with consent.',
96
+ description: 'Restrict to memories whose scope matches exactly. When omitted, default-deny applies to ANY <source>:private:* scope and ' +
97
+ 'unknown:legacy rows. Pass an explicit scope to assemble a private session with consent.',
86
98
  },
87
99
  },
88
100
  required: ['session_id'],
@@ -90,7 +102,8 @@ export const TOOLS = [
90
102
  },
91
103
  {
92
104
  name: 'hippo_drill',
93
- description: 'Walk one step down the DAG from a level-2+ topic summary to its direct children. Companion to hippo_recall: when recall returns an item with isSummary=true and substitutedFor=[ids], pass the summary id here to recover the original detail. Tenant-scoped; default-deny on private scopes.',
105
+ description: 'Walk one step down the DAG from a level-2+ topic summary to its direct children. Companion to hippo_recall: when recall returns an item with ' +
106
+ 'isSummary=true and substitutedFor=[ids], pass the summary id here to recover the original detail. Tenant-scoped; default-deny on private scopes.',
94
107
  inputSchema: {
95
108
  type: 'object',
96
109
  properties: {
@@ -114,7 +127,8 @@ export const TOOLS = [
114
127
  type: 'integer',
115
128
  minimum: 1,
116
129
  maximum: 10,
117
- description: 'v0.30 / E5: walk N levels down (default 1 = direct children only). Higher values include children of children. Token budget remains GLOBAL across levels. Hard cap 10.',
130
+ description: 'v0.30 / E5: walk N levels down (default 1 = direct children only). Higher values include children of children. Token budget remains ' +
131
+ 'GLOBAL across levels. Hard cap 10.',
118
132
  },
119
133
  },
120
134
  required: ['summary_id'],
@@ -122,7 +136,8 @@ export const TOOLS = [
122
136
  },
123
137
  {
124
138
  name: 'hippo_remember',
125
- description: 'Store a new memory. Use when you learn something non-obvious, hit an error, or discover a useful pattern. Memories decay over time unless retrieved. Errors get 2x half-life.',
139
+ description: 'Store a new memory. Use when you learn something non-obvious, hit an error, or discover a useful pattern. Memories decay over time unless retrieved. ' +
140
+ 'Errors get 2x half-life.',
126
141
  inputSchema: {
127
142
  type: 'object',
128
143
  properties: {
@@ -133,14 +148,16 @@ export const TOOLS = [
133
148
  error: { type: 'boolean', description: 'Mark as error memory (doubles half-life)' },
134
149
  pin: { type: 'boolean', description: 'Pin memory (never decays)' },
135
150
  tag: { type: 'string', description: 'Optional tag for categorization' },
136
- personal: { type: 'boolean', description: 'Store it as your own private memory: only you can recall it, in every project. Needs a key you minted or a sign-in.' },
151
+ personal: { type: 'boolean', description: 'Store it as your own private memory: only you can recall it, in every project. Needs a key you minted or ' +
152
+ 'a sign-in.' },
137
153
  },
138
154
  required: ['text'],
139
155
  },
140
156
  },
141
157
  {
142
158
  name: 'hippo_outcome',
143
- description: "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.",
159
+ description: "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 " +
160
+ "completing work.",
144
161
  inputSchema: {
145
162
  type: 'object',
146
163
  properties: {
@@ -154,7 +171,9 @@ export const TOOLS = [
154
171
  },
155
172
  {
156
173
  name: 'hippo_context',
157
- description: 'Smart context injection: auto-detects current task from git state and returns relevant memories plus the active task snapshot, session handoff and recent session trail (the same bundle as GET /v1/context). Use at the start of any session. Memories and those sections are scope-filtered: a no-scope caller does NOT see ANY <source>:private:* (slack, github, ...) or legacy-quarantine rows.',
174
+ description: 'Smart context injection: auto-detects current task from git state and returns relevant memories plus the active task snapshot, session handoff and ' +
175
+ 'recent session trail (the same bundle as GET /v1/context). Use at the start of any session. Memories and those sections are scope-filtered: a ' +
176
+ 'no-scope caller does NOT see ANY <source>:private:* (slack, github, ...) or legacy-quarantine rows.',
158
177
  inputSchema: {
159
178
  type: 'object',
160
179
  properties: {
@@ -166,7 +185,8 @@ export const TOOLS = [
166
185
  },
167
186
  scope: {
168
187
  type: 'string',
169
- description: 'Restrict memories, snapshot, handoff and trail to this scope exactly. When omitted, default-deny applies to ANY <source>:private:* (slack, github, ...) and unknown-legacy rows.',
188
+ description: 'Restrict memories, snapshot, handoff and trail to this scope exactly. When omitted, default-deny applies to ANY <source>:private:* ' +
189
+ '(slack, github, ...) and unknown-legacy rows.',
170
190
  },
171
191
  },
172
192
  },
@@ -234,13 +254,16 @@ export const TOOLS = [
234
254
  },
235
255
  {
236
256
  name: 'hippo_predict_baserate',
237
- description: 'J3 reference-class / planning-fallacy detector. Get base-rate stats for closed predictions in a class. Call this when you make a forward-looking claim (effort estimate, rollout risk, deadline) to anchor on the past track record rather than the inside view. Returns count + mean estimate + mean actual + mean ratio + median ratio + MAE + a human-readable summary. Tenant-scoped.',
257
+ description: 'J3 reference-class / planning-fallacy detector. Get base-rate stats for closed predictions in a class. Call this when you make a forward-looking ' +
258
+ 'claim (effort estimate, rollout risk, deadline) to anchor on the past track record rather than the inside view. Returns count + mean estimate + ' +
259
+ 'mean actual + mean ratio + median ratio + MAE + a human-readable summary. Tenant-scoped.',
238
260
  inputSchema: {
239
261
  type: 'object',
240
262
  properties: {
241
263
  class_tag: {
242
264
  type: 'string',
243
- description: 'Cohort label, e.g. "migration-effort", "rollout-risk", "deadline-week". Must match the class_tag used when the predictions were created via hippo_predict (or `hippo predict ...`).',
265
+ description: 'Cohort label, e.g. "migration-effort", "rollout-risk", "deadline-week". Must match the class_tag used when the predictions were ' +
266
+ 'created via hippo_predict (or `hippo predict ...`).',
244
267
  },
245
268
  },
246
269
  required: ['class_tag'],
@@ -2,8 +2,8 @@
2
2
  * The `customer_notes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
3
3
  import type { KeysetPosition } from '../util/keyset.js';
4
4
  import type { SavableDescriptor } from './descriptor.js';
5
- import type { CustomerNote, NoteStatus } from '../store/object-types.js';
6
- export type { CustomerNote, NoteStatus } from '../store/object-types.js';
5
+ import type { CustomerNote, NoteStatus } from '../core/object-types.js';
6
+ export type { CustomerNote, NoteStatus } from '../core/object-types.js';
7
7
  export declare const VALID_NOTE_STATES: ReadonlySet<NoteStatus>;
8
8
  /** Field caps (untrusted at the HTTP/SDK boundary). note is a body, so a larger cap
9
9
  * than the 4096 short-field convention. */
@@ -3,8 +3,8 @@
3
3
  import type { MemoryEntry } from '../core/memory.js';
4
4
  import type { KeysetPosition } from '../util/keyset.js';
5
5
  import type { SavableDescriptor } from './descriptor.js';
6
- import type { Decision, DecisionStatus } from '../store/object-types.js';
7
- export type { Decision, DecisionStatus } from '../store/object-types.js';
6
+ import type { Decision, DecisionStatus } from '../core/object-types.js';
7
+ export type { Decision, DecisionStatus } from '../core/object-types.js';
8
8
  export declare const VALID_DECISION_STATES: ReadonlySet<DecisionStatus>;
9
9
  export interface SaveDecisionOpts {
10
10
  decisionText: string;
@@ -1,5 +1,5 @@
1
1
  import type { KeysetPosition } from '../util/keyset.js';
2
- import type { ObjectByKind, ObjectFields, ObjectKind, SavableKind } from '../store/object-types.js';
2
+ import type { ObjectByKind, ObjectFields, ObjectKind, SavableKind } from '../core/object-types.js';
3
3
  export interface ObjectDescriptor<K extends ObjectKind> {
4
4
  readonly kind: K;
5
5
  /** The nouns error text uses: "brief 3 not found", "only active briefs". */
@@ -3,9 +3,9 @@
3
3
  * linked_memory_ids must all exist in the SAME tenant or save throws before the insert. */
4
4
  import type { KeysetPosition } from '../util/keyset.js';
5
5
  import type { ObjectDescriptor } from './descriptor.js';
6
- import type { Incident, IncidentStatus } from '../store/object-types.js';
6
+ import type { Incident, IncidentStatus } from '../core/object-types.js';
7
7
  import { type Objects } from '../store/port.js';
8
- export type { Incident, IncidentStatus } from '../store/object-types.js';
8
+ export type { Incident, IncidentStatus } from '../core/object-types.js';
9
9
  export declare const VALID_INCIDENT_STATES: ReadonlySet<IncidentStatus>;
10
10
  export interface SaveIncidentOpts {
11
11
  incidentText: string;
@@ -1,5 +1,5 @@
1
1
  import { type MemoryEntry } from '../core/memory.js';
2
- import type { ObjectByKind, ObjectKind, SavableKind } from '../store/object-types.js';
2
+ import type { ObjectByKind, ObjectKind, SavableKind } from '../core/object-types.js';
3
3
  import { type Objects } from '../store/port.js';
4
4
  import type { ObjectDescriptor, ObjectListOpts, SavableDescriptor } from './descriptor.js';
5
5
  /** Newest first. */
@@ -1,6 +1,7 @@
1
1
  // Save, close, load-by-id and list for every typed object: the checks, the mirror memory and the error text, over the `objects` store group.
2
2
  // Each flow is written twice over the same steps: `...At` answers at once on hippo.db for the CLI, and the other awaits a served store's group for the routes.
3
3
  // The tenant, the fields and the list status are checked first, so a bad request fails before a store is asked.
4
+ import { DEFAULT_LIST_LIMIT } from '../util/limits.js';
4
5
  import { BadRequestError, ConflictError, NotFoundError } from '../core/api-errors.js';
5
6
  import { loadConfig } from '../core/config.js';
6
7
  import { createMemory, Layer } from '../core/memory.js';
@@ -13,7 +14,7 @@ function listQuery(d, tenantId, opts) {
13
14
  if (opts.status && !d.states.has(opts.status)) {
14
15
  throw new BadRequestError(`${d.fn.list}: status must be one of ${Array.from(d.states).join('|')}; got ${opts.status}`);
15
16
  }
16
- return { status: opts.status || undefined, filter: opts.filter || undefined, limit: opts.limit ?? 100, after: opts.after };
17
+ return { status: opts.status || undefined, filter: opts.filter || undefined, limit: opts.limit ?? DEFAULT_LIST_LIMIT, after: opts.after };
17
18
  }
18
19
  /** Newest first. */
19
20
  export function listObjectsAt(hippoRoot, d, tenantId, opts) {
@@ -3,9 +3,9 @@
3
3
  * All dates are normalised to ISO-8601 (`toISOString`) at the store boundary so the lexical half-open comparison is sound. */
4
4
  import type { KeysetPosition } from '../util/keyset.js';
5
5
  import type { SavableDescriptor } from './descriptor.js';
6
- import type { Policy, PolicyStatus } from '../store/object-types.js';
6
+ import type { Policy, PolicyStatus } from '../core/object-types.js';
7
7
  import type { Objects } from '../store/port.js';
8
- export type { Policy, PolicyStatus } from '../store/object-types.js';
8
+ export type { Policy, PolicyStatus } from '../core/object-types.js';
9
9
  export declare const VALID_POLICY_STATES: ReadonlySet<PolicyStatus>;
10
10
  export interface SavePolicyOpts {
11
11
  policyName: string;
@@ -1,6 +1,7 @@
1
1
  /** Policy object: a rule in force over a valid-time range [valid_from, valid_to), evolving via supersession; `loadPoliciesAsOf` queries it.
2
2
  * Transaction-time travel (what we believed at past system time T) is deferred. Superseding keeps the predecessor's valid-time range.
3
3
  * All dates are normalised to ISO-8601 (`toISOString`) at the store boundary so the lexical half-open comparison is sound. */
4
+ import { DEFAULT_LIST_LIMIT } from '../util/limits.js';
4
5
  import { BadRequestError } from '../core/api-errors.js';
5
6
  import { assertTenantId } from '../store/tenant.js';
6
7
  import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
@@ -97,6 +98,6 @@ function inForceQuery(tenantId, asOfDate, opts) {
97
98
  const asOf = /^\d{4}-\d{2}-\d{2}$/.test(asOfDate.trim())
98
99
  ? normalizePolicyDate(`${asOfDate.trim()}T23:59:59.999Z`, 'asOfDate')
99
100
  : normalizePolicyDate(asOfDate, 'asOfDate');
100
- return { asOf, name: opts.name, limit: opts.limit ?? 100 };
101
+ return { asOf, name: opts.name, limit: opts.limit ?? DEFAULT_LIST_LIMIT };
101
102
  }
102
103
  //# sourceMappingURL=policies.js.map
@@ -4,8 +4,8 @@
4
4
  import type { KeysetPosition } from '../util/keyset.js';
5
5
  import { type JsonValue } from '../util/json.js';
6
6
  import type { SavableDescriptor } from './descriptor.js';
7
- import type { Process, ProcessStatus } from '../store/object-types.js';
8
- export type { Process, ProcessStatus } from '../store/object-types.js';
7
+ import type { Process, ProcessStatus } from '../core/object-types.js';
8
+ export type { Process, ProcessStatus } from '../core/object-types.js';
9
9
  export declare const VALID_PROCESS_STATES: ReadonlySet<ProcessStatus>;
10
10
  /** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
11
11
  export declare const MAX_PROCESS_STEPS = 200;
@@ -4,9 +4,9 @@
4
4
  import type { KeysetPosition } from '../util/keyset.js';
5
5
  import type { SavableDescriptor } from './descriptor.js';
6
6
  import { type ObjectSaveSite } from './lifecycle.js';
7
- import type { BriefStatus, ProjectBrief } from '../store/object-types.js';
7
+ import type { BriefStatus, ProjectBrief } from '../core/object-types.js';
8
8
  import type { Objects } from '../store/port.js';
9
- export type { BriefStatus, ProjectBrief } from '../store/object-types.js';
9
+ export type { BriefStatus, ProjectBrief } from '../core/object-types.js';
10
10
  export declare const VALID_BRIEF_STATES: ReadonlySet<BriefStatus>;
11
11
  /** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
12
12
  * cap than the 4096 short-field convention. */
@@ -1,6 +1,7 @@
1
1
  /** Project_brief object: the living, repo-scoped `summary` of a repository, evolving via supersession.
2
2
  * `refreshBrief` assembles recent `path:<repo>` receipts with a deterministic (no-LLM) assembler; an LLM pipeline is deferred.
3
3
  * The `project_briefs` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
4
+ import { truncateWithEllipsis } from '../util/ellipsize.js';
4
5
  import { BadRequestError } from '../core/api-errors.js';
5
6
  import { assertTenantId } from '../store/tenant.js';
6
7
  import { checkText, requireLine } from './fields.js';
@@ -87,9 +88,7 @@ function newestActive(repo) {
87
88
  function receiptHeadline(content) {
88
89
  const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
89
90
  const trimmed = firstLine.trim();
90
- return trimmed.length > MAX_RECEIPT_HEADLINE_LEN
91
- ? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
92
- : trimmed;
91
+ return truncateWithEllipsis(trimmed, MAX_RECEIPT_HEADLINE_LEN);
93
92
  }
94
93
  /** The tag a memory of the repo carries; the store matches it whole, so `path:hip` never matches `path:hippo`. */
95
94
  function receiptTag(normalizedRepo) {
@@ -3,9 +3,9 @@
3
3
  * `trigger` is stored in `trigger_text` because it is a SQLite reserved keyword. */
4
4
  import type { KeysetPosition } from '../util/keyset.js';
5
5
  import type { SavableDescriptor } from './descriptor.js';
6
- import type { Skill, SkillStatus } from '../store/object-types.js';
6
+ import type { Skill, SkillStatus } from '../core/object-types.js';
7
7
  import type { Objects } from '../store/port.js';
8
- export type { Skill, SkillStatus } from '../store/object-types.js';
8
+ export type { Skill, SkillStatus } from '../core/object-types.js';
9
9
  export declare const VALID_SKILL_STATES: ReadonlySet<SkillStatus>;
10
10
  /** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
11
11
  * larger cap than the 4096 short-field convention. */
@@ -3,7 +3,7 @@ import * as fs from 'node:fs';
3
3
  import * as os from 'node:os';
4
4
  import * as path from 'node:path';
5
5
  import { detectRealCodexPath, isCodexWrapperInstalled, repairCodexWrapperIfInstalled } from './hooks/codex-wrapper.js';
6
- import { claudeConfigDir } from './hooks/shared.js';
6
+ import { claudeConfigDir } from './util/agent-homes.js';
7
7
  import { errorMessage, log } from './util/log.js';
8
8
  function main() {
9
9
  if (envSkipPostinstall())
@@ -3,7 +3,7 @@ import { buildRelevanceRequest, JEV_DEFAULT_TOP_K, rankByScores } from './jev.js
3
3
  import { createOutageWarning } from './outage-warning.js';
4
4
  import { rerankerPost, RERANKER_MAX_REPLY_BYTES } from './remote.js';
5
5
  import { readCappedJson } from '../util/capped-json.js';
6
- import { isJsonObject } from '../util/json.js';
6
+ import { isJsonObject, isJsonString } from '../util/json.js';
7
7
  import { errorMessage } from '../util/log.js';
8
8
  const RAY_ID_MAX_CHARS = 64;
9
9
  const CLEF_MODELS = ['clef-flash', 'clef'];
@@ -23,9 +23,6 @@ function isLoopback(hostname) {
23
23
  function isNumber(v) {
24
24
  return Number.isFinite(v);
25
25
  }
26
- function isString(v) {
27
- return v !== undefined && v !== null && v.constructor === String;
28
- }
29
26
  function isRejection(v) {
30
27
  return v.constructor === String;
31
28
  }
@@ -83,7 +80,7 @@ export function parseClefReply(body, n, model, requireModel) {
83
80
  if (!isJsonObject(reply))
84
81
  return 'reply has no result object';
85
82
  const actual = reply.model;
86
- if (actual !== undefined && (!isString(actual) || actual.trim() !== model))
83
+ if (actual !== undefined && (!isJsonString(actual) || actual.trim() !== model))
87
84
  return 'reply names a different model';
88
85
  if (actual === undefined && requireModel)
89
86
  return 'reply does not name its model';
@@ -105,7 +102,7 @@ export function parseClefReply(body, n, model, requireModel) {
105
102
  const usage = isJsonObject(reply.usage) ? reply.usage : {};
106
103
  return {
107
104
  scores,
108
- actualModel: isString(actual) ? actual.trim() : undefined,
105
+ actualModel: isJsonString(actual) ? actual.trim() : undefined,
109
106
  inputTokens: isNumber(usage.input_tokens) ? usage.input_tokens : undefined,
110
107
  outputTokens: isNumber(usage.output_tokens) ? usage.output_tokens : undefined,
111
108
  };
@@ -1,4 +1,33 @@
1
1
  import type { RerankerFn } from './types.js';
2
- /** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. */
3
- export declare const crossEncoderReranker: RerankerFn;
2
+ interface Tokenized {
3
+ readonly input_ids: object;
4
+ readonly attention_mask: object;
5
+ }
6
+ type TokenizerFn = (text: string, opts: {
7
+ text_pair: string;
8
+ padding: boolean;
9
+ truncation: boolean;
10
+ }) => Promise<Tokenized>;
11
+ type SeqClsModel = (inputs: Tokenized) => Promise<{
12
+ logits: {
13
+ data: ArrayLike<number>;
14
+ };
15
+ }>;
16
+ interface FromPretrained<T> {
17
+ from_pretrained: (model: string) => Promise<T>;
18
+ }
19
+ interface TransformersExports {
20
+ AutoTokenizer?: FromPretrained<TokenizerFn>;
21
+ AutoModelForSequenceClassification?: FromPretrained<SeqClsModel>;
22
+ }
23
+ interface TransformersModuleNamespace extends TransformersExports {
24
+ default?: TransformersExports;
25
+ }
26
+ type ImportModule = () => Promise<{
27
+ readonly name: string;
28
+ readonly mod: TransformersModuleNamespace;
29
+ } | null>;
30
+ /** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. Each instance owns its model and outage warning. */
31
+ export declare function createCrossEncoderReranker(importModule?: ImportModule): RerankerFn;
32
+ export {};
4
33
  //# sourceMappingURL=cross-encoder.d.ts.map
@@ -1,112 +1,59 @@
1
- import { createRequire } from 'node:module';
2
- import { pathToFileURL } from 'node:url';
3
1
  import { createOutageWarning } from './outage-warning.js';
4
2
  import { compareScoresDesc } from '../core/compare.js';
5
- import { errorMessage, log } from '../util/log.js';
3
+ import { createModelLoads, importTransformers, MODEL_LOAD_POLICY } from '../embeddings/transformers.js';
4
+ import { errorFields, errorMessage, log } from '../util/log.js';
6
5
  const DEFAULT_CROSS_ENCODER_TOP_K = 50;
7
6
  const MODEL_NAME = 'Xenova/ms-marco-MiniLM-L-6-v2';
8
- const _require = createRequire(import.meta.url);
9
- const TRANSFORMERS_PACKAGES = ['@huggingface/transformers', '@xenova/transformers'];
10
- // Returns the ESM entry URL, the same build src/store/embeddings/index.ts imports; a require-style resolve picks the CommonJS build and
11
- // puts a second copy of the library, with its own ONNX sessions, in the process.
12
- function resolveTransformersPackage() {
13
- for (const name of TRANSFORMERS_PACKAGES) {
14
- try {
15
- return import.meta.resolve(name);
16
- }
17
- catch {
18
- // import.meta.resolve is missing under some module runners (vitest's
19
- // included); fall through to the require-based resolve there.
20
- try {
21
- return pathToFileURL(_require.resolve(name)).href;
22
- }
23
- catch {
24
- // Try the legacy fallback only when the preferred package is not installed.
25
- }
26
- }
27
- }
28
- return null;
29
- }
30
- async function loadTransformersModule() {
31
- // Import one backend only. Loading both native ONNX runtimes in one process
32
- // can abort during finalization; Hugging Face is the maintained default.
33
- const url = resolveTransformersPackage();
34
- if (!url)
35
- return null;
36
- try {
37
- const mod = await import(/* @vite-ignore */ url);
38
- const tok = mod.AutoTokenizer ?? mod.default?.AutoTokenizer;
39
- const seq = mod.AutoModelForSequenceClassification ?? mod.default?.AutoModelForSequenceClassification;
40
- return tok && seq ? { AutoTokenizer: tok, AutoModelForSequenceClassification: seq } : null;
41
- }
42
- catch (err) {
43
- log.debug(`cross-encoder: transformers import failed: ${errorMessage(err)}`);
44
- return null;
45
- }
7
+ async function importModelClasses(importModule) {
8
+ const imported = await importModule();
9
+ if (!imported)
10
+ throw new Error('no Transformers.js package is installed');
11
+ const { name, mod } = imported;
12
+ const tok = mod.AutoTokenizer ?? mod.default?.AutoTokenizer;
13
+ const seq = mod.AutoModelForSequenceClassification ?? mod.default?.AutoModelForSequenceClassification;
14
+ if (!tok || !seq)
15
+ throw new Error(`${name} exports no AutoTokenizer or AutoModelForSequenceClassification`);
16
+ return { AutoTokenizer: tok, AutoModelForSequenceClassification: seq };
46
17
  }
47
- let pipelineLoading = null;
48
- const outage = createOutageWarning('cross-encoder', 'falling back to identity ordering');
49
18
  // NOT the text-classification pipeline: this is a num_labels=1 regression head and that pipeline softmaxes a length-1 logit vector (always 1.0).
50
19
  // Read the logit, then squash it.
51
- async function buildPipeline() {
52
- try {
53
- const mod = await loadTransformersModule();
54
- if (!mod)
55
- return null;
56
- const [tokenizer, model] = await Promise.all([
57
- mod.AutoTokenizer.from_pretrained(MODEL_NAME),
58
- mod.AutoModelForSequenceClassification.from_pretrained(MODEL_NAME),
59
- ]);
60
- return async (query, candidate) => {
61
- const inputs = await tokenizer(query, {
62
- text_pair: candidate,
63
- padding: true,
64
- truncation: true,
65
- });
66
- const { logits } = await model(inputs);
67
- const score = 1 / (1 + Math.exp(-Number(logits.data[0])));
68
- // NaN would make the sort comparator a no-op; throwing hands this
69
- // candidate to the per-candidate fallback instead.
70
- if (!Number.isFinite(score))
71
- throw new Error('cross-encoder returned a non-finite score');
72
- return score;
73
- };
74
- }
75
- catch (err) {
76
- log.debug(`cross-encoder: model load failed: ${errorMessage(err)}`);
77
- return null;
78
- }
20
+ async function buildPipeline(importModule) {
21
+ const mod = await importModelClasses(importModule);
22
+ const [tokenizer, model] = await Promise.all([
23
+ mod.AutoTokenizer.from_pretrained(MODEL_NAME),
24
+ mod.AutoModelForSequenceClassification.from_pretrained(MODEL_NAME),
25
+ ]);
26
+ return async (query, candidate) => {
27
+ const inputs = await tokenizer(query, {
28
+ text_pair: candidate,
29
+ padding: true,
30
+ truncation: true,
31
+ });
32
+ const { logits } = await model(inputs);
33
+ const score = 1 / (1 + Math.exp(-Number(logits.data[0])));
34
+ // NaN would make the sort comparator a no-op; throwing hands this
35
+ // candidate to the per-candidate fallback instead.
36
+ if (!Number.isFinite(score))
37
+ throw new Error('cross-encoder returned a non-finite score');
38
+ return score;
39
+ };
79
40
  }
80
- // One shared in-flight load: two first calls must not fetch the model twice.
81
- // A failed load clears the slot so a later call can try again.
82
- function loadPipeline() {
83
- pipelineLoading ??= buildPipeline().then((pipe) => {
84
- if (!pipe)
85
- pipelineLoading = null;
86
- return pipe;
87
- });
88
- return pipelineLoading;
41
+ /** The head in its input order, scored as it came. */
42
+ function identityOrder(head) {
43
+ return head.map((r, i) => ({
44
+ ...r,
45
+ rerankScore: r.score,
46
+ preRerankRank: r.preRerankRank ?? i + 1,
47
+ postRerankRank: i + 1,
48
+ }));
89
49
  }
90
- /** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. */
91
- export const crossEncoderReranker = async (query, results, options) => {
92
- const topK = options?.topK ?? DEFAULT_CROSS_ENCODER_TOP_K;
93
- const head = results.slice(0, topK);
94
- const pipe = await loadPipeline();
95
- if (!pipe) {
96
- // A silent identity fallback otherwise reads as a working reranker.
97
- outage.failed('no Transformers.js backend, or model fetch blocked');
98
- return head.map((r, i) => ({
99
- ...r,
100
- rerankScore: r.score,
101
- preRerankRank: r.preRerankRank ?? i + 1,
102
- postRerankRank: i + 1,
103
- }));
104
- }
105
- outage.answered();
50
+ async function scoreHead(pipe, query, head) {
51
+ let succeeded = 0;
106
52
  const scored = await Promise.all(head.map(async (r, i) => {
107
53
  let ceScore;
108
54
  try {
109
55
  ceScore = await pipe(query, r.entry.content);
56
+ succeeded++;
110
57
  }
111
58
  catch (err) {
112
59
  // One bad inference must not sink the whole pass.
@@ -124,6 +71,32 @@ export const crossEncoderReranker = async (query, results, options) => {
124
71
  // relevance order, never an arbitrary content order.
125
72
  scored.sort((a, b) => compareScoresDesc(a.rerankScore, b.rerankScore));
126
73
  scored.forEach((r, i) => (r.postRerankRank = i + 1));
127
- return scored;
128
- };
74
+ return { results: scored, succeeded };
75
+ }
76
+ /** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. Each instance owns its model and outage warning. */
77
+ export function createCrossEncoderReranker(importModule = importTransformers) {
78
+ const outage = createOutageWarning('cross-encoder', 'falling back to identity ordering');
79
+ // The outage warning already says each failure, at most once per window, so the loads report nothing themselves.
80
+ const pipelines = createModelLoads(MODEL_LOAD_POLICY);
81
+ return async (query, results, options) => {
82
+ const head = results.slice(0, options?.topK ?? DEFAULT_CROSS_ENCODER_TOP_K);
83
+ let pipe;
84
+ try {
85
+ // One shared load per backoff window: two first calls fetch the model once, and a failure is not fetched again on every recall.
86
+ pipe = await pipelines.load(MODEL_NAME, () => buildPipeline(importModule));
87
+ }
88
+ catch (err) {
89
+ // A silent identity fallback otherwise reads as a working reranker.
90
+ outage.failed(errorMessage(err), errorFields(err));
91
+ return identityOrder(head);
92
+ }
93
+ const { results: scored, succeeded } = await scoreHead(pipe, query, head);
94
+ // A loaded model whose every call throws is as dead as one that never loaded.
95
+ if (head.length > 0 && succeeded === 0)
96
+ outage.failed('every inference failed');
97
+ else
98
+ outage.answered();
99
+ return scored;
100
+ };
101
+ }
129
102
  //# sourceMappingURL=cross-encoder.js.map