@remnic/core 9.69.9 → 9.69.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 (577) hide show
  1. package/dist/access-admin-ops-surface.d.ts +15 -13
  2. package/dist/access-admin-ops-surface.js +41 -28
  3. package/dist/access-authorization-probe.d.ts +13 -11
  4. package/dist/access-authorization-probe.js +42 -29
  5. package/dist/access-boundary.d.ts +13 -11
  6. package/dist/access-boundary.js +41 -28
  7. package/dist/access-cli.js +101 -89
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-extraction-force-flush.d.ts +13 -11
  11. package/dist/access-extraction-force-flush.js +41 -28
  12. package/dist/access-health-types.d.ts +2 -1
  13. package/dist/access-http-lcm-compaction.d.ts +13 -11
  14. package/dist/access-http-lifecycle-flush.d.ts +13 -11
  15. package/dist/access-http-offline-stream.d.ts +13 -11
  16. package/dist/access-http-query.d.ts +3 -2
  17. package/dist/access-http-query.js +43 -30
  18. package/dist/access-http.d.ts +14 -12
  19. package/dist/access-http.js +62 -47
  20. package/dist/access-identity-continuity-surface.d.ts +10 -9
  21. package/dist/access-identity-continuity-surface.js +41 -28
  22. package/dist/access-lcm-surface.d.ts +13 -11
  23. package/dist/access-lcm-surface.js +41 -28
  24. package/dist/access-mcp-output-schemas.js +1 -1
  25. package/dist/access-mcp.d.ts +13 -11
  26. package/dist/access-mcp.js +53 -39
  27. package/dist/access-memory-search-fanout.d.ts +3 -2
  28. package/dist/{access-namespace-preflight-S8fhQcCo.d.ts → access-namespace-preflight-Cy0yPsaE.d.ts} +1 -1
  29. package/dist/access-namespace-preflight.d.ts +4 -3
  30. package/dist/access-namespace-preflight.js +41 -28
  31. package/dist/access-observe-write-surface.d.ts +15 -13
  32. package/dist/access-observe-write-surface.js +41 -28
  33. package/dist/access-offline-manifest.d.ts +10 -9
  34. package/dist/access-offline-manifest.js +3 -3
  35. package/dist/access-operations-batch.js +44 -31
  36. package/dist/access-operations.d.ts +19 -17
  37. package/dist/access-operations.js +49 -36
  38. package/dist/access-recall-concurrency.d.ts +13 -11
  39. package/dist/access-recall-concurrency.js +41 -28
  40. package/dist/access-recall-response.d.ts +13 -11
  41. package/dist/access-recall-response.js +41 -28
  42. package/dist/access-recall-surface.d.ts +13 -11
  43. package/dist/access-recall-surface.js +41 -28
  44. package/dist/access-schema.d.ts +107 -90
  45. package/dist/access-schema.js +5 -3
  46. package/dist/{access-service-LbwWl05g.d.ts → access-service-Cqfk3dD1.d.ts} +89 -72
  47. package/dist/access-service-helpers.d.ts +13 -11
  48. package/dist/access-service.d.ts +13 -11
  49. package/dist/access-service.js +41 -28
  50. package/dist/access-surface-catalog.d.ts +13 -11
  51. package/dist/access-surface-catalog.js +45 -30
  52. package/dist/access-surface-catalog.js.map +1 -1
  53. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  54. package/dist/action-confidence.d.ts +2 -1
  55. package/dist/active-memory-bridge.d.ts +2 -1
  56. package/dist/active-recall.d.ts +2 -1
  57. package/dist/active-recall.js +6 -5
  58. package/dist/active-recall.js.map +1 -1
  59. package/dist/adapters/index.js +4 -4
  60. package/dist/adapters/registry.js +2 -2
  61. package/dist/ambient-provenance.d.ts +2 -1
  62. package/dist/artifact-search.d.ts +2 -1
  63. package/dist/behavior-learner.d.ts +2 -1
  64. package/dist/behavior-signals.d.ts +2 -1
  65. package/dist/bootstrap.d.ts +10 -9
  66. package/dist/briefing-window.d.ts +3 -2
  67. package/dist/briefing.d.ts +3 -2
  68. package/dist/briefing.js +8 -8
  69. package/dist/buffer-surprise-report.d.ts +2 -1
  70. package/dist/buffer-turn-helpers.d.ts +2 -1
  71. package/dist/buffer.d.ts +3 -2
  72. package/dist/bulk-import/index.d.ts +4 -3
  73. package/dist/calibration.d.ts +2 -1
  74. package/dist/capabilities.d.ts +2 -1
  75. package/dist/{catalog-BmBXTtOs.d.ts → catalog-9X8WpZNO.d.ts} +1 -1
  76. package/dist/causal-behavior.d.ts +2 -1
  77. package/dist/causal-behavior.js +2 -2
  78. package/dist/causal-chain.js +2 -2
  79. package/dist/causal-consolidation.d.ts +2 -1
  80. package/dist/causal-consolidation.js +11 -11
  81. package/dist/causal-retrieval.js +2 -2
  82. package/dist/causal-trajectory-graph.d.ts +2 -1
  83. package/dist/causal-trajectory-graph.js +2 -2
  84. package/dist/causal-trajectory.js +1 -1
  85. package/dist/{chunk-DKZR56A3.js → chunk-227WJVPY.js} +2 -2
  86. package/dist/{chunk-RXS4SQ5S.js → chunk-2EHDPHMD.js} +2 -2
  87. package/dist/{chunk-ZPN6SSWA.js → chunk-2XJDAEAM.js} +2 -2
  88. package/dist/{chunk-J3JEW5CT.js → chunk-3GCK6ONU.js} +2 -2
  89. package/dist/{chunk-44HBCMOA.js → chunk-3ITTF7YH.js} +51 -51
  90. package/dist/{chunk-754GA2UE.js → chunk-3YKOFCKP.js} +11 -6
  91. package/dist/chunk-3YKOFCKP.js.map +1 -0
  92. package/dist/{chunk-GD7D7WP2.js → chunk-4UVDLNHQ.js} +2 -2
  93. package/dist/{chunk-IGUWU5BD.js → chunk-4WIKMOE3.js} +44 -22
  94. package/dist/chunk-4WIKMOE3.js.map +1 -0
  95. package/dist/{chunk-LVYO2HZJ.js → chunk-5HO3QBAD.js} +11 -6
  96. package/dist/chunk-5HO3QBAD.js.map +1 -0
  97. package/dist/{chunk-3QWF54M4.js → chunk-5P2KNFJZ.js} +149 -25
  98. package/dist/chunk-5P2KNFJZ.js.map +1 -0
  99. package/dist/{chunk-YVMTXBJJ.js → chunk-5YQ7RFSO.js} +2 -2
  100. package/dist/{chunk-4PJYD2L3.js → chunk-6TOWUN2R.js} +3 -3
  101. package/dist/{chunk-HINMCD7V.js → chunk-7NCUHD5U.js} +2 -2
  102. package/dist/{chunk-QHYSECIG.js → chunk-7ZMU4XQT.js} +2 -2
  103. package/dist/{chunk-GISV63M2.js → chunk-APZXA4WI.js} +2 -2
  104. package/dist/{chunk-2QSZNTDO.js → chunk-AU7Q3LSC.js} +4 -4
  105. package/dist/{chunk-G4MCAHMF.js → chunk-B75VCEX5.js} +5 -5
  106. package/dist/{chunk-DJZWNKFO.js → chunk-BE4Y6GK6.js} +2 -2
  107. package/dist/{chunk-E5WTGEWX.js → chunk-BEXFNGQ3.js} +3 -3
  108. package/dist/{chunk-SO73GYOZ.js → chunk-BFDOBESV.js} +2 -2
  109. package/dist/{chunk-OLT3YTDH.js → chunk-BIJAWZYW.js} +4 -4
  110. package/dist/{chunk-X5TGZAP2.js → chunk-BO4PWIJY.js} +3 -3
  111. package/dist/{chunk-JMAG7WZ7.js → chunk-BX6GW4KC.js} +2 -2
  112. package/dist/chunk-C5C7IJ4Q.js +27 -0
  113. package/dist/chunk-C5C7IJ4Q.js.map +1 -0
  114. package/dist/chunk-CC37E3QM.js +198 -0
  115. package/dist/chunk-CC37E3QM.js.map +1 -0
  116. package/dist/{chunk-X5PIDJ3L.js → chunk-DA4ZMCBU.js} +3 -3
  117. package/dist/{chunk-PEOFTEUC.js → chunk-DH3V7RCQ.js} +21 -13
  118. package/dist/chunk-DH3V7RCQ.js.map +1 -0
  119. package/dist/chunk-DXFG2VGN.js +50 -0
  120. package/dist/chunk-DXFG2VGN.js.map +1 -0
  121. package/dist/{chunk-4OFKZAJG.js → chunk-EAARGPWI.js} +2 -1
  122. package/dist/chunk-EAARGPWI.js.map +1 -0
  123. package/dist/{chunk-H6RSANGQ.js → chunk-ETZ7KKOS.js} +2 -2
  124. package/dist/{chunk-K4E3Y3ZX.js → chunk-G7VEQEMG.js} +2 -1
  125. package/dist/chunk-G7VEQEMG.js.map +1 -0
  126. package/dist/{chunk-SXQZMC7R.js → chunk-GR4C3FHT.js} +2 -2
  127. package/dist/{chunk-S6AHHQ6C.js → chunk-H5IIBGDM.js} +2 -2
  128. package/dist/{chunk-GFGQOZGG.js → chunk-HFRGCNFY.js} +10 -10
  129. package/dist/chunk-HRATODNO.js +28 -0
  130. package/dist/chunk-HRATODNO.js.map +1 -0
  131. package/dist/{chunk-MAG6M3B6.js → chunk-HTOWFFAI.js} +2 -2
  132. package/dist/chunk-HUSTM6PU.js +27 -0
  133. package/dist/chunk-HUSTM6PU.js.map +1 -0
  134. package/dist/{chunk-KAVQ5GYY.js → chunk-I4QAH4SY.js} +3 -3
  135. package/dist/{chunk-2MW3UQNX.js → chunk-I6DUKBUI.js} +2 -2
  136. package/dist/{chunk-VI637ILW.js → chunk-IN673LEP.js} +48 -15
  137. package/dist/chunk-IN673LEP.js.map +1 -0
  138. package/dist/{chunk-YHCBJULX.js → chunk-JGXMA6HL.js} +2 -2
  139. package/dist/{chunk-TA7UZZMW.js → chunk-JHTF22NQ.js} +2 -2
  140. package/dist/{chunk-ANN5VMHT.js → chunk-LDOQE34V.js} +2 -2
  141. package/dist/{chunk-MEW53VQJ.js → chunk-LDWIPYJ6.js} +7 -7
  142. package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
  143. package/dist/{chunk-H3HOC6UT.js → chunk-LF6SHWVV.js} +2 -2
  144. package/dist/{chunk-QGUFN25Q.js → chunk-LJAP4KSW.js} +2 -2
  145. package/dist/{chunk-JAU4MRKB.js → chunk-LJNLLNEM.js} +2 -2
  146. package/dist/{chunk-6C57JBJ3.js → chunk-LUDXSSTW.js} +2 -2
  147. package/dist/{chunk-YJPFTF57.js → chunk-LWBSEYW3.js} +6 -6
  148. package/dist/chunk-M6RORUO5.js +59 -0
  149. package/dist/chunk-M6RORUO5.js.map +1 -0
  150. package/dist/{chunk-PRK4WTPU.js → chunk-M7DGN6JZ.js} +3 -3
  151. package/dist/{chunk-EN75MUTO.js → chunk-MNH2GM4O.js} +5 -5
  152. package/dist/{chunk-LK4TOYPU.js → chunk-NF3NMAG7.js} +2 -2
  153. package/dist/{chunk-M5UJJUON.js → chunk-NHLEFBE2.js} +10 -2
  154. package/dist/chunk-NHLEFBE2.js.map +1 -0
  155. package/dist/chunk-NN5CQTAJ.js +42 -0
  156. package/dist/chunk-NN5CQTAJ.js.map +1 -0
  157. package/dist/{chunk-VGTXHTWU.js → chunk-OASGWNYL.js} +2 -2
  158. package/dist/chunk-OEDW4ER7.js +62 -0
  159. package/dist/chunk-OEDW4ER7.js.map +1 -0
  160. package/dist/{chunk-C2JCVZWX.js → chunk-OLBZ2WGG.js} +2 -2
  161. package/dist/{chunk-Z3SQEEB6.js → chunk-OUKBMQ2O.js} +2 -2
  162. package/dist/{chunk-XXW32OL7.js → chunk-OYV6RKPM.js} +1 -1
  163. package/dist/chunk-OYV6RKPM.js.map +1 -0
  164. package/dist/{chunk-2Z3DG5CQ.js → chunk-P6GKRT2H.js} +1 -1
  165. package/dist/{chunk-A3WMMQAH.js → chunk-P7LVYPIX.js} +3 -3
  166. package/dist/{chunk-26JWBSWD.js → chunk-PGCZLHRB.js} +11 -3
  167. package/dist/chunk-PGCZLHRB.js.map +1 -0
  168. package/dist/{chunk-Y3WMJAZ3.js → chunk-QRDSXR3V.js} +2 -2
  169. package/dist/{chunk-NDE7CH6C.js → chunk-QUVWFZOU.js} +2 -2
  170. package/dist/{chunk-M5GBTETG.js → chunk-R7FXPG4T.js} +2 -2
  171. package/dist/chunk-RF2SMMPP.js +37 -0
  172. package/dist/chunk-RF2SMMPP.js.map +1 -0
  173. package/dist/{chunk-X66BHMAU.js → chunk-RJ57OOCD.js} +2 -2
  174. package/dist/chunk-S5G2LAL7.js +354 -0
  175. package/dist/chunk-S5G2LAL7.js.map +1 -0
  176. package/dist/{chunk-VOPOPTZ7.js → chunk-TRLCMLX7.js} +2 -2
  177. package/dist/{chunk-KZMFU7YL.js → chunk-V3HUBF7T.js} +2 -2
  178. package/dist/{chunk-KLL5SPER.js → chunk-VHAKBUBD.js} +2 -2
  179. package/dist/{chunk-WF2WCZCR.js → chunk-VYD63IFH.js} +3 -3
  180. package/dist/chunk-VZIAVM72.js +49 -0
  181. package/dist/chunk-VZIAVM72.js.map +1 -0
  182. package/dist/chunk-WTWQA7BB.js +28 -0
  183. package/dist/chunk-WTWQA7BB.js.map +1 -0
  184. package/dist/{chunk-J55NAXDH.js → chunk-X4FIZAVQ.js} +82 -40
  185. package/dist/chunk-X4FIZAVQ.js.map +1 -0
  186. package/dist/{chunk-3FXXFLVK.js → chunk-XFPHV65N.js} +2 -2
  187. package/dist/{chunk-JCUG7AXZ.js → chunk-XJJYSX6F.js} +4 -4
  188. package/dist/{chunk-NAZROP6I.js → chunk-XMIAU4CO.js} +2 -2
  189. package/dist/{chunk-LHGIBXVX.js → chunk-XQGFIAG7.js} +2 -2
  190. package/dist/{chunk-5TBO7CDR.js → chunk-YSSAGB2O.js} +4 -23
  191. package/dist/chunk-YSSAGB2O.js.map +1 -0
  192. package/dist/{chunk-IWO4HEOL.js → chunk-YWN3GYI2.js} +2 -2
  193. package/dist/{chunk-IIO4C3YL.js → chunk-Z33VUMKY.js} +3 -3
  194. package/dist/{cli-Bvy4jdBu.d.ts → cli-Dk-lM_tI.d.ts} +5 -5
  195. package/dist/cli.d.ts +15 -13
  196. package/dist/cli.js +80 -68
  197. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  198. package/dist/coding/export-okf-codegraph.js +8 -8
  199. package/dist/coding/pre-action-gate.d.ts +2 -1
  200. package/dist/coding/pre-action-gate.js +2 -2
  201. package/dist/compounding/engine.d.ts +3 -2
  202. package/dist/compounding/engine.js +10 -9
  203. package/dist/compounding/preference-consolidator.d.ts +2 -1
  204. package/dist/compression-optimizer.d.ts +2 -1
  205. package/dist/config.d.ts +2 -1
  206. package/dist/config.js +6 -5
  207. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  208. package/dist/connectors/codex-materialize-runner.js +8 -8
  209. package/dist/connectors/codex-materialize.d.ts +2 -1
  210. package/dist/connectors/index.d.ts +2 -1
  211. package/dist/connectors/index.js +10 -9
  212. package/dist/consolidation-provenance-check.d.ts +3 -2
  213. package/dist/consolidation-undo.d.ts +3 -2
  214. package/dist/contradiction/index.d.ts +4 -3
  215. package/dist/converge-config.d.ts +2 -1
  216. package/dist/convergence-refresh.d.ts +3 -2
  217. package/dist/convergence-refresh.js +10 -10
  218. package/dist/conversation-index/backend.d.ts +2 -1
  219. package/dist/conversation-index/backend.js +2 -2
  220. package/dist/conversation-index/chunker.d.ts +2 -1
  221. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  222. package/dist/conversation-index/indexer.d.ts +2 -1
  223. package/dist/conversation-index/search.d.ts +2 -1
  224. package/dist/corpus-watermark.d.ts +2 -1
  225. package/dist/corpus-watermark.js +10 -10
  226. package/dist/cross-lingual-recall.d.ts +2 -1
  227. package/dist/day-summary.d.ts +2 -1
  228. package/dist/deep-recall-config.d.ts +32 -0
  229. package/dist/deep-recall-config.js +12 -0
  230. package/dist/deep-recall-http-glue.d.ts +170 -0
  231. package/dist/deep-recall-http-glue.js +31 -0
  232. package/dist/deep-recall-http-glue.js.map +1 -0
  233. package/dist/deep-recall-mcp-tools.d.ts +144 -0
  234. package/dist/deep-recall-mcp-tools.js +8 -0
  235. package/dist/deep-recall-mcp-tools.js.map +1 -0
  236. package/dist/deep-recall-policy-llm.d.ts +37 -0
  237. package/dist/deep-recall-policy-llm.js +19 -0
  238. package/dist/deep-recall-policy-llm.js.map +1 -0
  239. package/dist/deep-recall-renderer.d.ts +16 -0
  240. package/dist/deep-recall-renderer.js +8 -0
  241. package/dist/deep-recall-renderer.js.map +1 -0
  242. package/dist/deep-recall-seeds.d.ts +83 -0
  243. package/dist/deep-recall-seeds.js +8 -0
  244. package/dist/deep-recall-seeds.js.map +1 -0
  245. package/dist/deep-recall.d.ts +97 -0
  246. package/dist/deep-recall.js +13 -0
  247. package/dist/deep-recall.js.map +1 -0
  248. package/dist/delinearize.d.ts +2 -1
  249. package/dist/dependency-propagation-config.d.ts +2 -1
  250. package/dist/{dependency-propagation-delivery-BC3bCEet.d.ts → dependency-propagation-delivery-BZGUecZf.d.ts} +1 -1
  251. package/dist/direct-answer-wiring.d.ts +2 -1
  252. package/dist/direct-answer.d.ts +2 -1
  253. package/dist/embedding-fallback.d.ts +2 -1
  254. package/dist/enrichment/index.d.ts +2 -1
  255. package/dist/entity-origin-fields.d.ts +2 -1
  256. package/dist/entity-retrieval.d.ts +3 -2
  257. package/dist/entity-retrieval.js +8 -8
  258. package/dist/entity-schema.d.ts +2 -1
  259. package/dist/episodic-context.d.ts +2 -1
  260. package/dist/eval-trajectory-contracts.d.ts +2 -1
  261. package/dist/eval-trajectory-store.d.ts +2 -1
  262. package/dist/eval-trajectory.d.ts +2 -1
  263. package/dist/explicit-capture.d.ts +10 -9
  264. package/dist/external-wiki-access.d.ts +13 -11
  265. package/dist/external-wiki-access.js +42 -29
  266. package/dist/external-wiki-collection-registration.d.ts +2 -1
  267. package/dist/external-wiki-collection.d.ts +2 -1
  268. package/dist/external-wiki-mcp-tools.d.ts +13 -11
  269. package/dist/extraction-error-classification.d.ts +2 -1
  270. package/dist/extraction-faithfulness.d.ts +2 -1
  271. package/dist/extraction-judge-telemetry.d.ts +2 -1
  272. package/dist/extraction-judge-training.d.ts +2 -1
  273. package/dist/extraction-judge.d.ts +2 -1
  274. package/dist/extraction-liveness.d.ts +2 -1
  275. package/dist/extraction-normalization.d.ts +2 -1
  276. package/dist/extraction-prompt.d.ts +2 -1
  277. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  278. package/dist/extraction-source-grounding.d.ts +2 -1
  279. package/dist/extraction.d.ts +2 -1
  280. package/dist/extraction.js +14 -13
  281. package/dist/fallback-llm.d.ts +2 -1
  282. package/dist/graph-dashboard-diff.d.ts +2 -1
  283. package/dist/graph-dashboard-key.d.ts +2 -1
  284. package/dist/graph-dashboard-parser.d.ts +2 -1
  285. package/dist/{graph-edge-decay-DGTBFALQ.js → graph-edge-decay-FXGELBFA.js} +4 -4
  286. package/dist/graph-edge-decay-FXGELBFA.js.map +1 -0
  287. package/dist/graph-edge-reinforcement.d.ts +2 -1
  288. package/dist/graph-path-reconstruction.d.ts +2 -1
  289. package/dist/graph-path-scoring.d.ts +2 -1
  290. package/dist/graph-snapshot.d.ts +2 -1
  291. package/dist/graph-snapshot.js +3 -3
  292. package/dist/graph.d.ts +2 -1
  293. package/dist/graph.js +2 -2
  294. package/dist/harmonic-construction.js +3 -3
  295. package/dist/harmonic-retrieval.d.ts +38 -2
  296. package/dist/harmonic-retrieval.js +12 -3
  297. package/dist/importance.d.ts +2 -1
  298. package/dist/importers/index.d.ts +2 -1
  299. package/dist/in-flight-reads.d.ts +2 -1
  300. package/dist/{index-D4hS9uxK.d.ts → index-B4iTvT-w.d.ts} +2 -2
  301. package/dist/index.d.ts +701 -699
  302. package/dist/index.js +118 -106
  303. package/dist/intent.d.ts +2 -1
  304. package/dist/lcm/engine.d.ts +2 -1
  305. package/dist/lcm/index.d.ts +2 -1
  306. package/dist/lcm/tools.d.ts +2 -1
  307. package/dist/lifecycle.d.ts +2 -1
  308. package/dist/live-connectors-runner.d.ts +2 -1
  309. package/dist/local-llm.d.ts +2 -1
  310. package/dist/local-model-endpoint.d.ts +2 -1
  311. package/dist/location/index.d.ts +4 -3
  312. package/dist/location/index.js +10 -10
  313. package/dist/maintenance/memory-governance.d.ts +2 -1
  314. package/dist/maintenance/memory-governance.js +8 -8
  315. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  316. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
  317. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  318. package/dist/maintenance/rebuild-memory-projection.js +9 -9
  319. package/dist/{maintenance-BRcc3Hx8.d.ts → maintenance-BBpNqEeJ.d.ts} +3 -3
  320. package/dist/mcp-memory-inspector-app.d.ts +13 -11
  321. package/dist/mcp-read-only-tools.js +1 -1
  322. package/dist/memory-action-policy.d.ts +2 -1
  323. package/dist/memory-cache.d.ts +2 -1
  324. package/dist/memory-controller.d.ts +2 -1
  325. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  326. package/dist/memory-projection-store.d.ts +2 -1
  327. package/dist/memory-provenance.d.ts +2 -1
  328. package/dist/memory-snapshot.d.ts +2 -1
  329. package/dist/memory-subject-cli.d.ts +13 -11
  330. package/dist/memory-subject.d.ts +13 -11
  331. package/dist/memory-worth-outcomes.d.ts +3 -2
  332. package/dist/models-json.d.ts +2 -1
  333. package/dist/namespaces/migrate.d.ts +4 -3
  334. package/dist/namespaces/migrate.js +9 -9
  335. package/dist/namespaces/principal.d.ts +2 -1
  336. package/dist/namespaces/search.d.ts +2 -1
  337. package/dist/namespaces/search.js +4 -4
  338. package/dist/namespaces/storage.d.ts +4 -3
  339. package/dist/namespaces/storage.js +8 -8
  340. package/dist/native-knowledge.d.ts +2 -1
  341. package/dist/offline-sync-impression-drain.d.ts +2 -1
  342. package/dist/offline-sync.js +2 -2
  343. package/dist/operator-doctor-corpus.d.ts +2 -1
  344. package/dist/operator-doctor-corpus.js +11 -11
  345. package/dist/operator-doctor-replica.d.ts +2 -1
  346. package/dist/operator-toolkit.d.ts +4 -3
  347. package/dist/operator-toolkit.js +24 -23
  348. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  349. package/dist/orchestration/maintenance.d.ts +5 -4
  350. package/dist/orchestration/maintenance.js +16 -16
  351. package/dist/{orchestrator-Btq9lzAN.d.ts → orchestrator-DglY1H0w.d.ts} +8 -8
  352. package/dist/orchestrator.d.ts +10 -9
  353. package/dist/orchestrator.js +101 -89
  354. package/dist/patterns-cli.d.ts +2 -1
  355. package/dist/{pipeline-CZoNdFb5.d.ts → pipeline-C7qRsy6g.d.ts} +1 -1
  356. package/dist/policy-runtime.d.ts +2 -1
  357. package/dist/proactive-contention.d.ts +2 -1
  358. package/dist/provenance.d.ts +2 -1
  359. package/dist/{public-http-2MyshWxl.d.ts → public-http-CPpCsi35.d.ts} +1 -1
  360. package/dist/{qmd-VIjSCKIE.d.ts → qmd-YRLTa3AE.d.ts} +1 -1
  361. package/dist/qmd-preflight.d.ts +3 -2
  362. package/dist/qmd-recall-cache.d.ts +2 -1
  363. package/dist/qmd.d.ts +3 -2
  364. package/dist/recall-concurrency-config.d.ts +2 -1
  365. package/dist/recall-deep-expand-select.js +4 -44
  366. package/dist/recall-deep-expand-select.js.map +1 -1
  367. package/dist/recall-deep-frontier.js +4 -23
  368. package/dist/recall-deep-frontier.js.map +1 -1
  369. package/dist/recall-deep-rewrite.js +4 -23
  370. package/dist/recall-deep-rewrite.js.map +1 -1
  371. package/dist/recall-disclosure-escalation.d.ts +2 -1
  372. package/dist/recall-explain-renderer.d.ts +2 -1
  373. package/dist/recall-explain-renderer.js +3 -3
  374. package/dist/recall-memory-map.d.ts +2 -1
  375. package/dist/recall-navigate-access.d.ts +2 -1
  376. package/dist/recall-navigate-access.js +2 -2
  377. package/dist/recall-navigate-disclosure.d.ts +2 -1
  378. package/dist/recall-navigate-disclosure.js +1 -1
  379. package/dist/recall-navigate.d.ts +2 -1
  380. package/dist/recall-navigate.js +2 -2
  381. package/dist/recall-planner-llm.d.ts +2 -1
  382. package/dist/recall-state.d.ts +2 -1
  383. package/dist/recall-tag-filter.d.ts +2 -1
  384. package/dist/recall-timings.d.ts +2 -1
  385. package/dist/recall-xray-cli.d.ts +2 -1
  386. package/dist/recall-xray-cli.js +4 -4
  387. package/dist/recall-xray-renderer.d.ts +2 -1
  388. package/dist/recall-xray-renderer.js +3 -3
  389. package/dist/recall-xray.d.ts +2 -1
  390. package/dist/recall-xray.js +2 -2
  391. package/dist/reconcile/cursor.d.ts +2 -1
  392. package/dist/reconcile/manifest.d.ts +2 -1
  393. package/dist/reconcile/plan.d.ts +2 -1
  394. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  395. package/dist/replay/normalizers/claude.d.ts +2 -1
  396. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  397. package/dist/replay/normalizers/shared.d.ts +2 -1
  398. package/dist/replay/runner.d.ts +2 -1
  399. package/dist/replay/types.d.ts +2 -1
  400. package/dist/replica-divergence.d.ts +2 -1
  401. package/dist/replica-peers-config.d.ts +2 -1
  402. package/dist/resolve-auth-token.d.ts +2 -1
  403. package/dist/resume-bundles.js +7 -6
  404. package/dist/retrieval-agents.d.ts +3 -2
  405. package/dist/retrieval-tiers.d.ts +2 -1
  406. package/dist/routing/engine.d.ts +2 -1
  407. package/dist/routing/store.d.ts +2 -1
  408. package/dist/runtime/http-transport.d.ts +4 -0
  409. package/dist/runtime/http-transport.js +10 -0
  410. package/dist/runtime/http-transport.js.map +1 -0
  411. package/dist/salvage-envelope.d.ts +2 -1
  412. package/dist/schemas.d.ts +176 -176
  413. package/dist/{scope-profiles-DqbxQXIS.d.ts → scope-profiles-BVvqVzJX.d.ts} +1 -1
  414. package/dist/search/embed-helper.d.ts +2 -1
  415. package/dist/search/factory.d.ts +2 -1
  416. package/dist/search/factory.js +3 -3
  417. package/dist/search/index.d.ts +2 -1
  418. package/dist/search/index.js +3 -3
  419. package/dist/search/lancedb-backend.d.ts +2 -1
  420. package/dist/search/meilisearch-backend.d.ts +2 -1
  421. package/dist/search/noop-backend.d.ts +2 -1
  422. package/dist/search/orama-backend.d.ts +2 -1
  423. package/dist/search/port.d.ts +2 -1
  424. package/dist/search/remote-backend.d.ts +2 -1
  425. package/dist/{semantic-consolidation-DW3rEUoW.d.ts → semantic-consolidation-BzCI6Kuu.d.ts} +1 -1
  426. package/dist/semantic-consolidation.d.ts +3 -2
  427. package/dist/semantic-consolidation.js +9 -9
  428. package/dist/semantic-rule-promotion.js +8 -8
  429. package/dist/semantic-rule-verifier.d.ts +2 -1
  430. package/dist/semantic-rule-verifier.js +8 -8
  431. package/dist/{service-B2vJU_Bx.d.ts → service-DQ3Gscy5.d.ts} +2 -2
  432. package/dist/session-observer-bands.d.ts +2 -1
  433. package/dist/session-observer-state.d.ts +2 -1
  434. package/dist/shared-context/manager.d.ts +43 -7
  435. package/dist/shared-context/manager.js +2 -1
  436. package/dist/signal.d.ts +2 -1
  437. package/dist/source-agent-qualifier.d.ts +2 -1
  438. package/dist/source-agent-qualifier.js +12 -11
  439. package/dist/standup/build.js +8 -8
  440. package/dist/{storage-6fn7BPmb.d.ts → storage-DmTbQdD0.d.ts} +1 -1
  441. package/dist/storage.d.ts +3 -2
  442. package/dist/storage.js +7 -7
  443. package/dist/subject-config.d.ts +2 -1
  444. package/dist/summarizer.d.ts +2 -1
  445. package/dist/summary-snapshot.d.ts +2 -1
  446. package/dist/support-passport/index.d.ts +16 -14
  447. package/dist/support-passport/index.js +44 -31
  448. package/dist/temporal-supersession.d.ts +3 -2
  449. package/dist/temporal-timeline-recall.d.ts +2 -1
  450. package/dist/temporal-validity.d.ts +2 -1
  451. package/dist/threading.d.ts +2 -1
  452. package/dist/tier-migration.d.ts +3 -2
  453. package/dist/tier-routing.d.ts +2 -1
  454. package/dist/topics.d.ts +2 -1
  455. package/dist/transcript.d.ts +2 -1
  456. package/dist/transfer/export-okf.d.ts +2 -1
  457. package/dist/transfer/export-okf.js +9 -9
  458. package/dist/transfer/types.d.ts +78 -78
  459. package/dist/trust-score-stage.d.ts +2 -1
  460. package/dist/trust-score.d.ts +2 -1
  461. package/dist/{types-eM7QIcX2.d.ts → types-CLRTESSD.d.ts} +3 -1
  462. package/dist/types.d.ts +2 -1
  463. package/dist/types.js +1 -1
  464. package/dist/utility-runtime.d.ts +2 -1
  465. package/dist/verified-recall.js +8 -8
  466. package/dist/who-knows-cli.d.ts +13 -11
  467. package/dist/who-knows-cli.js +9 -9
  468. package/dist/who-knows.d.ts +13 -11
  469. package/dist/who-knows.js +8 -8
  470. package/dist/write-envelope.d.ts +2 -1
  471. package/package.json +12 -2
  472. package/src/access-boundary.ts +1 -0
  473. package/src/access-http.ts +5 -5
  474. package/src/access-mcp-output-schemas.ts +1 -0
  475. package/src/access-mcp.ts +3 -3
  476. package/src/access-operations-batch.ts +3 -1
  477. package/src/access-schema.ts +12 -0
  478. package/src/access-service.ts +162 -5
  479. package/src/access-surface-catalog.ts +2 -0
  480. package/src/cli/deep-recall-commands.ts +60 -0
  481. package/src/cli.ts +2 -2
  482. package/src/config.test.ts +19 -0
  483. package/src/config.ts +7 -0
  484. package/src/deep-recall-config.ts +83 -0
  485. package/src/deep-recall-http-glue.ts +75 -0
  486. package/src/deep-recall-mcp-tools.ts +33 -0
  487. package/src/deep-recall-policy-llm.ts +65 -0
  488. package/src/deep-recall-renderer.ts +41 -0
  489. package/src/deep-recall-seeds.ts +134 -0
  490. package/src/deep-recall-surface.test.ts +902 -0
  491. package/src/deep-recall.test.ts +348 -0
  492. package/src/deep-recall.ts +572 -0
  493. package/src/harmonic-retrieval.ts +78 -25
  494. package/src/mcp-read-only-tools.ts +1 -0
  495. package/src/shared-context/envelope-at.test.ts +23 -0
  496. package/src/shared-context/envelope-at.ts +12 -6
  497. package/src/shared-context/envelope-io.ts +184 -0
  498. package/src/shared-context/envelope-wiring.test.ts +193 -0
  499. package/src/shared-context/governance.ts +28 -9
  500. package/src/shared-context/iso-instant.ts +43 -0
  501. package/src/shared-context/manager.ts +74 -15
  502. package/src/shared-context/provenance.ts +3 -26
  503. package/src/shared-context/write-origin.test.ts +145 -0
  504. package/src/types.ts +3 -1
  505. package/dist/chunk-26JWBSWD.js.map +0 -1
  506. package/dist/chunk-3QWF54M4.js.map +0 -1
  507. package/dist/chunk-4OFKZAJG.js.map +0 -1
  508. package/dist/chunk-5TBO7CDR.js.map +0 -1
  509. package/dist/chunk-754GA2UE.js.map +0 -1
  510. package/dist/chunk-IGUWU5BD.js.map +0 -1
  511. package/dist/chunk-J55NAXDH.js.map +0 -1
  512. package/dist/chunk-K4E3Y3ZX.js.map +0 -1
  513. package/dist/chunk-LVYO2HZJ.js.map +0 -1
  514. package/dist/chunk-M5UJJUON.js.map +0 -1
  515. package/dist/chunk-PEOFTEUC.js.map +0 -1
  516. package/dist/chunk-VI637ILW.js.map +0 -1
  517. package/dist/chunk-XXW32OL7.js.map +0 -1
  518. /package/dist/{chunk-DKZR56A3.js.map → chunk-227WJVPY.js.map} +0 -0
  519. /package/dist/{chunk-RXS4SQ5S.js.map → chunk-2EHDPHMD.js.map} +0 -0
  520. /package/dist/{chunk-ZPN6SSWA.js.map → chunk-2XJDAEAM.js.map} +0 -0
  521. /package/dist/{chunk-J3JEW5CT.js.map → chunk-3GCK6ONU.js.map} +0 -0
  522. /package/dist/{chunk-44HBCMOA.js.map → chunk-3ITTF7YH.js.map} +0 -0
  523. /package/dist/{chunk-GD7D7WP2.js.map → chunk-4UVDLNHQ.js.map} +0 -0
  524. /package/dist/{chunk-YVMTXBJJ.js.map → chunk-5YQ7RFSO.js.map} +0 -0
  525. /package/dist/{chunk-4PJYD2L3.js.map → chunk-6TOWUN2R.js.map} +0 -0
  526. /package/dist/{chunk-HINMCD7V.js.map → chunk-7NCUHD5U.js.map} +0 -0
  527. /package/dist/{chunk-QHYSECIG.js.map → chunk-7ZMU4XQT.js.map} +0 -0
  528. /package/dist/{chunk-GISV63M2.js.map → chunk-APZXA4WI.js.map} +0 -0
  529. /package/dist/{chunk-2QSZNTDO.js.map → chunk-AU7Q3LSC.js.map} +0 -0
  530. /package/dist/{chunk-G4MCAHMF.js.map → chunk-B75VCEX5.js.map} +0 -0
  531. /package/dist/{chunk-DJZWNKFO.js.map → chunk-BE4Y6GK6.js.map} +0 -0
  532. /package/dist/{chunk-E5WTGEWX.js.map → chunk-BEXFNGQ3.js.map} +0 -0
  533. /package/dist/{chunk-SO73GYOZ.js.map → chunk-BFDOBESV.js.map} +0 -0
  534. /package/dist/{chunk-OLT3YTDH.js.map → chunk-BIJAWZYW.js.map} +0 -0
  535. /package/dist/{chunk-X5TGZAP2.js.map → chunk-BO4PWIJY.js.map} +0 -0
  536. /package/dist/{chunk-JMAG7WZ7.js.map → chunk-BX6GW4KC.js.map} +0 -0
  537. /package/dist/{chunk-X5PIDJ3L.js.map → chunk-DA4ZMCBU.js.map} +0 -0
  538. /package/dist/{chunk-H6RSANGQ.js.map → chunk-ETZ7KKOS.js.map} +0 -0
  539. /package/dist/{chunk-SXQZMC7R.js.map → chunk-GR4C3FHT.js.map} +0 -0
  540. /package/dist/{chunk-S6AHHQ6C.js.map → chunk-H5IIBGDM.js.map} +0 -0
  541. /package/dist/{chunk-GFGQOZGG.js.map → chunk-HFRGCNFY.js.map} +0 -0
  542. /package/dist/{chunk-MAG6M3B6.js.map → chunk-HTOWFFAI.js.map} +0 -0
  543. /package/dist/{chunk-KAVQ5GYY.js.map → chunk-I4QAH4SY.js.map} +0 -0
  544. /package/dist/{chunk-2MW3UQNX.js.map → chunk-I6DUKBUI.js.map} +0 -0
  545. /package/dist/{chunk-YHCBJULX.js.map → chunk-JGXMA6HL.js.map} +0 -0
  546. /package/dist/{chunk-TA7UZZMW.js.map → chunk-JHTF22NQ.js.map} +0 -0
  547. /package/dist/{chunk-ANN5VMHT.js.map → chunk-LDOQE34V.js.map} +0 -0
  548. /package/dist/{chunk-MEW53VQJ.js.map → chunk-LDWIPYJ6.js.map} +0 -0
  549. /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
  550. /package/dist/{chunk-H3HOC6UT.js.map → chunk-LF6SHWVV.js.map} +0 -0
  551. /package/dist/{chunk-QGUFN25Q.js.map → chunk-LJAP4KSW.js.map} +0 -0
  552. /package/dist/{chunk-JAU4MRKB.js.map → chunk-LJNLLNEM.js.map} +0 -0
  553. /package/dist/{chunk-6C57JBJ3.js.map → chunk-LUDXSSTW.js.map} +0 -0
  554. /package/dist/{chunk-YJPFTF57.js.map → chunk-LWBSEYW3.js.map} +0 -0
  555. /package/dist/{chunk-PRK4WTPU.js.map → chunk-M7DGN6JZ.js.map} +0 -0
  556. /package/dist/{chunk-EN75MUTO.js.map → chunk-MNH2GM4O.js.map} +0 -0
  557. /package/dist/{chunk-LK4TOYPU.js.map → chunk-NF3NMAG7.js.map} +0 -0
  558. /package/dist/{chunk-VGTXHTWU.js.map → chunk-OASGWNYL.js.map} +0 -0
  559. /package/dist/{chunk-C2JCVZWX.js.map → chunk-OLBZ2WGG.js.map} +0 -0
  560. /package/dist/{chunk-Z3SQEEB6.js.map → chunk-OUKBMQ2O.js.map} +0 -0
  561. /package/dist/{chunk-2Z3DG5CQ.js.map → chunk-P6GKRT2H.js.map} +0 -0
  562. /package/dist/{chunk-A3WMMQAH.js.map → chunk-P7LVYPIX.js.map} +0 -0
  563. /package/dist/{chunk-Y3WMJAZ3.js.map → chunk-QRDSXR3V.js.map} +0 -0
  564. /package/dist/{chunk-NDE7CH6C.js.map → chunk-QUVWFZOU.js.map} +0 -0
  565. /package/dist/{chunk-M5GBTETG.js.map → chunk-R7FXPG4T.js.map} +0 -0
  566. /package/dist/{chunk-X66BHMAU.js.map → chunk-RJ57OOCD.js.map} +0 -0
  567. /package/dist/{chunk-VOPOPTZ7.js.map → chunk-TRLCMLX7.js.map} +0 -0
  568. /package/dist/{chunk-KZMFU7YL.js.map → chunk-V3HUBF7T.js.map} +0 -0
  569. /package/dist/{chunk-KLL5SPER.js.map → chunk-VHAKBUBD.js.map} +0 -0
  570. /package/dist/{chunk-WF2WCZCR.js.map → chunk-VYD63IFH.js.map} +0 -0
  571. /package/dist/{chunk-3FXXFLVK.js.map → chunk-XFPHV65N.js.map} +0 -0
  572. /package/dist/{chunk-JCUG7AXZ.js.map → chunk-XJJYSX6F.js.map} +0 -0
  573. /package/dist/{chunk-NAZROP6I.js.map → chunk-XMIAU4CO.js.map} +0 -0
  574. /package/dist/{chunk-LHGIBXVX.js.map → chunk-XQGFIAG7.js.map} +0 -0
  575. /package/dist/{chunk-IWO4HEOL.js.map → chunk-YWN3GYI2.js.map} +0 -0
  576. /package/dist/{chunk-IIO4C3YL.js.map → chunk-Z33VUMKY.js.map} +0 -0
  577. /package/dist/{graph-edge-decay-DGTBFALQ.js.map → deep-recall-config.js.map} +0 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Strict ISO-8601 instant validation for shared-context envelopes
3
+ * (issue #1957 review round 3).
4
+ *
5
+ * `Date.parse` is permissive: under the supported Node runtime it reads
6
+ * `"2026-02-30"` as March 2 and `"1"` as January 1 2001. A caller-supplied
7
+ * expiry would therefore be silently reinterpreted into a governance deadline
8
+ * the caller never asked for. Validate the ISO shape AND the calendar
9
+ * components against the exact input, and reject rather than normalize.
10
+ *
11
+ * Extracted from `provenance.ts` so the envelope write path and the
12
+ * provenance stamp share one validator instead of two copies.
13
+ */
14
+
15
+ // Linear ISO instant. No nested quantifiers.
16
+ const ISO_INSTANT =
17
+ /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
18
+
19
+ /**
20
+ * True only for a calendar-valid ISO-8601 instant carrying an explicit zone.
21
+ * Non-strings and non-finite parses are rejected explicitly, never coerced.
22
+ */
23
+ export function isStrictIsoInstant(value: unknown): boolean {
24
+ if (typeof value !== "string") return false;
25
+ const match = ISO_INSTANT.exec(value);
26
+ if (!match) return false;
27
+ const year = Number(match[1]);
28
+ const month = Number(match[2]);
29
+ const day = Number(match[3]);
30
+ const hour = Number(match[4]);
31
+ const minute = Number(match[5]);
32
+ const second = Number(match[6]);
33
+ const utc = new Date(Date.UTC(year, month - 1, day, hour, minute, second));
34
+ return (
35
+ Number.isFinite(Date.parse(value)) &&
36
+ utc.getUTCFullYear() === year &&
37
+ utc.getUTCMonth() === month - 1 &&
38
+ utc.getUTCDate() === day &&
39
+ utc.getUTCHours() === hour &&
40
+ utc.getUTCMinutes() === minute &&
41
+ utc.getUTCSeconds() === second
42
+ );
43
+ }
@@ -7,6 +7,14 @@ import type { PluginConfig } from "../types.js";
7
7
  import { expandTildePath } from "../utils/path.js";
8
8
  import { resolveConversationContextCapabilities } from "../capabilities.js";
9
9
  import { throwIfAborted } from "../abort-error.js";
10
+ import {
11
+ composeWriteEnvelope,
12
+ envelopeFromScalars,
13
+ envelopeToFrontmatterLines,
14
+ resolveReadAuthority,
15
+ resolveWriteOrigin,
16
+ } from "./envelope-io.js";
17
+ import type { SharedAuthority, SharedEnvelope } from "./governance.js";
10
18
 
11
19
  export const SharedFeedbackEntrySchema = z.object({
12
20
  agent: z.string().min(1),
@@ -311,6 +319,10 @@ interface SharedCrossSignalSource {
311
319
  path: string;
312
320
  title: string;
313
321
  topics: string[];
322
+ /** Resolved least-privilege authority from the item's envelope (issue #1957). */
323
+ authority: SharedAuthority;
324
+ /** Envelope origin agent id; legacy items fall back to the agent field. */
325
+ sharedBy: string;
314
326
  }
315
327
 
316
328
  interface SharedCrossSignalOverlap {
@@ -436,6 +448,7 @@ export class SharedContextManager {
436
448
  private readonly feedbackDir: string;
437
449
  private readonly feedbackInboxPath: string;
438
450
  private readonly crossSignalsDir: string;
451
+ private readonly allowBindingAuthority: boolean;
439
452
  private readonly dailySynthesisChains = new Map<string, Promise<void>>();
440
453
 
441
454
  constructor(private readonly config: PluginConfig) {
@@ -449,6 +462,7 @@ export class SharedContextManager {
449
462
  this.feedbackDir = path.join(base, "feedback");
450
463
  this.feedbackInboxPath = path.join(this.feedbackDir, "inbox.jsonl");
451
464
  this.crossSignalsDir = path.join(base, "cross-signals");
465
+ this.allowBindingAuthority = config.sharedContextAllowBindingAuthority === true;
452
466
  }
453
467
 
454
468
  async ensureStructure(): Promise<void> {
@@ -553,25 +567,61 @@ export class SharedContextManager {
553
567
  title: string;
554
568
  content: string;
555
569
  createdAt?: Date;
570
+ /** Envelope authority class (issue #1957). Unrecognized values throw. */
571
+ authority?: string;
572
+ /** Optional ISO-8601 expiry stamped on the item. */
573
+ expiresAt?: string;
574
+ /** Optional id of the shared item this output supersedes. */
575
+ supersedes?: string;
576
+ /**
577
+ * Server-resolved identity of the caller, supplied by the access
578
+ * surface (issue #1957 review). When present it IS both the producer
579
+ * and the envelope origin; a disagreeing caller-supplied `agentId` is
580
+ * rejected so no caller can publish as another agent.
581
+ */
582
+ authenticatedIdentity?: string;
583
+ /**
584
+ * Server-owned origin token for a write that crosses an external
585
+ * boundary but resolved no identity (issue #1957 review round 4).
586
+ * Stamped as the envelope origin (`sharedBy`); the caller label stays
587
+ * the producer so grouping never collapses.
588
+ */
589
+ unattributedOrigin?: string;
556
590
  }): Promise<string> {
591
+ const identity = resolveWriteOrigin({
592
+ agentId: opts.agentId,
593
+ authenticatedIdentity: opts.authenticatedIdentity,
594
+ unattributedOrigin: opts.unattributedOrigin,
595
+ });
557
596
  const createdAt = opts.createdAt ?? new Date();
558
597
  const date = ymd(createdAt);
559
598
  const time = createdAt.toISOString().slice(11, 19).replace(/:/g, "");
560
599
  const slug = safeSlug(opts.title);
561
- const agentPathSegment = safePathSegment(opts.agentId, "agentId");
600
+ const agentPathSegment = safePathSegment(identity.agent, "agentId");
601
+
602
+ const envelope = composeWriteEnvelope({
603
+ origin: identity.origin,
604
+ authority: opts.authority,
605
+ expiresAt: opts.expiresAt,
606
+ supersedes: opts.supersedes,
607
+ allowBinding: this.allowBindingAuthority,
608
+ });
562
609
 
563
610
  const dir = path.join(this.outputsDir, agentPathSegment, date);
564
611
  await mkdir(dir, { recursive: true });
565
612
 
566
- const body =
567
- `---\n` +
568
- `kind: agent_output\n` +
569
- `agent: ${formatFrontmatterScalar(opts.agentId)}\n` +
570
- `createdAt: ${createdAt.toISOString()}\n` +
571
- `title: ${formatFrontmatterScalar(opts.title.replace(/\n/g, " ").slice(0, 200))}\n` +
572
- `---\n\n` +
573
- opts.content.trimEnd() +
574
- "\n";
613
+ const body = [
614
+ "---",
615
+ "kind: agent_output",
616
+ `agent: ${formatFrontmatterScalar(identity.agent)}`,
617
+ `createdAt: ${createdAt.toISOString()}`,
618
+ `title: ${formatFrontmatterScalar(opts.title.replace(/\n/g, " ").slice(0, 200))}`,
619
+ ...envelopeToFrontmatterLines(envelope),
620
+ "---",
621
+ "",
622
+ opts.content.trimEnd(),
623
+ "",
624
+ ].join("\n");
575
625
 
576
626
  for (let attempt = 0; attempt < 100; attempt++) {
577
627
  const suffix = attempt === 0 ? "" : `-${attempt + 1}`;
@@ -585,7 +635,7 @@ export class SharedContextManager {
585
635
  }
586
636
  }
587
637
 
588
- throw new Error(`Unable to allocate unique shared-context output path for ${opts.agentId}`);
638
+ throw new Error(`Unable to allocate unique shared-context output path for ${identity.agent}`);
589
639
  }
590
640
 
591
641
  async appendFeedback(entry: SharedFeedbackEntry): Promise<void> {
@@ -643,7 +693,7 @@ export class SharedContextManager {
643
693
  const maxSummaryItems = Math.max(1, opts.maxSummaryItems ?? 8);
644
694
 
645
695
  // Collect outputs for the day (best-effort).
646
- const outputs: Array<{ agent: string; path: string; title: string; raw: string }> = [];
696
+ const outputs: Array<{ agent: string; path: string; title: string; raw: string; envelope: SharedEnvelope }> = [];
647
697
  try {
648
698
  const agents = (await readdir(this.outputsDir, { withFileTypes: true }))
649
699
  .sort((a, b) => a.name.localeCompare(b.name));
@@ -657,7 +707,13 @@ export class SharedContextManager {
657
707
  const raw = await readFile(p, "utf-8");
658
708
  const title = readFrontmatterScalar(raw, "title") ?? f;
659
709
  const agent = readFrontmatterScalar(raw, "agent") ?? safeDecodePathSegment(a.name);
660
- outputs.push({ agent, path: p, title, raw });
710
+ const envelope = envelopeFromScalars({
711
+ sharedBy: readFrontmatterScalar(raw, "sharedBy"),
712
+ authority: readFrontmatterScalar(raw, "authority"),
713
+ expiresAt: readFrontmatterScalar(raw, "expiresAt"),
714
+ supersedes: readFrontmatterScalar(raw, "supersedes"),
715
+ });
716
+ outputs.push({ agent, path: p, title, raw, envelope });
661
717
  }
662
718
  } catch {
663
719
  // no outputs for this agent/date
@@ -699,6 +755,8 @@ export class SharedContextManager {
699
755
  path: output.path,
700
756
  title: output.title,
701
757
  topics: extractTopicTokens(`${output.title}\n${body}`),
758
+ authority: resolveReadAuthority(output.envelope, this.allowBindingAuthority),
759
+ sharedBy: output.envelope.sharedBy ?? output.agent,
702
760
  };
703
761
  });
704
762
 
@@ -831,7 +889,7 @@ export class SharedContextManager {
831
889
  "",
832
890
  "## Sources",
833
891
  ...(sources.length === 0 ? ["- (none)"] : sources.map((source) =>
834
- `- [${markdownLineText(source.agent)}] ${markdownLineText(source.title)} (${markdownLineText(source.path)})`
892
+ `- [${markdownLineText(source.agent)}] ${markdownLineText(source.title)} (${markdownLineText(source.path)}) [authority: ${source.authority}; sharedBy: ${markdownLineText(source.sharedBy)}]`
835
893
  )),
836
894
  "",
837
895
  ].join("\n");
@@ -870,7 +928,8 @@ export class SharedContextManager {
870
928
  "## Notable Agent Outputs",
871
929
  ...(crossSignals.report.sources.length === 0
872
930
  ? ["- (none)"]
873
- : crossSignals.report.sources.map((source) => `- ${source.title} (${source.path})`)),
931
+ : crossSignals.report.sources.map((source) =>
932
+ `- ${markdownLineText(source.title)} (${markdownLineText(source.path)}) [authority: ${source.authority}; sharedBy: ${markdownLineText(source.sharedBy)}]`)),
874
933
  "",
875
934
  "## Feedback (Approve/Reject)",
876
935
  ...feedbackLines,
@@ -5,6 +5,8 @@
5
5
  * comes later. Does not mutate the input.
6
6
  */
7
7
 
8
+ import { isStrictIsoInstant } from "./iso-instant.js";
9
+
8
10
  export interface ProvenanceStamp {
9
11
  actor: string;
10
12
  at: string;
@@ -15,31 +17,6 @@ export interface StampProvenanceOptions {
15
17
  at: string;
16
18
  }
17
19
 
18
- // Linear ISO instant. No nested quantifiers.
19
- const ISO_INSTANT =
20
- /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
21
-
22
- function isStrictIsoTimestamp(value: string): boolean {
23
- const match = ISO_INSTANT.exec(value);
24
- if (!match) return false;
25
- const year = Number(match[1]);
26
- const month = Number(match[2]);
27
- const day = Number(match[3]);
28
- const hour = Number(match[4]);
29
- const minute = Number(match[5]);
30
- const second = Number(match[6]);
31
- const utc = new Date(Date.UTC(year, month - 1, day, hour, minute, second));
32
- return (
33
- Number.isFinite(Date.parse(value)) &&
34
- utc.getUTCFullYear() === year &&
35
- utc.getUTCMonth() === month - 1 &&
36
- utc.getUTCDate() === day &&
37
- utc.getUTCHours() === hour &&
38
- utc.getUTCMinutes() === minute &&
39
- utc.getUTCSeconds() === second
40
- );
41
- }
42
-
43
20
  function requireActor(actor: string): string {
44
21
  if (typeof actor !== "string" || actor.trim().length === 0) {
45
22
  throw new Error("stampProvenance: actor must be a non-empty string");
@@ -48,7 +25,7 @@ function requireActor(actor: string): string {
48
25
  }
49
26
 
50
27
  function requireAt(at: unknown): string {
51
- if (typeof at !== "string" || !isStrictIsoTimestamp(at)) {
28
+ if (typeof at !== "string" || !isStrictIsoInstant(at)) {
52
29
  throw new Error("stampProvenance: at must be a valid ISO-8601 timestamp");
53
30
  }
54
31
  return at;
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Regression: shared-context write origin is server-derived (issue #1957
3
+ * review rounds 2-4). A caller-supplied `agentId` must never decide the
4
+ * governance envelope's origin: when the surface resolved an authenticated
5
+ * identity, that identity is stamped as `sharedBy`, and an `agentId` naming
6
+ * a different agent is rejected instead of silently overridden. An
7
+ * authenticated access write that resolved NO principal (round 4) stamps the
8
+ * reserved server-owned `unattributed:access-surface` origin — never the
9
+ * client's `agentId`, which survives only as the producer label that feeds
10
+ * grouping and display.
11
+ *
12
+ * Exercises the REAL manager write path, the REAL access-service adapter, and
13
+ * the REAL operation registry — no stubbed provenance.
14
+ */
15
+
16
+ import assert from "node:assert/strict";
17
+ import test from "node:test";
18
+ import os from "node:os";
19
+ import path from "node:path";
20
+ import { mkdtemp, readFile, rm } from "node:fs/promises";
21
+
22
+ import "../access-operations.js";
23
+ import { getOperation } from "../access-boundary.js";
24
+ import { EngramAccessInputError, EngramAccessService, type EngramAccessService as Service } from "../access-service.js";
25
+ import type { Orchestrator } from "../orchestrator.js";
26
+ import { SharedContextManager } from "./manager.js";
27
+ import { parseConfig } from "../config.js";
28
+
29
+ async function makeManager() {
30
+ const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-shared-origin-"));
31
+ const config = parseConfig({ sharedContextEnabled: true, sharedContextDir: dir, memoryDir: dir });
32
+ const manager = new SharedContextManager(config);
33
+ await manager.ensureStructure();
34
+ return { manager, dir, config };
35
+ }
36
+
37
+ test("manager: authenticated identity is the origin and a mismatched agentId is rejected", async (t) => {
38
+ const { manager, dir } = await makeManager();
39
+ t.after(() => rm(dir, { recursive: true, force: true }));
40
+
41
+ await assert.rejects(
42
+ manager.writeAgentOutput({
43
+ agentId: "victim-agent",
44
+ title: "Spoofed",
45
+ content: "x",
46
+ authenticatedIdentity: "real-agent",
47
+ }),
48
+ /write origin mismatch/,
49
+ );
50
+
51
+ const fp = await manager.writeAgentOutput({
52
+ agentId: "",
53
+ title: "Owned",
54
+ content: "x",
55
+ authenticatedIdentity: "real-agent",
56
+ });
57
+ const raw = await readFile(fp, "utf-8");
58
+ assert.match(raw, /^sharedBy: "real-agent"$/m);
59
+ assert.match(raw, /^agent: "real-agent"$/m);
60
+ assert.ok(
61
+ fp.includes(`${path.sep}agent-outputs${path.sep}real-agent${path.sep}`),
62
+ "the write lands in the authenticated agent's directory",
63
+ );
64
+
65
+ // No resolvable identity (in-process caller): the supplied agent id stands.
66
+ const local = await manager.writeAgentOutput({ agentId: "local-agent", title: "Local", content: "x" });
67
+ assert.match(await readFile(local, "utf-8"), /^sharedBy: "local-agent"$/m);
68
+ });
69
+
70
+ test("access service: the authenticated principal, not the request, stamps the origin", async (t) => {
71
+ const { manager, dir, config } = await makeManager();
72
+ t.after(() => rm(dir, { recursive: true, force: true }));
73
+ const service = new EngramAccessService({ config, sharedContext: manager } as unknown as Orchestrator);
74
+
75
+ await assert.rejects(
76
+ () =>
77
+ service.sharedContextWriteOutput({
78
+ agentId: "victim-agent",
79
+ title: "Spoofed",
80
+ content: "x",
81
+ principal: "real-principal",
82
+ }) as Promise<unknown>,
83
+ (error: unknown) => {
84
+ assert.ok(error instanceof EngramAccessInputError, "a spoofed origin is a client input error");
85
+ assert.match(error.message, /write origin mismatch/);
86
+ return true;
87
+ },
88
+ );
89
+
90
+ const result = (await service.sharedContextWriteOutput({
91
+ agentId: "real-principal",
92
+ title: "Owned",
93
+ content: "x",
94
+
95
+ principal: "real-principal",
96
+ })) as { written: boolean; path: string };
97
+ assert.equal(result.written, true);
98
+ assert.match(await readFile(result.path, "utf-8"), /^sharedBy: "real-principal"$/m);
99
+ });
100
+
101
+ test("access service: a principal-less authenticated write never stamps the caller's agentId as sharedBy", async (t) => {
102
+ const { manager, dir, config } = await makeManager();
103
+ t.after(() => rm(dir, { recursive: true, force: true }));
104
+ const service = new EngramAccessService({ config, sharedContext: manager } as unknown as Orchestrator);
105
+
106
+ // The default request-identity path: bearer-authenticated surface, no
107
+ // configured principal, no adapter identity — principal resolves to
108
+ // undefined. The client's `agentId` must not become audit metadata.
109
+ const result = (await service.sharedContextWriteOutput({
110
+ agentId: "claimed-agent",
111
+ title: "Principal-less",
112
+ content: "x",
113
+ })) as { written: boolean; path: string };
114
+ assert.equal(result.written, true);
115
+ const raw = await readFile(result.path, "utf-8");
116
+ assert.match(raw, /^sharedBy: "unattributed:access-surface"$/m);
117
+ assert.doesNotMatch(raw, /^sharedBy: "claimed-agent"$/m);
118
+ // The producer label survives for grouping/display — it is not audit
119
+ // metadata and collapsing it would erase multi-agent overlaps.
120
+ assert.match(raw, /^agent: "claimed-agent"$/m);
121
+ });
122
+
123
+ test("operation: shared_context_write_output forwards the authenticated principal", async () => {
124
+ let received: { agentId: string; principal?: string } | undefined;
125
+ const service = {
126
+ sharedContextWriteOutput: async (request: {
127
+ agentId: string;
128
+ title: string;
129
+ content: string;
130
+ principal?: string;
131
+ }) => {
132
+ received = request;
133
+ return { written: true, path: "written.md" };
134
+ },
135
+ } as unknown as Service;
136
+ const operation = getOperation("shared_context_write_output");
137
+ assert.ok(operation);
138
+
139
+ await operation.run(
140
+ { agentId: "claimed-agent", title: "t", content: "c" },
141
+ { service, authenticatedPrincipal: "real-principal" },
142
+ );
143
+ assert.equal(received?.principal, "real-principal");
144
+ assert.equal(received?.agentId, "claimed-agent");
145
+ });
package/src/types.ts CHANGED
@@ -12,6 +12,7 @@ import type { GraphPathScoringConfig } from "./graph-path-scoring-config.js";
12
12
  export type { ContradictionLocalizationConfig, ContradictionScanConfig } from "./contradiction-config.js";
13
13
  export type { GraphPathScoringConfig } from "./graph-path-scoring-config.js";
14
14
  import type { DriftDetectionSettings, MemoryDriftProvenance, RecallDriftAnnotation } from "./preferences/drift-types.js";
15
+ import type { DeepRecallSettings } from "./deep-recall-config.js";
15
16
  import type { ProceduralMaintenanceConfig } from "./procedural/maintenance-config.js";
16
17
  import type { SkillProjectionConfig } from "./procedural/skill-projection.js";
17
18
  import type { ActionGateConfig } from "./coding/action-gate.js";
@@ -682,7 +683,7 @@ export interface SemanticChunkingConfigShape {
682
683
  fallbackToRecursive: boolean;
683
684
  }
684
685
 
685
- export interface PluginConfig extends BoundedJsonlStateConfig, SecurityConfig, DriftDetectionSettings, ActiveContextConfigFields {
686
+ export interface PluginConfig extends BoundedJsonlStateConfig, SecurityConfig, DriftDetectionSettings, ActiveContextConfigFields, DeepRecallSettings {
686
687
  openaiApiKey: string | undefined;
687
688
  openaiBaseUrl: string | undefined;
688
689
  model: string;
@@ -1806,6 +1807,7 @@ export interface PluginConfig extends BoundedJsonlStateConfig, SecurityConfig, D
1806
1807
  sharedContextEnabled: boolean;
1807
1808
  sharedContextDir?: string;
1808
1809
  sharedContextMaxInjectChars: number;
1810
+ sharedContextAllowBindingAuthority: boolean;
1809
1811
  crossSignalsSemanticEnabled: boolean;
1810
1812
  crossSignalsSemanticTimeoutMs: number;
1811
1813
  sharedCrossSignalSemanticEnabled?: boolean;