hippo-memory 1.44.0 → 1.46.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 (554) hide show
  1. package/README.md +68 -24
  2. package/bin/hippo.js +3 -1
  3. package/dist/ablation.d.ts +10 -1
  4. package/dist/ablation.js +17 -1
  5. package/dist/api.d.ts +81 -22
  6. package/dist/api.js +258 -49
  7. package/dist/audit.d.ts +2 -2
  8. package/dist/audit.js +9 -0
  9. package/dist/autolearn.d.ts +1 -1
  10. package/dist/autolearn.js +2 -1
  11. package/dist/capture-error.d.ts +20 -0
  12. package/dist/capture-error.js +82 -0
  13. package/dist/capture.d.ts +25 -8
  14. package/dist/capture.js +100 -5
  15. package/dist/cli.d.ts +9 -1
  16. package/dist/cli.js +531 -119
  17. package/dist/client.d.ts +4 -21
  18. package/dist/client.js +3 -112
  19. package/dist/config.d.ts +20 -0
  20. package/dist/config.js +37 -1
  21. package/dist/consolidate.d.ts +9 -0
  22. package/dist/consolidate.js +133 -46
  23. package/dist/dag.d.ts +1 -0
  24. package/dist/dag.js +10 -5
  25. package/dist/dashboard.js +7 -3
  26. package/dist/db.js +69 -24
  27. package/dist/dedupe.d.ts +1 -0
  28. package/dist/dedupe.js +4 -7
  29. package/dist/doctor.d.ts +34 -0
  30. package/dist/doctor.js +174 -0
  31. package/dist/dormant.d.ts +91 -0
  32. package/dist/dormant.js +121 -0
  33. package/dist/embedding-provider.js +2 -1
  34. package/dist/embeddings.js +81 -8
  35. package/dist/eval-stats.d.ts +123 -0
  36. package/dist/eval-stats.js +187 -0
  37. package/dist/extract.d.ts +2 -0
  38. package/dist/extract.js +9 -4
  39. package/dist/half-life-migration.d.ts +55 -0
  40. package/dist/half-life-migration.js +111 -0
  41. package/dist/hooks.d.ts +4 -0
  42. package/dist/hooks.js +47 -0
  43. package/dist/mcp/server.d.ts +6 -0
  44. package/dist/mcp/server.js +90 -48
  45. package/dist/memory.d.ts +18 -1
  46. package/dist/memory.js +33 -5
  47. package/dist/physics-config.js +5 -1
  48. package/dist/recall-scope.d.ts +24 -0
  49. package/dist/recall-scope.js +41 -0
  50. package/dist/refine-llm.js +3 -2
  51. package/dist/reject-flow.d.ts +3 -3
  52. package/dist/reject-flow.js +10 -3
  53. package/dist/rerankers/jev.js +3 -2
  54. package/dist/rerankers/llm.js +3 -2
  55. package/dist/search.d.ts +4 -4
  56. package/dist/search.js +26 -21
  57. package/dist/server.d.ts +5 -0
  58. package/dist/server.js +49 -29
  59. package/dist/shared.js +1 -1
  60. package/dist/store.d.ts +29 -11
  61. package/dist/store.js +197 -70
  62. package/dist/token-ledger.d.ts +119 -0
  63. package/dist/token-ledger.js +181 -0
  64. package/dist/version.d.ts +4 -6
  65. package/dist/version.js +4 -7
  66. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  67. package/extensions/openclaw-plugin/package.json +1 -1
  68. package/openclaw.plugin.json +1 -1
  69. package/package.json +7 -3
  70. package/dist/ablation.d.ts.map +0 -1
  71. package/dist/ablation.js.map +0 -1
  72. package/dist/ambient.d.ts.map +0 -1
  73. package/dist/ambient.js.map +0 -1
  74. package/dist/api.d.ts.map +0 -1
  75. package/dist/api.js.map +0 -1
  76. package/dist/audit-prune.d.ts.map +0 -1
  77. package/dist/audit-prune.js.map +0 -1
  78. package/dist/audit.d.ts.map +0 -1
  79. package/dist/audit.js.map +0 -1
  80. package/dist/auth.d.ts.map +0 -1
  81. package/dist/auth.js.map +0 -1
  82. package/dist/autolearn.d.ts.map +0 -1
  83. package/dist/autolearn.js.map +0 -1
  84. package/dist/availability.d.ts.map +0 -1
  85. package/dist/availability.js.map +0 -1
  86. package/dist/benchmarks/e1.3/incident-recall-eval.js +0 -78
  87. package/dist/benchmarks/e1.3/incident-recall-eval.js.map +0 -1
  88. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js +0 -103
  89. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js.map +0 -1
  90. package/dist/capture.d.ts.map +0 -1
  91. package/dist/capture.js.map +0 -1
  92. package/dist/card-detail.d.ts.map +0 -1
  93. package/dist/card-detail.js.map +0 -1
  94. package/dist/card.d.ts.map +0 -1
  95. package/dist/card.js.map +0 -1
  96. package/dist/cli.d.ts.map +0 -1
  97. package/dist/cli.js.map +0 -1
  98. package/dist/client.d.ts.map +0 -1
  99. package/dist/client.js.map +0 -1
  100. package/dist/compare.d.ts.map +0 -1
  101. package/dist/compare.js.map +0 -1
  102. package/dist/config.d.ts.map +0 -1
  103. package/dist/config.js.map +0 -1
  104. package/dist/connectors/github/backfill.d.ts.map +0 -1
  105. package/dist/connectors/github/backfill.js.map +0 -1
  106. package/dist/connectors/github/cli-impl.d.ts.map +0 -1
  107. package/dist/connectors/github/cli-impl.js.map +0 -1
  108. package/dist/connectors/github/deletion.d.ts.map +0 -1
  109. package/dist/connectors/github/deletion.js.map +0 -1
  110. package/dist/connectors/github/dlq.d.ts.map +0 -1
  111. package/dist/connectors/github/dlq.js.map +0 -1
  112. package/dist/connectors/github/idempotency.d.ts.map +0 -1
  113. package/dist/connectors/github/idempotency.js.map +0 -1
  114. package/dist/connectors/github/ingest.d.ts.map +0 -1
  115. package/dist/connectors/github/ingest.js.map +0 -1
  116. package/dist/connectors/github/octokit-client.d.ts.map +0 -1
  117. package/dist/connectors/github/octokit-client.js.map +0 -1
  118. package/dist/connectors/github/ratelimit.d.ts.map +0 -1
  119. package/dist/connectors/github/ratelimit.js.map +0 -1
  120. package/dist/connectors/github/scope.d.ts.map +0 -1
  121. package/dist/connectors/github/scope.js.map +0 -1
  122. package/dist/connectors/github/signature.d.ts.map +0 -1
  123. package/dist/connectors/github/signature.js.map +0 -1
  124. package/dist/connectors/github/tenant-routing.d.ts.map +0 -1
  125. package/dist/connectors/github/tenant-routing.js.map +0 -1
  126. package/dist/connectors/github/transform.d.ts.map +0 -1
  127. package/dist/connectors/github/transform.js.map +0 -1
  128. package/dist/connectors/github/types.d.ts.map +0 -1
  129. package/dist/connectors/github/types.js.map +0 -1
  130. package/dist/connectors/slack/backfill.d.ts.map +0 -1
  131. package/dist/connectors/slack/backfill.js.map +0 -1
  132. package/dist/connectors/slack/deletion.d.ts.map +0 -1
  133. package/dist/connectors/slack/deletion.js.map +0 -1
  134. package/dist/connectors/slack/dlq.d.ts.map +0 -1
  135. package/dist/connectors/slack/dlq.js.map +0 -1
  136. package/dist/connectors/slack/idempotency.d.ts.map +0 -1
  137. package/dist/connectors/slack/idempotency.js.map +0 -1
  138. package/dist/connectors/slack/ingest.d.ts.map +0 -1
  139. package/dist/connectors/slack/ingest.js.map +0 -1
  140. package/dist/connectors/slack/ratelimit.d.ts.map +0 -1
  141. package/dist/connectors/slack/ratelimit.js.map +0 -1
  142. package/dist/connectors/slack/scope.d.ts.map +0 -1
  143. package/dist/connectors/slack/scope.js.map +0 -1
  144. package/dist/connectors/slack/signature.d.ts.map +0 -1
  145. package/dist/connectors/slack/signature.js.map +0 -1
  146. package/dist/connectors/slack/tenant-routing.d.ts.map +0 -1
  147. package/dist/connectors/slack/tenant-routing.js.map +0 -1
  148. package/dist/connectors/slack/transform.d.ts.map +0 -1
  149. package/dist/connectors/slack/transform.js.map +0 -1
  150. package/dist/connectors/slack/types.d.ts.map +0 -1
  151. package/dist/connectors/slack/types.js.map +0 -1
  152. package/dist/connectors/slack/web-client.d.ts.map +0 -1
  153. package/dist/connectors/slack/web-client.js.map +0 -1
  154. package/dist/connectors/slack/workspaces.d.ts.map +0 -1
  155. package/dist/connectors/slack/workspaces.js.map +0 -1
  156. package/dist/consolidate.d.ts.map +0 -1
  157. package/dist/consolidate.js.map +0 -1
  158. package/dist/correction-latency.d.ts.map +0 -1
  159. package/dist/correction-latency.js.map +0 -1
  160. package/dist/customer-notes.d.ts.map +0 -1
  161. package/dist/customer-notes.js.map +0 -1
  162. package/dist/dag.d.ts.map +0 -1
  163. package/dist/dag.js.map +0 -1
  164. package/dist/dashboard.d.ts.map +0 -1
  165. package/dist/dashboard.js.map +0 -1
  166. package/dist/db.d.ts.map +0 -1
  167. package/dist/db.js.map +0 -1
  168. package/dist/decisions.d.ts.map +0 -1
  169. package/dist/decisions.js.map +0 -1
  170. package/dist/dedupe.d.ts.map +0 -1
  171. package/dist/dedupe.js.map +0 -1
  172. package/dist/embedding-provider.d.ts.map +0 -1
  173. package/dist/embedding-provider.js.map +0 -1
  174. package/dist/embeddings.d.ts.map +0 -1
  175. package/dist/embeddings.js.map +0 -1
  176. package/dist/eval-suite.d.ts.map +0 -1
  177. package/dist/eval-suite.js.map +0 -1
  178. package/dist/eval.d.ts.map +0 -1
  179. package/dist/eval.js.map +0 -1
  180. package/dist/extensions/openclaw-plugin/index.js.map +0 -1
  181. package/dist/extract.d.ts.map +0 -1
  182. package/dist/extract.js.map +0 -1
  183. package/dist/forward-claim-detector.d.ts.map +0 -1
  184. package/dist/forward-claim-detector.js.map +0 -1
  185. package/dist/goals.d.ts.map +0 -1
  186. package/dist/goals.js.map +0 -1
  187. package/dist/graph-extract.d.ts.map +0 -1
  188. package/dist/graph-extract.js.map +0 -1
  189. package/dist/graph-recall.d.ts.map +0 -1
  190. package/dist/graph-recall.js.map +0 -1
  191. package/dist/graph-stream.d.ts.map +0 -1
  192. package/dist/graph-stream.js.map +0 -1
  193. package/dist/graph-view.d.ts.map +0 -1
  194. package/dist/graph-view.js.map +0 -1
  195. package/dist/graph.d.ts.map +0 -1
  196. package/dist/graph.js.map +0 -1
  197. package/dist/handoff.d.ts.map +0 -1
  198. package/dist/handoff.js.map +0 -1
  199. package/dist/hooks.d.ts.map +0 -1
  200. package/dist/hooks.js.map +0 -1
  201. package/dist/importers.d.ts.map +0 -1
  202. package/dist/importers.js.map +0 -1
  203. package/dist/incidents.d.ts.map +0 -1
  204. package/dist/incidents.js.map +0 -1
  205. package/dist/index.d.ts.map +0 -1
  206. package/dist/index.js.map +0 -1
  207. package/dist/invalidation.d.ts.map +0 -1
  208. package/dist/invalidation.js.map +0 -1
  209. package/dist/mcp/framing.d.ts.map +0 -1
  210. package/dist/mcp/framing.js.map +0 -1
  211. package/dist/mcp/server.d.ts.map +0 -1
  212. package/dist/mcp/server.js.map +0 -1
  213. package/dist/memory-value-weights.d.ts.map +0 -1
  214. package/dist/memory-value-weights.js.map +0 -1
  215. package/dist/memory-value.d.ts.map +0 -1
  216. package/dist/memory-value.js.map +0 -1
  217. package/dist/memory.d.ts.map +0 -1
  218. package/dist/memory.js.map +0 -1
  219. package/dist/multihop.d.ts.map +0 -1
  220. package/dist/multihop.js.map +0 -1
  221. package/dist/owner-validation.d.ts.map +0 -1
  222. package/dist/owner-validation.js.map +0 -1
  223. package/dist/path-context.d.ts.map +0 -1
  224. package/dist/path-context.js.map +0 -1
  225. package/dist/physics-config.d.ts.map +0 -1
  226. package/dist/physics-config.js.map +0 -1
  227. package/dist/physics-state.d.ts.map +0 -1
  228. package/dist/physics-state.js.map +0 -1
  229. package/dist/physics.d.ts.map +0 -1
  230. package/dist/physics.js.map +0 -1
  231. package/dist/policies.d.ts.map +0 -1
  232. package/dist/policies.js.map +0 -1
  233. package/dist/postinstall.d.ts.map +0 -1
  234. package/dist/postinstall.js.map +0 -1
  235. package/dist/predictions.d.ts.map +0 -1
  236. package/dist/predictions.js.map +0 -1
  237. package/dist/processes.d.ts.map +0 -1
  238. package/dist/processes.js.map +0 -1
  239. package/dist/project-briefs.d.ts.map +0 -1
  240. package/dist/project-briefs.js.map +0 -1
  241. package/dist/project-identity.d.ts.map +0 -1
  242. package/dist/project-identity.js.map +0 -1
  243. package/dist/provenance-coverage.d.ts.map +0 -1
  244. package/dist/provenance-coverage.js.map +0 -1
  245. package/dist/rate-limit.d.ts.map +0 -1
  246. package/dist/rate-limit.js.map +0 -1
  247. package/dist/raw-archive-mirror-cleanup.d.ts.map +0 -1
  248. package/dist/raw-archive-mirror-cleanup.js.map +0 -1
  249. package/dist/raw-archive.d.ts.map +0 -1
  250. package/dist/raw-archive.js.map +0 -1
  251. package/dist/recall-history.d.ts.map +0 -1
  252. package/dist/recall-history.js.map +0 -1
  253. package/dist/recall-scope.d.ts.map +0 -1
  254. package/dist/recall-scope.js.map +0 -1
  255. package/dist/recall-trace.d.ts.map +0 -1
  256. package/dist/recall-trace.js.map +0 -1
  257. package/dist/refine-llm.d.ts.map +0 -1
  258. package/dist/refine-llm.js.map +0 -1
  259. package/dist/reject-flow.d.ts.map +0 -1
  260. package/dist/reject-flow.js.map +0 -1
  261. package/dist/rejection.d.ts.map +0 -1
  262. package/dist/rejection.js.map +0 -1
  263. package/dist/replay.d.ts.map +0 -1
  264. package/dist/replay.js.map +0 -1
  265. package/dist/rerankers/cross-encoder.d.ts.map +0 -1
  266. package/dist/rerankers/cross-encoder.js.map +0 -1
  267. package/dist/rerankers/index.d.ts.map +0 -1
  268. package/dist/rerankers/index.js.map +0 -1
  269. package/dist/rerankers/jev.d.ts.map +0 -1
  270. package/dist/rerankers/jev.js.map +0 -1
  271. package/dist/rerankers/llm.d.ts.map +0 -1
  272. package/dist/rerankers/llm.js.map +0 -1
  273. package/dist/rerankers/types.d.ts.map +0 -1
  274. package/dist/rerankers/types.js.map +0 -1
  275. package/dist/rrf.d.ts.map +0 -1
  276. package/dist/rrf.js.map +0 -1
  277. package/dist/salience.d.ts.map +0 -1
  278. package/dist/salience.js.map +0 -1
  279. package/dist/scheduler.d.ts.map +0 -1
  280. package/dist/scheduler.js.map +0 -1
  281. package/dist/scope.d.ts.map +0 -1
  282. package/dist/scope.js.map +0 -1
  283. package/dist/search.d.ts.map +0 -1
  284. package/dist/search.js.map +0 -1
  285. package/dist/secret-detect.d.ts.map +0 -1
  286. package/dist/secret-detect.js.map +0 -1
  287. package/dist/server-detect.d.ts.map +0 -1
  288. package/dist/server-detect.js.map +0 -1
  289. package/dist/server.d.ts.map +0 -1
  290. package/dist/server.js.map +0 -1
  291. package/dist/shared.d.ts.map +0 -1
  292. package/dist/shared.js.map +0 -1
  293. package/dist/skills.d.ts.map +0 -1
  294. package/dist/skills.js.map +0 -1
  295. package/dist/sleep-redact.d.ts +0 -58
  296. package/dist/sleep-redact.d.ts.map +0 -1
  297. package/dist/sleep-redact.js +0 -80
  298. package/dist/sleep-redact.js.map +0 -1
  299. package/dist/src/ablation.js +0 -138
  300. package/dist/src/ablation.js.map +0 -1
  301. package/dist/src/ambient.js +0 -148
  302. package/dist/src/ambient.js.map +0 -1
  303. package/dist/src/api.js +0 -2109
  304. package/dist/src/api.js.map +0 -1
  305. package/dist/src/audit-prune.js +0 -109
  306. package/dist/src/audit-prune.js.map +0 -1
  307. package/dist/src/audit.js +0 -213
  308. package/dist/src/audit.js.map +0 -1
  309. package/dist/src/auth.js +0 -97
  310. package/dist/src/auth.js.map +0 -1
  311. package/dist/src/autolearn.js +0 -174
  312. package/dist/src/autolearn.js.map +0 -1
  313. package/dist/src/availability.js +0 -94
  314. package/dist/src/availability.js.map +0 -1
  315. package/dist/src/capture.js +0 -1346
  316. package/dist/src/capture.js.map +0 -1
  317. package/dist/src/card-detail.js +0 -15
  318. package/dist/src/card-detail.js.map +0 -1
  319. package/dist/src/card.js +0 -19
  320. package/dist/src/card.js.map +0 -1
  321. package/dist/src/cli.js +0 -9387
  322. package/dist/src/cli.js.map +0 -1
  323. package/dist/src/client.js +0 -237
  324. package/dist/src/client.js.map +0 -1
  325. package/dist/src/compare.js +0 -122
  326. package/dist/src/compare.js.map +0 -1
  327. package/dist/src/config.js +0 -135
  328. package/dist/src/config.js.map +0 -1
  329. package/dist/src/connectors/github/backfill.js +0 -281
  330. package/dist/src/connectors/github/backfill.js.map +0 -1
  331. package/dist/src/connectors/github/cli-impl.js +0 -234
  332. package/dist/src/connectors/github/cli-impl.js.map +0 -1
  333. package/dist/src/connectors/github/deletion.js +0 -85
  334. package/dist/src/connectors/github/deletion.js.map +0 -1
  335. package/dist/src/connectors/github/dlq.js +0 -190
  336. package/dist/src/connectors/github/dlq.js.map +0 -1
  337. package/dist/src/connectors/github/idempotency.js +0 -27
  338. package/dist/src/connectors/github/idempotency.js.map +0 -1
  339. package/dist/src/connectors/github/ingest.js +0 -156
  340. package/dist/src/connectors/github/ingest.js.map +0 -1
  341. package/dist/src/connectors/github/octokit-client.js +0 -70
  342. package/dist/src/connectors/github/octokit-client.js.map +0 -1
  343. package/dist/src/connectors/github/ratelimit.js +0 -31
  344. package/dist/src/connectors/github/ratelimit.js.map +0 -1
  345. package/dist/src/connectors/github/scope.js +0 -13
  346. package/dist/src/connectors/github/scope.js.map +0 -1
  347. package/dist/src/connectors/github/signature.js +0 -81
  348. package/dist/src/connectors/github/signature.js.map +0 -1
  349. package/dist/src/connectors/github/tenant-routing.js +0 -69
  350. package/dist/src/connectors/github/tenant-routing.js.map +0 -1
  351. package/dist/src/connectors/github/transform.js +0 -103
  352. package/dist/src/connectors/github/transform.js.map +0 -1
  353. package/dist/src/connectors/github/types.js +0 -100
  354. package/dist/src/connectors/github/types.js.map +0 -1
  355. package/dist/src/connectors/slack/backfill.js +0 -78
  356. package/dist/src/connectors/slack/backfill.js.map +0 -1
  357. package/dist/src/connectors/slack/deletion.js +0 -59
  358. package/dist/src/connectors/slack/deletion.js.map +0 -1
  359. package/dist/src/connectors/slack/dlq.js +0 -224
  360. package/dist/src/connectors/slack/dlq.js.map +0 -1
  361. package/dist/src/connectors/slack/idempotency.js +0 -31
  362. package/dist/src/connectors/slack/idempotency.js.map +0 -1
  363. package/dist/src/connectors/slack/ingest.js +0 -109
  364. package/dist/src/connectors/slack/ingest.js.map +0 -1
  365. package/dist/src/connectors/slack/ratelimit.js +0 -18
  366. package/dist/src/connectors/slack/ratelimit.js.map +0 -1
  367. package/dist/src/connectors/slack/scope.js +0 -13
  368. package/dist/src/connectors/slack/scope.js.map +0 -1
  369. package/dist/src/connectors/slack/signature.js +0 -27
  370. package/dist/src/connectors/slack/signature.js.map +0 -1
  371. package/dist/src/connectors/slack/tenant-routing.js +0 -41
  372. package/dist/src/connectors/slack/tenant-routing.js.map +0 -1
  373. package/dist/src/connectors/slack/transform.js +0 -47
  374. package/dist/src/connectors/slack/transform.js.map +0 -1
  375. package/dist/src/connectors/slack/types.js +0 -35
  376. package/dist/src/connectors/slack/types.js.map +0 -1
  377. package/dist/src/connectors/slack/web-client.js +0 -43
  378. package/dist/src/connectors/slack/web-client.js.map +0 -1
  379. package/dist/src/connectors/slack/workspaces.js +0 -62
  380. package/dist/src/connectors/slack/workspaces.js.map +0 -1
  381. package/dist/src/consolidate.js +0 -978
  382. package/dist/src/consolidate.js.map +0 -1
  383. package/dist/src/correction-latency.js +0 -74
  384. package/dist/src/correction-latency.js.map +0 -1
  385. package/dist/src/customer-notes.js +0 -325
  386. package/dist/src/customer-notes.js.map +0 -1
  387. package/dist/src/dag.js +0 -352
  388. package/dist/src/dag.js.map +0 -1
  389. package/dist/src/dashboard.js +0 -258
  390. package/dist/src/dashboard.js.map +0 -1
  391. package/dist/src/db.js +0 -2731
  392. package/dist/src/db.js.map +0 -1
  393. package/dist/src/decisions.js +0 -304
  394. package/dist/src/decisions.js.map +0 -1
  395. package/dist/src/dedupe.js +0 -141
  396. package/dist/src/dedupe.js.map +0 -1
  397. package/dist/src/embedding-provider.js +0 -314
  398. package/dist/src/embedding-provider.js.map +0 -1
  399. package/dist/src/embeddings.js +0 -543
  400. package/dist/src/embeddings.js.map +0 -1
  401. package/dist/src/eval-suite.js +0 -294
  402. package/dist/src/eval-suite.js.map +0 -1
  403. package/dist/src/eval.js +0 -187
  404. package/dist/src/eval.js.map +0 -1
  405. package/dist/src/extract.js +0 -117
  406. package/dist/src/extract.js.map +0 -1
  407. package/dist/src/forward-claim-detector.js +0 -117
  408. package/dist/src/forward-claim-detector.js.map +0 -1
  409. package/dist/src/goals.js +0 -399
  410. package/dist/src/goals.js.map +0 -1
  411. package/dist/src/graph-extract.js +0 -314
  412. package/dist/src/graph-extract.js.map +0 -1
  413. package/dist/src/graph-recall.js +0 -277
  414. package/dist/src/graph-recall.js.map +0 -1
  415. package/dist/src/graph-stream.js +0 -176
  416. package/dist/src/graph-stream.js.map +0 -1
  417. package/dist/src/graph-view.js +0 -310
  418. package/dist/src/graph-view.js.map +0 -1
  419. package/dist/src/graph.js +0 -762
  420. package/dist/src/graph.js.map +0 -1
  421. package/dist/src/handoff.js +0 -65
  422. package/dist/src/handoff.js.map +0 -1
  423. package/dist/src/hooks.js +0 -926
  424. package/dist/src/hooks.js.map +0 -1
  425. package/dist/src/importers.js +0 -881
  426. package/dist/src/importers.js.map +0 -1
  427. package/dist/src/incidents.js +0 -336
  428. package/dist/src/incidents.js.map +0 -1
  429. package/dist/src/index.js +0 -32
  430. package/dist/src/index.js.map +0 -1
  431. package/dist/src/invalidation.js +0 -129
  432. package/dist/src/invalidation.js.map +0 -1
  433. package/dist/src/mcp/framing.js +0 -45
  434. package/dist/src/mcp/framing.js.map +0 -1
  435. package/dist/src/mcp/server.js +0 -1298
  436. package/dist/src/mcp/server.js.map +0 -1
  437. package/dist/src/memory-value-weights.js +0 -31
  438. package/dist/src/memory-value-weights.js.map +0 -1
  439. package/dist/src/memory-value.js +0 -261
  440. package/dist/src/memory-value.js.map +0 -1
  441. package/dist/src/memory.js +0 -425
  442. package/dist/src/memory.js.map +0 -1
  443. package/dist/src/multihop.js +0 -35
  444. package/dist/src/multihop.js.map +0 -1
  445. package/dist/src/owner-validation.js +0 -56
  446. package/dist/src/owner-validation.js.map +0 -1
  447. package/dist/src/path-context.js +0 -48
  448. package/dist/src/path-context.js.map +0 -1
  449. package/dist/src/physics-config.js +0 -26
  450. package/dist/src/physics-config.js.map +0 -1
  451. package/dist/src/physics-state.js +0 -172
  452. package/dist/src/physics-state.js.map +0 -1
  453. package/dist/src/physics.js +0 -378
  454. package/dist/src/physics.js.map +0 -1
  455. package/dist/src/policies.js +0 -414
  456. package/dist/src/policies.js.map +0 -1
  457. package/dist/src/postinstall.js +0 -101
  458. package/dist/src/postinstall.js.map +0 -1
  459. package/dist/src/predictions.js +0 -629
  460. package/dist/src/predictions.js.map +0 -1
  461. package/dist/src/processes.js +0 -349
  462. package/dist/src/processes.js.map +0 -1
  463. package/dist/src/project-briefs.js +0 -492
  464. package/dist/src/project-briefs.js.map +0 -1
  465. package/dist/src/project-identity.js +0 -200
  466. package/dist/src/project-identity.js.map +0 -1
  467. package/dist/src/provenance-coverage.js +0 -23
  468. package/dist/src/provenance-coverage.js.map +0 -1
  469. package/dist/src/rate-limit.js +0 -60
  470. package/dist/src/rate-limit.js.map +0 -1
  471. package/dist/src/raw-archive-mirror-cleanup.js +0 -55
  472. package/dist/src/raw-archive-mirror-cleanup.js.map +0 -1
  473. package/dist/src/raw-archive.js +0 -91
  474. package/dist/src/raw-archive.js.map +0 -1
  475. package/dist/src/recall-history.js +0 -235
  476. package/dist/src/recall-history.js.map +0 -1
  477. package/dist/src/recall-scope.js +0 -89
  478. package/dist/src/recall-scope.js.map +0 -1
  479. package/dist/src/recall-trace.js +0 -186
  480. package/dist/src/recall-trace.js.map +0 -1
  481. package/dist/src/refine-llm.js +0 -156
  482. package/dist/src/refine-llm.js.map +0 -1
  483. package/dist/src/reject-flow.js +0 -209
  484. package/dist/src/reject-flow.js.map +0 -1
  485. package/dist/src/rejection.js +0 -160
  486. package/dist/src/rejection.js.map +0 -1
  487. package/dist/src/replay.js +0 -122
  488. package/dist/src/replay.js.map +0 -1
  489. package/dist/src/rerankers/cross-encoder.js +0 -137
  490. package/dist/src/rerankers/cross-encoder.js.map +0 -1
  491. package/dist/src/rerankers/index.js +0 -20
  492. package/dist/src/rerankers/index.js.map +0 -1
  493. package/dist/src/rerankers/jev.js +0 -119
  494. package/dist/src/rerankers/jev.js.map +0 -1
  495. package/dist/src/rerankers/llm.js +0 -80
  496. package/dist/src/rerankers/llm.js.map +0 -1
  497. package/dist/src/rerankers/types.js +0 -2
  498. package/dist/src/rerankers/types.js.map +0 -1
  499. package/dist/src/rrf.js +0 -61
  500. package/dist/src/rrf.js.map +0 -1
  501. package/dist/src/salience.js +0 -74
  502. package/dist/src/salience.js.map +0 -1
  503. package/dist/src/scheduler.js +0 -77
  504. package/dist/src/scheduler.js.map +0 -1
  505. package/dist/src/scope.js +0 -35
  506. package/dist/src/scope.js.map +0 -1
  507. package/dist/src/search.js +0 -1003
  508. package/dist/src/search.js.map +0 -1
  509. package/dist/src/secret-detect.js +0 -95
  510. package/dist/src/secret-detect.js.map +0 -1
  511. package/dist/src/server-detect.js +0 -231
  512. package/dist/src/server-detect.js.map +0 -1
  513. package/dist/src/server.js +0 -3255
  514. package/dist/src/server.js.map +0 -1
  515. package/dist/src/shared.js +0 -502
  516. package/dist/src/shared.js.map +0 -1
  517. package/dist/src/skills.js +0 -346
  518. package/dist/src/skills.js.map +0 -1
  519. package/dist/src/sleep-redact.js +0 -80
  520. package/dist/src/sleep-redact.js.map +0 -1
  521. package/dist/src/sso.js +0 -22
  522. package/dist/src/sso.js.map +0 -1
  523. package/dist/src/stdin.js +0 -41
  524. package/dist/src/stdin.js.map +0 -1
  525. package/dist/src/store.js +0 -3749
  526. package/dist/src/store.js.map +0 -1
  527. package/dist/src/tenant.js +0 -17
  528. package/dist/src/tenant.js.map +0 -1
  529. package/dist/src/trace.js +0 -72
  530. package/dist/src/trace.js.map +0 -1
  531. package/dist/src/version.js +0 -40
  532. package/dist/src/version.js.map +0 -1
  533. package/dist/src/working-memory.js +0 -157
  534. package/dist/src/working-memory.js.map +0 -1
  535. package/dist/src/yaml.js +0 -107
  536. package/dist/src/yaml.js.map +0 -1
  537. package/dist/sso.d.ts +0 -13
  538. package/dist/sso.d.ts.map +0 -1
  539. package/dist/sso.js +0 -22
  540. package/dist/sso.js.map +0 -1
  541. package/dist/stdin.d.ts.map +0 -1
  542. package/dist/stdin.js.map +0 -1
  543. package/dist/store.d.ts.map +0 -1
  544. package/dist/store.js.map +0 -1
  545. package/dist/tenant.d.ts.map +0 -1
  546. package/dist/tenant.js.map +0 -1
  547. package/dist/trace.d.ts.map +0 -1
  548. package/dist/trace.js.map +0 -1
  549. package/dist/version.d.ts.map +0 -1
  550. package/dist/version.js.map +0 -1
  551. package/dist/working-memory.d.ts.map +0 -1
  552. package/dist/working-memory.js.map +0 -1
  553. package/dist/yaml.d.ts.map +0 -1
  554. package/dist/yaml.js.map +0 -1
@@ -1,414 +0,0 @@
1
- /**
2
- * E2 policy first-class object (docs/plans/2026-05-30-e2-policy-object.md).
3
- *
4
- * The "bi-temporal-first" object type: a named rule/statement that is in force
5
- * over an EFFECTIVE-TIME range and evolves via supersession. Two time axes:
6
- *
7
- * - Valid time (effective time): when the policy is in force in the real world,
8
- * as first-class columns `valid_from` (required; defaults to creation time)
9
- * and `valid_to` (nullable = open-ended). This is the queryable axis: see
10
- * `loadPoliciesAsOf` (the active policies in force at a given valid-time).
11
- * - Transaction time (system time): when the row was recorded / retired, via
12
- * `created_at` + the supersede chain's `superseded_at`. Present, but
13
- * time-travel ("what did we BELIEVE was in force at past system time T") is
14
- * deferred to a future version.
15
- *
16
- * The delta lifecycle reuses the process/decision supersede machinery verbatim
17
- * (superseded_by self-FK + CAS + INSERT-preflight + server-derived version +
18
- * change_summary + supersede tenant-match trigger). It DROPS process's `steps`
19
- * (a policy has `policy_text`) and ADDS `valid_from`/`valid_to`.
20
- *
21
- * The `policies` table is the source of truth (survives memory decay); the
22
- * memory mirror is for recall only. memory_id is NULLABLE with ON DELETE SET
23
- * NULL so forget/consolidate/archive gracefully orphans the policy row.
24
- *
25
- * Lifecycle: active -> superseded (a newer version replaces it) or active ->
26
- * closed (retired with no successor). Superseding leaves the predecessor's
27
- * valid-time range intact (it WAS effective then); only the status flips.
28
- *
29
- * Date handling: every date input (savePolicy's valid_from/valid_to,
30
- * loadPoliciesAsOf's asOfDate) is normalized to canonical ISO-8601 datetime
31
- * (`toISOString`) at the store boundary BEFORE any persist or compare, so the
32
- * fixed-width values sort lexically and the half-open [valid_from, valid_to)
33
- * comparison is correct (plan-eng-critic round-1 CRIT fix: a date-only asOf vs a
34
- * datetime valid_from otherwise made a same-day policy invisible).
35
- *
36
- * Dual-write atomicity: `savePolicy` writes the memory + policies row (and, on
37
- * supersede, the predecessor's UPDATE) inside writeEntry's SAVEPOINT.
38
- */
39
- import { openHippoDb, closeHippoDb } from './db.js';
40
- import { writeEntry, assertTenantId } from './store.js';
41
- import { markGraphDirty, removeGraphEntitiesForObject } from './graph.js';
42
- import { createMemory, Layer, POLICY_HALF_LIFE_DAYS } from './memory.js';
43
- import { appendAuditEvent } from './audit.js';
44
- export const VALID_POLICY_STATES = new Set([
45
- 'active',
46
- 'superseded',
47
- 'closed',
48
- ]);
49
- // ---------------------------------------------------------------------------
50
- // Date normalization + validation (the bi-temporal correctness core)
51
- // ---------------------------------------------------------------------------
52
- /**
53
- * Parse + canonicalize a date input to ISO-8601 datetime (`toISOString`). Throws
54
- * on an unparseable value. Whatever `new Date()` accepts is re-emitted in the
55
- * single fixed-width canonical form, so date-only and datetime inputs collapse to
56
- * comparable values and lexical ordering is sound. (Overflow inputs like
57
- * '2026-02-30' roll forward per JS Date semantics rather than throwing; the
58
- * stored value is still canonical.)
59
- */
60
- export function normalizePolicyDate(input, label = 'date') {
61
- const d = new Date(input);
62
- if (Number.isNaN(d.getTime())) {
63
- throw new Error(`policy: invalid ${label} "${input}" (expected an ISO-8601 date or datetime)`);
64
- }
65
- return d.toISOString();
66
- }
67
- /**
68
- * Normalize valid_from (defaulting to `nowIso` when undefined) + valid_to (null
69
- * when undefined), then enforce valid_to > valid_from. Returns the canonical pair.
70
- */
71
- export function validatePolicyDates(validFromRaw, validToRaw, nowIso) {
72
- const validFrom = validFromRaw !== undefined ? normalizePolicyDate(validFromRaw, 'valid_from') : nowIso;
73
- const validTo = validToRaw !== undefined && validToRaw !== null
74
- ? normalizePolicyDate(validToRaw, 'valid_to')
75
- : null;
76
- if (validTo !== null && validTo <= validFrom) {
77
- throw new Error(`policy: valid_to (${validTo}) must be strictly after valid_from (${validFrom})`);
78
- }
79
- return { validFrom, validTo };
80
- }
81
- function rowToPolicy(row) {
82
- return {
83
- id: row.id,
84
- memoryId: row.memory_id,
85
- tenantId: row.tenant_id,
86
- policyName: row.policy_name,
87
- policyText: row.policy_text,
88
- validFrom: row.valid_from,
89
- validTo: row.valid_to,
90
- version: row.version,
91
- // SAFETY: row.status is DB-constrained to PolicyStatus values; every INSERT/
92
- // UPDATE in this file writes only the literal 'active' | 'superseded' | 'closed'.
93
- status: row.status,
94
- supersededBy: row.superseded_by,
95
- supersededAt: row.superseded_at,
96
- changeSummary: row.change_summary,
97
- closedAt: row.closed_at,
98
- createdAt: row.created_at,
99
- };
100
- }
101
- const POLICY_COLS = `
102
- id, memory_id, tenant_id, policy_name, policy_text, valid_from, valid_to,
103
- version, status, superseded_by, superseded_at, change_summary, closed_at, created_at
104
- `;
105
- /** Recall-surface content for the memory mirror: name + rule + effective range. */
106
- function buildPolicyContent(policyName, policyText, validFrom, validTo) {
107
- const range = validTo ? `${validFrom} to ${validTo}` : `${validFrom} onward`;
108
- return `${policyName}\n\n${policyText}\n\nEffective: ${range}`;
109
- }
110
- // ---------------------------------------------------------------------------
111
- // Public API
112
- // ---------------------------------------------------------------------------
113
- /**
114
- * Create a policy (or a new version that supersedes an existing one). Writes the
115
- * memory mirror + the policies row atomically inside writeEntry's SAVEPOINT.
116
- * valid_from defaults to now; valid_to must be > valid_from (validatePolicyDates).
117
- * When supersedesPolicyId is given, the referenced ACTIVE row is preflighted
118
- * (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same
119
- * SAVEPOINT; the new version = predecessor.version + 1 (server-derived).
120
- */
121
- export function savePolicy(hippoRoot, tenantId, opts, actor = 'cli') {
122
- assertTenantId('savePolicy', tenantId);
123
- if (!opts.policyName || opts.policyName.trim().length === 0) {
124
- throw new Error('savePolicy: policyName is required');
125
- }
126
- if (!opts.policyText || opts.policyText.trim().length === 0) {
127
- throw new Error('savePolicy: policyText is required');
128
- }
129
- const now = new Date().toISOString();
130
- // valid_from defaults to the precise creation instant (the honest effective
131
- // time). The same-day date-only as-of workflow is handled on the READ side
132
- // (a date-only asOf resolves to end-of-day in loadPoliciesAsOf), NOT by
133
- // backdating the stored valid_from - backdating to midnight would make an
134
- // earlier-same-day as-of wrongly report the policy already in force and would
135
- // hide a superseded predecessor for that earlier time (codex review
136
- // 2026-05-30 round 2). An explicit --from is honored as-is.
137
- const { validFrom, validTo } = validatePolicyDates(opts.validFrom, opts.validTo, now);
138
- const isSupersede = opts.supersedesPolicyId !== undefined;
139
- const changeSummary = isSupersede ? (opts.changeSummary ?? null) : null;
140
- const content = buildPolicyContent(opts.policyName, opts.policyText, validFrom, validTo);
141
- const tags = ['policy', ...(opts.extraTags ?? [])];
142
- const mem = createMemory(content, {
143
- tags,
144
- layer: Layer.Semantic,
145
- confidence: 'verified',
146
- source: 'policy',
147
- tenantId,
148
- });
149
- mem.half_life_days = POLICY_HALF_LIFE_DAYS;
150
- let savedRow;
151
- writeEntry(hippoRoot, mem, {
152
- actor,
153
- afterWrite: (db, memoryId) => {
154
- // Preflight the supersede target BEFORE inserting the new row (so the new
155
- // autoincrement id can never be its own supersede target); read the
156
- // predecessor version in the same SELECT for server-derived versioning.
157
- // Mirrors saveProcess / saveDecision (codex P1 2026-05-28).
158
- let version = 1;
159
- if (opts.supersedesPolicyId !== undefined) {
160
- // SAFETY: SELECT projects exactly status, version; .get() returns that
161
- // shape for the matching row, or undefined when no policy/tenant pair matches.
162
- const pred = db.prepare(`SELECT status, version FROM policies WHERE id = ? AND tenant_id = ?`).get(opts.supersedesPolicyId, tenantId);
163
- if (!pred) {
164
- throw new Error(`savePolicy: policy ${opts.supersedesPolicyId} to supersede not found for tenant ${tenantId}`);
165
- }
166
- if (pred.status !== 'active') {
167
- throw new Error(`savePolicy: policy ${opts.supersedesPolicyId} is not active (status='${pred.status}'); only active policies can be superseded.`);
168
- }
169
- version = pred.version + 1;
170
- }
171
- const result = db.prepare(`
172
- INSERT INTO policies(
173
- memory_id, tenant_id, policy_name, policy_text, valid_from, valid_to,
174
- version, status, superseded_by, superseded_at, change_summary, closed_at, created_at
175
- ) VALUES (?, ?, ?, ?, ?, ?, ?, 'active', NULL, NULL, ?, NULL, ?)
176
- `).run(memoryId, tenantId, opts.policyName, opts.policyText, validFrom, validTo, version, changeSummary, now);
177
- const policyId = Number(result.lastInsertRowid ?? 0);
178
- if (opts.supersedesPolicyId !== undefined) {
179
- const sup = db.prepare(`
180
- UPDATE policies
181
- SET status = 'superseded', superseded_by = ?, superseded_at = ?
182
- WHERE id = ? AND tenant_id = ? AND status = 'active' AND id != ?
183
- `).run(policyId, now, opts.supersedesPolicyId, tenantId, policyId);
184
- if (sup.changes === 0) {
185
- throw new Error(`savePolicy: policy ${opts.supersedesPolicyId} could not be superseded (no longer active or self-reference).`);
186
- }
187
- appendAuditEvent(db, {
188
- tenantId,
189
- actor,
190
- op: 'policy_supersede',
191
- targetId: String(opts.supersedesPolicyId),
192
- metadata: {
193
- policy_id: opts.supersedesPolicyId,
194
- superseded_by: policyId,
195
- new_version: version,
196
- },
197
- });
198
- }
199
- // SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
200
- // .get() returns that row, or undefined only if the just-inserted id can't
201
- // be found.
202
- const row = db.prepare(`SELECT ${POLICY_COLS} FROM policies WHERE id = ?`)
203
- .get(policyId);
204
- if (!row)
205
- throw new Error('savePolicy: failed to reload saved policy row');
206
- savedRow = row;
207
- // GDPR-light metadata: ids + flags only, no policy text.
208
- appendAuditEvent(db, {
209
- tenantId,
210
- actor,
211
- op: 'policy_create',
212
- targetId: String(policyId),
213
- metadata: {
214
- policy_id: policyId,
215
- version,
216
- open_ended: validTo === null,
217
- },
218
- });
219
- },
220
- afterCommit: () => markGraphDirty(hippoRoot, tenantId, mem.id),
221
- });
222
- if (!savedRow) {
223
- throw new Error('savePolicy: afterWrite did not populate the row');
224
- }
225
- return rowToPolicy(savedRow);
226
- }
227
- /**
228
- * Close (retire) an active policy with no successor. CAS guard WHERE
229
- * status='active'; 0 changes distinguishes not-found from not-active. A
230
- * superseded row is terminal and cannot be closed.
231
- */
232
- export function closePolicy(hippoRoot, tenantId, id, actor = 'cli') {
233
- assertTenantId('closePolicy', tenantId);
234
- const now = new Date().toISOString();
235
- const db = openHippoDb(hippoRoot);
236
- try {
237
- db.exec('BEGIN IMMEDIATE');
238
- try {
239
- const updateResult = db.prepare(`
240
- UPDATE policies
241
- SET status = 'closed', closed_at = ?
242
- WHERE id = ? AND tenant_id = ? AND status = 'active'
243
- `).run(now, id, tenantId);
244
- if (updateResult.changes === 0) {
245
- // SAFETY: SELECT projects exactly the status column; .get() returns that
246
- // shape, or undefined when the id/tenant pair doesn't exist.
247
- const existing = db.prepare(`SELECT status FROM policies WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
248
- if (!existing) {
249
- throw new Error(`closePolicy: policy ${id} not found for tenant ${tenantId}`);
250
- }
251
- throw new Error(`closePolicy: policy ${id} is not active (status='${existing.status}'); only active policies can be closed.`);
252
- }
253
- // SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
254
- // .get() returns that row for the just-updated id, or undefined only in an
255
- // impossible race since the UPDATE above already matched it.
256
- const row = db.prepare(`SELECT ${POLICY_COLS} FROM policies WHERE id = ? AND tenant_id = ?`)
257
- .get(id, tenantId);
258
- if (!row)
259
- throw new Error(`closePolicy: policy ${id} not found after UPDATE`);
260
- appendAuditEvent(db, {
261
- tenantId,
262
- actor,
263
- op: 'policy_close',
264
- targetId: String(id),
265
- metadata: { policy_id: id },
266
- });
267
- db.exec('COMMIT');
268
- const closed = rowToPolicy(row);
269
- // Closing removes the object from the graph. Remove its rows DIRECTLY (deterministic),
270
- // not only via an enqueued rebuild whose queue item is lost if the mirror is later
271
- // forgotten (the queue row cascade-deletes with the memory), which would leave the closed
272
- // object stale and could block that forget (codex P1). Still enqueue when a mirror exists
273
- // so a concurrent rebuild re-derives consistently (harmless if it also runs).
274
- removeGraphEntitiesForObject(hippoRoot, tenantId, 'policy', closed.id);
275
- if (closed.memoryId) {
276
- markGraphDirty(hippoRoot, tenantId, closed.memoryId);
277
- }
278
- return closed;
279
- }
280
- catch (e) {
281
- try {
282
- db.exec('ROLLBACK');
283
- }
284
- catch {
285
- // Ignore rollback failures — the throw below is what matters.
286
- }
287
- throw e;
288
- }
289
- }
290
- finally {
291
- closeHippoDb(db);
292
- }
293
- }
294
- export function loadPolicyById(hippoRoot, tenantId, id) {
295
- assertTenantId('loadPolicyById', tenantId);
296
- const db = openHippoDb(hippoRoot);
297
- try {
298
- // SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
299
- // .get() returns that row, or undefined when the id/tenant pair doesn't exist.
300
- const row = db.prepare(`SELECT ${POLICY_COLS} FROM policies WHERE id = ? AND tenant_id = ?`)
301
- .get(id, tenantId);
302
- return row ? rowToPolicy(row) : null;
303
- }
304
- finally {
305
- closeHippoDb(db);
306
- }
307
- }
308
- export function loadPolicies(hippoRoot, tenantId, opts = {}) {
309
- assertTenantId('loadPolicies', tenantId);
310
- const limit = opts.limit ?? 100;
311
- const db = openHippoDb(hippoRoot);
312
- try {
313
- let rows;
314
- if (opts.status) {
315
- if (!VALID_POLICY_STATES.has(opts.status)) {
316
- throw new Error(`loadPolicies: status must be one of ${Array.from(VALID_POLICY_STATES).join('|')}; got ${opts.status}`);
317
- }
318
- // SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
319
- // .all() returns rows in that shape regardless of the status filter applied.
320
- rows = db.prepare(`
321
- SELECT ${POLICY_COLS} FROM policies
322
- WHERE tenant_id = ? AND status = ?
323
- ORDER BY created_at DESC, id DESC
324
- LIMIT ?
325
- `).all(tenantId, opts.status, limit);
326
- }
327
- else {
328
- // SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
329
- // .all() returns rows in that shape for every tenant-scoped row.
330
- rows = db.prepare(`
331
- SELECT ${POLICY_COLS} FROM policies
332
- WHERE tenant_id = ?
333
- ORDER BY created_at DESC, id DESC
334
- LIMIT ?
335
- `).all(tenantId, limit);
336
- }
337
- return rows.map(rowToPolicy);
338
- }
339
- finally {
340
- closeHippoDb(db);
341
- }
342
- }
343
- export function loadActivePolicies(hippoRoot, tenantId, opts = {}) {
344
- return loadPolicies(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
345
- }
346
- /**
347
- * The bi-temporal as-of query: the policies in force at `asOfDate` (a valid-time)
348
- * per current knowledge. Half-open interval [valid_from, valid_to): a row covers
349
- * T when valid_from <= asOf AND (valid_to IS NULL OR asOf < valid_to). asOfDate is
350
- * normalized to canonical datetime first so the lexical comparison is sound.
351
- *
352
- * A row is returned when it covers T AND it is the live answer for T:
353
- * - `active` rows that cover T, OR
354
- * - `superseded` rows that cover T BUT whose successor was not yet effective at T
355
- * (successor.valid_from > asOf) - i.e. an earlier version that was genuinely in
356
- * force then. This is the core valid-time correctness: a Jan-Jun policy
357
- * superseded in May is still the answer for `asof March`. (codex review
358
- * 2026-05-30, P2 #2: filtering on status='active' alone dropped historically-
359
- * valid superseded versions, conflating transaction-time with valid-time. The
360
- * successor-aware filter mirrors the existing recall-history.ts asOf pattern.)
361
- *
362
- * `closed` rows are EXCLUDED: closing is a deliberate transaction-time retirement,
363
- * and resurrecting closed policies for a historical valid-time is full
364
- * transaction-time-travel (deferred). Returns an ARRAY (overlapping same-name
365
- * ranges are allowed in v1). Optionally filtered to one policy_name.
366
- *
367
- * Date-only `asOfDate` (e.g. "2026-05-30", no time component) resolves to the END
368
- * of that UTC day (23:59:59.999Z), so "as of [day D]" includes a policy that
369
- * became effective at any instant during D - this is the read-side fix for the
370
- * common create-then-asof-today workflow, keeping the stored valid_from honest
371
- * (codex review 2026-05-30). A full datetime asOf is used as the precise instant.
372
- */
373
- export function loadPoliciesAsOf(hippoRoot, tenantId, asOfDate, opts = {}) {
374
- assertTenantId('loadPoliciesAsOf', tenantId);
375
- // A bare date means "as of (the whole of) that day" -> end-of-day instant; a
376
- // datetime is used precisely. normalizePolicyDate validates/canonicalizes both.
377
- const asOf = /^\d{4}-\d{2}-\d{2}$/.test(asOfDate.trim())
378
- ? normalizePolicyDate(`${asOfDate.trim()}T23:59:59.999Z`, 'asOfDate')
379
- : normalizePolicyDate(asOfDate, 'asOfDate');
380
- const limit = opts.limit ?? 100;
381
- const db = openHippoDb(hippoRoot);
382
- try {
383
- // LEFT JOIN the successor so a superseded row is kept only while its
384
- // successor is not yet effective at asOf. p.status != 'closed' drops retired
385
- // rows; the OR keeps active heads + still-in-force superseded versions.
386
- const nameClause = opts.name !== undefined ? 'AND p.policy_name = ?' : '';
387
- const params = [tenantId, asOf, asOf, asOf];
388
- if (opts.name !== undefined)
389
- params.push(opts.name);
390
- params.push(limit);
391
- // SAFETY: the SELECT list explicitly aliases p.* to exactly the PolicyRow
392
- // columns (id, memory_id, tenant_id, policy_name, policy_text, valid_from,
393
- // valid_to, version, status, superseded_by, superseded_at, change_summary,
394
- // closed_at, created_at); .all() returns rows in that shape.
395
- const rows = db.prepare(`
396
- SELECT p.id, p.memory_id, p.tenant_id, p.policy_name, p.policy_text,
397
- p.valid_from, p.valid_to, p.version, p.status, p.superseded_by,
398
- p.superseded_at, p.change_summary, p.closed_at, p.created_at
399
- FROM policies p
400
- LEFT JOIN policies s ON s.id = p.superseded_by
401
- WHERE p.tenant_id = ? AND p.status != 'closed'
402
- AND p.valid_from <= ? AND (p.valid_to IS NULL OR ? < p.valid_to)
403
- AND (p.status = 'active' OR (s.id IS NOT NULL AND s.valid_from > ?))
404
- ${nameClause}
405
- ORDER BY p.valid_from DESC, p.id DESC
406
- LIMIT ?
407
- `).all(...params);
408
- return rows.map(rowToPolicy);
409
- }
410
- finally {
411
- closeHippoDb(db);
412
- }
413
- }
414
- //# sourceMappingURL=policies.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policies.js","sourceRoot":"","sources":["../../src/policies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQ9C,MAAM,CAAC,MAAM,mBAAmB,GAA8B,IAAI,GAAG,CAAe;IAClF,QAAQ;IACR,YAAY;IACZ,QAAQ;CACT,CAAC,CAAC;AA6CH,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,QAAgB,MAAM;IACvE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,KAAK,KAAK,2CAA2C,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAAgC,EAChC,UAA8B,EAC9B,MAAc;IAEd,MAAM,SAAS,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACxG,MAAM,OAAO,GAAG,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI;QAC7D,CAAC,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,qBAAqB,OAAO,wCAAwC,SAAS,GAAG,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAuBD,SAAS,WAAW,CAAC,GAAc;IACjC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,6EAA6E;QAC7E,kFAAkF;QAClF,MAAM,EAAE,GAAG,CAAC,MAAsB;QAClC,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG;;;CAGnB,CAAC;AAEF,mFAAmF;AACnF,SAAS,kBAAkB,CACzB,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,OAAsB;IAEtB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,SAAS,CAAC;IAC7E,OAAO,GAAG,UAAU,OAAO,UAAU,kBAAkB,KAAK,EAAE,CAAC;AACjE,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CACxB,SAAiB,EACjB,QAAgB,EAChB,IAAoB,EACpB,QAAgB,KAAK;IAErB,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,0EAA0E;IAC1E,8EAA8E;IAC9E,oEAAoE;IACpE,4DAA4D;IAC5D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC;IAC1D,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE;QAChC,IAAI;QACJ,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,UAAU,EAAE,UAAU;QACtB,MAAM,EAAE,QAAQ;QAChB,QAAQ;KACT,CAAC,CAAC;IACH,GAAG,CAAC,cAAc,GAAG,qBAAqB,CAAC;IAE3C,IAAI,QAA+B,CAAC;IAEpC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK;QACL,UAAU,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;YAC3B,0EAA0E;YAC1E,oEAAoE;YACpE,wEAAwE;YACxE,4DAA4D;YAC5D,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBAC1C,uEAAuE;gBACvE,+EAA+E;gBAC/E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,qEAAqE,CACtE,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAE1B,CAAC;gBACd,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,kBAAkB,sCAAsC,QAAQ,EAAE,CAC9F,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,kBAAkB,2BAA2B,IAAI,CAAC,MAAM,6CAA6C,CACjI,CAAC;gBACJ,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;OAKzB,CAAC,CAAC,GAAG,CACJ,QAAQ,EACR,QAAQ,EACR,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,EACf,SAAS,EACT,OAAO,EACP,OAAO,EACP,aAAa,EACb,GAAG,CACJ,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;YAErD,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;SAItB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACnE,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,kBAAkB,gEAAgE,CAC9G,CAAC;gBACJ,CAAC;gBACD,gBAAgB,CAAC,EAAE,EAAE;oBACnB,QAAQ;oBACR,KAAK;oBACL,EAAE,EAAE,kBAAkB;oBACtB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;oBACzC,QAAQ,EAAE;wBACR,SAAS,EAAE,IAAI,CAAC,kBAAkB;wBAClC,aAAa,EAAE,QAAQ;wBACvB,WAAW,EAAE,OAAO;qBACrB;iBACF,CAAC,CAAC;YACL,CAAC;YAED,wEAAwE;YACxE,2EAA2E;YAC3E,YAAY;YACZ,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,WAAW,6BAA6B,CAAC;iBACvE,GAAG,CAAC,QAAQ,CAA0B,CAAC;YAC1C,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC3E,QAAQ,GAAG,GAAG,CAAC;YAEf,yDAAyD;YACzD,gBAAgB,CAAC,EAAE,EAAE;gBACnB,QAAQ;gBACR,KAAK;gBACL,EAAE,EAAE,eAAe;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;gBAC1B,QAAQ,EAAE;oBACR,SAAS,EAAE,QAAQ;oBACnB,OAAO;oBACP,UAAU,EAAE,OAAO,KAAK,IAAI;iBAC7B;aACF,CAAC,CAAC;QACL,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;KAC/D,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,SAAiB,EACjB,QAAgB,EAChB,EAAU,EACV,QAAgB,KAAK;IAErB,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC;;;;OAI/B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;YAE1B,IAAI,YAAY,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBAC/B,yEAAyE;gBACzE,6DAA6D;gBAC7D,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,4DAA4D,CAC7D,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAmC,CAAC;gBACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,EAAE,yBAAyB,QAAQ,EAAE,CAAC,CAAC;gBAChF,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,2BAA2B,QAAQ,CAAC,MAAM,yCAAyC,CAC7G,CAAC;YACJ,CAAC;YAED,wEAAwE;YACxE,2EAA2E;YAC3E,6DAA6D;YAC7D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,WAAW,+CAA+C,CAAC;iBACzF,GAAG,CAAC,EAAE,EAAE,QAAQ,CAA0B,CAAC;YAC9C,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,EAAE,yBAAyB,CAAC,CAAC;YAE9E,gBAAgB,CAAC,EAAE,EAAE;gBACnB,QAAQ;gBACR,KAAK;gBACL,EAAE,EAAE,cAAc;gBAClB,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;gBACpB,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;aAC5B,CAAC,CAAC;YAEH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,uFAAuF;YACvF,mFAAmF;YACnF,0FAA0F;YAC1F,0FAA0F;YAC1F,8EAA8E;YAC9E,4BAA4B,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACvE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,QAAgB,EAChB,EAAU;IAEV,cAAc,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,wEAAwE;QACxE,+EAA+E;QAC/E,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,WAAW,+CAA+C,CAAC;aACzF,GAAG,CAAC,EAAE,EAAE,QAAQ,CAA0B,CAAC;QAC9C,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,QAAgB,EAChB,OAAyB,EAAE;IAE3B,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IAChC,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,IAAiB,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,uCAAuC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CACvG,CAAC;YACJ,CAAC;YACD,wEAAwE;YACxE,6EAA6E;YAC7E,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;iBACP,WAAW;;;;OAIrB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAgB,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,iEAAiE;YACjE,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;iBACP,WAAW;;;;OAIrB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAgB,CAAC;QACzC,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,QAAgB,EAChB,OAA2B,EAAE;IAE7B,OAAO,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,QAAgB,EAChB,QAAgB,EAChB,OAA0C,EAAE;IAE5C,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAC7C,6EAA6E;IAC7E,gFAAgF;IAChF,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,CAAC;QACrE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IAChC,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,qEAAqE;QACrE,6EAA6E;QAC7E,wEAAwE;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,MAAM,GAA2B,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,0EAA0E;QAC1E,2EAA2E;QAC3E,2EAA2E;QAC3E,6DAA6D;QAC7D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;UASlB,UAAU;;;KAGf,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAgB,CAAC;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1,101 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as os from 'node:os';
3
- import * as path from 'node:path';
4
- import { detectRealCodexPath, isCodexWrapperInstalled, repairCodexWrapperIfInstalled, } from './hooks.js';
5
- function main() {
6
- if (process.env.HIPPO_SKIP_POSTINSTALL === '1')
7
- return;
8
- try {
9
- // Repair-only: re-ensure the wrapper for users who previously opted in
10
- // (e.g. a Codex update restored the real binary over our shim). A first
11
- // install never happens here — swapping the codex binary from a package
12
- // postinstall is a consent violation and reads as binary hijacking to
13
- // supply-chain scanners (issue #133). First install is `hippo hook
14
- // install codex` only.
15
- repairCodexWrapperIfInstalled();
16
- }
17
- catch {
18
- // Never fail package install because auto-integration could not be applied.
19
- }
20
- try {
21
- printClaudeCodeNudge();
22
- }
23
- catch {
24
- // Never fail package install because the install hint could not be printed.
25
- }
26
- try {
27
- printCodexNudge();
28
- }
29
- catch {
30
- // Never fail package install because the install hint could not be printed.
31
- }
32
- }
33
- /**
34
- * Read-only nudge: if Claude Code is detected on the machine and the Hippo
35
- * UserPromptSubmit hook is NOT yet installed, print a short message pointing
36
- * the user at `hippo init`. No config writes. Silent otherwise.
37
- *
38
- * We avoid aggressively auto-patching ~/.claude/settings.json from a package
39
- * postinstall — that's surprising, breaks the principle of least authority,
40
- * and trips security scanners. A one-line visible prompt is the friendly
41
- * middle ground.
42
- */
43
- function printClaudeCodeNudge() {
44
- const home = os.homedir();
45
- const claudeDir = path.join(home, '.claude');
46
- if (!fs.existsSync(claudeDir))
47
- return; // Claude Code not installed — silent
48
- const settingsPath = path.join(claudeDir, 'settings.json');
49
- if (fs.existsSync(settingsPath)) {
50
- try {
51
- const raw = fs.readFileSync(settingsPath, 'utf8');
52
- if (raw.includes('hippo context --pinned-only'))
53
- return; // already installed
54
- }
55
- catch {
56
- // Fall through: on read failure, still show the nudge — a broken
57
- // settings.json is a bigger problem for the user to see.
58
- }
59
- }
60
- // Use stderr so the banner doesn't get piped into scripts reading package
61
- // output on stdout.
62
- const line = (s) => process.stderr.write(s + '\n');
63
- line('');
64
- line('hippo-memory installed. Claude Code detected on this machine.');
65
- line('');
66
- line('To wire Hippo into Claude Code (session hooks + mid-session pinned');
67
- line('rule re-injection), run ONE of these in your project directory:');
68
- line('');
69
- line(' hippo init # initialize + install hooks for this project');
70
- line(' hippo hook install claude-code # hooks only, no local store');
71
- line('');
72
- line('Or machine-wide pinned memories:');
73
- line('');
74
- line(' hippo init --global');
75
- line('');
76
- line('To skip this message on future installs: export HIPPO_SKIP_POSTINSTALL=1');
77
- line('');
78
- }
79
- /**
80
- * Read-only nudge: if the Codex CLI is on PATH and the Hippo session-capture
81
- * wrapper is NOT installed, print the opt-in command. Mirrors the Claude Code
82
- * nudge above — same least-authority reasoning: we tell the user what to run,
83
- * we never swap their binary for them.
84
- */
85
- function printCodexNudge() {
86
- if (isCodexWrapperInstalled())
87
- return;
88
- if (!detectRealCodexPath())
89
- return; // Codex not installed — silent
90
- const line = (s) => process.stderr.write(s + '\n');
91
- line('');
92
- line('Codex CLI detected on this machine.');
93
- line('');
94
- line('To capture Codex sessions into Hippo (wraps the codex launcher;');
95
- line('undo anytime with `hippo hook uninstall codex`), run:');
96
- line('');
97
- line(' hippo hook install codex');
98
- line('');
99
- }
100
- main();
101
- //# sourceMappingURL=postinstall.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../src/postinstall.ts"],"names":[],"mappings":"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"}