@remnic/core 9.63.9 → 9.63.11

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 (464) hide show
  1. package/dist/access-admin-ops-surface.d.ts +12 -11
  2. package/dist/access-admin-ops-surface.js +23 -23
  3. package/dist/access-authorization-probe.d.ts +12 -11
  4. package/dist/access-authorization-probe.js +24 -24
  5. package/dist/access-boundary.d.ts +12 -11
  6. package/dist/access-boundary.js +23 -23
  7. package/dist/access-cli.js +84 -82
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +12 -11
  11. package/dist/access-extraction-force-flush.js +23 -23
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +11 -11
  14. package/dist/access-http-lifecycle-flush.d.ts +11 -11
  15. package/dist/access-http-offline-stream.d.ts +12 -11
  16. package/dist/access-http-query.d.ts +2 -2
  17. package/dist/access-http-query.js +25 -25
  18. package/dist/access-http.d.ts +13 -12
  19. package/dist/access-http.js +36 -36
  20. package/dist/access-identity-continuity-surface.d.ts +9 -9
  21. package/dist/access-identity-continuity-surface.js +23 -23
  22. package/dist/access-lcm-surface.d.ts +12 -11
  23. package/dist/access-lcm-surface.js +23 -23
  24. package/dist/access-mcp.d.ts +12 -11
  25. package/dist/access-mcp.js +30 -30
  26. package/dist/access-memory-search-fanout.d.ts +2 -2
  27. package/dist/{access-namespace-preflight-DB0zXFek.d.ts → access-namespace-preflight-CrF0FKaz.d.ts} +1 -1
  28. package/dist/access-namespace-preflight.d.ts +3 -3
  29. package/dist/access-namespace-preflight.js +23 -23
  30. package/dist/access-observe-write-surface.d.ts +12 -11
  31. package/dist/access-observe-write-surface.js +23 -23
  32. package/dist/access-offline-manifest.d.ts +9 -9
  33. package/dist/access-operations-batch.js +26 -25
  34. package/dist/access-operations.d.ts +14 -14
  35. package/dist/access-operations.js +29 -29
  36. package/dist/access-recall-concurrency.d.ts +12 -11
  37. package/dist/access-recall-concurrency.js +23 -23
  38. package/dist/access-recall-response.d.ts +12 -11
  39. package/dist/access-recall-response.js +23 -23
  40. package/dist/access-recall-surface.d.ts +12 -11
  41. package/dist/access-recall-surface.js +23 -23
  42. package/dist/access-schema.d.ts +92 -92
  43. package/dist/access-schema.js +3 -3
  44. package/dist/{access-service-DwfdjqkZ.d.ts → access-service-U6jiERic.d.ts} +86 -161
  45. package/dist/access-service-helpers.d.ts +12 -11
  46. package/dist/access-service.d.ts +12 -11
  47. package/dist/access-service.js +23 -23
  48. package/dist/access-surface-catalog.d.ts +12 -11
  49. package/dist/access-surface-catalog.js +25 -25
  50. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  51. package/dist/action-confidence.d.ts +1 -1
  52. package/dist/active-memory-bridge.d.ts +1 -1
  53. package/dist/active-recall.d.ts +1 -1
  54. package/dist/ambient-provenance.d.ts +1 -1
  55. package/dist/artifact-search.d.ts +1 -1
  56. package/dist/{auto-sync-3SHMZVQS.js → auto-sync-5L7EUZ27.js} +4 -3
  57. package/dist/{auto-sync-3SHMZVQS.js.map → auto-sync-5L7EUZ27.js.map} +1 -1
  58. package/dist/behavior-learner.d.ts +1 -1
  59. package/dist/behavior-signals.d.ts +1 -1
  60. package/dist/bootstrap.d.ts +9 -9
  61. package/dist/briefing-window.d.ts +2 -2
  62. package/dist/briefing.d.ts +5 -3
  63. package/dist/briefing.js +11 -9
  64. package/dist/buffer-surprise-report.d.ts +1 -1
  65. package/dist/buffer-turn-helpers.d.ts +1 -1
  66. package/dist/buffer.d.ts +2 -2
  67. package/dist/bulk-import/index.d.ts +3 -3
  68. package/dist/calibration.d.ts +1 -1
  69. package/dist/capabilities.d.ts +1 -1
  70. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-GWVG7LGC.js} +2 -2
  71. package/dist/{catalog-CCzmf8IH.d.ts → catalog-C0KIwZqR.d.ts} +1 -1
  72. package/dist/causal-behavior.d.ts +1 -1
  73. package/dist/causal-consolidation.d.ts +1 -1
  74. package/dist/causal-consolidation.js +10 -10
  75. package/dist/causal-trajectory-graph.d.ts +1 -1
  76. package/dist/{chunk-4POAMKV6.js → chunk-27IOSH2W.js} +5 -2
  77. package/dist/chunk-27IOSH2W.js.map +1 -0
  78. package/dist/{chunk-OQIRBGUU.js → chunk-2Q4UAPLD.js} +4 -4
  79. package/dist/{chunk-PHKU6BZ2.js → chunk-36XS2ASP.js} +2 -2
  80. package/dist/{chunk-BRHKW7GY.js → chunk-4IIDTPSK.js} +2 -2
  81. package/dist/{chunk-EDZNW3HE.js → chunk-57WMVU4D.js} +54 -45
  82. package/dist/chunk-57WMVU4D.js.map +1 -0
  83. package/dist/{chunk-Q5XKKDFQ.js → chunk-5SZ6CLGJ.js} +2 -2
  84. package/dist/{chunk-VDX2J7OX.js → chunk-5W7CTZ2E.js} +4 -4
  85. package/dist/{chunk-EUYWQ7TS.js → chunk-652S5A5D.js} +2 -2
  86. package/dist/{chunk-ULZFZL7K.js → chunk-6IKXAAJI.js} +17 -28
  87. package/dist/chunk-6IKXAAJI.js.map +1 -0
  88. package/dist/{chunk-3TDAA7VA.js → chunk-6NMZXEJ7.js} +2 -2
  89. package/dist/{chunk-ZOAAY2OE.js → chunk-77E7LLMV.js} +7 -7
  90. package/dist/{chunk-MIUL6AUZ.js → chunk-7ML7STOD.js} +3 -3
  91. package/dist/{chunk-5SCFDQEJ.js → chunk-BPLPGOUJ.js} +2 -2
  92. package/dist/{chunk-RWMSMTQP.js → chunk-BS75WJBH.js} +2 -2
  93. package/dist/{chunk-XE2QCCT2.js → chunk-BTBAHTQ5.js} +2 -2
  94. package/dist/{chunk-42TIIO2M.js → chunk-BTUIHRRR.js} +2 -2
  95. package/dist/{chunk-3IMYRX3W.js → chunk-BYFKJXIR.js} +2 -2
  96. package/dist/chunk-CIO7GCWE.js +29 -0
  97. package/dist/chunk-CIO7GCWE.js.map +1 -0
  98. package/dist/{chunk-SNEUAZ6B.js → chunk-CK3DZ6OE.js} +2 -2
  99. package/dist/{chunk-VYMICVRA.js → chunk-DIJCMHUE.js} +2 -2
  100. package/dist/{chunk-AJRJDXYR.js → chunk-E7MYSCSL.js} +2 -2
  101. package/dist/{chunk-3T6HIIKA.js → chunk-EHC3FIJ4.js} +2 -2
  102. package/dist/{chunk-YTXNDEUS.js → chunk-FEP45MYY.js} +4 -3
  103. package/dist/{chunk-YTXNDEUS.js.map → chunk-FEP45MYY.js.map} +1 -1
  104. package/dist/{chunk-KFB4YNXM.js → chunk-G5F4MXXC.js} +2 -2
  105. package/dist/{chunk-VANZKHTN.js → chunk-G5OB4XZX.js} +4 -4
  106. package/dist/{chunk-645WOU5I.js → chunk-H7BZBSP6.js} +4 -4
  107. package/dist/{chunk-SZ4HFZKB.js → chunk-HMKPFW7R.js} +2 -2
  108. package/dist/{chunk-WBPD6SBZ.js → chunk-HP6B732E.js} +54 -54
  109. package/dist/{chunk-VFZQXYN5.js → chunk-HZXO2CJ6.js} +2 -2
  110. package/dist/{chunk-DGUVXXAU.js → chunk-IRXMJLTW.js} +12 -3
  111. package/dist/{chunk-DGUVXXAU.js.map → chunk-IRXMJLTW.js.map} +1 -1
  112. package/dist/{chunk-O52TB5SL.js → chunk-IUSV4XJC.js} +2 -2
  113. package/dist/{chunk-5TF5STAV.js → chunk-JASFZQ76.js} +4 -4
  114. package/dist/{chunk-ML3U4KPR.js → chunk-K547KS3X.js} +4 -4
  115. package/dist/{chunk-UHGBNIOS.js → chunk-KVDUKH5E.js} +7 -2
  116. package/dist/chunk-KVDUKH5E.js.map +1 -0
  117. package/dist/{chunk-XTMYB2HY.js → chunk-LJQGQUNS.js} +2 -2
  118. package/dist/{chunk-WAS4HV46.js → chunk-LNH76ZJX.js} +87 -3
  119. package/dist/chunk-LNH76ZJX.js.map +1 -0
  120. package/dist/{chunk-J6QIAYNR.js → chunk-LVXBC6YB.js} +7 -2
  121. package/dist/{chunk-J6QIAYNR.js.map → chunk-LVXBC6YB.js.map} +1 -1
  122. package/dist/{chunk-IVKIODHO.js → chunk-MB6GLPRY.js} +4 -4
  123. package/dist/chunk-MKYRCCSN.js +145 -0
  124. package/dist/chunk-MKYRCCSN.js.map +1 -0
  125. package/dist/{chunk-6433HV72.js → chunk-MVIYRRVJ.js} +5 -5
  126. package/dist/{chunk-LTYH2L6E.js → chunk-NWHKHBL4.js} +44 -64
  127. package/dist/chunk-NWHKHBL4.js.map +1 -0
  128. package/dist/{chunk-BXLOS5AJ.js → chunk-OWHERGF2.js} +2 -2
  129. package/dist/{chunk-QQYHYW2N.js → chunk-PQODT53H.js} +3 -3
  130. package/dist/{chunk-PQHNZ63P.js → chunk-R5AWIILH.js} +37 -29
  131. package/dist/chunk-R5AWIILH.js.map +1 -0
  132. package/dist/{chunk-TOP3FSDW.js → chunk-RFFCBYBD.js} +11 -11
  133. package/dist/{chunk-MYI3RKI6.js → chunk-SYU5JOBQ.js} +2 -2
  134. package/dist/{chunk-JXS5PDQ7.js → chunk-UOBPK2OS.js} +25 -7
  135. package/dist/chunk-UOBPK2OS.js.map +1 -0
  136. package/dist/{chunk-BOSIHHOH.js → chunk-UUYQWKHO.js} +2 -2
  137. package/dist/{chunk-DQEMWVMT.js → chunk-UVYI6VIX.js} +1 -1
  138. package/dist/{chunk-KXWE62IH.js → chunk-V2YH7T6T.js} +2 -2
  139. package/dist/{chunk-M4AHBM72.js → chunk-VCBG52MM.js} +4 -4
  140. package/dist/{chunk-N7V3P4V5.js → chunk-VCEE4YNA.js} +2 -2
  141. package/dist/{chunk-62Y5AGCM.js → chunk-VENMDW4U.js} +10 -10
  142. package/dist/{chunk-6NAPOLRO.js → chunk-VY47VI2T.js} +6 -4
  143. package/dist/chunk-VY47VI2T.js.map +1 -0
  144. package/dist/{chunk-QTXNS3HB.js → chunk-WCWIV2JH.js} +2 -2
  145. package/dist/{chunk-6UKSOXAO.js → chunk-WQ6TRWAE.js} +3 -3
  146. package/dist/{chunk-CBY54QYW.js → chunk-X6HNXVXS.js} +4 -4
  147. package/dist/{chunk-SY5JUJ2X.js → chunk-XREXYQ5U.js} +39 -39
  148. package/dist/{chunk-JPWSYHLB.js → chunk-YGSDWO3U.js} +2 -2
  149. package/dist/{chunk-BPQ7L27U.js → chunk-YI25J2JD.js} +16 -16
  150. package/dist/chunk-YI25J2JD.js.map +1 -0
  151. package/dist/{chunk-GBVRVYF4.js → chunk-YINSSARY.js} +1 -1
  152. package/dist/{chunk-Q6OL23WM.js → chunk-Z4UPRZR6.js} +2 -2
  153. package/dist/{chunk-4F67JJPG.js → chunk-ZPN7W3OP.js} +2 -2
  154. package/dist/{cli-kcUqoV4E.d.ts → cli-BsaYHAH9.d.ts} +5 -5
  155. package/dist/cli.d.ts +14 -13
  156. package/dist/cli.js +55 -54
  157. package/dist/coding/pre-action-gate.d.ts +1 -1
  158. package/dist/compounding/engine.d.ts +2 -2
  159. package/dist/compounding/engine.js +9 -9
  160. package/dist/compounding/preference-consolidator.d.ts +1 -1
  161. package/dist/compression-optimizer.d.ts +1 -1
  162. package/dist/config.d.ts +1 -1
  163. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  164. package/dist/connectors/codex-materialize-runner.js +9 -9
  165. package/dist/connectors/codex-materialize.d.ts +1 -1
  166. package/dist/connectors/index.d.ts +1 -1
  167. package/dist/connectors/index.js +9 -9
  168. package/dist/consolidation-provenance-check.d.ts +2 -2
  169. package/dist/consolidation-undo.d.ts +2 -2
  170. package/dist/contradiction/index.d.ts +2 -2
  171. package/dist/contradiction/index.js +4 -4
  172. package/dist/converge-config.d.ts +1 -1
  173. package/dist/convergence-refresh.d.ts +2 -2
  174. package/dist/convergence-refresh.js +11 -11
  175. package/dist/conversation-index/backend.d.ts +1 -1
  176. package/dist/conversation-index/chunker.d.ts +1 -1
  177. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  178. package/dist/conversation-index/indexer.d.ts +1 -1
  179. package/dist/conversation-index/search.d.ts +1 -1
  180. package/dist/corpus-watermark.d.ts +1 -1
  181. package/dist/corpus-watermark.js +11 -11
  182. package/dist/day-summary.d.ts +1 -1
  183. package/dist/day-summary.js +1 -1
  184. package/dist/delinearize.d.ts +1 -1
  185. package/dist/dependency-propagation-config.d.ts +1 -1
  186. package/dist/{dependency-propagation-delivery-DiY5T63p.d.ts → dependency-propagation-delivery-Cph4PnBe.d.ts} +1 -1
  187. package/dist/direct-answer-wiring.d.ts +1 -1
  188. package/dist/direct-answer-wiring.js +2 -1
  189. package/dist/direct-answer.d.ts +1 -1
  190. package/dist/embedding-fallback.d.ts +1 -1
  191. package/dist/enrichment/index.d.ts +1 -1
  192. package/dist/entity-origin-fields.d.ts +1 -1
  193. package/dist/entity-retrieval-i18n.d.ts +34 -0
  194. package/dist/entity-retrieval-i18n.js +13 -0
  195. package/dist/entity-retrieval-i18n.js.map +1 -0
  196. package/dist/entity-retrieval.d.ts +2 -2
  197. package/dist/entity-retrieval.js +10 -9
  198. package/dist/entity-schema.d.ts +1 -1
  199. package/dist/episodic-context.d.ts +1 -1
  200. package/dist/event-order-recall.js +2 -2
  201. package/dist/explicit-capture.d.ts +9 -9
  202. package/dist/external-wiki-access.d.ts +12 -11
  203. package/dist/external-wiki-access.js +24 -24
  204. package/dist/external-wiki-collection-registration.d.ts +1 -1
  205. package/dist/external-wiki-collection.d.ts +1 -1
  206. package/dist/external-wiki-mcp-tools.d.ts +12 -11
  207. package/dist/extraction-error-classification.d.ts +1 -1
  208. package/dist/extraction-faithfulness.d.ts +1 -1
  209. package/dist/extraction-judge-telemetry.d.ts +1 -1
  210. package/dist/extraction-judge-training.d.ts +1 -1
  211. package/dist/extraction-judge.d.ts +1 -1
  212. package/dist/extraction-liveness.d.ts +1 -1
  213. package/dist/extraction-normalization.d.ts +1 -1
  214. package/dist/extraction-prompt.d.ts +1 -1
  215. package/dist/extraction-source-grounding-helpers.d.ts +10 -1
  216. package/dist/extraction-source-grounding-helpers.js +3 -1
  217. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  218. package/dist/extraction-source-grounding-rules.js +2 -2
  219. package/dist/extraction-source-grounding.d.ts +1 -1
  220. package/dist/extraction-source-grounding.js +3 -3
  221. package/dist/extraction.d.ts +1 -1
  222. package/dist/extraction.js +18 -18
  223. package/dist/fallback-llm.d.ts +1 -1
  224. package/dist/graph-dashboard-diff.d.ts +1 -1
  225. package/dist/graph-dashboard-key.d.ts +1 -1
  226. package/dist/graph-dashboard-parser.d.ts +1 -1
  227. package/dist/graph-edge-reinforcement.d.ts +1 -1
  228. package/dist/graph-path-reconstruction.d.ts +1 -1
  229. package/dist/graph-path-scoring.d.ts +1 -1
  230. package/dist/graph-snapshot.d.ts +1 -1
  231. package/dist/graph.d.ts +1 -1
  232. package/dist/harmonic-retrieval.js +1 -1
  233. package/dist/importance.d.ts +1 -1
  234. package/dist/importance.js +2 -1
  235. package/dist/importers/index.d.ts +1 -1
  236. package/dist/in-flight-reads.d.ts +1 -1
  237. package/dist/index.d.ts +697 -697
  238. package/dist/index.js +105 -103
  239. package/dist/intent.d.ts +1 -1
  240. package/dist/lcm/engine.d.ts +1 -1
  241. package/dist/lcm/engine.js +2 -2
  242. package/dist/lcm/index.d.ts +1 -1
  243. package/dist/lcm/index.js +4 -4
  244. package/dist/lcm/tools.d.ts +1 -1
  245. package/dist/lifecycle.d.ts +1 -1
  246. package/dist/live-connectors-runner.d.ts +1 -1
  247. package/dist/local-llm.d.ts +1 -1
  248. package/dist/local-llm.js +2 -2
  249. package/dist/local-model-endpoint.d.ts +1 -1
  250. package/dist/maintenance/memory-governance.d.ts +1 -1
  251. package/dist/maintenance/memory-governance.js +9 -9
  252. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  253. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +9 -9
  254. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  255. package/dist/maintenance/rebuild-memory-projection.js +10 -10
  256. package/dist/{maintenance-CaqA4z7V.d.ts → maintenance-BNq31xpo.d.ts} +3 -3
  257. package/dist/mcp-memory-inspector-app.d.ts +11 -11
  258. package/dist/memory-action-policy.d.ts +1 -1
  259. package/dist/memory-cache.d.ts +1 -1
  260. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  261. package/dist/memory-projection-store.d.ts +1 -1
  262. package/dist/memory-provenance.d.ts +1 -1
  263. package/dist/memory-snapshot.d.ts +1 -1
  264. package/dist/memory-worth-outcomes.d.ts +2 -2
  265. package/dist/models-json.d.ts +1 -1
  266. package/dist/namespaces/migrate.d.ts +3 -3
  267. package/dist/namespaces/migrate.js +10 -10
  268. package/dist/namespaces/principal.d.ts +1 -1
  269. package/dist/namespaces/search.d.ts +1 -1
  270. package/dist/namespaces/search.js +7 -7
  271. package/dist/namespaces/storage.d.ts +3 -3
  272. package/dist/namespaces/storage.js +9 -9
  273. package/dist/native-knowledge.d.ts +1 -1
  274. package/dist/offline-sync-impression-drain.d.ts +1 -1
  275. package/dist/operator-doctor-corpus.d.ts +1 -1
  276. package/dist/operator-doctor-corpus.js +12 -12
  277. package/dist/operator-doctor-replica.d.ts +1 -1
  278. package/dist/operator-toolkit.d.ts +3 -3
  279. package/dist/operator-toolkit.js +17 -17
  280. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  281. package/dist/orchestration/maintenance.d.ts +4 -4
  282. package/dist/orchestration/maintenance.js +15 -15
  283. package/dist/{orchestrator-Bay_AofR.d.ts → orchestrator-CBuUOP2J.d.ts} +8 -8
  284. package/dist/orchestrator.d.ts +9 -9
  285. package/dist/orchestrator.js +84 -82
  286. package/dist/patterns-cli.d.ts +1 -1
  287. package/dist/{pipeline-X606GdRJ.d.ts → pipeline-CW_Q4WvX.d.ts} +1 -1
  288. package/dist/policy-runtime.d.ts +1 -1
  289. package/dist/proactive-contention.d.ts +1 -1
  290. package/dist/provenance.d.ts +1 -1
  291. package/dist/{public-http-DscQtnCx.d.ts → public-http-jMlmLny4.d.ts} +1 -1
  292. package/dist/qmd-preflight.d.ts +2 -2
  293. package/dist/{qmd-DCKeR-GX.d.ts → qmd-q-cAzYuC.d.ts} +1 -1
  294. package/dist/qmd-recall-cache.d.ts +1 -1
  295. package/dist/qmd.d.ts +2 -2
  296. package/dist/recall-concurrency-config.d.ts +1 -1
  297. package/dist/recall-disclosure-escalation.d.ts +1 -1
  298. package/dist/recall-explain-renderer.d.ts +1 -1
  299. package/dist/recall-memory-map.d.ts +1 -1
  300. package/dist/recall-planner-llm.d.ts +1 -1
  301. package/dist/recall-state.d.ts +1 -1
  302. package/dist/recall-tag-filter.d.ts +1 -1
  303. package/dist/recall-timings.d.ts +1 -1
  304. package/dist/recall-xray-cli.d.ts +1 -1
  305. package/dist/recall-xray-renderer.d.ts +1 -1
  306. package/dist/recall-xray.d.ts +1 -1
  307. package/dist/reconcile/cursor.d.ts +1 -1
  308. package/dist/reconcile/manifest.d.ts +1 -1
  309. package/dist/reconcile/plan.d.ts +1 -1
  310. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  311. package/dist/replay/normalizers/claude.d.ts +1 -1
  312. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  313. package/dist/replay/normalizers/shared.d.ts +1 -1
  314. package/dist/replay/runner.d.ts +1 -1
  315. package/dist/replay/types.d.ts +1 -1
  316. package/dist/replica-divergence.d.ts +1 -1
  317. package/dist/replica-peers-config.d.ts +1 -1
  318. package/dist/resolve-auth-token.d.ts +1 -1
  319. package/dist/retrieval-agents.d.ts +2 -2
  320. package/dist/retrieval-tiers.d.ts +1 -1
  321. package/dist/routing/engine.d.ts +1 -1
  322. package/dist/routing/store.d.ts +1 -1
  323. package/dist/salvage-envelope.d.ts +1 -1
  324. package/dist/schemas.d.ts +108 -108
  325. package/dist/{scope-profiles-_Y_RHCeE.d.ts → scope-profiles-CIr4mXgp.d.ts} +1 -1
  326. package/dist/search/embed-helper.d.ts +1 -1
  327. package/dist/search/factory.d.ts +1 -1
  328. package/dist/search/factory.js +6 -6
  329. package/dist/search/index.d.ts +1 -1
  330. package/dist/search/index.js +11 -11
  331. package/dist/search/lancedb-backend.d.ts +1 -1
  332. package/dist/search/lancedb-backend.js +2 -2
  333. package/dist/search/meilisearch-backend.d.ts +1 -1
  334. package/dist/search/meilisearch-backend.js +2 -2
  335. package/dist/search/noop-backend.d.ts +1 -1
  336. package/dist/search/orama-backend.d.ts +1 -1
  337. package/dist/search/orama-backend.js +2 -2
  338. package/dist/search/port.d.ts +1 -1
  339. package/dist/search/remote-backend.d.ts +1 -1
  340. package/dist/{semantic-consolidation-DT2VSrU0.d.ts → semantic-consolidation-BZ6J46j-.d.ts} +1 -1
  341. package/dist/semantic-consolidation.d.ts +2 -2
  342. package/dist/semantic-consolidation.js +10 -10
  343. package/dist/semantic-rule-promotion.js +9 -9
  344. package/dist/semantic-rule-verifier.d.ts +1 -1
  345. package/dist/semantic-rule-verifier.js +9 -9
  346. package/dist/{service-BMo-gwDE.d.ts → service-CCl4iyyY.d.ts} +2 -2
  347. package/dist/session-observer-bands.d.ts +1 -1
  348. package/dist/session-observer-state.d.ts +1 -1
  349. package/dist/shared-context/manager.d.ts +9 -9
  350. package/dist/signal.d.ts +1 -1
  351. package/dist/source-agent-qualifier.d.ts +1 -1
  352. package/dist/source-agent-qualifier.js +13 -13
  353. package/dist/{storage-CGzJGUUu.d.ts → storage-BPXmJKIt.d.ts} +1 -1
  354. package/dist/storage.d.ts +2 -2
  355. package/dist/storage.js +8 -8
  356. package/dist/summarizer.d.ts +1 -1
  357. package/dist/summarizer.js +3 -3
  358. package/dist/summary-snapshot.d.ts +1 -1
  359. package/dist/support-passport/index.d.ts +15 -14
  360. package/dist/support-passport/index.js +26 -26
  361. package/dist/temporal-supersession.d.ts +2 -2
  362. package/dist/temporal-timeline-recall.d.ts +1 -1
  363. package/dist/temporal-validity.d.ts +1 -1
  364. package/dist/threading.d.ts +1 -1
  365. package/dist/tier-migration.d.ts +2 -2
  366. package/dist/tier-routing.d.ts +1 -1
  367. package/dist/topics.d.ts +1 -1
  368. package/dist/topics.js +2 -1
  369. package/dist/transcript.d.ts +1 -1
  370. package/dist/transfer/backup.js +2 -2
  371. package/dist/transfer/capsule-export.js +2 -2
  372. package/dist/transfer/capsule-import.js +2 -2
  373. package/dist/transfer/types.d.ts +66 -66
  374. package/dist/trust-score-stage.d.ts +1 -1
  375. package/dist/trust-score.d.ts +1 -1
  376. package/dist/{types-CBEAYU76.d.ts → types-CltSWcND.d.ts} +1 -1
  377. package/dist/types.d.ts +1 -1
  378. package/dist/utility-runtime.d.ts +1 -1
  379. package/dist/verified-recall.js +9 -9
  380. package/dist/write-envelope.d.ts +1 -1
  381. package/package.json +2 -2
  382. package/src/access-http.ts +47 -60
  383. package/src/access-mcp.test.ts +6 -10
  384. package/src/access-mcp.ts +21 -22
  385. package/src/access-operations-batch.ts +66 -18
  386. package/src/access-schema.ts +12 -1
  387. package/src/access-service.ts +18 -91
  388. package/src/briefing.test.ts +50 -0
  389. package/src/briefing.ts +3 -2
  390. package/src/chat/chat-engine.test.ts +15 -0
  391. package/src/chat/chat-engine.ts +13 -2
  392. package/src/day-summary.test.ts +63 -0
  393. package/src/day-summary.ts +13 -1
  394. package/src/entity-retrieval-i18n.test.ts +115 -0
  395. package/src/entity-retrieval-i18n.ts +161 -0
  396. package/src/entity-retrieval.ts +34 -34
  397. package/src/extraction-source-grounding-helpers.ts +112 -2
  398. package/src/extraction-source-grounding-rules.ts +3 -1
  399. package/src/extraction-source-grounding.test.ts +52 -0
  400. package/src/importance.ts +32 -22
  401. package/src/recall-disclosure.test.ts +1 -1
  402. package/src/taxonomy/resolver.ts +7 -7
  403. package/src/topics.ts +5 -2
  404. package/src/utils/script-aware-text.ts +52 -0
  405. package/src/write-classifiers-cjk.test.ts +115 -0
  406. package/dist/chunk-4POAMKV6.js.map +0 -1
  407. package/dist/chunk-6NAPOLRO.js.map +0 -1
  408. package/dist/chunk-BPQ7L27U.js.map +0 -1
  409. package/dist/chunk-EDZNW3HE.js.map +0 -1
  410. package/dist/chunk-JXS5PDQ7.js.map +0 -1
  411. package/dist/chunk-LTYH2L6E.js.map +0 -1
  412. package/dist/chunk-PQHNZ63P.js.map +0 -1
  413. package/dist/chunk-UHGBNIOS.js.map +0 -1
  414. package/dist/chunk-ULZFZL7K.js.map +0 -1
  415. package/dist/chunk-WAS4HV46.js.map +0 -1
  416. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-GWVG7LGC.js.map} +0 -0
  417. /package/dist/{chunk-OQIRBGUU.js.map → chunk-2Q4UAPLD.js.map} +0 -0
  418. /package/dist/{chunk-PHKU6BZ2.js.map → chunk-36XS2ASP.js.map} +0 -0
  419. /package/dist/{chunk-BRHKW7GY.js.map → chunk-4IIDTPSK.js.map} +0 -0
  420. /package/dist/{chunk-Q5XKKDFQ.js.map → chunk-5SZ6CLGJ.js.map} +0 -0
  421. /package/dist/{chunk-VDX2J7OX.js.map → chunk-5W7CTZ2E.js.map} +0 -0
  422. /package/dist/{chunk-EUYWQ7TS.js.map → chunk-652S5A5D.js.map} +0 -0
  423. /package/dist/{chunk-3TDAA7VA.js.map → chunk-6NMZXEJ7.js.map} +0 -0
  424. /package/dist/{chunk-ZOAAY2OE.js.map → chunk-77E7LLMV.js.map} +0 -0
  425. /package/dist/{chunk-MIUL6AUZ.js.map → chunk-7ML7STOD.js.map} +0 -0
  426. /package/dist/{chunk-5SCFDQEJ.js.map → chunk-BPLPGOUJ.js.map} +0 -0
  427. /package/dist/{chunk-RWMSMTQP.js.map → chunk-BS75WJBH.js.map} +0 -0
  428. /package/dist/{chunk-XE2QCCT2.js.map → chunk-BTBAHTQ5.js.map} +0 -0
  429. /package/dist/{chunk-42TIIO2M.js.map → chunk-BTUIHRRR.js.map} +0 -0
  430. /package/dist/{chunk-3IMYRX3W.js.map → chunk-BYFKJXIR.js.map} +0 -0
  431. /package/dist/{chunk-SNEUAZ6B.js.map → chunk-CK3DZ6OE.js.map} +0 -0
  432. /package/dist/{chunk-VYMICVRA.js.map → chunk-DIJCMHUE.js.map} +0 -0
  433. /package/dist/{chunk-AJRJDXYR.js.map → chunk-E7MYSCSL.js.map} +0 -0
  434. /package/dist/{chunk-3T6HIIKA.js.map → chunk-EHC3FIJ4.js.map} +0 -0
  435. /package/dist/{chunk-KFB4YNXM.js.map → chunk-G5F4MXXC.js.map} +0 -0
  436. /package/dist/{chunk-VANZKHTN.js.map → chunk-G5OB4XZX.js.map} +0 -0
  437. /package/dist/{chunk-645WOU5I.js.map → chunk-H7BZBSP6.js.map} +0 -0
  438. /package/dist/{chunk-SZ4HFZKB.js.map → chunk-HMKPFW7R.js.map} +0 -0
  439. /package/dist/{chunk-WBPD6SBZ.js.map → chunk-HP6B732E.js.map} +0 -0
  440. /package/dist/{chunk-VFZQXYN5.js.map → chunk-HZXO2CJ6.js.map} +0 -0
  441. /package/dist/{chunk-O52TB5SL.js.map → chunk-IUSV4XJC.js.map} +0 -0
  442. /package/dist/{chunk-5TF5STAV.js.map → chunk-JASFZQ76.js.map} +0 -0
  443. /package/dist/{chunk-ML3U4KPR.js.map → chunk-K547KS3X.js.map} +0 -0
  444. /package/dist/{chunk-XTMYB2HY.js.map → chunk-LJQGQUNS.js.map} +0 -0
  445. /package/dist/{chunk-IVKIODHO.js.map → chunk-MB6GLPRY.js.map} +0 -0
  446. /package/dist/{chunk-6433HV72.js.map → chunk-MVIYRRVJ.js.map} +0 -0
  447. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-OWHERGF2.js.map} +0 -0
  448. /package/dist/{chunk-QQYHYW2N.js.map → chunk-PQODT53H.js.map} +0 -0
  449. /package/dist/{chunk-TOP3FSDW.js.map → chunk-RFFCBYBD.js.map} +0 -0
  450. /package/dist/{chunk-MYI3RKI6.js.map → chunk-SYU5JOBQ.js.map} +0 -0
  451. /package/dist/{chunk-BOSIHHOH.js.map → chunk-UUYQWKHO.js.map} +0 -0
  452. /package/dist/{chunk-DQEMWVMT.js.map → chunk-UVYI6VIX.js.map} +0 -0
  453. /package/dist/{chunk-KXWE62IH.js.map → chunk-V2YH7T6T.js.map} +0 -0
  454. /package/dist/{chunk-M4AHBM72.js.map → chunk-VCBG52MM.js.map} +0 -0
  455. /package/dist/{chunk-N7V3P4V5.js.map → chunk-VCEE4YNA.js.map} +0 -0
  456. /package/dist/{chunk-62Y5AGCM.js.map → chunk-VENMDW4U.js.map} +0 -0
  457. /package/dist/{chunk-QTXNS3HB.js.map → chunk-WCWIV2JH.js.map} +0 -0
  458. /package/dist/{chunk-6UKSOXAO.js.map → chunk-WQ6TRWAE.js.map} +0 -0
  459. /package/dist/{chunk-CBY54QYW.js.map → chunk-X6HNXVXS.js.map} +0 -0
  460. /package/dist/{chunk-SY5JUJ2X.js.map → chunk-XREXYQ5U.js.map} +0 -0
  461. /package/dist/{chunk-JPWSYHLB.js.map → chunk-YGSDWO3U.js.map} +0 -0
  462. /package/dist/{chunk-GBVRVYF4.js.map → chunk-YINSSARY.js.map} +0 -0
  463. /package/dist/{chunk-Q6OL23WM.js.map → chunk-Z4UPRZR6.js.map} +0 -0
  464. /package/dist/{chunk-4F67JJPG.js.map → chunk-ZPN7W3OP.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import { N as TrustWeights } from './types-CBEAYU76.js';
1
+ import { O as TrustWeights } from './types-CltSWcND.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
@@ -4739,4 +4739,4 @@ interface HourlySummary {
4739
4739
  generatedAt: string;
4740
4740
  }
4741
4741
 
4742
- export { type ConvergeConflictPolicy as $, type AgentPersonaModelConfig as A, type BriefingSections as B, type CodingContext as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type MemoryLifecycleEvent as J, type ProvenanceSource as K, type LiveConnectorsConfig as L, type MemoryFile as M, type TrustWeights as N, type ConversationThread as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallPlanMode as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type LifecycleState as U, type VerificationState as V, type PolicyClass as W, type ReplicaPeersConfig as X, type ReplicaPeerConfig as Y, type ExtractionFailureClass as Z, type ImportanceLevel as _, type DreamsRunResult as a, type FusedWearableConversation as a$, type ActiveRecallChatType as a0, type ActiveRecallQueryMode as a1, type ActiveRecallPromptStyle as a2, type ActiveRecallThinking as a3, type ActiveRecallModelFallbackPolicy as a4, type ExtractionResult as a5, type BehaviorSignalEvent as a6, type BufferSurpriseEvent as a7, type ImportTurn as a8, type BulkImportOptions as a9, summarizeExtractionLiveness as aA, type RetrievalTier as aB, type SignalScanResult as aC, type TopicScore as aD, type ConsolidationResult as aE, type DaySummaryResult as aF, type QmdSearchExplain as aG, type ActivitySnapshot as aH, type ActivityConfig as aI, type ActivitySourceConfig as aJ, type ActivitySourceClient as aK, type MeetingBuildInput as aL, type MeetingsConfig as aM, type FusedMeeting as aN, type MeetingRecord as aO, type MeetingsDetectionInput as aP, type FusionConversationInput as aQ, type DetectedMeeting as aR, type WearableConversation as aS, type WearableSourceSettings as aT, type WearableNativeMemory as aU, type WearableMemoryMode as aV, type WearableSourceConnector as aW, type WearablesConfig as aX, type WearableSyncSummary as aY, type WearableSourceStatus as aZ, type WearableDayTranscript as a_, type BulkImportSource as aa, type BulkImportResult as ab, type CompressionGuidelineOptimizerEventCounts as ac, type CompressionGuidelineOptimizerActionSummary as ad, type CompressionGuidelineOptimizerRuleUpdate as ae, type MemoryActionType as af, type MemoryActionEvent as ag, type CompressionGuidelineOptimizerState as ah, type ConvergeConfig as ai, type EntityMention as aj, type DependencyPropagationConfig as ak, type EntityStructuredSection as al, type EntitySchemaDefinition as am, type EntitySchemaSectionDefinition as an, type ExtractedFact as ao, type ProvenanceConfig as ap, type ImportanceScore as aq, type MemoryIntent as ar, type MemoryActionEligibilityContext as as, type MemoryActionPolicyResult as at, type MemoryLifecycleEventType as au, type MemoryLifecycleStateSummary as av, type ModelProviderConfig as aw, type NativeKnowledgeConfig as ax, type ExtractionBufferSource as ay, type MetaState as az, type RecallTierExplain as b, isRecallDisclosure as b$, type WearableCorrectionRule as b0, type FusedDayMeta as b1, type FusedDayFile as b2, type MeetingDetectionSource as b3, type EntityTimelineEntry as b4, type MemoryLink as b5, type BufferState as b6, type FileHygieneConfig as b7, type EntityRelationship as b8, type EntityActivityEntry as b9, type BriefingConfig as bA, type BriefingOpenCommitment as bB, type BriefingWindow as bC, type BulkImportError as bD, type BulkImportSourceAdapter as bE, type CodexCompatConfig as bF, DEFAULT_RECALL_DISCLOSURE as bG, type DisagreementKind as bH, type FusedContribution as bI, type FusedConversationProvenance as bJ, type FusedSegmentProvenance as bK, type FusionSegmentInput as bL, type ImportSourceRole as bM, type ImportTurnValidationIssue as bN, type MeetingScreenContextEvent as bO, type MeetingSummaryMode as bP, type MemoryActionEligibilitySource as bQ, type MemoryObservation as bR, type MemoryScope as bS, RECALL_DISCLOSURE_LEVELS as bT, type SegmentPickReason as bU, type WearableAuthCheck as bV, type WearableFetchOptions as bW, type WearableFetchPage as bX, type WearableNativeMemoryPage as bY, type WearableTranscriptSegment as bZ, isImportRole as b_, type AccessTrackingEntry as ba, type MemorySummary as bb, type DreamsStatusResult as bc, type RecallSectionConfig as bd, type BootstrapOptions as be, type BootstrapResult as bf, type ConsolidationObservation as bg, type CodingModeConfig as bh, type FusedSpeaker as bi, type FusedSegment as bj, type FusedDisagreement as bk, type FusionOptions as bl, type FusionDayResult as bm, type CodingKnowledgeConfig as bn, type WearableCleanupSettings as bo, type WearableFusionConfig as bp, type OffTheRecordMarkerSettings as bq, type WearableDayTranscriptMeta as br, type ActivityDayMeta as bs, type ActivityDayDigest as bt, type ActivitySourceCheck as bu, type ActivitySnapshotPage as bv, type MeetingsDetectionConfig as bw, type MeetingAudioWindow as bx, type MeetingAppSpan as by, type ActivityExtractionMode as bz, type BriefingFollowup as c, type GitHubLiveConnectorConfig as c$, parseIsoTimestamp as c0, validateImportTurn as c1, type SupportPassportConfig as c2, type ExtractionLivenessConfig as c3, ExtractionLivenessWarnThrottle as c4, type ExtractionRootStats as c5, type ExtractionWatermarkOrStorage as c6, type ExtractionWatermarkRead as c7, coerceExtractionWatermark as c8, computeExtractionLivenessStatus as c9, type BufferEntryState as cA, type ChatConfig as cB, type CodexCliReasoningEffort as cC, type CodexCompactionFlushMode as cD, type CodexConnectorConfig as cE, type CodingGraphLspConfig as cF, type CompressionGuidelineActivationState as cG, type CompressionGuidelineOptimizerSourceWindow as cH, type ConfidenceTier as cI, type ConsolidationAction as cJ, type ConsolidationItem as cK, type CronConversationRecallMode as cL, type CronRecallMode as cM, type DreamingConfig as cN, type DreamingNarrativePromptStyle as cO, type DreamsDeepSleepConfig as cP, type DreamsLightSleepConfig as cQ, type DreamsPhaseStatus as cR, type DreamsPhasesConfig as cS, type DreamsRemConfig as cT, type EngramTraceEvent as cU, type ExtractedProcedureStep as cV, type ExtractedQuestion as cW, type ExtractedReasoningTrace as cX, type ExtractedReasoningTraceStep as cY, type ExtractedRelationship as cZ, type ExtractionPassSource as c_, evaluateExtractionLiveness as ca, formatAgeMs as cb, gatherExtractionLivenessStatus as cc, parseExtractionLivenessConfig as cd, renderExtractionLivenessStats as ce, resolveExtractionLivenessConfig as cf, parseReplicaPeersConfig as cg, resolveReplicaPeersConfig as ch, type AmbientCaptureProvenance as ci, type BufferTurnOwner as cj, ProbeTimeoutError as ck, bufferTurnArrayIsSuffixOfSnapshot as cl, bufferTurnArraysEqual as cm, bufferTurnsEqual as cn, copyBufferTurn as co, describeError as cp, liveTurnsFromExtractionSnapshot as cq, matchingQueuedExtractionPrefixLength as cr, probeWithTimeout as cs, type AgentAccessHttpConfig as ct, type AgentDefaultsConfig as cu, type AgentPersona as cv, type BehaviorLoopAdjustment as cw, type BehaviorSignalDirection as cx, type BehaviorSignalType as cy, type BriefingCalendarSourceError as cz, type BriefingFocus as d, type GmailLiveConnectorConfig as d0, type GoogleDriveLiveConnectorConfig as d1, type HeartbeatConfig as d2, type HeartbeatDetectionMode as d3, type LlmTraceCallback as d4, type LlmTraceEvent as d5, type MemoryActionOutcome as d6, type MemoryActionPolicyDecision as d7, type MemoryActionStatus as d8, type MemoryLinkType as d9, type SlotMismatchMode as dA, type TriggerMode as dB, confidenceTier as dC, type MemoryOsPresetName as da, type ModelApi as db, type ModelDefinitionConfig as dc, type ModelProviderAuthMode as dd, type NamespacePolicy as de, type NativeKnowledgeFolderRuleConfig as df, type NativeKnowledgeObsidianVaultConfig as dg, type NativeKnowledgeOpenClawWorkspaceConfig as dh, type NotionLiveConnectorConfig as di, type PrincipalFromSessionKeyMode as dj, type PrincipalRule as dk, type ProceduralConfig as dl, type QuestionEntry as dm, type ReasoningEffort as dn, type RecallPipelineConfig as dp, type RecallTraceEvent as dq, type RelevanceFeedback as dr, SPECULATIVE_TTL_DAYS as ds, type ScopeProfileAutoPromoteConfig as dt, type ScopeProfileTeamProjectConfig as du, type ScopeTeamConfig as dv, type ScoredEntity as dw, type SemanticChunkingConfigShape as dx, type SignalLevel as dy, type SlotBehaviorConfig as dz, type CalendarSource as e, type CalendarEvent as f, type BriefingActiveThread as g, type BriefingResult as h, type BriefingRecentEntity as i, type BufferTurn as j, type ExtractionBufferSnapshot as k, type MemoryFrontmatter as l, type Checkpoint as m, type RecallDisclosure as n, type SourceConnectorProvenance as o, type ScopeProfileConfig as p, type ScopeProfileLayerId as q, type ScopeProfilePromotionTarget as r, type BehaviorLoopPolicyState as s, type ExtractionLivenessStatus as t, type SecretRef as u, type AgentAccessAuthToken as v, type MemoryCategory as w, type CaptureMode as x, type MemoryStatus as y, type MemoryProjectionCurrentState as z };
4742
+ export { type ImportanceLevel as $, type AgentPersonaModelConfig as A, type BriefingSections as B, type CodingContext as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type MemoryProjectionCurrentState as J, type MemoryLifecycleEvent as K, type LiveConnectorsConfig as L, type MemoryFile as M, type ProvenanceSource as N, type TrustWeights as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallPlanMode as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type ConversationThread as U, type LifecycleState as V, type VerificationState as W, type PolicyClass as X, type ReplicaPeersConfig as Y, type ReplicaPeerConfig as Z, type ExtractionFailureClass as _, type DreamsRunResult as a, type WearableDayTranscript as a$, type ConvergeConflictPolicy as a0, type ActiveRecallChatType as a1, type ActiveRecallQueryMode as a2, type ActiveRecallPromptStyle as a3, type ActiveRecallThinking as a4, type ActiveRecallModelFallbackPolicy as a5, type ExtractionResult as a6, type BehaviorSignalEvent as a7, type BufferSurpriseEvent as a8, type ImportTurn as a9, type MetaState as aA, summarizeExtractionLiveness as aB, type RetrievalTier as aC, type SignalScanResult as aD, type TopicScore as aE, type ConsolidationResult as aF, type DaySummaryResult as aG, type QmdSearchExplain as aH, type ActivitySnapshot as aI, type ActivityConfig as aJ, type ActivitySourceConfig as aK, type ActivitySourceClient as aL, type MeetingBuildInput as aM, type MeetingsConfig as aN, type FusedMeeting as aO, type MeetingRecord as aP, type MeetingsDetectionInput as aQ, type FusionConversationInput as aR, type DetectedMeeting as aS, type WearableConversation as aT, type WearableSourceSettings as aU, type WearableNativeMemory as aV, type WearableMemoryMode as aW, type WearableSourceConnector as aX, type WearablesConfig as aY, type WearableSyncSummary as aZ, type WearableSourceStatus as a_, type BulkImportOptions as aa, type BulkImportSource as ab, type BulkImportResult as ac, type CompressionGuidelineOptimizerEventCounts as ad, type CompressionGuidelineOptimizerActionSummary as ae, type CompressionGuidelineOptimizerRuleUpdate as af, type MemoryActionType as ag, type MemoryActionEvent as ah, type CompressionGuidelineOptimizerState as ai, type ConvergeConfig as aj, type EntityMention as ak, type DependencyPropagationConfig as al, type EntityStructuredSection as am, type EntitySchemaDefinition as an, type EntitySchemaSectionDefinition as ao, type ExtractedFact as ap, type ProvenanceConfig as aq, type ImportanceScore as ar, type MemoryIntent as as, type MemoryActionEligibilityContext as at, type MemoryActionPolicyResult as au, type MemoryLifecycleEventType as av, type MemoryLifecycleStateSummary as aw, type ModelProviderConfig as ax, type NativeKnowledgeConfig as ay, type ExtractionBufferSource as az, type RecallTierExplain as b, isRecallDisclosure as b$, type FusedWearableConversation as b0, type WearableCorrectionRule as b1, type FusedDayMeta as b2, type FusedDayFile as b3, type MeetingDetectionSource as b4, type EntityTimelineEntry as b5, type MemoryLink as b6, type BufferState as b7, type FileHygieneConfig as b8, type EntityRelationship as b9, type ActivityExtractionMode as bA, type BriefingConfig as bB, type BriefingWindow as bC, type BulkImportError as bD, type BulkImportSourceAdapter as bE, type CodexCompatConfig as bF, DEFAULT_RECALL_DISCLOSURE as bG, type DisagreementKind as bH, type FusedContribution as bI, type FusedConversationProvenance as bJ, type FusedSegmentProvenance as bK, type FusionSegmentInput as bL, type ImportSourceRole as bM, type ImportTurnValidationIssue as bN, type MeetingScreenContextEvent as bO, type MeetingSummaryMode as bP, type MemoryActionEligibilitySource as bQ, type MemoryObservation as bR, type MemoryScope as bS, RECALL_DISCLOSURE_LEVELS as bT, type SegmentPickReason as bU, type WearableAuthCheck as bV, type WearableFetchOptions as bW, type WearableFetchPage as bX, type WearableNativeMemoryPage as bY, type WearableTranscriptSegment as bZ, isImportRole as b_, type EntityActivityEntry as ba, type AccessTrackingEntry as bb, type MemorySummary as bc, type DreamsStatusResult as bd, type RecallSectionConfig as be, type BootstrapOptions as bf, type BootstrapResult as bg, type ConsolidationObservation as bh, type CodingModeConfig as bi, type FusedSpeaker as bj, type FusedSegment as bk, type FusedDisagreement as bl, type FusionOptions as bm, type FusionDayResult as bn, type CodingKnowledgeConfig as bo, type WearableCleanupSettings as bp, type WearableFusionConfig as bq, type OffTheRecordMarkerSettings as br, type WearableDayTranscriptMeta as bs, type ActivityDayMeta as bt, type ActivityDayDigest as bu, type ActivitySourceCheck as bv, type ActivitySnapshotPage as bw, type MeetingsDetectionConfig as bx, type MeetingAudioWindow as by, type MeetingAppSpan as bz, type BriefingFollowup as c, type GitHubLiveConnectorConfig as c$, parseIsoTimestamp as c0, validateImportTurn as c1, type SupportPassportConfig as c2, type ExtractionLivenessConfig as c3, ExtractionLivenessWarnThrottle as c4, type ExtractionRootStats as c5, type ExtractionWatermarkOrStorage as c6, type ExtractionWatermarkRead as c7, coerceExtractionWatermark as c8, computeExtractionLivenessStatus as c9, type BufferEntryState as cA, type ChatConfig as cB, type CodexCliReasoningEffort as cC, type CodexCompactionFlushMode as cD, type CodexConnectorConfig as cE, type CodingGraphLspConfig as cF, type CompressionGuidelineActivationState as cG, type CompressionGuidelineOptimizerSourceWindow as cH, type ConfidenceTier as cI, type ConsolidationAction as cJ, type ConsolidationItem as cK, type CronConversationRecallMode as cL, type CronRecallMode as cM, type DreamingConfig as cN, type DreamingNarrativePromptStyle as cO, type DreamsDeepSleepConfig as cP, type DreamsLightSleepConfig as cQ, type DreamsPhaseStatus as cR, type DreamsPhasesConfig as cS, type DreamsRemConfig as cT, type EngramTraceEvent as cU, type ExtractedProcedureStep as cV, type ExtractedQuestion as cW, type ExtractedReasoningTrace as cX, type ExtractedReasoningTraceStep as cY, type ExtractedRelationship as cZ, type ExtractionPassSource as c_, evaluateExtractionLiveness as ca, formatAgeMs as cb, gatherExtractionLivenessStatus as cc, parseExtractionLivenessConfig as cd, renderExtractionLivenessStats as ce, resolveExtractionLivenessConfig as cf, parseReplicaPeersConfig as cg, resolveReplicaPeersConfig as ch, type AmbientCaptureProvenance as ci, type BufferTurnOwner as cj, ProbeTimeoutError as ck, bufferTurnArrayIsSuffixOfSnapshot as cl, bufferTurnArraysEqual as cm, bufferTurnsEqual as cn, copyBufferTurn as co, describeError as cp, liveTurnsFromExtractionSnapshot as cq, matchingQueuedExtractionPrefixLength as cr, probeWithTimeout as cs, type AgentAccessHttpConfig as ct, type AgentDefaultsConfig as cu, type AgentPersona as cv, type BehaviorLoopAdjustment as cw, type BehaviorSignalDirection as cx, type BehaviorSignalType as cy, type BriefingCalendarSourceError as cz, type BriefingFocus as d, type GmailLiveConnectorConfig as d0, type GoogleDriveLiveConnectorConfig as d1, type HeartbeatConfig as d2, type HeartbeatDetectionMode as d3, type LlmTraceCallback as d4, type LlmTraceEvent as d5, type MemoryActionOutcome as d6, type MemoryActionPolicyDecision as d7, type MemoryActionStatus as d8, type MemoryLinkType as d9, type SlotMismatchMode as dA, type TriggerMode as dB, confidenceTier as dC, type MemoryOsPresetName as da, type ModelApi as db, type ModelDefinitionConfig as dc, type ModelProviderAuthMode as dd, type NamespacePolicy as de, type NativeKnowledgeFolderRuleConfig as df, type NativeKnowledgeObsidianVaultConfig as dg, type NativeKnowledgeOpenClawWorkspaceConfig as dh, type NotionLiveConnectorConfig as di, type PrincipalFromSessionKeyMode as dj, type PrincipalRule as dk, type ProceduralConfig as dl, type QuestionEntry as dm, type ReasoningEffort as dn, type RecallPipelineConfig as dp, type RecallTraceEvent as dq, type RelevanceFeedback as dr, SPECULATIVE_TTL_DAYS as ds, type ScopeProfileAutoPromoteConfig as dt, type ScopeProfileTeamProjectConfig as du, type ScopeTeamConfig as dv, type ScoredEntity as dw, type SemanticChunkingConfigShape as dx, type SignalLevel as dy, type SlotBehaviorConfig as dz, type CalendarSource as e, type CalendarEvent as f, type BriefingActiveThread as g, type BriefingResult as h, type BriefingOpenCommitment as i, type BriefingRecentEntity as j, type BufferTurn as k, type ExtractionBufferSnapshot as l, type MemoryFrontmatter as m, type Checkpoint as n, type RecallDisclosure as o, type SourceConnectorProvenance as p, type ScopeProfileConfig as q, type ScopeProfileLayerId as r, type ScopeProfilePromotionTarget as s, type BehaviorLoopPolicyState as t, type ExtractionLivenessStatus as u, type SecretRef as v, type AgentAccessAuthToken as w, type MemoryCategory as x, type CaptureMode as y, type MemoryStatus as z };
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { ba as AccessTrackingEntry, a0 as ActiveRecallChatType, a4 as ActiveRecallModelFallbackPolicy, a2 as ActiveRecallPromptStyle, a1 as ActiveRecallQueryMode, a3 as ActiveRecallThinking, v as AgentAccessAuthToken, ct as AgentAccessHttpConfig, cu as AgentDefaultsConfig, cv as AgentPersona, A as AgentPersonaModelConfig, cw as BehaviorLoopAdjustment, s as BehaviorLoopPolicyState, cx as BehaviorSignalDirection, a6 as BehaviorSignalEvent, cy as BehaviorSignalType, be as BootstrapOptions, bf as BootstrapResult, g as BriefingActiveThread, cz as BriefingCalendarSourceError, bA as BriefingConfig, d as BriefingFocus, c as BriefingFollowup, bB as BriefingOpenCommitment, i as BriefingRecentEntity, h as BriefingResult, B as BriefingSections, bC as BriefingWindow, cA as BufferEntryState, b6 as BufferState, a7 as BufferSurpriseEvent, j as BufferTurn, f as CalendarEvent, e as CalendarSource, x as CaptureMode, cB as ChatConfig, m as Checkpoint, cC as CodexCliReasoningEffort, cD as CodexCompactionFlushMode, bF as CodexCompatConfig, cE as CodexConnectorConfig, C as CodingContext, cF as CodingGraphLspConfig, bn as CodingKnowledgeConfig, bh as CodingModeConfig, cG as CompressionGuidelineActivationState, ad as CompressionGuidelineOptimizerActionSummary, ac as CompressionGuidelineOptimizerEventCounts, ae as CompressionGuidelineOptimizerRuleUpdate, cH as CompressionGuidelineOptimizerSourceWindow, ah as CompressionGuidelineOptimizerState, cI as ConfidenceTier, cJ as ConsolidationAction, cK as ConsolidationItem, bg as ConsolidationObservation, aE as ConsolidationResult, ai as ConvergeConfig, $ as ConvergeConflictPolicy, O as ConversationThread, cL as CronConversationRecallMode, cM as CronRecallMode, bG as DEFAULT_RECALL_DISCLOSURE, aF as DaySummaryResult, ak as DependencyPropagationConfig, cN as DreamingConfig, cO as DreamingNarrativePromptStyle, cP as DreamsDeepSleepConfig, cQ as DreamsLightSleepConfig, D as DreamsPhase, cR as DreamsPhaseStatus, cS as DreamsPhasesConfig, cT as DreamsRemConfig, a as DreamsRunResult, bc as DreamsStatusResult, cU as EngramTraceEvent, b9 as EntityActivityEntry, E as EntityFile, aj as EntityMention, b8 as EntityRelationship, am as EntitySchemaDefinition, an as EntitySchemaSectionDefinition, al as EntityStructuredSection, b4 as EntityTimelineEntry, ao as ExtractedFact, cV as ExtractedProcedureStep, cW as ExtractedQuestion, cX as ExtractedReasoningTrace, cY as ExtractedReasoningTraceStep, cZ as ExtractedRelationship, Z as ExtractionFailureClass, c_ as ExtractionPassSource, a5 as ExtractionResult, F as FaithfulnessFrontmatter, b7 as FileHygieneConfig, G as GatewayConfig, c$ as GitHubLiveConnectorConfig, d0 as GmailLiveConnectorConfig, d1 as GoogleDriveLiveConnectorConfig, d2 as HeartbeatConfig, d3 as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, _ as ImportanceLevel, aq as ImportanceScore, U as LifecycleState, L as LiveConnectorsConfig, d4 as LlmTraceCallback, d5 as LlmTraceEvent, as as MemoryActionEligibilityContext, bQ as MemoryActionEligibilitySource, ag as MemoryActionEvent, d6 as MemoryActionOutcome, d7 as MemoryActionPolicyDecision, at as MemoryActionPolicyResult, d8 as MemoryActionStatus, af as MemoryActionType, w as MemoryCategory, M as MemoryFile, l as MemoryFrontmatter, ar as MemoryIntent, J as MemoryLifecycleEvent, au as MemoryLifecycleEventType, av as MemoryLifecycleStateSummary, b5 as MemoryLink, d9 as MemoryLinkType, bR as MemoryObservation, da as MemoryOsPresetName, z as MemoryProjectionCurrentState, bS as MemoryScope, y as MemoryStatus, bb as MemorySummary, az as MetaState, db as ModelApi, dc as ModelDefinitionConfig, dd as ModelProviderAuthMode, aw as ModelProviderConfig, de as NamespacePolicy, ax as NativeKnowledgeConfig, df as NativeKnowledgeFolderRuleConfig, dg as NativeKnowledgeObsidianVaultConfig, dh as NativeKnowledgeOpenClawWorkspaceConfig, di as NotionLiveConnectorConfig, P as PluginConfig, W as PolicyClass, dj as PrincipalFromSessionKeyMode, dk as PrincipalRule, dl as ProceduralConfig, ap as ProvenanceConfig, K as ProvenanceSource, aG as QmdSearchExplain, Q as QmdSearchResult, dm as QuestionEntry, bT as RECALL_DISCLOSURE_LEVELS, dn as ReasoningEffort, n as RecallDisclosure, dp as RecallPipelineConfig, R as RecallPlanMode, bd as RecallSectionConfig, b as RecallTierExplain, dq as RecallTraceEvent, dr as RelevanceFeedback, aB as RetrievalTier, ds as SPECULATIVE_TTL_DAYS, dt as ScopeProfileAutoPromoteConfig, p as ScopeProfileConfig, q as ScopeProfileLayerId, r as ScopeProfilePromotionTarget, du as ScopeProfileTeamProjectConfig, dv as ScopeTeamConfig, dw as ScoredEntity, u as SecretRef, dx as SemanticChunkingConfigShape, S as SessionObserverBandConfig, dy as SignalLevel, aC as SignalScanResult, dz as SlotBehaviorConfig, dA as SlotMismatchMode, o as SourceConnectorProvenance, c2 as SupportPassportConfig, aD as TopicScore, T as TranscriptEntry, dB as TriggerMode, N as TrustWeights, V as VerificationState, dC as confidenceTier, b$ as isRecallDisclosure } from './types-CBEAYU76.js';
1
+ export { bb as AccessTrackingEntry, a1 as ActiveRecallChatType, a5 as ActiveRecallModelFallbackPolicy, a3 as ActiveRecallPromptStyle, a2 as ActiveRecallQueryMode, a4 as ActiveRecallThinking, w as AgentAccessAuthToken, ct as AgentAccessHttpConfig, cu as AgentDefaultsConfig, cv as AgentPersona, A as AgentPersonaModelConfig, cw as BehaviorLoopAdjustment, t as BehaviorLoopPolicyState, cx as BehaviorSignalDirection, a7 as BehaviorSignalEvent, cy as BehaviorSignalType, bf as BootstrapOptions, bg as BootstrapResult, g as BriefingActiveThread, cz as BriefingCalendarSourceError, bB as BriefingConfig, d as BriefingFocus, c as BriefingFollowup, i as BriefingOpenCommitment, j as BriefingRecentEntity, h as BriefingResult, B as BriefingSections, bC as BriefingWindow, cA as BufferEntryState, b7 as BufferState, a8 as BufferSurpriseEvent, k as BufferTurn, f as CalendarEvent, e as CalendarSource, y as CaptureMode, cB as ChatConfig, n as Checkpoint, cC as CodexCliReasoningEffort, cD as CodexCompactionFlushMode, bF as CodexCompatConfig, cE as CodexConnectorConfig, C as CodingContext, cF as CodingGraphLspConfig, bo as CodingKnowledgeConfig, bi as CodingModeConfig, cG as CompressionGuidelineActivationState, ae as CompressionGuidelineOptimizerActionSummary, ad as CompressionGuidelineOptimizerEventCounts, af as CompressionGuidelineOptimizerRuleUpdate, cH as CompressionGuidelineOptimizerSourceWindow, ai as CompressionGuidelineOptimizerState, cI as ConfidenceTier, cJ as ConsolidationAction, cK as ConsolidationItem, bh as ConsolidationObservation, aF as ConsolidationResult, aj as ConvergeConfig, a0 as ConvergeConflictPolicy, U as ConversationThread, cL as CronConversationRecallMode, cM as CronRecallMode, bG as DEFAULT_RECALL_DISCLOSURE, aG as DaySummaryResult, al as DependencyPropagationConfig, cN as DreamingConfig, cO as DreamingNarrativePromptStyle, cP as DreamsDeepSleepConfig, cQ as DreamsLightSleepConfig, D as DreamsPhase, cR as DreamsPhaseStatus, cS as DreamsPhasesConfig, cT as DreamsRemConfig, a as DreamsRunResult, bd as DreamsStatusResult, cU as EngramTraceEvent, ba as EntityActivityEntry, E as EntityFile, ak as EntityMention, b9 as EntityRelationship, an as EntitySchemaDefinition, ao as EntitySchemaSectionDefinition, am as EntityStructuredSection, b5 as EntityTimelineEntry, ap as ExtractedFact, cV as ExtractedProcedureStep, cW as ExtractedQuestion, cX as ExtractedReasoningTrace, cY as ExtractedReasoningTraceStep, cZ as ExtractedRelationship, _ as ExtractionFailureClass, c_ as ExtractionPassSource, a6 as ExtractionResult, F as FaithfulnessFrontmatter, b8 as FileHygieneConfig, G as GatewayConfig, c$ as GitHubLiveConnectorConfig, d0 as GmailLiveConnectorConfig, d1 as GoogleDriveLiveConnectorConfig, d2 as HeartbeatConfig, d3 as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, $ as ImportanceLevel, ar as ImportanceScore, V as LifecycleState, L as LiveConnectorsConfig, d4 as LlmTraceCallback, d5 as LlmTraceEvent, at as MemoryActionEligibilityContext, bQ as MemoryActionEligibilitySource, ah as MemoryActionEvent, d6 as MemoryActionOutcome, d7 as MemoryActionPolicyDecision, au as MemoryActionPolicyResult, d8 as MemoryActionStatus, ag as MemoryActionType, x as MemoryCategory, M as MemoryFile, m as MemoryFrontmatter, as as MemoryIntent, K as MemoryLifecycleEvent, av as MemoryLifecycleEventType, aw as MemoryLifecycleStateSummary, b6 as MemoryLink, d9 as MemoryLinkType, bR as MemoryObservation, da as MemoryOsPresetName, J as MemoryProjectionCurrentState, bS as MemoryScope, z as MemoryStatus, bc as MemorySummary, aA as MetaState, db as ModelApi, dc as ModelDefinitionConfig, dd as ModelProviderAuthMode, ax as ModelProviderConfig, de as NamespacePolicy, ay as NativeKnowledgeConfig, df as NativeKnowledgeFolderRuleConfig, dg as NativeKnowledgeObsidianVaultConfig, dh as NativeKnowledgeOpenClawWorkspaceConfig, di as NotionLiveConnectorConfig, P as PluginConfig, X as PolicyClass, dj as PrincipalFromSessionKeyMode, dk as PrincipalRule, dl as ProceduralConfig, aq as ProvenanceConfig, N as ProvenanceSource, aH as QmdSearchExplain, Q as QmdSearchResult, dm as QuestionEntry, bT as RECALL_DISCLOSURE_LEVELS, dn as ReasoningEffort, o as RecallDisclosure, dp as RecallPipelineConfig, R as RecallPlanMode, be as RecallSectionConfig, b as RecallTierExplain, dq as RecallTraceEvent, dr as RelevanceFeedback, aC as RetrievalTier, ds as SPECULATIVE_TTL_DAYS, dt as ScopeProfileAutoPromoteConfig, q as ScopeProfileConfig, r as ScopeProfileLayerId, s as ScopeProfilePromotionTarget, du as ScopeProfileTeamProjectConfig, dv as ScopeTeamConfig, dw as ScoredEntity, v as SecretRef, dx as SemanticChunkingConfigShape, S as SessionObserverBandConfig, dy as SignalLevel, aD as SignalScanResult, dz as SlotBehaviorConfig, dA as SlotMismatchMode, p as SourceConnectorProvenance, c2 as SupportPassportConfig, aE as TopicScore, T as TranscriptEntry, dB as TriggerMode, O as TrustWeights, W as VerificationState, dC as confidenceTier, b$ as isRecallDisclosure } from './types-CltSWcND.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './external-wiki-config.js';
@@ -1,6 +1,6 @@
1
1
  import { TierRoutingPolicy } from './tier-routing.js';
2
2
  import './lifecycle.js';
3
- import './types-CBEAYU76.js';
3
+ import './types-CltSWcND.js';
4
4
  import './message-parts/index.js';
5
5
  import './bounded-jsonl-state.js';
6
6
  import './operator-doctor-types.js';
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-XE2QCCT2.js";
4
+ } from "./chunk-BTBAHTQ5.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
- import "./chunk-Q5XKKDFQ.js";
6
+ import "./chunk-5SZ6CLGJ.js";
7
7
  import "./chunk-UHVXE24Y.js";
8
8
  import "./chunk-46WM6JX2.js";
9
9
  import "./chunk-SXIMQLGV.js";
10
- import "./chunk-AJRJDXYR.js";
11
- import "./chunk-62Y5AGCM.js";
12
- import "./chunk-OQIRBGUU.js";
13
- import "./chunk-VANZKHTN.js";
14
- import "./chunk-CYEPCZN5.js";
15
- import "./chunk-ML3U4KPR.js";
10
+ import "./chunk-E7MYSCSL.js";
11
+ import "./chunk-VENMDW4U.js";
16
12
  import "./chunk-VYISFWVX.js";
17
- import "./chunk-W7IGLX4G.js";
18
13
  import "./chunk-6KTXE6A3.js";
14
+ import "./chunk-2Q4UAPLD.js";
15
+ import "./chunk-G5OB4XZX.js";
16
+ import "./chunk-CYEPCZN5.js";
17
+ import "./chunk-K547KS3X.js";
19
18
  import "./chunk-GUMZC2BO.js";
19
+ import "./chunk-W7IGLX4G.js";
20
20
  import "./chunk-227UFSEQ.js";
21
21
  import "./chunk-ET356KSB.js";
22
22
  import "./chunk-72A4L5JJ.js";
@@ -1,4 +1,4 @@
1
- import { w as MemoryCategory } from './types-CBEAYU76.js';
1
+ import { x as MemoryCategory } from './types-CltSWcND.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.63.9",
3
+ "version": "9.63.11",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3156,7 +3156,7 @@
3156
3156
  "core"
3157
3157
  ],
3158
3158
  "peerDependencies": {
3159
- "@remnic/coding-graph": "^9.63.9"
3159
+ "@remnic/coding-graph": "^9.63.11"
3160
3160
  },
3161
3161
  "peerDependenciesMeta": {
3162
3162
  "@remnic/coding-graph": {
@@ -16,6 +16,7 @@ import {
16
16
  type WearablesMeetingsScope,
17
17
  type EngramAccessMemoryResponse,
18
18
  type EngramAccessWriteResponse,
19
+ type EngramAccessRecallResponse,
19
20
  } from "./access-service.js";
20
21
  import { maybeHandleLifecycleFlush, type LifecycleFlushHttpDeps } from "./access-http-lifecycle-flush.js";
21
22
  import {
@@ -32,7 +33,7 @@ import {
32
33
  OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES,
33
34
  OFFLINE_SYNC_SNAPSHOT_BASE_MAX_BODY_BYTES,
34
35
  } from "./offline-sync.js";
35
- import type { RecallDisclosure, RecallPlanMode } from "./types.js";
36
+ import type { RecallDisclosure } from "./types.js";
36
37
  import { isRecallDisclosure } from "./types.js";
37
38
  import { isTrustZoneName, type TrustZoneName, type TrustZoneRecordKind, type TrustZoneSourceClass } from "./trust-zones.js";
38
39
  import { AdapterRegistry, type ResolvedIdentity } from "./adapters/index.js";
@@ -1020,13 +1021,8 @@ export class EngramAccessHttpServer extends SupportPassportAccessHttpBase {
1020
1021
  if (req.method === "POST" && pathname === "/engram/v1/recall") {
1021
1022
  this.enforceTokenOp("recall"); // boundary dispatch (issue #1525)
1022
1023
  const body = await this.readValidatedBody(req, "recall");
1023
- // Preserve the distinction between `codingContext: null` (explicit
1024
- // clear) and `codingContext` missing from the JSON payload
1025
- // (untouched). The previous `?? undefined` collapsed both into
1026
- // undefined, so callers lost the ability to clear the session's
1027
- // attached context through the recall endpoint.
1028
- const codingContext =
1029
- "codingContext" in body ? body.codingContext : undefined;
1024
+ // `codingContext` presence (null = explicit clear vs absent = untouched)
1025
+ // is preserved by spreading the parsed body into the boundary envelope.
1030
1026
  // Disclosure resolution (issue #677 PR 2/4): accept the value from
1031
1027
  // the validated body OR the `?disclosure=` query parameter, with
1032
1028
  // the body taking precedence so an explicit JSON payload is never
@@ -1109,31 +1105,31 @@ export class EngramAccessHttpServer extends SupportPassportAccessHttpBase {
1109
1105
  bodyIncludeLowConfidence === true ||
1110
1106
  (bodyIncludeLowConfidence === undefined &&
1111
1107
  queryIncludeLowConfidence === "true");
1112
- const response = await this.service.recall({
1113
- query: body.query ?? "",
1114
- sessionKey: body.sessionKey,
1115
- authenticatedPrincipal: this.resolveRequestPrincipal(req),
1116
- sourceConnector: this.resolveConnector(req),
1117
- idempotencyKey: body.idempotencyKey,
1118
- namespace: this.resolveNamespace(req, body.namespace),
1119
- topK: body.topK,
1120
- mode: body.mode as RecallPlanMode | "auto" | undefined,
1121
- includeDebug: body.includeDebug === true,
1122
- // Forward the validated disclosure depth to the service layer
1123
- // (issue #677). The zod schema accepts/rejects body values;
1124
- // `resolveRecallDisclosure()` validates the query-param fallback.
1125
- disclosure,
1126
- codingContext,
1127
- // Forward cwd/projectTag for auto git-context resolution (issue #569).
1128
- cwd: body.cwd,
1129
- projectTag: body.projectTag,
1130
- ...(asOf !== undefined ? { asOf } : {}),
1131
- ...(tags !== undefined ? { tags } : {}),
1132
- ...(tagMatch !== undefined ? { tagMatch } : {}),
1133
- ...(includeLowConfidence ? { includeLowConfidence: true } : {}),
1134
- abortSignal,
1135
- });
1136
- this.respondJson(res, 200, response);
1108
+ // Boundary dispatch (issue #2482): same registry path as memory_store —
1109
+ // the canonical recallRequestSchema re-validates the envelope the
1110
+ // transport assembled (resolved namespace + query-param overlays).
1111
+ const op = getOperation("recall");
1112
+ if (!op) {
1113
+ throw new EngramAccessInputError("access-boundary: operation not registered: recall");
1114
+ }
1115
+ const output = (await op.run(
1116
+ {
1117
+ ...body,
1118
+ namespace: this.resolveNamespace(req, body.namespace),
1119
+ ...(disclosure !== undefined ? { disclosure } : {}),
1120
+ ...(asOf !== undefined ? { asOf } : {}),
1121
+ ...(tags !== undefined ? { tags } : {}),
1122
+ ...(tagMatch !== undefined ? { tagMatch } : {}),
1123
+ ...(includeLowConfidence ? { includeLowConfidence: true } : {}),
1124
+ },
1125
+ {
1126
+ service: this.service,
1127
+ authenticatedPrincipal: this.resolveRequestPrincipal(req),
1128
+ sourceConnector: this.resolveConnector(req),
1129
+ ...(abortSignal ? { abortSignal } : {}),
1130
+ },
1131
+ )) as { result: EngramAccessRecallResponse };
1132
+ this.respondJson(res, 200, output.result);
1137
1133
  return;
1138
1134
  }
1139
1135
 
@@ -1745,43 +1741,34 @@ export class EngramAccessHttpServer extends SupportPassportAccessHttpBase {
1745
1741
  if (req.method === "POST" && pathname === "/engram/v1/observe") {
1746
1742
  this.enforceTokenOp("observe"); // boundary dispatch (issue #1525)
1747
1743
  const body = await this.readValidatedBody(req, "observe");
1748
- const response = await this.service.observe(
1744
+ // Boundary dispatch (issue #2482): same registry path as memory_store.
1745
+ // The write-quota hook is forwarded via ctx.hooks so it fires INSIDE
1746
+ // the service's idempotency lock (beforeExecute, only on a real miss).
1747
+ // A retried observe that hits the replay path must NOT be rejected with
1748
+ // 429 — the original attempt may have consumed the last quota slot; the
1749
+ // retry returns the cached response without requiring another (#1434
1750
+ // invariant, preserved by the boundary migration).
1751
+ const op = getOperation("observe");
1752
+ if (!op) {
1753
+ throw new EngramAccessInputError("access-boundary: operation not registered: observe");
1754
+ }
1755
+ const output = (await op.run(
1756
+ { ...body, namespace: this.resolveNamespace(req, body.namespace) },
1749
1757
  {
1750
- sessionKey: body.sessionKey,
1751
- messages: body.messages.map((message) => ({
1752
- role: message.role,
1753
- content: message.content,
1754
- sourceFormat: message.sourceFormat ?? undefined,
1755
- rawContent: message.rawContent ?? undefined,
1756
- parts: message.parts ?? undefined,
1757
- })),
1758
- namespace: this.resolveNamespace(req, body.namespace),
1758
+ service: this.service,
1759
1759
  authenticatedPrincipal: this.resolveRequestPrincipal(req),
1760
- skipExtraction: body.skipExtraction === true,
1761
- // Issue #1649: optional server-side dedup key for retried POSTs.
1762
- idempotencyKey: body.idempotencyKey,
1763
- // Forward cwd/projectTag for auto git-context resolution (issue #569).
1764
- cwd: body.cwd,
1765
- projectTag: body.projectTag,
1760
+ hooks: { enforceWriteQuota: () => this.ensureWriteRateLimitAvailable(req) },
1766
1761
  // Phase 1 provenance: server-resolved connector identity from the
1767
1762
  // bearer token (REST path, mirroring the MCP tools/call dispatch).
1768
1763
  sourceConnector: this.resolveConnector(req),
1769
1764
  },
1770
- // Enforce the write-quota INSIDE the service's idempotency lock
1771
- // (beforeExecute, only on a real miss). A retried observe that hits the
1772
- // replay path must NOT be rejected with 429 — that is exactly the
1773
- // response-lost-after-process case the dedup exists for. The original
1774
- // attempt may have consumed the last quota slot; the retry returns the
1775
- // cached response without requiring another. Matches memory_store's
1776
- // hook-in-the-lock pattern (#1434 invariant).
1777
- { enforceWriteQuota: () => this.ensureWriteRateLimitAvailable(req) },
1778
- );
1765
+ )) as { result: { dryRun?: boolean; idempotencyReplay?: boolean } };
1779
1766
  // A replayed (deduplicated) observe must not consume a second write-quota
1780
1767
  // slot — same invariant as memory_store/suggestion_submit (#1434).
1781
- if (this.shouldCountWriteRateLimit(response as { dryRun?: boolean; idempotencyReplay?: boolean })) {
1768
+ if (this.shouldCountWriteRateLimit(output.result)) {
1782
1769
  this.recordWriteRateLimitHit(req);
1783
1770
  }
1784
- this.respondJson(res, 202, response);
1771
+ this.respondJson(res, 202, output.result);
1785
1772
  return;
1786
1773
  }
1787
1774
 
@@ -472,16 +472,12 @@ test("MCP session override is injected only into tools that accept sessionKey",
472
472
  namespace: undefined,
473
473
  principal: "adapter-agent",
474
474
  });
475
- assert.deepEqual(observeArgs, {
476
- sessionKey: "adapter-session",
477
- messages: [{ role: "user", content: "hello", parts: undefined, rawContent: undefined, sourceFormat: undefined }],
478
- namespace: undefined,
479
- authenticatedPrincipal: undefined,
480
- skipExtraction: false,
481
- idempotencyKey: undefined,
482
- cwd: undefined,
483
- projectTag: undefined,
484
- });
475
+ assert.equal(observeArgs?.sessionKey, "adapter-session");
476
+ assert.equal(observeArgs?.skipExtraction, false);
477
+ const observeMessages = observeArgs?.messages as Array<{ role: string; content: string }>;
478
+ assert.equal(observeMessages?.length, 1);
479
+ assert.equal(observeMessages?.[0]?.role, "user");
480
+ assert.equal(observeMessages?.[0]?.content, "hello");
485
481
  assert.equal((capsuleResponse as Record<string, unknown> & { result?: { isError?: boolean } }).result?.isError, false);
486
482
  assert.equal((observeResponse as Record<string, unknown> & { result?: { isError?: boolean } }).result?.isError, false);
487
483
  });
package/src/access-mcp.ts CHANGED
@@ -326,6 +326,24 @@ const STRICT_MCP_SCHEMA_KEYS: Partial<Record<SchemaName, readonly string[]>> = {
326
326
  capsuleList: ["namespace", "sessionKey", "cwd", "projectTag"],
327
327
  };
328
328
 
329
+ // Tools whose envelope parses through the canonical zod wire schema (issue
330
+ // #2482) — the SAME validation the HTTP transport runs. Every other migrated
331
+ // tool passes raw args; its boundary op schema validates them.
332
+ const MCP_WIRE_SCHEMAS: Partial<Record<string, SchemaName>> = {
333
+ memory_store: "memoryStore",
334
+ suggestion_submit: "suggestionSubmit",
335
+ action_confidence: "actionConfidence",
336
+ day_summary: "daySummary",
337
+ capsule_export: "capsuleExport",
338
+ capsule_import: "capsuleImport",
339
+ capsule_list: "capsuleList",
340
+ observe: "observe",
341
+ recall: "recall",
342
+ lcm_compaction_flush: "lcmCompactionFlush",
343
+ extraction_force_flush: "extractionForceFlush",
344
+ lcm_compaction_record: "lcmCompactionRecord",
345
+ };
346
+
329
347
  // Shared JSON-schema fragments for the client-injected git/project context
330
348
  // fields (#1434). Declared once to avoid drift across tool definitions.
331
349
  // `_SCOPED` is for write tools that resolve a project namespace from these
@@ -2669,28 +2687,9 @@ export class EngramMcpServer {
2669
2687
  throw new EngramAccessInputError(`access-boundary: operation not registered: ${migrated}`);
2670
2688
  }
2671
2689
  let envelope: Record<string, unknown>;
2672
- if (migrated === "memory_store") {
2673
- envelope = parseMcpRequest("memoryStore", args);
2674
- } else if (migrated === "suggestion_submit") {
2675
- envelope = parseMcpRequest("suggestionSubmit", args);
2676
- } else if (migrated === "action_confidence") {
2677
- envelope = parseMcpRequest("actionConfidence", args);
2678
- } else if (migrated === "day_summary") {
2679
- envelope = parseMcpRequest("daySummary", args);
2680
- } else if (migrated === "capsule_export") {
2681
- envelope = parseMcpRequest("capsuleExport", args);
2682
- } else if (migrated === "capsule_import") {
2683
- envelope = parseMcpRequest("capsuleImport", args);
2684
- } else if (migrated === "capsule_list") {
2685
- envelope = parseMcpRequest("capsuleList", args);
2686
- } else if (migrated === "observe") {
2687
- envelope = parseMcpRequest("observe", args);
2688
- } else if (migrated === "lcm_compaction_flush") {
2689
- envelope = parseMcpRequest("lcmCompactionFlush", args);
2690
- } else if (migrated === "extraction_force_flush") {
2691
- envelope = parseMcpRequest("extractionForceFlush", args);
2692
- } else if (migrated === "lcm_compaction_record") {
2693
- envelope = parseMcpRequest("lcmCompactionRecord", args);
2690
+ const wireSchema = MCP_WIRE_SCHEMAS[migrated];
2691
+ if (wireSchema) {
2692
+ envelope = parseMcpRequest(wireSchema, args) as Record<string, unknown>;
2694
2693
  } else if (migrated.startsWith("codegraph_")) {
2695
2694
  envelope = { ...args, tool: migrated.slice("codegraph_".length) };
2696
2695
  } else if (migrated === "chat_message") {
@@ -15,6 +15,7 @@ import type { DreamsPhase, RecallDisclosure, RecallPlanMode } from "./types.js";
15
15
  import type { RemnicChatGptMemoryInspectorInput } from "./mcp-memory-inspector-app.js";
16
16
  import { defineOperation } from "./access-boundary.js";
17
17
  import { EngramAccessForbiddenError } from "./access-errors.js";
18
+ import { type ObserveRequest, observeRequestSchema, type RecallRequest, recallRequestSchema } from "./access-schema.js";
18
19
  import { EngramAccessInputError, type EngramAccessService } from "./access-service.js";
19
20
  import { enforceNamespaceAllowList, tokenCapabilityStore } from "./access-token-capabilities.js";
20
21
  import { projectTagProjectId } from "./coding/coding-namespace.js";
@@ -57,6 +58,24 @@ function strictSchema<T extends z.ZodRawShape>(shape: T): z.ZodType<Record<strin
57
58
  return z.preprocess(stripNulls, z.object(shape).passthrough()) as unknown as z.ZodType<Record<string, unknown>>;
58
59
  }
59
60
 
61
+ /**
62
+ * stripNulls, but keys listed in `preserve` keep their null values. Used by
63
+ * boundary schemas whose wire contract treats an explicit `null` as a
64
+ * meaningful value (e.g. recall `codingContext: null` clears the session
65
+ * context — it must not be collapsed into "absent").
66
+ */
67
+ function stripNullsExcept(data: unknown, preserve: readonly string[]): unknown {
68
+ if (data !== null && typeof data === "object" && !Array.isArray(data)) {
69
+ const cleaned: Record<string, unknown> = {};
70
+ for (const [key, value] of Object.entries(data as Record<string, unknown>)) {
71
+ if (value !== null || preserve.includes(key)) cleaned[key] = value;
72
+ }
73
+ return cleaned;
74
+ }
75
+ return data;
76
+ }
77
+
78
+
60
79
  function optStr(v: unknown): string | undefined { return typeof v === "string" ? v : undefined; }
61
80
  function reqStr(v: unknown, field: string): string {
62
81
  if (typeof v !== "string" || v.length === 0) throw new EngramAccessInputError(field + " is required and must be a non-empty string");
@@ -77,24 +96,26 @@ const S = {
77
96
  };
78
97
 
79
98
  // === RECALL ===
80
- defineOperation({ name: "recall", description: "Semantic recall.", schema: strictSchema({ query: S.str, sessionKey: S.str, namespace: S.str, topK: S.num, mode: S.str, includeDebug: S.bool, disclosure: S.str, cwd: S.str, projectTag: S.str, asOf: S.str, tags: S.strArr, tagMatch: S.str }),
81
- handler: async (input, ctx) => {
82
- let disclosure: RecallDisclosure | undefined;
83
- if (input.disclosure !== undefined) { if (typeof input.disclosure !== "string") throw new EngramAccessInputError("disclosure must be a string"); disclosure = input.disclosure as RecallDisclosure; }
84
- if (input.cwd !== undefined && typeof input.cwd !== "string") throw new EngramAccessInputError("cwd must be a string");
85
- if (input.projectTag !== undefined && typeof input.projectTag !== "string") throw new EngramAccessInputError("projectTag must be a string");
86
- if (input.asOf !== undefined && typeof input.asOf !== "string") throw new EngramAccessInputError("asOf must be a string");
87
- let tags: string[] | undefined;
88
- if (input.tags !== undefined) { if (!Array.isArray(input.tags) || !input.tags.every((t) => typeof t === "string")) throw new EngramAccessInputError("tags must be an array of strings"); tags = input.tags; }
89
- let tagMatch: "any" | "all" | undefined;
90
- if (input.tagMatch !== undefined) { if (input.tagMatch !== "any" && input.tagMatch !== "all") throw new EngramAccessInputError("tagMatch must be one of: any, all"); tagMatch = input.tagMatch; }
91
- const result = await ctx.service.recall({ query: typeof input.query === "string" ? input.query : "", sessionKey: optStr(input.sessionKey), authenticatedPrincipal: ctx.authenticatedPrincipal, sourceConnector: ctx.sourceConnector, namespace: optStr(input.namespace), topK: optNum(input.topK), mode: optStr(input.mode) as RecallPlanMode | "auto" | undefined, includeDebug: input.includeDebug === true, disclosure, cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), asOf: optStr(input.asOf), ...(tags ? { tags } : {}), ...(tagMatch ? { tagMatch } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
92
- return { result };
93
- },
99
+ // Issue #2482: the boundary validates against the SAME canonical zod schema
100
+ // the HTTP transport uses (recallRequestSchema). No parallel field list, no
101
+ // silent defaults a missing `query` or a bad enum is a 400 at the boundary.
102
+ // `codingContext: null` survives the null-strip (explicit session-context
103
+ // clear); every other null is the MCP null-for-absent idiom.
104
+ defineOperation({
105
+ name: "recall",
106
+ description: "Semantic recall.",
107
+ schema: z.preprocess((data) => stripNullsExcept(data, ["codingContext"]), recallRequestSchema) as unknown as z.ZodType<RecallRequest>,
108
+ handler: async (input, ctx) => ({
109
+ result: await ctx.service.recall({
110
+ ...input,
111
+ authenticatedPrincipal: ctx.authenticatedPrincipal,
112
+ ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),
113
+ ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}),
114
+ }),
115
+ }),
94
116
  });
95
117
  defineOperation({ name: "recall_explain", description: "Explain recall plan.", schema: strictSchema({ sessionKey: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.recallExplain({ sessionKey: optStr(input.sessionKey), namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });
96
- defineOperation({ name: "set_coding_context", description: "Set coding context.", schema: z.preprocess((data) => { // Strip null from all fields EXCEPT codingContext (null = clear context).
97
- if (data !== null && typeof data === "object" && !Array.isArray(data)) { const o = data as Record<string, unknown>; const c: Record<string, unknown> = {}; for (const [k, v] of Object.entries(o)) { if (v !== null || k === "codingContext") c[k] = v; } return c; } return data; }, z.object({ sessionKey: S.str, codingContext: z.union([z.null(), z.object({ projectId: S.str, branch: z.union([z.string(), z.null()]).optional(), rootPath: S.str, defaultBranch: z.union([z.string(), z.null()]).optional() }).passthrough()]).optional(), projectTag: S.str }).passthrough()) as unknown as z.ZodType<Record<string, unknown>>,
118
+ defineOperation({ name: "set_coding_context", description: "Set coding context.", schema: z.preprocess((data) => stripNullsExcept(data, ["codingContext"]), z.object({ sessionKey: S.str, codingContext: z.union([z.null(), z.object({ projectId: S.str, branch: z.union([z.string(), z.null()]).optional(), rootPath: S.str, defaultBranch: z.union([z.string(), z.null()]).optional() }).passthrough()]).optional(), projectTag: S.str }).passthrough()) as unknown as z.ZodType<Record<string, unknown>>, // codingContext: null = clear context (preserved).
98
119
  handler: async (input, ctx) => {
99
120
  const sessionKey = defStr(input.sessionKey, "");
100
121
  const projectTag = optStr(input.projectTag);
@@ -190,8 +211,35 @@ defineOperation({ name: "memory_timeline", description: "Memory timeline.", sche
190
211
  defineOperation({ name: "suggestion_submit", description: "Submit suggestion.", schema: strictSchema({ schemaVersion: S.num, idempotencyKey: S.str, dryRun: S.bool, sessionKey: S.str, content: S.str, category: S.str, confidence: S.num, namespace: S.str, tags: S.strArr, entityRef: S.str, ttl: S.str, sourceReason: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.suggestionSubmit({ schemaVersion: optNum(input.schemaVersion), idempotencyKey: optStr(input.idempotencyKey), dryRun: input.dryRun === true, sessionKey: optStr(input.sessionKey), authenticatedPrincipal: ctx.authenticatedPrincipal, ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}), content: optStr(input.content) ?? "", category: optStr(input.category), confidence: optNum(input.confidence), namespace: optStr(input.namespace), tags: optStrArr(input.tags), entityRef: optStr(input.entityRef), ttl: optStr(input.ttl), sourceReason: optStr(input.sourceReason), cwd: optStr(input.cwd), projectTag: optStr(input.projectTag) }) }) });
191
212
  defineOperation({ name: "entity_get", description: "Get entity.", schema: strictSchema({ name: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.entityGet(optStr(input.name) ?? "", optStr(input.namespace)) }) });
192
213
  defineOperation({ name: "review_queue_list", description: "List review queue.", schema: strictSchema({ runId: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.reviewQueue(optStr(input.runId) ?? "", optStr(input.namespace), ctx.authenticatedPrincipal) }) });
193
- defineOperation({ name: "observe", description: "Observe messages.", schema: strictSchema({ sessionKey: S.str, messages: z.array(z.object({ role: z.string(), content: z.string(), parts: z.array(z.unknown()).optional(), rawContent: z.unknown().optional(), sourceFormat: z.string().optional() }).passthrough()), skipExtraction: S.bool, idempotencyKey: S.str, namespace: S.str, cwd: S.str, projectTag: S.str }),
194
- handler: async (input, ctx) => ({ result: await ctx.service.observe({ sessionKey: defStr(input.sessionKey, ""), messages: (input.messages as unknown[]).map((m: unknown) => { const r = m as Record<string, unknown>; return { role: String(r.role), content: String(r.content), parts: r.parts as unknown[], rawContent: r.rawContent as string | undefined, sourceFormat: r.sourceFormat as string | undefined }; }) as never, skipExtraction: input.skipExtraction === true, idempotencyKey: optStr(input.idempotencyKey), namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal, cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}) }, ctx.hooks?.enforceWriteQuota ? { enforceWriteQuota: ctx.hooks.enforceWriteQuota } : undefined) }),
214
+ // Issue #2482: observe validates through the canonical observeRequestSchema
215
+ // (same as HTTP/MCP wire validation). Nullable wire fields (parts /
216
+ // sourceFormat) map to undefined for the service's cleaned message form.
217
+ defineOperation({
218
+ name: "observe",
219
+ description: "Observe messages.",
220
+ schema: z.preprocess(stripNulls, observeRequestSchema) as unknown as z.ZodType<ObserveRequest>,
221
+ handler: async (input, ctx) => ({
222
+ result: await ctx.service.observe(
223
+ {
224
+ sessionKey: input.sessionKey,
225
+ messages: input.messages.map((message) => ({
226
+ role: message.role,
227
+ content: message.content,
228
+ ...(message.parts ? { parts: message.parts } : {}),
229
+ ...(message.rawContent !== undefined ? { rawContent: message.rawContent } : {}),
230
+ ...(message.sourceFormat ? { sourceFormat: message.sourceFormat } : {}),
231
+ })),
232
+ skipExtraction: input.skipExtraction === true,
233
+ idempotencyKey: input.idempotencyKey,
234
+ namespace: input.namespace,
235
+ authenticatedPrincipal: ctx.authenticatedPrincipal,
236
+ cwd: input.cwd,
237
+ projectTag: input.projectTag,
238
+ ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),
239
+ },
240
+ ctx.hooks?.enforceWriteQuota ? { enforceWriteQuota: ctx.hooks.enforceWriteQuota } : undefined,
241
+ ),
242
+ }),
195
243
  });
196
244
  defineOperation({ name: "lcm_search", description: "Search LCM.", schema: strictSchema({ query: S.str, sessionKey: S.str, sessionPrefix: S.str, namespace: S.str, limit: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.lcmSearch({ query: defStr(input.query, ""), sessionKey: optStr(input.sessionKey), sessionPrefix: optStr(input.sessionPrefix), namespace: optStr(input.namespace), limit: optNum(input.limit), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });
197
245
  defineOperation({ name: "lcm_compaction_flush", description: "Flush LCM compaction.", schema: strictSchema({ sessionKey: S.str, namespace: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.lcmCompactionFlush({ sessionKey: optStr(input.sessionKey) ?? "", namespace: optStr(input.namespace), cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });
@@ -706,9 +706,20 @@ export function validateRequest<T = unknown>(
706
706
  },
707
707
  };
708
708
  }
709
- const result = schema.safeParse(body);
709
+ const result = schema.safeParse(stripNullsExceptCodingContext(body));
710
710
  if (result.success) {
711
711
  return { success: true, data: result.data as T };
712
712
  }
713
713
  return { success: false, error: formatZodError(result.error) };
714
714
  }
715
+
716
+ function stripNullsExceptCodingContext(data: unknown): unknown {
717
+ if (!data || typeof data !== "object" || Array.isArray(data)) return data;
718
+ const cleaned: Record<string, unknown> = {};
719
+ for (const [key, value] of Object.entries(data as Record<string, unknown>)) {
720
+ if (value === null && key !== "codingContext") continue;
721
+ cleaned[key] = value;
722
+ }
723
+ return cleaned;
724
+ }
725
+