hippo-memory 1.69.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Skills as a first-class, versioned object.
3
+ *
4
+ * A `skill` is a reusable, agent-followable capability: an `instructions` body
5
+ * plus an optional `trigger` ("when to apply"), evolving via the supersede delta
6
+ * lifecycle. "Executable" is scoped to an agent-followable INSTRUCTION that, once
7
+ * exported into the agent's in-force rules (AGENTS.md / CLAUDE.md) via
8
+ * `exportSkills`, is executed by the agent reading it. Literal code/command
9
+ * execution is deferred (security; a future sandbox). The distinguishing
10
+ * capability is therefore the EXPORT renderer, not a runtime.
11
+ *
12
+ * Reuses the process/decision supersede machinery verbatim (superseded_by self-FK
13
+ * + CAS + INSERT-preflight + server-derived version + change_summary + supersede
14
+ * tenant-match trigger). It DROPS process's `steps` (a skill's content is a single
15
+ * `instructions` body) and ADDS `trigger` (stored in the `trigger_text` column -
16
+ * `trigger` is a SQLite reserved keyword).
17
+ *
18
+ * The `skills` table is the source of truth (survives memory decay); the memory
19
+ * mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
20
+ *
21
+ * Lifecycle: active -> superseded (a newer version replaces it) or active ->
22
+ * closed (retired). Export renders ACTIVE skills only.
23
+ */
24
+ import { BadRequestError } from '../core/api-errors.js';
25
+ import { assertTenantId } from '../store/tenant.js';
26
+ import { checkText, requireLine } from './fields.js';
27
+ import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
28
+ import { sqliteObjects } from '../store/sqlite/objects-group.js';
29
+ // ---------------------------------------------------------------------------
30
+ // Domain types
31
+ // ---------------------------------------------------------------------------
32
+ export const VALID_SKILL_STATES = new Set([
33
+ 'active',
34
+ 'superseded',
35
+ 'closed',
36
+ ]);
37
+ /** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
38
+ * larger cap than the 4096 short-field convention. */
39
+ export const MAX_SKILL_NAME_LEN = 256;
40
+ export const MAX_SKILL_INSTRUCTIONS_LEN = 8192;
41
+ export const MAX_SKILL_TRIGGER_LEN = 1024;
42
+ /** Aggregate bound on a single export render so the export body is never unbounded.
43
+ * Realistic active-skill counts are tens; 1000 is a generous bound. */
44
+ export const MAX_EXPORT_SKILLS = 1000;
45
+ // ---------------------------------------------------------------------------
46
+ // Validation
47
+ // ---------------------------------------------------------------------------
48
+ /** The trigger as stored, or null for none. One line, because a newline would forge a heading inside the exported **When:** line. */
49
+ function checkTrigger(trigger) {
50
+ if (trigger === undefined || trigger === null || trigger.trim().length === 0)
51
+ return null;
52
+ if (trigger.length > MAX_SKILL_TRIGGER_LEN) {
53
+ throw new BadRequestError(`saveSkill: trigger exceeds the ${MAX_SKILL_TRIGGER_LEN}-char cap`);
54
+ }
55
+ if (/[\r\n]/.test(trigger)) {
56
+ throw new BadRequestError('saveSkill: trigger must be a single line (no newlines)');
57
+ }
58
+ return trigger;
59
+ }
60
+ /** Recall-surface content for the memory mirror: name + optional trigger +
61
+ * instructions. Named (mirrors buildProcessContent) so the recall surface is
62
+ * deterministic + unit-testable. */
63
+ function buildSkillContent(skillName, instructions, trigger) {
64
+ let content = skillName;
65
+ if (trigger)
66
+ content += `\n\nWhen: ${trigger}`;
67
+ content += `\n\n${instructions}`;
68
+ return content;
69
+ }
70
+ export const SKILL = {
71
+ kind: 'skill',
72
+ label: 'skill',
73
+ plural: 'skills',
74
+ fn: { get: 'loadSkillById', close: 'closeSkill', list: 'loadSkills', save: 'saveSkill' },
75
+ states: VALID_SKILL_STATES,
76
+ closableFrom: ['active'],
77
+ draft(opts) {
78
+ // The name becomes an H2 header in the export, so it must be one line.
79
+ const name = requireLine(opts.skillName, MAX_SKILL_NAME_LEN, {
80
+ required: 'saveSkill: skillName is required',
81
+ singleLine: 'saveSkill: skillName must be a single line (no newlines)',
82
+ tooLong: `saveSkill: skillName exceeds the ${MAX_SKILL_NAME_LEN}-char cap`,
83
+ });
84
+ checkText(opts.instructions, MAX_SKILL_INSTRUCTIONS_LEN, {
85
+ required: 'saveSkill: instructions are required',
86
+ tooLong: `saveSkill: instructions exceed the ${MAX_SKILL_INSTRUCTIONS_LEN}-char cap`,
87
+ });
88
+ const trigger = checkTrigger(opts.trigger);
89
+ return {
90
+ fields: { name, instructions: opts.instructions, trigger },
91
+ content: buildSkillContent(name, opts.instructions, trigger),
92
+ tags: opts.extraTags ?? [],
93
+ supersedesId: opts.supersedesSkillId,
94
+ changeSummary: opts.changeSummary,
95
+ at: new Date().toISOString(),
96
+ };
97
+ },
98
+ };
99
+ // ---------------------------------------------------------------------------
100
+ // Public API
101
+ // ---------------------------------------------------------------------------
102
+ /**
103
+ * Create a skill (or a new version that supersedes an existing one). Writes the
104
+ * memory mirror + the skills row in the `objects` store group's one transaction. When
105
+ * supersedesSkillId is given, the referenced ACTIVE row is preflighted (status +
106
+ * version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
107
+ * the new version = predecessor.version + 1 (server-derived).
108
+ */
109
+ export function saveSkill(hippoRoot, tenantId, opts, actor = 'cli') {
110
+ return saveObjectAt(SKILL, { hippoRoot, tenantId, actor }, opts);
111
+ }
112
+ /**
113
+ * Close (retire) an active skill. A superseded row is terminal.
114
+ */
115
+ export function closeSkill(hippoRoot, tenantId, id, actor = 'cli') {
116
+ return closeObjectAt(hippoRoot, SKILL, tenantId, id, actor);
117
+ }
118
+ export function loadSkillById(hippoRoot, tenantId, id) {
119
+ return objectByIdAt(hippoRoot, SKILL, tenantId, id);
120
+ }
121
+ export function loadSkills(hippoRoot, tenantId, opts = {}) {
122
+ return listObjectsAt(hippoRoot, SKILL, tenantId, opts);
123
+ }
124
+ export function loadActiveSkills(hippoRoot, tenantId, opts = {}) {
125
+ return loadSkills(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
126
+ }
127
+ /**
128
+ * Render the tenant's ACTIVE skills into ONE AGENTS.md / CLAUDE.md-style markdown
129
+ * block (one H2 per skill, ordered by skill_name ASC for determinism), and RETURN
130
+ * the string. Does NOT write any file. Returns '' when there are no active skills.
131
+ *
132
+ * skill_name is single-line (validated on save) so it cannot break the H2 header;
133
+ * instructions are emitted verbatim (operator content). Bounded by MAX_EXPORT_SKILLS
134
+ * active rows; each field is capped on save, so the rendered string is bounded.
135
+ */
136
+ export function exportSkills(hippoRoot, tenantId) {
137
+ assertTenantId('exportSkills', tenantId);
138
+ return skillsBlock(sqliteObjects(hippoRoot).activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
139
+ }
140
+ /** `exportSkills` over a served store's group. */
141
+ export async function skillsMarkdown(objects, tenantId) {
142
+ assertTenantId('exportSkills', tenantId);
143
+ return skillsBlock(await objects.activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
144
+ }
145
+ function skillsBlock(skills) {
146
+ return skills
147
+ .map((s) => {
148
+ let block = `## ${s.skillName}`;
149
+ if (s.trigger)
150
+ block += `\n\n**When:** ${s.trigger}`;
151
+ block += `\n\n${s.instructions}`;
152
+ return block;
153
+ })
154
+ .join('\n\n');
155
+ }
156
+ //# sourceMappingURL=skills.js.map
@@ -1,9 +1,10 @@
1
- import { envSkipPostinstall } from './env.js';
1
+ import { envSkipPostinstall } from './util/env.js';
2
2
  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
6
  import { claudeConfigDir } from './hooks/shared.js';
7
+ import { errorMessage, log } from './util/log.js';
7
8
  function main() {
8
9
  if (envSkipPostinstall())
9
10
  return;
@@ -13,8 +14,9 @@ function main() {
13
14
  // hijacking, so first install is `hippo hook install codex` only.
14
15
  repairCodexWrapperIfInstalled();
15
16
  }
16
- catch {
17
+ catch (err) {
17
18
  // Never fail package install because auto-integration could not be applied.
19
+ log.debug(`postinstall: codex wrapper not repaired: ${errorMessage(err)}`);
18
20
  }
19
21
  try {
20
22
  printClaudeCodeNudge();
@@ -1,6 +1,6 @@
1
- import { type AppendAuditOpts } from '../audit.js';
2
- import { type ForwardClaimMatch } from '../forward-claim-detector.js';
3
- import { type PredictionBaserate } from './store.js';
1
+ import type { AppendAuditOpts } from '../store/audit.js';
2
+ import { type ForwardClaimMatch } from '../learn/forward-claim-detector.js';
3
+ import type { PlanningFallacyEvidence } from '../store/planning-fallacy-evidence.js';
4
4
  /**
5
5
  * Surface delivered on `RecallResult.planningFallacyHint` when an
6
6
  * agent's recall query carries a forward-prediction phrase AND the closest
@@ -47,8 +47,7 @@ export interface PlanningFallacyWatching {
47
47
  suggestion: string;
48
48
  }
49
49
  /**
50
- * Richer return type for
51
- * `computePlanningFallacyOutput`. Carries EITHER `hint` (baserate
50
+ * What `decidePlanningFallacy` hands to recall. Carries EITHER `hint` (baserate
52
51
  * available) OR `watching` (regex fired, no baserate), or NEITHER (mode=off,
53
52
  * no queryText, no regex match, or nClosed=0 silent path). Never both.
54
53
  */
@@ -63,85 +62,14 @@ export interface ComputePlanningFallacyHintOpts {
63
62
  * reload). 'off' short-circuits to null BEFORE the regex gate so the
64
63
  * AUTODEBIAS=off path pays zero work. */
65
64
  mode?: AutodebiasMode;
66
- /** Actor for any audit emissions. Defaults to 'recall' (caller didn't
67
- * specify). MUST thread through to the inner computePredictionBaserate
68
- * call (passed as its `actor` arg) so MCP/HTTP-originated auto-hints
69
- * carry the right attribution instead of the 'cli' default. */
70
- actor?: string;
71
- }
72
- export interface ClassResolution {
73
- classTag: string | null;
74
- /** True when ≥2 classes tied at the best overlap score AND best ≥ 1.
75
- * Caller emits `recall_autodebias_hint_tiebreak` audit and returns
76
- * null hint (silent — prevents the "show wrong class half the time"
77
- * failure mode the alphabetical-tiebreak alternative would create). */
78
- tiebreak: boolean;
79
- }
80
- /** The prediction class a forward claim resolves to, and that class's closed-prediction stats when one resolved. */
81
- export interface PlanningFallacyEvidence extends ClassResolution {
82
- readonly baserate: PredictionBaserate | null;
83
65
  }
84
66
  /** The output a claim earns from its evidence, and the audit row that records the decision when there is one. */
85
67
  export interface PlanningFallacyDecision {
86
68
  output: PlanningFallacyOutput;
87
69
  audit?: AppendAuditOpts;
88
70
  }
89
- /**
90
- * Resolve a query-token set to a unique best-matching class_tag for the
91
- * tenant. Scores by lower-cased token overlap; requires best score ≥ 1
92
- * AND strictly greater than the 2nd-best score.
93
- *
94
- * Indexed via idx_predictions_tenant_class (db.ts:1015) → O(log n) seek
95
- * plus a small DISTINCT scan over the per-tenant class-tag set.
96
- *
97
- * Scope behaviour (deliberate): class_tag selection is TENANT-GLOBAL,
98
- * NOT scope-filtered against
99
- * the recall's opts.scope. The class_tag is an aggregator label across
100
- * historical predictions in the class, not a per-memory scope-bound
101
- * property. A no-scope recall CAN surface a class_tag from a privately-
102
- * scoped prediction's class in PlanningFallacyHint.classTag — by design,
103
- * because base-rate reasoning needs the full historical sample.
104
- * Implications:
105
- * - The hint payload itself carries no memory content (only the aggregate
106
- * summary string + numeric stats), so memory bodies do not leak.
107
- * - The class_tag NAME is the side-channel. If sensitive labels are a
108
- * concern, callers should either use opaque class names (e.g. hashes
109
- * or numeric tokens) or set HIPPO_AUTODEBIAS=off.
110
- * - tests/api-recall-autodebias.test.ts locks this with an explicit
111
- * test asserting that scope-set predictions surface via no-scope
112
- * recalls (so future "fix" attempts that scope-filter trip CI).
113
- */
114
- export declare function resolveClassFromTokens(hippoRoot: string, tenantId: string, queryTokens: readonly string[]): ClassResolution;
115
- /**
116
- * Planning-fallacy orchestrator.
117
- *
118
- * Composes the forward-claim detector + class resolver + baserate compute,
119
- * with telemetry-grade audit emission at every decision point (success,
120
- * no-class-match, tiebreak).
121
- *
122
- * Returns `{}` (neither hint nor watching) on:
123
- * - mode === 'off' (env-disabled; pays only the env read, skips regex)
124
- * - empty queryText
125
- * - no forward-claim regex match
126
- * - resolved class has nClosed=0 (no historical data yet; silent)
127
- *
128
- * Returns `{ watching: ... }` on:
129
- * - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
130
- * - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
131
- *
132
- * Returns `{ hint: ... }` on success: calls computePredictionBaserate(...,
133
- * emitAudit=false) so the predict_baserate audit channel stays scoped to
134
- * deliberate predict-baserate calls (the orchestrator's own recall_autodebias_hint
135
- * audit carries n_closed + mean_ratio in metadata so no telemetry is lost),
136
- * then emits recall_autodebias_hint audit + returns the hint.
137
- *
138
- * Latency budget: well under 50ms; a miss pays only the regex.
139
- */
140
- export declare function computePlanningFallacyOutput(hippoRoot: string, tenantId: string, queryText: string, opts?: ComputePlanningFallacyHintOpts): PlanningFallacyOutput;
141
71
  /** The forward claim in a recall query; null when HIPPO_AUTODEBIAS=off, the query is empty or no claim matches. */
142
72
  export declare function detectPlanningClaim(queryText: string, opts?: ComputePlanningFallacyHintOpts): ForwardClaimMatch | null;
143
- /** Resolves a claim's tokens to one class and reads its baserate, writing no audit row. */
144
- export declare function planningFallacyEvidenceAt(hippoRoot: string, tenantId: string, classQueryTokens: readonly string[]): PlanningFallacyEvidence;
145
73
  /** The hint, the watching variant or nothing for a claim and its class evidence; reads and writes nothing itself. */
146
74
  export declare function decidePlanningFallacy(match: ForwardClaimMatch, evidence: PlanningFallacyEvidence, tenantId: string, actor: string): PlanningFallacyDecision;
147
75
  //# sourceMappingURL=planning-fallacy.d.ts.map
@@ -1,114 +1,6 @@
1
- import { envAutodebiasOff } from '../env.js';
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { appendAuditEvent } from '../audit.js';
4
- import { detectForwardClaim } from '../forward-claim-detector.js';
5
- import { computePredictionBaserate } from './store.js';
6
- /**
7
- * Resolve a query-token set to a unique best-matching class_tag for the
8
- * tenant. Scores by lower-cased token overlap; requires best score ≥ 1
9
- * AND strictly greater than the 2nd-best score.
10
- *
11
- * Indexed via idx_predictions_tenant_class (db.ts:1015) → O(log n) seek
12
- * plus a small DISTINCT scan over the per-tenant class-tag set.
13
- *
14
- * Scope behaviour (deliberate): class_tag selection is TENANT-GLOBAL,
15
- * NOT scope-filtered against
16
- * the recall's opts.scope. The class_tag is an aggregator label across
17
- * historical predictions in the class, not a per-memory scope-bound
18
- * property. A no-scope recall CAN surface a class_tag from a privately-
19
- * scoped prediction's class in PlanningFallacyHint.classTag — by design,
20
- * because base-rate reasoning needs the full historical sample.
21
- * Implications:
22
- * - The hint payload itself carries no memory content (only the aggregate
23
- * summary string + numeric stats), so memory bodies do not leak.
24
- * - The class_tag NAME is the side-channel. If sensitive labels are a
25
- * concern, callers should either use opaque class names (e.g. hashes
26
- * or numeric tokens) or set HIPPO_AUTODEBIAS=off.
27
- * - tests/api-recall-autodebias.test.ts locks this with an explicit
28
- * test asserting that scope-set predictions surface via no-scope
29
- * recalls (so future "fix" attempts that scope-filter trip CI).
30
- */
31
- export function resolveClassFromTokens(hippoRoot, tenantId, queryTokens) {
32
- if (queryTokens.length === 0)
33
- return { classTag: null, tiebreak: false };
34
- const db = openHippoDb(hippoRoot);
35
- try {
36
- // SAFETY: rows' shape matches the single `class_tag` column named in the SELECT above.
37
- const rows = db.prepare(`SELECT DISTINCT class_tag FROM predictions WHERE tenant_id = ?`).all(tenantId);
38
- const querySet = new Set(queryTokens);
39
- let bestScore = 0;
40
- let bestClass = null;
41
- let secondBest = 0;
42
- for (const { class_tag } of rows) {
43
- const classTokens = class_tag
44
- .toLowerCase()
45
- .split(/[-_\s]+/)
46
- .filter((t) => t.length >= 3);
47
- let score = 0;
48
- for (const t of classTokens)
49
- if (querySet.has(t))
50
- score++;
51
- if (score > bestScore) {
52
- secondBest = bestScore;
53
- bestScore = score;
54
- bestClass = class_tag;
55
- }
56
- else if (score === bestScore && score > 0) {
57
- // Tie at current best — bump secondBest. Do NOT update bestClass
58
- // (alphabetical tiebreak would pick wrong class on ambiguous query
59
- // like "migration will take 3 days" between migration-effort vs
60
- // migration-risk; silent on tie instead).
61
- secondBest = score;
62
- }
63
- else if (score > secondBest) {
64
- secondBest = score;
65
- }
66
- }
67
- if (bestScore < 1)
68
- return { classTag: null, tiebreak: false };
69
- if (bestScore === secondBest)
70
- return { classTag: null, tiebreak: true };
71
- return { classTag: bestClass, tiebreak: false };
72
- }
73
- finally {
74
- closeHippoDb(db);
75
- }
76
- }
77
- /**
78
- * Planning-fallacy orchestrator.
79
- *
80
- * Composes the forward-claim detector + class resolver + baserate compute,
81
- * with telemetry-grade audit emission at every decision point (success,
82
- * no-class-match, tiebreak).
83
- *
84
- * Returns `{}` (neither hint nor watching) on:
85
- * - mode === 'off' (env-disabled; pays only the env read, skips regex)
86
- * - empty queryText
87
- * - no forward-claim regex match
88
- * - resolved class has nClosed=0 (no historical data yet; silent)
89
- *
90
- * Returns `{ watching: ... }` on:
91
- * - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
92
- * - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
93
- *
94
- * Returns `{ hint: ... }` on success: calls computePredictionBaserate(...,
95
- * emitAudit=false) so the predict_baserate audit channel stays scoped to
96
- * deliberate predict-baserate calls (the orchestrator's own recall_autodebias_hint
97
- * audit carries n_closed + mean_ratio in metadata so no telemetry is lost),
98
- * then emits recall_autodebias_hint audit + returns the hint.
99
- *
100
- * Latency budget: well under 50ms; a miss pays only the regex.
101
- */
102
- export function computePlanningFallacyOutput(hippoRoot, tenantId, queryText, opts = {}) {
103
- const match = detectPlanningClaim(queryText, opts);
104
- if (!match)
105
- return {};
106
- const actor = opts.actor ?? 'recall';
107
- const { output, audit } = decidePlanningFallacy(match, planningFallacyEvidenceAt(hippoRoot, tenantId, match.classQueryTokens), tenantId, actor);
108
- if (audit)
109
- appendAuditEventOnce(hippoRoot, audit);
110
- return output;
111
- }
1
+ import { envAutodebiasOff } from '../util/env.js';
2
+ import { detectForwardClaim } from '../learn/forward-claim-detector.js';
3
+ const TARGET_ID_CHARS = 100;
112
4
  /** The forward claim in a recall query; null when HIPPO_AUTODEBIAS=off, the query is empty or no claim matches. */
113
5
  export function detectPlanningClaim(queryText, opts = {}) {
114
6
  // Env read FIRST so AUTODEBIAS=off pays zero regex cost; read per call so tests can toggle it without a module reload.
@@ -119,13 +11,6 @@ export function detectPlanningClaim(queryText, opts = {}) {
119
11
  return null;
120
12
  return detectForwardClaim(queryText);
121
13
  }
122
- /** Resolves a claim's tokens to one class and reads its baserate, writing no audit row. */
123
- export function planningFallacyEvidenceAt(hippoRoot, tenantId, classQueryTokens) {
124
- const resolution = resolveClassFromTokens(hippoRoot, tenantId, classQueryTokens);
125
- // emitAudit=false: the recall_autodebias_hint row carries n_closed and mean_ratio, so predict_baserate stays off.
126
- const baserate = resolution.classTag ? computePredictionBaserate(hippoRoot, tenantId, resolution.classTag, 'recall', false) : null;
127
- return { ...resolution, baserate };
128
- }
129
14
  /** The hint, the watching variant or nothing for a claim and its class evidence; reads and writes nothing itself. */
130
15
  export function decidePlanningFallacy(match, evidence, tenantId, actor) {
131
16
  if (evidence.tiebreak) {
@@ -168,16 +53,6 @@ export function decidePlanningFallacy(match, evidence, tenantId, actor) {
168
53
  }
169
54
  const TIEBREAK_SUGGESTION = 'Multiple prediction classes tied on this query. Refine the query or rename overlapping classes to break the tie.';
170
55
  const NO_CLASS_MATCH_SUGGESTION = 'No matching prediction class for this forward-claim. Tag your prediction with `hippo predict --class <name>` to start tracking this class.';
171
- /** One audit row on its own short-lived connection. */
172
- function appendAuditEventOnce(hippoRoot, event) {
173
- const db = openHippoDb(hippoRoot);
174
- try {
175
- appendAuditEvent(db, event);
176
- }
177
- finally {
178
- closeHippoDb(db);
179
- }
180
- }
181
56
  function watchingWithAudit(tenantId, actor, match, reason, suggestion) {
182
57
  return {
183
58
  output: {
@@ -191,7 +66,7 @@ function watchingWithAudit(tenantId, actor, match, reason, suggestion) {
191
66
  tenantId,
192
67
  actor,
193
68
  op: reason === 'tiebreak' ? 'recall_autodebias_hint_tiebreak' : 'recall_autodebias_hint_no_class_match',
194
- targetId: match.phrase.slice(0, 100),
69
+ targetId: match.phrase.slice(0, TARGET_ID_CHARS),
195
70
  metadata: { detected_phrase: match.phrase, token_count: match.classQueryTokens.length },
196
71
  },
197
72
  };
@@ -1,5 +1,5 @@
1
1
  import type { RerankerFn, RerankProvenance } from './types.js';
2
- import type { JsonValue } from '../json.js';
2
+ import { type JsonValue } from '../util/json.js';
3
3
  /** The two pretrained CLEF decision models served by Cloudflare Workers AI. */
4
4
  export type ClefModel = 'clef-flash' | 'clef';
5
5
  /** True when `name` is one of the CLEF reranker names. */
@@ -19,11 +19,7 @@ interface ClefScores {
19
19
  export declare function resolveClefRoute(model: ClefModel): ClefRoute;
20
20
  /** Unwraps a Workers AI `{ result }` envelope or a bare System One reply and checks model and `c1..cN`; a string is the rejection reason. */
21
21
  export declare function parseClefReply(body: JsonValue, n: number, model: ClefModel, requireModel: boolean): ClefScores | string;
22
- /** A CLEF reranker for one model: Jev's request shape and pool; any failure keeps the native order (never paid Jev), warning once. */
22
+ /** A CLEF reranker for one model: Jev's request shape and pool; any failure keeps the native order (never paid Jev) and warns. */
23
23
  export declare function createClefReranker(model: ClefModel): RerankerFn;
24
- /** Opt-in CLEF-flash reranker (Cloudflare Workers AI or HIPPO_CLEF_ENDPOINT); off unless named, so defaults stay native. */
25
- export declare const clefFlashReranker: RerankerFn;
26
- /** Opt-in CLEF reranker, the larger model. Same transport and fallback as clef-flash. */
27
- export declare const clefReranker: RerankerFn;
28
24
  export {};
29
25
  //# sourceMappingURL=clef.d.ts.map
@@ -1,7 +1,10 @@
1
- import { envClefEndpoint, envClefEndpointToken, envClefTimeoutMs, envCloudflareAccountId, envCloudflareApiToken } from '../env.js';
1
+ import { envClefEndpoint, envClefEndpointToken, envClefTimeoutMs, envCloudflareAccountId, envCloudflareApiToken } from '../util/env.js';
2
2
  import { buildRelevanceRequest, JEV_DEFAULT_TOP_K, rankByScores } from './jev.js';
3
- import { isJsonObjectRecord } from '../http-util.js';
4
- import { log } from '../log.js';
3
+ import { createOutageWarning } from './outage-warning.js';
4
+ import { rerankerPost } from './remote.js';
5
+ import { isJsonObject } from '../util/json.js';
6
+ import { errorMessage } from '../util/log.js';
7
+ const RAY_ID_MAX_CHARS = 64;
5
8
  const CLEF_MODELS = ['clef-flash', 'clef'];
6
9
  const DEFAULT_TIMEOUT_MS = 15_000;
7
10
  const MAX_TIMEOUT_MS = 120_000;
@@ -73,12 +76,12 @@ export function resolveClefRoute(model) {
73
76
  }
74
77
  /** Unwraps a Workers AI `{ result }` envelope or a bare System One reply and checks model and `c1..cN`; a string is the rejection reason. */
75
78
  export function parseClefReply(body, n, model, requireModel) {
76
- if (!isJsonObjectRecord(body))
79
+ if (!isJsonObject(body))
77
80
  return 'reply is not a JSON object';
78
81
  if (body.success === false)
79
82
  return 'provider reported failure';
80
83
  const reply = body.result === undefined ? body : body.result;
81
- if (!isJsonObjectRecord(reply))
84
+ if (!isJsonObject(reply))
82
85
  return 'reply has no result object';
83
86
  const actual = reply.model;
84
87
  if (actual !== undefined && (!isString(actual) || actual.trim() !== model))
@@ -86,21 +89,21 @@ export function parseClefReply(body, n, model, requireModel) {
86
89
  if (actual === undefined && requireModel)
87
90
  return 'reply does not name its model';
88
91
  const answers = reply.answers;
89
- if (!isJsonObjectRecord(answers))
92
+ if (!isJsonObject(answers))
90
93
  return 'reply has no answers';
91
94
  if (Object.keys(answers).length !== n)
92
95
  return 'incomplete or out-of-range answers';
93
96
  const scores = [];
94
97
  for (let i = 1; i <= n; i++) {
95
98
  const a = answers[`c${i}`];
96
- if (!isJsonObjectRecord(a) || (a.type !== undefined && a.type !== 'noul'))
99
+ if (!isJsonObject(a) || (a.type !== undefined && a.type !== 'noul'))
97
100
  return 'incomplete or out-of-range answers';
98
101
  const v = a.noul;
99
102
  if (!isNumber(v) || v < 0 || v > 1)
100
103
  return 'incomplete or out-of-range answers';
101
104
  scores.push(v);
102
105
  }
103
- const usage = isJsonObjectRecord(reply.usage) ? reply.usage : {};
106
+ const usage = isJsonObject(reply.usage) ? reply.usage : {};
104
107
  return {
105
108
  scores,
106
109
  actualModel: isString(actual) ? actual.trim() : undefined,
@@ -143,35 +146,18 @@ async function requestScores(model, query, head, route) {
143
146
  const headers = new Headers({ 'content-type': 'application/json' });
144
147
  if (route.token)
145
148
  headers.set('authorization', `Bearer ${route.token}`);
146
- const controller = new AbortController();
147
- const timer = setTimeout(() => controller.abort(), timeoutMs);
148
- try {
149
- const resp = await fetch(route.url, {
150
- method: 'POST',
151
- headers,
152
- body: JSON.stringify({ state, model, questions }),
153
- signal: controller.signal,
154
- });
155
- if (!resp.ok) {
156
- // A third-party header ends up on stderr, so keep printable ASCII only.
157
- const ray = resp.headers.get('cf-ray')?.replace(/[^\x20-\x7e]/g, '').slice(0, 64);
158
- await resp.body?.cancel();
159
- throw new Error(`HTTP ${resp.status}${ray ? `, ray ${ray}` : ''}`);
160
- }
161
- const body = await readCappedJson(resp);
162
- const parsed = parseClefReply(body, head.length, model, route.backend === 'cloudflare');
163
- if (isRejection(parsed))
164
- throw new Error(parsed);
165
- return parsed;
166
- }
167
- catch (err) {
168
- if (err instanceof Error && err.name === 'AbortError')
169
- throw new Error(`no answer within ${timeoutMs} ms`);
170
- throw err;
171
- }
172
- finally {
173
- clearTimeout(timer);
149
+ const resp = await rerankerPost(route.url, { headers, body: JSON.stringify({ state, model, questions }) }, timeoutMs);
150
+ if (!resp.ok) {
151
+ // A third-party header ends up on stderr, so keep printable ASCII only.
152
+ const ray = resp.headers.get('cf-ray')?.replace(/[^\x20-\x7e]/g, '').slice(0, RAY_ID_MAX_CHARS);
153
+ await resp.body?.cancel();
154
+ throw new Error(`HTTP ${resp.status}${ray ? `, ray ${ray}` : ''}`);
174
155
  }
156
+ const body = await readCappedJson(resp);
157
+ const parsed = parseClefReply(body, head.length, model, route.backend === 'cloudflare');
158
+ if (isRejection(parsed))
159
+ throw new Error(parsed);
160
+ return parsed;
175
161
  }
176
162
  /** The input order, unchanged, with the reason recorded. Never a partial reorder. */
177
163
  function nativeOrder(head, provenance) {
@@ -184,9 +170,9 @@ function nativeOrder(head, provenance) {
184
170
  rerankProvenance: { ...provenance },
185
171
  }));
186
172
  }
187
- /** A CLEF reranker for one model: Jev's request shape and pool; any failure keeps the native order (never paid Jev), warning once. */
173
+ /** A CLEF reranker for one model: Jev's request shape and pool; any failure keeps the native order (never paid Jev) and warns. */
188
174
  export function createClefReranker(model) {
189
- let warned = false;
175
+ const outage = createOutageWarning(model, 'keeping the native order');
190
176
  return async (query, results, options) => {
191
177
  const head = results.slice(0, options?.topK ?? JEV_DEFAULT_TOP_K);
192
178
  if (head.length === 0)
@@ -198,13 +184,11 @@ export function createClefReranker(model) {
198
184
  throw new Error(`more than ${MAX_CANDIDATES} candidates`);
199
185
  route = resolveClefRoute(model);
200
186
  got = await requestScores(model, query, head, route);
187
+ outage.answered();
201
188
  }
202
189
  catch (err) {
203
- const reason = err instanceof Error ? err.message : 'unknown error';
204
- if (!warned) {
205
- warned = true;
206
- log.warn(`${model} reranker unavailable (${reason}); keeping the native order. Subsequent calls will not repeat this warning.`);
207
- }
190
+ const reason = errorMessage(err);
191
+ outage.failed(reason);
208
192
  return nativeOrder(head, { backend: 'native', requestedModel: model, fallbackReason: reason });
209
193
  }
210
194
  const rerankProvenance = {
@@ -217,8 +201,4 @@ export function createClefReranker(model) {
217
201
  return rankByScores(head, got.scores).map((r) => ({ ...r, rerankProvenance: { ...rerankProvenance } }));
218
202
  };
219
203
  }
220
- /** Opt-in CLEF-flash reranker (Cloudflare Workers AI or HIPPO_CLEF_ENDPOINT); off unless named, so defaults stay native. */
221
- export const clefFlashReranker = createClefReranker('clef-flash');
222
- /** Opt-in CLEF reranker, the larger model. Same transport and fallback as clef-flash. */
223
- export const clefReranker = createClefReranker('clef');
224
204
  //# sourceMappingURL=clef.js.map
@@ -1,11 +1,4 @@
1
1
  import type { RerankerFn } from './types.js';
2
- /**
3
- * True if a Transformers.js backend is importable. Note: this does NOT confirm
4
- * that the model is downloadable from Hugging Face CDN — in sandboxed
5
- * environments the package may import but the model fetch may be blocked.
6
- * The reranker silently falls back to identity ordering in that case.
7
- */
8
- export declare function isCrossEncoderAvailable(): Promise<boolean>;
9
2
  /** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. */
10
3
  export declare const crossEncoderReranker: RerankerFn;
11
4
  //# sourceMappingURL=cross-encoder.d.ts.map