@opentabs-dev/browser-extension 0.0.62 → 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 (42) hide show
  1. package/dist/background-message-handlers.d.ts.map +1 -1
  2. package/dist/background-message-handlers.js +8 -2
  3. package/dist/background-message-handlers.js.map +1 -1
  4. package/dist/background.js +10 -69
  5. package/dist/extension-messages.d.ts +2 -0
  6. package/dist/extension-messages.d.ts.map +1 -1
  7. package/dist/message-router.d.ts.map +1 -1
  8. package/dist/message-router.js +2 -0
  9. package/dist/message-router.js.map +1 -1
  10. package/dist/offscreen/index.js +1 -1
  11. package/dist/offscreen/index.js.map +1 -1
  12. package/dist/side-panel/App.d.ts.map +1 -1
  13. package/dist/side-panel/App.js +3 -4
  14. package/dist/side-panel/App.js.map +1 -1
  15. package/dist/side-panel/bridge.d.ts +2 -2
  16. package/dist/side-panel/bridge.d.ts.map +1 -1
  17. package/dist/side-panel/bridge.js +7 -2
  18. package/dist/side-panel/bridge.js.map +1 -1
  19. package/dist/side-panel/components/BrowserToolsCard.d.ts +1 -2
  20. package/dist/side-panel/components/BrowserToolsCard.d.ts.map +1 -1
  21. package/dist/side-panel/components/BrowserToolsCard.js +4 -4
  22. package/dist/side-panel/components/BrowserToolsCard.js.map +1 -1
  23. package/dist/side-panel/components/PluginCard.d.ts +2 -2
  24. package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
  25. package/dist/side-panel/components/PluginCard.js +31 -8
  26. package/dist/side-panel/components/PluginCard.js.map +1 -1
  27. package/dist/side-panel/components/PluginList.d.ts +2 -3
  28. package/dist/side-panel/components/PluginList.d.ts.map +1 -1
  29. package/dist/side-panel/components/PluginList.js +100 -2
  30. package/dist/side-panel/components/PluginList.js.map +1 -1
  31. package/dist/side-panel/components/SearchResults.d.ts +1 -2
  32. package/dist/side-panel/components/SearchResults.d.ts.map +1 -1
  33. package/dist/side-panel/components/SearchResults.js +2 -2
  34. package/dist/side-panel/components/SearchResults.js.map +1 -1
  35. package/dist/side-panel/group-transitions.d.ts +55 -0
  36. package/dist/side-panel/group-transitions.d.ts.map +1 -0
  37. package/dist/side-panel/group-transitions.js +84 -0
  38. package/dist/side-panel/group-transitions.js.map +1 -0
  39. package/dist/side-panel/side-panel.js +805 -486
  40. package/dist/side-panel/styles.css +1 -1
  41. package/manifest.json +1 -1
  42. package/package.json +2 -2
@@ -1,58 +1,3 @@
1
- /**
2
- * Dev reload client for the side panel.
3
- *
4
- * Connects to the dev reload WebSocket relay server and refreshes the
5
- * page when a matching DO_UPDATE signal is received. Responds to both
6
- * 'side-panel' (UI-only change) and 'extension' (full reload — the
7
- * background script will also trigger chrome.runtime.reload(), but
8
- * refreshing the side panel first is harmless and can feel faster).
9
- *
10
- * This file is plain JS (not TypeScript) because it is read at build
11
- * time and prepended to the side panel bundle via esbuild's banner
12
- * option. The 18515 placeholder is replaced by string
13
- * substitution in the build script with the actual port number.
14
- */
15
- (() => {
16
- const port = 18515;
17
- const url = `ws://localhost:${port}`;
18
- const prefix = '[dev-reload]';
19
- let backoff = 500;
20
- const maxBackoff = 10000;
21
-
22
- const connect = () => {
23
- const ws = new WebSocket(url);
24
-
25
- ws.onopen = () => {
26
- console.log(prefix, 'Connected to', url);
27
- backoff = 500;
28
- };
29
-
30
- ws.onmessage = event => {
31
- try {
32
- const msg = JSON.parse(event.data);
33
- if (msg.type === 'do_update' && (msg.id === 'side-panel' || msg.id === 'extension')) {
34
- console.log(prefix, `Reloading side panel (${msg.id})`);
35
- window.location.reload();
36
- }
37
- } catch (_) {
38
- // Ignore malformed messages
39
- }
40
- };
41
-
42
- ws.onclose = () => {
43
- console.log(prefix, 'Disconnected — reconnecting in', `${backoff}ms`);
44
- setTimeout(connect, backoff);
45
- backoff = Math.min(backoff * 2, maxBackoff);
46
- };
47
-
48
- ws.onerror = () => {
49
- // onclose fires after onerror, so reconnect logic is handled there
50
- };
51
- };
52
-
53
- connect();
54
- })();
55
-
56
1
  var __create = Object.create;
57
2
  var __defProp = Object.defineProperty;
58
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -58504,7 +58449,7 @@ var require_jsx_runtime = __commonJS({
58504
58449
  });
58505
58450
 
58506
58451
  // src/side-panel/index.tsx
58507
- var import_react24 = __toESM(require_react(), 1);
58452
+ var import_react25 = __toESM(require_react(), 1);
58508
58453
  var import_client = __toESM(require_client(), 1);
58509
58454
 
58510
58455
  // src/side-panel/App.tsx
@@ -58756,6 +58701,7 @@ var BROWSER_TOOLS_CATALOG = [{
58756
58701
  // ../../node_modules/lucide-react/dist/esm/lucide-react.js
58757
58702
  init_circle_arrow_up();
58758
58703
  init_ellipsis();
58704
+ init_shield_question_mark();
58759
58705
  init_triangle_alert();
58760
58706
  init_check();
58761
58707
  init_chevron_down();
@@ -58764,6 +58710,7 @@ init_ghost();
58764
58710
  init_moon();
58765
58711
  init_search();
58766
58712
  init_server();
58713
+ init_shield_off();
58767
58714
  init_sun();
58768
58715
  init_trash_2();
58769
58716
  init_wrench();
@@ -61435,7 +61382,7 @@ var q2 = (l2, o2) => {
61435
61382
  var g2 = (0, import_react3.forwardRef)(q2);
61436
61383
 
61437
61384
  // src/side-panel/App.tsx
61438
- var import_react22 = __toESM(require_react(), 1);
61385
+ var import_react23 = __toESM(require_react(), 1);
61439
61386
 
61440
61387
  // src/side-panel/bridge.ts
61441
61388
  var matchesTool = (tool, filterLower) => tool.displayName.toLowerCase().includes(filterLower) || tool.name.toLowerCase().includes(filterLower) || tool.description.toLowerCase().includes(filterLower);
@@ -61463,10 +61410,13 @@ var setToolPermission = (plugin, tool, permission) => sendBgMessage({
61463
61410
  tool,
61464
61411
  permission
61465
61412
  });
61466
- var setPluginPermission = (plugin, permission) => sendBgMessage({
61413
+ var setPluginPermission = (plugin, permission, reviewedVersion) => sendBgMessage({
61467
61414
  type: "bg:setPluginPermission",
61468
61415
  plugin,
61469
- permission
61416
+ permission,
61417
+ ...reviewedVersion ? {
61418
+ reviewedVersion
61419
+ } : {}
61470
61420
  });
61471
61421
  var searchPlugins = (query) => sendBgMessage({
61472
61422
  type: "bg:searchPlugins",
@@ -76399,7 +76349,7 @@ var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1);
76399
76349
  var CHROME_ICON_SVG = ['<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48">', "<defs>", '<linearGradient id="chrome-a" x1="3.2173" y1="15" x2="44.7812" y2="15" gradientUnits="userSpaceOnUse">', '<stop offset="0" stop-color="#d93025"/><stop offset="1" stop-color="#ea4335"/>', "</linearGradient>", '<linearGradient id="chrome-b" x1="20.7219" y1="47.6791" x2="41.5039" y2="11.6837" gradientUnits="userSpaceOnUse">', '<stop offset="0" stop-color="#fcc934"/><stop offset="1" stop-color="#fbbc04"/>', "</linearGradient>", '<linearGradient id="chrome-c" x1="26.5981" y1="46.5015" x2="5.8161" y2="10.506" gradientUnits="userSpaceOnUse">', '<stop offset="0" stop-color="#1e8e3e"/><stop offset="1" stop-color="#34a853"/>', "</linearGradient>", "</defs>", '<circle cx="24" cy="23.9947" r="12" fill="#fff"/>', '<path d="M3.2154,36A24,24,0,1,0,12,3.2154,24,24,0,0,0,3.2154,36ZM34.3923,18A12,12,0,1,1,18,13.6077,12,12,0,0,1,34.3923,18Z" fill="none"/>', '<path d="M24,12H44.7812a23.9939,23.9939,0,0,0-41.5639.0029L13.6079,30l.0093-.0024A11.9852,11.9852,0,0,1,24,12Z" fill="url(#chrome-a)"/>', '<circle cx="24" cy="24" r="9.5" fill="#1a73e8"/>', '<path d="M34.3913,30.0029,24.0007,48A23.994,23.994,0,0,0,44.78,12.0031H23.9989l-.0025.0093A11.985,11.985,0,0,1,34.3913,30.0029Z" fill="url(#chrome-b)"/>', '<path d="M13.6086,30.0031,3.218,12.006A23.994,23.994,0,0,0,24.0025,48L34.3931,30.0029l-.0067-.0068a11.9852,11.9852,0,0,1-20.7778.007Z" fill="url(#chrome-c)"/>', "</svg>"].join("");
76400
76350
  var toDisplayName = (name) => name.replace(/^browser_/, "").split("_").map((w3) => w3.charAt(0).toUpperCase() + w3.slice(1)).join(" ");
76401
76351
  var BrowserToolsCard = (t0) => {
76402
- const $2 = (0, import_compiler_runtime12.c)(60);
76352
+ const $2 = (0, import_compiler_runtime12.c)(58);
76403
76353
  const {
76404
76354
  tools,
76405
76355
  activeTools,
@@ -76407,8 +76357,7 @@ var BrowserToolsCard = (t0) => {
76407
76357
  toolFilter,
76408
76358
  serverVersion,
76409
76359
  browserPermission: t1,
76410
- onBrowserPermissionChange,
76411
- skipPermissions
76360
+ onBrowserPermissionChange
76412
76361
  } = t0;
76413
76362
  const browserPermission = t1 === void 0 ? "off" : t1;
76414
76363
  const [toggleError, setToggleError] = (0, import_react12.useState)(null);
@@ -76499,25 +76448,25 @@ var BrowserToolsCard = (t0) => {
76499
76448
  let t13;
76500
76449
  let t8;
76501
76450
  let t9;
76502
- if ($2[9] !== activeTools || $2[10] !== browserPermission || $2[11] !== handleBrowserPermissionChange || $2[12] !== handleToolPermissionChange || $2[13] !== serverVersion || $2[14] !== skipPermissions || $2[15] !== toggleError || $2[16] !== toolFilter || $2[17] !== tools) {
76451
+ if ($2[9] !== activeTools || $2[10] !== browserPermission || $2[11] !== handleBrowserPermissionChange || $2[12] !== handleToolPermissionChange || $2[13] !== serverVersion || $2[14] !== toggleError || $2[15] !== toolFilter || $2[16] !== tools) {
76503
76452
  const filterLower = toolFilter?.toLowerCase() ?? "";
76504
76453
  const visibleTools = filterLower ? tools.filter((t_0) => toDisplayName(t_0.name).toLowerCase().includes(filterLower) || t_0.name.toLowerCase().includes(filterLower) || t_0.description.toLowerCase().includes(filterLower)) : tools;
76505
76454
  let t142;
76506
- if ($2[26] !== activeTools || $2[27] !== tools) {
76455
+ if ($2[25] !== activeTools || $2[26] !== tools) {
76507
76456
  let t153;
76508
- if ($2[29] !== activeTools) {
76457
+ if ($2[28] !== activeTools) {
76509
76458
  t153 = (t_1) => activeTools.has(`browser:${t_1.name}`);
76510
- $2[29] = activeTools;
76511
- $2[30] = t153;
76459
+ $2[28] = activeTools;
76460
+ $2[29] = t153;
76512
76461
  } else {
76513
- t153 = $2[30];
76462
+ t153 = $2[29];
76514
76463
  }
76515
76464
  t142 = tools.some(t153);
76516
- $2[26] = activeTools;
76517
- $2[27] = tools;
76518
- $2[28] = t142;
76465
+ $2[25] = activeTools;
76466
+ $2[26] = tools;
76467
+ $2[27] = t142;
76519
76468
  } else {
76520
- t142 = $2[28];
76469
+ t142 = $2[27];
76521
76470
  }
76522
76471
  const hasActiveTool = t142;
76523
76472
  const hasAnyGroup = visibleTools.some(_temp4);
@@ -76551,7 +76500,7 @@ var BrowserToolsCard = (t0) => {
76551
76500
  T1 = AccordionComponent.Item;
76552
76501
  t11 = "browser-tools";
76553
76502
  let t152;
76554
- if ($2[31] !== hasActiveTool) {
76503
+ if ($2[30] !== hasActiveTool) {
76555
76504
  t152 = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(PluginIcon, {
76556
76505
  pluginName: "browser",
76557
76506
  displayName: "Browser",
@@ -76561,14 +76510,14 @@ var BrowserToolsCard = (t0) => {
76561
76510
  iconInactiveSvg: CHROME_ICON_SVG,
76562
76511
  active: hasActiveTool
76563
76512
  });
76564
- $2[31] = hasActiveTool;
76565
- $2[32] = t152;
76513
+ $2[30] = hasActiveTool;
76514
+ $2[31] = t152;
76566
76515
  } else {
76567
- t152 = $2[32];
76516
+ t152 = $2[31];
76568
76517
  }
76569
76518
  let t16;
76570
76519
  let t17;
76571
- if ($2[33] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
76520
+ if ($2[32] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
76572
76521
  t16 = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", {
76573
76522
  className: "flex min-w-0 flex-1 items-center gap-1.5 truncate font-head text-foreground text-sm",
76574
76523
  children: ["Browser", /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Badge2, {
@@ -76581,75 +76530,73 @@ var BrowserToolsCard = (t0) => {
76581
76530
  t17 = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ChevronDown, {
76582
76531
  className: "chevron h-4 w-4 shrink-0 transition-transform duration-200"
76583
76532
  });
76584
- $2[33] = t16;
76585
- $2[34] = t17;
76533
+ $2[32] = t16;
76534
+ $2[33] = t17;
76586
76535
  } else {
76587
- t16 = $2[33];
76588
- t17 = $2[34];
76536
+ t16 = $2[32];
76537
+ t17 = $2[33];
76589
76538
  }
76590
76539
  let t18;
76591
- if ($2[35] !== t152) {
76540
+ if ($2[34] !== t152) {
76592
76541
  t18 = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Trigger2, {
76593
76542
  className: "flex min-w-0 flex-1 cursor-pointer items-center gap-2 px-3 py-2 focus:outline-hidden [&[data-state=open]>svg.chevron]:rotate-180",
76594
76543
  children: [t152, t16, t17]
76595
76544
  });
76596
- $2[35] = t152;
76597
- $2[36] = t18;
76545
+ $2[34] = t152;
76546
+ $2[35] = t18;
76598
76547
  } else {
76599
- t18 = $2[36];
76548
+ t18 = $2[35];
76600
76549
  }
76601
76550
  let t19;
76602
- if ($2[37] !== serverVersion) {
76551
+ if ($2[36] !== serverVersion) {
76603
76552
  t19 = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(BrowserToolsMenu, {
76604
76553
  serverVersion,
76605
76554
  className: "flex shrink-0 items-center px-1"
76606
76555
  });
76607
- $2[37] = serverVersion;
76608
- $2[38] = t19;
76556
+ $2[36] = serverVersion;
76557
+ $2[37] = t19;
76609
76558
  } else {
76610
- t19 = $2[38];
76559
+ t19 = $2[37];
76611
76560
  }
76612
- const t20 = skipPermissions ?? false;
76613
- let t21;
76614
- if ($2[39] !== browserPermission || $2[40] !== handleBrowserPermissionChange || $2[41] !== t20) {
76615
- t21 = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {
76561
+ let t20;
76562
+ if ($2[38] !== browserPermission || $2[39] !== handleBrowserPermissionChange) {
76563
+ t20 = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {
76616
76564
  className: "flex shrink-0 items-center px-3",
76617
76565
  children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(PermissionSelect, {
76618
76566
  value: browserPermission,
76619
76567
  onValueChange: handleBrowserPermissionChange,
76620
- disabled: t20,
76568
+ disabled: false,
76621
76569
  ariaLabel: "Permission for browser tools"
76622
76570
  })
76623
76571
  });
76624
- $2[39] = browserPermission;
76625
- $2[40] = handleBrowserPermissionChange;
76626
- $2[41] = t20;
76627
- $2[42] = t21;
76572
+ $2[38] = browserPermission;
76573
+ $2[39] = handleBrowserPermissionChange;
76574
+ $2[40] = t20;
76628
76575
  } else {
76629
- t21 = $2[42];
76576
+ t20 = $2[40];
76630
76577
  }
76631
- if ($2[43] !== t18 || $2[44] !== t19 || $2[45] !== t21) {
76578
+ if ($2[41] !== t18 || $2[42] !== t19 || $2[43] !== t20) {
76632
76579
  t12 = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Header, {
76633
76580
  className: "flex",
76634
- children: [t18, t19, t21]
76581
+ children: [t18, t19, t20]
76635
76582
  });
76636
- $2[43] = t18;
76637
- $2[44] = t19;
76638
- $2[45] = t21;
76639
- $2[46] = t12;
76583
+ $2[41] = t18;
76584
+ $2[42] = t19;
76585
+ $2[43] = t20;
76586
+ $2[44] = t12;
76640
76587
  } else {
76641
- t12 = $2[46];
76588
+ t12 = $2[44];
76642
76589
  }
76643
- if ($2[47] !== toggleError) {
76590
+ if ($2[45] !== toggleError) {
76644
76591
  t13 = toggleError && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(AlertComponent, {
76645
76592
  status: "error",
76646
76593
  className: "mx-3 mb-1 px-2 py-1 text-xs",
76647
76594
  children: toggleError
76648
76595
  });
76649
- $2[47] = toggleError;
76650
- $2[48] = t13;
76596
+ $2[45] = toggleError;
76597
+ $2[46] = t13;
76651
76598
  } else {
76652
- t13 = $2[48];
76599
+ t13 = $2[46];
76653
76600
  }
76654
76601
  T0 = AccordionComponent.Content;
76655
76602
  t8 = "border-border border-t";
@@ -76672,7 +76619,6 @@ var BrowserToolsCard = (t0) => {
76672
76619
  icon: tool_0.icon ?? "globe",
76673
76620
  permission: tool_0.permission,
76674
76621
  active: activeTools.has(`browser:${tool_0.name}`),
76675
- disabled: skipPermissions,
76676
76622
  onPermissionChange: handleToolPermissionChange
76677
76623
  }, tool_0.name))]
76678
76624
  }, group.name)) : visibleTools.map((tool_1) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ToolRow, {
@@ -76683,7 +76629,6 @@ var BrowserToolsCard = (t0) => {
76683
76629
  icon: tool_1.icon ?? "globe",
76684
76630
  permission: tool_1.permission,
76685
76631
  active: activeTools.has(`browser:${tool_1.name}`),
76686
- disabled: skipPermissions,
76687
76632
  onPermissionChange: handleToolPermissionChange
76688
76633
  }, tool_1.name));
76689
76634
  $2[9] = activeTools;
@@ -76691,56 +76636,55 @@ var BrowserToolsCard = (t0) => {
76691
76636
  $2[11] = handleBrowserPermissionChange;
76692
76637
  $2[12] = handleToolPermissionChange;
76693
76638
  $2[13] = serverVersion;
76694
- $2[14] = skipPermissions;
76695
- $2[15] = toggleError;
76696
- $2[16] = toolFilter;
76697
- $2[17] = tools;
76698
- $2[18] = T0;
76699
- $2[19] = T1;
76700
- $2[20] = t10;
76701
- $2[21] = t11;
76702
- $2[22] = t12;
76703
- $2[23] = t13;
76704
- $2[24] = t8;
76705
- $2[25] = t9;
76639
+ $2[14] = toggleError;
76640
+ $2[15] = toolFilter;
76641
+ $2[16] = tools;
76642
+ $2[17] = T0;
76643
+ $2[18] = T1;
76644
+ $2[19] = t10;
76645
+ $2[20] = t11;
76646
+ $2[21] = t12;
76647
+ $2[22] = t13;
76648
+ $2[23] = t8;
76649
+ $2[24] = t9;
76706
76650
  } else {
76707
- T0 = $2[18];
76708
- T1 = $2[19];
76709
- t10 = $2[20];
76710
- t11 = $2[21];
76711
- t12 = $2[22];
76712
- t13 = $2[23];
76713
- t8 = $2[24];
76714
- t9 = $2[25];
76651
+ T0 = $2[17];
76652
+ T1 = $2[18];
76653
+ t10 = $2[19];
76654
+ t11 = $2[20];
76655
+ t12 = $2[21];
76656
+ t13 = $2[22];
76657
+ t8 = $2[23];
76658
+ t9 = $2[24];
76715
76659
  }
76716
76660
  let t14;
76717
- if ($2[49] !== T0 || $2[50] !== t10 || $2[51] !== t8 || $2[52] !== t9) {
76661
+ if ($2[47] !== T0 || $2[48] !== t10 || $2[49] !== t8 || $2[50] !== t9) {
76718
76662
  t14 = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(T0, {
76719
76663
  className: t8,
76720
76664
  children: [t9, t10]
76721
76665
  });
76722
- $2[49] = T0;
76723
- $2[50] = t10;
76724
- $2[51] = t8;
76725
- $2[52] = t9;
76726
- $2[53] = t14;
76666
+ $2[47] = T0;
76667
+ $2[48] = t10;
76668
+ $2[49] = t8;
76669
+ $2[50] = t9;
76670
+ $2[51] = t14;
76727
76671
  } else {
76728
- t14 = $2[53];
76672
+ t14 = $2[51];
76729
76673
  }
76730
76674
  let t15;
76731
- if ($2[54] !== T1 || $2[55] !== t11 || $2[56] !== t12 || $2[57] !== t13 || $2[58] !== t14) {
76675
+ if ($2[52] !== T1 || $2[53] !== t11 || $2[54] !== t12 || $2[55] !== t13 || $2[56] !== t14) {
76732
76676
  t15 = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(T1, {
76733
76677
  value: t11,
76734
76678
  children: [t12, t13, t14]
76735
76679
  });
76736
- $2[54] = T1;
76737
- $2[55] = t11;
76738
- $2[56] = t12;
76739
- $2[57] = t13;
76740
- $2[58] = t14;
76741
- $2[59] = t15;
76680
+ $2[52] = T1;
76681
+ $2[53] = t11;
76682
+ $2[54] = t12;
76683
+ $2[55] = t13;
76684
+ $2[56] = t14;
76685
+ $2[57] = t15;
76742
76686
  } else {
76743
- t15 = $2[59];
76687
+ t15 = $2[57];
76744
76688
  }
76745
76689
  return t15;
76746
76690
  };
@@ -78909,6 +78853,50 @@ function _temp34(value) {
78909
78853
 
78910
78854
  // src/side-panel/components/PluginList.tsx
78911
78855
  var import_compiler_runtime25 = __toESM(require_compiler_runtime(), 1);
78856
+ var import_react21 = __toESM(require_react(), 1);
78857
+
78858
+ // src/side-panel/group-transitions.ts
78859
+ var FADE_IN_MS = 200;
78860
+ function groupPlugins(plugins) {
78861
+ const ready = [];
78862
+ const notReady = [];
78863
+ for (const p3 of plugins) {
78864
+ if (p3.tabState === "ready") {
78865
+ ready.push(p3);
78866
+ } else {
78867
+ notReady.push(p3);
78868
+ }
78869
+ }
78870
+ return {
78871
+ ready,
78872
+ notReady
78873
+ };
78874
+ }
78875
+ function detectGroupChanges(prev, current) {
78876
+ const changed = /* @__PURE__ */ new Set();
78877
+ for (const plugin of current) {
78878
+ const prevState = prev.get(plugin.name);
78879
+ if (prevState === void 0) continue;
78880
+ const wasReady = prevState === "ready";
78881
+ const isReady = plugin.tabState === "ready";
78882
+ if (wasReady !== isReady) {
78883
+ changed.add(plugin.name);
78884
+ }
78885
+ }
78886
+ return changed;
78887
+ }
78888
+ function buildStateSnapshot(plugins) {
78889
+ return new Map(plugins.map((p3) => [p3.name, p3.tabState]));
78890
+ }
78891
+ function getTransitionClass(pluginName, isReadyGroup, animating) {
78892
+ if (!animating.has(pluginName)) return void 0;
78893
+ return isReadyGroup ? "animate-group-fade-in" : "animate-group-fade-in-dim";
78894
+ }
78895
+ function collapseTransitioningItems(openItems, animating) {
78896
+ if (animating.size === 0) return openItems;
78897
+ const filtered = openItems.filter((name) => !animating.has(name));
78898
+ return filtered.length === openItems.length ? openItems : filtered;
78899
+ }
78912
78900
 
78913
78901
  // src/side-panel/components/FailedPluginCard.tsx
78914
78902
  var import_compiler_runtime22 = __toESM(require_compiler_runtime(), 1);
@@ -79292,7 +79280,7 @@ function _temp26(e_0) {
79292
79280
  // src/side-panel/components/PluginCard.tsx
79293
79281
  var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1);
79294
79282
  var PluginCard = (t0) => {
79295
- const $2 = (0, import_compiler_runtime24.c)(47);
79283
+ const $2 = (0, import_compiler_runtime24.c)(77);
79296
79284
  const {
79297
79285
  plugin,
79298
79286
  activeTools,
@@ -79303,9 +79291,10 @@ var PluginCard = (t0) => {
79303
79291
  updatingPlugin,
79304
79292
  removingPlugin,
79305
79293
  actionError,
79306
- skipPermissions
79294
+ transitionClass
79307
79295
  } = t0;
79308
79296
  const [toggleError, setToggleError] = (0, import_react20.useState)(null);
79297
+ const [pendingPermission, setPendingPermission] = (0, import_react20.useState)(null);
79309
79298
  const errorTimerRef = (0, import_react20.useRef)(void 0);
79310
79299
  const toggleCounter = (0, import_react20.useRef)(0);
79311
79300
  let t1;
@@ -79357,14 +79346,17 @@ var PluginCard = (t0) => {
79357
79346
  const prePluginPermRef = (0, import_react20.useRef)("off");
79358
79347
  let t6;
79359
79348
  if ($2[7] !== plugin.name || $2[8] !== plugin.permission || $2[9] !== setPlugins) {
79360
- t6 = (newPermission) => {
79349
+ t6 = (newPermission, reviewedVersion) => {
79361
79350
  const myVersion = toggleCounter.current = toggleCounter.current + 1;
79362
79351
  prePluginPermRef.current = plugin.permission;
79363
79352
  setPlugins((prev_0) => prev_0.map((p_0) => p_0.name === plugin.name ? {
79364
79353
  ...p_0,
79365
- permission: newPermission
79354
+ permission: newPermission,
79355
+ ...reviewedVersion ? {
79356
+ reviewed: true
79357
+ } : {}
79366
79358
  } : p_0));
79367
- setPluginPermission(plugin.name, newPermission).catch(() => {
79359
+ setPluginPermission(plugin.name, newPermission, reviewedVersion).catch(() => {
79368
79360
  if (toggleCounter.current === myVersion) {
79369
79361
  setPlugins((prev_1) => prev_1.map((p_1) => p_1.name === plugin.name ? {
79370
79362
  ...p_1,
@@ -79381,44 +79373,77 @@ var PluginCard = (t0) => {
79381
79373
  } else {
79382
79374
  t6 = $2[10];
79383
79375
  }
79384
- const handlePluginPermissionChange = t6;
79376
+ const applyPluginPermission = t6;
79385
79377
  let t7;
79386
- if ($2[11] !== plugin.name || $2[12] !== updatePluginTools) {
79387
- t7 = (toolName, newPermission_0) => {
79378
+ if ($2[11] !== applyPluginPermission || $2[12] !== plugin.permission || $2[13] !== plugin.reviewed) {
79379
+ t7 = (newPermission_0) => {
79380
+ if (!plugin.reviewed && plugin.permission === "off" && newPermission_0 !== "off") {
79381
+ setPendingPermission(newPermission_0);
79382
+ return;
79383
+ }
79384
+ applyPluginPermission(newPermission_0);
79385
+ };
79386
+ $2[11] = applyPluginPermission;
79387
+ $2[12] = plugin.permission;
79388
+ $2[13] = plugin.reviewed;
79389
+ $2[14] = t7;
79390
+ } else {
79391
+ t7 = $2[14];
79392
+ }
79393
+ const handlePluginPermissionChange = t7;
79394
+ let t8;
79395
+ if ($2[15] !== applyPluginPermission || $2[16] !== pendingPermission || $2[17] !== plugin.version) {
79396
+ t8 = () => {
79397
+ if (pendingPermission) {
79398
+ applyPluginPermission(pendingPermission, plugin.version);
79399
+ }
79400
+ setPendingPermission(null);
79401
+ };
79402
+ $2[15] = applyPluginPermission;
79403
+ $2[16] = pendingPermission;
79404
+ $2[17] = plugin.version;
79405
+ $2[18] = t8;
79406
+ } else {
79407
+ t8 = $2[18];
79408
+ }
79409
+ const handleEnableAnyway = t8;
79410
+ let t9;
79411
+ if ($2[19] !== plugin.name || $2[20] !== updatePluginTools) {
79412
+ t9 = (toolName, newPermission_1) => {
79388
79413
  const myVersion_0 = toggleCounter.current = toggleCounter.current + 1;
79389
79414
  updatePluginTools((prev_2) => {
79390
79415
  preToggleRef.current = prev_2;
79391
- return prev_2.map((t29) => t29.name === toolName ? {
79392
- ...t29,
79393
- permission: newPermission_0
79394
- } : t29);
79416
+ return prev_2.map((t42) => t42.name === toolName ? {
79417
+ ...t42,
79418
+ permission: newPermission_1
79419
+ } : t42);
79395
79420
  });
79396
- setToolPermission(plugin.name, toolName, newPermission_0).catch(() => {
79421
+ setToolPermission(plugin.name, toolName, newPermission_1).catch(() => {
79397
79422
  if (toggleCounter.current === myVersion_0) {
79398
79423
  updatePluginTools(() => preToggleRef.current);
79399
79424
  }
79400
79425
  showToggleError(`Failed to update ${toolName}`);
79401
79426
  });
79402
79427
  };
79403
- $2[11] = plugin.name;
79404
- $2[12] = updatePluginTools;
79405
- $2[13] = t7;
79428
+ $2[19] = plugin.name;
79429
+ $2[20] = updatePluginTools;
79430
+ $2[21] = t9;
79406
79431
  } else {
79407
- t7 = $2[13];
79432
+ t9 = $2[21];
79408
79433
  }
79409
- const handleToolPermissionChange = t7;
79434
+ const handleToolPermissionChange = t9;
79410
79435
  const filterLower = toolFilter?.toLowerCase() ?? "";
79411
79436
  const visibleTools = filterLower ? pluginTools.filter((t_0) => matchesTool(t_0, filterLower)) : pluginTools;
79412
- let t8;
79413
- if ($2[14] !== activeTools || $2[15] !== plugin.name) {
79414
- t8 = (t_1) => activeTools.has(`${plugin.name}:${t_1.name}`);
79415
- $2[14] = activeTools;
79416
- $2[15] = plugin.name;
79417
- $2[16] = t8;
79437
+ let t10;
79438
+ if ($2[22] !== activeTools || $2[23] !== plugin.name) {
79439
+ t10 = (t_1) => activeTools.has(`${plugin.name}:${t_1.name}`);
79440
+ $2[22] = activeTools;
79441
+ $2[23] = plugin.name;
79442
+ $2[24] = t10;
79418
79443
  } else {
79419
- t8 = $2[16];
79444
+ t10 = $2[24];
79420
79445
  }
79421
- const hasActiveTool = pluginTools.some(t8);
79446
+ const hasActiveTool = pluginTools.some(t10);
79422
79447
  const hasAnyGroup = visibleTools.some(_temp10);
79423
79448
  const toolGroups = [];
79424
79449
  if (hasAnyGroup) {
@@ -79447,32 +79472,32 @@ var PluginCard = (t0) => {
79447
79472
  });
79448
79473
  }
79449
79474
  }
79450
- let t9;
79451
- if ($2[17] !== plugin.version) {
79452
- t9 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(TooltipObject.Content, {
79475
+ let t11;
79476
+ if ($2[25] !== plugin.version) {
79477
+ t11 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(TooltipObject.Content, {
79453
79478
  children: ["v", plugin.version]
79454
79479
  });
79455
- $2[17] = plugin.version;
79456
- $2[18] = t9;
79480
+ $2[25] = plugin.version;
79481
+ $2[26] = t11;
79457
79482
  } else {
79458
- t9 = $2[18];
79483
+ t11 = $2[26];
79459
79484
  }
79460
- let t10;
79461
- if ($2[19] !== plugin.source) {
79462
- t10 = plugin.source === "local" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge2, {
79485
+ let t12;
79486
+ if ($2[27] !== plugin.source) {
79487
+ t12 = plugin.source === "local" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge2, {
79463
79488
  variant: "default",
79464
79489
  size: "sm",
79465
79490
  className: "align-middle",
79466
79491
  children: "DEV"
79467
79492
  });
79468
- $2[19] = plugin.source;
79469
- $2[20] = t10;
79493
+ $2[27] = plugin.source;
79494
+ $2[28] = t12;
79470
79495
  } else {
79471
- t10 = $2[20];
79496
+ t12 = $2[28];
79472
79497
  }
79473
- let t11;
79474
- if ($2[21] !== plugin.sdkVersion) {
79475
- t11 = !plugin.sdkVersion && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(TooltipObject, {
79498
+ let t13;
79499
+ if ($2[29] !== plugin.sdkVersion) {
79500
+ t13 = !plugin.sdkVersion && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(TooltipObject, {
79476
79501
  children: [/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(TooltipObject.Trigger, {
79477
79502
  asChild: true,
79478
79503
  children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge2, {
@@ -79485,108 +79510,124 @@ var PluginCard = (t0) => {
79485
79510
  children: "SDK version mismatch \u2014 rebuild plugin"
79486
79511
  })]
79487
79512
  });
79488
- $2[21] = plugin.sdkVersion;
79489
- $2[22] = t11;
79513
+ $2[29] = plugin.sdkVersion;
79514
+ $2[30] = t13;
79490
79515
  } else {
79491
- t11 = $2[22];
79516
+ t13 = $2[30];
79492
79517
  }
79493
- let t12;
79494
- if ($2[23] !== plugin.displayName || $2[24] !== t10 || $2[25] !== t11) {
79495
- t12 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
79518
+ let t14;
79519
+ if ($2[31] !== plugin.reviewed) {
79520
+ t14 = !plugin.reviewed && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(TooltipObject, {
79521
+ children: [/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(TooltipObject.Trigger, {
79522
+ asChild: true,
79523
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ShieldQuestionMark, {
79524
+ className: "inline-block h-3.5 w-3.5 align-middle text-muted-foreground"
79525
+ })
79526
+ }), /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(TooltipObject.Content, {
79527
+ children: "This plugin version has not been reviewed"
79528
+ })]
79529
+ });
79530
+ $2[31] = plugin.reviewed;
79531
+ $2[32] = t14;
79532
+ } else {
79533
+ t14 = $2[32];
79534
+ }
79535
+ let t15;
79536
+ if ($2[33] !== plugin.displayName || $2[34] !== t12 || $2[35] !== t13 || $2[36] !== t14) {
79537
+ t15 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
79496
79538
  className: "flex min-w-0 flex-1 items-center gap-1.5 truncate font-head text-foreground text-sm",
79497
- children: [plugin.displayName, t10, t11]
79539
+ children: [plugin.displayName, t12, t13, t14]
79498
79540
  });
79499
- $2[23] = plugin.displayName;
79500
- $2[24] = t10;
79501
- $2[25] = t11;
79502
- $2[26] = t12;
79541
+ $2[33] = plugin.displayName;
79542
+ $2[34] = t12;
79543
+ $2[35] = t13;
79544
+ $2[36] = t14;
79545
+ $2[37] = t15;
79503
79546
  } else {
79504
- t12 = $2[26];
79547
+ t15 = $2[37];
79505
79548
  }
79506
- let t13;
79507
- if ($2[27] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79508
- t13 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ChevronDown, {
79549
+ let t16;
79550
+ if ($2[38] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79551
+ t16 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ChevronDown, {
79509
79552
  className: "h-4 w-4 shrink-0 transition-transform duration-200"
79510
79553
  });
79511
- $2[27] = t13;
79554
+ $2[38] = t16;
79512
79555
  } else {
79513
- t13 = $2[27];
79556
+ t16 = $2[38];
79514
79557
  }
79515
- const t14 = onUpdate ?? _temp27;
79516
- const t15 = onRemove ?? _temp35;
79517
- const t16 = updatingPlugin ?? false;
79518
- const t17 = removingPlugin ?? false;
79519
- let t18;
79520
- if ($2[28] !== plugin || $2[29] !== t14 || $2[30] !== t15 || $2[31] !== t16 || $2[32] !== t17) {
79521
- t18 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(PluginMenu, {
79558
+ const t17 = onUpdate ?? _temp27;
79559
+ const t18 = onRemove ?? _temp35;
79560
+ const t19 = updatingPlugin ?? false;
79561
+ const t20 = removingPlugin ?? false;
79562
+ let t21;
79563
+ if ($2[39] !== plugin || $2[40] !== t17 || $2[41] !== t18 || $2[42] !== t19 || $2[43] !== t20) {
79564
+ t21 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(PluginMenu, {
79522
79565
  plugin,
79523
- onUpdate: t14,
79524
- onRemove: t15,
79525
- updating: t16,
79526
- removing: t17,
79566
+ onUpdate: t17,
79567
+ onRemove: t18,
79568
+ updating: t19,
79569
+ removing: t20,
79527
79570
  className: "flex shrink-0 items-center px-1"
79528
79571
  });
79529
- $2[28] = plugin;
79530
- $2[29] = t14;
79531
- $2[30] = t15;
79532
- $2[31] = t16;
79533
- $2[32] = t17;
79534
- $2[33] = t18;
79572
+ $2[39] = plugin;
79573
+ $2[40] = t17;
79574
+ $2[41] = t18;
79575
+ $2[42] = t19;
79576
+ $2[43] = t20;
79577
+ $2[44] = t21;
79535
79578
  } else {
79536
- t18 = $2[33];
79579
+ t21 = $2[44];
79537
79580
  }
79538
- const t19 = skipPermissions ?? false;
79539
- const t20 = `Permission for ${plugin.name} plugin`;
79540
- let t21;
79541
- if ($2[34] !== handlePluginPermissionChange || $2[35] !== plugin.permission || $2[36] !== t19 || $2[37] !== t20) {
79542
- t21 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", {
79581
+ const t22 = `Permission for ${plugin.name} plugin`;
79582
+ let t23;
79583
+ if ($2[45] !== handlePluginPermissionChange || $2[46] !== plugin.permission || $2[47] !== t22) {
79584
+ t23 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", {
79543
79585
  className: "flex shrink-0 items-center px-3",
79544
79586
  children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(PermissionSelect, {
79545
79587
  value: plugin.permission,
79546
79588
  onValueChange: handlePluginPermissionChange,
79547
- disabled: t19,
79548
- ariaLabel: t20
79589
+ disabled: false,
79590
+ ariaLabel: t22
79549
79591
  })
79550
79592
  });
79551
- $2[34] = handlePluginPermissionChange;
79552
- $2[35] = plugin.permission;
79553
- $2[36] = t19;
79554
- $2[37] = t20;
79555
- $2[38] = t21;
79593
+ $2[45] = handlePluginPermissionChange;
79594
+ $2[46] = plugin.permission;
79595
+ $2[47] = t22;
79596
+ $2[48] = t23;
79556
79597
  } else {
79557
- t21 = $2[38];
79598
+ t23 = $2[48];
79558
79599
  }
79559
- let t22;
79560
- if ($2[39] !== toggleError) {
79561
- t22 = toggleError && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(AlertComponent, {
79600
+ let t24;
79601
+ if ($2[49] !== toggleError) {
79602
+ t24 = toggleError && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(AlertComponent, {
79562
79603
  status: "error",
79563
79604
  className: "mx-3 mb-1 px-2 py-1 text-xs",
79564
79605
  children: toggleError
79565
79606
  });
79566
- $2[39] = toggleError;
79567
- $2[40] = t22;
79607
+ $2[49] = toggleError;
79608
+ $2[50] = t24;
79568
79609
  } else {
79569
- t22 = $2[40];
79610
+ t24 = $2[50];
79570
79611
  }
79571
- let t23;
79572
- if ($2[41] !== actionError) {
79573
- t23 = actionError && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(AlertComponent, {
79612
+ let t25;
79613
+ if ($2[51] !== actionError) {
79614
+ t25 = actionError && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(AlertComponent, {
79574
79615
  status: "error",
79575
79616
  className: "mx-3 mb-1 px-2 py-1 text-xs",
79576
79617
  children: actionError
79577
79618
  });
79578
- $2[41] = actionError;
79579
- $2[42] = t23;
79619
+ $2[51] = actionError;
79620
+ $2[52] = t25;
79580
79621
  } else {
79581
- t23 = $2[42];
79622
+ t25 = $2[52];
79582
79623
  }
79583
- const t24 = AccordionComponent;
79584
- const t25 = "border-border border-t";
79585
- const t26 = toolFilter && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
79624
+ const t26 = AccordionComponent;
79625
+ const t27 = "border-border border-t";
79626
+ const t28 = toolFilter && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
79586
79627
  className: "mb-1 px-3 pt-2 text-muted-foreground text-xs",
79587
79628
  children: [visibleTools.length, " of ", pluginTools.length, " tools"]
79588
79629
  });
79589
- const t27 = hasAnyGroup ? toolGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
79630
+ const t29 = hasAnyGroup ? toolGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
79590
79631
  children: [/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", {
79591
79632
  className: "border-border border-b bg-muted/20 px-3 py-1",
79592
79633
  children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", {
@@ -79601,7 +79642,6 @@ var PluginCard = (t0) => {
79601
79642
  icon: tool_0.icon,
79602
79643
  permission: tool_0.permission,
79603
79644
  active: activeTools.has(`${plugin.name}:${tool_0.name}`),
79604
- disabled: skipPermissions,
79605
79645
  onPermissionChange: handleToolPermissionChange
79606
79646
  }, tool_0.name))]
79607
79647
  }, group.name)) : visibleTools.map((tool_1) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ToolRow, {
@@ -79612,25 +79652,138 @@ var PluginCard = (t0) => {
79612
79652
  icon: tool_1.icon,
79613
79653
  permission: tool_1.permission,
79614
79654
  active: activeTools.has(`${plugin.name}:${tool_1.name}`),
79615
- disabled: skipPermissions,
79616
79655
  onPermissionChange: handleToolPermissionChange
79617
79656
  }, tool_1.name));
79618
- let t28;
79619
- if ($2[43] !== t24.Content || $2[44] !== t26 || $2[45] !== t27) {
79620
- t28 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(t24.Content, {
79621
- className: t25,
79622
- children: [t26, t27]
79657
+ let t30;
79658
+ if ($2[53] !== t26.Content || $2[54] !== t28 || $2[55] !== t29) {
79659
+ t30 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(t26.Content, {
79660
+ className: t27,
79661
+ children: [t28, t29]
79623
79662
  });
79624
- $2[43] = t24.Content;
79625
- $2[44] = t26;
79626
- $2[45] = t27;
79627
- $2[46] = t28;
79663
+ $2[53] = t26.Content;
79664
+ $2[54] = t28;
79665
+ $2[55] = t29;
79666
+ $2[56] = t30;
79667
+ } else {
79668
+ t30 = $2[56];
79669
+ }
79670
+ const t31 = pendingPermission !== null;
79671
+ let t32;
79672
+ if ($2[57] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79673
+ t32 = (open) => !open && setPendingPermission(null);
79674
+ $2[57] = t32;
79628
79675
  } else {
79629
- t28 = $2[46];
79676
+ t32 = $2[57];
79677
+ }
79678
+ let t33;
79679
+ if ($2[58] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79680
+ t33 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogObject.Header, {
79681
+ children: "Unreviewed Plugin"
79682
+ });
79683
+ $2[58] = t33;
79684
+ } else {
79685
+ t33 = $2[58];
79686
+ }
79687
+ let t34;
79688
+ if ($2[59] !== plugin.displayName || $2[60] !== plugin.version) {
79689
+ t34 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("p", {
79690
+ className: "font-mono text-foreground text-sm",
79691
+ children: [plugin.displayName, " v", plugin.version]
79692
+ });
79693
+ $2[59] = plugin.displayName;
79694
+ $2[60] = plugin.version;
79695
+ $2[61] = t34;
79696
+ } else {
79697
+ t34 = $2[61];
79698
+ }
79699
+ let t35;
79700
+ if ($2[62] !== plugin.name) {
79701
+ t35 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("p", {
79702
+ className: "mt-2 text-foreground text-sm",
79703
+ children: ["This plugin version has not been reviewed. You can ask your AI agent to review the adapter code by saying \u201Creview the ", plugin.name, " plugin\u201D in your chat."]
79704
+ });
79705
+ $2[62] = plugin.name;
79706
+ $2[63] = t35;
79707
+ } else {
79708
+ t35 = $2[63];
79709
+ }
79710
+ let t36;
79711
+ if ($2[64] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79712
+ t36 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", {
79713
+ className: "mt-2 text-muted-foreground text-xs",
79714
+ children: "You can also enable it now without review."
79715
+ });
79716
+ $2[64] = t36;
79717
+ } else {
79718
+ t36 = $2[64];
79719
+ }
79720
+ let t37;
79721
+ if ($2[65] !== t34 || $2[66] !== t35) {
79722
+ t37 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Body, {
79723
+ children: [t34, t35, t36]
79724
+ });
79725
+ $2[65] = t34;
79726
+ $2[66] = t35;
79727
+ $2[67] = t37;
79728
+ } else {
79729
+ t37 = $2[67];
79730
+ }
79731
+ let t38;
79732
+ if ($2[68] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79733
+ t38 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogObject.Close, {
79734
+ asChild: true,
79735
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, {
79736
+ size: "sm",
79737
+ variant: "outline",
79738
+ children: "Cancel"
79739
+ })
79740
+ });
79741
+ $2[68] = t38;
79742
+ } else {
79743
+ t38 = $2[68];
79744
+ }
79745
+ let t39;
79746
+ if ($2[69] !== handleEnableAnyway) {
79747
+ t39 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Footer, {
79748
+ children: [t38, /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, {
79749
+ size: "sm",
79750
+ onClick: handleEnableAnyway,
79751
+ children: "Enable Anyway"
79752
+ })]
79753
+ });
79754
+ $2[69] = handleEnableAnyway;
79755
+ $2[70] = t39;
79756
+ } else {
79757
+ t39 = $2[70];
79758
+ }
79759
+ let t40;
79760
+ if ($2[71] !== t37 || $2[72] !== t39) {
79761
+ t40 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Content, {
79762
+ onInteractOutside: _temp43,
79763
+ children: [t33, t37, t39]
79764
+ });
79765
+ $2[71] = t37;
79766
+ $2[72] = t39;
79767
+ $2[73] = t40;
79768
+ } else {
79769
+ t40 = $2[73];
79770
+ }
79771
+ let t41;
79772
+ if ($2[74] !== t31 || $2[75] !== t40) {
79773
+ t41 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogObject, {
79774
+ open: t31,
79775
+ onOpenChange: t32,
79776
+ children: t40
79777
+ });
79778
+ $2[74] = t31;
79779
+ $2[75] = t40;
79780
+ $2[76] = t41;
79781
+ } else {
79782
+ t41 = $2[76];
79630
79783
  }
79631
79784
  return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(AccordionComponent.Item, {
79632
79785
  value: plugin.name,
79633
- className: removingPlugin ? "pointer-events-none opacity-60 transition-opacity" : void 0,
79786
+ className: transitionClass ?? (removingPlugin ? "pointer-events-none opacity-60 transition-opacity" : plugin.tabState !== "ready" ? "opacity-70 transition-opacity" : void 0),
79634
79787
  children: [/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Header, {
79635
79788
  className: "flex",
79636
79789
  children: [/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Trigger2, {
@@ -79651,10 +79804,10 @@ var PluginCard = (t0) => {
79651
79804
  active: hasActiveTool
79652
79805
  })
79653
79806
  })
79654
- }), t9]
79655
- }), t12, t13]
79656
- }), t18, t21]
79657
- }), t22, t23, t28]
79807
+ }), t11]
79808
+ }), t15, t16]
79809
+ }), t21, t23]
79810
+ }), t24, t25, t30, t41]
79658
79811
  });
79659
79812
  };
79660
79813
  function _temp10(t_2) {
@@ -79664,11 +79817,127 @@ function _temp27() {
79664
79817
  }
79665
79818
  function _temp35() {
79666
79819
  }
79820
+ function _temp43(e2) {
79821
+ return e2.preventDefault();
79822
+ }
79667
79823
 
79668
79824
  // src/side-panel/components/PluginList.tsx
79669
79825
  var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1);
79826
+ function useGroupTransitions(plugins, isFiltering) {
79827
+ const $2 = (0, import_compiler_runtime25.c)(14);
79828
+ let t0;
79829
+ if ($2[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79830
+ t0 = /* @__PURE__ */ new Map();
79831
+ $2[0] = t0;
79832
+ } else {
79833
+ t0 = $2[0];
79834
+ }
79835
+ const prevStates = (0, import_react21.useRef)(t0);
79836
+ let t1;
79837
+ if ($2[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79838
+ t1 = /* @__PURE__ */ new Set();
79839
+ $2[1] = t1;
79840
+ } else {
79841
+ t1 = $2[1];
79842
+ }
79843
+ const [animating, setAnimating] = (0, import_react21.useState)(t1);
79844
+ let t2;
79845
+ if ($2[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79846
+ t2 = /* @__PURE__ */ new Map();
79847
+ $2[2] = t2;
79848
+ } else {
79849
+ t2 = $2[2];
79850
+ }
79851
+ const clearTimers = (0, import_react21.useRef)(t2);
79852
+ let t3;
79853
+ let t4;
79854
+ if ($2[3] !== isFiltering || $2[4] !== plugins) {
79855
+ t3 = () => {
79856
+ if (isFiltering) {
79857
+ prevStates.current = buildStateSnapshot(plugins);
79858
+ return;
79859
+ }
79860
+ const changed = detectGroupChanges(prevStates.current, plugins);
79861
+ prevStates.current = buildStateSnapshot(plugins);
79862
+ if (changed.size === 0) {
79863
+ return;
79864
+ }
79865
+ setAnimating((prev) => {
79866
+ const next = new Set(prev);
79867
+ for (const name of changed) {
79868
+ next.add(name);
79869
+ }
79870
+ return next;
79871
+ });
79872
+ for (const name_0 of changed) {
79873
+ const existing = clearTimers.current.get(name_0);
79874
+ if (existing) {
79875
+ clearTimeout(existing);
79876
+ }
79877
+ clearTimers.current.set(name_0, setTimeout(() => {
79878
+ clearTimers.current.delete(name_0);
79879
+ setAnimating((prev_0) => {
79880
+ if (!prev_0.has(name_0)) {
79881
+ return prev_0;
79882
+ }
79883
+ const next_0 = new Set(prev_0);
79884
+ next_0.delete(name_0);
79885
+ return next_0;
79886
+ });
79887
+ }, FADE_IN_MS));
79888
+ }
79889
+ };
79890
+ t4 = [plugins, isFiltering];
79891
+ $2[3] = isFiltering;
79892
+ $2[4] = plugins;
79893
+ $2[5] = t3;
79894
+ $2[6] = t4;
79895
+ } else {
79896
+ t3 = $2[5];
79897
+ t4 = $2[6];
79898
+ }
79899
+ (0, import_react21.useEffect)(t3, t4);
79900
+ let t5;
79901
+ let t6;
79902
+ if ($2[7] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79903
+ t5 = () => () => {
79904
+ for (const timer of clearTimers.current.values()) {
79905
+ clearTimeout(timer);
79906
+ }
79907
+ };
79908
+ t6 = [];
79909
+ $2[7] = t5;
79910
+ $2[8] = t6;
79911
+ } else {
79912
+ t5 = $2[7];
79913
+ t6 = $2[8];
79914
+ }
79915
+ (0, import_react21.useEffect)(t5, t6);
79916
+ let t7;
79917
+ if ($2[9] !== animating) {
79918
+ t7 = (pluginName, isReadyGroup) => getTransitionClass(pluginName, isReadyGroup, animating);
79919
+ $2[9] = animating;
79920
+ $2[10] = t7;
79921
+ } else {
79922
+ t7 = $2[10];
79923
+ }
79924
+ const resolveTransitionClass = t7;
79925
+ let t8;
79926
+ if ($2[11] !== animating || $2[12] !== resolveTransitionClass) {
79927
+ t8 = {
79928
+ animating,
79929
+ resolveTransitionClass
79930
+ };
79931
+ $2[11] = animating;
79932
+ $2[12] = resolveTransitionClass;
79933
+ $2[13] = t8;
79934
+ } else {
79935
+ t8 = $2[13];
79936
+ }
79937
+ return t8;
79938
+ }
79670
79939
  var PluginList = (t0) => {
79671
- const $2 = (0, import_compiler_runtime25.c)(35);
79940
+ const $2 = (0, import_compiler_runtime25.c)(21);
79672
79941
  const {
79673
79942
  plugins,
79674
79943
  failedPlugins,
@@ -79678,123 +79947,177 @@ var PluginList = (t0) => {
79678
79947
  onUpdate,
79679
79948
  onRemove,
79680
79949
  removingPlugins,
79681
- pluginErrors,
79682
- skipPermissions
79950
+ pluginErrors
79683
79951
  } = t0;
79684
- let filterLower;
79952
+ const filterLower = toolFilter.toLowerCase();
79953
+ const visiblePlugins = filterLower ? plugins.filter((p3) => (p3.tools ?? []).some((t9) => matchesTool(t9, filterLower))) : plugins;
79954
+ const visibleFailed = filterLower ? [] : failedPlugins;
79955
+ const {
79956
+ animating,
79957
+ resolveTransitionClass
79958
+ } = useGroupTransitions(plugins, !!filterLower);
79685
79959
  let t1;
79686
- if ($2[0] !== plugins || $2[1] !== toolFilter) {
79687
- filterLower = toolFilter.toLowerCase();
79688
- t1 = filterLower ? plugins.filter((p3) => (p3.tools ?? []).some((t7) => matchesTool(t7, filterLower))) : plugins;
79689
- $2[0] = plugins;
79690
- $2[1] = toolFilter;
79691
- $2[2] = filterLower;
79692
- $2[3] = t1;
79960
+ if ($2[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79961
+ t1 = [];
79962
+ $2[0] = t1;
79693
79963
  } else {
79694
- filterLower = $2[2];
79695
- t1 = $2[3];
79964
+ t1 = $2[0];
79696
79965
  }
79697
- const visiblePlugins = t1;
79966
+ const [openReady, setOpenReady] = (0, import_react21.useState)(t1);
79698
79967
  let t2;
79699
- if ($2[4] !== failedPlugins || $2[5] !== filterLower) {
79700
- t2 = filterLower ? [] : failedPlugins;
79701
- $2[4] = failedPlugins;
79702
- $2[5] = filterLower;
79703
- $2[6] = t2;
79968
+ if ($2[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79969
+ t2 = [];
79970
+ $2[1] = t2;
79704
79971
  } else {
79705
- t2 = $2[6];
79972
+ t2 = $2[1];
79706
79973
  }
79707
- const visibleFailed = t2;
79974
+ const [openNotReady, setOpenNotReady] = (0, import_react21.useState)(t2);
79975
+ let t3;
79976
+ let t4;
79977
+ if ($2[2] !== animating) {
79978
+ t3 = () => {
79979
+ if (animating.size === 0) {
79980
+ return;
79981
+ }
79982
+ setOpenReady((prev) => collapseTransitioningItems(prev, animating));
79983
+ setOpenNotReady((prev_0) => collapseTransitioningItems(prev_0, animating));
79984
+ };
79985
+ t4 = [animating];
79986
+ $2[2] = animating;
79987
+ $2[3] = t3;
79988
+ $2[4] = t4;
79989
+ } else {
79990
+ t3 = $2[3];
79991
+ t4 = $2[4];
79992
+ }
79993
+ (0, import_react21.useEffect)(t3, t4);
79994
+ const {
79995
+ ready: readyPlugins,
79996
+ notReady: notReadyPlugins
79997
+ } = filterLower ? {
79998
+ ready: [],
79999
+ notReady: []
80000
+ } : groupPlugins(visiblePlugins);
80001
+ const hasNotReady = notReadyPlugins.length > 0;
80002
+ const prevHadNotReady = (0, import_react21.useRef)(false);
80003
+ const [labelVisible, setLabelVisible] = (0, import_react21.useState)(false);
80004
+ const [labelMounted, setLabelMounted] = (0, import_react21.useState)(false);
80005
+ (0, import_react21.useEffect)(() => {
80006
+ let unmountTimer;
80007
+ if (filterLower) {
80008
+ setLabelMounted(false);
80009
+ setLabelVisible(false);
80010
+ prevHadNotReady.current = false;
80011
+ } else {
80012
+ if (hasNotReady && !prevHadNotReady.current) {
80013
+ setLabelMounted(true);
80014
+ requestAnimationFrame(() => {
80015
+ requestAnimationFrame(() => {
80016
+ setLabelVisible(true);
80017
+ });
80018
+ });
80019
+ prevHadNotReady.current = hasNotReady;
80020
+ } else {
80021
+ if (!hasNotReady && prevHadNotReady.current) {
80022
+ setLabelVisible(false);
80023
+ unmountTimer = setTimeout(() => setLabelMounted(false), FADE_IN_MS);
80024
+ prevHadNotReady.current = hasNotReady;
80025
+ } else {
80026
+ if (hasNotReady) {
80027
+ setLabelMounted(true);
80028
+ setLabelVisible(true);
80029
+ prevHadNotReady.current = hasNotReady;
80030
+ }
80031
+ }
80032
+ }
80033
+ }
80034
+ return () => clearTimeout(unmountTimer);
80035
+ }, [hasNotReady, filterLower]);
79708
80036
  if (filterLower && visiblePlugins.length === 0) {
79709
- let t32;
79710
- if ($2[7] !== toolFilter) {
79711
- t32 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", {
80037
+ let t52;
80038
+ if ($2[5] !== toolFilter) {
80039
+ t52 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", {
79712
80040
  className: "py-8 text-center text-muted-foreground text-sm",
79713
80041
  children: ["No tools matching \u201C", toolFilter, "\u201D"]
79714
80042
  });
79715
- $2[7] = toolFilter;
79716
- $2[8] = t32;
80043
+ $2[5] = toolFilter;
80044
+ $2[6] = t52;
79717
80045
  } else {
79718
- t32 = $2[8];
80046
+ t52 = $2[6];
79719
80047
  }
79720
- return t32;
80048
+ return t52;
79721
80049
  }
79722
- let t3;
79723
- if ($2[9] !== visibleFailed) {
79724
- t3 = visibleFailed.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", {
80050
+ let t5;
80051
+ if ($2[7] !== activeTools || $2[8] !== onRemove || $2[9] !== onUpdate || $2[10] !== pluginErrors || $2[11] !== removingPlugins || $2[12] !== resolveTransitionClass || $2[13] !== setPlugins || $2[14] !== toolFilter) {
80052
+ t5 = (plugin, isReadyGroup) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(PluginCard, {
80053
+ plugin,
80054
+ activeTools,
80055
+ setPlugins,
80056
+ toolFilter,
80057
+ onUpdate: onUpdate ? () => onUpdate(plugin.name) : void 0,
80058
+ onRemove: onRemove ? () => onRemove(plugin.name) : void 0,
80059
+ removingPlugin: removingPlugins?.has(plugin.name),
80060
+ actionError: pluginErrors?.get(plugin.name) ?? null,
80061
+ transitionClass: resolveTransitionClass(plugin.name, isReadyGroup)
80062
+ }, plugin.name);
80063
+ $2[7] = activeTools;
80064
+ $2[8] = onRemove;
80065
+ $2[9] = onUpdate;
80066
+ $2[10] = pluginErrors;
80067
+ $2[11] = removingPlugins;
80068
+ $2[12] = resolveTransitionClass;
80069
+ $2[13] = setPlugins;
80070
+ $2[14] = toolFilter;
80071
+ $2[15] = t5;
80072
+ } else {
80073
+ t5 = $2[15];
80074
+ }
80075
+ const renderCard = t5;
80076
+ let t6;
80077
+ if ($2[16] !== visibleFailed) {
80078
+ t6 = visibleFailed.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", {
79725
80079
  className: "mb-3 space-y-2",
79726
80080
  children: visibleFailed.map(_temp11)
79727
80081
  });
79728
- $2[9] = visibleFailed;
79729
- $2[10] = t3;
79730
- } else {
79731
- t3 = $2[10];
79732
- }
79733
- let t4;
79734
- if ($2[11] !== activeTools || $2[12] !== onRemove || $2[13] !== onUpdate || $2[14] !== pluginErrors || $2[15] !== removingPlugins || $2[16] !== setPlugins || $2[17] !== skipPermissions || $2[18] !== toolFilter || $2[19] !== visiblePlugins) {
79735
- let t52;
79736
- if ($2[21] !== activeTools || $2[22] !== onRemove || $2[23] !== onUpdate || $2[24] !== pluginErrors || $2[25] !== removingPlugins || $2[26] !== setPlugins || $2[27] !== skipPermissions || $2[28] !== toolFilter) {
79737
- t52 = (plugin) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(PluginCard, {
79738
- plugin,
79739
- activeTools,
79740
- setPlugins,
79741
- toolFilter,
79742
- onUpdate: onUpdate ? () => onUpdate(plugin.name) : void 0,
79743
- onRemove: onRemove ? () => onRemove(plugin.name) : void 0,
79744
- removingPlugin: removingPlugins?.has(plugin.name),
79745
- actionError: pluginErrors?.get(plugin.name) ?? null,
79746
- skipPermissions
79747
- }, plugin.name);
79748
- $2[21] = activeTools;
79749
- $2[22] = onRemove;
79750
- $2[23] = onUpdate;
79751
- $2[24] = pluginErrors;
79752
- $2[25] = removingPlugins;
79753
- $2[26] = setPlugins;
79754
- $2[27] = skipPermissions;
79755
- $2[28] = toolFilter;
79756
- $2[29] = t52;
79757
- } else {
79758
- t52 = $2[29];
79759
- }
79760
- t4 = visiblePlugins.map(t52);
79761
- $2[11] = activeTools;
79762
- $2[12] = onRemove;
79763
- $2[13] = onUpdate;
79764
- $2[14] = pluginErrors;
79765
- $2[15] = removingPlugins;
79766
- $2[16] = setPlugins;
79767
- $2[17] = skipPermissions;
79768
- $2[18] = toolFilter;
79769
- $2[19] = visiblePlugins;
79770
- $2[20] = t4;
80082
+ $2[16] = visibleFailed;
80083
+ $2[17] = t6;
79771
80084
  } else {
79772
- t4 = $2[20];
80085
+ t6 = $2[17];
79773
80086
  }
79774
- let t5;
79775
- if ($2[30] !== t4) {
79776
- t5 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(AccordionComponent, {
80087
+ const t7 = filterLower ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(AccordionComponent, {
80088
+ type: "multiple",
80089
+ className: "space-y-2",
80090
+ children: visiblePlugins.map((p_0) => renderCard(p_0, true))
80091
+ }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, {
80092
+ children: [readyPlugins.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(AccordionComponent, {
79777
80093
  type: "multiple",
80094
+ value: openReady,
80095
+ onValueChange: setOpenReady,
79778
80096
  className: "space-y-2",
79779
- children: t4
79780
- });
79781
- $2[30] = t4;
79782
- $2[31] = t5;
79783
- } else {
79784
- t5 = $2[31];
79785
- }
79786
- let t6;
79787
- if ($2[32] !== t3 || $2[33] !== t5) {
79788
- t6 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, {
79789
- children: [t3, t5]
80097
+ children: readyPlugins.map((p_1) => renderCard(p_1, true))
80098
+ }), labelMounted && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", {
80099
+ className: `px-3 pt-3 pb-1 font-mono text-[10px] text-muted-foreground uppercase tracking-widest transition-opacity duration-200 ${labelVisible ? "opacity-100" : "opacity-0"}`,
80100
+ children: "NOT CONNECTED"
80101
+ }), notReadyPlugins.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(AccordionComponent, {
80102
+ type: "multiple",
80103
+ value: openNotReady,
80104
+ onValueChange: setOpenNotReady,
80105
+ className: "space-y-2",
80106
+ children: notReadyPlugins.map((p_2) => renderCard(p_2, false))
80107
+ })]
80108
+ });
80109
+ let t8;
80110
+ if ($2[18] !== t6 || $2[19] !== t7) {
80111
+ t8 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, {
80112
+ children: [t6, t7]
79790
80113
  });
79791
- $2[32] = t3;
79792
- $2[33] = t5;
79793
- $2[34] = t6;
80114
+ $2[18] = t6;
80115
+ $2[19] = t7;
80116
+ $2[20] = t8;
79794
80117
  } else {
79795
- t6 = $2[34];
80118
+ t8 = $2[20];
79796
80119
  }
79797
- return t6;
80120
+ return t8;
79798
80121
  };
79799
80122
  function _temp11(fp) {
79800
80123
  return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(FailedPluginCard, {
@@ -80069,7 +80392,7 @@ var SectionHeader = (t0) => {
80069
80392
  };
80070
80393
  var matchesBrowserTool = (tool, filterLower) => toDisplayName(tool.name).toLowerCase().includes(filterLower) || tool.name.toLowerCase().includes(filterLower) || tool.description.toLowerCase().includes(filterLower);
80071
80394
  var SearchResults = (t0) => {
80072
- const $2 = (0, import_compiler_runtime28.c)(58);
80395
+ const $2 = (0, import_compiler_runtime28.c)(56);
80073
80396
  const {
80074
80397
  plugins,
80075
80398
  failedPlugins,
@@ -80087,8 +80410,7 @@ var SearchResults = (t0) => {
80087
80410
  onRemove,
80088
80411
  removingPlugins,
80089
80412
  pluginErrors,
80090
- serverVersion,
80091
- skipPermissions
80413
+ serverVersion
80092
80414
  } = t0;
80093
80415
  let failedMatches;
80094
80416
  let installedMatches;
@@ -80124,20 +80446,20 @@ var SearchResults = (t0) => {
80124
80446
  let t3;
80125
80447
  let t4;
80126
80448
  let t5;
80127
- if ($2[9] !== activeTools || $2[10] !== browserTools || $2[11] !== failedMatches || $2[12] !== hasBrowserToolMatches || $2[13] !== installErrors || $2[14] !== installedMatches || $2[15] !== installedShortNames || $2[16] !== installingPlugins || $2[17] !== npmResults || $2[18] !== npmSearching || $2[19] !== onInstall || $2[20] !== onRemove || $2[21] !== onUpdate || $2[22] !== pluginErrors || $2[23] !== removingPlugins || $2[24] !== serverVersion || $2[25] !== setBrowserTools || $2[26] !== setPlugins || $2[27] !== skipPermissions || $2[28] !== toolFilter) {
80449
+ if ($2[9] !== activeTools || $2[10] !== browserTools || $2[11] !== failedMatches || $2[12] !== hasBrowserToolMatches || $2[13] !== installErrors || $2[14] !== installedMatches || $2[15] !== installedShortNames || $2[16] !== installingPlugins || $2[17] !== npmResults || $2[18] !== npmSearching || $2[19] !== onInstall || $2[20] !== onRemove || $2[21] !== onUpdate || $2[22] !== pluginErrors || $2[23] !== removingPlugins || $2[24] !== serverVersion || $2[25] !== setBrowserTools || $2[26] !== setPlugins || $2[27] !== toolFilter) {
80128
80450
  let t62;
80129
- if ($2[33] !== installedShortNames) {
80451
+ if ($2[32] !== installedShortNames) {
80130
80452
  t62 = (r3) => !installedShortNames.has(extractShortName(r3.name));
80131
- $2[33] = installedShortNames;
80132
- $2[34] = t62;
80453
+ $2[32] = installedShortNames;
80454
+ $2[33] = t62;
80133
80455
  } else {
80134
- t62 = $2[34];
80456
+ t62 = $2[33];
80135
80457
  }
80136
80458
  const availableResults = npmResults.filter(t62);
80137
80459
  const hasInstalledResults = installedMatches.length > 0 || failedMatches.length > 0 || hasBrowserToolMatches;
80138
80460
  showNoResults = toolFilter && !hasInstalledResults && !npmSearching && availableResults.length === 0;
80139
80461
  t3 = "space-y-4";
80140
- if ($2[35] !== activeTools || $2[36] !== browserTools || $2[37] !== failedMatches || $2[38] !== hasBrowserToolMatches || $2[39] !== hasInstalledResults || $2[40] !== installedMatches || $2[41] !== onRemove || $2[42] !== onUpdate || $2[43] !== pluginErrors || $2[44] !== removingPlugins || $2[45] !== serverVersion || $2[46] !== setBrowserTools || $2[47] !== setPlugins || $2[48] !== skipPermissions || $2[49] !== toolFilter) {
80462
+ if ($2[34] !== activeTools || $2[35] !== browserTools || $2[36] !== failedMatches || $2[37] !== hasBrowserToolMatches || $2[38] !== hasInstalledResults || $2[39] !== installedMatches || $2[40] !== onRemove || $2[41] !== onUpdate || $2[42] !== pluginErrors || $2[43] !== removingPlugins || $2[44] !== serverVersion || $2[45] !== setBrowserTools || $2[46] !== setPlugins || $2[47] !== toolFilter) {
80141
80463
  t4 = hasInstalledResults && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", {
80142
80464
  children: [/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(SectionHeader, {
80143
80465
  children: "Installed"
@@ -80149,8 +80471,7 @@ var SearchResults = (t0) => {
80149
80471
  activeTools,
80150
80472
  onToolsChange: setBrowserTools,
80151
80473
  toolFilter,
80152
- serverVersion,
80153
- skipPermissions
80474
+ serverVersion
80154
80475
  })
80155
80476
  }), /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(PluginList, {
80156
80477
  plugins: installedMatches,
@@ -80161,28 +80482,26 @@ var SearchResults = (t0) => {
80161
80482
  onUpdate,
80162
80483
  onRemove,
80163
80484
  removingPlugins,
80164
- pluginErrors,
80165
- skipPermissions
80485
+ pluginErrors
80166
80486
  })]
80167
80487
  });
80168
- $2[35] = activeTools;
80169
- $2[36] = browserTools;
80170
- $2[37] = failedMatches;
80171
- $2[38] = hasBrowserToolMatches;
80172
- $2[39] = hasInstalledResults;
80173
- $2[40] = installedMatches;
80174
- $2[41] = onRemove;
80175
- $2[42] = onUpdate;
80176
- $2[43] = pluginErrors;
80177
- $2[44] = removingPlugins;
80178
- $2[45] = serverVersion;
80179
- $2[46] = setBrowserTools;
80180
- $2[47] = setPlugins;
80181
- $2[48] = skipPermissions;
80182
- $2[49] = toolFilter;
80183
- $2[50] = t4;
80488
+ $2[34] = activeTools;
80489
+ $2[35] = browserTools;
80490
+ $2[36] = failedMatches;
80491
+ $2[37] = hasBrowserToolMatches;
80492
+ $2[38] = hasInstalledResults;
80493
+ $2[39] = installedMatches;
80494
+ $2[40] = onRemove;
80495
+ $2[41] = onUpdate;
80496
+ $2[42] = pluginErrors;
80497
+ $2[43] = removingPlugins;
80498
+ $2[44] = serverVersion;
80499
+ $2[45] = setBrowserTools;
80500
+ $2[46] = setPlugins;
80501
+ $2[47] = toolFilter;
80502
+ $2[48] = t4;
80184
80503
  } else {
80185
- t4 = $2[50];
80504
+ t4 = $2[48];
80186
80505
  }
80187
80506
  t5 = toolFilter && (npmSearching ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", {
80188
80507
  className: "flex justify-center py-4",
@@ -80220,42 +80539,41 @@ var SearchResults = (t0) => {
80220
80539
  $2[24] = serverVersion;
80221
80540
  $2[25] = setBrowserTools;
80222
80541
  $2[26] = setPlugins;
80223
- $2[27] = skipPermissions;
80224
- $2[28] = toolFilter;
80225
- $2[29] = showNoResults;
80226
- $2[30] = t3;
80227
- $2[31] = t4;
80228
- $2[32] = t5;
80542
+ $2[27] = toolFilter;
80543
+ $2[28] = showNoResults;
80544
+ $2[29] = t3;
80545
+ $2[30] = t4;
80546
+ $2[31] = t5;
80229
80547
  } else {
80230
- showNoResults = $2[29];
80231
- t3 = $2[30];
80232
- t4 = $2[31];
80233
- t5 = $2[32];
80548
+ showNoResults = $2[28];
80549
+ t3 = $2[29];
80550
+ t4 = $2[30];
80551
+ t5 = $2[31];
80234
80552
  }
80235
80553
  let t6;
80236
- if ($2[51] !== showNoResults) {
80554
+ if ($2[49] !== showNoResults) {
80237
80555
  t6 = showNoResults && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", {
80238
80556
  className: "py-8 text-center text-muted-foreground text-sm",
80239
80557
  children: "No results"
80240
80558
  });
80241
- $2[51] = showNoResults;
80242
- $2[52] = t6;
80559
+ $2[49] = showNoResults;
80560
+ $2[50] = t6;
80243
80561
  } else {
80244
- t6 = $2[52];
80562
+ t6 = $2[50];
80245
80563
  }
80246
80564
  let t7;
80247
- if ($2[53] !== t3 || $2[54] !== t4 || $2[55] !== t5 || $2[56] !== t6) {
80565
+ if ($2[51] !== t3 || $2[52] !== t4 || $2[53] !== t5 || $2[54] !== t6) {
80248
80566
  t7 = /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", {
80249
80567
  className: t3,
80250
80568
  children: [t4, t5, t6]
80251
80569
  });
80252
- $2[53] = t3;
80253
- $2[54] = t4;
80254
- $2[55] = t5;
80255
- $2[56] = t6;
80256
- $2[57] = t7;
80570
+ $2[51] = t3;
80571
+ $2[52] = t4;
80572
+ $2[53] = t5;
80573
+ $2[54] = t6;
80574
+ $2[55] = t7;
80257
80575
  } else {
80258
- t7 = $2[57];
80576
+ t7 = $2[55];
80259
80577
  }
80260
80578
  return t7;
80261
80579
  };
@@ -80266,7 +80584,7 @@ function _temp12(p_1) {
80266
80584
 
80267
80585
  // src/side-panel/hooks/useServerNotifications.ts
80268
80586
  var import_compiler_runtime29 = __toESM(require_compiler_runtime(), 1);
80269
- var import_react21 = __toESM(require_react(), 1);
80587
+ var import_react22 = __toESM(require_react(), 1);
80270
80588
  var validTabStates = /* @__PURE__ */ new Set(["closed", "unavailable", "ready"]);
80271
80589
  var useServerNotifications = (t0) => {
80272
80590
  const $2 = (0, import_compiler_runtime29.c)(8);
@@ -80282,7 +80600,7 @@ var useServerNotifications = (t0) => {
80282
80600
  } else {
80283
80601
  t1 = $2[0];
80284
80602
  }
80285
- const seenConfirmationIds = (0, import_react21.useRef)(t1);
80603
+ const seenConfirmationIds = (0, import_react22.useRef)(t1);
80286
80604
  let t2;
80287
80605
  if ($2[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80288
80606
  t2 = /* @__PURE__ */ new Map();
@@ -80290,7 +80608,7 @@ var useServerNotifications = (t0) => {
80290
80608
  } else {
80291
80609
  t2 = $2[1];
80292
80610
  }
80293
- const invocationTimeoutIds = (0, import_react21.useRef)(t2);
80611
+ const invocationTimeoutIds = (0, import_react22.useRef)(t2);
80294
80612
  let t3;
80295
80613
  let t4;
80296
80614
  if ($2[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
@@ -80310,7 +80628,7 @@ var useServerNotifications = (t0) => {
80310
80628
  t3 = $2[2];
80311
80629
  t4 = $2[3];
80312
80630
  }
80313
- (0, import_react21.useEffect)(t3, t4);
80631
+ (0, import_react22.useEffect)(t3, t4);
80314
80632
  let t5;
80315
80633
  if ($2[4] !== setActiveTools || $2[5] !== setPendingConfirmations || $2[6] !== setPlugins) {
80316
80634
  const handleNotification = (data) => {
@@ -80394,9 +80712,9 @@ var useServerNotifications = (t0) => {
80394
80712
  // src/side-panel/App.tsx
80395
80713
  var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1);
80396
80714
  var App = () => {
80397
- const $2 = (0, import_compiler_runtime30.c)(66);
80398
- const [connected, setConnected] = (0, import_react22.useState)(false);
80399
- const [disconnectReason, setDisconnectReason] = (0, import_react22.useState)();
80715
+ const $2 = (0, import_compiler_runtime30.c)(65);
80716
+ const [connected, setConnected] = (0, import_react23.useState)(false);
80717
+ const [disconnectReason, setDisconnectReason] = (0, import_react23.useState)();
80400
80718
  let t0;
80401
80719
  if ($2[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80402
80720
  t0 = [];
@@ -80404,7 +80722,7 @@ var App = () => {
80404
80722
  } else {
80405
80723
  t0 = $2[0];
80406
80724
  }
80407
- const [plugins, setPlugins] = (0, import_react22.useState)(t0);
80725
+ const [plugins, setPlugins] = (0, import_react23.useState)(t0);
80408
80726
  let t1;
80409
80727
  if ($2[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80410
80728
  t1 = [];
@@ -80412,12 +80730,12 @@ var App = () => {
80412
80730
  } else {
80413
80731
  t1 = $2[1];
80414
80732
  }
80415
- const [failedPlugins, setFailedPlugins] = (0, import_react22.useState)(t1);
80416
- const [browserTools, setBrowserTools] = (0, import_react22.useState)(_temp28);
80417
- const [browserPermission, setBrowserPermission] = (0, import_react22.useState)("off");
80418
- const [skipPermissions, setSkipPermissions] = (0, import_react22.useState)(false);
80419
- const [serverVersion, setServerVersion] = (0, import_react22.useState)(void 0);
80420
- const [loading, setLoading] = (0, import_react22.useState)(true);
80733
+ const [failedPlugins, setFailedPlugins] = (0, import_react23.useState)(t1);
80734
+ const [browserTools, setBrowserTools] = (0, import_react23.useState)(_temp28);
80735
+ const [browserPermission, setBrowserPermission] = (0, import_react23.useState)("off");
80736
+ const [skipPermissions, setSkipPermissions] = (0, import_react23.useState)(false);
80737
+ const [serverVersion, setServerVersion] = (0, import_react23.useState)(void 0);
80738
+ const [loading, setLoading] = (0, import_react23.useState)(true);
80421
80739
  let t2;
80422
80740
  if ($2[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80423
80741
  t2 = /* @__PURE__ */ new Set();
@@ -80425,8 +80743,8 @@ var App = () => {
80425
80743
  } else {
80426
80744
  t2 = $2[2];
80427
80745
  }
80428
- const [activeTools, setActiveTools] = (0, import_react22.useState)(t2);
80429
- const [searchQuery, setSearchQuery] = (0, import_react22.useState)("");
80746
+ const [activeTools, setActiveTools] = (0, import_react23.useState)(t2);
80747
+ const [searchQuery, setSearchQuery] = (0, import_react23.useState)("");
80430
80748
  let t3;
80431
80749
  if ($2[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80432
80750
  t3 = [];
@@ -80434,7 +80752,7 @@ var App = () => {
80434
80752
  } else {
80435
80753
  t3 = $2[3];
80436
80754
  }
80437
- const [pendingConfirmations, setPendingConfirmations] = (0, import_react22.useState)(t3);
80755
+ const [pendingConfirmations, setPendingConfirmations] = (0, import_react23.useState)(t3);
80438
80756
  let t4;
80439
80757
  if ($2[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80440
80758
  t4 = [];
@@ -80442,8 +80760,8 @@ var App = () => {
80442
80760
  } else {
80443
80761
  t4 = $2[4];
80444
80762
  }
80445
- const [npmResults, setNpmResults] = (0, import_react22.useState)(t4);
80446
- const [npmSearching, setNpmSearching] = (0, import_react22.useState)(false);
80763
+ const [npmResults, setNpmResults] = (0, import_react23.useState)(t4);
80764
+ const [npmSearching, setNpmSearching] = (0, import_react23.useState)(false);
80447
80765
  let t5;
80448
80766
  if ($2[5] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80449
80767
  t5 = /* @__PURE__ */ new Set();
@@ -80451,7 +80769,7 @@ var App = () => {
80451
80769
  } else {
80452
80770
  t5 = $2[5];
80453
80771
  }
80454
- const [installingPlugins, setInstallingPlugins] = (0, import_react22.useState)(t5);
80772
+ const [installingPlugins, setInstallingPlugins] = (0, import_react23.useState)(t5);
80455
80773
  let t6;
80456
80774
  if ($2[6] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80457
80775
  t6 = /* @__PURE__ */ new Set();
@@ -80459,7 +80777,7 @@ var App = () => {
80459
80777
  } else {
80460
80778
  t6 = $2[6];
80461
80779
  }
80462
- const [removingPlugins, setRemovingPlugins] = (0, import_react22.useState)(t6);
80780
+ const [removingPlugins, setRemovingPlugins] = (0, import_react23.useState)(t6);
80463
80781
  let t7;
80464
80782
  if ($2[7] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80465
80783
  t7 = /* @__PURE__ */ new Map();
@@ -80467,7 +80785,7 @@ var App = () => {
80467
80785
  } else {
80468
80786
  t7 = $2[7];
80469
80787
  }
80470
- const [installErrors, setInstallErrors] = (0, import_react22.useState)(t7);
80788
+ const [installErrors, setInstallErrors] = (0, import_react23.useState)(t7);
80471
80789
  let t8;
80472
80790
  if ($2[8] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80473
80791
  t8 = /* @__PURE__ */ new Map();
@@ -80475,7 +80793,7 @@ var App = () => {
80475
80793
  } else {
80476
80794
  t8 = $2[8];
80477
80795
  }
80478
- const [pluginErrors, setPluginErrors] = (0, import_react22.useState)(t8);
80796
+ const [pluginErrors, setPluginErrors] = (0, import_react23.useState)(t8);
80479
80797
  let t9;
80480
80798
  if ($2[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80481
80799
  t9 = /* @__PURE__ */ new Map();
@@ -80483,12 +80801,12 @@ var App = () => {
80483
80801
  } else {
80484
80802
  t9 = $2[9];
80485
80803
  }
80486
- const pluginErrorTimers = (0, import_react22.useRef)(t9);
80487
- const npmSearchTimer = (0, import_react22.useRef)(void 0);
80488
- const npmSearchCounter = (0, import_react22.useRef)(0);
80489
- const connectedRef = (0, import_react22.useRef)(connected);
80490
- const loadingRef = (0, import_react22.useRef)(loading);
80491
- const pluginsRef = (0, import_react22.useRef)(plugins);
80804
+ const pluginErrorTimers = (0, import_react23.useRef)(t9);
80805
+ const npmSearchTimer = (0, import_react23.useRef)(void 0);
80806
+ const npmSearchCounter = (0, import_react23.useRef)(0);
80807
+ const connectedRef = (0, import_react23.useRef)(connected);
80808
+ const loadingRef = (0, import_react23.useRef)(loading);
80809
+ const pluginsRef = (0, import_react23.useRef)(plugins);
80492
80810
  let t10;
80493
80811
  let t11;
80494
80812
  if ($2[10] !== connected || $2[11] !== loading || $2[12] !== plugins) {
@@ -80507,7 +80825,7 @@ var App = () => {
80507
80825
  t10 = $2[13];
80508
80826
  t11 = $2[14];
80509
80827
  }
80510
- (0, import_react22.useEffect)(t10, t11);
80828
+ (0, import_react23.useEffect)(t10, t11);
80511
80829
  let t12;
80512
80830
  if ($2[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80513
80831
  t12 = {
@@ -80537,7 +80855,7 @@ var App = () => {
80537
80855
  t13 = $2[16];
80538
80856
  t14 = $2[17];
80539
80857
  }
80540
- (0, import_react22.useEffect)(t13, t14);
80858
+ (0, import_react23.useEffect)(t13, t14);
80541
80859
  let t15;
80542
80860
  if ($2[18] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80543
80861
  t15 = (pluginName, message) => {
@@ -80693,7 +81011,7 @@ var App = () => {
80693
81011
  if (result_0.browserTools.length === 0) {
80694
81012
  return BROWSER_TOOLS_CATALOG.map(_temp36);
80695
81013
  }
80696
- const serverNames = new Set(result_0.browserTools.map(_temp43));
81014
+ const serverNames = new Set(result_0.browserTools.map(_temp44));
80697
81015
  const merged = [...result_0.browserTools];
80698
81016
  for (const local of BROWSER_TOOLS_CATALOG) {
80699
81017
  if (!serverNames.has(local.name)) {
@@ -80815,7 +81133,7 @@ var App = () => {
80815
81133
  t21 = $2[25];
80816
81134
  t22 = $2[26];
80817
81135
  }
80818
- (0, import_react22.useEffect)(t21, t22);
81136
+ (0, import_react23.useEffect)(t21, t22);
80819
81137
  let t23;
80820
81138
  if ($2[27] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80821
81139
  t23 = (id, decision, alwaysAllow) => {
@@ -80844,17 +81162,22 @@ var App = () => {
80844
81162
  }
80845
81163
  let t25;
80846
81164
  if ($2[31] !== skipPermissions) {
80847
- t25 = skipPermissions && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(AlertComponent, {
80848
- variant: "solid",
80849
- status: "warning",
80850
- className: "mx-4 mt-2",
80851
- children: [/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(AlertComponent.Title, {
80852
- children: "PERMISSIONS BYPASSED"
80853
- }), /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(AlertComponent.Description, {
80854
- children: ["All tools execute without approval.", /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", {
80855
- className: "mt-1 block font-mono text-xs",
80856
- children: "--dangerously-skip-permissions"
81165
+ t25 = skipPermissions && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", {
81166
+ className: "shrink-0 border-destructive border-b-2 bg-destructive/15 px-4 py-1.5",
81167
+ children: [/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", {
81168
+ className: "flex items-center gap-1.5",
81169
+ children: [/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ShieldOff, {
81170
+ className: "h-3.5 w-3.5 shrink-0 text-destructive"
81171
+ }), /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", {
81172
+ className: "font-head text-destructive text-xs uppercase",
81173
+ children: "Approvals skipped"
80857
81174
  })]
81175
+ }), /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("p", {
81176
+ className: "mt-0.5 text-[11px] text-foreground/70 leading-tight",
81177
+ children: ["AI runs tools without asking. Off tools stay off. Set by", " ", /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("code", {
81178
+ className: "font-mono",
81179
+ children: "OPENTABS_DANGEROUSLY_SKIP_PERMISSIONS"
81180
+ }), "."]
80858
81181
  })]
80859
81182
  });
80860
81183
  $2[31] = skipPermissions;
@@ -80912,7 +81235,7 @@ var App = () => {
80912
81235
  }
80913
81236
  const t29 = `px-4 pb-4 ${showSearchBar ? "pt-2" : "pt-4"} ${showPlugins ? "" : "flex min-h-full items-center justify-center"}`;
80914
81237
  let t30;
80915
- if ($2[38] !== activeTools || $2[39] !== browserPermission || $2[40] !== browserTools || $2[41] !== connected || $2[42] !== disconnectReason || $2[43] !== failedPlugins || $2[44] !== hasContent || $2[45] !== installErrors || $2[46] !== installingPlugins || $2[47] !== loading || $2[48] !== npmResults || $2[49] !== npmSearching || $2[50] !== pluginErrors || $2[51] !== plugins || $2[52] !== removingPlugins || $2[53] !== searchQuery || $2[54] !== serverVersion || $2[55] !== skipPermissions) {
81238
+ if ($2[38] !== activeTools || $2[39] !== browserPermission || $2[40] !== browserTools || $2[41] !== connected || $2[42] !== disconnectReason || $2[43] !== failedPlugins || $2[44] !== hasContent || $2[45] !== installErrors || $2[46] !== installingPlugins || $2[47] !== loading || $2[48] !== npmResults || $2[49] !== npmSearching || $2[50] !== pluginErrors || $2[51] !== plugins || $2[52] !== removingPlugins || $2[53] !== searchQuery || $2[54] !== serverVersion) {
80916
81239
  t30 = loading ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(LoadingState, {}) : !connected ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(DisconnectedState, {
80917
81240
  reason: disconnectReason
80918
81241
  }) : searchQuery ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(SearchResults, {
@@ -80932,8 +81255,7 @@ var App = () => {
80932
81255
  onRemove: handleRemove,
80933
81256
  removingPlugins,
80934
81257
  pluginErrors,
80935
- serverVersion,
80936
- skipPermissions
81258
+ serverVersion
80937
81259
  }) : hasContent ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, {
80938
81260
  children: [browserTools.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(AccordionComponent, {
80939
81261
  type: "multiple",
@@ -80944,8 +81266,7 @@ var App = () => {
80944
81266
  onToolsChange: setBrowserTools,
80945
81267
  serverVersion,
80946
81268
  browserPermission,
80947
- onBrowserPermissionChange: setBrowserPermission,
80948
- skipPermissions
81269
+ onBrowserPermissionChange: setBrowserPermission
80949
81270
  })
80950
81271
  }), /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PluginList, {
80951
81272
  plugins,
@@ -80956,8 +81277,7 @@ var App = () => {
80956
81277
  onUpdate: handleUpdate,
80957
81278
  onRemove: handleRemove,
80958
81279
  removingPlugins,
80959
- pluginErrors,
80960
- skipPermissions
81280
+ pluginErrors
80961
81281
  })]
80962
81282
  }) : null;
80963
81283
  $2[38] = activeTools;
@@ -80977,13 +81297,12 @@ var App = () => {
80977
81297
  $2[52] = removingPlugins;
80978
81298
  $2[53] = searchQuery;
80979
81299
  $2[54] = serverVersion;
80980
- $2[55] = skipPermissions;
80981
- $2[56] = t30;
81300
+ $2[55] = t30;
80982
81301
  } else {
80983
- t30 = $2[56];
81302
+ t30 = $2[55];
80984
81303
  }
80985
81304
  let t31;
80986
- if ($2[57] !== t29 || $2[58] !== t30) {
81305
+ if ($2[56] !== t29 || $2[57] !== t30) {
80987
81306
  t31 = /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(g2, {
80988
81307
  className: "flex-1",
80989
81308
  style: t27,
@@ -80993,34 +81312,34 @@ var App = () => {
80993
81312
  children: t30
80994
81313
  })
80995
81314
  });
80996
- $2[57] = t29;
80997
- $2[58] = t30;
80998
- $2[59] = t31;
81315
+ $2[56] = t29;
81316
+ $2[57] = t30;
81317
+ $2[58] = t31;
80999
81318
  } else {
81000
- t31 = $2[59];
81319
+ t31 = $2[58];
81001
81320
  }
81002
81321
  let t32;
81003
- if ($2[60] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81322
+ if ($2[59] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81004
81323
  t32 = /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Footer, {});
81005
- $2[60] = t32;
81324
+ $2[59] = t32;
81006
81325
  } else {
81007
- t32 = $2[60];
81326
+ t32 = $2[59];
81008
81327
  }
81009
81328
  let t33;
81010
- if ($2[61] !== t24 || $2[62] !== t25 || $2[63] !== t26 || $2[64] !== t31) {
81329
+ if ($2[60] !== t24 || $2[61] !== t25 || $2[62] !== t26 || $2[63] !== t31) {
81011
81330
  t33 = /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(TooltipObject.Provider, {
81012
81331
  children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", {
81013
81332
  className: "flex h-screen flex-col overflow-hidden text-foreground",
81014
81333
  children: [t24, t25, t26, t31, t32]
81015
81334
  })
81016
81335
  });
81017
- $2[61] = t24;
81018
- $2[62] = t25;
81019
- $2[63] = t26;
81020
- $2[64] = t31;
81021
- $2[65] = t33;
81336
+ $2[60] = t24;
81337
+ $2[61] = t25;
81338
+ $2[62] = t26;
81339
+ $2[63] = t31;
81340
+ $2[64] = t33;
81022
81341
  } else {
81023
- t33 = $2[65];
81342
+ t33 = $2[64];
81024
81343
  }
81025
81344
  return t33;
81026
81345
  };
@@ -81039,7 +81358,7 @@ function _temp36(t_0) {
81039
81358
  permission: "auto"
81040
81359
  };
81041
81360
  }
81042
- function _temp43(t_1) {
81361
+ function _temp44(t_1) {
81043
81362
  return t_1.name;
81044
81363
  }
81045
81364
  function _temp52(p_0) {
@@ -81060,9 +81379,9 @@ function _temp82() {
81060
81379
  }
81061
81380
 
81062
81381
  // src/side-panel/components/ErrorBoundary.tsx
81063
- var import_react23 = __toESM(require_react(), 1);
81382
+ var import_react24 = __toESM(require_react(), 1);
81064
81383
  var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
81065
- var ErrorBoundary = class extends import_react23.Component {
81384
+ var ErrorBoundary = class extends import_react24.Component {
81066
81385
  state = {
81067
81386
  hasError: false
81068
81387
  };
@@ -81106,7 +81425,7 @@ if (!rootEl) {
81106
81425
  throw new Error("Root element not found");
81107
81426
  }
81108
81427
  var root = (0, import_client.createRoot)(rootEl);
81109
- root.render(/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react24.StrictMode, {
81428
+ root.render(/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react25.StrictMode, {
81110
81429
  children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ErrorBoundary, {
81111
81430
  children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(App, {})
81112
81431
  })