@animalabs/agent-framework 0.28.0 → 0.30.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 (289) hide show
  1. package/README.md +88 -25
  2. package/dist/src/admission/admit.d.ts +90 -0
  3. package/dist/src/admission/admit.d.ts.map +1 -0
  4. package/dist/src/admission/admit.js +43 -0
  5. package/dist/src/admission/admit.js.map +1 -0
  6. package/dist/src/agent.d.ts +21 -0
  7. package/dist/src/agent.d.ts.map +1 -1
  8. package/dist/src/agent.js +47 -7
  9. package/dist/src/agent.js.map +1 -1
  10. package/dist/src/api/mcp-server-core.d.ts.map +1 -1
  11. package/dist/src/api/mcp-server-core.js +3 -12
  12. package/dist/src/api/mcp-server-core.js.map +1 -1
  13. package/dist/src/api/server.d.ts.map +1 -1
  14. package/dist/src/api/server.js +7 -3
  15. package/dist/src/api/server.js.map +1 -1
  16. package/dist/src/author-presentation.d.ts +50 -0
  17. package/dist/src/author-presentation.d.ts.map +1 -0
  18. package/dist/src/author-presentation.js +58 -0
  19. package/dist/src/author-presentation.js.map +1 -0
  20. package/dist/src/auto-continue.d.ts +2 -0
  21. package/dist/src/auto-continue.d.ts.map +1 -1
  22. package/dist/src/auto-continue.js +5 -2
  23. package/dist/src/auto-continue.js.map +1 -1
  24. package/dist/src/code-execution/isolate/runner.d.ts +7 -5
  25. package/dist/src/code-execution/isolate/runner.d.ts.map +1 -1
  26. package/dist/src/code-execution/isolate/runner.js +7 -5
  27. package/dist/src/code-execution/isolate/runner.js.map +1 -1
  28. package/dist/src/code-execution/isolate/scripts.d.ts.map +1 -1
  29. package/dist/src/code-execution/isolate/scripts.js +3 -2
  30. package/dist/src/code-execution/isolate/scripts.js.map +1 -1
  31. package/dist/src/dendrite/index.d.ts +6 -0
  32. package/dist/src/dendrite/index.d.ts.map +1 -0
  33. package/dist/src/dendrite/index.js +3 -0
  34. package/dist/src/dendrite/index.js.map +1 -0
  35. package/dist/src/dendrite/presets.d.ts +60 -0
  36. package/dist/src/dendrite/presets.d.ts.map +1 -0
  37. package/dist/src/dendrite/presets.js +117 -0
  38. package/dist/src/dendrite/presets.js.map +1 -0
  39. package/dist/src/dendrite/registry.d.ts +260 -0
  40. package/dist/src/dendrite/registry.d.ts.map +1 -0
  41. package/dist/src/dendrite/registry.js +742 -0
  42. package/dist/src/dendrite/registry.js.map +1 -0
  43. package/dist/src/dendrite/types.d.ts +392 -0
  44. package/dist/src/dendrite/types.d.ts.map +1 -0
  45. package/dist/src/dendrite/types.js +24 -0
  46. package/dist/src/dendrite/types.js.map +1 -0
  47. package/dist/src/framework.d.ts +846 -67
  48. package/dist/src/framework.d.ts.map +1 -1
  49. package/dist/src/framework.js +4213 -924
  50. package/dist/src/framework.js.map +1 -1
  51. package/dist/src/gate/event-gate.d.ts +46 -14
  52. package/dist/src/gate/event-gate.d.ts.map +1 -1
  53. package/dist/src/gate/event-gate.js +143 -53
  54. package/dist/src/gate/event-gate.js.map +1 -1
  55. package/dist/src/gate/index.d.ts +1 -1
  56. package/dist/src/gate/index.d.ts.map +1 -1
  57. package/dist/src/gate/index.js +1 -1
  58. package/dist/src/gate/index.js.map +1 -1
  59. package/dist/src/gate/types.d.ts +12 -2
  60. package/dist/src/gate/types.d.ts.map +1 -1
  61. package/dist/src/heartbeat/heartbeat.d.ts +18 -0
  62. package/dist/src/heartbeat/heartbeat.d.ts.map +1 -1
  63. package/dist/src/heartbeat/heartbeat.js +34 -8
  64. package/dist/src/heartbeat/heartbeat.js.map +1 -1
  65. package/dist/src/held-writes.d.ts +3 -3
  66. package/dist/src/held-writes.js +3 -3
  67. package/dist/src/host-presentation.d.ts +174 -0
  68. package/dist/src/host-presentation.d.ts.map +1 -0
  69. package/dist/src/host-presentation.js +565 -0
  70. package/dist/src/host-presentation.js.map +1 -0
  71. package/dist/src/index.d.ts +7 -4
  72. package/dist/src/index.d.ts.map +1 -1
  73. package/dist/src/index.js +7 -2
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/line-reader.d.ts +4 -0
  76. package/dist/src/line-reader.d.ts.map +1 -0
  77. package/dist/src/line-reader.js +59 -0
  78. package/dist/src/line-reader.js.map +1 -0
  79. package/dist/src/mcpl/channel-registry.d.ts +118 -15
  80. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  81. package/dist/src/mcpl/channel-registry.js +266 -110
  82. package/dist/src/mcpl/channel-registry.js.map +1 -1
  83. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  84. package/dist/src/mcpl/conversation-router.js +2 -1
  85. package/dist/src/mcpl/conversation-router.js.map +1 -1
  86. package/dist/src/mcpl/convert-block.d.ts +1 -0
  87. package/dist/src/mcpl/convert-block.d.ts.map +1 -1
  88. package/dist/src/mcpl/convert-block.js +16 -4
  89. package/dist/src/mcpl/convert-block.js.map +1 -1
  90. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  91. package/dist/src/mcpl/hook-orchestrator.js +4 -3
  92. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  93. package/dist/src/mcpl/inbound-source.d.ts +3 -1
  94. package/dist/src/mcpl/inbound-source.d.ts.map +1 -1
  95. package/dist/src/mcpl/inbound-source.js +3 -1
  96. package/dist/src/mcpl/inbound-source.js.map +1 -1
  97. package/dist/src/mcpl/modern-connection.d.ts.map +1 -1
  98. package/dist/src/mcpl/modern-connection.js +11 -7
  99. package/dist/src/mcpl/modern-connection.js.map +1 -1
  100. package/dist/src/mcpl/protocol-family.d.ts +3 -2
  101. package/dist/src/mcpl/protocol-family.d.ts.map +1 -1
  102. package/dist/src/mcpl/protocol-family.js +25 -3
  103. package/dist/src/mcpl/protocol-family.js.map +1 -1
  104. package/dist/src/mcpl/push-coalescer.d.ts +9 -0
  105. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  106. package/dist/src/mcpl/push-coalescer.js +21 -0
  107. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  108. package/dist/src/mcpl/push-handler.js +2 -2
  109. package/dist/src/mcpl/push-handler.js.map +1 -1
  110. package/dist/src/mcpl/references.d.ts +12 -40
  111. package/dist/src/mcpl/references.d.ts.map +1 -1
  112. package/dist/src/mcpl/references.js +29 -23
  113. package/dist/src/mcpl/references.js.map +1 -1
  114. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  115. package/dist/src/mcpl/server-connection.js +20 -20
  116. package/dist/src/mcpl/server-connection.js.map +1 -1
  117. package/dist/src/mcpl/skip-reply-wake.d.ts +25 -0
  118. package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -1
  119. package/dist/src/mcpl/skip-reply-wake.js +25 -0
  120. package/dist/src/mcpl/skip-reply-wake.js.map +1 -1
  121. package/dist/src/mcpl/tool-presence.d.ts.map +1 -1
  122. package/dist/src/mcpl/tool-presence.js +18 -17
  123. package/dist/src/mcpl/tool-presence.js.map +1 -1
  124. package/dist/src/mcpl/tool-signature.d.ts.map +1 -1
  125. package/dist/src/mcpl/tool-signature.js +17 -16
  126. package/dist/src/mcpl/tool-signature.js.map +1 -1
  127. package/dist/src/mcpl/toolset-host.d.ts +8 -26
  128. package/dist/src/mcpl/toolset-host.d.ts.map +1 -1
  129. package/dist/src/mcpl/toolset-host.js +16 -6
  130. package/dist/src/mcpl/toolset-host.js.map +1 -1
  131. package/dist/src/mcpl/toolsets-module.d.ts +14 -25
  132. package/dist/src/mcpl/toolsets-module.d.ts.map +1 -1
  133. package/dist/src/mcpl/toolsets-module.js +187 -50
  134. package/dist/src/mcpl/toolsets-module.js.map +1 -1
  135. package/dist/src/mcpl/transport.d.ts +1 -1
  136. package/dist/src/mcpl/transport.d.ts.map +1 -1
  137. package/dist/src/mcpl/transport.js +16 -16
  138. package/dist/src/mcpl/transport.js.map +1 -1
  139. package/dist/src/mcpl/types.d.ts +28 -12
  140. package/dist/src/mcpl/types.d.ts.map +1 -1
  141. package/dist/src/mcpl/types.js.map +1 -1
  142. package/dist/src/module-registry.d.ts +6 -7
  143. package/dist/src/module-registry.d.ts.map +1 -1
  144. package/dist/src/module-registry.js +6 -7
  145. package/dist/src/module-registry.js.map +1 -1
  146. package/dist/src/modules/api/index.d.ts.map +1 -1
  147. package/dist/src/modules/api/index.js +4 -2
  148. package/dist/src/modules/api/index.js.map +1 -1
  149. package/dist/src/modules/discord/index.d.ts.map +1 -1
  150. package/dist/src/modules/discord/index.js +33 -25
  151. package/dist/src/modules/discord/index.js.map +1 -1
  152. package/dist/src/modules/history/index.js +8 -6
  153. package/dist/src/modules/history/index.js.map +1 -1
  154. package/dist/src/modules/sender-name.d.ts +7 -0
  155. package/dist/src/modules/sender-name.d.ts.map +1 -0
  156. package/dist/src/modules/sender-name.js +10 -0
  157. package/dist/src/modules/sender-name.js.map +1 -0
  158. package/dist/src/modules/workspace/answers.d.ts +5 -1
  159. package/dist/src/modules/workspace/answers.d.ts.map +1 -1
  160. package/dist/src/modules/workspace/answers.js +16 -1
  161. package/dist/src/modules/workspace/answers.js.map +1 -1
  162. package/dist/src/modules/workspace/direct-write.d.ts.map +1 -1
  163. package/dist/src/modules/workspace/direct-write.js +6 -4
  164. package/dist/src/modules/workspace/direct-write.js.map +1 -1
  165. package/dist/src/modules/workspace/effects.d.ts +4 -2
  166. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  167. package/dist/src/modules/workspace/effects.js +50 -40
  168. package/dist/src/modules/workspace/effects.js.map +1 -1
  169. package/dist/src/modules/workspace/index.d.ts +1 -0
  170. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  171. package/dist/src/modules/workspace/index.js +66 -36
  172. package/dist/src/modules/workspace/index.js.map +1 -1
  173. package/dist/src/modules/workspace/observe.d.ts +51 -20
  174. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  175. package/dist/src/modules/workspace/observe.js +120 -82
  176. package/dist/src/modules/workspace/observe.js.map +1 -1
  177. package/dist/src/modules/workspace/reconcile.d.ts +7 -1
  178. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  179. package/dist/src/modules/workspace/reconcile.js +133 -37
  180. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  181. package/dist/src/notice-tags.d.ts +81 -0
  182. package/dist/src/notice-tags.d.ts.map +1 -0
  183. package/dist/src/notice-tags.js +85 -0
  184. package/dist/src/notice-tags.js.map +1 -0
  185. package/dist/src/reasoning-loss-notice.d.ts.map +1 -1
  186. package/dist/src/reasoning-loss-notice.js +5 -3
  187. package/dist/src/reasoning-loss-notice.js.map +1 -1
  188. package/dist/src/silent-heartbeat.d.ts +5 -55
  189. package/dist/src/silent-heartbeat.d.ts.map +1 -1
  190. package/dist/src/silent-heartbeat.js +63 -7
  191. package/dist/src/silent-heartbeat.js.map +1 -1
  192. package/dist/src/stored-injections.d.ts +4 -0
  193. package/dist/src/stored-injections.d.ts.map +1 -1
  194. package/dist/src/stored-injections.js +6 -0
  195. package/dist/src/stored-injections.js.map +1 -1
  196. package/dist/src/supplied-text.d.ts +35 -0
  197. package/dist/src/supplied-text.d.ts.map +1 -0
  198. package/dist/src/supplied-text.js +141 -0
  199. package/dist/src/supplied-text.js.map +1 -0
  200. package/dist/src/tool-args.d.ts.map +1 -1
  201. package/dist/src/tool-args.js +9 -8
  202. package/dist/src/tool-args.js.map +1 -1
  203. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  204. package/dist/src/tool-image-ledger.js +2 -1
  205. package/dist/src/tool-image-ledger.js.map +1 -1
  206. package/dist/src/tool-presentation.d.ts.map +1 -1
  207. package/dist/src/tool-presentation.js +5 -4
  208. package/dist/src/tool-presentation.js.map +1 -1
  209. package/dist/src/tune-out/coordinator.d.ts +382 -11
  210. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  211. package/dist/src/tune-out/coordinator.js +1100 -119
  212. package/dist/src/tune-out/coordinator.js.map +1 -1
  213. package/dist/src/tune-out/tools.d.ts +101 -5
  214. package/dist/src/tune-out/tools.d.ts.map +1 -1
  215. package/dist/src/tune-out/tools.js +55 -18
  216. package/dist/src/tune-out/tools.js.map +1 -1
  217. package/dist/src/types/agent.d.ts +48 -9
  218. package/dist/src/types/agent.d.ts.map +1 -1
  219. package/dist/src/types/framework.d.ts +142 -0
  220. package/dist/src/types/framework.d.ts.map +1 -1
  221. package/dist/src/types/module.d.ts +22 -11
  222. package/dist/src/types/module.d.ts.map +1 -1
  223. package/dist/src/types/trace.d.ts +136 -0
  224. package/dist/src/types/trace.d.ts.map +1 -1
  225. package/package.json +3 -3
  226. package/src/admission/admit.ts +113 -0
  227. package/src/agent.ts +52 -7
  228. package/src/api/mcp-server-core.ts +3 -14
  229. package/src/api/server.ts +7 -3
  230. package/src/author-presentation.ts +81 -0
  231. package/src/auto-continue.ts +8 -2
  232. package/src/code-execution/isolate/runner.ts +7 -5
  233. package/src/code-execution/isolate/scripts.ts +3 -2
  234. package/src/dendrite/index.ts +32 -0
  235. package/src/dendrite/presets.ts +149 -0
  236. package/src/dendrite/registry.ts +808 -0
  237. package/src/dendrite/types.ts +397 -0
  238. package/src/framework.ts +4362 -852
  239. package/src/gate/event-gate.ts +159 -52
  240. package/src/gate/index.ts +1 -1
  241. package/src/gate/types.ts +12 -2
  242. package/src/heartbeat/heartbeat.ts +48 -9
  243. package/src/held-writes.ts +3 -3
  244. package/src/host-presentation.ts +612 -0
  245. package/src/index.ts +17 -4
  246. package/src/line-reader.ts +58 -0
  247. package/src/mcpl/channel-registry.ts +306 -111
  248. package/src/mcpl/conversation-router.ts +2 -1
  249. package/src/mcpl/convert-block.ts +17 -4
  250. package/src/mcpl/hook-orchestrator.ts +4 -3
  251. package/src/mcpl/inbound-source.ts +3 -1
  252. package/src/mcpl/modern-connection.ts +11 -7
  253. package/src/mcpl/protocol-family.ts +24 -3
  254. package/src/mcpl/push-coalescer.ts +19 -0
  255. package/src/mcpl/push-handler.ts +2 -2
  256. package/src/mcpl/references.ts +31 -23
  257. package/src/mcpl/server-connection.ts +20 -18
  258. package/src/mcpl/skip-reply-wake.ts +35 -0
  259. package/src/mcpl/tool-presence.ts +18 -17
  260. package/src/mcpl/tool-signature.ts +17 -16
  261. package/src/mcpl/toolset-host.ts +18 -6
  262. package/src/mcpl/toolsets-module.ts +149 -50
  263. package/src/mcpl/transport.ts +18 -14
  264. package/src/mcpl/types.ts +29 -12
  265. package/src/module-registry.ts +6 -7
  266. package/src/modules/api/index.ts +4 -2
  267. package/src/modules/discord/index.ts +37 -25
  268. package/src/modules/history/index.ts +8 -6
  269. package/src/modules/sender-name.ts +9 -0
  270. package/src/modules/workspace/answers.ts +20 -2
  271. package/src/modules/workspace/direct-write.ts +4 -3
  272. package/src/modules/workspace/effects.ts +50 -40
  273. package/src/modules/workspace/index.ts +58 -34
  274. package/src/modules/workspace/observe.ts +139 -88
  275. package/src/modules/workspace/reconcile.ts +159 -36
  276. package/src/notice-tags.ts +86 -0
  277. package/src/reasoning-loss-notice.ts +5 -3
  278. package/src/silent-heartbeat.ts +11 -7
  279. package/src/stored-injections.ts +7 -0
  280. package/src/supplied-text.ts +154 -0
  281. package/src/tool-args.ts +9 -8
  282. package/src/tool-image-ledger.ts +2 -1
  283. package/src/tool-presentation.ts +5 -4
  284. package/src/tune-out/coordinator.ts +1252 -123
  285. package/src/tune-out/tools.ts +152 -11
  286. package/src/types/agent.ts +51 -9
  287. package/src/types/framework.ts +146 -0
  288. package/src/types/module.ts +23 -11
  289. package/src/types/trace.ts +150 -0
@@ -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;
@@ -234,6 +246,8 @@ export declare class EventGate {
234
246
  private addMessageFn;
235
247
  private requestInferenceFn;
236
248
  private getAgentNamesFn;
249
+ /** Delivery-time re-check: is this channel held from the recipients now? */
250
+ private isHeldFn;
237
251
  private resolveRouteChannelFn;
238
252
  private channelShownFn?;
239
253
  private isNewestEntryFn?;
@@ -254,6 +268,13 @@ export declare class EventGate {
254
268
  * message is answered. */
255
269
  requestInference: (agentName: string, reason: string, source: string, provenance?: WakeProvenance, after?: WritePlacement) => void;
256
270
  getAgentNames: () => string[];
271
+ /**
272
+ * Whether a channel is held from the recipients (a tune-out epoch in
273
+ * force). A held event never enters a batch — admission runs before the
274
+ * gate — but a hold can begin after an event was batched; at delivery
275
+ * the batch is re-checked and held events are dropped (#232 H3).
276
+ */
277
+ isHeld?: (serverId: string | undefined, channelId: string | undefined) => boolean;
257
278
  /** Optional clock — defaults to Date.now. Tests inject for deterministic time. */
258
279
  now?: () => number;
259
280
  /** Per-event timeout (ms) for the optional gate.js script. Default 50. */
@@ -293,6 +314,11 @@ export declare class EventGate {
293
314
  * (WakeProvenance.line), for a fresh start of the wake's turn to decide
294
315
  * (WakeLine). Absent: every batched wake writes its line, as before. */
295
316
  isNewestEntry?: (entry: GateEntryRef) => boolean;
317
+ /** The event types the gate can see from a source, when the host knows
318
+ * them (an MCPL server's id: MCPL_GATE_EVENT_TYPES), else undefined.
319
+ * The rule-order notes (findShadowedPolicies) leave out types a rule's
320
+ * source never sends. Absent: any source can send any type. */
321
+ eventTypesFrom?: EventTypesFrom;
296
322
  });
297
323
  /**
298
324
  * Write the starting rules to gate.json, as given, when it's absent, and
@@ -553,10 +579,17 @@ export declare class EventGate {
553
579
  * cheap (policy lists are tens of entries at most). */
554
580
  lintShadows(): ShadowWarning[];
555
581
  /**
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.
582
+ * The sources the host knows changed (eventTypesFrom answers differently),
583
+ * as when an MCPL server connects or is removed: the rule-order notes are
584
+ * made again, and traced if they changed, as a change to the rules would.
585
+ */
586
+ sourcesChanged(): void;
587
+ /**
588
+ * Recompute shadow warnings and, when the set changed, emit a
589
+ * `gate:shadow-warnings` trace so the hazard lands in ops observability at
590
+ * the moment the order changed — not at the next missed DM — and, with an
591
+ * empty list, the moment the last of them went. Called from writeConfig,
592
+ * reloadIfChanged and sourcesChanged.
560
593
  */
561
594
  private refreshShadowWarnings;
562
595
  /**
@@ -680,10 +713,9 @@ export declare class EventGate {
680
713
  */
681
714
  private armSleepWake;
682
715
  /**
683
- * `agentName` is gone, as a conversation fork's end or an ephemeral run's
684
- * removes one: its pending self-wake is cancelled, rather than wake a name
685
- * that no longer exists. It holds no sleep: neither can set one (the
686
- * framework refuses their `sleep`).
716
+ * `agentName` is gone, as an agent's end removes one: its pending
717
+ * self-wake is cancelled, and a sleep it set ends, rather than go on
718
+ * quieting every agent and then wake a name that no longer exists.
687
719
  */
688
720
  agentGone(agentName: string): void;
689
721
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"event-gate.d.ts","sourceRoot":"","sources":["../../../src/gate/event-gate.ts"],"names":[],"mappings":"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"}
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;
@@ -1727,6 +1785,8 @@ export class EventGate {
1727
1785
  addMessageFn;
1728
1786
  requestInferenceFn;
1729
1787
  getAgentNamesFn;
1788
+ /** Delivery-time re-check: is this channel held from the recipients now? */
1789
+ isHeldFn;
1730
1790
  resolveRouteChannelFn;
1731
1791
  channelShownFn;
1732
1792
  isNewestEntryFn;
@@ -1740,9 +1800,11 @@ export class EventGate {
1740
1800
  this.addMessageFn = opts.addMessage;
1741
1801
  this.requestInferenceFn = opts.requestInference;
1742
1802
  this.getAgentNamesFn = opts.getAgentNames;
1803
+ this.isHeldFn = opts.isHeld ?? (() => false);
1743
1804
  this.resolveRouteChannelFn = opts.resolveRouteChannel ?? defaultRouteChannel;
1744
1805
  this.channelShownFn = opts.channelShown;
1745
1806
  this.isNewestEntryFn = opts.isNewestEntry;
1807
+ this.eventTypesFromFn = opts.eventTypesFrom;
1746
1808
  this.now = opts.now ?? (() => Date.now());
1747
1809
  this.judgeFn = opts.judge;
1748
1810
  this.changesJudgedContextFn = opts.changesJudgedContext;
@@ -2988,22 +3050,31 @@ export class EventGate {
2988
3050
  /** Current shadow-lint findings for the live policy order. Fresh compute —
2989
3051
  * cheap (policy lists are tens of entries at most). */
2990
3052
  lintShadows() {
2991
- return findShadowedPolicies(this.config.policies);
3053
+ return findShadowedPolicies(this.config.policies, this.eventTypesFromFn);
2992
3054
  }
2993
3055
  /**
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.
3056
+ * The sources the host knows changed (eventTypesFrom answers differently),
3057
+ * as when an MCPL server connects or is removed: the rule-order notes are
3058
+ * made again, and traced if they changed, as a change to the rules would.
3059
+ */
3060
+ sourcesChanged() {
3061
+ this.refreshShadowWarnings('sources-changed');
3062
+ }
3063
+ /**
3064
+ * Recompute shadow warnings and, when the set changed, emit a
3065
+ * `gate:shadow-warnings` trace so the hazard lands in ops observability at
3066
+ * the moment the order changed — not at the next missed DM — and, with an
3067
+ * empty list, the moment the last of them went. Called from writeConfig,
3068
+ * reloadIfChanged and sourcesChanged.
2998
3069
  */
2999
3070
  refreshShadowWarnings(reason) {
3000
3071
  const warnings = this.lintShadows();
3001
3072
  const fingerprint = JSON.stringify(warnings);
3002
3073
  if (fingerprint === this.shadowWarningsFingerprint)
3003
3074
  return;
3075
+ const hadSome = this.shadowWarningsFingerprint !== '[]';
3004
3076
  this.shadowWarningsFingerprint = fingerprint;
3005
- this.shadowWarningsCache = warnings;
3006
- if (warnings.length > 0) {
3077
+ if (warnings.length > 0 || hadSome) {
3007
3078
  this.emitTrace({
3008
3079
  type: 'gate:shadow-warnings',
3009
3080
  reason,
@@ -3133,7 +3204,23 @@ export class EventGate {
3133
3204
  // =========================================================================
3134
3205
  // Event delivery
3135
3206
  // =========================================================================
3136
- deliverEvents(events) {
3207
+ deliverEvents(batched) {
3208
+ // Delivery-time re-check: a channel tuned out after its events were
3209
+ // batched is held now, and "already shown above at arrival" would be
3210
+ // untrue of them. They are dropped; the hold's own reader has them.
3211
+ const heldAt = (e) => e.routeChannelId ?? e.channelId;
3212
+ const events = batched.filter((e) => {
3213
+ const channel = heldAt(e);
3214
+ return !(channel && this.isHeldFn(e.serverId, channel));
3215
+ });
3216
+ if (events.length < batched.length) {
3217
+ this.emitTrace({
3218
+ type: 'gate:held-dropped',
3219
+ dropped: batched.length - events.length,
3220
+ channels: [...new Set(batched.filter((e) => !events.includes(e)).map(heldAt))],
3221
+ timestamp: this.now(),
3222
+ });
3223
+ }
3137
3224
  if (events.length === 0)
3138
3225
  return;
3139
3226
  const policyNames = [...new Set(events.map(e => e.policyName))];
@@ -3144,7 +3231,7 @@ export class EventGate {
3144
3231
  // Only events with no context entry of their own carry their content.
3145
3232
  const quoted = events.filter(e => !e.inContext);
3146
3233
  const referenced = events.filter(e => e.inContext);
3147
- const lines = quoted.map(e => `- [${e.policyName}] (${e.eventType}): ${e.content}`);
3234
+ const lines = quoted.map(e => `- [${e.policyName}] (${e.eventType}): ${suppliedValue(e.content)}`);
3148
3235
  // How each referenced channel is named in the line, in order.
3149
3236
  const shown = [];
3150
3237
  if (referenced.length > 0) {
@@ -3163,7 +3250,7 @@ export class EventGate {
3163
3250
  ? '(unknown channel)'
3164
3251
  : e.routeChannelId !== undefined && e.serverId !== undefined && this.channelShownFn
3165
3252
  ? this.channelShownFn({ serverId: e.serverId, channelId: e.routeChannelId })
3166
- : id;
3253
+ : suppliedValue(id);
3167
3254
  const key = JSON.stringify([e.serverId ?? null, id ?? null]);
3168
3255
  const entry = byChannel.get(key) ?? { name, count: 0, oldest: e.timestamp, label: e.channelLabel };
3169
3256
  entry.count += 1;
@@ -3176,7 +3263,7 @@ export class EventGate {
3176
3263
  // agent can still address tools that want the composite id. A name
3177
3264
  // may carry its own `#`, so one is added only where the name lacks
3178
3265
  // it, as at the other places that add a `#`.
3179
- const channel = label ? `${label.startsWith('#') ? label : `#${label}`} (${name})` : name;
3266
+ const channel = label ? `${label.startsWith('#') ? '' : '#'}${suppliedValue(label)} (${name})` : name;
3180
3267
  shown.push(channel);
3181
3268
  lines.push(referenceLine(count, channel, oldest, Date.now()));
3182
3269
  }
@@ -3188,7 +3275,7 @@ export class EventGate {
3188
3275
  // gate hands the line to the wake (WakeProvenance.line) and a fresh start
3189
3276
  // of the wake's turn decides it (WakeLine). Several messages, one with
3190
3277
  // 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')}`;
3278
+ const text = `[${NOTICE_TAG.gate}: ${events.length} event${events.length > 1 ? 's' : ''} matched]\n\n${lines.join('\n')}`;
3192
3279
  const only = events.length === 1 && events[0].inContext ? events[0] : undefined;
3193
3280
  let line;
3194
3281
  if (only && this.newestEntry(only)) {
@@ -3431,7 +3518,7 @@ export class EventGate {
3431
3518
  record.last = {
3432
3519
  at: Date.now(),
3433
3520
  verdict: outcome,
3434
- reason: safeSlice(reason, 0, 300),
3521
+ reason: cutToFit(suppliedValue(reason), 300),
3435
3522
  eventCount: state.events.length,
3436
3523
  durationMs,
3437
3524
  ...(!failed && typeof verdict.inputTokens === 'number' ? { inputTokens: verdict.inputTokens } : {}),
@@ -3440,7 +3527,7 @@ export class EventGate {
3440
3527
  this.judgeRecords.set(policyName, record);
3441
3528
  if (failed) {
3442
3529
  this.judgeFailStreak++;
3443
- this.judgeLastFailure = safeSlice(reason, 0, 200);
3530
+ this.judgeLastFailure = cutToFit(suppliedValue(reason), 200);
3444
3531
  }
3445
3532
  else {
3446
3533
  this.judgeFailStreak = 0;
@@ -3696,10 +3783,9 @@ export class EventGate {
3696
3783
  this.sleepTimer = setTimeout(() => this.wakeFromSleep('sleep-expired'), Math.min(remaining, MAX_TIMER_MS));
3697
3784
  }
3698
3785
  /**
3699
- * `agentName` is gone, as a conversation fork's end or an ephemeral run's
3700
- * removes one: its pending self-wake is cancelled, rather than wake a name
3701
- * that no longer exists. It holds no sleep: neither can set one (the
3702
- * framework refuses their `sleep`).
3786
+ * `agentName` is gone, as an agent's end removes one: its pending
3787
+ * self-wake is cancelled, and a sleep it set ends, rather than go on
3788
+ * quieting every agent and then wake a name that no longer exists.
3703
3789
  */
3704
3790
  agentGone(agentName) {
3705
3791
  const selfWake = this.selfWakeTimers.get(agentName);
@@ -3707,6 +3793,8 @@ export class EventGate {
3707
3793
  clearTimeout(selfWake);
3708
3794
  this.selfWakeTimers.delete(agentName);
3709
3795
  }
3796
+ if (this.sleepAgent === agentName)
3797
+ this.clearSleep();
3710
3798
  }
3711
3799
  // =========================================================================
3712
3800
  // Self-wake (skip_reply wake_in_seconds)
@@ -3752,7 +3840,7 @@ export class EventGate {
3752
3840
  const placement = {};
3753
3841
  this.addMessageFn('user', [{
3754
3842
  type: 'text',
3755
- text: `[self-wake] your ${source} timer (${Math.round(ms / 1000)}s) elapsed — now ${nowIso}`,
3843
+ text: `[${NOTICE_TAG.selfWake}] your ${source} timer (${Math.round(ms / 1000)}s) elapsed — now ${nowIso}`,
3756
3844
  }], { source: 'gate:self-wake' }, agentName, placement);
3757
3845
  this.requestInferenceFn(agentName, `self-scheduled wake (${source}, ${Math.round(ms / 1000)}s)`, 'self-wake', undefined, placement);
3758
3846
  }, ms);
@@ -4008,7 +4096,9 @@ export class EventGate {
4008
4096
  this.judgeUnwiredNotice(), this.judgeFailingNotice(),
4009
4097
  ]
4010
4098
  .filter((e) => e !== null),
4011
- shadowWarnings: this.shadowWarningsCache.map(formatShadowWarning),
4099
+ // Fresh, not the cache: the sources the host knows (eventTypesFrom)
4100
+ // change as servers connect, with no change to the rules.
4101
+ shadowWarnings: this.lintShadows().map(formatShadowWarning),
4012
4102
  totalEvaluations: this.totalEvaluations,
4013
4103
  defaultDecisions: {
4014
4104
  triggered: this.defaultTriggered,