@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.
- package/dist/background-message-handlers.d.ts +8 -14
- package/dist/background-message-handlers.d.ts.map +1 -1
- package/dist/background-message-handlers.js +50 -156
- package/dist/background-message-handlers.js.map +1 -1
- package/dist/background.js +173 -216
- package/dist/confirmation-badge.d.ts +3 -24
- package/dist/confirmation-badge.d.ts.map +1 -1
- package/dist/confirmation-badge.js +13 -98
- package/dist/confirmation-badge.js.map +1 -1
- package/dist/extension-messages.d.ts +17 -34
- package/dist/extension-messages.d.ts.map +1 -1
- package/dist/message-router.d.ts +2 -2
- package/dist/message-router.d.ts.map +1 -1
- package/dist/message-router.js +22 -10
- package/dist/message-router.js.map +1 -1
- package/dist/offscreen/index.js +3 -5
- package/dist/offscreen/index.js.map +1 -1
- package/dist/plugin-storage.js +3 -3
- package/dist/plugin-storage.js.map +1 -1
- package/dist/server-state-cache.d.ts +12 -6
- package/dist/server-state-cache.d.ts.map +1 -1
- package/dist/server-state-cache.js +51 -21
- package/dist/server-state-cache.js.map +1 -1
- package/dist/side-panel/App.d.ts.map +1 -1
- package/dist/side-panel/App.js +19 -25
- package/dist/side-panel/App.js.map +1 -1
- package/dist/side-panel/bridge.d.ts +13 -18
- package/dist/side-panel/bridge.d.ts.map +1 -1
- package/dist/side-panel/bridge.js +9 -13
- package/dist/side-panel/bridge.js.map +1 -1
- package/dist/side-panel/components/BrowserToolsCard.d.ts +5 -1
- package/dist/side-panel/components/BrowserToolsCard.d.ts.map +1 -1
- package/dist/side-panel/components/BrowserToolsCard.js +40 -22
- package/dist/side-panel/components/BrowserToolsCard.js.map +1 -1
- package/dist/side-panel/components/ConfirmationDialog.d.ts +4 -11
- package/dist/side-panel/components/ConfirmationDialog.d.ts.map +1 -1
- package/dist/side-panel/components/ConfirmationDialog.js +23 -34
- package/dist/side-panel/components/ConfirmationDialog.js.map +1 -1
- package/dist/side-panel/components/NpmPluginCard.d.ts.map +1 -1
- package/dist/side-panel/components/NpmPluginCard.js +1 -1
- package/dist/side-panel/components/NpmPluginCard.js.map +1 -1
- package/dist/side-panel/components/PluginCard.d.ts +2 -1
- package/dist/side-panel/components/PluginCard.d.ts.map +1 -1
- package/dist/side-panel/components/PluginCard.js +18 -40
- package/dist/side-panel/components/PluginCard.js.map +1 -1
- package/dist/side-panel/components/PluginIcon.d.ts +1 -2
- package/dist/side-panel/components/PluginIcon.d.ts.map +1 -1
- package/dist/side-panel/components/PluginIcon.js +36 -41
- package/dist/side-panel/components/PluginIcon.js.map +1 -1
- package/dist/side-panel/components/PluginList.d.ts +2 -1
- package/dist/side-panel/components/PluginList.d.ts.map +1 -1
- package/dist/side-panel/components/PluginList.js +2 -2
- package/dist/side-panel/components/PluginList.js.map +1 -1
- package/dist/side-panel/components/PluginMenu.d.ts.map +1 -1
- package/dist/side-panel/components/PluginMenu.js +1 -1
- package/dist/side-panel/components/PluginMenu.js.map +1 -1
- package/dist/side-panel/components/SearchResults.d.ts +2 -1
- package/dist/side-panel/components/SearchResults.d.ts.map +1 -1
- package/dist/side-panel/components/SearchResults.js +2 -2
- package/dist/side-panel/components/SearchResults.js.map +1 -1
- package/dist/side-panel/components/ToolIcon.d.ts.map +1 -1
- package/dist/side-panel/components/ToolIcon.js +9 -2
- package/dist/side-panel/components/ToolIcon.js.map +1 -1
- package/dist/side-panel/components/ToolRow.d.ts +14 -4
- package/dist/side-panel/components/ToolRow.d.ts.map +1 -1
- package/dist/side-panel/components/ToolRow.js +13 -3
- package/dist/side-panel/components/ToolRow.js.map +1 -1
- package/dist/side-panel/components/retro/Select.d.ts +13 -0
- package/dist/side-panel/components/retro/Select.d.ts.map +1 -0
- package/dist/side-panel/components/retro/Select.js +27 -0
- package/dist/side-panel/components/retro/Select.js.map +1 -0
- package/dist/side-panel/constants.d.ts +0 -2
- package/dist/side-panel/constants.d.ts.map +1 -1
- package/dist/side-panel/constants.js +0 -2
- package/dist/side-panel/constants.js.map +1 -1
- package/dist/side-panel/hooks/useServerNotifications.d.ts +1 -3
- package/dist/side-panel/hooks/useServerNotifications.d.ts.map +1 -1
- package/dist/side-panel/hooks/useServerNotifications.js +13 -41
- package/dist/side-panel/hooks/useServerNotifications.js.map +1 -1
- package/dist/side-panel/side-panel.js +5715 -4723
- package/dist/side-panel/styles.css +1 -1
- package/dist/tool-dispatch.d.ts +2 -1
- package/dist/tool-dispatch.d.ts.map +1 -1
- package/dist/tool-dispatch.js +4 -6
- package/dist/tool-dispatch.js.map +1 -1
- package/manifest.json +1 -1
- 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
|
-
|
|
42
|
-
|
|
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
|
-
/**
|
|
73
|
-
declare const
|
|
74
|
-
/**
|
|
75
|
-
declare const
|
|
76
|
-
/**
|
|
77
|
-
declare const
|
|
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: "
|
|
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,
|
|
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;
|
|
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
|
-
/**
|
|
47
|
-
const
|
|
48
|
-
/**
|
|
49
|
-
const
|
|
50
|
-
/**
|
|
51
|
-
const
|
|
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,
|
|
61
|
+
const sendConfirmationResponse = (id, decision, alwaysAllow) => {
|
|
66
62
|
chrome.runtime
|
|
67
63
|
.sendMessage({
|
|
68
64
|
type: 'sp:confirmationResponse',
|
|
69
|
-
data: { id, decision, ...(
|
|
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,
|
|
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,
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/side-panel/bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"
|
|
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 {
|
|
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 {
|
|
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
|
|
55
|
-
const
|
|
53
|
+
const preBrowserPermRef = useRef('off');
|
|
54
|
+
const handleBrowserPermissionChange = (newPermission) => {
|
|
56
55
|
const myVersion = ++toggleCounter.current;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
60
|
+
onBrowserPermissionChange?.(preBrowserPermRef.current);
|
|
64
61
|
}
|
|
65
|
-
showToggleError('Failed to
|
|
62
|
+
showToggleError('Failed to update browser permission');
|
|
66
63
|
});
|
|
67
64
|
};
|
|
68
|
-
const
|
|
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,
|
|
69
|
+
return prev.map(t => (t.name === toolName ? { ...t, permission: newPermission } : t));
|
|
74
70
|
});
|
|
75
|
-
void
|
|
71
|
+
void setToolPermission('browser', toolName, newPermission).catch(() => {
|
|
76
72
|
if (toggleCounter.current === myVersion) {
|
|
77
73
|
onToolsChange(() => preToggleRef.current);
|
|
78
74
|
}
|
|
79
|
-
showToggleError(`Failed to
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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":";
|
|
1
|
+
{"version":3,"file":"BrowserToolsCard.js","sourceRoot":"","sources":["../../../src/side-panel/components/BrowserToolsCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
type ConfirmationData = {
|
|
2
2
|
id: string;
|
|
3
3
|
tool: string;
|
|
4
|
-
|
|
5
|
-
|
|
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:
|
|
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
|
|
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":"
|
|
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 {
|
|
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 {
|
|
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
|
|
12
|
+
const ConfirmationDialog = ({ confirmations, onRespond }) => {
|
|
38
13
|
const [currentIndex, setCurrentIndex] = useState(0);
|
|
39
|
-
const
|
|
40
|
-
const current = confirmations[safeIndex];
|
|
41
|
-
if (!current)
|
|
42
|
-
return null;
|
|
14
|
+
const [alwaysAllow, setAlwaysAllow] = useState(false);
|
|
43
15
|
const count = confirmations.length;
|
|
44
|
-
|
|
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":";AAAA,OAAO,EAAE,
|
|
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;;
|
|
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 })
|
|
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,
|
|
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":"
|
|
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"}
|