@animalabs/agent-framework 0.28.0 → 0.29.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 (240) hide show
  1. package/README.md +88 -25
  2. package/dist/src/agent.d.ts.map +1 -1
  3. package/dist/src/agent.js +4 -1
  4. package/dist/src/agent.js.map +1 -1
  5. package/dist/src/api/mcp-server-core.d.ts.map +1 -1
  6. package/dist/src/api/mcp-server-core.js +3 -12
  7. package/dist/src/api/mcp-server-core.js.map +1 -1
  8. package/dist/src/api/server.d.ts.map +1 -1
  9. package/dist/src/api/server.js +7 -3
  10. package/dist/src/api/server.js.map +1 -1
  11. package/dist/src/auto-continue.d.ts +2 -0
  12. package/dist/src/auto-continue.d.ts.map +1 -1
  13. package/dist/src/auto-continue.js +5 -2
  14. package/dist/src/auto-continue.js.map +1 -1
  15. package/dist/src/code-execution/isolate/runner.d.ts +7 -5
  16. package/dist/src/code-execution/isolate/runner.d.ts.map +1 -1
  17. package/dist/src/code-execution/isolate/runner.js +7 -5
  18. package/dist/src/code-execution/isolate/runner.js.map +1 -1
  19. package/dist/src/code-execution/isolate/scripts.d.ts.map +1 -1
  20. package/dist/src/code-execution/isolate/scripts.js +3 -2
  21. package/dist/src/code-execution/isolate/scripts.js.map +1 -1
  22. package/dist/src/framework.d.ts +164 -36
  23. package/dist/src/framework.d.ts.map +1 -1
  24. package/dist/src/framework.js +1120 -479
  25. package/dist/src/framework.js.map +1 -1
  26. package/dist/src/gate/event-gate.d.ts +34 -10
  27. package/dist/src/gate/event-gate.d.ts.map +1 -1
  28. package/dist/src/gate/event-gate.js +118 -48
  29. package/dist/src/gate/event-gate.js.map +1 -1
  30. package/dist/src/gate/index.d.ts +1 -1
  31. package/dist/src/gate/index.d.ts.map +1 -1
  32. package/dist/src/gate/index.js +1 -1
  33. package/dist/src/gate/index.js.map +1 -1
  34. package/dist/src/gate/types.d.ts +12 -2
  35. package/dist/src/gate/types.d.ts.map +1 -1
  36. package/dist/src/heartbeat/heartbeat.d.ts +18 -0
  37. package/dist/src/heartbeat/heartbeat.d.ts.map +1 -1
  38. package/dist/src/heartbeat/heartbeat.js +34 -8
  39. package/dist/src/heartbeat/heartbeat.js.map +1 -1
  40. package/dist/src/held-writes.d.ts +3 -3
  41. package/dist/src/held-writes.js +3 -3
  42. package/dist/src/host-presentation.d.ts +170 -0
  43. package/dist/src/host-presentation.d.ts.map +1 -0
  44. package/dist/src/host-presentation.js +561 -0
  45. package/dist/src/host-presentation.js.map +1 -0
  46. package/dist/src/index.d.ts +2 -2
  47. package/dist/src/index.d.ts.map +1 -1
  48. package/dist/src/index.js +1 -1
  49. package/dist/src/index.js.map +1 -1
  50. package/dist/src/line-reader.d.ts +4 -0
  51. package/dist/src/line-reader.d.ts.map +1 -0
  52. package/dist/src/line-reader.js +59 -0
  53. package/dist/src/line-reader.js.map +1 -0
  54. package/dist/src/mcpl/channel-registry.d.ts +34 -6
  55. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  56. package/dist/src/mcpl/channel-registry.js +131 -53
  57. package/dist/src/mcpl/channel-registry.js.map +1 -1
  58. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  59. package/dist/src/mcpl/conversation-router.js +2 -1
  60. package/dist/src/mcpl/conversation-router.js.map +1 -1
  61. package/dist/src/mcpl/convert-block.d.ts +1 -0
  62. package/dist/src/mcpl/convert-block.d.ts.map +1 -1
  63. package/dist/src/mcpl/convert-block.js +16 -4
  64. package/dist/src/mcpl/convert-block.js.map +1 -1
  65. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  66. package/dist/src/mcpl/hook-orchestrator.js +4 -3
  67. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  68. package/dist/src/mcpl/inbound-source.d.ts +3 -1
  69. package/dist/src/mcpl/inbound-source.d.ts.map +1 -1
  70. package/dist/src/mcpl/inbound-source.js +3 -1
  71. package/dist/src/mcpl/inbound-source.js.map +1 -1
  72. package/dist/src/mcpl/modern-connection.d.ts.map +1 -1
  73. package/dist/src/mcpl/modern-connection.js +11 -7
  74. package/dist/src/mcpl/modern-connection.js.map +1 -1
  75. package/dist/src/mcpl/protocol-family.d.ts +3 -2
  76. package/dist/src/mcpl/protocol-family.d.ts.map +1 -1
  77. package/dist/src/mcpl/protocol-family.js +25 -3
  78. package/dist/src/mcpl/protocol-family.js.map +1 -1
  79. package/dist/src/mcpl/push-handler.js +2 -2
  80. package/dist/src/mcpl/push-handler.js.map +1 -1
  81. package/dist/src/mcpl/references.d.ts +12 -40
  82. package/dist/src/mcpl/references.d.ts.map +1 -1
  83. package/dist/src/mcpl/references.js +29 -23
  84. package/dist/src/mcpl/references.js.map +1 -1
  85. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  86. package/dist/src/mcpl/server-connection.js +20 -20
  87. package/dist/src/mcpl/server-connection.js.map +1 -1
  88. package/dist/src/mcpl/skip-reply-wake.d.ts +25 -0
  89. package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -1
  90. package/dist/src/mcpl/skip-reply-wake.js +25 -0
  91. package/dist/src/mcpl/skip-reply-wake.js.map +1 -1
  92. package/dist/src/mcpl/tool-presence.d.ts.map +1 -1
  93. package/dist/src/mcpl/tool-presence.js +18 -17
  94. package/dist/src/mcpl/tool-presence.js.map +1 -1
  95. package/dist/src/mcpl/tool-signature.d.ts.map +1 -1
  96. package/dist/src/mcpl/tool-signature.js +17 -16
  97. package/dist/src/mcpl/tool-signature.js.map +1 -1
  98. package/dist/src/mcpl/toolset-host.d.ts +8 -26
  99. package/dist/src/mcpl/toolset-host.d.ts.map +1 -1
  100. package/dist/src/mcpl/toolset-host.js +16 -6
  101. package/dist/src/mcpl/toolset-host.js.map +1 -1
  102. package/dist/src/mcpl/toolsets-module.d.ts +14 -25
  103. package/dist/src/mcpl/toolsets-module.d.ts.map +1 -1
  104. package/dist/src/mcpl/toolsets-module.js +180 -50
  105. package/dist/src/mcpl/toolsets-module.js.map +1 -1
  106. package/dist/src/mcpl/transport.d.ts +1 -1
  107. package/dist/src/mcpl/transport.d.ts.map +1 -1
  108. package/dist/src/mcpl/transport.js +16 -16
  109. package/dist/src/mcpl/transport.js.map +1 -1
  110. package/dist/src/mcpl/types.d.ts +28 -12
  111. package/dist/src/mcpl/types.d.ts.map +1 -1
  112. package/dist/src/mcpl/types.js.map +1 -1
  113. package/dist/src/module-registry.d.ts +6 -7
  114. package/dist/src/module-registry.d.ts.map +1 -1
  115. package/dist/src/module-registry.js +6 -7
  116. package/dist/src/module-registry.js.map +1 -1
  117. package/dist/src/modules/api/index.d.ts.map +1 -1
  118. package/dist/src/modules/api/index.js +4 -2
  119. package/dist/src/modules/api/index.js.map +1 -1
  120. package/dist/src/modules/discord/index.d.ts.map +1 -1
  121. package/dist/src/modules/discord/index.js +33 -25
  122. package/dist/src/modules/discord/index.js.map +1 -1
  123. package/dist/src/modules/history/index.js +8 -6
  124. package/dist/src/modules/history/index.js.map +1 -1
  125. package/dist/src/modules/sender-name.d.ts +7 -0
  126. package/dist/src/modules/sender-name.d.ts.map +1 -0
  127. package/dist/src/modules/sender-name.js +10 -0
  128. package/dist/src/modules/sender-name.js.map +1 -0
  129. package/dist/src/modules/workspace/answers.d.ts +5 -1
  130. package/dist/src/modules/workspace/answers.d.ts.map +1 -1
  131. package/dist/src/modules/workspace/answers.js +16 -1
  132. package/dist/src/modules/workspace/answers.js.map +1 -1
  133. package/dist/src/modules/workspace/direct-write.d.ts.map +1 -1
  134. package/dist/src/modules/workspace/direct-write.js +6 -4
  135. package/dist/src/modules/workspace/direct-write.js.map +1 -1
  136. package/dist/src/modules/workspace/effects.d.ts +4 -2
  137. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  138. package/dist/src/modules/workspace/effects.js +50 -40
  139. package/dist/src/modules/workspace/effects.js.map +1 -1
  140. package/dist/src/modules/workspace/index.d.ts +1 -0
  141. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  142. package/dist/src/modules/workspace/index.js +66 -36
  143. package/dist/src/modules/workspace/index.js.map +1 -1
  144. package/dist/src/modules/workspace/observe.d.ts +51 -20
  145. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  146. package/dist/src/modules/workspace/observe.js +120 -82
  147. package/dist/src/modules/workspace/observe.js.map +1 -1
  148. package/dist/src/modules/workspace/reconcile.d.ts +7 -1
  149. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  150. package/dist/src/modules/workspace/reconcile.js +133 -37
  151. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  152. package/dist/src/notice-tags.d.ts +79 -0
  153. package/dist/src/notice-tags.d.ts.map +1 -0
  154. package/dist/src/notice-tags.js +83 -0
  155. package/dist/src/notice-tags.js.map +1 -0
  156. package/dist/src/reasoning-loss-notice.d.ts.map +1 -1
  157. package/dist/src/reasoning-loss-notice.js +5 -3
  158. package/dist/src/reasoning-loss-notice.js.map +1 -1
  159. package/dist/src/silent-heartbeat.d.ts +1 -53
  160. package/dist/src/silent-heartbeat.d.ts.map +1 -1
  161. package/dist/src/silent-heartbeat.js +56 -3
  162. package/dist/src/silent-heartbeat.js.map +1 -1
  163. package/dist/src/supplied-text.d.ts +35 -0
  164. package/dist/src/supplied-text.d.ts.map +1 -0
  165. package/dist/src/supplied-text.js +141 -0
  166. package/dist/src/supplied-text.js.map +1 -0
  167. package/dist/src/tool-args.d.ts.map +1 -1
  168. package/dist/src/tool-args.js +9 -8
  169. package/dist/src/tool-args.js.map +1 -1
  170. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  171. package/dist/src/tool-image-ledger.js +2 -1
  172. package/dist/src/tool-image-ledger.js.map +1 -1
  173. package/dist/src/tool-presentation.d.ts.map +1 -1
  174. package/dist/src/tool-presentation.js +5 -4
  175. package/dist/src/tool-presentation.js.map +1 -1
  176. package/dist/src/tune-out/coordinator.d.ts +3 -2
  177. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  178. package/dist/src/tune-out/coordinator.js +24 -26
  179. package/dist/src/tune-out/coordinator.js.map +1 -1
  180. package/dist/src/types/agent.d.ts +23 -9
  181. package/dist/src/types/agent.d.ts.map +1 -1
  182. package/dist/src/types/framework.d.ts +43 -0
  183. package/dist/src/types/framework.d.ts.map +1 -1
  184. package/dist/src/types/module.d.ts +22 -11
  185. package/dist/src/types/module.d.ts.map +1 -1
  186. package/package.json +2 -2
  187. package/src/agent.ts +4 -1
  188. package/src/api/mcp-server-core.ts +3 -14
  189. package/src/api/server.ts +7 -3
  190. package/src/auto-continue.ts +8 -2
  191. package/src/code-execution/isolate/runner.ts +7 -5
  192. package/src/code-execution/isolate/scripts.ts +3 -2
  193. package/src/framework.ts +1132 -492
  194. package/src/gate/event-gate.ts +128 -47
  195. package/src/gate/index.ts +1 -1
  196. package/src/gate/types.ts +12 -2
  197. package/src/heartbeat/heartbeat.ts +48 -9
  198. package/src/held-writes.ts +3 -3
  199. package/src/host-presentation.ts +605 -0
  200. package/src/index.ts +2 -2
  201. package/src/line-reader.ts +58 -0
  202. package/src/mcpl/channel-registry.ts +137 -52
  203. package/src/mcpl/conversation-router.ts +2 -1
  204. package/src/mcpl/convert-block.ts +17 -4
  205. package/src/mcpl/hook-orchestrator.ts +4 -3
  206. package/src/mcpl/inbound-source.ts +3 -1
  207. package/src/mcpl/modern-connection.ts +11 -7
  208. package/src/mcpl/protocol-family.ts +24 -3
  209. package/src/mcpl/push-handler.ts +2 -2
  210. package/src/mcpl/references.ts +31 -23
  211. package/src/mcpl/server-connection.ts +20 -18
  212. package/src/mcpl/skip-reply-wake.ts +35 -0
  213. package/src/mcpl/tool-presence.ts +18 -17
  214. package/src/mcpl/tool-signature.ts +17 -16
  215. package/src/mcpl/toolset-host.ts +18 -6
  216. package/src/mcpl/toolsets-module.ts +142 -50
  217. package/src/mcpl/transport.ts +18 -14
  218. package/src/mcpl/types.ts +29 -12
  219. package/src/module-registry.ts +6 -7
  220. package/src/modules/api/index.ts +4 -2
  221. package/src/modules/discord/index.ts +37 -25
  222. package/src/modules/history/index.ts +8 -6
  223. package/src/modules/sender-name.ts +9 -0
  224. package/src/modules/workspace/answers.ts +20 -2
  225. package/src/modules/workspace/direct-write.ts +4 -3
  226. package/src/modules/workspace/effects.ts +50 -40
  227. package/src/modules/workspace/index.ts +58 -34
  228. package/src/modules/workspace/observe.ts +139 -88
  229. package/src/modules/workspace/reconcile.ts +159 -36
  230. package/src/notice-tags.ts +84 -0
  231. package/src/reasoning-loss-notice.ts +5 -3
  232. package/src/silent-heartbeat.ts +4 -3
  233. package/src/supplied-text.ts +154 -0
  234. package/src/tool-args.ts +9 -8
  235. package/src/tool-image-ledger.ts +2 -1
  236. package/src/tool-presentation.ts +5 -4
  237. package/src/tune-out/coordinator.ts +25 -27
  238. package/src/types/agent.ts +23 -9
  239. package/src/types/framework.ts +44 -0
  240. package/src/types/module.ts +23 -11
@@ -127,17 +127,28 @@ export declare function shownValue(value: unknown): string;
127
127
  * left out.
128
128
  */
129
129
  export declare function checkToolInput(tool: string, input: Record<string, unknown>, properties: Readonly<Record<string, unknown>>, notes: string[], means?: Readonly<Record<string, string>>): Record<string, unknown>;
130
+ /** The event types the gate can see from an MCPL server: its pushes and its
131
+ * channels' messages. */
132
+ export declare const MCPL_GATE_EVENT_TYPES: readonly string[];
133
+ /** The event types a host knows a source sends (EventGate's
134
+ * `eventTypesFrom`), or undefined when it could send any. */
135
+ export type EventTypesFrom = (source: string) => readonly string[] | undefined;
130
136
  /**
131
- * Find rules made unreachable by earlier, broader rules (first match wins).
137
+ * Find rules an earlier, broader rule keeps from applying (first match wins),
138
+ * in whole or for some event types.
132
139
  * The 2026-08-08 Mythos incident is the canonical catch: a prepended
133
140
  * `{scope:[mcpl:channel-incoming]}` sampler silently made the
134
141
  * direct-address and mention rules dead for the whole incoming lane.
135
142
  * `passthrough` observers shadow nothing — non-firing matches fall through.
143
+ * `eventTypesFrom` leaves out types a rule's source is known never to send:
144
+ * a rule for an MCPL server's events isn't told about another rule that
145
+ * takes every `external-message`.
136
146
  */
137
- export declare function findShadowedPolicies(policies: GatePolicy[]): ShadowWarning[];
138
- /** Human-readable one-liner for a ShadowWarning, used in tool results,
139
- * traces, and gate_status alike so the same hazard reads the same way
140
- * everywhere. */
147
+ export declare function findShadowedPolicies(policies: GatePolicy[], eventTypesFrom?: EventTypesFrom): ShadowWarning[];
148
+ /** A ShadowWarning in words, used in tool results, traces, and gate_status
149
+ * alike so the same note reads the same way everywhere. It says which of
150
+ * three it is (the rule never applies; it misses some of its events; it
151
+ * may not be meant for those events at all) and what to do. */
141
152
  export declare function formatShadowWarning(w: ShadowWarning): string;
142
153
  export declare class EventGate {
143
154
  private configPath;
@@ -207,8 +218,9 @@ export declare class EventGate {
207
218
  /** Lifetime count of buffer-cap evictions (see bufferForInference). */
208
219
  private droppedBufferedEvents;
209
220
  private stats;
210
- private shadowWarningsCache;
211
221
  private shadowWarningsFingerprint;
222
+ /** See the constructor's `eventTypesFrom`. */
223
+ private eventTypesFromFn;
212
224
  private totalEvaluations;
213
225
  private defaultTriggered;
214
226
  private defaultSkipped;
@@ -293,6 +305,11 @@ export declare class EventGate {
293
305
  * (WakeProvenance.line), for a fresh start of the wake's turn to decide
294
306
  * (WakeLine). Absent: every batched wake writes its line, as before. */
295
307
  isNewestEntry?: (entry: GateEntryRef) => boolean;
308
+ /** The event types the gate can see from a source, when the host knows
309
+ * them (an MCPL server's id: MCPL_GATE_EVENT_TYPES), else undefined.
310
+ * The rule-order notes (findShadowedPolicies) leave out types a rule's
311
+ * source never sends. Absent: any source can send any type. */
312
+ eventTypesFrom?: EventTypesFrom;
296
313
  });
297
314
  /**
298
315
  * Write the starting rules to gate.json, as given, when it's absent, and
@@ -553,10 +570,17 @@ export declare class EventGate {
553
570
  * cheap (policy lists are tens of entries at most). */
554
571
  lintShadows(): ShadowWarning[];
555
572
  /**
556
- * Recompute shadow warnings and, when the set changed and is non-empty,
557
- * emit a `gate:shadow-warnings` trace so the hazard lands in ops
558
- * observability at the moment the order changed — not at the next missed
559
- * DM. Called from writeConfig and reloadIfChanged.
573
+ * The sources the host knows changed (eventTypesFrom answers differently),
574
+ * as when an MCPL server connects or is removed: the rule-order notes are
575
+ * made again, and traced if they changed, as a change to the rules would.
576
+ */
577
+ sourcesChanged(): void;
578
+ /**
579
+ * Recompute shadow warnings and, when the set changed, emit a
580
+ * `gate:shadow-warnings` trace so the hazard lands in ops observability at
581
+ * the moment the order changed — not at the next missed DM — and, with an
582
+ * empty list, the moment the last of them went. Called from writeConfig,
583
+ * reloadIfChanged and sourcesChanged.
560
584
  */
561
585
  private refreshShadowWarnings;
562
586
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"event-gate.d.ts","sourceRoot":"","sources":["../../../src/gate/event-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EAGV,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,aAAa,EAEb,UAAU,EACV,aAAa,EACb,YAAY,EAGZ,OAAO,EAEP,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAC5E,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,GACrG,MAAM,YAAY,CAAC;AAiEpB,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;8DAI0D;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;gCAE4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;mFAC+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;8EAC0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;iEAE6D;IAC7D,SAAS,EAAE,OAAO,CAAC;IACnB;;;wEAGoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;2EACuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;qEAEqE;AACrE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B;;;+EAG2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;gFAC4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;kEAO8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;4CAEwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;mEAC+D;IAC/D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;oBAKgB;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAkED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA6BD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,GAAG,SAAS,CA8BjF;AAWD;kEACkE;AAClE,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhE;AA+KD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWjD;AA+JD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAC5G,KAAK,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GAC3C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB;AAwnCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE,CAa5E;AAED;;kBAEkB;AAClB,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAI5D;AA6CD,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAa;IAC3B,2DAA2D;IAC3D,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAwB;IAChD;;;;;;yEAMqE;IACrE,OAAO,CAAC,UAAU,CAAqB;IACvC,oFAAoF;IACpF,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,mBAAmB,CAAuB;IAClD;mEAC+D;IAC/D,OAAO,CAAC,WAAW,CAAuB;IAC1C;2EACuE;IACvE,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAuB;IAC9C;;sBAEkB;IAClB,OAAO,CAAC,WAAW,CAAuB;IAC1C;mEAC+D;IAC/D,OAAO,CAAC,YAAY,CAAuB;IAC3C,sHAAsH;IACtH,OAAO,CAAC,cAAc,CAAuB;IAC7C,mGAAmG;IACnG,OAAO,CAAC,kBAAkB,CAAS;IAGnC,OAAO,CAAC,cAAc,CAAoC;IAI1D,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAkB;IACtC,qDAAqD;IACrD,OAAO,CAAC,OAAO,CAAmC;IAClD;;gEAE4D;IAC5D,OAAO,CAAC,SAAS,CAAqE;IACtF,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,sBAAsB,CAA+C;IAC7E;sEACkE;IAClE,OAAO,CAAC,kBAAkB,CAAK;IAC/B;;oEAEgE;IAChE,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,gBAAgB,CAAM;IAG9B,OAAO,CAAC,gBAAgB,CAA8C;IAEtE,OAAO,CAAC,qBAAqB,CAA0C;IAEvE,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,kBAAkB,CAA6B;IAGvD,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,eAAe,CAAsB;IAC7C,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,uEAAuE;IACvE,OAAO,CAAC,qBAAqB,CAAK;IAGlC,OAAO,CAAC,KAAK,CAAkC;IAI/C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,yBAAyB,CAAQ;IAGzC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,kBAAkB,CAA6D;IAOvF,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,UAAU,CAAqB;IAGvC,OAAO,CAAC,QAAQ,CAAS;IAOzB,OAAO,CAAC,cAAc,CAAoD;IAC1E;;6DAEyD;IACzD,OAAO,CAAC,WAAW,CAAqD;IAIxE,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C;iEAC6D;IAC7D,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,mBAAmB,CAAK;IAGhC,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,YAAY,CAQP;IACb,OAAO,CAAC,kBAAkB,CAAmH;IAC7I,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,qBAAqB,CAA8C;IAC3E,OAAO,CAAC,cAAc,CAAC,CAA+D;IACtF,OAAO,CAAC,eAAe,CAAC,CAAmC;IAC3D;8DAC0D;IAC1D,OAAO,CAAC,GAAG,CAAe;IAE1B,YAAY,IAAI,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,UAAU,CAAC;QAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;QAC3C,UAAU,EAAE,CACV,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,EAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,cAAc,KACvB,OAAO,CAAC;QACb;;mCAE2B;QAC3B,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;QACnI,aAAa,EAAE,MAAM,MAAM,EAAE,CAAC;QAC9B,kFAAkF;QAClF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;QACnB,0EAA0E;QAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB;kFAC0E;QAC1E,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB;;;0EAGkE;QAClE,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;QACtD,8DAA8D;QAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,yDAAyD;QACzD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC/B;;;;;;kEAM0D;QAC1D,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,GAAG,SAAS,CAAC;QAClE;;;sBAGc;QACd,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,KAAK,MAAM,CAAC;QAC5E;;;;;iFAKyE;QACzE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;KAClD,EA+FA;IAMD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,eAAe;IAwKvB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAUpB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IA4CtB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB,8GAA8G;IAC9G,OAAO,CAAC,QAAQ;IAgBhB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,eAAe;IAyBvB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,eAAe;IA+CvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;IACH,SAAS,CACP,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACzE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;KAC7C,GACA,UAAU,CA+CZ;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBlC;IAED;;;;;OAKG;IACH,eAAe,IAAI,MAAM,EAAE,CAI1B;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,WAAW;IA+CnB,OAAO,CAAC,eAAe;IAiFvB,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAwF1C;IAED,OAAO,CAAC,eAAe;IAsDvB;;;8EAG0E;IAC1E,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,cAAc;IAiDtB,OAAO,CAAC,kBAAkB;IAuB1B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA+BpB;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAUvC;IAED,+GAA+G;IAC/G,OAAO,CAAC,WAAW;IAiDnB;;;;;OAKG;IACH,cAAc,IAAI,MAAM,EAAE,CAKzB;IAED;;;;;;;;;OASG;IACH,UAAU,IAAI,YAAY,EAAE,CAa3B;IAMD;4DACwD;IACxD,WAAW,IAAI,aAAa,EAAE,CAE7B;IAED;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;OAGG;IACH,uBAAuB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAYzF;IAMD,6EAA6E;IAC7E,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;IA8CtB,OAAO,CAAC,YAAY;IAsDpB,OAAO,CAAC,aAAa;IA6FrB,oEAAoE;IACpE,OAAO,CAAC,WAAW;IAanB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAoDlB;qFACiF;IACjF,OAAO,CAAC,YAAY;IAapB;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;IActB,iHAAiH;IACjH,OAAO,CAAC,YAAY;IAKpB;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAqBzE;IAED,gDAAgD;IAChD,OAAO,CAAC,iBAAiB;IAwBzB;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAqErB;;4BAEwB;IACxB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,WAAW;IASnB,uHAAuH;IACvH,OAAO,CAAC,qBAAqB;IAe7B,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAW1C;IAED;;;;;;yBAMqB;IACrB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAG1C;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAIxC;IAED;;;;;;;;OAQG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAYnC;IAED,OAAO,CAAC,2BAA2B;IAqBnC;;;oDAGgD;IAChD,oBAAoB,IAAI;QACtB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,UAAU,EAAE,MAAM,CAAC;QACnB,4GAA4G;QAC5G,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAWA;IAMD,8DAA8D;IAC9D,OAAO,CAAC,kBAAkB;IA6B1B,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAqB9E;IAED;;;;;;OAMG;IACH,WAAW,IAAI,IAAI,CAIlB;IAED;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMjC;IAMD;;;;;;OAMG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAe,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAqDvG;IAED,mEAAmE;IACnE,UAAU,IAAI,OAAO,CAOpB;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IA4BrB,6CAA6C;IAC7C,aAAa,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAIhG;IAED,4EAA4E;IAC5E,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI7D;IAED;;;;;;;;;OASG;IACH,OAAO,CAAC,cAAc;IA+CtB,yGAAyG;IACzG,OAAO,CAAC,yBAAyB;IAQjC,iBAAiB,IAAI,cAAc,CAQlC;IAEK,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAOvF;IAED,SAAS,IAAI,UAAU,CA6EtB;IAED,sEAAsE;IACtE,OAAO,CAAC,kBAAkB;IAU1B,wFAAwF;IACxF,OAAO,CAAC,kBAAkB;IAa1B,OAAO,IAAI,IAAI,CAyCd;CACF"}
1
+ {"version":3,"file":"event-gate.d.ts","sourceRoot":"","sources":["../../../src/gate/event-gate.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@
10
10
  * and are always dispatched to modules — the gate decides whether to spend
11
11
  * inference tokens, not whether the agent should know about the event.
12
12
  */
13
+ import { NOTICE_TAG } from '../notice-tags.js';
14
+ import { cutToFit, suppliedValue } from '../supplied-text.js';
13
15
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
14
16
  import { basename, dirname, join } from 'node:path';
15
17
  import { GateScript } from './gate-script.js';
@@ -151,7 +153,7 @@ function referenceLine(count, channel, oldest, now) {
151
153
  /** A handed batched-wake line's text (WakeLine), as it reads when written at
152
154
  * `now`: the gate's words, its message's age counted to then. */
153
155
  export function wakeLineText(line, now) {
154
- return `[Gate: 1 event matched]\n\n${referenceLine(1, line.shown, line.at, now)}`;
156
+ return `[${NOTICE_TAG.gate}: 1 event matched]\n\n${referenceLine(1, line.shown, line.at, now)}`;
155
157
  }
156
158
  /** The event's own stored entry, as the framework is asked about it. */
157
159
  function entryRef(event) {
@@ -1476,32 +1478,69 @@ function globAtLeastAsBroad(earlier, later) {
1476
1478
  return true;
1477
1479
  return earlier === later;
1478
1480
  }
1481
+ /** The event types the gate can see from an MCPL server: its pushes and its
1482
+ * channels' messages. */
1483
+ export const MCPL_GATE_EVENT_TYPES = ['mcpl:push-event', 'mcpl:channel-incoming'];
1484
+ /** The event types `rule` can match: its scope's, narrowed to those its
1485
+ * source is known to send; 'all' when neither says. */
1486
+ function typesSeenBy(rule, eventTypesFrom) {
1487
+ const scope = rule.match.scope && rule.match.scope.length > 0 ? rule.match.scope : undefined;
1488
+ const source = rule.match.source;
1489
+ let sent;
1490
+ if (eventTypesFrom && source !== undefined && !source.includes('*')) {
1491
+ try {
1492
+ sent = eventTypesFrom(source);
1493
+ }
1494
+ catch {
1495
+ sent = undefined;
1496
+ }
1497
+ }
1498
+ if (scope && sent)
1499
+ return { types: scope.filter((t) => sent.includes(t)), known: true };
1500
+ if (scope)
1501
+ return { types: scope, known: true };
1502
+ if (sent)
1503
+ return { types: [...sent], known: true };
1504
+ return { types: 'all', known: false };
1505
+ }
1479
1506
  /**
1480
- * Event types for which `earlier` provably matches EVERY event that `later`
1481
- * would match — i.e. the types for which `later` is unreachable when
1482
- * `earlier` sits before it and consumes its matches. Returns null when
1483
- * subsumption can't be proven (which is not proof of safety — the lint is
1484
- * deliberately one-sided so every warning it emits is true).
1507
+ * Whether `earlier` provably matches events `later` would match, so that
1508
+ * `later` doesn't see them when `earlier` sits before it and consumes its
1509
+ * matches: the event types concerned, whether that's every event `later`
1510
+ * would match, and whether `later` is known to see those types. Returns null
1511
+ * when it can't be proven (which is not proof of safety — the lint is
1512
+ * deliberately one-sided so every note it emits is true).
1485
1513
  */
1486
- function subsumedEventTypes(earlier, later) {
1514
+ function subsumedEventTypes(earlier, later, eventTypesFrom) {
1487
1515
  const e = earlier.match;
1488
1516
  const l = later.match;
1489
- // Scope: which of `later`'s event types does `earlier` cover?
1490
- let covered;
1491
- if (!e.scope || e.scope.length === 0) {
1492
- covered = l.scope && l.scope.length > 0 ? l.scope : 'all';
1493
- }
1494
- else if (!l.scope || l.scope.length === 0) {
1495
- // `later` matches all types; `earlier` only consumes its own scope, so
1496
- // the shadow is partial — exactly those types.
1497
- covered = e.scope;
1517
+ // Event types: which of those `later` can match does `earlier` cover?
1518
+ const seen = typesSeenBy(later, eventTypesFrom);
1519
+ const earlierTypes = e.scope && e.scope.length > 0 ? e.scope : 'all';
1520
+ let eventTypes;
1521
+ let whole;
1522
+ let known = seen.known;
1523
+ if (earlierTypes === 'all') {
1524
+ eventTypes = seen.types;
1525
+ whole = true;
1526
+ }
1527
+ else if (seen.types === 'all') {
1528
+ // `later` matches every type; `earlier` only consumes its own scope, so
1529
+ // the overlap is partial — exactly those types, which may never reach
1530
+ // `later`.
1531
+ eventTypes = earlierTypes;
1532
+ whole = false;
1498
1533
  }
1499
1534
  else {
1500
- const overlap = l.scope.filter((t) => e.scope.includes(t));
1535
+ const overlap = seen.types.filter((t) => earlierTypes.includes(t));
1501
1536
  if (overlap.length === 0)
1502
1537
  return null;
1503
- covered = overlap;
1538
+ eventTypes = overlap;
1539
+ whole = overlap.length === seen.types.length;
1540
+ known = true;
1504
1541
  }
1542
+ if (Array.isArray(eventTypes) && eventTypes.length === 0)
1543
+ return null;
1505
1544
  // Every remaining discriminator on `earlier` must be at least as broad as
1506
1545
  // `later`'s, otherwise some `later` events slip past `earlier`.
1507
1546
  if (!globAtLeastAsBroad(e.source, l.source))
@@ -1533,37 +1572,54 @@ function subsumedEventTypes(earlier, later) {
1533
1572
  return null;
1534
1573
  if (e.tagsNone && !subsetOf(e.tagsNone, l.tagsNone ?? []))
1535
1574
  return null;
1536
- return covered;
1575
+ return { eventTypes, whole, known };
1537
1576
  }
1538
1577
  /**
1539
- * Find rules made unreachable by earlier, broader rules (first match wins).
1578
+ * Find rules an earlier, broader rule keeps from applying (first match wins),
1579
+ * in whole or for some event types.
1540
1580
  * The 2026-08-08 Mythos incident is the canonical catch: a prepended
1541
1581
  * `{scope:[mcpl:channel-incoming]}` sampler silently made the
1542
1582
  * direct-address and mention rules dead for the whole incoming lane.
1543
1583
  * `passthrough` observers shadow nothing — non-firing matches fall through.
1584
+ * `eventTypesFrom` leaves out types a rule's source is known never to send:
1585
+ * a rule for an MCPL server's events isn't told about another rule that
1586
+ * takes every `external-message`.
1544
1587
  */
1545
- export function findShadowedPolicies(policies) {
1588
+ export function findShadowedPolicies(policies, eventTypesFrom) {
1546
1589
  const out = [];
1547
1590
  for (let i = 0; i < policies.length; i++) {
1548
1591
  const earlier = policies[i];
1549
1592
  if (earlier.passthrough)
1550
1593
  continue;
1551
1594
  for (let j = i + 1; j < policies.length; j++) {
1552
- const covered = subsumedEventTypes(earlier, policies[j]);
1553
- if (covered) {
1554
- out.push({ earlier: earlier.name, later: policies[j].name, eventTypes: covered });
1595
+ const found = subsumedEventTypes(earlier, policies[j], eventTypesFrom);
1596
+ if (found) {
1597
+ out.push({ earlier: earlier.name, later: policies[j].name, ...found });
1555
1598
  }
1556
1599
  }
1557
1600
  }
1558
1601
  return out;
1559
1602
  }
1560
- /** Human-readable one-liner for a ShadowWarning, used in tool results,
1561
- * traces, and gate_status alike so the same hazard reads the same way
1562
- * everywhere. */
1603
+ /** A ShadowWarning in words, used in tool results, traces, and gate_status
1604
+ * alike so the same note reads the same way everywhere. It says which of
1605
+ * three it is (the rule never applies; it misses some of its events; it
1606
+ * may not be meant for those events at all) and what to do. */
1563
1607
  export function formatShadowWarning(w) {
1564
- const types = w.eventTypes === 'all' ? 'ALL event types' : w.eventTypes.join(', ');
1565
- return `rule "${w.earlier}" makes "${w.later}" unreachable for ${types} `
1566
- + `(first match wins — every event "${w.later}" would match is consumed by "${w.earlier}" first)`;
1608
+ const later = `"${w.later}"`;
1609
+ const earlier = `"${w.earlier}"`;
1610
+ const move = `move ${later} above ${earlier} (wake_add_rule with the whole rule and insertBefore: "${w.earlier}")`;
1611
+ if (w.whole) {
1612
+ return `${later} never applies: ${earlier} comes first and matches every event ${later} would. `
1613
+ + `If ${later} should apply, ${move}, or narrow ${earlier}.`;
1614
+ }
1615
+ const types = w.eventTypes === 'all' ? 'all' : w.eventTypes.join(', ');
1616
+ if (w.known) {
1617
+ return `${earlier} comes first and takes ${later}'s ${types} events, so ${later} applies only to its others. `
1618
+ + `If it should apply to those too, ${move}.`;
1619
+ }
1620
+ return `${earlier} comes first and takes every ${types} event, so ${later} sees none. `
1621
+ + `Nothing to do unless ${later} is meant for ${types} events; then ${move}. `
1622
+ + `A scope on ${later} naming the event types it's for clears this note.`;
1567
1623
  }
1568
1624
  /** The text of a thrown value, for a log line. It never throws itself, whatever was thrown. */
1569
1625
  function errorText(err) {
@@ -1682,10 +1738,12 @@ export class EventGate {
1682
1738
  droppedBufferedEvents = 0;
1683
1739
  // Per-policy stats
1684
1740
  stats = new Map();
1685
- // Shadow-lint cache (see refreshShadowWarnings) — recomputed on every
1686
- // config change, fingerprinted so an unchanged hazard set doesn't re-trace.
1687
- shadowWarningsCache = [];
1741
+ // The shadow lint's last findings (see refreshShadowWarnings), recomputed
1742
+ // on every config change and fingerprinted so an unchanged set doesn't
1743
+ // re-trace.
1688
1744
  shadowWarningsFingerprint = '[]';
1745
+ /** See the constructor's `eventTypesFrom`. */
1746
+ eventTypesFromFn;
1689
1747
  // Observability counters for events that didn't match any policy
1690
1748
  totalEvaluations = 0;
1691
1749
  defaultTriggered = 0;
@@ -1743,6 +1801,7 @@ export class EventGate {
1743
1801
  this.resolveRouteChannelFn = opts.resolveRouteChannel ?? defaultRouteChannel;
1744
1802
  this.channelShownFn = opts.channelShown;
1745
1803
  this.isNewestEntryFn = opts.isNewestEntry;
1804
+ this.eventTypesFromFn = opts.eventTypesFrom;
1746
1805
  this.now = opts.now ?? (() => Date.now());
1747
1806
  this.judgeFn = opts.judge;
1748
1807
  this.changesJudgedContextFn = opts.changesJudgedContext;
@@ -2988,22 +3047,31 @@ export class EventGate {
2988
3047
  /** Current shadow-lint findings for the live policy order. Fresh compute —
2989
3048
  * cheap (policy lists are tens of entries at most). */
2990
3049
  lintShadows() {
2991
- return findShadowedPolicies(this.config.policies);
3050
+ return findShadowedPolicies(this.config.policies, this.eventTypesFromFn);
3051
+ }
3052
+ /**
3053
+ * The sources the host knows changed (eventTypesFrom answers differently),
3054
+ * as when an MCPL server connects or is removed: the rule-order notes are
3055
+ * made again, and traced if they changed, as a change to the rules would.
3056
+ */
3057
+ sourcesChanged() {
3058
+ this.refreshShadowWarnings('sources-changed');
2992
3059
  }
2993
3060
  /**
2994
- * Recompute shadow warnings and, when the set changed and is non-empty,
2995
- * emit a `gate:shadow-warnings` trace so the hazard lands in ops
2996
- * observability at the moment the order changed — not at the next missed
2997
- * DM. Called from writeConfig and reloadIfChanged.
3061
+ * Recompute shadow warnings and, when the set changed, emit a
3062
+ * `gate:shadow-warnings` trace so the hazard lands in ops observability at
3063
+ * the moment the order changed — not at the next missed DM — and, with an
3064
+ * empty list, the moment the last of them went. Called from writeConfig,
3065
+ * reloadIfChanged and sourcesChanged.
2998
3066
  */
2999
3067
  refreshShadowWarnings(reason) {
3000
3068
  const warnings = this.lintShadows();
3001
3069
  const fingerprint = JSON.stringify(warnings);
3002
3070
  if (fingerprint === this.shadowWarningsFingerprint)
3003
3071
  return;
3072
+ const hadSome = this.shadowWarningsFingerprint !== '[]';
3004
3073
  this.shadowWarningsFingerprint = fingerprint;
3005
- this.shadowWarningsCache = warnings;
3006
- if (warnings.length > 0) {
3074
+ if (warnings.length > 0 || hadSome) {
3007
3075
  this.emitTrace({
3008
3076
  type: 'gate:shadow-warnings',
3009
3077
  reason,
@@ -3144,7 +3212,7 @@ export class EventGate {
3144
3212
  // Only events with no context entry of their own carry their content.
3145
3213
  const quoted = events.filter(e => !e.inContext);
3146
3214
  const referenced = events.filter(e => e.inContext);
3147
- const lines = quoted.map(e => `- [${e.policyName}] (${e.eventType}): ${e.content}`);
3215
+ const lines = quoted.map(e => `- [${e.policyName}] (${e.eventType}): ${suppliedValue(e.content)}`);
3148
3216
  // How each referenced channel is named in the line, in order.
3149
3217
  const shown = [];
3150
3218
  if (referenced.length > 0) {
@@ -3163,7 +3231,7 @@ export class EventGate {
3163
3231
  ? '(unknown channel)'
3164
3232
  : e.routeChannelId !== undefined && e.serverId !== undefined && this.channelShownFn
3165
3233
  ? this.channelShownFn({ serverId: e.serverId, channelId: e.routeChannelId })
3166
- : id;
3234
+ : suppliedValue(id);
3167
3235
  const key = JSON.stringify([e.serverId ?? null, id ?? null]);
3168
3236
  const entry = byChannel.get(key) ?? { name, count: 0, oldest: e.timestamp, label: e.channelLabel };
3169
3237
  entry.count += 1;
@@ -3176,7 +3244,7 @@ export class EventGate {
3176
3244
  // agent can still address tools that want the composite id. A name
3177
3245
  // may carry its own `#`, so one is added only where the name lacks
3178
3246
  // it, as at the other places that add a `#`.
3179
- const channel = label ? `${label.startsWith('#') ? label : `#${label}`} (${name})` : name;
3247
+ const channel = label ? `${label.startsWith('#') ? '' : '#'}${suppliedValue(label)} (${name})` : name;
3180
3248
  shown.push(channel);
3181
3249
  lines.push(referenceLine(count, channel, oldest, Date.now()));
3182
3250
  }
@@ -3188,7 +3256,7 @@ export class EventGate {
3188
3256
  // gate hands the line to the wake (WakeProvenance.line) and a fresh start
3189
3257
  // of the wake's turn decides it (WakeLine). Several messages, one with
3190
3258
  // anything after it, or content the line quotes, keep the line now.
3191
- const text = `[Gate: ${events.length} event${events.length > 1 ? 's' : ''} matched]\n\n${lines.join('\n')}`;
3259
+ const text = `[${NOTICE_TAG.gate}: ${events.length} event${events.length > 1 ? 's' : ''} matched]\n\n${lines.join('\n')}`;
3192
3260
  const only = events.length === 1 && events[0].inContext ? events[0] : undefined;
3193
3261
  let line;
3194
3262
  if (only && this.newestEntry(only)) {
@@ -3431,7 +3499,7 @@ export class EventGate {
3431
3499
  record.last = {
3432
3500
  at: Date.now(),
3433
3501
  verdict: outcome,
3434
- reason: safeSlice(reason, 0, 300),
3502
+ reason: cutToFit(suppliedValue(reason), 300),
3435
3503
  eventCount: state.events.length,
3436
3504
  durationMs,
3437
3505
  ...(!failed && typeof verdict.inputTokens === 'number' ? { inputTokens: verdict.inputTokens } : {}),
@@ -3440,7 +3508,7 @@ export class EventGate {
3440
3508
  this.judgeRecords.set(policyName, record);
3441
3509
  if (failed) {
3442
3510
  this.judgeFailStreak++;
3443
- this.judgeLastFailure = safeSlice(reason, 0, 200);
3511
+ this.judgeLastFailure = cutToFit(suppliedValue(reason), 200);
3444
3512
  }
3445
3513
  else {
3446
3514
  this.judgeFailStreak = 0;
@@ -3752,7 +3820,7 @@ export class EventGate {
3752
3820
  const placement = {};
3753
3821
  this.addMessageFn('user', [{
3754
3822
  type: 'text',
3755
- text: `[self-wake] your ${source} timer (${Math.round(ms / 1000)}s) elapsed — now ${nowIso}`,
3823
+ text: `[${NOTICE_TAG.selfWake}] your ${source} timer (${Math.round(ms / 1000)}s) elapsed — now ${nowIso}`,
3756
3824
  }], { source: 'gate:self-wake' }, agentName, placement);
3757
3825
  this.requestInferenceFn(agentName, `self-scheduled wake (${source}, ${Math.round(ms / 1000)}s)`, 'self-wake', undefined, placement);
3758
3826
  }, ms);
@@ -4008,7 +4076,9 @@ export class EventGate {
4008
4076
  this.judgeUnwiredNotice(), this.judgeFailingNotice(),
4009
4077
  ]
4010
4078
  .filter((e) => e !== null),
4011
- shadowWarnings: this.shadowWarningsCache.map(formatShadowWarning),
4079
+ // Fresh, not the cache: the sources the host knows (eventTypesFrom)
4080
+ // change as servers connect, with no change to the rules.
4081
+ shadowWarnings: this.lintShadows().map(formatShadowWarning),
4012
4082
  totalEvaluations: this.totalEvaluations,
4013
4083
  defaultDecisions: {
4014
4084
  triggered: this.defaultTriggered,