@weave_protocol/domere 1.0.13 → 1.0.14

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.
@@ -0,0 +1,2 @@
1
+ export * from "./replay.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./replay.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Dōmere - Execution Replay & Audit Trail
3
+ *
4
+ * Cryptographically verifiable audit trail for AI agent actions.
5
+ * Enables complete replay and forensic analysis of agent behavior.
6
+ */
7
+ export interface ActionRecord {
8
+ id: string;
9
+ thread_id: string;
10
+ sequence: number;
11
+ timestamp: Date;
12
+ agent_id: string;
13
+ agent_type: 'llm' | 'tool' | 'human' | 'system';
14
+ action_type: 'inference' | 'tool_call' | 'api_request' | 'file_access' | 'data_read' | 'data_write' | 'delegation' | 'decision';
15
+ action_name: string;
16
+ input_hash: string;
17
+ output_hash: string;
18
+ input_size_bytes?: number;
19
+ output_size_bytes?: number;
20
+ input_encrypted?: string;
21
+ output_encrypted?: string;
22
+ latency_ms: number;
23
+ cost_usd?: number;
24
+ tokens_in?: number;
25
+ tokens_out?: number;
26
+ model?: string;
27
+ provider?: string;
28
+ previous_hash: string;
29
+ action_hash: string;
30
+ signature?: string;
31
+ }
32
+ export interface ExecutionTrail {
33
+ thread_id: string;
34
+ created_at: Date;
35
+ updated_at: Date;
36
+ action_count: number;
37
+ total_cost_usd: number;
38
+ total_latency_ms: number;
39
+ agents_involved: string[];
40
+ merkle_root: string;
41
+ actions: ActionRecord[];
42
+ integrity_valid: boolean;
43
+ }
44
+ export interface ReplayOptions {
45
+ from_sequence?: number;
46
+ to_sequence?: number;
47
+ agent_filter?: string[];
48
+ action_type_filter?: ActionRecord['action_type'][];
49
+ include_encrypted?: boolean;
50
+ }
51
+ export interface AuditQuery {
52
+ thread_id?: string;
53
+ agent_id?: string;
54
+ action_type?: ActionRecord['action_type'];
55
+ start_time?: Date;
56
+ end_time?: Date;
57
+ min_cost_usd?: number;
58
+ min_latency_ms?: number;
59
+ limit?: number;
60
+ }
61
+ export interface AuditReport {
62
+ query: AuditQuery;
63
+ generated_at: Date;
64
+ total_actions: number;
65
+ total_cost_usd: number;
66
+ total_latency_ms: number;
67
+ actions_by_type: Record<string, number>;
68
+ actions_by_agent: Record<string, number>;
69
+ cost_by_agent: Record<string, number>;
70
+ anomalies: AuditAnomaly[];
71
+ }
72
+ export interface AuditAnomaly {
73
+ type: 'high_latency' | 'high_cost' | 'repeated_failure' | 'unusual_pattern' | 'integrity_violation';
74
+ severity: 'low' | 'medium' | 'high' | 'critical';
75
+ description: string;
76
+ action_ids: string[];
77
+ detected_at: Date;
78
+ }
79
+ export declare class ExecutionReplayManager {
80
+ private trails;
81
+ private encryptionKey?;
82
+ constructor(encryptionKey?: string);
83
+ /**
84
+ * Record an action in the audit trail
85
+ */
86
+ recordAction(params: {
87
+ thread_id: string;
88
+ agent_id: string;
89
+ agent_type: ActionRecord['agent_type'];
90
+ action_type: ActionRecord['action_type'];
91
+ action_name: string;
92
+ input: any;
93
+ output: any;
94
+ latency_ms: number;
95
+ cost_usd?: number;
96
+ tokens_in?: number;
97
+ tokens_out?: number;
98
+ model?: string;
99
+ provider?: string;
100
+ store_raw?: boolean;
101
+ }): Promise<ActionRecord>;
102
+ /**
103
+ * Get complete execution trail for a thread
104
+ */
105
+ getExecutionTrail(threadId: string, options?: ReplayOptions): Promise<ExecutionTrail | null>;
106
+ /**
107
+ * Replay actions for debugging/analysis
108
+ */
109
+ replayActions(threadId: string, options?: ReplayOptions): Promise<{
110
+ actions: ActionRecord[];
111
+ timeline: {
112
+ timestamp: Date;
113
+ description: string;
114
+ }[];
115
+ summary: {
116
+ total_actions: number;
117
+ duration_ms: number;
118
+ cost_usd: number;
119
+ agents: string[];
120
+ };
121
+ }>;
122
+ /**
123
+ * Query actions across threads
124
+ */
125
+ queryActions(query: AuditQuery): Promise<ActionRecord[]>;
126
+ /**
127
+ * Generate audit report
128
+ */
129
+ generateAuditReport(query: AuditQuery): Promise<AuditReport>;
130
+ /**
131
+ * Verify trail integrity
132
+ */
133
+ verifyTrailIntegrity(actions: ActionRecord[]): boolean;
134
+ /**
135
+ * Export trail for external storage/verification
136
+ */
137
+ exportTrail(threadId: string): Promise<string>;
138
+ /**
139
+ * Import trail from external source
140
+ */
141
+ importTrail(data: string): Promise<{
142
+ thread_id: string;
143
+ actions_imported: number;
144
+ valid: boolean;
145
+ }>;
146
+ private computeActionHash;
147
+ private computeMerkleRoot;
148
+ private encrypt;
149
+ private decrypt;
150
+ private detectAnomalies;
151
+ }
152
+ export default ExecutionReplayManager;
153
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/audit/replay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAGhB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAGhD,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;IAChI,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,EAAE,IAAI,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,GAAG,WAAW,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;IACpG,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,IAAI,CAAC;CACnB;AAMD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,aAAa,CAAC,EAAE,MAAM;IAMlC;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;QACvC,WAAW,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QACzC,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,GAAG,CAAC;QACX,MAAM,EAAE,GAAG,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC,YAAY,CAAC;IAwDzB;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAkDlG;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;QACtE,OAAO,EAAE,YAAY,EAAE,CAAC;QACxB,QAAQ,EAAE;YAAE,SAAS,EAAE,IAAI,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACrD,OAAO,EAAE;YACP,aAAa,EAAE,MAAM,CAAC;YACtB,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,EAAE,MAAM,EAAE,CAAC;SAClB,CAAC;KACH,CAAC;IA2BF;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA6B9D;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAiClE;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO;IAoBtD;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOpD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAoBzG,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,eAAe;CA6BxB;AAED,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,328 @@
1
+ /**
2
+ * Dōmere - Execution Replay & Audit Trail
3
+ *
4
+ * Cryptographically verifiable audit trail for AI agent actions.
5
+ * Enables complete replay and forensic analysis of agent behavior.
6
+ */
7
+ import * as crypto from 'crypto';
8
+ // =============================================================================
9
+ // Execution Replay Manager
10
+ // =============================================================================
11
+ export class ExecutionReplayManager {
12
+ trails = new Map();
13
+ encryptionKey;
14
+ constructor(encryptionKey) {
15
+ if (encryptionKey) {
16
+ this.encryptionKey = crypto.scryptSync(encryptionKey, 'domere-audit', 32);
17
+ }
18
+ }
19
+ /**
20
+ * Record an action in the audit trail
21
+ */
22
+ async recordAction(params) {
23
+ const trail = this.trails.get(params.thread_id) || [];
24
+ const sequence = trail.length;
25
+ const previousHash = sequence > 0 ? trail[sequence - 1].action_hash : '0'.repeat(64);
26
+ // Hash inputs/outputs
27
+ const inputStr = JSON.stringify(params.input);
28
+ const outputStr = JSON.stringify(params.output);
29
+ const inputHash = crypto.createHash('sha256').update(inputStr).digest('hex');
30
+ const outputHash = crypto.createHash('sha256').update(outputStr).digest('hex');
31
+ // Create action record
32
+ const record = {
33
+ id: `act_${crypto.randomUUID()}`,
34
+ thread_id: params.thread_id,
35
+ sequence,
36
+ timestamp: new Date(),
37
+ agent_id: params.agent_id,
38
+ agent_type: params.agent_type,
39
+ action_type: params.action_type,
40
+ action_name: params.action_name,
41
+ input_hash: inputHash,
42
+ output_hash: outputHash,
43
+ input_size_bytes: Buffer.byteLength(inputStr),
44
+ output_size_bytes: Buffer.byteLength(outputStr),
45
+ latency_ms: params.latency_ms,
46
+ cost_usd: params.cost_usd,
47
+ tokens_in: params.tokens_in,
48
+ tokens_out: params.tokens_out,
49
+ model: params.model,
50
+ provider: params.provider,
51
+ previous_hash: previousHash,
52
+ action_hash: '', // Computed below
53
+ };
54
+ // Optionally encrypt and store raw data
55
+ if (params.store_raw && this.encryptionKey) {
56
+ record.input_encrypted = this.encrypt(inputStr);
57
+ record.output_encrypted = this.encrypt(outputStr);
58
+ }
59
+ // Compute action hash (chain integrity)
60
+ record.action_hash = this.computeActionHash(record);
61
+ // Store
62
+ trail.push(record);
63
+ this.trails.set(params.thread_id, trail);
64
+ return record;
65
+ }
66
+ /**
67
+ * Get complete execution trail for a thread
68
+ */
69
+ async getExecutionTrail(threadId, options) {
70
+ const actions = this.trails.get(threadId);
71
+ if (!actions || actions.length === 0)
72
+ return null;
73
+ let filtered = [...actions];
74
+ // Apply filters
75
+ if (options?.from_sequence !== undefined) {
76
+ filtered = filtered.filter(a => a.sequence >= options.from_sequence);
77
+ }
78
+ if (options?.to_sequence !== undefined) {
79
+ filtered = filtered.filter(a => a.sequence <= options.to_sequence);
80
+ }
81
+ if (options?.agent_filter?.length) {
82
+ filtered = filtered.filter(a => options.agent_filter.includes(a.agent_id));
83
+ }
84
+ if (options?.action_type_filter?.length) {
85
+ filtered = filtered.filter(a => options.action_type_filter.includes(a.action_type));
86
+ }
87
+ // Remove encrypted data if not requested
88
+ if (!options?.include_encrypted) {
89
+ filtered = filtered.map(a => {
90
+ const { input_encrypted, output_encrypted, ...rest } = a;
91
+ return rest;
92
+ });
93
+ }
94
+ // Compute stats
95
+ const totalCost = filtered.reduce((sum, a) => sum + (a.cost_usd || 0), 0);
96
+ const totalLatency = filtered.reduce((sum, a) => sum + a.latency_ms, 0);
97
+ const agents = [...new Set(filtered.map(a => a.agent_id))];
98
+ // Verify integrity
99
+ const integrityValid = this.verifyTrailIntegrity(actions);
100
+ return {
101
+ thread_id: threadId,
102
+ created_at: actions[0].timestamp,
103
+ updated_at: actions[actions.length - 1].timestamp,
104
+ action_count: filtered.length,
105
+ total_cost_usd: totalCost,
106
+ total_latency_ms: totalLatency,
107
+ agents_involved: agents,
108
+ merkle_root: this.computeMerkleRoot(actions),
109
+ actions: filtered,
110
+ integrity_valid: integrityValid,
111
+ };
112
+ }
113
+ /**
114
+ * Replay actions for debugging/analysis
115
+ */
116
+ async replayActions(threadId, options) {
117
+ const trail = await this.getExecutionTrail(threadId, options);
118
+ if (!trail) {
119
+ throw new Error(`No trail found for thread ${threadId}`);
120
+ }
121
+ const timeline = trail.actions.map(action => ({
122
+ timestamp: action.timestamp,
123
+ description: `[${action.agent_id}] ${action.action_type}: ${action.action_name} (${action.latency_ms}ms)`,
124
+ }));
125
+ const duration = trail.actions.length > 1
126
+ ? trail.actions[trail.actions.length - 1].timestamp.getTime() - trail.actions[0].timestamp.getTime()
127
+ : 0;
128
+ return {
129
+ actions: trail.actions,
130
+ timeline,
131
+ summary: {
132
+ total_actions: trail.action_count,
133
+ duration_ms: duration,
134
+ cost_usd: trail.total_cost_usd,
135
+ agents: trail.agents_involved,
136
+ },
137
+ };
138
+ }
139
+ /**
140
+ * Query actions across threads
141
+ */
142
+ async queryActions(query) {
143
+ let results = [];
144
+ for (const [threadId, actions] of this.trails) {
145
+ if (query.thread_id && threadId !== query.thread_id)
146
+ continue;
147
+ for (const action of actions) {
148
+ if (query.agent_id && action.agent_id !== query.agent_id)
149
+ continue;
150
+ if (query.action_type && action.action_type !== query.action_type)
151
+ continue;
152
+ if (query.start_time && action.timestamp < query.start_time)
153
+ continue;
154
+ if (query.end_time && action.timestamp > query.end_time)
155
+ continue;
156
+ if (query.min_cost_usd && (action.cost_usd || 0) < query.min_cost_usd)
157
+ continue;
158
+ if (query.min_latency_ms && action.latency_ms < query.min_latency_ms)
159
+ continue;
160
+ results.push(action);
161
+ }
162
+ }
163
+ // Sort by timestamp
164
+ results.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
165
+ // Apply limit
166
+ if (query.limit) {
167
+ results = results.slice(0, query.limit);
168
+ }
169
+ return results;
170
+ }
171
+ /**
172
+ * Generate audit report
173
+ */
174
+ async generateAuditReport(query) {
175
+ const actions = await this.queryActions(query);
176
+ const actionsByType = {};
177
+ const actionsByAgent = {};
178
+ const costByAgent = {};
179
+ let totalCost = 0;
180
+ let totalLatency = 0;
181
+ for (const action of actions) {
182
+ actionsByType[action.action_type] = (actionsByType[action.action_type] || 0) + 1;
183
+ actionsByAgent[action.agent_id] = (actionsByAgent[action.agent_id] || 0) + 1;
184
+ costByAgent[action.agent_id] = (costByAgent[action.agent_id] || 0) + (action.cost_usd || 0);
185
+ totalCost += action.cost_usd || 0;
186
+ totalLatency += action.latency_ms;
187
+ }
188
+ // Detect anomalies
189
+ const anomalies = this.detectAnomalies(actions);
190
+ return {
191
+ query,
192
+ generated_at: new Date(),
193
+ total_actions: actions.length,
194
+ total_cost_usd: totalCost,
195
+ total_latency_ms: totalLatency,
196
+ actions_by_type: actionsByType,
197
+ actions_by_agent: actionsByAgent,
198
+ cost_by_agent: costByAgent,
199
+ anomalies,
200
+ };
201
+ }
202
+ /**
203
+ * Verify trail integrity
204
+ */
205
+ verifyTrailIntegrity(actions) {
206
+ if (actions.length === 0)
207
+ return true;
208
+ for (let i = 0; i < actions.length; i++) {
209
+ const action = actions[i];
210
+ const expectedPrevHash = i === 0 ? '0'.repeat(64) : actions[i - 1].action_hash;
211
+ if (action.previous_hash !== expectedPrevHash) {
212
+ return false;
213
+ }
214
+ const computedHash = this.computeActionHash(action);
215
+ if (action.action_hash !== computedHash) {
216
+ return false;
217
+ }
218
+ }
219
+ return true;
220
+ }
221
+ /**
222
+ * Export trail for external storage/verification
223
+ */
224
+ async exportTrail(threadId) {
225
+ const trail = await this.getExecutionTrail(threadId, { include_encrypted: true });
226
+ if (!trail)
227
+ throw new Error(`No trail found for thread ${threadId}`);
228
+ return JSON.stringify(trail, null, 2);
229
+ }
230
+ /**
231
+ * Import trail from external source
232
+ */
233
+ async importTrail(data) {
234
+ const trail = JSON.parse(data);
235
+ // Verify integrity
236
+ const valid = this.verifyTrailIntegrity(trail.actions);
237
+ // Store
238
+ this.trails.set(trail.thread_id, trail.actions);
239
+ return {
240
+ thread_id: trail.thread_id,
241
+ actions_imported: trail.actions.length,
242
+ valid,
243
+ };
244
+ }
245
+ // ===========================================================================
246
+ // Private Methods
247
+ // ===========================================================================
248
+ computeActionHash(action) {
249
+ const data = [
250
+ action.thread_id,
251
+ action.sequence.toString(),
252
+ action.agent_id,
253
+ action.action_type,
254
+ action.action_name,
255
+ action.input_hash,
256
+ action.output_hash,
257
+ action.timestamp.toISOString(),
258
+ action.previous_hash,
259
+ ].join('|');
260
+ return crypto.createHash('sha256').update(data).digest('hex');
261
+ }
262
+ computeMerkleRoot(actions) {
263
+ if (actions.length === 0)
264
+ return '0'.repeat(64);
265
+ let hashes = actions.map(a => a.action_hash);
266
+ while (hashes.length > 1) {
267
+ const newHashes = [];
268
+ for (let i = 0; i < hashes.length; i += 2) {
269
+ const left = hashes[i];
270
+ const right = hashes[i + 1] || left;
271
+ const combined = crypto.createHash('sha256').update(left + right).digest('hex');
272
+ newHashes.push(combined);
273
+ }
274
+ hashes = newHashes;
275
+ }
276
+ return hashes[0];
277
+ }
278
+ encrypt(data) {
279
+ if (!this.encryptionKey)
280
+ throw new Error('Encryption key not set');
281
+ const iv = crypto.randomBytes(16);
282
+ const cipher = crypto.createCipheriv('aes-256-gcm', this.encryptionKey, iv);
283
+ let encrypted = cipher.update(data, 'utf8', 'hex');
284
+ encrypted += cipher.final('hex');
285
+ const authTag = cipher.getAuthTag();
286
+ return iv.toString('hex') + ':' + authTag.toString('hex') + ':' + encrypted;
287
+ }
288
+ decrypt(encrypted) {
289
+ if (!this.encryptionKey)
290
+ throw new Error('Encryption key not set');
291
+ const [ivHex, authTagHex, data] = encrypted.split(':');
292
+ const iv = Buffer.from(ivHex, 'hex');
293
+ const authTag = Buffer.from(authTagHex, 'hex');
294
+ const decipher = crypto.createDecipheriv('aes-256-gcm', this.encryptionKey, iv);
295
+ decipher.setAuthTag(authTag);
296
+ let decrypted = decipher.update(data, 'hex', 'utf8');
297
+ decrypted += decipher.final('utf8');
298
+ return decrypted;
299
+ }
300
+ detectAnomalies(actions) {
301
+ const anomalies = [];
302
+ // High latency detection (>10s)
303
+ const highLatency = actions.filter(a => a.latency_ms > 10000);
304
+ if (highLatency.length > 0) {
305
+ anomalies.push({
306
+ type: 'high_latency',
307
+ severity: 'medium',
308
+ description: `${highLatency.length} actions exceeded 10s latency`,
309
+ action_ids: highLatency.map(a => a.id),
310
+ detected_at: new Date(),
311
+ });
312
+ }
313
+ // High cost detection (>$1 per action)
314
+ const highCost = actions.filter(a => (a.cost_usd || 0) > 1);
315
+ if (highCost.length > 0) {
316
+ anomalies.push({
317
+ type: 'high_cost',
318
+ severity: 'high',
319
+ description: `${highCost.length} actions exceeded $1 cost`,
320
+ action_ids: highCost.map(a => a.id),
321
+ detected_at: new Date(),
322
+ });
323
+ }
324
+ return anomalies;
325
+ }
326
+ }
327
+ export default ExecutionReplayManager;
328
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/audit/replay.ts"],"names":[],"mappings":"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"}