@opentabs-dev/browser-extension 0.0.64 → 0.0.66

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 (58) hide show
  1. package/dist/background-message-handlers.d.ts +5 -1
  2. package/dist/background-message-handlers.d.ts.map +1 -1
  3. package/dist/background-message-handlers.js +76 -2
  4. package/dist/background-message-handlers.js.map +1 -1
  5. package/dist/background.js +263 -140
  6. package/dist/browser-commands/interaction-commands.d.ts +2 -0
  7. package/dist/browser-commands/interaction-commands.d.ts.map +1 -1
  8. package/dist/browser-commands/interaction-commands.js +26 -3
  9. package/dist/browser-commands/interaction-commands.js.map +1 -1
  10. package/dist/browser-commands/key-press-command.d.ts +6 -0
  11. package/dist/browser-commands/key-press-command.d.ts.map +1 -1
  12. package/dist/browser-commands/key-press-command.js +137 -118
  13. package/dist/browser-commands/key-press-command.js.map +1 -1
  14. package/dist/dispatch-helpers.js +2 -2
  15. package/dist/dispatch-helpers.js.map +1 -1
  16. package/dist/extension-messages.d.ts +13 -1
  17. package/dist/extension-messages.d.ts.map +1 -1
  18. package/dist/iife-injection.d.ts +5 -4
  19. package/dist/iife-injection.d.ts.map +1 -1
  20. package/dist/iife-injection.js +21 -12
  21. package/dist/iife-injection.js.map +1 -1
  22. package/dist/message-router.d.ts +2 -0
  23. package/dist/message-router.d.ts.map +1 -1
  24. package/dist/message-router.js +16 -4
  25. package/dist/message-router.js.map +1 -1
  26. package/dist/offscreen/index.js +1 -0
  27. package/dist/offscreen/index.js.map +1 -1
  28. package/dist/side-panel/App.d.ts.map +1 -1
  29. package/dist/side-panel/App.js +22 -2
  30. package/dist/side-panel/App.js.map +1 -1
  31. package/dist/side-panel/bridge.d.ts +10 -1
  32. package/dist/side-panel/bridge.d.ts.map +1 -1
  33. package/dist/side-panel/bridge.js +5 -1
  34. package/dist/side-panel/bridge.js.map +1 -1
  35. package/dist/side-panel/components/FailedPluginCard.d.ts +6 -2
  36. package/dist/side-panel/components/FailedPluginCard.d.ts.map +1 -1
  37. package/dist/side-panel/components/FailedPluginCard.js +11 -3
  38. package/dist/side-panel/components/FailedPluginCard.js.map +1 -1
  39. package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
  40. package/dist/side-panel/components/PluginCard.js +15 -2
  41. package/dist/side-panel/components/PluginCard.js.map +1 -1
  42. package/dist/side-panel/components/PluginList.d.ts +3 -1
  43. package/dist/side-panel/components/PluginList.d.ts.map +1 -1
  44. package/dist/side-panel/components/PluginList.js +2 -2
  45. package/dist/side-panel/components/PluginList.js.map +1 -1
  46. package/dist/side-panel/components/PluginMenu.d.ts.map +1 -1
  47. package/dist/side-panel/components/PluginMenu.js +2 -2
  48. package/dist/side-panel/components/PluginMenu.js.map +1 -1
  49. package/dist/side-panel/side-panel.js +763 -513
  50. package/dist/side-panel/styles.css +1 -1
  51. package/dist/tab-matching.d.ts +5 -3
  52. package/dist/tab-matching.d.ts.map +1 -1
  53. package/dist/tab-matching.js +27 -9
  54. package/dist/tab-matching.js.map +1 -1
  55. package/dist/tab-state.js +2 -2
  56. package/dist/tab-state.js.map +1 -1
  57. package/manifest.json +1 -1
  58. package/package.json +1 -1
@@ -58464,7 +58464,7 @@ var BROWSER_TOOLS_CATALOG = [{
58464
58464
  group: "Page Inspection"
58465
58465
  }, {
58466
58466
  name: "browser_click_element",
58467
- description: "Click an element on the page matching the given CSS selector. Dispatches a click event on the first matching element. Returns the tag name and trimmed text content of the clicked element. Useful for submitting forms, toggling buttons, and navigating.",
58467
+ description: "Click an element on the page matching the given CSS selector. Dispatches trusted (isTrusted: true) mouse events (mousedown + mouseup) via Chrome DevTools Protocol Input.dispatchMouseEvent at the element center. Returns the tag name and trimmed text content of the clicked element. Useful for submitting forms, toggling buttons, and navigating.",
58468
58468
  summary: "Click an element on the page",
58469
58469
  icon: "mouse-pointer-click",
58470
58470
  group: "Page Interaction"
@@ -58602,7 +58602,7 @@ var BROWSER_TOOLS_CATALOG = [{
58602
58602
  group: "Tabs"
58603
58603
  }, {
58604
58604
  name: "browser_press_key",
58605
- description: "Press a keyboard key on the page. Dispatches a full keyboard event sequence (keydown, keypress for printable keys, keyup) and an InputEvent for printable characters on input/textarea elements. Common use cases: Enter to submit forms, Escape to close modals/dialogs, Tab to move between fields, arrow keys to navigate custom menus/dropdowns, Ctrl+K or Cmd+K for search. Supports Ctrl and Meta (Cmd) as independent modifiers. Uses standard KeyboardEvent.key values.",
58605
+ description: "Press a keyboard key on the page. Dispatches trusted (isTrusted: true) keyboard events via Chrome DevTools Protocol Input.dispatchKeyEvent. Named keys (Enter, Escape, etc.) dispatch rawKeyDown + keyUp; printable characters dispatch keyDown + char + keyUp. Common use cases: Enter to submit forms, Escape to close modals/dialogs, Tab to move between fields, arrow keys to navigate custom menus/dropdowns, Ctrl+K or Cmd+K for search. Supports Ctrl and Meta (Cmd) as independent modifiers. Uses standard KeyboardEvent.key values.",
58606
58606
  summary: "Press a keyboard key on the page",
58607
58607
  icon: "command",
58608
58608
  group: "Page Interaction"
@@ -61434,6 +61434,10 @@ var removePlugin = (name) => sendBgMessage({
61434
61434
  type: "bg:removePlugin",
61435
61435
  name
61436
61436
  });
61437
+ var removeFailedPlugin = (specifier) => sendBgMessage({
61438
+ type: "bg:removeFailedPlugin",
61439
+ specifier
61440
+ });
61437
61441
  var updatePlugin = (name) => sendBgMessage({
61438
61442
  type: "bg:updatePlugin",
61439
61443
  name
@@ -61442,6 +61446,10 @@ var setSkipPermissions = (skipPermissions) => sendBgMessage({
61442
61446
  type: "bg:setSkipPermissions",
61443
61447
  skipPermissions
61444
61448
  });
61449
+ var openPluginTab = (pluginName) => sendBgMessage({
61450
+ type: "bg:openPluginTab",
61451
+ pluginName
61452
+ });
61445
61453
  var sendConfirmationResponse = (id, decision, alwaysAllow) => {
61446
61454
  chrome.runtime.sendMessage({
61447
61455
  type: "sp:confirmationResponse",
@@ -79200,14 +79208,29 @@ var import_compiler_runtime22 = __toESM(require_compiler_runtime(), 1);
79200
79208
  var import_react18 = __toESM(require_react(), 1);
79201
79209
  var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1);
79202
79210
  var FailedPluginCard = (t0) => {
79203
- const $2 = (0, import_compiler_runtime22.c)(13);
79211
+ const $2 = (0, import_compiler_runtime22.c)(36);
79204
79212
  const {
79205
- plugin
79213
+ plugin,
79214
+ onRemove,
79215
+ removing
79206
79216
  } = t0;
79207
79217
  const [expanded, setExpanded] = (0, import_react18.useState)(false);
79218
+ const [confirmOpen, setConfirmOpen] = (0, import_react18.useState)(false);
79208
79219
  let t1;
79209
- if ($2[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79210
- t1 = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", {
79220
+ if ($2[0] !== onRemove) {
79221
+ t1 = () => {
79222
+ setConfirmOpen(false);
79223
+ onRemove();
79224
+ };
79225
+ $2[0] = onRemove;
79226
+ $2[1] = t1;
79227
+ } else {
79228
+ t1 = $2[1];
79229
+ }
79230
+ const handleConfirmRemove = t1;
79231
+ let t2;
79232
+ if ($2[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79233
+ t2 = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", {
79211
79234
  className: "flex items-center gap-2",
79212
79235
  children: [/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TriangleAlert, {
79213
79236
  className: "h-4 w-4 shrink-0 text-destructive"
@@ -79216,62 +79239,188 @@ var FailedPluginCard = (t0) => {
79216
79239
  children: "Failed to load"
79217
79240
  })]
79218
79241
  });
79219
- $2[0] = t1;
79220
- } else {
79221
- t1 = $2[0];
79222
- }
79223
- let t2;
79224
- if ($2[1] !== plugin.specifier) {
79225
- t2 = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", {
79226
- className: "mt-1 truncate text-muted-foreground text-xs",
79227
- children: plugin.specifier
79228
- });
79229
- $2[1] = plugin.specifier;
79230
79242
  $2[2] = t2;
79231
79243
  } else {
79232
79244
  t2 = $2[2];
79233
79245
  }
79234
- const t3 = `mt-1 select-text text-destructive/80 text-xs leading-snug ${expanded ? "" : "line-clamp-2"}`;
79246
+ let t3;
79247
+ if ($2[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79248
+ t3 = () => setConfirmOpen(true);
79249
+ $2[3] = t3;
79250
+ } else {
79251
+ t3 = $2[3];
79252
+ }
79235
79253
  let t4;
79236
- if ($2[3] !== plugin.error || $2[4] !== t3) {
79237
- t4 = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", {
79238
- className: t3,
79239
- children: plugin.error
79254
+ if ($2[4] !== removing) {
79255
+ t4 = removing ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Loader2, {
79256
+ size: "sm"
79257
+ }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Trash2, {
79258
+ className: "h-3.5 w-3.5"
79240
79259
  });
79241
- $2[3] = plugin.error;
79242
- $2[4] = t3;
79260
+ $2[4] = removing;
79243
79261
  $2[5] = t4;
79244
79262
  } else {
79245
79263
  t4 = $2[5];
79246
79264
  }
79247
79265
  let t5;
79248
- if ($2[6] !== expanded || $2[7] !== plugin.error.length) {
79249
- t5 = plugin.error.length > 100 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("button", {
79266
+ if ($2[6] !== removing || $2[7] !== t4) {
79267
+ t5 = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", {
79268
+ className: "flex items-center justify-between",
79269
+ children: [t2, /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("button", {
79270
+ type: "button",
79271
+ onClick: t3,
79272
+ disabled: removing,
79273
+ className: "cursor-pointer text-muted-foreground transition-colors hover:text-destructive disabled:opacity-50",
79274
+ children: t4
79275
+ })]
79276
+ });
79277
+ $2[6] = removing;
79278
+ $2[7] = t4;
79279
+ $2[8] = t5;
79280
+ } else {
79281
+ t5 = $2[8];
79282
+ }
79283
+ let t6;
79284
+ if ($2[9] !== plugin.specifier) {
79285
+ t6 = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", {
79286
+ className: "mt-1 truncate text-muted-foreground text-xs",
79287
+ children: plugin.specifier
79288
+ });
79289
+ $2[9] = plugin.specifier;
79290
+ $2[10] = t6;
79291
+ } else {
79292
+ t6 = $2[10];
79293
+ }
79294
+ const t7 = `mt-1 select-text text-destructive/80 text-xs leading-snug ${expanded ? "" : "line-clamp-2"}`;
79295
+ let t8;
79296
+ if ($2[11] !== plugin.error || $2[12] !== t7) {
79297
+ t8 = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", {
79298
+ className: t7,
79299
+ children: plugin.error
79300
+ });
79301
+ $2[11] = plugin.error;
79302
+ $2[12] = t7;
79303
+ $2[13] = t8;
79304
+ } else {
79305
+ t8 = $2[13];
79306
+ }
79307
+ let t9;
79308
+ if ($2[14] !== expanded || $2[15] !== plugin.error.length) {
79309
+ t9 = plugin.error.length > 100 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("button", {
79250
79310
  type: "button",
79251
79311
  onClick: () => setExpanded(!expanded),
79252
79312
  className: "mt-1 cursor-pointer text-muted-foreground text-xs underline",
79253
79313
  children: expanded ? "Show less" : "Show more"
79254
79314
  });
79255
- $2[6] = expanded;
79256
- $2[7] = plugin.error.length;
79257
- $2[8] = t5;
79315
+ $2[14] = expanded;
79316
+ $2[15] = plugin.error.length;
79317
+ $2[16] = t9;
79258
79318
  } else {
79259
- t5 = $2[8];
79319
+ t9 = $2[16];
79260
79320
  }
79261
- let t6;
79262
- if ($2[9] !== t2 || $2[10] !== t4 || $2[11] !== t5) {
79263
- t6 = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", {
79321
+ let t10;
79322
+ if ($2[17] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79323
+ t10 = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DialogObject.Header, {
79324
+ className: "border-destructive bg-destructive text-destructive-foreground",
79325
+ children: "Remove Plugin Path"
79326
+ });
79327
+ $2[17] = t10;
79328
+ } else {
79329
+ t10 = $2[17];
79330
+ }
79331
+ let t11;
79332
+ if ($2[18] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79333
+ t11 = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", {
79334
+ className: "text-foreground text-sm",
79335
+ children: "Are you sure you want to remove this plugin path from your config?"
79336
+ });
79337
+ $2[18] = t11;
79338
+ } else {
79339
+ t11 = $2[18];
79340
+ }
79341
+ let t12;
79342
+ if ($2[19] !== plugin.specifier) {
79343
+ t12 = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(DialogObject.Body, {
79344
+ children: [t11, /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", {
79345
+ className: "mt-2 break-all rounded border border-border bg-muted/50 p-2 font-mono text-xs",
79346
+ children: plugin.specifier
79347
+ })]
79348
+ });
79349
+ $2[19] = plugin.specifier;
79350
+ $2[20] = t12;
79351
+ } else {
79352
+ t12 = $2[20];
79353
+ }
79354
+ let t13;
79355
+ if ($2[21] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79356
+ t13 = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DialogObject.Close, {
79357
+ asChild: true,
79358
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button, {
79359
+ size: "sm",
79360
+ variant: "outline",
79361
+ children: "Cancel"
79362
+ })
79363
+ });
79364
+ $2[21] = t13;
79365
+ } else {
79366
+ t13 = $2[21];
79367
+ }
79368
+ let t14;
79369
+ if ($2[22] !== handleConfirmRemove) {
79370
+ t14 = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(DialogObject.Footer, {
79371
+ children: [t13, /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button, {
79372
+ size: "sm",
79373
+ variant: "outline",
79374
+ className: "border-destructive text-destructive",
79375
+ onClick: handleConfirmRemove,
79376
+ children: "Remove"
79377
+ })]
79378
+ });
79379
+ $2[22] = handleConfirmRemove;
79380
+ $2[23] = t14;
79381
+ } else {
79382
+ t14 = $2[23];
79383
+ }
79384
+ let t15;
79385
+ if ($2[24] !== t12 || $2[25] !== t14) {
79386
+ t15 = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(DialogObject.Content, {
79387
+ children: [t10, t12, t14]
79388
+ });
79389
+ $2[24] = t12;
79390
+ $2[25] = t14;
79391
+ $2[26] = t15;
79392
+ } else {
79393
+ t15 = $2[26];
79394
+ }
79395
+ let t16;
79396
+ if ($2[27] !== confirmOpen || $2[28] !== t15) {
79397
+ t16 = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DialogObject, {
79398
+ open: confirmOpen,
79399
+ onOpenChange: setConfirmOpen,
79400
+ children: t15
79401
+ });
79402
+ $2[27] = confirmOpen;
79403
+ $2[28] = t15;
79404
+ $2[29] = t16;
79405
+ } else {
79406
+ t16 = $2[29];
79407
+ }
79408
+ let t17;
79409
+ if ($2[30] !== t16 || $2[31] !== t5 || $2[32] !== t6 || $2[33] !== t8 || $2[34] !== t9) {
79410
+ t17 = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", {
79264
79411
  className: "rounded border-2 border-destructive/50 bg-destructive/10 p-3",
79265
- children: [t1, t2, t4, t5]
79412
+ children: [t5, t6, t8, t9, t16]
79266
79413
  });
79267
- $2[9] = t2;
79268
- $2[10] = t4;
79269
- $2[11] = t5;
79270
- $2[12] = t6;
79414
+ $2[30] = t16;
79415
+ $2[31] = t5;
79416
+ $2[32] = t6;
79417
+ $2[33] = t8;
79418
+ $2[34] = t9;
79419
+ $2[35] = t17;
79271
79420
  } else {
79272
- t6 = $2[12];
79421
+ t17 = $2[35];
79273
79422
  }
79274
- return t6;
79423
+ return t17;
79275
79424
  };
79276
79425
 
79277
79426
  // src/side-panel/components/PluginCard.tsx
@@ -79283,7 +79432,7 @@ var import_compiler_runtime23 = __toESM(require_compiler_runtime(), 1);
79283
79432
  var import_react19 = __toESM(require_react(), 1);
79284
79433
  var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1);
79285
79434
  var PluginMenu = (t0) => {
79286
- const $2 = (0, import_compiler_runtime23.c)(57);
79435
+ const $2 = (0, import_compiler_runtime23.c)(62);
79287
79436
  const {
79288
79437
  plugin,
79289
79438
  onUpdate,
@@ -79347,8 +79496,36 @@ var PluginMenu = (t0) => {
79347
79496
  t5 = $2[8];
79348
79497
  }
79349
79498
  let t6;
79350
- if ($2[9] !== onUpdate || $2[10] !== plugin.update || $2[11] !== updating) {
79351
- t6 = plugin.update && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject.Item, {
79499
+ if ($2[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79500
+ t6 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Package, {
79501
+ className: "h-3.5 w-3.5"
79502
+ });
79503
+ $2[9] = t6;
79504
+ } else {
79505
+ t6 = $2[9];
79506
+ }
79507
+ let t7;
79508
+ if ($2[10] !== plugin.version) {
79509
+ t7 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject.Item, {
79510
+ disabled: true,
79511
+ className: "text-muted-foreground",
79512
+ children: [t6, "v", plugin.version]
79513
+ });
79514
+ $2[10] = plugin.version;
79515
+ $2[11] = t7;
79516
+ } else {
79517
+ t7 = $2[11];
79518
+ }
79519
+ let t8;
79520
+ if ($2[12] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79521
+ t8 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(MenuObject.Separator, {});
79522
+ $2[12] = t8;
79523
+ } else {
79524
+ t8 = $2[12];
79525
+ }
79526
+ let t9;
79527
+ if ($2[13] !== onUpdate || $2[14] !== plugin.update || $2[15] !== updating) {
79528
+ t9 = plugin.update && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject.Item, {
79352
79529
  onClick: onUpdate,
79353
79530
  children: [updating ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Loader2, {
79354
79531
  size: "sm"
@@ -79356,147 +79533,148 @@ var PluginMenu = (t0) => {
79356
79533
  className: "h-3.5 w-3.5"
79357
79534
  }), "Update to v", plugin.update.latestVersion]
79358
79535
  });
79359
- $2[9] = onUpdate;
79360
- $2[10] = plugin.update;
79361
- $2[11] = updating;
79362
- $2[12] = t6;
79536
+ $2[13] = onUpdate;
79537
+ $2[14] = plugin.update;
79538
+ $2[15] = updating;
79539
+ $2[16] = t9;
79363
79540
  } else {
79364
- t6 = $2[12];
79541
+ t9 = $2[16];
79365
79542
  }
79366
- let t7;
79367
- if ($2[13] !== plugin.update) {
79368
- t7 = plugin.update && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(MenuObject.Separator, {});
79369
- $2[13] = plugin.update;
79370
- $2[14] = t7;
79543
+ let t10;
79544
+ if ($2[17] !== plugin.update) {
79545
+ t10 = plugin.update && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(MenuObject.Separator, {});
79546
+ $2[17] = plugin.update;
79547
+ $2[18] = t10;
79371
79548
  } else {
79372
- t7 = $2[14];
79549
+ t10 = $2[18];
79373
79550
  }
79374
- let t8;
79375
- if ($2[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79376
- t8 = () => setConfirmOpen(true);
79377
- $2[15] = t8;
79551
+ let t11;
79552
+ if ($2[19] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79553
+ t11 = () => setConfirmOpen(true);
79554
+ $2[19] = t11;
79378
79555
  } else {
79379
- t8 = $2[15];
79556
+ t11 = $2[19];
79380
79557
  }
79381
- let t9;
79382
- if ($2[16] !== removing) {
79383
- t9 = removing ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Loader2, {
79558
+ let t12;
79559
+ if ($2[20] !== removing) {
79560
+ t12 = removing ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Loader2, {
79384
79561
  size: "sm"
79385
79562
  }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Trash2, {
79386
79563
  className: "h-3.5 w-3.5"
79387
79564
  });
79388
- $2[16] = removing;
79389
- $2[17] = t9;
79565
+ $2[20] = removing;
79566
+ $2[21] = t12;
79390
79567
  } else {
79391
- t9 = $2[17];
79568
+ t12 = $2[21];
79392
79569
  }
79393
- let t10;
79394
- if ($2[18] !== removeLabel || $2[19] !== t9) {
79395
- t10 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject.Item, {
79396
- onSelect: t8,
79570
+ let t13;
79571
+ if ($2[22] !== removeLabel || $2[23] !== t12) {
79572
+ t13 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject.Item, {
79573
+ onSelect: t11,
79397
79574
  className: "text-destructive focus:bg-destructive/10 focus:text-destructive data-[highlighted]:bg-destructive/10 data-[highlighted]:text-destructive",
79398
- children: [t9, removeLabel]
79575
+ children: [t12, removeLabel]
79399
79576
  });
79400
- $2[18] = removeLabel;
79401
- $2[19] = t9;
79402
- $2[20] = t10;
79577
+ $2[22] = removeLabel;
79578
+ $2[23] = t12;
79579
+ $2[24] = t13;
79403
79580
  } else {
79404
- t10 = $2[20];
79581
+ t13 = $2[24];
79405
79582
  }
79406
- let t11;
79407
- if ($2[21] !== t10 || $2[22] !== t6 || $2[23] !== t7) {
79408
- t11 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject.Content, {
79583
+ let t14;
79584
+ if ($2[25] !== t10 || $2[26] !== t13 || $2[27] !== t7 || $2[28] !== t9) {
79585
+ t14 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject.Content, {
79409
79586
  align: "end",
79410
- children: [t6, t7, t10]
79587
+ children: [t7, t8, t9, t10, t13]
79411
79588
  });
79412
- $2[21] = t10;
79413
- $2[22] = t6;
79414
- $2[23] = t7;
79415
- $2[24] = t11;
79589
+ $2[25] = t10;
79590
+ $2[26] = t13;
79591
+ $2[27] = t7;
79592
+ $2[28] = t9;
79593
+ $2[29] = t14;
79416
79594
  } else {
79417
- t11 = $2[24];
79595
+ t14 = $2[29];
79418
79596
  }
79419
- let t12;
79420
- if ($2[25] !== t11 || $2[26] !== t5) {
79421
- t12 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject, {
79422
- children: [t5, t11]
79597
+ let t15;
79598
+ if ($2[30] !== t14 || $2[31] !== t5) {
79599
+ t15 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuObject, {
79600
+ children: [t5, t14]
79423
79601
  });
79424
- $2[25] = t11;
79425
- $2[26] = t5;
79426
- $2[27] = t12;
79602
+ $2[30] = t14;
79603
+ $2[31] = t5;
79604
+ $2[32] = t15;
79427
79605
  } else {
79428
- t12 = $2[27];
79606
+ t15 = $2[32];
79429
79607
  }
79430
- let t13;
79431
- if ($2[28] !== removeLabel) {
79432
- t13 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Header, {
79608
+ let t16;
79609
+ if ($2[33] !== removeLabel) {
79610
+ t16 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Header, {
79433
79611
  className: "border-destructive bg-destructive text-destructive-foreground",
79434
79612
  children: [removeLabel, " Plugin"]
79435
79613
  });
79436
- $2[28] = removeLabel;
79437
- $2[29] = t13;
79614
+ $2[33] = removeLabel;
79615
+ $2[34] = t16;
79438
79616
  } else {
79439
- t13 = $2[29];
79617
+ t16 = $2[34];
79440
79618
  }
79441
- let t14;
79442
- if ($2[30] !== removeLabel) {
79443
- t14 = removeLabel.toLowerCase();
79444
- $2[30] = removeLabel;
79445
- $2[31] = t14;
79619
+ let t17;
79620
+ if ($2[35] !== removeLabel) {
79621
+ t17 = removeLabel.toLowerCase();
79622
+ $2[35] = removeLabel;
79623
+ $2[36] = t17;
79446
79624
  } else {
79447
- t14 = $2[31];
79625
+ t17 = $2[36];
79448
79626
  }
79449
- let t15;
79450
- if ($2[32] !== plugin.displayName) {
79451
- t15 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("strong", {
79627
+ let t18;
79628
+ if ($2[37] !== plugin.displayName) {
79629
+ t18 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("strong", {
79452
79630
  className: "font-head",
79453
79631
  children: plugin.displayName
79454
79632
  });
79455
- $2[32] = plugin.displayName;
79456
- $2[33] = t15;
79633
+ $2[37] = plugin.displayName;
79634
+ $2[38] = t18;
79457
79635
  } else {
79458
- t15 = $2[33];
79636
+ t18 = $2[38];
79459
79637
  }
79460
- let t16;
79461
- if ($2[34] !== t14 || $2[35] !== t15) {
79462
- t16 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("p", {
79638
+ let t19;
79639
+ if ($2[39] !== t17 || $2[40] !== t18) {
79640
+ t19 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("p", {
79463
79641
  className: "text-foreground text-sm",
79464
- children: ["Are you sure you want to ", t14, " ", t15, "?"]
79642
+ children: ["Are you sure you want to ", t17, " ", t18, "?"]
79465
79643
  });
79466
- $2[34] = t14;
79467
- $2[35] = t15;
79468
- $2[36] = t16;
79644
+ $2[39] = t17;
79645
+ $2[40] = t18;
79646
+ $2[41] = t19;
79469
79647
  } else {
79470
- t16 = $2[36];
79648
+ t19 = $2[41];
79471
79649
  }
79472
- let t17;
79473
- if ($2[37] !== isLocal) {
79474
- t17 = isLocal ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", {
79650
+ let t20;
79651
+ if ($2[42] !== isLocal) {
79652
+ t20 = isLocal ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", {
79475
79653
  className: "mt-1 text-muted-foreground text-xs",
79476
79654
  children: "This will remove the plugin path from your config."
79477
79655
  }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", {
79478
79656
  className: "mt-1 text-muted-foreground text-xs",
79479
79657
  children: "This will run npm uninstall and remove the plugin globally."
79480
79658
  });
79481
- $2[37] = isLocal;
79482
- $2[38] = t17;
79659
+ $2[42] = isLocal;
79660
+ $2[43] = t20;
79483
79661
  } else {
79484
- t17 = $2[38];
79662
+ t20 = $2[43];
79485
79663
  }
79486
- let t18;
79487
- if ($2[39] !== t16 || $2[40] !== t17) {
79488
- t18 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Body, {
79489
- children: [t16, t17]
79664
+ let t21;
79665
+ if ($2[44] !== t19 || $2[45] !== t20) {
79666
+ t21 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Body, {
79667
+ children: [t19, t20]
79490
79668
  });
79491
- $2[39] = t16;
79492
- $2[40] = t17;
79493
- $2[41] = t18;
79669
+ $2[44] = t19;
79670
+ $2[45] = t20;
79671
+ $2[46] = t21;
79494
79672
  } else {
79495
- t18 = $2[41];
79673
+ t21 = $2[46];
79496
79674
  }
79497
- let t19;
79498
- if ($2[42] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79499
- t19 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogObject.Close, {
79675
+ let t22;
79676
+ if ($2[47] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79677
+ t22 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogObject.Close, {
79500
79678
  asChild: true,
79501
79679
  children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, {
79502
79680
  size: "sm",
@@ -79504,14 +79682,14 @@ var PluginMenu = (t0) => {
79504
79682
  children: "Cancel"
79505
79683
  })
79506
79684
  });
79507
- $2[42] = t19;
79685
+ $2[47] = t22;
79508
79686
  } else {
79509
- t19 = $2[42];
79687
+ t22 = $2[47];
79510
79688
  }
79511
- let t20;
79512
- if ($2[43] !== handleConfirmRemove || $2[44] !== removeLabel) {
79513
- t20 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Footer, {
79514
- children: [t19, /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, {
79689
+ let t23;
79690
+ if ($2[48] !== handleConfirmRemove || $2[49] !== removeLabel) {
79691
+ t23 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Footer, {
79692
+ children: [t22, /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, {
79515
79693
  size: "sm",
79516
79694
  variant: "outline",
79517
79695
  className: "border-destructive text-destructive",
@@ -79519,54 +79697,54 @@ var PluginMenu = (t0) => {
79519
79697
  children: removeLabel
79520
79698
  })]
79521
79699
  });
79522
- $2[43] = handleConfirmRemove;
79523
- $2[44] = removeLabel;
79524
- $2[45] = t20;
79700
+ $2[48] = handleConfirmRemove;
79701
+ $2[49] = removeLabel;
79702
+ $2[50] = t23;
79525
79703
  } else {
79526
- t20 = $2[45];
79704
+ t23 = $2[50];
79527
79705
  }
79528
- let t21;
79529
- if ($2[46] !== t13 || $2[47] !== t18 || $2[48] !== t20) {
79530
- t21 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Content, {
79531
- children: [t13, t18, t20]
79706
+ let t24;
79707
+ if ($2[51] !== t16 || $2[52] !== t21 || $2[53] !== t23) {
79708
+ t24 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogObject.Content, {
79709
+ children: [t16, t21, t23]
79532
79710
  });
79533
- $2[46] = t13;
79534
- $2[47] = t18;
79535
- $2[48] = t20;
79536
- $2[49] = t21;
79711
+ $2[51] = t16;
79712
+ $2[52] = t21;
79713
+ $2[53] = t23;
79714
+ $2[54] = t24;
79537
79715
  } else {
79538
- t21 = $2[49];
79716
+ t24 = $2[54];
79539
79717
  }
79540
- let t22;
79541
- if ($2[50] !== confirmOpen || $2[51] !== t21) {
79542
- t22 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogObject, {
79718
+ let t25;
79719
+ if ($2[55] !== confirmOpen || $2[56] !== t24) {
79720
+ t25 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogObject, {
79543
79721
  open: confirmOpen,
79544
79722
  onOpenChange: setConfirmOpen,
79545
- children: t21
79723
+ children: t24
79546
79724
  });
79547
- $2[50] = confirmOpen;
79548
- $2[51] = t21;
79549
- $2[52] = t22;
79725
+ $2[55] = confirmOpen;
79726
+ $2[56] = t24;
79727
+ $2[57] = t25;
79550
79728
  } else {
79551
- t22 = $2[52];
79729
+ t25 = $2[57];
79552
79730
  }
79553
- let t23;
79554
- if ($2[53] !== className || $2[54] !== t12 || $2[55] !== t22) {
79555
- t23 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
79731
+ let t26;
79732
+ if ($2[58] !== className || $2[59] !== t15 || $2[60] !== t25) {
79733
+ t26 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
79556
79734
  className,
79557
79735
  onClick: _temp8,
79558
79736
  onKeyDown: _temp25,
79559
79737
  role: "presentation",
79560
- children: [t12, t22]
79738
+ children: [t15, t25]
79561
79739
  });
79562
- $2[53] = className;
79563
- $2[54] = t12;
79564
- $2[55] = t22;
79565
- $2[56] = t23;
79740
+ $2[58] = className;
79741
+ $2[59] = t15;
79742
+ $2[60] = t25;
79743
+ $2[61] = t26;
79566
79744
  } else {
79567
- t23 = $2[56];
79745
+ t26 = $2[61];
79568
79746
  }
79569
- return t23;
79747
+ return t26;
79570
79748
  };
79571
79749
  PluginMenu.displayName = "PluginMenu";
79572
79750
  function _temp8(e2) {
@@ -79653,7 +79831,7 @@ Badge2.displayName = "Badge";
79653
79831
  // src/side-panel/components/PluginCard.tsx
79654
79832
  var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
79655
79833
  var PluginCard = (t0) => {
79656
- const $2 = (0, import_compiler_runtime25.c)(56);
79834
+ const $2 = (0, import_compiler_runtime25.c)(59);
79657
79835
  const {
79658
79836
  plugin,
79659
79837
  activeTools,
@@ -79748,10 +79926,10 @@ var PluginCard = (t0) => {
79748
79926
  const myVersion_0 = toggleCounter.current = toggleCounter.current + 1;
79749
79927
  updatePluginTools((prev_2) => {
79750
79928
  preToggleRef.current = prev_2;
79751
- return prev_2.map((t35) => t35.name === toolName ? {
79752
- ...t35,
79929
+ return prev_2.map((t36) => t36.name === toolName ? {
79930
+ ...t36,
79753
79931
  permission: newPermission_1
79754
- } : t35);
79932
+ } : t36);
79755
79933
  });
79756
79934
  setToolPermission(plugin.name, toolName, newPermission_1).catch(() => {
79757
79935
  if (toggleCounter.current === myVersion_0) {
@@ -79787,6 +79965,21 @@ var PluginCard = (t0) => {
79787
79965
  const hasActiveTool = pluginTools.some(t4);
79788
79966
  const toolGroups = groupTools(visibleTools);
79789
79967
  const inactive = plugin.tabState !== "ready";
79968
+ const tabCount = plugin.tabs?.length ?? 0;
79969
+ const hasHomepage = Boolean(plugin.homepage);
79970
+ const isClickable = tabCount > 0 || hasHomepage;
79971
+ const tooltipText = isClickable ? plugin.tabState === "closed" ? `Open ${plugin.displayName} in new tab` : tabCount > 1 ? `Open ${plugin.displayName} (${tabCount} tabs)` : `Open ${plugin.displayName}` : void 0;
79972
+ let t5;
79973
+ if ($2[8] !== plugin.name) {
79974
+ t5 = () => {
79975
+ openPluginTab(plugin.name);
79976
+ };
79977
+ $2[8] = plugin.name;
79978
+ $2[9] = t5;
79979
+ } else {
79980
+ t5 = $2[9];
79981
+ }
79982
+ const handleOpenTab = t5;
79790
79983
  const renderToolList = (tools) => tools.map((tool) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ToolRow, {
79791
79984
  name: tool.name,
79792
79985
  displayName: tool.displayName,
@@ -79798,16 +79991,6 @@ var PluginCard = (t0) => {
79798
79991
  muted: inactive,
79799
79992
  onPermissionChange: handleToolPermissionChange
79800
79993
  }, tool.name));
79801
- let t5;
79802
- if ($2[8] !== plugin.version) {
79803
- t5 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(TooltipObject.Content, {
79804
- children: ["v", plugin.version]
79805
- });
79806
- $2[8] = plugin.version;
79807
- $2[9] = t5;
79808
- } else {
79809
- t5 = $2[9];
79810
- }
79811
79994
  const t6 = `flex min-w-0 flex-1 items-center gap-1.5 truncate font-head text-sm ${inactive ? "text-muted-foreground" : "text-foreground"}`;
79812
79995
  let t7;
79813
79996
  if ($2[10] !== plugin.source) {
@@ -79864,62 +80047,74 @@ var PluginCard = (t0) => {
79864
80047
  } else {
79865
80048
  t11 = $2[20];
79866
80049
  }
79867
- const t12 = onUpdate ?? _temp9;
79868
- const t13 = onRemove ?? _temp26;
79869
- const t14 = updatingPlugin ?? false;
79870
- const t15 = removingPlugin ?? false;
79871
- let t16;
79872
- if ($2[21] !== inactive || $2[22] !== plugin || $2[23] !== t12 || $2[24] !== t13 || $2[25] !== t14 || $2[26] !== t15) {
79873
- t16 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PluginMenu, {
80050
+ let t12;
80051
+ if ($2[21] !== t11 || $2[22] !== t9) {
80052
+ t12 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(Trigger2, {
80053
+ className: "focus-ring flex min-w-0 flex-1 cursor-pointer items-center gap-2 py-2 pr-0 pl-2 [&[data-state=open]>svg]:rotate-180",
80054
+ children: [t9, t11]
80055
+ });
80056
+ $2[21] = t11;
80057
+ $2[22] = t9;
80058
+ $2[23] = t12;
80059
+ } else {
80060
+ t12 = $2[23];
80061
+ }
80062
+ const t13 = onUpdate ?? _temp9;
80063
+ const t14 = onRemove ?? _temp26;
80064
+ const t15 = updatingPlugin ?? false;
80065
+ const t16 = removingPlugin ?? false;
80066
+ let t17;
80067
+ if ($2[24] !== inactive || $2[25] !== plugin || $2[26] !== t13 || $2[27] !== t14 || $2[28] !== t15 || $2[29] !== t16) {
80068
+ t17 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PluginMenu, {
79874
80069
  plugin,
79875
- onUpdate: t12,
79876
- onRemove: t13,
79877
- updating: t14,
79878
- removing: t15,
80070
+ onUpdate: t13,
80071
+ onRemove: t14,
80072
+ updating: t15,
80073
+ removing: t16,
79879
80074
  muted: inactive,
79880
80075
  className: "flex shrink-0 items-center px-1"
79881
80076
  });
79882
- $2[21] = inactive;
79883
- $2[22] = plugin;
79884
- $2[23] = t12;
79885
- $2[24] = t13;
79886
- $2[25] = t14;
79887
- $2[26] = t15;
79888
- $2[27] = t16;
80077
+ $2[24] = inactive;
80078
+ $2[25] = plugin;
80079
+ $2[26] = t13;
80080
+ $2[27] = t14;
80081
+ $2[28] = t15;
80082
+ $2[29] = t16;
80083
+ $2[30] = t17;
79889
80084
  } else {
79890
- t16 = $2[27];
80085
+ t17 = $2[30];
79891
80086
  }
79892
- let t17;
79893
- if ($2[28] !== toggleError) {
79894
- t17 = toggleError && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(AlertComponent, {
80087
+ let t18;
80088
+ if ($2[31] !== toggleError) {
80089
+ t18 = toggleError && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(AlertComponent, {
79895
80090
  status: "error",
79896
80091
  className: "mx-3 mb-1 px-2 py-1 text-xs",
79897
80092
  children: toggleError
79898
80093
  });
79899
- $2[28] = toggleError;
79900
- $2[29] = t17;
80094
+ $2[31] = toggleError;
80095
+ $2[32] = t18;
79901
80096
  } else {
79902
- t17 = $2[29];
80097
+ t18 = $2[32];
79903
80098
  }
79904
- let t18;
79905
- if ($2[30] !== actionError) {
79906
- t18 = actionError && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(AlertComponent, {
80099
+ let t19;
80100
+ if ($2[33] !== actionError) {
80101
+ t19 = actionError && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(AlertComponent, {
79907
80102
  status: "error",
79908
80103
  className: "mx-3 mb-1 px-2 py-1 text-xs",
79909
80104
  children: actionError
79910
80105
  });
79911
- $2[30] = actionError;
79912
- $2[31] = t18;
80106
+ $2[33] = actionError;
80107
+ $2[34] = t19;
79913
80108
  } else {
79914
- t18 = $2[31];
80109
+ t19 = $2[34];
79915
80110
  }
79916
- const t19 = AccordionComponent;
79917
- const t20 = "border-border border-t";
79918
- const t21 = toolFilter && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", {
80111
+ const t20 = AccordionComponent;
80112
+ const t21 = "border-border border-t";
80113
+ const t22 = toolFilter && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", {
79919
80114
  className: "mb-1 px-3 pt-2 text-muted-foreground text-xs",
79920
80115
  children: [visibleTools.length, " of ", pluginTools.length, " tools"]
79921
80116
  });
79922
- const t22 = toolGroups !== null ? toolGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", {
80117
+ const t23 = toolGroups !== null ? toolGroups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", {
79923
80118
  className: "[&:not(:first-child)]:mt-2",
79924
80119
  children: [/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {
79925
80120
  className: "border-border border-b border-l-2 border-l-primary bg-muted/30 px-3 py-1",
@@ -79929,83 +80124,83 @@ var PluginCard = (t0) => {
79929
80124
  })
79930
80125
  }), renderToolList(group.tools)]
79931
80126
  }, group.name)) : renderToolList(visibleTools);
79932
- let t23;
79933
- if ($2[32] !== t19.Content || $2[33] !== t21 || $2[34] !== t22) {
79934
- t23 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(t19.Content, {
79935
- className: t20,
79936
- children: [t21, t22]
80127
+ let t24;
80128
+ if ($2[35] !== t20.Content || $2[36] !== t22 || $2[37] !== t23) {
80129
+ t24 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(t20.Content, {
80130
+ className: t21,
80131
+ children: [t22, t23]
79937
80132
  });
79938
- $2[32] = t19.Content;
79939
- $2[33] = t21;
79940
- $2[34] = t22;
79941
- $2[35] = t23;
79942
- } else {
79943
- t23 = $2[35];
79944
- }
79945
- const t24 = pendingChange !== null;
79946
- let t25;
79947
- if ($2[36] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79948
- t25 = (open) => !open && setPendingChange(null);
79949
- $2[36] = t25;
80133
+ $2[35] = t20.Content;
80134
+ $2[36] = t22;
80135
+ $2[37] = t23;
80136
+ $2[38] = t24;
79950
80137
  } else {
79951
- t25 = $2[36];
80138
+ t24 = $2[38];
79952
80139
  }
80140
+ const t25 = pendingChange !== null;
79953
80141
  let t26;
79954
- if ($2[37] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79955
- t26 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DialogObject.Header, {
79956
- children: "Unreviewed Plugin"
79957
- });
79958
- $2[37] = t26;
80142
+ if ($2[39] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80143
+ t26 = (open) => !open && setPendingChange(null);
80144
+ $2[39] = t26;
79959
80145
  } else {
79960
- t26 = $2[37];
80146
+ t26 = $2[39];
79961
80147
  }
79962
80148
  let t27;
79963
- if ($2[38] !== plugin.displayName || $2[39] !== plugin.version) {
79964
- t27 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("p", {
79965
- className: "font-mono text-foreground text-sm",
79966
- children: [plugin.displayName, " v", plugin.version]
80149
+ if ($2[40] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80150
+ t27 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DialogObject.Header, {
80151
+ children: "Unreviewed Plugin"
79967
80152
  });
79968
- $2[38] = plugin.displayName;
79969
- $2[39] = plugin.version;
79970
80153
  $2[40] = t27;
79971
80154
  } else {
79972
80155
  t27 = $2[40];
79973
80156
  }
79974
80157
  let t28;
79975
- if ($2[41] !== plugin.name) {
80158
+ if ($2[41] !== plugin.displayName || $2[42] !== plugin.version) {
79976
80159
  t28 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("p", {
79977
- className: "mt-2 text-foreground text-sm",
79978
- 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."]
80160
+ className: "font-mono text-foreground text-sm",
80161
+ children: [plugin.displayName, " v", plugin.version]
79979
80162
  });
79980
- $2[41] = plugin.name;
79981
- $2[42] = t28;
80163
+ $2[41] = plugin.displayName;
80164
+ $2[42] = plugin.version;
80165
+ $2[43] = t28;
79982
80166
  } else {
79983
- t28 = $2[42];
80167
+ t28 = $2[43];
79984
80168
  }
79985
80169
  let t29;
79986
- if ($2[43] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79987
- t29 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", {
79988
- className: "mt-2 text-muted-foreground text-xs",
79989
- children: "You can also enable it now without review."
80170
+ if ($2[44] !== plugin.name) {
80171
+ t29 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("p", {
80172
+ className: "mt-2 text-foreground text-sm",
80173
+ 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."]
79990
80174
  });
79991
- $2[43] = t29;
80175
+ $2[44] = plugin.name;
80176
+ $2[45] = t29;
79992
80177
  } else {
79993
- t29 = $2[43];
80178
+ t29 = $2[45];
79994
80179
  }
79995
80180
  let t30;
79996
- if ($2[44] !== t27 || $2[45] !== t28) {
79997
- t30 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(DialogObject.Body, {
79998
- children: [t27, t28, t29]
80181
+ if ($2[46] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80182
+ t30 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", {
80183
+ className: "mt-2 text-muted-foreground text-xs",
80184
+ children: "You can also enable it now without review."
79999
80185
  });
80000
- $2[44] = t27;
80001
- $2[45] = t28;
80002
80186
  $2[46] = t30;
80003
80187
  } else {
80004
80188
  t30 = $2[46];
80005
80189
  }
80006
80190
  let t31;
80007
- if ($2[47] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80008
- t31 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DialogObject.Close, {
80191
+ if ($2[47] !== t28 || $2[48] !== t29) {
80192
+ t31 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(DialogObject.Body, {
80193
+ children: [t28, t29, t30]
80194
+ });
80195
+ $2[47] = t28;
80196
+ $2[48] = t29;
80197
+ $2[49] = t31;
80198
+ } else {
80199
+ t31 = $2[49];
80200
+ }
80201
+ let t32;
80202
+ if ($2[50] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
80203
+ t32 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DialogObject.Close, {
80009
80204
  asChild: true,
80010
80205
  children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Button, {
80011
80206
  size: "sm",
@@ -80013,75 +80208,92 @@ var PluginCard = (t0) => {
80013
80208
  children: "Cancel"
80014
80209
  })
80015
80210
  });
80016
- $2[47] = t31;
80211
+ $2[50] = t32;
80017
80212
  } else {
80018
- t31 = $2[47];
80213
+ t32 = $2[50];
80019
80214
  }
80020
- let t32;
80021
- if ($2[48] !== handleEnableAnyway) {
80022
- t32 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(DialogObject.Footer, {
80023
- children: [t31, /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Button, {
80215
+ let t33;
80216
+ if ($2[51] !== handleEnableAnyway) {
80217
+ t33 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(DialogObject.Footer, {
80218
+ children: [t32, /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Button, {
80024
80219
  size: "sm",
80025
80220
  onClick: handleEnableAnyway,
80026
80221
  children: "Enable Anyway"
80027
80222
  })]
80028
80223
  });
80029
- $2[48] = handleEnableAnyway;
80030
- $2[49] = t32;
80031
- } else {
80032
- t32 = $2[49];
80033
- }
80034
- let t33;
80035
- if ($2[50] !== t30 || $2[51] !== t32) {
80036
- t33 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(DialogObject.Content, {
80037
- onInteractOutside: _temp35,
80038
- children: [t26, t30, t32]
80039
- });
80040
- $2[50] = t30;
80041
- $2[51] = t32;
80224
+ $2[51] = handleEnableAnyway;
80042
80225
  $2[52] = t33;
80043
80226
  } else {
80044
80227
  t33 = $2[52];
80045
80228
  }
80046
80229
  let t34;
80047
- if ($2[53] !== t24 || $2[54] !== t33) {
80048
- t34 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DialogObject, {
80049
- open: t24,
80050
- onOpenChange: t25,
80051
- children: t33
80230
+ if ($2[53] !== t31 || $2[54] !== t33) {
80231
+ t34 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(DialogObject.Content, {
80232
+ onInteractOutside: _temp35,
80233
+ children: [t27, t31, t33]
80052
80234
  });
80053
- $2[53] = t24;
80235
+ $2[53] = t31;
80054
80236
  $2[54] = t33;
80055
80237
  $2[55] = t34;
80056
80238
  } else {
80057
80239
  t34 = $2[55];
80058
80240
  }
80241
+ let t35;
80242
+ if ($2[56] !== t25 || $2[57] !== t34) {
80243
+ t35 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DialogObject, {
80244
+ open: t25,
80245
+ onOpenChange: t26,
80246
+ children: t34
80247
+ });
80248
+ $2[56] = t25;
80249
+ $2[57] = t34;
80250
+ $2[58] = t35;
80251
+ } else {
80252
+ t35 = $2[58];
80253
+ }
80059
80254
  return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(AccordionComponent.Item, {
80060
80255
  value: plugin.name,
80061
80256
  className: transitionClass ?? (removingPlugin ? "pointer-events-none opacity-60 transition-opacity" : inactive ? "opacity-70 transition-opacity" : void 0),
80062
80257
  children: [/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(Header, {
80063
80258
  className: "flex",
80064
- children: [/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(Trigger2, {
80065
- className: "focus-ring flex min-w-0 flex-1 cursor-pointer items-center gap-2 px-3 py-2 [&[data-state=open]>svg]:rotate-180",
80066
- children: [/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(TooltipObject, {
80067
- children: [/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TooltipObject.Trigger, {
80068
- asChild: true,
80069
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {
80070
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PluginIcon, {
80071
- pluginName: plugin.name,
80072
- displayName: plugin.displayName,
80073
- tabState: plugin.tabState,
80074
- size: 32,
80075
- iconSvg: plugin.iconSvg,
80076
- iconInactiveSvg: plugin.iconInactiveSvg,
80077
- iconDarkSvg: plugin.iconDarkSvg,
80078
- iconDarkInactiveSvg: plugin.iconDarkInactiveSvg,
80079
- active: hasActiveTool
80080
- })
80259
+ children: [tooltipText ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(TooltipObject, {
80260
+ children: [/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TooltipObject.Trigger, {
80261
+ asChild: true,
80262
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("button", {
80263
+ type: "button",
80264
+ className: "focus-ring flex shrink-0 cursor-pointer items-center py-2 pl-3",
80265
+ onClick: handleOpenTab,
80266
+ "aria-label": tooltipText,
80267
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PluginIcon, {
80268
+ pluginName: plugin.name,
80269
+ displayName: plugin.displayName,
80270
+ tabState: plugin.tabState,
80271
+ size: 32,
80272
+ iconSvg: plugin.iconSvg,
80273
+ iconInactiveSvg: plugin.iconInactiveSvg,
80274
+ iconDarkSvg: plugin.iconDarkSvg,
80275
+ iconDarkInactiveSvg: plugin.iconDarkInactiveSvg,
80276
+ active: hasActiveTool,
80277
+ className: "transition-transform hover:scale-105"
80081
80278
  })
80082
- }), t5]
80083
- }), t9, t11]
80084
- }), t16, /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {
80279
+ })
80280
+ }), /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TooltipObject.Content, {
80281
+ children: tooltipText
80282
+ })]
80283
+ }) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {
80284
+ className: "flex shrink-0 items-center py-2 pl-3",
80285
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PluginIcon, {
80286
+ pluginName: plugin.name,
80287
+ displayName: plugin.displayName,
80288
+ tabState: plugin.tabState,
80289
+ size: 32,
80290
+ iconSvg: plugin.iconSvg,
80291
+ iconInactiveSvg: plugin.iconInactiveSvg,
80292
+ iconDarkSvg: plugin.iconDarkSvg,
80293
+ iconDarkInactiveSvg: plugin.iconDarkInactiveSvg,
80294
+ active: hasActiveTool
80295
+ })
80296
+ }), t12, t17, /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {
80085
80297
  className: "flex shrink-0 items-center px-3",
80086
80298
  children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(PermissionSelect, {
80087
80299
  value: plugin.permission,
@@ -80091,7 +80303,7 @@ var PluginCard = (t0) => {
80091
80303
  ariaLabel: `Permission for ${plugin.name} plugin`
80092
80304
  })
80093
80305
  })]
80094
- }), t17, t18, t23, t34]
80306
+ }), t18, t19, t24, t35]
80095
80307
  });
80096
80308
  };
80097
80309
  function _temp9() {
@@ -80219,7 +80431,7 @@ function useGroupTransitions(plugins, isFiltering) {
80219
80431
  return t8;
80220
80432
  }
80221
80433
  var PluginList = (t0) => {
80222
- const $2 = (0, import_compiler_runtime26.c)(28);
80434
+ const $2 = (0, import_compiler_runtime26.c)(30);
80223
80435
  const {
80224
80436
  plugins,
80225
80437
  failedPlugins,
@@ -80229,7 +80441,9 @@ var PluginList = (t0) => {
80229
80441
  onUpdate,
80230
80442
  onRemove,
80231
80443
  removingPlugins,
80232
- pluginErrors
80444
+ pluginErrors,
80445
+ onRemoveFailedPlugin,
80446
+ removingFailedPlugins
80233
80447
  } = t0;
80234
80448
  const filterLower = toolFilter.toLowerCase();
80235
80449
  const visiblePlugins = filterLower ? plugins.filter((p3) => (p3.tools ?? []).some((t11) => matchesTool(t11, filterLower))) : plugins;
@@ -80434,15 +80648,21 @@ var PluginList = (t0) => {
80434
80648
  }
80435
80649
  const renderCard = t7;
80436
80650
  let t8;
80437
- if ($2[23] !== visibleFailed) {
80651
+ if ($2[23] !== onRemoveFailedPlugin || $2[24] !== removingFailedPlugins || $2[25] !== visibleFailed) {
80438
80652
  t8 = visibleFailed.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {
80439
80653
  className: "mb-3 space-y-2",
80440
- children: visibleFailed.map(_temp27)
80654
+ children: visibleFailed.map((fp) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(FailedPluginCard, {
80655
+ plugin: fp,
80656
+ onRemove: () => onRemoveFailedPlugin?.(fp.specifier),
80657
+ removing: removingFailedPlugins?.has(fp.specifier) ?? false
80658
+ }, fp.specifier))
80441
80659
  });
80442
- $2[23] = visibleFailed;
80443
- $2[24] = t8;
80660
+ $2[23] = onRemoveFailedPlugin;
80661
+ $2[24] = removingFailedPlugins;
80662
+ $2[25] = visibleFailed;
80663
+ $2[26] = t8;
80444
80664
  } else {
80445
- t8 = $2[24];
80665
+ t8 = $2[26];
80446
80666
  }
80447
80667
  const t9 = filterLower ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(AccordionComponent, {
80448
80668
  type: "multiple",
@@ -80467,25 +80687,20 @@ var PluginList = (t0) => {
80467
80687
  })]
80468
80688
  });
80469
80689
  let t10;
80470
- if ($2[25] !== t8 || $2[26] !== t9) {
80690
+ if ($2[27] !== t8 || $2[28] !== t9) {
80471
80691
  t10 = /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, {
80472
80692
  children: [t8, t9]
80473
80693
  });
80474
- $2[25] = t8;
80475
- $2[26] = t9;
80476
- $2[27] = t10;
80694
+ $2[27] = t8;
80695
+ $2[28] = t9;
80696
+ $2[29] = t10;
80477
80697
  } else {
80478
- t10 = $2[27];
80698
+ t10 = $2[29];
80479
80699
  }
80480
80700
  return t10;
80481
80701
  };
80482
80702
  function _temp10() {
80483
80703
  }
80484
- function _temp27(fp) {
80485
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(FailedPluginCard, {
80486
- plugin: fp
80487
- }, fp.specifier);
80488
- }
80489
80704
 
80490
80705
  // src/side-panel/components/retro/Input.tsx
80491
80706
  var import_compiler_runtime27 = __toESM(require_compiler_runtime(), 1);
@@ -81114,7 +81329,7 @@ var useServerNotifications = (t0) => {
81114
81329
  // src/side-panel/App.tsx
81115
81330
  var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1);
81116
81331
  var App = () => {
81117
- const $2 = (0, import_compiler_runtime31.c)(70);
81332
+ const $2 = (0, import_compiler_runtime31.c)(73);
81118
81333
  const [connected, setConnected] = (0, import_react23.useState)(false);
81119
81334
  const [disconnectReason, setDisconnectReason] = (0, import_react23.useState)();
81120
81335
  let t0;
@@ -81133,7 +81348,7 @@ var App = () => {
81133
81348
  t1 = $2[1];
81134
81349
  }
81135
81350
  const [failedPlugins, setFailedPlugins] = (0, import_react23.useState)(t1);
81136
- const [browserTools, setBrowserTools] = (0, import_react23.useState)(_temp28);
81351
+ const [browserTools, setBrowserTools] = (0, import_react23.useState)(_temp27);
81137
81352
  const [browserPermission, setBrowserPermission] = (0, import_react23.useState)("off");
81138
81353
  const [skipPermissions, setSkipPermissions2] = (0, import_react23.useState)(false);
81139
81354
  const [serverVersion, setServerVersion] = (0, import_react23.useState)(void 0);
@@ -81183,12 +81398,12 @@ var App = () => {
81183
81398
  const [removingPlugins, setRemovingPlugins] = (0, import_react23.useState)(t6);
81184
81399
  let t7;
81185
81400
  if ($2[7] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81186
- t7 = /* @__PURE__ */ new Map();
81401
+ t7 = /* @__PURE__ */ new Set();
81187
81402
  $2[7] = t7;
81188
81403
  } else {
81189
81404
  t7 = $2[7];
81190
81405
  }
81191
- const [installErrors, setInstallErrors] = (0, import_react23.useState)(t7);
81406
+ const [removingFailedPlugins, setRemovingFailedPlugins] = (0, import_react23.useState)(t7);
81192
81407
  let t8;
81193
81408
  if ($2[8] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81194
81409
  t8 = /* @__PURE__ */ new Map();
@@ -81196,9 +81411,7 @@ var App = () => {
81196
81411
  } else {
81197
81412
  t8 = $2[8];
81198
81413
  }
81199
- const [pluginErrors, setPluginErrors] = (0, import_react23.useState)(t8);
81200
- const [browserToolsOpen, setBrowserToolsOpen] = (0, import_react23.useState)(false);
81201
- const [browserToolsHydrated, setBrowserToolsHydrated] = (0, import_react23.useState)(false);
81414
+ const [installErrors, setInstallErrors] = (0, import_react23.useState)(t8);
81202
81415
  let t9;
81203
81416
  if ($2[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81204
81417
  t9 = /* @__PURE__ */ new Map();
@@ -81206,65 +81419,75 @@ var App = () => {
81206
81419
  } else {
81207
81420
  t9 = $2[9];
81208
81421
  }
81209
- const pluginErrorTimers = (0, import_react23.useRef)(t9);
81422
+ const [pluginErrors, setPluginErrors] = (0, import_react23.useState)(t9);
81423
+ const [browserToolsOpen, setBrowserToolsOpen] = (0, import_react23.useState)(false);
81424
+ const [browserToolsHydrated, setBrowserToolsHydrated] = (0, import_react23.useState)(false);
81425
+ let t10;
81426
+ if ($2[10] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81427
+ t10 = /* @__PURE__ */ new Map();
81428
+ $2[10] = t10;
81429
+ } else {
81430
+ t10 = $2[10];
81431
+ }
81432
+ const pluginErrorTimers = (0, import_react23.useRef)(t10);
81210
81433
  const npmSearchTimer = (0, import_react23.useRef)(void 0);
81211
81434
  const npmSearchCounter = (0, import_react23.useRef)(0);
81212
81435
  const connectedRef = (0, import_react23.useRef)(connected);
81213
81436
  const loadingRef = (0, import_react23.useRef)(loading);
81214
81437
  const pluginsRef = (0, import_react23.useRef)(plugins);
81215
- let t10;
81216
81438
  let t11;
81217
- if ($2[10] !== connected || $2[11] !== loading || $2[12] !== plugins) {
81218
- t10 = () => {
81439
+ let t12;
81440
+ if ($2[11] !== connected || $2[12] !== loading || $2[13] !== plugins) {
81441
+ t11 = () => {
81219
81442
  connectedRef.current = connected;
81220
81443
  loadingRef.current = loading;
81221
81444
  pluginsRef.current = plugins;
81222
81445
  };
81223
- t11 = [connected, loading, plugins];
81224
- $2[10] = connected;
81225
- $2[11] = loading;
81226
- $2[12] = plugins;
81227
- $2[13] = t10;
81446
+ t12 = [connected, loading, plugins];
81447
+ $2[11] = connected;
81448
+ $2[12] = loading;
81449
+ $2[13] = plugins;
81228
81450
  $2[14] = t11;
81451
+ $2[15] = t12;
81229
81452
  } else {
81230
- t10 = $2[13];
81231
81453
  t11 = $2[14];
81454
+ t12 = $2[15];
81232
81455
  }
81233
- (0, import_react23.useEffect)(t10, t11);
81234
- let t12;
81235
- if ($2[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81236
- t12 = {
81456
+ (0, import_react23.useEffect)(t11, t12);
81457
+ let t13;
81458
+ if ($2[16] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81459
+ t13 = {
81237
81460
  setPlugins,
81238
81461
  setActiveTools,
81239
81462
  setPendingConfirmations
81240
81463
  };
81241
- $2[15] = t12;
81464
+ $2[16] = t13;
81242
81465
  } else {
81243
- t12 = $2[15];
81466
+ t13 = $2[16];
81244
81467
  }
81245
81468
  const {
81246
81469
  handleNotification
81247
- } = useServerNotifications(t12);
81248
- let t13;
81470
+ } = useServerNotifications(t13);
81249
81471
  let t14;
81250
- if ($2[16] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81251
- t13 = () => () => {
81472
+ let t15;
81473
+ if ($2[17] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81474
+ t14 = () => () => {
81252
81475
  for (const timer of pluginErrorTimers.current.values()) {
81253
81476
  clearTimeout(timer);
81254
81477
  }
81255
81478
  };
81256
- t14 = [];
81257
- $2[16] = t13;
81479
+ t15 = [];
81258
81480
  $2[17] = t14;
81481
+ $2[18] = t15;
81259
81482
  } else {
81260
- t13 = $2[16];
81261
81483
  t14 = $2[17];
81484
+ t15 = $2[18];
81262
81485
  }
81263
- (0, import_react23.useEffect)(t13, t14);
81264
- let t15;
81486
+ (0, import_react23.useEffect)(t14, t15);
81265
81487
  let t16;
81266
- if ($2[18] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81267
- t15 = () => {
81488
+ let t17;
81489
+ if ($2[19] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81490
+ t16 = () => {
81268
81491
  chrome.storage.session.get("browserToolsOpen").then((result) => {
81269
81492
  const stored = result.browserToolsOpen;
81270
81493
  if (stored === true) {
@@ -81275,17 +81498,17 @@ var App = () => {
81275
81498
  setBrowserToolsHydrated(true);
81276
81499
  });
81277
81500
  };
81278
- t16 = [];
81279
- $2[18] = t15;
81501
+ t17 = [];
81280
81502
  $2[19] = t16;
81503
+ $2[20] = t17;
81281
81504
  } else {
81282
- t15 = $2[18];
81283
81505
  t16 = $2[19];
81506
+ t17 = $2[20];
81284
81507
  }
81285
- (0, import_react23.useEffect)(t15, t16);
81286
- let t17;
81287
- if ($2[20] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81288
- t17 = (pluginName, message) => {
81508
+ (0, import_react23.useEffect)(t16, t17);
81509
+ let t18;
81510
+ if ($2[21] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81511
+ t18 = (pluginName, message) => {
81289
81512
  const existing = pluginErrorTimers.current.get(pluginName);
81290
81513
  if (existing) {
81291
81514
  clearTimeout(existing);
@@ -81300,14 +81523,14 @@ var App = () => {
81300
81523
  pluginErrorTimers.current.delete(pluginName);
81301
81524
  }, ERROR_DISPLAY_DURATION_MS));
81302
81525
  };
81303
- $2[20] = t17;
81526
+ $2[21] = t18;
81304
81527
  } else {
81305
- t17 = $2[20];
81528
+ t18 = $2[21];
81306
81529
  }
81307
- const showPluginError = t17;
81308
- let t18;
81309
- if ($2[21] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81310
- t18 = (pluginName_0) => {
81530
+ const showPluginError = t18;
81531
+ let t19;
81532
+ if ($2[22] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81533
+ t19 = (pluginName_0) => {
81311
81534
  const existing_0 = pluginErrorTimers.current.get(pluginName_0);
81312
81535
  if (existing_0) {
81313
81536
  clearTimeout(existing_0);
@@ -81319,14 +81542,14 @@ var App = () => {
81319
81542
  return next_0;
81320
81543
  });
81321
81544
  };
81322
- $2[21] = t18;
81545
+ $2[22] = t19;
81323
81546
  } else {
81324
- t18 = $2[21];
81547
+ t19 = $2[22];
81325
81548
  }
81326
- const clearPluginError = t18;
81327
- let t19;
81328
- if ($2[22] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81329
- t19 = (query) => {
81549
+ const clearPluginError = t19;
81550
+ let t20;
81551
+ if ($2[23] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81552
+ t20 = (query) => {
81330
81553
  setSearchQuery(query);
81331
81554
  clearTimeout(npmSearchTimer.current);
81332
81555
  if (!query.trim()) {
@@ -81355,14 +81578,14 @@ var App = () => {
81355
81578
  });
81356
81579
  }, 400);
81357
81580
  };
81358
- $2[22] = t19;
81581
+ $2[23] = t20;
81359
81582
  } else {
81360
- t19 = $2[22];
81583
+ t20 = $2[23];
81361
81584
  }
81362
- const handleSearchChange = t19;
81363
- let t20;
81364
- if ($2[23] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81365
- t20 = (name) => {
81585
+ const handleSearchChange = t20;
81586
+ let t21;
81587
+ if ($2[24] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81588
+ t21 = (name) => {
81366
81589
  setInstallingPlugins((prev_2) => new Set(prev_2).add(name));
81367
81590
  setInstallErrors((prev_3) => {
81368
81591
  const next_1 = new Map(prev_3);
@@ -81385,14 +81608,14 @@ var App = () => {
81385
81608
  setInstallErrors((prev_6) => new Map(prev_6).set(name, err instanceof Error ? err.message : String(err)));
81386
81609
  });
81387
81610
  };
81388
- $2[23] = t20;
81611
+ $2[24] = t21;
81389
81612
  } else {
81390
- t20 = $2[23];
81613
+ t21 = $2[24];
81391
81614
  }
81392
- const handleInstall = t20;
81393
- let t21;
81394
- if ($2[24] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81395
- t21 = (pluginName_1) => {
81615
+ const handleInstall = t21;
81616
+ let t22;
81617
+ if ($2[25] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81618
+ t22 = (pluginName_1) => {
81396
81619
  clearPluginError(pluginName_1);
81397
81620
  setRemovingPlugins((prev_7) => new Set(prev_7).add(pluginName_1));
81398
81621
  removePlugin(pluginName_1).then(() => {
@@ -81410,28 +81633,51 @@ var App = () => {
81410
81633
  showPluginError(pluginName_1, err_0 instanceof Error ? err_0.message : String(err_0));
81411
81634
  });
81412
81635
  };
81413
- $2[24] = t21;
81636
+ $2[25] = t22;
81414
81637
  } else {
81415
- t21 = $2[24];
81638
+ t22 = $2[25];
81416
81639
  }
81417
- const handleRemove = t21;
81418
- let t22;
81419
- if ($2[25] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81420
- t22 = (pluginName_2) => {
81640
+ const handleRemove = t22;
81641
+ let t23;
81642
+ if ($2[26] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81643
+ t23 = (specifier) => {
81644
+ setRemovingFailedPlugins((prev_10) => /* @__PURE__ */ new Set([...prev_10, specifier]));
81645
+ removeFailedPlugin(specifier).then(() => {
81646
+ setRemovingFailedPlugins((prev_11) => {
81647
+ const next_6 = new Set(prev_11);
81648
+ next_6.delete(specifier);
81649
+ return next_6;
81650
+ });
81651
+ }).catch(() => {
81652
+ setRemovingFailedPlugins((prev_12) => {
81653
+ const next_7 = new Set(prev_12);
81654
+ next_7.delete(specifier);
81655
+ return next_7;
81656
+ });
81657
+ });
81658
+ };
81659
+ $2[26] = t23;
81660
+ } else {
81661
+ t23 = $2[26];
81662
+ }
81663
+ const handleRemoveFailedPlugin = t23;
81664
+ let t24;
81665
+ if ($2[27] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81666
+ t24 = (pluginName_2) => {
81421
81667
  clearPluginError(pluginName_2);
81422
81668
  updatePlugin(pluginName_2).catch((err_1) => {
81423
81669
  showPluginError(pluginName_2, err_1 instanceof Error ? err_1.message : String(err_1));
81424
81670
  });
81425
81671
  };
81426
- $2[25] = t22;
81672
+ $2[27] = t24;
81427
81673
  } else {
81428
- t22 = $2[25];
81674
+ t24 = $2[27];
81429
81675
  }
81430
- const handleUpdate = t22;
81431
- let t23;
81432
- let t24;
81433
- if ($2[26] !== handleNotification) {
81434
- t23 = () => {
81676
+ const handleUpdate = t24;
81677
+ let t25;
81678
+ let t26;
81679
+ if ($2[28] !== handleNotification) {
81680
+ t25 = () => {
81435
81681
  const applyFullState = (result_1) => {
81436
81682
  setConnected(result_1.connected);
81437
81683
  setDisconnectReason(result_1.disconnectReason);
@@ -81456,14 +81702,14 @@ var App = () => {
81456
81702
  setBrowserPermission(result_1.browserPermission ?? "off");
81457
81703
  setSkipPermissions2(result_1.skipPermissions ?? false);
81458
81704
  setServerVersion(result_1.serverVersion);
81459
- setActiveTools((prev_10) => {
81460
- const next_6 = /* @__PURE__ */ new Set();
81461
- for (const key of prev_10) {
81705
+ setActiveTools((prev_13) => {
81706
+ const next_8 = /* @__PURE__ */ new Set();
81707
+ for (const key of prev_13) {
81462
81708
  if (key.startsWith("browser:") || result_1.plugins.some((p3) => key.startsWith(`${p3.name}:`))) {
81463
- next_6.add(key);
81709
+ next_8.add(key);
81464
81710
  }
81465
81711
  }
81466
- return next_6;
81712
+ return next_8;
81467
81713
  });
81468
81714
  for (const c2 of result_1.pendingConfirmations ?? []) {
81469
81715
  handleNotification({
@@ -81521,6 +81767,7 @@ var App = () => {
81521
81767
  setNpmSearchError(false);
81522
81768
  setInstallingPlugins(/* @__PURE__ */ new Set());
81523
81769
  setRemovingPlugins(/* @__PURE__ */ new Set());
81770
+ setRemovingFailedPlugins(/* @__PURE__ */ new Set());
81524
81771
  setInstallErrors(/* @__PURE__ */ new Map());
81525
81772
  for (const timer_0 of pluginErrorTimers.current.values()) {
81526
81773
  clearTimeout(timer_0);
@@ -81556,44 +81803,44 @@ var App = () => {
81556
81803
  chrome.runtime.onMessage.removeListener(listener);
81557
81804
  };
81558
81805
  };
81559
- t24 = [handleNotification];
81560
- $2[26] = handleNotification;
81561
- $2[27] = t23;
81562
- $2[28] = t24;
81806
+ t26 = [handleNotification];
81807
+ $2[28] = handleNotification;
81808
+ $2[29] = t25;
81809
+ $2[30] = t26;
81563
81810
  } else {
81564
- t23 = $2[27];
81565
- t24 = $2[28];
81811
+ t25 = $2[29];
81812
+ t26 = $2[30];
81566
81813
  }
81567
- (0, import_react23.useEffect)(t23, t24);
81568
- let t25;
81569
- if ($2[29] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81570
- t25 = (id, decision, alwaysAllow) => {
81814
+ (0, import_react23.useEffect)(t25, t26);
81815
+ let t27;
81816
+ if ($2[31] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81817
+ t27 = (id, decision, alwaysAllow) => {
81571
81818
  sendConfirmationResponse(id, decision, alwaysAllow);
81572
- setPendingConfirmations((prev_11) => prev_11.filter((c_0) => c_0.id !== id));
81819
+ setPendingConfirmations((prev_14) => prev_14.filter((c_0) => c_0.id !== id));
81573
81820
  };
81574
- $2[29] = t25;
81821
+ $2[31] = t27;
81575
81822
  } else {
81576
- t25 = $2[29];
81823
+ t27 = $2[31];
81577
81824
  }
81578
- const handleConfirmationRespond = t25;
81825
+ const handleConfirmationRespond = t27;
81579
81826
  const hasContent = plugins.length > 0 || failedPlugins.length > 0 || browserTools.length > 0;
81580
81827
  const showPlugins = !loading && connected && (hasContent || !!searchQuery);
81581
81828
  const showSearchBar = connected && !loading;
81582
- let t26;
81583
- if ($2[30] !== connected || $2[31] !== pendingConfirmations) {
81584
- t26 = connected && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ConfirmationDialog, {
81829
+ let t28;
81830
+ if ($2[32] !== connected || $2[33] !== pendingConfirmations) {
81831
+ t28 = connected && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ConfirmationDialog, {
81585
81832
  confirmations: pendingConfirmations,
81586
81833
  onRespond: handleConfirmationRespond
81587
81834
  });
81588
- $2[30] = connected;
81589
- $2[31] = pendingConfirmations;
81590
- $2[32] = t26;
81835
+ $2[32] = connected;
81836
+ $2[33] = pendingConfirmations;
81837
+ $2[34] = t28;
81591
81838
  } else {
81592
- t26 = $2[32];
81839
+ t28 = $2[34];
81593
81840
  }
81594
- let t27;
81595
- if ($2[33] !== skipPermissions) {
81596
- t27 = skipPermissions && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", {
81841
+ let t29;
81842
+ if ($2[35] !== skipPermissions) {
81843
+ t29 = skipPermissions && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", {
81597
81844
  className: "shrink-0 border-destructive border-b-2 bg-destructive/15 px-4 py-1.5",
81598
81845
  children: [/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", {
81599
81846
  className: "flex items-center gap-1.5",
@@ -81616,14 +81863,14 @@ var App = () => {
81616
81863
  children: "Restore approvals"
81617
81864
  })]
81618
81865
  });
81619
- $2[33] = skipPermissions;
81620
- $2[34] = t27;
81866
+ $2[35] = skipPermissions;
81867
+ $2[36] = t29;
81621
81868
  } else {
81622
- t27 = $2[34];
81869
+ t29 = $2[36];
81623
81870
  }
81624
- let t28;
81625
- if ($2[35] !== searchQuery || $2[36] !== showSearchBar) {
81626
- t28 = showSearchBar && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", {
81871
+ let t30;
81872
+ if ($2[37] !== searchQuery || $2[38] !== showSearchBar) {
81873
+ t30 = showSearchBar && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", {
81627
81874
  className: "shrink-0 px-4 pt-4 pb-2",
81628
81875
  children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", {
81629
81876
  className: "relative",
@@ -81645,35 +81892,35 @@ var App = () => {
81645
81892
  })]
81646
81893
  })
81647
81894
  });
81648
- $2[35] = searchQuery;
81649
- $2[36] = showSearchBar;
81650
- $2[37] = t28;
81895
+ $2[37] = searchQuery;
81896
+ $2[38] = showSearchBar;
81897
+ $2[39] = t30;
81651
81898
  } else {
81652
- t28 = $2[37];
81899
+ t30 = $2[39];
81653
81900
  }
81654
- let t29;
81655
- let t30;
81656
- if ($2[38] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81657
- t29 = {
81901
+ let t31;
81902
+ let t32;
81903
+ if ($2[40] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81904
+ t31 = {
81658
81905
  height: 0
81659
81906
  };
81660
- t30 = {
81907
+ t32 = {
81661
81908
  scrollbars: {
81662
81909
  theme: "os-theme-retro",
81663
81910
  autoHide: "scroll",
81664
81911
  autoHideDelay: 600
81665
81912
  }
81666
81913
  };
81667
- $2[38] = t29;
81668
- $2[39] = t30;
81914
+ $2[40] = t31;
81915
+ $2[41] = t32;
81669
81916
  } else {
81670
- t29 = $2[38];
81671
- t30 = $2[39];
81917
+ t31 = $2[40];
81918
+ t32 = $2[41];
81672
81919
  }
81673
- const t31 = `px-4 pb-4 ${showSearchBar ? "pt-2" : "pt-4"} ${showPlugins ? "" : "flex min-h-full items-center justify-center"}`;
81674
- let t32;
81675
- if ($2[40] !== activeTools || $2[41] !== browserPermission || $2[42] !== browserTools || $2[43] !== browserToolsHydrated || $2[44] !== browserToolsOpen || $2[45] !== connected || $2[46] !== disconnectReason || $2[47] !== failedPlugins || $2[48] !== hasContent || $2[49] !== installErrors || $2[50] !== installingPlugins || $2[51] !== loading || $2[52] !== npmResults || $2[53] !== npmSearchError || $2[54] !== npmSearching || $2[55] !== pluginErrors || $2[56] !== plugins || $2[57] !== removingPlugins || $2[58] !== searchQuery || $2[59] !== serverVersion) {
81676
- t32 = loading ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(LoadingState, {}) : !connected ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(DisconnectedState, {
81920
+ const t33 = `px-4 pb-4 ${showSearchBar ? "pt-2" : "pt-4"} ${showPlugins ? "" : "flex min-h-full items-center justify-center"}`;
81921
+ let t34;
81922
+ if ($2[42] !== activeTools || $2[43] !== browserPermission || $2[44] !== browserTools || $2[45] !== browserToolsHydrated || $2[46] !== browserToolsOpen || $2[47] !== connected || $2[48] !== disconnectReason || $2[49] !== failedPlugins || $2[50] !== hasContent || $2[51] !== installErrors || $2[52] !== installingPlugins || $2[53] !== loading || $2[54] !== npmResults || $2[55] !== npmSearchError || $2[56] !== npmSearching || $2[57] !== pluginErrors || $2[58] !== plugins || $2[59] !== removingFailedPlugins || $2[60] !== removingPlugins || $2[61] !== searchQuery || $2[62] !== serverVersion) {
81923
+ t34 = loading ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(LoadingState, {}) : !connected ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(DisconnectedState, {
81677
81924
  reason: disconnectReason
81678
81925
  }) : searchQuery ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(SearchResults, {
81679
81926
  plugins,
@@ -81725,7 +81972,9 @@ var App = () => {
81725
81972
  onUpdate: handleUpdate,
81726
81973
  onRemove: handleRemove,
81727
81974
  removingPlugins,
81728
- pluginErrors
81975
+ pluginErrors,
81976
+ onRemoveFailedPlugin: handleRemoveFailedPlugin,
81977
+ removingFailedPlugins
81729
81978
  }), plugins.length === 0 && failedPlugins.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(EmptyComponent, {
81730
81979
  className: "border-muted",
81731
81980
  role: "status",
@@ -81745,71 +81994,72 @@ var App = () => {
81745
81994
  })
81746
81995
  })]
81747
81996
  }) : null;
81748
- $2[40] = activeTools;
81749
- $2[41] = browserPermission;
81750
- $2[42] = browserTools;
81751
- $2[43] = browserToolsHydrated;
81752
- $2[44] = browserToolsOpen;
81753
- $2[45] = connected;
81754
- $2[46] = disconnectReason;
81755
- $2[47] = failedPlugins;
81756
- $2[48] = hasContent;
81757
- $2[49] = installErrors;
81758
- $2[50] = installingPlugins;
81759
- $2[51] = loading;
81760
- $2[52] = npmResults;
81761
- $2[53] = npmSearchError;
81762
- $2[54] = npmSearching;
81763
- $2[55] = pluginErrors;
81764
- $2[56] = plugins;
81765
- $2[57] = removingPlugins;
81766
- $2[58] = searchQuery;
81767
- $2[59] = serverVersion;
81768
- $2[60] = t32;
81997
+ $2[42] = activeTools;
81998
+ $2[43] = browserPermission;
81999
+ $2[44] = browserTools;
82000
+ $2[45] = browserToolsHydrated;
82001
+ $2[46] = browserToolsOpen;
82002
+ $2[47] = connected;
82003
+ $2[48] = disconnectReason;
82004
+ $2[49] = failedPlugins;
82005
+ $2[50] = hasContent;
82006
+ $2[51] = installErrors;
82007
+ $2[52] = installingPlugins;
82008
+ $2[53] = loading;
82009
+ $2[54] = npmResults;
82010
+ $2[55] = npmSearchError;
82011
+ $2[56] = npmSearching;
82012
+ $2[57] = pluginErrors;
82013
+ $2[58] = plugins;
82014
+ $2[59] = removingFailedPlugins;
82015
+ $2[60] = removingPlugins;
82016
+ $2[61] = searchQuery;
82017
+ $2[62] = serverVersion;
82018
+ $2[63] = t34;
81769
82019
  } else {
81770
- t32 = $2[60];
82020
+ t34 = $2[63];
81771
82021
  }
81772
- let t33;
81773
- if ($2[61] !== t31 || $2[62] !== t32) {
81774
- t33 = /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(g2, {
82022
+ let t35;
82023
+ if ($2[64] !== t33 || $2[65] !== t34) {
82024
+ t35 = /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(g2, {
81775
82025
  className: "flex-1",
81776
- style: t29,
81777
- options: t30,
82026
+ style: t31,
82027
+ options: t32,
81778
82028
  children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("main", {
81779
- className: t31,
81780
- children: t32
82029
+ className: t33,
82030
+ children: t34
81781
82031
  })
81782
82032
  });
81783
- $2[61] = t31;
81784
- $2[62] = t32;
81785
- $2[63] = t33;
82033
+ $2[64] = t33;
82034
+ $2[65] = t34;
82035
+ $2[66] = t35;
81786
82036
  } else {
81787
- t33 = $2[63];
82037
+ t35 = $2[66];
81788
82038
  }
81789
- let t34;
81790
- if ($2[64] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
81791
- t34 = /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Footer, {});
81792
- $2[64] = t34;
82039
+ let t36;
82040
+ if ($2[67] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
82041
+ t36 = /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Footer, {});
82042
+ $2[67] = t36;
81793
82043
  } else {
81794
- t34 = $2[64];
82044
+ t36 = $2[67];
81795
82045
  }
81796
- let t35;
81797
- if ($2[65] !== t26 || $2[66] !== t27 || $2[67] !== t28 || $2[68] !== t33) {
81798
- t35 = /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TooltipObject.Provider, {
82046
+ let t37;
82047
+ if ($2[68] !== t28 || $2[69] !== t29 || $2[70] !== t30 || $2[71] !== t35) {
82048
+ t37 = /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TooltipObject.Provider, {
81799
82049
  children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", {
81800
82050
  className: "flex h-screen flex-col overflow-hidden text-foreground",
81801
- children: [t26, t27, t28, t33, t34]
82051
+ children: [t28, t29, t30, t35, t36]
81802
82052
  })
81803
82053
  });
81804
- $2[65] = t26;
81805
- $2[66] = t27;
81806
- $2[67] = t28;
81807
- $2[68] = t33;
81808
- $2[69] = t35;
82054
+ $2[68] = t28;
82055
+ $2[69] = t29;
82056
+ $2[70] = t30;
82057
+ $2[71] = t35;
82058
+ $2[72] = t37;
81809
82059
  } else {
81810
- t35 = $2[69];
82060
+ t37 = $2[72];
81811
82061
  }
81812
- return t35;
82062
+ return t37;
81813
82063
  };
81814
82064
  function _temp13(t2) {
81815
82065
  return {
@@ -81817,7 +82067,7 @@ function _temp13(t2) {
81817
82067
  permission: "auto"
81818
82068
  };
81819
82069
  }
81820
- function _temp28() {
82070
+ function _temp27() {
81821
82071
  return BROWSER_TOOLS_CATALOG.map(_temp13);
81822
82072
  }
81823
82073
  function _temp36(t_0) {