@opentabs-dev/browser-extension 0.0.52 → 0.0.53

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 (74) hide show
  1. package/dist/background-message-handlers.d.ts +24 -3
  2. package/dist/background-message-handlers.d.ts.map +1 -1
  3. package/dist/background-message-handlers.js +251 -9
  4. package/dist/background-message-handlers.js.map +1 -1
  5. package/dist/background.js +593 -117
  6. package/dist/background.js.map +1 -1
  7. package/dist/confirmation-badge.d.ts +2 -2
  8. package/dist/confirmation-badge.d.ts.map +1 -1
  9. package/dist/confirmation-badge.js +49 -17
  10. package/dist/confirmation-badge.js.map +1 -1
  11. package/dist/constants.d.ts +8 -0
  12. package/dist/constants.d.ts.map +1 -1
  13. package/dist/constants.js +8 -0
  14. package/dist/constants.js.map +1 -1
  15. package/dist/extension-messages.d.ts +49 -6
  16. package/dist/extension-messages.d.ts.map +1 -1
  17. package/dist/known-methods.d.ts +2 -2
  18. package/dist/known-methods.d.ts.map +1 -1
  19. package/dist/known-methods.js +1 -0
  20. package/dist/known-methods.js.map +1 -1
  21. package/dist/message-router.d.ts.map +1 -1
  22. package/dist/message-router.js +119 -11
  23. package/dist/message-router.js.map +1 -1
  24. package/dist/offscreen/index.js +11 -2
  25. package/dist/offscreen/index.js.map +1 -1
  26. package/dist/server-request.d.ts +19 -0
  27. package/dist/server-request.d.ts.map +1 -0
  28. package/dist/server-request.js +79 -0
  29. package/dist/server-request.js.map +1 -0
  30. package/dist/server-state-cache.d.ts +41 -0
  31. package/dist/server-state-cache.d.ts.map +1 -0
  32. package/dist/server-state-cache.js +75 -0
  33. package/dist/server-state-cache.js.map +1 -0
  34. package/dist/side-panel/App.d.ts.map +1 -1
  35. package/dist/side-panel/App.js +28 -59
  36. package/dist/side-panel/App.js.map +1 -1
  37. package/dist/side-panel/bridge.d.ts +19 -33
  38. package/dist/side-panel/bridge.d.ts.map +1 -1
  39. package/dist/side-panel/bridge.js +27 -91
  40. package/dist/side-panel/bridge.js.map +1 -1
  41. package/dist/side-panel/components/BrowserToolsCard.d.ts.map +1 -1
  42. package/dist/side-panel/components/BrowserToolsCard.js +2 -1
  43. package/dist/side-panel/components/BrowserToolsCard.js.map +1 -1
  44. package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
  45. package/dist/side-panel/components/PluginCard.js +2 -1
  46. package/dist/side-panel/components/PluginCard.js.map +1 -1
  47. package/dist/side-panel/components/PluginIcon.d.ts +2 -1
  48. package/dist/side-panel/components/PluginIcon.d.ts.map +1 -1
  49. package/dist/side-panel/components/PluginIcon.js +23 -5
  50. package/dist/side-panel/components/PluginIcon.js.map +1 -1
  51. package/dist/side-panel/components/ToolIcon.d.ts +2 -1
  52. package/dist/side-panel/components/ToolIcon.d.ts.map +1 -1
  53. package/dist/side-panel/components/ToolIcon.js +17 -3
  54. package/dist/side-panel/components/ToolIcon.js.map +1 -1
  55. package/dist/side-panel/components/ToolRow.d.ts.map +1 -1
  56. package/dist/side-panel/components/ToolRow.js +1 -2
  57. package/dist/side-panel/components/ToolRow.js.map +1 -1
  58. package/dist/side-panel/components/retro/Button.d.ts +1 -1
  59. package/dist/side-panel/hooks/useServerNotifications.d.ts +1 -3
  60. package/dist/side-panel/hooks/useServerNotifications.d.ts.map +1 -1
  61. package/dist/side-panel/hooks/useServerNotifications.js +2 -8
  62. package/dist/side-panel/hooks/useServerNotifications.js.map +1 -1
  63. package/dist/side-panel/side-panel.js +1201 -1210
  64. package/dist/side-panel/styles.css +1 -1
  65. package/dist/side-panel-toggle.d.ts +6 -0
  66. package/dist/side-panel-toggle.d.ts.map +1 -1
  67. package/dist/side-panel-toggle.js +6 -0
  68. package/dist/side-panel-toggle.js.map +1 -1
  69. package/dist/tab-state.d.ts +19 -1
  70. package/dist/tab-state.d.ts.map +1 -1
  71. package/dist/tab-state.js +128 -3
  72. package/dist/tab-state.js.map +1 -1
  73. package/manifest.json +1 -1
  74. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  declare const notifyConfirmationRequest: (params: Record<string, unknown>) => void;
8
8
  /**
9
- * Decrement pending confirmation count, update badge, and clear the Chrome
9
+ * Decrement pending confirmation count, update badge, and sync the Chrome
10
10
  * notification for the resolved confirmation.
11
11
  *
12
12
  * When an id is provided, this function is idempotent — calling it twice with
@@ -27,7 +27,7 @@ declare const clearConfirmationBadge: (id?: string) => void;
27
27
  * timeout does not double-clear the badge.
28
28
  */
29
29
  declare const clearConfirmationBackgroundTimeout: (id: string) => void;
30
- /** Reset all pending confirmation tracking and clear all Chrome notifications (e.g., on disconnect) */
30
+ /** Reset all pending confirmation tracking and clear the notification (e.g., on disconnect) */
31
31
  declare const clearAllConfirmationBadges: () => void;
32
32
  /**
33
33
  * Register the chrome.notifications.onClicked listener that opens the side
@@ -1 +1 @@
1
- {"version":3,"file":"confirmation-badge.d.ts","sourceRoot":"","sources":["../src/confirmation-badge.ts"],"names":[],"mappings":"AA2CA;;;;;GAKG;AACH,QAAA,MAAM,yBAAyB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IA2CpE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,IAe7C,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,kCAAkC,GAAI,IAAI,MAAM,KAAG,IASxD,CAAC;AAEF,uGAAuG;AACvG,QAAA,MAAM,0BAA0B,QAAO,IAStC,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,QAAO,IAcjC,CAAC;AAEF,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,kCAAkC,EAClC,0BAA0B,EAC1B,qBAAqB,GACtB,CAAC"}
1
+ {"version":3,"file":"confirmation-badge.d.ts","sourceRoot":"","sources":["../src/confirmation-badge.ts"],"names":[],"mappings":"AAqFA;;;;;GAKG;AACH,QAAA,MAAM,yBAAyB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAoCpE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,IAgB7C,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,kCAAkC,GAAI,IAAI,MAAM,KAAG,IASxD,CAAC;AAEF,+FAA+F;AAC/F,QAAA,MAAM,0BAA0B,QAAO,IAUtC,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,QAAO,IAcjC,CAAC;AAEF,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,kCAAkC,EAClC,0BAA0B,EAC1B,qBAAqB,GACtB,CAAC"}
@@ -1,5 +1,10 @@
1
+ import { isSidePanelOpen } from './side-panel-toggle.js';
1
2
  /** Pending confirmation count for badge tracking */
2
3
  let pendingConfirmationCount = 0;
4
+ /** Single notification ID for the consolidated confirmation notification */
5
+ const NOTIFICATION_ID = 'opentabs-confirmation';
6
+ /** Tool/domain info for each pending confirmation, used for notification content */
7
+ const pendingConfirmationInfo = new Map();
3
8
  /**
4
9
  * Background-side timeouts keyed by confirmation id. When the side panel is
5
10
  * closed, it never sends sp:confirmationResponse or sp:confirmationTimeout, so
@@ -36,6 +41,39 @@ const updateConfirmationBadge = () => {
36
41
  chrome.action.setBadgeText({ text: '' }).catch(() => { });
37
42
  }
38
43
  };
44
+ /**
45
+ * Sync the Chrome desktop notification with the current confirmation state.
46
+ * Shows a single consolidated notification — tool info for 1 pending, count
47
+ * for multiple. Clears the notification when no confirmations are pending or
48
+ * the side panel is open (the dialog is already visible).
49
+ */
50
+ const syncConfirmationNotification = () => {
51
+ if (pendingConfirmationCount <= 0 || isSidePanelOpen()) {
52
+ chrome.notifications.clear(NOTIFICATION_ID).catch(() => { });
53
+ return;
54
+ }
55
+ let message;
56
+ if (pendingConfirmationCount === 1 && pendingConfirmationInfo.size === 1) {
57
+ const info = pendingConfirmationInfo.values().next().value;
58
+ message = info.domain ? `${info.tool} on ${info.domain}` : info.tool;
59
+ }
60
+ else if (pendingConfirmationCount > 1) {
61
+ message = `${pendingConfirmationCount} tools awaiting approval`;
62
+ }
63
+ else {
64
+ message = '1 tool awaiting approval';
65
+ }
66
+ chrome.notifications
67
+ .create(NOTIFICATION_ID, {
68
+ type: 'basic',
69
+ iconUrl: chrome.runtime.getURL('icons/icon-128.png'),
70
+ title: 'OpenTabs \u2014 Approval Required',
71
+ message,
72
+ priority: 2,
73
+ requireInteraction: true,
74
+ })
75
+ .catch(() => { });
76
+ };
39
77
  /**
40
78
  * Show badge and Chrome notification when a confirmation request arrives.
41
79
  * The badge count persists until confirmations are resolved via clearConfirmationBadge().
@@ -44,7 +82,7 @@ const updateConfirmationBadge = () => {
44
82
  */
45
83
  const notifyConfirmationRequest = (params) => {
46
84
  const tool = typeof params.tool === 'string' ? params.tool : 'unknown tool';
47
- const domain = typeof params.domain === 'string' ? params.domain : 'unknown domain';
85
+ const domain = typeof params.domain === 'string' ? params.domain : null;
48
86
  const id = typeof params.id === 'string' ? params.id : String(Date.now());
49
87
  const timeoutMs = typeof params.timeoutMs === 'number' ? params.timeoutMs : 0;
50
88
  // If this id already has a pending timeout, clear it and don't increment the
@@ -60,6 +98,7 @@ const notifyConfirmationRequest = (params) => {
60
98
  pendingConfirmationCount++;
61
99
  updateConfirmationBadge();
62
100
  }
101
+ pendingConfirmationInfo.set(id, { tool, domain });
63
102
  // Set a background timeout slightly longer than the server-side timeout so
64
103
  // the badge clears automatically when the side panel is closed and cannot
65
104
  // send sp:confirmationResponse or sp:confirmationTimeout. Uses a fallback
@@ -73,19 +112,10 @@ const notifyConfirmationRequest = (params) => {
73
112
  clearedConfirmationIds.delete(id);
74
113
  }, effectiveTimeoutMs + CONFIRMATION_BACKGROUND_TIMEOUT_BUFFER_MS);
75
114
  confirmationTimeouts.set(id, bgTimeoutId);
76
- chrome.notifications
77
- .create(`opentabs-confirm-${id}`, {
78
- type: 'basic',
79
- iconUrl: chrome.runtime.getURL('icons/icon-128.png'),
80
- title: 'OpenTabs: Approval Required',
81
- message: `${tool} on ${domain} — Click to open side panel`,
82
- priority: 2,
83
- requireInteraction: true,
84
- })
85
- .catch(() => { });
115
+ syncConfirmationNotification();
86
116
  };
87
117
  /**
88
- * Decrement pending confirmation count, update badge, and clear the Chrome
118
+ * Decrement pending confirmation count, update badge, and sync the Chrome
89
119
  * notification for the resolved confirmation.
90
120
  *
91
121
  * When an id is provided, this function is idempotent — calling it twice with
@@ -104,10 +134,11 @@ const clearConfirmationBadge = (id) => {
104
134
  return;
105
135
  }
106
136
  clearedConfirmationIds.add(id);
107
- chrome.notifications.clear(`opentabs-confirm-${id}`).catch(() => { });
137
+ pendingConfirmationInfo.delete(id);
108
138
  }
109
139
  pendingConfirmationCount = Math.max(0, pendingConfirmationCount - 1);
110
140
  updateConfirmationBadge();
141
+ syncConfirmationNotification();
111
142
  // Prune the id when no background timeout is pending — without a pending
112
143
  // timeout, no timeout callback can race, so the entry is no longer needed.
113
144
  if (id !== undefined && !confirmationTimeouts.has(id)) {
@@ -130,16 +161,17 @@ const clearConfirmationBackgroundTimeout = (id) => {
130
161
  clearedConfirmationIds.delete(id);
131
162
  }
132
163
  };
133
- /** Reset all pending confirmation tracking and clear all Chrome notifications (e.g., on disconnect) */
164
+ /** Reset all pending confirmation tracking and clear the notification (e.g., on disconnect) */
134
165
  const clearAllConfirmationBadges = () => {
135
- for (const [id, timeoutId] of confirmationTimeouts.entries()) {
166
+ for (const [, timeoutId] of confirmationTimeouts.entries()) {
136
167
  clearTimeout(timeoutId);
137
- chrome.notifications.clear(`opentabs-confirm-${id}`).catch(() => { });
138
168
  }
139
169
  confirmationTimeouts.clear();
140
170
  clearedConfirmationIds.clear();
171
+ pendingConfirmationInfo.clear();
141
172
  pendingConfirmationCount = 0;
142
173
  updateConfirmationBadge();
174
+ chrome.notifications.clear(NOTIFICATION_ID).catch(() => { });
143
175
  };
144
176
  /**
145
177
  * Register the chrome.notifications.onClicked listener that opens the side
@@ -148,7 +180,7 @@ const clearAllConfirmationBadges = () => {
148
180
  */
149
181
  const initConfirmationBadge = () => {
150
182
  chrome.notifications.onClicked.addListener(notificationId => {
151
- if (notificationId.startsWith('opentabs-confirm-')) {
183
+ if (notificationId === NOTIFICATION_ID) {
152
184
  chrome.windows
153
185
  .getCurrent()
154
186
  .then(w => {
@@ -1 +1 @@
1
- {"version":3,"file":"confirmation-badge.js","sourceRoot":"","sources":["../src/confirmation-badge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confirmation-badge.js","sourceRoot":"","sources":["../src/confirmation-badge.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,14 @@ export declare const MAX_SCRIPT_TIMEOUT_MS = 295000;
31
31
  * reported as "unavailable" rather than blocking state computation.
32
32
  */
33
33
  export declare const IS_READY_TIMEOUT_MS = 5000;
34
+ /**
35
+ * Interval for periodic isReady() re-evaluation (ms).
36
+ *
37
+ * While connected to the MCP server, the extension periodically re-probes
38
+ * all non-closed plugin tabs to detect auth token expiration, SPA logouts,
39
+ * or other readiness changes that occur without a page navigation.
40
+ */
41
+ export declare const READINESS_POLL_INTERVAL_MS = 30000;
34
42
  /** Delay before chrome.runtime.reload() to allow the WebSocket response to flush */
35
43
  export declare const RELOAD_FLUSH_DELAY_MS = 100;
36
44
  /** Delay (ms) before retrying adapter injection after a hash verification failure */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,uBAAuB,CAAC;AACpD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAC7C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,OAAQ,CAAC;AACzC,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,kEAAkE;AAClE,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,0FAA0F;AAC1F,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,4EAA4E;AAC5E,eAAO,MAAM,cAAc,QAAmB,CAAC;AAC/C,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAC3C,sEAAsE;AACtE,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAC7C,wFAAwF;AACxF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,qFAAqF;AACrF,eAAO,MAAM,4BAA4B,QAAS,CAAC;AACnD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD,8GAA8G;AAC9G,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,OAAuC,CAAC;AACzF,mEAAmE;AACnE,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAqC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,uBAAuB,CAAC;AACpD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAC7C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,OAAQ,CAAC;AACzC;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,kEAAkE;AAClE,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,0FAA0F;AAC1F,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,4EAA4E;AAC5E,eAAO,MAAM,cAAc,QAAmB,CAAC;AAC/C,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAC3C,sEAAsE;AACtE,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAC7C,wFAAwF;AACxF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,qFAAqF;AACrF,eAAO,MAAM,4BAA4B,QAAS,CAAC;AACnD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD,8GAA8G;AAC9G,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,OAAuC,CAAC;AACzF,mEAAmE;AACnE,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAqC,CAAC"}
package/dist/constants.js CHANGED
@@ -31,6 +31,14 @@ export const MAX_SCRIPT_TIMEOUT_MS = 295_000;
31
31
  * reported as "unavailable" rather than blocking state computation.
32
32
  */
33
33
  export const IS_READY_TIMEOUT_MS = 5_000;
34
+ /**
35
+ * Interval for periodic isReady() re-evaluation (ms).
36
+ *
37
+ * While connected to the MCP server, the extension periodically re-probes
38
+ * all non-closed plugin tabs to detect auth token expiration, SPA logouts,
39
+ * or other readiness changes that occur without a page navigation.
40
+ */
41
+ export const READINESS_POLL_INTERVAL_MS = 30_000;
34
42
  /** Delay before chrome.runtime.reload() to allow the WebSocket response to flush */
35
43
  export const RELOAD_FLUSH_DELAY_MS = 100;
36
44
  /** Delay (ms) before retrying adapter injection after a hash verification failure */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACpD,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,wFAAwF;AACvI,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,sBAAsB,CAAC;AAClE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,qFAAqF;AACrF,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,gFAAgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAC5C,gEAAgE;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAC9C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,uFAAuF;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AACjC,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AACzC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,gFAAgF;AAChF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,wFAAwF;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,qFAAqF;AACrF,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AACnD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,8GAA8G;AAC9G,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzF,mEAAmE;AACnE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,kBAAkB,IAAI,KAAK,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACpD,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,wFAAwF;AACvI,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,sBAAsB,CAAC;AAClE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,qFAAqF;AACrF,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,gFAAgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAC5C,gEAAgE;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAC9C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,uFAAuF;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AACjC,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AACzC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,gFAAgF;AAChF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,wFAAwF;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,qFAAqF;AACrF,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AACnD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,8GAA8G;AAC9G,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzF,mEAAmE;AACnE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,kBAAkB,IAAI,KAAK,CAAC"}
@@ -31,15 +31,14 @@ export interface WsSetUrlMessage {
31
31
  type: 'ws:setUrl';
32
32
  url: string;
33
33
  }
34
- /** Side panel → Background: send a JSON-RPC message to the MCP server */
35
- export interface BgSendMessage {
36
- type: 'bg:send';
37
- data: unknown;
38
- }
39
34
  /** Side panel → Background: query WebSocket connection state */
40
35
  export interface BgGetConnectionStateMessage {
41
36
  type: 'bg:getConnectionState';
42
37
  }
38
+ /** Side panel → Background: request full merged state for initial render */
39
+ export interface BgGetFullStateMessage {
40
+ type: 'bg:getFullState';
41
+ }
43
42
  /** Background → Offscreen: request log entries from the offscreen LogCollector */
44
43
  export interface OffscreenGetLogsMessage {
45
44
  type: 'offscreen:getLogs';
@@ -116,13 +115,57 @@ export interface SpConfirmationTimeoutMessage {
116
115
  type: 'sp:confirmationTimeout';
117
116
  id: string;
118
117
  }
118
+ /** Side panel → Background: toggle a single tool's enabled state */
119
+ export interface BgSetToolEnabledMessage {
120
+ type: 'bg:setToolEnabled';
121
+ plugin: string;
122
+ tool: string;
123
+ enabled: boolean;
124
+ }
125
+ /** Side panel → Background: toggle all tools for a plugin */
126
+ export interface BgSetAllToolsEnabledMessage {
127
+ type: 'bg:setAllToolsEnabled';
128
+ plugin: string;
129
+ enabled: boolean;
130
+ }
131
+ /** Side panel → Background: toggle a browser tool's enabled state */
132
+ export interface BgSetBrowserToolEnabledMessage {
133
+ type: 'bg:setBrowserToolEnabled';
134
+ tool: string;
135
+ enabled: boolean;
136
+ }
137
+ /** Side panel → Background: toggle all browser tools' enabled state */
138
+ export interface BgSetAllBrowserToolsEnabledMessage {
139
+ type: 'bg:setAllBrowserToolsEnabled';
140
+ enabled: boolean;
141
+ }
142
+ /** Side panel → Background: search npm registry for plugins */
143
+ export interface BgSearchPluginsMessage {
144
+ type: 'bg:searchPlugins';
145
+ query: string;
146
+ }
147
+ /** Side panel → Background: install a plugin by package name */
148
+ export interface BgInstallPluginMessage {
149
+ type: 'bg:installPlugin';
150
+ name: string;
151
+ }
152
+ /** Side panel → Background: remove an installed plugin */
153
+ export interface BgRemovePluginMessage {
154
+ type: 'bg:removePlugin';
155
+ name: string;
156
+ }
157
+ /** Side panel → Background: update a plugin to the latest registry version */
158
+ export interface BgUpdatePluginMessage {
159
+ type: 'bg:updatePlugin';
160
+ name: string;
161
+ }
119
162
  /** Side panel → Background → Offscreen: MCP server port changed */
120
163
  export interface PortChangedMessage {
121
164
  type: 'port-changed';
122
165
  port: number;
123
166
  }
124
167
  /** All internal message types flowing through chrome.runtime.sendMessage */
125
- export type InternalMessage = OffscreenGetUrlMessage | WsStateMessage | WsDataMessage | WsSendMessage | WsGetStateMessage | WsSetUrlMessage | BgSendMessage | BgGetConnectionStateMessage | OffscreenGetLogsMessage | BgForceReconnectMessage | PluginLogsMessage | ToolProgressMessage | SpGetStateMessage | SpConnectionStateMessage | SpRelayMessage | SpConfirmationRequestMessage | SpConfirmationResponseMessage | SpConfirmationTimeoutMessage | PortChangedMessage;
168
+ export type InternalMessage = OffscreenGetUrlMessage | WsStateMessage | WsDataMessage | WsSendMessage | WsGetStateMessage | WsSetUrlMessage | BgGetConnectionStateMessage | BgGetFullStateMessage | BgSetToolEnabledMessage | BgSetAllToolsEnabledMessage | BgSetBrowserToolEnabledMessage | BgSetAllBrowserToolsEnabledMessage | BgSearchPluginsMessage | BgInstallPluginMessage | BgRemovePluginMessage | BgUpdatePluginMessage | OffscreenGetLogsMessage | BgForceReconnectMessage | PluginLogsMessage | ToolProgressMessage | SpGetStateMessage | SpConnectionStateMessage | SpRelayMessage | SpConfirmationRequestMessage | SpConfirmationResponseMessage | SpConfirmationTimeoutMessage | PortChangedMessage;
126
169
  /** Tab state info for a single plugin — shared shape used by tab.stateChanged payloads */
127
170
  export interface PluginTabStateInfo {
128
171
  state: TabState;
@@ -1 +1 @@
1
- {"version":3,"file":"extension-messages.d.ts","sourceRoot":"","sources":["../src/extension-messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extension-messages.d.ts","sourceRoot":"","sources":["../src/extension-messages.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  * they stay in sync. A unit test verifies the invariant.
7
7
  */
8
8
  /** Methods routed to handlers in the background script's dispatch table */
9
- export declare const DISPATCH_METHODS: readonly ["sync.full", "plugin.update", "plugin.uninstall", "tool.dispatch", "resource.read", "prompt.get", "browser.listTabs", "browser.openTab", "browser.closeTab", "browser.navigateTab", "browser.focusTab", "browser.getTabInfo", "browser.screenshotTab", "browser.getTabContent", "browser.getPageHtml", "browser.getStorage", "browser.clickElement", "browser.typeText", "browser.selectOption", "browser.waitForElement", "browser.queryElements", "browser.getCookies", "browser.setCookie", "browser.deleteCookies", "browser.enableNetworkCapture", "browser.getNetworkRequests", "browser.getWebSocketFrames", "browser.disableNetworkCapture", "browser.getConsoleLogs", "browser.clearConsoleLogs", "browser.executeScript", "browser.listResources", "browser.getResourceContent", "browser.pressKey", "browser.scroll", "browser.hoverElement", "browser.handleDialog", "extension.reload", "extension.getState", "extension.getLogs", "extension.getSidePanel", "extension.checkAdapter", "extension.forceReconnect"];
9
+ export declare const DISPATCH_METHODS: readonly ["sync.full", "plugin.update", "plugin.uninstall", "tool.dispatch", "resource.read", "prompt.get", "browser.listTabs", "browser.openTab", "browser.closeTab", "browser.navigateTab", "browser.focusTab", "browser.getTabInfo", "browser.screenshotTab", "browser.getTabContent", "browser.getPageHtml", "browser.getStorage", "browser.clickElement", "browser.typeText", "browser.selectOption", "browser.waitForElement", "browser.queryElements", "browser.getCookies", "browser.setCookie", "browser.deleteCookies", "browser.enableNetworkCapture", "browser.getNetworkRequests", "browser.getWebSocketFrames", "browser.disableNetworkCapture", "browser.getConsoleLogs", "browser.clearConsoleLogs", "browser.executeScript", "browser.listResources", "browser.getResourceContent", "browser.pressKey", "browser.scroll", "browser.hoverElement", "browser.handleDialog", "extension.reload", "extension.getState", "extension.getLogs", "extension.getSidePanel", "extension.checkAdapter", "extension.forceReconnect", "extension.getTabState"];
10
10
  /**
11
11
  * Methods allowed through the offscreen WebSocket filter but NOT routed to
12
12
  * a handler in methodHandlers. These are either:
@@ -15,5 +15,5 @@ export declare const DISPATCH_METHODS: readonly ["sync.full", "plugin.update", "
15
15
  */
16
16
  export declare const PASSTHROUGH_METHODS: readonly ["pong", "tool.invocationStart", "tool.invocationEnd", "confirmation.request", "plugins.changed"];
17
17
  /** All methods the offscreen document allows through the WebSocket filter */
18
- export declare const ALL_ALLOWED_METHODS: readonly ["sync.full", "plugin.update", "plugin.uninstall", "tool.dispatch", "resource.read", "prompt.get", "browser.listTabs", "browser.openTab", "browser.closeTab", "browser.navigateTab", "browser.focusTab", "browser.getTabInfo", "browser.screenshotTab", "browser.getTabContent", "browser.getPageHtml", "browser.getStorage", "browser.clickElement", "browser.typeText", "browser.selectOption", "browser.waitForElement", "browser.queryElements", "browser.getCookies", "browser.setCookie", "browser.deleteCookies", "browser.enableNetworkCapture", "browser.getNetworkRequests", "browser.getWebSocketFrames", "browser.disableNetworkCapture", "browser.getConsoleLogs", "browser.clearConsoleLogs", "browser.executeScript", "browser.listResources", "browser.getResourceContent", "browser.pressKey", "browser.scroll", "browser.hoverElement", "browser.handleDialog", "extension.reload", "extension.getState", "extension.getLogs", "extension.getSidePanel", "extension.checkAdapter", "extension.forceReconnect", "pong", "tool.invocationStart", "tool.invocationEnd", "confirmation.request", "plugins.changed"];
18
+ export declare const ALL_ALLOWED_METHODS: readonly ["sync.full", "plugin.update", "plugin.uninstall", "tool.dispatch", "resource.read", "prompt.get", "browser.listTabs", "browser.openTab", "browser.closeTab", "browser.navigateTab", "browser.focusTab", "browser.getTabInfo", "browser.screenshotTab", "browser.getTabContent", "browser.getPageHtml", "browser.getStorage", "browser.clickElement", "browser.typeText", "browser.selectOption", "browser.waitForElement", "browser.queryElements", "browser.getCookies", "browser.setCookie", "browser.deleteCookies", "browser.enableNetworkCapture", "browser.getNetworkRequests", "browser.getWebSocketFrames", "browser.disableNetworkCapture", "browser.getConsoleLogs", "browser.clearConsoleLogs", "browser.executeScript", "browser.listResources", "browser.getResourceContent", "browser.pressKey", "browser.scroll", "browser.hoverElement", "browser.handleDialog", "extension.reload", "extension.getState", "extension.getLogs", "extension.getSidePanel", "extension.checkAdapter", "extension.forceReconnect", "extension.getTabState", "pong", "tool.invocationStart", "tool.invocationEnd", "confirmation.request", "plugins.changed"];
19
19
  //# sourceMappingURL=known-methods.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"known-methods.d.ts","sourceRoot":"","sources":["../src/known-methods.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,2+BA4CnB,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,4GAMtB,CAAC;AAEX,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,4kCAAyD,CAAC"}
1
+ {"version":3,"file":"known-methods.d.ts","sourceRoot":"","sources":["../src/known-methods.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,ogCA6CnB,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,4GAMtB,CAAC;AAEX,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,qmCAAyD,CAAC"}
@@ -50,6 +50,7 @@ export const DISPATCH_METHODS = [
50
50
  'extension.getSidePanel',
51
51
  'extension.checkAdapter',
52
52
  'extension.forceReconnect',
53
+ 'extension.getTabState',
53
54
  ];
54
55
  /**
55
56
  * Methods allowed through the offscreen WebSocket filter but NOT routed to
@@ -1 +1 @@
1
- {"version":3,"file":"known-methods.js","sourceRoot":"","sources":["../src/known-methods.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,eAAe;IACf,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,qBAAqB;IACrB,kBAAkB;IAClB,oBAAoB;IACpB,uBAAuB;IACvB,uBAAuB;IACvB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,kBAAkB;IAClB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,8BAA8B;IAC9B,4BAA4B;IAC5B,4BAA4B;IAC5B,+BAA+B;IAC/B,wBAAwB;IACxB,0BAA0B;IAC1B,uBAAuB;IACvB,uBAAuB;IACvB,4BAA4B;IAC5B,kBAAkB;IAClB,gBAAgB;IAChB,sBAAsB;IACtB,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,wBAAwB;IACxB,wBAAwB;IACxB,0BAA0B;CAClB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM;IACN,sBAAsB;IACtB,oBAAoB;IACpB,sBAAsB;IACtB,iBAAiB;CACT,CAAC;AAEX,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,mBAAmB,CAAU,CAAC"}
1
+ {"version":3,"file":"known-methods.js","sourceRoot":"","sources":["../src/known-methods.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,eAAe;IACf,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,qBAAqB;IACrB,kBAAkB;IAClB,oBAAoB;IACpB,uBAAuB;IACvB,uBAAuB;IACvB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,kBAAkB;IAClB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,8BAA8B;IAC9B,4BAA4B;IAC5B,4BAA4B;IAC5B,+BAA+B;IAC/B,wBAAwB;IACxB,0BAA0B;IAC1B,uBAAuB;IACvB,uBAAuB;IACvB,4BAA4B;IAC5B,kBAAkB;IAClB,gBAAgB;IAChB,sBAAsB;IACtB,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,wBAAwB;IACxB,wBAAwB;IACxB,0BAA0B;IAC1B,uBAAuB;CACf,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM;IACN,sBAAsB;IACtB,oBAAoB;IACpB,sBAAsB;IACtB,iBAAiB;CACT,CAAC;AAEX,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,mBAAmB,CAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../src/message-router.ts"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoDnE,2EAA2E;AAC3E,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAiBD;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,GAAI,KAAK,OAAO,KAAG,sBAAsB,GAAG,IA+DtE,CAAC;AAgPF,6DAA6D;AAC7D,QAAA,MAAM,mBAAmB,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IA+C/D,CAAC;AAEF,oFAAoF;AACpF,QAAA,MAAM,kBAAkB,UAAoC,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../src/message-router.ts"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAKV,SAAS,EACT,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAoD9B,2EAA2E;AAC3E,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAiBD;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,GAAI,KAAK,OAAO,KAAG,sBAAsB,GAAG,IA+DtE,CAAC;AA+UF,6DAA6D;AAC7D,QAAA,MAAM,mBAAmB,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAiE/D,CAAC;AAEF,oFAAoF;AACpF,QAAA,MAAM,kBAAkB,UAAoC,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
@@ -7,7 +7,9 @@ import { forwardToSidePanel, sendTabStateNotification, sendToServer } from './me
7
7
  import { getAllPluginMeta, removePlugin, removePluginsBatch, storePluginsBatch } from './plugin-storage.js';
8
8
  import { checkRateLimit } from './rate-limiter.js';
9
9
  import { handleResourceRead, handlePromptGet } from './resource-prompt-dispatch.js';
10
- import { clearPluginTabState, computePluginTabState, sendTabSyncAll, updateLastKnownState } from './tab-state.js';
10
+ import { consumeServerResponse } from './server-request.js';
11
+ import { getServerStateCache, updateServerStateCache } from './server-state-cache.js';
12
+ import { clearPluginTabState, computePluginTabState, getLastKnownStates, sendTabSyncAll, startReadinessPoll, updateLastKnownState, } from './tab-state.js';
11
13
  import { handleToolDispatch } from './tool-dispatch.js';
12
14
  /** Wraps an async request handler with the id !== undefined guard and .catch logging */
13
15
  const wrapAsync = (method, fn) => (params, id) => {
@@ -198,14 +200,64 @@ const handleSyncFull = async (params) => {
198
200
  console.warn('[opentabs] Plugin injection failed during sync.full:', result.reason);
199
201
  }
200
202
  }
201
- // Send tab.syncAll AFTER all plugins are stored and injected to avoid the
202
- // race condition where tab.syncAll runs before plugins are in storage.
203
- await sendTabSyncAll();
204
- // Notify the side panel so it refreshes its plugin list without user interaction
203
+ // Populate the server state cache with the full state payload from sync.full
204
+ // so the side panel can read it locally via bg:getFullState without a round-trip.
205
+ // Build a map from plugin name to raw object for extracting config-specific
206
+ // fields (source, sdkVersion, update) that the server now includes in sync.full.
207
+ const rawPluginMap = new Map();
208
+ for (const raw of rawPlugins) {
209
+ if (typeof raw === 'object' && raw !== null && typeof raw.name === 'string') {
210
+ rawPluginMap.set(raw.name, raw);
211
+ }
212
+ }
213
+ const cachePlugins = uniquePlugins.map(p => {
214
+ const raw = rawPluginMap.get(p.name);
215
+ return {
216
+ name: p.name,
217
+ displayName: p.displayName,
218
+ version: p.version,
219
+ trustTier: p.trustTier,
220
+ source: raw?.source === 'npm' || raw?.source === 'local' ? raw.source : 'local',
221
+ tabState: 'closed',
222
+ urlPatterns: p.urlPatterns,
223
+ tools: p.tools,
224
+ iconSvg: p.iconSvg,
225
+ iconInactiveSvg: p.iconInactiveSvg,
226
+ ...(typeof raw?.sdkVersion === 'string' ? { sdkVersion: raw.sdkVersion } : {}),
227
+ ...(raw?.update && typeof raw.update === 'object'
228
+ ? { update: raw.update }
229
+ : {}),
230
+ };
231
+ });
232
+ // Extract server-owned fields from the enriched sync.full payload
233
+ const rawFailedPlugins = Array.isArray(params.failedPlugins)
234
+ ? params.failedPlugins
235
+ : undefined;
236
+ const rawBrowserTools = Array.isArray(params.browserTools)
237
+ ? params.browserTools
238
+ : undefined;
239
+ const rawServerVersion = typeof params.serverVersion === 'string' ? params.serverVersion : undefined;
240
+ updateServerStateCache({
241
+ plugins: cachePlugins,
242
+ ...(rawFailedPlugins ? { failedPlugins: rawFailedPlugins } : {}),
243
+ ...(rawBrowserTools ? { browserTools: rawBrowserTools } : {}),
244
+ ...(rawServerVersion !== undefined ? { serverVersion: rawServerVersion } : {}),
245
+ });
246
+ // Notify the side panel immediately so it renders plugin cards from the
247
+ // background cache (metaCache + serverStateCache) without waiting for
248
+ // sendTabSyncAll to probe every plugin's isReady(). Tab states stream
249
+ // in progressively via tab.stateChanged as each probe completes.
205
250
  forwardToSidePanel({
206
251
  type: 'sp:serverMessage',
207
252
  data: { jsonrpc: '2.0', method: 'plugins.changed' },
208
253
  });
254
+ // Fire-and-forget: send tab.syncAll after all plugins are stored and
255
+ // injected, then start the readiness poll once probes complete. This
256
+ // runs after the side panel notification so the UI is not blocked by
257
+ // the O(N × round-trip) latency of probing every matching tab.
258
+ void sendTabSyncAll().then(() => {
259
+ startReadinessPoll();
260
+ });
209
261
  };
210
262
  const handlePluginUpdate = async (params) => {
211
263
  const validated = validatePluginPayload(params);
@@ -224,6 +276,28 @@ const handlePluginUpdate = async (params) => {
224
276
  const newState = await computePluginTabState(meta);
225
277
  await updateLastKnownState(meta.name, newState);
226
278
  sendTabStateNotification(meta.name, newState);
279
+ // Update the server state cache with the updated plugin's data so the
280
+ // side panel reads fresh tool enabled states and metadata from bg:getFullState.
281
+ // Merge the updated plugin into the existing cache's plugin list.
282
+ const existingCache = getServerStateCache();
283
+ const updatedPlugin = {
284
+ name: validated.name,
285
+ displayName: validated.displayName,
286
+ version: validated.version,
287
+ trustTier: validated.trustTier,
288
+ source: params.source === 'npm' || params.source === 'local' ? params.source : 'local',
289
+ tabState: newState.state,
290
+ urlPatterns: validated.urlPatterns,
291
+ tools: validated.tools,
292
+ iconSvg: validated.iconSvg,
293
+ iconInactiveSvg: validated.iconInactiveSvg,
294
+ ...(typeof params.sdkVersion === 'string' ? { sdkVersion: params.sdkVersion } : {}),
295
+ ...(params.update && typeof params.update === 'object'
296
+ ? { update: params.update }
297
+ : {}),
298
+ };
299
+ const otherPlugins = existingCache.plugins.filter(p => p.name !== validated.name);
300
+ updateServerStateCache({ plugins: [...otherPlugins, updatedPlugin] });
227
301
  // Notify the side panel so it refreshes its plugin list without user interaction
228
302
  forwardToSidePanel({
229
303
  type: 'sp:serverMessage',
@@ -270,6 +344,23 @@ const handlePluginUninstall = async (params, id) => {
270
344
  id,
271
345
  });
272
346
  };
347
+ /**
348
+ * Handle extension.getTabState: return the last-known tab state for all plugins.
349
+ * The MCP server sends this request to get live tab state for the /health endpoint.
350
+ */
351
+ const handleExtensionGetTabState = (_params, id) => {
352
+ const states = getLastKnownStates();
353
+ const tabStates = {};
354
+ for (const [pluginName, serialized] of states) {
355
+ try {
356
+ tabStates[pluginName] = JSON.parse(serialized);
357
+ }
358
+ catch {
359
+ tabStates[pluginName] = { state: 'closed', tabs: [] };
360
+ }
361
+ }
362
+ sendToServer({ jsonrpc: '2.0', result: { tabStates }, id });
363
+ };
273
364
  // ---------------------------------------------------------------------------
274
365
  // Dispatch table
275
366
  // ---------------------------------------------------------------------------
@@ -321,18 +412,35 @@ const methodHandlers = new Map([
321
412
  'extension.forceReconnect',
322
413
  wrapAsync('extension.forceReconnect', (_params, id) => handleExtensionForceReconnect(id)),
323
414
  ],
415
+ ['extension.getTabState', wrapSync('extension.getTabState', handleExtensionGetTabState)],
324
416
  ]);
325
417
  /** Handle a JSON-RPC message received from the MCP server */
326
418
  const handleServerMessage = (message) => {
327
419
  const method = message.method;
328
420
  const id = message.id;
329
421
  const params = (message.params ?? {});
330
- // Forward to the side panel only if useful: responses (matched by id in the
331
- // bridge's pending-request map) and the small set of notification methods the
332
- // side panel actually handles. This avoids sending large payloads
333
- // (sync.full metadata, tool.dispatch input) that the side panel would ignore.
334
- const isResponse = id !== undefined && !method;
335
- if (isResponse || (method && SIDE_PANEL_METHODS.has(method))) {
422
+ // Consume responses to pending server requests (sent via sendServerRequest
423
+ // in background mutation handlers). If consumed, the response resolves
424
+ // the corresponding promise no further processing needed.
425
+ if (!method && consumeServerResponse(message)) {
426
+ return;
427
+ }
428
+ // Update the server state cache from plugins.changed push notifications
429
+ // BEFORE forwarding to the side panel so the side panel reads fresh data.
430
+ if (method === 'plugins.changed') {
431
+ const payload = params;
432
+ updateServerStateCache({
433
+ ...(payload.plugins ? { plugins: payload.plugins } : {}),
434
+ ...(payload.failedPlugins ? { failedPlugins: payload.failedPlugins } : {}),
435
+ ...(payload.browserTools ? { browserTools: payload.browserTools } : {}),
436
+ ...(payload.serverVersion !== undefined ? { serverVersion: payload.serverVersion } : {}),
437
+ });
438
+ }
439
+ // Forward notifications to the side panel only if the method is in the
440
+ // allowed set. Responses (id without method) are NOT forwarded — the side
441
+ // panel no longer sends JSON-RPC requests through the background relay.
442
+ // Unclaimed responses (not consumed above) are discarded.
443
+ if (method && SIDE_PANEL_METHODS.has(method)) {
336
444
  forwardToSidePanel({ type: 'sp:serverMessage', data: message });
337
445
  }
338
446
  // Badge and notification for confirmation requests — alerts the user when a