apcore-js 0.18.0 → 0.20.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 (241) hide show
  1. package/README.md +112 -9
  2. package/dist/acl-handlers.d.ts +14 -0
  3. package/dist/acl-handlers.d.ts.map +1 -1
  4. package/dist/acl-handlers.js +37 -4
  5. package/dist/acl-handlers.js.map +1 -1
  6. package/dist/acl.d.ts +22 -1
  7. package/dist/acl.d.ts.map +1 -1
  8. package/dist/acl.js +90 -34
  9. package/dist/acl.js.map +1 -1
  10. package/dist/async-task.d.ts +70 -16
  11. package/dist/async-task.d.ts.map +1 -1
  12. package/dist/async-task.js +212 -72
  13. package/dist/async-task.js.map +1 -1
  14. package/dist/bindings.d.ts.map +1 -1
  15. package/dist/bindings.js +113 -11
  16. package/dist/bindings.js.map +1 -1
  17. package/dist/builtin-steps.d.ts +33 -8
  18. package/dist/builtin-steps.d.ts.map +1 -1
  19. package/dist/builtin-steps.js +119 -47
  20. package/dist/builtin-steps.js.map +1 -1
  21. package/dist/client.d.ts +1 -0
  22. package/dist/client.d.ts.map +1 -1
  23. package/dist/client.js.map +1 -1
  24. package/dist/config.d.ts +38 -0
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +163 -33
  27. package/dist/config.js.map +1 -1
  28. package/dist/context.d.ts +34 -7
  29. package/dist/context.d.ts.map +1 -1
  30. package/dist/context.js +108 -40
  31. package/dist/context.js.map +1 -1
  32. package/dist/decorator.d.ts +3 -0
  33. package/dist/decorator.d.ts.map +1 -1
  34. package/dist/decorator.js +3 -0
  35. package/dist/decorator.js.map +1 -1
  36. package/dist/errors.d.ts +88 -2
  37. package/dist/errors.d.ts.map +1 -1
  38. package/dist/errors.js +231 -56
  39. package/dist/errors.js.map +1 -1
  40. package/dist/events/circuit-breaker.d.ts +45 -0
  41. package/dist/events/circuit-breaker.d.ts.map +1 -0
  42. package/dist/events/circuit-breaker.js +115 -0
  43. package/dist/events/circuit-breaker.js.map +1 -0
  44. package/dist/events/emitter.d.ts +24 -1
  45. package/dist/events/emitter.d.ts.map +1 -1
  46. package/dist/events/emitter.js +86 -12
  47. package/dist/events/emitter.js.map +1 -1
  48. package/dist/events/index.d.ts +4 -2
  49. package/dist/events/index.d.ts.map +1 -1
  50. package/dist/events/index.js +3 -2
  51. package/dist/events/index.js.map +1 -1
  52. package/dist/events/subscribers.d.ts +33 -1
  53. package/dist/events/subscribers.d.ts.map +1 -1
  54. package/dist/events/subscribers.js +124 -1
  55. package/dist/events/subscribers.js.map +1 -1
  56. package/dist/executor.d.ts +14 -3
  57. package/dist/executor.d.ts.map +1 -1
  58. package/dist/executor.js +155 -48
  59. package/dist/executor.js.map +1 -1
  60. package/dist/generated/version.d.ts +1 -1
  61. package/dist/generated/version.js +1 -1
  62. package/dist/index.d.ts +47 -25
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +35 -18
  65. package/dist/index.js.map +1 -1
  66. package/dist/middleware/base.d.ts +25 -3
  67. package/dist/middleware/base.d.ts.map +1 -1
  68. package/dist/middleware/base.js +24 -0
  69. package/dist/middleware/base.js.map +1 -1
  70. package/dist/middleware/circuit-breaker.d.ts +54 -0
  71. package/dist/middleware/circuit-breaker.d.ts.map +1 -0
  72. package/dist/middleware/circuit-breaker.js +168 -0
  73. package/dist/middleware/circuit-breaker.js.map +1 -0
  74. package/dist/middleware/context-namespace.d.ts +30 -0
  75. package/dist/middleware/context-namespace.d.ts.map +1 -0
  76. package/dist/middleware/context-namespace.js +38 -0
  77. package/dist/middleware/context-namespace.js.map +1 -0
  78. package/dist/middleware/index.d.ts +8 -2
  79. package/dist/middleware/index.d.ts.map +1 -1
  80. package/dist/middleware/index.js +5 -2
  81. package/dist/middleware/index.js.map +1 -1
  82. package/dist/middleware/logging.d.ts +6 -0
  83. package/dist/middleware/logging.d.ts.map +1 -1
  84. package/dist/middleware/logging.js +13 -3
  85. package/dist/middleware/logging.js.map +1 -1
  86. package/dist/middleware/manager.d.ts +11 -4
  87. package/dist/middleware/manager.d.ts.map +1 -1
  88. package/dist/middleware/manager.js +26 -9
  89. package/dist/middleware/manager.js.map +1 -1
  90. package/dist/middleware/platform-notify.d.ts +8 -4
  91. package/dist/middleware/platform-notify.d.ts.map +1 -1
  92. package/dist/middleware/platform-notify.js +15 -7
  93. package/dist/middleware/platform-notify.js.map +1 -1
  94. package/dist/middleware/retry.d.ts +16 -7
  95. package/dist/middleware/retry.d.ts.map +1 -1
  96. package/dist/middleware/retry.js +21 -15
  97. package/dist/middleware/retry.js.map +1 -1
  98. package/dist/middleware/tracing.d.ts +50 -0
  99. package/dist/middleware/tracing.d.ts.map +1 -0
  100. package/dist/middleware/tracing.js +89 -0
  101. package/dist/middleware/tracing.js.map +1 -0
  102. package/dist/observability/batch-span-processor.d.ts +48 -0
  103. package/dist/observability/batch-span-processor.d.ts.map +1 -0
  104. package/dist/observability/batch-span-processor.js +89 -0
  105. package/dist/observability/batch-span-processor.js.map +1 -0
  106. package/dist/observability/context-logger.d.ts +54 -1
  107. package/dist/observability/context-logger.d.ts.map +1 -1
  108. package/dist/observability/context-logger.js +287 -10
  109. package/dist/observability/context-logger.js.map +1 -1
  110. package/dist/observability/error-history.d.ts +36 -7
  111. package/dist/observability/error-history.d.ts.map +1 -1
  112. package/dist/observability/error-history.js +169 -50
  113. package/dist/observability/error-history.js.map +1 -1
  114. package/dist/observability/index.d.ts +16 -5
  115. package/dist/observability/index.d.ts.map +1 -1
  116. package/dist/observability/index.js +8 -3
  117. package/dist/observability/index.js.map +1 -1
  118. package/dist/observability/metrics-utils.d.ts.map +1 -1
  119. package/dist/observability/metrics-utils.js +3 -5
  120. package/dist/observability/metrics-utils.js.map +1 -1
  121. package/dist/observability/metrics.d.ts +15 -1
  122. package/dist/observability/metrics.d.ts.map +1 -1
  123. package/dist/observability/metrics.js +37 -3
  124. package/dist/observability/metrics.js.map +1 -1
  125. package/dist/observability/prometheus-exporter.d.ts +37 -0
  126. package/dist/observability/prometheus-exporter.d.ts.map +1 -0
  127. package/dist/observability/prometheus-exporter.js +135 -0
  128. package/dist/observability/prometheus-exporter.js.map +1 -0
  129. package/dist/observability/storage.d.ts +43 -0
  130. package/dist/observability/storage.d.ts.map +1 -0
  131. package/dist/observability/storage.js +58 -0
  132. package/dist/observability/storage.js.map +1 -0
  133. package/dist/observability/store.d.ts +29 -0
  134. package/dist/observability/store.d.ts.map +1 -0
  135. package/dist/observability/store.js +36 -0
  136. package/dist/observability/store.js.map +1 -0
  137. package/dist/observability/tracing.d.ts +2 -0
  138. package/dist/observability/tracing.d.ts.map +1 -1
  139. package/dist/observability/tracing.js +12 -2
  140. package/dist/observability/tracing.js.map +1 -1
  141. package/dist/observability/usage-exporter.d.ts +58 -0
  142. package/dist/observability/usage-exporter.d.ts.map +1 -0
  143. package/dist/observability/usage-exporter.js +86 -0
  144. package/dist/observability/usage-exporter.js.map +1 -0
  145. package/dist/observability/usage.d.ts +18 -1
  146. package/dist/observability/usage.d.ts.map +1 -1
  147. package/dist/observability/usage.js +35 -4
  148. package/dist/observability/usage.js.map +1 -1
  149. package/dist/pipeline-config.d.ts +24 -7
  150. package/dist/pipeline-config.d.ts.map +1 -1
  151. package/dist/pipeline-config.js +113 -19
  152. package/dist/pipeline-config.js.map +1 -1
  153. package/dist/pipeline.d.ts +123 -2
  154. package/dist/pipeline.d.ts.map +1 -1
  155. package/dist/pipeline.js +249 -50
  156. package/dist/pipeline.js.map +1 -1
  157. package/dist/registry/conflicts.d.ts +2 -2
  158. package/dist/registry/conflicts.d.ts.map +1 -1
  159. package/dist/registry/conflicts.js +10 -11
  160. package/dist/registry/conflicts.js.map +1 -1
  161. package/dist/registry/dependencies.d.ts +1 -1
  162. package/dist/registry/dependencies.d.ts.map +1 -1
  163. package/dist/registry/dependencies.js +69 -20
  164. package/dist/registry/dependencies.js.map +1 -1
  165. package/dist/registry/index.d.ts +2 -0
  166. package/dist/registry/index.d.ts.map +1 -1
  167. package/dist/registry/index.js +1 -0
  168. package/dist/registry/index.js.map +1 -1
  169. package/dist/registry/multi-class.d.ts +57 -0
  170. package/dist/registry/multi-class.d.ts.map +1 -0
  171. package/dist/registry/multi-class.js +120 -0
  172. package/dist/registry/multi-class.js.map +1 -0
  173. package/dist/registry/registry.d.ts +99 -4
  174. package/dist/registry/registry.d.ts.map +1 -1
  175. package/dist/registry/registry.js +291 -33
  176. package/dist/registry/registry.js.map +1 -1
  177. package/dist/registry/scanner.d.ts.map +1 -1
  178. package/dist/registry/scanner.js +6 -0
  179. package/dist/registry/scanner.js.map +1 -1
  180. package/dist/registry/version.d.ts +1 -0
  181. package/dist/registry/version.d.ts.map +1 -1
  182. package/dist/registry/version.js +33 -4
  183. package/dist/registry/version.js.map +1 -1
  184. package/dist/schema/constants.d.ts +9 -0
  185. package/dist/schema/constants.d.ts.map +1 -0
  186. package/dist/schema/constants.js +9 -0
  187. package/dist/schema/constants.js.map +1 -0
  188. package/dist/schema/extractor.d.ts +69 -0
  189. package/dist/schema/extractor.d.ts.map +1 -0
  190. package/dist/schema/extractor.js +142 -0
  191. package/dist/schema/extractor.js.map +1 -0
  192. package/dist/schema/index.d.ts +3 -1
  193. package/dist/schema/index.d.ts.map +1 -1
  194. package/dist/schema/index.js +2 -1
  195. package/dist/schema/index.js.map +1 -1
  196. package/dist/schema/loader.d.ts +27 -3
  197. package/dist/schema/loader.d.ts.map +1 -1
  198. package/dist/schema/loader.js +137 -32
  199. package/dist/schema/loader.js.map +1 -1
  200. package/dist/schema/ref-resolver.d.ts.map +1 -1
  201. package/dist/schema/ref-resolver.js +10 -1
  202. package/dist/schema/ref-resolver.js.map +1 -1
  203. package/dist/schema/types.d.ts +4 -0
  204. package/dist/schema/types.d.ts.map +1 -1
  205. package/dist/schema/types.js.map +1 -1
  206. package/dist/schema/validator.d.ts +9 -0
  207. package/dist/schema/validator.d.ts.map +1 -1
  208. package/dist/schema/validator.js +153 -4
  209. package/dist/schema/validator.js.map +1 -1
  210. package/dist/sys-modules/audit.d.ts +50 -0
  211. package/dist/sys-modules/audit.d.ts.map +1 -0
  212. package/dist/sys-modules/audit.js +89 -0
  213. package/dist/sys-modules/audit.js.map +1 -0
  214. package/dist/sys-modules/control.d.ts +32 -4
  215. package/dist/sys-modules/control.d.ts.map +1 -1
  216. package/dist/sys-modules/control.js +197 -23
  217. package/dist/sys-modules/control.js.map +1 -1
  218. package/dist/sys-modules/index.d.ts +7 -2
  219. package/dist/sys-modules/index.d.ts.map +1 -1
  220. package/dist/sys-modules/index.js +3 -1
  221. package/dist/sys-modules/index.js.map +1 -1
  222. package/dist/sys-modules/overrides.d.ts +58 -0
  223. package/dist/sys-modules/overrides.d.ts.map +1 -0
  224. package/dist/sys-modules/overrides.js +106 -0
  225. package/dist/sys-modules/overrides.js.map +1 -0
  226. package/dist/sys-modules/registration.d.ts +18 -1
  227. package/dist/sys-modules/registration.d.ts.map +1 -1
  228. package/dist/sys-modules/registration.js +115 -11
  229. package/dist/sys-modules/registration.js.map +1 -1
  230. package/dist/sys-modules/toggle.d.ts +7 -2
  231. package/dist/sys-modules/toggle.d.ts.map +1 -1
  232. package/dist/sys-modules/toggle.js +61 -5
  233. package/dist/sys-modules/toggle.js.map +1 -1
  234. package/dist/trace-context.d.ts +47 -9
  235. package/dist/trace-context.d.ts.map +1 -1
  236. package/dist/trace-context.js +139 -16
  237. package/dist/trace-context.js.map +1 -1
  238. package/dist/utils/index.d.ts.map +1 -1
  239. package/dist/utils/index.js +2 -1
  240. package/dist/utils/index.js.map +1 -1
  241. package/package.json +1 -1
@@ -0,0 +1,115 @@
1
+ export var CircuitState;
2
+ (function (CircuitState) {
3
+ CircuitState["CLOSED"] = "CLOSED";
4
+ CircuitState["OPEN"] = "OPEN";
5
+ CircuitState["HALF_OPEN"] = "HALF_OPEN";
6
+ })(CircuitState || (CircuitState = {}));
7
+ /**
8
+ * Wraps an EventSubscriber with a per-subscriber circuit-breaker.
9
+ *
10
+ * State machine:
11
+ * CLOSED → (consecutive_failures >= openThreshold) → OPEN
12
+ * OPEN → (recoveryWindowMs elapsed) → HALF_OPEN
13
+ * HALF_OPEN → success → CLOSED
14
+ * HALF_OPEN → failure → OPEN
15
+ */
16
+ export class CircuitBreakerWrapper {
17
+ _subscriber;
18
+ _emitter;
19
+ _state = CircuitState.CLOSED;
20
+ _consecutiveFailures = 0;
21
+ _lastFailureAt = null;
22
+ _timeoutMs;
23
+ _openThreshold;
24
+ _recoveryWindowMs;
25
+ _subscriberType;
26
+ constructor(_subscriber, _emitter, config = {}) {
27
+ this._subscriber = _subscriber;
28
+ this._emitter = _emitter;
29
+ this._timeoutMs = config.timeoutMs ?? 5000;
30
+ this._openThreshold = config.openThreshold ?? 5;
31
+ this._recoveryWindowMs = config.recoveryWindowMs ?? 60000;
32
+ this._subscriberType = config.subscriberType ?? this._subscriber.constructor.name;
33
+ }
34
+ get state() {
35
+ return this._state;
36
+ }
37
+ get consecutiveFailures() {
38
+ return this._consecutiveFailures;
39
+ }
40
+ /** Transition OPEN → HALF_OPEN if recoveryWindowMs has elapsed since last failure. */
41
+ checkRecovery() {
42
+ if (this._state !== CircuitState.OPEN || this._lastFailureAt === null)
43
+ return;
44
+ if (Date.now() - this._lastFailureAt.getTime() >= this._recoveryWindowMs) {
45
+ this._state = CircuitState.HALF_OPEN;
46
+ }
47
+ }
48
+ async onEvent(event) {
49
+ this.checkRecovery();
50
+ if (this._state === CircuitState.OPEN)
51
+ return;
52
+ let circuitEvent = null;
53
+ let timeoutId;
54
+ try {
55
+ await Promise.race([
56
+ Promise.resolve(this._subscriber.onEvent(event)),
57
+ new Promise((_, reject) => {
58
+ timeoutId = setTimeout(() => reject(new Error(`Delivery timeout after ${this._timeoutMs}ms`)), this._timeoutMs);
59
+ }),
60
+ ]);
61
+ circuitEvent = this._onSuccess();
62
+ }
63
+ catch (err) {
64
+ circuitEvent = this._onFailure(err);
65
+ }
66
+ finally {
67
+ clearTimeout(timeoutId);
68
+ }
69
+ if (circuitEvent !== null) {
70
+ try {
71
+ this._emitter.emit(circuitEvent);
72
+ }
73
+ catch {
74
+ // circuit events must not surface to callers
75
+ }
76
+ }
77
+ }
78
+ _onSuccess() {
79
+ if (this._state === CircuitState.HALF_OPEN) {
80
+ this._state = CircuitState.CLOSED;
81
+ this._consecutiveFailures = 0;
82
+ return this._makeEvent('apcore.subscriber.circuit_closed', 'info', {
83
+ subscriber_type: this._subscriberType,
84
+ recovery_attempt: true,
85
+ });
86
+ }
87
+ this._consecutiveFailures = 0;
88
+ return null;
89
+ }
90
+ _onFailure(error) {
91
+ this._consecutiveFailures += 1;
92
+ this._lastFailureAt = new Date();
93
+ const opens = this._state === CircuitState.HALF_OPEN ||
94
+ (this._state === CircuitState.CLOSED && this._consecutiveFailures >= this._openThreshold);
95
+ if (opens) {
96
+ this._state = CircuitState.OPEN;
97
+ console.warn(`[apcore:events] Circuit opened for subscriber ${this._subscriberType} after ${this._consecutiveFailures} consecutive failures:`, error);
98
+ return this._makeEvent('apcore.subscriber.circuit_opened', 'warn', {
99
+ subscriber_type: this._subscriberType,
100
+ consecutive_failures: this._consecutiveFailures,
101
+ });
102
+ }
103
+ return null;
104
+ }
105
+ _makeEvent(eventType, severity, data) {
106
+ return {
107
+ eventType,
108
+ moduleId: null,
109
+ timestamp: new Date().toISOString(),
110
+ severity,
111
+ data,
112
+ };
113
+ }
114
+ }
115
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/events/circuit-breaker.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,16 @@ export interface EventSubscriber {
12
12
  onEvent(event: ApCoreEvent): void | Promise<void>;
13
13
  }
14
14
  export declare function createEvent(eventType: string, moduleId: string | null, severity: string, data: Record<string, unknown>): ApCoreEvent;
15
+ /**
16
+ * Emit a canonical event AND a legacy alias for the same event during the
17
+ * deprecation window. The legacy event payload is augmented with
18
+ * `deprecated: true` and `canonical_event: <canonicalType>` so subscribers
19
+ * still listening to the legacy name can migrate.
20
+ *
21
+ * The two emissions share an identical timestamp so they appear atomic to
22
+ * downstream consumers ordering by `timestamp`.
23
+ */
24
+ export declare function emitWithLegacy(emitter: EventEmitter, canonicalType: string, legacyType: string, moduleId: string | null, severity: string, data: Record<string, unknown>): void;
15
25
  /**
16
26
  * Global event bus with non-blocking fan-out delivery.
17
27
  * Errors in one subscriber do not affect others.
@@ -19,12 +29,25 @@ export declare function createEvent(eventType: string, moduleId: string | null,
19
29
  export declare class EventEmitter {
20
30
  private _subscribers;
21
31
  private _pending;
32
+ private readonly _maxPending;
33
+ constructor(maxPending?: number);
22
34
  subscribe(subscriber: EventSubscriber): void;
23
35
  unsubscribe(subscriber: EventSubscriber): void;
24
36
  emit(event: ApCoreEvent): void;
37
+ /**
38
+ * Synchronously dispatch an `apcore.subscriber.delivery_dropped` event to all
39
+ * subscribers (except the one whose delivery was dropped, to avoid feedback
40
+ * loops). Sync emit only — never tracked in `_pending`. (sync finding A-D-504)
41
+ */
42
+ private _dispatchDroppedEvent;
43
+ private _identifySubscriber;
25
44
  /**
26
45
  * Wait for all pending async event deliveries to complete.
27
- * @param timeoutMs - Maximum milliseconds to wait. 0 means wait indefinitely.
46
+ * @param timeoutMs - Maximum milliseconds to wait. Defaults to 5000 (5s);
47
+ * pass `0` to wait indefinitely.
48
+ * Cross-language note: Rust uses ms (matches here);
49
+ * Python's flush() uses seconds (5.0 default) — same wall-clock semantics.
50
+ * (sync finding A-D-503)
28
51
  */
29
52
  flush(timeoutMs?: number): Promise<void>;
30
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,WAAW,CAQb;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAuB;IAEvC,SAAS,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAI5C,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAO9C,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAsB9B;;;OAGG;IACG,KAAK,CAAC,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CASlD"}
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,WAAW,CAQb;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAUN;AAID;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,UAAU,GAAE,MAA4B;IAIpD,SAAS,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAI5C,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAO9C,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IA+B9B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;OAOG;IACG,KAAK,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CASrD"}
@@ -10,6 +10,27 @@ export function createEvent(eventType, moduleId, severity, data) {
10
10
  data,
11
11
  };
12
12
  }
13
+ /**
14
+ * Emit a canonical event AND a legacy alias for the same event during the
15
+ * deprecation window. The legacy event payload is augmented with
16
+ * `deprecated: true` and `canonical_event: <canonicalType>` so subscribers
17
+ * still listening to the legacy name can migrate.
18
+ *
19
+ * The two emissions share an identical timestamp so they appear atomic to
20
+ * downstream consumers ordering by `timestamp`.
21
+ */
22
+ export function emitWithLegacy(emitter, canonicalType, legacyType, moduleId, severity, data) {
23
+ const timestamp = new Date().toISOString();
24
+ emitter.emit({ eventType: canonicalType, moduleId, timestamp, severity, data });
25
+ emitter.emit({
26
+ eventType: legacyType,
27
+ moduleId,
28
+ timestamp,
29
+ severity,
30
+ data: { ...data, deprecated: true, canonical_event: canonicalType },
31
+ });
32
+ }
33
+ const DEFAULT_MAX_PENDING = 1000;
13
34
  /**
14
35
  * Global event bus with non-blocking fan-out delivery.
15
36
  * Errors in one subscriber do not affect others.
@@ -17,6 +38,10 @@ export function createEvent(eventType, moduleId, severity, data) {
17
38
  export class EventEmitter {
18
39
  _subscribers = [];
19
40
  _pending = [];
41
+ _maxPending;
42
+ constructor(maxPending = DEFAULT_MAX_PENDING) {
43
+ this._maxPending = maxPending;
44
+ }
20
45
  subscribe(subscriber) {
21
46
  this._subscribers.push(subscriber);
22
47
  }
@@ -32,16 +57,24 @@ export class EventEmitter {
32
57
  try {
33
58
  const result = subscriber.onEvent(event);
34
59
  if (result instanceof Promise) {
35
- const tracked = result.catch((err) => {
36
- console.warn(`[apcore:events] Subscriber failed handling event ${event.eventType}:`, err);
37
- });
38
- this._pending.push(tracked);
39
- // Auto-cleanup when resolved to prevent unbounded growth
40
- tracked.then(() => {
41
- const idx = this._pending.indexOf(tracked);
42
- if (idx !== -1)
43
- this._pending.splice(idx, 1);
44
- });
60
+ if (this._pending.length >= this._maxPending) {
61
+ // Overflow: instead of silently dropping, emit a structured event
62
+ // so observers can track delivery loss. (sync finding A-D-504)
63
+ console.warn(`[apcore:events] _pending cap (${this._maxPending}) reached — dropping async delivery for event ${event.eventType}`);
64
+ this._dispatchDroppedEvent(subscriber, event);
65
+ }
66
+ else {
67
+ const tracked = result.catch((err) => {
68
+ console.warn(`[apcore:events] Subscriber failed handling event ${event.eventType}:`, err);
69
+ });
70
+ this._pending.push(tracked);
71
+ // Auto-cleanup when resolved to prevent unbounded growth
72
+ tracked.then(() => {
73
+ const idx = this._pending.indexOf(tracked);
74
+ if (idx !== -1)
75
+ this._pending.splice(idx, 1);
76
+ });
77
+ }
45
78
  }
46
79
  }
47
80
  catch (err) {
@@ -49,11 +82,52 @@ export class EventEmitter {
49
82
  }
50
83
  }
51
84
  }
85
+ /**
86
+ * Synchronously dispatch an `apcore.subscriber.delivery_dropped` event to all
87
+ * subscribers (except the one whose delivery was dropped, to avoid feedback
88
+ * loops). Sync emit only — never tracked in `_pending`. (sync finding A-D-504)
89
+ */
90
+ _dispatchDroppedEvent(droppedFor, originalEvent) {
91
+ const droppedEvent = createEvent('apcore.subscriber.delivery_dropped', null, 'warning', {
92
+ subscriber_id: this._identifySubscriber(droppedFor),
93
+ event_type: originalEvent.eventType,
94
+ original_module_id: originalEvent.moduleId,
95
+ });
96
+ for (const sub of this._subscribers) {
97
+ if (sub === droppedFor)
98
+ continue; // avoid recursive drop on the same sink
99
+ try {
100
+ const r = sub.onEvent(droppedEvent);
101
+ // Intentionally do not track this Promise in _pending — at-cap by design.
102
+ // Async handlers swallow their own errors; attach a guard so unhandled
103
+ // rejections don't escape.
104
+ if (r instanceof Promise) {
105
+ r.catch((err) => {
106
+ console.warn(`[apcore:events] Subscriber failed handling delivery_dropped:`, err);
107
+ });
108
+ }
109
+ }
110
+ catch (err) {
111
+ console.warn(`[apcore:events] Subscriber failed handling delivery_dropped:`, err);
112
+ }
113
+ }
114
+ }
115
+ _identifySubscriber(sub) {
116
+ const ctorName = sub.constructor?.name;
117
+ if (ctorName && ctorName !== 'Object')
118
+ return ctorName;
119
+ // Fall back to a stable hash-ish string based on identity.
120
+ return `subscriber@${this._subscribers.indexOf(sub)}`;
121
+ }
52
122
  /**
53
123
  * Wait for all pending async event deliveries to complete.
54
- * @param timeoutMs - Maximum milliseconds to wait. 0 means wait indefinitely.
124
+ * @param timeoutMs - Maximum milliseconds to wait. Defaults to 5000 (5s);
125
+ * pass `0` to wait indefinitely.
126
+ * Cross-language note: Rust uses ms (matches here);
127
+ * Python's flush() uses seconds (5.0 default) — same wall-clock semantics.
128
+ * (sync finding A-D-503)
55
129
  */
56
- async flush(timeoutMs = 0) {
130
+ async flush(timeoutMs = 5000) {
57
131
  const deadline = timeoutMs > 0 ? Date.now() + timeoutMs : Infinity;
58
132
  while (this._pending.length > 0) {
59
133
  if (Date.now() >= deadline)
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,MAAM,UAAU,WAAW,CACzB,SAAiB,EACjB,QAAuB,EACvB,QAAgB,EAChB,IAA6B;IAE7B,OAAO;QACL,SAAS;QACT,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ;QACR,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,YAAY,GAAsB,EAAE,CAAC;IACrC,QAAQ,GAAoB,EAAE,CAAC;IAEvC,SAAS,CAAC,UAA2B;QACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,WAAW,CAAC,UAA2B;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;wBACnC,OAAO,CAAC,IAAI,CAAC,oDAAoD,KAAK,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5F,CAAC,CAAC,CAAC;oBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC5B,yDAAyD;oBACzD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;wBAChB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBAC3C,IAAI,GAAG,KAAK,CAAC,CAAC;4BAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC/C,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,oDAAoD,KAAK,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,YAAoB,CAAC;QAC/B,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAAE,OAAO;YACnC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- export { EventEmitter, createEvent } from './emitter.js';
1
+ export { EventEmitter, createEvent, emitWithLegacy } from './emitter.js';
2
2
  export type { ApCoreEvent, EventSubscriber } from './emitter.js';
3
- export { WebhookSubscriber, A2ASubscriber } from './subscribers.js';
3
+ export { WebhookSubscriber, A2ASubscriber, FileSubscriber, StdoutSubscriber, FilterSubscriber } from './subscribers.js';
4
+ export { CircuitBreakerWrapper, CircuitState } from './circuit-breaker.js';
5
+ export type { CircuitBreakerConfig } from './circuit-breaker.js';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxH,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3E,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,3 +1,4 @@
1
- export { EventEmitter, createEvent } from './emitter.js';
2
- export { WebhookSubscriber, A2ASubscriber } from './subscribers.js';
1
+ export { EventEmitter, createEvent, emitWithLegacy } from './emitter.js';
2
+ export { WebhookSubscriber, A2ASubscriber, FileSubscriber, StdoutSubscriber, FilterSubscriber } from './subscribers.js';
3
+ export { CircuitBreakerWrapper, CircuitState } from './circuit-breaker.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxH,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Event subscribers for webhook and A2A protocol delivery.
2
+ * Event subscribers for webhook, A2A, file, stdout, and filter delivery.
3
3
  */
4
4
  import type { ApCoreEvent, EventSubscriber } from './emitter.js';
5
5
  /**
@@ -29,4 +29,36 @@ export declare class A2ASubscriber implements EventSubscriber {
29
29
  constructor(platformUrl: string, auth?: string | Record<string, string | unknown>, timeoutMs?: number);
30
30
  onEvent(event: ApCoreEvent): Promise<void>;
31
31
  }
32
+ /** Writes events to a local file (built-in type: 'file'). */
33
+ export declare class FileSubscriber implements EventSubscriber {
34
+ private readonly _path;
35
+ private readonly _append;
36
+ private readonly _format;
37
+ private readonly _rotateBytes;
38
+ constructor(path: string, append?: boolean, format?: string, rotateBytes?: number);
39
+ onEvent(event: ApCoreEvent): Promise<void>;
40
+ }
41
+ /** Writes events to stdout (built-in type: 'stdout'). */
42
+ export declare class StdoutSubscriber implements EventSubscriber {
43
+ private readonly _format;
44
+ private readonly _levelFilter;
45
+ constructor(format?: string, levelFilter?: string);
46
+ onEvent(event: ApCoreEvent): Promise<void>;
47
+ }
48
+ /**
49
+ * Wraps a delegate subscriber with event-name filtering (built-in type: 'filter').
50
+ *
51
+ * Matching rules (evaluated in order):
52
+ * 1. If include_events is set, forward only events matching any pattern.
53
+ * 2. Otherwise if exclude_events is set, discard events matching any pattern.
54
+ * 3. If neither is set, forward all events.
55
+ */
56
+ export declare class FilterSubscriber implements EventSubscriber {
57
+ private readonly _delegate;
58
+ private readonly _includeEvents;
59
+ private readonly _excludeEvents;
60
+ constructor(delegate: EventSubscriber, includeEvents?: string[], excludeEvents?: string[]);
61
+ onEvent(event: ApCoreEvent): Promise<void>;
62
+ private _matches;
63
+ }
32
64
  //# sourceMappingURL=subscribers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscribers.d.ts","sourceRoot":"","sources":["../../src/events/subscribers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEjE;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGlC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,GAAE,MAAU,EACtB,SAAS,GAAE,MAAa;IAQpB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CA+DjD;AAED;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGlC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAChD,SAAS,GAAE,MAAa;IAOpB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAwDjD"}
1
+ {"version":3,"file":"subscribers.d.ts","sourceRoot":"","sources":["../../src/events/subscribers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAsBjE;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGlC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,UAAU,GAAE,MAAU,EACtB,SAAS,GAAE,MAAa;IAQpB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CA+DjD;AAED;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGlC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAChD,SAAS,GAAE,MAAa;IAOpB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAwDjD;AAED,6DAA6D;AAC7D,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,EAAE,MAAM,GAAE,MAAe,EAAE,WAAW,CAAC,EAAE,MAAM;IAOzF,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAiCjD;AAED,yDAAyD;AACzD,qBAAa,gBAAiB,YAAW,eAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,MAAM,GAAE,MAAe,EAAE,WAAW,CAAC,EAAE,MAAM;IAUnD,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBjD;AAED;;;;;;;GAOG;AACH,qBAAa,gBAAiB,YAAW,eAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;gBAErC,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE;IAMnF,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,OAAO,CAAC,QAAQ;CASjB"}
@@ -1,6 +1,26 @@
1
1
  /**
2
- * Event subscribers for webhook and A2A protocol delivery.
2
+ * Event subscribers for webhook, A2A, file, stdout, and filter delivery.
3
3
  */
4
+ import * as fs from 'node:fs';
5
+ const SEVERITY_ORDER = { info: 0, warn: 1, error: 2, fatal: 3 };
6
+ const _patternCache = new Map();
7
+ function fnmatch(text, pattern) {
8
+ let regex = _patternCache.get(pattern);
9
+ if (regex === undefined) {
10
+ const regexStr = Array.from(pattern)
11
+ .map((c) => {
12
+ if (c === '*')
13
+ return '.*';
14
+ if (c === '?')
15
+ return '.';
16
+ return c.replace(/[$()*+.?[\]^{|}-]/g, '\\$&');
17
+ })
18
+ .join('');
19
+ regex = new RegExp(`^${regexStr}$`);
20
+ _patternCache.set(pattern, regex);
21
+ }
22
+ return regex.test(text);
23
+ }
4
24
  /**
5
25
  * Delivers events via HTTP POST to a webhook URL.
6
26
  *
@@ -129,4 +149,107 @@ export class A2ASubscriber {
129
149
  }
130
150
  }
131
151
  }
152
+ /** Writes events to a local file (built-in type: 'file'). */
153
+ export class FileSubscriber {
154
+ _path;
155
+ _append;
156
+ _format;
157
+ _rotateBytes;
158
+ constructor(path, append = true, format = 'json', rotateBytes) {
159
+ this._path = path;
160
+ this._append = append;
161
+ this._format = format;
162
+ this._rotateBytes = rotateBytes ?? null;
163
+ }
164
+ async onEvent(event) {
165
+ try {
166
+ if (this._rotateBytes !== null) {
167
+ try {
168
+ const stat = fs.statSync(this._path);
169
+ if (stat.size >= this._rotateBytes) {
170
+ fs.renameSync(this._path, `${this._path}.1`);
171
+ }
172
+ }
173
+ catch {
174
+ // file doesn't exist yet — no rotation needed
175
+ }
176
+ }
177
+ const line = this._format === 'json'
178
+ ? JSON.stringify({
179
+ event_type: event.eventType,
180
+ module_id: event.moduleId,
181
+ timestamp: event.timestamp,
182
+ severity: event.severity,
183
+ data: event.data,
184
+ }) + '\n'
185
+ : `[${event.timestamp}] [${event.severity.toUpperCase()}] ${event.eventType} module=${event.moduleId} data=${JSON.stringify(event.data)}\n`;
186
+ fs.writeFileSync(this._path, line, { flag: this._append ? 'a' : 'w', encoding: 'utf-8' });
187
+ }
188
+ catch (err) {
189
+ console.warn('[apcore:events]', `FileSubscriber failed to write event ${event.eventType} to ${this._path}:`, err);
190
+ }
191
+ }
192
+ }
193
+ /** Writes events to stdout (built-in type: 'stdout'). */
194
+ export class StdoutSubscriber {
195
+ _format;
196
+ _levelFilter;
197
+ constructor(format = 'text', levelFilter) {
198
+ this._format = format;
199
+ if (levelFilter !== undefined && !(levelFilter in SEVERITY_ORDER)) {
200
+ console.warn(`[apcore:events] StdoutSubscriber: unknown level_filter '${levelFilter}' — valid values: info, warn, error, fatal. All events will pass.`);
201
+ }
202
+ this._levelFilter = levelFilter ?? null;
203
+ }
204
+ async onEvent(event) {
205
+ if (this._levelFilter !== null) {
206
+ const minLevel = SEVERITY_ORDER[this._levelFilter] ?? 0;
207
+ const eventLevel = SEVERITY_ORDER[event.severity] ?? 0;
208
+ if (eventLevel < minLevel)
209
+ return;
210
+ }
211
+ const line = this._format === 'json'
212
+ ? JSON.stringify({
213
+ event_type: event.eventType,
214
+ module_id: event.moduleId,
215
+ timestamp: event.timestamp,
216
+ severity: event.severity,
217
+ data: event.data,
218
+ })
219
+ : `[${event.timestamp}] [${event.severity.toUpperCase()}] ${event.eventType} module=${event.moduleId} data=${JSON.stringify(event.data)}`;
220
+ process.stdout.write(line + '\n');
221
+ }
222
+ }
223
+ /**
224
+ * Wraps a delegate subscriber with event-name filtering (built-in type: 'filter').
225
+ *
226
+ * Matching rules (evaluated in order):
227
+ * 1. If include_events is set, forward only events matching any pattern.
228
+ * 2. Otherwise if exclude_events is set, discard events matching any pattern.
229
+ * 3. If neither is set, forward all events.
230
+ */
231
+ export class FilterSubscriber {
232
+ _delegate;
233
+ _includeEvents;
234
+ _excludeEvents;
235
+ constructor(delegate, includeEvents, excludeEvents) {
236
+ this._delegate = delegate;
237
+ this._includeEvents = includeEvents ?? null;
238
+ this._excludeEvents = excludeEvents ?? null;
239
+ }
240
+ async onEvent(event) {
241
+ if (this._matches(event.eventType)) {
242
+ await this._delegate.onEvent(event);
243
+ }
244
+ }
245
+ _matches(eventType) {
246
+ if (this._includeEvents !== null) {
247
+ return this._includeEvents.some((pattern) => fnmatch(eventType, pattern));
248
+ }
249
+ if (this._excludeEvents !== null) {
250
+ return !this._excludeEvents.some((pattern) => fnmatch(eventType, pattern));
251
+ }
252
+ return true;
253
+ }
254
+ }
132
255
  //# sourceMappingURL=subscribers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/events/subscribers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/events/subscribers.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,12 @@ import type { ACL } from './acl.js';
8
8
  import type { ApprovalHandler } from './approval.js';
9
9
  import type { Config } from './config.js';
10
10
  import { Context } from './context.js';
11
- import { Middleware } from './middleware/index.js';
11
+ import { type Middleware } from './middleware/index.js';
12
12
  import type { PreflightResult } from './module.js';
13
- import type { Registry } from './registry/registry.js';
14
13
  import type { PipelineTrace, StrategyInfo } from './pipeline.js';
15
14
  import { ExecutionStrategy } from './pipeline.js';
15
+ import type { Registry } from './registry/registry.js';
16
+ import type { ToggleState } from './sys-modules/toggle.js';
16
17
  export declare const REDACTED_VALUE: string;
17
18
  /** Well-known context.data keys used internally by the runtime. */
18
19
  export declare const CTX_GLOBAL_DEADLINE = "_apcore.executor.global_deadline";
@@ -25,6 +26,7 @@ export declare class Executor {
25
26
  private _acl;
26
27
  private _config;
27
28
  private _approvalHandler;
29
+ private _toggleState;
28
30
  private _strategy;
29
31
  private _pipelineEngine;
30
32
  /** Global strategy registry for name-based resolution. */
@@ -36,6 +38,7 @@ export declare class Executor {
36
38
  acl?: ACL | null;
37
39
  config?: Config | null;
38
40
  approvalHandler?: ApprovalHandler | null;
41
+ toggleState?: ToggleState | null;
39
42
  });
40
43
  /** Build the dependency bag for strategy factories. */
41
44
  private _buildStrategyDeps;
@@ -52,13 +55,21 @@ export declare class Executor {
52
55
  get middlewares(): Middleware[];
53
56
  /** Set the access control provider. Updates both the executor field and the strategy's ACL step. */
54
57
  setAcl(acl: ACL): void;
55
- /** Set the approval handler for Step 5 gate. Updates both the executor field and the strategy's approval step. */
58
+ /** Set the approval handler. Updates both the executor field and the strategy's approval step. */
56
59
  setApprovalHandler(handler: ApprovalHandler): void;
57
60
  use(middleware: Middleware): Executor;
58
61
  useBefore(callback: (moduleId: string, inputs: Record<string, unknown>, context: Context) => Record<string, unknown> | null): Executor;
59
62
  useAfter(callback: (moduleId: string, inputs: Record<string, unknown>, output: Record<string, unknown>, context: Context) => Record<string, unknown> | null): Executor;
60
63
  remove(middleware: Middleware): boolean;
61
64
  call(moduleId: string, inputs?: Record<string, unknown> | null, context?: Context | null, versionHint?: string | null): Promise<Record<string, unknown>>;
65
+ /**
66
+ * Reset PipelineContext for another attempt triggered by a RetrySignal.
67
+ *
68
+ * Preserves the top-level Context (so retry counters in context.data carry
69
+ * across attempts) while clearing per-run fields that the next attempt
70
+ * will re-populate. (sync finding A-D-017)
71
+ */
72
+ private _resetPipeCtxForRetry;
62
73
  /**
63
74
  * Alias for call(). Provided for compatibility with MCP bridge packages
64
75
  * that may call callAsync() by convention.
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}