openclaw-observability 1.0.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 (66) hide show
  1. package/dist/config.d.ts +60 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +140 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/index.d.ts +37 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +1114 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/redaction.d.ts +20 -0
  10. package/dist/redaction.d.ts.map +1 -0
  11. package/dist/redaction.js +93 -0
  12. package/dist/redaction.js.map +1 -0
  13. package/dist/security/chain-detector.d.ts +37 -0
  14. package/dist/security/chain-detector.d.ts.map +1 -0
  15. package/dist/security/chain-detector.js +187 -0
  16. package/dist/security/chain-detector.js.map +1 -0
  17. package/dist/security/rules.d.ts +22 -0
  18. package/dist/security/rules.d.ts.map +1 -0
  19. package/dist/security/rules.js +479 -0
  20. package/dist/security/rules.js.map +1 -0
  21. package/dist/security/scanner.d.ts +47 -0
  22. package/dist/security/scanner.d.ts.map +1 -0
  23. package/dist/security/scanner.js +150 -0
  24. package/dist/security/scanner.js.map +1 -0
  25. package/dist/security/types.d.ts +47 -0
  26. package/dist/security/types.d.ts.map +1 -0
  27. package/dist/security/types.js +23 -0
  28. package/dist/security/types.js.map +1 -0
  29. package/dist/storage/buffer.d.ts +64 -0
  30. package/dist/storage/buffer.d.ts.map +1 -0
  31. package/dist/storage/buffer.js +120 -0
  32. package/dist/storage/buffer.js.map +1 -0
  33. package/dist/storage/duckdb-local-writer.d.ts +26 -0
  34. package/dist/storage/duckdb-local-writer.d.ts.map +1 -0
  35. package/dist/storage/duckdb-local-writer.js +454 -0
  36. package/dist/storage/duckdb-local-writer.js.map +1 -0
  37. package/dist/storage/mysql-writer.d.ts +55 -0
  38. package/dist/storage/mysql-writer.d.ts.map +1 -0
  39. package/dist/storage/mysql-writer.js +287 -0
  40. package/dist/storage/mysql-writer.js.map +1 -0
  41. package/dist/storage/schema.d.ts +13 -0
  42. package/dist/storage/schema.d.ts.map +1 -0
  43. package/dist/storage/schema.js +94 -0
  44. package/dist/storage/schema.js.map +1 -0
  45. package/dist/storage/writer.d.ts +31 -0
  46. package/dist/storage/writer.d.ts.map +1 -0
  47. package/dist/storage/writer.js +7 -0
  48. package/dist/storage/writer.js.map +1 -0
  49. package/dist/types.d.ts +72 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +44 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/web/api.d.ts +115 -0
  54. package/dist/web/api.d.ts.map +1 -0
  55. package/dist/web/api.js +219 -0
  56. package/dist/web/api.js.map +1 -0
  57. package/dist/web/routes.d.ts +20 -0
  58. package/dist/web/routes.d.ts.map +1 -0
  59. package/dist/web/routes.js +175 -0
  60. package/dist/web/routes.js.map +1 -0
  61. package/dist/web/ui.d.ts +9 -0
  62. package/dist/web/ui.d.ts.map +1 -0
  63. package/dist/web/ui.js +1327 -0
  64. package/dist/web/ui.js.map +1 -0
  65. package/openclaw.plugin.json +231 -0
  66. package/package.json +41 -0
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ /**
3
+ * MySQL write layer
4
+ * Writes audit records to MySQL-compatible database
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MySQLWriter = void 0;
11
+ const promise_1 = __importDefault(require("mysql2/promise"));
12
+ const schema_1 = require("./schema");
13
+ /**
14
+ * MySQL writer
15
+ * Manages connection pool and data writing
16
+ */
17
+ class MySQLWriter {
18
+ pool = null;
19
+ config;
20
+ initialized = false;
21
+ initializing = false;
22
+ constructor(config) {
23
+ this.config = config;
24
+ }
25
+ /**
26
+ * Initialize connection pool and schema (with retries)
27
+ */
28
+ async initialize(maxRetries = 3, retryDelayMs = 15000) {
29
+ if (this.initialized)
30
+ return;
31
+ if (this.initializing)
32
+ return; // prevent concurrent initialization
33
+ this.initializing = true;
34
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
35
+ try {
36
+ await this._doInitialize();
37
+ this.initializing = false;
38
+ return;
39
+ }
40
+ catch (error) {
41
+ console.error(`[audit-duckdb] Initialize attempt ${attempt}/${maxRetries} failed:`, error.message || error);
42
+ if (attempt < maxRetries) {
43
+ console.log(`[audit-duckdb] Retrying in ${retryDelayMs / 1000}s...`);
44
+ await new Promise((r) => setTimeout(r, retryDelayMs));
45
+ }
46
+ }
47
+ }
48
+ this.initializing = false;
49
+ throw new Error('All MySQL initialization attempts failed');
50
+ }
51
+ /**
52
+ * Lazy initialization — auto-connect on query
53
+ */
54
+ async ensureReady() {
55
+ if (this.initialized && this.pool)
56
+ return true;
57
+ try {
58
+ await this.initialize(1, 0);
59
+ return this.initialized;
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ async _doInitialize() {
66
+ // Connect without specifying database first, ensure it exists, then switch
67
+ const initPool = promise_1.default.createPool({
68
+ host: this.config.host,
69
+ port: this.config.port,
70
+ user: this.config.user,
71
+ password: this.config.password,
72
+ charset: 'utf8mb4',
73
+ waitForConnections: true,
74
+ connectionLimit: 2,
75
+ connectTimeout: 30000,
76
+ });
77
+ // Ensure database exists (DDL uses query, not execute)
78
+ await initPool.query(`CREATE DATABASE IF NOT EXISTS \`${this.config.database}\``);
79
+ await initPool.end();
80
+ // Create main connection pool with database specified
81
+ this.pool = promise_1.default.createPool({
82
+ host: this.config.host,
83
+ port: this.config.port,
84
+ user: this.config.user,
85
+ password: this.config.password,
86
+ database: this.config.database,
87
+ charset: 'utf8mb4',
88
+ waitForConnections: true,
89
+ connectionLimit: 5,
90
+ queueLimit: 0,
91
+ connectTimeout: 30000,
92
+ enableKeepAlive: true,
93
+ keepAliveInitialDelay: 10000,
94
+ });
95
+ // Test connection
96
+ const conn = await this.pool.getConnection();
97
+ conn.release();
98
+ // Ensure table schema exists
99
+ await (0, schema_1.ensureSchema)(this.pool);
100
+ this.initialized = true;
101
+ console.log('[audit-duckdb] MySQL writer initialized successfully');
102
+ }
103
+ /**
104
+ * Batch write buffer entries
105
+ */
106
+ async writeBatch(entries) {
107
+ if (!this.pool || !this.initialized) {
108
+ throw new Error('MySQL writer not initialized');
109
+ }
110
+ const actions = entries
111
+ .filter((e) => e.type === 'action')
112
+ .map((e) => e.data);
113
+ const sessions = entries
114
+ .filter((e) => e.type === 'session')
115
+ .map((e) => e.data);
116
+ // Write actions first, then sessions — ensures session stats aggregate this batch's actions
117
+ if (actions.length > 0)
118
+ await this.writeActions(actions);
119
+ if (sessions.length > 0)
120
+ await this.writeSessions(sessions);
121
+ }
122
+ /**
123
+ * Batch insert audit action records
124
+ */
125
+ async writeActions(actions) {
126
+ if (!this.pool)
127
+ return;
128
+ const sql = `
129
+ INSERT INTO audit_actions
130
+ (session_id, action_type, action_name, model_name, input_params, output_result,
131
+ prompt_tokens, completion_tokens, duration_ms, user_id, created_at)
132
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
133
+ `;
134
+ const conn = await this.pool.getConnection();
135
+ try {
136
+ for (const action of actions) {
137
+ await conn.execute(sql, [
138
+ action.sessionId,
139
+ action.actionType,
140
+ action.actionName,
141
+ action.modelName,
142
+ action.inputParams ? JSON.stringify(action.inputParams) : null,
143
+ action.outputResult ? JSON.stringify(action.outputResult) : null,
144
+ action.promptTokens,
145
+ action.completionTokens,
146
+ action.durationMs,
147
+ action.userId,
148
+ action.createdAt,
149
+ ]);
150
+ }
151
+ }
152
+ finally {
153
+ conn.release();
154
+ }
155
+ }
156
+ /**
157
+ * Write or update session summary records
158
+ * Stats are aggregated in real-time from audit_actions, not from memory counters
159
+ * This ensures historical data is preserved even after Gateway restarts
160
+ */
161
+ async writeSessions(sessions) {
162
+ if (!this.pool)
163
+ return;
164
+ // Deduplicate: keep only the latest entry per sessionId in same batch
165
+ const deduped = new Map();
166
+ for (const s of sessions) {
167
+ deduped.set(s.sessionId, s);
168
+ }
169
+ const conn = await this.pool.getConnection();
170
+ try {
171
+ for (const session of deduped.values()) {
172
+ // Aggregate stats from audit_actions in real-time
173
+ const [statsRows] = await conn.query(`SELECT
174
+ MIN(created_at) AS start_time,
175
+ MAX(created_at) AS end_time,
176
+ COUNT(*) AS total_actions,
177
+ COALESCE(SUM(COALESCE(prompt_tokens, 0) + COALESCE(completion_tokens, 0)), 0) AS total_tokens
178
+ FROM audit_actions
179
+ WHERE session_id = ?`, [session.sessionId]);
180
+ const stats = statsRows[0];
181
+ // If no action records for this session, use passed-in values
182
+ const startTime = stats?.start_time || session.startTime;
183
+ const endTime = stats?.end_time || session.endTime;
184
+ const totalActions = Number(stats?.total_actions) || 0;
185
+ const totalTokens = Number(stats?.total_tokens) || 0;
186
+ // Check if session already exists
187
+ const [existingRows] = await conn.query('SELECT session_id, start_time FROM audit_sessions WHERE session_id = ?', [session.sessionId]);
188
+ const existing = existingRows[0];
189
+ if (existing) {
190
+ // UPDATE — keep the earlier start_time, use latest aggregated values for the rest
191
+ const earlierStart = existing.start_time && startTime && new Date(existing.start_time) < new Date(startTime)
192
+ ? existing.start_time
193
+ : startTime;
194
+ await conn.execute(`UPDATE audit_sessions
195
+ SET user_id = ?,
196
+ model_name = CASE WHEN ? != '' THEN ? ELSE model_name END,
197
+ start_time = ?,
198
+ end_time = ?,
199
+ total_actions = ?,
200
+ total_tokens = ?
201
+ WHERE session_id = ?`, [
202
+ session.userId || existing.user_id || '',
203
+ session.modelName, session.modelName,
204
+ earlierStart,
205
+ endTime,
206
+ totalActions,
207
+ totalTokens,
208
+ session.sessionId,
209
+ ]);
210
+ }
211
+ else {
212
+ // INSERT — new session
213
+ await conn.execute(`INSERT INTO audit_sessions
214
+ (session_id, user_id, model_name, start_time, end_time, total_actions, total_tokens)
215
+ VALUES (?, ?, ?, ?, ?, ?, ?)`, [
216
+ session.sessionId,
217
+ session.userId,
218
+ session.modelName,
219
+ startTime,
220
+ endTime,
221
+ totalActions,
222
+ totalTokens,
223
+ ]);
224
+ }
225
+ }
226
+ }
227
+ finally {
228
+ conn.release();
229
+ }
230
+ }
231
+ /**
232
+ * Write security alert records
233
+ */
234
+ async writeAlerts(alerts) {
235
+ if (!this.pool || alerts.length === 0)
236
+ return;
237
+ const sql = `
238
+ INSERT INTO audit_alerts
239
+ (alert_id, session_id, action_type, action_name, rule_id, rule_name,
240
+ category, severity, finding, context, status, user_id, model_name, created_at)
241
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
242
+ `;
243
+ const conn = await this.pool.getConnection();
244
+ try {
245
+ for (const alert of alerts) {
246
+ await conn.execute(sql, [
247
+ alert.alertId,
248
+ alert.sessionId,
249
+ alert.actionType,
250
+ alert.actionName,
251
+ alert.ruleId,
252
+ alert.ruleName,
253
+ alert.category,
254
+ alert.severity,
255
+ alert.finding,
256
+ alert.context,
257
+ alert.status,
258
+ alert.userId,
259
+ alert.modelName,
260
+ alert.createdAt,
261
+ ]);
262
+ }
263
+ }
264
+ finally {
265
+ conn.release();
266
+ }
267
+ }
268
+ /**
269
+ * Get connection pool (for Web API queries)
270
+ */
271
+ getPool() {
272
+ return this.pool;
273
+ }
274
+ /**
275
+ * Close connection pool
276
+ */
277
+ async close() {
278
+ if (this.pool) {
279
+ await this.pool.end();
280
+ this.pool = null;
281
+ this.initialized = false;
282
+ console.log('[audit-duckdb] MySQL writer closed');
283
+ }
284
+ }
285
+ }
286
+ exports.MySQLWriter = MySQLWriter;
287
+ //# sourceMappingURL=mysql-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-writer.js","sourceRoot":"","sources":["../../src/storage/mysql-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MySQL database schema definition and migrations
3
+ * Creates audit tables in MySQL-compatible databases
4
+ *
5
+ * WARNING: DuckDB schema is defined in duckdb-local-writer.ts (DUCKDB_SCHEMA_STATEMENTS).
6
+ * When modifying table structure, update both places.
7
+ */
8
+ import { Pool } from 'mysql2/promise';
9
+ /**
10
+ * Create audit tables in MySQL (if not exists)
11
+ */
12
+ export declare function ensureSchema(pool: Pool): Promise<void>;
13
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/storage/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAiF5D"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * MySQL database schema definition and migrations
4
+ * Creates audit tables in MySQL-compatible databases
5
+ *
6
+ * WARNING: DuckDB schema is defined in duckdb-local-writer.ts (DUCKDB_SCHEMA_STATEMENTS).
7
+ * When modifying table structure, update both places.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ensureSchema = ensureSchema;
11
+ /**
12
+ * Create audit tables in MySQL (if not exists)
13
+ */
14
+ async function ensureSchema(pool) {
15
+ // Create audit_actions core table (DDL does not support prepared statements)
16
+ await pool.query(`
17
+ CREATE TABLE IF NOT EXISTS audit_actions (
18
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
19
+ session_id VARCHAR(64) NOT NULL,
20
+ action_type VARCHAR(32) NOT NULL,
21
+ action_name VARCHAR(255) NOT NULL,
22
+ model_name VARCHAR(128) DEFAULT '',
23
+ input_params TEXT,
24
+ output_result TEXT,
25
+ prompt_tokens INT DEFAULT NULL,
26
+ completion_tokens INT DEFAULT NULL,
27
+ duration_ms INT DEFAULT NULL,
28
+ user_id VARCHAR(128) DEFAULT '',
29
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
30
+ INDEX idx_session_id (session_id),
31
+ INDEX idx_action_type (action_type),
32
+ INDEX idx_created_at (created_at),
33
+ INDEX idx_user_id (user_id)
34
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
35
+ `);
36
+ // If table already exists, widen action_type column (20 -> 32)
37
+ try {
38
+ await pool.query(`ALTER TABLE audit_actions MODIFY COLUMN action_type VARCHAR(32) NOT NULL`);
39
+ }
40
+ catch {
41
+ // Ignore error (column may already be VARCHAR(32))
42
+ }
43
+ // Create audit_sessions summary table
44
+ await pool.query(`
45
+ CREATE TABLE IF NOT EXISTS audit_sessions (
46
+ session_id VARCHAR(64) PRIMARY KEY,
47
+ user_id VARCHAR(128) DEFAULT '',
48
+ model_name VARCHAR(128) DEFAULT '',
49
+ start_time TIMESTAMP NOT NULL,
50
+ end_time TIMESTAMP NULL DEFAULT NULL,
51
+ total_actions INT DEFAULT 0,
52
+ total_tokens INT DEFAULT 0,
53
+ INDEX idx_user_id (user_id),
54
+ INDEX idx_start_time (start_time)
55
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
56
+ `);
57
+ // Migration: drop deprecated session_key column
58
+ try {
59
+ await pool.query(`ALTER TABLE audit_sessions DROP COLUMN session_key`);
60
+ console.log('[audit-duckdb] Dropped session_key column from audit_sessions');
61
+ }
62
+ catch {
63
+ // Column does not exist, ignore
64
+ }
65
+ // Create audit_alerts security alerts table
66
+ await pool.query(`
67
+ CREATE TABLE IF NOT EXISTS audit_alerts (
68
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
69
+ alert_id VARCHAR(64) NOT NULL,
70
+ session_id VARCHAR(64) NOT NULL,
71
+ action_type VARCHAR(32) NOT NULL,
72
+ action_name VARCHAR(256) DEFAULT '',
73
+ rule_id VARCHAR(32) NOT NULL,
74
+ rule_name VARCHAR(128) NOT NULL,
75
+ category VARCHAR(32) NOT NULL,
76
+ severity VARCHAR(16) NOT NULL,
77
+ finding TEXT,
78
+ context TEXT,
79
+ status VARCHAR(16) DEFAULT 'open',
80
+ resolved_by VARCHAR(128) DEFAULT NULL,
81
+ resolved_at TIMESTAMP NULL DEFAULT NULL,
82
+ user_id VARCHAR(128) DEFAULT '',
83
+ model_name VARCHAR(128) DEFAULT '',
84
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
85
+ INDEX idx_alert_severity (severity),
86
+ INDEX idx_alert_category (category),
87
+ INDEX idx_alert_status (status),
88
+ INDEX idx_alert_session (session_id),
89
+ INDEX idx_alert_created (created_at),
90
+ INDEX idx_alert_rule (rule_id)
91
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
92
+ `);
93
+ }
94
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/storage/schema.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAOH,oCAiFC;AApFD;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,IAAU;IAC3C,6EAA6E;IAC7E,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;GAmBhB,CAAC,CAAC;IAEH,+DAA+D;IAC/D,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IAED,sCAAsC;IACtC,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;GAYhB,CAAC,CAAC;IAEH,gDAAgD;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,4CAA4C;IAC5C,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BhB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Storage layer common interface
3
+ * Both MySQLWriter and DuckDBLocalWriter implement this interface
4
+ */
5
+ import { BufferEntry } from './buffer';
6
+ import { SecurityAlert } from '../security/types';
7
+ /**
8
+ * Generic query pool interface — used by Web API query layer
9
+ * mysql2 Pool natively satisfies this interface; DuckDB is adapted via wrapper
10
+ */
11
+ export interface QueryPool {
12
+ query(sql: string, params?: unknown[]): Promise<[any[], any]>;
13
+ }
14
+ /**
15
+ * Audit writer common interface
16
+ */
17
+ export interface AuditWriter {
18
+ /** Initialize connection / file (with retries) */
19
+ initialize(maxRetries?: number, retryDelayMs?: number): Promise<void>;
20
+ /** Lazy initialization — auto-connect on query */
21
+ ensureReady(): Promise<boolean>;
22
+ /** Batch write buffer entries */
23
+ writeBatch(entries: BufferEntry[]): Promise<void>;
24
+ /** Write security alerts */
25
+ writeAlerts(alerts: SecurityAlert[]): Promise<void>;
26
+ /** Get query pool (for Web API use) */
27
+ getPool(): QueryPool | null;
28
+ /** Close connection */
29
+ close(): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/storage/writer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,kDAAkD;IAClD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,iCAAiC;IACjC,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,4BAA4B;IAC5B,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,uCAAuC;IACvC,OAAO,IAAI,SAAS,GAAG,IAAI,CAAC;IAC5B,uBAAuB;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Storage layer common interface
4
+ * Both MySQLWriter and DuckDBLocalWriter implement this interface
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/storage/writer.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Audit record type definitions
3
+ */
4
+ /** Action type enum — covers all OpenClaw hooks */
5
+ export declare enum ActionType {
6
+ Message = "message",// llm_output (LLM call)
7
+ ToolCall = "tool_call",// after_tool_call
8
+ ToolPersist = "tool_persist",// tool_result_persist
9
+ ModelResolve = "model_resolve",// before_model_resolve
10
+ PromptBuild = "prompt_build",// before_prompt_build
11
+ AgentEnd = "agent_end",// agent_end
12
+ Compaction = "compaction",// before_compaction / after_compaction
13
+ Reset = "reset",// before_reset
14
+ UserMessage = "user_message",// message_received
15
+ MsgSending = "msg_sending",// message_sending
16
+ AssistantMsg = "assistant_msg",// message_sent
17
+ SessionStart = "session_start",// session_start
18
+ SessionEnd = "session_end",// session_end
19
+ SubagentSpawn = "subagent_spawn",// subagent_spawned
20
+ SubagentEnd = "subagent_end",// subagent_ended
21
+ GatewayStart = "gateway_start",// gateway_start
22
+ GatewayStop = "gateway_stop"
23
+ }
24
+ /** Message role */
25
+ export declare enum MessageRole {
26
+ User = "user",
27
+ Assistant = "assistant",
28
+ System = "system"
29
+ }
30
+ /** Core audit record */
31
+ export interface AuditAction {
32
+ /** Session ID */
33
+ sessionId: string;
34
+ /** Action type */
35
+ actionType: ActionType;
36
+ /** Action name (tool name or message type) */
37
+ actionName: string;
38
+ /** Model name */
39
+ modelName: string;
40
+ /** Input parameters */
41
+ inputParams: Record<string, unknown> | null;
42
+ /** Output result */
43
+ outputResult: Record<string, unknown> | null;
44
+ /** Prompt token count */
45
+ promptTokens: number | null;
46
+ /** Completion token count */
47
+ completionTokens: number | null;
48
+ /** Duration (ms) */
49
+ durationMs: number | null;
50
+ /** User identifier */
51
+ userId: string;
52
+ /** Record timestamp */
53
+ createdAt: Date;
54
+ }
55
+ /** Session summary record */
56
+ export interface AuditSession {
57
+ /** Session ID */
58
+ sessionId: string;
59
+ /** User */
60
+ userId: string;
61
+ /** Model */
62
+ modelName: string;
63
+ /** Start time */
64
+ startTime: Date;
65
+ /** End time */
66
+ endTime: Date | null;
67
+ /** Total action count */
68
+ totalActions: number;
69
+ /** Total token usage */
70
+ totalTokens: number;
71
+ }
72
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mDAAmD;AACnD,oBAAY,UAAU;IAEpB,OAAO,YAAY,CAAc,wBAAwB;IACzD,QAAQ,cAAc,CAAW,kBAAkB;IACnD,WAAW,iBAAiB,CAAK,sBAAsB;IAGvD,YAAY,kBAAkB,CAAG,uBAAuB;IACxD,WAAW,iBAAiB,CAAK,sBAAsB;IAEvD,QAAQ,cAAc,CAAW,YAAY;IAG7C,UAAU,eAAe,CAAQ,uCAAuC;IACxE,KAAK,UAAU,CAAkB,eAAe;IAGhD,WAAW,iBAAiB,CAAK,mBAAmB;IACpD,UAAU,gBAAgB,CAAO,kBAAkB;IACnD,YAAY,kBAAkB,CAAG,eAAe;IAIhD,YAAY,kBAAkB,CAAG,gBAAgB;IACjD,UAAU,gBAAgB,CAAO,cAAc;IAG/C,aAAa,mBAAmB,CAAE,mBAAmB;IACrD,WAAW,iBAAiB,CAAK,iBAAiB;IAGlD,YAAY,kBAAkB,CAAG,gBAAgB;IACjD,WAAW,iBAAiB;CAC7B;AAED,mBAAmB;AACnB,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,wBAAwB;AACxB,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,yBAAyB;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oBAAoB;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe;IACf,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB"}
package/dist/types.js ADDED
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * Audit record type definitions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MessageRole = exports.ActionType = void 0;
7
+ /** Action type enum — covers all OpenClaw hooks */
8
+ var ActionType;
9
+ (function (ActionType) {
10
+ // LLM core
11
+ ActionType["Message"] = "message";
12
+ ActionType["ToolCall"] = "tool_call";
13
+ ActionType["ToolPersist"] = "tool_persist";
14
+ // Agent lifecycle
15
+ ActionType["ModelResolve"] = "model_resolve";
16
+ ActionType["PromptBuild"] = "prompt_build";
17
+ // AgentStart removed — before_agent_start is a legacy hook that triggers redundantly
18
+ ActionType["AgentEnd"] = "agent_end";
19
+ // Context management
20
+ ActionType["Compaction"] = "compaction";
21
+ ActionType["Reset"] = "reset";
22
+ // Message channel
23
+ ActionType["UserMessage"] = "user_message";
24
+ ActionType["MsgSending"] = "msg_sending";
25
+ ActionType["AssistantMsg"] = "assistant_msg";
26
+ // MsgWrite removed — before_message_write has no additional audit value
27
+ // Session
28
+ ActionType["SessionStart"] = "session_start";
29
+ ActionType["SessionEnd"] = "session_end";
30
+ // Sub-agent
31
+ ActionType["SubagentSpawn"] = "subagent_spawn";
32
+ ActionType["SubagentEnd"] = "subagent_end";
33
+ // Gateway
34
+ ActionType["GatewayStart"] = "gateway_start";
35
+ ActionType["GatewayStop"] = "gateway_stop";
36
+ })(ActionType || (exports.ActionType = ActionType = {}));
37
+ /** Message role */
38
+ var MessageRole;
39
+ (function (MessageRole) {
40
+ MessageRole["User"] = "user";
41
+ MessageRole["Assistant"] = "assistant";
42
+ MessageRole["System"] = "system";
43
+ })(MessageRole || (exports.MessageRole = MessageRole = {}));
44
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mDAAmD;AACnD,IAAY,UAiCX;AAjCD,WAAY,UAAU;IACpB,WAAW;IACX,iCAAmB,CAAA;IACnB,oCAAsB,CAAA;IACtB,0CAA4B,CAAA;IAE5B,kBAAkB;IAClB,4CAA8B,CAAA;IAC9B,0CAA4B,CAAA;IAC5B,qFAAqF;IACrF,oCAAsB,CAAA;IAEtB,qBAAqB;IACrB,uCAAyB,CAAA;IACzB,6BAAe,CAAA;IAEf,kBAAkB;IAClB,0CAA4B,CAAA;IAC5B,wCAA0B,CAAA;IAC1B,4CAA8B,CAAA;IAC9B,wEAAwE;IAExE,UAAU;IACV,4CAA8B,CAAA;IAC9B,wCAA0B,CAAA;IAE1B,YAAY;IACZ,8CAAgC,CAAA;IAChC,0CAA4B,CAAA;IAE5B,UAAU;IACV,4CAA8B,CAAA;IAC9B,0CAA4B,CAAA;AAC9B,CAAC,EAjCW,UAAU,0BAAV,UAAU,QAiCrB;AAED,mBAAmB;AACnB,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB"}