@opentabs-dev/browser-extension 0.0.52 → 0.0.54

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 (88) hide show
  1. package/dist/background-message-handlers.d.ts +33 -6
  2. package/dist/background-message-handlers.d.ts.map +1 -1
  3. package/dist/background-message-handlers.js +335 -20
  4. package/dist/background-message-handlers.js.map +1 -1
  5. package/dist/background.js +859 -365
  6. package/dist/background.js.map +1 -1
  7. package/dist/browser-commands/extension-commands.d.ts.map +1 -1
  8. package/dist/browser-commands/extension-commands.js +5 -2
  9. package/dist/browser-commands/extension-commands.js.map +1 -1
  10. package/dist/browser-commands/key-press-command.d.ts +2 -0
  11. package/dist/browser-commands/key-press-command.d.ts.map +1 -1
  12. package/dist/browser-commands/key-press-command.js +42 -4
  13. package/dist/browser-commands/key-press-command.js.map +1 -1
  14. package/dist/confirmation-badge.d.ts +17 -3
  15. package/dist/confirmation-badge.d.ts.map +1 -1
  16. package/dist/confirmation-badge.js +55 -18
  17. package/dist/confirmation-badge.js.map +1 -1
  18. package/dist/constants.d.ts +8 -0
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +8 -0
  21. package/dist/constants.js.map +1 -1
  22. package/dist/dispatch-helpers.d.ts +1 -1
  23. package/dist/extension-messages.d.ts +48 -21
  24. package/dist/extension-messages.d.ts.map +1 -1
  25. package/dist/known-methods.d.ts +2 -2
  26. package/dist/known-methods.d.ts.map +1 -1
  27. package/dist/known-methods.js +1 -2
  28. package/dist/known-methods.js.map +1 -1
  29. package/dist/message-router.d.ts.map +1 -1
  30. package/dist/message-router.js +163 -24
  31. package/dist/message-router.js.map +1 -1
  32. package/dist/offscreen/index.js +17 -7
  33. package/dist/offscreen/index.js.map +1 -1
  34. package/dist/server-request.d.ts +19 -0
  35. package/dist/server-request.d.ts.map +1 -0
  36. package/dist/server-request.js +79 -0
  37. package/dist/server-request.js.map +1 -0
  38. package/dist/server-state-cache.d.ts +68 -0
  39. package/dist/server-state-cache.d.ts.map +1 -0
  40. package/dist/server-state-cache.js +208 -0
  41. package/dist/server-state-cache.js.map +1 -0
  42. package/dist/side-panel/App.d.ts.map +1 -1
  43. package/dist/side-panel/App.js +60 -58
  44. package/dist/side-panel/App.js.map +1 -1
  45. package/dist/side-panel/bridge.d.ts +31 -34
  46. package/dist/side-panel/bridge.d.ts.map +1 -1
  47. package/dist/side-panel/bridge.js +27 -91
  48. package/dist/side-panel/bridge.js.map +1 -1
  49. package/dist/side-panel/components/BrowserToolsCard.d.ts.map +1 -1
  50. package/dist/side-panel/components/BrowserToolsCard.js +2 -1
  51. package/dist/side-panel/components/BrowserToolsCard.js.map +1 -1
  52. package/dist/side-panel/components/ConfirmationDialog.d.ts +7 -2
  53. package/dist/side-panel/components/ConfirmationDialog.d.ts.map +1 -1
  54. package/dist/side-panel/components/ConfirmationDialog.js.map +1 -1
  55. package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
  56. package/dist/side-panel/components/PluginCard.js +2 -1
  57. package/dist/side-panel/components/PluginCard.js.map +1 -1
  58. package/dist/side-panel/components/PluginIcon.d.ts +2 -1
  59. package/dist/side-panel/components/PluginIcon.d.ts.map +1 -1
  60. package/dist/side-panel/components/PluginIcon.js +23 -5
  61. package/dist/side-panel/components/PluginIcon.js.map +1 -1
  62. package/dist/side-panel/components/ToolIcon.d.ts +2 -1
  63. package/dist/side-panel/components/ToolIcon.d.ts.map +1 -1
  64. package/dist/side-panel/components/ToolIcon.js +17 -3
  65. package/dist/side-panel/components/ToolIcon.js.map +1 -1
  66. package/dist/side-panel/components/ToolRow.d.ts.map +1 -1
  67. package/dist/side-panel/components/ToolRow.js +1 -2
  68. package/dist/side-panel/components/ToolRow.js.map +1 -1
  69. package/dist/side-panel/components/retro/Button.d.ts +1 -1
  70. package/dist/side-panel/hooks/useServerNotifications.d.ts +1 -3
  71. package/dist/side-panel/hooks/useServerNotifications.d.ts.map +1 -1
  72. package/dist/side-panel/hooks/useServerNotifications.js +15 -11
  73. package/dist/side-panel/hooks/useServerNotifications.js.map +1 -1
  74. package/dist/side-panel/side-panel.js +1254 -1218
  75. package/dist/side-panel/styles.css +1 -1
  76. package/dist/side-panel-toggle.d.ts +6 -0
  77. package/dist/side-panel-toggle.d.ts.map +1 -1
  78. package/dist/side-panel-toggle.js +6 -0
  79. package/dist/side-panel-toggle.js.map +1 -1
  80. package/dist/tab-state.d.ts +26 -1
  81. package/dist/tab-state.d.ts.map +1 -1
  82. package/dist/tab-state.js +163 -11
  83. package/dist/tab-state.js.map +1 -1
  84. package/dist/tool-dispatch.d.ts.map +1 -1
  85. package/dist/tool-dispatch.js +3 -2
  86. package/dist/tool-dispatch.js.map +1 -1
  87. package/manifest.json +1 -1
  88. package/package.json +1 -1
@@ -0,0 +1,79 @@
1
+ import { sendToServer } from './messaging.js';
2
+ /**
3
+ * JSON-RPC request/response correlator for background → MCP server communication.
4
+ *
5
+ * The background script uses sendServerRequest() to send JSON-RPC requests to
6
+ * the MCP server and receive responses as promises. Each request gets a unique
7
+ * integer ID; consumeServerResponse() matches incoming responses to pending
8
+ * requests by ID.
9
+ *
10
+ * This replaces the side panel's bridge.ts sendRequest relay — mutations now
11
+ * flow through the background script directly, keeping the side panel decoupled
12
+ * from the WebSocket.
13
+ */
14
+ const REQUEST_TIMEOUT_MS = 30_000;
15
+ /** Map of request ID → pending request. Responses are matched by ID. */
16
+ const pendingRequests = new Map();
17
+ /** Monotonically increasing request ID counter */
18
+ let nextId = 1;
19
+ /**
20
+ * Send a JSON-RPC request to the MCP server via the offscreen WebSocket
21
+ * and return a promise that resolves with the response result or rejects
22
+ * with the response error. Times out after 30 seconds.
23
+ */
24
+ const sendServerRequest = (method, params = {}) => {
25
+ const id = nextId++;
26
+ const data = { jsonrpc: '2.0', method, params, id };
27
+ return new Promise((resolve, reject) => {
28
+ const timerId = setTimeout(() => {
29
+ if (pendingRequests.has(id)) {
30
+ pendingRequests.delete(id);
31
+ reject(new Error(`Request ${method} timed out after ${REQUEST_TIMEOUT_MS}ms`));
32
+ }
33
+ }, REQUEST_TIMEOUT_MS);
34
+ pendingRequests.set(id, { resolve, reject, timerId });
35
+ sendToServer(data);
36
+ });
37
+ };
38
+ /**
39
+ * Check if an incoming message is a response to a pending request.
40
+ * If it matches (by id), resolves or rejects the promise and returns true.
41
+ * Returns false if the message is not a response or doesn't match any pending request.
42
+ */
43
+ const consumeServerResponse = (data) => {
44
+ // Responses have an id but no method
45
+ if (data.method !== undefined)
46
+ return false;
47
+ const rawId = data.id;
48
+ if (rawId === undefined || rawId === null)
49
+ return false;
50
+ const id = typeof rawId === 'number' ? rawId : undefined;
51
+ if (id === undefined)
52
+ return false;
53
+ const pending = pendingRequests.get(id);
54
+ if (!pending)
55
+ return false;
56
+ pendingRequests.delete(id);
57
+ clearTimeout(pending.timerId);
58
+ if (data.error !== undefined && data.error !== null) {
59
+ const err = data.error;
60
+ pending.reject(new Error(err.message ?? 'Unknown server error'));
61
+ }
62
+ else {
63
+ pending.resolve(data.result);
64
+ }
65
+ return true;
66
+ };
67
+ /**
68
+ * Reject all pending requests immediately. Called on WebSocket disconnect
69
+ * so handlers get fast errors instead of waiting for individual 30s timeouts.
70
+ */
71
+ const rejectAllPendingServerRequests = () => {
72
+ for (const [id, pending] of pendingRequests) {
73
+ pendingRequests.delete(id);
74
+ clearTimeout(pending.timerId);
75
+ pending.reject(new Error('Server disconnected'));
76
+ }
77
+ };
78
+ export { consumeServerResponse, rejectAllPendingServerRequests, sendServerRequest };
79
+ //# sourceMappingURL=server-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-request.js","sourceRoot":"","sources":["../src/server-request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { ConfigStateBrowserTool, ConfigStateFailedPlugin, ConfigStatePlugin } from '@opentabs-dev/shared';
2
+ /**
3
+ * In-memory cache of server-owned state. This mirrors the shape of
4
+ * ConfigStateResult from @opentabs-dev/shared so there is no translation
5
+ * layer when serving data to the side panel.
6
+ *
7
+ * The cache is populated from sync.full and plugins.changed push notifications.
8
+ * It is cleared on WebSocket disconnect and rebuilt from scratch on the next
9
+ * sync.full. The in-memory cache is the primary read path (instant). Every
10
+ * mutation writes through to chrome.storage.session (debounced 500ms) so
11
+ * the cache survives MV3 service worker suspension.
12
+ */
13
+ interface ServerStateCache {
14
+ plugins: ConfigStatePlugin[];
15
+ failedPlugins: ConfigStateFailedPlugin[];
16
+ browserTools: ConfigStateBrowserTool[];
17
+ serverVersion?: string;
18
+ }
19
+ /** Register a pending optimistic update for a single plugin tool. */
20
+ declare const addPendingPluginToolUpdate: (plugin: string, tool: string, enabled: boolean) => void;
21
+ /** Clear the pending optimistic update for a single plugin tool. */
22
+ declare const removePendingPluginToolUpdate: (plugin: string, tool: string) => void;
23
+ /** Register pending optimistic updates for all tools of a plugin. */
24
+ declare const addPendingPluginAllToolsUpdate: (plugin: string, toolNames: string[], enabled: boolean) => void;
25
+ /** Clear pending optimistic updates for all tools of a plugin. */
26
+ declare const removePendingPluginAllToolsUpdate: (plugin: string, toolNames: string[]) => void;
27
+ /** Register a pending optimistic update for a single browser tool. */
28
+ declare const addPendingBrowserToolUpdate: (tool: string, enabled: boolean) => void;
29
+ /** Clear the pending optimistic update for a single browser tool. */
30
+ declare const removePendingBrowserToolUpdate: (tool: string) => void;
31
+ /** Register pending optimistic updates for all browser tools. */
32
+ declare const addPendingAllBrowserToolsUpdate: (toolNames: string[], enabled: boolean) => void;
33
+ /** Clear pending optimistic updates for all browser tools. */
34
+ declare const removePendingAllBrowserToolsUpdate: (toolNames: string[]) => void;
35
+ /** Return a deep copy of the current server state cache. */
36
+ declare const getServerStateCache: () => ServerStateCache;
37
+ /**
38
+ * Merge a partial update into the server state cache. Only the provided
39
+ * fields are overwritten — omitted fields retain their previous values.
40
+ * The in-memory cache updates immediately; session storage write is debounced.
41
+ */
42
+ declare const updateServerStateCache: (partial: Partial<ServerStateCache>) => void;
43
+ /**
44
+ * Write the current in-memory cache to chrome.storage.session immediately,
45
+ * cancelling any pending debounced write. Called after sync.full populates
46
+ * the cache to ensure critical state survives MV3 service worker suspension
47
+ * without waiting for the 500ms debounce window.
48
+ */
49
+ declare const flushServerStateCacheToSession: () => void;
50
+ /**
51
+ * Clear the server state cache. Called on WebSocket disconnect so the
52
+ * next connection rebuilds state from sync.full without stale data.
53
+ * Clears both in-memory cache and chrome.storage.session.
54
+ */
55
+ declare const clearServerStateCache: () => void;
56
+ /**
57
+ * Load the server state cache from chrome.storage.session and populate the
58
+ * in-memory cache. Called on service worker wake to restore state that was
59
+ * persisted before suspension.
60
+ */
61
+ declare const loadServerStateCacheFromSession: () => Promise<void>;
62
+ /** Returns whether sync.full has populated the caches in the current session. */
63
+ declare const getCachesInitialized: () => boolean;
64
+ /** Mark caches as initialized after sync.full populates them. */
65
+ declare const setCachesInitialized: (value: boolean) => void;
66
+ export { addPendingAllBrowserToolsUpdate, addPendingBrowserToolUpdate, addPendingPluginAllToolsUpdate, addPendingPluginToolUpdate, clearServerStateCache, flushServerStateCacheToSession, getCachesInitialized, getServerStateCache, loadServerStateCacheFromSession, removePendingAllBrowserToolsUpdate, removePendingBrowserToolUpdate, removePendingPluginAllToolsUpdate, removePendingPluginToolUpdate, setCachesInitialized, updateServerStateCache, };
67
+ export type { ServerStateCache };
68
+ //# sourceMappingURL=server-state-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-state-cache.d.ts","sourceRoot":"","sources":["../src/server-state-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE/G;;;;;;;;;;GAUG;AACH,UAAU,gBAAgB;IACxB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,aAAa,EAAE,uBAAuB,EAAE,CAAC;IACzC,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAqDD,qEAAqE;AACrE,QAAA,MAAM,0BAA0B,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,OAAO,KAAG,IAOpF,CAAC;AAEF,oEAAoE;AACpE,QAAA,MAAM,6BAA6B,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,IAKrE,CAAC;AAEF,qEAAqE;AACrE,QAAA,MAAM,8BAA8B,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE,EAAE,SAAS,OAAO,KAAG,IAS/F,CAAC;AAEF,kEAAkE;AAClE,QAAA,MAAM,iCAAiC,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE,KAAG,IAOhF,CAAC;AAEF,sEAAsE;AACtE,QAAA,MAAM,2BAA2B,GAAI,MAAM,MAAM,EAAE,SAAS,OAAO,KAAG,IAErE,CAAC;AAEF,qEAAqE;AACrE,QAAA,MAAM,8BAA8B,GAAI,MAAM,MAAM,KAAG,IAEtD,CAAC;AAEF,iEAAiE;AACjE,QAAA,MAAM,+BAA+B,GAAI,WAAW,MAAM,EAAE,EAAE,SAAS,OAAO,KAAG,IAIhF,CAAC;AAEF,8DAA8D;AAC9D,QAAA,MAAM,kCAAkC,GAAI,WAAW,MAAM,EAAE,KAAG,IAIjE,CAAC;AA+BF,4DAA4D;AAC5D,QAAA,MAAM,mBAAmB,QAAO,gBAA0C,CAAC;AAE3E;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,GAAI,SAAS,OAAO,CAAC,gBAAgB,CAAC,KAAG,IAIpE,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,8BAA8B,QAAO,IAM1C,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,QAAO,IAYjC,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,+BAA+B,QAAa,OAAO,CAAC,IAAI,CAkB7D,CAAC;AAEF,iFAAiF;AACjF,QAAA,MAAM,oBAAoB,QAAO,OAA4B,CAAC;AAE9D,iEAAiE;AACjE,QAAA,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,IAE9C,CAAC;AAEF,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,mBAAmB,EACnB,+BAA+B,EAC/B,kCAAkC,EAClC,8BAA8B,EAC9B,iCAAiC,EACjC,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,GACvB,CAAC;AACF,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,208 @@
1
+ const SESSION_KEY = 'serverStateCache';
2
+ const CACHES_INITIALIZED_KEY = 'cachesInitialized';
3
+ const EMPTY_CACHE = {
4
+ plugins: [],
5
+ failedPlugins: [],
6
+ browserTools: [],
7
+ serverVersion: undefined,
8
+ };
9
+ let cache = { ...EMPTY_CACHE };
10
+ // ---------------------------------------------------------------------------
11
+ // Pending optimistic updates — protect in-flight toggle states from being
12
+ // overwritten by incoming plugins.changed notifications. Outer map key is
13
+ // plugin name, inner map key is tool name, value is the optimistic enabled
14
+ // state. Browser tools use a flat map keyed by tool name.
15
+ // ---------------------------------------------------------------------------
16
+ const pendingPluginToolUpdates = new Map();
17
+ const pendingBrowserToolUpdates = new Map();
18
+ /** Re-apply pending optimistic updates on top of the current cache. */
19
+ const reapplyPendingOptimisticUpdates = () => {
20
+ if (pendingPluginToolUpdates.size > 0) {
21
+ cache = {
22
+ ...cache,
23
+ plugins: cache.plugins.map(plugin => {
24
+ const toolOverrides = pendingPluginToolUpdates.get(plugin.name);
25
+ if (!toolOverrides)
26
+ return plugin;
27
+ return {
28
+ ...plugin,
29
+ tools: plugin.tools.map(tool => {
30
+ const override = toolOverrides.get(tool.name);
31
+ return override !== undefined ? { ...tool, enabled: override } : tool;
32
+ }),
33
+ };
34
+ }),
35
+ };
36
+ }
37
+ if (pendingBrowserToolUpdates.size > 0) {
38
+ cache = {
39
+ ...cache,
40
+ browserTools: cache.browserTools.map(bt => {
41
+ const override = pendingBrowserToolUpdates.get(bt.name);
42
+ return override !== undefined ? { ...bt, enabled: override } : bt;
43
+ }),
44
+ };
45
+ }
46
+ };
47
+ /** Register a pending optimistic update for a single plugin tool. */
48
+ const addPendingPluginToolUpdate = (plugin, tool, enabled) => {
49
+ let toolMap = pendingPluginToolUpdates.get(plugin);
50
+ if (!toolMap) {
51
+ toolMap = new Map();
52
+ pendingPluginToolUpdates.set(plugin, toolMap);
53
+ }
54
+ toolMap.set(tool, enabled);
55
+ };
56
+ /** Clear the pending optimistic update for a single plugin tool. */
57
+ const removePendingPluginToolUpdate = (plugin, tool) => {
58
+ const toolMap = pendingPluginToolUpdates.get(plugin);
59
+ if (!toolMap)
60
+ return;
61
+ toolMap.delete(tool);
62
+ if (toolMap.size === 0)
63
+ pendingPluginToolUpdates.delete(plugin);
64
+ };
65
+ /** Register pending optimistic updates for all tools of a plugin. */
66
+ const addPendingPluginAllToolsUpdate = (plugin, toolNames, enabled) => {
67
+ let toolMap = pendingPluginToolUpdates.get(plugin);
68
+ if (!toolMap) {
69
+ toolMap = new Map();
70
+ pendingPluginToolUpdates.set(plugin, toolMap);
71
+ }
72
+ for (const name of toolNames) {
73
+ toolMap.set(name, enabled);
74
+ }
75
+ };
76
+ /** Clear pending optimistic updates for all tools of a plugin. */
77
+ const removePendingPluginAllToolsUpdate = (plugin, toolNames) => {
78
+ const toolMap = pendingPluginToolUpdates.get(plugin);
79
+ if (!toolMap)
80
+ return;
81
+ for (const name of toolNames) {
82
+ toolMap.delete(name);
83
+ }
84
+ if (toolMap.size === 0)
85
+ pendingPluginToolUpdates.delete(plugin);
86
+ };
87
+ /** Register a pending optimistic update for a single browser tool. */
88
+ const addPendingBrowserToolUpdate = (tool, enabled) => {
89
+ pendingBrowserToolUpdates.set(tool, enabled);
90
+ };
91
+ /** Clear the pending optimistic update for a single browser tool. */
92
+ const removePendingBrowserToolUpdate = (tool) => {
93
+ pendingBrowserToolUpdates.delete(tool);
94
+ };
95
+ /** Register pending optimistic updates for all browser tools. */
96
+ const addPendingAllBrowserToolsUpdate = (toolNames, enabled) => {
97
+ for (const name of toolNames) {
98
+ pendingBrowserToolUpdates.set(name, enabled);
99
+ }
100
+ };
101
+ /** Clear pending optimistic updates for all browser tools. */
102
+ const removePendingAllBrowserToolsUpdate = (toolNames) => {
103
+ for (const name of toolNames) {
104
+ pendingBrowserToolUpdates.delete(name);
105
+ }
106
+ };
107
+ /**
108
+ * Tracks whether sync.full has populated the caches at least once in the
109
+ * current WebSocket session. Distinguishes "service worker woke from
110
+ * suspension" (cachesInitialized=true, caches empty) from "WebSocket just
111
+ * connected but sync.full has not arrived yet" (cachesInitialized=false,
112
+ * caches empty). Persisted to chrome.storage.session so it survives
113
+ * MV3 service worker suspension.
114
+ */
115
+ let cachesInitialized = false;
116
+ /** Debounce timer for session storage writes. */
117
+ let persistTimer;
118
+ /** Write the current in-memory cache to chrome.storage.session. */
119
+ const persistToSession = () => {
120
+ chrome.storage.session.set({ [SESSION_KEY]: cache, [CACHES_INITIALIZED_KEY]: cachesInitialized }).catch(() => {
121
+ // Best-effort persistence — session storage may not be available
122
+ });
123
+ };
124
+ /** Schedule a debounced write to session storage (500ms). */
125
+ const schedulePersist = () => {
126
+ if (persistTimer !== undefined)
127
+ clearTimeout(persistTimer);
128
+ persistTimer = setTimeout(() => {
129
+ persistTimer = undefined;
130
+ persistToSession();
131
+ }, 500);
132
+ };
133
+ /** Return a deep copy of the current server state cache. */
134
+ const getServerStateCache = () => structuredClone(cache);
135
+ /**
136
+ * Merge a partial update into the server state cache. Only the provided
137
+ * fields are overwritten — omitted fields retain their previous values.
138
+ * The in-memory cache updates immediately; session storage write is debounced.
139
+ */
140
+ const updateServerStateCache = (partial) => {
141
+ cache = { ...cache, ...partial };
142
+ reapplyPendingOptimisticUpdates();
143
+ schedulePersist();
144
+ };
145
+ /**
146
+ * Write the current in-memory cache to chrome.storage.session immediately,
147
+ * cancelling any pending debounced write. Called after sync.full populates
148
+ * the cache to ensure critical state survives MV3 service worker suspension
149
+ * without waiting for the 500ms debounce window.
150
+ */
151
+ const flushServerStateCacheToSession = () => {
152
+ if (persistTimer !== undefined) {
153
+ clearTimeout(persistTimer);
154
+ persistTimer = undefined;
155
+ }
156
+ persistToSession();
157
+ };
158
+ /**
159
+ * Clear the server state cache. Called on WebSocket disconnect so the
160
+ * next connection rebuilds state from sync.full without stale data.
161
+ * Clears both in-memory cache and chrome.storage.session.
162
+ */
163
+ const clearServerStateCache = () => {
164
+ cache = { ...EMPTY_CACHE };
165
+ cachesInitialized = false;
166
+ pendingPluginToolUpdates.clear();
167
+ pendingBrowserToolUpdates.clear();
168
+ if (persistTimer !== undefined) {
169
+ clearTimeout(persistTimer);
170
+ persistTimer = undefined;
171
+ }
172
+ chrome.storage.session.remove([SESSION_KEY, CACHES_INITIALIZED_KEY]).catch(() => {
173
+ // Best-effort removal
174
+ });
175
+ };
176
+ /**
177
+ * Load the server state cache from chrome.storage.session and populate the
178
+ * in-memory cache. Called on service worker wake to restore state that was
179
+ * persisted before suspension.
180
+ */
181
+ const loadServerStateCacheFromSession = async () => {
182
+ try {
183
+ const data = await chrome.storage.session.get([SESSION_KEY, CACHES_INITIALIZED_KEY]);
184
+ const stored = data[SESSION_KEY];
185
+ if (stored && typeof stored === 'object') {
186
+ cache = {
187
+ plugins: Array.isArray(stored.plugins) ? stored.plugins : [],
188
+ failedPlugins: Array.isArray(stored.failedPlugins) ? stored.failedPlugins : [],
189
+ browserTools: Array.isArray(stored.browserTools) ? stored.browserTools : [],
190
+ serverVersion: typeof stored.serverVersion === 'string' ? stored.serverVersion : undefined,
191
+ };
192
+ }
193
+ if (typeof data[CACHES_INITIALIZED_KEY] === 'boolean') {
194
+ cachesInitialized = data[CACHES_INITIALIZED_KEY];
195
+ }
196
+ }
197
+ catch {
198
+ // Session storage may not be available — keep empty cache
199
+ }
200
+ };
201
+ /** Returns whether sync.full has populated the caches in the current session. */
202
+ const getCachesInitialized = () => cachesInitialized;
203
+ /** Mark caches as initialized after sync.full populates them. */
204
+ const setCachesInitialized = (value) => {
205
+ cachesInitialized = value;
206
+ };
207
+ export { addPendingAllBrowserToolsUpdate, addPendingBrowserToolUpdate, addPendingPluginAllToolsUpdate, addPendingPluginToolUpdate, clearServerStateCache, flushServerStateCacheToSession, getCachesInitialized, getServerStateCache, loadServerStateCacheFromSession, removePendingAllBrowserToolsUpdate, removePendingBrowserToolUpdate, removePendingPluginAllToolsUpdate, removePendingPluginToolUpdate, setCachesInitialized, updateServerStateCache, };
208
+ //# sourceMappingURL=server-state-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-state-cache.js","sourceRoot":"","sources":["../src/server-state-cache.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/side-panel/App.tsx"],"names":[],"mappings":"AA+BA,QAAA,MAAM,GAAG,+CA8ZR,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/side-panel/App.tsx"],"names":[],"mappings":"AAiCA,QAAA,MAAM,GAAG,+CA4ZR,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { getConnectionState, fetchConfigState, handleServerResponse, rejectAllPending, sendConfirmationResponse, searchPlugins, installPlugin, removePlugin, updatePlugin, } from './bridge.js';
2
+ import { getFullState, sendConfirmationResponse, searchPlugins, installPlugin, removePlugin, updatePlugin, } from './bridge.js';
3
3
  import { BrowserToolsCard } from './components/BrowserToolsCard.js';
4
4
  import { ConfirmationDialog } from './components/ConfirmationDialog.js';
5
5
  import { DisconnectedState, LoadingState } from './components/EmptyStates.js';
@@ -32,9 +32,7 @@ const App = () => {
32
32
  const [removingPlugins, setRemovingPlugins] = useState(new Set());
33
33
  const [installErrors, setInstallErrors] = useState(new Map());
34
34
  const [pluginErrors, setPluginErrors] = useState(new Map());
35
- const lastFetchRef = useRef(0);
36
35
  const pluginErrorTimers = useRef(new Map());
37
- const pendingTabStates = useRef(new Map());
38
36
  const npmSearchTimer = useRef(undefined);
39
37
  const npmSearchCounter = useRef(0);
40
38
  const connectedRef = useRef(connected);
@@ -49,7 +47,6 @@ const App = () => {
49
47
  setPlugins,
50
48
  setActiveTools,
51
49
  setPendingConfirmations,
52
- pendingTabStates,
53
50
  });
54
51
  useEffect(() => () => {
55
52
  for (const timer of pluginErrorTimers.current.values())
@@ -162,49 +159,56 @@ const App = () => {
162
159
  });
163
160
  };
164
161
  useEffect(() => {
165
- const loadPlugins = () => {
166
- const now = Date.now();
167
- if (now - lastFetchRef.current < 200)
168
- return Promise.resolve();
169
- lastFetchRef.current = now;
170
- return fetchConfigState()
171
- .then(result => {
172
- let updatedPlugins = result.plugins ?? [];
173
- if (pendingTabStates.current.size > 0) {
174
- updatedPlugins = updatedPlugins.map(p => {
175
- const buffered = pendingTabStates.current.get(p.name);
176
- return buffered ? { ...p, tabState: buffered } : p;
177
- });
178
- pendingTabStates.current.clear();
162
+ /** Apply a full state snapshot from the background script to React state */
163
+ const applyFullState = (result) => {
164
+ setConnected(result.connected);
165
+ setDisconnectReason(result.disconnectReason);
166
+ setPlugins(result.plugins);
167
+ setFailedPlugins(result.failedPlugins);
168
+ setBrowserTools(() => {
169
+ if (result.browserTools.length === 0) {
170
+ return BROWSER_TOOLS_CATALOG.map(t => ({ ...t, enabled: true }));
179
171
  }
180
- setPlugins(updatedPlugins);
181
- setFailedPlugins(result.failedPlugins ?? []);
182
- setBrowserTools(prev => prev.map(t => {
183
- const serverTool = result.browserTools?.find(s => s.name === t.name);
184
- return serverTool ? { ...t, enabled: serverTool.enabled } : t;
185
- }));
186
- setServerVersion(result.serverVersion);
187
- setActiveTools(prev => {
188
- const next = new Set();
189
- for (const key of prev) {
190
- if (key.startsWith('browser:') || updatedPlugins.some(p => key.startsWith(p.name + ':'))) {
191
- next.add(key);
192
- }
172
+ const serverNames = new Set(result.browserTools.map(t => t.name));
173
+ const merged = [...result.browserTools];
174
+ for (const local of BROWSER_TOOLS_CATALOG) {
175
+ if (!serverNames.has(local.name))
176
+ merged.push({ ...local, enabled: true });
177
+ }
178
+ return merged;
179
+ });
180
+ setServerVersion(result.serverVersion);
181
+ setActiveTools(prev => {
182
+ const next = new Set();
183
+ for (const key of prev) {
184
+ if (key.startsWith('browser:') || result.plugins.some(p => key.startsWith(p.name + ':'))) {
185
+ next.add(key);
193
186
  }
194
- return next;
195
- });
196
- })
197
- .catch(() => {
198
- // Server may not be ready yet
187
+ }
188
+ return next;
199
189
  });
200
- };
201
- void getConnectionState()
202
- .then(async (result) => {
203
- setConnected(result.connected);
204
- setDisconnectReason(result.disconnectReason);
205
- if (result.connected) {
206
- await loadPlugins();
190
+ // Hydrate pending confirmations from the background. Replay each one
191
+ // through handleNotification so auto-removal timeouts are registered.
192
+ // handleNotification adds each confirmation to React state and sets up
193
+ // the auto-removal timeout using the background's receivedAt timestamp.
194
+ for (const c of result.pendingConfirmations ?? []) {
195
+ handleNotification({
196
+ method: 'confirmation.request',
197
+ params: {
198
+ id: c.id,
199
+ tool: c.tool,
200
+ domain: c.domain,
201
+ tabId: c.tabId,
202
+ paramsPreview: c.paramsPreview,
203
+ timeoutMs: c.timeoutMs,
204
+ receivedAt: c.receivedAt,
205
+ },
206
+ });
207
207
  }
208
+ };
209
+ void getFullState()
210
+ .then(result => {
211
+ applyFullState(result);
208
212
  setLoading(false);
209
213
  })
210
214
  .catch(() => {
@@ -231,8 +235,9 @@ const App = () => {
231
235
  setConnected(isConnected);
232
236
  setDisconnectReason(isConnected ? undefined : message.data.disconnectReason);
233
237
  if (isConnected) {
234
- // Keep stale plugin list visible while fresh data loads (prevents flash of empty state)
235
- void loadPlugins();
238
+ void getFullState()
239
+ .then(applyFullState)
240
+ .catch(() => { });
236
241
  }
237
242
  else {
238
243
  setPlugins([]);
@@ -245,19 +250,23 @@ const App = () => {
245
250
  clearTimeout(npmSearchTimer.current);
246
251
  setNpmResults([]);
247
252
  setNpmSearching(false);
248
- rejectAllPending();
253
+ setInstallingPlugins(new Set());
254
+ setRemovingPlugins(new Set());
255
+ setInstallErrors(new Map());
256
+ for (const timer of pluginErrorTimers.current.values())
257
+ clearTimeout(timer);
258
+ pluginErrorTimers.current.clear();
259
+ setPluginErrors(new Map());
249
260
  }
250
261
  sendResponse({ ok: true });
251
262
  return true;
252
263
  }
253
264
  if (message.type === 'sp:serverMessage') {
254
265
  const data = message.data;
255
- if (handleServerResponse(data)) {
256
- sendResponse({ ok: true });
257
- return true;
258
- }
259
266
  if (data.method === 'plugins.changed') {
260
- void loadPlugins();
267
+ void getFullState()
268
+ .then(applyFullState)
269
+ .catch(() => { });
261
270
  sendResponse({ ok: true });
262
271
  return true;
263
272
  }
@@ -265,13 +274,6 @@ const App = () => {
265
274
  sendResponse({ ok: true });
266
275
  return true;
267
276
  }
268
- if (message.type === 'ws:message') {
269
- const wsData = message.data;
270
- if (wsData?.method === 'sync.full') {
271
- void loadPlugins();
272
- }
273
- return false;
274
- }
275
277
  return false;
276
278
  };
277
279
  chrome.runtime.onMessage.addListener(listener);
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/side-panel/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/side-panel/App.tsx"],"names":[],"mappings":"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"}