@dynamicu/chromedebug-mcp 2.3.0 → 2.4.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.
@@ -880,6 +880,8 @@ async function handleLicenseActivation() {
880
880
 
881
881
  const result = await licenseClient.validateLicense(licenseKey);
882
882
  console.log('[License] Validation result:', result);
883
+ console.log('[License] Error value:', result.error);
884
+ console.log('[License] Error type:', typeof result.error);
883
885
 
884
886
  if (result.valid) {
885
887
  messageDiv.textContent = 'License activated successfully!';
@@ -887,8 +889,54 @@ async function handleLicenseActivation() {
887
889
  document.getElementById('license-key-input').value = '';
888
890
  await initializeLicenseUI(); // Refresh UI
889
891
  } else {
890
- messageDiv.textContent = result.error || 'Invalid license key';
891
- messageDiv.style.color = '#f44336';
892
+ // Check if activation limit reached
893
+ console.log('[License] Checking if activation limit reached...');
894
+ console.log('[License] result.error === "ACTIVATION_LIMIT_REACHED":', result.error === 'ACTIVATION_LIMIT_REACHED');
895
+ console.log('[License] result.error includes "activation limit":', result.error && result.error.toLowerCase().includes('activation limit'));
896
+
897
+ if (result.error === 'ACTIVATION_LIMIT_REACHED' ||
898
+ (result.error && result.error.toLowerCase().includes('activation limit'))) {
899
+ console.log('[License] Activation limit reached, opening activation manager');
900
+ messageDiv.textContent = 'Opening activation manager...';
901
+ messageDiv.style.color = '#ff9800';
902
+
903
+ // Store the license key temporarily so activation manager can access it
904
+ await chrome.storage.local.set({
905
+ 'ls_license_key': licenseKey.trim(),
906
+ 'activation_manager_open': true
907
+ });
908
+
909
+ // Open activation manager in a new window
910
+ const width = 500;
911
+ const height = 600;
912
+ const left = Math.round((screen.width - width) / 2);
913
+ const top = Math.round((screen.height - height) / 2);
914
+
915
+ const activationManagerUrl = chrome.runtime.getURL('activation-manager.html');
916
+ console.log('[License] Opening activation manager at URL:', activationManagerUrl);
917
+
918
+ chrome.windows.create({
919
+ url: activationManagerUrl,
920
+ type: 'popup',
921
+ width: width,
922
+ height: height,
923
+ left: left,
924
+ top: top
925
+ }, (window) => {
926
+ if (chrome.runtime.lastError) {
927
+ console.error('[License] Failed to open activation manager:', chrome.runtime.lastError);
928
+ messageDiv.textContent = 'Error: Could not open activation manager. See console.';
929
+ messageDiv.style.color = '#f44336';
930
+ } else {
931
+ console.log('[License] Activation manager window created:', window);
932
+ messageDiv.textContent = 'Please deactivate an existing activation to continue';
933
+ messageDiv.style.color = '#ff9800';
934
+ }
935
+ });
936
+ } else {
937
+ messageDiv.textContent = result.error || 'Invalid license key';
938
+ messageDiv.style.color = '#f44336';
939
+ }
892
940
  }
893
941
  }
894
942
 
@@ -898,6 +946,24 @@ function handleUpgradeClick() {
898
946
  chrome.tabs.create({url: LEMONSQUEEZY_CHECKOUT_URL});
899
947
  }
900
948
 
949
+ // Listen for messages from activation manager
950
+ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
951
+ if (message.type === 'RETRY_ACTIVATION' && message.licenseKey) {
952
+ console.log('[License] Retrying activation after deactivation');
953
+
954
+ // Set the license key in the input
955
+ const licenseKeyInput = document.getElementById('license-key-input');
956
+ if (licenseKeyInput) {
957
+ licenseKeyInput.value = message.licenseKey;
958
+ }
959
+
960
+ // Retry activation
961
+ handleLicenseActivation().then(() => {
962
+ console.log('[License] Retry activation complete');
963
+ });
964
+ }
965
+ });
966
+
901
967
  document.addEventListener('DOMContentLoaded', () => {
902
968
  console.log('DOM loaded, initializing popup');
903
969
 
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamicu/chromedebug-mcp",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "ChromeDebug MCP - MCP server that provides full control over a Chrome browser instance for debugging and automation with AI assistants like Claude Code",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -16,10 +16,15 @@ const extensionPath = join(packageRoot, 'chrome-extension');
16
16
 
17
17
  console.log('\nāœ… ChromeDebug MCP installed successfully!\n');
18
18
 
19
+ console.log('šŸš€ How ChromeDebug Works:');
20
+ console.log(' When Claude Code starts chromedebug-mcp, it automatically runs:');
21
+ console.log(' • MCP Server (for Claude Code communication)');
22
+ console.log(' • HTTP Server on port 3000-4000 (for Chrome extension)\n');
23
+
19
24
  console.log('šŸ†“ FREE Chrome Extension (5 recordings/day):');
20
25
  if (existsSync(zipPath)) {
21
- console.log(` Download: ${zipPath}`);
22
- console.log(' Extract and load in Chrome\n');
26
+ console.log(` Location: ${zipPath}`);
27
+ console.log(' Extract the zip file and load in Chrome\n');
23
28
  } else {
24
29
  console.log(` Source: ${extensionPath}`);
25
30
  console.log(' Load directly from this path\n');
@@ -31,10 +36,14 @@ console.log(' 2. Enable "Developer mode" (toggle in top right)');
31
36
  console.log(' 3. Click "Load unpacked"');
32
37
  if (existsSync(zipPath)) {
33
38
  console.log(' 4. Extract the zip file above');
34
- console.log(' 5. Select the extracted folder\n');
39
+ console.log(' 5. Select the extracted folder');
35
40
  } else {
36
- console.log(' 4. Navigate to and select the path above\n');
41
+ console.log(' 4. Navigate to and select the path above');
37
42
  }
43
+ console.log(' 6. The extension will auto-detect the HTTP server port\n');
44
+
45
+ console.log('ā„¹ļø No manual server startup needed!');
46
+ console.log(' Claude Code automatically starts both servers when it runs chromedebug-mcp\n');
38
47
 
39
48
  console.log('šŸ’Ž Want unlimited recordings?');
40
49
  console.log(' Upgrade to Pro: https://chromedebug.com/buy/996773cb-682b-430f-b9e3-9ce2130bd967\n');
@@ -37,6 +37,7 @@ module.exports = {
37
37
  { from: 'chrome-extension/popup.html', to: 'popup.html' },
38
38
  { from: 'chrome-extension/options.html', to: 'options.html' },
39
39
  { from: 'chrome-extension/offscreen.html', to: 'offscreen.html' },
40
+ { from: 'chrome-extension/activation-manager.html', to: 'activation-manager.html' },
40
41
 
41
42
  // Copy icons
42
43
  { from: 'chrome-extension/*.png', to: '[name][ext]' },
@@ -60,6 +61,8 @@ module.exports = {
60
61
  { from: 'chrome-extension/license-helper.js', to: 'license-helper.js' },
61
62
  { from: 'chrome-extension/firebase-client.js', to: 'firebase-client.js' },
62
63
  { from: 'chrome-extension/firebase-config.js', to: 'firebase-config.js' },
64
+ { from: 'chrome-extension/firebase-config.module.js', to: 'firebase-config.module.js' },
65
+ { from: 'chrome-extension/activation-manager.js', to: 'activation-manager.js' },
63
66
  { from: 'chrome-extension/frame-capture.js', to: 'frame-capture.js' },
64
67
  { from: 'chrome-extension/chrome-session-manager.js', to: 'chrome-session-manager.js' },
65
68
 
@@ -38,6 +38,7 @@ module.exports = {
38
38
  { from: 'chrome-extension/popup.html', to: 'popup.html' },
39
39
  { from: 'chrome-extension/options.html', to: 'options.html' },
40
40
  { from: 'chrome-extension/offscreen.html', to: 'offscreen.html' },
41
+ { from: 'chrome-extension/activation-manager.html', to: 'activation-manager.html' },
41
42
  { from: 'chrome-extension/pro/frame-editor.html', to: 'pro/frame-editor.html' },
42
43
 
43
44
  // Copy icons
@@ -62,6 +63,8 @@ module.exports = {
62
63
  { from: 'chrome-extension/license-helper.js', to: 'license-helper.js' },
63
64
  { from: 'chrome-extension/firebase-client.js', to: 'firebase-client.js' },
64
65
  { from: 'chrome-extension/firebase-config.js', to: 'firebase-config.js' },
66
+ { from: 'chrome-extension/firebase-config.module.js', to: 'firebase-config.module.js' },
67
+ { from: 'chrome-extension/activation-manager.js', to: 'activation-manager.js' },
65
68
  { from: 'chrome-extension/frame-capture.js', to: 'frame-capture.js' },
66
69
  { from: 'chrome-extension/chrome-session-manager.js', to: 'chrome-session-manager.js' },
67
70