@opentabs-dev/browser-extension 0.0.52 → 0.0.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/background-message-handlers.d.ts +33 -6
  2. package/dist/background-message-handlers.d.ts.map +1 -1
  3. package/dist/background-message-handlers.js +335 -20
  4. package/dist/background-message-handlers.js.map +1 -1
  5. package/dist/background.js +859 -365
  6. package/dist/background.js.map +1 -1
  7. package/dist/browser-commands/extension-commands.d.ts.map +1 -1
  8. package/dist/browser-commands/extension-commands.js +5 -2
  9. package/dist/browser-commands/extension-commands.js.map +1 -1
  10. package/dist/browser-commands/key-press-command.d.ts +2 -0
  11. package/dist/browser-commands/key-press-command.d.ts.map +1 -1
  12. package/dist/browser-commands/key-press-command.js +42 -4
  13. package/dist/browser-commands/key-press-command.js.map +1 -1
  14. package/dist/confirmation-badge.d.ts +17 -3
  15. package/dist/confirmation-badge.d.ts.map +1 -1
  16. package/dist/confirmation-badge.js +55 -18
  17. package/dist/confirmation-badge.js.map +1 -1
  18. package/dist/constants.d.ts +8 -0
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +8 -0
  21. package/dist/constants.js.map +1 -1
  22. package/dist/dispatch-helpers.d.ts +1 -1
  23. package/dist/extension-messages.d.ts +48 -21
  24. package/dist/extension-messages.d.ts.map +1 -1
  25. package/dist/known-methods.d.ts +2 -2
  26. package/dist/known-methods.d.ts.map +1 -1
  27. package/dist/known-methods.js +1 -2
  28. package/dist/known-methods.js.map +1 -1
  29. package/dist/message-router.d.ts.map +1 -1
  30. package/dist/message-router.js +163 -24
  31. package/dist/message-router.js.map +1 -1
  32. package/dist/offscreen/index.js +17 -7
  33. package/dist/offscreen/index.js.map +1 -1
  34. package/dist/server-request.d.ts +19 -0
  35. package/dist/server-request.d.ts.map +1 -0
  36. package/dist/server-request.js +79 -0
  37. package/dist/server-request.js.map +1 -0
  38. package/dist/server-state-cache.d.ts +68 -0
  39. package/dist/server-state-cache.d.ts.map +1 -0
  40. package/dist/server-state-cache.js +208 -0
  41. package/dist/server-state-cache.js.map +1 -0
  42. package/dist/side-panel/App.d.ts.map +1 -1
  43. package/dist/side-panel/App.js +60 -58
  44. package/dist/side-panel/App.js.map +1 -1
  45. package/dist/side-panel/bridge.d.ts +31 -34
  46. package/dist/side-panel/bridge.d.ts.map +1 -1
  47. package/dist/side-panel/bridge.js +27 -91
  48. package/dist/side-panel/bridge.js.map +1 -1
  49. package/dist/side-panel/components/BrowserToolsCard.d.ts.map +1 -1
  50. package/dist/side-panel/components/BrowserToolsCard.js +2 -1
  51. package/dist/side-panel/components/BrowserToolsCard.js.map +1 -1
  52. package/dist/side-panel/components/ConfirmationDialog.d.ts +7 -2
  53. package/dist/side-panel/components/ConfirmationDialog.d.ts.map +1 -1
  54. package/dist/side-panel/components/ConfirmationDialog.js.map +1 -1
  55. package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
  56. package/dist/side-panel/components/PluginCard.js +2 -1
  57. package/dist/side-panel/components/PluginCard.js.map +1 -1
  58. package/dist/side-panel/components/PluginIcon.d.ts +2 -1
  59. package/dist/side-panel/components/PluginIcon.d.ts.map +1 -1
  60. package/dist/side-panel/components/PluginIcon.js +23 -5
  61. package/dist/side-panel/components/PluginIcon.js.map +1 -1
  62. package/dist/side-panel/components/ToolIcon.d.ts +2 -1
  63. package/dist/side-panel/components/ToolIcon.d.ts.map +1 -1
  64. package/dist/side-panel/components/ToolIcon.js +17 -3
  65. package/dist/side-panel/components/ToolIcon.js.map +1 -1
  66. package/dist/side-panel/components/ToolRow.d.ts.map +1 -1
  67. package/dist/side-panel/components/ToolRow.js +1 -2
  68. package/dist/side-panel/components/ToolRow.js.map +1 -1
  69. package/dist/side-panel/components/retro/Button.d.ts +1 -1
  70. package/dist/side-panel/hooks/useServerNotifications.d.ts +1 -3
  71. package/dist/side-panel/hooks/useServerNotifications.d.ts.map +1 -1
  72. package/dist/side-panel/hooks/useServerNotifications.js +15 -11
  73. package/dist/side-panel/hooks/useServerNotifications.js.map +1 -1
  74. package/dist/side-panel/side-panel.js +1254 -1218
  75. package/dist/side-panel/styles.css +1 -1
  76. package/dist/side-panel-toggle.d.ts +6 -0
  77. package/dist/side-panel-toggle.d.ts.map +1 -1
  78. package/dist/side-panel-toggle.js +6 -0
  79. package/dist/side-panel-toggle.js.map +1 -1
  80. package/dist/tab-state.d.ts +26 -1
  81. package/dist/tab-state.d.ts.map +1 -1
  82. package/dist/tab-state.js +163 -11
  83. package/dist/tab-state.js.map +1 -1
  84. package/dist/tool-dispatch.d.ts.map +1 -1
  85. package/dist/tool-dispatch.js +3 -2
  86. package/dist/tool-dispatch.js.map +1 -1
  87. package/manifest.json +1 -1
  88. package/package.json +1 -1
@@ -1,9 +1,23 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from '../lib/cn.js';
3
3
  import { Wrench } from 'lucide-react';
4
4
  import { DynamicIcon } from 'lucide-react/dynamic';
5
- import { Suspense } from 'react';
5
+ import { Suspense, useState, useEffect, useRef } from 'react';
6
6
  const FallbackIcon = ({ enabled = true }) => (_jsx(Wrench, { className: cn('h-3 w-3 transition-colors', enabled ? 'text-primary-foreground' : 'text-muted-foreground') }));
7
- const ToolIcon = ({ icon, className = '', enabled = true }) => (_jsx("div", { className: cn('flex h-6 w-6 shrink-0 items-center justify-center rounded border-2 transition-colors', enabled ? 'border-border bg-primary' : 'border-border/40 bg-muted/40', className), children: icon ? (_jsx(Suspense, { fallback: _jsx(FallbackIcon, { enabled: enabled }), children: _jsx(DynamicIcon, { name: icon, className: cn('h-3 w-3 transition-colors', enabled ? 'text-primary-foreground' : 'text-muted-foreground'), fallback: () => _jsx(FallbackIcon, { enabled: enabled }) }) })) : (_jsx(FallbackIcon, { enabled: enabled })) }));
7
+ const ToolIcon = ({ icon, className = '', enabled = true, active = false }) => {
8
+ const [fadingOut, setFadingOut] = useState(false);
9
+ const prevActiveRef = useRef(false);
10
+ useEffect(() => {
11
+ if (prevActiveRef.current && !active) {
12
+ setTimeout(() => setFadingOut(true), 0);
13
+ const timer = setTimeout(() => setFadingOut(false), 500);
14
+ prevActiveRef.current = active;
15
+ return () => clearTimeout(timer);
16
+ }
17
+ prevActiveRef.current = active;
18
+ return;
19
+ }, [active]);
20
+ return (_jsxs("div", { className: cn('relative flex h-6 w-6 shrink-0 items-center justify-center rounded border-2 transition-colors', enabled ? 'border-border bg-primary' : 'border-border/40 bg-muted/40', className), children: [icon ? (_jsx(Suspense, { fallback: _jsx(FallbackIcon, { enabled: enabled }), children: _jsx(DynamicIcon, { name: icon, className: cn('h-3 w-3 transition-colors', enabled ? 'text-primary-foreground' : 'text-muted-foreground'), fallback: () => _jsx(FallbackIcon, { enabled: enabled }) }) })) : (_jsx(FallbackIcon, { enabled: enabled })), (active || fadingOut) && (_jsx("div", { className: cn('bg-success border-card absolute rounded-full border-2', active && 'animate-activity-flash', fadingOut && !active && 'animate-activity-fade-out'), style: { width: 8, height: 8, bottom: -4, right: -4 } }))] }));
21
+ };
8
22
  export { ToolIcon };
9
23
  //# sourceMappingURL=ToolIcon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolIcon.js","sourceRoot":"","sources":["../../../src/side-panel/components/ToolIcon.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AASjC,MAAM,YAAY,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAyB,EAAE,EAAE,CAAC,CAClE,KAAC,MAAM,IAAC,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAI,CACtH,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI,EAAiB,EAAE,EAAE,CAAC,CAC5E,cACE,SAAS,EAAE,EAAE,CACX,sFAAsF,EACtF,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,8BAA8B,EACrE,SAAS,CACV,YACA,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,YACpD,KAAC,WAAW,IACV,IAAI,EAAE,IAAgB,EACtB,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,CAAC,EACzG,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,GAClD,GACO,CACZ,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,CACnC,GACG,CACP,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"ToolIcon.js","sourceRoot":"","sources":["../../../src/side-panel/components/ToolIcon.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAU9D,MAAM,YAAY,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAyB,EAAE,EAAE,CAAC,CAClE,KAAC,MAAM,IAAC,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAI,CACtH,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,EAAiB,EAAE,EAAE;IAC3F,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACrC,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;YACzD,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC;YAC/B,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC;QAC/B,OAAO;IACT,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,8BAA8B,EACrE,SAAS,CACV,aACA,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,YACpD,KAAC,WAAW,IACV,IAAI,EAAE,IAAgB,EACtB,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,CAAC,EACzG,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,GAClD,GACO,CACZ,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,CACnC,EACA,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CACxB,cACE,SAAS,EAAE,EAAE,CACX,uDAAuD,EACvD,MAAM,IAAI,wBAAwB,EAClC,SAAS,IAAI,CAAC,MAAM,IAAI,2BAA2B,CACpD,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,GACrD,CACH,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToolRow.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/ToolRow.tsx"],"names":[],"mappings":"AAMA,QAAA,MAAM,OAAO,GAAI,sEAQd;IACD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,4CA0BA,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"ToolRow.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/ToolRow.tsx"],"names":[],"mappings":"AAKA,QAAA,MAAM,OAAO,GAAI,sEAQd;IACD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,4CAwBA,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,9 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Loader } from './retro/Loader.js';
3
2
  import { Switch } from './retro/Switch.js';
4
3
  import { Tooltip } from './retro/Tooltip.js';
5
4
  import { ToolIcon } from './ToolIcon.js';
6
5
  import { cn } from '../lib/cn.js';
7
- const ToolRow = ({ name, displayName, description, icon, enabled, active, onToggle, }) => (_jsxs("div", { className: cn('border-border flex items-center gap-2 border-b px-3 py-2 transition-colors last:border-b-0', enabled ? 'hover:bg-primary/10' : 'hover:bg-muted/50', active && 'bg-accent/20'), children: [_jsx(ToolIcon, { icon: icon, enabled: enabled }), _jsxs(Tooltip, { children: [_jsx(Tooltip.Trigger, { asChild: true, children: _jsx("div", { className: "min-w-0 flex-1", children: _jsx("div", { className: "text-foreground truncate text-sm", children: displayName }) }) }), _jsx(Tooltip.Content, { children: description })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [active && _jsx(Loader, { size: "sm", count: 2, duration: 0.4, delayStep: 80 }), _jsx(Switch, { checked: enabled, onCheckedChange: () => onToggle(), onClick: (e) => e.stopPropagation(), "aria-label": `Toggle ${name} tool` })] })] }));
6
+ const ToolRow = ({ name, displayName, description, icon, enabled, active, onToggle, }) => (_jsxs("div", { className: cn('border-border flex items-center gap-2 border-b px-3 py-2 transition-colors last:border-b-0', enabled ? 'hover:bg-primary/10' : 'hover:bg-muted/50'), children: [_jsx(ToolIcon, { icon: icon, enabled: enabled, active: active }), _jsxs(Tooltip, { children: [_jsx(Tooltip.Trigger, { asChild: true, children: _jsx("div", { className: "min-w-0 flex-1", children: _jsx("div", { className: "text-foreground truncate text-sm", children: displayName }) }) }), _jsx(Tooltip.Content, { children: description })] }), _jsx("div", { className: "flex shrink-0 items-center gap-2", children: _jsx(Switch, { checked: enabled, onCheckedChange: () => onToggle(), onClick: (e) => e.stopPropagation(), "aria-label": `Toggle ${name} tool` }) })] }));
8
7
  export { ToolRow };
9
8
  //# sourceMappingURL=ToolRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolRow.js","sourceRoot":"","sources":["../../../src/side-panel/components/ToolRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,OAAO,GAAG,CAAC,EACf,IAAI,EACJ,WAAW,EACX,WAAW,EACX,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,GAST,EAAE,EAAE,CAAC,CACJ,eACE,SAAS,EAAE,EAAE,CACX,4FAA4F,EAC5F,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,EACrD,MAAM,IAAI,cAAc,CACzB,aACD,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAI,EAC1C,MAAC,OAAO,eACN,KAAC,OAAO,CAAC,OAAO,IAAC,OAAO,kBACtB,cAAK,SAAS,EAAC,gBAAgB,YAC7B,cAAK,SAAS,EAAC,kCAAkC,YAAE,WAAW,GAAO,GACjE,GACU,EAClB,KAAC,OAAO,CAAC,OAAO,cAAE,WAAW,GAAmB,IACxC,EACV,eAAK,SAAS,EAAC,kCAAkC,aAC9C,MAAM,IAAI,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,GAAI,EACvE,KAAC,MAAM,IACL,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,EACjC,OAAO,EAAE,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,gBACzC,UAAU,IAAI,OAAO,GACjC,IACE,IACF,CACP,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"ToolRow.js","sourceRoot":"","sources":["../../../src/side-panel/components/ToolRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,OAAO,GAAG,CAAC,EACf,IAAI,EACJ,WAAW,EACX,WAAW,EACX,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,GAST,EAAE,EAAE,CAAC,CACJ,eACE,SAAS,EAAE,EAAE,CACX,4FAA4F,EAC5F,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,CACtD,aACD,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAI,EAC1D,MAAC,OAAO,eACN,KAAC,OAAO,CAAC,OAAO,IAAC,OAAO,kBACtB,cAAK,SAAS,EAAC,gBAAgB,YAC7B,cAAK,SAAS,EAAC,kCAAkC,YAAE,WAAW,GAAO,GACjE,GACU,EAClB,KAAC,OAAO,CAAC,OAAO,cAAE,WAAW,GAAmB,IACxC,EACV,cAAK,SAAS,EAAC,kCAAkC,YAC/C,KAAC,MAAM,IACL,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,EACjC,OAAO,EAAE,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,gBACzC,UAAU,IAAI,OAAO,GACjC,GACE,IACF,CACP,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { VariantProps } from 'class-variance-authority';
2
2
  import type { ButtonHTMLAttributes, Ref } from 'react';
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "link" | "default" | "outline" | "secondary" | "ghost" | null | undefined;
4
+ variant?: "link" | "default" | "outline" | "ghost" | "secondary" | null | undefined;
5
5
  size?: "icon" | "sm" | "md" | "lg" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  interface IButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -1,11 +1,9 @@
1
1
  import type { PluginState } from '../bridge.js';
2
2
  import type { ConfirmationData } from '../components/ConfirmationDialog.js';
3
- import type { TabState } from '@opentabs-dev/shared';
4
3
  interface UseServerNotificationsParams {
5
4
  setPlugins: React.Dispatch<React.SetStateAction<PluginState[]>>;
6
5
  setActiveTools: React.Dispatch<React.SetStateAction<Set<string>>>;
7
6
  setPendingConfirmations: React.Dispatch<React.SetStateAction<ConfirmationData[]>>;
8
- pendingTabStates: React.RefObject<Map<string, TabState>>;
9
7
  }
10
8
  interface UseServerNotificationsResult {
11
9
  handleNotification: (data: Record<string, unknown>) => void;
@@ -16,6 +14,6 @@ interface UseServerNotificationsResult {
16
14
  * (confirmation.request, tab.stateChanged, tool.invocationStart, tool.invocationEnd)
17
15
  * and a function to clear a confirmation's auto-removal timeout.
18
16
  */
19
- declare const useServerNotifications: ({ setPlugins, setActiveTools, setPendingConfirmations, pendingTabStates, }: UseServerNotificationsParams) => UseServerNotificationsResult;
17
+ declare const useServerNotifications: ({ setPlugins, setActiveTools, setPendingConfirmations, }: UseServerNotificationsParams) => UseServerNotificationsResult;
20
18
  export { useServerNotifications };
21
19
  //# sourceMappingURL=useServerNotifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useServerNotifications.d.ts","sourceRoot":"","sources":["../../../src/side-panel/hooks/useServerNotifications.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,UAAU,4BAA4B;IACpC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAChE,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClE,uBAAuB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAClF,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC1D;AAED,UAAU,4BAA4B;IACpC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5D,wBAAwB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,GAAI,4EAK7B,4BAA4B,KAAG,4BAwHjC,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"useServerNotifications.d.ts","sourceRoot":"","sources":["../../../src/side-panel/hooks/useServerNotifications.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAK5E,UAAU,4BAA4B;IACpC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAChE,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClE,uBAAuB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;CACnF;AAED,UAAU,4BAA4B;IACpC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5D,wBAAwB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED;;;;GAIG;AACH,QAAA,MAAM,sBAAsB,GAAI,0DAI7B,4BAA4B,KAAG,4BA6HjC,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -7,7 +7,7 @@ const validTabStates = new Set(['closed', 'unavailable', 'ready']);
7
7
  * (confirmation.request, tab.stateChanged, tool.invocationStart, tool.invocationEnd)
8
8
  * and a function to clear a confirmation's auto-removal timeout.
9
9
  */
10
- const useServerNotifications = ({ setPlugins, setActiveTools, setPendingConfirmations, pendingTabStates, }) => {
10
+ const useServerNotifications = ({ setPlugins, setActiveTools, setPendingConfirmations, }) => {
11
11
  const timeoutIds = useRef(new Map());
12
12
  const invocationTimeoutIds = useRef(new Map());
13
13
  useEffect(() => {
@@ -35,6 +35,9 @@ const useServerNotifications = ({ setPlugins, setActiveTools, setPendingConfirma
35
35
  if (data.method === 'confirmation.request' && data.params) {
36
36
  const params = data.params;
37
37
  if (typeof params.id === 'string' && typeof params.tool === 'string' && typeof params.timeoutMs === 'number') {
38
+ // Use the background's receivedAt when hydrating from bg:getFullState so
39
+ // the countdown bar reflects true elapsed time since the request arrived.
40
+ const receivedAt = typeof params.receivedAt === 'number' && params.receivedAt > 0 ? params.receivedAt : Date.now();
38
41
  const confirmation = {
39
42
  id: params.id,
40
43
  tool: params.tool,
@@ -44,10 +47,17 @@ const useServerNotifications = ({ setPlugins, setActiveTools, setPendingConfirma
44
47
  : undefined,
45
48
  paramsPreview: typeof params.paramsPreview === 'string' ? params.paramsPreview : '',
46
49
  timeoutMs: params.timeoutMs,
47
- receivedAt: Date.now(),
50
+ receivedAt,
48
51
  };
49
- setPendingConfirmations(prev => [...prev, confirmation]);
50
- const removeDelay = params.timeoutMs + 1000;
52
+ // Skip duplicate confirmations (e.g., real-time sp:serverMessage
53
+ // followed by bg:getFullState hydration for the same id).
54
+ if (timeoutIds.current.has(confirmation.id))
55
+ return;
56
+ setPendingConfirmations(prev => (prev.some(c => c.id === confirmation.id) ? prev : [...prev, confirmation]));
57
+ // Compute remaining time from the original receivedAt so hydrated
58
+ // confirmations expire at the correct wall-clock time.
59
+ const elapsed = Date.now() - receivedAt;
60
+ const removeDelay = Math.max(0, params.timeoutMs + 1000 - elapsed);
51
61
  const tid = setTimeout(() => {
52
62
  timeoutIds.current.delete(confirmation.id);
53
63
  setPendingConfirmations(prev => prev.filter(c => c.id !== confirmation.id));
@@ -64,13 +74,7 @@ const useServerNotifications = ({ setPlugins, setActiveTools, setPendingConfirma
64
74
  VALID_PLUGIN_NAME.test(params.plugin)) {
65
75
  const pluginName = params.plugin;
66
76
  const newState = params.state;
67
- setPlugins(prev => {
68
- if (prev.length === 0) {
69
- pendingTabStates.current.set(pluginName, newState);
70
- return prev;
71
- }
72
- return prev.map(p => (p.name === pluginName ? { ...p, tabState: newState } : p));
73
- });
77
+ setPlugins(prev => prev.map(p => (p.name === pluginName ? { ...p, tabState: newState } : p)));
74
78
  }
75
79
  }
76
80
  if (data.method === 'tool.invocationStart' && data.params) {
@@ -1 +1 @@
1
- {"version":3,"file":"useServerNotifications.js","sourceRoot":"","sources":["../../../src/side-panel/hooks/useServerNotifications.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useServerNotifications.js","sourceRoot":"","sources":["../../../src/side-panel/hooks/useServerNotifications.ts"],"names":[],"mappings":"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"}