@gxp-dev/tools 2.0.63 → 2.0.64

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 (182) hide show
  1. package/README.md +32 -31
  2. package/bin/gx-devtools.js +74 -54
  3. package/bin/lib/cli.js +23 -21
  4. package/bin/lib/commands/add-dependency.js +366 -325
  5. package/bin/lib/commands/assets.js +137 -139
  6. package/bin/lib/commands/build.js +169 -174
  7. package/bin/lib/commands/datastore.js +181 -183
  8. package/bin/lib/commands/dev.js +127 -131
  9. package/bin/lib/commands/extensions.js +147 -149
  10. package/bin/lib/commands/extract-config.js +73 -67
  11. package/bin/lib/commands/index.js +12 -12
  12. package/bin/lib/commands/init.js +342 -240
  13. package/bin/lib/commands/publish.js +69 -75
  14. package/bin/lib/commands/socket.js +69 -69
  15. package/bin/lib/commands/ssl.js +14 -14
  16. package/bin/lib/constants.js +10 -24
  17. package/bin/lib/tui/App.tsx +761 -705
  18. package/bin/lib/tui/components/AIPanel.tsx +191 -171
  19. package/bin/lib/tui/components/CommandInput.tsx +394 -343
  20. package/bin/lib/tui/components/GeminiPanel.tsx +175 -151
  21. package/bin/lib/tui/components/Header.tsx +23 -21
  22. package/bin/lib/tui/components/LogPanel.tsx +244 -220
  23. package/bin/lib/tui/components/TabBar.tsx +50 -48
  24. package/bin/lib/tui/components/WelcomeScreen.tsx +126 -71
  25. package/bin/lib/tui/index.tsx +37 -39
  26. package/bin/lib/tui/services/AIService.ts +518 -462
  27. package/bin/lib/tui/services/ExtensionService.ts +140 -129
  28. package/bin/lib/tui/services/GeminiService.ts +367 -337
  29. package/bin/lib/tui/services/ServiceManager.ts +344 -322
  30. package/bin/lib/tui/services/SocketService.ts +168 -168
  31. package/bin/lib/tui/services/ViteService.ts +88 -88
  32. package/bin/lib/tui/services/index.ts +47 -22
  33. package/bin/lib/utils/ai-scaffold.js +291 -280
  34. package/bin/lib/utils/extract-config.js +157 -140
  35. package/bin/lib/utils/files.js +82 -86
  36. package/bin/lib/utils/index.js +7 -7
  37. package/bin/lib/utils/paths.js +34 -34
  38. package/bin/lib/utils/prompts.js +194 -169
  39. package/bin/lib/utils/ssl.js +79 -81
  40. package/browser-extensions/README.md +0 -1
  41. package/browser-extensions/chrome/background.js +244 -237
  42. package/browser-extensions/chrome/content.js +32 -29
  43. package/browser-extensions/chrome/devtools.html +7 -7
  44. package/browser-extensions/chrome/devtools.js +19 -19
  45. package/browser-extensions/chrome/inspector.js +802 -767
  46. package/browser-extensions/chrome/manifest.json +71 -63
  47. package/browser-extensions/chrome/panel.html +674 -636
  48. package/browser-extensions/chrome/panel.js +722 -712
  49. package/browser-extensions/chrome/popup.html +586 -543
  50. package/browser-extensions/chrome/popup.js +282 -244
  51. package/browser-extensions/chrome/rules.json +1 -1
  52. package/browser-extensions/chrome/test-chrome.html +216 -136
  53. package/browser-extensions/chrome/test-mixed-content.html +284 -189
  54. package/browser-extensions/chrome/test-uri-pattern.html +221 -198
  55. package/browser-extensions/firefox/README.md +9 -6
  56. package/browser-extensions/firefox/background.js +221 -218
  57. package/browser-extensions/firefox/content.js +55 -52
  58. package/browser-extensions/firefox/debug-errors.html +386 -228
  59. package/browser-extensions/firefox/debug-https.html +153 -105
  60. package/browser-extensions/firefox/devtools.html +7 -7
  61. package/browser-extensions/firefox/devtools.js +23 -20
  62. package/browser-extensions/firefox/inspector.js +802 -767
  63. package/browser-extensions/firefox/manifest.json +68 -68
  64. package/browser-extensions/firefox/panel.html +674 -636
  65. package/browser-extensions/firefox/panel.js +722 -712
  66. package/browser-extensions/firefox/popup.html +572 -535
  67. package/browser-extensions/firefox/popup.js +281 -236
  68. package/browser-extensions/firefox/test-gramercy.html +170 -125
  69. package/browser-extensions/firefox/test-imports.html +59 -55
  70. package/browser-extensions/firefox/test-masking.html +231 -140
  71. package/browser-extensions/firefox/test-uri-pattern.html +221 -198
  72. package/dist/tui/App.d.ts +1 -1
  73. package/dist/tui/App.d.ts.map +1 -1
  74. package/dist/tui/App.js +154 -150
  75. package/dist/tui/App.js.map +1 -1
  76. package/dist/tui/components/AIPanel.d.ts.map +1 -1
  77. package/dist/tui/components/AIPanel.js +42 -35
  78. package/dist/tui/components/AIPanel.js.map +1 -1
  79. package/dist/tui/components/CommandInput.d.ts +1 -1
  80. package/dist/tui/components/CommandInput.d.ts.map +1 -1
  81. package/dist/tui/components/CommandInput.js +92 -62
  82. package/dist/tui/components/CommandInput.js.map +1 -1
  83. package/dist/tui/components/GeminiPanel.d.ts.map +1 -1
  84. package/dist/tui/components/GeminiPanel.js +37 -30
  85. package/dist/tui/components/GeminiPanel.js.map +1 -1
  86. package/dist/tui/components/Header.d.ts.map +1 -1
  87. package/dist/tui/components/Header.js +1 -1
  88. package/dist/tui/components/Header.js.map +1 -1
  89. package/dist/tui/components/LogPanel.d.ts +1 -1
  90. package/dist/tui/components/LogPanel.d.ts.map +1 -1
  91. package/dist/tui/components/LogPanel.js +26 -24
  92. package/dist/tui/components/LogPanel.js.map +1 -1
  93. package/dist/tui/components/TabBar.d.ts +2 -2
  94. package/dist/tui/components/TabBar.d.ts.map +1 -1
  95. package/dist/tui/components/TabBar.js +11 -11
  96. package/dist/tui/components/TabBar.js.map +1 -1
  97. package/dist/tui/components/WelcomeScreen.d.ts.map +1 -1
  98. package/dist/tui/components/WelcomeScreen.js +6 -6
  99. package/dist/tui/components/WelcomeScreen.js.map +1 -1
  100. package/dist/tui/index.d.ts.map +1 -1
  101. package/dist/tui/index.js +8 -8
  102. package/dist/tui/index.js.map +1 -1
  103. package/dist/tui/services/AIService.d.ts +2 -2
  104. package/dist/tui/services/AIService.d.ts.map +1 -1
  105. package/dist/tui/services/AIService.js +165 -125
  106. package/dist/tui/services/AIService.js.map +1 -1
  107. package/dist/tui/services/ExtensionService.d.ts +1 -1
  108. package/dist/tui/services/ExtensionService.d.ts.map +1 -1
  109. package/dist/tui/services/ExtensionService.js +33 -26
  110. package/dist/tui/services/ExtensionService.js.map +1 -1
  111. package/dist/tui/services/GeminiService.d.ts +1 -1
  112. package/dist/tui/services/GeminiService.d.ts.map +1 -1
  113. package/dist/tui/services/GeminiService.js +87 -76
  114. package/dist/tui/services/GeminiService.js.map +1 -1
  115. package/dist/tui/services/ServiceManager.d.ts +3 -3
  116. package/dist/tui/services/ServiceManager.d.ts.map +1 -1
  117. package/dist/tui/services/ServiceManager.js +72 -58
  118. package/dist/tui/services/ServiceManager.js.map +1 -1
  119. package/dist/tui/services/SocketService.d.ts.map +1 -1
  120. package/dist/tui/services/SocketService.js +32 -32
  121. package/dist/tui/services/SocketService.js.map +1 -1
  122. package/dist/tui/services/ViteService.d.ts.map +1 -1
  123. package/dist/tui/services/ViteService.js +26 -28
  124. package/dist/tui/services/ViteService.js.map +1 -1
  125. package/dist/tui/services/index.d.ts +6 -6
  126. package/dist/tui/services/index.d.ts.map +1 -1
  127. package/dist/tui/services/index.js +6 -6
  128. package/dist/tui/services/index.js.map +1 -1
  129. package/mcp/gxp-api-server.js +83 -81
  130. package/package.json +109 -93
  131. package/runtime/PortalContainer.vue +258 -234
  132. package/runtime/dev-tools/DevToolsModal.vue +153 -155
  133. package/runtime/dev-tools/LayoutSwitcher.vue +144 -140
  134. package/runtime/dev-tools/MockDataEditor.vue +456 -433
  135. package/runtime/dev-tools/SocketSimulator.vue +379 -371
  136. package/runtime/dev-tools/StoreInspector.vue +517 -455
  137. package/runtime/dev-tools/index.js +5 -5
  138. package/runtime/fallback-layouts/PrivateLayout.vue +2 -2
  139. package/runtime/fallback-layouts/PublicLayout.vue +2 -2
  140. package/runtime/fallback-layouts/SystemLayout.vue +2 -2
  141. package/runtime/gxpStringsPlugin.js +159 -134
  142. package/runtime/index.html +17 -19
  143. package/runtime/main.js +24 -22
  144. package/runtime/mock-api/auth-middleware.js +15 -15
  145. package/runtime/mock-api/image-generator.js +46 -46
  146. package/runtime/mock-api/index.js +55 -55
  147. package/runtime/mock-api/response-generator.js +116 -105
  148. package/runtime/mock-api/route-generator.js +107 -84
  149. package/runtime/mock-api/socket-triggers.js +94 -93
  150. package/runtime/mock-api/spec-loader.js +79 -80
  151. package/runtime/package.json +3 -0
  152. package/runtime/server.js +68 -68
  153. package/runtime/stores/gxpPortalConfigStore.js +204 -186
  154. package/runtime/stores/index.js +2 -2
  155. package/runtime/vite-inspector-plugin.js +858 -707
  156. package/runtime/vite-source-tracker-plugin.js +132 -113
  157. package/runtime/vite.config.js +191 -139
  158. package/scripts/launch-chrome.js +41 -41
  159. package/scripts/pack-chrome.js +38 -39
  160. package/socket-events/AiSessionMessageCreated.json +17 -17
  161. package/socket-events/SocialStreamPostCreated.json +23 -23
  162. package/socket-events/SocialStreamPostVariantCompleted.json +22 -22
  163. package/template/.claude/agents/gxp-developer.md +100 -99
  164. package/template/.claude/settings.json +7 -7
  165. package/template/AGENTS.md +30 -23
  166. package/template/GEMINI.md +20 -20
  167. package/template/README.md +70 -53
  168. package/template/app-manifest.json +2 -4
  169. package/template/configuration.json +10 -10
  170. package/template/default-styling.css +1 -1
  171. package/template/index.html +18 -20
  172. package/template/main.js +24 -22
  173. package/template/src/DemoPage.vue +415 -362
  174. package/template/src/Plugin.vue +76 -85
  175. package/template/src/stores/index.js +3 -3
  176. package/template/src/stores/test-data.json +164 -172
  177. package/template/theme-layouts/AdditionalStyling.css +50 -50
  178. package/template/theme-layouts/PrivateLayout.vue +8 -12
  179. package/template/theme-layouts/PublicLayout.vue +8 -12
  180. package/template/theme-layouts/SystemLayout.vue +8 -12
  181. package/template/vite.extend.js +45 -0
  182. package/template/vite.config.js +0 -409
@@ -1 +1 @@
1
- []
1
+ []
@@ -1,145 +1,225 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html>
3
- <head>
4
- <title>Test Chrome Extension</title>
5
- <style>
6
- body { font-family: Arial, sans-serif; padding: 20px; max-width: 800px; }
7
- .test-section { margin: 20px 0; padding: 20px; border: 2px solid #ddd; border-radius: 8px; }
8
- .success { border-color: #28a745; background: #f8fff8; }
9
- .warning { border-color: #ffc107; background: #fffbf0; }
10
- .info { border-color: #17a2b8; background: #f0f9ff; }
11
- .code { background: #e9ecef; padding: 8px; font-family: monospace; margin: 8px 0; word-break: break-all; }
12
- .results { background: #f5f5f5; padding: 10px; margin: 10px 0; border-radius: 4px; max-height: 300px; overflow-y: auto; }
13
- button { padding: 10px 15px; margin: 5px; cursor: pointer; background: #007bff; color: white; border: none; border-radius: 4px; }
14
- </style>
15
- </head>
16
- <body>
17
- <h1>🔧 Chrome Extension Test</h1>
18
-
19
- <div class="test-section info">
20
- <h2>📋 Chrome Extension Differences</h2>
21
- <ul>
22
- <li><strong>Manifest V3:</strong> Uses service workers instead of background scripts</li>
23
- <li><strong>declarativeNetRequest:</strong> Replaces webRequest API for better performance</li>
24
- <li><strong>chrome API:</strong> Uses <code>chrome.*</code> instead of <code>browser.*</code></li>
25
- <li><strong>Limited Regex:</strong> Chrome's declarativeNetRequest has more limited pattern matching</li>
26
- </ul>
27
- </div>
3
+ <head>
4
+ <title>Test Chrome Extension</title>
5
+ <style>
6
+ body {
7
+ font-family: Arial, sans-serif;
8
+ padding: 20px;
9
+ max-width: 800px;
10
+ }
11
+ .test-section {
12
+ margin: 20px 0;
13
+ padding: 20px;
14
+ border: 2px solid #ddd;
15
+ border-radius: 8px;
16
+ }
17
+ .success {
18
+ border-color: #28a745;
19
+ background: #f8fff8;
20
+ }
21
+ .warning {
22
+ border-color: #ffc107;
23
+ background: #fffbf0;
24
+ }
25
+ .info {
26
+ border-color: #17a2b8;
27
+ background: #f0f9ff;
28
+ }
29
+ .code {
30
+ background: #e9ecef;
31
+ padding: 8px;
32
+ font-family: monospace;
33
+ margin: 8px 0;
34
+ word-break: break-all;
35
+ }
36
+ .results {
37
+ background: #f5f5f5;
38
+ padding: 10px;
39
+ margin: 10px 0;
40
+ border-radius: 4px;
41
+ max-height: 300px;
42
+ overflow-y: auto;
43
+ }
44
+ button {
45
+ padding: 10px 15px;
46
+ margin: 5px;
47
+ cursor: pointer;
48
+ background: #007bff;
49
+ color: white;
50
+ border: none;
51
+ border-radius: 4px;
52
+ }
53
+ </style>
54
+ </head>
55
+ <body>
56
+ <h1>🔧 Chrome Extension Test</h1>
28
57
 
29
- <div class="test-section warning">
30
- <h2>⚠️ Installation Steps for Chrome</h2>
31
- <ol>
32
- <li>Open Chrome and go to <code>chrome://extensions/</code></li>
33
- <li>Enable "Developer mode" (toggle in top right)</li>
34
- <li>Click "Load unpacked"</li>
35
- <li>Select the <code>chrome</code> folder</li>
36
- <li>The extension should appear in your toolbar</li>
37
- </ol>
38
- </div>
58
+ <div class="test-section info">
59
+ <h2>📋 Chrome Extension Differences</h2>
60
+ <ul>
61
+ <li>
62
+ <strong>Manifest V3:</strong> Uses service workers instead of
63
+ background scripts
64
+ </li>
65
+ <li>
66
+ <strong>declarativeNetRequest:</strong> Replaces webRequest API for
67
+ better performance
68
+ </li>
69
+ <li>
70
+ <strong>chrome API:</strong> Uses <code>chrome.*</code> instead of
71
+ <code>browser.*</code>
72
+ </li>
73
+ <li>
74
+ <strong>Limited Regex:</strong> Chrome's declarativeNetRequest has
75
+ more limited pattern matching
76
+ </li>
77
+ </ul>
78
+ </div>
39
79
 
40
- <div class="test-section success">
41
- <h2>🧪 Chrome Extension Tests</h2>
42
- <button onclick="checkChromeExtension()">Check Chrome Extension</button>
43
- <button onclick="testChromeRequest()">Test Chrome Request</button>
44
- <button onclick="testDeclarativeRules()">Test Declarative Rules</button>
45
- <div id="chromeResults" class="results"></div>
46
- </div>
80
+ <div class="test-section warning">
81
+ <h2>⚠️ Installation Steps for Chrome</h2>
82
+ <ol>
83
+ <li>Open Chrome and go to <code>chrome://extensions/</code></li>
84
+ <li>Enable "Developer mode" (toggle in top right)</li>
85
+ <li>Click "Load unpacked"</li>
86
+ <li>Select the <code>chrome</code> folder</li>
87
+ <li>The extension should appear in your toolbar</li>
88
+ </ol>
89
+ </div>
47
90
 
48
- <div class="test-section">
49
- <h2>📊 Chrome vs Firefox Comparison</h2>
50
- <table style="width: 100%; border-collapse: collapse;">
51
- <tr style="background: #f8f9fa;">
52
- <th style="border: 1px solid #ddd; padding: 8px;">Feature</th>
53
- <th style="border: 1px solid #ddd; padding: 8px;">Firefox</th>
54
- <th style="border: 1px solid #ddd; padding: 8px;">Chrome</th>
55
- </tr>
56
- <tr>
57
- <td style="border: 1px solid #ddd; padding: 8px;">API</td>
58
- <td style="border: 1px solid #ddd; padding: 8px;">browser.*</td>
59
- <td style="border: 1px solid #ddd; padding: 8px;">chrome.*</td>
60
- </tr>
61
- <tr>
62
- <td style="border: 1px solid #ddd; padding: 8px;">Manifest</td>
63
- <td style="border: 1px solid #ddd; padding: 8px;">v2</td>
64
- <td style="border: 1px solid #ddd; padding: 8px;">v3</td>
65
- </tr>
66
- <tr>
67
- <td style="border: 1px solid #ddd; padding: 8px;">Background</td>
68
- <td style="border: 1px solid #ddd; padding: 8px;">Persistent scripts</td>
69
- <td style="border: 1px solid #ddd; padding: 8px;">Service worker</td>
70
- </tr>
71
- <tr>
72
- <td style="border: 1px solid #ddd; padding: 8px;">Network API</td>
73
- <td style="border: 1px solid #ddd; padding: 8px;">webRequest (full regex)</td>
74
- <td style="border: 1px solid #ddd; padding: 8px;">declarativeNetRequest (limited patterns)</td>
75
- </tr>
76
- </table>
77
- </div>
91
+ <div class="test-section success">
92
+ <h2>🧪 Chrome Extension Tests</h2>
93
+ <button onclick="checkChromeExtension()">Check Chrome Extension</button>
94
+ <button onclick="testChromeRequest()">Test Chrome Request</button>
95
+ <button onclick="testDeclarativeRules()">Test Declarative Rules</button>
96
+ <div id="chromeResults" class="results"></div>
97
+ </div>
78
98
 
79
- <script>
80
- function log(message, type = 'info') {
81
- const results = document.getElementById('chromeResults');
82
- const timestamp = new Date().toLocaleTimeString();
83
- const icon = type === 'error' ? '❌' : type === 'success' ? '✅' : type === 'warning' ? '⚠️' : 'ℹ️';
84
- results.innerHTML += `<div>${timestamp} ${icon} ${message}</div>`;
85
- }
99
+ <div class="test-section">
100
+ <h2>📊 Chrome vs Firefox Comparison</h2>
101
+ <table style="width: 100%; border-collapse: collapse">
102
+ <tr style="background: #f8f9fa">
103
+ <th style="border: 1px solid #ddd; padding: 8px">Feature</th>
104
+ <th style="border: 1px solid #ddd; padding: 8px">Firefox</th>
105
+ <th style="border: 1px solid #ddd; padding: 8px">Chrome</th>
106
+ </tr>
107
+ <tr>
108
+ <td style="border: 1px solid #ddd; padding: 8px">API</td>
109
+ <td style="border: 1px solid #ddd; padding: 8px">browser.*</td>
110
+ <td style="border: 1px solid #ddd; padding: 8px">chrome.*</td>
111
+ </tr>
112
+ <tr>
113
+ <td style="border: 1px solid #ddd; padding: 8px">Manifest</td>
114
+ <td style="border: 1px solid #ddd; padding: 8px">v2</td>
115
+ <td style="border: 1px solid #ddd; padding: 8px">v3</td>
116
+ </tr>
117
+ <tr>
118
+ <td style="border: 1px solid #ddd; padding: 8px">Background</td>
119
+ <td style="border: 1px solid #ddd; padding: 8px">
120
+ Persistent scripts
121
+ </td>
122
+ <td style="border: 1px solid #ddd; padding: 8px">Service worker</td>
123
+ </tr>
124
+ <tr>
125
+ <td style="border: 1px solid #ddd; padding: 8px">Network API</td>
126
+ <td style="border: 1px solid #ddd; padding: 8px">
127
+ webRequest (full regex)
128
+ </td>
129
+ <td style="border: 1px solid #ddd; padding: 8px">
130
+ declarativeNetRequest (limited patterns)
131
+ </td>
132
+ </tr>
133
+ </table>
134
+ </div>
86
135
 
87
- async function checkChromeExtension() {
88
- log('Checking Chrome extension status...');
89
-
90
- try {
91
- if (typeof chrome === 'undefined' || !chrome.runtime) {
92
- log('Chrome extension API not available', 'error');
93
- return;
94
- }
95
-
96
- const response = await chrome.runtime.sendMessage({ action: 'getState' });
97
- log(`✅ Chrome extension responding: Enabled=${response.enabled}, Rules=${response.rules.length}`, 'success');
98
-
99
- response.rules.forEach((rule, index) => {
100
- log(`Rule ${index + 1}: ${rule.pattern} → ${rule.redirect} (Mask: ${rule.maskUrl || false})`, 'info');
101
- });
102
-
103
- } catch (error) {
104
- log(`Chrome extension communication failed: ${error.message}`, 'error');
105
- }
106
- }
136
+ <script>
137
+ function log(message, type = "info") {
138
+ const results = document.getElementById("chromeResults")
139
+ const timestamp = new Date().toLocaleTimeString()
140
+ const icon =
141
+ type === "error"
142
+ ? "❌"
143
+ : type === "success"
144
+ ? "✅"
145
+ : type === "warning"
146
+ ? "⚠️"
147
+ : "ℹ️"
148
+ results.innerHTML += `<div>${timestamp} ${icon} ${message}</div>`
149
+ }
107
150
 
108
- async function testChromeRequest() {
109
- log('Testing request with Chrome extension...');
110
-
111
- try {
112
- const response = await fetch('https://httpbin.org/get?test=chrome');
113
- const data = await response.json();
114
- log(`Request successful: ${response.status}`, 'success');
115
- log(`Response URL: ${data.url}`, 'info');
116
- log('Check Chrome DevTools Network tab to see if request was intercepted', 'info');
117
- } catch (error) {
118
- log(`Request failed: ${error.message}`, 'error');
119
- }
120
- }
151
+ async function checkChromeExtension() {
152
+ log("Checking Chrome extension status...")
121
153
 
122
- async function testDeclarativeRules() {
123
- log('Testing Chrome declarativeNetRequest rules...');
124
-
125
- try {
126
- if (chrome.declarativeNetRequest) {
127
- const rules = await chrome.declarativeNetRequest.getDynamicRules();
128
- log(`Found ${rules.length} declarative rules`, 'success');
129
-
130
- rules.forEach((rule, index) => {
131
- log(`Rule ${rule.id}: ${rule.condition.regexFilter || rule.condition.urlFilter} → ${rule.action.type}`, 'info');
132
- });
133
- } else {
134
- log('declarativeNetRequest API not available', 'warning');
135
- }
136
- } catch (error) {
137
- log(`Error checking declarative rules: ${error.message}`, 'error');
138
- }
139
- }
154
+ try {
155
+ if (typeof chrome === "undefined" || !chrome.runtime) {
156
+ log("Chrome extension API not available", "error")
157
+ return
158
+ }
140
159
 
141
- // Auto-run extension check on page load
142
- window.addEventListener('load', checkChromeExtension);
143
- </script>
144
- </body>
145
- </html>
160
+ const response = await chrome.runtime.sendMessage({
161
+ action: "getState",
162
+ })
163
+ log(
164
+ `✅ Chrome extension responding: Enabled=${response.enabled}, Rules=${response.rules.length}`,
165
+ "success",
166
+ )
167
+
168
+ response.rules.forEach((rule, index) => {
169
+ log(
170
+ `Rule ${index + 1}: ${rule.pattern} → ${rule.redirect} (Mask: ${rule.maskUrl || false})`,
171
+ "info",
172
+ )
173
+ })
174
+ } catch (error) {
175
+ log(
176
+ `Chrome extension communication failed: ${error.message}`,
177
+ "error",
178
+ )
179
+ }
180
+ }
181
+
182
+ async function testChromeRequest() {
183
+ log("Testing request with Chrome extension...")
184
+
185
+ try {
186
+ const response = await fetch("https://httpbin.org/get?test=chrome")
187
+ const data = await response.json()
188
+ log(`Request successful: ${response.status}`, "success")
189
+ log(`Response URL: ${data.url}`, "info")
190
+ log(
191
+ "Check Chrome DevTools Network tab to see if request was intercepted",
192
+ "info",
193
+ )
194
+ } catch (error) {
195
+ log(`Request failed: ${error.message}`, "error")
196
+ }
197
+ }
198
+
199
+ async function testDeclarativeRules() {
200
+ log("Testing Chrome declarativeNetRequest rules...")
201
+
202
+ try {
203
+ if (chrome.declarativeNetRequest) {
204
+ const rules = await chrome.declarativeNetRequest.getDynamicRules()
205
+ log(`Found ${rules.length} declarative rules`, "success")
206
+
207
+ rules.forEach((rule, index) => {
208
+ log(
209
+ `Rule ${rule.id}: ${rule.condition.regexFilter || rule.condition.urlFilter} → ${rule.action.type}`,
210
+ "info",
211
+ )
212
+ })
213
+ } else {
214
+ log("declarativeNetRequest API not available", "warning")
215
+ }
216
+ } catch (error) {
217
+ log(`Error checking declarative rules: ${error.message}`, "error")
218
+ }
219
+ }
220
+
221
+ // Auto-run extension check on page load
222
+ window.addEventListener("load", checkChromeExtension)
223
+ </script>
224
+ </body>
225
+ </html>