@dynamicu/chromedebug-mcp 2.6.6 → 2.7.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 (46) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +1 -1
  3. package/chrome-extension/activation-manager.js +18 -4
  4. package/chrome-extension/background.js +1044 -552
  5. package/chrome-extension/browser-recording-manager.js +256 -0
  6. package/chrome-extension/chrome-debug-logger.js +168 -0
  7. package/chrome-extension/console-interception-library.js +430 -0
  8. package/chrome-extension/content.css +16 -16
  9. package/chrome-extension/content.js +617 -215
  10. package/chrome-extension/data-buffer.js +206 -17
  11. package/chrome-extension/extension-config.js +1 -1
  12. package/chrome-extension/frame-capture.js +52 -15
  13. package/chrome-extension/license-helper.js +26 -0
  14. package/chrome-extension/manifest.free.json +3 -6
  15. package/chrome-extension/options.js +1 -1
  16. package/chrome-extension/popup.html +315 -181
  17. package/chrome-extension/popup.js +673 -526
  18. package/chrome-extension/pro/enhanced-capture.js +406 -0
  19. package/chrome-extension/pro/frame-editor.html +410 -0
  20. package/chrome-extension/pro/frame-editor.js +1496 -0
  21. package/chrome-extension/pro/function-tracker.js +843 -0
  22. package/chrome-extension/pro/jszip.min.js +13 -0
  23. package/config/chromedebug-config.json +101 -0
  24. package/dist/chromedebug-extension-free.zip +0 -0
  25. package/package.json +3 -1
  26. package/scripts/package-pro-extension.js +1 -1
  27. package/scripts/webpack.config.free.cjs +11 -8
  28. package/scripts/webpack.config.pro.cjs +5 -0
  29. package/src/chrome-controller.js +7 -7
  30. package/src/cli.js +2 -2
  31. package/src/database.js +61 -9
  32. package/src/http-server.js +3 -2
  33. package/src/index.js +9 -6
  34. package/src/mcp/server.js +2 -2
  35. package/src/services/process-manager.js +10 -6
  36. package/src/services/process-tracker.js +10 -5
  37. package/src/services/profile-manager.js +17 -2
  38. package/src/validation/schemas.js +36 -6
  39. package/src/index-direct.js +0 -157
  40. package/src/index-modular.js +0 -219
  41. package/src/index-monolithic-backup.js +0 -2230
  42. package/src/legacy/chrome-controller-old.js +0 -1406
  43. package/src/legacy/index-express.js +0 -625
  44. package/src/legacy/index-old.js +0 -977
  45. package/src/legacy/routes.js +0 -260
  46. package/src/legacy/shared-storage.js +0 -101
@@ -0,0 +1,410 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Chrome Debug Frame Editor</title>
6
+ <style>
7
+ * {
8
+ box-sizing: border-box;
9
+ margin: 0;
10
+ padding: 0;
11
+ }
12
+
13
+ body {
14
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
15
+ background: #f5f5f5;
16
+ color: #333;
17
+ }
18
+
19
+ .header {
20
+ background: #fff;
21
+ border-bottom: 1px solid #ddd;
22
+ padding: 20px;
23
+ position: fixed;
24
+ top: 0;
25
+ left: 0;
26
+ right: 0;
27
+ z-index: 100;
28
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
29
+ }
30
+
31
+ .header h1 {
32
+ font-size: 24px;
33
+ margin-bottom: 10px;
34
+ }
35
+
36
+ .header-info {
37
+ display: flex;
38
+ gap: 20px;
39
+ align-items: center;
40
+ margin-bottom: 15px;
41
+ font-size: 14px;
42
+ color: #666;
43
+ }
44
+
45
+ .header-controls {
46
+ display: flex;
47
+ gap: 10px;
48
+ align-items: center;
49
+ }
50
+
51
+ .btn {
52
+ padding: 8px 16px;
53
+ border: none;
54
+ border-radius: 4px;
55
+ font-size: 14px;
56
+ cursor: pointer;
57
+ transition: all 0.2s;
58
+ }
59
+
60
+ .btn-primary {
61
+ background: #4A90E2;
62
+ color: white;
63
+ }
64
+
65
+ .btn-primary:hover {
66
+ background: #357ABD;
67
+ }
68
+
69
+ .btn-secondary {
70
+ background: #fff;
71
+ color: #333;
72
+ border: 1px solid #ddd;
73
+ }
74
+
75
+ .btn-secondary:hover {
76
+ background: #f5f5f5;
77
+ }
78
+
79
+ .btn-danger {
80
+ background: #f44336;
81
+ color: white;
82
+ }
83
+
84
+ .btn-danger:hover {
85
+ background: #d32f2f;
86
+ }
87
+
88
+ .btn:disabled {
89
+ opacity: 0.5;
90
+ cursor: not-allowed;
91
+ }
92
+
93
+ .content {
94
+ margin-top: 140px;
95
+ padding: 20px;
96
+ }
97
+
98
+ .frames-container {
99
+ background: #fff;
100
+ border-radius: 8px;
101
+ overflow: hidden;
102
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
103
+ }
104
+
105
+ .frame-item {
106
+ border-bottom: 1px solid #eee;
107
+ padding: 15px;
108
+ display: flex;
109
+ gap: 15px;
110
+ align-items: start;
111
+ transition: background 0.2s;
112
+ }
113
+
114
+ .frame-item:hover {
115
+ background: #f9f9f9;
116
+ }
117
+
118
+ .frame-item.selected {
119
+ background: #e3f2fd;
120
+ }
121
+
122
+ .frame-checkbox {
123
+ margin-top: 40px;
124
+ }
125
+
126
+ .frame-thumbnail {
127
+ width: 160px;
128
+ height: 90px;
129
+ background: #f0f0f0;
130
+ border-radius: 4px;
131
+ overflow: hidden;
132
+ flex-shrink: 0;
133
+ }
134
+
135
+ .frame-thumbnail img {
136
+ width: 100%;
137
+ height: 100%;
138
+ object-fit: cover;
139
+ }
140
+
141
+ .frame-placeholder {
142
+ width: 100%;
143
+ height: 100%;
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: center;
147
+ color: #999;
148
+ font-size: 12px;
149
+ }
150
+
151
+ .frame-info {
152
+ flex: 1;
153
+ }
154
+
155
+ .frame-header {
156
+ display: flex;
157
+ justify-content: space-between;
158
+ align-items: center;
159
+ margin-bottom: 8px;
160
+ }
161
+
162
+ .frame-title {
163
+ font-weight: 500;
164
+ font-size: 16px;
165
+ }
166
+
167
+ .frame-timestamp {
168
+ font-size: 13px;
169
+ color: #666;
170
+ }
171
+
172
+ .frame-logs {
173
+ margin-top: 8px;
174
+ }
175
+
176
+ .frame-log-summary {
177
+ font-size: 13px;
178
+ color: #666;
179
+ cursor: pointer;
180
+ display: flex;
181
+ align-items: center;
182
+ gap: 5px;
183
+ }
184
+
185
+ .frame-log-summary:hover {
186
+ color: #4A90E2;
187
+ }
188
+
189
+ .log-count {
190
+ background: #e0e0e0;
191
+ padding: 2px 8px;
192
+ border-radius: 12px;
193
+ font-size: 12px;
194
+ }
195
+
196
+ .frame-logs-expanded {
197
+ margin-top: 10px;
198
+ padding: 10px;
199
+ background: #f5f5f5;
200
+ border-radius: 4px;
201
+ font-family: monospace;
202
+ font-size: 12px;
203
+ max-height: 200px;
204
+ overflow-y: auto;
205
+ }
206
+
207
+ .log-entry {
208
+ margin-bottom: 5px;
209
+ display: flex;
210
+ gap: 10px;
211
+ }
212
+
213
+ .log-level {
214
+ font-weight: bold;
215
+ text-transform: uppercase;
216
+ width: 50px;
217
+ }
218
+
219
+ .log-level.log { color: #666; }
220
+ .log-level.info { color: #2196F3; }
221
+ .log-level.warn { color: #FF9800; }
222
+ .log-level.error { color: #f44336; }
223
+
224
+ .log-time {
225
+ color: #999;
226
+ width: 60px;
227
+ }
228
+
229
+ .log-message {
230
+ flex: 1;
231
+ word-break: break-word;
232
+ }
233
+
234
+ .loading {
235
+ text-align: center;
236
+ padding: 40px;
237
+ color: #666;
238
+ }
239
+
240
+ .error {
241
+ background: #ffebee;
242
+ color: #c62828;
243
+ padding: 20px;
244
+ border-radius: 4px;
245
+ margin: 20px;
246
+ }
247
+
248
+ .selection-info {
249
+ background: #e3f2fd;
250
+ padding: 10px 15px;
251
+ border-radius: 4px;
252
+ font-size: 14px;
253
+ color: #1565C0;
254
+ margin-left: auto;
255
+ }
256
+
257
+ .empty-state {
258
+ text-align: center;
259
+ padding: 60px 20px;
260
+ color: #666;
261
+ }
262
+
263
+ .empty-state h2 {
264
+ font-size: 20px;
265
+ margin-bottom: 10px;
266
+ color: #333;
267
+ }
268
+
269
+ /* Modal styles for enlarged frame view */
270
+ .modal-overlay {
271
+ position: fixed;
272
+ top: 0;
273
+ left: 0;
274
+ right: 0;
275
+ bottom: 0;
276
+ background: rgba(0, 0, 0, 0.8);
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: center;
280
+ z-index: 1000;
281
+ opacity: 0;
282
+ visibility: hidden;
283
+ transition: all 0.3s ease;
284
+ }
285
+
286
+ .modal-overlay.visible {
287
+ opacity: 1;
288
+ visibility: visible;
289
+ }
290
+
291
+ .modal-content {
292
+ position: relative;
293
+ max-width: 90vw;
294
+ max-height: 90vh;
295
+ background: white;
296
+ border-radius: 8px;
297
+ overflow: hidden;
298
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
299
+ transform: scale(0.9);
300
+ transition: transform 0.3s ease;
301
+ }
302
+
303
+ .modal-overlay.visible .modal-content {
304
+ transform: scale(1);
305
+ }
306
+
307
+ .modal-header {
308
+ padding: 15px 20px;
309
+ background: #f5f5f5;
310
+ border-bottom: 1px solid #ddd;
311
+ display: flex;
312
+ justify-content: space-between;
313
+ align-items: center;
314
+ }
315
+
316
+ .modal-title {
317
+ font-size: 16px;
318
+ font-weight: 500;
319
+ margin: 0;
320
+ }
321
+
322
+ .modal-close {
323
+ background: none;
324
+ border: none;
325
+ font-size: 24px;
326
+ cursor: pointer;
327
+ color: #666;
328
+ padding: 0;
329
+ width: 30px;
330
+ height: 30px;
331
+ display: flex;
332
+ align-items: center;
333
+ justify-content: center;
334
+ border-radius: 50%;
335
+ transition: background 0.2s;
336
+ }
337
+
338
+ .modal-close:hover {
339
+ background: #e0e0e0;
340
+ }
341
+
342
+ .modal-image {
343
+ max-width: 100%;
344
+ max-height: calc(90vh - 120px);
345
+ display: block;
346
+ }
347
+
348
+ .frame-thumbnail {
349
+ cursor: pointer;
350
+ transition: transform 0.2s;
351
+ }
352
+
353
+ .frame-thumbnail:hover {
354
+ transform: scale(1.05);
355
+ }
356
+ </style>
357
+ </head>
358
+ <body>
359
+ <div class="header">
360
+ <h1 id="editorTitle">Frame Editor</h1>
361
+ <div class="header-info">
362
+ <div id="sessionInfo">Loading session...</div>
363
+ <div class="selection-info" id="selectionInfo" style="display: none;">
364
+ <span id="selectedCount">0</span> <span id="selectionType">frames</span> selected
365
+ </div>
366
+ </div>
367
+ <div class="header-controls">
368
+ <button class="btn btn-secondary" id="selectAllBtn">Select All</button>
369
+ <button class="btn btn-secondary" id="selectNoneBtn">Select None</button>
370
+ <button class="btn btn-secondary" id="invertSelectionBtn">Invert Selection</button>
371
+ <button class="btn btn-danger" id="deleteSelectedBtn" disabled>Delete Selected</button>
372
+ <button class="btn btn-primary" id="saveEditedBtn" disabled>Save as New Recording</button>
373
+ </div>
374
+ </div>
375
+
376
+ <div class="content">
377
+ <div id="loadingContainer" class="loading">
378
+ Loading frames...
379
+ </div>
380
+
381
+ <div id="errorContainer" class="error" style="display: none;">
382
+ </div>
383
+
384
+ <div id="emptyContainer" class="empty-state" style="display: none;">
385
+ <h2>No Recording Selected</h2>
386
+ <p>Please select a recording from the extension popup to edit.</p>
387
+ </div>
388
+
389
+ <div class="frames-container" id="framesContainer" style="display: none;">
390
+ </div>
391
+ </div>
392
+
393
+ <!-- Modal for enlarged frame view -->
394
+ <div class="modal-overlay" id="frameModal">
395
+ <div class="modal-content">
396
+ <div class="modal-header">
397
+ <h3 class="modal-title" id="modalTitle">Frame Preview</h3>
398
+ <button class="modal-close" id="modalClose">×</button>
399
+ </div>
400
+ <div class="modal-body">
401
+ <img class="modal-image" id="modalImage" src="" alt="Frame">
402
+ </div>
403
+ </div>
404
+ </div>
405
+
406
+ <script src="../extension-config.js"></script>
407
+ <script src="jszip.min.js"></script>
408
+ <script src="frame-editor.js"></script>
409
+ </body>
410
+ </html>