@opentabs-dev/browser-extension 0.0.60 → 0.0.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/background-message-handlers.d.ts +8 -14
  2. package/dist/background-message-handlers.d.ts.map +1 -1
  3. package/dist/background-message-handlers.js +50 -156
  4. package/dist/background-message-handlers.js.map +1 -1
  5. package/dist/background.js +173 -216
  6. package/dist/confirmation-badge.d.ts +3 -24
  7. package/dist/confirmation-badge.d.ts.map +1 -1
  8. package/dist/confirmation-badge.js +13 -98
  9. package/dist/confirmation-badge.js.map +1 -1
  10. package/dist/extension-messages.d.ts +17 -34
  11. package/dist/extension-messages.d.ts.map +1 -1
  12. package/dist/message-router.d.ts +2 -2
  13. package/dist/message-router.d.ts.map +1 -1
  14. package/dist/message-router.js +22 -10
  15. package/dist/message-router.js.map +1 -1
  16. package/dist/offscreen/index.js +3 -5
  17. package/dist/offscreen/index.js.map +1 -1
  18. package/dist/plugin-storage.js +3 -3
  19. package/dist/plugin-storage.js.map +1 -1
  20. package/dist/server-state-cache.d.ts +12 -6
  21. package/dist/server-state-cache.d.ts.map +1 -1
  22. package/dist/server-state-cache.js +51 -21
  23. package/dist/server-state-cache.js.map +1 -1
  24. package/dist/side-panel/App.d.ts.map +1 -1
  25. package/dist/side-panel/App.js +19 -25
  26. package/dist/side-panel/App.js.map +1 -1
  27. package/dist/side-panel/bridge.d.ts +13 -18
  28. package/dist/side-panel/bridge.d.ts.map +1 -1
  29. package/dist/side-panel/bridge.js +9 -13
  30. package/dist/side-panel/bridge.js.map +1 -1
  31. package/dist/side-panel/components/BrowserToolsCard.d.ts +5 -1
  32. package/dist/side-panel/components/BrowserToolsCard.d.ts.map +1 -1
  33. package/dist/side-panel/components/BrowserToolsCard.js +40 -22
  34. package/dist/side-panel/components/BrowserToolsCard.js.map +1 -1
  35. package/dist/side-panel/components/ConfirmationDialog.d.ts +4 -11
  36. package/dist/side-panel/components/ConfirmationDialog.d.ts.map +1 -1
  37. package/dist/side-panel/components/ConfirmationDialog.js +23 -34
  38. package/dist/side-panel/components/ConfirmationDialog.js.map +1 -1
  39. package/dist/side-panel/components/NpmPluginCard.d.ts.map +1 -1
  40. package/dist/side-panel/components/NpmPluginCard.js +1 -1
  41. package/dist/side-panel/components/NpmPluginCard.js.map +1 -1
  42. package/dist/side-panel/components/PluginCard.d.ts +2 -1
  43. package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
  44. package/dist/side-panel/components/PluginCard.js +18 -40
  45. package/dist/side-panel/components/PluginCard.js.map +1 -1
  46. package/dist/side-panel/components/PluginIcon.d.ts +1 -2
  47. package/dist/side-panel/components/PluginIcon.d.ts.map +1 -1
  48. package/dist/side-panel/components/PluginIcon.js +36 -41
  49. package/dist/side-panel/components/PluginIcon.js.map +1 -1
  50. package/dist/side-panel/components/PluginList.d.ts +2 -1
  51. package/dist/side-panel/components/PluginList.d.ts.map +1 -1
  52. package/dist/side-panel/components/PluginList.js +2 -2
  53. package/dist/side-panel/components/PluginList.js.map +1 -1
  54. package/dist/side-panel/components/PluginMenu.d.ts.map +1 -1
  55. package/dist/side-panel/components/PluginMenu.js +1 -1
  56. package/dist/side-panel/components/PluginMenu.js.map +1 -1
  57. package/dist/side-panel/components/SearchResults.d.ts +2 -1
  58. package/dist/side-panel/components/SearchResults.d.ts.map +1 -1
  59. package/dist/side-panel/components/SearchResults.js +2 -2
  60. package/dist/side-panel/components/SearchResults.js.map +1 -1
  61. package/dist/side-panel/components/ToolIcon.d.ts.map +1 -1
  62. package/dist/side-panel/components/ToolIcon.js +9 -2
  63. package/dist/side-panel/components/ToolIcon.js.map +1 -1
  64. package/dist/side-panel/components/ToolRow.d.ts +14 -4
  65. package/dist/side-panel/components/ToolRow.d.ts.map +1 -1
  66. package/dist/side-panel/components/ToolRow.js +13 -3
  67. package/dist/side-panel/components/ToolRow.js.map +1 -1
  68. package/dist/side-panel/components/retro/Select.d.ts +13 -0
  69. package/dist/side-panel/components/retro/Select.d.ts.map +1 -0
  70. package/dist/side-panel/components/retro/Select.js +27 -0
  71. package/dist/side-panel/components/retro/Select.js.map +1 -0
  72. package/dist/side-panel/constants.d.ts +0 -2
  73. package/dist/side-panel/constants.d.ts.map +1 -1
  74. package/dist/side-panel/constants.js +0 -2
  75. package/dist/side-panel/constants.js.map +1 -1
  76. package/dist/side-panel/hooks/useServerNotifications.d.ts +1 -3
  77. package/dist/side-panel/hooks/useServerNotifications.d.ts.map +1 -1
  78. package/dist/side-panel/hooks/useServerNotifications.js +13 -41
  79. package/dist/side-panel/hooks/useServerNotifications.js.map +1 -1
  80. package/dist/side-panel/side-panel.js +5715 -4723
  81. package/dist/side-panel/styles.css +1 -1
  82. package/dist/tool-dispatch.d.ts +2 -1
  83. package/dist/tool-dispatch.d.ts.map +1 -1
  84. package/dist/tool-dispatch.js +4 -6
  85. package/dist/tool-dispatch.js.map +1 -1
  86. package/manifest.json +1 -1
  87. package/package.json +2 -1
@@ -6,7 +6,7 @@
6
6
  * to the MCP server via dedicated bg:* message handlers in the background
7
7
  * script. The side panel never communicates with the MCP server directly.
8
8
  */
9
- import type { ConfigStateBrowserTool, ConfigStateFailedPlugin, ConfigStatePlugin, WireToolDef } from '@opentabs-dev/shared';
9
+ import type { ConfigStateBrowserTool, ConfigStateFailedPlugin, ConfigStatePlugin, ToolPermission, WireToolDef } from '@opentabs-dev/shared';
10
10
  import type { DisconnectReason } from '../extension-messages.js';
11
11
  /** Plugin state as displayed in the side panel. tools is optional to reflect that the server response may omit it. */
12
12
  type PluginState = Omit<ConfigStatePlugin, 'tools'> & {
@@ -22,7 +22,6 @@ interface PluginSearchResult {
22
22
  description: string;
23
23
  version: string;
24
24
  author: string;
25
- isOfficial: boolean;
26
25
  }
27
26
  /** Result returned after a successful plugin install or update */
28
27
  interface PluginInstallResult {
@@ -38,10 +37,8 @@ interface PluginInstallResult {
38
37
  interface FullStateConfirmation {
39
38
  id: string;
40
39
  tool: string;
41
- domain: string | null;
42
- tabId?: number;
43
- paramsPreview: string;
44
- timeoutMs: number;
40
+ plugin: string;
41
+ params: Record<string, unknown>;
45
42
  receivedAt: number;
46
43
  }
47
44
  /** Full state returned by bg:getFullState */
@@ -51,7 +48,9 @@ interface FullStateResult {
51
48
  plugins: PluginState[];
52
49
  failedPlugins: FailedPluginState[];
53
50
  browserTools: BrowserToolState[];
51
+ browserPermission?: ToolPermission;
54
52
  serverVersion?: string;
53
+ skipPermissions?: boolean;
55
54
  pendingConfirmations?: FullStateConfirmation[];
56
55
  }
57
56
  /** Returns true if a tool's displayName, name, or description matches the filter string */
@@ -69,16 +68,12 @@ declare const matchesPlugin: (plugin: PluginState, filterLower: string) => boole
69
68
  declare const extractShortName: (name: string) => string;
70
69
  /** Fetch full merged state from the background script's local caches */
71
70
  declare const getFullState: () => Promise<FullStateResult>;
72
- /** Toggle a single tool's enabled state */
73
- declare const setToolEnabled: (plugin: string, tool: string, enabled: boolean) => Promise<unknown>;
74
- /** Toggle all tools for a plugin */
75
- declare const setAllToolsEnabled: (plugin: string, enabled: boolean) => Promise<unknown>;
76
- /** Toggle a subset of tools for a plugin */
77
- declare const setToolsEnabled: (plugin: string, tools: string[], enabled: boolean) => Promise<unknown>;
78
- /** Toggle a browser tool's enabled state */
79
- declare const setBrowserToolEnabled: (tool: string, enabled: boolean) => Promise<unknown>;
80
- /** Toggle all browser tools' enabled state in a single batch request */
81
- declare const setAllBrowserToolsEnabled: (enabled: boolean) => Promise<unknown>;
71
+ /** Set a single tool's permission */
72
+ declare const setToolPermission: (plugin: string, tool: string, permission: ToolPermission) => Promise<unknown>;
73
+ /** Set all tools' permission for a plugin */
74
+ declare const setAllToolsPermission: (plugin: string, permission: ToolPermission) => Promise<unknown>;
75
+ /** Set a plugin's default permission */
76
+ declare const setPluginPermission: (plugin: string, permission: ToolPermission) => Promise<unknown>;
82
77
  /** Search npm registry for plugins matching the given query */
83
78
  declare const searchPlugins: (query: string) => Promise<{
84
79
  results: PluginSearchResult[];
@@ -92,7 +87,7 @@ declare const removePlugin: (name: string) => Promise<{
92
87
  /** Update an installed plugin to the latest registry version */
93
88
  declare const updatePlugin: (name: string) => Promise<PluginInstallResult>;
94
89
  /** Send a confirmation response to the MCP server via the background script (fire-and-forget) */
95
- declare const sendConfirmationResponse: (id: string, decision: "allow_once" | "allow_always" | "deny", scope?: "tool_domain" | "tool_all" | "domain_all") => void;
90
+ declare const sendConfirmationResponse: (id: string, decision: "allow" | "deny", alwaysAllow?: boolean) => void;
96
91
  export type { BrowserToolState, FailedPluginState, FullStateResult, PluginInstallResult, PluginSearchResult, PluginState, WireToolDef, };
97
- export { extractShortName, getFullState, installPlugin, matchesPlugin, matchesTool, removePlugin, searchPlugins, sendConfirmationResponse, setAllBrowserToolsEnabled, setAllToolsEnabled, setBrowserToolEnabled, setToolEnabled, setToolsEnabled, updatePlugin, };
92
+ export { extractShortName, getFullState, installPlugin, matchesPlugin, matchesTool, removePlugin, searchPlugins, sendConfirmationResponse, setAllToolsPermission, setPluginPermission, setToolPermission, updatePlugin, };
98
93
  //# sourceMappingURL=bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/side-panel/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,sHAAsH;AACtH,KAAK,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAEhF,yDAAyD;AACzD,KAAK,iBAAiB,GAAG,uBAAuB,CAAC;AAEjD,2FAA2F;AAC3F,KAAK,gBAAgB,GAAG,sBAAsB,CAAC;AAE/C,sDAAsD;AACtD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,kEAAkE;AAClE,UAAU,mBAAmB;IAC3B,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,4FAA4F;AAC5F,UAAU,qBAAqB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6CAA6C;AAC7C,UAAU,eAAe;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAChD;AAED,2FAA2F;AAC3F,QAAA,MAAM,WAAW,GAAI,MAAM,WAAW,EAAE,aAAa,MAAM,KAAG,OAGR,CAAC;AAEvD;;wDAEwD;AACxD,QAAA,MAAM,aAAa,GAAI,QAAQ,WAAW,EAAE,aAAa,MAAM,KAAG,OAK/D,CAAC;AAEJ;;;;;GAKG;AACH,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAA0E,CAAC;AAsBpH,wEAAwE;AACxE,QAAA,MAAM,YAAY,QAAO,OAAO,CAAC,eAAe,CAAgE,CAAC;AAEjH,2CAA2C;AAC3C,QAAA,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,CACnB,CAAC;AAEtE,oCAAoC;AACpC,QAAA,MAAM,kBAAkB,GAAI,QAAQ,MAAM,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,CACX,CAAC;AAEpE,4CAA4C;AAC5C,QAAA,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,CACrB,CAAC;AAExE,4CAA4C;AAC5C,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,CACX,CAAC;AAErE,wEAAwE;AACxE,QAAA,MAAM,yBAAyB,GAAI,SAAS,OAAO,KAAG,OAAO,CAAC,OAAO,CACH,CAAC;AAEnE,+DAA+D;AAC/D,QAAA,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,EAAE,CAAA;CAAE,CACO,CAAC;AAExF,uCAAuC;AACvC,QAAA,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,OAAO,CAAC,mBAAmB,CACO,CAAC;AAEzE,yCAAyC;AACzC,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CACO,CAAC;AAEjE,gEAAgE;AAChE,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OAAO,CAAC,mBAAmB,CACO,CAAC;AAExE,iGAAiG;AACjG,QAAA,MAAM,wBAAwB,GAC5B,IAAI,MAAM,EACV,UAAU,YAAY,GAAG,cAAc,GAAG,MAAM,EAChD,QAAQ,aAAa,GAAG,UAAU,GAAG,YAAY,KAChD,IASF,CAAC;AAEF,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,CAAC;AACF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,YAAY,GACb,CAAC"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/side-panel/bridge.ts"],"names":[],"mappings":"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"}
@@ -43,16 +43,12 @@ const sendBgMessage = (message) => new Promise((resolve, reject) => {
43
43
  });
44
44
  /** Fetch full merged state from the background script's local caches */
45
45
  const getFullState = () => sendBgMessage({ type: 'bg:getFullState' });
46
- /** Toggle a single tool's enabled state */
47
- const setToolEnabled = (plugin, tool, enabled) => sendBgMessage({ type: 'bg:setToolEnabled', plugin, tool, enabled });
48
- /** Toggle all tools for a plugin */
49
- const setAllToolsEnabled = (plugin, enabled) => sendBgMessage({ type: 'bg:setAllToolsEnabled', plugin, enabled });
50
- /** Toggle a subset of tools for a plugin */
51
- const setToolsEnabled = (plugin, tools, enabled) => sendBgMessage({ type: 'bg:setToolsEnabled', plugin, tools, enabled });
52
- /** Toggle a browser tool's enabled state */
53
- const setBrowserToolEnabled = (tool, enabled) => sendBgMessage({ type: 'bg:setBrowserToolEnabled', tool, enabled });
54
- /** Toggle all browser tools' enabled state in a single batch request */
55
- const setAllBrowserToolsEnabled = (enabled) => sendBgMessage({ type: 'bg:setAllBrowserToolsEnabled', enabled });
46
+ /** Set a single tool's permission */
47
+ const setToolPermission = (plugin, tool, permission) => sendBgMessage({ type: 'bg:setToolPermission', plugin, tool, permission });
48
+ /** Set all tools' permission for a plugin */
49
+ const setAllToolsPermission = (plugin, permission) => sendBgMessage({ type: 'bg:setAllToolsPermission', plugin, permission });
50
+ /** Set a plugin's default permission */
51
+ const setPluginPermission = (plugin, permission) => sendBgMessage({ type: 'bg:setPluginPermission', plugin, permission });
56
52
  /** Search npm registry for plugins matching the given query */
57
53
  const searchPlugins = (query) => sendBgMessage({ type: 'bg:searchPlugins', query });
58
54
  /** Install a plugin by package name */
@@ -62,15 +58,15 @@ const removePlugin = (name) => sendBgMessage({ type: 'bg:removePlugin', name });
62
58
  /** Update an installed plugin to the latest registry version */
63
59
  const updatePlugin = (name) => sendBgMessage({ type: 'bg:updatePlugin', name });
64
60
  /** Send a confirmation response to the MCP server via the background script (fire-and-forget) */
65
- const sendConfirmationResponse = (id, decision, scope) => {
61
+ const sendConfirmationResponse = (id, decision, alwaysAllow) => {
66
62
  chrome.runtime
67
63
  .sendMessage({
68
64
  type: 'sp:confirmationResponse',
69
- data: { id, decision, ...(scope ? { scope } : {}) },
65
+ data: { id, decision, ...(alwaysAllow ? { alwaysAllow } : {}) },
70
66
  })
71
67
  .catch((err) => {
72
68
  console.warn('[opentabs:side-panel] Failed to send confirmation response:', err);
73
69
  });
74
70
  };
75
- export { extractShortName, getFullState, installPlugin, matchesPlugin, matchesTool, removePlugin, searchPlugins, sendConfirmationResponse, setAllBrowserToolsEnabled, setAllToolsEnabled, setBrowserToolEnabled, setToolEnabled, setToolsEnabled, updatePlugin, };
71
+ export { extractShortName, getFullState, installPlugin, matchesPlugin, matchesTool, removePlugin, searchPlugins, sendConfirmationResponse, setAllToolsPermission, setPluginPermission, setToolPermission, updatePlugin, };
76
72
  //# sourceMappingURL=bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/side-panel/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6DH,2FAA2F;AAC3F,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAE,WAAmB,EAAW,EAAE,CACtE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7C,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAEvD;;wDAEwD;AACxD,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAE,WAAmB,EAAW,EAAE,CAC1E,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC/C,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CACvB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC9G,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAEpH;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAI,OAAgC,EAAc,EAAE,CACxE,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,QAAiB,EAAE,EAAE;QACxD,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACpE,MAAM,CAAC,IAAI,KAAK,CAAE,QAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,QAAa,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,wEAAwE;AACxE,MAAM,YAAY,GAAG,GAA6B,EAAE,CAAC,aAAa,CAAkB,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAEjH,2CAA2C;AAC3C,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,OAAgB,EAAoB,EAAE,CAC1F,aAAa,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAEtE,oCAAoC;AACpC,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,OAAgB,EAAoB,EAAE,CAChF,aAAa,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAEpE,4CAA4C;AAC5C,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,KAAe,EAAE,OAAgB,EAAoB,EAAE,CAC9F,aAAa,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAExE,4CAA4C;AAC5C,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,OAAgB,EAAoB,EAAE,CACjF,aAAa,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAErE,wEAAwE;AACxE,MAAM,yBAAyB,GAAG,CAAC,OAAgB,EAAoB,EAAE,CACvE,aAAa,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,CAAC,CAAC;AAEnE,+DAA+D;AAC/D,MAAM,aAAa,GAAG,CAAC,KAAa,EAA8C,EAAE,CAClF,aAAa,CAAoC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;AAExF,uCAAuC;AACvC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAgC,EAAE,CACnE,aAAa,CAAsB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzE,yCAAyC;AACzC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAyB,EAAE,CAC3D,aAAa,CAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjE,gEAAgE;AAChE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAgC,EAAE,CAClE,aAAa,CAAsB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAExE,iGAAiG;AACjG,MAAM,wBAAwB,GAAG,CAC/B,EAAU,EACV,QAAgD,EAChD,KAAiD,EAC3C,EAAE;IACR,MAAM,CAAC,OAAO;SACX,WAAW,CAAC;QACX,IAAI,EAAE,yBAAkC;QACxC,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KACpD,CAAC;SACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,6DAA6D,EAAE,GAAG,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAWF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,YAAY,GACb,CAAC"}
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/side-panel/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6DH,2FAA2F;AAC3F,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAE,WAAmB,EAAW,EAAE,CACtE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7C,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAEvD;;wDAEwD;AACxD,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAE,WAAmB,EAAW,EAAE,CAC1E,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC/C,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CACvB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC9G,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAEpH;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAI,OAAgC,EAAc,EAAE,CACxE,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,QAAiB,EAAE,EAAE;QACxD,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACpE,MAAM,CAAC,IAAI,KAAK,CAAE,QAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,QAAa,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,wEAAwE;AACxE,MAAM,YAAY,GAAG,GAA6B,EAAE,CAAC,aAAa,CAAkB,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAEjH,qCAAqC;AACrC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,UAA0B,EAAoB,EAAE,CACvG,aAAa,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAE5E,6CAA6C;AAC7C,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,UAA0B,EAAoB,EAAE,CAC7F,aAAa,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAE1E,wCAAwC;AACxC,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,UAA0B,EAAoB,EAAE,CAC3F,aAAa,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAExE,+DAA+D;AAC/D,MAAM,aAAa,GAAG,CAAC,KAAa,EAA8C,EAAE,CAClF,aAAa,CAAoC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;AAExF,uCAAuC;AACvC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAgC,EAAE,CACnE,aAAa,CAAsB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzE,yCAAyC;AACzC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAyB,EAAE,CAC3D,aAAa,CAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjE,gEAAgE;AAChE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAgC,EAAE,CAClE,aAAa,CAAsB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAExE,iGAAiG;AACjG,MAAM,wBAAwB,GAAG,CAAC,EAAU,EAAE,QAA0B,EAAE,WAAqB,EAAQ,EAAE;IACvG,MAAM,CAAC,OAAO;SACX,WAAW,CAAC;QACX,IAAI,EAAE,yBAAkC;QACxC,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KAChE,CAAC;SACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,6DAA6D,EAAE,GAAG,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAWF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,GACb,CAAC"}
@@ -1,13 +1,17 @@
1
+ import type { ToolPermission } from '@opentabs-dev/shared';
1
2
  import type { BrowserToolState } from '../bridge.js';
2
3
  /** Convert a snake_case browser tool name to a human-readable display name.
3
4
  * Removes the 'browser_' prefix and title-cases each word. */
4
5
  declare const toDisplayName: (name: string) => string;
5
- declare const BrowserToolsCard: ({ tools, activeTools, onToolsChange, toolFilter, serverVersion, }: {
6
+ declare const BrowserToolsCard: ({ tools, activeTools, onToolsChange, toolFilter, serverVersion, browserPermission, onBrowserPermissionChange, skipPermissions, }: {
6
7
  tools: BrowserToolState[];
7
8
  activeTools: Set<string>;
8
9
  onToolsChange: (updater: (tools: BrowserToolState[]) => BrowserToolState[]) => void;
9
10
  toolFilter?: string;
10
11
  serverVersion?: string;
12
+ browserPermission?: ToolPermission;
13
+ onBrowserPermissionChange?: (permission: ToolPermission) => void;
14
+ skipPermissions?: boolean;
11
15
  }) => import("react/jsx-runtime").JSX.Element;
12
16
  export { BrowserToolsCard, toDisplayName };
13
17
  //# sourceMappingURL=BrowserToolsCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserToolsCard.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/BrowserToolsCard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAkCrD;8DAC8D;AAC9D,QAAA,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAKxB,CAAC;AAEf,QAAA,MAAM,gBAAgB,GAAI,mEAMvB;IACD,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,IAAI,CAAC;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,4CAoHA,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"BrowserToolsCard.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/BrowserToolsCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiCrD;8DAC8D;AAC9D,QAAA,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAKxB,CAAC;AAEf,QAAA,MAAM,gBAAgB,GAAI,kIASvB;IACD,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,IAAI,CAAC;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC,yBAAyB,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,4CAgKA,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
@@ -2,15 +2,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as AccordionPrimitive from '@radix-ui/react-accordion';
3
3
  import { ChevronDown } from 'lucide-react';
4
4
  import { useEffect, useRef, useState } from 'react';
5
- import { setAllBrowserToolsEnabled, setBrowserToolEnabled } from '../bridge.js';
5
+ import { setPluginPermission, setToolPermission } from '../bridge.js';
6
6
  import { ERROR_DISPLAY_DURATION_MS } from '../constants.js';
7
7
  import { BrowserToolsMenu } from './BrowserToolsMenu.js';
8
8
  import { PluginIcon } from './PluginIcon.js';
9
9
  import { Accordion } from './retro/Accordion.js';
10
10
  import { Alert } from './retro/Alert.js';
11
11
  import { Badge } from './retro/Badge.js';
12
- import { Switch } from './retro/Switch.js';
13
- import { ToolRow } from './ToolRow.js';
12
+ import { PermissionSelect, ToolRow } from './ToolRow.js';
14
13
  /** Raw SVG string for the Chrome logo, rendered via PluginIcon's sanitized SVG path. */
15
14
  const CHROME_ICON_SVG = [
16
15
  '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48">',
@@ -40,7 +39,7 @@ const toDisplayName = (name) => name
40
39
  .split('_')
41
40
  .map(w => w.charAt(0).toUpperCase() + w.slice(1))
42
41
  .join(' ');
43
- const BrowserToolsCard = ({ tools, activeTools, onToolsChange, toolFilter, serverVersion, }) => {
42
+ const BrowserToolsCard = ({ tools, activeTools, onToolsChange, toolFilter, serverVersion, browserPermission = 'off', onBrowserPermissionChange, skipPermissions, }) => {
44
43
  const [toggleError, setToggleError] = useState(null);
45
44
  const errorTimerRef = useRef(undefined);
46
45
  const toggleCounter = useRef(0);
@@ -51,32 +50,29 @@ const BrowserToolsCard = ({ tools, activeTools, onToolsChange, toolFilter, serve
51
50
  setToggleError(message);
52
51
  errorTimerRef.current = setTimeout(() => setToggleError(null), ERROR_DISPLAY_DURATION_MS);
53
52
  };
54
- const allEnabled = tools.length > 0 && tools.every(t => t.enabled);
55
- const handleToggleAll = (checked) => {
53
+ const preBrowserPermRef = useRef('off');
54
+ const handleBrowserPermissionChange = (newPermission) => {
56
55
  const myVersion = ++toggleCounter.current;
57
- onToolsChange(prev => {
58
- preToggleRef.current = prev;
59
- return prev.map(t => ({ ...t, enabled: checked }));
60
- });
61
- void setAllBrowserToolsEnabled(checked).catch(() => {
56
+ preBrowserPermRef.current = browserPermission;
57
+ onBrowserPermissionChange?.(newPermission);
58
+ void setPluginPermission('browser', newPermission).catch(() => {
62
59
  if (toggleCounter.current === myVersion) {
63
- onToolsChange(() => preToggleRef.current);
60
+ onBrowserPermissionChange?.(preBrowserPermRef.current);
64
61
  }
65
- showToggleError('Failed to toggle all browser tools');
62
+ showToggleError('Failed to update browser permission');
66
63
  });
67
64
  };
68
- const handleToggleTool = (toolName, currentEnabled) => {
65
+ const handleToolPermissionChange = (toolName, newPermission) => {
69
66
  const myVersion = ++toggleCounter.current;
70
- const newEnabled = !currentEnabled;
71
67
  onToolsChange(prev => {
72
68
  preToggleRef.current = prev;
73
- return prev.map(t => (t.name === toolName ? { ...t, enabled: newEnabled } : t));
69
+ return prev.map(t => (t.name === toolName ? { ...t, permission: newPermission } : t));
74
70
  });
75
- void setBrowserToolEnabled(toolName, newEnabled).catch(() => {
71
+ void setToolPermission('browser', toolName, newPermission).catch(() => {
76
72
  if (toggleCounter.current === myVersion) {
77
73
  onToolsChange(() => preToggleRef.current);
78
74
  }
79
- showToggleError(`Failed to toggle ${toolName}`);
75
+ showToggleError(`Failed to update ${toolName}`);
80
76
  });
81
77
  };
82
78
  const filterLower = toolFilter?.toLowerCase() ?? '';
@@ -86,10 +82,32 @@ const BrowserToolsCard = ({ tools, activeTools, onToolsChange, toolFilter, serve
86
82
  t.description.toLowerCase().includes(filterLower))
87
83
  : tools;
88
84
  const hasActiveTool = tools.some(t => activeTools.has(`browser:${t.name}`));
89
- return (_jsxs(Accordion.Item, { value: "browser-tools", children: [_jsxs(AccordionPrimitive.Header, { className: "flex", children: [_jsxs(AccordionPrimitive.Trigger, { className: "flex min-w-0 flex-1 cursor-pointer items-center gap-2 px-3 py-2 focus:outline-hidden [&[data-state=open]>svg.chevron]:rotate-180", children: [_jsx(PluginIcon, { pluginName: "browser", displayName: "Browser", tabState: "ready", size: 32, iconSvg: CHROME_ICON_SVG, iconInactiveSvg: CHROME_ICON_SVG, active: hasActiveTool }), _jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-1.5 truncate font-head text-foreground text-sm", children: ["Browser", _jsx(Badge, { variant: "default", size: "sm", className: "align-middle", children: "CORE" })] }), _jsx(ChevronDown, { className: "chevron h-4 w-4 shrink-0 transition-transform duration-200" })] }), _jsx(BrowserToolsMenu, { serverVersion: serverVersion, className: "flex shrink-0 items-center px-1" }), _jsx("div", { className: "flex shrink-0 items-center px-3", onClick: (e) => e.stopPropagation(), onKeyDown: (e) => {
90
- if (e.key === 'Enter' || e.key === ' ')
91
- e.stopPropagation();
92
- }, role: "presentation", children: _jsx(Switch, { checked: allEnabled, onCheckedChange: handleToggleAll, "aria-label": "Toggle all browser tools" }) })] }), toggleError && (_jsx(Alert, { status: "error", className: "mx-3 mb-1 px-2 py-1 text-xs", children: toggleError })), _jsxs(Accordion.Content, { className: "border-border border-t", children: [toolFilter && (_jsxs("div", { className: "mb-1 px-3 pt-2 text-muted-foreground text-xs", children: [visibleTools.length, " of ", tools.length, " tools"] })), visibleTools.map(tool => (_jsx(ToolRow, { name: tool.name, displayName: toDisplayName(tool.name), description: tool.description, icon: tool.icon ?? 'globe', enabled: tool.enabled, active: activeTools.has(`browser:${tool.name}`), onToggle: () => handleToggleTool(tool.name, tool.enabled) }, tool.name)))] })] }));
85
+ // Group tools by their group field, preserving first-seen order
86
+ const hasAnyGroup = visibleTools.some(t => t.group);
87
+ const toolGroups = [];
88
+ if (hasAnyGroup) {
89
+ const groupMap = new Map();
90
+ for (const tool of visibleTools) {
91
+ const groupName = tool.group ?? 'Other';
92
+ let bucket = groupMap.get(groupName);
93
+ if (!bucket) {
94
+ bucket = [];
95
+ groupMap.set(groupName, bucket);
96
+ }
97
+ bucket.push(tool);
98
+ }
99
+ const otherBucket = groupMap.get('Other');
100
+ groupMap.delete('Other');
101
+ for (const [name, groupTools] of groupMap) {
102
+ toolGroups.push({ name, tools: groupTools });
103
+ }
104
+ if (otherBucket) {
105
+ toolGroups.push({ name: 'Other', tools: otherBucket });
106
+ }
107
+ }
108
+ return (_jsxs(Accordion.Item, { value: "browser-tools", children: [_jsxs(AccordionPrimitive.Header, { className: "flex", children: [_jsxs(AccordionPrimitive.Trigger, { className: "flex min-w-0 flex-1 cursor-pointer items-center gap-2 px-3 py-2 focus:outline-hidden [&[data-state=open]>svg.chevron]:rotate-180", children: [_jsx(PluginIcon, { pluginName: "browser", displayName: "Browser", tabState: "ready", size: 32, iconSvg: CHROME_ICON_SVG, iconInactiveSvg: CHROME_ICON_SVG, active: hasActiveTool }), _jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-1.5 truncate font-head text-foreground text-sm", children: ["Browser", _jsx(Badge, { variant: "default", size: "sm", className: "align-middle", children: "CORE" })] }), _jsx(ChevronDown, { className: "chevron h-4 w-4 shrink-0 transition-transform duration-200" })] }), _jsx(BrowserToolsMenu, { serverVersion: serverVersion, className: "flex shrink-0 items-center px-1" }), _jsx("div", { className: "flex shrink-0 items-center px-3", children: _jsx(PermissionSelect, { value: browserPermission, onValueChange: handleBrowserPermissionChange, disabled: skipPermissions ?? false, ariaLabel: "Permission for browser tools" }) })] }), toggleError && (_jsx(Alert, { status: "error", className: "mx-3 mb-1 px-2 py-1 text-xs", children: toggleError })), _jsxs(Accordion.Content, { className: "border-border border-t", children: [toolFilter && (_jsxs("div", { className: "mb-1 px-3 pt-2 text-muted-foreground text-xs", children: [visibleTools.length, " of ", tools.length, " tools"] })), hasAnyGroup
109
+ ? toolGroups.map(group => (_jsxs("div", { children: [_jsx("div", { className: "border-border border-b bg-muted/20 px-3 py-1", children: _jsx("span", { className: "font-head text-muted-foreground text-xs uppercase tracking-wider", children: group.name }) }), group.tools.map(tool => (_jsx(ToolRow, { name: tool.name, displayName: toDisplayName(tool.name), description: tool.description, summary: tool.summary, icon: tool.icon ?? 'globe', permission: tool.permission, active: activeTools.has(`browser:${tool.name}`), disabled: skipPermissions, onPermissionChange: handleToolPermissionChange }, tool.name)))] }, group.name)))
110
+ : visibleTools.map(tool => (_jsx(ToolRow, { name: tool.name, displayName: toDisplayName(tool.name), description: tool.description, summary: tool.summary, icon: tool.icon ?? 'globe', permission: tool.permission, active: activeTools.has(`browser:${tool.name}`), disabled: skipPermissions, onPermissionChange: handleToolPermissionChange }, tool.name)))] })] }));
93
111
  };
94
112
  export { BrowserToolsCard, toDisplayName };
95
113
  //# sourceMappingURL=BrowserToolsCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserToolsCard.js","sourceRoot":"","sources":["../../../src/side-panel/components/BrowserToolsCard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BrowserToolsCard.js","sourceRoot":"","sources":["../../../src/side-panel/components/BrowserToolsCard.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,wFAAwF;AACxF,MAAM,eAAe,GAAG;IACtB,8DAA8D;IAC9D,QAAQ;IACR,wGAAwG;IACxG,gFAAgF;IAChF,mBAAmB;IACnB,mHAAmH;IACnH,gFAAgF;IAChF,mBAAmB;IACnB,iHAAiH;IACjH,gFAAgF;IAChF,mBAAmB;IACnB,SAAS;IACT,mDAAmD;IACnD,2IAA2I;IAC3I,yIAAyI;IACzI,kDAAkD;IAClD,0JAA0J;IAC1J,gKAAgK;IAChK,QAAQ;CACT,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEX;8DAC8D;AAC9D,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CAC7C,IAAI;KACD,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;KACxB,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAChD,IAAI,CAAC,GAAG,CAAC,CAAC;AAEf,MAAM,gBAAgB,GAAG,CAAC,EACxB,KAAK,EACL,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,iBAAiB,GAAG,KAAK,EACzB,yBAAyB,EACzB,eAAe,GAUhB,EAAE,EAAE;IACH,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAC;IACnF,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,MAAM,CAAqB,EAAE,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/D,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE;QAC1C,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAC5F,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,MAAM,CAAiB,KAAK,CAAC,CAAC;IAExD,MAAM,6BAA6B,GAAG,CAAC,aAA6B,EAAE,EAAE;QACtE,MAAM,SAAS,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC;QAC1C,iBAAiB,CAAC,OAAO,GAAG,iBAAiB,CAAC;QAC9C,yBAAyB,EAAE,CAAC,aAAa,CAAC,CAAC;QAC3C,KAAK,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5D,IAAI,aAAa,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxC,yBAAyB,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC;YACD,eAAe,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,0BAA0B,GAAG,CAAC,QAAgB,EAAE,aAA6B,EAAE,EAAE;QACrF,MAAM,SAAS,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC;QAC1C,aAAa,CAAC,IAAI,CAAC,EAAE;YACnB,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;YAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QACH,KAAK,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACpE,IAAI,aAAa,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxC,aAAa,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,eAAe,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,WAAW;QAC9B,CAAC,CAAC,KAAK,CAAC,MAAM,CACV,CAAC,CAAC,EAAE,CACF,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzD,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1C,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACpD;QACH,CAAC,CAAC,KAAK,CAAC;IACV,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE5E,gEAAgE;IAChE,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,UAAU,GAAkD,EAAE,CAAC;IACrE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;YACxC,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,EAAE,CAAC;gBACZ,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,CACL,MAAC,SAAS,CAAC,IAAI,IAAC,KAAK,EAAC,eAAe,aACnC,MAAC,kBAAkB,CAAC,MAAM,IAAC,SAAS,EAAC,MAAM,aACzC,MAAC,kBAAkB,CAAC,OAAO,IAAC,SAAS,EAAC,kIAAkI,aACtK,KAAC,UAAU,IACT,UAAU,EAAC,SAAS,EACpB,WAAW,EAAC,SAAS,EACrB,QAAQ,EAAC,OAAO,EAChB,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,eAAe,EACxB,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,aAAa,GACrB,EACF,eAAK,SAAS,EAAC,qFAAqF,wBAElG,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,cAAc,qBAEnD,IACJ,EACN,KAAC,WAAW,IAAC,SAAS,EAAC,4DAA4D,GAAG,IAC3D,EAC7B,KAAC,gBAAgB,IAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAC,iCAAiC,GAAG,EAC9F,cAAK,SAAS,EAAC,iCAAiC,YAC9C,KAAC,gBAAgB,IACf,KAAK,EAAE,iBAAiB,EACxB,aAAa,EAAE,6BAA6B,EAC5C,QAAQ,EAAE,eAAe,IAAI,KAAK,EAClC,SAAS,EAAC,8BAA8B,GACxC,GACE,IACoB,EAE3B,WAAW,IAAI,CACd,KAAC,KAAK,IAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,6BAA6B,YAC1D,WAAW,GACN,CACT,EAED,MAAC,SAAS,CAAC,OAAO,IAAC,SAAS,EAAC,wBAAwB,aAClD,UAAU,IAAI,CACb,eAAK,SAAS,EAAC,8CAA8C,aAC1D,YAAY,CAAC,MAAM,UAAM,KAAK,CAAC,MAAM,cAClC,CACP,EACA,WAAW;wBACV,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACtB,0BACE,cAAK,SAAS,EAAC,8CAA8C,YAC3D,eAAM,SAAS,EAAC,kEAAkE,YAAE,KAAK,CAAC,IAAI,GAAQ,GAClG,EACL,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACvB,KAAC,OAAO,IAEN,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EACrC,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO,EAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,EAC/C,QAAQ,EAAE,eAAe,EACzB,kBAAkB,EAAE,0BAA0B,IATzC,IAAI,CAAC,IAAI,CAUd,CACH,CAAC,KAjBM,KAAK,CAAC,IAAI,CAkBd,CACP,CAAC;wBACJ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACvB,KAAC,OAAO,IAEN,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EACrC,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO,EAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,EAC/C,QAAQ,EAAE,eAAe,EACzB,kBAAkB,EAAE,0BAA0B,IATzC,IAAI,CAAC,IAAI,CAUd,CACH,CAAC,IACY,IACL,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
@@ -1,19 +1,12 @@
1
1
  type ConfirmationData = {
2
2
  id: string;
3
3
  tool: string;
4
- domain: string | null;
5
- tabId?: number;
6
- paramsPreview: string;
7
- timeoutMs: number;
8
- /** Timestamp when the confirmation was received in the side panel */
9
- receivedAt: number;
4
+ plugin: string;
5
+ params: Record<string, unknown>;
10
6
  };
11
- type Decision = 'allow_once' | 'allow_always' | 'deny';
12
- type Scope = 'tool_domain' | 'tool_all' | 'domain_all';
13
7
  interface ConfirmationDialogProps {
14
8
  confirmations: ConfirmationData[];
15
- onRespond: (id: string, decision: Decision, scope?: Scope) => void;
16
- onDenyAll: () => void;
9
+ onRespond: (id: string, decision: 'allow' | 'deny', alwaysAllow?: boolean) => void;
17
10
  }
18
11
  /**
19
12
  * Clamps a tracked index to valid bounds after the list shrinks.
@@ -22,7 +15,7 @@ interface ConfirmationDialogProps {
22
15
  * item was the last one, the index clamps down to the new last position.
23
16
  */
24
17
  declare const resolveDisplayIndex: (currentIndex: number, count: number) => number;
25
- declare const ConfirmationDialog: ({ confirmations, onRespond, onDenyAll }: ConfirmationDialogProps) => import("react/jsx-runtime").JSX.Element | null;
18
+ declare const ConfirmationDialog: ({ confirmations, onRespond }: ConfirmationDialogProps) => import("react/jsx-runtime").JSX.Element;
26
19
  export { ConfirmationDialog, resolveDisplayIndex };
27
20
  export type { ConfirmationData };
28
21
  //# sourceMappingURL=ConfirmationDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationDialog.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/ConfirmationDialog.tsx"],"names":[],"mappings":"AAQA,KAAK,gBAAgB,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,QAAQ,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,CAAC;AACvD,KAAK,KAAK,GAAG,aAAa,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvD,UAAU,uBAAuB;IAC/B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAkDD;;;;;GAKG;AACH,QAAA,MAAM,mBAAmB,GAAI,cAAc,MAAM,EAAE,OAAO,MAAM,KAAG,MAA2C,CAAC;AAE/G,QAAA,MAAM,kBAAkB,GAAI,yCAAyC,uBAAuB,mDAmG3F,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"ConfirmationDialog.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/ConfirmationDialog.tsx"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,UAAU,uBAAuB;IAC/B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpF;AAED;;;;;GAKG;AACH,QAAA,MAAM,mBAAmB,GAAI,cAAc,MAAM,EAAE,OAAO,MAAM,KAAG,MAA2C,CAAC;AAE/G,QAAA,MAAM,kBAAkB,GAAI,8BAA8B,uBAAuB,4CA2FhF,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,32 +1,7 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ChevronDown, ShieldAlert } from 'lucide-react';
3
- import { useEffect, useState } from 'react';
4
- import { COUNTDOWN_POLL_INTERVAL_MS } from '../constants.js';
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from 'react';
5
3
  import { Button } from './retro/Button.js';
6
- import { Menu } from './retro/Menu.js';
7
- import { Progress } from './retro/Progress.js';
8
- import { Text } from './retro/Text.js';
9
- /** Renders a countdown bar and seconds remaining based on the confirmation timeout */
10
- const CountdownBar = ({ timeoutMs, receivedAt }) => {
11
- const [remaining, setRemaining] = useState(timeoutMs);
12
- useEffect(() => {
13
- const update = () => {
14
- const elapsed = Date.now() - receivedAt;
15
- const newRemaining = Math.max(0, timeoutMs - elapsed);
16
- setRemaining(newRemaining);
17
- if (newRemaining === 0)
18
- clearInterval(id);
19
- };
20
- const id = setInterval(update, COUNTDOWN_POLL_INTERVAL_MS);
21
- update();
22
- return () => clearInterval(id);
23
- }, [timeoutMs, receivedAt]);
24
- const seconds = Math.ceil(remaining / 1000);
25
- const fraction = remaining / timeoutMs;
26
- return (_jsxs("div", { className: "mt-2 flex items-center gap-2", children: [_jsx(Progress, { value: fraction * 100, className: "flex-1", indicatorClassName: fraction > 0.33 ? 'bg-accent-foreground' : 'bg-destructive' }), _jsxs("span", { className: "font-mono text-muted-foreground text-xs tabular-nums", children: [seconds, "s"] })] }));
27
- };
28
- /** Renders the "Allow Always" button with a scope dropdown */
29
- const AllowAlwaysButton = ({ domain, onSelect }) => (_jsxs(Menu, { children: [_jsx(Menu.Trigger, { asChild: true, children: _jsxs(Button, { size: "sm", variant: "outline", className: "w-full gap-1 text-xs", children: ["Allow Always", _jsx(ChevronDown, { className: "h-3 w-3" })] }) }), _jsxs(Menu.Content, { side: "top", align: "end", children: [domain && _jsx(Menu.Item, { onSelect: () => onSelect('tool_domain'), children: "For this tool on this domain" }), _jsx(Menu.Item, { onSelect: () => onSelect('tool_all'), children: "For this tool everywhere" }), domain && _jsxs(Menu.Item, { onSelect: () => onSelect('domain_all'), children: ["For all tools on ", domain] })] })] }));
4
+ import { Dialog } from './retro/Dialog.js';
30
5
  /**
31
6
  * Clamps a tracked index to valid bounds after the list shrinks.
32
7
  * When the item at `currentIndex` is removed, the index stays the same,
@@ -34,14 +9,28 @@ const AllowAlwaysButton = ({ domain, onSelect }) => (_jsxs(Menu, { children: [_j
34
9
  * item was the last one, the index clamps down to the new last position.
35
10
  */
36
11
  const resolveDisplayIndex = (currentIndex, count) => Math.min(currentIndex, count - 1);
37
- const ConfirmationDialog = ({ confirmations, onRespond, onDenyAll }) => {
12
+ const ConfirmationDialog = ({ confirmations, onRespond }) => {
38
13
  const [currentIndex, setCurrentIndex] = useState(0);
39
- const safeIndex = resolveDisplayIndex(currentIndex, confirmations.length);
40
- const current = confirmations[safeIndex];
41
- if (!current)
42
- return null;
14
+ const [alwaysAllow, setAlwaysAllow] = useState(false);
43
15
  const count = confirmations.length;
44
- return (_jsx("div", { className: "mx-4 mt-2", role: "alert", children: _jsxs("div", { className: "rounded border-2 border-accent-foreground bg-accent/30 shadow-md", children: [_jsxs("div", { className: "flex items-center gap-2 border-accent-foreground border-b-2 px-3 py-2", children: [_jsx(ShieldAlert, { className: "h-4 w-4 shrink-0 text-accent-foreground" }), _jsx(Text, { as: "h6", className: "flex-1 text-sm", children: "Approval Required" }), count > 1 && (_jsxs("span", { className: "font-mono text-muted-foreground text-xs", children: [safeIndex + 1, " of ", count] }))] }), _jsxs("div", { className: "space-y-2 px-3 py-2", children: [_jsxs("div", { children: [_jsx("span", { className: "font-sans text-muted-foreground text-xs", children: "Tool" }), _jsx("div", { className: "font-mono text-sm", children: current.tool })] }), current.domain && (_jsxs("div", { children: [_jsx("span", { className: "font-sans text-muted-foreground text-xs", children: "Domain" }), _jsx("div", { className: "font-sans text-sm", children: current.domain })] })), current.paramsPreview && (_jsxs("div", { children: [_jsx("span", { className: "font-sans text-muted-foreground text-xs", children: "Parameters" }), _jsx("pre", { className: "mt-0.5 max-h-20 overflow-auto rounded border border-border bg-card px-2 py-1 font-mono text-xs leading-tight", children: current.paramsPreview })] })), _jsx(CountdownBar, { timeoutMs: current.timeoutMs, receivedAt: current.receivedAt })] }), _jsxs("div", { className: "flex flex-col gap-1.5 border-accent-foreground border-t-2 py-2 pr-4 pl-3", children: [_jsx(Button, { size: "sm", className: "w-full", onClick: () => onRespond(current.id, 'allow_once'), children: "Allow Once" }), _jsx(AllowAlwaysButton, { domain: current.domain, onSelect: scope => onRespond(current.id, 'allow_always', scope) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { size: "sm", variant: "outline", className: "w-full text-destructive text-xs", onClick: () => onRespond(current.id, 'deny'), children: "Deny" }), count > 1 && (_jsx(Button, { size: "sm", variant: "outline", className: "w-full text-destructive text-xs", onClick: onDenyAll, children: "Deny All" }))] })] }), count > 1 && (_jsxs("div", { className: "flex justify-center gap-2 border-border border-t px-3 py-1", children: [_jsx("button", { type: "button", className: "cursor-pointer font-mono text-muted-foreground text-xs hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40", disabled: safeIndex === 0, onClick: () => setCurrentIndex(i => i - 1), children: "prev" }), _jsx("button", { type: "button", className: "cursor-pointer font-mono text-muted-foreground text-xs hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40", disabled: safeIndex >= count - 1, onClick: () => setCurrentIndex(i => i + 1), children: "next" })] }))] }) }));
16
+ const safeIndex = resolveDisplayIndex(currentIndex, count);
17
+ const current = confirmations[safeIndex];
18
+ const handleAllow = () => {
19
+ if (!current)
20
+ return;
21
+ onRespond(current.id, 'allow', alwaysAllow || undefined);
22
+ setAlwaysAllow(false);
23
+ };
24
+ const handleDeny = () => {
25
+ if (!current)
26
+ return;
27
+ onRespond(current.id, 'deny');
28
+ setAlwaysAllow(false);
29
+ };
30
+ return (_jsx(Dialog, { open: count > 0, onOpenChange: open => {
31
+ if (!open)
32
+ handleDeny();
33
+ }, children: _jsxs(Dialog.Content, { onInteractOutside: e => e.preventDefault(), onEscapeKeyDown: e => e.preventDefault(), children: [_jsxs(Dialog.Header, { children: [_jsx("span", { className: "font-head text-sm", children: "Approve Tool" }), count > 1 && (_jsxs("span", { className: "font-mono text-xs", children: [safeIndex + 1, " of ", count] }))] }), _jsx(Dialog.Body, { className: "space-y-2", children: current && (_jsxs(_Fragment, { children: [_jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground text-xs", children: "Tool" }), _jsx("div", { className: "font-mono text-sm", children: current.tool })] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground text-xs", children: "Plugin" }), _jsx("div", { className: "font-sans text-sm", children: current.plugin })] }), current.params && Object.keys(current.params).length > 0 && (_jsxs("details", { className: "mt-2", children: [_jsx("summary", { className: "cursor-pointer text-xs", children: "Parameters" }), _jsx("pre", { className: "mt-1 max-h-40 overflow-auto rounded border border-border bg-card px-2 py-1 font-mono text-xs leading-tight", children: JSON.stringify(current.params, null, 2) })] })), _jsxs("label", { className: "mt-3 flex items-center gap-2", children: [_jsx("input", { type: "checkbox", checked: alwaysAllow, onChange: e => setAlwaysAllow(e.target.checked) }), _jsx("span", { className: "text-sm", children: "Always allow this tool" })] }), _jsx("span", { className: "text-muted-foreground text-xs", children: "Sets permission to Auto" })] })) }), _jsxs(Dialog.Footer, { children: [count > 1 && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "mr-auto cursor-pointer font-mono text-muted-foreground text-xs hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40", disabled: safeIndex === 0, onClick: () => setCurrentIndex(i => i - 1), children: "prev" }), _jsx("button", { type: "button", className: "mr-2 cursor-pointer font-mono text-muted-foreground text-xs hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40", disabled: safeIndex >= count - 1, onClick: () => setCurrentIndex(i => i + 1), children: "next" })] })), _jsx(Button, { size: "sm", variant: "outline", onClick: handleDeny, children: "Deny" }), _jsx(Button, { size: "sm", onClick: handleAllow, children: "Allow" })] })] }) }));
45
34
  };
46
35
  export { ConfirmationDialog, resolveDisplayIndex };
47
36
  //# sourceMappingURL=ConfirmationDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationDialog.js","sourceRoot":"","sources":["../../../src/side-panel/components/ConfirmationDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfirmationDialog.js","sourceRoot":"","sources":["../../../src/side-panel/components/ConfirmationDialog.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NpmPluginCard.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/NpmPluginCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAQpD,UAAU,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,QAAA,MAAM,aAAa;+CAA8C,kBAAkB;;CAsClF,CAAC;AAIF,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"NpmPluginCard.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/NpmPluginCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAQpD,UAAU,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,QAAA,MAAM,aAAa;+CAA8C,kBAAkB;;CAiClF,CAAC;AAIF,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -7,7 +7,7 @@ import { Button } from './retro/Button';
7
7
  import { Loader } from './retro/Loader';
8
8
  const NpmPluginCard = ({ plugin, installing, error, onInstall }) => {
9
9
  const displayName = extractShortName(plugin.name);
10
- return (_jsxs("div", { className: "space-y-2 rounded border-2 border-border bg-card p-3 shadow-md transition-all hover:shadow-sm", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(PluginIcon, { pluginName: plugin.name, displayName: displayName, tabState: "closed", size: 28 }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-1", children: [_jsx("span", { className: "truncate font-head text-foreground text-sm", children: displayName }), _jsx(Badge, { variant: "default", size: "sm", children: plugin.version }), plugin.isOfficial && (_jsx(Badge, { size: "sm", className: "bg-primary/20 text-primary-foreground", children: "OFFICIAL" }))] }), _jsx("span", { className: "truncate font-sans text-muted-foreground text-xs", children: plugin.author })] }), _jsx(Button, { size: "sm", variant: "default", disabled: installing, onClick: onInstall, className: "shrink-0", children: installing ? _jsx(Loader, { size: "sm" }) : 'Install' })] }), _jsx("p", { className: "line-clamp-2 text-muted-foreground text-xs", children: plugin.description }), error && (_jsx(Alert, { status: "error", className: "px-3 py-2 text-xs", children: error }))] }));
10
+ return (_jsxs("div", { className: "space-y-2 rounded border-2 border-border bg-card p-3 shadow-md transition-all hover:shadow-sm", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(PluginIcon, { pluginName: plugin.name, displayName: displayName, tabState: "closed", size: 28 }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-1", children: [_jsx("span", { className: "truncate font-head text-foreground text-sm", children: displayName }), _jsx(Badge, { variant: "default", size: "sm", children: plugin.version })] }), _jsx("span", { className: "truncate font-sans text-muted-foreground text-xs", children: plugin.author })] }), _jsx(Button, { size: "sm", variant: "default", disabled: installing, onClick: onInstall, className: "shrink-0", children: installing ? _jsx(Loader, { size: "sm" }) : 'Install' })] }), _jsx("p", { className: "line-clamp-2 text-muted-foreground text-xs", children: plugin.description }), error && (_jsx(Alert, { status: "error", className: "px-3 py-2 text-xs", children: error }))] }));
11
11
  };
12
12
  NpmPluginCard.displayName = 'NpmPluginCard';
13
13
  export { NpmPluginCard };
@@ -1 +1 @@
1
- {"version":3,"file":"NpmPluginCard.js","sourceRoot":"","sources":["../../../src/side-panel/components/NpmPluginCard.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AASxC,MAAM,aAAa,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAsB,EAAE,EAAE;IACrF,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAElD,OAAO,CACL,eAAK,SAAS,EAAC,+FAA+F,aAE5G,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,UAAU,IAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAC,QAAQ,EAAC,IAAI,EAAE,EAAE,GAAI,EAC7F,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,4CAA4C,YAAE,WAAW,GAAQ,EACjF,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,YAC/B,MAAM,CAAC,OAAO,GACT,EACP,MAAM,CAAC,UAAU,IAAI,CACpB,KAAC,KAAK,IAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,uCAAuC,yBAE1D,CACT,IACG,EACN,eAAM,SAAS,EAAC,kDAAkD,YAAE,MAAM,CAAC,MAAM,GAAQ,IACrF,EACN,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAC,UAAU,YAC/F,UAAU,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,GACvC,IACL,EAGN,YAAG,SAAS,EAAC,4CAA4C,YAAE,MAAM,CAAC,WAAW,GAAK,EAGjF,KAAK,IAAI,CACR,KAAC,KAAK,IAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,mBAAmB,YAChD,KAAK,GACA,CACT,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"NpmPluginCard.js","sourceRoot":"","sources":["../../../src/side-panel/components/NpmPluginCard.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AASxC,MAAM,aAAa,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAsB,EAAE,EAAE;IACrF,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAElD,OAAO,CACL,eAAK,SAAS,EAAC,+FAA+F,aAE5G,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,UAAU,IAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAC,QAAQ,EAAC,IAAI,EAAE,EAAE,GAAI,EAC7F,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,4CAA4C,YAAE,WAAW,GAAQ,EACjF,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,YAC/B,MAAM,CAAC,OAAO,GACT,IACJ,EACN,eAAM,SAAS,EAAC,kDAAkD,YAAE,MAAM,CAAC,MAAM,GAAQ,IACrF,EACN,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAC,UAAU,YAC/F,UAAU,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,GACvC,IACL,EAGN,YAAG,SAAS,EAAC,4CAA4C,YAAE,MAAM,CAAC,WAAW,GAAK,EAGjF,KAAK,IAAI,CACR,KAAC,KAAK,IAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,mBAAmB,YAChD,KAAK,GACA,CACT,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { Dispatch, SetStateAction } from 'react';
2
2
  import type { PluginState } from '../bridge.js';
3
- declare const PluginCard: ({ plugin, activeTools, setPlugins, toolFilter, onUpdate, onRemove, updatingPlugin, removingPlugin, actionError, }: {
3
+ declare const PluginCard: ({ plugin, activeTools, setPlugins, toolFilter, onUpdate, onRemove, updatingPlugin, removingPlugin, actionError, skipPermissions, }: {
4
4
  plugin: PluginState;
5
5
  activeTools: Set<string>;
6
6
  setPlugins: Dispatch<SetStateAction<PluginState[]>>;
@@ -10,6 +10,7 @@ declare const PluginCard: ({ plugin, activeTools, setPlugins, toolFilter, onUpda
10
10
  updatingPlugin?: boolean;
11
11
  removingPlugin?: boolean;
12
12
  actionError?: string | null;
13
+ skipPermissions?: boolean;
13
14
  }) => import("react/jsx-runtime").JSX.Element;
14
15
  export { PluginCard };
15
16
  //# sourceMappingURL=PluginCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PluginCard.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/PluginCard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAY7D,QAAA,MAAM,UAAU,GAAI,mHAUjB;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,4CAuOA,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"PluginCard.d.ts","sourceRoot":"","sources":["../../../src/side-panel/components/PluginCard.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAW7D,QAAA,MAAM,UAAU,GAAI,oIAWjB;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,4CAuMA,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}