@remnic/core 9.65.2 → 9.65.3

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 (449) hide show
  1. package/dist/access-admin-ops-surface.d.ts +44 -44
  2. package/dist/access-admin-ops-surface.js +14 -14
  3. package/dist/access-authorization-probe.d.ts +38 -38
  4. package/dist/access-authorization-probe.js +15 -15
  5. package/dist/access-boundary.d.ts +40 -40
  6. package/dist/access-boundary.js +14 -14
  7. package/dist/access-cli.js +52 -52
  8. package/dist/access-coding-context-resolution.d.ts +3 -1
  9. package/dist/access-extraction-force-flush.d.ts +25 -25
  10. package/dist/access-extraction-force-flush.js +14 -14
  11. package/dist/access-health-types.d.ts +3 -1
  12. package/dist/access-http-lcm-compaction.d.ts +39 -39
  13. package/dist/access-http-lifecycle-flush.d.ts +39 -39
  14. package/dist/access-http-offline-stream.d.ts +25 -25
  15. package/dist/access-http-query.d.ts +4 -2
  16. package/dist/access-http-query.js +16 -16
  17. package/dist/access-http.d.ts +51 -44
  18. package/dist/access-http.js +30 -30
  19. package/dist/access-identity-continuity-surface.d.ts +12 -12
  20. package/dist/access-identity-continuity-surface.js +14 -14
  21. package/dist/access-lcm-surface.d.ts +27 -27
  22. package/dist/access-lcm-surface.js +14 -14
  23. package/dist/access-mcp-admin-tools.d.ts +9 -1
  24. package/dist/access-mcp-admin-tools.js +3 -1
  25. package/dist/access-mcp-output-schemas.js +1 -1
  26. package/dist/access-mcp.d.ts +39 -39
  27. package/dist/access-mcp.js +24 -24
  28. package/dist/access-memory-search-fanout.d.ts +4 -2
  29. package/dist/{access-namespace-preflight-Dhvcl-T0.d.ts → access-namespace-preflight-B7Usyz-K.d.ts} +1 -1
  30. package/dist/access-namespace-preflight.d.ts +5 -3
  31. package/dist/access-namespace-preflight.js +14 -14
  32. package/dist/access-observe-write-surface.d.ts +39 -39
  33. package/dist/access-observe-write-surface.js +14 -14
  34. package/dist/access-offline-manifest.d.ts +12 -12
  35. package/dist/access-operations-batch.js +18 -18
  36. package/dist/access-operations.d.ts +40 -40
  37. package/dist/access-operations.js +21 -21
  38. package/dist/access-recall-concurrency.d.ts +40 -40
  39. package/dist/access-recall-concurrency.js +14 -14
  40. package/dist/access-recall-response.d.ts +24 -24
  41. package/dist/access-recall-response.js +14 -14
  42. package/dist/access-recall-surface.d.ts +24 -24
  43. package/dist/access-recall-surface.js +14 -14
  44. package/dist/access-schema.d.ts +45 -45
  45. package/dist/{access-service-Bke1alZO.d.ts → access-service-DkaIG3n8.d.ts} +219 -75
  46. package/dist/access-service-helpers.d.ts +40 -40
  47. package/dist/access-service.d.ts +47 -47
  48. package/dist/access-service.js +14 -14
  49. package/dist/access-surface-catalog.d.ts +40 -40
  50. package/dist/access-surface-catalog.js +20 -16
  51. package/dist/access-surface-catalog.js.map +1 -1
  52. package/dist/access-wearables-meetings-surface.d.ts +5 -3
  53. package/dist/action-confidence.d.ts +3 -1
  54. package/dist/active-memory-bridge.d.ts +3 -1
  55. package/dist/active-recall.d.ts +3 -1
  56. package/dist/active-recall.js +6 -1
  57. package/dist/active-recall.js.map +1 -1
  58. package/dist/ambient-provenance.d.ts +3 -1
  59. package/dist/artifact-search.d.ts +3 -1
  60. package/dist/behavior-learner.d.ts +3 -1
  61. package/dist/behavior-signals.d.ts +3 -1
  62. package/dist/bootstrap.d.ts +12 -12
  63. package/dist/briefing-window.d.ts +4 -2
  64. package/dist/briefing.d.ts +4 -2
  65. package/dist/briefing.js +3 -3
  66. package/dist/buffer-surprise-report.d.ts +3 -1
  67. package/dist/buffer-turn-helpers.d.ts +3 -1
  68. package/dist/buffer.d.ts +4 -2
  69. package/dist/bulk-import/index.d.ts +5 -3
  70. package/dist/calibration.d.ts +3 -1
  71. package/dist/capabilities.d.ts +3 -1
  72. package/dist/{catalog-DV6qnbr7.d.ts → catalog-CX2BZEJh.d.ts} +1 -1
  73. package/dist/causal-behavior.d.ts +1 -1
  74. package/dist/causal-consolidation.d.ts +3 -1
  75. package/dist/causal-consolidation.js +7 -7
  76. package/dist/causal-trajectory-graph.d.ts +1 -1
  77. package/dist/{chunk-R7JAM2XF.js → chunk-2VXWFYJE.js} +3 -3
  78. package/dist/{chunk-UXO5IMBK.js → chunk-4XDGYCZI.js} +2 -2
  79. package/dist/{chunk-OTHZWLUD.js → chunk-57HVIG5U.js} +2 -2
  80. package/dist/{chunk-EILZG5VC.js → chunk-6TAX66IA.js} +2 -2
  81. package/dist/{chunk-NKKD4ZAU.js → chunk-6VALIZKG.js} +2 -2
  82. package/dist/{chunk-BWLRUMOG.js → chunk-76PL4XLG.js} +435 -1
  83. package/dist/chunk-76PL4XLG.js.map +1 -0
  84. package/dist/{chunk-2E36UXVW.js → chunk-7KFIMGMP.js} +2 -2
  85. package/dist/{chunk-LGO6A7GJ.js → chunk-7QOO4LGC.js} +28 -28
  86. package/dist/{chunk-TBOJ76ER.js → chunk-AB3A7EFH.js} +18 -2
  87. package/dist/{chunk-TBOJ76ER.js.map → chunk-AB3A7EFH.js.map} +1 -1
  88. package/dist/{chunk-DZUJ46DO.js → chunk-AUO2LJ3K.js} +2 -2
  89. package/dist/{chunk-ZO6AXLEH.js → chunk-AYDDB3XI.js} +2 -2
  90. package/dist/{chunk-NTWN6HB2.js → chunk-AYYGRVRP.js} +2 -2
  91. package/dist/{chunk-7YQ4IYS2.js → chunk-AZAA5DNP.js} +2 -2
  92. package/dist/{chunk-4KYOLI6M.js → chunk-BKYPJUQL.js} +120 -14
  93. package/dist/chunk-BKYPJUQL.js.map +1 -0
  94. package/dist/{chunk-Z7PBQPJ4.js → chunk-BQUEAVNW.js} +2 -2
  95. package/dist/{chunk-35NN3ZFA.js → chunk-CTVWELNK.js} +21 -3
  96. package/dist/chunk-CTVWELNK.js.map +1 -0
  97. package/dist/{chunk-5YQ63T4B.js → chunk-D27J626P.js} +2 -2
  98. package/dist/{chunk-LZH5FR2W.js → chunk-DHTQP334.js} +2 -2
  99. package/dist/{chunk-Y7DK7HHJ.js → chunk-E4MVQQVX.js} +2 -2
  100. package/dist/{chunk-JYYBA7TF.js → chunk-EIVIB73I.js} +2 -2
  101. package/dist/{chunk-S2DPMJXH.js → chunk-EV3YFLCB.js} +2 -2
  102. package/dist/{chunk-TZNQUNKL.js → chunk-FC7TIRFS.js} +15 -1
  103. package/dist/chunk-FC7TIRFS.js.map +1 -0
  104. package/dist/{chunk-3I7ASZN3.js → chunk-G57LQRP6.js} +2 -2
  105. package/dist/{chunk-UIN2BWDD.js → chunk-GN55KU2P.js} +2 -2
  106. package/dist/{chunk-PE255F4T.js → chunk-GUXS322H.js} +2 -2
  107. package/dist/{chunk-V3MXUL3D.js → chunk-H5FW4S5Q.js} +319 -643
  108. package/dist/chunk-H5FW4S5Q.js.map +1 -0
  109. package/dist/chunk-I32NKXE2.js +879 -0
  110. package/dist/chunk-I32NKXE2.js.map +1 -0
  111. package/dist/{chunk-YB42WZCY.js → chunk-IQSC3V2E.js} +2 -2
  112. package/dist/{chunk-MN4KB2A4.js → chunk-MBDJJTAT.js} +3 -3
  113. package/dist/{chunk-SQI57UCJ.js → chunk-MRTUN665.js} +2 -2
  114. package/dist/{chunk-SBDCZ2AX.js → chunk-NXKJHSDN.js} +1 -1
  115. package/dist/chunk-NXKJHSDN.js.map +1 -0
  116. package/dist/{chunk-SPUJNJJC.js → chunk-NZWEEALH.js} +2 -2
  117. package/dist/{chunk-2XDWWPTN.js → chunk-OJD4WS2E.js} +2 -2
  118. package/dist/{chunk-ZWXJBFZU.js → chunk-OLWTCWQ2.js} +8 -8
  119. package/dist/{chunk-XRYZRW54.js → chunk-P4DHENRE.js} +2 -2
  120. package/dist/{chunk-J275IYMG.js → chunk-PAYGC3BD.js} +29 -2
  121. package/dist/chunk-PAYGC3BD.js.map +1 -0
  122. package/dist/{chunk-IID2CMUU.js → chunk-PDVQ5JU3.js} +2 -2
  123. package/dist/{chunk-7BY7V4YX.js → chunk-Q4WONDMJ.js} +4 -3
  124. package/dist/{chunk-7BY7V4YX.js.map → chunk-Q4WONDMJ.js.map} +1 -1
  125. package/dist/{chunk-5NM4OH4P.js → chunk-QFMO32TO.js} +3 -3
  126. package/dist/{chunk-SIHSCCUQ.js → chunk-QXIQPCCN.js} +1 -1
  127. package/dist/{chunk-2YI72KM3.js → chunk-R47WINCY.js} +2 -2
  128. package/dist/{chunk-ZQHI2BZB.js → chunk-RK4WXUI2.js} +2 -2
  129. package/dist/{chunk-QOS5LBZN.js → chunk-S7Q5CM7E.js} +2 -2
  130. package/dist/{chunk-GDFVPUJ5.js → chunk-TDKSCV62.js} +2 -2
  131. package/dist/{chunk-OCZIYAE5.js → chunk-TYUS5TLG.js} +3 -3
  132. package/dist/{chunk-GNCCUR6K.js → chunk-URHCUXKI.js} +2 -2
  133. package/dist/{chunk-TF77C7SV.js → chunk-VA5KMSAE.js} +7 -5
  134. package/dist/chunk-VA5KMSAE.js.map +1 -0
  135. package/dist/{chunk-SB7D4BT7.js → chunk-WN5FSGLE.js} +1545 -105
  136. package/dist/chunk-WN5FSGLE.js.map +1 -0
  137. package/dist/{chunk-YLDXWCZP.js → chunk-YF6UHWOV.js} +14 -9
  138. package/dist/chunk-YF6UHWOV.js.map +1 -0
  139. package/dist/{chunk-CT56C22C.js → chunk-Z4RPXHJH.js} +4 -4
  140. package/dist/{cli-cShQ13XG.d.ts → cli-ChKeYMZv.d.ts} +5 -5
  141. package/dist/cli.d.ts +25 -25
  142. package/dist/cli.js +44 -43
  143. package/dist/coding/pre-action-gate.d.ts +2 -60
  144. package/dist/compounding/engine.d.ts +4 -2
  145. package/dist/compounding/engine.js +3 -3
  146. package/dist/compounding/preference-consolidator.d.ts +3 -1
  147. package/dist/compression-optimizer.d.ts +3 -1
  148. package/dist/config.d.ts +3 -1
  149. package/dist/config.js +6 -1
  150. package/dist/connectors/codex-materialize-runner.d.ts +3 -1
  151. package/dist/connectors/codex-materialize-runner.js +3 -3
  152. package/dist/connectors/codex-materialize.d.ts +3 -1
  153. package/dist/connectors/index.d.ts +3 -1
  154. package/dist/connectors/index.js +3 -3
  155. package/dist/consolidation-provenance-check.d.ts +4 -2
  156. package/dist/consolidation-undo.d.ts +4 -2
  157. package/dist/contradiction/index.d.ts +10 -270
  158. package/dist/contradiction/index.js +11 -6
  159. package/dist/{contradiction-review-QKJH5DKD.js → contradiction-review-WRVLRWHS.js} +6 -2
  160. package/dist/{contradiction-scan-VOTQRRSX.js → contradiction-scan-AKUWPX5N.js} +5 -3
  161. package/dist/converge-config.d.ts +3 -1
  162. package/dist/convergence-refresh.d.ts +4 -2
  163. package/dist/convergence-refresh.js +5 -5
  164. package/dist/conversation-index/backend.d.ts +3 -1
  165. package/dist/conversation-index/chunker.d.ts +3 -1
  166. package/dist/conversation-index/faiss-adapter.d.ts +3 -1
  167. package/dist/conversation-index/indexer.d.ts +3 -1
  168. package/dist/conversation-index/search.d.ts +3 -1
  169. package/dist/corpus-watermark.d.ts +3 -1
  170. package/dist/corpus-watermark.js +5 -5
  171. package/dist/cross-lingual-recall.d.ts +3 -1
  172. package/dist/day-summary.d.ts +3 -1
  173. package/dist/delinearize.d.ts +3 -1
  174. package/dist/dependency-propagation-config.d.ts +3 -1
  175. package/dist/{dependency-propagation-delivery-CsGg-VwS.d.ts → dependency-propagation-delivery-B8ZMBBCY.d.ts} +1 -1
  176. package/dist/direct-answer-wiring.d.ts +3 -1
  177. package/dist/direct-answer.d.ts +3 -1
  178. package/dist/embedding-fallback.d.ts +3 -1
  179. package/dist/enrichment/index.d.ts +3 -1
  180. package/dist/entity-origin-fields.d.ts +3 -1
  181. package/dist/entity-retrieval.d.ts +4 -2
  182. package/dist/entity-retrieval.js +3 -3
  183. package/dist/entity-schema.d.ts +3 -1
  184. package/dist/episodic-context.d.ts +3 -1
  185. package/dist/explicit-capture.d.ts +12 -12
  186. package/dist/external-wiki-access.d.ts +40 -40
  187. package/dist/external-wiki-access.js +15 -15
  188. package/dist/external-wiki-collection-registration.d.ts +3 -1
  189. package/dist/external-wiki-collection.d.ts +3 -1
  190. package/dist/external-wiki-mcp-tools.d.ts +40 -40
  191. package/dist/extraction-error-classification.d.ts +3 -1
  192. package/dist/extraction-faithfulness.d.ts +3 -1
  193. package/dist/extraction-judge-telemetry.d.ts +3 -1
  194. package/dist/extraction-judge-training.d.ts +3 -1
  195. package/dist/extraction-judge.d.ts +3 -1
  196. package/dist/extraction-liveness.d.ts +3 -1
  197. package/dist/extraction-normalization.d.ts +3 -1
  198. package/dist/extraction-prompt.d.ts +3 -1
  199. package/dist/extraction-source-grounding-rules.d.ts +3 -1
  200. package/dist/extraction-source-grounding.d.ts +3 -1
  201. package/dist/extraction.d.ts +3 -1
  202. package/dist/extraction.js +3 -3
  203. package/dist/fallback-llm.d.ts +3 -1
  204. package/dist/graph-dashboard-diff.d.ts +3 -1
  205. package/dist/graph-dashboard-key.d.ts +3 -1
  206. package/dist/graph-dashboard-parser.d.ts +3 -1
  207. package/dist/graph-edge-reinforcement.d.ts +3 -1
  208. package/dist/graph-path-reconstruction.d.ts +3 -1
  209. package/dist/graph-path-scoring.d.ts +3 -1
  210. package/dist/graph-snapshot.d.ts +3 -1
  211. package/dist/graph.d.ts +3 -1
  212. package/dist/harmonic-retrieval.js +1 -1
  213. package/dist/importance.d.ts +3 -1
  214. package/dist/importers/index.d.ts +3 -1
  215. package/dist/in-flight-reads.d.ts +3 -1
  216. package/dist/index-CexDrJzC.d.ts +284 -0
  217. package/dist/index.d.ts +251 -29
  218. package/dist/index.js +129 -75
  219. package/dist/intent.d.ts +3 -1
  220. package/dist/lcm/engine.d.ts +3 -1
  221. package/dist/lcm/index.d.ts +3 -1
  222. package/dist/lcm/tools.d.ts +3 -1
  223. package/dist/lifecycle.d.ts +3 -1
  224. package/dist/live-connectors-runner.d.ts +3 -1
  225. package/dist/local-llm.d.ts +3 -1
  226. package/dist/local-model-endpoint.d.ts +3 -1
  227. package/dist/maintenance/memory-governance.d.ts +3 -1
  228. package/dist/maintenance/memory-governance.js +3 -3
  229. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +4 -2
  230. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  231. package/dist/maintenance/rebuild-memory-projection.d.ts +4 -2
  232. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  233. package/dist/{maintenance-jhMpeGne.d.ts → maintenance-nkdtSrVr.d.ts} +3 -3
  234. package/dist/mcp-memory-inspector-app.d.ts +37 -37
  235. package/dist/memory-action-policy.d.ts +3 -1
  236. package/dist/memory-cache.d.ts +3 -1
  237. package/dist/memory-lifecycle-ledger-utils.d.ts +3 -1
  238. package/dist/memory-projection-store.d.ts +3 -1
  239. package/dist/memory-provenance.d.ts +3 -1
  240. package/dist/memory-snapshot.d.ts +3 -1
  241. package/dist/memory-subject-cli.d.ts +40 -40
  242. package/dist/memory-subject.d.ts +42 -42
  243. package/dist/memory-worth-outcomes.d.ts +4 -2
  244. package/dist/models-json.d.ts +3 -1
  245. package/dist/namespaces/migrate.d.ts +5 -3
  246. package/dist/namespaces/migrate.js +4 -4
  247. package/dist/namespaces/principal.d.ts +3 -1
  248. package/dist/namespaces/search.d.ts +3 -1
  249. package/dist/namespaces/storage.d.ts +5 -3
  250. package/dist/namespaces/storage.js +3 -3
  251. package/dist/native-knowledge.d.ts +3 -1
  252. package/dist/offline-sync-impression-drain.d.ts +3 -1
  253. package/dist/operator-doctor-corpus.d.ts +3 -1
  254. package/dist/operator-doctor-corpus.js +6 -6
  255. package/dist/operator-doctor-replica.d.ts +3 -1
  256. package/dist/operator-toolkit.d.ts +5 -3
  257. package/dist/operator-toolkit.js +15 -12
  258. package/dist/orchestration/compression-guideline-coordinator.d.ts +4 -2
  259. package/dist/orchestration/maintenance.d.ts +6 -4
  260. package/dist/orchestration/maintenance.js +9 -9
  261. package/dist/{orchestrator-DyGUC7re.d.ts → orchestrator-Bvq1-RQs.d.ts} +23 -9
  262. package/dist/orchestrator.d.ts +12 -12
  263. package/dist/orchestrator.js +52 -52
  264. package/dist/patterns-cli.d.ts +3 -1
  265. package/dist/{pipeline-C25Oxtp1.d.ts → pipeline-C8vfIiTX.d.ts} +1 -1
  266. package/dist/policy-runtime.d.ts +3 -1
  267. package/dist/proactive-contention.d.ts +3 -1
  268. package/dist/provenance.d.ts +3 -1
  269. package/dist/{public-http-CMe7NQzj.d.ts → public-http-Cy0aYbys.d.ts} +1 -1
  270. package/dist/{qmd-DkDVCbgF.d.ts → qmd-B9p1SZTZ.d.ts} +1 -1
  271. package/dist/qmd-preflight.d.ts +4 -2
  272. package/dist/qmd-recall-cache.d.ts +3 -1
  273. package/dist/qmd.d.ts +4 -2
  274. package/dist/recall-concurrency-config.d.ts +3 -1
  275. package/dist/recall-disclosure-escalation.d.ts +3 -1
  276. package/dist/recall-explain-renderer.d.ts +3 -1
  277. package/dist/recall-explain-renderer.js +3 -3
  278. package/dist/recall-memory-map.d.ts +3 -1
  279. package/dist/recall-planner-llm.d.ts +3 -1
  280. package/dist/recall-state.d.ts +3 -1
  281. package/dist/recall-tag-filter.d.ts +3 -1
  282. package/dist/recall-timings.d.ts +3 -1
  283. package/dist/recall-xray-cli.d.ts +3 -1
  284. package/dist/recall-xray-cli.js +4 -4
  285. package/dist/recall-xray-renderer.d.ts +3 -1
  286. package/dist/recall-xray-renderer.js +3 -3
  287. package/dist/recall-xray.d.ts +3 -1
  288. package/dist/recall-xray.js +2 -2
  289. package/dist/reconcile/cursor.d.ts +3 -1
  290. package/dist/reconcile/manifest.d.ts +3 -1
  291. package/dist/reconcile/plan.d.ts +3 -1
  292. package/dist/replay/normalizers/chatgpt.d.ts +3 -1
  293. package/dist/replay/normalizers/claude.d.ts +3 -1
  294. package/dist/replay/normalizers/openclaw.d.ts +3 -1
  295. package/dist/replay/normalizers/shared.d.ts +3 -1
  296. package/dist/replay/runner.d.ts +3 -1
  297. package/dist/replay/types.d.ts +3 -1
  298. package/dist/replica-divergence.d.ts +3 -1
  299. package/dist/replica-peers-config.d.ts +3 -1
  300. package/dist/{resolution-MFY72STR.js → resolution-4552BNRV.js} +13 -3
  301. package/dist/resolve-auth-token.d.ts +3 -1
  302. package/dist/resume-bundles.js +4 -2
  303. package/dist/retrieval-agents.d.ts +4 -2
  304. package/dist/retrieval-tiers.d.ts +3 -1
  305. package/dist/routing/engine.d.ts +3 -1
  306. package/dist/routing/store.d.ts +3 -1
  307. package/dist/salvage-envelope.d.ts +3 -1
  308. package/dist/schemas.d.ts +44 -44
  309. package/dist/{scope-profiles-B9xMoFO-.d.ts → scope-profiles-DLrRxFWR.d.ts} +1 -1
  310. package/dist/search/embed-helper.d.ts +3 -1
  311. package/dist/search/factory.d.ts +3 -1
  312. package/dist/search/index.d.ts +3 -1
  313. package/dist/search/lancedb-backend.d.ts +3 -1
  314. package/dist/search/meilisearch-backend.d.ts +3 -1
  315. package/dist/search/noop-backend.d.ts +3 -1
  316. package/dist/search/orama-backend.d.ts +3 -1
  317. package/dist/search/port.d.ts +3 -1
  318. package/dist/search/remote-backend.d.ts +3 -1
  319. package/dist/{semantic-TddhF0y7.d.ts → semantic-BalR6EXU.d.ts} +1 -1
  320. package/dist/{semantic-consolidation-C4uykW84.d.ts → semantic-consolidation-DlN6xe20.d.ts} +1 -1
  321. package/dist/semantic-consolidation.d.ts +4 -2
  322. package/dist/semantic-consolidation.js +4 -4
  323. package/dist/semantic-rule-promotion.js +3 -3
  324. package/dist/semantic-rule-verifier.d.ts +3 -1
  325. package/dist/semantic-rule-verifier.js +3 -3
  326. package/dist/{service-DCZDZNcV.d.ts → service-GkYyVfm9.d.ts} +2 -2
  327. package/dist/session-observer-bands.d.ts +3 -1
  328. package/dist/session-observer-state.d.ts +3 -1
  329. package/dist/shared-context/manager.d.ts +3 -1
  330. package/dist/signal.d.ts +3 -1
  331. package/dist/source-agent-qualifier.d.ts +3 -1
  332. package/dist/source-agent-qualifier.js +3 -3
  333. package/dist/{storage-CcKmEjL8.d.ts → storage-BIDzuKIn.d.ts} +1 -1
  334. package/dist/storage.d.ts +4 -2
  335. package/dist/storage.js +2 -2
  336. package/dist/subject-config.d.ts +3 -1
  337. package/dist/summarizer.d.ts +3 -1
  338. package/dist/summary-snapshot.d.ts +3 -1
  339. package/dist/support-passport/index.d.ts +43 -43
  340. package/dist/support-passport/index.js +17 -17
  341. package/dist/temporal-supersession.d.ts +4 -2
  342. package/dist/temporal-timeline-recall.d.ts +3 -1
  343. package/dist/temporal-validity.d.ts +3 -1
  344. package/dist/threading.d.ts +3 -1
  345. package/dist/tier-migration.d.ts +4 -2
  346. package/dist/tier-routing.d.ts +3 -1
  347. package/dist/topics.d.ts +3 -1
  348. package/dist/transcript.d.ts +3 -1
  349. package/dist/transfer/types.d.ts +20 -20
  350. package/dist/trust-score-stage.d.ts +3 -1
  351. package/dist/trust-score.d.ts +3 -1
  352. package/dist/{types-Pi0lfaEt.d.ts → types-BxAcOl5Q.d.ts} +323 -4
  353. package/dist/types.d.ts +3 -1
  354. package/dist/types.js +1 -1
  355. package/dist/utility-runtime.d.ts +3 -1
  356. package/dist/verified-recall.js +3 -3
  357. package/dist/who-knows-cli.d.ts +40 -40
  358. package/dist/who-knows-cli.js +4 -4
  359. package/dist/who-knows.d.ts +42 -42
  360. package/dist/who-knows.js +3 -3
  361. package/dist/write-envelope.d.ts +3 -1
  362. package/package.json +2 -2
  363. package/src/access-boundary.ts +4 -0
  364. package/src/access-http.ts +6 -5
  365. package/src/access-mcp-admin-tools.ts +24 -0
  366. package/src/access-mcp-output-schemas.ts +14 -0
  367. package/src/access-mcp.ts +2 -2
  368. package/src/access-operations-batch.ts +5 -0
  369. package/src/access-service.ts +27 -0
  370. package/src/access-surface-catalog.test.ts +24 -0
  371. package/src/access-surface-catalog.ts +4 -0
  372. package/src/coding/action-gate.test.ts +341 -0
  373. package/src/coding/action-gate.ts +556 -0
  374. package/src/config.ts +5 -0
  375. package/src/contradiction/contradiction-review.ts +50 -4
  376. package/src/contradiction/contradiction-scan.ts +14 -3
  377. package/src/contradiction/resolution.ts +50 -2
  378. package/src/index.ts +4 -3
  379. package/src/orchestration/recall-rerank-coordinator.ts +123 -4
  380. package/src/orchestration/recall-result-formatter.ts +6 -2
  381. package/src/orchestration/recall-search-pipeline.ts +14 -1
  382. package/src/preferences/drift-config.ts +118 -0
  383. package/src/preferences/drift-recall.ts +133 -0
  384. package/src/preferences/drift-types.ts +87 -0
  385. package/src/preferences/index.ts +12 -0
  386. package/src/preferences/preference-drift.test.ts +690 -0
  387. package/src/preferences/preference-drift.ts +724 -0
  388. package/src/review/review-deck-access.test.ts +325 -0
  389. package/src/review/review-deck-http-base.ts +133 -0
  390. package/src/review/review-deck-mutation.test.ts +417 -0
  391. package/src/review/review-deck-mutation.ts +677 -0
  392. package/src/review/review-deck-snapshot.ts +196 -0
  393. package/src/review/review-deck-surface.ts +117 -0
  394. package/src/review/review-deck.test.ts +347 -0
  395. package/src/review/review-deck.ts +311 -0
  396. package/src/storage.ts +4 -6
  397. package/src/types.ts +7 -3
  398. package/dist/chunk-35NN3ZFA.js.map +0 -1
  399. package/dist/chunk-4KYOLI6M.js.map +0 -1
  400. package/dist/chunk-BWLRUMOG.js.map +0 -1
  401. package/dist/chunk-J275IYMG.js.map +0 -1
  402. package/dist/chunk-SB7D4BT7.js.map +0 -1
  403. package/dist/chunk-SBDCZ2AX.js.map +0 -1
  404. package/dist/chunk-TF77C7SV.js.map +0 -1
  405. package/dist/chunk-TZNQUNKL.js.map +0 -1
  406. package/dist/chunk-V3MXUL3D.js.map +0 -1
  407. package/dist/chunk-XCTXS7VY.js +0 -402
  408. package/dist/chunk-XCTXS7VY.js.map +0 -1
  409. package/dist/chunk-YLDXWCZP.js.map +0 -1
  410. /package/dist/{chunk-R7JAM2XF.js.map → chunk-2VXWFYJE.js.map} +0 -0
  411. /package/dist/{chunk-UXO5IMBK.js.map → chunk-4XDGYCZI.js.map} +0 -0
  412. /package/dist/{chunk-OTHZWLUD.js.map → chunk-57HVIG5U.js.map} +0 -0
  413. /package/dist/{chunk-EILZG5VC.js.map → chunk-6TAX66IA.js.map} +0 -0
  414. /package/dist/{chunk-NKKD4ZAU.js.map → chunk-6VALIZKG.js.map} +0 -0
  415. /package/dist/{chunk-2E36UXVW.js.map → chunk-7KFIMGMP.js.map} +0 -0
  416. /package/dist/{chunk-LGO6A7GJ.js.map → chunk-7QOO4LGC.js.map} +0 -0
  417. /package/dist/{chunk-DZUJ46DO.js.map → chunk-AUO2LJ3K.js.map} +0 -0
  418. /package/dist/{chunk-ZO6AXLEH.js.map → chunk-AYDDB3XI.js.map} +0 -0
  419. /package/dist/{chunk-NTWN6HB2.js.map → chunk-AYYGRVRP.js.map} +0 -0
  420. /package/dist/{chunk-7YQ4IYS2.js.map → chunk-AZAA5DNP.js.map} +0 -0
  421. /package/dist/{chunk-Z7PBQPJ4.js.map → chunk-BQUEAVNW.js.map} +0 -0
  422. /package/dist/{chunk-5YQ63T4B.js.map → chunk-D27J626P.js.map} +0 -0
  423. /package/dist/{chunk-LZH5FR2W.js.map → chunk-DHTQP334.js.map} +0 -0
  424. /package/dist/{chunk-Y7DK7HHJ.js.map → chunk-E4MVQQVX.js.map} +0 -0
  425. /package/dist/{chunk-JYYBA7TF.js.map → chunk-EIVIB73I.js.map} +0 -0
  426. /package/dist/{chunk-S2DPMJXH.js.map → chunk-EV3YFLCB.js.map} +0 -0
  427. /package/dist/{chunk-3I7ASZN3.js.map → chunk-G57LQRP6.js.map} +0 -0
  428. /package/dist/{chunk-UIN2BWDD.js.map → chunk-GN55KU2P.js.map} +0 -0
  429. /package/dist/{chunk-PE255F4T.js.map → chunk-GUXS322H.js.map} +0 -0
  430. /package/dist/{chunk-YB42WZCY.js.map → chunk-IQSC3V2E.js.map} +0 -0
  431. /package/dist/{chunk-MN4KB2A4.js.map → chunk-MBDJJTAT.js.map} +0 -0
  432. /package/dist/{chunk-SQI57UCJ.js.map → chunk-MRTUN665.js.map} +0 -0
  433. /package/dist/{chunk-SPUJNJJC.js.map → chunk-NZWEEALH.js.map} +0 -0
  434. /package/dist/{chunk-2XDWWPTN.js.map → chunk-OJD4WS2E.js.map} +0 -0
  435. /package/dist/{chunk-ZWXJBFZU.js.map → chunk-OLWTCWQ2.js.map} +0 -0
  436. /package/dist/{chunk-XRYZRW54.js.map → chunk-P4DHENRE.js.map} +0 -0
  437. /package/dist/{chunk-IID2CMUU.js.map → chunk-PDVQ5JU3.js.map} +0 -0
  438. /package/dist/{chunk-5NM4OH4P.js.map → chunk-QFMO32TO.js.map} +0 -0
  439. /package/dist/{chunk-SIHSCCUQ.js.map → chunk-QXIQPCCN.js.map} +0 -0
  440. /package/dist/{chunk-2YI72KM3.js.map → chunk-R47WINCY.js.map} +0 -0
  441. /package/dist/{chunk-ZQHI2BZB.js.map → chunk-RK4WXUI2.js.map} +0 -0
  442. /package/dist/{chunk-QOS5LBZN.js.map → chunk-S7Q5CM7E.js.map} +0 -0
  443. /package/dist/{chunk-GDFVPUJ5.js.map → chunk-TDKSCV62.js.map} +0 -0
  444. /package/dist/{chunk-OCZIYAE5.js.map → chunk-TYUS5TLG.js.map} +0 -0
  445. /package/dist/{chunk-GNCCUR6K.js.map → chunk-URHCUXKI.js.map} +0 -0
  446. /package/dist/{chunk-CT56C22C.js.map → chunk-Z4RPXHJH.js.map} +0 -0
  447. /package/dist/{contradiction-review-QKJH5DKD.js.map → contradiction-review-WRVLRWHS.js.map} +0 -0
  448. /package/dist/{contradiction-scan-VOTQRRSX.js.map → contradiction-scan-AKUWPX5N.js.map} +0 -0
  449. /package/dist/{resolution-MFY72STR.js.map → resolution-4552BNRV.js.map} +0 -0
@@ -11,6 +11,11 @@ import {
11
11
  import {
12
12
  parseLocationConfig
13
13
  } from "./chunk-7PHI6GUI.js";
14
+ import {
15
+ PRE_ACTION_GATE_DEFAULT_TIMEOUT_MS,
16
+ normalizeActionIntent,
17
+ sanitizePayloadString
18
+ } from "./chunk-D2YNNDML.js";
14
19
  import {
15
20
  parseSubjectRuntimeConfig
16
21
  } from "./chunk-AAXJNINV.js";
@@ -167,6 +172,87 @@ function parseProceduralMaintenanceConfig(raw) {
167
172
  };
168
173
  }
169
174
 
175
+ // src/preferences/drift-config.ts
176
+ var DRIFT_DETECTION_DEFAULTS = {
177
+ enabled: false,
178
+ minAgeDays: 60,
179
+ lookbackDays: 45,
180
+ maxCandidatesPerRun: 25,
181
+ recallDamping: false,
182
+ stalePenalty: 0.8,
183
+ annotateAfterDays: 0
184
+ };
185
+ function parseFlag(src, key, fallback) {
186
+ const value = src[key];
187
+ if (value === void 0 || value === null) return fallback;
188
+ const coerced = coerceBool(value);
189
+ if (coerced === void 0) {
190
+ throw new Error(
191
+ `driftDetection.${key} must be a boolean or one of "true"/"false"/"1"/"0"/"yes"/"no"/"on"/"off" (got ${JSON.stringify(value)}).`
192
+ );
193
+ }
194
+ return coerced;
195
+ }
196
+ function parseDayCount(src, key, fallback) {
197
+ const value = src[key];
198
+ if (value === void 0 || value === null) return fallback;
199
+ const coerced = coerceNumber(value);
200
+ if (coerced === void 0 || !Number.isFinite(coerced)) {
201
+ throw new Error(`driftDetection.${key} must be a finite number (got ${JSON.stringify(value)}).`);
202
+ }
203
+ if (!Number.isInteger(coerced)) {
204
+ throw new Error(`driftDetection.${key} must be an integer (got ${JSON.stringify(value)}).`);
205
+ }
206
+ if (coerced < 0 || coerced > 36500) {
207
+ throw new Error(`driftDetection.${key} must be between 0 and 36500 (got ${JSON.stringify(value)}).`);
208
+ }
209
+ return coerced;
210
+ }
211
+ function parseDriftDetectionConfig(raw) {
212
+ if (raw === void 0 || raw === null) return { ...DRIFT_DETECTION_DEFAULTS };
213
+ if (typeof raw !== "object" || Array.isArray(raw)) {
214
+ throw new Error(
215
+ `driftDetection must be an object (got ${JSON.stringify(raw)}). Omit the key to keep drift detection disabled (issue #2371).`
216
+ );
217
+ }
218
+ const src = raw;
219
+ const rawMax = src.maxCandidatesPerRun;
220
+ let maxCandidatesPerRun = DRIFT_DETECTION_DEFAULTS.maxCandidatesPerRun;
221
+ if (rawMax !== void 0 && rawMax !== null) {
222
+ const coerced = coerceNumber(rawMax);
223
+ if (coerced === void 0 || !Number.isInteger(coerced) || coerced < 0) {
224
+ throw new Error(
225
+ `driftDetection.maxCandidatesPerRun must be an integer >= 0 (got ${JSON.stringify(rawMax)}). Use 0 to disable the scan.`
226
+ );
227
+ }
228
+ maxCandidatesPerRun = coerced;
229
+ }
230
+ const rawPenalty = src.stalePenalty;
231
+ let stalePenalty = DRIFT_DETECTION_DEFAULTS.stalePenalty;
232
+ if (rawPenalty !== void 0 && rawPenalty !== null) {
233
+ const coerced = coerceNumber(rawPenalty);
234
+ if (coerced === void 0 || !Number.isFinite(coerced) || coerced <= 0 || coerced > 1) {
235
+ throw new Error(
236
+ `driftDetection.stalePenalty must be a number in (0, 1] (got ${JSON.stringify(rawPenalty)}). Use 1 to disable damping without changing the flag.`
237
+ );
238
+ }
239
+ stalePenalty = coerced;
240
+ }
241
+ return {
242
+ enabled: parseFlag(src, "enabled", DRIFT_DETECTION_DEFAULTS.enabled),
243
+ minAgeDays: parseDayCount(src, "minAgeDays", DRIFT_DETECTION_DEFAULTS.minAgeDays),
244
+ lookbackDays: parseDayCount(src, "lookbackDays", DRIFT_DETECTION_DEFAULTS.lookbackDays),
245
+ maxCandidatesPerRun,
246
+ recallDamping: parseFlag(src, "recallDamping", DRIFT_DETECTION_DEFAULTS.recallDamping),
247
+ stalePenalty,
248
+ annotateAfterDays: parseDayCount(
249
+ src,
250
+ "annotateAfterDays",
251
+ DRIFT_DETECTION_DEFAULTS.annotateAfterDays
252
+ )
253
+ };
254
+ }
255
+
170
256
  // src/wearables/config.ts
171
257
  var KNOWN_WEARABLE_SOURCE_IDS = ["limitless", "bee", "omi"];
172
258
  var MEMORY_MODES = ["off", "review", "auto", "smart"];
@@ -951,6 +1037,341 @@ function parseOkfConfig(raw) {
951
1037
  };
952
1038
  }
953
1039
 
1040
+ // src/coding/action-gate.ts
1041
+ var ACTION_GATE_DEFAULT_MAX_ADVISORIES_PER_TURN = 3;
1042
+ var MAX_ADVISORY_CHARS = 400;
1043
+ var MAX_ACTION_TERMS = 24;
1044
+ var MIN_TERM_CHARS = 3;
1045
+ var MIN_TERM_OVERLAP_RATIO = 0.6;
1046
+ var MAX_TRACKED_SESSIONS = 200;
1047
+ var MAX_TRACKED_IDS_PER_SESSION = 200;
1048
+ var ACTION_GATE_DEFAULTS = {
1049
+ enabled: false,
1050
+ timeoutMs: PRE_ACTION_GATE_DEFAULT_TIMEOUT_MS,
1051
+ maxAdvisoriesPerTurn: ACTION_GATE_DEFAULT_MAX_ADVISORIES_PER_TURN
1052
+ };
1053
+ function parseActionGateConfig(raw) {
1054
+ if (raw !== void 0 && (raw === null || typeof raw !== "object" || Array.isArray(raw))) {
1055
+ throw new Error(
1056
+ `actionGate must be an object (got ${JSON.stringify(raw)}). Use actionGate: { enabled: true } to opt in.`
1057
+ );
1058
+ }
1059
+ const block = raw ?? {};
1060
+ const rawEnabled = block.enabled;
1061
+ let enabled = ACTION_GATE_DEFAULTS.enabled;
1062
+ if (rawEnabled !== void 0) {
1063
+ const coerced = coerceBool(rawEnabled);
1064
+ if (coerced === void 0) {
1065
+ throw new Error(
1066
+ `actionGate.enabled must be a boolean or one of "true"/"false"/"1"/"0"/"yes"/"no"/"on"/"off" (got ${JSON.stringify(rawEnabled)}).`
1067
+ );
1068
+ }
1069
+ enabled = coerced;
1070
+ }
1071
+ const rawTimeout = coerceNumber(block.timeoutMs);
1072
+ const timeoutMs = rawTimeout !== void 0 && Number.isFinite(rawTimeout) ? Math.min(5e3, Math.max(1, Math.floor(rawTimeout))) : ACTION_GATE_DEFAULTS.timeoutMs;
1073
+ const rawMax = coerceNumber(block.maxAdvisoriesPerTurn);
1074
+ const maxAdvisoriesPerTurn = rawMax !== void 0 && Number.isFinite(rawMax) ? Math.min(20, Math.max(0, Math.floor(rawMax))) : ACTION_GATE_DEFAULTS.maxAdvisoriesPerTurn;
1075
+ return { enabled, timeoutMs, maxAdvisoriesPerTurn };
1076
+ }
1077
+ function actionTermsFor(intent) {
1078
+ const raw = intent.kind === "command" ? [intent.command, ...intent.args ?? []] : [intent.filePath, intent.editKind, intent.symbol ?? "", intent.range ?? ""];
1079
+ const terms = [];
1080
+ const seen = /* @__PURE__ */ new Set();
1081
+ for (const piece of raw) {
1082
+ for (const token of sanitizePayloadString(piece ?? "").toLowerCase().split(/[^a-z0-9._-]+/)) {
1083
+ const term = token.replace(/^[._-]+|[._-]+$/g, "");
1084
+ if (term.length < MIN_TERM_CHARS || seen.has(term)) continue;
1085
+ seen.add(term);
1086
+ terms.push(term);
1087
+ if (terms.length >= MAX_ACTION_TERMS) return terms;
1088
+ }
1089
+ }
1090
+ return terms;
1091
+ }
1092
+ function isFailureClassMemory(memory) {
1093
+ const fm = memory.frontmatter;
1094
+ if (fm.status !== void 0 && fm.status !== "active") return false;
1095
+ if (fm.category === "correction") return true;
1096
+ if (fm.structuredAttributes?.needsRepair === "true") return true;
1097
+ const failures = typeof fm.mw_fail === "number" ? fm.mw_fail : 0;
1098
+ const successes = typeof fm.mw_success === "number" ? fm.mw_success : 0;
1099
+ return failures > 0 && failures > successes;
1100
+ }
1101
+ function createFailureMemoryCandidateSource(deps) {
1102
+ return {
1103
+ id: "failure-memory",
1104
+ async find(query) {
1105
+ if (query.actionTerms.length === 0) return { ok: true, candidates: [] };
1106
+ let memories;
1107
+ try {
1108
+ memories = await deps.listMemories({
1109
+ namespace: query.namespace,
1110
+ memoryDir: query.memoryDir,
1111
+ signal: query.signal
1112
+ });
1113
+ } catch (error) {
1114
+ return { ok: false, reason: error instanceof Error ? error.message : String(error) };
1115
+ }
1116
+ const required = Math.max(1, Math.ceil(query.actionTerms.length * MIN_TERM_OVERLAP_RATIO));
1117
+ const candidates = [];
1118
+ for (const memory of memories) {
1119
+ if (!isFailureClassMemory(memory)) continue;
1120
+ const haystack = `${memory.content} ${(memory.frontmatter.tags ?? []).join(" ")}`.toLowerCase();
1121
+ let hits = 0;
1122
+ for (const term of query.actionTerms) if (haystack.includes(term)) hits += 1;
1123
+ if (hits < required) continue;
1124
+ candidates.push({
1125
+ memoryId: memory.frontmatter.id,
1126
+ score: hits,
1127
+ advisoryText: `[ActionGate] A stored failure memory matches this action: "${memory.content}".`
1128
+ });
1129
+ }
1130
+ candidates.sort((left, right) => {
1131
+ const byScore = (right.score ?? 0) - (left.score ?? 0);
1132
+ return byScore !== 0 ? byScore : left.memoryId.localeCompare(right.memoryId);
1133
+ });
1134
+ return { ok: true, candidates };
1135
+ }
1136
+ };
1137
+ }
1138
+ function createTrajectoryCandidateSource(gate) {
1139
+ return {
1140
+ id: "causal-trajectory",
1141
+ async find(query) {
1142
+ const result = await gate.evaluate({
1143
+ sessionKey: query.sessionKey,
1144
+ strategyId: query.strategyId,
1145
+ intent: query.intent,
1146
+ codingContext: query.codingContext,
1147
+ memoryDir: query.memoryDir,
1148
+ causalTrajectoryStoreDir: query.causalTrajectoryStoreDir,
1149
+ signal: query.signal
1150
+ });
1151
+ if (result.status === "ERROR_FAIL_OPEN") {
1152
+ return { ok: false, reason: result.reason ?? "pre-action gate failed open" };
1153
+ }
1154
+ if (result.status !== "MATCH_WARN" || !result.matchedTrajectoryId || !result.advisoryText) {
1155
+ return { ok: true, candidates: [] };
1156
+ }
1157
+ return {
1158
+ ok: true,
1159
+ candidates: [
1160
+ {
1161
+ memoryId: result.matchedTrajectoryId,
1162
+ // Trajectory matches are exact fingerprint hits: rank above lexical ones.
1163
+ score: Number.MAX_SAFE_INTEGER,
1164
+ advisoryText: result.advisoryText
1165
+ }
1166
+ ]
1167
+ };
1168
+ }
1169
+ };
1170
+ }
1171
+ var ActionGateService = class {
1172
+ config;
1173
+ sources;
1174
+ audit;
1175
+ clock;
1176
+ now;
1177
+ sessions = /* @__PURE__ */ new Map();
1178
+ constructor(config, deps = {}) {
1179
+ this.config = config;
1180
+ this.sources = deps.sources ?? [];
1181
+ this.audit = deps.audit;
1182
+ this.clock = deps.clock ?? Date.now;
1183
+ this.now = deps.now ?? (() => /* @__PURE__ */ new Date());
1184
+ }
1185
+ /**
1186
+ * Memory ids the gate already delivered in this session. Turn-start recall
1187
+ * filters these out before its own cap, honouring the filter-then-cap order.
1188
+ */
1189
+ suppressedForTurnStart(sessionKey) {
1190
+ if (!this.config.enabled) return [];
1191
+ return [...this.sessions.get(sessionKey)?.deliveredByGate ?? []];
1192
+ }
1193
+ /** Record ids turn-start recall injected, so the gate will not repeat them. */
1194
+ noteTurnStartDelivery(sessionKey, memoryIds) {
1195
+ if (!this.config.enabled || memoryIds.length === 0) return;
1196
+ const state = this.sessionState(sessionKey, void 0);
1197
+ for (const id of memoryIds) this.addTracked(state.deliveredByTurnStart, id);
1198
+ }
1199
+ resetSession(sessionKey) {
1200
+ this.sessions.delete(sessionKey);
1201
+ }
1202
+ async evaluate(request) {
1203
+ const startedAt = this.clock();
1204
+ if (!this.config.enabled) {
1205
+ return {
1206
+ status: "DISABLED",
1207
+ advisories: [],
1208
+ suppressedIds: [],
1209
+ degradations: [],
1210
+ reason: "actionGate.enabled is false",
1211
+ latencyMs: 0
1212
+ };
1213
+ }
1214
+ if (this.config.maxAdvisoriesPerTurn === 0) {
1215
+ return this.finish(request, startedAt, {
1216
+ status: "DISABLED",
1217
+ advisories: [],
1218
+ suppressedIds: [],
1219
+ degradations: [],
1220
+ reason: "actionGate.maxAdvisoriesPerTurn is 0"
1221
+ });
1222
+ }
1223
+ let fingerprint;
1224
+ try {
1225
+ fingerprint = normalizeActionIntent(request.intent, request.strategyId, request.codingContext).fingerprint;
1226
+ } catch (error) {
1227
+ return this.finish(request, startedAt, {
1228
+ status: "ERROR_FAIL_OPEN",
1229
+ advisories: [],
1230
+ suppressedIds: [],
1231
+ degradations: [],
1232
+ reason: error instanceof Error ? error.message : String(error)
1233
+ });
1234
+ }
1235
+ const deadline = startedAt + this.config.timeoutMs;
1236
+ const collected = await this.collect(request, fingerprint, deadline);
1237
+ const state = this.sessionState(request.sessionKey, request.turnId);
1238
+ const advisories = [];
1239
+ const suppressedIds = [];
1240
+ for (const { sourceId, candidate } of collected.candidates) {
1241
+ if (state.deliveredThisTurn.has(candidate.memoryId) || state.deliveredByTurnStart.has(candidate.memoryId)) {
1242
+ suppressedIds.push(candidate.memoryId);
1243
+ continue;
1244
+ }
1245
+ if (advisories.length >= this.config.maxAdvisoriesPerTurn) {
1246
+ suppressedIds.push(candidate.memoryId);
1247
+ continue;
1248
+ }
1249
+ advisories.push({
1250
+ memoryId: candidate.memoryId,
1251
+ sourceId,
1252
+ text: sanitizePayloadString(candidate.advisoryText).replace(/\s+/g, " ").slice(0, MAX_ADVISORY_CHARS)
1253
+ });
1254
+ this.addTracked(state.deliveredThisTurn, candidate.memoryId);
1255
+ this.addTracked(state.deliveredByGate, candidate.memoryId);
1256
+ }
1257
+ const status = advisories.length > 0 ? "MATCH_WARN" : collected.degradations.length > 0 ? "ERROR_FAIL_OPEN" : "NO_MATCH";
1258
+ return this.finish(request, startedAt, {
1259
+ status,
1260
+ advisories,
1261
+ suppressedIds,
1262
+ degradations: collected.degradations,
1263
+ fingerprint,
1264
+ reason: status === "ERROR_FAIL_OPEN" ? collected.degradations[0] : void 0
1265
+ });
1266
+ }
1267
+ async collect(request, fingerprint, deadline) {
1268
+ if (this.sources.length === 0) return { candidates: [], degradations: [] };
1269
+ const timeoutAbort = new AbortController();
1270
+ const signal = request.signal ? AbortSignal.any([request.signal, timeoutAbort.signal]) : timeoutAbort.signal;
1271
+ const query = {
1272
+ sessionKey: request.sessionKey,
1273
+ fingerprint,
1274
+ actionTerms: actionTermsFor(request.intent),
1275
+ strategyId: request.strategyId,
1276
+ intent: request.intent,
1277
+ codingContext: request.codingContext,
1278
+ memoryDir: request.memoryDir,
1279
+ namespace: request.namespace,
1280
+ causalTrajectoryStoreDir: request.causalTrajectoryStoreDir,
1281
+ signal
1282
+ };
1283
+ const remaining = Math.max(1, deadline - this.clock());
1284
+ let onTimeout;
1285
+ const timeoutResult = new Promise((resolve) => {
1286
+ onTimeout = resolve;
1287
+ });
1288
+ const timer = setTimeout(() => {
1289
+ timeoutAbort.abort();
1290
+ onTimeout({ ok: false, reason: `action gate timed out after ${this.config.timeoutMs}ms` });
1291
+ }, remaining);
1292
+ try {
1293
+ const settled = await Promise.all(
1294
+ this.sources.map(async (source) => {
1295
+ let result;
1296
+ try {
1297
+ result = await Promise.race([source.find(query), timeoutResult]);
1298
+ } catch (error) {
1299
+ result = { ok: false, reason: error instanceof Error ? error.message : String(error) };
1300
+ }
1301
+ return { source, result };
1302
+ })
1303
+ );
1304
+ const candidates = [];
1305
+ const degradations = [];
1306
+ for (const { source, result } of settled) {
1307
+ if (!result.ok) {
1308
+ degradations.push(`${source.id}: ${result.reason}`);
1309
+ continue;
1310
+ }
1311
+ for (const candidate of result.candidates) candidates.push({ sourceId: source.id, candidate });
1312
+ }
1313
+ candidates.sort((left, right) => {
1314
+ const byScore = (right.candidate.score ?? 0) - (left.candidate.score ?? 0);
1315
+ if (byScore !== 0) return byScore;
1316
+ const bySource = left.sourceId.localeCompare(right.sourceId);
1317
+ return bySource !== 0 ? bySource : left.candidate.memoryId.localeCompare(right.candidate.memoryId);
1318
+ });
1319
+ return { candidates, degradations };
1320
+ } finally {
1321
+ clearTimeout(timer);
1322
+ }
1323
+ }
1324
+ finish(request, startedAt, decision) {
1325
+ const latencyMs = Math.max(0, this.clock() - startedAt);
1326
+ const result = { ...decision, latencyMs };
1327
+ if (this.audit) {
1328
+ const record = {
1329
+ ts: this.now().toISOString(),
1330
+ sessionKey: request.sessionKey,
1331
+ turnId: request.turnId,
1332
+ status: result.status,
1333
+ latencyMs,
1334
+ fingerprint: result.fingerprint,
1335
+ deliveredIds: result.advisories.map((advisory) => advisory.memoryId),
1336
+ suppressedIds: result.suppressedIds,
1337
+ degradations: result.degradations,
1338
+ reason: result.reason
1339
+ };
1340
+ void Promise.resolve().then(() => this.audit?.(record)).catch(() => void 0);
1341
+ }
1342
+ return result;
1343
+ }
1344
+ sessionState(sessionKey, turnId) {
1345
+ let state = this.sessions.get(sessionKey);
1346
+ if (!state) {
1347
+ if (this.sessions.size >= MAX_TRACKED_SESSIONS) {
1348
+ const oldest = this.sessions.keys().next().value;
1349
+ if (oldest !== void 0) this.sessions.delete(oldest);
1350
+ }
1351
+ state = {
1352
+ turnId: turnId ?? "",
1353
+ deliveredThisTurn: /* @__PURE__ */ new Set(),
1354
+ deliveredByGate: /* @__PURE__ */ new Set(),
1355
+ deliveredByTurnStart: /* @__PURE__ */ new Set()
1356
+ };
1357
+ this.sessions.set(sessionKey, state);
1358
+ }
1359
+ if (turnId !== void 0 && state.turnId !== turnId) {
1360
+ state.turnId = turnId;
1361
+ state.deliveredThisTurn.clear();
1362
+ }
1363
+ return state;
1364
+ }
1365
+ addTracked(set, value) {
1366
+ if (set.has(value)) return;
1367
+ if (set.size >= MAX_TRACKED_IDS_PER_SESSION) {
1368
+ const oldest = set.values().next().value;
1369
+ if (oldest !== void 0) set.delete(oldest);
1370
+ }
1371
+ set.add(value);
1372
+ }
1373
+ };
1374
+
954
1375
  // src/chat/chat-config.ts
955
1376
  var DEFAULT_CHAT_CONFIG = {
956
1377
  enabled: false,
@@ -2160,6 +2581,8 @@ function parseConfig(raw, rawOperatorConfig, runtimeSet) {
2160
2581
  contradictionAutoResolve: cfg.contradictionAutoResolve !== false,
2161
2582
  // Contradiction Scan cron (issue #520)
2162
2583
  contradictionScan: parseContradictionScanConfig(cfg.contradictionScan),
2584
+ // Preference drift detection (issue #2371)
2585
+ driftDetection: parseDriftDetectionConfig(cfg.driftDetection),
2163
2586
  dependencyPropagation: parseDependencyPropagationConfig(cfg),
2164
2587
  // Temporal Supersession (issue #375)
2165
2588
  temporalSupersessionEnabled: cfg.temporalSupersessionEnabled !== false,
@@ -2594,6 +3017,7 @@ function parseConfig(raw, rawOperatorConfig, runtimeSet) {
2594
3017
  bridgeMode: cfg.bridgeMode === void 0 ? "embedded" : String(cfg.bridgeMode),
2595
3018
  codexCompat,
2596
3019
  codingKnowledge: parseCodingKnowledgeConfig(cfg.codingKnowledge),
3020
+ actionGate: parseActionGateConfig(cfg.actionGate),
2597
3021
  chat: parseChatConfig(cfg.chat),
2598
3022
  supportPassport: parseSupportPassportConfig(cfg.supportPassport),
2599
3023
  hourlySummariesEnabled: cfg.hourlySummariesEnabled !== false,
@@ -3988,6 +4412,8 @@ function parseTrustScoreWeights(value) {
3988
4412
  }
3989
4413
 
3990
4414
  export {
4415
+ DRIFT_DETECTION_DEFAULTS,
4416
+ parseDriftDetectionConfig,
3991
4417
  KNOWN_WEARABLE_SOURCE_IDS,
3992
4418
  defaultWearableCleanupSettings,
3993
4419
  defaultWearableSourceSettings,
@@ -4000,10 +4426,18 @@ export {
4000
4426
  detectMeetings,
4001
4427
  DEFAULT_MEETINGS_CONFIG,
4002
4428
  parseMeetingsConfig,
4429
+ ACTION_GATE_DEFAULT_MAX_ADVISORIES_PER_TURN,
4430
+ ACTION_GATE_DEFAULTS,
4431
+ parseActionGateConfig,
4432
+ actionTermsFor,
4433
+ isFailureClassMemory,
4434
+ createFailureMemoryCandidateSource,
4435
+ createTrajectoryCandidateSource,
4436
+ ActionGateService,
4003
4437
  isOpenaiApiKeyDisabled,
4004
4438
  resolveEnvVars,
4005
4439
  DEFAULT_REASONING_MODEL,
4006
4440
  VALID_MEMORY_CATEGORIES,
4007
4441
  parseConfig
4008
4442
  };
4009
- //# sourceMappingURL=chunk-BWLRUMOG.js.map
4443
+ //# sourceMappingURL=chunk-76PL4XLG.js.map