@animalabs/agent-framework 0.4.1 → 0.5.1
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.
- package/dist/src/agent.d.ts +7 -1
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +9 -3
- package/dist/src/agent.js.map +1 -1
- package/dist/src/gate/event-gate.d.ts +27 -0
- package/dist/src/gate/event-gate.d.ts.map +1 -1
- package/dist/src/gate/event-gate.js +286 -22
- package/dist/src/gate/event-gate.js.map +1 -1
- package/dist/src/gate/types.d.ts +65 -0
- package/dist/src/gate/types.d.ts.map +1 -1
- package/dist/test/event-gate-rate-limit.test.d.ts +2 -0
- package/dist/test/event-gate-rate-limit.test.d.ts.map +1 -0
- package/dist/test/event-gate-rate-limit.test.js +627 -0
- package/dist/test/event-gate-rate-limit.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/agent.ts +10 -4
- package/src/gate/event-gate.ts +309 -22
- package/src/gate/types.ts +66 -1
package/dist/src/agent.d.ts
CHANGED
|
@@ -15,7 +15,13 @@ export declare class Agent {
|
|
|
15
15
|
readonly allowedTools: 'all' | string[];
|
|
16
16
|
readonly triggerSources: 'all' | string[];
|
|
17
17
|
readonly maxTokens: number;
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Sampling temperature. Optional — if undefined, the parameter is omitted
|
|
20
|
+
* from the inference request entirely. Required for newer Anthropic models
|
|
21
|
+
* (claude-opus-4-7+) that have deprecated the `temperature` parameter and
|
|
22
|
+
* return HTTP 400 if it's set, even to 1.
|
|
23
|
+
*/
|
|
24
|
+
readonly temperature: number | undefined;
|
|
19
25
|
private _state;
|
|
20
26
|
private _inferenceStartedAt;
|
|
21
27
|
private _streamId;
|
package/dist/src/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAqB,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGxH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AACD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/G,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EAGV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,SAAS,EACT,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,qBAAa,KAAK;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/src/agent.js
CHANGED
|
@@ -9,6 +9,12 @@ export class Agent {
|
|
|
9
9
|
allowedTools;
|
|
10
10
|
triggerSources;
|
|
11
11
|
maxTokens;
|
|
12
|
+
/**
|
|
13
|
+
* Sampling temperature. Optional — if undefined, the parameter is omitted
|
|
14
|
+
* from the inference request entirely. Required for newer Anthropic models
|
|
15
|
+
* (claude-opus-4-7+) that have deprecated the `temperature` parameter and
|
|
16
|
+
* return HTTP 400 if it's set, even to 1.
|
|
17
|
+
*/
|
|
12
18
|
temperature;
|
|
13
19
|
_state = { status: 'idle' };
|
|
14
20
|
_inferenceStartedAt = 0;
|
|
@@ -24,7 +30,7 @@ export class Agent {
|
|
|
24
30
|
this.allowedTools = config.allowedTools ?? 'all';
|
|
25
31
|
this.triggerSources = config.triggerSources ?? 'all';
|
|
26
32
|
this.maxTokens = config.maxTokens ?? 4096;
|
|
27
|
-
this.temperature = config.temperature
|
|
33
|
+
this.temperature = config.temperature;
|
|
28
34
|
this.maxStreamTokens = config.maxStreamTokens ?? 150_000;
|
|
29
35
|
this.contextManager = contextManager;
|
|
30
36
|
this.membrane = membrane;
|
|
@@ -125,7 +131,7 @@ export class Agent {
|
|
|
125
131
|
config: {
|
|
126
132
|
model: this.model,
|
|
127
133
|
maxTokens: this.maxTokens,
|
|
128
|
-
temperature: this.temperature,
|
|
134
|
+
...(this.temperature !== undefined && { temperature: this.temperature }),
|
|
129
135
|
},
|
|
130
136
|
tools: tools.length > 0 ? tools : undefined,
|
|
131
137
|
assistantParticipant: this.name,
|
|
@@ -234,7 +240,7 @@ export class Agent {
|
|
|
234
240
|
config: {
|
|
235
241
|
model: this.model,
|
|
236
242
|
maxTokens: this.maxTokens,
|
|
237
|
-
temperature: this.temperature,
|
|
243
|
+
...(this.temperature !== undefined && { temperature: this.temperature }),
|
|
238
244
|
},
|
|
239
245
|
tools: availableTools.length > 0 ? availableTools : undefined,
|
|
240
246
|
promptCaching: true,
|
package/dist/src/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,10 @@ export declare class EventGate {
|
|
|
27
27
|
private lastReloadTimestamp;
|
|
28
28
|
private configErrors;
|
|
29
29
|
private debounceTimers;
|
|
30
|
+
private rateLimitBuckets;
|
|
31
|
+
private passiveSampleCounters;
|
|
32
|
+
private rateLimitDenied;
|
|
33
|
+
private passiveSampleFires;
|
|
30
34
|
private inferring;
|
|
31
35
|
private inferenceBuffer;
|
|
32
36
|
private stats;
|
|
@@ -38,6 +42,9 @@ export declare class EventGate {
|
|
|
38
42
|
private addMessageFn;
|
|
39
43
|
private requestInferenceFn;
|
|
40
44
|
private getAgentNamesFn;
|
|
45
|
+
/** Clock injection — keeps the new rate_limit / passive_sample paths
|
|
46
|
+
* testable without monkey-patching Date.now globally. */
|
|
47
|
+
private now;
|
|
41
48
|
constructor(opts: {
|
|
42
49
|
configPath: string;
|
|
43
50
|
initialConfig?: GateConfig;
|
|
@@ -48,6 +55,8 @@ export declare class EventGate {
|
|
|
48
55
|
}>, metadata?: Record<string, unknown>) => unknown;
|
|
49
56
|
requestInference: (agentName: string, reason: string, source: string) => void;
|
|
50
57
|
getAgentNames: () => string[];
|
|
58
|
+
/** Optional clock — defaults to Date.now. Tests inject for deterministic time. */
|
|
59
|
+
now?: () => number;
|
|
51
60
|
});
|
|
52
61
|
private loadConfig;
|
|
53
62
|
private compilePolicies;
|
|
@@ -56,6 +65,24 @@ export declare class EventGate {
|
|
|
56
65
|
private compiledMatches;
|
|
57
66
|
evaluate(info: GateEventInfo): GateDecision;
|
|
58
67
|
private computeDecision;
|
|
68
|
+
/** Resolve the partition key for keyBy-style behaviors. */
|
|
69
|
+
private resolveKey;
|
|
70
|
+
private applyRateLimit;
|
|
71
|
+
private applyPassiveSample;
|
|
72
|
+
/**
|
|
73
|
+
* Clear bucket / counter state for the policies named in `policy.resets`.
|
|
74
|
+
* Called when a policy fires (decision.trigger === true). Unknown names
|
|
75
|
+
* are silently ignored — gate.json reload could remove them.
|
|
76
|
+
*/
|
|
77
|
+
private applyResets;
|
|
78
|
+
/**
|
|
79
|
+
* Clear ALL per-policy state (debounce timer, rate-limit buckets,
|
|
80
|
+
* passive-sample counters, denial / fire counters) for one policy.
|
|
81
|
+
* Used by reloadIfChanged when a policy is removed or its behavior
|
|
82
|
+
* params change. Stats (matchCount, lastMatchTimestamp) are preserved
|
|
83
|
+
* — those are historical and shouldn't reset on a config edit.
|
|
84
|
+
*/
|
|
85
|
+
private clearPolicyState;
|
|
59
86
|
/**
|
|
60
87
|
* Returns a callback compatible with McplServerConfig.shouldTriggerInference.
|
|
61
88
|
* Used by the framework to wire the gate into PushHandler and ChannelRegistry.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-gate.d.ts","sourceRoot":"","sources":["../../../src/gate/event-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EACV,UAAU,EAIV,YAAY,EACZ,aAAa,EAEb,UAAU,EACX,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"event-gate.d.ts","sourceRoot":"","sources":["../../../src/gate/event-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,8 @@ const DEFAULT_CONFIG = {
|
|
|
34
34
|
policies: [],
|
|
35
35
|
default: 'always',
|
|
36
36
|
};
|
|
37
|
+
/** Synthetic key used when a policy has no `keyBy` or the field is missing. */
|
|
38
|
+
const SHARED_BUCKET_KEY = '__shared__';
|
|
37
39
|
// ---------------------------------------------------------------------------
|
|
38
40
|
// Glob matching (simple * wildcards)
|
|
39
41
|
// ---------------------------------------------------------------------------
|
|
@@ -45,6 +47,49 @@ function compileGlob(pattern) {
|
|
|
45
47
|
}
|
|
46
48
|
return new RegExp('^' + escaped.replace(/\*/g, '.*') + '$');
|
|
47
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Truthiness for `metadataTrue` matching. Stricter than JS `Boolean(x)`:
|
|
52
|
+
* empty strings, empty arrays, and empty objects all count as false, so
|
|
53
|
+
* `metadataTrue: ["mentionIds"]` doesn't match every event that happens
|
|
54
|
+
* to carry an empty `mentionIds: []` array.
|
|
55
|
+
*/
|
|
56
|
+
function isMetadataTruthy(value) {
|
|
57
|
+
if (value === undefined || value === null)
|
|
58
|
+
return false;
|
|
59
|
+
if (typeof value === 'string')
|
|
60
|
+
return value.length > 0;
|
|
61
|
+
if (Array.isArray(value))
|
|
62
|
+
return value.length > 0;
|
|
63
|
+
if (typeof value === 'object')
|
|
64
|
+
return Object.keys(value).length > 0;
|
|
65
|
+
return Boolean(value);
|
|
66
|
+
}
|
|
67
|
+
/** Compact, log-friendly serialization of a GateBehavior. */
|
|
68
|
+
function formatBehavior(b) {
|
|
69
|
+
if (typeof b === 'string')
|
|
70
|
+
return b;
|
|
71
|
+
if ('debounce' in b)
|
|
72
|
+
return `debounce:${b.debounce}`;
|
|
73
|
+
if ('rate_limit' in b) {
|
|
74
|
+
const k = b.rate_limit.keyBy ? `,keyBy:${b.rate_limit.keyBy}` : '';
|
|
75
|
+
return `rate_limit:${b.rate_limit.tokens}/${b.rate_limit.refillIntervalMs}ms${k}`;
|
|
76
|
+
}
|
|
77
|
+
if ('passive_sample' in b) {
|
|
78
|
+
const k = b.passive_sample.keyBy ? `,keyBy:${b.passive_sample.keyBy}` : '';
|
|
79
|
+
return `passive_sample:${b.passive_sample.every}${k}`;
|
|
80
|
+
}
|
|
81
|
+
return 'unknown';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Stable fingerprint for a GateBehavior, used during reload to detect
|
|
85
|
+
* config changes that invalidate per-policy state. JSON.stringify is
|
|
86
|
+
* deterministic for our small, flat behavior shapes — keys appear in
|
|
87
|
+
* declaration order — so this is enough to spot any change in tokens,
|
|
88
|
+
* refillIntervalMs, keyBy, every, or debounce duration.
|
|
89
|
+
*/
|
|
90
|
+
function behaviorFingerprint(b) {
|
|
91
|
+
return typeof b === 'string' ? b : JSON.stringify(b);
|
|
92
|
+
}
|
|
48
93
|
// ---------------------------------------------------------------------------
|
|
49
94
|
// Config validation
|
|
50
95
|
// ---------------------------------------------------------------------------
|
|
@@ -80,7 +125,10 @@ function validatePolicy(raw) {
|
|
|
80
125
|
}
|
|
81
126
|
else if (obj.behavior && typeof obj.behavior === 'object') {
|
|
82
127
|
const b = obj.behavior;
|
|
83
|
-
if (
|
|
128
|
+
if ('debounce' in b) {
|
|
129
|
+
if (typeof b.debounce !== 'number' || b.debounce <= 0) {
|
|
130
|
+
throw new Error(`Policy "${obj.name}": debounce must be a positive number`);
|
|
131
|
+
}
|
|
84
132
|
if (b.debounce < MIN_DEBOUNCE_MS) {
|
|
85
133
|
throw new Error(`Policy "${obj.name}": debounce must be >= ${MIN_DEBOUNCE_MS}ms, got ${b.debounce}`);
|
|
86
134
|
}
|
|
@@ -89,8 +137,44 @@ function validatePolicy(raw) {
|
|
|
89
137
|
}
|
|
90
138
|
behavior = { debounce: b.debounce };
|
|
91
139
|
}
|
|
140
|
+
else if ('rate_limit' in b) {
|
|
141
|
+
const rl = b.rate_limit;
|
|
142
|
+
if (!rl || typeof rl !== 'object') {
|
|
143
|
+
throw new Error(`Policy "${obj.name}": rate_limit must be an object`);
|
|
144
|
+
}
|
|
145
|
+
const conf = rl;
|
|
146
|
+
if (typeof conf.tokens !== 'number' || !Number.isFinite(conf.tokens) || conf.tokens <= 0) {
|
|
147
|
+
throw new Error(`Policy "${obj.name}": rate_limit.tokens must be a positive number`);
|
|
148
|
+
}
|
|
149
|
+
if (typeof conf.refillIntervalMs !== 'number' || !Number.isFinite(conf.refillIntervalMs) || conf.refillIntervalMs <= 0) {
|
|
150
|
+
throw new Error(`Policy "${obj.name}": rate_limit.refillIntervalMs must be a positive number`);
|
|
151
|
+
}
|
|
152
|
+
const out = {
|
|
153
|
+
tokens: conf.tokens,
|
|
154
|
+
refillIntervalMs: conf.refillIntervalMs,
|
|
155
|
+
};
|
|
156
|
+
if (typeof conf.keyBy === 'string' && conf.keyBy.length > 0) {
|
|
157
|
+
out.keyBy = conf.keyBy;
|
|
158
|
+
}
|
|
159
|
+
behavior = { rate_limit: out };
|
|
160
|
+
}
|
|
161
|
+
else if ('passive_sample' in b) {
|
|
162
|
+
const ps = b.passive_sample;
|
|
163
|
+
if (!ps || typeof ps !== 'object') {
|
|
164
|
+
throw new Error(`Policy "${obj.name}": passive_sample must be an object`);
|
|
165
|
+
}
|
|
166
|
+
const conf = ps;
|
|
167
|
+
if (typeof conf.every !== 'number' || !Number.isInteger(conf.every) || conf.every <= 0) {
|
|
168
|
+
throw new Error(`Policy "${obj.name}": passive_sample.every must be a positive integer`);
|
|
169
|
+
}
|
|
170
|
+
const out = { every: conf.every };
|
|
171
|
+
if (typeof conf.keyBy === 'string' && conf.keyBy.length > 0) {
|
|
172
|
+
out.keyBy = conf.keyBy;
|
|
173
|
+
}
|
|
174
|
+
behavior = { passive_sample: out };
|
|
175
|
+
}
|
|
92
176
|
else {
|
|
93
|
-
throw new Error(`Policy "${obj.name}": debounce
|
|
177
|
+
throw new Error(`Policy "${obj.name}": unknown behavior — expected always | skip | { debounce } | { rate_limit } | { passive_sample }`);
|
|
94
178
|
}
|
|
95
179
|
}
|
|
96
180
|
else {
|
|
@@ -110,6 +194,11 @@ function validatePolicy(raw) {
|
|
|
110
194
|
match.mount = m.mount;
|
|
111
195
|
if (typeof m.pathGlob === 'string')
|
|
112
196
|
match.pathGlob = m.pathGlob;
|
|
197
|
+
if (Array.isArray(m.metadataTrue)) {
|
|
198
|
+
const fields = m.metadataTrue.filter((s) => typeof s === 'string' && s.length > 0);
|
|
199
|
+
if (fields.length > 0)
|
|
200
|
+
match.metadataTrue = fields;
|
|
201
|
+
}
|
|
113
202
|
if (m.filter && typeof m.filter === 'object') {
|
|
114
203
|
const f = m.filter;
|
|
115
204
|
if ((f.type === 'text' || f.type === 'regex') && typeof f.pattern === 'string') {
|
|
@@ -125,7 +214,18 @@ function validatePolicy(raw) {
|
|
|
125
214
|
}
|
|
126
215
|
}
|
|
127
216
|
}
|
|
128
|
-
|
|
217
|
+
// Validate resets (optional list of policy names; unknown names are ignored
|
|
218
|
+
// at runtime so reload races don't blow up).
|
|
219
|
+
let resets;
|
|
220
|
+
if (Array.isArray(obj.resets)) {
|
|
221
|
+
const names = obj.resets.filter((s) => typeof s === 'string' && s.length > 0);
|
|
222
|
+
if (names.length > 0)
|
|
223
|
+
resets = names;
|
|
224
|
+
}
|
|
225
|
+
const policy = { name: obj.name, match, behavior };
|
|
226
|
+
if (resets)
|
|
227
|
+
policy.resets = resets;
|
|
228
|
+
return policy;
|
|
129
229
|
}
|
|
130
230
|
// ---------------------------------------------------------------------------
|
|
131
231
|
// EventGate
|
|
@@ -141,6 +241,13 @@ export class EventGate {
|
|
|
141
241
|
configErrors = [];
|
|
142
242
|
// Debounce state
|
|
143
243
|
debounceTimers = new Map();
|
|
244
|
+
// Rate-limit state — policy name → key → bucket.
|
|
245
|
+
rateLimitBuckets = new Map();
|
|
246
|
+
// Passive-sample state — policy name → key → counter (count since last fire).
|
|
247
|
+
passiveSampleCounters = new Map();
|
|
248
|
+
// Per-policy denial / fire counters for status reporting.
|
|
249
|
+
rateLimitDenied = new Map();
|
|
250
|
+
passiveSampleFires = new Map();
|
|
144
251
|
// Inference buffering
|
|
145
252
|
inferring = new Set();
|
|
146
253
|
inferenceBuffer = [];
|
|
@@ -156,12 +263,16 @@ export class EventGate {
|
|
|
156
263
|
addMessageFn;
|
|
157
264
|
requestInferenceFn;
|
|
158
265
|
getAgentNamesFn;
|
|
266
|
+
/** Clock injection — keeps the new rate_limit / passive_sample paths
|
|
267
|
+
* testable without monkey-patching Date.now globally. */
|
|
268
|
+
now;
|
|
159
269
|
constructor(opts) {
|
|
160
270
|
this.configPath = opts.configPath;
|
|
161
271
|
this.emitTrace = opts.emitTrace;
|
|
162
272
|
this.addMessageFn = opts.addMessage;
|
|
163
273
|
this.requestInferenceFn = opts.requestInference;
|
|
164
274
|
this.getAgentNamesFn = opts.getAgentNames;
|
|
275
|
+
this.now = opts.now ?? (() => Date.now());
|
|
165
276
|
// Seed or reconcile the on-disk config.
|
|
166
277
|
//
|
|
167
278
|
// First start: write `initialConfig` verbatim.
|
|
@@ -274,21 +385,35 @@ export class EventGate {
|
|
|
274
385
|
const newConfig = this.loadConfig();
|
|
275
386
|
if (!newConfig)
|
|
276
387
|
return; // Parse error — keep previous config
|
|
277
|
-
//
|
|
388
|
+
// Capture old policies' behavior fingerprints before any state
|
|
389
|
+
// mutation — needed to detect kept policies whose parameters changed.
|
|
390
|
+
const oldBehaviorByName = new Map();
|
|
391
|
+
for (const p of this.config.policies) {
|
|
392
|
+
oldBehaviorByName.set(p.name, behaviorFingerprint(p.behavior));
|
|
393
|
+
}
|
|
394
|
+
// Clean up state for REMOVED policies (gone from new config entirely).
|
|
278
395
|
const newPolicyNames = new Set(newConfig.policies.map(p => p.name));
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
this.debounceTimers.delete(name);
|
|
396
|
+
const removedPolicies = [];
|
|
397
|
+
for (const oldName of oldBehaviorByName.keys()) {
|
|
398
|
+
if (!newPolicyNames.has(oldName)) {
|
|
399
|
+
this.clearPolicyState(oldName, { deliverPendingDebounce: true });
|
|
400
|
+
this.stats.delete(oldName);
|
|
401
|
+
removedPolicies.push(oldName);
|
|
286
402
|
}
|
|
287
403
|
}
|
|
288
|
-
//
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
404
|
+
// Clean up state for KEPT policies whose behavior parameters changed.
|
|
405
|
+
// Without this, a tokens 100→5 edit (or keyBy switch, or every 10→3,
|
|
406
|
+
// etc.) wouldn't take effect until existing buckets/counters drained.
|
|
407
|
+
// Stats are preserved — matchCount is historical, not live state.
|
|
408
|
+
const stateClearedPolicies = [];
|
|
409
|
+
for (const newPolicy of newConfig.policies) {
|
|
410
|
+
const oldHash = oldBehaviorByName.get(newPolicy.name);
|
|
411
|
+
if (oldHash === undefined)
|
|
412
|
+
continue; // new policy, no state to clear
|
|
413
|
+
const newHash = behaviorFingerprint(newPolicy.behavior);
|
|
414
|
+
if (oldHash !== newHash) {
|
|
415
|
+
this.clearPolicyState(newPolicy.name, { deliverPendingDebounce: true });
|
|
416
|
+
stateClearedPolicies.push(newPolicy.name);
|
|
292
417
|
}
|
|
293
418
|
}
|
|
294
419
|
this.config = newConfig;
|
|
@@ -298,6 +423,8 @@ export class EventGate {
|
|
|
298
423
|
type: 'gate:config-reloaded',
|
|
299
424
|
configPath: this.configPath,
|
|
300
425
|
policyCount: newConfig.policies.length,
|
|
426
|
+
removedPolicies: removedPolicies.length > 0 ? removedPolicies : undefined,
|
|
427
|
+
stateClearedPolicies: stateClearedPolicies.length > 0 ? stateClearedPolicies : undefined,
|
|
301
428
|
timestamp: now,
|
|
302
429
|
});
|
|
303
430
|
}
|
|
@@ -361,6 +488,15 @@ export class EventGate {
|
|
|
361
488
|
return false; // Regex failed to compile
|
|
362
489
|
}
|
|
363
490
|
}
|
|
491
|
+
// Metadata-truthy check — match if ANY listed field is truthy.
|
|
492
|
+
// Uses isMetadataTruthy so empty arrays / strings / objects are treated
|
|
493
|
+
// as falsy (matches user expectation, not raw JS Boolean coercion).
|
|
494
|
+
if (match.metadataTrue && match.metadataTrue.length > 0) {
|
|
495
|
+
const md = info.metadata ?? {};
|
|
496
|
+
const anyTrue = match.metadataTrue.some(field => isMetadataTruthy(md[field]));
|
|
497
|
+
if (!anyTrue)
|
|
498
|
+
return false;
|
|
499
|
+
}
|
|
364
500
|
return true;
|
|
365
501
|
}
|
|
366
502
|
// =========================================================================
|
|
@@ -391,8 +527,8 @@ export class EventGate {
|
|
|
391
527
|
channelId: info.channelId || undefined,
|
|
392
528
|
matchedPolicy: decision.policyName,
|
|
393
529
|
trigger: decision.trigger,
|
|
394
|
-
behavior:
|
|
395
|
-
timestamp:
|
|
530
|
+
behavior: formatBehavior(decision.behavior),
|
|
531
|
+
timestamp: this.now(),
|
|
396
532
|
});
|
|
397
533
|
return decision;
|
|
398
534
|
}
|
|
@@ -404,27 +540,139 @@ export class EventGate {
|
|
|
404
540
|
// Record stats
|
|
405
541
|
const policyStats = this.stats.get(policy.name) ?? { matchCount: 0, lastMatchTimestamp: null };
|
|
406
542
|
policyStats.matchCount++;
|
|
407
|
-
policyStats.lastMatchTimestamp =
|
|
543
|
+
policyStats.lastMatchTimestamp = this.now();
|
|
408
544
|
this.stats.set(policy.name, policyStats);
|
|
409
545
|
// Legacy trace kept for backward compatibility with existing consumers.
|
|
410
546
|
this.emitTrace({
|
|
411
547
|
type: 'gate:policy-matched',
|
|
412
548
|
policyName: policy.name,
|
|
413
|
-
behavior:
|
|
549
|
+
behavior: formatBehavior(policy.behavior),
|
|
414
550
|
eventType: info.eventType,
|
|
415
551
|
source: info.serverId || undefined,
|
|
416
|
-
timestamp:
|
|
552
|
+
timestamp: this.now(),
|
|
417
553
|
});
|
|
418
554
|
if (policy.behavior === 'skip') {
|
|
419
555
|
return { trigger: false, policyName: policy.name, behavior: 'skip' };
|
|
420
556
|
}
|
|
421
557
|
if (policy.behavior === 'always') {
|
|
558
|
+
this.applyResets(policy);
|
|
422
559
|
return { trigger: true, policyName: policy.name, behavior: 'always' };
|
|
423
560
|
}
|
|
424
|
-
|
|
425
|
-
|
|
561
|
+
if (typeof policy.behavior === 'object') {
|
|
562
|
+
if ('debounce' in policy.behavior) {
|
|
563
|
+
this.handleDebounce(policy, info);
|
|
564
|
+
return { trigger: false, policyName: policy.name, behavior: policy.behavior };
|
|
565
|
+
}
|
|
566
|
+
if ('rate_limit' in policy.behavior) {
|
|
567
|
+
return this.applyRateLimit(policy, info, policy.behavior.rate_limit);
|
|
568
|
+
}
|
|
569
|
+
if ('passive_sample' in policy.behavior) {
|
|
570
|
+
return this.applyPassiveSample(policy, info, policy.behavior.passive_sample);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
// Unknown behavior shape — should be unreachable thanks to validation,
|
|
574
|
+
// but be defensive: treat as skip rather than crash on a bad config.
|
|
575
|
+
return { trigger: false, policyName: policy.name, behavior: 'skip' };
|
|
576
|
+
}
|
|
577
|
+
// =========================================================================
|
|
578
|
+
// rate_limit + passive_sample + resets
|
|
579
|
+
// =========================================================================
|
|
580
|
+
/** Resolve the partition key for keyBy-style behaviors. */
|
|
581
|
+
resolveKey(metadata, keyBy) {
|
|
582
|
+
if (!keyBy)
|
|
583
|
+
return SHARED_BUCKET_KEY;
|
|
584
|
+
const value = metadata?.[keyBy];
|
|
585
|
+
if (value === undefined || value === null || value === '')
|
|
586
|
+
return SHARED_BUCKET_KEY;
|
|
587
|
+
return String(value);
|
|
588
|
+
}
|
|
589
|
+
applyRateLimit(policy, info, config) {
|
|
590
|
+
const key = this.resolveKey(info.metadata, config.keyBy);
|
|
591
|
+
let buckets = this.rateLimitBuckets.get(policy.name);
|
|
592
|
+
if (!buckets) {
|
|
593
|
+
buckets = new Map();
|
|
594
|
+
this.rateLimitBuckets.set(policy.name, buckets);
|
|
595
|
+
}
|
|
596
|
+
const now = this.now();
|
|
597
|
+
let bucket = buckets.get(key);
|
|
598
|
+
if (!bucket) {
|
|
599
|
+
bucket = { tokens: config.tokens, lastRefill: now };
|
|
600
|
+
buckets.set(key, bucket);
|
|
601
|
+
}
|
|
602
|
+
else if (bucket.tokens < config.tokens) {
|
|
603
|
+
const elapsed = now - bucket.lastRefill;
|
|
604
|
+
if (elapsed > 0) {
|
|
605
|
+
const tokensToAdd = Math.floor(elapsed / config.refillIntervalMs);
|
|
606
|
+
if (tokensToAdd > 0) {
|
|
607
|
+
bucket.tokens = Math.min(config.tokens, bucket.tokens + tokensToAdd);
|
|
608
|
+
bucket.lastRefill += tokensToAdd * config.refillIntervalMs;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
// Bucket already full — keep the refill clock fresh so the next
|
|
614
|
+
// drain starts from "now" rather than ancient history.
|
|
615
|
+
bucket.lastRefill = now;
|
|
616
|
+
}
|
|
617
|
+
if (bucket.tokens > 0) {
|
|
618
|
+
bucket.tokens -= 1;
|
|
619
|
+
this.applyResets(policy);
|
|
620
|
+
return { trigger: true, policyName: policy.name, behavior: policy.behavior };
|
|
621
|
+
}
|
|
622
|
+
this.rateLimitDenied.set(policy.name, (this.rateLimitDenied.get(policy.name) ?? 0) + 1);
|
|
426
623
|
return { trigger: false, policyName: policy.name, behavior: policy.behavior };
|
|
427
624
|
}
|
|
625
|
+
applyPassiveSample(policy, info, config) {
|
|
626
|
+
const key = this.resolveKey(info.metadata, config.keyBy);
|
|
627
|
+
let counters = this.passiveSampleCounters.get(policy.name);
|
|
628
|
+
if (!counters) {
|
|
629
|
+
counters = new Map();
|
|
630
|
+
this.passiveSampleCounters.set(policy.name, counters);
|
|
631
|
+
}
|
|
632
|
+
const next = (counters.get(key) ?? 0) + 1;
|
|
633
|
+
if (next >= config.every) {
|
|
634
|
+
counters.set(key, 0);
|
|
635
|
+
this.passiveSampleFires.set(policy.name, (this.passiveSampleFires.get(policy.name) ?? 0) + 1);
|
|
636
|
+
this.applyResets(policy);
|
|
637
|
+
return { trigger: true, policyName: policy.name, behavior: policy.behavior };
|
|
638
|
+
}
|
|
639
|
+
counters.set(key, next);
|
|
640
|
+
return { trigger: false, policyName: policy.name, behavior: policy.behavior };
|
|
641
|
+
}
|
|
642
|
+
/**
|
|
643
|
+
* Clear bucket / counter state for the policies named in `policy.resets`.
|
|
644
|
+
* Called when a policy fires (decision.trigger === true). Unknown names
|
|
645
|
+
* are silently ignored — gate.json reload could remove them.
|
|
646
|
+
*/
|
|
647
|
+
applyResets(policy) {
|
|
648
|
+
if (!policy.resets || policy.resets.length === 0)
|
|
649
|
+
return;
|
|
650
|
+
for (const target of policy.resets) {
|
|
651
|
+
this.rateLimitBuckets.delete(target);
|
|
652
|
+
this.passiveSampleCounters.delete(target);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
/**
|
|
656
|
+
* Clear ALL per-policy state (debounce timer, rate-limit buckets,
|
|
657
|
+
* passive-sample counters, denial / fire counters) for one policy.
|
|
658
|
+
* Used by reloadIfChanged when a policy is removed or its behavior
|
|
659
|
+
* params change. Stats (matchCount, lastMatchTimestamp) are preserved
|
|
660
|
+
* — those are historical and shouldn't reset on a config edit.
|
|
661
|
+
*/
|
|
662
|
+
clearPolicyState(name, options) {
|
|
663
|
+
const debounce = this.debounceTimers.get(name);
|
|
664
|
+
if (debounce) {
|
|
665
|
+
clearTimeout(debounce.timer);
|
|
666
|
+
if (options.deliverPendingDebounce && debounce.events.length > 0) {
|
|
667
|
+
this.deliverEvents(debounce.events);
|
|
668
|
+
}
|
|
669
|
+
this.debounceTimers.delete(name);
|
|
670
|
+
}
|
|
671
|
+
this.rateLimitBuckets.delete(name);
|
|
672
|
+
this.passiveSampleCounters.delete(name);
|
|
673
|
+
this.rateLimitDenied.delete(name);
|
|
674
|
+
this.passiveSampleFires.delete(name);
|
|
675
|
+
}
|
|
428
676
|
// =========================================================================
|
|
429
677
|
// shouldTriggerInference callback adapter
|
|
430
678
|
// =========================================================================
|
|
@@ -567,6 +815,18 @@ export class EventGate {
|
|
|
567
815
|
nextDeliveryMs: null, // Timer internals not easily inspectable
|
|
568
816
|
};
|
|
569
817
|
}
|
|
818
|
+
if (typeof p.behavior === 'object' && 'rate_limit' in p.behavior) {
|
|
819
|
+
result.rateLimitState = {
|
|
820
|
+
bucketCount: this.rateLimitBuckets.get(p.name)?.size ?? 0,
|
|
821
|
+
deniedCount: this.rateLimitDenied.get(p.name) ?? 0,
|
|
822
|
+
};
|
|
823
|
+
}
|
|
824
|
+
if (typeof p.behavior === 'object' && 'passive_sample' in p.behavior) {
|
|
825
|
+
result.passiveSampleState = {
|
|
826
|
+
counterCount: this.passiveSampleCounters.get(p.name)?.size ?? 0,
|
|
827
|
+
fireCount: this.passiveSampleFires.get(p.name) ?? 0,
|
|
828
|
+
};
|
|
829
|
+
}
|
|
570
830
|
return result;
|
|
571
831
|
});
|
|
572
832
|
const byEventType = {};
|
|
@@ -595,6 +855,10 @@ export class EventGate {
|
|
|
595
855
|
clearTimeout(state.timer);
|
|
596
856
|
}
|
|
597
857
|
this.debounceTimers.clear();
|
|
858
|
+
this.rateLimitBuckets.clear();
|
|
859
|
+
this.passiveSampleCounters.clear();
|
|
860
|
+
this.rateLimitDenied.clear();
|
|
861
|
+
this.passiveSampleFires.clear();
|
|
598
862
|
this.inferenceBuffer = [];
|
|
599
863
|
}
|
|
600
864
|
}
|