browser-debug-mcp-bridge 1.9.0 → 1.11.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 (56) hide show
  1. package/README.md +271 -188
  2. package/apps/mcp-server/dist/db/automation-repository.js +199 -0
  3. package/apps/mcp-server/dist/db/automation-repository.js.map +1 -0
  4. package/apps/mcp-server/dist/db/connection.js +1 -5
  5. package/apps/mcp-server/dist/db/connection.js.map +1 -1
  6. package/apps/mcp-server/dist/db/events-repository.js +79 -10
  7. package/apps/mcp-server/dist/db/events-repository.js.map +1 -1
  8. package/apps/mcp-server/dist/db/index.js +2 -0
  9. package/apps/mcp-server/dist/db/index.js.map +1 -1
  10. package/apps/mcp-server/dist/db/migrations.js +493 -0
  11. package/apps/mcp-server/dist/db/migrations.js.map +1 -1
  12. package/apps/mcp-server/dist/db/schema.js +192 -1
  13. package/apps/mcp-server/dist/db/schema.js.map +1 -1
  14. package/apps/mcp-server/dist/document-response-rewriter.js +196 -0
  15. package/apps/mcp-server/dist/document-response-rewriter.js.map +1 -0
  16. package/apps/mcp-server/dist/json-rewrite.js +189 -0
  17. package/apps/mcp-server/dist/json-rewrite.js.map +1 -0
  18. package/apps/mcp-server/dist/main.js +375 -4
  19. package/apps/mcp-server/dist/main.js.map +1 -1
  20. package/apps/mcp-server/dist/mcp/server.js +4168 -310
  21. package/apps/mcp-server/dist/mcp/server.js.map +1 -1
  22. package/apps/mcp-server/dist/mcp-bridge.js +46 -3
  23. package/apps/mcp-server/dist/mcp-bridge.js.map +1 -1
  24. package/apps/mcp-server/dist/next-asset-mapper.js +701 -0
  25. package/apps/mcp-server/dist/next-asset-mapper.js.map +1 -0
  26. package/apps/mcp-server/dist/next-source-override-planner.js +601 -0
  27. package/apps/mcp-server/dist/next-source-override-planner.js.map +1 -0
  28. package/apps/mcp-server/dist/override-audit-contract.js +51 -0
  29. package/apps/mcp-server/dist/override-audit-contract.js.map +1 -0
  30. package/apps/mcp-server/dist/override-audit.js +740 -0
  31. package/apps/mcp-server/dist/override-audit.js.map +1 -0
  32. package/apps/mcp-server/dist/override-capabilities.js +136 -0
  33. package/apps/mcp-server/dist/override-capabilities.js.map +1 -0
  34. package/apps/mcp-server/dist/override-observed-assets.js +179 -0
  35. package/apps/mcp-server/dist/override-observed-assets.js.map +1 -0
  36. package/apps/mcp-server/dist/override-poc.js +336 -0
  37. package/apps/mcp-server/dist/override-poc.js.map +1 -0
  38. package/apps/mcp-server/dist/override-profile-generator.js +403 -0
  39. package/apps/mcp-server/dist/override-profile-generator.js.map +1 -0
  40. package/apps/mcp-server/dist/override-response-planner.js +557 -0
  41. package/apps/mcp-server/dist/override-response-planner.js.map +1 -0
  42. package/apps/mcp-server/dist/override-rule-types.js +32 -0
  43. package/apps/mcp-server/dist/override-rule-types.js.map +1 -0
  44. package/apps/mcp-server/dist/retention.js +4 -3
  45. package/apps/mcp-server/dist/retention.js.map +1 -1
  46. package/apps/mcp-server/dist/rsc-flight-patch-safety.js +269 -0
  47. package/apps/mcp-server/dist/rsc-flight-patch-safety.js.map +1 -0
  48. package/apps/mcp-server/dist/runtime-paths.js +33 -0
  49. package/apps/mcp-server/dist/runtime-paths.js.map +1 -0
  50. package/apps/mcp-server/dist/websocket/messages.js +13 -0
  51. package/apps/mcp-server/dist/websocket/messages.js.map +1 -1
  52. package/apps/mcp-server/dist/websocket/websocket-server.js +10 -0
  53. package/apps/mcp-server/dist/websocket/websocket-server.js.map +1 -1
  54. package/apps/mcp-server/package.json +1 -0
  55. package/package.json +16 -1
  56. package/scripts/mcp-start.cjs +201 -11
@@ -1,8 +1,35 @@
1
1
  import { initializeSchema, getSchemaVersion, clearDatabase, SCHEMA_VERSION } from './schema.js';
2
+ import { AutomationRepository, isAutomationLifecycleEventType } from './automation-repository.js';
3
+ import { OVERRIDE_POC_FAILURE_CODES, OVERRIDE_PLAN_AUDIT_KINDS, OVERRIDE_POC_REQUEST_STATUSES, OVERRIDE_POC_RUN_STATUSES, } from '../override-audit-contract.js';
2
4
  function getColumnNames(db, tableName) {
3
5
  const rows = db.prepare(`PRAGMA table_info('${tableName}')`).all();
4
6
  return new Set(rows.map((row) => row.name));
5
7
  }
8
+ function tableExists(db, tableName) {
9
+ const row = db
10
+ .prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?")
11
+ .get(tableName);
12
+ return row !== undefined;
13
+ }
14
+ function getMaxTimestampBySession(db, tableName, timestampColumn) {
15
+ if (!tableExists(db, tableName)) {
16
+ return new Map();
17
+ }
18
+ const columns = getColumnNames(db, tableName);
19
+ if (!columns.has('session_id') || !columns.has(timestampColumn)) {
20
+ return new Map();
21
+ }
22
+ const rows = db
23
+ .prepare(`
24
+ SELECT session_id, MAX(${timestampColumn}) AS max_ts
25
+ FROM ${tableName}
26
+ GROUP BY session_id
27
+ `)
28
+ .all();
29
+ return new Map(rows
30
+ .filter((row) => row.max_ts !== null)
31
+ .map((row) => [row.session_id, row.max_ts]));
32
+ }
6
33
  function normalizeOriginCandidate(value) {
7
34
  if (typeof value !== 'string' || value.trim().length === 0) {
8
35
  return null;
@@ -35,6 +62,247 @@ function extractEventOrigin(payload) {
35
62
  }
36
63
  return null;
37
64
  }
65
+ const OVERRIDE_POC_RUN_STATUS_SQL = OVERRIDE_POC_RUN_STATUSES.map((value) => `'${value}'`).join(', ');
66
+ const OVERRIDE_POC_REQUEST_STATUS_SQL = OVERRIDE_POC_REQUEST_STATUSES.map((value) => `'${value}'`).join(', ');
67
+ const OVERRIDE_POC_FAILURE_CODE_SQL = OVERRIDE_POC_FAILURE_CODES.map((value) => `'${value}'`).join(', ');
68
+ const OVERRIDE_PLAN_AUDIT_KIND_SQL = OVERRIDE_PLAN_AUDIT_KINDS.map((value) => `'${value}'`).join(', ');
69
+ function ensureAutomationTablesAndBackfill(db) {
70
+ db.exec(`
71
+ CREATE TABLE IF NOT EXISTS automation_runs (
72
+ run_id TEXT PRIMARY KEY,
73
+ session_id TEXT NOT NULL,
74
+ trace_id TEXT,
75
+ action TEXT,
76
+ tab_id INTEGER,
77
+ selector TEXT,
78
+ status TEXT NOT NULL,
79
+ started_at INTEGER NOT NULL,
80
+ completed_at INTEGER,
81
+ stop_reason TEXT,
82
+ target_summary_json TEXT,
83
+ failure_json TEXT,
84
+ redaction_json TEXT,
85
+ created_at INTEGER NOT NULL,
86
+ updated_at INTEGER NOT NULL,
87
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE
88
+ );
89
+
90
+ CREATE INDEX IF NOT EXISTS idx_automation_runs_session_started ON automation_runs(session_id, started_at);
91
+ CREATE INDEX IF NOT EXISTS idx_automation_runs_session_status ON automation_runs(session_id, status);
92
+ CREATE INDEX IF NOT EXISTS idx_automation_runs_trace_id ON automation_runs(trace_id);
93
+
94
+ CREATE TABLE IF NOT EXISTS automation_steps (
95
+ step_id TEXT PRIMARY KEY,
96
+ run_id TEXT NOT NULL,
97
+ session_id TEXT NOT NULL,
98
+ step_order INTEGER NOT NULL,
99
+ trace_id TEXT,
100
+ action TEXT NOT NULL,
101
+ selector TEXT,
102
+ status TEXT NOT NULL,
103
+ started_at INTEGER,
104
+ finished_at INTEGER,
105
+ duration_ms INTEGER,
106
+ tab_id INTEGER,
107
+ target_summary_json TEXT,
108
+ redaction_json TEXT,
109
+ failure_json TEXT,
110
+ input_metadata_json TEXT,
111
+ event_type TEXT NOT NULL,
112
+ event_id TEXT,
113
+ created_at INTEGER NOT NULL,
114
+ updated_at INTEGER NOT NULL,
115
+ FOREIGN KEY (run_id) REFERENCES automation_runs(run_id) ON DELETE CASCADE,
116
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE,
117
+ FOREIGN KEY (event_id) REFERENCES events(event_id) ON DELETE SET NULL,
118
+ UNIQUE(run_id, step_order)
119
+ );
120
+
121
+ CREATE INDEX IF NOT EXISTS idx_automation_steps_run_order ON automation_steps(run_id, step_order);
122
+ CREATE INDEX IF NOT EXISTS idx_automation_steps_session_started ON automation_steps(session_id, started_at);
123
+ CREATE INDEX IF NOT EXISTS idx_automation_steps_trace_id ON automation_steps(trace_id);
124
+ `);
125
+ const automationRepository = new AutomationRepository(db);
126
+ const rows = db.prepare(`
127
+ SELECT event_id, session_id, ts, payload_json, tab_id
128
+ FROM events
129
+ WHERE type = 'ui'
130
+ ORDER BY ts ASC, rowid ASC
131
+ `).all();
132
+ for (const row of rows) {
133
+ let payload = {};
134
+ try {
135
+ const parsed = JSON.parse(row.payload_json);
136
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
137
+ payload = parsed;
138
+ }
139
+ }
140
+ catch {
141
+ payload = {};
142
+ }
143
+ const eventType = typeof payload.eventType === 'string' ? payload.eventType : '';
144
+ if (!isAutomationLifecycleEventType(eventType)) {
145
+ continue;
146
+ }
147
+ automationRepository.upsertLifecycleEvent({
148
+ eventId: row.event_id,
149
+ eventType,
150
+ sessionId: row.session_id,
151
+ timestamp: row.ts,
152
+ tabId: row.tab_id,
153
+ payload,
154
+ });
155
+ }
156
+ }
157
+ function rebuildOverrideFailureCodeChecks(db) {
158
+ db.exec(`
159
+ PRAGMA foreign_keys=OFF;
160
+
161
+ DROP INDEX IF EXISTS idx_override_requests_session_ts;
162
+ DROP INDEX IF EXISTS idx_override_requests_run_ts;
163
+ DROP INDEX IF EXISTS idx_override_requests_status_ts;
164
+ DROP INDEX IF EXISTS idx_override_runs_session_started_at;
165
+ DROP INDEX IF EXISTS idx_override_runs_session_status_started_at;
166
+
167
+ ALTER TABLE override_requests RENAME TO override_requests_v11;
168
+ ALTER TABLE override_runs RENAME TO override_runs_v11;
169
+
170
+ CREATE TABLE override_runs (
171
+ run_id TEXT PRIMARY KEY,
172
+ session_id TEXT NOT NULL,
173
+ started_at INTEGER NOT NULL,
174
+ ended_at INTEGER,
175
+ run_status TEXT NOT NULL CHECK(run_status IN (${OVERRIDE_POC_RUN_STATUS_SQL})),
176
+ tab_id INTEGER NOT NULL,
177
+ selected_tab_id INTEGER,
178
+ target_asset_url TEXT NOT NULL,
179
+ local_file_path TEXT NOT NULL,
180
+ resolved_local_file_path TEXT NOT NULL,
181
+ content_type TEXT NOT NULL,
182
+ auto_reload INTEGER NOT NULL DEFAULT 0,
183
+ config_path TEXT NOT NULL,
184
+ file_exists INTEGER NOT NULL DEFAULT 0,
185
+ file_size_bytes INTEGER,
186
+ matched_requests INTEGER NOT NULL DEFAULT 0,
187
+ fulfilled_requests INTEGER NOT NULL DEFAULT 0,
188
+ last_matched_at INTEGER,
189
+ last_fulfilled_at INTEGER,
190
+ last_error_code TEXT CHECK(last_error_code IN (${OVERRIDE_POC_FAILURE_CODE_SQL})),
191
+ last_error_message TEXT,
192
+ created_at INTEGER NOT NULL,
193
+ updated_at INTEGER NOT NULL,
194
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE
195
+ );
196
+
197
+ CREATE TABLE override_requests (
198
+ request_log_id TEXT PRIMARY KEY,
199
+ run_id TEXT NOT NULL,
200
+ session_id TEXT NOT NULL,
201
+ request_id TEXT NOT NULL,
202
+ ts INTEGER NOT NULL,
203
+ request_url TEXT NOT NULL,
204
+ request_status TEXT NOT NULL CHECK(request_status IN (${OVERRIDE_POC_REQUEST_STATUS_SQL})),
205
+ failure_code TEXT CHECK(failure_code IN (${OVERRIDE_POC_FAILURE_CODE_SQL})),
206
+ error_message TEXT,
207
+ response_code INTEGER,
208
+ created_at INTEGER NOT NULL,
209
+ updated_at INTEGER NOT NULL,
210
+ FOREIGN KEY (run_id) REFERENCES override_runs(run_id) ON DELETE CASCADE,
211
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE
212
+ );
213
+
214
+ INSERT INTO override_runs (
215
+ run_id,
216
+ session_id,
217
+ started_at,
218
+ ended_at,
219
+ run_status,
220
+ tab_id,
221
+ selected_tab_id,
222
+ target_asset_url,
223
+ local_file_path,
224
+ resolved_local_file_path,
225
+ content_type,
226
+ auto_reload,
227
+ config_path,
228
+ file_exists,
229
+ file_size_bytes,
230
+ matched_requests,
231
+ fulfilled_requests,
232
+ last_matched_at,
233
+ last_fulfilled_at,
234
+ last_error_code,
235
+ last_error_message,
236
+ created_at,
237
+ updated_at
238
+ )
239
+ SELECT
240
+ run_id,
241
+ session_id,
242
+ started_at,
243
+ ended_at,
244
+ run_status,
245
+ tab_id,
246
+ selected_tab_id,
247
+ target_asset_url,
248
+ local_file_path,
249
+ resolved_local_file_path,
250
+ content_type,
251
+ auto_reload,
252
+ config_path,
253
+ file_exists,
254
+ file_size_bytes,
255
+ matched_requests,
256
+ fulfilled_requests,
257
+ last_matched_at,
258
+ last_fulfilled_at,
259
+ last_error_code,
260
+ last_error_message,
261
+ created_at,
262
+ updated_at
263
+ FROM override_runs_v11;
264
+
265
+ INSERT INTO override_requests (
266
+ request_log_id,
267
+ run_id,
268
+ session_id,
269
+ request_id,
270
+ ts,
271
+ request_url,
272
+ request_status,
273
+ failure_code,
274
+ error_message,
275
+ response_code,
276
+ created_at,
277
+ updated_at
278
+ )
279
+ SELECT
280
+ request_log_id,
281
+ run_id,
282
+ session_id,
283
+ request_id,
284
+ ts,
285
+ request_url,
286
+ request_status,
287
+ failure_code,
288
+ error_message,
289
+ response_code,
290
+ created_at,
291
+ updated_at
292
+ FROM override_requests_v11;
293
+
294
+ DROP TABLE override_requests_v11;
295
+ DROP TABLE override_runs_v11;
296
+
297
+ CREATE INDEX IF NOT EXISTS idx_override_runs_session_started_at ON override_runs(session_id, started_at);
298
+ CREATE INDEX IF NOT EXISTS idx_override_runs_session_status_started_at ON override_runs(session_id, run_status, started_at);
299
+ CREATE INDEX IF NOT EXISTS idx_override_requests_session_ts ON override_requests(session_id, ts);
300
+ CREATE INDEX IF NOT EXISTS idx_override_requests_run_ts ON override_requests(run_id, ts);
301
+ CREATE INDEX IF NOT EXISTS idx_override_requests_status_ts ON override_requests(request_status, ts);
302
+
303
+ PRAGMA foreign_keys=ON;
304
+ `);
305
+ }
38
306
  const migrations = [
39
307
  {
40
308
  version: 1,
@@ -267,6 +535,231 @@ const migrations = [
267
535
  `);
268
536
  },
269
537
  },
538
+ {
539
+ version: 7,
540
+ name: 'automation_run_tables',
541
+ up: ensureAutomationTablesAndBackfill,
542
+ },
543
+ {
544
+ version: 8,
545
+ name: 'session_last_seen_tracking',
546
+ up: (db) => {
547
+ const sessionColumns = getColumnNames(db, 'sessions');
548
+ if (!sessionColumns.has('last_seen_at')) {
549
+ db.exec('ALTER TABLE sessions ADD COLUMN last_seen_at INTEGER NOT NULL DEFAULT 0;');
550
+ }
551
+ db.exec(`
552
+ CREATE INDEX IF NOT EXISTS idx_sessions_last_seen_at ON sessions(last_seen_at);
553
+ `);
554
+ const refreshedSessionColumns = getColumnNames(db, 'sessions');
555
+ const pausedAtExpr = refreshedSessionColumns.has('paused_at') ? 's.paused_at' : 'NULL';
556
+ const endedAtExpr = refreshedSessionColumns.has('ended_at') ? 's.ended_at' : 'NULL';
557
+ const eventLastSeenBySession = getMaxTimestampBySession(db, 'events', 'ts');
558
+ const networkLastSeenBySession = getMaxTimestampBySession(db, 'network', 'ts_start');
559
+ const snapshotLastSeenBySession = getMaxTimestampBySession(db, 'snapshots', 'ts');
560
+ const updateLastSeen = db.prepare('UPDATE sessions SET last_seen_at = ? WHERE session_id = ?');
561
+ const runBackfill = db.transaction(() => {
562
+ const rows = db.prepare(`
563
+ SELECT
564
+ s.session_id,
565
+ s.created_at,
566
+ ${pausedAtExpr} AS paused_at,
567
+ ${endedAtExpr} AS ended_at
568
+ FROM sessions s
569
+ `).all();
570
+ for (const row of rows) {
571
+ const lastSeenAt = Math.max(row.created_at, row.paused_at ?? 0, row.ended_at ?? 0, eventLastSeenBySession.get(row.session_id) ?? 0, networkLastSeenBySession.get(row.session_id) ?? 0, snapshotLastSeenBySession.get(row.session_id) ?? 0);
572
+ updateLastSeen.run(lastSeenAt, row.session_id);
573
+ }
574
+ });
575
+ runBackfill();
576
+ },
577
+ },
578
+ {
579
+ version: 9,
580
+ name: 'override_audit_tables',
581
+ up: (db) => {
582
+ db.exec(`
583
+ CREATE TABLE IF NOT EXISTS override_runs (
584
+ run_id TEXT PRIMARY KEY,
585
+ session_id TEXT NOT NULL,
586
+ started_at INTEGER NOT NULL,
587
+ ended_at INTEGER,
588
+ run_status TEXT NOT NULL CHECK(run_status IN (${OVERRIDE_POC_RUN_STATUS_SQL})),
589
+ tab_id INTEGER NOT NULL,
590
+ selected_tab_id INTEGER,
591
+ target_asset_url TEXT NOT NULL,
592
+ local_file_path TEXT NOT NULL,
593
+ resolved_local_file_path TEXT NOT NULL,
594
+ content_type TEXT NOT NULL,
595
+ auto_reload INTEGER NOT NULL DEFAULT 0,
596
+ config_path TEXT NOT NULL,
597
+ file_exists INTEGER NOT NULL DEFAULT 0,
598
+ file_size_bytes INTEGER,
599
+ matched_requests INTEGER NOT NULL DEFAULT 0,
600
+ fulfilled_requests INTEGER NOT NULL DEFAULT 0,
601
+ last_matched_at INTEGER,
602
+ last_fulfilled_at INTEGER,
603
+ last_error_code TEXT CHECK(last_error_code IN (${OVERRIDE_POC_FAILURE_CODE_SQL})),
604
+ last_error_message TEXT,
605
+ created_at INTEGER NOT NULL,
606
+ updated_at INTEGER NOT NULL,
607
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE
608
+ );
609
+ `);
610
+ db.exec(`
611
+ CREATE INDEX IF NOT EXISTS idx_override_runs_session_started_at ON override_runs(session_id, started_at);
612
+ CREATE INDEX IF NOT EXISTS idx_override_runs_session_status_started_at ON override_runs(session_id, run_status, started_at);
613
+ `);
614
+ db.exec(`
615
+ CREATE TABLE IF NOT EXISTS override_requests (
616
+ request_log_id TEXT PRIMARY KEY,
617
+ run_id TEXT NOT NULL,
618
+ session_id TEXT NOT NULL,
619
+ request_id TEXT NOT NULL,
620
+ ts INTEGER NOT NULL,
621
+ request_url TEXT NOT NULL,
622
+ request_status TEXT NOT NULL CHECK(request_status IN (${OVERRIDE_POC_REQUEST_STATUS_SQL})),
623
+ failure_code TEXT CHECK(failure_code IN (${OVERRIDE_POC_FAILURE_CODE_SQL})),
624
+ error_message TEXT,
625
+ response_code INTEGER,
626
+ created_at INTEGER NOT NULL,
627
+ updated_at INTEGER NOT NULL,
628
+ FOREIGN KEY (run_id) REFERENCES override_runs(run_id) ON DELETE CASCADE,
629
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE
630
+ );
631
+ `);
632
+ db.exec(`
633
+ CREATE INDEX IF NOT EXISTS idx_override_requests_session_ts ON override_requests(session_id, ts);
634
+ CREATE INDEX IF NOT EXISTS idx_override_requests_run_ts ON override_requests(run_id, ts);
635
+ CREATE INDEX IF NOT EXISTS idx_override_requests_status_ts ON override_requests(request_status, ts);
636
+ `);
637
+ },
638
+ },
639
+ {
640
+ version: 10,
641
+ name: 'override_observed_assets',
642
+ up: (db) => {
643
+ db.exec(`
644
+ CREATE TABLE IF NOT EXISTS override_observed_assets (
645
+ observed_asset_id TEXT PRIMARY KEY,
646
+ session_id TEXT NOT NULL,
647
+ observed_at INTEGER NOT NULL,
648
+ last_seen_at INTEGER NOT NULL,
649
+ tab_id INTEGER,
650
+ page_url TEXT,
651
+ base_url TEXT,
652
+ page_title TEXT,
653
+ service_worker_controlled INTEGER NOT NULL DEFAULT 0,
654
+ csp_meta_json TEXT,
655
+ asset_url TEXT NOT NULL,
656
+ asset_path TEXT,
657
+ pathname TEXT,
658
+ kind TEXT,
659
+ initiator_type TEXT,
660
+ rel TEXT,
661
+ as_attr TEXT,
662
+ integrity TEXT,
663
+ from_dom INTEGER NOT NULL DEFAULT 0,
664
+ from_performance INTEGER NOT NULL DEFAULT 0,
665
+ payload_json TEXT NOT NULL,
666
+ created_at INTEGER NOT NULL,
667
+ updated_at INTEGER NOT NULL,
668
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE
669
+ );
670
+ `);
671
+ db.exec(`
672
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_override_observed_assets_session_url ON override_observed_assets(session_id, asset_url);
673
+ CREATE INDEX IF NOT EXISTS idx_override_observed_assets_session_seen ON override_observed_assets(session_id, last_seen_at);
674
+ CREATE INDEX IF NOT EXISTS idx_override_observed_assets_asset_path ON override_observed_assets(asset_path);
675
+ `);
676
+ },
677
+ },
678
+ {
679
+ version: 11,
680
+ name: 'override_observed_request_metadata',
681
+ up: (db) => {
682
+ const columns = getColumnNames(db, 'override_observed_assets');
683
+ const addColumn = (name, sql) => {
684
+ if (!columns.has(name)) {
685
+ db.exec(`ALTER TABLE override_observed_assets ADD COLUMN ${sql};`);
686
+ }
687
+ };
688
+ addColumn('rule_type', "rule_type TEXT NOT NULL DEFAULT 'asset'");
689
+ addColumn('request_method', "request_method TEXT NOT NULL DEFAULT 'GET'");
690
+ addColumn('resource_type', 'resource_type TEXT');
691
+ addColumn('content_type', 'content_type TEXT');
692
+ addColumn('status_code', 'status_code INTEGER');
693
+ addColumn('from_navigation', 'from_navigation INTEGER NOT NULL DEFAULT 0');
694
+ addColumn('from_fetch', 'from_fetch INTEGER NOT NULL DEFAULT 0');
695
+ db.exec(`
696
+ UPDATE override_observed_assets
697
+ SET
698
+ rule_type = COALESCE(NULLIF(rule_type, ''), 'asset'),
699
+ request_method = COALESCE(NULLIF(request_method, ''), 'GET');
700
+
701
+ DROP INDEX IF EXISTS idx_override_observed_assets_session_url;
702
+
703
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_override_observed_assets_session_method_url
704
+ ON override_observed_assets(session_id, request_method, asset_url);
705
+ CREATE INDEX IF NOT EXISTS idx_override_observed_assets_rule_type
706
+ ON override_observed_assets(rule_type);
707
+ `);
708
+ },
709
+ },
710
+ {
711
+ version: 12,
712
+ name: 'override_plan_audits',
713
+ up: (db) => {
714
+ db.exec(`
715
+ CREATE TABLE IF NOT EXISTS override_plan_audits (
716
+ plan_id TEXT PRIMARY KEY,
717
+ session_id TEXT,
718
+ created_at INTEGER NOT NULL,
719
+ planner_kind TEXT NOT NULL CHECK(planner_kind IN (${OVERRIDE_PLAN_AUDIT_KIND_SQL})),
720
+ tool_name TEXT NOT NULL,
721
+ profile_id TEXT,
722
+ rule_id TEXT NOT NULL,
723
+ rule_type TEXT NOT NULL,
724
+ request_method TEXT NOT NULL,
725
+ match_mode TEXT NOT NULL,
726
+ target_asset_url TEXT NOT NULL,
727
+ local_file_path TEXT,
728
+ config_path TEXT,
729
+ content_type TEXT NOT NULL,
730
+ original_sha256 TEXT,
731
+ patched_sha256 TEXT,
732
+ original_bytes INTEGER,
733
+ patched_bytes INTEGER,
734
+ patch_summary_json TEXT NOT NULL,
735
+ preview_json TEXT,
736
+ warnings_json TEXT NOT NULL,
737
+ blockers_json TEXT NOT NULL,
738
+ captured_from_live_session_json TEXT,
739
+ rollback_json TEXT NOT NULL,
740
+ updated_at INTEGER NOT NULL,
741
+ FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE SET NULL
742
+ );
743
+
744
+ CREATE INDEX IF NOT EXISTS idx_override_plan_audits_session_created_at
745
+ ON override_plan_audits(session_id, created_at);
746
+ CREATE INDEX IF NOT EXISTS idx_override_plan_audits_target_url
747
+ ON override_plan_audits(target_asset_url);
748
+ CREATE INDEX IF NOT EXISTS idx_override_plan_audits_planner_kind
749
+ ON override_plan_audits(planner_kind);
750
+ `);
751
+ },
752
+ },
753
+ {
754
+ version: 13,
755
+ name: 'override_failure_code_taxonomy',
756
+ up: rebuildOverrideFailureCodeChecks,
757
+ },
758
+ {
759
+ version: 14,
760
+ name: 'merge_automation_tables_compatibility',
761
+ up: ensureAutomationTablesAndBackfill,
762
+ },
270
763
  ];
271
764
  export function runMigrations(db) {
272
765
  const currentVersion = getSchemaVersion(db) || 0;
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"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"}