@opentabs-dev/browser-extension 0.0.61 → 0.0.63

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 (87) hide show
  1. package/dist/background-message-handlers.d.ts +8 -14
  2. package/dist/background-message-handlers.d.ts.map +1 -1
  3. package/dist/background-message-handlers.js +54 -154
  4. package/dist/background-message-handlers.js.map +1 -1
  5. package/dist/background.js +112 -214
  6. package/dist/confirmation-badge.d.ts +3 -24
  7. package/dist/confirmation-badge.d.ts.map +1 -1
  8. package/dist/confirmation-badge.js +13 -98
  9. package/dist/confirmation-badge.js.map +1 -1
  10. package/dist/extension-messages.d.ts +19 -34
  11. package/dist/extension-messages.d.ts.map +1 -1
  12. package/dist/message-router.d.ts +2 -2
  13. package/dist/message-router.d.ts.map +1 -1
  14. package/dist/message-router.js +24 -10
  15. package/dist/message-router.js.map +1 -1
  16. package/dist/offscreen/index.js +4 -6
  17. package/dist/offscreen/index.js.map +1 -1
  18. package/dist/plugin-storage.js +3 -3
  19. package/dist/plugin-storage.js.map +1 -1
  20. package/dist/server-state-cache.d.ts +12 -6
  21. package/dist/server-state-cache.d.ts.map +1 -1
  22. package/dist/server-state-cache.js +51 -21
  23. package/dist/server-state-cache.js.map +1 -1
  24. package/dist/side-panel/App.d.ts.map +1 -1
  25. package/dist/side-panel/App.js +19 -26
  26. package/dist/side-panel/App.js.map +1 -1
  27. package/dist/side-panel/bridge.d.ts +13 -18
  28. package/dist/side-panel/bridge.d.ts.map +1 -1
  29. package/dist/side-panel/bridge.js +14 -13
  30. package/dist/side-panel/bridge.js.map +1 -1
  31. package/dist/side-panel/components/BrowserToolsCard.d.ts +4 -1
  32. package/dist/side-panel/components/BrowserToolsCard.d.ts.map +1 -1
  33. package/dist/side-panel/components/BrowserToolsCard.js +40 -22
  34. package/dist/side-panel/components/BrowserToolsCard.js.map +1 -1
  35. package/dist/side-panel/components/ConfirmationDialog.d.ts +4 -11
  36. package/dist/side-panel/components/ConfirmationDialog.d.ts.map +1 -1
  37. package/dist/side-panel/components/ConfirmationDialog.js +23 -34
  38. package/dist/side-panel/components/ConfirmationDialog.js.map +1 -1
  39. package/dist/side-panel/components/NpmPluginCard.d.ts.map +1 -1
  40. package/dist/side-panel/components/NpmPluginCard.js +1 -1
  41. package/dist/side-panel/components/NpmPluginCard.js.map +1 -1
  42. package/dist/side-panel/components/PluginCard.d.ts +2 -1
  43. package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
  44. package/dist/side-panel/components/PluginCard.js +41 -40
  45. package/dist/side-panel/components/PluginCard.js.map +1 -1
  46. package/dist/side-panel/components/PluginIcon.d.ts +1 -2
  47. package/dist/side-panel/components/PluginIcon.d.ts.map +1 -1
  48. package/dist/side-panel/components/PluginIcon.js +36 -41
  49. package/dist/side-panel/components/PluginIcon.js.map +1 -1
  50. package/dist/side-panel/components/PluginList.d.ts +1 -1
  51. package/dist/side-panel/components/PluginList.d.ts.map +1 -1
  52. package/dist/side-panel/components/PluginList.js +99 -1
  53. package/dist/side-panel/components/PluginList.js.map +1 -1
  54. package/dist/side-panel/components/PluginMenu.d.ts.map +1 -1
  55. package/dist/side-panel/components/PluginMenu.js +1 -1
  56. package/dist/side-panel/components/PluginMenu.js.map +1 -1
  57. package/dist/side-panel/components/ToolIcon.d.ts.map +1 -1
  58. package/dist/side-panel/components/ToolIcon.js +9 -2
  59. package/dist/side-panel/components/ToolIcon.js.map +1 -1
  60. package/dist/side-panel/components/ToolRow.d.ts +14 -4
  61. package/dist/side-panel/components/ToolRow.d.ts.map +1 -1
  62. package/dist/side-panel/components/ToolRow.js +13 -3
  63. package/dist/side-panel/components/ToolRow.js.map +1 -1
  64. package/dist/side-panel/components/retro/Select.d.ts +13 -0
  65. package/dist/side-panel/components/retro/Select.d.ts.map +1 -0
  66. package/dist/side-panel/components/retro/Select.js +27 -0
  67. package/dist/side-panel/components/retro/Select.js.map +1 -0
  68. package/dist/side-panel/constants.d.ts +0 -2
  69. package/dist/side-panel/constants.d.ts.map +1 -1
  70. package/dist/side-panel/constants.js +0 -2
  71. package/dist/side-panel/constants.js.map +1 -1
  72. package/dist/side-panel/group-transitions.d.ts +55 -0
  73. package/dist/side-panel/group-transitions.d.ts.map +1 -0
  74. package/dist/side-panel/group-transitions.js +84 -0
  75. package/dist/side-panel/group-transitions.js.map +1 -0
  76. package/dist/side-panel/hooks/useServerNotifications.d.ts +1 -3
  77. package/dist/side-panel/hooks/useServerNotifications.d.ts.map +1 -1
  78. package/dist/side-panel/hooks/useServerNotifications.js +13 -41
  79. package/dist/side-panel/hooks/useServerNotifications.js.map +1 -1
  80. package/dist/side-panel/side-panel.js +5979 -4668
  81. package/dist/side-panel/styles.css +1 -1
  82. package/dist/tool-dispatch.d.ts +2 -1
  83. package/dist/tool-dispatch.d.ts.map +1 -1
  84. package/dist/tool-dispatch.js +4 -6
  85. package/dist/tool-dispatch.js.map +1 -1
  86. package/manifest.json +1 -1
  87. package/package.json +2 -1
@@ -94,10 +94,6 @@ var initSidePanelToggle = () => {
94
94
  var pendingConfirmationCount = 0;
95
95
  var NOTIFICATION_ID = "opentabs-confirmation";
96
96
  var pendingConfirmations = /* @__PURE__ */ new Map();
97
- var confirmationTimeouts = /* @__PURE__ */ new Map();
98
- var clearedConfirmationIds = /* @__PURE__ */ new Set();
99
- var CONFIRMATION_BACKGROUND_TIMEOUT_BUFFER_MS = 2e3;
100
- var CONFIRMATION_FALLBACK_TIMEOUT_MS = 3e4;
101
97
  var updateConfirmationBadge = () => {
102
98
  if (pendingConfirmationCount > 0) {
103
99
  chrome.action.setBadgeText({ text: String(pendingConfirmationCount) }).catch(() => {
@@ -118,7 +114,7 @@ var syncConfirmationNotification = () => {
118
114
  let message;
119
115
  if (pendingConfirmationCount === 1 && pendingConfirmations.size === 1) {
120
116
  const info = pendingConfirmations.values().next().value;
121
- message = info.domain ? `${info.tool} on ${info.domain}` : info.tool;
117
+ message = `${info.plugin}: ${info.tool}`;
122
118
  } else if (pendingConfirmationCount > 1) {
123
119
  message = `${pendingConfirmationCount} tools awaiting approval`;
124
120
  } else {
@@ -136,59 +132,32 @@ var syncConfirmationNotification = () => {
136
132
  };
137
133
  var notifyConfirmationRequest = (params) => {
138
134
  const tool = typeof params.tool === "string" ? params.tool : "unknown tool";
139
- const domain = typeof params.domain === "string" ? params.domain : null;
135
+ const plugin = typeof params.plugin === "string" ? params.plugin : "unknown";
140
136
  const id = typeof params.id === "string" ? params.id : String(Date.now());
141
- const tabId = typeof params.tabId === "number" ? params.tabId : void 0;
142
- const paramsPreview = typeof params.paramsPreview === "string" ? params.paramsPreview : "";
143
- const timeoutMs = typeof params.timeoutMs === "number" ? params.timeoutMs : 0;
137
+ const rawParams = typeof params.params === "object" && params.params !== null ? params.params : {};
144
138
  const receivedAt = Date.now();
145
- const existingTimeoutId = confirmationTimeouts.get(id);
146
- if (existingTimeoutId !== void 0) {
147
- clearTimeout(existingTimeoutId);
148
- } else {
149
- clearedConfirmationIds.delete(id);
150
- pendingConfirmationCount++;
151
- updateConfirmationBadge();
152
- }
153
- pendingConfirmations.set(id, { id, tool, domain, tabId, paramsPreview, timeoutMs, receivedAt });
154
- const effectiveTimeoutMs = timeoutMs > 0 ? timeoutMs : CONFIRMATION_FALLBACK_TIMEOUT_MS;
155
- const bgTimeoutId = setTimeout(() => {
156
- confirmationTimeouts.delete(id);
157
- clearConfirmationBadge(id);
158
- clearedConfirmationIds.delete(id);
159
- }, effectiveTimeoutMs + CONFIRMATION_BACKGROUND_TIMEOUT_BUFFER_MS);
160
- confirmationTimeouts.set(id, bgTimeoutId);
139
+ if (pendingConfirmations.has(id)) {
140
+ pendingConfirmations.set(id, { id, tool, plugin, params: rawParams, receivedAt });
141
+ syncConfirmationNotification();
142
+ return;
143
+ }
144
+ pendingConfirmationCount++;
145
+ updateConfirmationBadge();
146
+ pendingConfirmations.set(id, { id, tool, plugin, params: rawParams, receivedAt });
161
147
  syncConfirmationNotification();
162
148
  };
163
149
  var clearConfirmationBadge = (id) => {
164
150
  if (id !== void 0) {
165
- if (clearedConfirmationIds.has(id)) {
151
+ if (!pendingConfirmations.has(id)) {
166
152
  return;
167
153
  }
168
- clearedConfirmationIds.add(id);
169
154
  pendingConfirmations.delete(id);
170
155
  }
171
156
  pendingConfirmationCount = Math.max(0, pendingConfirmationCount - 1);
172
157
  updateConfirmationBadge();
173
158
  syncConfirmationNotification();
174
- if (id !== void 0 && !confirmationTimeouts.has(id)) {
175
- clearedConfirmationIds.delete(id);
176
- }
177
- };
178
- var clearConfirmationBackgroundTimeout = (id) => {
179
- const timeoutId = confirmationTimeouts.get(id);
180
- if (timeoutId !== void 0) {
181
- clearTimeout(timeoutId);
182
- confirmationTimeouts.delete(id);
183
- clearedConfirmationIds.delete(id);
184
- }
185
159
  };
186
160
  var clearAllConfirmationBadges = () => {
187
- for (const [, timeoutId] of confirmationTimeouts.entries()) {
188
- clearTimeout(timeoutId);
189
- }
190
- confirmationTimeouts.clear();
191
- clearedConfirmationIds.clear();
192
161
  pendingConfirmations.clear();
193
162
  pendingConfirmationCount = 0;
194
163
  updateConfirmationBadge();
@@ -1151,12 +1120,12 @@ var removePluginsBatch = (pluginNames) => serialize(async () => {
1151
1120
  await chrome.storage.local.set({ [PLUGINS_META_KEY]: filtered });
1152
1121
  metaCache = filtered;
1153
1122
  });
1154
- var VALID_TRUST_TIERS = /* @__PURE__ */ new Set(["official", "community", "local"]);
1123
+ var VALID_PERMISSIONS = /* @__PURE__ */ new Set(["off", "ask", "auto"]);
1155
1124
  var isValidPluginMeta = (value) => {
1156
1125
  if (typeof value !== "object" || value === null)
1157
1126
  return false;
1158
1127
  const obj = value;
1159
- return typeof obj.name === "string" && typeof obj.version === "string" && Array.isArray(obj.urlPatterns) && typeof obj.trustTier === "string" && VALID_TRUST_TIERS.has(obj.trustTier) && Array.isArray(obj.tools);
1128
+ return typeof obj.name === "string" && typeof obj.version === "string" && Array.isArray(obj.urlPatterns) && typeof obj.permission === "string" && VALID_PERMISSIONS.has(obj.permission) && Array.isArray(obj.tools);
1160
1129
  };
1161
1130
  var getAllPluginMeta = async () => {
1162
1131
  if (metaCache !== null) {
@@ -3246,46 +3215,67 @@ var EMPTY_CACHE = {
3246
3215
  plugins: [],
3247
3216
  failedPlugins: [],
3248
3217
  browserTools: [],
3249
- serverVersion: void 0
3218
+ browserPermission: void 0,
3219
+ serverVersion: void 0,
3220
+ skipPermissions: void 0
3250
3221
  };
3251
3222
  var cache = { ...EMPTY_CACHE };
3252
3223
  var pendingPluginToolUpdates = /* @__PURE__ */ new Map();
3224
+ var pendingPluginPermissionUpdates = /* @__PURE__ */ new Map();
3253
3225
  var pendingBrowserToolUpdates = /* @__PURE__ */ new Map();
3254
3226
  var reapplyPendingOptimisticUpdates = () => {
3255
- if (pendingPluginToolUpdates.size > 0) {
3227
+ if (pendingPluginToolUpdates.size > 0 || pendingPluginPermissionUpdates.size > 0) {
3256
3228
  cache = {
3257
3229
  ...cache,
3258
3230
  plugins: cache.plugins.map((plugin) => {
3231
+ const permOverride = pendingPluginPermissionUpdates.get(plugin.name);
3259
3232
  const toolOverrides = pendingPluginToolUpdates.get(plugin.name);
3260
- if (!toolOverrides)
3233
+ if (permOverride === void 0 && !toolOverrides)
3261
3234
  return plugin;
3262
- return {
3263
- ...plugin,
3264
- tools: plugin.tools.map((tool) => {
3265
- const override = toolOverrides.get(tool.name);
3266
- return override !== void 0 ? { ...tool, enabled: override } : tool;
3267
- })
3268
- };
3235
+ let updated = plugin;
3236
+ if (permOverride !== void 0) {
3237
+ updated = { ...updated, permission: permOverride };
3238
+ }
3239
+ if (toolOverrides) {
3240
+ updated = {
3241
+ ...updated,
3242
+ tools: updated.tools.map((tool) => {
3243
+ const override = toolOverrides.get(tool.name);
3244
+ return override !== void 0 ? { ...tool, permission: override } : tool;
3245
+ })
3246
+ };
3247
+ }
3248
+ return updated;
3269
3249
  })
3270
3250
  };
3271
3251
  }
3252
+ const browserPermOverride = pendingPluginPermissionUpdates.get("browser");
3253
+ if (browserPermOverride !== void 0) {
3254
+ cache = { ...cache, browserPermission: browserPermOverride };
3255
+ }
3272
3256
  if (pendingBrowserToolUpdates.size > 0) {
3273
3257
  cache = {
3274
3258
  ...cache,
3275
3259
  browserTools: cache.browserTools.map((bt) => {
3276
3260
  const override = pendingBrowserToolUpdates.get(bt.name);
3277
- return override !== void 0 ? { ...bt, enabled: override } : bt;
3261
+ return override !== void 0 ? { ...bt, permission: override } : bt;
3278
3262
  })
3279
3263
  };
3280
3264
  }
3281
3265
  };
3282
- var addPendingPluginToolUpdate = (plugin, tool, enabled) => {
3266
+ var addPendingPluginPermissionUpdate = (plugin, permission) => {
3267
+ pendingPluginPermissionUpdates.set(plugin, permission);
3268
+ };
3269
+ var removePendingPluginPermissionUpdate = (plugin) => {
3270
+ pendingPluginPermissionUpdates.delete(plugin);
3271
+ };
3272
+ var addPendingPluginToolUpdate = (plugin, tool, permission) => {
3283
3273
  let toolMap = pendingPluginToolUpdates.get(plugin);
3284
3274
  if (!toolMap) {
3285
3275
  toolMap = /* @__PURE__ */ new Map();
3286
3276
  pendingPluginToolUpdates.set(plugin, toolMap);
3287
3277
  }
3288
- toolMap.set(tool, enabled);
3278
+ toolMap.set(tool, permission);
3289
3279
  };
3290
3280
  var removePendingPluginToolUpdate = (plugin, tool) => {
3291
3281
  const toolMap = pendingPluginToolUpdates.get(plugin);
@@ -3295,14 +3285,14 @@ var removePendingPluginToolUpdate = (plugin, tool) => {
3295
3285
  if (toolMap.size === 0)
3296
3286
  pendingPluginToolUpdates.delete(plugin);
3297
3287
  };
3298
- var addPendingPluginAllToolsUpdate = (plugin, toolNames, enabled) => {
3288
+ var addPendingPluginAllToolsUpdate = (plugin, toolNames, permission) => {
3299
3289
  let toolMap = pendingPluginToolUpdates.get(plugin);
3300
3290
  if (!toolMap) {
3301
3291
  toolMap = /* @__PURE__ */ new Map();
3302
3292
  pendingPluginToolUpdates.set(plugin, toolMap);
3303
3293
  }
3304
3294
  for (const name of toolNames) {
3305
- toolMap.set(name, enabled);
3295
+ toolMap.set(name, permission);
3306
3296
  }
3307
3297
  };
3308
3298
  var removePendingPluginAllToolsUpdate = (plugin, toolNames) => {
@@ -3315,22 +3305,6 @@ var removePendingPluginAllToolsUpdate = (plugin, toolNames) => {
3315
3305
  if (toolMap.size === 0)
3316
3306
  pendingPluginToolUpdates.delete(plugin);
3317
3307
  };
3318
- var addPendingBrowserToolUpdate = (tool, enabled) => {
3319
- pendingBrowserToolUpdates.set(tool, enabled);
3320
- };
3321
- var removePendingBrowserToolUpdate = (tool) => {
3322
- pendingBrowserToolUpdates.delete(tool);
3323
- };
3324
- var addPendingAllBrowserToolsUpdate = (toolNames, enabled) => {
3325
- for (const name of toolNames) {
3326
- pendingBrowserToolUpdates.set(name, enabled);
3327
- }
3328
- };
3329
- var removePendingAllBrowserToolsUpdate = (toolNames) => {
3330
- for (const name of toolNames) {
3331
- pendingBrowserToolUpdates.delete(name);
3332
- }
3333
- };
3334
3308
  var cachesInitialized = false;
3335
3309
  var persistTimer;
3336
3310
  var persistToSession = () => {
@@ -3362,6 +3336,7 @@ var clearServerStateCache = () => {
3362
3336
  cache = { ...EMPTY_CACHE };
3363
3337
  cachesInitialized = false;
3364
3338
  pendingPluginToolUpdates.clear();
3339
+ pendingPluginPermissionUpdates.clear();
3365
3340
  pendingBrowserToolUpdates.clear();
3366
3341
  if (persistTimer !== void 0) {
3367
3342
  clearTimeout(persistTimer);
@@ -3379,7 +3354,9 @@ var loadServerStateCacheFromSession = async () => {
3379
3354
  plugins: Array.isArray(stored.plugins) ? stored.plugins : [],
3380
3355
  failedPlugins: Array.isArray(stored.failedPlugins) ? stored.failedPlugins : [],
3381
3356
  browserTools: Array.isArray(stored.browserTools) ? stored.browserTools : [],
3382
- serverVersion: typeof stored.serverVersion === "string" ? stored.serverVersion : void 0
3357
+ browserPermission: stored.browserPermission === "off" || stored.browserPermission === "ask" || stored.browserPermission === "auto" ? stored.browserPermission : void 0,
3358
+ serverVersion: typeof stored.serverVersion === "string" ? stored.serverVersion : void 0,
3359
+ skipPermissions: typeof stored.skipPermissions === "boolean" ? stored.skipPermissions : void 0
3383
3360
  };
3384
3361
  }
3385
3362
  if (typeof data[CACHES_INITIALIZED_KEY] === "boolean") {
@@ -3540,13 +3517,10 @@ var notifyDispatchProgress = (dispatchId) => {
3540
3517
  cb();
3541
3518
  };
3542
3519
  var getPluginLink = (plugin) => {
3543
- if (plugin.trustTier === "local" && plugin.sourcePath) {
3520
+ if (plugin.sourcePath) {
3544
3521
  return plugin.sourcePath;
3545
3522
  }
3546
- if (plugin.trustTier === "official") {
3547
- return `https://npmjs.com/package/@opentabs-dev/plugin-${plugin.name}`;
3548
- }
3549
- return `https://npmjs.com/package/opentabs-plugin-${plugin.name}`;
3523
+ return `https://npmjs.com/package/${plugin.name}`;
3550
3524
  };
3551
3525
  var injectToolInvocationLog = async (tabId, pluginName, toolName, link) => {
3552
3526
  try {
@@ -3834,7 +3808,7 @@ var toPluginMeta = (p) => ({
3834
3808
  version: p.version,
3835
3809
  displayName: p.displayName,
3836
3810
  urlPatterns: p.urlPatterns,
3837
- trustTier: p.trustTier,
3811
+ permission: p.permission,
3838
3812
  sourcePath: p.sourcePath,
3839
3813
  adapterHash: p.adapterHash,
3840
3814
  adapterFile: p.adapterFile,
@@ -3860,16 +3834,17 @@ var validatePluginPayload = (raw) => {
3860
3834
  }
3861
3835
  const urlPatterns = Array.isArray(obj.urlPatterns) ? obj.urlPatterns.filter((p) => typeof p === "string") : [];
3862
3836
  const tools = Array.isArray(obj.tools) ? obj.tools.filter((t) => typeof t === "object" && t !== null && typeof t.name === "string" && typeof t.description === "string").map((t) => {
3863
- if (typeof t.enabled !== "boolean") {
3864
- console.warn(`[opentabs] Tool "${t.name}" in plugin "${obj.name}" is missing the "enabled" field \u2014 defaulting to enabled=true. This is a server-side bug.`);
3837
+ if (t.permission !== "off" && t.permission !== "ask" && t.permission !== "auto") {
3838
+ console.warn(`[opentabs] Tool "${t.name}" in plugin "${obj.name}" has invalid "permission" field \u2014 defaulting to permission='off'. This is a server-side bug.`);
3865
3839
  }
3866
3840
  return {
3867
3841
  name: t.name,
3868
3842
  displayName: typeof t.displayName === "string" ? t.displayName : t.name,
3869
3843
  description: t.description,
3844
+ ...typeof t.summary === "string" ? { summary: t.summary } : {},
3870
3845
  icon: typeof t.icon === "string" ? t.icon : "wrench",
3871
3846
  ...typeof t.group === "string" ? { group: t.group } : {},
3872
- enabled: typeof t.enabled === "boolean" ? t.enabled : true
3847
+ permission: t.permission === "off" || t.permission === "ask" || t.permission === "auto" ? t.permission : "off"
3873
3848
  };
3874
3849
  }) : [];
3875
3850
  return {
@@ -3877,7 +3852,7 @@ var validatePluginPayload = (raw) => {
3877
3852
  version: typeof obj.version === "string" ? obj.version : "0.0.0",
3878
3853
  displayName: typeof obj.displayName === "string" ? obj.displayName : obj.name,
3879
3854
  urlPatterns,
3880
- trustTier: obj.trustTier === "official" || obj.trustTier === "community" || obj.trustTier === "local" ? obj.trustTier : "local",
3855
+ permission: obj.permission === "off" || obj.permission === "ask" || obj.permission === "auto" ? obj.permission : "off",
3881
3856
  sourcePath: typeof obj.sourcePath === "string" ? obj.sourcePath : void 0,
3882
3857
  adapterHash: typeof obj.adapterHash === "string" ? obj.adapterHash : void 0,
3883
3858
  adapterFile: typeof obj.adapterFile === "string" ? obj.adapterFile : void 0,
@@ -3951,11 +3926,12 @@ var handleSyncFull = async (params) => {
3951
3926
  name: p.name,
3952
3927
  displayName: p.displayName,
3953
3928
  version: p.version,
3954
- trustTier: p.trustTier,
3929
+ permission: p.permission,
3955
3930
  source: raw?.source === "npm" || raw?.source === "local" ? raw.source : "local",
3956
3931
  tabState: "closed",
3957
3932
  urlPatterns: p.urlPatterns,
3958
3933
  tools: p.tools,
3934
+ reviewed: raw?.reviewed === true,
3959
3935
  iconSvg: p.iconSvg,
3960
3936
  iconInactiveSvg: p.iconInactiveSvg,
3961
3937
  iconDarkSvg: p.iconDarkSvg,
@@ -3969,11 +3945,16 @@ var handleSyncFull = async (params) => {
3969
3945
  const rawFailedPlugins = Array.isArray(params.failedPlugins) ? params.failedPlugins : void 0;
3970
3946
  const rawBrowserTools = Array.isArray(params.browserTools) ? params.browserTools : void 0;
3971
3947
  const rawServerVersion = typeof params.serverVersion === "string" ? params.serverVersion : void 0;
3948
+ const rawBrowserPermission = params.browserPermission;
3949
+ const browserPermission = rawBrowserPermission === "off" || rawBrowserPermission === "ask" || rawBrowserPermission === "auto" ? rawBrowserPermission : void 0;
3950
+ const rawSkipPermissions = typeof params.skipPermissions === "boolean" ? params.skipPermissions : void 0;
3972
3951
  updateServerStateCache({
3973
3952
  plugins: cachePlugins,
3974
3953
  ...rawFailedPlugins ? { failedPlugins: rawFailedPlugins } : {},
3975
3954
  ...rawBrowserTools ? { browserTools: rawBrowserTools } : {},
3976
- ...rawServerVersion !== void 0 ? { serverVersion: rawServerVersion } : {}
3955
+ ...browserPermission !== void 0 ? { browserPermission } : {},
3956
+ ...rawServerVersion !== void 0 ? { serverVersion: rawServerVersion } : {},
3957
+ ...rawSkipPermissions !== void 0 ? { skipPermissions: rawSkipPermissions } : {}
3977
3958
  });
3978
3959
  setCachesInitialized(true);
3979
3960
  flushServerStateCacheToSession();
@@ -4001,11 +3982,12 @@ var handlePluginUpdate = async (params) => {
4001
3982
  name: validated.name,
4002
3983
  displayName: validated.displayName,
4003
3984
  version: validated.version,
4004
- trustTier: validated.trustTier,
3985
+ permission: validated.permission,
4005
3986
  source: params.source === "npm" || params.source === "local" ? params.source : "local",
4006
3987
  tabState: newState.state,
4007
3988
  urlPatterns: validated.urlPatterns,
4008
3989
  tools: validated.tools,
3990
+ reviewed: params.reviewed === true,
4009
3991
  iconSvg: validated.iconSvg,
4010
3992
  iconInactiveSvg: validated.iconInactiveSvg,
4011
3993
  iconDarkSvg: validated.iconDarkSvg,
@@ -4144,7 +4126,9 @@ var handleServerMessage = (message) => {
4144
4126
  ...payload.plugins ? { plugins: payload.plugins } : {},
4145
4127
  ...payload.failedPlugins ? { failedPlugins: payload.failedPlugins } : {},
4146
4128
  ...payload.browserTools ? { browserTools: payload.browserTools } : {},
4147
- ...payload.serverVersion !== void 0 ? { serverVersion: payload.serverVersion } : {}
4129
+ ...payload.browserPermission !== void 0 ? { browserPermission: payload.browserPermission } : {},
4130
+ ...payload.serverVersion !== void 0 ? { serverVersion: payload.serverVersion } : {},
4131
+ ...payload.skipPermissions !== void 0 ? { skipPermissions: payload.skipPermissions } : {}
4148
4132
  });
4149
4133
  }
4150
4134
  if (method && SIDE_PANEL_METHODS.has(method)) {
@@ -4278,15 +4262,17 @@ var handleBgGetFullState = (_message, sendResponse) => {
4278
4262
  const serverTool = serverPlugin?.tools.find((st) => st.name === metaTool.name);
4279
4263
  return {
4280
4264
  ...metaTool,
4281
- enabled: serverTool?.enabled ?? true
4265
+ permission: serverTool?.permission ?? metaTool.permission
4282
4266
  };
4283
4267
  });
4284
4268
  const { tools: _metaTools, sourcePath: _sourcePath, adapterHash: _adapterHash, adapterFile: _adapterFile, ...metaFields } = meta;
4285
4269
  return {
4286
4270
  ...metaFields,
4271
+ permission: serverPlugin?.permission ?? meta.permission,
4287
4272
  tools,
4288
4273
  tabState,
4289
4274
  source: serverPlugin?.source ?? "local",
4275
+ reviewed: serverPlugin?.reviewed ?? false,
4290
4276
  sdkVersion: serverPlugin?.sdkVersion,
4291
4277
  update: serverPlugin?.update
4292
4278
  };
@@ -4297,7 +4283,9 @@ var handleBgGetFullState = (_message, sendResponse) => {
4297
4283
  plugins,
4298
4284
  failedPlugins: serverCache.failedPlugins,
4299
4285
  browserTools: serverCache.browserTools,
4286
+ browserPermission: serverCache.browserPermission,
4300
4287
  serverVersion: serverCache.serverVersion,
4288
+ skipPermissions: serverCache.skipPermissions,
4301
4289
  pendingConfirmations: getPendingConfirmations()
4302
4290
  });
4303
4291
  })().catch(() => {
@@ -4366,38 +4354,27 @@ var handleSpConfirmationResponse = (message, sendResponse) => {
4366
4354
  }
4367
4355
  const data = message.data;
4368
4356
  const id = typeof data?.id === "string" ? data.id : void 0;
4369
- if (id !== void 0) {
4370
- clearConfirmationBackgroundTimeout(id);
4371
- }
4372
4357
  clearConfirmationBadge(id);
4373
4358
  sendResponse({ ok: true });
4374
4359
  };
4375
- var handleSpConfirmationTimeout = (message, sendResponse) => {
4376
- const id = typeof message.id === "string" ? message.id : void 0;
4377
- if (id !== void 0) {
4378
- clearConfirmationBackgroundTimeout(id);
4379
- }
4380
- clearConfirmationBadge(id);
4381
- sendResponse({ ok: true });
4382
- };
4383
- var handleBgSetToolEnabled = (message, sendResponse) => {
4360
+ var handleBgSetToolPermission = (message, sendResponse) => {
4384
4361
  const plugin = message.plugin;
4385
4362
  const tool = message.tool;
4386
- const enabled = message.enabled;
4363
+ const permission = message.permission;
4387
4364
  const cache2 = getServerStateCache();
4388
4365
  const pluginEntry = cache2.plugins.find((p) => p.name === plugin);
4389
- const originalEnabled = pluginEntry?.tools.find((t) => t.name === tool)?.enabled ?? !enabled;
4366
+ const originalPermission = pluginEntry?.tools.find((t) => t.name === tool)?.permission ?? "auto";
4390
4367
  const updatedPlugins = cache2.plugins.map((p) => {
4391
4368
  if (p.name !== plugin)
4392
4369
  return p;
4393
4370
  return {
4394
4371
  ...p,
4395
- tools: p.tools.map((t) => t.name === tool ? { ...t, enabled } : t)
4372
+ tools: p.tools.map((t) => t.name === tool ? { ...t, permission } : t)
4396
4373
  };
4397
4374
  });
4398
- addPendingPluginToolUpdate(plugin, tool, enabled);
4375
+ addPendingPluginToolUpdate(plugin, tool, permission);
4399
4376
  updateServerStateCache({ plugins: updatedPlugins });
4400
- sendServerRequest("config.setToolEnabled", { plugin, tool, enabled }).then((result) => {
4377
+ sendServerRequest("config.setToolPermission", { plugin, tool, permission }).then((result) => {
4401
4378
  removePendingPluginToolUpdate(plugin, tool);
4402
4379
  sendResponse(result);
4403
4380
  }).catch((err2) => {
@@ -4408,23 +4385,23 @@ var handleBgSetToolEnabled = (message, sendResponse) => {
4408
4385
  return p;
4409
4386
  return {
4410
4387
  ...p,
4411
- tools: p.tools.map((t) => t.name === tool ? { ...t, enabled: originalEnabled } : t)
4388
+ tools: p.tools.map((t) => t.name === tool ? { ...t, permission: originalPermission } : t)
4412
4389
  };
4413
4390
  });
4414
4391
  updateServerStateCache({ plugins: revertedPlugins });
4415
4392
  sendResponse({ error: err2 instanceof Error ? err2.message : String(err2) });
4416
4393
  });
4417
4394
  };
4418
- var handleBgSetAllToolsEnabled = (message, sendResponse) => {
4395
+ var handleBgSetAllToolsPermission = (message, sendResponse) => {
4419
4396
  const plugin = message.plugin;
4420
- const enabled = message.enabled;
4397
+ const permission = message.permission;
4421
4398
  const cache2 = getServerStateCache();
4422
4399
  const pluginEntry = cache2.plugins.find((p) => p.name === plugin);
4423
4400
  const toolNames = pluginEntry ? pluginEntry.tools.map((t) => t.name) : [];
4424
4401
  const originalToolStates = /* @__PURE__ */ new Map();
4425
4402
  if (pluginEntry) {
4426
4403
  for (const t of pluginEntry.tools) {
4427
- originalToolStates.set(t.name, t.enabled);
4404
+ originalToolStates.set(t.name, t.permission);
4428
4405
  }
4429
4406
  }
4430
4407
  const updatedPlugins = cache2.plugins.map((p) => {
@@ -4432,12 +4409,12 @@ var handleBgSetAllToolsEnabled = (message, sendResponse) => {
4432
4409
  return p;
4433
4410
  return {
4434
4411
  ...p,
4435
- tools: p.tools.map((t) => ({ ...t, enabled }))
4412
+ tools: p.tools.map((t) => ({ ...t, permission }))
4436
4413
  };
4437
4414
  });
4438
- addPendingPluginAllToolsUpdate(plugin, toolNames, enabled);
4415
+ addPendingPluginAllToolsUpdate(plugin, toolNames, permission);
4439
4416
  updateServerStateCache({ plugins: updatedPlugins });
4440
- sendServerRequest("config.setAllToolsEnabled", { plugin, enabled }).then((result) => {
4417
+ sendServerRequest("config.setAllToolsPermission", { plugin, permission }).then((result) => {
4441
4418
  removePendingPluginAllToolsUpdate(plugin, toolNames);
4442
4419
  sendResponse(result);
4443
4420
  }).catch((err2) => {
@@ -4450,7 +4427,7 @@ var handleBgSetAllToolsEnabled = (message, sendResponse) => {
4450
4427
  ...p,
4451
4428
  tools: p.tools.map((t) => ({
4452
4429
  ...t,
4453
- enabled: originalToolStates.get(t.name) ?? t.enabled
4430
+ permission: originalToolStates.get(t.name) ?? t.permission
4454
4431
  }))
4455
4432
  };
4456
4433
  });
@@ -4458,104 +4435,31 @@ var handleBgSetAllToolsEnabled = (message, sendResponse) => {
4458
4435
  sendResponse({ error: err2 instanceof Error ? err2.message : String(err2) });
4459
4436
  });
4460
4437
  };
4461
- var handleBgSetToolsEnabled = (message, sendResponse) => {
4438
+ var handleBgSetPluginPermission = (message, sendResponse) => {
4462
4439
  const plugin = message.plugin;
4463
- const toolNames = message.tools;
4464
- const enabled = message.enabled;
4440
+ const permission = message.permission;
4441
+ const reviewedVersion = typeof message.reviewedVersion === "string" ? message.reviewedVersion : void 0;
4465
4442
  const cache2 = getServerStateCache();
4466
4443
  const pluginEntry = cache2.plugins.find((p) => p.name === plugin);
4467
- const originalToolStates = /* @__PURE__ */ new Map();
4468
- if (pluginEntry) {
4469
- const toolNameSet2 = new Set(toolNames);
4470
- for (const t of pluginEntry.tools) {
4471
- if (toolNameSet2.has(t.name)) {
4472
- originalToolStates.set(t.name, t.enabled);
4473
- }
4474
- }
4475
- }
4476
- const toolNameSet = new Set(toolNames);
4477
- const updatedPlugins = cache2.plugins.map((p) => {
4478
- if (p.name !== plugin)
4479
- return p;
4480
- return {
4481
- ...p,
4482
- tools: p.tools.map((t) => toolNameSet.has(t.name) ? { ...t, enabled } : t)
4483
- };
4484
- });
4485
- addPendingPluginAllToolsUpdate(plugin, toolNames, enabled);
4444
+ const originalPermission = pluginEntry?.permission ?? "off";
4445
+ const updatedPlugins = cache2.plugins.map((p) => p.name === plugin ? { ...p, permission, ...reviewedVersion ? { reviewed: true } : {} } : p);
4446
+ addPendingPluginPermissionUpdate(plugin, permission);
4486
4447
  updateServerStateCache({ plugins: updatedPlugins });
4487
- sendServerRequest("config.setToolsEnabled", {
4448
+ sendServerRequest("config.setPluginPermission", {
4488
4449
  plugin,
4489
- tools: toolNames,
4490
- enabled
4450
+ permission,
4451
+ ...reviewedVersion ? { reviewedVersion } : {}
4491
4452
  }).then((result) => {
4492
- removePendingPluginAllToolsUpdate(plugin, toolNames);
4453
+ removePendingPluginPermissionUpdate(plugin);
4493
4454
  sendResponse(result);
4494
4455
  }).catch((err2) => {
4495
- removePendingPluginAllToolsUpdate(plugin, toolNames);
4456
+ removePendingPluginPermissionUpdate(plugin);
4496
4457
  const currentCache = getServerStateCache();
4497
- const revertedPlugins = currentCache.plugins.map((p) => {
4498
- if (p.name !== plugin)
4499
- return p;
4500
- return {
4501
- ...p,
4502
- tools: p.tools.map((t) => ({
4503
- ...t,
4504
- enabled: originalToolStates.get(t.name) ?? t.enabled
4505
- }))
4506
- };
4507
- });
4458
+ const revertedPlugins = currentCache.plugins.map((p) => p.name === plugin ? { ...p, permission: originalPermission } : p);
4508
4459
  updateServerStateCache({ plugins: revertedPlugins });
4509
4460
  sendResponse({ error: err2 instanceof Error ? err2.message : String(err2) });
4510
4461
  });
4511
4462
  };
4512
- var handleBgSetBrowserToolEnabled = (message, sendResponse) => {
4513
- const tool = message.tool;
4514
- const enabled = message.enabled;
4515
- const cache2 = getServerStateCache();
4516
- const originalEnabled = cache2.browserTools.find((bt) => bt.name === tool)?.enabled ?? !enabled;
4517
- const updatedBrowserTools = cache2.browserTools.map((bt) => bt.name === tool ? { ...bt, enabled } : bt);
4518
- addPendingBrowserToolUpdate(tool, enabled);
4519
- updateServerStateCache({ browserTools: updatedBrowserTools });
4520
- sendServerRequest("config.setBrowserToolEnabled", { tool, enabled }).then((result) => {
4521
- removePendingBrowserToolUpdate(tool);
4522
- sendResponse(result);
4523
- }).catch((err2) => {
4524
- removePendingBrowserToolUpdate(tool);
4525
- const currentCache = getServerStateCache();
4526
- const revertedBrowserTools = currentCache.browserTools.map((bt) => bt.name === tool ? { ...bt, enabled: originalEnabled } : bt);
4527
- updateServerStateCache({ browserTools: revertedBrowserTools });
4528
- sendResponse({ error: err2 instanceof Error ? err2.message : String(err2) });
4529
- });
4530
- };
4531
- var handleBgSetAllBrowserToolsEnabled = (message, sendResponse) => {
4532
- const enabled = message.enabled;
4533
- const cache2 = getServerStateCache();
4534
- const toolNames = cache2.browserTools.map((bt) => bt.name);
4535
- const originalToolStates = /* @__PURE__ */ new Map();
4536
- for (const bt of cache2.browserTools) {
4537
- originalToolStates.set(bt.name, bt.enabled);
4538
- }
4539
- const updatedBrowserTools = cache2.browserTools.map((bt) => ({
4540
- ...bt,
4541
- enabled
4542
- }));
4543
- addPendingAllBrowserToolsUpdate(toolNames, enabled);
4544
- updateServerStateCache({ browserTools: updatedBrowserTools });
4545
- sendServerRequest("config.setAllBrowserToolsEnabled", { enabled }).then((result) => {
4546
- removePendingAllBrowserToolsUpdate(toolNames);
4547
- sendResponse(result);
4548
- }).catch((err2) => {
4549
- removePendingAllBrowserToolsUpdate(toolNames);
4550
- const currentCache = getServerStateCache();
4551
- const revertedBrowserTools = currentCache.browserTools.map((bt) => ({
4552
- ...bt,
4553
- enabled: originalToolStates.get(bt.name) ?? bt.enabled
4554
- }));
4555
- updateServerStateCache({ browserTools: revertedBrowserTools });
4556
- sendResponse({ error: err2 instanceof Error ? err2.message : String(err2) });
4557
- });
4558
- };
4559
4463
  var handleBgSearchPlugins = (message, sendResponse) => {
4560
4464
  const query = message.query;
4561
4465
  sendServerRequest("plugin.search", { query }).then((result) => {
@@ -4598,11 +4502,9 @@ var backgroundHandlers = /* @__PURE__ */ new Map([
4598
4502
  ["ws:state", handleWsState],
4599
4503
  ["ws:message", handleWsMessage],
4600
4504
  ["bg:getFullState", handleBgGetFullState],
4601
- ["bg:setToolEnabled", handleBgSetToolEnabled],
4602
- ["bg:setAllToolsEnabled", handleBgSetAllToolsEnabled],
4603
- ["bg:setToolsEnabled", handleBgSetToolsEnabled],
4604
- ["bg:setBrowserToolEnabled", handleBgSetBrowserToolEnabled],
4605
- ["bg:setAllBrowserToolsEnabled", handleBgSetAllBrowserToolsEnabled],
4505
+ ["bg:setToolPermission", handleBgSetToolPermission],
4506
+ ["bg:setAllToolsPermission", handleBgSetAllToolsPermission],
4507
+ ["bg:setPluginPermission", handleBgSetPluginPermission],
4606
4508
  ["bg:searchPlugins", handleBgSearchPlugins],
4607
4509
  ["bg:installPlugin", handleBgInstallPlugin],
4608
4510
  ["bg:removePlugin", handleBgRemovePlugin],
@@ -4610,7 +4512,6 @@ var backgroundHandlers = /* @__PURE__ */ new Map([
4610
4512
  ["plugin:logs", handlePluginLogs],
4611
4513
  ["tool:progress", handleToolProgress],
4612
4514
  ["sp:confirmationResponse", handleSpConfirmationResponse],
4613
- ["sp:confirmationTimeout", handleSpConfirmationTimeout],
4614
4515
  ["port-changed", handlePortChanged]
4615
4516
  ]);
4616
4517
  var EXTENSION_ONLY_TYPES = /* @__PURE__ */ new Set([
@@ -4618,18 +4519,15 @@ var EXTENSION_ONLY_TYPES = /* @__PURE__ */ new Set([
4618
4519
  "ws:state",
4619
4520
  "ws:message",
4620
4521
  "bg:getFullState",
4621
- "bg:setToolEnabled",
4622
- "bg:setAllToolsEnabled",
4623
- "bg:setToolsEnabled",
4624
- "bg:setBrowserToolEnabled",
4625
- "bg:setAllBrowserToolsEnabled",
4522
+ "bg:setToolPermission",
4523
+ "bg:setAllToolsPermission",
4524
+ "bg:setPluginPermission",
4626
4525
  "bg:searchPlugins",
4627
4526
  "bg:installPlugin",
4628
4527
  "bg:removePlugin",
4629
4528
  "bg:updatePlugin",
4630
4529
  "offscreen:getLogs",
4631
4530
  "sp:confirmationResponse",
4632
- "sp:confirmationTimeout",
4633
4531
  "port-changed"
4634
4532
  ]);
4635
4533
  var initBackgroundMessageHandlers = () => {