@remnic/core 9.32.0 → 9.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/dist/access-admin-ops-surface.d.ts +10 -10
  2. package/dist/access-admin-ops-surface.js +29 -28
  3. package/dist/access-authorization-probe.d.ts +10 -10
  4. package/dist/access-authorization-probe.js +30 -29
  5. package/dist/access-boundary.d.ts +10 -10
  6. package/dist/access-boundary.js +29 -28
  7. package/dist/access-cli.js +71 -68
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-extraction-force-flush.d.ts +10 -10
  10. package/dist/access-extraction-force-flush.js +29 -28
  11. package/dist/access-health-types.d.ts +1 -1
  12. package/dist/access-http-lcm-compaction.d.ts +10 -10
  13. package/dist/access-http-lifecycle-flush.d.ts +10 -10
  14. package/dist/access-http.d.ts +10 -10
  15. package/dist/access-http.js +41 -40
  16. package/dist/access-identity-continuity-surface.d.ts +8 -8
  17. package/dist/access-identity-continuity-surface.js +29 -28
  18. package/dist/access-lcm-surface.d.ts +10 -10
  19. package/dist/access-lcm-surface.js +29 -28
  20. package/dist/access-mcp.d.ts +10 -10
  21. package/dist/access-mcp.js +35 -34
  22. package/dist/access-memory-search-fanout.d.ts +2 -2
  23. package/dist/{access-namespace-preflight-COhbXBqS.d.ts → access-namespace-preflight-CWyL4Zai.d.ts} +1 -1
  24. package/dist/access-namespace-preflight.d.ts +3 -3
  25. package/dist/access-namespace-preflight.js +29 -28
  26. package/dist/access-observe-write-surface.d.ts +10 -10
  27. package/dist/access-observe-write-surface.js +29 -28
  28. package/dist/access-operations-batch.js +32 -31
  29. package/dist/access-operations.d.ts +10 -10
  30. package/dist/access-operations.js +34 -33
  31. package/dist/access-recall-concurrency.d.ts +10 -10
  32. package/dist/access-recall-concurrency.js +29 -28
  33. package/dist/access-recall-response.d.ts +10 -10
  34. package/dist/access-recall-response.js +29 -28
  35. package/dist/access-recall-surface.d.ts +10 -10
  36. package/dist/access-recall-surface.js +29 -28
  37. package/dist/access-schema.js +3 -3
  38. package/dist/{access-service-BmBTtEKO.d.ts → access-service-D9zIBlpp.d.ts} +7 -7
  39. package/dist/access-service-helpers.d.ts +10 -10
  40. package/dist/access-service.d.ts +10 -10
  41. package/dist/access-service.js +29 -28
  42. package/dist/access-surface-catalog.d.ts +10 -10
  43. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  44. package/dist/action-confidence.d.ts +1 -1
  45. package/dist/active-memory-bridge.d.ts +1 -1
  46. package/dist/active-recall.d.ts +1 -1
  47. package/dist/adapters/index.js +7 -7
  48. package/dist/adapters/registry.js +3 -3
  49. package/dist/auto-sync-UPTUVE4X.js +1 -1
  50. package/dist/behavior-learner.d.ts +1 -1
  51. package/dist/behavior-signals.d.ts +1 -1
  52. package/dist/bootstrap.d.ts +8 -8
  53. package/dist/briefing.d.ts +2 -2
  54. package/dist/briefing.js +7 -7
  55. package/dist/buffer-surprise-report.d.ts +1 -1
  56. package/dist/buffer-turn-helpers.d.ts +1 -1
  57. package/dist/buffer.d.ts +2 -2
  58. package/dist/buffer.js +2 -2
  59. package/dist/bulk-import/index.d.ts +3 -3
  60. package/dist/calibration.d.ts +1 -1
  61. package/dist/capabilities.d.ts +1 -1
  62. package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-GWVG7LGC.js} +2 -2
  63. package/dist/{catalog-Dm-DvNBY.d.ts → catalog-Du4bpZWM.d.ts} +1 -1
  64. package/dist/causal-behavior.d.ts +1 -1
  65. package/dist/causal-consolidation.d.ts +1 -1
  66. package/dist/causal-consolidation.js +8 -8
  67. package/dist/causal-trajectory-graph.d.ts +1 -1
  68. package/dist/{chunk-FHBITMRY.js → chunk-4TGZCYHH.js} +15 -15
  69. package/dist/{chunk-KQAFEZQX.js → chunk-5W7CTZ2E.js} +4 -4
  70. package/dist/{chunk-ODGOP7P2.js → chunk-6HXQ2YO5.js} +2 -2
  71. package/dist/{chunk-65ZPVYTA.js → chunk-7CCVK67W.js} +5 -5
  72. package/dist/{chunk-2QIMTVEJ.js → chunk-7TWUCYER.js} +3 -1
  73. package/dist/chunk-7TWUCYER.js.map +1 -0
  74. package/dist/{chunk-UORKJ34C.js → chunk-7ZHGPX56.js} +2 -2
  75. package/dist/{chunk-G2YQ57YO.js → chunk-AEPYA55F.js} +2 -2
  76. package/dist/chunk-B6XHIBIB.js +111 -0
  77. package/dist/chunk-B6XHIBIB.js.map +1 -0
  78. package/dist/{chunk-AJL6NNX6.js → chunk-BIXWNHIL.js} +2 -2
  79. package/dist/{chunk-TGTTESJS.js → chunk-CMQZNEIF.js} +2 -2
  80. package/dist/chunk-CMQZNEIF.js.map +1 -0
  81. package/dist/{chunk-J3ZGPYXB.js → chunk-DG2R7M7K.js} +34 -36
  82. package/dist/chunk-DG2R7M7K.js.map +1 -0
  83. package/dist/{chunk-QDTZ2HF7.js → chunk-DMT2RGAZ.js} +3 -3
  84. package/dist/{chunk-QIHIHZYC.js → chunk-DP7ZV2II.js} +42 -89
  85. package/dist/chunk-DP7ZV2II.js.map +1 -0
  86. package/dist/{chunk-5WZVQRHV.js → chunk-EO7X2LDK.js} +2 -2
  87. package/dist/{chunk-TL4TO3EA.js → chunk-F3BNEYX2.js} +2 -2
  88. package/dist/{chunk-AQEJE3WO.js → chunk-FL3AM5KE.js} +3 -3
  89. package/dist/{chunk-3F2LKUMU.js → chunk-FYO2GAZJ.js} +2 -2
  90. package/dist/{chunk-2Q4JJ3FZ.js → chunk-HULSU7PS.js} +2 -2
  91. package/dist/{chunk-VVDPPDDF.js → chunk-HXDWZFNP.js} +1 -1
  92. package/dist/chunk-HXDWZFNP.js.map +1 -0
  93. package/dist/{chunk-3EQ2XB3W.js → chunk-IZXTZ7BF.js} +5 -5
  94. package/dist/{chunk-THCPRMRF.js → chunk-J6SLNQRO.js} +2 -2
  95. package/dist/{chunk-IGWFKW4B.js → chunk-KEWUNL7P.js} +2 -2
  96. package/dist/{chunk-27HHNYSQ.js → chunk-KJT3PZAR.js} +3 -3
  97. package/dist/chunk-KWMXR7XS.js +138 -0
  98. package/dist/chunk-KWMXR7XS.js.map +1 -0
  99. package/dist/{chunk-OPBTPRGY.js → chunk-KWU6MAD4.js} +2 -2
  100. package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
  101. package/dist/{chunk-HFQQWAMS.js → chunk-LRYAQGDR.js} +38 -38
  102. package/dist/{chunk-VMZ56EE3.js → chunk-MYXWPG5O.js} +2 -2
  103. package/dist/{chunk-YX5LN6JR.js → chunk-OPRP6Q4Z.js} +3 -3
  104. package/dist/{chunk-2NLLXCJG.js → chunk-OWHERGF2.js} +2 -2
  105. package/dist/{chunk-2NTGBZLZ.js → chunk-OXBPHIKH.js} +8 -8
  106. package/dist/{chunk-QMWFQBIL.js → chunk-QEPNZBBC.js} +3 -3
  107. package/dist/{chunk-CE5355TT.js → chunk-QHYB4MJV.js} +2 -2
  108. package/dist/{chunk-AU7Q3LSC.js → chunk-RKNJBZ55.js} +7 -7
  109. package/dist/{chunk-FMFLGS5Z.js → chunk-RLOVRJZN.js} +8 -8
  110. package/dist/{chunk-CJDNT45S.js → chunk-RQBF54FC.js} +6 -6
  111. package/dist/{chunk-LUQ443JP.js → chunk-RSFWAI4D.js} +68 -48
  112. package/dist/chunk-RSFWAI4D.js.map +1 -0
  113. package/dist/{chunk-YPC7W6GA.js → chunk-RYMPLSIT.js} +3 -2
  114. package/dist/{chunk-YPC7W6GA.js.map → chunk-RYMPLSIT.js.map} +1 -1
  115. package/dist/{chunk-E6BMSH7U.js → chunk-SUZI6BHQ.js} +2 -2
  116. package/dist/chunk-T2TTP3KU.js +28 -0
  117. package/dist/chunk-T2TTP3KU.js.map +1 -0
  118. package/dist/{chunk-35IVNNRK.js → chunk-TCIWHK3N.js} +2 -2
  119. package/dist/{chunk-X7Y7WX73.js → chunk-UVYI6VIX.js} +1 -1
  120. package/dist/{chunk-6P7MTSU5.js → chunk-WFYWGDM6.js} +2 -2
  121. package/dist/{chunk-HKPJPOW7.js → chunk-XABS455Y.js} +2 -2
  122. package/dist/{chunk-U7QYBSQJ.js → chunk-XWDZQIYU.js} +2 -2
  123. package/dist/{chunk-Z7XKUWYS.js → chunk-Y2ZD2RVG.js} +2 -2
  124. package/dist/{chunk-AQWVJURR.js → chunk-Y6OWJ3V5.js} +2 -2
  125. package/dist/{chunk-J7WZUL2K.js → chunk-Y6XRTQMV.js} +8 -8
  126. package/dist/{chunk-MAXVH44E.js → chunk-Z54EM5YZ.js} +7 -7
  127. package/dist/{cli-DRJLv1Xt.d.ts → cli-mFX-QQvx.d.ts} +5 -5
  128. package/dist/cli.d.ts +12 -12
  129. package/dist/cli.js +57 -56
  130. package/dist/compounding/engine.d.ts +2 -2
  131. package/dist/compounding/engine.js +7 -7
  132. package/dist/compounding/preference-consolidator.d.ts +1 -1
  133. package/dist/compression-optimizer.d.ts +1 -1
  134. package/dist/config.d.ts +1 -1
  135. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  136. package/dist/connectors/codex-materialize-runner.js +7 -7
  137. package/dist/connectors/codex-materialize.d.ts +1 -1
  138. package/dist/connectors/index.d.ts +4 -2
  139. package/dist/connectors/index.js +12 -8
  140. package/dist/consolidation-provenance-check.d.ts +2 -2
  141. package/dist/consolidation-undo.d.ts +2 -2
  142. package/dist/contradiction/index.d.ts +2 -2
  143. package/dist/contradiction/index.js +4 -4
  144. package/dist/conversation-index/backend.d.ts +1 -1
  145. package/dist/conversation-index/backend.js +2 -2
  146. package/dist/conversation-index/chunker.d.ts +1 -1
  147. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  148. package/dist/conversation-index/indexer.d.ts +1 -1
  149. package/dist/conversation-index/search.d.ts +1 -1
  150. package/dist/corpus-watermark.d.ts +1 -1
  151. package/dist/corpus-watermark.js +15 -15
  152. package/dist/day-summary.d.ts +1 -1
  153. package/dist/delinearize.d.ts +1 -1
  154. package/dist/direct-answer-wiring.d.ts +1 -1
  155. package/dist/direct-answer.d.ts +1 -1
  156. package/dist/embedding-fallback.d.ts +1 -1
  157. package/dist/enrichment/index.d.ts +1 -1
  158. package/dist/entity-retrieval.d.ts +2 -2
  159. package/dist/entity-retrieval.js +7 -7
  160. package/dist/entity-schema.d.ts +1 -1
  161. package/dist/explicit-capture.d.ts +8 -8
  162. package/dist/explicit-capture.js +3 -3
  163. package/dist/extraction-error-classification.d.ts +1 -1
  164. package/dist/extraction-faithfulness.d.ts +1 -1
  165. package/dist/extraction-judge-telemetry.d.ts +1 -1
  166. package/dist/extraction-judge-training.d.ts +1 -1
  167. package/dist/extraction-judge.d.ts +1 -1
  168. package/dist/extraction-liveness.d.ts +1 -1
  169. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  170. package/dist/extraction-source-grounding.d.ts +1 -1
  171. package/dist/extraction.d.ts +1 -2
  172. package/dist/extraction.js +63 -2
  173. package/dist/fallback-llm.d.ts +1 -1
  174. package/dist/graph-dashboard-diff.d.ts +1 -1
  175. package/dist/graph-dashboard-key.d.ts +1 -1
  176. package/dist/graph-dashboard-parser.d.ts +1 -1
  177. package/dist/graph-edge-reinforcement.d.ts +1 -1
  178. package/dist/graph-snapshot.d.ts +1 -1
  179. package/dist/graph.d.ts +1 -1
  180. package/dist/importance.d.ts +1 -1
  181. package/dist/importers/index.d.ts +1 -1
  182. package/dist/in-flight-reads.d.ts +1 -1
  183. package/dist/index.d.ts +19 -19
  184. package/dist/index.js +115 -112
  185. package/dist/intent.d.ts +1 -1
  186. package/dist/lcm/engine.d.ts +1 -1
  187. package/dist/lcm/engine.js +3 -3
  188. package/dist/lcm/index.d.ts +1 -1
  189. package/dist/lcm/index.js +6 -6
  190. package/dist/lcm/tools.d.ts +1 -1
  191. package/dist/lifecycle.d.ts +1 -1
  192. package/dist/live-connectors-runner.d.ts +1 -1
  193. package/dist/local-llm.d.ts +1 -1
  194. package/dist/local-model-endpoint.d.ts +1 -1
  195. package/dist/maintenance/memory-governance.d.ts +1 -1
  196. package/dist/maintenance/memory-governance.js +7 -7
  197. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  198. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +7 -7
  199. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  200. package/dist/maintenance/rebuild-memory-projection.js +8 -8
  201. package/dist/{maintenance-C6Pffz30.d.ts → maintenance-70Wq118b.d.ts} +3 -3
  202. package/dist/mcp-memory-inspector-app.d.ts +10 -10
  203. package/dist/memory-action-policy.d.ts +1 -1
  204. package/dist/memory-cache.d.ts +1 -1
  205. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  206. package/dist/memory-projection-store.d.ts +1 -1
  207. package/dist/memory-provenance.d.ts +1 -1
  208. package/dist/memory-worth-outcomes.d.ts +2 -2
  209. package/dist/models-json.d.ts +1 -1
  210. package/dist/namespaces/migrate.d.ts +3 -3
  211. package/dist/namespaces/migrate.js +14 -14
  212. package/dist/namespaces/principal.d.ts +1 -1
  213. package/dist/namespaces/search.d.ts +1 -1
  214. package/dist/namespaces/search.js +6 -6
  215. package/dist/namespaces/storage.d.ts +3 -3
  216. package/dist/namespaces/storage.js +7 -7
  217. package/dist/native-knowledge.d.ts +1 -1
  218. package/dist/offline-sync-impression-drain.d.ts +1 -1
  219. package/dist/operator-doctor-corpus.d.ts +1 -1
  220. package/dist/operator-doctor-corpus.js +16 -16
  221. package/dist/operator-doctor-replica.d.ts +1 -1
  222. package/dist/operator-toolkit.d.ts +3 -3
  223. package/dist/operator-toolkit.js +19 -19
  224. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  225. package/dist/orchestration/maintenance.d.ts +4 -4
  226. package/dist/orchestration/maintenance.js +12 -12
  227. package/dist/{orchestrator-eQlmasno.d.ts → orchestrator-BH8LT-NX.d.ts} +7 -7
  228. package/dist/orchestrator.d.ts +8 -8
  229. package/dist/orchestrator.js +72 -69
  230. package/dist/patterns-cli.d.ts +1 -1
  231. package/dist/{pipeline-CZGmAMQ2.d.ts → pipeline-DSLWFeHz.d.ts} +1 -1
  232. package/dist/policy-runtime.d.ts +1 -1
  233. package/dist/proactive-contention.d.ts +1 -1
  234. package/dist/provenance.d.ts +1 -1
  235. package/dist/{qmd-DBj4MF8T.d.ts → qmd-BSDGyr0H.d.ts} +1 -1
  236. package/dist/qmd-preflight.d.ts +2 -2
  237. package/dist/qmd-recall-cache.d.ts +1 -1
  238. package/dist/qmd.d.ts +2 -2
  239. package/dist/recall-concurrency-config.d.ts +1 -1
  240. package/dist/recall-disclosure-escalation.d.ts +1 -1
  241. package/dist/recall-explain-renderer.d.ts +1 -1
  242. package/dist/recall-explain-renderer.js +3 -3
  243. package/dist/recall-memory-map.d.ts +1 -1
  244. package/dist/recall-planner-llm.d.ts +1 -1
  245. package/dist/recall-state.d.ts +1 -1
  246. package/dist/recall-tag-filter.d.ts +1 -1
  247. package/dist/recall-timings.d.ts +1 -1
  248. package/dist/recall-xray-cli.d.ts +1 -1
  249. package/dist/recall-xray-cli.js +4 -4
  250. package/dist/recall-xray-renderer.d.ts +1 -1
  251. package/dist/recall-xray-renderer.js +3 -3
  252. package/dist/recall-xray.d.ts +1 -1
  253. package/dist/recall-xray.js +2 -2
  254. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  255. package/dist/replay/normalizers/claude.d.ts +1 -1
  256. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  257. package/dist/replay/normalizers/shared.d.ts +1 -1
  258. package/dist/replay/runner.d.ts +1 -1
  259. package/dist/replay/types.d.ts +1 -1
  260. package/dist/replica-divergence.d.ts +1 -1
  261. package/dist/replica-peers-config.d.ts +1 -1
  262. package/dist/resolve-auth-token.d.ts +1 -1
  263. package/dist/retrieval-agents.d.ts +2 -2
  264. package/dist/retrieval-tiers.d.ts +1 -1
  265. package/dist/routing/engine.d.ts +1 -1
  266. package/dist/routing/store.d.ts +1 -1
  267. package/dist/salvage-envelope.d.ts +1 -1
  268. package/dist/schemas.js +1 -1
  269. package/dist/{scope-profiles-S85lrsUn.d.ts → scope-profiles-C4zY-a2K.d.ts} +1 -1
  270. package/dist/search/embed-helper.d.ts +1 -1
  271. package/dist/search/factory.d.ts +1 -1
  272. package/dist/search/factory.js +5 -5
  273. package/dist/search/index.d.ts +1 -1
  274. package/dist/search/index.js +9 -9
  275. package/dist/search/lancedb-backend.d.ts +1 -1
  276. package/dist/search/meilisearch-backend.d.ts +1 -1
  277. package/dist/search/noop-backend.d.ts +1 -1
  278. package/dist/search/orama-backend.d.ts +1 -1
  279. package/dist/search/port.d.ts +1 -1
  280. package/dist/search/remote-backend.d.ts +1 -1
  281. package/dist/{semantic-consolidation-DVzDcV6x.d.ts → semantic-consolidation-ChKRYpRO.d.ts} +1 -1
  282. package/dist/semantic-consolidation.d.ts +2 -2
  283. package/dist/semantic-consolidation.js +8 -8
  284. package/dist/semantic-rule-promotion.js +7 -7
  285. package/dist/semantic-rule-verifier.d.ts +1 -1
  286. package/dist/semantic-rule-verifier.js +7 -7
  287. package/dist/{service-C2M-wD4W.d.ts → service-CrxXHz5T.d.ts} +2 -2
  288. package/dist/session-observer-bands.d.ts +1 -1
  289. package/dist/session-observer-state.d.ts +1 -1
  290. package/dist/shared-context/manager.d.ts +1 -1
  291. package/dist/signal.d.ts +1 -1
  292. package/dist/source-agent-qualifier.d.ts +24 -0
  293. package/dist/source-agent-qualifier.js +98 -0
  294. package/dist/source-agent-qualifier.js.map +1 -0
  295. package/dist/{storage-dyBC3Q84.d.ts → storage-CyWa1Jm6.d.ts} +1 -1
  296. package/dist/storage.d.ts +2 -2
  297. package/dist/storage.js +6 -6
  298. package/dist/summarizer.d.ts +1 -1
  299. package/dist/summary-snapshot.d.ts +1 -1
  300. package/dist/temporal-supersession.d.ts +2 -2
  301. package/dist/temporal-timeline-recall.d.ts +1 -1
  302. package/dist/temporal-validity.d.ts +1 -1
  303. package/dist/threading.d.ts +1 -1
  304. package/dist/tier-migration.d.ts +2 -2
  305. package/dist/tier-routing.d.ts +1 -1
  306. package/dist/tool-scoped-memory.d.ts +47 -0
  307. package/dist/tool-scoped-memory.js +12 -0
  308. package/dist/tool-scoped-memory.js.map +1 -0
  309. package/dist/topics.d.ts +1 -1
  310. package/dist/transcript.d.ts +1 -1
  311. package/dist/transfer/backup.js +2 -2
  312. package/dist/transfer/capsule-export.js +2 -2
  313. package/dist/transfer/capsule-import.js +2 -2
  314. package/dist/trust-score-stage.d.ts +1 -1
  315. package/dist/trust-score.d.ts +1 -1
  316. package/dist/{types-D63ZI--P.d.ts → types-5398p7Zm.d.ts} +7 -8
  317. package/dist/types.d.ts +1 -1
  318. package/dist/types.js +1 -1
  319. package/dist/utility-runtime.d.ts +1 -1
  320. package/dist/verified-recall.js +7 -7
  321. package/dist/write-envelope.d.ts +1 -1
  322. package/package.json +2 -2
  323. package/src/connector-provenance-lifecycle.test.ts +86 -3
  324. package/src/connectors/index.ts +2 -2
  325. package/src/connectors/label.ts +18 -0
  326. package/src/extraction-redaction-rules.test.ts +53 -0
  327. package/src/extraction-scope-source-agent.test.ts +513 -0
  328. package/src/extraction.ts +45 -98
  329. package/src/index.ts +1 -1
  330. package/src/orchestration/extraction-persist.ts +31 -32
  331. package/src/orchestration/extraction-run.ts +1 -1
  332. package/src/orchestration/recall-result-formatter.ts +2 -1
  333. package/src/schemas.ts +1 -1
  334. package/src/source-agent-qualifier.ts +156 -0
  335. package/src/tool-scoped-memory.test.ts +199 -0
  336. package/src/tool-scoped-memory.ts +190 -0
  337. package/src/types.ts +7 -8
  338. package/dist/chunk-2QIMTVEJ.js.map +0 -1
  339. package/dist/chunk-J3ZGPYXB.js.map +0 -1
  340. package/dist/chunk-LUQ443JP.js.map +0 -1
  341. package/dist/chunk-QIHIHZYC.js.map +0 -1
  342. package/dist/chunk-TGTTESJS.js.map +0 -1
  343. package/dist/chunk-VVDPPDDF.js.map +0 -1
  344. /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-GWVG7LGC.js.map} +0 -0
  345. /package/dist/{chunk-FHBITMRY.js.map → chunk-4TGZCYHH.js.map} +0 -0
  346. /package/dist/{chunk-KQAFEZQX.js.map → chunk-5W7CTZ2E.js.map} +0 -0
  347. /package/dist/{chunk-ODGOP7P2.js.map → chunk-6HXQ2YO5.js.map} +0 -0
  348. /package/dist/{chunk-65ZPVYTA.js.map → chunk-7CCVK67W.js.map} +0 -0
  349. /package/dist/{chunk-UORKJ34C.js.map → chunk-7ZHGPX56.js.map} +0 -0
  350. /package/dist/{chunk-G2YQ57YO.js.map → chunk-AEPYA55F.js.map} +0 -0
  351. /package/dist/{chunk-AJL6NNX6.js.map → chunk-BIXWNHIL.js.map} +0 -0
  352. /package/dist/{chunk-QDTZ2HF7.js.map → chunk-DMT2RGAZ.js.map} +0 -0
  353. /package/dist/{chunk-5WZVQRHV.js.map → chunk-EO7X2LDK.js.map} +0 -0
  354. /package/dist/{chunk-TL4TO3EA.js.map → chunk-F3BNEYX2.js.map} +0 -0
  355. /package/dist/{chunk-AQEJE3WO.js.map → chunk-FL3AM5KE.js.map} +0 -0
  356. /package/dist/{chunk-3F2LKUMU.js.map → chunk-FYO2GAZJ.js.map} +0 -0
  357. /package/dist/{chunk-2Q4JJ3FZ.js.map → chunk-HULSU7PS.js.map} +0 -0
  358. /package/dist/{chunk-3EQ2XB3W.js.map → chunk-IZXTZ7BF.js.map} +0 -0
  359. /package/dist/{chunk-THCPRMRF.js.map → chunk-J6SLNQRO.js.map} +0 -0
  360. /package/dist/{chunk-IGWFKW4B.js.map → chunk-KEWUNL7P.js.map} +0 -0
  361. /package/dist/{chunk-27HHNYSQ.js.map → chunk-KJT3PZAR.js.map} +0 -0
  362. /package/dist/{chunk-OPBTPRGY.js.map → chunk-KWU6MAD4.js.map} +0 -0
  363. /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
  364. /package/dist/{chunk-HFQQWAMS.js.map → chunk-LRYAQGDR.js.map} +0 -0
  365. /package/dist/{chunk-VMZ56EE3.js.map → chunk-MYXWPG5O.js.map} +0 -0
  366. /package/dist/{chunk-YX5LN6JR.js.map → chunk-OPRP6Q4Z.js.map} +0 -0
  367. /package/dist/{chunk-2NLLXCJG.js.map → chunk-OWHERGF2.js.map} +0 -0
  368. /package/dist/{chunk-2NTGBZLZ.js.map → chunk-OXBPHIKH.js.map} +0 -0
  369. /package/dist/{chunk-QMWFQBIL.js.map → chunk-QEPNZBBC.js.map} +0 -0
  370. /package/dist/{chunk-CE5355TT.js.map → chunk-QHYB4MJV.js.map} +0 -0
  371. /package/dist/{chunk-AU7Q3LSC.js.map → chunk-RKNJBZ55.js.map} +0 -0
  372. /package/dist/{chunk-FMFLGS5Z.js.map → chunk-RLOVRJZN.js.map} +0 -0
  373. /package/dist/{chunk-CJDNT45S.js.map → chunk-RQBF54FC.js.map} +0 -0
  374. /package/dist/{chunk-E6BMSH7U.js.map → chunk-SUZI6BHQ.js.map} +0 -0
  375. /package/dist/{chunk-35IVNNRK.js.map → chunk-TCIWHK3N.js.map} +0 -0
  376. /package/dist/{chunk-X7Y7WX73.js.map → chunk-UVYI6VIX.js.map} +0 -0
  377. /package/dist/{chunk-6P7MTSU5.js.map → chunk-WFYWGDM6.js.map} +0 -0
  378. /package/dist/{chunk-HKPJPOW7.js.map → chunk-XABS455Y.js.map} +0 -0
  379. /package/dist/{chunk-U7QYBSQJ.js.map → chunk-XWDZQIYU.js.map} +0 -0
  380. /package/dist/{chunk-Z7XKUWYS.js.map → chunk-Y2ZD2RVG.js.map} +0 -0
  381. /package/dist/{chunk-AQWVJURR.js.map → chunk-Y6OWJ3V5.js.map} +0 -0
  382. /package/dist/{chunk-J7WZUL2K.js.map → chunk-Y6XRTQMV.js.map} +0 -0
  383. /package/dist/{chunk-MAXVH44E.js.map → chunk-Z54EM5YZ.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import { aF as FusedWearableConversation, aG as FusedDayMeta, aH as FusedDayFile, aI as MeetingRecord, aJ as MeetingDetectionSource, aK as FusedMeeting, M as MemoryFile, l as MemoryFrontmatter, aL as EntityTimelineEntry, al as EntityStructuredSection, E as EntityFile, P as PluginConfig, x as MemoryStatus, v as MemoryCategory, an as ImportanceScore, aM as MemoryLink, F as FaithfulnessFrontmatter, O as ProvenanceSource, aN as BufferState, aO as MetaState, ag as MemoryActionEvent, z as MemoryLifecycleEvent, a7 as BufferSurpriseEvent, a6 as BehaviorSignalEvent, ah as CompressionGuidelineOptimizerState, aP as FileHygieneConfig, aQ as EntityRelationship, aR as EntityActivityEntry, aS as AccessTrackingEntry, y as MemoryProjectionCurrentState, aT as MemorySummary, az as TopicScore } from './types-D63ZI--P.js';
1
+ import { aF as FusedWearableConversation, aG as FusedDayMeta, aH as FusedDayFile, aI as MeetingRecord, aJ as MeetingDetectionSource, aK as FusedMeeting, M as MemoryFile, l as MemoryFrontmatter, aL as EntityTimelineEntry, al as EntityStructuredSection, E as EntityFile, P as PluginConfig, x as MemoryStatus, v as MemoryCategory, an as ImportanceScore, aM as MemoryLink, F as FaithfulnessFrontmatter, O as ProvenanceSource, aN as BufferState, aO as MetaState, ag as MemoryActionEvent, z as MemoryLifecycleEvent, a7 as BufferSurpriseEvent, a6 as BehaviorSignalEvent, ah as CompressionGuidelineOptimizerState, aP as FileHygieneConfig, aQ as EntityRelationship, aR as EntityActivityEntry, aS as AccessTrackingEntry, y as MemoryProjectionCurrentState, aT as MemorySummary, az as TopicScore } from './types-5398p7Zm.js';
2
2
  import './entity-id-normalization.js';
3
3
  import { VersioningConfig } from './page-versioning.js';
4
4
  import { ConsolidationOperator } from './consolidation-operator.js';
package/dist/storage.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import './types-D63ZI--P.js';
2
- export { C as ContentHashIndex, t as ContentHashIndexLockOptions, u as FactHashIndexNotAuthoritativeError, v as MemoryLifecycleEventWriteOptions, M as MemoryWriteResult, R as ReextractJobRequest, w as SealedWriteExtras, S as StorageManager, W as WriteMemoryOptions, x as buildEntitySchemaCacheKey, y as compareEntityTimestamps, z as compileEntityFacts, A as countEntityStructuredFacts, B as fingerprintEntityStructuredFacts, D as isEntitySynthesisStale, E as isValidBufferSurpriseEvent, G as normalizeFrontmatterForPath, H as normalizeStructuredSectionFacts, p as parseEntityFile, I as parseFrontmatter, J as parseFrontmatterStringValue, s as serializeEntityFile } from './storage-dyBC3Q84.js';
1
+ import './types-5398p7Zm.js';
2
+ export { C as ContentHashIndex, t as ContentHashIndexLockOptions, u as FactHashIndexNotAuthoritativeError, v as MemoryLifecycleEventWriteOptions, M as MemoryWriteResult, R as ReextractJobRequest, w as SealedWriteExtras, S as StorageManager, W as WriteMemoryOptions, x as buildEntitySchemaCacheKey, y as compareEntityTimestamps, z as compileEntityFacts, A as countEntityStructuredFacts, B as fingerprintEntityStructuredFacts, D as isEntitySynthesisStale, E as isValidBufferSurpriseEvent, G as normalizeFrontmatterForPath, H as normalizeStructuredSectionFacts, p as parseEntityFile, I as parseFrontmatter, J as parseFrontmatterStringValue, s as serializeEntityFile } from './storage-CyWa1Jm6.js';
3
3
  export { normalizeEntityName } from './entity-id-normalization.js';
4
4
  import './page-versioning.js';
5
5
  import './consolidation-operator.js';
package/dist/storage.js CHANGED
@@ -13,15 +13,15 @@ import {
13
13
  parseFrontmatter,
14
14
  parseFrontmatterStringValue,
15
15
  serializeEntityFile
16
- } from "./chunk-FHBITMRY.js";
16
+ } from "./chunk-4TGZCYHH.js";
17
17
  import "./chunk-UHVXE24Y.js";
18
18
  import "./chunk-QNWXCJ76.js";
19
19
  import "./chunk-WIPEXG6R.js";
20
20
  import "./chunk-DNHVPZOD.js";
21
21
  import "./chunk-6CIAGZ6X.js";
22
- import "./chunk-J6A3CX5N.js";
23
22
  import "./chunk-HKF5VASQ.js";
24
- import "./chunk-VVDPPDDF.js";
23
+ import "./chunk-J6A3CX5N.js";
24
+ import "./chunk-HXDWZFNP.js";
25
25
  import "./chunk-7VUAG236.js";
26
26
  import "./chunk-EGGE52UU.js";
27
27
  import "./chunk-ILGC6JH6.js";
@@ -34,15 +34,15 @@ import {
34
34
  ContentHashIndex,
35
35
  FactHashIndexNotAuthoritativeError
36
36
  } from "./chunk-FBUE6PD3.js";
37
- import "./chunk-FFAZ2XFU.js";
38
- import "./chunk-3CSX3ETE.js";
39
- import "./chunk-RL6NEVXT.js";
40
37
  import "./chunk-CGASUJVP.js";
41
38
  import {
42
39
  normalizeAttributePairs,
43
40
  stripAttributesSuffix
44
41
  } from "./chunk-R3DJVOSM.js";
45
42
  import "./chunk-BT7NVCML.js";
43
+ import "./chunk-FFAZ2XFU.js";
44
+ import "./chunk-3CSX3ETE.js";
45
+ import "./chunk-RL6NEVXT.js";
46
46
  import "./chunk-JYIJNNN3.js";
47
47
  import "./chunk-AAD2ZS6P.js";
48
48
  import {
@@ -1,5 +1,5 @@
1
1
  import { ModelRegistry } from './model-registry.js';
2
- import { P as PluginConfig, G as GatewayConfig, T as TranscriptEntry, H as HourlySummary } from './types-D63ZI--P.js';
2
+ import { P as PluginConfig, G as GatewayConfig, T as TranscriptEntry, H as HourlySummary } from './types-5398p7Zm.js';
3
3
  import { TranscriptManager } from './transcript.js';
4
4
  import './message-parts/index.js';
5
5
  import './bounded-jsonl-state.js';
@@ -1,4 +1,4 @@
1
- import { H as HourlySummary } from './types-D63ZI--P.js';
1
+ import { H as HourlySummary } from './types-5398p7Zm.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
@@ -1,5 +1,5 @@
1
- import { l as MemoryFrontmatter } from './types-D63ZI--P.js';
2
- import { S as StorageManager } from './storage-dyBC3Q84.js';
1
+ import { l as MemoryFrontmatter } from './types-5398p7Zm.js';
2
+ import { S as StorageManager } from './storage-CyWa1Jm6.js';
3
3
  import './message-parts/index.js';
4
4
  import './bounded-jsonl-state.js';
5
5
  import './operator-doctor-types.js';
@@ -1,4 +1,4 @@
1
- import { M as MemoryFile } from './types-D63ZI--P.js';
1
+ import { M as MemoryFile } from './types-5398p7Zm.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
@@ -1,4 +1,4 @@
1
- import { l as MemoryFrontmatter } from './types-D63ZI--P.js';
1
+ import { l as MemoryFrontmatter } from './types-5398p7Zm.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
@@ -1,4 +1,4 @@
1
- import { j as BufferTurn, V as ConversationThread } from './types-D63ZI--P.js';
1
+ import { j as BufferTurn, V as ConversationThread } from './types-5398p7Zm.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
@@ -1,5 +1,5 @@
1
- import { M as MemoryFile } from './types-D63ZI--P.js';
2
- import { S as StorageManager } from './storage-dyBC3Q84.js';
1
+ import { M as MemoryFile } from './types-5398p7Zm.js';
2
+ import { S as StorageManager } from './storage-CyWa1Jm6.js';
3
3
  import { MemoryTier } from './tier-routing.js';
4
4
  import { SearchBackend } from './search/port.js';
5
5
  import './message-parts/index.js';
@@ -1,4 +1,4 @@
1
- import { M as MemoryFile } from './types-D63ZI--P.js';
1
+ import { M as MemoryFile } from './types-5398p7Zm.js';
2
2
  import { LifecycleSignals } from './lifecycle.js';
3
3
  import './message-parts/index.js';
4
4
  import './bounded-jsonl-state.js';
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Tool-scoped memory guard (issue #2183).
3
+ *
4
+ * A tool-related fact extracted from a specific agent integration carries an
5
+ * UNQUALIFIED tool name — "use the search tool" — with no agent identity
6
+ * attached (the conversation handed to the extraction LLM is rendered as
7
+ * `[role] content` only). Promoting such a fact to the shared namespace lets a
8
+ * DIFFERENT integration that exposes a same-named but incompatible tool (Pi
9
+ * `search` = repo code search vs OpenClaw `search` = web search) consume it.
10
+ *
11
+ * `referencesAgentSpecificTool` flags fact text that references a specific
12
+ * tool/command invocation rather than portable knowledge. The promotion guard
13
+ * in `orchestration/extraction-persist.ts` uses it — when the producing
14
+ * integration is known (`sourceConnector`) — to keep such a fact in that
15
+ * integration's own namespace.
16
+ *
17
+ * Tuning bias: a FALSE POSITIVE is cheap — the fact stays in the narrower
18
+ * namespace, the documented safe default. A FALSE NEGATIVE is the actual
19
+ * cross-integration collision bug, so detection leans permissive — but it must
20
+ * not fire on ordinary prose.
21
+ */
22
+ declare function referencesAgentSpecificTool(content: string): boolean;
23
+ interface ToolScopeWithholdInputs {
24
+ content: string;
25
+ sourceConnector?: string;
26
+ procedureSteps?: ReadonlyArray<{
27
+ intent?: string;
28
+ expectedOutcome?: string;
29
+ toolCall?: {
30
+ kind?: string;
31
+ };
32
+ }>;
33
+ }
34
+ declare function withholdToolScopedFromSharedNamespace({ content, sourceConnector, procedureSteps, }: ToolScopeWithholdInputs): boolean;
35
+ interface GlobalFactPromotionInputs {
36
+ scope: string | null | undefined;
37
+ content: string;
38
+ sourceConnector?: string;
39
+ procedureSteps?: ReadonlyArray<{
40
+ toolCall?: {
41
+ kind?: string;
42
+ };
43
+ }>;
44
+ }
45
+ declare function shouldPromoteGlobalFactToShared(inputs: GlobalFactPromotionInputs): boolean;
46
+
47
+ export { type GlobalFactPromotionInputs, type ToolScopeWithholdInputs, referencesAgentSpecificTool, shouldPromoteGlobalFactToShared, withholdToolScopedFromSharedNamespace };
@@ -0,0 +1,12 @@
1
+ import {
2
+ referencesAgentSpecificTool,
3
+ shouldPromoteGlobalFactToShared,
4
+ withholdToolScopedFromSharedNamespace
5
+ } from "./chunk-KWMXR7XS.js";
6
+ import "./chunk-PZ5AY32C.js";
7
+ export {
8
+ referencesAgentSpecificTool,
9
+ shouldPromoteGlobalFactToShared,
10
+ withholdToolScopedFromSharedNamespace
11
+ };
12
+ //# sourceMappingURL=tool-scoped-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/topics.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { M as MemoryFile, az as TopicScore } from './types-D63ZI--P.js';
1
+ import { M as MemoryFile, az as TopicScore } from './types-5398p7Zm.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
@@ -1,4 +1,4 @@
1
- import { P as PluginConfig, T as TranscriptEntry, m as Checkpoint } from './types-D63ZI--P.js';
1
+ import { P as PluginConfig, T as TranscriptEntry, m as Checkpoint } from './types-5398p7Zm.js';
2
2
  import { SessionIntegrityReport } from './session-integrity.js';
3
3
  import './message-parts/index.js';
4
4
  import './bounded-jsonl-state.js';
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  backupMemoryDir
3
- } from "../chunk-2NLLXCJG.js";
3
+ } from "../chunk-OWHERGF2.js";
4
4
  import "../chunk-765K3SAT.js";
5
- import "../chunk-X7Y7WX73.js";
5
+ import "../chunk-UVYI6VIX.js";
6
6
  import "../chunk-J4EB7DNW.js";
7
7
  import "../chunk-BJMBJZ2Y.js";
8
8
  import "../chunk-UKJAGEXH.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  exportCapsule,
3
3
  isValidCapsuleSince
4
- } from "../chunk-KQAFEZQX.js";
4
+ } from "../chunk-5W7CTZ2E.js";
5
+ import "../chunk-UVYI6VIX.js";
5
6
  import "../chunk-WEHSQBFR.js";
6
- import "../chunk-X7Y7WX73.js";
7
7
  import "../chunk-J4EB7DNW.js";
8
8
  import "../chunk-BJMBJZ2Y.js";
9
9
  import "../chunk-UKJAGEXH.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  importCapsule
3
- } from "../chunk-65ZPVYTA.js";
3
+ } from "../chunk-7CCVK67W.js";
4
4
  import "../chunk-6TAUHL33.js";
5
5
  import "../chunk-IJ7HK452.js";
6
6
  import "../chunk-PDJTHRAW.js";
7
7
  import "../chunk-XMMESCPD.js";
8
8
  import "../chunk-42JKGUFJ.js";
9
+ import "../chunk-UVYI6VIX.js";
9
10
  import "../chunk-WEHSQBFR.js";
10
- import "../chunk-X7Y7WX73.js";
11
11
  import "../chunk-BJMBJZ2Y.js";
12
12
  import "../chunk-UKJAGEXH.js";
13
13
  import "../chunk-FP2373TW.js";
@@ -1,4 +1,4 @@
1
- import { F as FaithfulnessFrontmatter, O as ProvenanceSource, U as TrustWeights, Q as QmdSearchResult } from './types-D63ZI--P.js';
1
+ import { F as FaithfulnessFrontmatter, O as ProvenanceSource, U as TrustWeights, Q as QmdSearchResult } from './types-5398p7Zm.js';
2
2
  import { TrustScoreResult, TrustSignals, TrustBand, TrustScoreComponent } from './trust-score.js';
3
3
  import './message-parts/index.js';
4
4
  import './bounded-jsonl-state.js';
@@ -1,4 +1,4 @@
1
- import { U as TrustWeights } from './types-D63ZI--P.js';
1
+ import { U as TrustWeights } from './types-5398p7Zm.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
@@ -1260,15 +1260,12 @@ type ExtractionPassSource = "base" | "proactive";
1260
1260
  /**
1261
1261
  * Scope classification for extracted facts (issue #XXX).
1262
1262
  *
1263
- * - `"project"` — knowledge specific to one codebase: file paths, environment
1264
- * configs, deployment details, project-specific workarounds, team/stakeholder
1265
- * info tied to one project.
1266
- * - `"global"` knowledge that applies across projects: core framework bugs,
1267
- * library behavior, API patterns, user preferences, tool configurations,
1268
- * general coding patterns, infrastructure knowledge.
1263
+ * - `"project"` — one codebase (paths, env configs, deployment, stakeholders);
1264
+ * also tool/command or CLI-flag instructions tied to one agent.
1265
+ * - `"global"` across projects: framework bugs, library/API behavior,
1266
+ * user preferences, coding patterns, infrastructure.
1269
1267
  *
1270
- * Default is `"project"` when a coding context is active, `"global"` when no
1271
- * coding context is present.
1268
+ * Default is `"project"` with a coding context active, else `"global"`.
1272
1269
  */
1273
1270
  type MemoryScope = "project" | "global";
1274
1271
  type SlotMismatchMode = "error" | "warn" | "silent";
@@ -4277,6 +4274,8 @@ interface ExtractionResult {
4277
4274
  extractionFailure?: string;
4278
4275
  /** Coarse class used by the retry/backoff + circuit-breaker layer (extraction hot loop). */
4279
4276
  extractionFailureClass?: ExtractionFailureClass;
4277
+ /** Trusted source connector resolved over boundedTurns; persisted verbatim by the orchestrator so it is not recomputed (#2183). */
4278
+ sourceConnector?: string;
4280
4279
  }
4281
4280
  interface EntityMention {
4282
4281
  name: string;
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { aS as AccessTrackingEntry, a1 as ActiveRecallChatType, a5 as ActiveRecallModelFallbackPolicy, a3 as ActiveRecallPromptStyle, a2 as ActiveRecallQueryMode, a4 as ActiveRecallThinking, t as AgentAccessAuthToken, ck as AgentAccessHttpConfig, cl as AgentDefaultsConfig, cm as AgentPersona, A as AgentPersonaModelConfig, cn as BehaviorLoopAdjustment, r as BehaviorLoopPolicyState, co as BehaviorSignalDirection, a6 as BehaviorSignalEvent, cp as BehaviorSignalType, bb as BootstrapOptions, bc as BootstrapResult, g as BriefingActiveThread, cq as BriefingCalendarSourceError, bw as BriefingConfig, e as BriefingFocus, d as BriefingFollowup, bx as BriefingOpenCommitment, i as BriefingRecentEntity, h as BriefingResult, B as BriefingSections, by as BriefingWindow, cr as BufferEntryState, aN as BufferState, a7 as BufferSurpriseEvent, j as BufferTurn, f as CalendarEvent, C as CalendarSource, w as CaptureMode, cs as ChatConfig, m as Checkpoint, ct as CodexCliReasoningEffort, cu as CodexCompactionFlushMode, bB as CodexCompatConfig, cv as CodexConnectorConfig, b8 as CodingContext, cw as CodingGraphLspConfig, bk as CodingKnowledgeConfig, be as CodingModeConfig, cx as CompressionGuidelineActivationState, ad as CompressionGuidelineOptimizerActionSummary, ac as CompressionGuidelineOptimizerEventCounts, ae as CompressionGuidelineOptimizerRuleUpdate, cy as CompressionGuidelineOptimizerSourceWindow, ah as CompressionGuidelineOptimizerState, cz as ConfidenceTier, cA as ConsolidationAction, cB as ConsolidationItem, bd as ConsolidationObservation, K as ConsolidationResult, cC as ContradictionScanConfig, V as ConversationThread, cD as CronConversationRecallMode, cE as CronRecallMode, bC as DEFAULT_RECALL_DISCLOSURE, N as DaySummaryResult, cF as DreamingConfig, cG as DreamingNarrativePromptStyle, cH as DreamsDeepSleepConfig, cI as DreamsLightSleepConfig, D as DreamsPhase, cJ as DreamsPhaseStatus, cK as DreamsPhasesConfig, cL as DreamsRemConfig, a as DreamsRunResult, b9 as DreamsStatusResult, cM as EngramTraceEvent, aR as EntityActivityEntry, E as EntityFile, ai as EntityMention, aQ as EntityRelationship, aj as EntitySchemaDefinition, ak as EntitySchemaSectionDefinition, al as EntityStructuredSection, aL as EntityTimelineEntry, bE as ExtractedFact, cN as ExtractedProcedureStep, cO as ExtractedQuestion, cP as ExtractedReasoningTrace, cQ as ExtractedReasoningTraceStep, cR as ExtractedRelationship, $ as ExtractionFailureClass, cS as ExtractionPassSource, J as ExtractionResult, F as FaithfulnessFrontmatter, aP as FileHygieneConfig, G as GatewayConfig, cT as GitHubLiveConnectorConfig, cU as GmailLiveConnectorConfig, cV as GoogleDriveLiveConnectorConfig, cW as HeartbeatConfig, cX as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, a0 as ImportanceLevel, an as ImportanceScore, W as LifecycleState, L as LiveConnectorsConfig, cY as LlmTraceCallback, cZ as LlmTraceEvent, ap as MemoryActionEligibilityContext, bN as MemoryActionEligibilitySource, ag as MemoryActionEvent, c_ as MemoryActionOutcome, c$ as MemoryActionPolicyDecision, aq as MemoryActionPolicyResult, d0 as MemoryActionStatus, af as MemoryActionType, v as MemoryCategory, M as MemoryFile, l as MemoryFrontmatter, ao as MemoryIntent, z as MemoryLifecycleEvent, ar as MemoryLifecycleEventType, as as MemoryLifecycleStateSummary, aM as MemoryLink, d1 as MemoryLinkType, bO as MemoryObservation, d2 as MemoryOsPresetName, y as MemoryProjectionCurrentState, bP as MemoryScope, x as MemoryStatus, aT as MemorySummary, aO as MetaState, d3 as ModelApi, d4 as ModelDefinitionConfig, d5 as ModelProviderAuthMode, at as ModelProviderConfig, d6 as NamespacePolicy, au as NativeKnowledgeConfig, d7 as NativeKnowledgeFolderRuleConfig, d8 as NativeKnowledgeObsidianVaultConfig, d9 as NativeKnowledgeOpenClawWorkspaceConfig, da as NotionLiveConnectorConfig, P as PluginConfig, Y as PolicyClass, db as PrincipalFromSessionKeyMode, dc as PrincipalRule, dd as ProceduralConfig, am as ProvenanceConfig, O as ProvenanceSource, aA as QmdSearchExplain, Q as QmdSearchResult, de as QuestionEntry, bQ as RECALL_DISCLOSURE_LEVELS, df as ReasoningEffort, b as RecallDisclosure, dg as RecallPipelineConfig, R as RecallPlanMode, ba as RecallSectionConfig, c as RecallTierExplain, dh as RecallTraceEvent, di as RelevanceFeedback, ax as RetrievalTier, dj as SPECULATIVE_TTL_DAYS, dk as ScopeProfileAutoPromoteConfig, o as ScopeProfileConfig, p as ScopeProfileLayerId, q as ScopeProfilePromotionTarget, dl as ScopeProfileTeamProjectConfig, dm as ScopeTeamConfig, dn as ScoredEntity, s as SecretRef, dp as SemanticChunkingConfigShape, S as SessionObserverBandConfig, dq as SignalLevel, ay as SignalScanResult, dr as SlotBehaviorConfig, ds as SlotMismatchMode, n as SourceConnectorProvenance, az as TopicScore, T as TranscriptEntry, dt as TriggerMode, U as TrustWeights, X as VerificationState, du as confidenceTier, bY as isRecallDisclosure } from './types-D63ZI--P.js';
1
+ export { aS as AccessTrackingEntry, a1 as ActiveRecallChatType, a5 as ActiveRecallModelFallbackPolicy, a3 as ActiveRecallPromptStyle, a2 as ActiveRecallQueryMode, a4 as ActiveRecallThinking, t as AgentAccessAuthToken, ck as AgentAccessHttpConfig, cl as AgentDefaultsConfig, cm as AgentPersona, A as AgentPersonaModelConfig, cn as BehaviorLoopAdjustment, r as BehaviorLoopPolicyState, co as BehaviorSignalDirection, a6 as BehaviorSignalEvent, cp as BehaviorSignalType, bb as BootstrapOptions, bc as BootstrapResult, g as BriefingActiveThread, cq as BriefingCalendarSourceError, bw as BriefingConfig, e as BriefingFocus, d as BriefingFollowup, bx as BriefingOpenCommitment, i as BriefingRecentEntity, h as BriefingResult, B as BriefingSections, by as BriefingWindow, cr as BufferEntryState, aN as BufferState, a7 as BufferSurpriseEvent, j as BufferTurn, f as CalendarEvent, C as CalendarSource, w as CaptureMode, cs as ChatConfig, m as Checkpoint, ct as CodexCliReasoningEffort, cu as CodexCompactionFlushMode, bB as CodexCompatConfig, cv as CodexConnectorConfig, b8 as CodingContext, cw as CodingGraphLspConfig, bk as CodingKnowledgeConfig, be as CodingModeConfig, cx as CompressionGuidelineActivationState, ad as CompressionGuidelineOptimizerActionSummary, ac as CompressionGuidelineOptimizerEventCounts, ae as CompressionGuidelineOptimizerRuleUpdate, cy as CompressionGuidelineOptimizerSourceWindow, ah as CompressionGuidelineOptimizerState, cz as ConfidenceTier, cA as ConsolidationAction, cB as ConsolidationItem, bd as ConsolidationObservation, K as ConsolidationResult, cC as ContradictionScanConfig, V as ConversationThread, cD as CronConversationRecallMode, cE as CronRecallMode, bC as DEFAULT_RECALL_DISCLOSURE, N as DaySummaryResult, cF as DreamingConfig, cG as DreamingNarrativePromptStyle, cH as DreamsDeepSleepConfig, cI as DreamsLightSleepConfig, D as DreamsPhase, cJ as DreamsPhaseStatus, cK as DreamsPhasesConfig, cL as DreamsRemConfig, a as DreamsRunResult, b9 as DreamsStatusResult, cM as EngramTraceEvent, aR as EntityActivityEntry, E as EntityFile, ai as EntityMention, aQ as EntityRelationship, aj as EntitySchemaDefinition, ak as EntitySchemaSectionDefinition, al as EntityStructuredSection, aL as EntityTimelineEntry, bE as ExtractedFact, cN as ExtractedProcedureStep, cO as ExtractedQuestion, cP as ExtractedReasoningTrace, cQ as ExtractedReasoningTraceStep, cR as ExtractedRelationship, $ as ExtractionFailureClass, cS as ExtractionPassSource, J as ExtractionResult, F as FaithfulnessFrontmatter, aP as FileHygieneConfig, G as GatewayConfig, cT as GitHubLiveConnectorConfig, cU as GmailLiveConnectorConfig, cV as GoogleDriveLiveConnectorConfig, cW as HeartbeatConfig, cX as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, a0 as ImportanceLevel, an as ImportanceScore, W as LifecycleState, L as LiveConnectorsConfig, cY as LlmTraceCallback, cZ as LlmTraceEvent, ap as MemoryActionEligibilityContext, bN as MemoryActionEligibilitySource, ag as MemoryActionEvent, c_ as MemoryActionOutcome, c$ as MemoryActionPolicyDecision, aq as MemoryActionPolicyResult, d0 as MemoryActionStatus, af as MemoryActionType, v as MemoryCategory, M as MemoryFile, l as MemoryFrontmatter, ao as MemoryIntent, z as MemoryLifecycleEvent, ar as MemoryLifecycleEventType, as as MemoryLifecycleStateSummary, aM as MemoryLink, d1 as MemoryLinkType, bO as MemoryObservation, d2 as MemoryOsPresetName, y as MemoryProjectionCurrentState, bP as MemoryScope, x as MemoryStatus, aT as MemorySummary, aO as MetaState, d3 as ModelApi, d4 as ModelDefinitionConfig, d5 as ModelProviderAuthMode, at as ModelProviderConfig, d6 as NamespacePolicy, au as NativeKnowledgeConfig, d7 as NativeKnowledgeFolderRuleConfig, d8 as NativeKnowledgeObsidianVaultConfig, d9 as NativeKnowledgeOpenClawWorkspaceConfig, da as NotionLiveConnectorConfig, P as PluginConfig, Y as PolicyClass, db as PrincipalFromSessionKeyMode, dc as PrincipalRule, dd as ProceduralConfig, am as ProvenanceConfig, O as ProvenanceSource, aA as QmdSearchExplain, Q as QmdSearchResult, de as QuestionEntry, bQ as RECALL_DISCLOSURE_LEVELS, df as ReasoningEffort, b as RecallDisclosure, dg as RecallPipelineConfig, R as RecallPlanMode, ba as RecallSectionConfig, c as RecallTierExplain, dh as RecallTraceEvent, di as RelevanceFeedback, ax as RetrievalTier, dj as SPECULATIVE_TTL_DAYS, dk as ScopeProfileAutoPromoteConfig, o as ScopeProfileConfig, p as ScopeProfileLayerId, q as ScopeProfilePromotionTarget, dl as ScopeProfileTeamProjectConfig, dm as ScopeTeamConfig, dn as ScoredEntity, s as SecretRef, dp as SemanticChunkingConfigShape, S as SessionObserverBandConfig, dq as SignalLevel, ay as SignalScanResult, dr as SlotBehaviorConfig, ds as SlotMismatchMode, n as SourceConnectorProvenance, az as TopicScore, T as TranscriptEntry, dt as TriggerMode, U as TrustWeights, X as VerificationState, du as confidenceTier, bY as isRecallDisclosure } from './types-5398p7Zm.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  export { ContinuityImprovementLoop, ContinuityIncidentCloseInput, ContinuityIncidentOpenInput, ContinuityIncidentRecord, ContinuityIncidentState, ContinuityLoopCadence, ContinuityLoopReviewInput, ContinuityLoopStatus, ContinuityLoopUpsertInput } from './types-continuity.js';
package/dist/types.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  SPECULATIVE_TTL_DAYS,
5
5
  confidenceTier,
6
6
  isRecallDisclosure
7
- } from "./chunk-VVDPPDDF.js";
7
+ } from "./chunk-HXDWZFNP.js";
8
8
  import "./chunk-PZ5AY32C.js";
9
9
  export {
10
10
  DEFAULT_RECALL_DISCLOSURE,
@@ -1,5 +1,5 @@
1
1
  import { TierRoutingPolicy } from './tier-routing.js';
2
- import './types-D63ZI--P.js';
2
+ import './types-5398p7Zm.js';
3
3
  import './message-parts/index.js';
4
4
  import './bounded-jsonl-state.js';
5
5
  import './operator-doctor-types.js';
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-5WZVQRHV.js";
4
+ } from "./chunk-EO7X2LDK.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
- import "./chunk-FHBITMRY.js";
6
+ import "./chunk-4TGZCYHH.js";
7
7
  import "./chunk-UHVXE24Y.js";
8
8
  import "./chunk-QNWXCJ76.js";
9
9
  import "./chunk-WIPEXG6R.js";
10
10
  import "./chunk-DNHVPZOD.js";
11
11
  import "./chunk-6CIAGZ6X.js";
12
- import "./chunk-J6A3CX5N.js";
13
12
  import "./chunk-HKF5VASQ.js";
14
- import "./chunk-VVDPPDDF.js";
13
+ import "./chunk-J6A3CX5N.js";
14
+ import "./chunk-HXDWZFNP.js";
15
15
  import "./chunk-7VUAG236.js";
16
16
  import "./chunk-EGGE52UU.js";
17
17
  import "./chunk-ILGC6JH6.js";
@@ -21,12 +21,12 @@ import "./chunk-GCASGYIO.js";
21
21
  import "./chunk-DM2T26WE.js";
22
22
  import "./chunk-LDXUBPMO.js";
23
23
  import "./chunk-FBUE6PD3.js";
24
- import "./chunk-FFAZ2XFU.js";
25
- import "./chunk-3CSX3ETE.js";
26
- import "./chunk-RL6NEVXT.js";
27
24
  import "./chunk-CGASUJVP.js";
28
25
  import "./chunk-R3DJVOSM.js";
29
26
  import "./chunk-BT7NVCML.js";
27
+ import "./chunk-FFAZ2XFU.js";
28
+ import "./chunk-3CSX3ETE.js";
29
+ import "./chunk-RL6NEVXT.js";
30
30
  import "./chunk-JYIJNNN3.js";
31
31
  import "./chunk-AAD2ZS6P.js";
32
32
  import "./chunk-YXZG5TVN.js";
@@ -1,4 +1,4 @@
1
- import { v as MemoryCategory } from './types-D63ZI--P.js';
1
+ import { v as MemoryCategory } from './types-5398p7Zm.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.32.0",
3
+ "version": "9.34.0",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3076,7 +3076,7 @@
3076
3076
  "core"
3077
3077
  ],
3078
3078
  "peerDependencies": {
3079
- "@remnic/coding-graph": "^9.32.0"
3079
+ "@remnic/coding-graph": "^9.34.0"
3080
3080
  },
3081
3081
  "peerDependenciesMeta": {
3082
3082
  "@remnic/coding-graph": {
@@ -21,9 +21,12 @@ import {
21
21
  import { TurnIngestionCoordinator, type TurnIngestionDeps } from "./orchestration/turn-ingestion.js";
22
22
  import { StorageManager } from "./storage.js";
23
23
  import { hashAccessIdempotencyPayload } from "./access-idempotency.js";
24
- import type { ExtractionEngine } from "./extraction.js";
24
+ import { ExtractionEngine } from "./extraction.js";
25
25
  import type { ThreadingManager } from "./threading.js";
26
26
  import type { BufferTurn, ExtractionResult, PluginConfig } from "./types.js";
27
+ import { parseConfig } from "./config.js";
28
+ import { resolveSourceConnector } from "./source-agent-qualifier.js";
29
+ import type { FallbackLlmOptions } from "./fallback-llm.js";
27
30
  import { handleCodingDecision } from "./coding/decision-surfaces.js";
28
31
  import type { DecisionSurfaceContext } from "./coding/decision-surfaces.js";
29
32
 
@@ -271,11 +274,12 @@ test("runExtraction: mixed tagged+untagged turns → persistExtraction receives
271
274
  config,
272
275
  getBuffer: () => buffer,
273
276
  getExtraction: () => ({
274
- extract: async (..._args: Parameters<ExtractionEngine["extract"]>): Promise<ExtractionResult> => ({
277
+ extract: async (turns: BufferTurn[]): Promise<ExtractionResult> => ({
275
278
  facts: [{ content: "test fact", category: "fact", confidence: 0.8, tags: [] }],
276
279
  entities: [],
277
280
  questions: [],
278
281
  profileUpdates: [],
282
+ sourceConnector: resolveSourceConnector(turns),
279
283
  }),
280
284
  }),
281
285
  getStorageRouter: () => ({
@@ -373,11 +377,12 @@ test("runExtraction: context-only turns without sourceConnector do not affect at
373
377
  config,
374
378
  getBuffer: () => buffer,
375
379
  getExtraction: () => ({
376
- extract: async (..._args: Parameters<ExtractionEngine["extract"]>): Promise<ExtractionResult> => ({
380
+ extract: async (turns: BufferTurn[]): Promise<ExtractionResult> => ({
377
381
  facts: [{ content: "test fact", category: "fact", confidence: 0.8, tags: [] }],
378
382
  entities: [],
379
383
  questions: [],
380
384
  profileUpdates: [],
385
+ sourceConnector: resolveSourceConnector(turns),
381
386
  }),
382
387
  }),
383
388
  getStorageRouter: () => ({
@@ -616,3 +621,81 @@ test("codegraph_manage_adr operation: ctx.sourceConnector forwarded to codegraph
616
621
  "operation handler must forward ctx.sourceConnector='chatgpt' to codegraphTool"
617
622
  );
618
623
  });
624
+
625
+ test("runExtraction: the Source agent header connector equals the persisted sourceConnector (boundary-drop case)", async () => {
626
+ // One derivation over boundedTurns: a work-layer-dropped UNTAGGED assistant
627
+ // turn must not suppress the connector the model effectively saw, and the
628
+ // value rendered in the header must be the same value persisted.
629
+ StorageManager.clearAllStaticCaches();
630
+ const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-one-"));
631
+ try {
632
+ const storage = new StorageManager(baseDir);
633
+ await storage.ensureDirectories();
634
+ const config = makeMinimalConfig();
635
+ const buffer = new SmartBuffer(config, storage);
636
+ await buffer.load();
637
+
638
+ let headerConversation = "";
639
+ let persistedConnector: string | undefined = "SENTINEL";
640
+ const engine = new ExtractionEngine(parseConfig({ modelSource: "gateway" }));
641
+ assert.equal(Reflect.set(engine, "fallbackLlm", {
642
+ async parseWithSchemaDetailed<T>(
643
+ messages: Array<{ role: "system" | "user" | "assistant"; content: string }>,
644
+ _schema: { parse: (data: unknown) => T },
645
+ _options?: FallbackLlmOptions,
646
+ ) {
647
+ headerConversation = messages[1]?.content ?? "";
648
+ return {
649
+ modelUsed: "fixture",
650
+ result: { facts: [{ content: "use the search tool", category: "fact", confidence: 0.9, tags: [] }], entities: [], questions: [], profileUpdates: [] } as unknown as T,
651
+ };
652
+ },
653
+ }), true);
654
+
655
+ const coordinator = new ExtractionRunCoordinator({
656
+ config,
657
+ getBuffer: () => buffer,
658
+ getExtraction: () => engine,
659
+ getStorageRouter: () => ({ storageFor: async () => storage }),
660
+ getThreading: () => ({ processTurn: async () => "thread-1", updateThreadTitle: async () => {} }),
661
+ persistExtraction: async (_r, _s, _t, sourceContext?) => {
662
+ persistedConnector = sourceContext?.sourceConnector;
663
+ return { persistedIds: ["fact-1"], memoryPathById: new Map() };
664
+ },
665
+ maybeCapturePassiveCorrections: async () => {},
666
+ resolveSelfNamespace: () => "default",
667
+ getCodingContextForSession: () => null,
668
+ applyCodingNamespaceOverlay: (_sk: string, ns: string) => ns,
669
+ boxBuilderFor: () => { throw new Error("unexpected boxBuilderFor"); },
670
+ appendPersistedThreadEpisodes: async () => {},
671
+ maybeScheduleConsolidation: () => {},
672
+ requestQmdMaintenance: () => {},
673
+ runTierMigrationCycle: async () => { throw new Error("unexpected runTierMigrationCycle"); },
674
+ getLastPersistExtractionDeferredCount: () => 0,
675
+ recordProcessedExtractionFingerprint: async () => {},
676
+ });
677
+
678
+ await coordinator.runExtraction(
679
+ [
680
+ makeTurn({ content: "Use the search tool.", sourceConnector: "pi" }),
681
+ makeTurn({ role: "assistant", content: "Found it.", sourceConnector: "pi" }),
682
+ // UNTAGGED assistant turn that is entirely work-layer context -> dropped
683
+ // by the work-layer boundary, so it is absent from boundedTurns.
684
+ makeTurn({
685
+ role: "assistant",
686
+ content: "[WORK_LAYER_CONTEXT link_to_memory=false]\ninternal scratch\n[/WORK_LAYER_CONTEXT]",
687
+ }),
688
+ ],
689
+ { skipCharThreshold: true, skipUserTurnThreshold: true }
690
+ );
691
+
692
+ const headerMatch = headerConversation.match(/^Source agent: (\S+)/);
693
+ const headerConnector = headerMatch ? headerMatch[1] : undefined;
694
+ assert.equal(headerConnector, "pi", "header names the connector the model saw (boundedTurns)");
695
+ assert.equal(persistedConnector, "pi", "persistence records the same resolved connector");
696
+ assert.equal(headerConnector, persistedConnector, "header connector must equal persisted connector");
697
+ } finally {
698
+ StorageManager.clearAllStaticCaches();
699
+ await rm(baseDir, { recursive: true, force: true });
700
+ }
701
+ });
@@ -211,7 +211,7 @@ export { coerceInstallExtension };
211
211
 
212
212
  // ── Built-in connector definitions ─────────────────────────────────────────
213
213
 
214
- const BUILTIN_CONNECTORS: ConnectorManifest[] = [
214
+ export const BUILTIN_CONNECTORS: ConnectorManifest[] = [
215
215
  {
216
216
  id: "claude-code",
217
217
  name: "Claude Code",
@@ -571,7 +571,7 @@ const BUILTIN_CONNECTORS: ConnectorManifest[] = [
571
571
 
572
572
  export const CONNECTOR_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
573
573
 
574
- function isValidConnectorId(connectorId: unknown): connectorId is string {
574
+ export function isValidConnectorId(connectorId: unknown): connectorId is string {
575
575
  return typeof connectorId === "string" && CONNECTOR_ID_PATTERN.test(connectorId);
576
576
  }
577
577
 
@@ -14,5 +14,23 @@
14
14
  * stays at its ratchet ceiling.
15
15
  */
16
16
  export { CONNECTOR_ID_PATTERN } from "./index.js";
17
+ import { loadRegistry, BUILTIN_CONNECTORS } from "./index.js";
17
18
 
18
19
  export const CONNECTOR_LABEL_MAX_LENGTH = 64;
20
+
21
+ let knownIds: ReadonlySet<string> | null = null;
22
+ let knownIdsAt = 0;
23
+ const KNOWN_IDS_TTL_MS = 60_000;
24
+
25
+ export function knownConnectorIds(): ReadonlySet<string> {
26
+ const now = Date.now();
27
+ if (knownIds !== null && now - knownIdsAt < KNOWN_IDS_TTL_MS) return knownIds;
28
+ try {
29
+ const ids = new Set(loadRegistry().connectors.map((c: { id: string }) => c.id));
30
+ knownIds = ids;
31
+ knownIdsAt = now;
32
+ return knownIds;
33
+ } catch {
34
+ return new Set(BUILTIN_CONNECTORS.map((c: { id: string }) => c.id));
35
+ }
36
+ }
@@ -20,6 +20,7 @@ import {
20
20
  type CompiledRedactionRule,
21
21
  } from "./extraction-redaction-rules.js";
22
22
  import { validateRedactionPattern } from "./correction/correction-contract.js";
23
+ import { shouldPromoteGlobalFactToShared } from "./tool-scoped-memory.js";
23
24
 
24
25
  const withTempDir = <T>(fn: (dir: string) => Promise<T>): Promise<T> =>
25
26
  managedWithTempDir(fn, "remnic-redact-");
@@ -378,3 +379,55 @@ test("#1713 (codex): non-global fact is NOT scope-routed to shared", async () =>
378
379
  });
379
380
  });
380
381
  });
382
+ test("#2183: pre-judge consults the SESSION namespace rules for a tool-scoped global fact (not shared)", async () => {
383
+ // The pre-judge namespace prediction and the write-loop scope-routing block
384
+ // share shouldPromoteGlobalFactToShared, so a tool-scoped global fact from a
385
+ // known integration is predicted to stay in the session namespace: its
386
+ // redaction is evaluated against the SESSION rules, not the shared ones. A
387
+ // portable global fact is still predicted shared and consults shared rules.
388
+ // This is the read/write namespace-invariant coupling the guard preserves.
389
+ await withTempDir(async (sourceDir) => {
390
+ await withTempDir(async (sharedDir) => {
391
+ await writeRule(sourceDir, "session-only-secret");
392
+ await writeRule(sharedDir, "shared-only-secret");
393
+
394
+ const sourceNamespace: string = "default";
395
+ const sharedNamespace: string = "shared";
396
+ const sourceConnector = "pi";
397
+
398
+ // Mirror the pre-judge pass: predicted target namespace = shared ONLY
399
+ // when shouldPromoteGlobalFactToShared says so; load that namespace's
400
+ // rules and combine with the base (source) rules.
401
+ async function consultedRulesFor(fact: { scope: string; content: string }): Promise<CompiledRedactionRule[]> {
402
+ const baseRules = await loadRedactionRules(sourceDir);
403
+ const promote = shouldPromoteGlobalFactToShared({
404
+ scope: fact.scope,
405
+ content: fact.content,
406
+ sourceConnector,
407
+ });
408
+ const factNs = promote ? sharedNamespace : undefined;
409
+ const targetRules =
410
+ factNs && factNs !== sourceNamespace ? await loadRedactionRules(sharedDir) : [];
411
+ return [...baseRules, ...targetRules];
412
+ }
413
+
414
+ // (a) tool-scoped global fact + sourceConnector -> predicted SESSION.
415
+ const toolRules = await consultedRulesFor({ scope: "global", content: "Prefer the search tool when locating code." });
416
+ assert.ok(
417
+ contentMatchesRedactionRules("session-only-secret here", toolRules),
418
+ "session rules are consulted for a tool-scoped global fact",
419
+ );
420
+ assert.ok(
421
+ !contentMatchesRedactionRules("shared-only-secret here", toolRules),
422
+ "shared rules are NOT consulted for a tool-scoped global fact (the #2183 fix)",
423
+ );
424
+
425
+ // (b) portable global fact + sourceConnector -> predicted SHARED.
426
+ const portableRules = await consultedRulesFor({ scope: "global", content: "User prefers dark mode in all editors" });
427
+ assert.ok(
428
+ contentMatchesRedactionRules("shared-only-secret here", portableRules),
429
+ "shared rules ARE consulted for a portable global fact (no regression)",
430
+ );
431
+ });
432
+ });
433
+ });