@vainplex/openclaw-governance 0.1.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 (83) hide show
  1. package/README.md +297 -0
  2. package/dist/index.d.ts +10 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +30 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/audit-redactor.d.ts +3 -0
  7. package/dist/src/audit-redactor.d.ts.map +1 -0
  8. package/dist/src/audit-redactor.js +68 -0
  9. package/dist/src/audit-redactor.js.map +1 -0
  10. package/dist/src/audit-trail.d.ts +27 -0
  11. package/dist/src/audit-trail.d.ts.map +1 -0
  12. package/dist/src/audit-trail.js +192 -0
  13. package/dist/src/audit-trail.js.map +1 -0
  14. package/dist/src/builtin-policies.d.ts +3 -0
  15. package/dist/src/builtin-policies.d.ts.map +1 -0
  16. package/dist/src/builtin-policies.js +152 -0
  17. package/dist/src/builtin-policies.js.map +1 -0
  18. package/dist/src/conditions/context.d.ts +3 -0
  19. package/dist/src/conditions/context.d.ts.map +1 -0
  20. package/dist/src/conditions/context.js +60 -0
  21. package/dist/src/conditions/context.js.map +1 -0
  22. package/dist/src/conditions/index.d.ts +4 -0
  23. package/dist/src/conditions/index.d.ts.map +1 -0
  24. package/dist/src/conditions/index.js +28 -0
  25. package/dist/src/conditions/index.js.map +1 -0
  26. package/dist/src/conditions/simple.d.ts +10 -0
  27. package/dist/src/conditions/simple.d.ts.map +1 -0
  28. package/dist/src/conditions/simple.js +94 -0
  29. package/dist/src/conditions/simple.js.map +1 -0
  30. package/dist/src/conditions/time.d.ts +3 -0
  31. package/dist/src/conditions/time.d.ts.map +1 -0
  32. package/dist/src/conditions/time.js +48 -0
  33. package/dist/src/conditions/time.js.map +1 -0
  34. package/dist/src/conditions/tool.d.ts +3 -0
  35. package/dist/src/conditions/tool.d.ts.map +1 -0
  36. package/dist/src/conditions/tool.js +57 -0
  37. package/dist/src/conditions/tool.js.map +1 -0
  38. package/dist/src/config.d.ts +3 -0
  39. package/dist/src/config.d.ts.map +1 -0
  40. package/dist/src/config.js +80 -0
  41. package/dist/src/config.js.map +1 -0
  42. package/dist/src/cross-agent.d.ts +23 -0
  43. package/dist/src/cross-agent.d.ts.map +1 -0
  44. package/dist/src/cross-agent.js +142 -0
  45. package/dist/src/cross-agent.js.map +1 -0
  46. package/dist/src/engine.d.ts +29 -0
  47. package/dist/src/engine.d.ts.map +1 -0
  48. package/dist/src/engine.js +195 -0
  49. package/dist/src/engine.js.map +1 -0
  50. package/dist/src/frequency-tracker.d.ts +12 -0
  51. package/dist/src/frequency-tracker.d.ts.map +1 -0
  52. package/dist/src/frequency-tracker.js +44 -0
  53. package/dist/src/frequency-tracker.js.map +1 -0
  54. package/dist/src/hooks.d.ts +4 -0
  55. package/dist/src/hooks.d.ts.map +1 -0
  56. package/dist/src/hooks.js +198 -0
  57. package/dist/src/hooks.js.map +1 -0
  58. package/dist/src/policy-evaluator.d.ts +16 -0
  59. package/dist/src/policy-evaluator.d.ts.map +1 -0
  60. package/dist/src/policy-evaluator.js +99 -0
  61. package/dist/src/policy-evaluator.js.map +1 -0
  62. package/dist/src/policy-loader.d.ts +8 -0
  63. package/dist/src/policy-loader.d.ts.map +1 -0
  64. package/dist/src/policy-loader.js +105 -0
  65. package/dist/src/policy-loader.js.map +1 -0
  66. package/dist/src/risk-assessor.d.ts +8 -0
  67. package/dist/src/risk-assessor.d.ts.map +1 -0
  68. package/dist/src/risk-assessor.js +80 -0
  69. package/dist/src/risk-assessor.js.map +1 -0
  70. package/dist/src/trust-manager.d.ts +29 -0
  71. package/dist/src/trust-manager.d.ts.map +1 -0
  72. package/dist/src/trust-manager.js +219 -0
  73. package/dist/src/trust-manager.js.map +1 -0
  74. package/dist/src/types.d.ts +438 -0
  75. package/dist/src/types.d.ts.map +1 -0
  76. package/dist/src/types.js +3 -0
  77. package/dist/src/types.js.map +1 -0
  78. package/dist/src/util.d.ts +28 -0
  79. package/dist/src/util.d.ts.map +1 -0
  80. package/dist/src/util.js +125 -0
  81. package/dist/src/util.js.map +1 -0
  82. package/openclaw.plugin.json +87 -0
  83. package/package.json +48 -0
@@ -0,0 +1,219 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { clamp, scoreToTier } from "./util.js";
4
+ const DEFAULT_WEIGHTS = {
5
+ agePerDay: 0.5,
6
+ ageMax: 20,
7
+ successPerAction: 0.1,
8
+ successMax: 30,
9
+ violationPenalty: -2,
10
+ cleanStreakPerDay: 0.3,
11
+ cleanStreakMax: 20,
12
+ };
13
+ function mergeWeights(partial) {
14
+ if (!partial)
15
+ return { ...DEFAULT_WEIGHTS };
16
+ return { ...DEFAULT_WEIGHTS, ...partial };
17
+ }
18
+ function computeScore(signals, weights) {
19
+ const base = Math.min(signals.ageDays * weights.agePerDay, weights.ageMax);
20
+ const success = Math.min(signals.successCount * weights.successPerAction, weights.successMax);
21
+ const violations = signals.violationCount * weights.violationPenalty;
22
+ const streak = Math.min(signals.cleanStreak * weights.cleanStreakPerDay, weights.cleanStreakMax);
23
+ const raw = base + success + violations + streak + signals.manualAdjustment;
24
+ return clamp(raw, 0, 100);
25
+ }
26
+ function createAgentTrust(agentId, initialScore) {
27
+ const now = new Date().toISOString();
28
+ return {
29
+ agentId,
30
+ score: clamp(initialScore, 0, 100),
31
+ tier: scoreToTier(initialScore),
32
+ signals: {
33
+ successCount: 0,
34
+ violationCount: 0,
35
+ ageDays: 0,
36
+ cleanStreak: 0,
37
+ manualAdjustment: 0,
38
+ },
39
+ history: [],
40
+ lastEvaluation: now,
41
+ created: now,
42
+ };
43
+ }
44
+ export class TrustManager {
45
+ config;
46
+ filePath;
47
+ logger;
48
+ weights;
49
+ store;
50
+ persistTimer = null;
51
+ dirty = false;
52
+ constructor(config, workspace, logger) {
53
+ this.config = config;
54
+ this.filePath = join(workspace, "governance", "trust.json");
55
+ this.logger = logger;
56
+ this.weights = mergeWeights(config.weights);
57
+ this.store = { version: 1, updated: new Date().toISOString(), agents: {} };
58
+ }
59
+ load() {
60
+ if (existsSync(this.filePath)) {
61
+ try {
62
+ const raw = readFileSync(this.filePath, "utf-8");
63
+ const parsed = JSON.parse(raw);
64
+ this.store = parsed;
65
+ this.applyDecay();
66
+ this.logger.info(`[governance] Trust store loaded: ${Object.keys(this.store.agents).length} agents`);
67
+ }
68
+ catch (e) {
69
+ this.logger.error(`[governance] Failed to load trust store: ${e instanceof Error ? e.message : String(e)}`);
70
+ }
71
+ }
72
+ }
73
+ applyDecay() {
74
+ if (!this.config.decay.enabled)
75
+ return;
76
+ const now = Date.now();
77
+ for (const agent of Object.values(this.store.agents)) {
78
+ const lastEval = new Date(agent.lastEvaluation).getTime();
79
+ const daysSince = (now - lastEval) / (1000 * 60 * 60 * 24);
80
+ if (daysSince > this.config.decay.inactivityDays) {
81
+ agent.score = clamp(agent.score * this.config.decay.rate, agent.floor ?? 0, 100);
82
+ agent.tier = agent.locked ?? scoreToTier(agent.score);
83
+ this.dirty = true;
84
+ }
85
+ }
86
+ }
87
+ getAgentTrust(agentId) {
88
+ const existing = this.store.agents[agentId];
89
+ if (existing)
90
+ return existing;
91
+ const defaultScore = this.resolveDefault(agentId);
92
+ const agent = createAgentTrust(agentId, defaultScore);
93
+ this.store.agents[agentId] = agent;
94
+ this.dirty = true;
95
+ return agent;
96
+ }
97
+ resolveDefault(agentId) {
98
+ const explicit = this.config.defaults[agentId];
99
+ if (explicit !== undefined)
100
+ return explicit;
101
+ const wildcard = this.config.defaults["*"];
102
+ if (wildcard !== undefined)
103
+ return wildcard;
104
+ return 10;
105
+ }
106
+ getStore() {
107
+ return this.store;
108
+ }
109
+ recordSuccess(agentId, reason) {
110
+ const agent = this.getAgentTrust(agentId);
111
+ agent.signals.successCount++;
112
+ agent.signals.cleanStreak++;
113
+ this.addEvent(agent, "success", 1, reason);
114
+ this.recalculate(agent);
115
+ }
116
+ recordViolation(agentId, reason) {
117
+ const agent = this.getAgentTrust(agentId);
118
+ agent.signals.violationCount++;
119
+ agent.signals.cleanStreak = 0;
120
+ this.addEvent(agent, "violation", -2, reason);
121
+ this.recalculate(agent);
122
+ }
123
+ setScore(agentId, score) {
124
+ const agent = this.getAgentTrust(agentId);
125
+ const clamped = clamp(score, agent.floor ?? 0, 100);
126
+ const delta = clamped - agent.score;
127
+ // Compute what the formula would produce without the new adjustment
128
+ const currentComputed = computeScore(agent.signals, this.weights);
129
+ // Set manualAdjustment so that computeScore yields the desired score
130
+ agent.signals.manualAdjustment = clamped - (currentComputed - agent.signals.manualAdjustment);
131
+ this.addEvent(agent, "manual_adjustment", delta, `Manual set to ${clamped}`);
132
+ this.recalculate(agent);
133
+ }
134
+ lockTier(agentId, tier) {
135
+ const agent = this.getAgentTrust(agentId);
136
+ agent.locked = tier;
137
+ agent.tier = tier;
138
+ this.dirty = true;
139
+ }
140
+ unlockTier(agentId) {
141
+ const agent = this.getAgentTrust(agentId);
142
+ agent.locked = undefined;
143
+ agent.tier = scoreToTier(agent.score);
144
+ this.dirty = true;
145
+ }
146
+ setFloor(agentId, floor) {
147
+ const agent = this.getAgentTrust(agentId);
148
+ agent.floor = clamp(floor, 0, 100);
149
+ if (agent.score < agent.floor) {
150
+ agent.score = agent.floor;
151
+ agent.tier = agent.locked ?? scoreToTier(agent.score);
152
+ }
153
+ this.dirty = true;
154
+ }
155
+ resetHistory(agentId) {
156
+ const agent = this.getAgentTrust(agentId);
157
+ agent.history = [];
158
+ agent.signals = {
159
+ successCount: 0,
160
+ violationCount: 0,
161
+ ageDays: 0,
162
+ cleanStreak: 0,
163
+ manualAdjustment: 0,
164
+ };
165
+ this.recalculate(agent);
166
+ }
167
+ addEvent(agent, type, delta, reason) {
168
+ agent.history.push({
169
+ timestamp: new Date().toISOString(),
170
+ type,
171
+ delta,
172
+ reason,
173
+ });
174
+ // Trim history
175
+ if (agent.history.length > this.config.maxHistoryPerAgent) {
176
+ agent.history = agent.history.slice(-this.config.maxHistoryPerAgent);
177
+ }
178
+ }
179
+ recalculate(agent) {
180
+ agent.signals.ageDays = Math.floor((Date.now() - new Date(agent.created).getTime()) / (1000 * 60 * 60 * 24));
181
+ agent.score = computeScore(agent.signals, this.weights);
182
+ if (agent.floor !== undefined && agent.score < agent.floor) {
183
+ agent.score = agent.floor;
184
+ }
185
+ agent.tier = agent.locked ?? scoreToTier(agent.score);
186
+ agent.lastEvaluation = new Date().toISOString();
187
+ this.dirty = true;
188
+ }
189
+ flush() {
190
+ if (!this.dirty)
191
+ return;
192
+ try {
193
+ const dir = dirname(this.filePath);
194
+ if (!existsSync(dir)) {
195
+ mkdirSync(dir, { recursive: true });
196
+ }
197
+ this.store.updated = new Date().toISOString();
198
+ writeFileSync(this.filePath, JSON.stringify(this.store, null, 2));
199
+ this.dirty = false;
200
+ }
201
+ catch (e) {
202
+ this.logger.error(`[governance] Failed to flush trust store: ${e instanceof Error ? e.message : String(e)}`);
203
+ }
204
+ }
205
+ startPersistence() {
206
+ if (this.persistTimer)
207
+ return;
208
+ this.persistTimer = setInterval(() => this.flush(), this.config.persistIntervalSeconds * 1000);
209
+ this.persistTimer.unref();
210
+ }
211
+ stopPersistence() {
212
+ if (this.persistTimer) {
213
+ clearInterval(this.persistTimer);
214
+ this.persistTimer = null;
215
+ }
216
+ this.flush();
217
+ }
218
+ }
219
+ //# sourceMappingURL=trust-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-manager.js","sourceRoot":"","sources":["../../src/trust-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,438 @@
1
+ export type PluginLogger = {
2
+ info: (msg: string) => void;
3
+ warn: (msg: string) => void;
4
+ error: (msg: string) => void;
5
+ debug?: (msg: string) => void;
6
+ };
7
+ export type OpenClawPluginApi = {
8
+ id: string;
9
+ pluginConfig?: Record<string, unknown>;
10
+ logger: PluginLogger;
11
+ config: Record<string, unknown>;
12
+ registerService: (service: PluginService) => void;
13
+ registerCommand: (command: PluginCommand) => void;
14
+ registerGatewayMethod: (method: string, handler: (...args: unknown[]) => unknown) => void;
15
+ on: <K extends string>(hookName: K, handler: (...args: unknown[]) => unknown, opts?: {
16
+ priority?: number;
17
+ }) => void;
18
+ };
19
+ export type PluginService = {
20
+ id: string;
21
+ start: (ctx: unknown) => void | Promise<void>;
22
+ stop?: (ctx: unknown) => void | Promise<void>;
23
+ };
24
+ export type PluginCommand = {
25
+ name: string;
26
+ description: string;
27
+ requireAuth?: boolean;
28
+ handler: (ctx?: unknown) => {
29
+ text: string;
30
+ } | Promise<{
31
+ text: string;
32
+ }>;
33
+ };
34
+ export type HookBeforeToolCallEvent = {
35
+ toolName: string;
36
+ params: Record<string, unknown>;
37
+ };
38
+ export type HookBeforeToolCallResult = {
39
+ params?: Record<string, unknown>;
40
+ block?: boolean;
41
+ blockReason?: string;
42
+ };
43
+ export type HookToolContext = {
44
+ agentId?: string;
45
+ sessionKey?: string;
46
+ toolName: string;
47
+ };
48
+ export type HookMessageSendingEvent = {
49
+ to: string;
50
+ content: string;
51
+ metadata?: Record<string, unknown>;
52
+ };
53
+ export type HookMessageSendingResult = {
54
+ content?: string;
55
+ cancel?: boolean;
56
+ };
57
+ export type HookMessageContext = {
58
+ channelId: string;
59
+ accountId?: string;
60
+ conversationId?: string;
61
+ };
62
+ export type HookBeforeAgentStartEvent = {
63
+ prompt: string;
64
+ messages?: unknown[];
65
+ };
66
+ export type HookBeforeAgentStartResult = {
67
+ systemPrompt?: string;
68
+ prependContext?: string;
69
+ };
70
+ export type HookAgentContext = {
71
+ agentId?: string;
72
+ sessionKey?: string;
73
+ sessionId?: string;
74
+ workspaceDir?: string;
75
+ };
76
+ export type HookAfterToolCallEvent = {
77
+ toolName: string;
78
+ params: Record<string, unknown>;
79
+ result?: unknown;
80
+ error?: string;
81
+ durationMs?: number;
82
+ };
83
+ export type HookSessionStartEvent = {
84
+ sessionId: string;
85
+ resumedFrom?: string;
86
+ };
87
+ export type HookSessionContext = {
88
+ agentId?: string;
89
+ sessionId: string;
90
+ };
91
+ export type HookGatewayStartEvent = {
92
+ port: number;
93
+ };
94
+ export type HookGatewayStopEvent = {
95
+ reason?: string;
96
+ };
97
+ export type HookGatewayContext = {
98
+ port?: number;
99
+ };
100
+ export type TrustTier = "untrusted" | "restricted" | "standard" | "trusted" | "privileged";
101
+ export type TrustSignals = {
102
+ successCount: number;
103
+ violationCount: number;
104
+ ageDays: number;
105
+ cleanStreak: number;
106
+ manualAdjustment: number;
107
+ };
108
+ export type TrustEvent = {
109
+ timestamp: string;
110
+ type: "success" | "violation" | "manual_adjustment";
111
+ delta: number;
112
+ reason?: string;
113
+ };
114
+ export type AgentTrust = {
115
+ agentId: string;
116
+ score: number;
117
+ tier: TrustTier;
118
+ signals: TrustSignals;
119
+ history: TrustEvent[];
120
+ lastEvaluation: string;
121
+ created: string;
122
+ locked?: TrustTier;
123
+ floor?: number;
124
+ };
125
+ export type TrustStore = {
126
+ version: 1;
127
+ updated: string;
128
+ agents: Record<string, AgentTrust>;
129
+ };
130
+ export type PolicyHookName = "before_tool_call" | "message_sending" | "before_agent_start" | "session_start";
131
+ export type PolicyScope = {
132
+ agents?: string[];
133
+ excludeAgents?: string[];
134
+ channels?: string[];
135
+ hooks?: PolicyHookName[];
136
+ };
137
+ export type RiskLevel = "low" | "medium" | "high" | "critical";
138
+ export type AuditLevel = "minimal" | "standard" | "verbose";
139
+ export type RuleEffect = {
140
+ action: "allow";
141
+ } | {
142
+ action: "deny";
143
+ reason: string;
144
+ } | {
145
+ action: "audit";
146
+ level?: AuditLevel;
147
+ };
148
+ export type ParamMatcher = {
149
+ equals: string | number | boolean;
150
+ } | {
151
+ contains: string;
152
+ } | {
153
+ matches: string;
154
+ } | {
155
+ startsWith: string;
156
+ } | {
157
+ in: (string | number)[];
158
+ };
159
+ export type ToolCondition = {
160
+ type: "tool";
161
+ name?: string | string[];
162
+ params?: Record<string, ParamMatcher>;
163
+ };
164
+ export type TimeCondition = {
165
+ type: "time";
166
+ window?: string;
167
+ after?: string;
168
+ before?: string;
169
+ days?: number[];
170
+ };
171
+ export type AgentCondition = {
172
+ type: "agent";
173
+ id?: string | string[];
174
+ trustTier?: TrustTier | TrustTier[];
175
+ minScore?: number;
176
+ maxScore?: number;
177
+ };
178
+ export type ContextCondition = {
179
+ type: "context";
180
+ conversationContains?: string | string[];
181
+ messageContains?: string | string[];
182
+ hasMetadata?: string | string[];
183
+ channel?: string | string[];
184
+ sessionKey?: string;
185
+ };
186
+ export type RiskCondition = {
187
+ type: "risk";
188
+ minRisk?: RiskLevel;
189
+ maxRisk?: RiskLevel;
190
+ };
191
+ export type FrequencyCondition = {
192
+ type: "frequency";
193
+ maxCount: number;
194
+ windowSeconds: number;
195
+ scope?: "agent" | "session" | "global";
196
+ };
197
+ export type CompositeCondition = {
198
+ type: "any";
199
+ conditions: Condition[];
200
+ };
201
+ export type NegationCondition = {
202
+ type: "not";
203
+ condition: Condition;
204
+ };
205
+ export type Condition = ToolCondition | TimeCondition | AgentCondition | ContextCondition | RiskCondition | FrequencyCondition | CompositeCondition | NegationCondition;
206
+ export type Rule = {
207
+ id: string;
208
+ description?: string;
209
+ conditions: Condition[];
210
+ effect: RuleEffect;
211
+ minTrust?: TrustTier;
212
+ maxTrust?: TrustTier;
213
+ };
214
+ export type Policy = {
215
+ id: string;
216
+ name: string;
217
+ version: string;
218
+ description?: string;
219
+ scope: PolicyScope;
220
+ rules: Rule[];
221
+ enabled?: boolean;
222
+ priority?: number;
223
+ };
224
+ export type AgentRelationship = {
225
+ parentAgentId: string;
226
+ parentSessionKey: string;
227
+ childAgentId: string;
228
+ childSessionKey: string;
229
+ createdAt: number;
230
+ };
231
+ export type AgentGraph = {
232
+ relationships: Map<string, AgentRelationship>;
233
+ };
234
+ export type CrossAgentAuditContext = {
235
+ parentAgentId?: string;
236
+ parentSessionKey?: string;
237
+ inheritedPolicyIds?: string[];
238
+ trustCeiling?: number;
239
+ };
240
+ export type EvaluationContext = {
241
+ hook: PolicyHookName;
242
+ agentId: string;
243
+ sessionKey: string;
244
+ channel?: string;
245
+ toolName?: string;
246
+ toolParams?: Record<string, unknown>;
247
+ messageContent?: string;
248
+ messageTo?: string;
249
+ timestamp: number;
250
+ time: TimeContext;
251
+ trust: {
252
+ score: number;
253
+ tier: TrustTier;
254
+ };
255
+ conversationContext?: string[];
256
+ metadata?: Record<string, unknown>;
257
+ crossAgent?: CrossAgentAuditContext;
258
+ };
259
+ export type TimeContext = {
260
+ hour: number;
261
+ minute: number;
262
+ dayOfWeek: number;
263
+ date: string;
264
+ timezone: string;
265
+ };
266
+ export type RiskFactor = {
267
+ name: string;
268
+ weight: number;
269
+ value: number;
270
+ description: string;
271
+ };
272
+ export type RiskAssessment = {
273
+ level: RiskLevel;
274
+ score: number;
275
+ factors: RiskFactor[];
276
+ };
277
+ export type MatchedPolicy = {
278
+ policyId: string;
279
+ ruleId: string;
280
+ effect: RuleEffect;
281
+ };
282
+ export type Verdict = {
283
+ action: "allow" | "deny";
284
+ reason: string;
285
+ risk: RiskAssessment;
286
+ matchedPolicies: MatchedPolicy[];
287
+ trust: {
288
+ score: number;
289
+ tier: TrustTier;
290
+ };
291
+ evaluationUs: number;
292
+ };
293
+ export type AuditVerdict = "allow" | "deny" | "error_fallback";
294
+ export type AuditContext = {
295
+ hook: string;
296
+ agentId: string;
297
+ sessionKey: string;
298
+ channel?: string;
299
+ toolName?: string;
300
+ toolParams?: Record<string, unknown>;
301
+ messageContent?: string;
302
+ messageTo?: string;
303
+ crossAgent?: CrossAgentAuditContext;
304
+ };
305
+ export type AuditRecord = {
306
+ id: string;
307
+ timestamp: number;
308
+ timestampIso: string;
309
+ verdict: AuditVerdict;
310
+ context: AuditContext;
311
+ trust: {
312
+ score: number;
313
+ tier: TrustTier;
314
+ };
315
+ risk: {
316
+ level: RiskLevel;
317
+ score: number;
318
+ };
319
+ matchedPolicies: MatchedPolicy[];
320
+ evaluationUs: number;
321
+ controls: string[];
322
+ };
323
+ export type FrequencyEntry = {
324
+ timestamp: number;
325
+ agentId: string;
326
+ sessionKey: string;
327
+ toolName?: string;
328
+ };
329
+ export type TimeWindow = {
330
+ name: string;
331
+ start: string;
332
+ end: string;
333
+ days?: number[];
334
+ timezone?: string;
335
+ };
336
+ export type TrustConfig = {
337
+ enabled: boolean;
338
+ defaults: Record<string, number>;
339
+ persistIntervalSeconds: number;
340
+ decay: {
341
+ enabled: boolean;
342
+ inactivityDays: number;
343
+ rate: number;
344
+ };
345
+ weights?: Partial<TrustWeights>;
346
+ maxHistoryPerAgent: number;
347
+ };
348
+ export type TrustWeights = {
349
+ agePerDay: number;
350
+ ageMax: number;
351
+ successPerAction: number;
352
+ successMax: number;
353
+ violationPenalty: number;
354
+ cleanStreakPerDay: number;
355
+ cleanStreakMax: number;
356
+ };
357
+ export type AuditConfig = {
358
+ enabled: boolean;
359
+ retentionDays: number;
360
+ redactPatterns: string[];
361
+ level: AuditLevel;
362
+ };
363
+ export type PerformanceConfig = {
364
+ maxEvalUs: number;
365
+ maxContextMessages: number;
366
+ frequencyBufferSize: number;
367
+ };
368
+ export type BuiltinPoliciesConfig = {
369
+ nightMode?: boolean | {
370
+ after?: string;
371
+ before?: string;
372
+ };
373
+ credentialGuard?: boolean;
374
+ productionSafeguard?: boolean;
375
+ rateLimiter?: boolean | {
376
+ maxPerMinute?: number;
377
+ };
378
+ };
379
+ export type FailMode = "open" | "closed";
380
+ export type GovernanceConfig = {
381
+ enabled: boolean;
382
+ timezone: string;
383
+ failMode: FailMode;
384
+ policies: Policy[];
385
+ timeWindows: Record<string, TimeWindow>;
386
+ trust: TrustConfig;
387
+ audit: AuditConfig;
388
+ toolRiskOverrides: Record<string, number>;
389
+ builtinPolicies: BuiltinPoliciesConfig;
390
+ performance: PerformanceConfig;
391
+ };
392
+ export type PolicyIndex = {
393
+ byHook: Map<PolicyHookName, Policy[]>;
394
+ byAgent: Map<string, Policy[]>;
395
+ regexCache: Map<string, RegExp>;
396
+ };
397
+ export type ConditionDeps = {
398
+ regexCache: Map<string, RegExp>;
399
+ timeWindows: Record<string, TimeWindow>;
400
+ risk: RiskAssessment;
401
+ frequencyTracker: FrequencyTracker;
402
+ };
403
+ export type ConditionEvaluatorFn = (condition: Condition, ctx: EvaluationContext, deps: ConditionDeps) => boolean;
404
+ export type ConditionEvaluatorMap = Record<Condition["type"], ConditionEvaluatorFn>;
405
+ export interface FrequencyTracker {
406
+ record(entry: FrequencyEntry): void;
407
+ count(windowSeconds: number, scope: "agent" | "session" | "global", agentId: string, sessionKey: string): number;
408
+ clear(): void;
409
+ }
410
+ export type GovernanceStatus = {
411
+ enabled: boolean;
412
+ policyCount: number;
413
+ trustEnabled: boolean;
414
+ auditEnabled: boolean;
415
+ failMode: FailMode;
416
+ stats: EvaluationStats;
417
+ };
418
+ export type EvaluationStats = {
419
+ totalEvaluations: number;
420
+ allowCount: number;
421
+ denyCount: number;
422
+ errorCount: number;
423
+ avgEvaluationUs: number;
424
+ };
425
+ export type AuditFilter = {
426
+ agentId?: string;
427
+ verdict?: AuditVerdict;
428
+ after?: number;
429
+ before?: number;
430
+ limit?: number;
431
+ };
432
+ export type AuditStats = {
433
+ totalRecords: number;
434
+ todayRecords: number;
435
+ oldestRecord?: string;
436
+ newestRecord?: string;
437
+ };
438
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}